Page 1 of 1

HLT instruction question

Posted: Sat Jul 14, 2007 2:16 am
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

Posted: Sat Jul 14, 2007 2:44 am
by Pyrofan1
hlt halts the CPU

Posted: Sat Jul 14, 2007 2:55 am
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

Posted: Sat Jul 14, 2007 12:19 pm
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 ;)

Posted: Sat Jul 14, 2007 10:23 pm
by Colonel Kernel
@Mods: Please move this to the OS Development forum... Thanks.