check trigger button (TRIGx); correctly report joystick count depending
on 5200 console version
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
;
|
;
|
||||||
; Standard joystick driver for the Atari 5200.
|
; Standard joystick driver for the Atari 5200.
|
||||||
;
|
;
|
||||||
; Christian Groessler, 2014-05-12
|
; Christian Groessler, 2014-05-28
|
||||||
;
|
;
|
||||||
|
|
||||||
.include "zeropage.inc"
|
.include "zeropage.inc"
|
||||||
@@ -27,14 +27,14 @@
|
|||||||
|
|
||||||
; Button state masks (8 values)
|
; Button state masks (8 values)
|
||||||
|
|
||||||
.byte $01 ; JOY_UP
|
.byte $01 ; JOY_UP
|
||||||
.byte $02 ; JOY_DOWN
|
.byte $02 ; JOY_DOWN
|
||||||
.byte $04 ; JOY_LEFT
|
.byte $04 ; JOY_LEFT
|
||||||
.byte $08 ; JOY_RIGHT
|
.byte $08 ; JOY_RIGHT
|
||||||
.byte $10 ; JOY_FIRE
|
.byte $10 ; JOY_FIRE
|
||||||
.byte $20 ; JOY_FIRE2
|
.byte $20 ; JOY_FIRE2
|
||||||
.byte $00 ; Future expansion
|
.byte $00 ; Future expansion
|
||||||
.byte $00 ; Future expansion
|
.byte $00 ; Future expansion
|
||||||
|
|
||||||
; Jump table.
|
; Jump table.
|
||||||
|
|
||||||
@@ -42,13 +42,7 @@
|
|||||||
.addr UNINSTALL
|
.addr UNINSTALL
|
||||||
.addr COUNT
|
.addr COUNT
|
||||||
.addr READJOY
|
.addr READJOY
|
||||||
.addr 0 ; IRQ entry not used
|
.addr 0 ; IRQ entry not used
|
||||||
|
|
||||||
; ------------------------------------------------------------------------
|
|
||||||
; Constants
|
|
||||||
|
|
||||||
JOY_COUNT = 4 ; Number of joysticks we support
|
|
||||||
|
|
||||||
|
|
||||||
.code
|
.code
|
||||||
|
|
||||||
@@ -78,7 +72,12 @@ UNINSTALL:
|
|||||||
;
|
;
|
||||||
|
|
||||||
COUNT:
|
COUNT:
|
||||||
lda #JOY_COUNT
|
lda $FD32 ; check ROM version
|
||||||
|
cmp #$E8
|
||||||
|
bne @2port
|
||||||
|
lda #4
|
||||||
|
.byte $2C ; bit opcode, eats the next 2 bytes
|
||||||
|
@2port: lda #2
|
||||||
ldx #0
|
ldx #0
|
||||||
rts
|
rts
|
||||||
|
|
||||||
@@ -86,45 +85,46 @@ COUNT:
|
|||||||
; READ: Read a particular joystick passed in A.
|
; READ: Read a particular joystick passed in A.
|
||||||
;
|
;
|
||||||
|
|
||||||
CENTER = 228 / 2
|
CENTER = 228 / 2
|
||||||
SENSIVITY = 16
|
SENSIVITY = 16
|
||||||
|
|
||||||
READJOY:
|
READJOY:
|
||||||
and #3 ; fix joystick number
|
and #3 ; put joystick number in range, just in case
|
||||||
asl a
|
tay
|
||||||
|
asl a
|
||||||
tax ; Joystick number * 2 (0-6) into X, index into ZP shadow registers
|
tax ; Joystick number * 2 (0-6) into X, index into ZP shadow registers
|
||||||
lda #0 ; Initialize return value
|
|
||||||
|
lda #0 ; Initialize return value
|
||||||
|
cmp TRIG0,y
|
||||||
|
bne @notrg
|
||||||
|
lda #$10 ; JOY_FIRE
|
||||||
|
|
||||||
; Read joystick
|
; Read joystick
|
||||||
|
|
||||||
ldy PADDL0,x ; get horizontal position
|
@notrg: ldy PADDL0,x ; get horizontal position
|
||||||
cpy #CENTER-SENSIVITY
|
cpy #CENTER-SENSIVITY
|
||||||
bcs @chkleft
|
bcs @chkleft
|
||||||
|
|
||||||
ora #4 ; JOY_LEFT
|
ora #4 ; JOY_LEFT
|
||||||
bne @updown
|
bne @updown
|
||||||
|
|
||||||
@chkleft:
|
@chkleft:
|
||||||
cpy #CENTER+SENSIVITY
|
cpy #CENTER+SENSIVITY
|
||||||
bcc @updown
|
bcc @updown
|
||||||
|
|
||||||
ora #8 ; JOY_RIGHT
|
ora #8 ; JOY_RIGHT
|
||||||
|
|
||||||
@updown:ldy PADDL0+1,x ; get vertical position
|
@updown:ldy PADDL0+1,x ; get vertical position
|
||||||
cpy #CENTER-SENSIVITY
|
cpy #CENTER-SENSIVITY
|
||||||
bcs @chkdown
|
bcs @chkdown
|
||||||
|
|
||||||
ora #1 ; JOY_UP
|
ora #1 ; JOY_UP
|
||||||
bne @buttons
|
bne @done
|
||||||
|
|
||||||
@chkdown:
|
@chkdown:
|
||||||
cpy #CENTER+SENSIVITY
|
cpy #CENTER+SENSIVITY
|
||||||
bcc @buttons
|
bcc @done
|
||||||
|
|
||||||
ora #2 ; JOY_DOWN
|
ora #2 ; JOY_DOWN
|
||||||
|
|
||||||
@buttons:
|
|
||||||
; @@@ TODO: BOTTON STATE
|
|
||||||
|
|
||||||
rts
|
|
||||||
|
|
||||||
|
@done: rts
|
||||||
|
|||||||
Reference in New Issue
Block a user