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