******************************************************************************* * keyboard.device.S Written by Readysoft. * Copyright 1992,1993,1994 RS. All rights reserved. 1992.06.08.-1994.05.18. * v1.24. ******************************************************************************* ******************************************************************************* * Macros ******************************************************************************* ;------------------------------------------------------------------------------ ; KeyboradName Macro ;------------------------------------------------------------------------------ KBD.NAM MACRO DC.B 'keyboard.device',0 EVEN ENDM ******************************************************************************* * DEV Macro ******************************************************************************* KBD.DEV MACRO ******************************************************************************* * Constant Definitions ******************************************************************************* ;------------------------------------------------------------------------------ ; Direction Bit Definitions ;------------------------------------------------------------------------------ kbd_di_b_U EQU 0 up kbd_di_b_D EQU 1 down kbd_di_b_R EQU 2 right kbd_di_b_L EQU 3 left ;------------------------------------------------------------------------------ ; Direction Definitions ;------------------------------------------------------------------------------ kbd_di_No EQU 0 kbd_di_U EQU 1< ASCIICode(d0) ;------------------------------------------------------------------------------ kbd.ReadKey move.l a5,-(a7) lea keyboard.dev(pc),a5 moveq #0,d0 move.b kbd_ASCIICode(a5),d0 clr.b kbd_ASCIICode(a5) move.l (a7)+,a5 rts ;------------------------------------------------------------------------------ ; TestKey KeyCode(d0) --> Status(d0) ;------------------------------------------------------------------------------ kbd.TestKey movem.l d1-d2/a0/a5,-(a7) lea keyboard.dev(pc),a5 move.l d0,d1 moveq #0,d2 move.b d1,d2 lsr.b #3,d2 eor.b #$0f,d2 lea kbd_KeyMap(a5),a0 moveq #kbd_st_Released,d0 btst d1,0(a0,d2.w) pressed ? beq.s .Released moveq #kbd_st_Pressed,d0 .Released movem.l (a7)+,d1-d2/a0/a5 rts ;------------------------------------------------------------------------------ ; AskCrsrKeys NoOp --> dX,dY,Direction,Fire(d0,d1,d2,d3) ;------------------------------------------------------------------------------ kbd.AskCrsrKeys movem.l a0/a5,-(a7) lea keyboard.dev(pc),a5 moveq #0,d2 move.b kbd_KeyMap+6(a5),d2 Cursor keys ? lsr.b #4,d2 bit $4c-$4f lea kbd.DirData(pc),a0 move.b 0(a0,d2.w),d2 moveq #$61,d0 bsr kbd.TestKey Fire : RShift move.l d0,d3 bsr kbd.CalcdXY movem.l (a7)+,a0/a5 rts ******************************************************************************* * Private Routines ******************************************************************************* ;------------------------------------------------------------------------------ ; CalcdXY Direction(d2) --> dX,dY(d0,d1) ;------------------------------------------------------------------------------ kbd.CalcdXY cmpi.b #kbd_di_Up,d2 beq.s .Up cmpi.b #kbd_di_Down,d2 beq.s .Down cmpi.b #kbd_di_Left,d2 beq.s .Left cmpi.b #kbd_di_Right,d2 beq.s .Right moveq #0,d0 moveq #0,d1 bra.s .Exit .Up moveq #0,d0 moveq #-1,d1 bra.s .Exit .Down moveq #0,d0 moveq #1,d1 bra.s .Exit .Left moveq #-1,d0 moveq #0,d1 bra.s .Exit .Right moveq #1,d0 moveq #0,d1 .Exit rts ******************************************************************************* * DataArea ******************************************************************************* kbd.Key DC.B " 1234567890߸",92,0,"0" DC.B "qwertzuiopü+",0,"123" DC.B "asdfghjklöá#",0,"456" DC.B "YXCVBNM;:_",0,".789" DC.B " ",8,9,10,10,27,127,0,0 DC.B 0,"-",0,28,29,30,31 DC.B $80,$81,$82,$83,$84,$85,$86,$87 DC.B $88,$89,0,0,0,0,0,0 kbd.KeyCS DC.B "`1234567890߸",92,0,"0" DC.B "QWERTZUIOPü+",0,"123" DC.B "ASDFGHJKLöá#",0,"456" DC.B "