ChkKey: ;read ext. ASCII key code-->d0.0=no key!auto-fixes shift etc.
moveq #0,d0
lea Key(PC),a1
btst #3,$1f-2(a6)
beq.s .End
lea $bfed01,a0
btst #3,(a0)
beq.s .End ;key pressed down?
clr.b (a0) ;nec?
moveq #0,d1
move.b -$100(a0),d1 ;read key
move.b #$50,$100(a0) ;output+force load (start handshake)
lea 6-2(a6),a2 ;<-for spd/Size only
move.b (a2),d2 ;wait for 75 microsecs=60 or so cycles
not.b d1
lsr.b #1,d1
bcc.s .Pres
moveq #-1,d0 ;neg=released!
.Pres: move.w Shift(PC),d3
bpl.s .Shift
move.w Caps(PC),d3
bmi.s .NoSh
.Shift: add.w #KeyTblS-KeyTbl,d1
.NoSh: move.b KeyTbl-Key(a1,d1.w),d0 ;fetch ASCII equivalent
moveq #0,d1
move.b d0,d1
bpl.s .WLup1 ;special key is neg!
addq.b #5,d1 ;less than -5?
bmi.s .WLup1 ;then no special key
add.w d1,d1
move.w d0,2(a1,d1.w) ;put state in corr. key-slot (-=OFF!)
.WLup1: cmp.b (a2),d2 ;QikFix:wait AT LEAST 1 scanline
beq.s .WLup1
move.b (a2),d2 ;make this into an int later!
.WLup2: cmp.b (a2),d2
beq.s .WLup2
move.b #$10,$100(a0) ;input+force load (handshake done)
move.w #8,$9c-2(a6) ;clear lev2-intreq
.End: move.w d0,(a1)
RTS ;d0/[key]=Ascii key
Key: dc.w 0
Caps: dc.w -1
Amiga: dc.w -1 ;special keys state
Alt: dc.w -1 ;-=OFF(!)
Shift: dc.w -1
Ctrl: dc.w -1 ;DONT SEP ^5!
KeyTbl: ;clr unused keybytes for final opti.
dc.b "`1234567890-=\",0,"0"
dc.b "qwertyuiop[]",0,"123"
dc.b "asdfghjkl;'",0,0,"456"
dc.b 0,"zxcvbnm,./",0,".789"
dc.b " ",8,9,13,13,27,127,0,0,0,"-",0,31,30,29,28 ;28-31=cursor keys
dc.b -7,-8,-9,-10,-11,-12,-13,-14,-15,-16,"()/*+",-6 ;F-keys,Help
dc.b -2,-2,-5,-1,-3,-3,-4,-4 ;Shift,Ctrl,Alt,
dc.b 128,129,130,131,132,133,134,135
dc.b 136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151
KeyTblS: ;SHIFTED
dc.b "~!@#$%^&*()_+|",0,"0"
dc.b "QWERTYUIOP{}",0,"123"
dc.b "ASDFGHJKL:",34,0,0,"456"
dc.b 0,"ZXCVBNM<>?",0,".789"
dc.b " ",8,9,13,13,27,127,0,0,0,"-",0,31,30,29,28 ;28-31=cursor keys
dc.b -7,-8,-9,-10,-11,-12,-13,-14,-15,-16,"()/*+",-6 ;F-keys,Help
dc.b -2,-2,-5,-1,-3,-3,-4,-4 ;Shift,Ctrl,Alt,
dc.b 128,129,130,131,132,133,134,135
dc.b 136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151