import: John Brooks fast dual paddle read for the IIgs

This commit is contained in:
dwsJason 2019-09-02 14:38:04 -04:00
parent 10164ef974
commit 2b621b4c49
1 changed files with 97 additions and 0 deletions

97
asm/paddles.s Normal file
View File

@ -0,0 +1,97 @@
*
* 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