add command-L to toggle local/online

add command-Q to quit.

Since ROM 1 doesn't have _RemoveCDA in ROM, the control panel is only installed in ROM 3.
(TODO -- check at runtime in case launched from GS/OS)
This commit is contained in:
Kelvin Sherlock 2022-02-07 10:34:10 -05:00
parent 90e807ba46
commit a687a08b0b
5 changed files with 172 additions and 22 deletions

View File

@ -93,7 +93,6 @@ read_q_tail ds 2
write_q_head ds 2 write_q_head ds 2
write_q_tail ds 2 write_q_tail ds 2
master_id ds 2
do *>256 do *>256
err "too big" err "too big"

View File

@ -34,10 +34,19 @@ ptr ds 2
dend dend
init_cda ent *
* rom 0/1 doesn't include _RemoveCDA in ROM so it can't be removed.
* additionally, _InstallCDA has bugs.
* so, for now, disable on ROM 1.
cda_startup ent
php php
rep #$30 rep #$30
jsr $fe1f ; idroutine. y = rom
cpy #3
bcc :nope
* *
* rom 1 IIgs InstallCDA clobbers $3c-$43 on the direct page * rom 1 IIgs InstallCDA clobbers $3c-$43 on the direct page
* *
@ -51,9 +60,31 @@ init_cda ent
pld pld
:nope
plp plp
rts rts
cda_shutdown ent
mx %00
jsr $fe1f ; idroutine. y = rom
cpy #3
bcc :nope
phd
pea #0
pld
psl #handle
_RemoveCDA
pld
:nope
rts
handle adrl Header ; can use a fake handle for now, until we need to _RemoveCDA handle adrl Header ; can use a fake handle for now, until we need to _RemoveCDA
Header Header
str 'Virtual Terminal' str 'Virtual Terminal'
@ -101,9 +132,11 @@ main
:keyloop :keyloop
sep #$30
lda KBD lda KBD
bpl :keyloop bpl :keyloop
sta KEYSTROBE sta KEYSTROBE
rep #$30
and #$7f and #$7f

View File

@ -4,6 +4,8 @@
xc xc
xc xc
tbx on
use vt.equ use vt.equ
use apple2gs.equ use apple2gs.equ
use debug use debug
@ -74,7 +76,7 @@ keypress ent
bne command bne command
bit #kmKeypad bit #kmKeypad
bne keypad jne keypad
bit #kmControl bit #kmControl
bne :ctrl bne :ctrl
@ -112,11 +114,15 @@ command ; or option
beq :bs beq :bs
cmp #$0d cmp #$0d
beq :lf beq :lf
cmp #'l'
beq :local
cmp #'L'
beq :local
cmp #'a'
bcc :0
cmp #'z'+1
bcs :0
and #$df ; ~ $20
:0
cmp #:MIN cmp #:MIN
blt :rts blt :rts
cmp #:MAX+1 cmp #:MAX+1
@ -147,16 +153,58 @@ command ; or option
stz LOCAL stz LOCAL
jmp enable_modem jmp enable_modem
:quit
ext quit
jmp quit
rts
:reset
* TODO
rts
:clear
* TODO
rts
:MIN equ 49 :MIN equ 49
:MAX equ 52 :MAX equ 82
:table :table
dw pf1 ; 1 dw pf1 ; 1
dw pf2 ; 2 dw pf2 ; 2
dw pf3 ; 3 dw pf3 ; 3
dw pf4 ; 4 dw pf4 ; 4
dw :rts ; 5
dw :rts ; 6
dw :rts ; 7
dw :rts ; 8
dw :rts ; 9
dw :rts ; :
dw :rts ; ;
dw :rts ; <
dw :rts ; =
dw :rts ; >
dw :rts ; ?
dw :rts ; @
dw :rts ; A
dw :rts ; B
dw :rts ; C
dw :rts ; D
dw :rts ; E
dw :rts ; F
dw :rts ; G
dw :rts ; H
dw :rts ; I
dw :rts ; J
dw :clear ; K
dw :local ; L
dw :rts ; M
dw :rts ; N
dw :rts ; O
dw :rts ; P
dw :quit ; Q
dw :reset ; R

View File

@ -13,13 +13,14 @@
ext scroll_down ext scroll_down
ext recalc_cursor,recalc_cursor_x,recalc_cursor_y ext recalc_cursor,recalc_cursor_x,recalc_cursor_y
ext modem_io,init_modem,modem_vector,reset_modem_buffer ext modem_io,modem_vector,reset_modem_buffer
ext modem_startup,modem_shutdown
ext keypress ext keypress
ext disable_cursor,enable_cursor,cursor_vector ext disable_cursor,enable_cursor,cursor_vector
ext erase_screen,fill_screen ext erase_screen,fill_screen
ext init_tabs ext init_tabs
ext init_audio ext init_audio
ext init_cda ext cda_startup,cda_shutdown
main debug main main debug main
@ -119,12 +120,14 @@ init
sta state sta state
* jsr erase_screen * jsr erase_screen
jsr init_modem jsr modem_startup
jsr init_tabs jsr init_tabs
jsr init_audio jsr init_audio
jsr init_cda jsr cda_startup
rts rts
MasterID dw 0
init_mem init_mem
* *
* see prodos technote #27 * see prodos technote #27
@ -135,7 +138,7 @@ init_mem
mx %00 mx %00
stz master_id stz MasterID
_TLStartUp _TLStartUp
pha pha
_MMStartUp _MMStartUp
@ -148,14 +151,15 @@ init_mem
pea #$1000 pea #$1000
_GetNewID _GetNewID
pla pla
sta master_id sta MasterID
* bank 0 * bank 0
pha pha
pha pha
pea #$0000 pea #$0000
pea #$b800 pea #$b800
pei master_id lda MasterID
pha
pea #$c013 pea #$c013
pea #0000 pea #0000
pea #0800 pea #0800
@ -168,7 +172,8 @@ init_mem
pha pha
pea #$0000 pea #$0000
pea #$b800 pea #$b800
pei master_id lda MasterID
pha
pea #$c013 pea #$c013
pea #$0001 pea #$0001
pea #$0800 pea #$0800
@ -243,6 +248,50 @@ reset ent
rts rts
quit ent
* need to disable modem interrupts
sep #$30
lda #4
trb VGCINT ; disable 1-sec interrupt.
stz SCANINT ; reset 1-sec interrupt
jsr modem_shutdown
rep #$30
jsr cda_shutdown
lda MasterID
beq :e
pha
pha
_DisposeAll
_DeleteID
:e
pea #0
pld
sec
xce
mx %00
inc $3f4 ; invalidate power-up bit
jsr $bf00
db $65
dw :parms
brk $ea
:parms db 4
db 0
dw 0
db 0
dw 0
*dispatch ent *dispatch ent
* mx %11 * mx %11
** a = character to xmit ** a = character to xmit

View File

@ -30,7 +30,7 @@ SerFlag equ $e10104 ;
* *
* see IIgs TN #18 - Do-It-Yourself SCC Access * see IIgs TN #18 - Do-It-Yourself SCC Access
init_modem ent modem_startup ent
enable_modem ent enable_modem ent
* sep #$30 * sep #$30
@ -112,6 +112,27 @@ disable_modem ent
rts rts
modem_shutdown ent
mx %11
php
sei
lda SCCBREG ; sync access
lda #9
sta SCCBREG
lda #%01_0_1_0_0_0_1 ; reset channel B.
sta SCCBREG
lda >SerFlag
and #%11_111_000 ; channel B interrupts.
sta >SerFlag
plp
rts
write_modem_sync ent write_modem_sync ent
mx %11 mx %11
* a: byte to send * a: byte to send