Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
196 changes: 173 additions & 23 deletions input/pcanalog.s
Original file line number Diff line number Diff line change
@@ -1,29 +1,179 @@
; GEOS by Berkeley Softworks
; reverse engineered by Maciej Witkowiak, Michael Steil
;
; pcanalog input driver
; pc-analog input driver

.include "const.inc"
.include "geossym.inc"
.include "geosmac.inc"
.include "jumptab.inc"
.include "c64.inc"

.segment "inputdrv"

.byte $4c, $94, $fe, $4c, $a0, $fe, $4c, $a1, $fe, $00, $2d, $33, $39, $07, $05, $39
.byte $3e, $43, $08, $04, $a9, $00, $85, $3b, $a9, $00, $85, $3a, $a9, $00, $85, $3c
.byte $60, $24, $30, $10, $fb, $a5, $01, $48, $a9, $35, $85, $01, $ad, $00, $dc, $48
.byte $ad, $02, $dc, $48, $ad, $03, $dc, $48, $a9, $ff, $8d, $02, $dc, $a9, $40, $8d
.byte $00, $dc, $a2, $66, $ea, $ea, $ea, $ca, $d0, $fa, $ad, $19, $d4, $cd, $8a, $fe
.byte $30, $08, $cd, $8c, $fe, $10, $3a, $4c, $42, $ff, $85, $02, $ad, $8b, $fe, $38
.byte $e5, $02, $85, $02, $ad, $8d, $fe, $85, $04, $a9, $00, $85, $03, $85, $05, $a2
.byte $02, $a0, $04, $20, $69, $c1, $a5, $3a, $38, $e5, $02, $85, $3a, $a5, $3b, $f0
.byte $07, $e9, $00, $85, $3b, $4c, $42, $ff, $b0, $fb, $a9, $00, $85, $3a, $4c, $42
.byte $ff, $38, $ed, $8b, $fe, $85, $02, $ad, $8e, $fe, $85, $04, $a9, $00, $85, $03
.byte $85, $05, $a2, $02, $a0, $04, $20, $69, $c1, $a5, $3a, $18, $65, $02, $85, $3a
.byte $a5, $3b, $69, $00, $85, $3b, $f0, $cd, $a5, $3a, $c9, $40, $30, $c7, $a9, $3f
.byte $85, $3a, $ad, $1a, $d4, $cd, $8f, $fe, $30, $08, $cd, $91, $fe, $10, $32, $4c
.byte $ab, $ff, $85, $02, $ad, $90, $fe, $38, $e5, $02, $85, $02, $ad, $92, $fe, $85
.byte $04, $a9, $00, $85, $03, $85, $05, $a2, $02, $a0, $04, $20, $69, $c1, $a5, $3c
.byte $38, $e5, $02, $90, $05, $85, $3c, $4c, $ab, $ff, $a9, $00, $85, $3c, $4c, $ab
.byte $ff, $38, $ed, $90, $fe, $85, $02, $ad, $93, $fe, $85, $04, $a9, $00, $85, $03
.byte $85, $05, $a2, $02, $a0, $04, $20, $69, $c1, $a5, $3c, $18, $65, $02, $c9, $c7
.byte $b0, $05, $85, $3c, $4c, $ab, $ff, $a9, $c7, $85, $3c, $a9, $00, $8d, $02, $dc
.byte $8d, $03, $dc, $ad, $01, $dc, $29, $0c, $cd, $89, $fe, $f0, $13, $8d, $89, $fe
.byte $0a, $0a, $0a, $0a, $10, $01, $0a, $8d, $05, $85, $a5, $39, $09, $20, $85, $39
.byte $68, $8d, $03, $dc, $68, $8d, $02, $dc, $68, $8d, $00, $dc, $68, $85, $01, $60
MouseInit:
jmp _MouseInit
SlowMouse:
jmp _SlowMouse
UpdateMouse:
jmp _UpdateMouse
.ifdef bsw128
SetMouse:
rts
.endif

lastF: .byte $00
xlow: .byte $2D
xav: .byte $33
xhigh: .byte $39
xlstep: .byte $07
xhstep: .byte $05
ylow: .byte $39
yav: .byte $3E
yhigh: .byte $43
ylstep: .byte $08
yhstep: .byte $04

_MouseInit:
lda #$00
sta $3B
lda #$00
sta mouseXPos
LoadB mouseYPos, NULL
_SlowMouse:
rts0: rts

_UpdateMouse:
bit $30
bpl rts0
PushB CPU_DATA
lda #$35
sta CPU_DATA
PushB cia1base+0
PushB cia1base+2
PushB cia1base+3
lda #$FF
sta cia1base+2
lda #%01000000
sta cia1base+0
ldx #$66
LFEC4: nop
nop
nop
dex
bne LFEC4
lda sidbase+$19
cmp xlow
bmi XLO
cmp xhigh
bpl XHI
jmp ReadY

XLO: sta r0L
lda xav
sub r0L
sta r0L
MoveB xlstep, r1L
LoadB r0H, NULL
sta r1H
ldx #r0
ldy #r1
jsr Ddiv
lda mouseXPos
sub r0L
sta mouseXPos
lda $3B
beq LFF08
sbc #$00
sta $3B
LFF05: jmp ReadY

LFF08: bcs LFF05
LoadB mouseXPos, NULL
jmp ReadY

XHI: sub xav
sta r0L
MoveB xhstep, r1L
LoadB r0H, NULL
sta r1H
ldx #r0
ldy #r1
jsr Ddiv
lda mouseXPos
add r0
sta mouseXPos
lda $3B
adc #$00
sta $3B
beq LFF05
lda mouseXPos
cmp #$40
bmi LFF05
lda #$3F
sta mouseXPos
ReadY: lda sidbase+$1A
cmp ylow
bmi YLO
cmp yhigh
bpl YHI
jmp ReadF

YLO: sta r0L
lda yav
sub r0L
sta r0L
MoveB ylstep, r1L
LoadB r0H, NULL
sta r1H
ldx #r0
ldy #r1
jsr Ddiv
lda mouseYPos
sub r0
bcc LFF7A
sta mouseYPos
jmp ReadF

LFF7A: LoadB mouseYPos, NULL
jmp ReadF

YHI: sub yav
sta r0L
MoveB yhstep, r1L
LoadB r0H, NULL
sta r1H
ldx #r0
ldy #r1
jsr Ddiv
lda mouseYPos
add r0
cmp #199
bcs LFFA7
sta mouseYPos
jmp ReadF

LFFA7: lda #199
sta mouseYPos
ReadF: LoadB cia1base+2, NULL
sta cia1base+3
lda cia1base+1
and #%00001100
cmp lastF
beq LFFD0
sta lastF
asl a
asl a
asl a
asl a
bpl LFFC7
asl a
LFFC7: sta mouseData
lda $39
ora #$20
sta $39
LFFD0: PopB cia1base+3
PopB cia1base+2
PopB cia1base+0
PopB CPU_DATA
rts