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.