From acf831658f591675b890c9c191fcc540094ae77e Mon Sep 17 00:00:00 2001
From: Oliver Schmidt
Date: Sun, 20 Aug 2017 16:39:07 +0200
Subject: [PATCH] Adjusted to recent driver interface change.
Please note that this change is absolutely untested!
Apart from the recent driver interface change:
- vic20-stdjoy.s was "slightly broken" because it didn't clear x on return from joy_read.
- vic20-ptvjoy.s was "heavily broken" because it returned a totally different set of bits of the first joystick.
---
libsrc/vic20/joy/vic20-ptvjoy.s | 25 ++++++++++++++++++-------
libsrc/vic20/joy/vic20-stdjoy.s | 19 +++++++++++++++----
2 files changed, 33 insertions(+), 11 deletions(-)
diff --git a/libsrc/vic20/joy/vic20-ptvjoy.s b/libsrc/vic20/joy/vic20-ptvjoy.s
index 07c979443..3b1db402a 100644
--- a/libsrc/vic20/joy/vic20-ptvjoy.s
+++ b/libsrc/vic20/joy/vic20-ptvjoy.s
@@ -102,10 +102,21 @@ joy1: lda #$7F ; mask for VIA2 JOYBIT: sw3
sty VIA1_DDRA ; restore the state of DDRA
cli ; necessary?
- ror ; Shift sw3 into bit 7
- and #$9E ; Mask relevant bits
- eor #$9E ; Active states are inverted
+ php ; Save sw3 in carry
+ lsr ; Shift sw0,sw1,sw2,sw4 into bits 1-4
+ tax ; Save sw0,sw1,sw2
+ and #$10 ; Extract sw4 in bit 4
+ sta tmp1 ; Save sw4 in bit 4
+ txa ; Restore sw0,sw1,sw2
+ lsr ; Shift sw0,sw1,sw2 into bits 0-2
+ and #$07 ; Mask bits 0-2
+ plp ; Restore sw3 in carry
+ bcc @L0 ; Is sw3 set?
+ ora #$08 ; Yes: Add sw3 in bit 3
+@L0: ora tmp1 ; Add sw4 in bit 4
+ eor #$1F ; Active states are inverted
+ ldx #0
rts
; Read joystick 2
@@ -120,8 +131,8 @@ joy2: lda #%10000000 ; via port B Data-Direction
sta VIA1_PRB ; (output one at PB7)
lda VIA1_PRB ; via port B read/write
- and #$1f ; get bit 4-0 (PB4-PB0)
- eor #$1f
+ and #$1F ; get bit 4-0 (PB4-PB0)
+ eor #$1F
rts
; Read joystick 3
@@ -130,14 +141,14 @@ joy3: lda #$00 ; via port B read/write
sta VIA1_PRB ; (output zero at PB7)
lda VIA1_PRB ; via port B read/write
- and #$0f ; get bit 3-0 (PB3-PB0)
+ and #$0F ; get bit 3-0 (PB3-PB0)
sta tmp1 ; joy 4 directions
lda VIA1_PRB ; via port B read/write
and #%00100000 ; get bit 5 (PB5)
lsr
ora tmp1
- eor #$1f
+ eor #$1F
ldx #0
rts
diff --git a/libsrc/vic20/joy/vic20-stdjoy.s b/libsrc/vic20/joy/vic20-stdjoy.s
index 56fb35ae4..bf10acce5 100644
--- a/libsrc/vic20/joy/vic20-stdjoy.s
+++ b/libsrc/vic20/joy/vic20-stdjoy.s
@@ -112,10 +112,21 @@ READ: lda #$7F ; mask for VIA2 JOYBIT: sw3
sty VIA1_DDRA ; restore the state of DDRA
cli ; necessary?
- ror ; Shift sw3 into bit 7
- and #$9E ; Mask relevant bits
- eor #$9E ; Active states are inverted
-
+ php ; Save sw3 in carry
+ lsr ; Shift sw0,sw1,sw2,sw4 into bits 1-4
+ tax ; Save sw0,sw1,sw2
+ and #$10 ; Extract sw4 in bit 4
+ sta tmp1 ; Save sw4 in bit 4
+ txa ; Restore sw0,sw1,sw2
+ lsr ; Shift sw0,sw1,sw2 into bits 0-2
+ and #$07 ; Mask bits 0-2
+ plp ; Restore sw3 in carry
+ bcc @L0 ; Is sw3 set?
+ ora #$08 ; Yes: Add sw3 in bit 3
+@L0: ora tmp1 ; Add sw4 in bit 4
+ eor #$1F ; Active states are inverted
+
+ ldx #0
rts
--
2.39.5