A89: Stron89, again!!!


[Prev][Next][Index][Thread]

A89: Stron89, again!!!




Phew...FINALS ARE OVER!!!...That means I have a whole month off from school to
finally do some more assembly...So I am going to refer back to some of my old
questions that I didn't quite understand the first time around...However, I do
have less questions than last time :)
---------------------------Program begins here-----------------------------

 kbd_arrows	EQU		%111111110
 kbd_column5	EQU		%111111101
 kbd_column4	EQU		%111111011
 kbd_column3	EQU		%111110111
 kbd_column2	EQU		%111101111
 kbd_column1	EQU		%111011111
 kbd_exitkey	EQU		%110111111
 
 dir_left	EQU		0
 dir_up		EQU		1
 dir_right	EQU		2
 dir_down	EQU		3
 
 _main:
 	bsr		WaitKBD
 
So basically what equ does it let a variable equal something?
   like storing something in a mem. position?

 
 ; ** Wait for all buttons to be released
 WaitKBD:
 	move.w	#$00,d0					; set keymask to read all keys
 	bsr		ReadKBD
 	cmp.b	#$ff,d0					; check to see if any key is pressed
 	bne		WaitKBD					; if so, start over
 	rts

Now i'm not sure why d1 is "saved" if nothing was put in d1 yet???
oh i think i got it...this is so the same routine can be used later on by a
new mask to check for a different key press...right???
the first time the routine is executed it is to check if anything is pressed
right?
ahhh...i'm starting to see the light!!!


 ReadKBD:
 	move.w	d1,-(a7)
 	move.w	d0,d1
 	move.w  #$700,d0                    ; Disable interrupts, saving old in mask
 in d0
     trap    #1
 
 	move.w	d1,($600018)			; set keymask
   	nop								; pause so TI89 has
 time to apply the mask
   	nop
   	nop
   	nop
 	nop
   	nop
   	nop
   	nop
   	nop
   	nop
 	nop
   	nop
 	nop
   	nop
 	nop
   	nop
 	clr.w	d1
   	move.b	($60001b),d1			; get keys hit
 	trap	#1
 	move.w	d1,d0  	
 	move.w	(a7)+,d1
 	rts
 
Someone gave me a small explanation of the trap command before but It didn't
quite help me :(
regarding trap:
1.  Why is $700 put in d0?
2.  What does moving $700 in d0 have to do with trap:Is there documentation on
all trap uses?
3.  It says "Disable interrupts, saving old in mask".  What interrupts are
being disabled?
4.  What is the "old in mask"

So 0 is put into ($600018) because thats the address of the keyboard?  so your
basically resetting it to later check what new value is stored there?

nop gives it time to detect a key press?

now a new value (if a key was pressed) is put into ,($60001b).

again with the trap 1 thing...but why is there not a value put in d0 again
like $700...like last time???

now rtsing back to waitkbd...

 WaitKBD:
 	move.w	#$00,d0					; set keymask to read all keys
 	bsr		ReadKBD
 	cmp.b	#$ff,d0					; check to see if any key is pressed
 	bne		WaitKBD					; if so, start over
 	rts
 
if 0 was put in (600018) before then how will it contain $ff if nothing was
pressed?

did the author actually mean" if not, start over" instead of if so, start
over?


wow...asm is really hard...I hope there is hope for even the very
inexperienced...well i'll know at the end of the month...

-THANKS-
     -Steve-


Follow-Ups: