******************************************************************************* * gameport.device.S Written by Readysoft. * Copyright 1992,1993,1994 RS. All rights reserved. 1992.06.08.-1994.05.18. * v1.24. ******************************************************************************* ******************************************************************************* * Macros ******************************************************************************* ;------------------------------------------------------------------------------ ; GamePortName Macro ;------------------------------------------------------------------------------ GAM.NAM MACRO DC.B 'gameport.device',0 EVEN ENDM ******************************************************************************* * DEV Macro ******************************************************************************* GAM.DEV MACRO ******************************************************************************* * Constant Definitions ******************************************************************************* ;------------------------------------------------------------------------------ ; Direction Bit Definitions ;------------------------------------------------------------------------------ gam_di_b_U EQU 0 up gam_di_b_D EQU 1 down gam_di_b_R EQU 2 right gam_di_b_L EQU 3 left ;------------------------------------------------------------------------------ ; Direction Definitions ;------------------------------------------------------------------------------ gam_di_No EQU 0 gam_di_U EQU 1< dX,dY,Direction,Fire(d0,d1,d2,d3) ;------------------------------------------------------------------------------ gam.AskJoy0 movem.l a0/a5-a6,-(a7) lea gameport.dev(pc),a5 lea cus_BASE,a6 moveq #0,d2 move.w cus_JOY0DAT(a6),d2 read JOY0DAT and.w #$0003,d2 lea gam.JoyDir(pc),a0 lea 0(a0,d2.w),a0 move.w cus_JOY0DAT(a6),d2 read JOY0DAT and.w #$0300,d2 lsr.w #6,d2 move.b 0(a0,d2.w),d2 Joy ? moveq #gam_st_Released,d3 btst #6,$bfe001 Fire ? bne.s .NoButton moveq #gam_st_Pressed,d3 .NoButton bsr gam.CalcdXY movem.l (a7)+,a0/a5-a6 rts ;------------------------------------------------------------------------------ ; AskJoy1 NoOp --> dX,dY,Direction,Fire(d0,d1,d2,d3) ;------------------------------------------------------------------------------ gam.AskJoy1 movem.l a0/a5-a6,-(a7) lea gameport.dev(pc),a5 lea cus_BASE,a6 moveq #0,d2 move.w cus_JOY1DAT(a6),d2 read JOY1DAT and.w #$0003,d2 lea gam.JoyDir(pc),a0 lea 0(a0,d2.w),a0 move.w cus_JOY1DAT(a6),d2 read JOY1DAT and.w #$0300,d2 lsr.w #6,d2 move.b 0(a0,d2.w),d2 Joy ? moveq #gam_st_Released,d3 btst #7,$bfe001 Fire ? bne.s .NoButton moveq #gam_st_Pressed,d3 .NoButton bsr gam.CalcdXY movem.l (a7)+,a0/a5-a6 rts ;------------------------------------------------------------------------------ ; AskMouse NoOp --> dX,dY,RButton,LButton(d0,d1,d2,d3) ;------------------------------------------------------------------------------ gam.AskMouse movem.l a0/a5-a6,-(a7) lea gameport.dev(pc),a5 lea cus_BASE,a6 move.w gam_MousedX(a5),d0 move.w gam_MousedY(a5),d1 moveq #gam_st_Released,d2 moveq #gam_st_Released,d3 btst #6,$bfe001 left button ? bne.s .NoLB moveq #gam_st_Pressed,d3 .NoLB btst #10,cus_POTINP(a6) right button ? bne.s .NoRB moveq #gam_st_Pressed,d2 .NoRB movem.l (a7)+,a0/a5-a6 rts ******************************************************************************* * Private Routines ******************************************************************************* ;------------------------------------------------------------------------------ ; MouseTest NoOp ;------------------------------------------------------------------------------ gam.MouseTest movem.l d0-d2/a5-a6,-(a7) lea gameport.dev(pc),a5 lea cus_BASE,a6 move.w cus_JOY0DAT(a6),d2 read JOY0DAT move.w d2,d0 move.w d2,d1 and.w #$ff,d0 x lsr.w #8,d1 y sub.b gam_LastJOY0DAT+1(a5),d0 sub.b gam_LastJOY0DAT(a5),d1 ext.w d0 dX ext.w d1 dY move.w d2,gam_LastJOY0DAT(a5) move.w d0,gam_MousedX(a5) move.w d1,gam_MousedY(a5) movem.l (a7)+,d0-d2/a5-a6 rts ;------------------------------------------------------------------------------ ; CalcdXY Direction(d2) --> dX,dY(d0,d1) ;------------------------------------------------------------------------------ gam.CalcdXY cmpi.b #gam_di_Up,d2 beq.s .Up cmpi.b #gam_di_Down,d2 beq.s .Down cmpi.b #gam_di_Left,d2 beq.s .Left cmpi.b #gam_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 ******************************************************************************* gam.JoyDir DC.B gam_di_No,gam_di_D DC.B gam_di_DR,gam_di_R DC.B gam_di_U,gam_di_No DC.B gam_di_R,gam_di_UR DC.B gam_di_UL,gam_di_L DC.B gam_di_No,gam_di_R DC.B gam_di_L,gam_di_DL DC.B gam_di_R,gam_di_No ENDM