Compare commits

...

38 commits
main ... wic64

Author SHA1 Message Date
Michael Steil
fcdcbc4870 wip 2022-02-24 10:25:30 -08:00
Michael Steil
82b019a701 cleanups 2022-02-22 08:54:21 -08:00
Michael Steil
db7b3e9cb4 cleanups 2022-02-22 08:47:32 -08:00
Michael Steil
24b2f6a403 cleanups 2022-02-22 08:41:17 -08:00
Michael Steil
b254c5389b fixed registers on send, cleanups 2022-02-22 08:21:48 -08:00
Michael Steil
bcd24dbe70 wip 2022-02-21 07:54:54 -08:00
Michael Steil
dc542670ee changing to different model wip: only get n chars at a time, read all of them into buffer, no longer cache upload chars but send them immediately 2022-02-21 07:47:55 -08:00
Michael Steil
2b2dcc271b removed extra dummy byte hack (fixed ESP firmware; remove handshake_flag2 line in sendmessage) 2022-02-21 07:37:01 -08:00
Michael Steil
a6f0632c86 working send queue 2022-02-18 18:29:38 -08:00
Michael Steil
5f46a419dc works both ways 2022-02-18 17:31:21 -08:00
Michael Steil
b2d80657ea wip 2022-02-18 17:05:47 -08:00
Michael Steil
362b0637ee protocol seems to work!! 2022-02-18 16:46:07 -08:00
Michael Steil
b90771f77e cleanup 2022-02-18 16:16:19 -08:00
Michael Steil
f1aa6d2cee cleanup 2022-02-18 15:59:15 -08:00
Michael Steil
828fa4988a cleanup 2022-02-18 15:58:41 -08:00
Michael Steil
8d3b6d0b61 cleanup 2022-02-18 15:58:41 -08:00
Michael Steil
338612c919 cleanup 2022-02-18 15:58:41 -08:00
Michael Steil
d5bfa7728d cleanup 2022-02-18 15:58:41 -08:00
Michael Steil
58c7d0e30b cleanup 2022-02-18 15:58:41 -08:00
Michael Steil
c8d3a30266 cleanup 2022-02-18 15:58:41 -08:00
Michael Steil
e50a609915 cleanup 2022-02-18 15:58:41 -08:00
Michael Steil
578cfb2811 cleanup 2022-02-18 15:58:41 -08:00
Michael Steil
1d9785c718 cleanup 2022-02-18 15:58:41 -08:00
Michael Steil
916061437b cleanup 2022-02-18 15:58:41 -08:00
Michael Steil
ad6285f6ee cleanup 2022-02-18 15:58:41 -08:00
Michael Steil
d7e388f061 cleanup 2022-02-18 15:58:41 -08:00
Michael Steil
5da15f9a84 cleanup 2022-02-18 15:58:41 -08:00
Michael Steil
ba5977510e cleanup 2022-02-18 15:58:41 -08:00
Michael Steil
f865018664 cleanup 2022-02-18 15:58:41 -08:00
Michael Steil
9c890aec42 cleanup 2022-02-18 15:58:41 -08:00
Michael Steil
7860d13eea cleanup 2022-02-18 15:58:41 -08:00
Michael Steil
ddd13d7482 cleanup 2022-02-18 15:58:41 -08:00
Michael Steil
b482578d6f WiC64 hack 2022-02-18 15:58:41 -08:00
Michael Steil
b89805bd96 changed modem driver dispatch to a jump table 2022-02-18 15:58:41 -08:00
Michael Steil
5e4673b914 moved SwitftLink address patching into driver 2022-02-18 15:58:41 -08:00
Michael Steil
e60ccda70d moved dropdtr code into the respective drivers 2022-02-18 15:58:41 -08:00
Michael Steil
e767b88fa8 removed IBSOUT/IGETIN hooks 2022-02-18 15:58:41 -08:00
Michael Steil
fb9beb6958 changed modem access from BSOUT/GETIN to modput/modget 2022-02-18 15:58:41 -08:00
23 changed files with 506 additions and 352 deletions

View file

@ -11,7 +11,7 @@ run: all
x64sc +cart -acia1 -acia1base 0xDE00 -acia1irq 1 -acia1mode 1 -myaciadev 0 -rsdev1 localhost:25232 -rsdev1baud 9600 build/disk.d64
usb: all
cp build/ccgmsterm.prg /Volumes/C64/; diskutil unmountDisk force /Volumes/C64
cp build/ccgmsterm.prg /Volumes/C64/ && diskutil unmountDisk force /Volumes/C64
clean:
rm -rf build

View file

@ -72,7 +72,6 @@ easyflash_support:
.include "rs232.s"
.include "reu.s"
.include "theme.s"
.include "easyflash.s"
.segment "S5100"
@ -80,6 +79,8 @@ easyflash_support:
.segment "S5C00"
.include "easyflash.s"
.include "instr.s"
.include "wic64.s"
endprg .byte 0

View file

@ -12,7 +12,7 @@
config_data:
baud_rate:
.byte BAUD_2400
.byte BAUD_9600
; indicates whether dialing should use ATD, followed by a quote
firmware_zimmers:
@ -22,7 +22,10 @@ mopo2:
.byte $20 ; unused, but needs to stay for bin compat
modem_type:
.byte MODEM_TYPE_USERPORT
; .byte MODEM_TYPE_USERPORT
; .byte MODEM_TYPE_UP9600
.byte MODEM_TYPE_WIC64
; .byte MODEM_TYPE_SWIFTLINK_DE
;----------------------------------------------------------------------
; Phone book
@ -87,7 +90,7 @@ macmm4:
;----------------------------------------------------------------------
; file transmission protocol
protoc:
.byte PROTOCOL_PUNTER
.byte PROTOCOL_XMODEM
; current theme; see theme.s
theme:

View file

@ -81,6 +81,7 @@ half_duplex = $12
zpoutstr = $22 ; 2 bytes
sndtim = $24 ; 2 bytes, UP9600
rcvtim = $26 ; 2 bytes, UP9600
zpcmd = $26 ; 2 bytes, WiC64
tmp9e = $9e
tmp9f = $9f
inbits = $a8
@ -161,7 +162,6 @@ COLTAB = $e8da ; PETSCII codes for the colors 0-15
; logical file numbers
LFN_FILE = 2 ; for upload/download
LFN_PRINTER = 4 ; printing buffers
LFN_MODEM = 5
LFN_DIR = 13
LFN_DISK_CMD = 15
@ -206,9 +206,10 @@ CURSOR = '_' ; cursor, ASCII "_"
MODEM_TYPE_USERPORT = 0
MODEM_TYPE_UP9600 = 1
MODEM_TYPE_SWIFTLINK_DE = 2
MODEM_TYPE_SWIFTLINK_DF = 3
MODEM_TYPE_SWIFTLINK_D7 = 4
MODEM_TYPE_WIC64 = 2
MODEM_TYPE_SWIFTLINK_DE = 3
MODEM_TYPE_SWIFTLINK_DF = 4
MODEM_TYPE_SWIFTLINK_D7 = 5
BAUD_300 = 0
BAUD_1200 = 1

View file

@ -105,8 +105,6 @@ dir_once_per_line:
jsr chrout ; position cursor over last printed line
lda #3
sta DFLTN ; input from screen
ldx #LFN_MODEM
jsr chkout
ldy #0
@loop:
; eat all bytes from the modem
@ -120,7 +118,7 @@ dir_once_per_line:
jsr disablexfer
jsr getin ; input from screen
jsr enablexfer
jsr chrout ; send to modem
jsr modput
tya
pha
lda #21
@ -132,17 +130,15 @@ dir_once_per_line:
cpy #27 ; max with (will send extra spaces at the end)
bcc @loop
lda #CR
jsr chrout ; send to modem
jsr modput
jsr clrchn
lda #CR
jsr chrout ; screen
; eat all bytes in the RS232 buffer
ldx #LFN_MODEM
jsr chkin
: jsr getin
lda rtail
cmp rhead ; [XXX isn't this what clear232 does?]
: jsr modget
lda RIDBE
cmp RIDBS ; [XXX isn't this what clear232 does?]
bne :-
@skip:

View file

@ -62,13 +62,11 @@ dskout:
jsr clear232
jsr enablexfer
jsr clear232
ldx #LFN_MODEM
jsr chkout
pla
ldx ascii_mode
beq :+
jsr petscii_to_ascii
: jsr chrout
: jsr modput
; eat echo from modem
; (this timeout failsafe makes sure the byte is received back from modem

View file

@ -41,7 +41,7 @@ start
; editor/screen setup
lda #1
sta BLNSW ; enable cursor blinking
sta BLNSW ; disable cursor blinking
lda #BCOLOR
sta backgr
sta border
@ -114,17 +114,13 @@ rsopen:
jsr up9600_disable
jsr enablemodem
jsr clall
lda #LFN_MODEM
ldx #DEV_MODEM
ldy #SA_MODEM
jsr setlfs
lda aciaemu_filename_len
ldx #<aciaemu_filename
ldy #>aciaemu_filename
jsr setnam
jsr open
lda #>ribuf ; move rs232 buffers
sta RIBUF+1 ; for the userport 300-2400 modem nmi handling
; jsr $F483 ; XXX maybe necessary for User Port driver
lda #<ribuf ; move rs232 buffers
sta RIBUF ; for the userport 300-2400 modem nmi handling
lda #>ribuf
sta RIBUF+1
jsr disablemodem
rts ; [XXX jmp]
@ -153,7 +149,7 @@ init
;sta allcap ; upper/lower
sta buffer_open
sta half_duplex ; full duplex
jsr $e544 ; clear screen
; jsr $e544 ; clear screen
lda config_file_loaded; already loaded config file?
bne @noload
lda drive_present

View file

@ -64,15 +64,12 @@ prtmc0
bne @mc2 ; -> don't send
; send character
ldx #LFN_MODEM
jsr chkout
pla
pha
ldx ascii_mode
beq :+
jsr petscii_to_ascii
: jsr chrout ; send character to modem
jsr clrchn
: jsr modput
lda #$100-3
sta JIFFIES
: lda JIFFIES
@ -83,9 +80,7 @@ prtmc0
bne :- ; wait 50 msec [XXX combine]
; get echo
ldx #LFN_MODEM
jsr chkin
jsr getin
jsr modget
cmp #0
bne @mci
ldx half_duplex

View file

@ -51,55 +51,3 @@ toggle_cursor: ; [XXX unused]
eor #1
sta cursor_flag
jmp term_mainloop
;----------------------------------------------------------------------
; hang up phone
hangup:
ldx SHFLAG
cpx #SHFLAG_CBM
bne :+ ; not C= Stop
jsr cursor_off
lda #<txt_disconnecting
ldy #>txt_disconnecting
jsr outstr
lda modem_type
beq droprs ; MODEM_TYPE_USERPORT
cmp #MODEM_TYPE_UP9600
beq dropup
jmp dropswift
: jmp term_mainloop
;----------------------------------------------------------------------
; Drop: Userport
droprs:
lda #%00000100
sta $dd03
lda #0
sta cia2pb
ldx #$100-30
stx JIFFIES
: bit JIFFIES
bmi :-
lda #4
sta cia2pb
jmp term_mainloop
;----------------------------------------------------------------------
; Drop: UP9600
dropup lda #%00000100
sta cia2ddrb
lda #%00000010
sta cia2pb
ldx #$100-30
stx JIFFIES
: bit JIFFIES
bmi :-
lda #%00000010
sta cia2ddrb
jmp term_mainloop
;----------------------------------------------------------------------
; Drop: Swiftlink
dropswift:
jsr sw_dropdtr
jmp term_mainloop

View file

@ -110,16 +110,16 @@ mlsgo
jsr mlshdr
ldy #0
mlsgo1 lda inpbuf,y
jsr chrout ; modem
jsr modput
iny
cpy max
bne mlsgo1
lda inpbuf,y
jsr chrout ; modem
jsr modput
lda inpbuf+1,y
jsr chrout ; modem
jsr modput
lda #CR
jsr chrout ; modem
jsr modput
jsr clrchn
jsr uplmen ; disk setup
ldx SHFLAG
@ -141,11 +141,11 @@ mlss5
jsr mlshdr
ldx #16
lda #4 ; ctrl-d
: jsr chrout ; modem
: jsr modput
dex
bne :-
lda #CR
jsr chrout ; modem
jsr modput
mlssab jsr clrchn
jsr text_color_restore
jsr gong
@ -156,11 +156,9 @@ mlssab jsr clrchn
mlshdr:
jsr clear232
jsr enablexfer
ldx #LFN_MODEM
jsr chkout
ldx #16
lda #9 ; ctrl-i
: jsr chrout ; modem
: jsr modput
dex
bne :-
rts
@ -208,16 +206,14 @@ mlrwat
ldx SHFLAG
cpx #SHFLAG_CBM
beq mulab2
ldx #LFN_MODEM
jsr chkin
jsr getin ; modem
jsr modget
cmp #9 ; ctrl-i
bne mlrwat
mlrwt2
ldx SHFLAG
cpx #SHFLAG_CBM
beq mulab2
jsr getin ; modem
jsr modget
cmp #0
beq mlrwt2
cmp #9 ; ctrl-i
@ -227,9 +223,7 @@ mlrflp
ldx SHFLAG
cpx #SHFLAG_CBM
beq mulab2
ldx #LFN_MODEM
jsr chkin
jsr getin ; modem
jsr modget
cmp #0
beq mlrflp
mlrfl1

View file

@ -1189,11 +1189,9 @@ dial:
; hayes dial
jsr clear232
jsr enablemodem
ldx #LFN_MODEM
jsr chkout
lda #<txt_atv1 ; send word result codes (as opposed to numeric)
ldy #>txt_atv1
jsr outmod
jsr strmod_delay
lda firmware_zimmers
bne @1
lda #<txt_atd
@ -1201,7 +1199,7 @@ dial:
jmp @2
@1: lda #<txt_atd_zimmers
ldy #>txt_atd_zimmers
@2: jsr outstr
@2: jsr strmod
ldx #0
@loop: stx numptr
ldx numptr
@ -1209,12 +1207,11 @@ dial:
sta $d800+23*40+7,x
ldx numptr
lda numbuf,x
jsr chrout ; to modem
jsr modput
ldx numptr
inx
cmp #CR ; CR-terminated
bne @loop
jsr clrchn
jmp haybus
;----------------------------------------------------------------------
@ -1249,15 +1246,12 @@ hayes_connected:
flush_modem:
lda #$100-24
sta JIFFIES
ldx #LFN_MODEM
jsr chkin
: jsr getin
: jsr modget
cmp #CR
beq :+
lda JIFFIES
bne :-
: jsr clrchn ; [XXX jmp]
rts
: rts
;----------------------------------------------------------------------
hayes_userabort:
@ -1280,9 +1274,21 @@ hayes_redial:
jmp dalfin ; back to phbook
;----------------------------------------------------------------------
; send string to modem and wait a bit
outmod:
jsr outstr
; send string to modem
strmod:
sty zpoutstr+1
sta zpoutstr
ldy #0
@loop: lda (zpoutstr),y
beq @rts
jsr modput
iny
bne @loop
@rts: rts
;----------------------------------------------------------------------
strmod_delay:
jsr strmod
lda #$100-32
sta JIFFIES
: lda JIFFIES
@ -1487,9 +1493,7 @@ hmodget:
ldx waittemp ; so it doesn't lock up
cpx #144 ; maybe change for various baud rates
beq :+
ldx #LFN_MODEM
jsr chkin
jsr getin
jsr modget
beq hmodget
: ldx #0
stx waittemp

View file

@ -195,16 +195,14 @@ dorts pha
sendcode
jsr clear232
jsr enablexfer
ldx #LFN_MODEM
jsr chkout
ldx #0
sn1 lda codes,y
jsr chrout
jsr modput
iny
inx
cpx #$03
bne sn1
jmp clrchn
rts
;
;do handshaking for reception end
;
@ -320,15 +318,12 @@ tx10 lda #':'
jsr altbuf
jsr clear232
jsr enablexfer
ldx #LFN_MODEM
jsr chkout
ldy #0
tx6 lda (pntb),y ;transmit alternate buffer
jsr chrout
jsr modput
iny
cpy bufcount
bne tx6
jsr clrchn
lda #0
rts
;

View file

@ -3,80 +3,72 @@
; Copyright (c) 2016,2020, Craig Smith, alwyz. All rights reserved.
; This project is licensed under the BSD 3-Clause License.
;
; Generic RS232 Code
; RS232 Driver Dispatch
;
;----------------------------------------------------------------------
; RS232 driver dispatch: enable modem
enablemodem
; Dispatch: Enable modem
enablemodem:
ldx #MODEM_TYPE_SWIFTLINK_DE
lda modem_type
beq @2 ; MODEM_TYPE_USERPORT
cmp #MODEM_TYPE_UP9600
beq @1
cmp #MODEM_TYPE_SWIFTLINK_DE
beq @3
cmp #MODEM_TYPE_SWIFTLINK_DF
beq @4
cmp #MODEM_TYPE_SWIFTLINK_D7
beq @5
rts
@1: jmp up9600_setup
@2: jmp rsuser_setup
@3: lda #$de
jmp @6
@4: lda #$df
jmp @6
@5: lda #$d7
; set Swiftlink address by modifying all access code
; [XXX this should be moved to the Swiftlink code]
@6: sta sm1+2
sta sm2+2
sta sm3+2
sta sm4+2
sta sm5+2
sta sm6+2
sta sm7+2
sta sm8+2
sta sm9+2
sta sm10+2
sta sm11+2
sta sm12+2
sta sm13+2
sta sm14+2
sta sm15+2
sta sm16+2
sta sm17+2
sta sm18+2
sta sm19+2
sta sm20+2
sta sm21+2
sta sm22+2
sta sm23+2
sta sm24+2
sta sm25+2
jmp sw_setup
bcc :+
txa
: asl
tax
lda modem_drivers,x
sta tmp02
lda modem_drivers+1,x
sta tmp02+1
ldx #1
ldy #0
: lda (tmp02),y
sta rs232_funcs,x
iny
inx
lda (tmp02),y
sta rs232_funcs,x
iny
inx
inx
cpy #2*6
bne :-
rs232_funcs:
; setup
jmp $ffff
func_enable:
jmp $ffff
func_disable:
jmp $ffff
func_getxfer:
jmp $ffff
func_putxfer:
jmp $ffff
func_dropdtr:
jmp $ffff
.res 6*2
modem_drivers:
.word rsuser_funcs ; MODEM_TYPE_USERPORT
.word up9600_funcs ; MODEM_TYPE_UP9600
.word wic64_funcs ; MODEM_TYPE_WIC64
.word sw_funcs ; MODEM_TYPE_SWIFTLINK_DE, ...
;----------------------------------------------------------------------
; RS232 driver dispatch: enable transfer
; Dispatch: Enable transfer
enablexfer:
pha
txa
pha
tya
pha
lda modem_type
beq @1 ; MODEM_TYPE_USERPORT
cmp #MODEM_TYPE_UP9600
beq @2
jsr sw_enable
jmp xferout
@1: jsr rsuser_enable
jmp xferout
@2: jsr up9600_enable
jsr func_enable
jmp xferout
;----------------------------------------------------------------------
; RS232 driver dispatch: disable transfer
; Dispatch: Disable transfer
disablexfer:
disablemodem:
pha
@ -84,16 +76,7 @@ disablemodem:
pha
tya
pha
lda modem_type
beq @2 ; MODEM_TYPE_USERPORT
cmp #MODEM_TYPE_UP9600
beq @1
jsr sw_disable
jmp xferout
@1: jsr up9600_disable
jmp xferout
@2: jsr rsuser_disable
jmp xferout ; [XXX redundant]
jsr func_disable
xferout:
pla
tay
@ -103,13 +86,27 @@ xferout:
rts
;----------------------------------------------------------------------
; RS232 driver dispatch: get byte from modem
; Dispatch: Get byte from modem
modget:
lda modem_type
beq @2 ; MODEM_TYPE_USERPORT
cmp #MODEM_TYPE_UP9600
beq @1
jmp sw_getxfer ; swiftlink
@1: jmp up9600_getxfer ; up9600
@2: jmp rsuser_getxfer ; regular
jsr func_getxfer
pha
php
lda #0
rol
sta status ; some callers want STATUS set
plp ; others want C set on error/no data
pla
rts
;----------------------------------------------------------------------
; Dispatch: Send byte to modem
modput:
pha
lda #0
sta status
pla
jmp func_putxfer
;----------------------------------------------------------------------
; Dispatch: Hang up
dropdtr = func_dropdtr

View file

@ -25,6 +25,15 @@ sw_cmd = swift+2
sw_ctrl = swift+3
sw_baud = swift+7
;----------------------------------------------------------------------
sw_funcs:
.word sw_setup
.word sw_enable
.word sw_disable
.word sw_getxfer
.word sw_putxfer
.word sw_dropdtr
;----------------------------------------------------------------------
; new NMI handler
nmisw:
@ -101,6 +110,43 @@ sm15 sta sw_cmd
;----------------------------------------------------------------------
sw_setup:
; set SwiftLink address by modifying all access code
lda modem_type
cmp #MODEM_TYPE_SWIFTLINK_DE
beq @de
cmp #MODEM_TYPE_SWIFTLINK_DF
beq @df
lda #$d7 ; else MODEM_TYPE_SWIFTLINK_D7
bne @cont
@de: lda #$de
bne @cont
@df: lda #$df
@cont: sta sm1+2
sta sm2+2
sta sm3+2
sta sm4+2
sta sm5+2
sta sm6+2
sta sm7+2
sta sm8+2
sta sm9+2
sta sm10+2
sta sm11+2
sta sm12+2
sta sm13+2
sta sm14+2
sta sm15+2
sta sm16+2
sta sm17+2
sta sm18+2
sta sm19+2
sta sm20+2
sta sm21+2
sta sm22+2
sta sm23+2
sta sm24+2
sta sm25+2
sei
; .------------------------- parity control,
; :.------------------------ bits 5-7
@ -137,16 +183,6 @@ sm18 lda sw_ctrl
ora swbaud,x
sm19 sta sw_ctrl
lda #<swiftlink_bsout
ldx #>swiftlink_bsout
sta $0326 ; IBSOUT
stx $0327
lda #<swiftlink_getin
ldx #>swiftlink_getin
sta $032a ; IGETIN
stx $032b
lda #<nmisw
ldx #>nmisw
sta $0318 ; NMINV
@ -157,16 +193,7 @@ sm19 sta sw_ctrl
rts
;----------------------------------------------------------------------
; new BSOUT
swiftlink_bsout:
pha ; dupliciaton of original kernal routines
lda DFLTO ; test dfault output device for
cmp #2 ; screen, and...
beq :+
pla ; if so, go back to original rom routines
jmp oldout
: pla
sw_putxfer:
sta rsotm
stx rsotx
sty rsoty
@ -185,6 +212,7 @@ sm22 sta sw_cmd
rts
;----------------------------------------------------------------------
; Hang up
sw_dropdtr:
sm23 lda sw_cmd
and #%11111110
@ -197,20 +225,6 @@ sm24 sta sw_cmd
sm25 sta sw_cmd
rts
;----------------------------------------------------------------------
; new GETIN
swiftlink_getin:
lda DFLTN
cmp #2 ; see if default input is modem
jne ogetin ; nope, go back to original
jsr sw_getxfer
bcs :+ ; if no character, then return 0 in a
rts
: clc
lda #0
rts
;----------------------------------------------------------------------
; get byte from serial interface
sw_getxfer:

View file

@ -17,6 +17,15 @@
RTS_MIN = 50 ; enable Request To Send when buffer reaches this
RTS_MAX = 200 ; disable Request To Send when buffer reaches this
;----------------------------------------------------------------------
up9600_funcs:
.word up9600_setup
.word up9600_enable
.word up9600_disable
.word up9600_getxfer
.word up9600_putxfer
.word up9600_dropdtr
;----------------------------------------------------------------------
up9600_nmi:
bit $dd0d ; check bit 7 (startbit ?)
@ -84,16 +93,6 @@ up9600_setup:
jsr setbaudup
lda #<up9600_bsout
ldx #>up9600_bsout
sta $0326
stx $0327
lda #<up9600_getin
ldx #>up9600_getin
sta $032a
stx $032b
;----------------------------------------------------------------------
; enable serial interface (IRQ+NMI)
up9600_enable:
@ -216,24 +215,8 @@ setbaudup:
sta rcvtim
rts
;----------------------------------------------------------------------
; new GETIN
up9600_getin:
lda DFLTN
cmp #2 ; see if default input is modem
jne ogetin ; nope, go back to original
jsr up9600_getxfer
bcs :+ ; if no character, then return 0 in a
rts
: clc
lda #0
rts
;----------------------------------------------------------------------
; get byte from serial interface
; refer to this routine only if you wanna use it for
; protocols (xmodem, punter etc)
up9600_getxfer:
ldx rhead
cpx rtail
@ -255,16 +238,7 @@ up9600_getxfer:
@skip: rts
;----------------------------------------------------------------------
; new BSOUT
up9600_bsout:
pha ;dupliciaton of original kernal routines
lda DFLTO ;test dfault output device for
cmp #2 ;screen, and...
beq :+
pla ;if so, go back to original rom routines
jmp oldout
:
pla
up9600_putxfer:
sta rsotm
stx rsotx
sty rsoty
@ -324,3 +298,18 @@ up9600_disable:
sta $0315 ; irq
cli
rts
;----------------------------------------------------------------------
; Hang up
up9600_dropdtr:
lda #%00000100
sta cia2ddrb
lda #%00000010
sta cia2pb
ldx #$100-30
stx JIFFIES
: bit JIFFIES
bmi :-
lda #%00000010
sta cia2ddrb
rts

View file

@ -13,6 +13,15 @@
; rsuser_disable
; rsuser_getxfer
;----------------------------------------------------------------------
rsuser_funcs:
.word rsuser_setup
.word rsuser_enable
.word rsuser_disable
.word rsuser_getxfer
.word rsuser_putxfer
.word rsuser_dropdtr
;----------------------------------------------------------------------
rsuser_setup:
sei
@ -24,16 +33,6 @@ rsuser_setup:
sta $0318 ; NMINV
sty $0319
lda #<rsuser_bsout
ldx #>rsuser_bsout
sta $0326 ; IBSOUT
stx $0327
lda #<rsuser_getin
ldx #>rsuser_getin
sta $032a ; IGETIN
stx $032b
cli
jmp clear232
@ -54,23 +53,10 @@ isbyte:
lastring: ; [XXX unused]
.byte 0
;----------------------------------------------------------------------
; new GETIN
rsuser_getin:
lda DFLTN
cmp #2 ; see if default input is modem
jne ogetin ; nope, go back to original
jsr rsuser_getxfer
bcs :+ ; if no character, then return 0 in a
rts
: clc
lda #0
rts
;----------------------------------------------------------------------
; get byte from serial interface
rsuser_getxfer:
jsr $F04F ; XXX necessary for User Port driver
ldx rhead
cpx rtail
beq :+ ; skip (empty buffer, return with carry set)
@ -189,13 +175,10 @@ endbyte lda #0
jmp rsuser_disable
;----------------------------------------------------------------------
; new BSOUT
rsuser_bsout:
pha
lda DFLTO
cmp #2
bne notmod
pla
rsuser_putxfer:
; pha
; jsr $EFE3 ; XXX maybe necessary for User Port driver
; pla
sta rsotm
stx rsotx
sty rsoty
@ -233,8 +216,6 @@ ret1 clc
ldy rsoty
lda rsotm
rts
notmod pla
jmp oldout
;----------------------------------------------------------------------
; disable rs232 input
@ -290,3 +271,18 @@ rsuser_setbaud:
lda bdloc+13,y
sta fullhi
rts
;----------------------------------------------------------------------
; Hang up
rsuser_dropdtr:
lda #%00000100
sta $dd03
lda #0
sta cia2pb
ldx #$100-30
stx JIFFIES
: bit JIFFIES
bmi :-
lda #4
sta cia2pb
rts

View file

@ -114,7 +114,15 @@ term_mainloop:
; shift-stop: hang up
cmp #$83
bne @no4
jmp hangup
ldx SHFLAG
cpx #SHFLAG_CBM
bne :+ ; not C= Stop
jsr cursor_off
lda #<txt_disconnecting
ldy #>txt_disconnecting
jsr outstr
jsr dropdtr
: jmp term_mainloop
@no4:
; f1..f8: functions
@ -171,11 +179,7 @@ term_mainloop:
:
; send to modem
pha
ldx #LFN_MODEM
jsr chkout
pla
jsr chrout
jsr modput
; convert back to PETSCII
ldx ascii_mode
@ -229,16 +233,11 @@ term_mainloop:
:
; modem input
ldx #LFN_MODEM
jsr chkin ; get the byte from the modem
jsr getin
@xxxx: jsr modget
cmp #0
beq @loop2b ; = @loop2
ldx status
bne @loop2b ; = @loop2
pha
jsr clrchn
pla
; ASCII conversion
ldx ascii_mode

242
src/wic64.s Normal file
View file

@ -0,0 +1,242 @@
; CCGMS Terminal
;
; Copyright (c) 2022, Michael Steil. All rights reserved.
; This project is licensed under the BSD 2-Clause License.
;
; WiC64 Driver
; based on "Simple Telnet Demo" source by KiWi, 2-clause BSD
;
BYTES_PER_TCP_GET = 128 ; max 255
;----------------------------------------------------------------------
wic64_funcs:
.word wic64_setup
.word wic64_enable
.word wic64_disable
.word wic64_getxfer
.word wic64_putxfer
.word wic64_dropdtr
;----------------------------------------------------------------------
wic64_setup:
lda once
beq :+
rts
: inc once
lda #0
sta rhead
sta rtail
; set DDR PA2 to output (data direction indicator for device)
lda $dd02
ora #$04
sta $dd02
; XXX for now, connect to fixed server immediately
; count string length
ldy #0
: lda server_address,y
iny
and #$ff
bne :-
iny
iny
iny
sty cmd_tcp_connect_len
lda #<cmd_tcp_connect
sta zpcmd
lda #>cmd_tcp_connect
sta zpcmd+1
lda #4
jsr sendcommand2
ldy #0
: lda server_address,y
beq :+
jsr write_byte
iny
bne :-
:
jsr read_status
bcs BADBADBAD1 ; Could not connect
rts
BADBADBAD1:
inc $d021
jmp BADBADBAD1
BADBADBAD2:
inc $d020
jmp BADBADBAD2
BADBADBAD3:
inc $0400
jmp BADBADBAD3
;----------------------------------------------------------------------
wic64_getxfer:
stx @save_x
sty @save_y
; is there data in the buffer?
lda rhead
cmp rtail
bne @skip
; ask for more data
ldx #<cmd_tcp_get
ldy #>cmd_tcp_get
jsr sendcommand
lda #0
sta rhead
jsr get_reply_size
sta rtail ; length lo (hi is assumed 0)
sec
beq @end ; no data, return with C=1
ldx #0
: jsr read_byte ; read data into buffer
sta ribuf,x
inx
cpx rtail
bne :-
@skip:
ldx rhead
lda ribuf,x ; get byte from buffer
inx
stx rhead
clc
@end:
@save_x=*+1
ldx #$ff
@save_y=*+1
ldy #$ff
rts
;----------------------------------------------------------------------
wic64_putxfer:
stx @save_x
sty @save_y
sta cmd_tcp_put_payload
ldx #<cmd_tcp_put
ldy #>cmd_tcp_put
jsr sendcommand
jsr read_status
bcs BADBADBAD2
lda cmd_tcp_put_payload
@save_x=*+1
ldx #$ff
@save_y=*+1
ldy #$ff
rts
;----------------------------------------------------------------------
sendcommand:
stx zpcmd
sty zpcmd+1
ldy #1
lda (zpcmd),y ; length of command
sendcommand2:
sta @len
lda #$ff ; DDR PB input
sta $dd03
lda $dd00
ora #$04 ; PA2 := HIGH -> put device into receiving move
sta $dd00
ldy #0
: lda (zpcmd),y
jsr write_byte
iny
@len=*+1
cpy #$ff
bne :-
rts
;----------------------------------------------------------------------
get_reply_size:
lda #$00 ; DDR PB input
sta $dd03
lda $dd00
and #$ff-4 ; PA2 := LOW -> put device into sending mode
sta $dd00
jsr read_byte ; dummy byte
jsr read_byte ; data size HI
tax
jmp read_byte ; data size LO
;----------------------------------------------------------------------
read_status:
; Any command that returns a status will send one of these strings
; * OK: 1, 0, "0"
; * ERROR: 2, 0, "!E"
; (The first two bytes being the length of the string.)
; We decide on the first character ('0' or not), which one it is.
jsr get_reply_size
jsr read_byte
cmp #'0'
bne :+
clc
rts
: jsr read_byte
sec
rts
;----------------------------------------------------------------------
write_byte:
sta $dd01 ; write data
lda #$10
: bit $dd0d ; wait for the device to accept the byte
beq :-
rts
;----------------------------------------------------------------------
read_byte:
lda #$10 ; wait for device to have a byte ready
: bit $dd0d
beq :-
lda $dd01
rts
;----------------------------------------------------------------------
wic64_enable:
wic64_disable:
wic64_dropdtr:
rts
;----------------------------------------------------------------------
cmd_tcp_get:
.byte 'W'
.word 6
.byte 34
.word BYTES_PER_TCP_GET
cmd_tcp_put:
.byte 'W'
.word 5
.byte 35
cmd_tcp_put_payload:
.byte $00 ; <- will be overwritten
cmd_tcp_connect:
.byte 'W'
cmd_tcp_connect_len:
.word $00 ; <- will be overwritten
.byte 33
server_address:
.byte 0
.byte "192.168.176.104:25232",0
; .byte "raveolution.hopto.org:64128",0
; .byte "lu8fjh-c64.ddns.net:6400",0
;----------------------------------------------------------------------
once:
.byte 0

View file

@ -489,10 +489,6 @@ send:
tay
jsr setlfs
jsr open
ldx #LFN_MODEM
jsr chkout ; [XXX unused because of commented out lines below]
;lda #15
;jsr chrout
jsr dskout
lda #LFN_FILE
jsr close

View file

@ -41,7 +41,6 @@ xmobuf = $fd ; zero page pointer to access the buffer
; uses the following KERNAL calls:
; chkin
; chkout
; chrout
; close
; clrchn
; getin
@ -179,8 +178,6 @@ xmodem_send:
@send_again:
jsr clear_buffers
jsr enablexfer
ldx #LFN_MODEM
jsr chkout
; send block header
lda #SOH
@ -188,18 +185,18 @@ xmodem_send:
cpx #PROTOCOL_XMODEM_1K
bne :+
lda #STX_
: jsr chrout ; 0: SOH/STX (128/1K)
: jsr modput ; 0: SOH/STX (128/1K)
lda xmoblk
jsr chrout ; 1: block index
jsr modput ; 1: block index
eor #$ff
jsr chrout ; 2: block index ^ $FF
jsr modput ; 2: block index ^ $FF
jsr setup_buffer
ldx pagectr
ldy #0
: lda (xmobuf),y
jsr chrout
jsr modput
iny
cpy firstpagebytes
bne :-
@ -213,13 +210,13 @@ xmodem_send:
; send CRC
lda crcz+1
jsr chrout
jsr modput
lda crcz
jmp @send_crc_cont
@ncrc:
lda xmochk
@send_crc_cont:
jsr chrout
jsr modput
jsr clrchn
jsr clear_input_buffer
@ -258,10 +255,8 @@ xmodem_send:
; send EOT
@sne1:
jsr enablexfer
ldx #LFN_MODEM
jsr chkout
lda #EOT
jsr chrout ; send EOT
jsr modput ; send EOT
lda #3 ; timeout
jsr modem_get
bne :+
@ -452,7 +447,7 @@ xmcmab lda #STAT_USER_ABORTED
ldx xmostk
txs
: jsr clear_buffers
jsr clear_buffers
lda xmstat
cmp #STAT_SYNC_LOST
@ -460,12 +455,10 @@ xmcmab lda #STAT_USER_ABORTED
; send CAN if STAT_SYNC_LOST and STAT_USER_ABORTED
jsr _enablexfer
ldx #LFN_MODEM
jsr chkout
ldy #8
lda #CAN
: jsr chrout
: jsr modput
dey
bpl :- ; 9x CAN
@ -511,12 +504,10 @@ xmodem_receive:
@retry2:
jsr clear232
jsr enablexfer
ldx #LFN_MODEM
jsr chkout
@receive_nak_code = *+1
lda #NAK
jsr chrout
jsr modput
jsr clrchn
; block loop
@ -661,10 +652,8 @@ xmodem_receive:
; send ACK
jsr enablexfer
ldx #LFN_MODEM
jsr chkout
lda #ACK
jsr chrout
jsr modput
jsr clrchn
lda #0

View file

@ -8,6 +8,7 @@ int
main(int argc, char **argv) {
while (!feof(stdin)) {
int c = _inbyte(0);
_outbyte(c);
}
}

Binary file not shown.

View file

@ -9,7 +9,7 @@ main(int argc, char **argv) {
char c = 'A';
for (;;) {
_outbyte(c);
sleep(1);
usleep(100000);
c++;
if (c == 'Z' + 1) {
c = 'A';