.include "joy-kernel.inc"
.include "joy-error.inc"
+ .include "pce.inc"
.macpack module
.addr $0000
-; Button state masks (8 values)
-
- .byte $10 ; JOY_UP
- .byte $40 ; JOY_DOWN
- .byte $80 ; JOY_LEFT
- .byte $20 ; JOY_RIGHT
- .byte $01 ; JOY_FIRE_A
- .byte $02 ; JOY_FIRE_B
- .byte $04 ; JOY_SELECT
- .byte $08 ; JOY_RUN
-
; Jump table.
.addr INSTALL
;
INSTALL:
- lda #<JOY_ERR_OK
- ldx #>JOY_ERR_OK
+ lda #<JOY_ERR_OK
+ ldx #>JOY_ERR_OK
-; rts ; Run into DEINSTALL instead
+; rts ; Run into UNINSTALL instead
; ------------------------------------------------------------------------
; DEINSTALL routine. Is called before the driver is removed from memory.
;
UNINSTALL:
- rts
+ rts
; ------------------------------------------------------------------------
;unsigned char __fastcall__ joy_count (void);
COUNT:
- lda #<JOY_COUNT
- ldx #>JOY_COUNT
- rts
+ lda #<JOY_COUNT
+ ldx #>JOY_COUNT
+ rts
; ------------------------------------------------------------------------
; READ: Read a particular joystick passed in A.
;unsigned char __fastcall__ joy_read (unsigned char joystick);
READJOY:
- pha
- jsr read_joy
- pla
- tax ; Joystick number into X
+ pha
+ jsr read_joy
+ pla
+ tax ; Joystick number into X
- ; return value from buffer
+ ; return value from buffer
joy1:
- lda padbuffer,x
- ldx #0
- rts
+ lda padbuffer,x
+ ldx #0
+ rts
read_joy:
- ; reset multitap counter
- lda #$01
- sta $1000
- pha
- pla
- nop
- nop
-
- lda #$03
- sta $1000
- pha
- pla
- nop
- nop
-
- cly
+ ; reset multitap counter
+ lda #$01
+ sta JOY_CTRL
+ pha
+ pla
+ nop
+ nop
+
+ lda #$03
+ sta JOY_CTRL
+ pha
+ pla
+ nop
+ nop
+
+ cly
nextpad:
- lda #$01
- sta $1000 ; sel = 1
- pha
- pla
- nop
- nop
-
- lda $1000
- asl a
- asl a
- asl a
- asl a
- sta padbuffer, y ; store new value
-
- stz $1000
- pha
- pla
- nop
- nop
-
- lda $1000
- and #$0F
- ora padbuffer, y ; second half of new value
-
- eor #$FF
- sta padbuffer, y ; store new value
-
- iny
- cpy #$05
- bcc nextpad
- rts
+ lda #$01
+ sta JOY_CTRL ; sel = 1
+ pha
+ pla
+ nop ; some delay is required
+ nop
+
+ lda JOY_CTRL
+ asl a
+ asl a
+ asl a
+ asl a
+ sta padbuffer, y ; store new value
+
+ stz JOY_CTRL
+ pha
+ pla
+
+ nop ; some delay is required
+ nop
+
+ lda JOY_CTRL
+ and #$0F
+ ora padbuffer, y ; second half of new value
+
+ eor #$FF
+ sta padbuffer, y ; store new value
+
+ iny
+ cpy #$05
+ bcc nextpad
+ rts
.bss
padbuffer:
- .res 4
+ .res 4