* * ORCA/M Format!! * @JBrooksBSI fast Dual Axis Paddle Read * case on longa on longi on * ORCA is neat DummyPaddles start ASMCODE end * *------------------------------- * IIGS 1MHz single-pass GetJoyXY * * 10/21/2018 by John Brooks *------------------------------- *------------------------------- * Read JoyX,Y every 11cyc on avg * Return: X=JoyX, Y=JoyY GetJoyXY start ASMCODE php ;Save irq & mx reg size sep #$34 ;sei & 8-bit mx phd ;Save DPage pea $C000 ;DP to I/O pld ;DP=$C000 bit $70 ;Start X,Y timers. ~16c to 1st read * cyc on lsr $36 ;5: Force 1MHz ldx #1 ;2: Init dual X,Y ctr xba ;3: Wait xba ;3: Wait _DualXY0 anop lda $64 ;3: Chk JoyX. 10c to DualXY1 * cyc on and $65 ;3: Chk JoyY bpl _ToSolo ;2/3 inx ;2: Inc XY _DualXY1 anop lda $64 ;3: Chk JoyX. 10c to DualXY2 * cyc on and $65 ;3: Chk JoyY bpl _ToSolo ;2/3 inx ;2: Inc XY _DualXY2 anop lda $64 ;3: Chk JoyX. 13c to DualXY0 * cyc on and $65 ;3: Chk JoyY bpl _ToSolo ;3 inx ;2: Inc XY bne _DualXY0 _DualXY3 anop lda $64 ;3: Chk JoyX and $65 ;3: Chk JoyY bmi _SameXY ;3 dex ;#$FE _SameXY anop dex ;#$FF txy bra _Exit _SoloX anop bit $64 ;3: Chk JoyX bmi _SoloXOk ;2/3 dey ;2 bra _Exit _SoloXOk anop inx ;2 bne _SoloX ;2/3 * ;#$FF. Fall into dex & Exit _SoloY anop bit $65 ;3: Chk JoyY bmi _SoloYOk ;2/3 dex ;2 bra _Exit _ToSolo anop txy ;2 bit $64 ;3 bmi _SoloXOk ;2/3 bit $65 ;3 bpl _SameXY ;2/3 _SoloYOk anop iny ;2 bne _SoloY ;2/3 dey ;#$FF. Fall into Exit _Exit anop rol $36 ;Restore CPU speed pld ;Restore dpage plp ;Restore m,x size & interrupt enable rts ;Returns X=JoyX $00-$FF, Y=JoyY $00-$FF end * lst off