HLT instruction question

Question about which tools to use, bugs, the best way to implement a function, etc should go here. Don't forget to see if your question is answered in the wiki first! When in doubt post here.
Post Reply
thekeyboardbum
Posts: 4
Joined: Sat Jun 30, 2007 10:11 pm

HLT instruction question

Post by thekeyboardbum »

Hey whats up? Currently i am trying to implement a way to "wait for a keypress to continue"

Since the code can explain it better then i can, well here it is haha

Code: Select all

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;    The Kew Keyboard ISR calls the old keyboard ISR   and ;;
;;    updates bit 0 at 9ffff  to 1 when a key is pressed  ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
NewKeyboardISR:
   push es
   push ax
   mov ax,infoSegment ;infosegment:0 is original ISR for keyboard
   mov es,ax
   or byte [es:deviceStatus],0x1 ;changes to 1 whenever keyboard is pressed
   mov ax,900
   mov es,ax
   pushf
   call far [es:0] ;calls original keyboard ISR
   pop ax
   pop es
   iret

   
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Below is the main interrupt accessed by int 60h       ;;
;; currently it's only function is to wait till a key   ;;
;; is pressed before it returns                       ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MainInt:
   mov WORD [messagePointer],(kerneladdr+(PressAKey-Kernel))
   call 0:biosPrintString
   push ax
   push es
   mov ax,infoSegment
   mov es,ax
   and byte [es:deviceStatus], 0xFE
   .loop
      hlt
      mov byte al,[es:deviceStatus]
      and al,1
      cmp al,1
      jne .loop
   pop es
   pop ax
   iret


So basically when interrupt 0x60 is called it waits till my new keyboardISR updates a bit saying a key was pressed. The problem is the program hangs =/ . I don't think its bochs either. Any help would be much appreciated =). - Happy Coding

*edit* hm i guess i could make a keyboardISR and have it jump to w/e address when a key is pressed...but i'm still wondering why this hangs XD
Pyrofan1
Member
Member
Posts: 234
Joined: Sun Apr 29, 2007 1:13 am

Post by Pyrofan1 »

hlt halts the CPU
User avatar
inflater
Member
Member
Posts: 1309
Joined: Thu Sep 28, 2006 10:32 am
Location: Slovakia
Contact:

Post by inflater »

HLT halts the CPU like I was told, until a hardware interrupt occurs, so in the keyboard handler it's OK. If used with CLI and HLT, this should halt the system completely :mrgreen: - Try giving STI in the very beginning of your int 0x60 ISR. I had a CLI in mine and it halted the system completely, because it waited for the keyboard interrupt when interrupts were disabled :lol:

inflater
My web site: http://inflater.wz.cz (Slovak)
Derrick operating system: http://derrick.xf.cz (Slovak and English :P)
thekeyboardbum
Posts: 4
Joined: Sat Jun 30, 2007 10:11 pm

Post by thekeyboardbum »

Hm still no luck...
*edit*

Code: Select all

mov ax,900 

should of been

Code: Select all

mov ax,0x900 

:oops: haha i hate that when it happens

But you where right about the sti ;)
User avatar
Colonel Kernel
Member
Member
Posts: 1437
Joined: Tue Oct 17, 2006 6:06 pm
Location: Vancouver, BC, Canada
Contact:

Post by Colonel Kernel »

@Mods: Please move this to the OS Development forum... Thanks.
Top three reasons why my OS project died:
  1. Too much overtime at work
  2. Got married
  3. My brain got stuck in an infinite loop while trying to design the memory manager
Don't let this happen to you!
Post Reply