
;-------------------------------------------- ;Masque pour la lecture du clavier ;******************************************** ;******************************************** ;masque une ligne du clavier ;-------------------------------------------- ;d0=ligne -> d0=réponse ;******************************************** masque: move.l d1,-(a7) move.w #$FFFE,d1 rol.w d0,d1 clr.w d0 move.w d1,($600018) nop nop nop nop nop nop nop nop nop nop nop nop move.b ($60001B),d0 move.l (a7)+,d1 rts
key_test MACRO
btst.b #\2,-2-2*\1(a7)
bne.s \@0
bset.b #\3,d0
\@0
ENDM
; short getkey ( void );
; short wait_a_key ( void );
; void wait_no_key ( void );
;getkey
; input: nothing (but buffers in datas)
; output: d0.w
; destroy: d0-d2/a0
; gets keys... returns d0
;
; | key (92/89) | d0.w |
; +-----------------------+---------------+
; | none | 0 |
; | up | +1 |
; | down | +2 |
; | right | +4 |
; | left | +8 |
; | esc | +16 |
; | enter/2nd | +32 |
; | hand | +32 |
;
wait_no_key:
bsr.s getkey
dbra.s d0,wait_no_key
rts
wait_a_key:
bsr.s getkey
tst.w d0
beq.s wait_a_key
rts
getkey:
ScanKbd: ; keyScan par ExtendeD (modified... a lot)
moveq.l #9,d0
moveq.l #-2,d2
movea.l #$600018,a0
SaveRow:
move.w d2,(a0)
moveq.l #11,d1 ; d1=0
WaitKeys:
dbra.s d1,WaitKeys ; copy the ports to a virtual keybord table
move.b 3(a0),-(a7) ; a7 will we incremented of 2 !!
rol.w #1,d2
dbra.s d0,SaveRow
lea.l 20(a7),a7 ; restore the stack
moveq.l #0,d0
ifeq _fargo
tst.w __calculator - __relation (a4)
beq.s enter_test_89
endif
enter_test_92:
key_test 0,3,5 ; affect to each key its number
key_test 6,6,5
key_test 9,1,5
up_test_92:
key_test 0,5,0
down_test_92:
key_test 0,7,1
right_test_92:
key_test 0,6,2
left_test_92:
key_test 0,4,3
esc_test_92:
key_test 8,6,4
rts
ifeq _fargo
enter_test_89:
key_test 1,0,5
key_test 0,4,5
up_test_89:
key_test 0,0,0
down_test_89:
key_test 0,2,1
right_test_89:
key_test 0,3,2
left_test_89:
key_test 0,1,3
esc_test_89:
key_test 6,0,4
getkey_end:
rts
PpHd
: Et puis il n'y a pas assez de nop.