mirror of
https://github.com/ksherlock/itty-bitty-vtty.git
synced 2024-11-22 11:31:21 +00:00
modem read/write/init code.
This commit is contained in:
parent
874929a085
commit
3eff019871
195
vt52.S
195
vt52.S
@ -32,6 +32,12 @@ KBD equ $c000
|
|||||||
VGCINT equ $c023
|
VGCINT equ $c023
|
||||||
|
|
||||||
|
|
||||||
|
SCCBREG equ $c038
|
||||||
|
SCCAREG equ $c039
|
||||||
|
SCCBDATA equ $c03a
|
||||||
|
SCCADATA equ $c03b
|
||||||
|
|
||||||
|
|
||||||
kmShift equ %0000_0001
|
kmShift equ %0000_0001
|
||||||
kmControl equ %0000_0010
|
kmControl equ %0000_0010
|
||||||
kmCapsLock equ %0000_0100
|
kmCapsLock equ %0000_0100
|
||||||
@ -42,6 +48,14 @@ kmOption equ %0100_0000
|
|||||||
kmCommand equ %1000_0000
|
kmCommand equ %1000_0000
|
||||||
|
|
||||||
|
|
||||||
|
* modes
|
||||||
|
mAltKeyPad equ %0000_0001
|
||||||
|
mGraphics equ %0000_0010
|
||||||
|
mHoldScreen equ %0000_0100
|
||||||
|
mLocal equ %1000_0000
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
* interrupt vectors. JMP ABSLONG.
|
* interrupt vectors. JMP ABSLONG.
|
||||||
IRQ1SEC equ $e10054
|
IRQ1SEC equ $e10054
|
||||||
IRQQTR equ $e10038
|
IRQQTR equ $e10038
|
||||||
@ -80,8 +94,6 @@ main
|
|||||||
jsr init
|
jsr init
|
||||||
jsr cursor_on
|
jsr cursor_on
|
||||||
|
|
||||||
mx %00
|
|
||||||
lda #0
|
|
||||||
loop
|
loop
|
||||||
sep #$30
|
sep #$30
|
||||||
:again lda $c000
|
:again lda $c000
|
||||||
@ -183,7 +195,167 @@ init
|
|||||||
sta cursor_saved_char
|
sta cursor_saved_char
|
||||||
stz cursor_state
|
stz cursor_state
|
||||||
|
|
||||||
jmp clear_all
|
jsr clear_all
|
||||||
|
lda #0 ; clear high byte.
|
||||||
|
; drop through
|
||||||
|
|
||||||
|
init_modem
|
||||||
|
sep #$30
|
||||||
|
* reset channel B (modem port)
|
||||||
|
ldx #9
|
||||||
|
lda #%01010001
|
||||||
|
stx SCCBREG
|
||||||
|
sta SCCBREG
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
|
||||||
|
* x16 clock mode, 1 stop bit, no parity
|
||||||
|
ldx #4
|
||||||
|
lda #%01000100
|
||||||
|
stx SCCBREG
|
||||||
|
sta SCCBREG
|
||||||
|
|
||||||
|
* 8 bits/char, rx disabled.
|
||||||
|
ldx #3
|
||||||
|
lda #%11000000
|
||||||
|
stx SCCBREG
|
||||||
|
sta SCCBREG
|
||||||
|
|
||||||
|
* 8 data bits, RTS
|
||||||
|
ldx #5
|
||||||
|
lda #%01100010
|
||||||
|
stx SCCBREG
|
||||||
|
sta SCCBREG
|
||||||
|
|
||||||
|
ldx #11
|
||||||
|
lda #%01010000
|
||||||
|
stx SCCBREG
|
||||||
|
sta SCCBREG
|
||||||
|
|
||||||
|
* 9600 baud
|
||||||
|
ldx #12
|
||||||
|
lda #10
|
||||||
|
stx SCCBREG
|
||||||
|
sta SCCBREG
|
||||||
|
|
||||||
|
* 9600 baud
|
||||||
|
ldx #13
|
||||||
|
lda #0
|
||||||
|
stx SCCBREG
|
||||||
|
sta SCCBREG
|
||||||
|
|
||||||
|
|
||||||
|
* disable baud rate generator
|
||||||
|
ldx #14
|
||||||
|
lda #0
|
||||||
|
stx SCCBREG
|
||||||
|
sta SCCBREG
|
||||||
|
|
||||||
|
* enable baud rate generator
|
||||||
|
ldx #14
|
||||||
|
lda #%00000001
|
||||||
|
stx SCCBREG
|
||||||
|
sta SCCBREG
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* 8 bits/char, rx enabled.
|
||||||
|
ldx #3
|
||||||
|
lda #%11000001
|
||||||
|
stx SCCBREG
|
||||||
|
sta SCCBREG
|
||||||
|
|
||||||
|
|
||||||
|
* 8 data bits, tx enabled, RTS
|
||||||
|
ldx #5
|
||||||
|
lda #%01101010
|
||||||
|
stx SCCBREG
|
||||||
|
sta SCCBREG
|
||||||
|
|
||||||
|
* disable interrupts
|
||||||
|
ldx #15
|
||||||
|
lda #0
|
||||||
|
stx SCCBREG
|
||||||
|
sta SCCBREG
|
||||||
|
|
||||||
|
* reset ext/status interrupts
|
||||||
|
ldx #0
|
||||||
|
lda #%00010000
|
||||||
|
stx SCCBREG
|
||||||
|
sta SCCBREG
|
||||||
|
|
||||||
|
* disable interrupts
|
||||||
|
ldx #1
|
||||||
|
lda #0
|
||||||
|
stx SCCBREG
|
||||||
|
sta SCCBREG
|
||||||
|
|
||||||
|
* reset ch b ptr to 0?
|
||||||
|
lda SCCBREG
|
||||||
|
|
||||||
|
|
||||||
|
* status, visible, master interrupts disabled
|
||||||
|
ldx #9
|
||||||
|
lda #%00010001
|
||||||
|
stx SCCBREG
|
||||||
|
sta SCCBREG
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
|
||||||
|
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
write_modem
|
||||||
|
mx %11
|
||||||
|
* a: byte to send
|
||||||
|
tay ; save
|
||||||
|
* ldx #0
|
||||||
|
|
||||||
|
:mask = %0010_0100 ; tx buffer empty, clear to send
|
||||||
|
:wait stz SCCBREG
|
||||||
|
lda SCCBREG
|
||||||
|
and #:mask
|
||||||
|
cmp #:mask
|
||||||
|
bne :wait
|
||||||
|
|
||||||
|
sty SCCBDATA
|
||||||
|
rts
|
||||||
|
|
||||||
|
read_modem
|
||||||
|
* c set if data read
|
||||||
|
* v set if overrun
|
||||||
|
mx %11
|
||||||
|
* ldx #0
|
||||||
|
rep #$61 ; C + V
|
||||||
|
stz SCCBREG
|
||||||
|
lda SCCBREG
|
||||||
|
and #%0001
|
||||||
|
beq :rts
|
||||||
|
|
||||||
|
* read reg 1 for overrun
|
||||||
|
lda #1
|
||||||
|
sta SCCBREG
|
||||||
|
lda SCCBREG
|
||||||
|
and #%0010_0000
|
||||||
|
beq :ok
|
||||||
|
* clear the overrun
|
||||||
|
lda #$30 ; reg0, error reset.
|
||||||
|
sta SCCBREG
|
||||||
|
stz SCCBREG
|
||||||
|
sep #$60 ; V
|
||||||
|
:ok
|
||||||
|
* lda #8
|
||||||
|
* sta SCCBREG
|
||||||
|
* lda SCCBREG
|
||||||
|
lda SCCBDATA
|
||||||
|
sec
|
||||||
|
:rts rts
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
cc mac
|
cc mac
|
||||||
@ -259,7 +431,7 @@ clear_eos
|
|||||||
:rts rts
|
:rts rts
|
||||||
|
|
||||||
clear_all
|
clear_all
|
||||||
mx %00
|
mx %11
|
||||||
php
|
php
|
||||||
rep #$30
|
rep #$30
|
||||||
lda #" " ; high bit
|
lda #" " ; high bit
|
||||||
@ -700,24 +872,31 @@ esc_Y ; direct cursor addressing
|
|||||||
|
|
||||||
esc_Z ; identify terminal.
|
esc_Z ; identify terminal.
|
||||||
; return ESC / K
|
; return ESC / K
|
||||||
|
bit mode
|
||||||
|
bmi :local
|
||||||
|
* todo...
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
:local
|
||||||
|
lda #'K'
|
||||||
|
jmp draw_char
|
||||||
|
|
||||||
esc_[ ; enter hold screen mode
|
esc_[ ; enter hold screen mode
|
||||||
lda #%0100
|
lda #mHoldScreen
|
||||||
tsb mode
|
tsb mode
|
||||||
rts
|
rts
|
||||||
|
|
||||||
esc_\ ; exit hold screen mode
|
esc_\ ; exit hold screen mode
|
||||||
lda #%0100
|
lda #mHoldScreen
|
||||||
trb mode
|
trb mode
|
||||||
rts
|
rts
|
||||||
|
|
||||||
esc_eq ; enter alternate keypad mode
|
esc_eq ; enter alternate keypad mode
|
||||||
lda #%0001
|
lda #mAltKeyPad
|
||||||
tsb mode
|
tsb mode
|
||||||
rts
|
rts
|
||||||
esc_gt ; exit alternate keypad mode
|
esc_gt ; exit alternate keypad mode
|
||||||
lda #%0001
|
lda #mAltKeyPad
|
||||||
trb mode
|
trb mode
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user