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