93 lines
2.3 KiB
ArmAsm
93 lines
2.3 KiB
ArmAsm
.segment "EXTRA"
|
|
.export MONRDKEY_NB, MONRDKEY, MONCOUT, INITUSBSERIAL
|
|
|
|
VIA_USB_REG_DDRB := $7FE2
|
|
VIA_USB_REG_DDRA := $7FE3
|
|
VIA_USB_REG_PORTB := $7FE0
|
|
VIA_USB_REG_PORTA := $7FE1
|
|
VIA_USB_NRD := %00001000 ; make RD# high to not output data from FTDI
|
|
VIA_USB_WR := %00000100 ; make WR high to output data from FTDI
|
|
VIA_USB_nRXF := %00000010
|
|
VIA_USB_DDRB_INIT := (VIA_USB_NRD+VIA_USB_WR)
|
|
|
|
; INIT: Set up outputs and block reading characters from FTDI
|
|
INITUSBSERIAL:
|
|
lda #(VIA_USB_NRD+VIA_USB_WR) ; Make these outputs
|
|
sta VIA_USB_REG_DDRB ; to DDRB
|
|
lda #VIA_USB_NRD ; Block RD, no WR
|
|
sta VIA_USB_REG_PORTB ; to REGB
|
|
rts
|
|
|
|
MONRDKEY_NB:
|
|
READCHAR:
|
|
lda VIA_USB_REG_PORTB
|
|
and #VIA_USB_nRXF
|
|
|
|
bne READCHAR_NOTHINGTOREAD ; Z=0 -> had no result
|
|
|
|
; Reset DDRA as input
|
|
lda #$00 ; 0x00
|
|
sta VIA_USB_REG_DDRA ; to Directory Data (all in)
|
|
|
|
lda #0 ; DO RD, no WR
|
|
sta VIA_USB_REG_PORTB ; to REGB
|
|
|
|
|
|
lda VIA_USB_REG_PORTA
|
|
|
|
; Save on stack temporrily
|
|
pha
|
|
|
|
lda #VIA_USB_NRD ; Block RD, no WR
|
|
sta VIA_USB_REG_PORTB ; to REGB
|
|
|
|
; Get character back
|
|
pla
|
|
sec
|
|
rts
|
|
|
|
READCHAR_NOTHINGTOREAD:
|
|
clc
|
|
rts
|
|
|
|
MONRDKEY:
|
|
php
|
|
@MONRDKEYREREAD:
|
|
jsr MONRDKEY_NB
|
|
bcc @MONRDKEYREREAD
|
|
; Enable to echo back
|
|
; jsr SENDCHAR
|
|
plp
|
|
rts
|
|
|
|
MONCOUT:
|
|
; TXE SHOULD be read before sending, but since the USB connection is
|
|
; running full speed this buffer has not been seen filling up.
|
|
|
|
; Save A for when returning
|
|
pha
|
|
|
|
; Output character
|
|
sta VIA_USB_REG_PORTA ; to data
|
|
|
|
lda #VIA_USB_NRD ; Block RD, no WR
|
|
sta VIA_USB_REG_PORTB ; to REGB
|
|
|
|
lda #$FF
|
|
sta VIA_USB_REG_DDRA ; (all out)
|
|
|
|
; Pulse WR
|
|
lda #(VIA_USB_NRD+VIA_USB_WR) ; Block RD, DO WR
|
|
sta VIA_USB_REG_PORTB ; to REGB
|
|
lda #VIA_USB_NRD ; Block RD, no WR
|
|
sta VIA_USB_REG_PORTB ; to REGB
|
|
|
|
; Reset DDRA as input
|
|
lda #$00
|
|
sta VIA_USB_REG_DDRA ; to Directory Data (all in)
|
|
|
|
; Restore Accumulator
|
|
pla
|
|
rts
|
|
|