mirror of
https://github.com/callapple/LLUCE.git
synced 2026-04-22 03:17:09 +00:00
Initial Commit of LLUCE sources
This commit is contained in:
+135
@@ -0,0 +1,135 @@
|
||||
LST OFF
|
||||
TR
|
||||
TR ADR
|
||||
*-------------------------------
|
||||
* reconfigure clocks
|
||||
*-------------------------------
|
||||
|
||||
REL
|
||||
point0 = $11
|
||||
point1 = $14
|
||||
clkdrv = $a00
|
||||
|
||||
DSK REL/CLOCK
|
||||
|
||||
TopBox EXT ; routines external to this file
|
||||
print EXT
|
||||
cls EXT
|
||||
start EXT
|
||||
escape EXT
|
||||
inpnum EXT
|
||||
chinit EXT
|
||||
wrtchg EXT
|
||||
|
||||
gsclock EXT ;gs clock driver
|
||||
serialpro EXT ;serialpro driver
|
||||
thunder EXT ;thunderclock/timemaster driver
|
||||
iicsys EXT ;iic system clock
|
||||
mountain EXT ;mountain clock
|
||||
prodos EXT ;standard prodos stuff
|
||||
nullclk EXT ;no clock
|
||||
noslot EXT ;no slot clock
|
||||
versa EXT ;prometheus versacard
|
||||
ultra EXT ;ultra clock driver
|
||||
|
||||
re_clk ENT
|
||||
JSR TopBox
|
||||
JSR print
|
||||
DB 1,2,30
|
||||
ASC '- Reconfigure Clock -'
|
||||
DB 1,4,5
|
||||
ASC 'Please refer to Appendix C of your user'
|
||||
ASC ' manual for more information.'00
|
||||
|
||||
JSR cls
|
||||
LDX #<start ; setup esc handler
|
||||
LDA #>start
|
||||
JSR escape
|
||||
|
||||
LDA #<clkdrv ;tell it to move the modem
|
||||
STA point1 ;driver
|
||||
LDA #>clkdrv
|
||||
STA point1+1
|
||||
|
||||
IIeClk JSR print
|
||||
DB 1,7,0
|
||||
|
||||
ASC ' 1 - Thunderclock Compatible '
|
||||
ASC ' 7 - ProDOS Compatible Clock'0D
|
||||
ASC ' 2 - A.E. Timemaster II H.O. '
|
||||
ASC ' 8 - Mountain Hardware Clock'0D
|
||||
ASC ' 3 - A.E. Serial Pro '
|
||||
ASC ' 9 - Prometheus Versacard'0D
|
||||
ASC ' 4 - A.E. //c Ultra Clock '
|
||||
ASC '10 - Apple IIgs System Clock'0D
|
||||
ASC ' 5 - A.E. //c System Clock '
|
||||
ASC '11 - No Clock in System'0D
|
||||
ASC ' 6 - SMT No-Slot Clock'0D0D
|
||||
|
||||
ASC 'Which? [1-11] '00
|
||||
|
||||
LDX #11
|
||||
JSR inpnum
|
||||
|
||||
PHA
|
||||
ASL
|
||||
TAX
|
||||
LDA :clktbl,X
|
||||
STA point0
|
||||
INX
|
||||
LDA :clktbl,X
|
||||
STA point0+1
|
||||
|
||||
PLA
|
||||
CMP #4 ;no slot clock
|
||||
BEQ :noslot
|
||||
CMP #5 ;no slot clock
|
||||
BEQ :noslot
|
||||
CMP #6 ;no clock in system
|
||||
BEQ :noslot
|
||||
CMP #10
|
||||
BEQ :noslot
|
||||
CMP #11
|
||||
BNE :slot
|
||||
PHA ; save fake slot
|
||||
PHA ; save fake mode
|
||||
JMP :done
|
||||
|
||||
:slot JSR print
|
||||
DB 1,16,0
|
||||
ASC 'Which slot/port does the clock use? [1-7] ',00
|
||||
|
||||
LDX #7 ; get slot
|
||||
JSR inpnum
|
||||
ASL
|
||||
ASL
|
||||
ASL
|
||||
ASL
|
||||
:noslot PHA ;save slot
|
||||
|
||||
:done LDY #0 ;move the single page
|
||||
:loop LDA (point0),Y ;source
|
||||
STA (point1),Y ;destination
|
||||
INY
|
||||
BNE :loop
|
||||
|
||||
LDY #0
|
||||
PLA ;get the slot back
|
||||
STA (point1),Y
|
||||
|
||||
JSR chinit ; check for init
|
||||
JMP wrtchg ; write the changes
|
||||
|
||||
:clktbl DA 0
|
||||
DA thunder
|
||||
DA thunder
|
||||
DA serialpro
|
||||
DA ultra
|
||||
DA noslot
|
||||
DA iicsys
|
||||
DA prodos
|
||||
DA mountain
|
||||
DA versa
|
||||
DA gsclock
|
||||
DA nullclk
|
||||
|
||||
@@ -0,0 +1,155 @@
|
||||
LST OFF
|
||||
TR
|
||||
TR ADR
|
||||
*-------------------------------
|
||||
* //c System Clock - 24 hr
|
||||
*-------------------------------
|
||||
* Revised Date: 08/02/87
|
||||
*-------------------------------
|
||||
|
||||
rel
|
||||
dsk rel/iicsys
|
||||
|
||||
lnbuf equ $200
|
||||
|
||||
ZBUF EQU $41
|
||||
PTR EQU $42
|
||||
|
||||
stat1 equ $c099
|
||||
comm1 equ $c09a
|
||||
stat2 equ $c0a9
|
||||
comm2 equ $c0aa
|
||||
|
||||
bytcnt equ $0e03
|
||||
nullptr equ $0a
|
||||
|
||||
|
||||
iicsys ent
|
||||
|
||||
org $0a00
|
||||
|
||||
*-------------------------------
|
||||
|
||||
slot hex 20
|
||||
|
||||
jmp getdate
|
||||
jmp gettime
|
||||
jmp setdate
|
||||
|
||||
; get the date in prodos/gbbs format
|
||||
getdate jsr $bf00 ; read date from MLI
|
||||
hex 82
|
||||
hex 0000
|
||||
|
||||
ldx $bf90
|
||||
lda $bf91
|
||||
|
||||
setdate rts
|
||||
|
||||
; get the current time
|
||||
gettime jsr rdclock ; read the clock
|
||||
|
||||
lda #':'
|
||||
sta timestr+2 ; put time dividers in
|
||||
sta timestr+5
|
||||
|
||||
ldx #<timestr ; point to string
|
||||
lda #>timestr
|
||||
rts
|
||||
|
||||
; read the date time from clock
|
||||
rdclock lda slot
|
||||
cmp #$10
|
||||
beq init1
|
||||
|
||||
lda #<stat2 ; set status port to slot 2
|
||||
sta init3_2+1
|
||||
lda #<comm2 ; set comm port to slot 2
|
||||
sta init1_3+1
|
||||
sta init2+1
|
||||
sta init3_3+1
|
||||
|
||||
init1 lda #64
|
||||
init1_1 pha
|
||||
init1_2 sbc #1
|
||||
bne init1_2
|
||||
pla
|
||||
sbc #1 ; give plenty of setup delay
|
||||
bne init1_1
|
||||
|
||||
php
|
||||
sei
|
||||
init1_3 lda comm1 ; get current setting
|
||||
pha
|
||||
|
||||
ldy #3
|
||||
ldx #22
|
||||
lda #8
|
||||
init2 sta comm1 ; send init sequence to clock
|
||||
|
||||
init2_1 dex ; intra-bit delay
|
||||
bne init2_1
|
||||
|
||||
eor #$a ; toggle back and forth
|
||||
ldx #11
|
||||
dey
|
||||
bne init2 ; keep looping
|
||||
|
||||
ldy #4
|
||||
ldx #8
|
||||
bne init3_2 ; skip initial delay
|
||||
|
||||
init3 lda #$34
|
||||
sta timer ; delay while clock sets up
|
||||
init3_1 dec timer ; to send the date/time
|
||||
bne init3_1
|
||||
|
||||
init3_2 lda stat1 ; shift bit data into nibble
|
||||
rol
|
||||
rol
|
||||
rol
|
||||
ror datestr
|
||||
dex
|
||||
bne init3 ; go back to delay
|
||||
|
||||
lda datestr
|
||||
eor #0 ; save the nibble
|
||||
sta datestr,y
|
||||
|
||||
ldx #8
|
||||
dey
|
||||
bpl init3
|
||||
|
||||
pla
|
||||
init3_3 sta comm1 ; retore uart to initial settings
|
||||
|
||||
ldy #15
|
||||
ldx #4
|
||||
|
||||
init4 lda datestr,x
|
||||
pha
|
||||
and #$f ; process digit (make into ascii)
|
||||
ora #$30
|
||||
sta datestr,y
|
||||
|
||||
dey
|
||||
pla
|
||||
lsr
|
||||
lsr
|
||||
lsr ; process top of nibble
|
||||
lsr
|
||||
ora #$30 ; turn into ascii
|
||||
sta datestr,y
|
||||
|
||||
dey
|
||||
dey
|
||||
dex
|
||||
bpl init4
|
||||
plp
|
||||
rts
|
||||
|
||||
timer hex 00
|
||||
datestr asc '00 00 00'
|
||||
timestr asc '00:00:00 '
|
||||
date hex 0000
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
LST OFF
|
||||
TR
|
||||
TR ADR
|
||||
*-------------------------------
|
||||
* Clock Driver Header Block
|
||||
*-------------------------------
|
||||
* Revised Date: 08/01/87
|
||||
*-------------------------------
|
||||
*
|
||||
* driver load info
|
||||
*
|
||||
* $0800 = header block ;offset
|
||||
* $0a00 = Thunder/Timemaster ;2
|
||||
* $0b00 = A.E. Serial Pro ;3
|
||||
* $0c00 = SMT No Slot clock ;4
|
||||
* $0d00 = //c System Clock ;5
|
||||
* $0e00 = Apple //gs Clock ;6
|
||||
* $0f00 = A.E. Ultra Clock ;7
|
||||
* $1000 = prodos compatible ;8
|
||||
* $1100 = Mountain Clock ;9
|
||||
* $1200 = Versacard ;a
|
||||
* $1300 = no clock in system ;b
|
||||
|
||||
rel
|
||||
dsk rel/clocks.hdr
|
||||
|
||||
org $800
|
||||
|
||||
clocks hex 0201
|
||||
asc 'Thunderclock Compatable '
|
||||
hex 0201
|
||||
asc 'A.E. Timemaster II H.O. '
|
||||
hex 0301
|
||||
asc 'A.E. Serial Pro '
|
||||
hex 8401
|
||||
asc 'SMT No Slot Clock '
|
||||
hex 0501
|
||||
asc 'A.E. //c System Clock '
|
||||
hex 8601
|
||||
asc 'Apple //GS built-in clock '
|
||||
hex 8701
|
||||
asc 'A.E. Ultra Clock '
|
||||
hex 8801
|
||||
asc 'ProDOS Compatible Clock '
|
||||
hex 0901
|
||||
asc 'Mountain Hardware Clock '
|
||||
hex 0a01
|
||||
asc 'Prometheus Versacard '
|
||||
hex 8b01
|
||||
asc 'No Clock in System '
|
||||
|
||||
hex 0000
|
||||
ds \
|
||||
|
||||
@@ -0,0 +1,213 @@
|
||||
LST OFF
|
||||
TR
|
||||
TR ADR
|
||||
*-------------------------------
|
||||
* //c System Clock - 24 hr
|
||||
*-------------------------------
|
||||
* Revised Date: 08/02/87
|
||||
*-------------------------------
|
||||
|
||||
rel
|
||||
dsk CLOCKS/rel/iicsys
|
||||
|
||||
iicsys ent
|
||||
|
||||
org $0a00
|
||||
|
||||
lnbuf equ $200
|
||||
|
||||
ZBUF EQU $41
|
||||
PTR EQU $42
|
||||
|
||||
stat1 equ $c099
|
||||
comm1 equ $c09a
|
||||
stat2 equ $c0a9
|
||||
comm2 equ $c0aa
|
||||
|
||||
bytcnt equ $0e03
|
||||
nullptr equ $0a
|
||||
|
||||
mli equ $bf00
|
||||
date equ $bf90
|
||||
time equ $bf92
|
||||
get_time equ $82
|
||||
|
||||
|
||||
slot hex 20
|
||||
mode db 0
|
||||
|
||||
jmp getdate
|
||||
jmp gettime
|
||||
rts ; jmp setdate
|
||||
|
||||
* get the date in prodos gbbs format
|
||||
*-------------------------------
|
||||
|
||||
getdate jsr mli ; mli call
|
||||
db get_time ; get_time
|
||||
hex 0000 ; no pramater table
|
||||
|
||||
ldx date
|
||||
lda date+1
|
||||
setdate rts
|
||||
|
||||
* get the current time
|
||||
*-------------------------------
|
||||
|
||||
gettime jsr rdtime
|
||||
lda mode
|
||||
bpl gtime1
|
||||
jsr convert
|
||||
|
||||
gtime1 ldx #<timestr ; point to string
|
||||
lda #>timestr
|
||||
rts
|
||||
|
||||
* read time from clock
|
||||
*-------------------------------
|
||||
|
||||
rdtime jsr rdclock ; read the clock
|
||||
|
||||
lda #':'
|
||||
sta timestr+2 ; put time dividers in
|
||||
sta timestr+5
|
||||
|
||||
ldx #<timestr ; point to string
|
||||
lda #>timestr
|
||||
rts
|
||||
|
||||
; read the date time from clock
|
||||
rdclock lda #64
|
||||
init1_1 pha
|
||||
init1_2 sbc #1
|
||||
bne init1_2
|
||||
pla
|
||||
sbc #1 ; give plenty of setup delay
|
||||
bne init1_1
|
||||
|
||||
php
|
||||
sei
|
||||
init1_3 lda comm1 ; get current setting
|
||||
pha
|
||||
|
||||
ldy #3
|
||||
ldx #22
|
||||
lda #8
|
||||
init2 sta comm1 ; send init sequence to clock
|
||||
|
||||
init2_1 dex ; intra-bit delay
|
||||
bne init2_1
|
||||
|
||||
eor #$0a ; toggle back and forth
|
||||
ldx #11
|
||||
dey
|
||||
bne init2 ; keep looping
|
||||
|
||||
ldy #4
|
||||
ldx #8
|
||||
bne init3_2 ; skip initial delay
|
||||
|
||||
init3 lda #$34
|
||||
sta timer ; delay while clock sets up
|
||||
init3_1 dec timer ; to send the date/time
|
||||
bne init3_1
|
||||
|
||||
init3_2 lda stat1 ; shift bit data into nibble
|
||||
rol
|
||||
rol
|
||||
rol
|
||||
ror datestr
|
||||
dex
|
||||
bne init3 ; go back to delay
|
||||
|
||||
lda datestr
|
||||
eor #0 ; save the nibble
|
||||
sta datestr,y
|
||||
|
||||
ldx #8
|
||||
dey
|
||||
bpl init3
|
||||
|
||||
pla
|
||||
init3_3 sta comm1 ; retore uart to initial settings
|
||||
|
||||
ldy #15
|
||||
ldx #4
|
||||
|
||||
init4 lda datestr,x
|
||||
pha
|
||||
and #$0f ; process digit (make into ascii)
|
||||
ora #$30
|
||||
sta datestr,y
|
||||
|
||||
dey
|
||||
pla
|
||||
lsr
|
||||
lsr
|
||||
lsr ; process top of nibble
|
||||
lsr
|
||||
ora #$30 ; turn into ascii
|
||||
sta datestr,y
|
||||
|
||||
dey
|
||||
dey
|
||||
dex
|
||||
bpl init4
|
||||
plp
|
||||
rts
|
||||
|
||||
* convert time to 12hr format
|
||||
*----------------------------
|
||||
|
||||
convert lda timestr ;convert to 12 hour
|
||||
ldx timestr+1
|
||||
|
||||
and #$0f
|
||||
tay
|
||||
txa
|
||||
and #$0f
|
||||
|
||||
dey
|
||||
bmi conv2
|
||||
clc
|
||||
adc #10
|
||||
dey
|
||||
bmi conv2
|
||||
adc #10
|
||||
|
||||
conv2 cmp #12
|
||||
bne conv2a
|
||||
lda #24
|
||||
conv2a tay
|
||||
bne conv3
|
||||
lda #12
|
||||
|
||||
conv3 ldx #'A'
|
||||
cmp #13
|
||||
bcc conv4
|
||||
|
||||
sbc #12
|
||||
ldx #'P'
|
||||
|
||||
conv4 ldy #'0'
|
||||
conv5 cmp #10
|
||||
bcc conv6
|
||||
|
||||
sbc #10
|
||||
iny
|
||||
bne conv5
|
||||
|
||||
conv6 ora #'0'
|
||||
sta timestr+1
|
||||
sty timestr
|
||||
stx timestr+9
|
||||
ldx #'M'
|
||||
stx timestr+10
|
||||
rts
|
||||
|
||||
timer hex 00
|
||||
datestr asc '00 00 00'
|
||||
timestr asc '00:00:00 '
|
||||
|
||||
ds \
|
||||
|
||||
@@ -0,0 +1,170 @@
|
||||
LST OFF
|
||||
TR
|
||||
TR ADR
|
||||
*-------------------------------
|
||||
* GS Clock driver bios
|
||||
* Written by Andy Nicholas - 07/30/87
|
||||
* rewritten by Andy 3/11/88
|
||||
*-------------------------------
|
||||
|
||||
xc ; goto 65816 mode
|
||||
|
||||
rel
|
||||
dsk CLOCKS/rel/gsclock
|
||||
|
||||
gsclock ent
|
||||
|
||||
org $A00
|
||||
|
||||
* Jump Table
|
||||
*-------------------------------
|
||||
|
||||
dow db 0
|
||||
mode db 0
|
||||
|
||||
jmp getdate ;call to get the date
|
||||
jmp gettime ;call to get the time (formatted)
|
||||
jmp setdate ;known return point
|
||||
|
||||
* Read Clock from ProDOS
|
||||
*-------------------------------
|
||||
|
||||
mli equ $bf00
|
||||
date equ $bf90
|
||||
|
||||
getdate jsr mli ;read the clock into
|
||||
hex 82 ;buffer at $200
|
||||
da 0
|
||||
|
||||
ldx date ;read date in compressed form
|
||||
lda date+1 ;into A & X
|
||||
setdate rts
|
||||
|
||||
* get the current time
|
||||
*-------------------------------
|
||||
|
||||
gettime jsr rdtime
|
||||
ldy #8
|
||||
lda mode
|
||||
bpl gtime1
|
||||
jsr convert
|
||||
ldy #11
|
||||
|
||||
gtime1 ldx #<timestr ; point to string
|
||||
lda #>timestr
|
||||
rts
|
||||
|
||||
* read time from clock
|
||||
*-------------------------------
|
||||
|
||||
rdtime clc ;go to native mode
|
||||
xce
|
||||
rep #'0' ;and 16 bit A, X, and Y
|
||||
|
||||
pha ;stack space for results
|
||||
pha
|
||||
pha
|
||||
pha
|
||||
ldx #$D03 ;ReadTimeHex
|
||||
jsl $E10000 ;Tool Locater
|
||||
sec
|
||||
xce ;emulation mode
|
||||
|
||||
pla ; seconds
|
||||
jsr bindec8 ; convert to two byte
|
||||
sta timestr+6
|
||||
stx timestr+7
|
||||
pla ; minutes
|
||||
jsr bindec8 ; convert to two byte
|
||||
sta timestr+3
|
||||
stx timestr+4
|
||||
pla ; hour
|
||||
jsr bindec8 ; convert to two byte
|
||||
sta timestr
|
||||
stx timestr+1
|
||||
pla ; year
|
||||
pla ; day of month
|
||||
pla ; month
|
||||
pla ; unused byte
|
||||
pla ; day of the week
|
||||
sta dow
|
||||
|
||||
lda #' '
|
||||
sta timestr+9
|
||||
sta timestr+10
|
||||
|
||||
rts ;bye..
|
||||
|
||||
* convert time to 12hr format
|
||||
*----------------------------
|
||||
|
||||
convert lda timestr ;convert to 12 hour
|
||||
ldx timestr+1
|
||||
|
||||
and #$F
|
||||
tay
|
||||
txa
|
||||
and #$F
|
||||
|
||||
dey
|
||||
bmi conv2
|
||||
clc
|
||||
adc #10
|
||||
dey
|
||||
bmi conv2
|
||||
adc #10
|
||||
|
||||
conv2 cmp #12
|
||||
bne conv2a
|
||||
lda #24
|
||||
conv2a tay
|
||||
bne conv3
|
||||
lda #12
|
||||
|
||||
conv3 ldx #'A'
|
||||
cmp #13
|
||||
bcc conv4
|
||||
|
||||
sbc #12
|
||||
ldx #'P'
|
||||
|
||||
conv4 ldy #'0'
|
||||
conv5 cmp #10
|
||||
bcc conv6
|
||||
|
||||
sbc #10
|
||||
iny
|
||||
bne conv5
|
||||
|
||||
conv6 ora #'0'
|
||||
sta timestr+1
|
||||
sty timestr
|
||||
stx timestr+9
|
||||
ldx #'M'
|
||||
stx timestr+10
|
||||
rts
|
||||
|
||||
* translate a binary to text [0-99]
|
||||
*-------------------------------
|
||||
|
||||
bindec8 cmp #60 ; put limit of 59
|
||||
bcc bin8
|
||||
lda #59
|
||||
|
||||
bin8 ldy #0 ; start 10's counter
|
||||
bin8a cmp #10
|
||||
bcc bin8b ; less than 10, were done
|
||||
|
||||
sbc #10 ; minus 10
|
||||
iny ; add 1 to the 10's counter
|
||||
bne bin8a ; loop
|
||||
|
||||
bin8b adc #'0' ; make 1's into text
|
||||
tax ; save
|
||||
tya
|
||||
adc #'0' ; make 10's into text
|
||||
rts ; were done
|
||||
|
||||
* '01234567890
|
||||
timestr asc '12:00:00 '
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
asm thunder
|
||||
ds \
|
||||
asm serialpro
|
||||
ds \
|
||||
asm no.slot
|
||||
ds \
|
||||
asm iic.sys
|
||||
ds \
|
||||
asm iigs
|
||||
ds \
|
||||
asm ultra
|
||||
ds \
|
||||
asm prodos
|
||||
ds \
|
||||
asm mountain
|
||||
ds \
|
||||
asm versa
|
||||
ds \
|
||||
asm null
|
||||
|
||||
link rel/thunder
|
||||
ds \
|
||||
link rel/serialpro
|
||||
ds \
|
||||
link rel/no.slot
|
||||
ds \
|
||||
link rel/iic.sys
|
||||
ds \
|
||||
link rel/iigs
|
||||
ds \
|
||||
link rel/ultra
|
||||
ds \
|
||||
link rel/prodos
|
||||
ds \
|
||||
link rel/mountain
|
||||
ds \
|
||||
link rel/versa
|
||||
ds \
|
||||
link rel/null
|
||||
|
||||
@@ -0,0 +1,160 @@
|
||||
LST OFF
|
||||
TR
|
||||
TR ADR
|
||||
*-------------------------------
|
||||
* Mountian Hardware Driver
|
||||
*-------------------------------
|
||||
* Revised Date: 08/02/87
|
||||
*-------------------------------
|
||||
|
||||
rel
|
||||
dsk CLOCKS/rel/mountain
|
||||
|
||||
mountain ent
|
||||
|
||||
org $0a00
|
||||
|
||||
mli equ $bf00
|
||||
date equ $bf90
|
||||
time equ $bf92
|
||||
get_time equ $82
|
||||
|
||||
|
||||
slot hex 40
|
||||
mode db 0
|
||||
|
||||
jmp getdate
|
||||
jmp gettime
|
||||
jmp setdate
|
||||
|
||||
* get the date in prodos gbbs format
|
||||
*-------------------------------
|
||||
getdate jsr mli ; mli call
|
||||
db get_time ; get_time
|
||||
hex 0000 ; no pramater table
|
||||
|
||||
ldx date
|
||||
lda date+1
|
||||
setdate rts
|
||||
|
||||
* get the current time
|
||||
*-------------------------------
|
||||
gettime jsr rdtime
|
||||
lda mode
|
||||
bpl gtime1
|
||||
jsr convert
|
||||
|
||||
gtime1 ldx #<timestr ; point to string
|
||||
lda #>timestr
|
||||
rts
|
||||
|
||||
* get time routine
|
||||
*-------------------
|
||||
rdtime jsr rdclock
|
||||
lda #':' ; clean up format
|
||||
sta timestr+2
|
||||
sta timestr+5
|
||||
rts
|
||||
|
||||
* read time from clock
|
||||
*----------------------
|
||||
rdclock lda $38
|
||||
pha
|
||||
lda $39 ; save zp addresses
|
||||
pha
|
||||
lda slot
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
ora #$c0
|
||||
sta $39 ; point to clock entry
|
||||
sta callclk+2
|
||||
callclk jsr $c000 ; call clock
|
||||
pla
|
||||
sta $39
|
||||
pla ; restore zp
|
||||
sta $38
|
||||
|
||||
ldx #$0d
|
||||
ldy #0
|
||||
movtime lda $286,x ; move returned string
|
||||
and #$7f
|
||||
sta datestr,y
|
||||
iny
|
||||
dex
|
||||
bpl movtime
|
||||
rts
|
||||
|
||||
* convert time to 12hr format
|
||||
*----------------------------
|
||||
|
||||
convert lda timestr ;convert to 12 hour
|
||||
ldx timestr+1
|
||||
|
||||
and #$0f
|
||||
tay
|
||||
txa
|
||||
and #$0f
|
||||
|
||||
dey
|
||||
bmi conv2
|
||||
clc
|
||||
adc #10
|
||||
dey
|
||||
bmi conv2
|
||||
adc #10
|
||||
|
||||
conv2 cmp #12
|
||||
bne conv2a
|
||||
lda #24
|
||||
conv2a tay
|
||||
bne conv3
|
||||
lda #12
|
||||
|
||||
conv3 ldx #'A'
|
||||
cmp #13
|
||||
bcc conv4
|
||||
|
||||
sbc #12
|
||||
ldx #'P'
|
||||
|
||||
conv4 ldy #'0'
|
||||
conv5 cmp #10
|
||||
bcc conv6
|
||||
|
||||
sbc #10
|
||||
iny
|
||||
bne conv5
|
||||
|
||||
conv6 ora #'0'
|
||||
sta timestr+1
|
||||
sty timestr
|
||||
stx timestr+9
|
||||
ldx #'M'
|
||||
stx timestr+10
|
||||
rts
|
||||
|
||||
; convert a 2 byte decimal number to binary
|
||||
decbin8 and #$7f
|
||||
sec
|
||||
sbc #'0'
|
||||
sta decbyte ; save 10's digit
|
||||
txa ; move 1's into A
|
||||
and #$7f
|
||||
sec
|
||||
sbc #'0'
|
||||
|
||||
ldy #10
|
||||
dec8a clc
|
||||
adc decbyte ; add the 10's digit, 10 times
|
||||
dey
|
||||
bne dec8a
|
||||
rts ; return with result
|
||||
|
||||
decbyte hex 00
|
||||
datestr asc '00/00/00'
|
||||
timestr asc '00:00:00 '
|
||||
|
||||
ds \
|
||||
|
||||
@@ -0,0 +1,191 @@
|
||||
LST OFF
|
||||
TR
|
||||
TR ADR
|
||||
*-------------------------------
|
||||
* No Slot Clock - 24 hr
|
||||
*-------------------------------
|
||||
* Revised Date: 08/02/87
|
||||
*-------------------------------
|
||||
|
||||
rel
|
||||
dsk CLOCKS/rel/noslot
|
||||
|
||||
ZBUF EQU $41
|
||||
PTR EQU $42
|
||||
|
||||
YEAR EQU $44
|
||||
HOURS EQU $48
|
||||
TEMP EQU $2F0
|
||||
|
||||
date equ $bf90
|
||||
get_time equ $82
|
||||
|
||||
|
||||
noslot ent
|
||||
|
||||
org $0a00
|
||||
|
||||
*-------------------------------
|
||||
|
||||
db $00
|
||||
MODE dfb $00
|
||||
JMP getdate
|
||||
JMP getime
|
||||
JMP setdate
|
||||
|
||||
*
|
||||
* TIME OUTPUT BUFFER
|
||||
*
|
||||
|
||||
TIME ASC '00:00:00 '
|
||||
*
|
||||
* DEFINE RECOGNITION SEQUENCE FOR NO-SLOT CLOCK
|
||||
*
|
||||
|
||||
RECSEQ db $5C,$A3,$3A,$C5,$5C,$A3,$3A,$C5
|
||||
|
||||
*
|
||||
* FORMAT NO-SLOT CLOCK DATE
|
||||
*
|
||||
|
||||
* get the date in prodos gbbs format
|
||||
*-------------------------------
|
||||
|
||||
getdate jsr $bf00 ; mli call
|
||||
db get_time
|
||||
hex 0000 ; no pramater table
|
||||
|
||||
ldx date
|
||||
lda date+1
|
||||
setdate rts
|
||||
|
||||
*
|
||||
* FORMAT NO-SLOT CLOCK TIME
|
||||
*
|
||||
|
||||
getime JSR RDCLOCK
|
||||
LDY HOURS
|
||||
LDA MODE
|
||||
BEQ FMT24
|
||||
LDA #'M'
|
||||
STA TIME+10
|
||||
LDX #'A'
|
||||
SED
|
||||
SEC
|
||||
TYA
|
||||
SBC #$12
|
||||
CLD
|
||||
BCC SETHOUR
|
||||
TAY
|
||||
BNE NOTNOON
|
||||
LDY #$12
|
||||
NOTNOON LDX #'P'
|
||||
SETHOUR STX TIME+9
|
||||
TYA
|
||||
BNE FMT24
|
||||
LDY #$12
|
||||
FMT24 TYA
|
||||
LDY #0
|
||||
LDX #0
|
||||
FMT PHA
|
||||
AND #$F0
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
CLC
|
||||
ADC #'0'
|
||||
STA TIME,Y
|
||||
INY
|
||||
PLA
|
||||
AND #$F
|
||||
ADC #'0'
|
||||
STA TIME,Y
|
||||
INY
|
||||
INY
|
||||
INX
|
||||
LDA HOURS,X
|
||||
CPX #3
|
||||
BNE FMT
|
||||
JSR ZRECALL
|
||||
*
|
||||
LDX #<TIME
|
||||
LDA #>TIME
|
||||
RTS
|
||||
*
|
||||
* RECALL PG ZERO BUFFER (ACCESS VIA JMP)
|
||||
*
|
||||
ZRECALL LDY #$A
|
||||
ZRECALL1 LDA TEMP,Y
|
||||
STA PTR,Y
|
||||
DEY
|
||||
BNE ZRECALL1
|
||||
RTS
|
||||
*
|
||||
* READ THE NO-SLOT CLOCK AND RETRIEVE DATE/TIME
|
||||
*
|
||||
RDCLOCK LDY #$A
|
||||
STORBUF LDA ZBUF,Y
|
||||
STA TEMP,Y
|
||||
DEY
|
||||
BNE STORBUF
|
||||
SEI
|
||||
LDA $C015
|
||||
PHA
|
||||
STA $C007
|
||||
LDA $C804
|
||||
LDA #<RECSEQ
|
||||
STA PTR
|
||||
LDA #>RECSEQ
|
||||
STA PTR+1
|
||||
LDY #7
|
||||
RECOG1 LDA (PTR),Y
|
||||
SEC
|
||||
ROR
|
||||
RECOG2 PHA
|
||||
LDA #0
|
||||
ROL
|
||||
TAX
|
||||
LDA $C800,X
|
||||
PLA
|
||||
LSR
|
||||
BNE RECOG2
|
||||
DEY
|
||||
BPL RECOG1
|
||||
LDX #7
|
||||
NEXTREAD LDY #7
|
||||
READBIT LDA $C804
|
||||
ROR
|
||||
ROR YEAR,X
|
||||
DEY
|
||||
BPL READBIT
|
||||
CPX #3
|
||||
BPL STORDATE
|
||||
LDA YEAR,X
|
||||
PHA
|
||||
AND #$F
|
||||
STA YEAR,X
|
||||
PLA
|
||||
AND #$F0
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
TAY
|
||||
BEQ STORDATE
|
||||
LDA #0
|
||||
ADDTENS ADC #10
|
||||
DEY
|
||||
BNE ADDTENS
|
||||
ADC YEAR,X
|
||||
STA YEAR,X
|
||||
STORDATE DEX
|
||||
BPL NEXTREAD
|
||||
PLA
|
||||
ROL
|
||||
BCS RDEND
|
||||
STA $C006
|
||||
RDEND RTS
|
||||
|
||||
ds \
|
||||
|
||||
@@ -0,0 +1,147 @@
|
||||
LST OFF
|
||||
TR
|
||||
TR ADR
|
||||
*-------------------------------
|
||||
* No Clock Driver
|
||||
*-------------------------------
|
||||
* Revised Date: 08/02/87
|
||||
*-------------------------------
|
||||
|
||||
rel
|
||||
dsk CLOCKS/rel/null
|
||||
|
||||
bytcnt equ $0e03
|
||||
nullptr equ $0a
|
||||
|
||||
nullclk ent
|
||||
|
||||
org $D00
|
||||
|
||||
*-------------------------------
|
||||
|
||||
slot hex 00
|
||||
mode db 0
|
||||
|
||||
jmp getdate
|
||||
jmp gettime
|
||||
jmp setdate
|
||||
|
||||
* get the date in prodos/gbbs format
|
||||
*-------------------------------
|
||||
|
||||
getdate ldx date
|
||||
lda date+1
|
||||
rts
|
||||
|
||||
* set the date manually
|
||||
*-------------------------------
|
||||
|
||||
setdate cpy #8 ; is it 8 chars long?
|
||||
bne setdt2 ; nope
|
||||
|
||||
stx nullptr ; point to string
|
||||
sta nullptr+1
|
||||
|
||||
ldy #7
|
||||
lda (nullptr),y
|
||||
tax ; process year
|
||||
dey
|
||||
lda (nullptr),y
|
||||
jsr decbin8
|
||||
sta date+1 ; save year
|
||||
|
||||
ldy #4
|
||||
lda (nullptr),y
|
||||
tax ; process day
|
||||
dey
|
||||
lda (nullptr),y
|
||||
jsr decbin8
|
||||
and #%00011111
|
||||
sta date ; save day
|
||||
|
||||
ldy #1
|
||||
lda (nullptr),y
|
||||
tax ; process month
|
||||
dey
|
||||
lda (nullptr),y
|
||||
jsr decbin8
|
||||
and #%00001111 ; get rid of extra junk
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
rol date+1 ; put bit into year field
|
||||
ora date
|
||||
sta date ; put rest into day field
|
||||
setdt2 rts
|
||||
|
||||
* get the current estimated time
|
||||
*-------------------------------
|
||||
|
||||
gettime lda bytcnt+2 ; show hours
|
||||
jsr bindec8
|
||||
sta timestr
|
||||
stx timestr+1
|
||||
|
||||
lda bytcnt+1 ; show minutes
|
||||
jsr bindec8
|
||||
sta timestr+3
|
||||
stx timestr+4
|
||||
|
||||
lda bytcnt+0 ; show seconds
|
||||
jsr bindec8
|
||||
sta timestr+6
|
||||
stx timestr+7
|
||||
|
||||
ldx #<timestr ; point to string
|
||||
lda #>timestr
|
||||
rts
|
||||
|
||||
* convert a 2 byte decimal number to binary
|
||||
*-------------------------------
|
||||
|
||||
decbin8 and #$7f
|
||||
sec
|
||||
sbc #'0'
|
||||
sta decbyte ; save 10's digit
|
||||
txa ; move 1's into A
|
||||
and #$7F
|
||||
sec
|
||||
sbc #'0'
|
||||
|
||||
ldy #10
|
||||
dec8a clc
|
||||
adc decbyte ; add the 10's digit, 10 times
|
||||
dey
|
||||
bne dec8a
|
||||
rts ; return with result
|
||||
|
||||
decbyte hex 00
|
||||
|
||||
* translate a binary to text [0-99]
|
||||
*-------------------------------
|
||||
|
||||
bindec8 cmp #60 ; put limit of 59
|
||||
bcc bin8
|
||||
lda #59
|
||||
|
||||
bin8 ldy #0 ; start 10's counter
|
||||
bin8a cmp #10
|
||||
bcc bin8b ; less than 10, were done
|
||||
|
||||
sbc #10 ; minus 10
|
||||
iny ; add 1 to the 10's counter
|
||||
bne bin8a ; loop
|
||||
|
||||
bin8b adc #'0' ; make 1's into text
|
||||
tax ; save
|
||||
tya
|
||||
adc #'0' ; make 10's into text
|
||||
rts ; were done
|
||||
|
||||
timestr asc '00:00:00 ET'
|
||||
date hex 0000
|
||||
|
||||
ds \
|
||||
|
||||
@@ -0,0 +1,144 @@
|
||||
LST OFF
|
||||
TR
|
||||
TR ADR
|
||||
*-------------------------------
|
||||
* ProDOS Clock Driver
|
||||
*-------------------------------
|
||||
* Revised Date: 08/02/87
|
||||
*-------------------------------
|
||||
|
||||
rel
|
||||
dsk CLOCKS/rel/prodos
|
||||
|
||||
mli equ $bf00
|
||||
date equ $bf90
|
||||
time equ $bf92
|
||||
get_time equ $82
|
||||
|
||||
prodos ent
|
||||
org $0a00
|
||||
|
||||
*-------------------------------
|
||||
|
||||
db 0
|
||||
mode db 0
|
||||
|
||||
jmp getdate
|
||||
jmp gettime
|
||||
jmp setdate
|
||||
|
||||
* get the date in prodos gbbs format
|
||||
*-------------------------------
|
||||
getdate jsr mli ; mli call
|
||||
db get_time
|
||||
hex 0000 ; no pramater table
|
||||
|
||||
ldx date
|
||||
lda date+1
|
||||
setdate rts
|
||||
|
||||
* get the current time
|
||||
*-------------------------------
|
||||
gettime jsr rdtime
|
||||
lda mode
|
||||
bpl gtime1
|
||||
jsr convert
|
||||
|
||||
gtime1 ldx #<timestr ; point to string
|
||||
lda #>timestr
|
||||
rts
|
||||
|
||||
* read time from prodos
|
||||
*-------------------------------
|
||||
rdtime jsr getdate ; update time
|
||||
|
||||
lda time+1 ; get current hour
|
||||
jsr bindec8 ; translate to ascii
|
||||
sta timestr ; save hour
|
||||
stx timestr+1
|
||||
|
||||
lda time ; get minutes
|
||||
jsr bindec8 ; translate to ascii
|
||||
sta timestr+3 ; save minute
|
||||
stx timestr+4
|
||||
|
||||
lda #' ' ; clear out any possible am/pm
|
||||
sta timestr+9
|
||||
sta timestr+10
|
||||
|
||||
rts
|
||||
|
||||
* convert time to 12hr format
|
||||
*----------------------------
|
||||
|
||||
convert lda timestr ;convert to 12 hour
|
||||
ldx timestr+1
|
||||
|
||||
and #$0f
|
||||
tay
|
||||
txa
|
||||
and #$0f
|
||||
|
||||
dey
|
||||
bmi conv2
|
||||
clc
|
||||
adc #10
|
||||
dey
|
||||
bmi conv2
|
||||
adc #10
|
||||
|
||||
conv2 cmp #12
|
||||
bne conv2a
|
||||
lda #24
|
||||
conv2a tay
|
||||
bne conv3
|
||||
lda #12
|
||||
|
||||
conv3 ldx #'A'
|
||||
cmp #13
|
||||
bcc conv4
|
||||
|
||||
sbc #12
|
||||
ldx #'P'
|
||||
|
||||
conv4 ldy #'0'
|
||||
conv5 cmp #10
|
||||
bcc conv6
|
||||
|
||||
sbc #10
|
||||
iny
|
||||
bne conv5
|
||||
|
||||
conv6 ora #'0'
|
||||
sta timestr+1
|
||||
sty timestr
|
||||
stx timestr+9
|
||||
ldx #'M'
|
||||
stx timestr+10
|
||||
rts
|
||||
|
||||
* translate a binary to text [0-99]
|
||||
*-------------------------------
|
||||
bindec8 cmp #60 ; put limit of 59
|
||||
bcc bin8
|
||||
lda #59
|
||||
|
||||
bin8 ldy #0 ; start 10's counter
|
||||
bin8a cmp #10
|
||||
bcc bin8b ; less than 10, were done
|
||||
|
||||
sbc #10 ; minus 10
|
||||
iny ; add 1 to the 10's counter
|
||||
bne bin8a ; loop
|
||||
|
||||
bin8b adc #'0' ; make 1's into text
|
||||
tax ; save
|
||||
tya
|
||||
adc #'0' ; make 10's into text
|
||||
rts ; were done
|
||||
|
||||
* '01234567890
|
||||
timestr asc '12:00:00 '
|
||||
|
||||
ds \
|
||||
|
||||
@@ -0,0 +1,135 @@
|
||||
LST OFF
|
||||
TR
|
||||
TR ADR
|
||||
*-------------------------------
|
||||
* Serial Pro Driver - 12 hrs
|
||||
*-------------------------------
|
||||
|
||||
rel
|
||||
dsk CLOCKS/rel/serialpro
|
||||
|
||||
lnbuf equ $200
|
||||
mli equ $bf00
|
||||
date equ $bf90
|
||||
get_time equ $82
|
||||
|
||||
serialpro ent
|
||||
|
||||
org $0a00
|
||||
|
||||
*-------------------------------
|
||||
|
||||
slot hex 40
|
||||
mode db 0
|
||||
|
||||
jmp getdate
|
||||
jmp gettime
|
||||
jmp setdate
|
||||
|
||||
* get the date in prodos gbbs format
|
||||
*-------------------------------
|
||||
|
||||
getdate jsr $bf00 ; mli call
|
||||
db get_time
|
||||
hex 0000 ; no pramater table
|
||||
|
||||
ldx date
|
||||
lda date+1
|
||||
setdate rts
|
||||
|
||||
* get the current time
|
||||
*-------------------------------
|
||||
|
||||
gettime jsr rdtime
|
||||
lda mode
|
||||
bpl gtime1
|
||||
jsr convert
|
||||
|
||||
gtime1 ldx #<timestr ; point to string
|
||||
lda #>timestr
|
||||
rts
|
||||
|
||||
* read the current time from clock
|
||||
*-------------------------------
|
||||
|
||||
rdtime bit initbyt ; has routine been called before?
|
||||
bmi clock1 ; yep
|
||||
|
||||
lda slot ; get clock slot
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
ora #$C0 ; make into $Cn form
|
||||
|
||||
sta clock2+2 ; modify code for slot
|
||||
sta clock3+2
|
||||
dec initbyt ; show routine has been init'ed
|
||||
|
||||
clock1 lda #"&" ; use "&" mode
|
||||
clock2 jsr $C020 ; modified ($c420)
|
||||
clock3 jsr $C01D ; modified ($c4ld)
|
||||
|
||||
ldy #12
|
||||
ldx #0
|
||||
clock4 lda lnbuf,y
|
||||
sta timestr,x
|
||||
iny
|
||||
inx
|
||||
cpx #8
|
||||
bne clock4
|
||||
rts
|
||||
|
||||
* convert time to 12 hour format
|
||||
*-------------------------------
|
||||
|
||||
convert lda timestr ;convert to 12 hour
|
||||
ldx timestr+1
|
||||
|
||||
conv and #$F
|
||||
tay
|
||||
txa
|
||||
and #$F
|
||||
|
||||
dey
|
||||
bmi conv2
|
||||
clc
|
||||
adc #10
|
||||
dey
|
||||
bmi conv2
|
||||
adc #10
|
||||
|
||||
conv2 cmp #12
|
||||
bne conv2a
|
||||
lda #24
|
||||
conv2a tay
|
||||
bne conv3
|
||||
lda #12
|
||||
|
||||
conv3 ldx #'A'
|
||||
cmp #13
|
||||
bcc conv4
|
||||
|
||||
sbc #12
|
||||
ldx #'P'
|
||||
|
||||
conv4 ldy #'0'
|
||||
conv5 cmp #10
|
||||
bcc conv6
|
||||
|
||||
sbc #10
|
||||
iny
|
||||
bne conv5
|
||||
|
||||
conv6 ora #'0'
|
||||
sta timestr+1
|
||||
sty timestr
|
||||
stx timestr+9
|
||||
|
||||
ldx #<timestr ; point to string
|
||||
lda #>timestr
|
||||
rts
|
||||
|
||||
initbyt hex 00
|
||||
timestr asc '00:00:00 AM'00
|
||||
|
||||
@@ -0,0 +1,133 @@
|
||||
LST OFF
|
||||
TR
|
||||
TR ADR
|
||||
*-------------------------------
|
||||
* Thunderclock Driver - 24 hrs
|
||||
*-------------------------------
|
||||
* Date Revised: 08/04/87
|
||||
*-------------------------------
|
||||
|
||||
REL
|
||||
DSK CLOCKS/REL/THUNDER
|
||||
|
||||
lnbuf = $200
|
||||
|
||||
thunder ENT
|
||||
ORG $A00
|
||||
|
||||
*-------------------------------
|
||||
|
||||
slot HEX 40
|
||||
mode DB 0
|
||||
|
||||
JMP getdate
|
||||
JMP gettime
|
||||
JMP setdate
|
||||
|
||||
; get the date in prodos/gbbs format
|
||||
getdate JSR $BF00
|
||||
HEX 82
|
||||
DW 0
|
||||
|
||||
LDX $BF90
|
||||
LDA $BF91
|
||||
setdate RTS
|
||||
|
||||
* get the current time
|
||||
*-------------------------------
|
||||
gettime JSR rdtime
|
||||
LDA mode
|
||||
BPL gtime1
|
||||
JSR convert
|
||||
|
||||
gtime1 LDX #<timestr ; point to string
|
||||
LDA #>timestr
|
||||
RTS
|
||||
|
||||
* read time from clock
|
||||
*-------------------------------
|
||||
rdtime BIT initbyt ; has routine been called before?
|
||||
BMI clock1 ; yep
|
||||
|
||||
LDA slot ; get clock slot
|
||||
LUP 4
|
||||
LSR
|
||||
--^
|
||||
ORA #$C0 ; make into $Cn form
|
||||
|
||||
STA clock2+2 ; modify code for slot
|
||||
STA clock3+2
|
||||
DEC initbyt ; show routine has been init'ed
|
||||
|
||||
clock1 LDA #"#" ; use "&" mode (24 hour)
|
||||
clock2 JSR $C00B ; modified ($C40B)
|
||||
clock3 JSR $C008 ; modified ($C408)
|
||||
|
||||
LDY #0
|
||||
clock4 LDA lnbuf+9,y ; get time from input buffer
|
||||
STA timestr,y
|
||||
INY
|
||||
CPY #8
|
||||
BNE clock4
|
||||
LDA #":" ; put colens back into string
|
||||
STA timestr+2
|
||||
STA timestr+5
|
||||
LDA #' '
|
||||
STA timestr+9 ; make sure that the am/pm is reset
|
||||
STA timestr+10
|
||||
RTS
|
||||
|
||||
* convert time to 12 hour format
|
||||
*-------------------------------
|
||||
|
||||
convert LDA timestr ;convert to 12 hour
|
||||
LDX timestr+1
|
||||
|
||||
AND #$F
|
||||
TAY
|
||||
TXA
|
||||
AND #$F
|
||||
|
||||
DEY
|
||||
BMI conv2
|
||||
CLC
|
||||
ADC #10
|
||||
DEY
|
||||
BMI conv2
|
||||
ADC #10
|
||||
|
||||
conv2 CMP #12
|
||||
BNE conv2a
|
||||
LDA #24
|
||||
conv2a TAY
|
||||
BNE conv3
|
||||
LDA #12
|
||||
|
||||
conv3 LDX #'A'
|
||||
CMP #13
|
||||
BCC conv4
|
||||
|
||||
SBC #12
|
||||
LDX #'P'
|
||||
|
||||
conv4 LDY #'0'
|
||||
conv5 CMP #10
|
||||
BCC conv6
|
||||
|
||||
SBC #10
|
||||
INY
|
||||
BNE conv5
|
||||
|
||||
conv6 ORA #'0'
|
||||
STA timestr+1
|
||||
STY timestr
|
||||
STX timestr+9
|
||||
RTS
|
||||
|
||||
* data area
|
||||
*-------------------------
|
||||
initbyt HEX 00
|
||||
timestr ASC '00:00:00 '00
|
||||
|
||||
DS \
|
||||
|
||||
@@ -0,0 +1,153 @@
|
||||
LST OFF
|
||||
TR
|
||||
TR ADR
|
||||
*-------------------------------
|
||||
* Z-RAM Ultra 2-3 - 12 hour
|
||||
*-------------------------------
|
||||
* Date Revised: 05/05/87
|
||||
*-------------------------------
|
||||
|
||||
rel
|
||||
dsk CLOCKS/rel/ultra
|
||||
|
||||
ultra ent
|
||||
|
||||
org $A00
|
||||
|
||||
*-------------------------------
|
||||
|
||||
get_time equ $82
|
||||
mli equ $bf00
|
||||
date equ $bf90
|
||||
|
||||
hex 00
|
||||
mode db 0
|
||||
jmp getdate
|
||||
jmp gettime
|
||||
jmp setdate
|
||||
|
||||
* get the date in prodos gbbs format
|
||||
*-------------------------------
|
||||
|
||||
getdate jsr mli ; mli call
|
||||
db get_time
|
||||
hex 0000 ; no pramater table
|
||||
|
||||
ldx date
|
||||
lda date+1
|
||||
setdate rts
|
||||
|
||||
* get the current time
|
||||
*-------------------------------
|
||||
|
||||
gettime jsr rdtime
|
||||
lda mode
|
||||
bpl gtime1
|
||||
jsr convert
|
||||
|
||||
gtime1 ldx #<timestr ; point to string
|
||||
lda #>timestr
|
||||
rts
|
||||
|
||||
* read the current time from clock
|
||||
*-------------------------------
|
||||
|
||||
rdtime lda #$C060
|
||||
holdclk lda #%00000101
|
||||
sta $C06D
|
||||
sta $C06D
|
||||
sta $C06D
|
||||
ldy #30
|
||||
loop lda $C06D
|
||||
and #%00000010
|
||||
beq readtime
|
||||
dey
|
||||
bne loop
|
||||
lda #%00000100
|
||||
sta $C06D
|
||||
sta $C06D
|
||||
sta $C06D
|
||||
bne holdclk
|
||||
|
||||
readtime lda $C065 ; 10's of hour
|
||||
and #$F
|
||||
ora #'0'
|
||||
sta timestr
|
||||
lda $C064 ; 1's of hour
|
||||
and #$F
|
||||
ora #'0'
|
||||
sta timestr+1
|
||||
lda $C063 ; 10's of minute
|
||||
and #$F
|
||||
ora #'0'
|
||||
sta timestr+3
|
||||
lda $C062 ; 1's of minute
|
||||
and #$F
|
||||
ora #'0'
|
||||
sta timestr+4
|
||||
lda $C061 ; 10's of seconds
|
||||
and #$F
|
||||
ora #'0'
|
||||
sta timestr+6
|
||||
lda $C060 ; 1's of seconds
|
||||
and #$F
|
||||
ora #'0'
|
||||
sta timestr+7
|
||||
rts
|
||||
|
||||
* convert time to 12hr format
|
||||
*----------------------------
|
||||
|
||||
convert lda timestr ;convert to 12 hour
|
||||
ldx timestr+1
|
||||
|
||||
and #$F
|
||||
tay
|
||||
txa
|
||||
and #$F
|
||||
|
||||
dey
|
||||
bmi conv2
|
||||
clc
|
||||
adc #10
|
||||
dey
|
||||
bmi conv2
|
||||
adc #10
|
||||
|
||||
conv2 cmp #12
|
||||
bne conv2a
|
||||
lda #24
|
||||
conv2a tay
|
||||
bne conv3
|
||||
lda #12
|
||||
|
||||
conv3 ldx #'A'
|
||||
cmp #13
|
||||
bcc conv4
|
||||
|
||||
sbc #12
|
||||
ldx #'P'
|
||||
|
||||
conv4 ldy #'0'
|
||||
conv5 cmp #10
|
||||
bcc conv6
|
||||
|
||||
sbc #10
|
||||
iny
|
||||
bne conv5
|
||||
|
||||
conv6 ora #'0'
|
||||
sta timestr+1
|
||||
sty timestr
|
||||
stx timestr+9
|
||||
ldx #'M'
|
||||
stx timestr+10
|
||||
rts
|
||||
|
||||
* variables
|
||||
*-------------------------------
|
||||
|
||||
timestr asc '00:00:00 '00
|
||||
|
||||
ds \
|
||||
|
||||
@@ -0,0 +1,184 @@
|
||||
LST OFF
|
||||
TR
|
||||
TR ADR
|
||||
*-------------------------------
|
||||
* Promethus Versacard Driver
|
||||
*-------------------------------
|
||||
* Revised Date: 08/02/87
|
||||
*-------------------------------
|
||||
|
||||
rel
|
||||
dsk CLOCKS/rel/versa
|
||||
|
||||
versa ent
|
||||
|
||||
org $A00
|
||||
|
||||
*-------------------------------
|
||||
|
||||
get_time equ $82
|
||||
mli equ $bf00
|
||||
date equ $bf90
|
||||
|
||||
slot hex 40
|
||||
mode db 0
|
||||
|
||||
jmp getdate
|
||||
jmp gettime
|
||||
jmp setdate
|
||||
|
||||
* get the date in prodos gbbs format
|
||||
*-------------------------------
|
||||
|
||||
getdate jsr mli ; mli call
|
||||
db get_time
|
||||
hex 0000 ; no pramater table
|
||||
|
||||
ldx date
|
||||
lda date+1
|
||||
setdate rts
|
||||
|
||||
* get the current time
|
||||
*-------------------------------
|
||||
|
||||
gettime jsr rdtime
|
||||
lda mode
|
||||
bpl gtime1
|
||||
jsr convert
|
||||
|
||||
gtime1 ldx #<timestr ; point to string
|
||||
lda #>timestr
|
||||
rts
|
||||
|
||||
* figure the current time
|
||||
*-------------------------------
|
||||
|
||||
rdtime jsr rdclock
|
||||
lda timestr
|
||||
pha ; fix hour (remove) am/pm info)
|
||||
and #%00110011
|
||||
sta timestr
|
||||
pla
|
||||
|
||||
lsr
|
||||
lsr
|
||||
lsr ; move am/pm bit into carry
|
||||
bcc gettim2 ; it is am (default)
|
||||
|
||||
lda #'P' ; change to pm
|
||||
sta timestr+9
|
||||
|
||||
gettim2 lsr ; move 12/24 hour bit into carry
|
||||
bcc gettim3 ; in 12 hour mode, all is well
|
||||
|
||||
lda #' ' ; in 24 hour mode kill am/pm
|
||||
sta timestr+9
|
||||
sta timestr+10
|
||||
|
||||
gettim3 rts
|
||||
|
||||
* read the date from clock
|
||||
*----------------------------
|
||||
|
||||
rdclock ldx #0
|
||||
ldy slot ; get slot offset
|
||||
rdclk2 lda clkparm,x ; get function
|
||||
beq rdclk4
|
||||
bmi rdclk3 ; just ascii data
|
||||
|
||||
and #%00111111 ; kill high status info
|
||||
sta $C082,y ; point to data
|
||||
|
||||
lda $C083,y ; load in data
|
||||
and #%00001111 ; get rid of extra
|
||||
ora #'0' ; make into numeric digit
|
||||
rdclk3 and #$7F ; kill high (from ascii)
|
||||
sta timestr,x
|
||||
inx
|
||||
jmp rdclk2 ; go until out of data
|
||||
|
||||
rdclk4 rts
|
||||
|
||||
* convert time to 12hr format
|
||||
*--------------------------------
|
||||
|
||||
convert lda timestr ;convert to 12 hour
|
||||
ldx timestr+1
|
||||
|
||||
and #$F
|
||||
tay
|
||||
txa
|
||||
and #$F
|
||||
|
||||
dey
|
||||
bmi conv2
|
||||
clc
|
||||
adc #10
|
||||
dey
|
||||
bmi conv2
|
||||
adc #10
|
||||
|
||||
conv2 cmp #12
|
||||
bne conv2a
|
||||
lda #24
|
||||
conv2a tay
|
||||
bne conv3
|
||||
lda #12
|
||||
|
||||
conv3 ldx #'A'
|
||||
cmp #13
|
||||
bcc conv4
|
||||
|
||||
sbc #12
|
||||
ldx #'P'
|
||||
|
||||
conv4 ldy #'0'
|
||||
conv5 cmp #10
|
||||
bcc conv6
|
||||
|
||||
sbc #10
|
||||
iny
|
||||
bne conv5
|
||||
|
||||
conv6 ora #'0'
|
||||
sta timestr+1
|
||||
sty timestr
|
||||
stx timestr+9
|
||||
ldx #'M'
|
||||
stx timestr+10
|
||||
rts
|
||||
|
||||
* convert a 2 byte decimal number to binary
|
||||
*--------------------------------
|
||||
|
||||
decbin8 and #$7F
|
||||
sec
|
||||
sbc #'0'
|
||||
sta decbyte ; save 10's digit
|
||||
txa ; move 1's into A
|
||||
and #$7F
|
||||
sec
|
||||
sbc #'0'
|
||||
|
||||
ldy #10
|
||||
dec8a clc
|
||||
adc decbyte ; add the 10's digit, 10 times
|
||||
dey
|
||||
bne dec8a
|
||||
rts ; return with result
|
||||
|
||||
decbyte hex 00
|
||||
|
||||
* variables
|
||||
*-------------------------
|
||||
|
||||
timestr asc '00:00:00 AM'00
|
||||
|
||||
clkparm hex 1514
|
||||
asc ":"
|
||||
hex 1312
|
||||
asc ":"
|
||||
hex 1110
|
||||
asc " AM"
|
||||
hex 00
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
LST OFF
|
||||
TR
|
||||
TR ADR
|
||||
*-------------------------------
|
||||
* Date: 3/11/88
|
||||
*-------------------------------
|
||||
|
||||
REL
|
||||
DSK REL/CMD
|
||||
|
||||
cls EXT
|
||||
sv_drvs EXT
|
||||
start EXT
|
||||
init EXT
|
||||
|
||||
*-------------------------------
|
||||
* write the changes back into the drivers file
|
||||
*-------------------------------
|
||||
|
||||
wrtchg ENT
|
||||
JSR cls
|
||||
JSR sv_drvs ; write configuration back to disk
|
||||
JMP start
|
||||
|
||||
*-------------------------------
|
||||
* check to see if in init mode
|
||||
*-------------------------------
|
||||
|
||||
chinit ENT
|
||||
BIT init ; in init mode?
|
||||
BPL :chinit2 ; nope
|
||||
|
||||
PLA ; return to init routine
|
||||
PLA
|
||||
:chinit2 RTS ; return to caller
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
LST OFF
|
||||
TR
|
||||
TR ADR
|
||||
*-------------------------------
|
||||
* Date: 12/1/89
|
||||
*-------------------------------
|
||||
* system defaults
|
||||
*-------------------------------
|
||||
|
||||
REL
|
||||
DSK REL/DEFAULTS
|
||||
|
||||
TopBox EXT
|
||||
print EXT
|
||||
cls EXT
|
||||
get_cr EXT
|
||||
start EXT
|
||||
|
||||
; change system defaults
|
||||
do_dflts ENT
|
||||
JSR TopBox
|
||||
JSR print
|
||||
DB 1,2,27
|
||||
ASC '- Edit System Defaults -'
|
||||
DB 1,4,5
|
||||
ASC 'Please refer to Appendix D of your user'
|
||||
ASC ' manual for more information.'00
|
||||
JSR cls
|
||||
|
||||
JSR print
|
||||
DB 1,10,10
|
||||
ASC 'code for editing the system defaults'
|
||||
ASC ' will go here.'00
|
||||
|
||||
JSR get_cr
|
||||
JMP start
|
||||
|
||||
+361
@@ -0,0 +1,361 @@
|
||||
LST OFF
|
||||
TR
|
||||
TR ADR
|
||||
*-------------------------------
|
||||
* Disk stuff for config
|
||||
*-------------------------------
|
||||
* Date: 3/11/88
|
||||
*-------------------------------
|
||||
|
||||
REL
|
||||
cr = $D
|
||||
|
||||
lnbuf = $200
|
||||
drvbuf = $800
|
||||
flname = $300
|
||||
fbuf1 = $1C00
|
||||
fbuf2 = fbuf1
|
||||
fnam1 = $1E00
|
||||
msgbuf = fbuf1
|
||||
mli = $BF00
|
||||
|
||||
DSK REL/DISK
|
||||
|
||||
p_pfx2 EXT
|
||||
logprg EXT
|
||||
drvname EXT
|
||||
movname EXT
|
||||
msgref EXT
|
||||
|
||||
*-------------------------------
|
||||
* verify a that a disk is online
|
||||
|
||||
verify ENT
|
||||
STX verify_p+1 ; point to wanted path
|
||||
STA verify_p+2
|
||||
|
||||
JSR mli
|
||||
DB $C6 ; set prefix
|
||||
DA verify_p
|
||||
BCS :error
|
||||
|
||||
JSR mli ;get prefix for source volume
|
||||
DB $C7 ;get prefix
|
||||
DA p_pfx2 ;point to path
|
||||
:error RTS
|
||||
|
||||
verify_p DB 1
|
||||
DA 0 ;address of path to set
|
||||
|
||||
*-------------------------------
|
||||
* load config/acos.obj from disk
|
||||
|
||||
ld_drvs ENT
|
||||
JSR logprg ; log to the program disk
|
||||
LDX #<drvname
|
||||
LDA #>drvname
|
||||
JSR movname ; move filename
|
||||
JSR open ; open 'LLUCE.DRIVERS'
|
||||
BCS :error ; error
|
||||
|
||||
LDX #<drvbuf ; load config part into buffer
|
||||
LDA #>drvbuf
|
||||
LDY #18 ; read 9 pages (4 blocks)
|
||||
JSR rdblk
|
||||
JSR close ; close file
|
||||
CLC
|
||||
:error RTS
|
||||
|
||||
*-------------------------------
|
||||
* write config/acos.obj back to disk
|
||||
|
||||
sv_drvs ENT
|
||||
JSR logprg ; log to program disk
|
||||
LDX #<drvname
|
||||
LDA #>drvname
|
||||
JSR movname ; move filename
|
||||
JSR open
|
||||
BCS :error
|
||||
|
||||
LDX #<drvbuf ; write config back to disk
|
||||
LDA #>drvbuf
|
||||
LDY #18 ; write 9 pages (4 blocks)
|
||||
JSR wrblk
|
||||
JSR close
|
||||
CLC
|
||||
:error RTS
|
||||
|
||||
refnum ENT
|
||||
DB 0
|
||||
|
||||
create ENT
|
||||
STY p_creat+4 ; save filetype
|
||||
JSR mli
|
||||
DB $C0
|
||||
DA p_creat
|
||||
RTS
|
||||
|
||||
open ENT
|
||||
LDY #0
|
||||
bfopen ENT
|
||||
LDA bufadr,y ; point at buffer
|
||||
STA p_open+4
|
||||
|
||||
JSR mli
|
||||
DB $C8 ; open
|
||||
DA p_open
|
||||
BNE :open2
|
||||
|
||||
LDA p_open+5 ; save refnum
|
||||
STA refnum
|
||||
CLC
|
||||
RTS
|
||||
|
||||
:open2 LDA #-1 ; make sure refnum is illegal
|
||||
STA refnum
|
||||
SEC
|
||||
RTS
|
||||
|
||||
bufadr DB >fbuf1,>fbuf2,>msgbuf
|
||||
|
||||
close ENT
|
||||
LDA refnum ; use refnum
|
||||
STA p_close+1
|
||||
JSR mli
|
||||
DB $CC ; close
|
||||
DA p_close
|
||||
RTS
|
||||
|
||||
flush ENT
|
||||
LDA refnum ; use refnum
|
||||
STA p_close+1
|
||||
JSR mli
|
||||
DB $CD ; flush
|
||||
DA p_close
|
||||
RTS
|
||||
|
||||
; setup for single line read
|
||||
rdlnset ENT
|
||||
LDA refnum
|
||||
STA p_new0+1 ; save refnum
|
||||
STA p_new1+1
|
||||
STA p_rdln+1
|
||||
|
||||
JSR mli
|
||||
DB $C9 ; enable newline
|
||||
DA p_new1
|
||||
RTS
|
||||
|
||||
; read a line from a file
|
||||
rdline ENT
|
||||
JSR mli
|
||||
DB $CA ; read
|
||||
DA p_rdln
|
||||
BNE :rdline2 ; read error
|
||||
|
||||
LDX p_rdln+6 ; is there a cr at end of line?
|
||||
LDA lnbuf-1,x
|
||||
AND #$7F
|
||||
CMP #cr
|
||||
BNE :rdline2 ; no more stuff
|
||||
CLC
|
||||
RTS
|
||||
|
||||
:rdline2 LDA #0 ; no data in line
|
||||
STA lnbuf
|
||||
SEC ; eof
|
||||
RTS
|
||||
|
||||
; read a single byte
|
||||
rdbyte ENT
|
||||
LDA refnum ; save refnum
|
||||
BEQ :rdbyte2
|
||||
|
||||
STA p_rbyt+1
|
||||
JSR mli
|
||||
DB $CA ; read 1 byte
|
||||
DA p_rbyt
|
||||
BNE :rdbyte2
|
||||
|
||||
LDA p_byte ; get byte
|
||||
CLC ; were done
|
||||
RTS
|
||||
|
||||
:rdbyte2 LDA #0 ; fake data
|
||||
SEC
|
||||
RTS
|
||||
|
||||
; write a block for the msg routines
|
||||
wrblk ENT
|
||||
PHA
|
||||
LDA #$CB ; use write call
|
||||
STA rwtype ; --- does modify
|
||||
PLA
|
||||
BRA rwblk
|
||||
|
||||
; read a block for the msg routines
|
||||
rdblk ENT
|
||||
PHA
|
||||
LDA #$CA ; use read call
|
||||
STA rwtype ; --- does modify
|
||||
PLA
|
||||
|
||||
rwblk STX p_rdblk+2
|
||||
STA p_rdblk+3 ; save read address
|
||||
|
||||
LDA #0
|
||||
STA p_rdblk+4
|
||||
STY p_rdblk+5 ; save number of blocks to read
|
||||
|
||||
LSR p_rdblk+5 ; divide by 2 and
|
||||
ROR p_rdblk+4 ; put remainder
|
||||
|
||||
LDA refnum ; get refnum
|
||||
STA p_rdblk+1
|
||||
|
||||
JSR mli ; call mli
|
||||
rwtype DB $CA ; *** modified ***
|
||||
DA p_rdblk
|
||||
RTS
|
||||
|
||||
; write a byte of data
|
||||
wrbyte ENT
|
||||
STA p_byte ; save data
|
||||
PHA
|
||||
LDA refnum
|
||||
BEQ :wrbyte2 ; if no refnum
|
||||
|
||||
STA p_rbyt+1
|
||||
JSR mli
|
||||
DB $CB ; write byte
|
||||
DA p_rbyt
|
||||
CLC ; all is well
|
||||
BEQ :wrbyte3
|
||||
|
||||
:wrbyte2 SEC ; opps, problem
|
||||
:wrbyte3 PLA ; get back data
|
||||
RTS
|
||||
|
||||
; position file
|
||||
posmsg ENT
|
||||
LDY msgref ; save refnum
|
||||
STY refnum
|
||||
|
||||
LSR ; setup Y,A,X w/exact byte
|
||||
TAY
|
||||
TXA
|
||||
ROR
|
||||
PHA
|
||||
LDA #16
|
||||
ROR
|
||||
TAX
|
||||
PLA
|
||||
JMP setpos
|
||||
|
||||
; find the end of file
|
||||
geteof ENT
|
||||
LDA refnum ; save refnum
|
||||
STA p_mark+1
|
||||
JSR mli
|
||||
DB $D1 ; get eof
|
||||
DA p_mark
|
||||
LDX p_mark+2
|
||||
LDA p_mark+3 ; get length
|
||||
LDY p_mark+4
|
||||
RTS
|
||||
|
||||
; set a mark into a file
|
||||
setmark ENT
|
||||
LDY #0
|
||||
; do actual position set within file
|
||||
setpos ENT
|
||||
STX p_mark+2
|
||||
STA p_mark+3 ; point to new location
|
||||
STY p_mark+4
|
||||
|
||||
LDA refnum
|
||||
STA p_mark+1 ; save refnum
|
||||
|
||||
:setpos2 JSR mli
|
||||
DB $CE ; set mark
|
||||
DA p_mark
|
||||
CMP #$4D ; check for out-of-range
|
||||
BNE :setpos3
|
||||
|
||||
JSR mli
|
||||
DB $D0 ; set eof
|
||||
DA p_mark
|
||||
BEQ :setpos2 ; position again
|
||||
|
||||
:setpos3 RTS
|
||||
|
||||
; get current file marker
|
||||
getmark ENT
|
||||
LDA refnum ; save refnum
|
||||
STA p_mark+1
|
||||
JSR mli
|
||||
DB $CF ; get mark
|
||||
DA p_mark
|
||||
SEC
|
||||
BNE :getmrk2 ; opps, error
|
||||
|
||||
CLC
|
||||
LDX p_mark+2 ; all is well
|
||||
LDA p_mark+3
|
||||
:getmrk2 RTS
|
||||
|
||||
; ------ parms ------
|
||||
p_open DB 3
|
||||
DA flname
|
||||
DA fbuf1
|
||||
DB 0
|
||||
|
||||
p_close DB 1
|
||||
DB 0
|
||||
|
||||
p_rbyt DB 4
|
||||
DB 0
|
||||
DA p_byte
|
||||
DA 1
|
||||
DA 0
|
||||
|
||||
p_byte DB 0
|
||||
|
||||
p_mark DB 2
|
||||
DB 0
|
||||
DB 0,0,0
|
||||
|
||||
p_new0 DB 3
|
||||
DB 0
|
||||
DB 0
|
||||
DB 0
|
||||
|
||||
p_new1 DB 3
|
||||
DB 0
|
||||
DB $7F
|
||||
DB $D
|
||||
|
||||
p_rdln DB 4
|
||||
DB 0
|
||||
DA lnbuf
|
||||
DA $FF
|
||||
DA 0
|
||||
|
||||
p_rdblk DB 4
|
||||
DB 0
|
||||
DA 0
|
||||
DA $80
|
||||
DA 0
|
||||
|
||||
p_del DB 1
|
||||
DA flname
|
||||
|
||||
p_creat DB 7
|
||||
DA flname
|
||||
DB $c3
|
||||
DB 0
|
||||
DA 0
|
||||
DB 1
|
||||
DA 0
|
||||
DA 0
|
||||
|
||||
@@ -0,0 +1,83 @@
|
||||
LST OFF
|
||||
tr
|
||||
tr adr
|
||||
********************************
|
||||
* *
|
||||
* Config Program - Equates *
|
||||
* *
|
||||
********************************
|
||||
|
||||
*-------------------------------
|
||||
* Date: 3/11/88
|
||||
*-------------------------------
|
||||
|
||||
bs = 8
|
||||
lf = $A
|
||||
up = $B
|
||||
cr = $D
|
||||
fs = $15
|
||||
can = $18
|
||||
esc = $1B
|
||||
del = $7F
|
||||
|
||||
; memory allocation / buffers
|
||||
|
||||
*index = $200 ; offset to skip over lluce header info
|
||||
lnbuf = $200
|
||||
flname = $300
|
||||
fltext = $301
|
||||
reset = $3f2
|
||||
dvrbuf = $800 ; start of driver buffer space
|
||||
prdrv = $900 ; printer driver is at $900-$9ff
|
||||
clkdrv = $A00 ; clocks driver is at $a00-$aff
|
||||
mdmdrv = $B00 ; modem driver is at $b00-$fff
|
||||
pfilter = $1000 ; profanity filter is at $1000-$10ff
|
||||
cdbyte = $10BF ; carrier detect byte
|
||||
ansstr = $10C0 ; modem answer string
|
||||
initstr = $10D0 ; modem init string
|
||||
hdrbuf = $1100 ; buffer for editing the profanity filter
|
||||
|
||||
cdtype = $1FFD
|
||||
modemtype = $1FFE
|
||||
serialtype = $1FFF
|
||||
|
||||
mli = $BF00
|
||||
|
||||
initbuf = $1800
|
||||
ansbuf = $1830
|
||||
fbuf1 = $1C00
|
||||
fnam1 = $1E00
|
||||
|
||||
sortbuf = $8000
|
||||
copybuf = $6000
|
||||
copymax = $5800
|
||||
; zero page usage
|
||||
|
||||
temp = 0
|
||||
temp2 = 2
|
||||
temp3 = 4
|
||||
temp4 = 6
|
||||
x_save = 9
|
||||
y_save = $A
|
||||
chrptr = $B
|
||||
base = $D
|
||||
maxlen = $F
|
||||
inverse = $10
|
||||
point0 = $11
|
||||
point1 = $14
|
||||
prn = $16 ; [4 bytes]
|
||||
numptr = $1A
|
||||
psave = $1C
|
||||
prnt = $1E
|
||||
|
||||
ch = $24
|
||||
cv = $25
|
||||
|
||||
fmparm = $60
|
||||
doszero = $62
|
||||
dosptr = $64
|
||||
part = $66
|
||||
dosbyt = $68
|
||||
|
||||
point3 = $FD
|
||||
|
||||
+246
@@ -0,0 +1,246 @@
|
||||
LST OFF
|
||||
TR
|
||||
TR ADR
|
||||
*-------------------------------
|
||||
* Date: 3/11/88
|
||||
*-------------------------------
|
||||
|
||||
REL
|
||||
temp2 = $02
|
||||
|
||||
ch = $24
|
||||
cv = $25
|
||||
|
||||
lnbuf = $200
|
||||
filtbuf = $1000
|
||||
hdrbuf = $1100
|
||||
|
||||
DSK REL/FILTER
|
||||
|
||||
TopBox EXT
|
||||
print EXT
|
||||
cls EXT
|
||||
cout EXT
|
||||
maxlen EXT
|
||||
inpmode EXT
|
||||
inpln EXT
|
||||
inpyn EXT
|
||||
cleos EXT
|
||||
start EXT
|
||||
get_cr EXT
|
||||
|
||||
*-------------------------------
|
||||
* profanity filter
|
||||
*-------------------------------
|
||||
|
||||
; change profanity filter (yuk)
|
||||
|
||||
do_filt ENT
|
||||
JSR TopBox
|
||||
JSR print
|
||||
DB 1,2,27
|
||||
ASC '- Edit Profanity Filter -'
|
||||
DB 1,4,5
|
||||
ASC 'Please refer to Appendix E of your user'
|
||||
ASC ' manual for more information.'00
|
||||
JSR cls
|
||||
|
||||
LDX #0 ; move table to a different space
|
||||
:loop LDA filtbuf,X ; so we don't change it if they abort
|
||||
STA hdrbuf,X
|
||||
DEX
|
||||
BNE :loop
|
||||
|
||||
filt2 LDA #0 ; start at #1
|
||||
STA temp2
|
||||
|
||||
:filt3 LDX temp2 ; get entry number
|
||||
JSR fndword ; find the word
|
||||
BCS filt5 ; opps, end of table
|
||||
|
||||
LDA ch ; save current horiz
|
||||
PHA
|
||||
|
||||
LDA temp2 ; print entry letter
|
||||
CLC
|
||||
ADC #'A'
|
||||
JSR cout
|
||||
INC temp2 ; goto next entry next pass
|
||||
|
||||
LDA #')' ; show a border
|
||||
JSR cout
|
||||
INC ch ; move over 1 space
|
||||
|
||||
:filt4 LDA hdrbuf,Y ; get data
|
||||
PHP
|
||||
JSR cout ; print data
|
||||
INY
|
||||
PLP
|
||||
BPL :filt4 ; keep showing
|
||||
|
||||
PLA
|
||||
CLC
|
||||
ADC #19
|
||||
STA ch ; move over horiz position
|
||||
|
||||
LDA #' ' ; either wrap or move 1 space
|
||||
JSR cout
|
||||
JMP :filt3
|
||||
|
||||
filt5 JSR print
|
||||
DB 1,20,0
|
||||
ASC 'Cmd: A=Add, D=Delete, Q=Quit ? '00
|
||||
|
||||
LDA #1
|
||||
STA maxlen ; get command
|
||||
LDA #%10000000
|
||||
STA inpmode
|
||||
JSR inpln
|
||||
|
||||
LDA lnbuf
|
||||
CMP #'A'
|
||||
BNE :tryd
|
||||
JMP fl_add
|
||||
|
||||
:tryd CMP #'D'
|
||||
BEQ fl_del
|
||||
:tryq CMP #'Q'
|
||||
BNE filt5
|
||||
JMP fl_quit
|
||||
|
||||
*-------------------------------
|
||||
* delete a word from list
|
||||
|
||||
fl_del LDX #20
|
||||
JSR cleos ; clear line
|
||||
JSR print
|
||||
DB 1,20,0
|
||||
ASC 'Delete [A-'00
|
||||
|
||||
CLC
|
||||
LDA temp2
|
||||
ADC #'@'
|
||||
JSR cout ; print range
|
||||
|
||||
JSR print
|
||||
ASC '] ? '00
|
||||
|
||||
LDA #%10000000
|
||||
STA inpmode ; set mode
|
||||
|
||||
JSR inpln ; get data
|
||||
LDA lnbuf
|
||||
CMP #'A'
|
||||
BCC filt5 ; move back, error
|
||||
|
||||
SEC
|
||||
SBC #'A' ; make into [0-xxx] range
|
||||
CMP temp2
|
||||
BCC *+5
|
||||
JMP filt5 ; out of range
|
||||
|
||||
PHA
|
||||
TAX
|
||||
INX
|
||||
JSR fndword ; locate second word
|
||||
STY temp2+1 ; save offset
|
||||
PLA
|
||||
TAX
|
||||
JSR fndword ; locate first word
|
||||
LDX temp2+1 ; point to second word
|
||||
|
||||
:fl_del2 LDA hdrbuf,X ; move data
|
||||
STA hdrbuf,Y
|
||||
INY
|
||||
INX
|
||||
BNE :fl_del2 ; loop
|
||||
JMP filt2 ; show new screen
|
||||
|
||||
; add a word to list
|
||||
fl_add LDX #20
|
||||
JSR cleos ; clear line
|
||||
JSR print
|
||||
DB 1,20,0
|
||||
ASC 'Enter new word: '00
|
||||
|
||||
LDA #16 ; 16 chars max length
|
||||
STA maxlen
|
||||
LDA #%10000000
|
||||
STA inpmode ; set input mode
|
||||
|
||||
JSR inpln ; get the data
|
||||
LDA lnbuf
|
||||
CMP #'A'
|
||||
BCC :fl_add4 ; abort
|
||||
|
||||
LDX temp2 ; get last word
|
||||
JSR fndword ; find end
|
||||
STY temp2+1 ; save current end
|
||||
|
||||
LDX #0
|
||||
:fl_add2 LDA lnbuf,X
|
||||
CMP #'A'
|
||||
BCC :fl_add3
|
||||
|
||||
STA hdrbuf,Y ; add byte
|
||||
INX
|
||||
INY
|
||||
BNE :fl_add2 ; and loop
|
||||
|
||||
LDA #0
|
||||
LDY temp2+1 ; mark old end of table
|
||||
STA hdrbuf,Y
|
||||
|
||||
JSR print
|
||||
DB 1,20,0
|
||||
ASC 'Error: Filter Table Overrun. Press [RETURN] '00
|
||||
JSR get_cr ; wait for cr
|
||||
:fl_add4 JMP filt5 ; get new data
|
||||
|
||||
:fl_add3 LDA #0 ; mark end of table
|
||||
STA hdrbuf,Y
|
||||
DEY
|
||||
LDA hdrbuf,Y ; mark as last char
|
||||
ORA #$80
|
||||
STA hdrbuf,Y
|
||||
JMP filt2 ; show new table
|
||||
|
||||
; quit from filter changer
|
||||
fl_quit LDX #20
|
||||
JSR cleos ; clear bottom of screen
|
||||
JSR print
|
||||
DB 1,20,0
|
||||
ASC 'Is the above table correct [Y/N] ? '00
|
||||
JSR inpyn
|
||||
BCS :fl_q1 ; nope!
|
||||
|
||||
LDX #0 ; put new table in place over
|
||||
:loop LDA hdrbuf,X ; the old table and return
|
||||
STA filtbuf,X
|
||||
BNE :loop
|
||||
:fl_q1 JMP start
|
||||
|
||||
; locate a word [indexed by x]
|
||||
fndword LDY #0
|
||||
CPX #0 ; we done?
|
||||
BEQ :fndwd2 ; yep
|
||||
|
||||
:fndwd1 LDA hdrbuf,Y ; loop until next word
|
||||
BEQ :fndwd4 ; end of table
|
||||
|
||||
INY ; goto next byte
|
||||
ASL ; check high bit
|
||||
BCC :fndwd1
|
||||
|
||||
DEX ; count down entries
|
||||
BNE :fndwd1
|
||||
|
||||
:fndwd2 LDA hdrbuf,Y
|
||||
BEQ :fndwd4 ; opps, that is end marker
|
||||
|
||||
:fndwd3 CLC
|
||||
RTS ; we are done
|
||||
|
||||
:fndwd4 SEC ; opps, end of table
|
||||
RTS
|
||||
|
||||
@@ -0,0 +1,78 @@
|
||||
LST OFF
|
||||
TR
|
||||
TR ADR
|
||||
TTL 'LLUCE - Global page'
|
||||
PAG
|
||||
*-------------------------------
|
||||
* History:
|
||||
*
|
||||
* 11/07/89 AMW
|
||||
* 1. Added history section
|
||||
* 2. Added segment titles
|
||||
* 3. Renamed this section to GLOBALS
|
||||
*
|
||||
* 11/10/89 AMW
|
||||
* Added AppleShare flag
|
||||
*
|
||||
* 11/14/89 AMW
|
||||
* Added ProDOS entry point vector
|
||||
*
|
||||
* 11/21/89 AMW
|
||||
* Moved startup filename to LLUCE
|
||||
*
|
||||
* 11/23/89 AMW
|
||||
* Added CRC16 location
|
||||
*
|
||||
* 11/28/89 AMW
|
||||
* Added time display flag
|
||||
*-------------------------------
|
||||
|
||||
; to be created by the config program
|
||||
NODENUM DB 0
|
||||
DW SEG_NAME
|
||||
MODULE DW 0
|
||||
|
||||
VERSION DDB version
|
||||
|
||||
STPCHR DB ' ' ; stop message char
|
||||
NXTCHR DB 'N' ; next message char
|
||||
|
||||
WIDTH DB 4 ; index for default
|
||||
DB 32,40,64,80
|
||||
|
||||
FILTLOC DB 0
|
||||
|
||||
WWFLAG DB -1 ; word-wrap flag for editor
|
||||
|
||||
REFNUM DB 0
|
||||
MSGREF DB 0
|
||||
DW FBUF2
|
||||
|
||||
SHWTXT DB 0
|
||||
SHWTRC DB 0 ; show program trace
|
||||
|
||||
TOCONST DW 159
|
||||
|
||||
EDLOC DW EDBUF
|
||||
EDITLEN DW EDBUF+EBUFEND
|
||||
EDMEMORY DB 0 ; if negative, buffer in aux
|
||||
FILTFLAG DB 1
|
||||
|
||||
ASHARE DB 0 ; AppleShare flag
|
||||
PDOSVEC DA 0
|
||||
|
||||
CRC DA 0
|
||||
|
||||
TIMEDISP DB $80 ; 0=24 hour, $80=12 hour
|
||||
|
||||
; modem(0) commands in LLUCE
|
||||
M_QUIT DB 'Q'-ctrl ; quit
|
||||
M_LOGIN DB 'G'-ctrl ; enter
|
||||
M_ANSWER DB 'A'-ctrl ; answer
|
||||
|
||||
DS $840-*
|
||||
|
||||
FLNAME DS $40 ; last filename used
|
||||
SEG_NAME DS $40 ; start up segment pathname
|
||||
SYSPFX DS $40 ; system files prefIX
|
||||
|
||||
+803
@@ -0,0 +1,803 @@
|
||||
LST OFF
|
||||
TR
|
||||
TR ADR
|
||||
*-------------------------------
|
||||
* config/init
|
||||
*-------------------------------
|
||||
* Date: 3/11/88
|
||||
*-------------------------------
|
||||
|
||||
REL
|
||||
cr = $D
|
||||
|
||||
temp = 0
|
||||
temp2 = 2
|
||||
temp3 = 4
|
||||
temp4 = 6
|
||||
|
||||
confbuf = $800
|
||||
devnam = $815
|
||||
|
||||
copybuf = $6000
|
||||
copymax = $5800
|
||||
|
||||
mli = $BF00
|
||||
|
||||
DSK REL/INIT
|
||||
|
||||
begin EXT
|
||||
escape EXT
|
||||
cls EXT
|
||||
print EXT
|
||||
maxlen EXT
|
||||
inpmode EXT
|
||||
inpln EXT
|
||||
copyinp EXT
|
||||
ucopyinp EXT
|
||||
prstr EXT
|
||||
inpyn EXT
|
||||
re_mdm EXT
|
||||
re_pr EXT
|
||||
re_clk EXT
|
||||
TopBox EXT
|
||||
inpnum EXT
|
||||
get_cr EXT
|
||||
chkspc EXT
|
||||
bindec8 EXT
|
||||
setspec EXT
|
||||
get_ok EXT
|
||||
setdrv EXT
|
||||
setsys EXT
|
||||
settac EXT
|
||||
makesys EXT
|
||||
maketac1 EXT
|
||||
maketac2 EXT
|
||||
dstpfx EXT
|
||||
do_quit EXT
|
||||
verify EXT
|
||||
p_crpth EXT
|
||||
copy EXT
|
||||
movname EXT
|
||||
logdst EXT
|
||||
open EXT
|
||||
wrblk EXT
|
||||
close EXT
|
||||
create EXT
|
||||
logcon EXT
|
||||
cout EXT
|
||||
|
||||
do_init ENT
|
||||
LDX #<begin ; setup esc handler
|
||||
LDA #>begin
|
||||
JSR escape
|
||||
|
||||
JSR cls
|
||||
|
||||
LDA #30
|
||||
STA maxlen
|
||||
LDA #%00000000
|
||||
STA inpmode
|
||||
|
||||
JSR print
|
||||
ASC 'What are you going to call your system?'0D
|
||||
ASC ':'00
|
||||
JSR inpln
|
||||
|
||||
LDX #<datadef
|
||||
LDA #>datadef
|
||||
LDY #cr
|
||||
JSR copyinp ; copy name into file
|
||||
STX temp4
|
||||
STA temp4+1
|
||||
|
||||
LDA #20 ; limit length
|
||||
STA maxlen
|
||||
|
||||
JSR print
|
||||
HEX 0D
|
||||
ASC 'Enter your FULL name (20 characters max)'0D
|
||||
ASC ':'00
|
||||
JSR inpln ; get name
|
||||
|
||||
LDX #<user ; copy line uppercase
|
||||
LDA #>user
|
||||
LDY #cr
|
||||
JSR ucopyinp
|
||||
LDY #cr
|
||||
JSR copyinp ; copy the line
|
||||
STX temp3
|
||||
STA temp3+1
|
||||
|
||||
LDX temp4
|
||||
LDA temp4+1
|
||||
LDY #cr
|
||||
JSR copyinp
|
||||
STX temp4
|
||||
STA temp4+1
|
||||
|
||||
LDY #0
|
||||
init1d LDA user,Y
|
||||
INY
|
||||
CMP #$20
|
||||
BNE init1d
|
||||
DEY
|
||||
LDA #','
|
||||
STA user,Y
|
||||
|
||||
init2 LDA #%11000000
|
||||
STA inpmode
|
||||
|
||||
JSR print
|
||||
HEX 0D
|
||||
ASC 'Enter your telephone number'0D
|
||||
ASC '(XXX-XXX-XXXX): '00
|
||||
|
||||
JSR inpln ; get tele number
|
||||
CPY #12
|
||||
BNE init2
|
||||
|
||||
LDX #<usrtele
|
||||
LDA #>usrtele
|
||||
LDY #0
|
||||
JSR copyinp ; copy the line
|
||||
|
||||
LDA #16
|
||||
STA maxlen ; set length for city
|
||||
|
||||
JSR print
|
||||
HEX 0D
|
||||
ASC 'What city do you call from (16 char)'0D
|
||||
ASC ':'00
|
||||
|
||||
JSR inpln ; get where from
|
||||
LDX temp3
|
||||
LDA temp3+1
|
||||
LDY #','
|
||||
JSR copyinp ; copy the input
|
||||
STX temp2
|
||||
STA temp2+1
|
||||
|
||||
LDA #2
|
||||
STA maxlen ;set length for state
|
||||
|
||||
init2a JSR print
|
||||
HEX 0D
|
||||
ASC 'What state do you call from (XX):'00
|
||||
|
||||
JSR inpln ;get state
|
||||
CPY #2
|
||||
BNE init2a
|
||||
LDX temp2
|
||||
LDA temp2+1
|
||||
LDY #cr
|
||||
JSR copyinp ;copy to date area
|
||||
|
||||
LDA #8
|
||||
STA maxlen
|
||||
|
||||
init3 JSR cls
|
||||
JSR print
|
||||
ASC 'Enter a 4-8 char password:'00
|
||||
|
||||
JSR inpln
|
||||
CPY #4
|
||||
BCC init3
|
||||
|
||||
LDX #<usrpass
|
||||
LDA #>usrpass
|
||||
LDY #0
|
||||
JSR copyinp ; copy the line
|
||||
|
||||
LDA #20
|
||||
STA maxlen
|
||||
|
||||
JSR print
|
||||
HEX 0D
|
||||
ASC 'Enter a second password for remote logon (1-20 chars)'0D
|
||||
ASC ':'00
|
||||
|
||||
JSR inpln ; get second password
|
||||
LDX temp4
|
||||
LDA temp4+1
|
||||
LDY #cr
|
||||
JSR copyinp ; copy password into data file
|
||||
STX temp4
|
||||
STA temp4+1 ; save new pointers
|
||||
|
||||
LDY #0
|
||||
init3a LDA xdata,Y ; copy rest of the data file
|
||||
STA (temp4),Y
|
||||
INY
|
||||
CMP #0
|
||||
BNE init3a
|
||||
|
||||
JSR cls ; clear screen
|
||||
JSR print
|
||||
DB 1,7,30
|
||||
ASC '- System Information -'0D0D
|
||||
ASC 'System Name: '00
|
||||
|
||||
LDX #<datadef
|
||||
LDA #>datadef
|
||||
LDY #cr+128
|
||||
JSR prstr ; show system name
|
||||
STX temp4
|
||||
STA temp4+1
|
||||
|
||||
JSR print
|
||||
HEX 0D0D
|
||||
ASC 'Sysop Name: '00
|
||||
|
||||
LDX temp4
|
||||
LDA temp4+1
|
||||
LDY #cr+128
|
||||
JSR prstr ; show sysop name
|
||||
STX temp4
|
||||
STA temp4+1
|
||||
|
||||
JSR print
|
||||
HEX 0D0D
|
||||
ASC 'Sysop Phone Number: '00
|
||||
|
||||
LDX #<usrtele
|
||||
LDA #>usrtele
|
||||
LDY #13
|
||||
JSR prstr ; show tele number
|
||||
|
||||
JSR print
|
||||
HEX 0D0D
|
||||
ASC 'Sysop is From: '00
|
||||
|
||||
LDX temp3
|
||||
LDA temp3+1
|
||||
LDY #cr+128
|
||||
JSR prstr ; show where from
|
||||
|
||||
JSR print
|
||||
HEX 0D0D
|
||||
ASC 'Logon Password: '00
|
||||
|
||||
LDX #<usrpass
|
||||
LDA #>usrpass
|
||||
LDY #9
|
||||
JSR prstr ; show main password
|
||||
|
||||
JSR print
|
||||
HEX 0D0D
|
||||
ASC 'Remote Password: '00
|
||||
|
||||
LDX temp4
|
||||
LDA temp4+1
|
||||
LDY #cr+128
|
||||
JSR prstr ; show remote password
|
||||
|
||||
JSR print
|
||||
HEX 0D0D
|
||||
ASC 'Is this information correct? [Y/N] '00
|
||||
|
||||
JSR inpyn
|
||||
BCC init4
|
||||
JMP do_init
|
||||
|
||||
*-------------------------------
|
||||
|
||||
init4 LDA #-1
|
||||
STA init ; set init mode
|
||||
|
||||
einit1 JSR re_mdm
|
||||
einit2 LDX #<einit1
|
||||
LDA #>einit1 ; if esc, go back 1 level
|
||||
JSR escape
|
||||
JSR re_pr
|
||||
einit3 LDX #<einit2
|
||||
LDA #>einit2
|
||||
JSR escape
|
||||
JSR re_clk
|
||||
|
||||
*-------------------------------
|
||||
|
||||
LDY #<devnam
|
||||
LDA #0
|
||||
:loop STA confbuf,Y ; zero out pathname buffer
|
||||
INY
|
||||
BNE :loop
|
||||
|
||||
*-------------------------------
|
||||
* start the hardware config
|
||||
|
||||
hard1 LDX #<einit3
|
||||
LDA #>einit3 ; backup 1 level
|
||||
JSR escape
|
||||
|
||||
JSR TopBox
|
||||
JSR print
|
||||
DB 1,2,22
|
||||
ASC '- Copy Files to Mass Storage Device -'
|
||||
DB 1,4,13
|
||||
ASC 'Please refer to your user manual for more information.'00
|
||||
|
||||
JSR cls
|
||||
JSR print
|
||||
ASC 'Please enter the slot and drive of your '
|
||||
ASC 'mass storage device. If your media is'0D0D
|
||||
ASC 'removable, then please make sure there '
|
||||
ASC 'is formatted media in place.'0D0D0D
|
||||
ASC ' Slot? [1-7] '00
|
||||
LDX #7
|
||||
JSR inpnum
|
||||
STA slot ; save the slot
|
||||
|
||||
JSR print
|
||||
HEX 0D
|
||||
ASC ' Drive? [1-2] '00
|
||||
LDX #2
|
||||
JSR inpnum
|
||||
STA drive ; save the drive
|
||||
DEC drive ; make into [0-1] range
|
||||
|
||||
JSR print
|
||||
HEX 0D0D0D
|
||||
ASC 'Is the above correct [Y/N] ? '00
|
||||
JSR inpyn
|
||||
BCC *+5
|
||||
JMP hard1 ;nope
|
||||
|
||||
JSR cls
|
||||
JSR print
|
||||
ASC 'If you continue, 2 subdirectories will'
|
||||
ASC ' be created on your mass storage'0D0D
|
||||
ASC 'device. (MPRO.SEGS and MPRO.SYS) All'
|
||||
ASC ' needed files will be copied into'0D0D
|
||||
ASC 'these subdirectories. No existing files will be destroyed.'00
|
||||
JSR get_cr
|
||||
|
||||
LDA #0 ; no more turning away..
|
||||
JSR escape ; [p. floyd]
|
||||
|
||||
JSR chkspc ; check drive space
|
||||
CMP #3 ; are there are at least 768 blocks free?
|
||||
BCC *+5 ; not enough room
|
||||
JMP hard2
|
||||
|
||||
JSR cls
|
||||
JSR print
|
||||
ASC 'The storage device checked does not '
|
||||
ASC 'contain enough storage space to run'0D0D
|
||||
ASC 'the system. You need to make some '
|
||||
ASC 'more room on the device, or'0D0D
|
||||
ASC 'choose another device.'00
|
||||
|
||||
JSR get_cr
|
||||
JMP hard1 ; goto hard/floppy question
|
||||
|
||||
hard2 JSR cls
|
||||
JSR print
|
||||
ASC 'Should the MultiPro transfer system be installed'
|
||||
ASC 'onto this device? [Y/N] '00
|
||||
|
||||
JSR inpyn
|
||||
BCC :trans
|
||||
LDA #0
|
||||
STA settrans
|
||||
STA superlist ;mark the end of the supertac list as such
|
||||
JMP :notrans
|
||||
|
||||
:trans LDA #1
|
||||
STA settrans
|
||||
|
||||
JSR print
|
||||
HEX 0D0D0D
|
||||
ASC 'Please enter the number of volumes that '
|
||||
ASC 'should be allocated to the MultiPro'0D0D
|
||||
ASC 'file transfer system.'0D0D0D
|
||||
ASC 'Number of volumes? [1-99] '00
|
||||
|
||||
LDX #99 ;max is 99
|
||||
JSR inpnum
|
||||
STA volumes
|
||||
|
||||
JSR bindec8
|
||||
STA stacacc+2 ;sysop high (10's)
|
||||
STX stacacc+3 ;sysop high (1's)
|
||||
STA stacacc+7 ;user high
|
||||
STX stacacc+8 ;user high
|
||||
STA stacacc+12
|
||||
STX stacacc+13 ;elite high
|
||||
STA stacacc+17
|
||||
STX stacacc+18 ;priv high
|
||||
STA stacacc+22
|
||||
STX stacacc+23 ;board manager high
|
||||
|
||||
:notrans JSR setspec
|
||||
JSR chkspc ;reset
|
||||
|
||||
JSR cls
|
||||
JSR print
|
||||
ASC 'The configuration program is now going to '
|
||||
ASC 'copy over all the files needed'0D0D
|
||||
ASC 'to run MultiPro onto your mass storage device.'00
|
||||
|
||||
JSR get_ok ; get permission
|
||||
JSR cls
|
||||
|
||||
JSR setdrv ;create & log xxx/mpro.segs
|
||||
JSR make1 ;do copy in 3 parts
|
||||
JSR make2
|
||||
|
||||
JSR chkspc ;reset path to original drive
|
||||
|
||||
JSR setsys ;create & log xxx/mpro.sys
|
||||
JSR make3
|
||||
|
||||
LDA settrans ;did they want a transfer system?
|
||||
BNE :doit ;yes, set it up
|
||||
JMP noxfer ;nope, skip the next step
|
||||
|
||||
:doit JSR settac ;create & log xxx/mpro.sys/transfer/vol.
|
||||
JSR make4
|
||||
|
||||
*-------------------------------
|
||||
* setup supertac volumes
|
||||
|
||||
JSR chkspc ;reset path to /xxx/
|
||||
JSR makesys ;add /xxx/mpro.sys/
|
||||
JSR maketac1 ;add /xxx/mpro.sys/stac
|
||||
JSR maketac2 ;add /xxx/mpro.sys/stac/vol.
|
||||
|
||||
LDA #0
|
||||
STA curvol ;start at volume 1
|
||||
INC dstpfx ;add one to length of destination prefix
|
||||
|
||||
:loop INC curvol ;++current volume
|
||||
LDA curvol ;which volume are we at?
|
||||
CMP #10 ;did we do 10 yet?
|
||||
BCC :less10 ;nope, we have less than 10
|
||||
CMP #11 ;more than 9, but how much more?
|
||||
BCS :over10 ;>= 11, so we not right on 10
|
||||
INC dstpfx ;smack dab on 10, so length is one greater
|
||||
|
||||
:over10 JSR bindec8 ;convert volume we're on to decimal
|
||||
|
||||
LDY dstpfx ;get current length
|
||||
DEY ;character before the end
|
||||
STA dstpfx,Y ;store 10's
|
||||
TXA ;get 1's
|
||||
INY ;next character forward
|
||||
STA dstpfx,Y ;store 1's
|
||||
|
||||
JSR mli ; create /xxx/mpro.sys/stac/vol.XX
|
||||
DB $C0 ; create new path
|
||||
DA p_crpth
|
||||
JMP :over
|
||||
|
||||
:less10 LDX dstpfx ;add single number to end of prefix
|
||||
CLC
|
||||
ADC #'0' ;make it ascii
|
||||
STA dstpfx,X
|
||||
|
||||
JSR mli ; create /xxx/mpro.sys/stac/vol.X
|
||||
DB $C0 ; create new path
|
||||
DA p_crpth
|
||||
|
||||
:over LDA curvol ;how many volumes done
|
||||
CMP volumes ;done 'em all yet?
|
||||
BNE :loop ;nope, do some more
|
||||
|
||||
*-------------------------------
|
||||
|
||||
noxfer JSR cls
|
||||
JSR print
|
||||
ASC 'Your system is now configured and is '
|
||||
ASC 'ready to run. To bring up your system'0D0D
|
||||
ASC 'for operation, do the following:'0D0D0D
|
||||
ASC 'Boot up your mass storage device and '
|
||||
ASC 'type "PREFIX MPRO.SEGS".'0D0D
|
||||
ASC 'Type "-ACOS" to start your system running.'00
|
||||
|
||||
JSR get_cr
|
||||
JMP do_quit
|
||||
|
||||
volumes DB 0
|
||||
curvol DB 0
|
||||
|
||||
*-------------------------------
|
||||
* copy boot stuff over
|
||||
*-------------------------------
|
||||
|
||||
make1 LDX #<disk1 ; is first disk online?
|
||||
LDA #>disk1
|
||||
JSR verify
|
||||
BCC :online ; yes, it is
|
||||
|
||||
JSR cls
|
||||
JSR print
|
||||
ASC 'Please place MultiPro Disk #1, /CONFIG, online.'00
|
||||
|
||||
JSR get_ok ; wait for ok
|
||||
JMP make1 ;check it to make sure
|
||||
|
||||
:online JSR cls
|
||||
JSR print
|
||||
ASC 'Copying MultiPro...'00
|
||||
|
||||
LDX #<list1 ; copy acos & acos.obj
|
||||
LDA #>list1
|
||||
JSR copy
|
||||
|
||||
*-------------------------------
|
||||
|
||||
JSR logdst ; log to destination
|
||||
LDX #<gname2
|
||||
LDA #>gname2 ; open file
|
||||
JSR movname
|
||||
JSR open
|
||||
|
||||
LDX #<confbuf
|
||||
LDA #>confbuf ; write configured system out
|
||||
LDY #18 ; write 9 pages (16.5 blocks)
|
||||
JSR wrblk
|
||||
JSR close ; close file
|
||||
|
||||
LDX #<program
|
||||
LDA #>program ; create file named "PROGRAM"
|
||||
JSR movname
|
||||
LDY #$F5 ; make into special type
|
||||
JMP create
|
||||
|
||||
*-------------------------------
|
||||
* copy second set of files into XXX/MPRO.SEGS
|
||||
|
||||
make2 LDX #<disk2 ; is second disk in place?
|
||||
LDA #>disk2
|
||||
JSR verify
|
||||
BCC :online ; yes, it is
|
||||
|
||||
JSR cls
|
||||
JSR print
|
||||
ASC 'Please place MultiPro Disk #2, /SEGS, online.'00
|
||||
|
||||
JSR get_ok ; wait for ok
|
||||
JMP make2
|
||||
|
||||
:online JSR cls
|
||||
JSR print
|
||||
ASC 'Copying MultiPro program segments...'00
|
||||
|
||||
LDX #<list2 ; copy segments to xxx/mpro.segs
|
||||
LDA #>list2
|
||||
JMP copy
|
||||
|
||||
*-------------------------------
|
||||
* make main part of disk in XXX/MPRO.SYS
|
||||
|
||||
make3 LDX #<disk3 ; is third disk in place?
|
||||
LDA #>disk3
|
||||
JSR verify
|
||||
BCC :online ; yes, it is
|
||||
|
||||
JSR cls
|
||||
JSR print
|
||||
ASC 'Please place MultiPro Disk #3, /FILE, online.'00
|
||||
|
||||
JSR get_ok ; wait for ok
|
||||
JMP make3
|
||||
|
||||
:online JSR cls
|
||||
JSR print
|
||||
ASC 'Copying MultiPro system files...'00
|
||||
|
||||
LDX #<list3 ; copy last 4 files
|
||||
LDA #>list3
|
||||
JSR copy
|
||||
|
||||
JSR logdst ; log to seg sub
|
||||
LDX #<usrname ; open user file
|
||||
LDA #>usrname
|
||||
JSR movname
|
||||
JSR open
|
||||
|
||||
LDX #<user-128 ; write out sysop data
|
||||
LDA #>user-128
|
||||
LDY #2 ; write 1 page (2 blocks)
|
||||
JSR wrblk
|
||||
|
||||
JSR close ; finish up
|
||||
|
||||
LDX #<dtanam1
|
||||
LDA #>dtanam1 ; open data1 file
|
||||
JSR movname
|
||||
JSR open
|
||||
|
||||
LDX #<datadef
|
||||
LDA #>datadef
|
||||
LDY #4 ; write 2 pages (4 blocks)
|
||||
JSR wrblk
|
||||
JSR close
|
||||
JMP logcon ; log back
|
||||
|
||||
*-------------------------------
|
||||
* make supertac segments
|
||||
|
||||
make4 LDX #<list4 ;copy protocol up/down
|
||||
LDA #>list4 ;and xdos
|
||||
JSR copy
|
||||
|
||||
:loop LDX #<disk4 ; is fourth disk in place?
|
||||
LDA #>disk4
|
||||
JSR verify
|
||||
BCC :online ; yes, it is
|
||||
|
||||
JSR cls
|
||||
JSR print
|
||||
ASC 'Please place MultiPro Disk #4, /STAC, online.'00
|
||||
|
||||
JSR get_ok ; wait for ok
|
||||
JMP :loop
|
||||
|
||||
:online JSR cls
|
||||
JSR print
|
||||
ASC 'Copying MultiPro transfer system files...'00
|
||||
|
||||
LDX #<list5 ;copy supertac files
|
||||
LDA #>list5
|
||||
JSR copy
|
||||
|
||||
* copy the access file to the supertac stuff
|
||||
|
||||
JSR logdst ;log to supertac seg parts
|
||||
LDX #<access ;open user file
|
||||
LDA #>access
|
||||
JSR movname
|
||||
JSR open
|
||||
|
||||
LDX #<stacacc ;write out sysop data
|
||||
LDA #>stacacc
|
||||
LDY #1 ;write 128 bytes
|
||||
JSR wrblk
|
||||
|
||||
JSR close ;finish up
|
||||
JSR logcon ;log back to config
|
||||
RTS ;oi, we be done!
|
||||
|
||||
*-------------------------------
|
||||
* print the slot or drive
|
||||
|
||||
prslot LDA slot
|
||||
CLC
|
||||
ADC #'0' ; print slot
|
||||
JMP cout
|
||||
|
||||
prdriv LDA drive
|
||||
CLC ; print drive
|
||||
ADC #'1'
|
||||
JMP cout
|
||||
|
||||
*-------------------------------
|
||||
* variables
|
||||
*-------------------------------
|
||||
|
||||
init ENT
|
||||
DB 0
|
||||
|
||||
diskid DB $A2,$20,$A0,0
|
||||
|
||||
gname2 STR 'ACOS.OBJ'
|
||||
program STR 'PROGRAM'
|
||||
access STR 'ACCESS'
|
||||
|
||||
slot ENT
|
||||
DB 0
|
||||
drive ENT
|
||||
DB 0
|
||||
dtanam1 STR 'DATA1'
|
||||
|
||||
user DS 70
|
||||
usrpass ASC ' '
|
||||
usrtele ASC 'xxx-xxx-xxxx'
|
||||
DA 0 ;when$
|
||||
DB %11111110,%11111111,%11111111
|
||||
DB %11111111,%00000111
|
||||
DB $50,0,0,0,0,0,0,0,0,0
|
||||
DS 20 ;bytes
|
||||
|
||||
datadef ASC 'System Name'0D
|
||||
ASC 'Sysop Name'0D
|
||||
ASC 'Second Password'0D
|
||||
|
||||
DS 120
|
||||
|
||||
xdata ASC '---------------------------------------'0D
|
||||
ASC 'Ctrl-S Stop/Start Spacebar to Exit'0D
|
||||
ASC 'Press N for Next Bulletin'0D
|
||||
ASC '1,0'0D
|
||||
DB 0
|
||||
|
||||
condata ASC ' '
|
||||
ASC 'N'
|
||||
DB 2
|
||||
DB 32,40,64,80
|
||||
|
||||
stacacc ASC '1'0D ;sysop low access
|
||||
ASC '50'0D ;sysop high access
|
||||
ASC '1'0D ;user low access
|
||||
ASC '50'0D ;user high access
|
||||
ASC '1'0D ;elite low access
|
||||
ASC '50'0D ;elite high access
|
||||
ASC '1'0D ;priv low access
|
||||
ASC '50'0D ;priv high access
|
||||
ASC '1'0D ;board manager low access
|
||||
ASC '50'0D ;board manager high access
|
||||
HEX 0D0D
|
||||
|
||||
*-------------------------------
|
||||
* lists for identifying files
|
||||
|
||||
disk1 STR '/CONFIG'00
|
||||
disk2 STR '/SEGS'00
|
||||
disk3 STR '/FILE'00
|
||||
disk4 STR '/STAC'00
|
||||
|
||||
usrname ASC 'system/sys.users'00
|
||||
|
||||
list1 ASC 'lluce.system'00
|
||||
ASC 'lluce.druvers'00
|
||||
DB 00
|
||||
|
||||
list2 ASC 'logon.seg.s'00
|
||||
ASC 'main.seg.s'00
|
||||
ASC 'msg.seg.s'00
|
||||
ASC 'system.seg.s'00
|
||||
ASC 'maint.seg.s'00
|
||||
ASC 'mail.seg.s'00
|
||||
|
||||
* supertac segments
|
||||
* a 00 is placed here if they don't want to include the
|
||||
* transfer system's segments
|
||||
|
||||
settrans DB 0
|
||||
superlist ASC 'supertac.s'00
|
||||
ASC 'supertac.sys.s'00
|
||||
ASC 'supertac.aux.s'00
|
||||
ASC 'purge.seg.s'00
|
||||
DB 00
|
||||
|
||||
list3 ASC 'bbs'00
|
||||
ASC 'data'00
|
||||
ASC 'data1'00
|
||||
ASC 'data2'00
|
||||
ASC 'g1'00
|
||||
ASC 'g1.1'00
|
||||
ASC 'g1.2'00
|
||||
ASC 'g1.3'00
|
||||
ASC 'hlp.edit'00
|
||||
ASC 'hlp.main'00
|
||||
ASC 'hlp.msg'00
|
||||
ASC 'hlp.user'00
|
||||
ASC 'mnu.val.40'00
|
||||
ASC 'mnu.val.80'00
|
||||
ASC 'mnu.new'00
|
||||
ASC 'sys.newinfo'00
|
||||
ASC 'sys.news'00
|
||||
ASC 'sys.info'00
|
||||
ASC 'sys.questions'00
|
||||
ASC 'users'00
|
||||
ASC 'v1.1'00
|
||||
ASC 'v1.2'00
|
||||
ASC 'v1.3'00
|
||||
ASC 'v1.4'00
|
||||
ASC 'b1'00
|
||||
|
||||
list4 ASC 'protocol.up'00
|
||||
ASC 'protocol.down'00
|
||||
ASC 'xdos'00
|
||||
DB 00
|
||||
|
||||
list5 ASC 'access'00
|
||||
ASC 'xshow'00
|
||||
ASC 'xcat'00
|
||||
ASC 'menu.supertac'00
|
||||
ASC 'menu.sysop'00
|
||||
ASC 'menu.aux'00
|
||||
ASC 'menu.batch'00
|
||||
DB 00
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
LST OFF
|
||||
TR
|
||||
TR ADR
|
||||
|
||||
REL
|
||||
DSK REL/INITSTR
|
||||
|
||||
*-------------------------------
|
||||
* init strings for modems
|
||||
*-------------------------------
|
||||
|
||||
usr2400 ENT
|
||||
ASC 'ATX2S0=0S2=128E0V0F1Q0'0d00
|
||||
|
||||
usr9600 ENT
|
||||
ASC 'ATX6&S1&D2V0S0=0S2=128E0F1Q0'0d00
|
||||
|
||||
cts ENT
|
||||
ASC 'ATX3S0=0S2=128V0E0F1Q0&C1&D2S10=3'0D00
|
||||
|
||||
apl1200 ENT
|
||||
ASC 'ATX1S0=0S2=128V0'0D00
|
||||
|
||||
hayes1200 ENT
|
||||
ASC 'ATS0=0S2=128S18=0V0'0D00
|
||||
|
||||
hayes2400 ENT
|
||||
ASC 'ATX3S0=0&C1&D2S2=128V0'0D00
|
||||
|
||||
pro2400 ENT
|
||||
ASC 'ATX5S0=0S2=128V0'0D00
|
||||
|
||||
generic ENT
|
||||
ASC 'ATS0=0S2=128V0'0D00
|
||||
|
||||
epic ENT
|
||||
ASC 'ATS0=0S2=128&S1&D2V0'0D00
|
||||
|
||||
@@ -0,0 +1,92 @@
|
||||
|
||||
*m_vers = '1' ; make into ascii # (Main Version)
|
||||
*s_vers = '0' ; make into ascii # (Sub Version)
|
||||
*p_vers = '5' ; make into ascii # (Patch Version)
|
||||
|
||||
ORG $2000 ; org to where you want it
|
||||
TYP $FF
|
||||
|
||||
ASM START
|
||||
ASM ROUTINE
|
||||
ASM DISK
|
||||
ASM OSPJUNK
|
||||
ASM VIDEO
|
||||
ASM CMD
|
||||
ASM MODEM
|
||||
ASM PRINTER
|
||||
ASM CLOCK
|
||||
ASM FILTER
|
||||
ASM DEFAULTS
|
||||
ASM INIT
|
||||
|
||||
ASM INITSTR
|
||||
ASM MODEMS/NULLMDM
|
||||
ASM MODEMS/CAT103
|
||||
ASM MODEMS/CAT212
|
||||
ASM MODEMS/MM2
|
||||
ASM MODEMS/SSC
|
||||
ASM MODEMS/GSPORT.SLOT1
|
||||
ASM MODEMS/GSPORT.SLOT2
|
||||
ASM MODEMS/SINGLESPD
|
||||
ASM MODEMS/MULTISPD
|
||||
ASM MODEMS/NOCAR
|
||||
|
||||
ASM CLOCKS/THUNDER
|
||||
ASM CLOCKS/SERIALPRO
|
||||
ASM CLOCKS/ULTRA
|
||||
ASM CLOCKS/NO.SLOT
|
||||
ASM CLOCKS/IIC.SYS
|
||||
ASM CLOCKS/PRODOS
|
||||
ASM CLOCKS/MOUNTAIN
|
||||
ASM CLOCKS/VERSA
|
||||
ASM CLOCKS/IIGS
|
||||
ASM CLOCKS/NULL
|
||||
|
||||
ASM PRINTERS/NULL
|
||||
ASM PRINTERS/PARALLEL
|
||||
ASM PRINTERS/SERIAL
|
||||
ASM PRINTERS/GRAPPLER
|
||||
|
||||
LINK REL/START
|
||||
LINK REL/ROUTINE
|
||||
LINK REL/DISK
|
||||
LINK REL/OSPJUNK
|
||||
LINK REL/VIDEO
|
||||
LINK REL/CMD
|
||||
LINK REL/MODEM
|
||||
LINK REL/PRINTER
|
||||
LINK REL/CLOCK
|
||||
LINK REL/FILTER
|
||||
LINK REL/DEFAULTS
|
||||
LINK REL/INIT
|
||||
|
||||
LINK REL/INITSTR
|
||||
LINK MODEMS/REL/NULLMDM
|
||||
LINK MODEMS/REL/CAT103
|
||||
LINK MODEMS/REL/CAT212
|
||||
LINK MODEMS/REL/MM2
|
||||
LINK MODEMS/REL/SSC
|
||||
LINK MODEMS/REL/GSPORT1
|
||||
LINK MODEMS/REL/GSPORT2
|
||||
LINK MODEMS/REL/SINGLESPD
|
||||
LINK MODEMS/REL/MULTISPD
|
||||
LINK MODEMS/REL/NOCAR
|
||||
|
||||
LINK CLOCKS/REL/THUNDER
|
||||
LINK CLOCKS/REL/SERIALPRO
|
||||
LINK CLOCKS/REL/ULTRA
|
||||
LINK CLOCKS/REL/NOSLOT
|
||||
LINK CLOCKS/REL/IICSYS
|
||||
LINK CLOCKS/REL/PRODOS
|
||||
LINK CLOCKS/REL/MOUNTAIN
|
||||
LINK CLOCKS/REL/VERSA
|
||||
LINK CLOCKS/REL/GSCLOCK
|
||||
LINK CLOCKS/REL/NULL
|
||||
|
||||
LINK PRINTERS/REL/NULL
|
||||
LINK PRINTERS/REL/PARALLEL
|
||||
LINK PRINTERS/REL/SERIAL
|
||||
LINK PRINTERS/REL/GRAPPLER
|
||||
|
||||
SAV CONFIG.SYSTEM
|
||||
|
||||
@@ -0,0 +1,252 @@
|
||||
LST OFF
|
||||
TR
|
||||
TR ADR
|
||||
********************************
|
||||
* *
|
||||
* GBBS Config - Prodos Storage *
|
||||
* *
|
||||
********************************
|
||||
|
||||
*-------------------------------
|
||||
* Date: 3/11/88
|
||||
*-------------------------------
|
||||
|
||||
re_stor JSR cls ; clear screen
|
||||
|
||||
LDA #<hdrbuf
|
||||
STA temp
|
||||
LDA #>hdrbuf
|
||||
STA temp+1
|
||||
|
||||
LDX #0 ; start pointers
|
||||
LDY #0
|
||||
STY temp2 ; set device count at zero
|
||||
stor2 LDA devnam,x ; get drive info
|
||||
STA temp2+1
|
||||
|
||||
stor3 LDA devnam,x ; copy pathname
|
||||
STA (temp),y
|
||||
INX
|
||||
INY
|
||||
DEC temp2+1
|
||||
BPL stor3
|
||||
|
||||
CLC
|
||||
LDA temp ; go to next address
|
||||
ADC #128
|
||||
STA temp
|
||||
LDA temp+1
|
||||
ADC #0
|
||||
STA temp+1
|
||||
|
||||
LDY #0
|
||||
INC temp2 ; inc number of pathnames
|
||||
LDA temp2
|
||||
CMP #12 ; done all 12?
|
||||
BNE stor2 ; nope
|
||||
|
||||
stor4 JSR TopBox
|
||||
JSR print
|
||||
DB 1,2,21
|
||||
ASC '- Edit Drive Specifier Allocation -'
|
||||
DB 1,4,5
|
||||
ASC 'Please refer to Appendix D of your user'
|
||||
ASC ' manual for more information.'00
|
||||
JSR cls
|
||||
|
||||
LDX #-1
|
||||
stor5 INX
|
||||
JSR shwpfx ; show drive
|
||||
LDA #cr ; add end of line
|
||||
JSR cout
|
||||
CPX #11
|
||||
BCC stor5 ; show all 12 entries
|
||||
|
||||
stor6 JSR print
|
||||
DB 1,20,0
|
||||
ASC 'Edit: [A-L] or Q=Quit ? '00
|
||||
|
||||
LDA #%10000000
|
||||
STA inpmode ; set mode 0
|
||||
LDA #1
|
||||
STA maxlen ; set length to 1
|
||||
|
||||
JSR inpln ; get input
|
||||
LDA lnbuf
|
||||
CMP #'Q' ; quit?
|
||||
BNE stor7 ; yep
|
||||
|
||||
JMP stor9 ; handle quit
|
||||
|
||||
stor7 SEC
|
||||
SBC #'A' ; make into range
|
||||
CMP #12 ; is it ok?
|
||||
BCS stor6 ; nope
|
||||
|
||||
PHA
|
||||
TAX
|
||||
JSR finddrv ; find the drive location
|
||||
|
||||
LDX #20
|
||||
JSR cleos ; claer last line
|
||||
|
||||
LDX #20 ; position
|
||||
STX cv
|
||||
LDX #0
|
||||
STX ch
|
||||
|
||||
PLA
|
||||
CLC
|
||||
ADC #'A' ; show drive specifier
|
||||
JSR cout
|
||||
JSR print
|
||||
ASC ': /'00
|
||||
|
||||
LDA #30 ; make max length 32 total
|
||||
STA maxlen
|
||||
LDA #%10100001
|
||||
STA inpmode
|
||||
|
||||
JSR inpln
|
||||
LDA lnbuf-1,y
|
||||
CMP #'/' ; check for ending slash
|
||||
BNE stor7f
|
||||
|
||||
LDA #cr ; delete ending slash
|
||||
STA lnbuf-1,y
|
||||
|
||||
stor7f LDA lnbuf ; did they just do a return?
|
||||
CMP #cr
|
||||
BNE stor8 ;nope
|
||||
|
||||
JSR print
|
||||
DB 1,20,0
|
||||
ASC 'Clear contents of this line [Y/N] ? '00
|
||||
|
||||
JSR inpyn ; get answer
|
||||
BCS stor7a ; nope
|
||||
|
||||
LDY #0
|
||||
TYA ; nullify an entry
|
||||
STA (temp4),y
|
||||
stor7a JMP stor4 ; do another
|
||||
|
||||
stor8 LDX #0
|
||||
LDY #2
|
||||
stor8a LDA lnbuf,x ; copy pathname
|
||||
STA (temp4),y
|
||||
INX
|
||||
INY
|
||||
CMP #cr
|
||||
BNE stor8a
|
||||
|
||||
LDY #0 ; save length
|
||||
TXA
|
||||
STA (temp4),y
|
||||
INY
|
||||
LDA #'/' ; add leading slash
|
||||
STA (temp4),y
|
||||
JMP stor4 ; show results
|
||||
|
||||
stor9a JMP start ; abort out
|
||||
|
||||
stor9 LDX #20
|
||||
JSR cleos ; clear bottom
|
||||
JSR print
|
||||
DB 1,20,0
|
||||
ASC 'Is the above correct [Y/N] ? '00
|
||||
JSR inpyn
|
||||
BCS stor9a ; nope
|
||||
|
||||
LDA #<hdrbuf
|
||||
STA temp ; point at pathnames
|
||||
LDA #>hdrbuf
|
||||
STA temp+1
|
||||
|
||||
LDX #0
|
||||
LDY #0
|
||||
STY temp2 ; start with drive A:
|
||||
stor9b LDA (temp),y
|
||||
STA temp2+1 ; save length
|
||||
|
||||
stor9c LDA (temp),y ; get data
|
||||
STA devnam,x
|
||||
INX
|
||||
CPX #$f0 ; is table ok?
|
||||
BEQ stor9d ; nope, it is too big
|
||||
|
||||
INY
|
||||
DEC temp2+1 ; count down length
|
||||
BPL stor9c
|
||||
|
||||
CLC
|
||||
LDA temp
|
||||
ADC #$80 ; go to next field
|
||||
STA temp
|
||||
LDA temp+1
|
||||
ADC #0
|
||||
STA temp+1
|
||||
|
||||
LDY #0 ; reset pointer within field
|
||||
INC temp2
|
||||
LDA temp2 ; done all 12 yet?
|
||||
CMP #12
|
||||
BNE stor9b ; nope, loop
|
||||
JMP wrtchg ; write changes to disk
|
||||
|
||||
stor9d JSR cls
|
||||
JSR print
|
||||
ASC 'ERROR !',0d,0d
|
||||
ASC 'Overflow error. Too much data within '
|
||||
ASC 'drive table. Cut down on the amount',0d,0d
|
||||
ASC 'of data within the table.'
|
||||
DB 1,20,0
|
||||
ASC 'Press [RETURN] to continue... ',00
|
||||
|
||||
stor9e JSR rdkey ; wait for a return
|
||||
CMP #cr
|
||||
BNE stor9e
|
||||
JMP stor4 ; get new stuff
|
||||
|
||||
; point to the pathname of a device
|
||||
finddrv LDA #0 ; set lower to 0
|
||||
STA temp4
|
||||
TXA
|
||||
LSR
|
||||
ROR temp4 ; put extra into low
|
||||
CLC
|
||||
ADC #>hdrbuf
|
||||
STA temp4+1 ; setup high
|
||||
RTS
|
||||
|
||||
; show a pathname of a device
|
||||
shwpfx JSR finddrv ; position
|
||||
TXA
|
||||
CLC
|
||||
ADC #'A' ; show drive name
|
||||
JSR cout
|
||||
|
||||
LDA #':' ; add colon
|
||||
JSR cout
|
||||
|
||||
LDA #' ' ; put in space
|
||||
JSR cout
|
||||
|
||||
LDY #0 ; check for data
|
||||
LDA (temp4),y
|
||||
STA temp2+1
|
||||
BEQ prdrv3 ; nope, there isnt any
|
||||
|
||||
prdrv2 INY
|
||||
LDA (temp4),y ; get byte of name
|
||||
JSR conv
|
||||
JSR cout ; show it
|
||||
DEC temp2+1
|
||||
BNE prdrv2 ; keep going
|
||||
|
||||
CLC
|
||||
RTS
|
||||
|
||||
prdrv3 SEC ; no data
|
||||
RTS
|
||||
|
||||
@@ -0,0 +1,764 @@
|
||||
LST OFF
|
||||
TR
|
||||
TR ADR
|
||||
********************************
|
||||
* *
|
||||
* Config - Print Userlist *
|
||||
* *
|
||||
********************************
|
||||
|
||||
*-------------------------------
|
||||
* Date: 11/29/86
|
||||
*-------------------------------
|
||||
|
||||
usrlist LDX #<start
|
||||
LDA #>start ; setup esc handler
|
||||
JSR escape
|
||||
|
||||
JSR TopBox
|
||||
JSR print
|
||||
DB 1,2,27
|
||||
ASC '- Sort and Print Userlist -'
|
||||
DB 1,4,5
|
||||
ASC 'Please refer to Appendix F of your user'
|
||||
ASC ' manual for more information.'00
|
||||
|
||||
JSR cls
|
||||
JSR print
|
||||
DB 1,7,0
|
||||
ASC ' 1 - Sort by user name'0D
|
||||
ASC ' 2 - Sort by the user number'0D
|
||||
ASC ' 3 - Sort by user password'0D
|
||||
ASC ' 4 - Sort by phone number'0D
|
||||
ASC ' 5 - Sort by last date on'0D
|
||||
ASC ' 6 - Sort by security level'0D
|
||||
ASC ' 7 - Return to main menu'0D0D
|
||||
ASC 'Which? [1-7] '00
|
||||
|
||||
LDX #7 ; get there choice
|
||||
JSR inpnum
|
||||
STA sortyp
|
||||
CMP #7 ; check for abort
|
||||
BNE :over
|
||||
JMP start
|
||||
|
||||
:over LDX #<usrlist ; setup esc handler
|
||||
LDA #>usrlist
|
||||
JSR escape
|
||||
|
||||
list0 JSR cls
|
||||
JSR print
|
||||
HEX 0D
|
||||
ASC 'Show users with which security flags:'0D0D
|
||||
ASC '[0] = Un-Verified Users'0D
|
||||
ASC '[1] = Verified Users'0D
|
||||
ASC '[34] = Sysop Status'0D
|
||||
ASC '[RET] = Print all users'0D0D
|
||||
ASC 'List which users [CR,0-34]: '00
|
||||
|
||||
LDA #%00100000
|
||||
STA inpmode ; set input mode
|
||||
LDA #2
|
||||
STA maxlen ; set input length
|
||||
|
||||
LDA #-1 ; default to all users
|
||||
STA seclvl
|
||||
JSR inpln ; input their choice
|
||||
LDA lnbuf
|
||||
CMP #cr ; show all users?
|
||||
BEQ list0a ; get password status
|
||||
|
||||
LDX #<lnbuf ; change to number
|
||||
LDA #>lnbuf
|
||||
JSR numin
|
||||
STX seclvl ; save the level
|
||||
CPX #35
|
||||
BCC list0a ; out of range
|
||||
JMP list0
|
||||
|
||||
list0a JSR print
|
||||
HEX 0D
|
||||
ASC 'Display Passwords [Y/N] ? '00
|
||||
JSR inpyn
|
||||
LDA #0
|
||||
ROR
|
||||
STA shwpass ; save password status
|
||||
|
||||
JSR print
|
||||
HEX 0D0D
|
||||
ASC 'Make sure printer, config disk, and '
|
||||
ASC 'system disk are on-line and ready.'00
|
||||
:oops JSR getcr
|
||||
LDA #1 ; log to system disk
|
||||
JSR logspec
|
||||
BCS :oops ; opps, error
|
||||
|
||||
JSR cls ; clear screen
|
||||
JSR print
|
||||
DB 1,8,12
|
||||
ASC 'Reading data...'00
|
||||
|
||||
LDX #<usrname ; setup user file name
|
||||
LDA #>usrname
|
||||
JSR movname
|
||||
|
||||
LDX #1 ; start user number at 1
|
||||
STX temp
|
||||
DEX
|
||||
STX temp+1
|
||||
|
||||
LDA #<sortbuf
|
||||
STA temp2 ; point to buffer
|
||||
LDA #>sortbuf
|
||||
STA temp2+1
|
||||
|
||||
JSR open ; open userfile
|
||||
BCC list1a ; all is well
|
||||
|
||||
JSR close
|
||||
JSR cls
|
||||
JSR print
|
||||
ASC 'Error: Unable to open file USERS'00
|
||||
JSR getcr
|
||||
JMP usrlist ; start over
|
||||
|
||||
list1a LDX #<hdrbuf ; gobble user #0
|
||||
LDA #>hdrbuf
|
||||
LDY #128 ; 128 byte records
|
||||
JSR rdpart
|
||||
|
||||
list_2 LDA #0 ; clear buffer
|
||||
STA hdrbuf
|
||||
LDX #<hdrbuf
|
||||
LDA #>hdrbuf ; read in a user
|
||||
LDY #128 ; 128 byte records
|
||||
JSR rdpart
|
||||
BCS list2c ; opps, end of file
|
||||
|
||||
LDA hdrbuf
|
||||
AND #$7F
|
||||
BEQ list2c ; no more users
|
||||
|
||||
CMP #','
|
||||
BEQ list2a ; opps, no user in that slot
|
||||
|
||||
LDA seclvl ; show all users?
|
||||
BMI list2e ; yep
|
||||
BEQ list2d ; show non-verified
|
||||
|
||||
PHA
|
||||
LSR
|
||||
LSR ; divide by 8
|
||||
LSR
|
||||
TAX ; and make into byte offset
|
||||
PLA
|
||||
AND #%00000111
|
||||
TAY ; get bit offset
|
||||
LDA hdrbuf+92,X ; get byte
|
||||
AND secmap,Y ; check bit
|
||||
BEQ list2a ; nope, dont show
|
||||
BNE list2e ; show it
|
||||
|
||||
list2d LDA hdrbuf+92 ; check for non-verified
|
||||
AND #%00000010
|
||||
BNE list2a ; user is verified, dont show
|
||||
|
||||
list2e JSR list_5 ; handle sort dispatch
|
||||
|
||||
list2a INC temp
|
||||
BNE *+4 ; inc user number
|
||||
INC temp+1
|
||||
JMP list_2 ; loop
|
||||
|
||||
list2c LDY #0
|
||||
TYA ; mark last entry
|
||||
STA (temp2),Y
|
||||
|
||||
LDA sortbuf ; check for no entries
|
||||
BNE list2f ; there is data
|
||||
|
||||
JSR close ; close user file
|
||||
JSR cls
|
||||
JSR print
|
||||
ASC 'No users fit parameters'00
|
||||
JSR getcr
|
||||
JMP usrlist ; restart
|
||||
|
||||
list2f LDA sortbuf+12 ; only 1 user in list?
|
||||
BEQ list2g ; yep
|
||||
|
||||
JSR print
|
||||
DB 1,8,12 ; change on-screen operation
|
||||
ASC 'Sort'00
|
||||
JSR list6 ; sort data
|
||||
|
||||
list2g JSR print
|
||||
DB 1,8,12
|
||||
ASC 'Printing data...'00
|
||||
|
||||
LDA #<sortbuf ; point to data
|
||||
STA temp2
|
||||
LDA #>sortbuf
|
||||
STA temp2+1
|
||||
LDA #0 ; count the page display
|
||||
STA prinit ; set printer to init
|
||||
STA pagecnt
|
||||
|
||||
list_3 LDY #0
|
||||
LDA (temp2),Y
|
||||
BEQ list_4 ; opps, end of list
|
||||
|
||||
LDY #10
|
||||
LDA (temp2),Y ; get user number
|
||||
STA hdrbuf+128
|
||||
TAX
|
||||
INY
|
||||
LDA (temp2),Y
|
||||
STA hdrbuf+129 ; save user number as data
|
||||
JSR gouser
|
||||
|
||||
LDX #<hdrbuf
|
||||
LDA #>hdrbuf ; read in user record
|
||||
LDY #128
|
||||
JSR rdpart
|
||||
|
||||
bit shwpass ; show passwords?
|
||||
BPL list3b ; yep
|
||||
|
||||
LDA #'*'
|
||||
LDX #7
|
||||
list3a STA hdrbuf+70,X ; cover password with *'s
|
||||
DEX
|
||||
BPL list3a
|
||||
|
||||
list3b JSR pruser ; print users data
|
||||
|
||||
CLC
|
||||
LDA temp2
|
||||
ADC #12
|
||||
STA temp2 ; goto next record
|
||||
LDA temp2+1
|
||||
ADC #0
|
||||
STA temp2+1
|
||||
JMP list_3 ; do next user
|
||||
|
||||
list_4 JSR close ; close user file
|
||||
list4a DEC pagecnt ; check page count
|
||||
BEQ list4b
|
||||
|
||||
LDA #cr ; advance page
|
||||
JSR prcout
|
||||
JMP list4a
|
||||
|
||||
list4b LDA #cr ; add 4 last lines
|
||||
JSR prcout
|
||||
JSR prcout
|
||||
JSR prcout
|
||||
JSR prcout
|
||||
JMP usrlist ; we are done
|
||||
|
||||
*-------------------------------
|
||||
* handle moving data for sort
|
||||
|
||||
list_5 LDY #9
|
||||
LDA #' '
|
||||
list5f STA hdrbuf+$100,Y ; fill with blanks just in case
|
||||
DEY
|
||||
BPL list5f
|
||||
|
||||
JSR list5b ; get into 10 byte form
|
||||
|
||||
LDY #11 ; save user record number
|
||||
LDA temp+1
|
||||
STA (temp2),Y
|
||||
DEY
|
||||
LDA temp
|
||||
STA (temp2),Y
|
||||
|
||||
DEY
|
||||
list5a LDA hdrbuf+$100,Y ; copy over data
|
||||
STA (temp2),Y
|
||||
DEY
|
||||
BPL list5a
|
||||
|
||||
CLC
|
||||
LDA temp2 ; go to next record
|
||||
ADC #12
|
||||
STA temp2
|
||||
LDA temp2+1
|
||||
ADC #0
|
||||
STA temp2+1
|
||||
RTS
|
||||
|
||||
sortyp DB 0
|
||||
|
||||
*-------------------------------
|
||||
|
||||
list5b LDA sortyp
|
||||
ASL
|
||||
TAX
|
||||
LDA displist,X
|
||||
STA prn
|
||||
INX
|
||||
LDA displist,X
|
||||
STA prn+1
|
||||
JMP (prn)
|
||||
|
||||
displist DA 0
|
||||
DA sname ; sort user name
|
||||
DA sunum ; sort by user number
|
||||
DA spass ; sort by password
|
||||
DA sfone ; sort by phone number
|
||||
DA sdate ; sort by last user
|
||||
DA ssec ; sort by sec level
|
||||
|
||||
*-------------------------------
|
||||
|
||||
sname LDY #-1
|
||||
sname2 INY
|
||||
LDA hdrbuf,Y ; search for divider
|
||||
AND #$7F
|
||||
CMP #' ' ; control char?
|
||||
BCC sunum ; hmm, just blank out
|
||||
CMP #','
|
||||
BNE sname2
|
||||
|
||||
LDX #-1
|
||||
sname3 INX
|
||||
INY
|
||||
LDA hdrbuf,Y ; move byte
|
||||
STA hdrbuf+$100,X
|
||||
AND #$7F
|
||||
CMP #' '
|
||||
BCS sname3 ; loop and finish
|
||||
|
||||
LDY #-1
|
||||
sname4 INY
|
||||
LDA hdrbuf,Y ; add on first name
|
||||
STA hdrbuf+$100,X
|
||||
AND #$7F
|
||||
INX
|
||||
CMP #',' ; done?
|
||||
BNE sname4 ; nope
|
||||
|
||||
sunum RTS ; leave data as blanks
|
||||
|
||||
spass LDY #7
|
||||
spass2 LDA hdrbuf+70,Y ; move password
|
||||
STA hdrbuf+$100,Y
|
||||
DEY
|
||||
BPL spass2
|
||||
RTS
|
||||
|
||||
sfone LDX #0
|
||||
LDY #0
|
||||
sfone2 LDA hdrbuf+78,Y ; get phone number
|
||||
STA hdrbuf+$100,X
|
||||
INX
|
||||
INY
|
||||
CPY #3
|
||||
BNE *+3 ; skip if not at 3
|
||||
INY
|
||||
CPY #7
|
||||
BNE *+3
|
||||
INY
|
||||
CPY #12 ; done?
|
||||
BNE sfone2 ; nope
|
||||
RTS
|
||||
|
||||
sdate LDA hdrbuf+91 ; move date into sort field
|
||||
AND #%00011111 ; get rid of extra stuff
|
||||
STA hdrbuf+$101
|
||||
LDA hdrbuf+90
|
||||
STA hdrbuf+$102
|
||||
RTS
|
||||
|
||||
ssec LDY #3
|
||||
ssec2 LDA hdrbuf+92,Y ; move sec level in
|
||||
STA hdrbuf+$101,Y
|
||||
DEY
|
||||
BPL ssec2
|
||||
RTS
|
||||
|
||||
; sort all the records into order
|
||||
list6 LDA #<sortbuf
|
||||
STA temp ; point to buffer #1
|
||||
LDA #>sortbuf
|
||||
STA temp+1
|
||||
|
||||
LDA #<sortbuf+12
|
||||
STA temp2 ; point to buffer #2
|
||||
LDA #>sortbuf+12
|
||||
STA temp2+1
|
||||
|
||||
list6a LDY #0
|
||||
list6b LDA (temp),Y ; get first byte
|
||||
CMP (temp2),Y ; check againt second
|
||||
BEQ list6c ; all is well
|
||||
BCS list6e
|
||||
BCC list6d ; order is correct
|
||||
|
||||
list6c INY ; go to next char
|
||||
CPY #10 ; there yet?
|
||||
BNE list6b ; nope
|
||||
|
||||
list6d CLC
|
||||
LDA temp ; advance pointer #1
|
||||
ADC #12
|
||||
STA temp
|
||||
LDA temp+1
|
||||
ADC #0
|
||||
STA temp+1
|
||||
|
||||
CLC
|
||||
LDA temp2 ; advance pointer #2
|
||||
ADC #12
|
||||
STA temp2
|
||||
LDA temp2+1
|
||||
ADC #0
|
||||
STA temp2+1
|
||||
|
||||
LDY #0 ; we done?
|
||||
LDA (temp),Y
|
||||
BEQ list6q ; yep
|
||||
|
||||
LDA (temp2),Y ; done?
|
||||
BNE list6a ; nope, do next record
|
||||
list6q RTS
|
||||
|
||||
list6e LDY #11
|
||||
list6f LDA (temp),Y
|
||||
PHA
|
||||
LDA (temp2),Y ; swap data
|
||||
STA (temp),Y
|
||||
PLA
|
||||
STA (temp2),Y
|
||||
DEY
|
||||
BPL list6f ; do 12 bytes
|
||||
|
||||
LDA temp+1
|
||||
CMP #>sortbuf ; at record #1 ?
|
||||
BNE list6g ; nope
|
||||
|
||||
LDA temp
|
||||
CMP #<sortbuf ; at record #1 ?
|
||||
BEQ list6h ; yep
|
||||
|
||||
list6g SEC
|
||||
LDA temp ; backup record #1
|
||||
SBC #12
|
||||
STA temp
|
||||
LDA temp+1
|
||||
SBC #0
|
||||
STA temp+1
|
||||
|
||||
SEC
|
||||
LDA temp2 ; backup record #2
|
||||
SBC #12
|
||||
STA temp2
|
||||
LDA temp2+1
|
||||
SBC #0
|
||||
STA temp2+1
|
||||
list6h JMP list6a
|
||||
|
||||
*-------------------------------
|
||||
; print out a user record
|
||||
pruser DEC pagecnt ; count down list
|
||||
BMI pruser0
|
||||
BNE pruser1
|
||||
|
||||
LDA #cr
|
||||
JSR prcout ; advance page
|
||||
JSR prcout
|
||||
JSR prcout
|
||||
JSR prcout
|
||||
|
||||
pruser0 LDX #<prthdr
|
||||
LDA #>prthdr
|
||||
LDY #-1 ; print page header
|
||||
JSR prdata
|
||||
|
||||
LDA sortyp
|
||||
LUP 4
|
||||
ASL
|
||||
--^
|
||||
TAX
|
||||
pruser3 LDA sortnam-16,X
|
||||
INX
|
||||
JSR prcout
|
||||
ASL
|
||||
BNE pruser3
|
||||
|
||||
LDX #77 ; move over to col 77
|
||||
JSR gocol
|
||||
|
||||
LDX #<prthdr2 ; print rest of header
|
||||
LDA #>prthdr2
|
||||
LDY #-1
|
||||
JSR prdata
|
||||
|
||||
LDA #58
|
||||
STA pagecnt ; reset page counter
|
||||
|
||||
pruser1 LDX #<hdrbuf ; point to buffer with data
|
||||
LDA #>hdrbuf
|
||||
LDY #"," ; print first name
|
||||
JSR prdata
|
||||
STX prn ; save location
|
||||
STA prn+1
|
||||
|
||||
LDA #' ' ; put a space between first & last
|
||||
JSR prcout
|
||||
|
||||
LDX prn ; pick up last location
|
||||
LDA prn+1
|
||||
LDY #cr+128 ; print last name
|
||||
JSR prdata
|
||||
|
||||
LDX #25 ; move over to col 25
|
||||
JSR gocol
|
||||
|
||||
LDX #<hdrbuf+78 ; point buffer to data
|
||||
LDA #>hdrbuf+78
|
||||
LDY #12
|
||||
JSR prdata ; print phone number
|
||||
|
||||
LDX hdrbuf+128
|
||||
LDA hdrbuf+129 ; translate number
|
||||
JSR decmem
|
||||
|
||||
SEC
|
||||
LDA #43
|
||||
SBC txtnum ; move over to print user number
|
||||
TAX
|
||||
JSR gocol
|
||||
|
||||
LDY txtnum
|
||||
LDX #<txtnum+1
|
||||
LDA #>txtnum+1
|
||||
JSR prdata ; print user number
|
||||
|
||||
LDA #'-' ; add in a dash
|
||||
JSR prcout
|
||||
|
||||
LDX #<hdrbuf+70 ; point buffer data
|
||||
LDA #>hdrbuf+70
|
||||
LDY #8
|
||||
JSR prdata ; print password
|
||||
|
||||
LDX #54 ; move over to col 54
|
||||
JSR gocol
|
||||
|
||||
LDA hdrbuf+92
|
||||
LSR ; dont show guest/user flag
|
||||
LDX #7
|
||||
pruser2 LSR
|
||||
PHA
|
||||
LDA #0 ; show 1 or 0 flag status
|
||||
ADC #'0'
|
||||
JSR prcout
|
||||
PLA
|
||||
DEX ; print 7 flags
|
||||
BNE pruser2
|
||||
|
||||
LDX #63 ; move over to col 63
|
||||
JSR gocol
|
||||
|
||||
LDA hdrbuf+90 ; get most of month
|
||||
LSR hdrbuf+91 ; shift last bit into carry
|
||||
ROR ; move bit in
|
||||
LUP 4
|
||||
LSR
|
||||
--^
|
||||
JSR bindec8
|
||||
JSR prdec8 ; print it out
|
||||
LDA #'/'
|
||||
JSR prcout
|
||||
|
||||
LDA hdrbuf+90
|
||||
AND #$1F ; translate month
|
||||
JSR bindec8
|
||||
JSR prdec8 ; print out
|
||||
LDA #'/'
|
||||
JSR prcout
|
||||
|
||||
LDA #'8' ; print out /8x
|
||||
JSR prcout
|
||||
|
||||
LDA hdrbuf+91 ; get year
|
||||
AND #%00001111 ; just use last digit
|
||||
CLC
|
||||
ADC #'0' ; make ascii
|
||||
JSR prcout
|
||||
|
||||
LDA hdrbuf+99
|
||||
AND #%00001111
|
||||
TAX ; display time limit
|
||||
LDA #0
|
||||
JSR decmem
|
||||
|
||||
SEC
|
||||
LDA #75
|
||||
SBC txtnum ; move over to print time limit
|
||||
TAX
|
||||
JSR gocol
|
||||
|
||||
LDY txtnum
|
||||
LDX #<txtnum+1
|
||||
LDA #>txtnum+1
|
||||
JSR prdata ; print time limit
|
||||
|
||||
LDA #'0' ; add on zero (time * 10)
|
||||
JSR prcout
|
||||
LDA #cr ; end of line data
|
||||
JMP prcout
|
||||
|
||||
; print out selected data
|
||||
prdata STX prn ; point to data
|
||||
STA prn+1
|
||||
STY prn+2 ; save delimeter
|
||||
STY prn+3 ; save length
|
||||
|
||||
LDY #0
|
||||
prdata2 LDA (prn),Y ; get data
|
||||
INC prn
|
||||
BNE *+4 ; goto next byte
|
||||
INC prn+1
|
||||
|
||||
ORA #$80 ; set high for ascii check
|
||||
CMP prn+2 ; we done?
|
||||
BEQ prdata3 ; yep
|
||||
|
||||
JSR prcout ; print data
|
||||
DEC prn+3 ; count down length
|
||||
BNE prdata2 ; keep going
|
||||
|
||||
prdata3 LDX prn
|
||||
LDA prn+1 ; get new address
|
||||
RTS
|
||||
|
||||
; go to a specified column
|
||||
gocol STX prn ; save end address
|
||||
gocol2 LDA prcol ; are we done?
|
||||
CMP prn
|
||||
BCS gocol3 ; yep
|
||||
|
||||
LDA #' ' ; move over a space
|
||||
JSR prcout
|
||||
JMP gocol2 ; keep going
|
||||
|
||||
gocol3 RTS
|
||||
|
||||
; print out a 2 byte number [xx]
|
||||
prdec8 JSR prcout ; call
|
||||
TXA ; ... fall into ...
|
||||
|
||||
; print character: A = character
|
||||
prcout PHA ; save all reg's
|
||||
STX prsv_x
|
||||
STY prsv_y
|
||||
|
||||
LDX #$13
|
||||
prcout1 LDA $24,X ; save zero page stuff
|
||||
STA przero,X
|
||||
DEX
|
||||
BPL prcout1
|
||||
|
||||
BIT prinit ; has printer been used?
|
||||
BMI prcout3 ; yep
|
||||
|
||||
LDA #$10
|
||||
STA $26 ; setup slot pointer
|
||||
LDA #>$C100
|
||||
STA $36+1 ; point ($0036) at $c100
|
||||
LDA #0 ; init printer card
|
||||
STA prcol ; reset column
|
||||
TAX
|
||||
TAY
|
||||
STA $24
|
||||
STA $27 ; zero character buffer
|
||||
STA $36
|
||||
|
||||
JSR $C100
|
||||
LDA $36 ; point to output routine
|
||||
STA jpcout2+1
|
||||
LDA $36+1
|
||||
STA jpcout2+2
|
||||
DEC prinit ; show we have done init
|
||||
|
||||
LDA #'I'-$40 ; send ctrl-I 80 n
|
||||
JSR jpcout
|
||||
LDA #'8'
|
||||
JSR jpcout
|
||||
LDA #'0'
|
||||
JSR jpcout
|
||||
LDA #'N'
|
||||
JSR jpcout
|
||||
|
||||
prcout3 LDA #0 ; set ch over to border
|
||||
STA $24
|
||||
INC prcol ; move over 1 col
|
||||
PLA ; get byte to print
|
||||
PHA
|
||||
AND #$7F ; print with high-bit off
|
||||
CMP #cr
|
||||
BNE prcout5
|
||||
|
||||
LDX #0 ; reset column
|
||||
STX prcol
|
||||
prcout5 JSR jpcout
|
||||
|
||||
LDX #$13
|
||||
prcout4 LDA przero,X ; restore zero page
|
||||
STA $24,X
|
||||
DEX
|
||||
BPL prcout4
|
||||
|
||||
LDX prsv_x ; restore reg's
|
||||
LDY prsv_y
|
||||
PLA
|
||||
RTS
|
||||
|
||||
jpcout ORA #$80
|
||||
jpcout2 JMP $C000 ; do output routine
|
||||
|
||||
prinit DB 0
|
||||
prsv_x DB 0
|
||||
prsv_y DB 0
|
||||
przero DS $14
|
||||
|
||||
; position to a user
|
||||
gouser STX temp+1 ; reset scratch bytes
|
||||
LDX #0
|
||||
STX temp
|
||||
|
||||
LSR ; do multipication
|
||||
ROR temp+1
|
||||
ROR temp
|
||||
LDX temp
|
||||
TAY
|
||||
LDA temp+1
|
||||
JMP setpos ; position to user
|
||||
|
||||
seclvl DB 0
|
||||
shwpass DB 0
|
||||
secmap DB 1,2,4,8,$10,$20,$40,$80
|
||||
|
||||
prcol DB 0
|
||||
pagecnt DB 0
|
||||
|
||||
prthdr ASC '++ MultiPro Userlist - Version 1.4 '
|
||||
ASC '- List Sorted By: ',FF
|
||||
prthdr2 ASC '++'0D
|
||||
ASC '[Name] [Phone] [User] '
|
||||
ASC '[Pass] [Sec] [Last] [Time]'0D
|
||||
ASC '[Alias] [Number] [Numb] '
|
||||
ASC '[Word] [Lvl] [Call] [Limit]'0D0D,FF
|
||||
|
||||
sortnam ASC 'User Name '0000
|
||||
ASC 'User Number '0000
|
||||
ASC 'User Password '0000
|
||||
ASC 'Phone Number '0000
|
||||
ASC 'Last Date On '0000
|
||||
ASC 'Security Level'0000
|
||||
|
||||
+454
@@ -0,0 +1,454 @@
|
||||
LST OFF
|
||||
TR
|
||||
TR ADR
|
||||
*-------------------------------
|
||||
* Reconfigure modem
|
||||
*-------------------------------
|
||||
|
||||
REL
|
||||
cr = $D
|
||||
point0 = $11
|
||||
point1 = $14
|
||||
point3 = $FD
|
||||
lnbuf = $200
|
||||
mdmdrv = $B00
|
||||
initbuf = $1800
|
||||
ansbuf = $1830
|
||||
cdbyte = $10BF ; carrier detect byte
|
||||
ansstr = $10C0 ; modem answer string
|
||||
initstr = $10D0 ; modem init string
|
||||
|
||||
DSK REL/MODEM
|
||||
|
||||
TopBox EXT ; routines external to this file
|
||||
print EXT
|
||||
cls EXT
|
||||
start EXT
|
||||
escape EXT
|
||||
inpnum EXT
|
||||
chinit EXT
|
||||
wrtchg EXT
|
||||
init EXT
|
||||
do_init EXT
|
||||
maxlen EXT
|
||||
inpmode EXT
|
||||
cout EXT
|
||||
inpln EXT
|
||||
|
||||
|
||||
nullmdm EXT ;null modem driver
|
||||
cat103 EXT ;300 baud cat driver
|
||||
cat212 EXT ;1200 baud cat driver
|
||||
mm2 EXT ;micromodem II driver
|
||||
ssc EXT ;super serial driver
|
||||
gsport1 EXT ;location for gs port driver
|
||||
gsport2 EXT ;loc for gs port slot #2
|
||||
singlespd EXT ;single speed driver
|
||||
multispd EXT ;multi-speed <return> driver
|
||||
nocar EXT ;no carrier driver
|
||||
|
||||
*-------------------------------
|
||||
* init strings
|
||||
|
||||
usr2400 EXT ;init string for usr 2400
|
||||
usr9600 EXT ;init string for usr 9600
|
||||
cts EXT ;init string for cts 2424
|
||||
apl1200 EXT
|
||||
hayes1200 EXT
|
||||
hayes2400 EXT
|
||||
pro2400 EXT
|
||||
generic EXT
|
||||
epic EXT
|
||||
|
||||
re_mdm ENT
|
||||
BIT init
|
||||
BMI :re_mdmx
|
||||
|
||||
LDX #<start ; setup esc handler
|
||||
LDA #>start
|
||||
JSR escape
|
||||
JMP :re_mdm0
|
||||
|
||||
:re_mdmx LDX #<do_init
|
||||
LDA #>do_init ; setup aux esc handler
|
||||
JSR escape
|
||||
|
||||
:re_mdm0 LDA #1 ; set input length at 1
|
||||
STA maxlen
|
||||
LDA #%10010000
|
||||
STA inpmode
|
||||
|
||||
:re_mdm3 JSR TopBox
|
||||
JSR print
|
||||
DB 1,2,26
|
||||
ASC '- Reconfigure Modem Driver -'
|
||||
DB 1,4,5
|
||||
ASC 'Please refer to Appendix A of your user'
|
||||
ASC ' manual for more information.'00
|
||||
|
||||
JSR cls
|
||||
JSR print
|
||||
DB 1,7,0
|
||||
ASC ' 1 - No Modem/Local mode '
|
||||
ASC ' External Modem Drivers'0D0D
|
||||
ASC ' Internal Modem Drivers '
|
||||
ASC ' 8 - Super Serial Card driver'0D
|
||||
ASC ' '
|
||||
ASC ' 9 - Apple IIgs Serial Port driver'0D
|
||||
ASC ' 2 - Apple-Cat 103 - 300 baud '
|
||||
ASC '10 - Single Speed SSC driver'0D
|
||||
ASC ' 3 - Apple-Cat 212 - 300/1200 baud '
|
||||
ASC '11 - Multiple Speed SSC driver'0D
|
||||
ASC ' 4 - DC Hayes Micromodem II '
|
||||
ASC '12 - No Carrier SSC driver'0D
|
||||
ASC ' 5 - SSM Modemcard 300'0D
|
||||
ASC ' 6 - Zoom Modem IIe'0D
|
||||
ASC ' 7 - Epic 2400 Classic II'0D0D
|
||||
ASC 'Which? [1-12] '00
|
||||
|
||||
LDX #12 ; get serial device
|
||||
JSR inpnum
|
||||
STA serialtype ;save the device type
|
||||
|
||||
ASL ;point0 points to the
|
||||
TAX ;serial device driver
|
||||
LDA devtable,X
|
||||
STA point0
|
||||
INX
|
||||
LDA devtable,X
|
||||
STA point0+1
|
||||
|
||||
LDA #<mdmdrv ;tell it to move the modem
|
||||
STA point1 ;driver
|
||||
LDA #>mdmdrv
|
||||
STA point1+1
|
||||
|
||||
LDA #12 ;default is generic
|
||||
ASL ;point init string to the
|
||||
TAX ;right place
|
||||
LDA strtable,X
|
||||
STA point3
|
||||
INX
|
||||
LDA strtable,X
|
||||
STA point3+1
|
||||
|
||||
LDA serialtype ;is it internal?
|
||||
CMP #8
|
||||
BCS getinit ;nope, get an init string
|
||||
CMP #7 ;was it the Epic internal?
|
||||
BEQ :epic24 ;yes, set for epic string
|
||||
CMP #1 ;nullmodem?
|
||||
BNE :internal ;nope, just internal
|
||||
PHA ;push garbage data
|
||||
PHA
|
||||
JMP movepage ;move & fix into place
|
||||
|
||||
:internal JMP getslot ;must have been internal, skip next
|
||||
|
||||
:epic24 LDA #1 ;default for epic is &s1&d2
|
||||
ASL ;point init string to the
|
||||
TAX ;right place
|
||||
LDA strtable,X
|
||||
STA point3
|
||||
INX
|
||||
LDA strtable,X
|
||||
STA point3+1
|
||||
JMP setinit
|
||||
|
||||
*-------------------------------
|
||||
* get the init string for the modem
|
||||
|
||||
getinit JSR cls
|
||||
JSR print
|
||||
DB 1,7,0
|
||||
ASC 'Choose Modem:'0D0D
|
||||
ASC ' 1 - Epic 2400 Plus'0D
|
||||
ASC ' 2 - USRobotics Courier 2400'0D
|
||||
ASC ' 3 - USRobotics Courier HST'0D
|
||||
ASC ' 4 - CTS 2424'0D
|
||||
ASC ' 5 - Apple Modem 1200'0D
|
||||
ASC ' 6 - Prometheus Promodem 1200'0D
|
||||
ASC ' 7 - Prometheus Promodem 2400'0D
|
||||
ASC ' 8 - Novation SmartCat'0D
|
||||
ASC ' 9 - Novation Professional 2400'0D
|
||||
ASC '10 - Hayes 1200'0D
|
||||
ASC '11 - Hayes 2400'0D
|
||||
ASC !12 -
|
||||
ASC 'Which? [1-12] '00
|
||||
|
||||
LDX #12
|
||||
JSR inpnum
|
||||
STA modemtype
|
||||
|
||||
ASL ;point init string to the
|
||||
TAX ;right place
|
||||
LDA strtable,X
|
||||
STA point3
|
||||
INX
|
||||
LDA strtable,X
|
||||
STA point3+1
|
||||
|
||||
*-------------------------------
|
||||
|
||||
setinit JSR cls
|
||||
JSR print
|
||||
DB 1,7,0
|
||||
ASC 'The initialization string for this modem is: '0D0D00
|
||||
|
||||
LDY #0
|
||||
:loop LDA (point3),Y
|
||||
STA initbuf,Y
|
||||
BEQ :done
|
||||
JSR cout
|
||||
INY
|
||||
BNE :loop
|
||||
|
||||
:done JSR print
|
||||
HEX 0D
|
||||
ASC 'Press [RETURN] to accept this as'
|
||||
ASC ' default, or enter a new init string.'0D
|
||||
ASC ':'00
|
||||
|
||||
LDA #39 ; only allow 39 chars
|
||||
STA maxlen
|
||||
LDA #%10100000
|
||||
STA inpmode ;ascii
|
||||
JSR inpln ; get the input
|
||||
LDY lnbuf
|
||||
CPY #cr
|
||||
BEQ getans ; use default
|
||||
|
||||
LDY #-1
|
||||
:loop2 INY ;move the typed init string
|
||||
LDA lnbuf,Y
|
||||
STA initbuf,Y
|
||||
CMP #cr
|
||||
BNE :loop2
|
||||
|
||||
INY
|
||||
LDA #0
|
||||
STA initbuf,Y
|
||||
|
||||
*-------------------------------
|
||||
* get the answer string
|
||||
|
||||
getans JSR cls
|
||||
JSR print
|
||||
DB 1,7,0
|
||||
ASC 'The default answer string for this modem is: '0D0D00
|
||||
|
||||
LDY #0
|
||||
:loop LDA atastr,Y
|
||||
STA ansbuf,Y
|
||||
BEQ :done
|
||||
JSR cout
|
||||
INY
|
||||
BNE :loop
|
||||
|
||||
:done JSR print
|
||||
HEX 0D
|
||||
ASC 'Press [RETURN] to accept this,'
|
||||
ASC ' or enter a new answer string.'0D
|
||||
ASC ':'00
|
||||
|
||||
LDA #15 ; only allow 15 chars
|
||||
STA maxlen
|
||||
JSR inpln ; get the input
|
||||
LDY lnbuf
|
||||
CPY #cr
|
||||
BEQ getdcd ; use default
|
||||
|
||||
LDY #-1
|
||||
:loop2 INY ;move the typed answer string
|
||||
LDA lnbuf,Y
|
||||
STA ansbuf,Y
|
||||
CMP #cr
|
||||
BNE :loop2
|
||||
|
||||
INY
|
||||
LDA #0
|
||||
STA ansbuf,Y
|
||||
|
||||
*-------------------------------
|
||||
* get the dcd drop type
|
||||
|
||||
getdcd JSR print
|
||||
HEX 0D0D
|
||||
ASC 'What type of carrier detect should the'
|
||||
ASC ' driver use?'0D0D
|
||||
ASC ' 1 - DSR Carrier Detect [Normal]'0D
|
||||
ASC ' 2 - DCD Carrier Detect'0D0D
|
||||
ASC 'Which? [1-2] '00
|
||||
|
||||
LDX #2
|
||||
JSR inpnum
|
||||
STA cdtype
|
||||
|
||||
*-------------------------------
|
||||
* get the proper slot
|
||||
|
||||
getslot JSR cls
|
||||
LDA serialtype
|
||||
CMP #9
|
||||
BEQ :gsport
|
||||
|
||||
JSR print
|
||||
DB 1,7,0
|
||||
ASC 'Which slot should the modem driver use? [1-7] '00
|
||||
LDX #7
|
||||
JMP :over
|
||||
|
||||
:gsport JSR print
|
||||
DB 1,7,0
|
||||
ASC 'Which Serial Port? [1-2] '00
|
||||
|
||||
LDX #2
|
||||
:over JSR inpnum
|
||||
PHA
|
||||
|
||||
LDX serialtype
|
||||
cpx #9 ;was it the IIgs serial port?
|
||||
BNE :notgsport ;nope
|
||||
|
||||
CMP #1 ;was it port #1?
|
||||
BNE :port2 ;nope, must be port 2
|
||||
|
||||
LDA #<gsport1 ;move gs port, slot 1
|
||||
STA point0
|
||||
LDA #>gsport1
|
||||
STA point0+1
|
||||
JMP :notgsport
|
||||
|
||||
:port2 LDA #<gsport2 ;move gs port slot 2
|
||||
STA point0
|
||||
LDA #>gsport2
|
||||
STA point0+1
|
||||
|
||||
:notgsport LDA serialtype ;was it an internal?
|
||||
CMP #7
|
||||
BCS :external ;no, init baud needed
|
||||
JMP :internal ;yes, init spd not needed
|
||||
|
||||
:external JSR print
|
||||
DB 1,10,0
|
||||
ASC 'At what baud rate should the port/card be initialized?'0D
|
||||
ASC '(Choose the maximum baud rate of your modem)'0D0D
|
||||
ASC ' 1 - 300 baud'0D
|
||||
ASC ' 2 - 1200 baud'0D
|
||||
ASC ' 3 - 2400 baud'0D
|
||||
ASC ' 4 - 4800 baud'0D
|
||||
ASC ' 5 - 9600 baud'0D
|
||||
ASC ' 6 - 19200 baud'0D0D
|
||||
ASC 'Which? [1-6] '00
|
||||
|
||||
LDX #6
|
||||
JSR inpnum
|
||||
:internal PHA
|
||||
|
||||
movepage LDX #3 ;move 3 illustrious pages
|
||||
:loop2 LDY #0
|
||||
:loop LDA (point0),Y ;source
|
||||
STA (point1),Y ;destination
|
||||
INY
|
||||
BNE :loop
|
||||
INC point0+1
|
||||
INC point1+1
|
||||
DEX
|
||||
BNE :loop2
|
||||
|
||||
LDA mdmdrv
|
||||
STA point1+1
|
||||
LDY #1
|
||||
PLX ;get init speed
|
||||
DEX ;one less
|
||||
TXA
|
||||
STA (point1),Y ;save it
|
||||
|
||||
dey
|
||||
PLA ;get the slot
|
||||
ASL
|
||||
ASL
|
||||
ASL
|
||||
ASL ;a := a*16
|
||||
STA (point1) ;store the slot
|
||||
|
||||
DEC cdtype
|
||||
LDA serialtype
|
||||
CMP #9 ;was it the gs?
|
||||
BNE :notgs ;nope, go there, SSC
|
||||
|
||||
LDA cdtype ;get drop type
|
||||
BNE :notgsdsr ;dcd wanted, so stick it
|
||||
LDA #$20 ;else use dsr drop
|
||||
STA cdbyte
|
||||
BNE copyans
|
||||
|
||||
:notgsdsr LDA #$08 ;setup for dcd drop
|
||||
STA cdbyte
|
||||
BNE copyans
|
||||
|
||||
:notgs LDA cdtype ;ssc
|
||||
BNE :notdsr ;dcd drop wanted, go there
|
||||
LDA #%01000000 ;check only dsr (normal)
|
||||
STA cdbyte
|
||||
BNE copyans
|
||||
|
||||
:notdsr LDA #%00100000 ;otherwise check DCD
|
||||
STA cdbyte
|
||||
|
||||
*-------------------------------
|
||||
|
||||
copyans LDY #0
|
||||
:loop LDA ansbuf,Y ;copy the answer string
|
||||
STA ansstr,Y
|
||||
BEQ copyinit
|
||||
INY
|
||||
BNE :loop
|
||||
|
||||
copyinit LDY #0 ;copy the init string
|
||||
:loop LDA initbuf,Y
|
||||
STA initstr,Y
|
||||
BEQ :writeit
|
||||
INY
|
||||
BNE :loop
|
||||
|
||||
:writeit JSR chinit ; check for init
|
||||
JMP wrtchg ; write the changes
|
||||
|
||||
cdtype DB 0
|
||||
modemtype DB 0
|
||||
serialtype DB 0
|
||||
|
||||
*-------------------------------
|
||||
* modem drivers
|
||||
|
||||
devtable DA 0 ;extra for offset 0
|
||||
DA nullmdm ;null modem driver
|
||||
DA cat103 ;300 baud cat driver
|
||||
DA cat212 ;1200 baud cat driver
|
||||
DA mm2 ;micromodem II driver
|
||||
DA mm2 ;SSM modemcard
|
||||
DA mm2 ;networker
|
||||
DA ssc ;epic 2400 classic
|
||||
DA ssc ;super serial driver
|
||||
DA gsport2 ;location for gs port driver
|
||||
DA singlespd ;single speed driver
|
||||
DA multispd ;multi-speed <return> driver
|
||||
DA nocar ;no carrier 300 baud driver
|
||||
|
||||
strtable DA 0
|
||||
DA epic
|
||||
DA usr2400
|
||||
DA usr9600
|
||||
DA cts
|
||||
DA apl1200
|
||||
DA usr2400
|
||||
DA usr2400
|
||||
DA usr2400
|
||||
DA pro2400
|
||||
DA hayes1200
|
||||
DA hayes2400
|
||||
DA generic
|
||||
|
||||
atastr ASC 'ATA'0D00
|
||||
|
||||
@@ -0,0 +1,270 @@
|
||||
LST OFF
|
||||
TR
|
||||
TR ADR
|
||||
*--------------------------
|
||||
* Internal - Apple Cat 103
|
||||
*--------------------------
|
||||
* Date 3/18/88 - AEN
|
||||
*--------------------------
|
||||
|
||||
rel
|
||||
dsk MODEMS/rel/cat103
|
||||
|
||||
swbyt EQU $c080
|
||||
shbyt EQU $c082
|
||||
indata EQU $c08b
|
||||
spdbyt EQU $c08b
|
||||
acbyte EQU $c08d
|
||||
xmtbyt EQU $c08d
|
||||
outdat EQU $c08e
|
||||
status1 EQU $c08f
|
||||
|
||||
cat103 ent
|
||||
|
||||
org $b00
|
||||
|
||||
*-------------------------------
|
||||
* jump table
|
||||
|
||||
slot dfb $20 ;serial card slot
|
||||
initspd dfb 0 ;initialize speed
|
||||
callspd dfb 0 ;speed of call
|
||||
|
||||
bytcnt dfb 0,0,0
|
||||
|
||||
JMP init
|
||||
JMP ringset
|
||||
JMP ring
|
||||
JMP answer
|
||||
JMP hangup
|
||||
JMP inp
|
||||
JMP out
|
||||
JMP chkdcd
|
||||
jmp setspd
|
||||
jmp setirq
|
||||
rts ;raise dtr
|
||||
|
||||
*-------------------------------
|
||||
* init the modem card
|
||||
|
||||
init SEI
|
||||
LDX slot ;get slot offset
|
||||
LDY #0
|
||||
init2 LDA initbyt,y ;init all 16 bytes
|
||||
STA $c080,x
|
||||
INX
|
||||
INY
|
||||
CPY #$10
|
||||
BNE init2
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* setup for the call
|
||||
|
||||
ringset LDA #0 ;reset time-on
|
||||
STA bytcnt
|
||||
STA bytcnt+1
|
||||
STA bytcnt+2
|
||||
STA carwait ;reset wait flag
|
||||
TAY set ;300 baud
|
||||
JMP setspd
|
||||
|
||||
*-------------------------------
|
||||
* scan for the ring and handle it
|
||||
|
||||
ring LDX slot ;get offset
|
||||
BIT carwait ;do they want manual-answer?
|
||||
BMI ring2a ;yep
|
||||
|
||||
LDA acbyte,x
|
||||
AND #%00000001
|
||||
BEQ ring4 ;nothing
|
||||
|
||||
ring2 LDA acbyte,x ;wait for ring to clear
|
||||
AND #%00000001
|
||||
BNE ring2
|
||||
|
||||
ring2a LDA #%00000010 ;pick up phone
|
||||
STA shbyt,x
|
||||
|
||||
LDA #80 ;setup carrier wait time
|
||||
STA carwait
|
||||
|
||||
LDA #60 ;wait for things to settle
|
||||
JSR wait
|
||||
|
||||
ring3 LDA #0 ;do big wait...
|
||||
JSR wait
|
||||
|
||||
LDA swbyt,x ;do we have carrier?
|
||||
AND #%00100000
|
||||
BNE ring5 ;yep
|
||||
|
||||
DEC carwait ;loop until count is done
|
||||
BNE ring3
|
||||
|
||||
JSR hangup
|
||||
ring4 CLC ;nothing happened
|
||||
RTS
|
||||
|
||||
ring5 LDA #-1 ;reset carrier timing
|
||||
STA carwait
|
||||
SEC
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* send ata
|
||||
|
||||
answer LDA #-1 ;signal we want manual-answer
|
||||
STA carwait
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* hangup phone
|
||||
|
||||
hangup LDX slot ;get offset
|
||||
LDA #0
|
||||
STA shbyt,x ;hang up phone
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* input data
|
||||
|
||||
inp STX save_x ;save X
|
||||
LDX slot ;get offset
|
||||
LDA status1,x ;get status
|
||||
AND #%00001000
|
||||
CLC
|
||||
BEQ inp2 ;no data
|
||||
|
||||
LDA #$20 ;reset char ready byte
|
||||
STA xmtbyt,x
|
||||
|
||||
LDA indata,x ;get data
|
||||
SEC
|
||||
inp2 LDX save_x ;restore & return
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* output data
|
||||
|
||||
out STX save_x ;save x
|
||||
DEC timecnt ;count down bytes per second
|
||||
BNE out1 ;not a seconds worth yet
|
||||
|
||||
PHA
|
||||
LDA callspd ;reset counter
|
||||
ASL
|
||||
ASL
|
||||
ASL ;time count = base.rate * 32
|
||||
ASL
|
||||
ASL
|
||||
STA timecnt
|
||||
PLA
|
||||
|
||||
INC bytcnt ;seconds - at 64 yet?
|
||||
BIT bytcnt
|
||||
BVC out1 ;nope
|
||||
|
||||
LDX #0 ;reset seconds
|
||||
STX bytcnt
|
||||
|
||||
INC bytcnt+1 ;minutes - at 64 yet?
|
||||
BIT bytcnt+1
|
||||
BVC out1 ;nope
|
||||
|
||||
LDX #0 ;reset minutes
|
||||
STX bytcnt+1
|
||||
|
||||
INC bytcnt+2 ;inc hours
|
||||
|
||||
out1 LDX slot
|
||||
|
||||
PHA
|
||||
out2 LDA status1,x ;check status
|
||||
AND #%00010000
|
||||
BEQ out2 ;loop until ready
|
||||
PLA
|
||||
|
||||
STA outdat,x ;output byte
|
||||
LDX save_x
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* check for carrier
|
||||
|
||||
chkdcd STX save_x ;dont kill any reg's
|
||||
PHA
|
||||
|
||||
LDA carwait ;do we have carrier?
|
||||
BEQ chkdcd3 ;nope
|
||||
|
||||
LDX slot
|
||||
LDA swbyt,x ;check carrier
|
||||
AND #%00100000
|
||||
BEQ chkdcd2 ;no carrier
|
||||
|
||||
LDA #-1 ;buffer carrier detect
|
||||
STA carwait
|
||||
SEC
|
||||
BCS chkdcd4 ;use return routine
|
||||
|
||||
chkdcd2 DEC carwait ;count down
|
||||
chkdcd3 CLC
|
||||
chkdcd4 PLA ;restore all & return
|
||||
LDX save_x
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* set the rs232 speed
|
||||
|
||||
setspd STX save_x
|
||||
LDX slot ;get offset
|
||||
LDA speed,y ;get speed
|
||||
STA spdbyt,x ;set speed
|
||||
|
||||
LDA #1 ;find caller speed (x300)
|
||||
STA callspd
|
||||
CPY #0 ;at 300?
|
||||
BEQ setspd3 ;yep
|
||||
|
||||
ASL callspd ;speed = speed * 2
|
||||
setspd2 ASL callspd ;speed = speed * 2
|
||||
DEY
|
||||
BNE setspd2 ;loop until correct speed found
|
||||
|
||||
setspd3 LDX save_x ;restore & return
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* setup interupt routine
|
||||
|
||||
setirq rts
|
||||
|
||||
*-------------------------------
|
||||
* wait routine
|
||||
|
||||
wait SEC ;from apple [+ ref man - pg 147]
|
||||
wait2 PHA
|
||||
wait3 SBC #1
|
||||
BNE wait3
|
||||
PLA
|
||||
SBC #1
|
||||
BNE wait2
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* variables
|
||||
|
||||
speed dfb %00100010,%00000000 ;handle 300, 1200
|
||||
|
||||
save_x dfb 0
|
||||
|
||||
timecnt dfb 0
|
||||
carwait dfb 0
|
||||
|
||||
initbyt dfb $00,$81,$00,$06,$00,$80,$00,$06
|
||||
dfb $00,$64,$07,$22,$05,$10,$00,$00
|
||||
|
||||
asc 'Cat103'
|
||||
|
||||
@@ -0,0 +1,321 @@
|
||||
LST OFF
|
||||
TR
|
||||
TR ADR
|
||||
*--------------------------
|
||||
* Internal - Apple Cat 212
|
||||
*--------------------------
|
||||
* Date 12/09/86
|
||||
*--------------------------
|
||||
|
||||
rel
|
||||
dsk MODEMS/rel/cat212
|
||||
|
||||
swbyt EQU $c080
|
||||
byt212 EQU $c080
|
||||
squbyt EQU $c081
|
||||
shbyt EQU $c082
|
||||
indata EQU $c08b
|
||||
spdbyt EQU $c08b
|
||||
acbyte EQU $c08d
|
||||
xmtbyt EQU $c08d
|
||||
outdat EQU $c08e
|
||||
status1 EQU $c08f
|
||||
devbyt EQU $c08f
|
||||
|
||||
cat212 ent
|
||||
|
||||
org $b00
|
||||
|
||||
*-------------------------------
|
||||
* jump table
|
||||
|
||||
slot dfb $20 ;serial card slot
|
||||
initspd dfb 0 ;initialize speed
|
||||
callspd dfb 0 ;speed of call
|
||||
|
||||
bytcnt dfb 0,0,0
|
||||
|
||||
JMP init
|
||||
JMP ringset
|
||||
JMP ring
|
||||
JMP answer
|
||||
JMP hangup
|
||||
JMP inp
|
||||
JMP out
|
||||
JMP chkdcd
|
||||
jmp setspd
|
||||
jmp setirq
|
||||
rts ;raise dtr
|
||||
|
||||
*-------------------------------
|
||||
* init the modem card
|
||||
|
||||
init SEI
|
||||
LDX slot ;get slot offset
|
||||
LDY #0
|
||||
init2 LDA initbyt,y ;init all 16 bytes
|
||||
STA $c080,x
|
||||
INX
|
||||
INY
|
||||
CPY #$10
|
||||
BNE init2
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* setup for call
|
||||
|
||||
ringset LDA #0 ;reset time-on
|
||||
STA bytcnt
|
||||
STA bytcnt+1
|
||||
STA bytcnt+2
|
||||
STA carwait ;reset wait flag
|
||||
TAY ;set 300 baud
|
||||
JMP setspd
|
||||
|
||||
*-------------------------------
|
||||
* scan for ring and handle it
|
||||
|
||||
ring LDX slot ;get offset
|
||||
BIT carwait ;do they want manual-answer?
|
||||
BMI ring2a ;yep
|
||||
|
||||
LDA acbyte,x
|
||||
AND #%00000001
|
||||
BEQ ring4 ;nothing
|
||||
|
||||
ring2 LDA acbyte,x ;wait for ring to clear
|
||||
AND #%00000001
|
||||
BNE ring2
|
||||
|
||||
ring2a LDA #%00000010 ;pick up phone
|
||||
STA shbyt,x
|
||||
|
||||
LDA #80 ;setup carrier wait time
|
||||
STA carwait
|
||||
|
||||
LDA #%10000001 ;disable 212 mode
|
||||
STA squbyt,x
|
||||
|
||||
LDA #128 ;wait
|
||||
JSR wait
|
||||
|
||||
LDA #%00000001 ;enable 212 mode
|
||||
STA squbyt,x
|
||||
|
||||
LDA #60 ;wait for things to settle
|
||||
JSR wait
|
||||
|
||||
ring3 LDA #0 ;do big wait...
|
||||
JSR wait
|
||||
|
||||
LDA swbyt,x ;do we have carrier?
|
||||
AND #%00100000
|
||||
BNE ring5 ;yep
|
||||
|
||||
LDA acbyte,x ;do we have 212 carrier
|
||||
AND #%00000100
|
||||
BNE ring6 ;yep
|
||||
|
||||
DEC carwait ;loop until count is done
|
||||
BNE ring3
|
||||
|
||||
JSR hangup
|
||||
ring4 CLC ;nothing happened
|
||||
RTS
|
||||
|
||||
ring5 LDA #%00010000 ;reset xmtbyt
|
||||
STA xmtbyt,x
|
||||
STA xmtdata
|
||||
LDA #%10000001 ;disable 212 card
|
||||
STA squbyt,x
|
||||
LDA #%00000000 ;send uart to 103 board
|
||||
STA devbyt,x
|
||||
JMP ring7 ;finish connect
|
||||
|
||||
ring6 LDA #%00000101 ;reset 212 card
|
||||
STA byt212,x
|
||||
LDA #%00000001 ;re-enable 212 card
|
||||
STA squbyt,x
|
||||
LDA #%00001010 ;send uart to 212 card
|
||||
STA devbyt,x
|
||||
LDA #%00011111 ;reset xmtbyt
|
||||
STA xmtbyt,x
|
||||
STA xmtdata
|
||||
LDY #1 ;set speed to 1200
|
||||
JSR setspd
|
||||
|
||||
ring7 LDA #-1 ;reset carrier timing
|
||||
STA carwait
|
||||
SEC
|
||||
LDA #0 ;do delay last
|
||||
JMP wait
|
||||
|
||||
*-------------------------------
|
||||
* send ata
|
||||
|
||||
answer LDA #-1 ;signal we want manual-answer
|
||||
STA carwait
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* hangup phone
|
||||
|
||||
hangup LDX slot ;get offset
|
||||
LDA #%00011111
|
||||
STA xmtbyt,x ;turn off 103 carrier
|
||||
LDA #%10000001
|
||||
STA squbyt,x ;turn off 212 carrier
|
||||
LDA #0
|
||||
STA shbyt,x ;hang up phone
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* input data
|
||||
|
||||
inp STX save_x ;save X
|
||||
LDX slot ;get offset
|
||||
LDA status1,x ;get status
|
||||
AND #%00001000
|
||||
CLC
|
||||
BEQ inp2 ;no data
|
||||
|
||||
LDA xmtdata ;reset char ready byte
|
||||
STA xmtbyt,x
|
||||
|
||||
LDA indata,x ;get data
|
||||
SEC
|
||||
inp2 LDX save_x ;restore & return
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* output data
|
||||
|
||||
out STX save_x ;save x
|
||||
DEC timecnt ;count down bytes per second
|
||||
BNE out1 ;not a seconds worth yet
|
||||
|
||||
PHA
|
||||
LDA callspd ;reset counter
|
||||
ASL
|
||||
ASL
|
||||
ASL ;time count = base.rate * 32
|
||||
ASL
|
||||
ASL
|
||||
STA timecnt
|
||||
PLA
|
||||
|
||||
INC bytcnt ;seconds - at 64 yet?
|
||||
BIT bytcnt
|
||||
BVC out1 ;nope
|
||||
|
||||
LDX #0 ;reset seconds
|
||||
STX bytcnt
|
||||
|
||||
INC bytcnt+1 ;minutes - at 64 yet?
|
||||
BIT bytcnt+1
|
||||
BVC out1 ;nope
|
||||
|
||||
LDX #0 ;reset minutes
|
||||
STX bytcnt+1
|
||||
|
||||
INC bytcnt+2 ;inc hours
|
||||
|
||||
out1 LDX slot
|
||||
|
||||
PHA
|
||||
out2 LDA status1,x ;check status
|
||||
AND #%00010000
|
||||
BEQ out2 ;loop until ready
|
||||
PLA
|
||||
|
||||
STA outdat,x ;output byte
|
||||
LDX save_x
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* check for carrier
|
||||
|
||||
chkdcd STX save_x ;dont kill any reg's
|
||||
PHA
|
||||
|
||||
LDA carwait ;do we have carrier?
|
||||
BEQ chkdcd3 ;nope
|
||||
|
||||
LDX slot
|
||||
LDA callspd ;check calling speed
|
||||
CMP #4 ;at 1200 baud?
|
||||
BEQ dcd212 ;yep
|
||||
|
||||
LDA swbyt,x ;check carrier
|
||||
AND #%00100000
|
||||
BEQ chkdcd2 ;no carrier
|
||||
|
||||
chkdcd1 LDA #-1 ;buffer carrier detect
|
||||
STA carwait
|
||||
SEC
|
||||
BCS chkdcd4 ;use return routine
|
||||
|
||||
dcd212 LDA acbyte,x ;check 212 carrier
|
||||
AND #%00000100
|
||||
BNE chkdcd1 ;all is well
|
||||
|
||||
chkdcd2 DEC carwait ;count down
|
||||
chkdcd3 CLC
|
||||
chkdcd4 PLA ;restore all & return
|
||||
LDX save_x
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* set the rs232 speed
|
||||
|
||||
setspd STX save_x
|
||||
LDX slot ;get offset
|
||||
LDA speed,y ;get speed
|
||||
STA spdbyt,x ;set speed
|
||||
|
||||
LDA #1 ;find caller speed (x300)
|
||||
STA callspd
|
||||
CPY #0 ;at 300?
|
||||
BEQ setspd3 ;yep
|
||||
|
||||
ASL callspd ;speed = speed * 2
|
||||
setspd2 ASL callspd ;speed = speed * 2
|
||||
DEY
|
||||
BNE setspd2 ;loop until correct speed found
|
||||
|
||||
setspd3 LDX save_x ;restore & return
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* setup interupt routine
|
||||
|
||||
setirq rts
|
||||
|
||||
|
||||
*-------------------------------
|
||||
* wait routine
|
||||
|
||||
wait SEC ;from apple ][+ ref man - pg 147
|
||||
wait2 PHA
|
||||
wait3 SBC #1
|
||||
BNE wait3
|
||||
PLA
|
||||
SBC #1
|
||||
BNE wait2
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
|
||||
speed dfb %00100010,%00000000 ;handle 300, 1200
|
||||
|
||||
save_x dfb 0
|
||||
|
||||
timecnt dfb 0
|
||||
carwait dfb 0
|
||||
xmtdata dfb 0
|
||||
|
||||
initbyt dfb $04,$81,$00,$06,$04,$80,$00,$06
|
||||
dfb $00,$64,$07,$22,$05,$1f,$00,$00
|
||||
|
||||
asc 'Cat212'
|
||||
|
||||
@@ -0,0 +1,338 @@
|
||||
TR
|
||||
TR ADR
|
||||
*-------------------------------
|
||||
* USRobotics 2400 driver written by Andy Nicholas
|
||||
* January 19, 1988
|
||||
*-------------------------------
|
||||
|
||||
dsk epic.dvr
|
||||
|
||||
cr equ $0d
|
||||
lf equ $0a
|
||||
|
||||
data equ $c088
|
||||
status equ $c089
|
||||
command equ $c08a
|
||||
control equ $c08b
|
||||
|
||||
*-------------------------------
|
||||
|
||||
ssc ent
|
||||
|
||||
org $e00
|
||||
|
||||
* jump table
|
||||
*-------------------------------
|
||||
|
||||
slot hex 20 ;serial card slot*16
|
||||
hex 00
|
||||
|
||||
callspd dfb 0 ;speed of call
|
||||
|
||||
bytcnt dfb 0,0,0
|
||||
|
||||
jmp init
|
||||
jmp ringset
|
||||
jmp ring
|
||||
jmp answer
|
||||
jmp hangup
|
||||
jmp inp
|
||||
jmp out
|
||||
jmp chkdcd
|
||||
jmp setspd
|
||||
jmp setirq
|
||||
jmp raisedtr
|
||||
|
||||
* init the serial card
|
||||
*-------------------------------
|
||||
|
||||
init lda #0 ;reset bytes
|
||||
ldx slot
|
||||
sta status,x ;reset uart
|
||||
sta command,x ;reset command
|
||||
|
||||
clc
|
||||
txa
|
||||
adc #<data
|
||||
sta dataloc+1 ;make into absolute save
|
||||
rts
|
||||
|
||||
* setup for call
|
||||
*-------------------------------
|
||||
|
||||
ringset ldx slot ;get offset
|
||||
|
||||
lda #%00000000 ;kill DTR, RTS
|
||||
sta command,x
|
||||
|
||||
lda #0 ;let modem reset
|
||||
jsr wait
|
||||
jsr wait
|
||||
|
||||
lda #%00001011 ;turn on DTR, RTS
|
||||
sta command,x
|
||||
|
||||
sei
|
||||
|
||||
ldy #2 ;set init speed (2400)
|
||||
jsr setspd
|
||||
|
||||
lda data,x ;clear data strobe
|
||||
|
||||
lda #0 ;slight delay (let modem do init)
|
||||
jsr wait
|
||||
|
||||
ldx #0
|
||||
:loop lda #$80
|
||||
jsr wait
|
||||
lda Initstr,x ;get modem init string
|
||||
beq rset3
|
||||
jsr out ;output
|
||||
inx
|
||||
bne :loop
|
||||
|
||||
rset3 lda #6
|
||||
sta countlo
|
||||
sta counthi
|
||||
|
||||
rset4 ldy #$FF
|
||||
rset5 dey
|
||||
beq decount
|
||||
|
||||
jsr inp
|
||||
bcc rset5
|
||||
and #$7f
|
||||
cmp #'K' ;check for "OK"
|
||||
beq leave
|
||||
jmp rset5
|
||||
|
||||
decount dec countlo
|
||||
bne rset4
|
||||
dec counthi
|
||||
bne rset4
|
||||
jmp ringset
|
||||
|
||||
leave lda #0
|
||||
sta bytcnt ;reset byte counter
|
||||
sta bytcnt+1
|
||||
sta bytcnt+2
|
||||
clc
|
||||
rts return
|
||||
|
||||
jring jmp ringset ;extend branch to ringset
|
||||
|
||||
* scan for ring and handle it
|
||||
*-------------------------------
|
||||
|
||||
ring jsr inp ;check for a char
|
||||
bcc ring5 ;nope...
|
||||
|
||||
and #$7f ;strip high
|
||||
cmp #'E'
|
||||
clc
|
||||
bne ring5 ;keep checking
|
||||
|
||||
ring2 jsr inp ;check for char
|
||||
bcc ring2
|
||||
|
||||
ldy #0 ;def = 300 baud
|
||||
and #$7f ;strip high
|
||||
|
||||
cmp #'R' ;oops, "No Carrier" message
|
||||
beq jring
|
||||
|
||||
cmp #cr ;connect 300
|
||||
beq ring3
|
||||
|
||||
cmp #'3' ;connect 300
|
||||
beq ring3
|
||||
|
||||
iny
|
||||
cmp #'1' ;connect 1200
|
||||
beq ring3
|
||||
|
||||
iny
|
||||
cmp #'2' ;connect 2400
|
||||
beq ring3
|
||||
|
||||
iny
|
||||
cmp #'4' ;connect 4800
|
||||
beq ring3
|
||||
|
||||
iny
|
||||
cmp #'9' ;connect 9600
|
||||
bne ring2
|
||||
|
||||
ring3 jsr setspd ;set the correct speed
|
||||
|
||||
ldy #5
|
||||
ring4 lda #0 ;let carrier's settle
|
||||
jsr wait
|
||||
dey
|
||||
bne ring4
|
||||
|
||||
sec ;we have a connection!
|
||||
ring5 rts
|
||||
|
||||
* send ata to phone
|
||||
*-------------------------------
|
||||
|
||||
answer ldx #0
|
||||
answer2 lda ansstr,x ;get text
|
||||
beq answer3 ;we are done
|
||||
|
||||
jsr out ;send it
|
||||
|
||||
lda #$80
|
||||
jsr wait
|
||||
|
||||
inx
|
||||
bne answer2 ;loop
|
||||
|
||||
answer3 rts
|
||||
|
||||
* hangup phone
|
||||
*-------------------------------
|
||||
|
||||
hangup ldx slot ;get offset
|
||||
lda #0
|
||||
sta command,x ;hang up phone
|
||||
rts
|
||||
|
||||
* input data
|
||||
*-------------------------------
|
||||
|
||||
inp stx save_x ;save X
|
||||
ldx slot ;get offset
|
||||
lda status,x ;get status
|
||||
and #%00001000
|
||||
clc
|
||||
beq inp2 ;no data
|
||||
|
||||
lda data,x
|
||||
sec
|
||||
inp2 ldx save_x ;restore & return
|
||||
rts
|
||||
|
||||
* output data
|
||||
*-------------------------------
|
||||
|
||||
out stx save_x ;save x
|
||||
dec timecnt ;count down 1 section
|
||||
bne out1
|
||||
|
||||
inc bytcnt ;1 second gone by
|
||||
bit bytcnt
|
||||
bvc out1
|
||||
|
||||
ldx #0 ;reset seconds
|
||||
stx bytcnt
|
||||
|
||||
inc bytcnt+1 ;1 minute gone by
|
||||
bit bytcnt+1
|
||||
bvc out1
|
||||
|
||||
ldx #0 ;reset minutes
|
||||
stx bytcnt+1
|
||||
|
||||
inc bytcnt+2 ;1 hour gone by
|
||||
|
||||
out1 ldx slot
|
||||
|
||||
pha
|
||||
out2 lda status,x ;check status
|
||||
and #%00010000
|
||||
beq out2 ;loop until ready
|
||||
pla
|
||||
|
||||
dataloc sta data ;output byte
|
||||
ldx save_x
|
||||
rts
|
||||
|
||||
* check for carrier
|
||||
*-------------------------------
|
||||
|
||||
chkdcd stx save_x ;dont kill any reg's
|
||||
pha
|
||||
|
||||
ldx slot ;get offset
|
||||
lda status,x
|
||||
and cdbyte ;check carrier
|
||||
clc
|
||||
bne chkdcd2
|
||||
|
||||
sec
|
||||
chkdcd2 pla restore ;all & return
|
||||
ldx save_x
|
||||
rts
|
||||
|
||||
* set the rs-232 speed/speed in Y reg
|
||||
*-------------------------------
|
||||
|
||||
setspd stx save_x
|
||||
ldx slot ;get offset
|
||||
lda speed,y ;get speed
|
||||
sta control,x ;set speed
|
||||
|
||||
lda #1 ;find caller speed (x300)
|
||||
sta callspd
|
||||
cpy #0 ;at 300?
|
||||
beq setspd3 ;yep
|
||||
|
||||
asl callspd ;speed = speed * 2
|
||||
setspd2 asl callspd ;speed = speed * 2
|
||||
dey
|
||||
bne setspd2 ;loop until correct speed found
|
||||
|
||||
setspd3 ldx save_x ;restore & return
|
||||
rts
|
||||
|
||||
*-------------------------------
|
||||
* setup interupt routine
|
||||
|
||||
setirq rts
|
||||
|
||||
*-------------------------------
|
||||
* turn on dtr/rts
|
||||
|
||||
raisedtr stx save_x
|
||||
ldx slot
|
||||
|
||||
lda #%00001011 ;turn on DTR, RTS
|
||||
sta command,x
|
||||
sei
|
||||
|
||||
ldx save_x
|
||||
rts
|
||||
|
||||
* wait routine
|
||||
*-------------------------------
|
||||
|
||||
wait sec
|
||||
wait2 pha
|
||||
wait3 sbc #1
|
||||
bne wait3
|
||||
pla
|
||||
sbc #1
|
||||
bne wait2
|
||||
rts
|
||||
|
||||
* global data area
|
||||
*-------------------------------
|
||||
|
||||
speed dfb %00010110 ;300
|
||||
dfb %00011000 ;1200
|
||||
dfb %00011010 ;2400
|
||||
dfb %00011100 ;4800
|
||||
dfb %00011110 ;9600
|
||||
dfb %00011111 ;19200
|
||||
|
||||
timecnt dfb 0 ;1-second counter
|
||||
save_x dfb 0
|
||||
countlo dfb $FF
|
||||
counthi dfb $FF
|
||||
cdbyte db $40 ;mask dsr only (0=connected)
|
||||
|
||||
initstr asc 'ATS0=1S2=128&S1&D2',0d,00
|
||||
ansstr asc 'ATA',0d,00
|
||||
|
||||
@@ -0,0 +1,446 @@
|
||||
TR
|
||||
TR ADR
|
||||
*-------------------------------
|
||||
* GS Port Driver Bios - Slot #1
|
||||
* written by Andy Nicholas on July 26, 1987
|
||||
*-------------------------------
|
||||
|
||||
rel
|
||||
dsk rel/gsport1
|
||||
|
||||
cr equ $0d
|
||||
lf equ $0a
|
||||
|
||||
initstr equ $10d0
|
||||
ansstr equ $10c0
|
||||
cdbyte equ $10bf
|
||||
|
||||
* setup for call
|
||||
*-------------------------------
|
||||
|
||||
gsport1 ent
|
||||
|
||||
* Jump Table
|
||||
*-------------------------------
|
||||
|
||||
org $b00
|
||||
|
||||
hex 10 ;serial card slot * 16
|
||||
initspd hex 00 ;init speed for modem
|
||||
|
||||
callspd dfb 0 speed
|
||||
|
||||
bytcnt dfb 0,0,0
|
||||
|
||||
jmp init
|
||||
jmp ringset
|
||||
jmp ring
|
||||
jmp answer
|
||||
jmp hangup
|
||||
jmp inp ;get a byte
|
||||
jmp out ;send a byte
|
||||
jmp getcarr ;caller there?
|
||||
jmp setspeed ;speed of port
|
||||
jmp raisedtr ;raise dtr
|
||||
|
||||
doinit jmp $c100
|
||||
doread jmp $c100
|
||||
dowrite jmp $c100
|
||||
dostatus jmp $c100
|
||||
doext jmp $c100
|
||||
|
||||
* init the serial port pascal locations
|
||||
*-------------------------------
|
||||
|
||||
init lda $c10d ;get init address
|
||||
sta doinit+1
|
||||
lda $c10e ;get read address
|
||||
sta doread+1
|
||||
lda $c10f ;get write address
|
||||
sta dowrite+1
|
||||
lda $c110 ;get status address
|
||||
sta dostatus+1
|
||||
lda $c112
|
||||
sta doext+1
|
||||
|
||||
rts
|
||||
|
||||
* input data
|
||||
*-------------------------------
|
||||
|
||||
inp phx save ;x
|
||||
phy
|
||||
ldx #$c1 ;are we ready?
|
||||
ldy #$10
|
||||
lda #1
|
||||
jsr dostatus
|
||||
bcc inp2 ;nope, exit
|
||||
|
||||
ldx #$c1 ;yes, read
|
||||
ldy #$10
|
||||
jsr doread
|
||||
|
||||
sec
|
||||
ply
|
||||
plx restore ;& return
|
||||
rts
|
||||
|
||||
inp2 lda #0
|
||||
clc
|
||||
ply
|
||||
plx
|
||||
rts
|
||||
|
||||
* output data
|
||||
*-------------------------------
|
||||
|
||||
out phx save ;x
|
||||
phy save ;y
|
||||
pha save ;a
|
||||
|
||||
out1 ldx #$c1 ;ready for send?
|
||||
ldy #$10
|
||||
lda #$00
|
||||
jsr dostatus
|
||||
bcc out1 ;nope
|
||||
|
||||
pla get ;a
|
||||
ldx #$c1
|
||||
ldy #$10
|
||||
jsr dowrite ;send it
|
||||
|
||||
ply get ;y
|
||||
plx get ;x
|
||||
rts
|
||||
|
||||
* init modem for ring
|
||||
*-------------------------------
|
||||
|
||||
ringset jsr hangup
|
||||
|
||||
lda #0 ;let modem reset
|
||||
jsr wait
|
||||
jsr wait
|
||||
|
||||
lda #$00
|
||||
jsr gsdtr
|
||||
|
||||
ldy initspd ;set init speed
|
||||
jsr setspeed
|
||||
|
||||
lda #0 ;slight delay (let modem do init)
|
||||
jsr wait
|
||||
|
||||
ldx #$FF
|
||||
rset2 inx do ;pre-inc
|
||||
lda initstr,x ;get modem init string
|
||||
beq rset3 ;we are done
|
||||
|
||||
jsr out ;output
|
||||
bra rset2 ;loop (Z-bit set after wait)
|
||||
|
||||
rset3 lda #6
|
||||
sta countlo
|
||||
sta counthi
|
||||
|
||||
rset4 ldy #$FF
|
||||
rset5 dey
|
||||
beq decount
|
||||
|
||||
jsr inp
|
||||
bcc rset5
|
||||
and #$7f
|
||||
cmp #'K' ;check for "OK"
|
||||
beq leave
|
||||
jmp rset5
|
||||
|
||||
decount dec countlo
|
||||
bne rset4
|
||||
dec counthi
|
||||
bne rset4
|
||||
jmp ringset
|
||||
|
||||
leave lda #0
|
||||
sta bytcnt ;reset byte counter
|
||||
sta bytcnt+1
|
||||
sta bytcnt+2
|
||||
clc
|
||||
rts ;return
|
||||
|
||||
* scan for ring and handle it
|
||||
*-------------------------------
|
||||
|
||||
ring jsr inp ;check for a char
|
||||
bcc ring5 ;nope...
|
||||
|
||||
and #$7f ;strip high
|
||||
cmp #'E'
|
||||
clc
|
||||
bne ring5 ;keep checking
|
||||
|
||||
ring2 jsr inp ;check for char
|
||||
bcc ring2
|
||||
|
||||
ldy #0 ;def = 300 baud
|
||||
and #$7f ;strip high
|
||||
|
||||
cmp #'R' ;oops, "No Carrier" message
|
||||
beq ringset
|
||||
|
||||
cmp #cr ;connect 300
|
||||
beq ring3
|
||||
|
||||
cmp #'3' ;connect 300
|
||||
beq ring3
|
||||
|
||||
iny
|
||||
cmp #'1' ;connect 1200
|
||||
beq ring3
|
||||
|
||||
iny
|
||||
cmp #'2' ;connect 2400
|
||||
beq ring3
|
||||
|
||||
iny
|
||||
cmp #'4' ;connect 4800
|
||||
beq ring3
|
||||
|
||||
iny
|
||||
cmp #'9' ;connect 9600
|
||||
bne ring2
|
||||
|
||||
ring3 jsr setspeed ;set the correct speed
|
||||
|
||||
ldy #5
|
||||
ring4 lda #0 ;let carrier's settle
|
||||
jsr wait
|
||||
dey
|
||||
bne ring4
|
||||
|
||||
sec we ;have a connection!
|
||||
ring5 rts
|
||||
|
||||
* set DTR on GS Serial Port, and hangup if needed
|
||||
*-------------------------------
|
||||
|
||||
hangup lda #$80 ;blow 'em off (hangup)
|
||||
|
||||
gsdtr sta DTRstate
|
||||
|
||||
lda #DTR_List
|
||||
ldx #>DTR_List
|
||||
ldy #0
|
||||
jmp doext
|
||||
|
||||
* wait routine
|
||||
*-------------------------------
|
||||
|
||||
wait sec ;from apple ][+ ref man - pg 147
|
||||
wait2 pha
|
||||
wait3 sbc #1
|
||||
bne wait3
|
||||
pla
|
||||
sbc #1
|
||||
bne wait2
|
||||
rts
|
||||
|
||||
* Check for carrier using Get_Port_Stat routine
|
||||
*-------------------------------
|
||||
|
||||
getcarr phx
|
||||
phy
|
||||
|
||||
lda #carrlist
|
||||
ldx #>carrlist
|
||||
ldy #0
|
||||
jsr doext
|
||||
|
||||
lda carrbits
|
||||
and cdbyte
|
||||
beq nocarr
|
||||
sec
|
||||
ply
|
||||
plx
|
||||
rts
|
||||
|
||||
nocarr clc
|
||||
ply
|
||||
plx
|
||||
rts
|
||||
|
||||
* send ata to phone
|
||||
*-------------------------------
|
||||
|
||||
answer ldx #$ff
|
||||
answer2 inx
|
||||
lda ansstr,x ;get text
|
||||
beq answer3 ;we are done
|
||||
|
||||
jsr out ;send it
|
||||
bra answer2
|
||||
|
||||
answer3 rts
|
||||
|
||||
* set the rs-232 speed [speed offset in Y]
|
||||
*-------------------------------
|
||||
|
||||
setspeed phx
|
||||
phy
|
||||
|
||||
lda #1 ;find caller speed (x300)
|
||||
sta callspd
|
||||
cpy #0 ;at 300?
|
||||
beq Do_Baud ;yep
|
||||
|
||||
asl callspd ;speed = speed * 2
|
||||
setspeed2 asl callspd ;speed = speed * 2
|
||||
dey
|
||||
bne setspeed2 ;loop until correct speed found
|
||||
|
||||
Do_Baud pla get ;y-reg
|
||||
bne Try1200
|
||||
lda #<Baud300
|
||||
sta Baudread+1
|
||||
lda #>Baud300
|
||||
sta Baudread+2
|
||||
bra SetBaud
|
||||
|
||||
Try1200 cmp #1
|
||||
bne Try2400
|
||||
lda #<Baud1200
|
||||
sta Baudread+1
|
||||
lda #>Baud1200
|
||||
sta Baudread+2
|
||||
bra SetBaud
|
||||
|
||||
Try2400 cmp #2
|
||||
bne Try4800
|
||||
lda #<Baud2400
|
||||
sta Baudread+1
|
||||
lda #>Baud2400
|
||||
sta Baudread+2
|
||||
bra SetBaud
|
||||
|
||||
Try4800 cmp #3
|
||||
bne Try9600
|
||||
lda #<Baud4800
|
||||
sta Baudread+1
|
||||
lda #>Baud4800
|
||||
sta Baudread+2
|
||||
bra SetBaud
|
||||
|
||||
Try9600 lda #<Baud9600
|
||||
sta Baudread+1
|
||||
lda #>Baud9600
|
||||
sta Baudread+2
|
||||
|
||||
SetBaud ldx #$c1
|
||||
ldy #$10
|
||||
jsr doinit
|
||||
|
||||
ldx #0
|
||||
Baudread lda $ffff,x
|
||||
beq Fin_Init
|
||||
jsr out
|
||||
inx
|
||||
bra Baudread
|
||||
|
||||
Fin_Init ldx #0
|
||||
Init_Loop lda Port_Init,x
|
||||
beq donebaud
|
||||
jsr out
|
||||
inx
|
||||
bra Init_Loop
|
||||
|
||||
donebaud lda #Out_Buf
|
||||
ldx #>Out_Buf
|
||||
ldy #0
|
||||
jsr doext
|
||||
|
||||
plx
|
||||
rts
|
||||
|
||||
*-------------------------------
|
||||
* raise dtr
|
||||
|
||||
raisedtr lda #0
|
||||
phx
|
||||
phy
|
||||
|
||||
jsr gsdtr
|
||||
|
||||
ply
|
||||
plx
|
||||
rts
|
||||
|
||||
* Table of Speeds and other important stuff
|
||||
*-------------------------------
|
||||
|
||||
Buffer equ $1080
|
||||
|
||||
counthi db 0
|
||||
countlo db 0
|
||||
|
||||
Baud300 hex 01
|
||||
asc '6B'
|
||||
hex 00 ;accept 300 Baud
|
||||
Baud1200 hex 01
|
||||
asc '8B'
|
||||
hex 00 ;accept 1200 Baud
|
||||
Baud2400 hex 01
|
||||
asc '10B'
|
||||
hex 00 ;accept 2400 Baud
|
||||
Baud4800 hex 01
|
||||
asc '12B'
|
||||
hex 00 ;accept 4800 Baud
|
||||
Baud9600 hex 01
|
||||
asc '14B'
|
||||
hex 00 ;accept 9600 Baud
|
||||
|
||||
Port_Init ;
|
||||
hex 01
|
||||
asc '0D' ;8 bits
|
||||
hex 01
|
||||
asc '2P' ;no parity
|
||||
hex 01
|
||||
asc 'AD' ;auto-tabbing
|
||||
hex 01
|
||||
asc 'XD' ;no xoff recognition
|
||||
hex 01
|
||||
asc 'FD' ;no find keyboard
|
||||
hex 01
|
||||
asc 'CD' ;no column overflow
|
||||
hex 01
|
||||
asc 'ED' ;echo disabled
|
||||
hex 01
|
||||
asc 'MD' ;no lf masking
|
||||
hex 01
|
||||
asc 'BE' ;buffering enabled
|
||||
hex 01
|
||||
asc 'Z'
|
||||
hex 00 ;no more control characters
|
||||
|
||||
*-------------------------------
|
||||
|
||||
Out_Buf hex 04 ;Parameters to set the
|
||||
hex 13 ;Output buffer
|
||||
da 0
|
||||
adrl Buffer ;Buffer it where
|
||||
da 2 buffer
|
||||
|
||||
*-------------------------------
|
||||
|
||||
carrlist hex 03 ;Parameter list for
|
||||
hex 06 ;detecting carrier drop
|
||||
da 0
|
||||
carrbits da 0 Carrier
|
||||
|
||||
*-------------------------------
|
||||
|
||||
DTR_List hex 03 ;Parameter list for
|
||||
hex 0b ;setting DTR
|
||||
da 0
|
||||
DTRstate da 0 bit
|
||||
|
||||
asc 'GSPort1'
|
||||
|
||||
@@ -0,0 +1,451 @@
|
||||
TR
|
||||
TR ADR
|
||||
*-------------------------------
|
||||
* GS Port Driver Bios - Slot #2
|
||||
* written by Andy Nicholas on July 26, 1987
|
||||
*-------------------------------
|
||||
|
||||
rel
|
||||
dsk rel/gsport2
|
||||
|
||||
cr equ $0d
|
||||
lf equ $0a
|
||||
|
||||
initstr equ $10d0
|
||||
ansstr equ $10c0
|
||||
cdbyte equ $10bf
|
||||
|
||||
*-------------------------------
|
||||
|
||||
gsport2 ent
|
||||
|
||||
|
||||
* Jump Table
|
||||
*-------------------------------
|
||||
|
||||
org $b00
|
||||
|
||||
hex 20 ;serial card slot * 16
|
||||
initspd hex 00
|
||||
|
||||
callspd dfb 0 ;speed of call
|
||||
|
||||
bytcnt dfb 0,0,0
|
||||
|
||||
jmp init
|
||||
jmp ringset
|
||||
jmp ring
|
||||
jmp answer
|
||||
jmp hangup
|
||||
jmp inp
|
||||
jmp out
|
||||
jmp getcarr
|
||||
jmp setspeed
|
||||
jmp raisedtr
|
||||
|
||||
doinit jmp $c200
|
||||
doread jmp $c200
|
||||
dowrite jmp $c200
|
||||
dostatus jmp $c200
|
||||
doext jmp $c200
|
||||
|
||||
* init the serial port pascal locations
|
||||
*-------------------------------
|
||||
|
||||
init lda $c20d ;get init address
|
||||
sta doinit+1
|
||||
lda $c20e ;get read address
|
||||
sta doread+1
|
||||
lda $c20f ;get write address
|
||||
sta dowrite+1
|
||||
lda $c210 ;get status address
|
||||
sta dostatus+1
|
||||
lda $c212
|
||||
sta doext+1
|
||||
|
||||
rts
|
||||
|
||||
* input data
|
||||
*-------------------------------
|
||||
|
||||
inp phx save ;x
|
||||
phy
|
||||
ldx #$c2 ;are we ready?
|
||||
ldy #$20
|
||||
lda #1
|
||||
jsr dostatus
|
||||
bcc inp2 ;nope, exit
|
||||
|
||||
ldx #$c2 ;yes, read
|
||||
ldy #$20
|
||||
jsr doread
|
||||
|
||||
sec
|
||||
ply
|
||||
plx restore ;& return
|
||||
rts
|
||||
|
||||
inp2 lda #0
|
||||
clc
|
||||
ply
|
||||
plx
|
||||
rts
|
||||
|
||||
* output data
|
||||
*-------------------------------
|
||||
|
||||
out phx ;save x
|
||||
phy ;save y
|
||||
pha ;save a
|
||||
|
||||
out1 ldx #$c2 ;ready for send?
|
||||
ldy #$20
|
||||
lda #$00
|
||||
jsr dostatus
|
||||
bcc out1 ;nope
|
||||
|
||||
pla get ;a
|
||||
ldx #$c2
|
||||
ldy #$20
|
||||
jsr dowrite ;send it
|
||||
|
||||
ply get ;y
|
||||
plx get ;x
|
||||
rts
|
||||
|
||||
* setup for call
|
||||
*-------------------------------
|
||||
|
||||
ringset jsr hangup
|
||||
|
||||
lda #0 ;let modem reset
|
||||
jsr wait
|
||||
jsr wait
|
||||
|
||||
lda #$00
|
||||
jsr gsdtr
|
||||
|
||||
ldy initspd ;set init speed
|
||||
jsr setspeed
|
||||
|
||||
lda #0 ;slight delay (let modem do init)
|
||||
jsr wait
|
||||
|
||||
ldx #$FF
|
||||
rset2 inx do ;pre-inc
|
||||
lda initstr,x ;get modem init string
|
||||
beq rset3 ;we are done
|
||||
|
||||
jsr out ;output
|
||||
bra rset2 ;loop (Z-bit set after wait)
|
||||
|
||||
rset3 lda #6
|
||||
sta countlo
|
||||
sta counthi
|
||||
|
||||
rset4 ldy #$FF
|
||||
rset5 dey
|
||||
beq decount
|
||||
|
||||
jsr inp
|
||||
bcc rset5
|
||||
and #$7f
|
||||
cmp #'K' ;check for "OK"
|
||||
beq leave
|
||||
jmp rset5
|
||||
|
||||
decount dec countlo
|
||||
bne rset4
|
||||
dec counthi
|
||||
bne rset4
|
||||
jmp ringset
|
||||
|
||||
leave lda #0
|
||||
sta bytcnt ;reset byte counter
|
||||
sta bytcnt+1
|
||||
sta bytcnt+2
|
||||
clc
|
||||
rts ;return
|
||||
|
||||
* scan for ring and handle it
|
||||
*-------------------------------
|
||||
|
||||
ring jsr inp ;check for a char
|
||||
bcc ring5 ;nope...
|
||||
|
||||
and #$7f ;strip high
|
||||
cmp #'E'
|
||||
clc
|
||||
bne ring5 ;keep checking
|
||||
|
||||
ring2 jsr inp ;check for char
|
||||
bcc ring2
|
||||
|
||||
ldy #0 ;def = 300 baud
|
||||
and #$7f ;strip high
|
||||
|
||||
cmp #'R' ;oops, "No Carrier" message
|
||||
beq ringset
|
||||
|
||||
cmp #cr ;connect 300
|
||||
beq ring3
|
||||
|
||||
cmp #'3' ;connect 300
|
||||
beq ring3
|
||||
|
||||
iny
|
||||
cmp #'1' ;connect 1200
|
||||
beq ring3
|
||||
|
||||
iny
|
||||
cmp #'2' ;connect 2400
|
||||
beq ring3
|
||||
|
||||
iny
|
||||
cmp #'4' ;connect 4800
|
||||
beq ring3
|
||||
|
||||
iny
|
||||
cmp #'9' ;connect 9600
|
||||
bne ring2
|
||||
|
||||
ring3 jsr setspeed ;set the correct speed
|
||||
|
||||
ldy #5
|
||||
ring4 lda #0 ;let carrier's settle
|
||||
jsr wait
|
||||
dey
|
||||
bne ring4
|
||||
|
||||
sec we ;have a connection!
|
||||
ring5 rts
|
||||
|
||||
* set DTR on GS Serial Port, and hangup if needed
|
||||
*-------------------------------
|
||||
|
||||
hangup lda #$80 ;blow 'em off (hangup)
|
||||
gsdtr sta DTRstate
|
||||
|
||||
lda #DTR_List
|
||||
ldx #>DTR_List
|
||||
ldy #0
|
||||
jmp doext
|
||||
|
||||
* wait routine
|
||||
*-------------------------------
|
||||
|
||||
wait sec ;from apple ][+ ref man - pg 147
|
||||
wait2 pha
|
||||
wait3 sbc #1
|
||||
bne wait3
|
||||
pla
|
||||
sbc #1
|
||||
bne wait2
|
||||
rts
|
||||
|
||||
* Check for carrier using Get_Port_Stat routine
|
||||
*-------------------------------
|
||||
|
||||
getcarr phx
|
||||
phy
|
||||
|
||||
lda #carrlist
|
||||
ldx #>carrlist
|
||||
ldy #0
|
||||
jsr doext
|
||||
|
||||
lda carrbits
|
||||
and cdbyte
|
||||
beq nocarr
|
||||
sec
|
||||
ply
|
||||
plx
|
||||
rts
|
||||
|
||||
nocarr clc
|
||||
ply
|
||||
plx
|
||||
rts
|
||||
|
||||
* send ata to phone
|
||||
*-------------------------------
|
||||
|
||||
answer ldx #$ff
|
||||
answer2 inx
|
||||
lda ansstr,x ;get text
|
||||
beq answer3 ;we are done
|
||||
|
||||
jsr out ;send it
|
||||
bra answer2
|
||||
|
||||
answer3 rts
|
||||
|
||||
* set the rs-232 speed [speed offset in Y]
|
||||
*
|
||||
* 0 = 300 baud
|
||||
* 1 = 1200 baud
|
||||
* 2 = 2400 baud
|
||||
* 3 = 4800 baud
|
||||
* 4 = 9600 baud
|
||||
*-------------------------------
|
||||
|
||||
setspeed phx
|
||||
phy
|
||||
|
||||
lda #1 ;find caller speed (x300)
|
||||
sta callspd
|
||||
cpy #0 ;at 300?
|
||||
beq Do_Baud ;yep
|
||||
|
||||
asl callspd ;speed = speed * 2
|
||||
setspeed2 asl callspd ;speed = speed * 2
|
||||
dey
|
||||
bne setspeed2 ;loop until correct speed found
|
||||
|
||||
Do_Baud pla get ;y-reg
|
||||
bne Try1200
|
||||
lda #<Baud300
|
||||
sta Baudread+1
|
||||
lda #>Baud300
|
||||
sta Baudread+2
|
||||
bra SetBaud
|
||||
|
||||
Try1200 cmp #1
|
||||
bne Try2400
|
||||
lda #<Baud1200
|
||||
sta Baudread+1
|
||||
lda #>Baud1200
|
||||
sta Baudread+2
|
||||
bra SetBaud
|
||||
|
||||
Try2400 cmp #2
|
||||
bne Try4800
|
||||
lda #<Baud2400
|
||||
sta Baudread+1
|
||||
lda #>Baud2400
|
||||
sta Baudread+2
|
||||
bra SetBaud
|
||||
|
||||
Try4800 cmp #3
|
||||
bne Try9600
|
||||
lda #<Baud4800
|
||||
sta Baudread+1
|
||||
lda #>Baud4800
|
||||
sta Baudread+2
|
||||
bra SetBaud
|
||||
|
||||
Try9600 lda #<Baud9600
|
||||
sta Baudread+1
|
||||
lda #>Baud9600
|
||||
sta Baudread+2
|
||||
|
||||
SetBaud ldx #$c2
|
||||
ldy #$20
|
||||
jsr doinit
|
||||
|
||||
ldx #0
|
||||
Baudread lda $ffff,x
|
||||
beq Fin_Init
|
||||
jsr out
|
||||
inx
|
||||
bra Baudread
|
||||
|
||||
Fin_Init ldx #0
|
||||
Init_Loop lda Port_Init,x
|
||||
beq donebaud
|
||||
jsr out
|
||||
inx
|
||||
bra Init_Loop
|
||||
|
||||
donebaud lda #Out_Buf
|
||||
ldx #>Out_Buf
|
||||
ldy #0
|
||||
jsr doext
|
||||
|
||||
plx
|
||||
rts
|
||||
|
||||
*-------------------------------
|
||||
* raise dtr
|
||||
|
||||
raisedtr lda #0
|
||||
phx
|
||||
phy
|
||||
|
||||
jsr gsdtr
|
||||
|
||||
ply
|
||||
plx
|
||||
rts
|
||||
|
||||
* globals
|
||||
*-------------------------------
|
||||
|
||||
Buffer equ $1080
|
||||
|
||||
counthi db 0
|
||||
countlo db 0
|
||||
|
||||
Baud300 hex 01
|
||||
asc '6B'
|
||||
hex 00 ;accept 300 Baud
|
||||
Baud1200 hex 01
|
||||
asc '8B'
|
||||
hex 00 ;accept 1200 Baud
|
||||
Baud2400 hex 01
|
||||
asc '10B'
|
||||
hex 00 ;accept 2400 Baud
|
||||
Baud4800 hex 01
|
||||
asc '12B'
|
||||
hex 00 ;accept 4800 Baud
|
||||
Baud9600 hex 01
|
||||
asc '14b'
|
||||
hex 00 ;accept 9600 Baud
|
||||
|
||||
Port_Init ;
|
||||
hex 01
|
||||
asc '0D' ;8 bits
|
||||
hex 01
|
||||
asc '2P' ;no parity
|
||||
hex 01
|
||||
asc 'AD' ;auto-tabbing
|
||||
hex 01
|
||||
asc 'XD' ;no xoff recognition
|
||||
hex 01
|
||||
asc 'FD' ;no find keyboard
|
||||
hex 01
|
||||
asc 'CD' ;no column overflow
|
||||
hex 01
|
||||
asc 'ED' ;echo disabled
|
||||
hex 01
|
||||
asc 'MD' ;no lf masking
|
||||
hex 01
|
||||
asc 'BE' ;buffering enabled
|
||||
hex 01
|
||||
asc 'Z'
|
||||
hex 00 ;no more control characters
|
||||
|
||||
*-------------------------------
|
||||
|
||||
Out_Buf hex 04 ;Parameters to set the
|
||||
hex 13 ;Output buffer
|
||||
da 0
|
||||
adrl Buffer ;Buffer it where
|
||||
da 2 buffer
|
||||
|
||||
*-------------------------------
|
||||
|
||||
carrlist hex 03 ;Parameter list for
|
||||
hex 06 ;detecting carrier drop
|
||||
da 0
|
||||
carrbits da 0 Carrier
|
||||
|
||||
*-------------------------------
|
||||
|
||||
DTR_List hex 03 ;Parameter list for
|
||||
hex 0b ;setting DTR
|
||||
da 0
|
||||
DTRstate da 0 bit
|
||||
|
||||
asc 'GSPort2'
|
||||
|
||||
@@ -0,0 +1,396 @@
|
||||
TR
|
||||
TR ADR
|
||||
*-------------------------------
|
||||
* GS Port Driver Bios - Slot #2
|
||||
* written by Andy Nicholas on July 26, 1987
|
||||
*
|
||||
* Special version for the USR HST & 19200 Baud
|
||||
*-------------------------------
|
||||
|
||||
rel
|
||||
dsk rel/gsport.hst
|
||||
org $b00
|
||||
|
||||
cr equ $0d
|
||||
lf equ $0a
|
||||
|
||||
Buffer equ $10b0
|
||||
initstr equ $10d0
|
||||
ansstr equ $10c0
|
||||
cdbyte equ $10bf
|
||||
|
||||
*-------------------------------
|
||||
|
||||
gsport_hst ent
|
||||
|
||||
* Jump Table
|
||||
*-------------------------------
|
||||
|
||||
hex 20 ;serial card slot * 16
|
||||
initspd db 00
|
||||
|
||||
callspd dfb 0 speed
|
||||
|
||||
bytcnt dfb 0,0,0
|
||||
|
||||
jmp init
|
||||
jmp ringset
|
||||
jmp ring
|
||||
jmp answer
|
||||
jmp hangup
|
||||
jmp inp
|
||||
jmp out
|
||||
jmp getcarr
|
||||
jmp initport
|
||||
jmp setirq
|
||||
jmp raisedtr
|
||||
|
||||
doinit jmp $c200
|
||||
doread jmp $c200
|
||||
dowrite jmp $c200
|
||||
dostatus jmp $c200
|
||||
doext jmp $c200
|
||||
|
||||
* init the serial port pascal locations
|
||||
*-------------------------------
|
||||
|
||||
init lda $c20d ;get init address
|
||||
sta doinit+1
|
||||
lda $c20e ;get read address
|
||||
sta doread+1
|
||||
lda $c20f ;get write address
|
||||
sta dowrite+1
|
||||
lda $c210 ;get status address
|
||||
sta dostatus+1
|
||||
lda $c212
|
||||
sta doext+1
|
||||
|
||||
rts
|
||||
|
||||
* setup for call
|
||||
*-------------------------------
|
||||
|
||||
ringset jsr hangup
|
||||
|
||||
lda #0 ;let modem reset
|
||||
jsr wait
|
||||
jsr wait
|
||||
|
||||
lda #$00
|
||||
jsr gsdtr
|
||||
|
||||
jsr initport
|
||||
|
||||
lda #0 ;slight delay (let modem do init)
|
||||
jsr wait
|
||||
|
||||
ldx #$FF
|
||||
rset2 inx do ;pre-inc
|
||||
lda initstr,x ;get modem init string
|
||||
beq rset3 ;we are done
|
||||
|
||||
jsr out ;output
|
||||
bra rset2 ;loop (Z-bit set after wait)
|
||||
|
||||
rset3 ldy #250 ;check 50 times
|
||||
rset4 dey count ;down
|
||||
beq ringset
|
||||
|
||||
lda #30 ;delay slightly
|
||||
jsr wait
|
||||
jsr inp
|
||||
bcc rset4
|
||||
|
||||
and #$7f
|
||||
cmp #'K' ;check for "OK"
|
||||
bne rset4
|
||||
|
||||
clc
|
||||
rts return
|
||||
|
||||
* scan for ring and handle it
|
||||
*-------------------------------
|
||||
|
||||
ring jsr inp ;check for a char
|
||||
bcc ring5 ;nope...
|
||||
|
||||
and #$7f ;strip high
|
||||
cmp #'E'
|
||||
clc
|
||||
bne ring5 ;keep checking
|
||||
|
||||
ring2 jsr inp ;check for char
|
||||
bcc ring2
|
||||
|
||||
ldy #0 ;def = 300 baud
|
||||
and #$7f ;strip high
|
||||
|
||||
cmp #'R' ;oops, "No Carrier" message
|
||||
beq ringset
|
||||
|
||||
cmp #cr ;connect 300
|
||||
beq ring3
|
||||
|
||||
cmp #'3' ;connect 300
|
||||
beq ring3
|
||||
|
||||
iny
|
||||
cmp #'1' ;connect 1200
|
||||
beq ring3
|
||||
|
||||
iny
|
||||
cmp #'2' ;connect 2400
|
||||
beq ring3
|
||||
|
||||
iny
|
||||
cmp #'4' ;connect 4800
|
||||
beq ring3
|
||||
|
||||
iny
|
||||
cmp #'9' ;connect 9600
|
||||
bne ring2
|
||||
|
||||
ring3 jsr setbyte ;set the correct speed byte
|
||||
|
||||
ldy #5
|
||||
ring4 lda #0 ;let carrier's settle
|
||||
jsr wait
|
||||
dey
|
||||
bne ring4
|
||||
|
||||
sec we ;have a connection!
|
||||
ring5 rts
|
||||
|
||||
* input data
|
||||
*-------------------------------
|
||||
|
||||
inp phx save ;x
|
||||
phy
|
||||
ldx #$c2 ;are we ready?
|
||||
ldy #$20
|
||||
lda #1
|
||||
jsr dostatus
|
||||
bcc inp2 ;nope, exit
|
||||
|
||||
ldx #$c2 ;yes, read
|
||||
ldy #$20
|
||||
jsr doread
|
||||
|
||||
sec
|
||||
ply
|
||||
plx restore ;& return
|
||||
rts
|
||||
|
||||
inp2 lda #0
|
||||
clc
|
||||
ply
|
||||
plx
|
||||
rts
|
||||
|
||||
* output data
|
||||
*-------------------------------
|
||||
|
||||
out phx save ;x
|
||||
phy save ;y
|
||||
pha save ;a
|
||||
|
||||
out1 ldx #$c2 ;ready for send?
|
||||
ldy #$20
|
||||
lda #$00
|
||||
jsr dostatus
|
||||
bcc out1 ;nope
|
||||
|
||||
pla get ;a
|
||||
ldx #$c2
|
||||
ldy #$20
|
||||
jsr dowrite ;send it
|
||||
|
||||
ply get ;y
|
||||
plx get ;x
|
||||
rts
|
||||
|
||||
* Check for carrier using Get_Port_Stat routine
|
||||
*-------------------------------
|
||||
|
||||
getcarr phx
|
||||
phy
|
||||
|
||||
lda #carrlist
|
||||
ldx #>carrlist
|
||||
ldy #0
|
||||
jsr doext
|
||||
|
||||
lda carrbits
|
||||
and cdbyte
|
||||
beq nocarr
|
||||
sec
|
||||
ply
|
||||
plx
|
||||
rts
|
||||
|
||||
nocarr clc
|
||||
ply
|
||||
plx
|
||||
rts
|
||||
|
||||
* send ata to phone
|
||||
*-------------------------------
|
||||
|
||||
answer ldx #$ff
|
||||
answer2 inx
|
||||
lda ansstr,x ;get text
|
||||
beq answer3 ;we are done
|
||||
|
||||
jsr out ;send it
|
||||
bra answer2
|
||||
|
||||
answer3 rts
|
||||
|
||||
* set DTR on GS Serial Port, and hangup if needed
|
||||
*-------------------------------
|
||||
|
||||
hangup lda #$80 ;blow 'em off (hangup)
|
||||
gsdtr sta DTRstate
|
||||
|
||||
lda #DTR_List
|
||||
ldx #>DTR_List
|
||||
ldy #0
|
||||
jmp doext
|
||||
|
||||
* wait routine
|
||||
*-------------------------------
|
||||
|
||||
wait sec ;from apple ][+ ref man - pg 147
|
||||
wait2 pha
|
||||
wait3 sbc #1
|
||||
bne wait3
|
||||
pla
|
||||
sbc #1
|
||||
bne wait2
|
||||
rts
|
||||
|
||||
* set the rs-232 speed [speed offset in Y]
|
||||
*
|
||||
* 0 = 300 baud
|
||||
* 1 = 1200 baud
|
||||
* 2 = 2400 baud
|
||||
* 3 = 4800 baud
|
||||
* 4 = 9600 baud
|
||||
*-------------------------------
|
||||
|
||||
setbyte lda #1 ;find caller speed (x300)
|
||||
sta callspd
|
||||
cpy #0 ;at 300?
|
||||
beq done ;yep
|
||||
|
||||
asl callspd ;speed = speed * 2
|
||||
setspeed2 asl callspd ;speed = speed * 2
|
||||
dey
|
||||
bne setspeed2 ;loop until correct speed found
|
||||
done rts
|
||||
|
||||
* reinit the port for 19200 baud
|
||||
*-------------------------------
|
||||
|
||||
initport phx
|
||||
phy
|
||||
|
||||
ldx #$c2
|
||||
ldy #$20
|
||||
jsr doinit
|
||||
|
||||
ldx #0
|
||||
Baudread lda Baud19200,x
|
||||
beq Fin_Init
|
||||
jsr out
|
||||
inx
|
||||
bra Baudread
|
||||
|
||||
Fin_Init ldx #0
|
||||
Init_Loop lda Port_Init,x
|
||||
beq donebaud
|
||||
jsr out
|
||||
inx
|
||||
bra Init_Loop
|
||||
|
||||
donebaud lda #Out_Buf
|
||||
ldx #>Out_Buf
|
||||
ldy #0
|
||||
jsr doext
|
||||
|
||||
ply
|
||||
plx
|
||||
rts
|
||||
|
||||
*-------------------------------
|
||||
* setup interupt vector
|
||||
|
||||
setirq rts
|
||||
|
||||
*-------------------------------
|
||||
* raise dtr
|
||||
|
||||
raisedtr lda #0
|
||||
phx
|
||||
phy
|
||||
|
||||
jsr gsdtr
|
||||
|
||||
ply
|
||||
plx
|
||||
rts
|
||||
|
||||
* global data area
|
||||
*-------------------------------
|
||||
|
||||
Baud19200 hex 01
|
||||
asc '15B'
|
||||
hex 00 ;accept 19200 Baud
|
||||
|
||||
Port_Init
|
||||
hex 01
|
||||
asc '0D' ;8 bits
|
||||
hex 01
|
||||
asc '2P' ;no parity
|
||||
hex 01
|
||||
asc 'AD' ;auto-tabbing
|
||||
hex 01
|
||||
asc 'XD' ;no xoff recognition
|
||||
hex 01
|
||||
asc 'FD' ;no find keyboard
|
||||
hex 01
|
||||
asc 'CD' ;no column overflow
|
||||
hex 01
|
||||
asc 'ED' ;echo disabled
|
||||
hex 01
|
||||
asc 'MD' ;no lf masking
|
||||
hex 01
|
||||
asc 'BE' ;buffering enabled
|
||||
hex 01
|
||||
asc 'Z'
|
||||
hex 00 ;no more control characters
|
||||
|
||||
*-------------------------------
|
||||
|
||||
Out_Buf hex 04 ;Parameters to set the
|
||||
hex 13 ;Output buffer
|
||||
da 0
|
||||
adrl Buffer ;Buffer it where
|
||||
da 2 buffer
|
||||
|
||||
*-------------------------------
|
||||
|
||||
carrlist hex 03 ;Parameter list for
|
||||
hex 06 ;detecting carrier drop
|
||||
da 0
|
||||
carrbits da 0 Carrier
|
||||
|
||||
*-------------------------------
|
||||
|
||||
DTR_List hex 03 ;Parameter list for
|
||||
hex 0b ;setting DTR
|
||||
da 0
|
||||
DTRstate da 0 bit
|
||||
|
||||
asc 'GSPort/HST'
|
||||
|
||||
@@ -0,0 +1,497 @@
|
||||
* GS Port Driver Bios - Slot #1
|
||||
* written by Andy Nicholas on July 26, 1987
|
||||
*-------------------------------
|
||||
|
||||
rel
|
||||
dsk rel/gsport1
|
||||
|
||||
cr equ $0d
|
||||
lf equ $0a
|
||||
|
||||
initstr equ $10d0
|
||||
ansstr equ $10c0
|
||||
cdbyte equ $10bf
|
||||
Buffer equ $10b0
|
||||
|
||||
* setup for call
|
||||
*-------------------------------
|
||||
|
||||
gsport1 ent
|
||||
|
||||
* Jump Table
|
||||
*-------------------------------
|
||||
|
||||
org $b00
|
||||
|
||||
hex 10 ;serial card slot * 16
|
||||
initspd hex 00 ;init speed for modem
|
||||
|
||||
callspd dfb 0 speed of current call
|
||||
|
||||
bytcnt dfb 0,0,0
|
||||
|
||||
jmp init
|
||||
jmp ringset
|
||||
jmp ring
|
||||
jmp answerRing
|
||||
jmp hangup
|
||||
jmp inp ;get a byte
|
||||
jmp out ;send a byte
|
||||
jmp getcarr ;caller there?
|
||||
jmp setspeed ;speed of port
|
||||
jmp raisedtr ;raise dtr
|
||||
|
||||
doinit jmp $c100
|
||||
doread jmp $c100
|
||||
dowrite jmp $c100
|
||||
dostatus jmp $c100
|
||||
doext jmp $c100
|
||||
|
||||
* init the serial port pascal locations
|
||||
*-------------------------------
|
||||
|
||||
init lda $c10d ;get init address
|
||||
sta doinit+1
|
||||
lda $c10e ;get read address
|
||||
sta doread+1
|
||||
lda $c10f ;get write address
|
||||
sta dowrite+1
|
||||
lda $c110 ;get status address
|
||||
sta dostatus+1
|
||||
lda $c112
|
||||
sta doext+1
|
||||
|
||||
rts
|
||||
|
||||
* input data
|
||||
*-------------------------------
|
||||
|
||||
inp phx save ;x
|
||||
phy
|
||||
ldx #$c1 ;are we ready?
|
||||
ldy #$10
|
||||
lda #1
|
||||
jsr dostatus
|
||||
bcc inp2 ;nope, exit
|
||||
|
||||
ldx #$c1 ;yes, read
|
||||
ldy #$10
|
||||
jsr doread
|
||||
|
||||
sec
|
||||
ply
|
||||
plx restore ;& return
|
||||
rts
|
||||
|
||||
inp2 lda #0
|
||||
clc
|
||||
ply
|
||||
plx
|
||||
rts
|
||||
|
||||
* output data
|
||||
*-------------------------------
|
||||
|
||||
out phx save ;x
|
||||
phy save ;y
|
||||
pha save ;a
|
||||
|
||||
out1 ldx #$c1 ;ready for send?
|
||||
ldy #$10
|
||||
lda #$00
|
||||
jsr dostatus
|
||||
bcc out1 ;nope
|
||||
|
||||
pla get ;a
|
||||
ldx #$c1
|
||||
ldy #$10
|
||||
jsr dowrite ;send it
|
||||
|
||||
ply get ;y
|
||||
plx get ;x
|
||||
rts
|
||||
|
||||
* init modem for ring
|
||||
*-------------------------------
|
||||
|
||||
ringset jsr hangup
|
||||
|
||||
lda #0 ;let modem reset
|
||||
jsr wait
|
||||
jsr wait
|
||||
|
||||
lda #$00
|
||||
jsr gsdtr
|
||||
|
||||
ldy initspd ;set init speed
|
||||
jsr setspeed
|
||||
|
||||
lda #0 ;slight delay (let modem do init)
|
||||
jsr wait
|
||||
|
||||
ldx #$FF
|
||||
rset2 inx do ;pre-inc
|
||||
lda initstr,x ;get modem init string
|
||||
beq rset3 ;we are done
|
||||
|
||||
jsr out ;output
|
||||
bra rset2 ;loop (Z-bit set after wait)
|
||||
|
||||
rset3 lda #6
|
||||
sta countlo
|
||||
sta counthi
|
||||
|
||||
rset4 ldy #$FF
|
||||
rset5 dey
|
||||
beq decount
|
||||
|
||||
jsr inp
|
||||
bcc rset5
|
||||
and #$7f
|
||||
cmp #'0' ;check for "0" (numeric)
|
||||
beq leave
|
||||
jmp rset5
|
||||
|
||||
decount dec countlo
|
||||
bne rset4
|
||||
dec counthi
|
||||
bne rset4
|
||||
jmp ringset
|
||||
|
||||
leave jsr inp ;grab the <cr> off the tail end of the "0"
|
||||
bcc leave
|
||||
|
||||
jsr clearBuffer
|
||||
|
||||
lda #0
|
||||
sta bytcnt ;reset byte counter
|
||||
sta bytcnt+1
|
||||
sta bytcnt+2
|
||||
clc
|
||||
rts ;return
|
||||
|
||||
*-------------------------------
|
||||
* test for a ring and handle it
|
||||
|
||||
ring jsr inp ;check for a char
|
||||
bcc noring ;nope...
|
||||
|
||||
and #$7f ;strip high
|
||||
cmp #'2' ;is it a 'ring'? (numeric)
|
||||
bne notRing ;nope, check for connect messages
|
||||
|
||||
********************************
|
||||
grabCR jsr inp ;grab the <cr> off the tail end of the "2"
|
||||
bcc grabCR
|
||||
|
||||
answerRing jsr answer ;the phone rang, so send 'ATA'
|
||||
|
||||
clc
|
||||
rts
|
||||
|
||||
********************************
|
||||
notRing
|
||||
cmp #'1' ;is it a '1' or '10' or '11' or '12' or '14'?
|
||||
beq gotCode ;yes, save it
|
||||
cmp #'5' ;is it connect 1200?
|
||||
bne noring ;nope
|
||||
|
||||
gotCode sta code
|
||||
|
||||
secondChar jsr inp ;second character will ALWAYS be there
|
||||
bcc secondChar
|
||||
|
||||
and #$7f ;strip high
|
||||
cmp #cr ;but might be a <cr>
|
||||
bne multiCode
|
||||
|
||||
********************************
|
||||
singleCode ldy #0 ;connect 300?
|
||||
lda code
|
||||
cmp #'1'
|
||||
beq ring3
|
||||
|
||||
iny
|
||||
cmp #'5' ;connect 1200?
|
||||
beq ring3 ;nope, unknown code, keep checking
|
||||
jmp noring
|
||||
|
||||
********************************
|
||||
multiCode
|
||||
sta code+1
|
||||
|
||||
ldy #2 ;def = 2400 baud
|
||||
|
||||
lda code ;get the first code char
|
||||
cmp #'1' ;must be a one
|
||||
bne noring ;if not, then keep trying
|
||||
|
||||
lda code+1 ;is it 2400?
|
||||
cmp #'0'
|
||||
beq ring3
|
||||
|
||||
iny
|
||||
cmp #'1' ;is it 4800?
|
||||
beq ring3
|
||||
|
||||
iny
|
||||
cmp #'2' ;is it 9600
|
||||
beq ring3
|
||||
|
||||
iny
|
||||
cmp #'4' ;is it 19200?
|
||||
beq ring3
|
||||
|
||||
dey
|
||||
cmp #'7' ;is it 9600/ARQ?
|
||||
beq ring3
|
||||
|
||||
dey ;no 4800/arq
|
||||
dey
|
||||
cmp #'6'
|
||||
beq ring3 ;2400/ARQ
|
||||
|
||||
dey
|
||||
cmp #'5' ;1200/ARQ
|
||||
beq ring3
|
||||
|
||||
jmp noring
|
||||
|
||||
********************************
|
||||
ring3 jsr setspeed ;set the correct speed
|
||||
|
||||
ldy #5
|
||||
ring4 lda #0 ;let carrier's settle
|
||||
jsr wait
|
||||
dey
|
||||
bne ring4
|
||||
|
||||
jsr clearBuffer
|
||||
sec ;we have a connection!
|
||||
rts
|
||||
|
||||
noring clc
|
||||
rts
|
||||
|
||||
*-------------------------------
|
||||
* clear the input buffer
|
||||
|
||||
clearBuffer
|
||||
lda #Flush_List
|
||||
ldx #>Flush_List
|
||||
ldy #0
|
||||
jmp doext
|
||||
|
||||
* set DTR on GS Serial Port, and hangup if needed
|
||||
*-------------------------------
|
||||
|
||||
hangup lda #$80 ;blow 'em off (hangup)
|
||||
|
||||
gsdtr sta DTRstate
|
||||
|
||||
lda #DTR_List
|
||||
ldx #>DTR_List
|
||||
ldy #0
|
||||
jmp doext
|
||||
|
||||
* wait routine
|
||||
*-------------------------------
|
||||
|
||||
wait sec ;from apple ][+ ref man - pg 147
|
||||
wait2 pha
|
||||
wait3 sbc #1
|
||||
bne wait3
|
||||
pla
|
||||
sbc #1
|
||||
bne wait2
|
||||
rts
|
||||
|
||||
* Check for carrier using Get_Port_Stat routine
|
||||
*-------------------------------
|
||||
|
||||
getcarr phx
|
||||
phy
|
||||
|
||||
lda #carrlist
|
||||
ldx #>carrlist
|
||||
ldy #0
|
||||
jsr doext
|
||||
|
||||
lda carrbits
|
||||
and cdbyte
|
||||
beq nocarr
|
||||
sec
|
||||
ply
|
||||
plx
|
||||
rts
|
||||
|
||||
nocarr clc
|
||||
ply
|
||||
plx
|
||||
rts
|
||||
|
||||
* send ata to phone
|
||||
*-------------------------------
|
||||
|
||||
answer ldx #$ff
|
||||
answer2 inx
|
||||
lda ansstr,x ;get text
|
||||
beq answer3 ;we are done
|
||||
|
||||
jsr out ;send it
|
||||
bra answer2
|
||||
|
||||
answer3 rts
|
||||
|
||||
* set the rs-232 speed [speed offset in Y]
|
||||
*-------------------------------
|
||||
|
||||
setspeed phx
|
||||
phy
|
||||
|
||||
lda #1 ;find caller speed (x300)
|
||||
sta callspd
|
||||
cpy #0 ;at 300?
|
||||
beq Do_Baud ;yep
|
||||
|
||||
asl callspd ;speed = speed * 2
|
||||
setspeed2 asl callspd ;speed = speed * 2
|
||||
dey
|
||||
bne setspeed2 ;loop until correct speed found
|
||||
|
||||
Do_Baud pla ;get y-reg
|
||||
asl a
|
||||
tay
|
||||
lda baudAddresses,y
|
||||
sta Baudread+1
|
||||
lda baudAddresses+1,y
|
||||
sta Baudread+2
|
||||
|
||||
SetBaud ldx #$c1
|
||||
ldy #$10
|
||||
jsr doinit
|
||||
|
||||
ldx #0
|
||||
Baudread lda $ffff,x
|
||||
beq Fin_Init
|
||||
jsr out
|
||||
inx
|
||||
bra Baudread
|
||||
|
||||
Fin_Init ldx #0
|
||||
Init_Loop lda Port_Init,x
|
||||
beq donebaud
|
||||
jsr out
|
||||
inx
|
||||
bra Init_Loop
|
||||
|
||||
donebaud lda #Out_Buf
|
||||
ldx #>Out_Buf
|
||||
ldy #0
|
||||
jsr doext
|
||||
|
||||
plx
|
||||
rts
|
||||
|
||||
********************************
|
||||
baudAddresses
|
||||
da Baud300
|
||||
da Baud1200
|
||||
da Baud2400
|
||||
da Baud4800
|
||||
da Baud9600
|
||||
da Baud19200
|
||||
|
||||
*-------------------------------
|
||||
* raise dtr
|
||||
|
||||
raisedtr lda #0
|
||||
phx
|
||||
phy
|
||||
|
||||
jsr gsdtr
|
||||
|
||||
ply
|
||||
plx
|
||||
rts
|
||||
|
||||
* Table of Speeds and other important stuff
|
||||
*-------------------------------
|
||||
|
||||
counthi db 0
|
||||
countlo db 0
|
||||
|
||||
Baud300 hex 01
|
||||
asc '6B'
|
||||
hex 00 ;accept 300 Baud
|
||||
Baud1200 hex 01
|
||||
asc '8B'
|
||||
hex 00 ;accept 1200 Baud
|
||||
Baud2400 hex 01
|
||||
asc '10B'
|
||||
hex 00 ;accept 2400 Baud
|
||||
Baud4800 hex 01
|
||||
asc '12B'
|
||||
hex 00 ;accept 4800 Baud
|
||||
Baud9600 hex 01
|
||||
asc '14B'
|
||||
hex 00 ;accept 9600 Baud
|
||||
Baud19200 hex 01
|
||||
asc '15B'
|
||||
hex 00 ;accept 19200 baud
|
||||
|
||||
Port_Init ;
|
||||
hex 01
|
||||
asc '0D' ;8 bits
|
||||
hex 01
|
||||
asc '2P' ;no parity
|
||||
hex 01
|
||||
asc 'AD' ;auto-tabbing
|
||||
hex 01
|
||||
asc 'XD' ;no xoff recognition
|
||||
hex 01
|
||||
asc 'FD' ;no find keyboard
|
||||
hex 01
|
||||
asc 'CD' ;no column overflow
|
||||
hex 01
|
||||
asc 'ED' ;echo disabled
|
||||
hex 01
|
||||
asc 'MD' ;no lf masking
|
||||
hex 01
|
||||
asc 'BE' ;buffering enabled
|
||||
hex 01
|
||||
asc 'Z'
|
||||
hex 00 ;no more control characters
|
||||
|
||||
*-------------------------------
|
||||
|
||||
Out_Buf hex 04 ;Parameters to set the
|
||||
hex 13 ;Output buffer
|
||||
da 0
|
||||
adrl Buffer ;Buffer it where
|
||||
da 2 buffer 2 bytes
|
||||
|
||||
*-------------------------------
|
||||
|
||||
carrlist hex 03 ;Parameter list for
|
||||
hex 06 ;detecting carrier drop
|
||||
da 0
|
||||
carrbits da 0 Carrier status here
|
||||
|
||||
*-------------------------------
|
||||
|
||||
DTR_List hex 03 ;Parameter list for
|
||||
hex 0b ;setting DTR
|
||||
da 0
|
||||
DTRstate da 0 bit 7 effects DTR
|
||||
|
||||
*-------------------------------
|
||||
|
||||
Flush_List hex 02 ;parameter list for flushing input queue
|
||||
hex 14
|
||||
da 0
|
||||
|
||||
*-------------------------------
|
||||
|
||||
code ds 2
|
||||
asc 'GSPort1'
|
||||
@@ -0,0 +1,522 @@
|
||||
LST OFF
|
||||
TR
|
||||
TR ADR
|
||||
*-------------------------------
|
||||
* GS Port Driver Bios - Slot #1
|
||||
* written by Andy Nicholas on July 26, 1987
|
||||
*-------------------------------
|
||||
|
||||
rel
|
||||
dsk MODEMS/rel/gsport1
|
||||
|
||||
cr equ $0d
|
||||
lf equ $0a
|
||||
|
||||
initstr equ $10d0
|
||||
ansstr equ $10c0
|
||||
cdbyte equ $10bf
|
||||
Buffer equ $10b0
|
||||
|
||||
* setup for call
|
||||
*-------------------------------
|
||||
|
||||
gsport1 ent
|
||||
|
||||
* Jump Table
|
||||
*-------------------------------
|
||||
|
||||
org $b00
|
||||
|
||||
hex 10 ;serial card slot * 16
|
||||
initspd hex 00 ;init speed for modem
|
||||
|
||||
callspd dfb 0 speed
|
||||
|
||||
bytcnt dfb 0,0,0
|
||||
|
||||
jmp init
|
||||
jmp ringset
|
||||
jmp ring
|
||||
jmp answerRing
|
||||
jmp hangup
|
||||
jmp inp ;get a byte
|
||||
jmp out ;send a byte
|
||||
jmp getcarr ;caller there?
|
||||
jmp setspeed ;speed of port
|
||||
jmp setirq
|
||||
jmp raisedtr ;raise dtr
|
||||
|
||||
doinit jmp $c100
|
||||
doread jmp $c100
|
||||
dowrite jmp $c100
|
||||
dostatus jmp $c100
|
||||
doext jmp $c100
|
||||
|
||||
* init the serial port pascal locations
|
||||
*-------------------------------
|
||||
|
||||
init lda $c10d ;get init address
|
||||
sta doinit+1
|
||||
lda $c10e ;get read address
|
||||
sta doread+1
|
||||
lda $c10f ;get write address
|
||||
sta dowrite+1
|
||||
lda $c110 ;get status address
|
||||
sta dostatus+1
|
||||
lda $c112
|
||||
sta doext+1
|
||||
|
||||
rts
|
||||
|
||||
* input data
|
||||
*-------------------------------
|
||||
|
||||
inp phx save ;x
|
||||
phy
|
||||
ldx #$c1 ;are we ready?
|
||||
ldy #$10
|
||||
lda #1
|
||||
jsr dostatus
|
||||
bcc inp2 ;nope, exit
|
||||
|
||||
ldx #$c1 ;yes, read
|
||||
ldy #$10
|
||||
jsr doread
|
||||
|
||||
sec
|
||||
ply
|
||||
plx restore ;& return
|
||||
rts
|
||||
|
||||
inp2 lda #0
|
||||
clc
|
||||
ply
|
||||
plx
|
||||
rts
|
||||
|
||||
* output data
|
||||
*-------------------------------
|
||||
|
||||
out phx save ;x
|
||||
phy save ;y
|
||||
pha save ;a
|
||||
|
||||
out1 ldx #$c1 ;ready for send?
|
||||
ldy #$10
|
||||
lda #$00
|
||||
jsr dostatus
|
||||
bcc out1 ;nope
|
||||
|
||||
pla get ;a
|
||||
ldx #$c1
|
||||
ldy #$10
|
||||
jsr dowrite ;send it
|
||||
|
||||
ply get ;y
|
||||
plx get ;x
|
||||
rts
|
||||
|
||||
* init modem for ring
|
||||
*-------------------------------
|
||||
|
||||
ringset jsr hangup
|
||||
|
||||
lda #0 ;let modem reset
|
||||
jsr wait
|
||||
jsr wait
|
||||
|
||||
lda #$00
|
||||
jsr gsdtr
|
||||
|
||||
ldy initspd ;set init speed
|
||||
jsr setspeed
|
||||
|
||||
lda #0 ;slight delay (let modem do init)
|
||||
jsr wait
|
||||
|
||||
ldx #$FF
|
||||
rset2 inx do ;pre-inc
|
||||
lda initstr,x ;get modem init string
|
||||
beq rset3 ;we are done
|
||||
|
||||
jsr out ;output
|
||||
bra rset2 ;loop (Z-bit set after wait)
|
||||
|
||||
rset3 lda #6
|
||||
sta countlo
|
||||
sta counthi
|
||||
|
||||
rset4 ldy #$FF
|
||||
rset5 dey
|
||||
beq decount
|
||||
|
||||
jsr inp
|
||||
bcc rset5
|
||||
and #$7f
|
||||
cmp #'0' ;check for "0" (numeric)
|
||||
beq leave
|
||||
jmp rset5
|
||||
|
||||
decount dec countlo
|
||||
bne rset4
|
||||
dec counthi
|
||||
bne rset4
|
||||
jmp ringset
|
||||
|
||||
leave jsr inp ;grab the <cr> off the tail end of the "0"
|
||||
bcc leave
|
||||
|
||||
jsr clearBuffer
|
||||
|
||||
lda #0
|
||||
sta bytcnt ;reset byte counter
|
||||
sta bytcnt+1
|
||||
sta bytcnt+2
|
||||
clc
|
||||
rts ;return
|
||||
|
||||
*-------------------------------
|
||||
* test for a ring and handle it
|
||||
|
||||
ring jsr inp ;check for a char
|
||||
bcc noRing ;nope...
|
||||
|
||||
and #$7f ;strip high
|
||||
cmp #'2' ;is it a 'ring'? (numeric)
|
||||
bne notRing ;nope, check for connect messages
|
||||
|
||||
********************************
|
||||
grabCR jsr inp ;grab the <cr> off the tail end of the "2"
|
||||
bcc grabCR
|
||||
|
||||
answerRing jsr answer ;the phone rang, so send 'ATA'
|
||||
|
||||
clc
|
||||
rts
|
||||
|
||||
********************************
|
||||
notRing
|
||||
cmp #'1' ;is it a '1' or '10' or '11' or '12' or '14'?
|
||||
beq gotCode ;yes, save it
|
||||
cmp #'5' ;is it connect 1200?
|
||||
bne noRing ;nope
|
||||
|
||||
gotCode sta code
|
||||
|
||||
secondChar jsr inp ;second character will ALWAYS be there
|
||||
bcc secondChar
|
||||
|
||||
and #$7f ;strip high
|
||||
cmp #cr ;but might be a <cr>
|
||||
bne multiCode
|
||||
|
||||
********************************
|
||||
singleCode ldy #0 ;connect 300?
|
||||
lda code
|
||||
cmp #'1'
|
||||
beq ring3
|
||||
|
||||
iny
|
||||
cmp #'5' ;connect 1200?
|
||||
beq ring3 ;nope, unknown code, keep checking
|
||||
jmp noRing
|
||||
|
||||
********************************
|
||||
multiCode
|
||||
sta code+1
|
||||
|
||||
ldy #2 ;def = 2400 baud
|
||||
|
||||
lda code ;get the first code char
|
||||
cmp #'1' ;must be a one
|
||||
bne noRing ;if not, then keep trying
|
||||
|
||||
lda code+1 ;is it 2400?
|
||||
cmp #'0'
|
||||
beq ring3
|
||||
|
||||
iny
|
||||
cmp #'1' ;is it 4800?
|
||||
beq ring3
|
||||
|
||||
iny
|
||||
cmp #'2' ;is it 9600
|
||||
beq ring3
|
||||
|
||||
iny
|
||||
cmp #'4' ;is it 19200?
|
||||
beq ring3
|
||||
jmp noRing
|
||||
|
||||
********************************
|
||||
ring3 jsr setspeed ;set the correct speed
|
||||
|
||||
ldy #5
|
||||
ring4 lda #0 ;let carrier's settle
|
||||
jsr wait
|
||||
dey
|
||||
bne ring4
|
||||
|
||||
jsr clearBuffer
|
||||
sec ;we have a connection!
|
||||
rts
|
||||
|
||||
noRing clc
|
||||
rts
|
||||
|
||||
*-------------------------------
|
||||
* clear the input buffer
|
||||
|
||||
clearBuffer
|
||||
lda #Flush_List
|
||||
ldx #>Flush_List
|
||||
ldy #0
|
||||
jmp doext
|
||||
|
||||
* set DTR on GS Serial Port, and hangup if needed
|
||||
*-------------------------------
|
||||
|
||||
hangup lda #$80 ;blow 'em off (hangup)
|
||||
|
||||
gsdtr sta DTRstate
|
||||
|
||||
lda #DTR_List
|
||||
ldx #>DTR_List
|
||||
ldy #0
|
||||
jmp doext
|
||||
|
||||
* wait routine
|
||||
*-------------------------------
|
||||
|
||||
wait sec ;from apple ][+ ref man - pg 147
|
||||
wait2 pha
|
||||
wait3 sbc #1
|
||||
bne wait3
|
||||
pla
|
||||
sbc #1
|
||||
bne wait2
|
||||
rts
|
||||
|
||||
* Check for carrier using Get_Port_Stat routine
|
||||
*-------------------------------
|
||||
|
||||
getcarr phx
|
||||
phy
|
||||
|
||||
lda #carrlist
|
||||
ldx #>carrlist
|
||||
ldy #0
|
||||
jsr doext
|
||||
|
||||
lda carrbits
|
||||
and cdbyte
|
||||
beq nocarr
|
||||
sec
|
||||
ply
|
||||
plx
|
||||
rts
|
||||
|
||||
nocarr clc
|
||||
ply
|
||||
plx
|
||||
rts
|
||||
|
||||
* send ata to phone
|
||||
*-------------------------------
|
||||
|
||||
answer ldx #$ff
|
||||
answer2 inx
|
||||
lda ansstr,x ;get text
|
||||
beq answer3 ;we are done
|
||||
|
||||
jsr out ;send it
|
||||
bra answer2
|
||||
|
||||
answer3 rts
|
||||
|
||||
* set the rs-232 speed [speed offset in Y]
|
||||
*-------------------------------
|
||||
|
||||
setspeed phx
|
||||
phy
|
||||
|
||||
lda #1 ;find caller speed (x300)
|
||||
sta callspd
|
||||
cpy #0 ;at 300?
|
||||
beq Do_Baud ;yep
|
||||
|
||||
asl callspd ;speed = speed * 2
|
||||
setspeed2 asl callspd ;speed = speed * 2
|
||||
dey
|
||||
bne setspeed2 ;loop until correct speed found
|
||||
|
||||
Do_Baud pla ;get y-reg
|
||||
bne Try1200
|
||||
lda #<Baud300
|
||||
sta Baudread+1
|
||||
lda #>Baud300
|
||||
sta Baudread+2
|
||||
bra SetBaud
|
||||
|
||||
Try1200 cmp #1
|
||||
bne Try2400
|
||||
lda #<Baud1200
|
||||
sta Baudread+1
|
||||
lda #>Baud1200
|
||||
sta Baudread+2
|
||||
bra SetBaud
|
||||
|
||||
Try2400 cmp #2
|
||||
bne Try4800
|
||||
lda #<Baud2400
|
||||
sta Baudread+1
|
||||
lda #>Baud2400
|
||||
sta Baudread+2
|
||||
bra SetBaud
|
||||
|
||||
Try4800 cmp #3
|
||||
bne Try9600
|
||||
lda #<Baud4800
|
||||
sta Baudread+1
|
||||
lda #>Baud4800
|
||||
sta Baudread+2
|
||||
bra SetBaud
|
||||
|
||||
Try9600 cmp #4
|
||||
bne Try19200
|
||||
lda #<Baud9600
|
||||
sta Baudread+1
|
||||
lda #>Baud9600
|
||||
sta Baudread+2
|
||||
bra SetBaud
|
||||
|
||||
Try19200 lda #<Baud19200
|
||||
sta Baudread+1
|
||||
lda #>Baud19200
|
||||
sta Baudread+2
|
||||
|
||||
SetBaud ldx #$c1
|
||||
ldy #$10
|
||||
jsr doinit
|
||||
|
||||
ldx #0
|
||||
Baudread lda $ffff,x
|
||||
beq Fin_Init
|
||||
jsr out
|
||||
inx
|
||||
bra Baudread
|
||||
|
||||
Fin_Init ldx #0
|
||||
Init_Loop lda Port_Init,x
|
||||
beq donebaud
|
||||
jsr out
|
||||
inx
|
||||
bra Init_Loop
|
||||
|
||||
donebaud lda #Out_Buf
|
||||
ldx #>Out_Buf
|
||||
ldy #0
|
||||
jsr doext
|
||||
|
||||
plx
|
||||
rts
|
||||
|
||||
*-------------------------------
|
||||
* setup interupt routine
|
||||
|
||||
setirq rts
|
||||
|
||||
*-------------------------------
|
||||
* raise dtr
|
||||
|
||||
raisedtr lda #0
|
||||
phx
|
||||
phy
|
||||
|
||||
jsr gsdtr
|
||||
|
||||
ply
|
||||
plx
|
||||
rts
|
||||
|
||||
* Table of Speeds and other important stuff
|
||||
*-------------------------------
|
||||
|
||||
counthi db 0
|
||||
countlo db 0
|
||||
|
||||
Baud300 hex 01
|
||||
asc '6B'
|
||||
hex 00 ;accept 300 Baud
|
||||
Baud1200 hex 01
|
||||
asc '8B'
|
||||
hex 00 ;accept 1200 Baud
|
||||
Baud2400 hex 01
|
||||
asc '10B'
|
||||
hex 00 ;accept 2400 Baud
|
||||
Baud4800 hex 01
|
||||
asc '12B'
|
||||
hex 00 ;accept 4800 Baud
|
||||
Baud9600 hex 01
|
||||
asc '14B'
|
||||
hex 00 ;accept 9600 Baud
|
||||
Baud19200 hex 01
|
||||
asc '15b'
|
||||
hex 00 ;accept 19200 baud
|
||||
|
||||
Port_Init ;
|
||||
hex 01
|
||||
asc '0D' ;8 bits
|
||||
hex 01
|
||||
asc '2P' ;no parity
|
||||
hex 01
|
||||
asc 'AD' ;auto-tabbing
|
||||
hex 01
|
||||
asc 'XD' ;no xoff recognition
|
||||
hex 01
|
||||
asc 'FD' ;no find keyboard
|
||||
hex 01
|
||||
asc 'CD' ;no column overflow
|
||||
hex 01
|
||||
asc 'ED' ;echo disabled
|
||||
hex 01
|
||||
asc 'MD' ;no lf masking
|
||||
hex 01
|
||||
asc 'BE' ;buffering enabled
|
||||
hex 01
|
||||
asc 'Z'
|
||||
hex 00 ;no more control characters
|
||||
|
||||
*-------------------------------
|
||||
|
||||
Out_Buf hex 04 ;Parameters to set the
|
||||
hex 13 ;Output buffer
|
||||
da 0
|
||||
adrl Buffer ;Buffer it where
|
||||
da 2 buffer
|
||||
|
||||
*-------------------------------
|
||||
|
||||
carrlist hex 03 ;Parameter list for
|
||||
hex 06 ;detecting carrier drop
|
||||
da 0
|
||||
carrbits da 0 Carrier
|
||||
|
||||
*-------------------------------
|
||||
|
||||
DTR_List hex 03 ;Parameter list for
|
||||
hex 0b ;setting DTR
|
||||
da 0
|
||||
DTRstate da 0 bit
|
||||
|
||||
*-------------------------------
|
||||
|
||||
Flush_List hex 02 ;parameter list for flushing input queue
|
||||
hex 14
|
||||
da 0
|
||||
|
||||
*-------------------------------
|
||||
|
||||
code ds 2
|
||||
asc 'GSPort1'
|
||||
|
||||
@@ -0,0 +1,504 @@
|
||||
* GS Port Driver Bios - Slot #2
|
||||
* written by Andy Nicholas on July 26, 1987
|
||||
*-------------------------------
|
||||
|
||||
rel
|
||||
dsk rel/gsport2
|
||||
|
||||
cr equ $0d
|
||||
lf equ $0a
|
||||
|
||||
initstr equ $10d0
|
||||
ansstr equ $10c0
|
||||
cdbyte equ $10bf
|
||||
Buffer equ $10b0
|
||||
|
||||
*-------------------------------
|
||||
|
||||
gsport2 ent
|
||||
|
||||
* Jump Table
|
||||
*-------------------------------
|
||||
|
||||
org $b00
|
||||
|
||||
hex 20 ;serial card slot * 16
|
||||
initspd hex 00
|
||||
|
||||
callspd dfb 0 ;speed of call
|
||||
|
||||
bytcnt dfb 0,0,0
|
||||
|
||||
jmp init
|
||||
jmp ringset
|
||||
jmp ring
|
||||
jmp answerRing
|
||||
jmp hangup
|
||||
jmp inp
|
||||
jmp out
|
||||
jmp getcarr
|
||||
jmp setspeed
|
||||
jmp raisedtr
|
||||
|
||||
doinit jmp $c200
|
||||
doread jmp $c200
|
||||
dowrite jmp $c200
|
||||
dostatus jmp $c200
|
||||
doext jmp $c200
|
||||
|
||||
* init the serial port pascal locations
|
||||
*-------------------------------
|
||||
|
||||
init lda $c20d ;get init address
|
||||
sta doinit+1
|
||||
lda $c20e ;get read address
|
||||
sta doread+1
|
||||
lda $c20f ;get write address
|
||||
sta dowrite+1
|
||||
lda $c210 ;get status address
|
||||
sta dostatus+1
|
||||
lda $c212
|
||||
sta doext+1
|
||||
|
||||
rts
|
||||
|
||||
* input data
|
||||
*-------------------------------
|
||||
|
||||
inp phx ;save x
|
||||
phy
|
||||
ldx #$c2 ;are we ready?
|
||||
ldy #$20
|
||||
lda #1
|
||||
jsr dostatus
|
||||
bcc inp2 ;nope, exit
|
||||
|
||||
ldx #$c2 ;yes, read
|
||||
ldy #$20
|
||||
jsr doread
|
||||
|
||||
sec
|
||||
ply
|
||||
plx ;restore & return
|
||||
rts
|
||||
|
||||
inp2 lda #0
|
||||
clc
|
||||
ply
|
||||
plx
|
||||
rts
|
||||
|
||||
* output data
|
||||
*-------------------------------
|
||||
|
||||
out phx ;save x
|
||||
phy ;save y
|
||||
pha ;save a
|
||||
|
||||
out1 ldx #$c2 ;ready for send?
|
||||
ldy #$20
|
||||
lda #$00
|
||||
jsr dostatus
|
||||
bcc out1 ;nope
|
||||
|
||||
pla ;get a
|
||||
ldx #$c2
|
||||
ldy #$20
|
||||
jsr dowrite ;send it
|
||||
|
||||
ply ;get y
|
||||
plx ;get x
|
||||
rts
|
||||
|
||||
* setup for call
|
||||
*-------------------------------
|
||||
|
||||
ringset jsr hangup
|
||||
|
||||
lda #0 ;let modem reset
|
||||
jsr wait
|
||||
jsr wait
|
||||
|
||||
lda #$00
|
||||
jsr gsdtr
|
||||
|
||||
ldy initspd ;set init speed
|
||||
jsr setspeed
|
||||
|
||||
lda #0 ;slight delay (let modem do init)
|
||||
jsr wait
|
||||
|
||||
ldx #$FF
|
||||
rset2 inx do ;pre-inc
|
||||
lda initstr,x ;get modem init string
|
||||
beq rset3 ;we are done
|
||||
|
||||
jsr out ;output
|
||||
bra rset2 ;loop (Z-bit set after wait)
|
||||
|
||||
rset3 lda #6
|
||||
sta countlo
|
||||
sta counthi
|
||||
|
||||
rset4 ldy #$FF
|
||||
rset5 dey
|
||||
beq decount
|
||||
|
||||
jsr inp
|
||||
bcc rset5
|
||||
and #$7f
|
||||
cmp #'0' ;check for "0" result
|
||||
beq leave
|
||||
jmp rset5
|
||||
|
||||
decount dec countlo
|
||||
bne rset4
|
||||
dec counthi
|
||||
bne rset4
|
||||
jmp ringset
|
||||
|
||||
leave jsr inp ;grab the <cr> off the tail end of the "0"
|
||||
bcc leave
|
||||
|
||||
jsr clearBuffer
|
||||
|
||||
lda #0
|
||||
sta bytcnt ;reset byte counter
|
||||
sta bytcnt+1
|
||||
sta bytcnt+2
|
||||
clc
|
||||
rts ;return
|
||||
|
||||
*-------------------------------
|
||||
* test for a ring and handle it
|
||||
|
||||
ring jsr inp ;check for a char
|
||||
bcc noRing ;nope...
|
||||
|
||||
and #$7f ;strip high
|
||||
cmp #'2' ;is it a 'ring'? (numeric)
|
||||
bne notRing ;nope, check for connect messages
|
||||
|
||||
********************************
|
||||
grabCR jsr inp ;grab the <cr> off the tail end of the "2"
|
||||
bcc grabCR
|
||||
|
||||
answerRing jsr answer ;the phone rang, so send 'ATA'
|
||||
|
||||
clc
|
||||
rts
|
||||
|
||||
********************************
|
||||
notRing
|
||||
cmp #'1' ;is it a '1' or '10' or '11' or '12' or '14'?
|
||||
beq gotCode ;yes, save it
|
||||
cmp #'5' ;is it connect 1200?
|
||||
bne noRing ;nope
|
||||
|
||||
gotCode sta code
|
||||
|
||||
secondChar jsr inp ;second character will ALWAYS be there
|
||||
bcc secondChar
|
||||
|
||||
and #$7f ;strip high
|
||||
cmp #cr ;but might be a <cr>
|
||||
bne multiCode
|
||||
|
||||
********************************
|
||||
singleCode ldy #0 ;connect 300?
|
||||
lda code
|
||||
cmp #'1'
|
||||
beq ring3
|
||||
|
||||
iny
|
||||
cmp #'5' ;connect 1200?
|
||||
beq ring3 ;nope, unknown code, keep checking
|
||||
jmp noRing
|
||||
|
||||
********************************
|
||||
multiCode
|
||||
sta code+1
|
||||
|
||||
ldy #2 ;def = 2400 baud
|
||||
|
||||
lda code ;get the first code char
|
||||
cmp #'1' ;must be a one
|
||||
bne noRing ;if not, then keep trying
|
||||
|
||||
lda code+1 ;is it 2400?
|
||||
cmp #'0'
|
||||
beq ring3
|
||||
|
||||
iny
|
||||
cmp #'1' ;is it 4800?
|
||||
beq ring3
|
||||
|
||||
iny
|
||||
cmp #'2' ;is it 9600
|
||||
beq ring3
|
||||
|
||||
iny
|
||||
cmp #'4' ;is it 19200?
|
||||
beq ring3
|
||||
|
||||
dey
|
||||
cmp #'7' ;is it 9600/ARQ?
|
||||
beq ring3
|
||||
|
||||
dey ;no 4800/arq
|
||||
dey
|
||||
cmp #'6'
|
||||
beq ring3 ;2400/ARQ
|
||||
|
||||
dey
|
||||
cmp #'5' ;1200/ARQ
|
||||
beq ring3
|
||||
jmp noRing
|
||||
|
||||
********************************
|
||||
ring3 jsr setspeed ;set the correct speed
|
||||
|
||||
ldy #5
|
||||
ring4 lda #0 ;let carrier's settle
|
||||
jsr wait
|
||||
dey
|
||||
bne ring4
|
||||
|
||||
jsr clearBuffer ;remove any garbage
|
||||
sec ;we have a connection!
|
||||
rts
|
||||
|
||||
noring clc
|
||||
rts
|
||||
|
||||
*-------------------------------
|
||||
* clear the input buffer
|
||||
|
||||
clearBuffer
|
||||
lda #Flush_List
|
||||
ldx #>Flush_List
|
||||
ldy #0
|
||||
jmp doext
|
||||
|
||||
* set DTR on GS Serial Port, and hangup if needed
|
||||
*-------------------------------
|
||||
|
||||
hangup lda #$80 ;blow 'em off (hangup)
|
||||
gsdtr sta DTRstate
|
||||
|
||||
lda #DTR_List
|
||||
ldx #>DTR_List
|
||||
ldy #0
|
||||
jmp doext
|
||||
|
||||
* wait routine
|
||||
*-------------------------------
|
||||
|
||||
wait sec ;from apple ][+ ref man - pg 147
|
||||
wait2 pha
|
||||
wait3 sbc #1
|
||||
bne wait3
|
||||
pla
|
||||
sbc #1
|
||||
bne wait2
|
||||
rts
|
||||
|
||||
* Check for carrier using Get_Port_Stat routine
|
||||
*-------------------------------
|
||||
|
||||
getcarr phx
|
||||
phy
|
||||
|
||||
lda #carrlist
|
||||
ldx #>carrlist
|
||||
ldy #0
|
||||
jsr doext
|
||||
|
||||
lda carrbits
|
||||
and cdbyte
|
||||
beq nocarr
|
||||
sec
|
||||
ply
|
||||
plx
|
||||
rts
|
||||
|
||||
nocarr clc
|
||||
ply
|
||||
plx
|
||||
rts
|
||||
|
||||
* send ata to phone
|
||||
*-------------------------------
|
||||
|
||||
answer lda #$80
|
||||
jsr wait
|
||||
|
||||
ldx #$ff
|
||||
answer2 inx
|
||||
lda ansstr,x ;get text
|
||||
beq answer3 ;we are done
|
||||
|
||||
jsr out ;send it
|
||||
bra answer2
|
||||
|
||||
answer3 rts
|
||||
|
||||
* set the rs-232 speed [speed offset in Y]
|
||||
*
|
||||
* 0 = 300 baud
|
||||
* 1 = 1200 baud
|
||||
* 2 = 2400 baud
|
||||
* 3 = 4800 baud
|
||||
* 4 = 9600 baud
|
||||
* 5 = 19200 baud
|
||||
*-------------------------------
|
||||
|
||||
setspeed phx
|
||||
phy
|
||||
|
||||
lda #1 ;find caller speed (x300)
|
||||
sta callspd
|
||||
cpy #0 ;at 300?
|
||||
beq Do_Baud ;yep
|
||||
|
||||
asl callspd ;speed = speed * 2
|
||||
setspeed2 asl callspd ;speed = speed * 2
|
||||
dey
|
||||
bne setspeed2 ;loop until correct speed found
|
||||
|
||||
Do_Baud pla ;get y-reg
|
||||
asl a
|
||||
tay
|
||||
lda baudAddresses,y
|
||||
sta Baudread+1
|
||||
lda baudAddresses+1,y
|
||||
sta Baudread+2
|
||||
|
||||
SetBaud ldx #$c2
|
||||
ldy #$20
|
||||
jsr doinit
|
||||
|
||||
ldx #0
|
||||
Baudread lda $ffff,x
|
||||
beq Fin_Init
|
||||
jsr out
|
||||
inx
|
||||
bra Baudread
|
||||
|
||||
Fin_Init ldx #0
|
||||
Init_Loop lda Port_Init,x
|
||||
beq donebaud
|
||||
jsr out
|
||||
inx
|
||||
bra Init_Loop
|
||||
|
||||
donebaud lda #Out_Buf
|
||||
ldx #>Out_Buf
|
||||
ldy #0
|
||||
jsr doext
|
||||
|
||||
plx
|
||||
rts
|
||||
|
||||
********************************
|
||||
baudAddresses
|
||||
da Baud300
|
||||
da Baud1200
|
||||
da Baud2400
|
||||
da Baud4800
|
||||
da Baud9600
|
||||
da Baud19200
|
||||
|
||||
*-------------------------------
|
||||
* raise dtr
|
||||
|
||||
raisedtr lda #0
|
||||
phx
|
||||
phy
|
||||
|
||||
jsr gsdtr
|
||||
|
||||
ply
|
||||
plx
|
||||
rts
|
||||
|
||||
* globals
|
||||
*-------------------------------
|
||||
|
||||
counthi db 0
|
||||
countlo db 0
|
||||
|
||||
Baud300 hex 01
|
||||
asc '6B'
|
||||
hex 00 ;accept 300 Baud
|
||||
Baud1200 hex 01
|
||||
asc '8B'
|
||||
hex 00 ;accept 1200 Baud
|
||||
Baud2400 hex 01
|
||||
asc '10B'
|
||||
hex 00 ;accept 2400 Baud
|
||||
Baud4800 hex 01
|
||||
asc '12B'
|
||||
hex 00 ;accept 4800 Baud
|
||||
Baud9600 hex 01
|
||||
asc '14B'
|
||||
hex 00 ;accept 9600 Baud
|
||||
Baud19200 hex 01
|
||||
asc '15B'
|
||||
hex 00 ;accept 19200 baud
|
||||
|
||||
Port_Init
|
||||
hex 01
|
||||
asc '0D' ;8 bits
|
||||
hex 01
|
||||
asc '2P' ;no parity
|
||||
hex 01
|
||||
asc 'AD' ;auto-tabbing
|
||||
hex 01
|
||||
asc 'XD' ;no xoff recognition
|
||||
hex 01
|
||||
asc 'FD' ;no find keyboard
|
||||
hex 01
|
||||
asc 'CD' ;no column overflow
|
||||
hex 01
|
||||
asc 'ED' ;echo disabled
|
||||
hex 01
|
||||
asc 'MD' ;no lf masking
|
||||
hex 01
|
||||
asc 'BE' ;buffering enabled
|
||||
hex 01
|
||||
asc 'Z'
|
||||
hex 00 ;no more control characters
|
||||
|
||||
*-------------------------------
|
||||
|
||||
Out_Buf hex 04 ;Parameters to set the
|
||||
hex 13 ;Output buffer
|
||||
da 0
|
||||
adrl Buffer ;Buffer it where
|
||||
da 2 buffer 2 bytes
|
||||
|
||||
*-------------------------------
|
||||
|
||||
Carrlist hex 03 ;Parameter list for
|
||||
hex 06 ;detecting carrier drop
|
||||
da 0
|
||||
carrbits da 0 Carrier status here
|
||||
|
||||
*-------------------------------
|
||||
|
||||
DTR_List hex 03 ;Parameter list for
|
||||
hex 0b ;setting DTR
|
||||
da 0
|
||||
DTRstate da 0 bit 7 effects DTR
|
||||
|
||||
*-------------------------------
|
||||
|
||||
Flush_List hex 02 ;parameter list for flushing input queue
|
||||
hex 14
|
||||
da 0
|
||||
|
||||
*-------------------------------
|
||||
|
||||
code ds 2 ;2 byte code returned by modem
|
||||
asc 'GSPort2'
|
||||
@@ -0,0 +1,531 @@
|
||||
LST OFF
|
||||
TR
|
||||
TR ADR
|
||||
*-------------------------------
|
||||
* GS Port Driver Bios - Slot #2
|
||||
* written by Andy Nicholas on July 26, 1987
|
||||
*-------------------------------
|
||||
|
||||
rel
|
||||
dsk MODEMS/rel/gsport2
|
||||
|
||||
cr equ $0d
|
||||
lf equ $0a
|
||||
|
||||
initstr equ $10d0
|
||||
ansstr equ $10c0
|
||||
cdbyte equ $10bf
|
||||
Buffer equ $10b0
|
||||
|
||||
*-------------------------------
|
||||
|
||||
gsport2 ent
|
||||
|
||||
|
||||
* Jump Table
|
||||
*-------------------------------
|
||||
|
||||
org $b00
|
||||
|
||||
hex 20 ;serial card slot * 16
|
||||
initspd hex 00
|
||||
|
||||
callspd dfb 0 ;speed of call
|
||||
|
||||
bytcnt dfb 0,0,0
|
||||
|
||||
jmp init
|
||||
jmp ringset
|
||||
jmp ring
|
||||
jmp answerRing
|
||||
jmp hangup
|
||||
jmp inp
|
||||
jmp out
|
||||
jmp getcarr
|
||||
jmp setspeed
|
||||
jmp setirq
|
||||
jmp raisedtr
|
||||
|
||||
doinit jmp $c200
|
||||
doread jmp $c200
|
||||
dowrite jmp $c200
|
||||
dostatus jmp $c200
|
||||
doext jmp $c200
|
||||
|
||||
* init the serial port pascal locations
|
||||
*-------------------------------
|
||||
|
||||
init lda $c20d ;get init address
|
||||
sta doinit+1
|
||||
lda $c20e ;get read address
|
||||
sta doread+1
|
||||
lda $c20f ;get write address
|
||||
sta dowrite+1
|
||||
lda $c210 ;get status address
|
||||
sta dostatus+1
|
||||
lda $c212
|
||||
sta doext+1
|
||||
|
||||
rts
|
||||
|
||||
* input data
|
||||
*-------------------------------
|
||||
|
||||
inp phx save ;x
|
||||
phy
|
||||
ldx #$c2 ;are we ready?
|
||||
ldy #$20
|
||||
lda #1
|
||||
jsr dostatus
|
||||
bcc inp2 ;nope, exit
|
||||
|
||||
ldx #$c2 ;yes, read
|
||||
ldy #$20
|
||||
jsr doread
|
||||
|
||||
sec
|
||||
ply
|
||||
plx restore ;& return
|
||||
rts
|
||||
|
||||
inp2 lda #0
|
||||
clc
|
||||
ply
|
||||
plx
|
||||
rts
|
||||
|
||||
* output data
|
||||
*-------------------------------
|
||||
|
||||
out phx ;save x
|
||||
phy ;save y
|
||||
pha ;save a
|
||||
|
||||
out1 ldx #$c2 ;ready for send?
|
||||
ldy #$20
|
||||
lda #$00
|
||||
jsr dostatus
|
||||
bcc out1 ;nope
|
||||
|
||||
pla get ;a
|
||||
ldx #$c2
|
||||
ldy #$20
|
||||
jsr dowrite ;send it
|
||||
|
||||
ply get ;y
|
||||
plx get ;x
|
||||
rts
|
||||
|
||||
* setup for call
|
||||
*-------------------------------
|
||||
|
||||
ringset jsr hangup
|
||||
|
||||
lda #0 ;let modem reset
|
||||
jsr wait
|
||||
jsr wait
|
||||
|
||||
lda #$00
|
||||
jsr gsdtr
|
||||
|
||||
ldy initspd ;set init speed
|
||||
jsr setspeed
|
||||
|
||||
lda #0 ;slight delay (let modem do init)
|
||||
jsr wait
|
||||
|
||||
ldx #$FF
|
||||
rset2 inx do ;pre-inc
|
||||
lda initstr,x ;get modem init string
|
||||
beq rset3 ;we are done
|
||||
|
||||
jsr out ;output
|
||||
bra rset2 ;loop (Z-bit set after wait)
|
||||
|
||||
rset3 lda #6
|
||||
sta countlo
|
||||
sta counthi
|
||||
|
||||
rset4 ldy #$FF
|
||||
rset5 dey
|
||||
beq decount
|
||||
|
||||
jsr inp
|
||||
bcc rset5
|
||||
and #$7f
|
||||
cmp #'0' ;check for "0" result
|
||||
beq leave
|
||||
jmp rset5
|
||||
|
||||
decount dec countlo
|
||||
bne rset4
|
||||
dec counthi
|
||||
bne rset4
|
||||
jmp ringset
|
||||
|
||||
leave jsr inp ;grab the <cr> off the tail end of the "0"
|
||||
bcc leave
|
||||
|
||||
jsr clearBuffer
|
||||
|
||||
lda #0
|
||||
sta bytcnt ;reset byte counter
|
||||
sta bytcnt+1
|
||||
sta bytcnt+2
|
||||
clc
|
||||
rts ;return
|
||||
|
||||
*-------------------------------
|
||||
* test for a ring and handle it
|
||||
|
||||
ring jsr inp ;check for a char
|
||||
bcc noRing ;nope...
|
||||
|
||||
and #$7f ;strip high
|
||||
cmp #'2' ;is it a 'ring'? (numeric)
|
||||
bne notRing ;nope, check for connect messages
|
||||
|
||||
********************************
|
||||
grabCR jsr inp ;grab the <cr> off the tail end of the "2"
|
||||
bcc grabCR
|
||||
|
||||
answerRing jsr answer ;the phone rang, so send 'ATA'
|
||||
|
||||
clc
|
||||
rts
|
||||
|
||||
********************************
|
||||
notRing
|
||||
cmp #'1' ;is it a '1' or '10' or '11' or '12' or '14'?
|
||||
beq gotCode ;yes, save it
|
||||
cmp #'5' ;is it connect 1200?
|
||||
bne noRing ;nope
|
||||
|
||||
gotCode sta code
|
||||
|
||||
secondChar jsr inp ;second character will ALWAYS be there
|
||||
bcc secondChar
|
||||
|
||||
and #$7f ;strip high
|
||||
cmp #cr ;but might be a <cr>
|
||||
bne multiCode
|
||||
|
||||
********************************
|
||||
singleCode ldy #0 ;connect 300?
|
||||
lda code
|
||||
cmp #'1'
|
||||
beq ring3
|
||||
|
||||
iny
|
||||
cmp #'5' ;connect 1200?
|
||||
beq ring3 ;nope, unknown code, keep checking
|
||||
jmp noRing
|
||||
|
||||
********************************
|
||||
multiCode
|
||||
sta code+1
|
||||
|
||||
ldy #2 ;def = 2400 baud
|
||||
|
||||
lda code ;get the first code char
|
||||
cmp #'1' ;must be a one
|
||||
bne noRing ;if not, then keep trying
|
||||
|
||||
lda code+1 ;is it 2400?
|
||||
cmp #'0'
|
||||
beq ring3
|
||||
|
||||
iny
|
||||
cmp #'1' ;is it 4800?
|
||||
beq ring3
|
||||
|
||||
iny
|
||||
cmp #'2' ;is it 9600
|
||||
beq ring3
|
||||
|
||||
iny
|
||||
cmp #'4' ;is it 19200?
|
||||
beq ring3
|
||||
jmp noRing
|
||||
|
||||
********************************
|
||||
ring3 jsr setspeed ;set the correct speed
|
||||
|
||||
ldy #5
|
||||
ring4 lda #0 ;let carrier's settle
|
||||
jsr wait
|
||||
dey
|
||||
bne ring4
|
||||
|
||||
jsr clearBuffer ;remove any garbage
|
||||
sec ;we have a connection!
|
||||
rts
|
||||
|
||||
noRing clc
|
||||
rts
|
||||
|
||||
*-------------------------------
|
||||
* clear the input buffer
|
||||
|
||||
clearBuffer
|
||||
lda #Flush_List
|
||||
ldx #>Flush_List
|
||||
ldy #0
|
||||
jmp doext
|
||||
|
||||
* set DTR on GS Serial Port, and hangup if needed
|
||||
*-------------------------------
|
||||
|
||||
hangup lda #$80 ;blow 'em off (hangup)
|
||||
gsdtr sta DTRstate
|
||||
|
||||
lda #DTR_List
|
||||
ldx #>DTR_List
|
||||
ldy #0
|
||||
jmp doext
|
||||
|
||||
* wait routine
|
||||
*-------------------------------
|
||||
|
||||
wait sec ;from apple ][+ ref man - pg 147
|
||||
wait2 pha
|
||||
wait3 sbc #1
|
||||
bne wait3
|
||||
pla
|
||||
sbc #1
|
||||
bne wait2
|
||||
rts
|
||||
|
||||
* Check for carrier using Get_Port_Stat routine
|
||||
*-------------------------------
|
||||
|
||||
getcarr phx
|
||||
phy
|
||||
|
||||
lda #carrlist
|
||||
ldx #>carrlist
|
||||
ldy #0
|
||||
jsr doext
|
||||
|
||||
lda carrbits
|
||||
and cdbyte
|
||||
beq nocarr
|
||||
sec
|
||||
ply
|
||||
plx
|
||||
rts
|
||||
|
||||
nocarr clc
|
||||
ply
|
||||
plx
|
||||
rts
|
||||
|
||||
* send ata to phone
|
||||
*-------------------------------
|
||||
|
||||
answer lda #$80
|
||||
jsr wait
|
||||
|
||||
ldx #$ff
|
||||
answer2 inx
|
||||
lda ansstr,x ;get text
|
||||
beq answer3 ;we are done
|
||||
|
||||
jsr out ;send it
|
||||
bra answer2
|
||||
|
||||
answer3 rts
|
||||
|
||||
* set the rs-232 speed [speed offset in Y]
|
||||
*
|
||||
* 0 = 300 baud
|
||||
* 1 = 1200 baud
|
||||
* 2 = 2400 baud
|
||||
* 3 = 4800 baud
|
||||
* 4 = 9600 baud
|
||||
* 5 = 19200 baud
|
||||
*-------------------------------
|
||||
|
||||
setspeed phx
|
||||
phy
|
||||
|
||||
lda #1 ;find caller speed (x300)
|
||||
sta callspd
|
||||
cpy #0 ;at 300?
|
||||
beq Do_Baud ;yep
|
||||
|
||||
asl callspd ;speed = speed * 2
|
||||
setspeed2 asl callspd ;speed = speed * 2
|
||||
dey
|
||||
bne setspeed2 ;loop until correct speed found
|
||||
|
||||
Do_Baud pla ;get y-reg
|
||||
bne Try1200
|
||||
lda #<Baud300
|
||||
sta Baudread+1
|
||||
lda #>Baud300
|
||||
sta Baudread+2
|
||||
bra SetBaud
|
||||
|
||||
Try1200 cmp #1
|
||||
bne Try2400
|
||||
lda #<Baud1200
|
||||
sta Baudread+1
|
||||
lda #>Baud1200
|
||||
sta Baudread+2
|
||||
bra SetBaud
|
||||
|
||||
Try2400 cmp #2
|
||||
bne Try4800
|
||||
lda #<Baud2400
|
||||
sta Baudread+1
|
||||
lda #>Baud2400
|
||||
sta Baudread+2
|
||||
bra SetBaud
|
||||
|
||||
Try4800 cmp #3
|
||||
bne Try9600
|
||||
lda #<Baud4800
|
||||
sta Baudread+1
|
||||
lda #>Baud4800
|
||||
sta Baudread+2
|
||||
bra SetBaud
|
||||
|
||||
Try9600 cmp #4
|
||||
bne Try19200
|
||||
lda #<Baud9600
|
||||
sta Baudread+1
|
||||
lda #>Baud9600
|
||||
sta Baudread+2
|
||||
bra SetBaud
|
||||
|
||||
Try19200 lda #<Baud19200
|
||||
sta Baudread+1
|
||||
lda #>Baud19200
|
||||
sta Baudread+2
|
||||
|
||||
SetBaud ldx #$c2
|
||||
ldy #$20
|
||||
jsr doinit
|
||||
|
||||
ldx #0
|
||||
Baudread lda $ffff,x
|
||||
beq Fin_Init
|
||||
jsr out
|
||||
inx
|
||||
bra Baudread
|
||||
|
||||
Fin_Init ldx #0
|
||||
Init_Loop lda Port_Init,x
|
||||
beq donebaud
|
||||
jsr out
|
||||
inx
|
||||
bra Init_Loop
|
||||
|
||||
donebaud lda #Out_Buf
|
||||
ldx #>Out_Buf
|
||||
ldy #0
|
||||
jsr doext
|
||||
|
||||
plx
|
||||
rts
|
||||
|
||||
*-------------------------------
|
||||
* setup interupt routine
|
||||
|
||||
setirq rts
|
||||
|
||||
*-------------------------------
|
||||
* raise dtr
|
||||
|
||||
raisedtr lda #0
|
||||
phx
|
||||
phy
|
||||
|
||||
jsr gsdtr
|
||||
|
||||
ply
|
||||
plx
|
||||
rts
|
||||
|
||||
* globals
|
||||
*-------------------------------
|
||||
|
||||
counthi db 0
|
||||
countlo db 0
|
||||
|
||||
Baud300 hex 01
|
||||
asc '6B'
|
||||
hex 00 ;accept 300 Baud
|
||||
Baud1200 hex 01
|
||||
asc '8B'
|
||||
hex 00 ;accept 1200 Baud
|
||||
Baud2400 hex 01
|
||||
asc '10B'
|
||||
hex 00 ;accept 2400 Baud
|
||||
Baud4800 hex 01
|
||||
asc '12B'
|
||||
hex 00 ;accept 4800 Baud
|
||||
Baud9600 hex 01
|
||||
asc '14B'
|
||||
hex 00 ;accept 9600 Baud
|
||||
Baud19200 hex 01
|
||||
asc '15B'
|
||||
hex 00 ;accept 19200 baud
|
||||
|
||||
Port_Init
|
||||
hex 01
|
||||
asc '0D' ;8 bits
|
||||
hex 01
|
||||
asc '2P' ;no parity
|
||||
hex 01
|
||||
asc 'AD' ;auto-tabbing
|
||||
hex 01
|
||||
asc 'XD' ;no xoff recognition
|
||||
hex 01
|
||||
asc 'FD' ;no find keyboard
|
||||
hex 01
|
||||
asc 'CD' ;no column overflow
|
||||
hex 01
|
||||
asc 'ED' ;echo disabled
|
||||
hex 01
|
||||
asc 'MD' ;no lf masking
|
||||
hex 01
|
||||
asc 'BE' ;buffering enabled
|
||||
hex 01
|
||||
asc 'Z'
|
||||
hex 00 ;no more control characters
|
||||
|
||||
*-------------------------------
|
||||
|
||||
Out_Buf hex 04 ;Parameters to set the
|
||||
hex 13 ;Output buffer
|
||||
da 0
|
||||
adrl Buffer ;Buffer it where
|
||||
da 2 buffer
|
||||
|
||||
*-------------------------------
|
||||
|
||||
carrlist hex 03 ;Parameter list for
|
||||
hex 06 ;detecting carrier drop
|
||||
da 0
|
||||
carrbits da 0 Carrier
|
||||
|
||||
*-------------------------------
|
||||
|
||||
DTR_List hex 03 ;Parameter list for
|
||||
hex 0b ;setting DTR
|
||||
da 0
|
||||
DTRstate da 0 bit
|
||||
|
||||
*-------------------------------
|
||||
|
||||
Flush_List hex 02 ;parameter list for flushing input queue
|
||||
hex 14
|
||||
da 0
|
||||
|
||||
*-------------------------------
|
||||
|
||||
code ds 2 ;2 byte code returned by modem
|
||||
asc 'GSPort2'
|
||||
|
||||
@@ -0,0 +1,548 @@
|
||||
TR
|
||||
TR ADR
|
||||
*-------------------------------
|
||||
* GS Port Driver Bios - Slot #2
|
||||
* written by Andy Nicholas on July 26, 1987
|
||||
*-------------------------------
|
||||
|
||||
rel
|
||||
dsk rel/gsport2.vsm
|
||||
|
||||
cr equ $0d
|
||||
lf equ $0a
|
||||
|
||||
initstr equ $10d0
|
||||
ansstr equ $10c0
|
||||
cdbyte equ $10bf
|
||||
Buffer equ $10b0
|
||||
|
||||
*-------------------------------
|
||||
|
||||
gsport2 ent
|
||||
|
||||
|
||||
* Jump Table
|
||||
*-------------------------------
|
||||
|
||||
org $b00
|
||||
|
||||
hex 20 ;serial card slot * 16
|
||||
initspd hex 00
|
||||
|
||||
callspd dfb 0 ;speed of call
|
||||
|
||||
bytcnt dfb 0,0,0
|
||||
|
||||
jmp init
|
||||
jmp ringset
|
||||
jmp ring
|
||||
jmp answerRing
|
||||
jmp hangup
|
||||
jmp inp
|
||||
jmp out
|
||||
jmp getcarr
|
||||
jmp setspeed
|
||||
jmp setirq
|
||||
jmp raisedtr
|
||||
|
||||
doinit jmp $c200
|
||||
doread jmp $c200
|
||||
dowrite jmp $c200
|
||||
dostatus jmp $c200
|
||||
doext jmp $c200
|
||||
|
||||
* init the serial port pascal locations
|
||||
*-------------------------------
|
||||
|
||||
init lda $c20d ;get init address
|
||||
sta doinit+1
|
||||
lda $c20e ;get read address
|
||||
sta doread+1
|
||||
lda $c20f ;get write address
|
||||
sta dowrite+1
|
||||
lda $c210 ;get status address
|
||||
sta dostatus+1
|
||||
lda $c212
|
||||
sta doext+1
|
||||
|
||||
rts
|
||||
|
||||
* input data
|
||||
*-------------------------------
|
||||
|
||||
inp phx save ;x
|
||||
phy
|
||||
ldx #$c2 ;are we ready?
|
||||
ldy #$20
|
||||
lda #1
|
||||
jsr dostatus
|
||||
bcc inp2 ;nope, exit
|
||||
|
||||
ldx #$c2 ;yes, read
|
||||
ldy #$20
|
||||
jsr doread
|
||||
|
||||
sec
|
||||
ply
|
||||
plx ;restore & return
|
||||
rts
|
||||
|
||||
inp2 lda #0
|
||||
clc
|
||||
ply
|
||||
plx
|
||||
rts
|
||||
|
||||
* output data
|
||||
*-------------------------------
|
||||
|
||||
out phx ;save x
|
||||
phy ;save y
|
||||
pha ;save a
|
||||
|
||||
out1 ldx #$c2 ;ready for send?
|
||||
ldy #$20
|
||||
lda #$00
|
||||
jsr dostatus
|
||||
bcc out1 ;nope
|
||||
|
||||
pla get ;a
|
||||
ldx #$c2
|
||||
ldy #$20
|
||||
jsr dowrite ;send it
|
||||
|
||||
ply get ;y
|
||||
plx get ;x
|
||||
rts
|
||||
|
||||
* setup for call
|
||||
*-------------------------------
|
||||
|
||||
ringset jsr hangup
|
||||
|
||||
lda #0 ;let modem reset
|
||||
jsr wait
|
||||
jsr wait
|
||||
|
||||
lda #$00
|
||||
jsr gsdtr
|
||||
|
||||
ldy initspd ;set init speed
|
||||
jsr setspeed
|
||||
|
||||
lda #0 ;slight delay (let modem do init)
|
||||
jsr wait
|
||||
|
||||
ldx #$FF
|
||||
rset2 inx do ;pre-inc
|
||||
lda initstr,x ;get modem init string
|
||||
beq rset3 ;we are done
|
||||
|
||||
jsr out ;output
|
||||
bra rset2 ;loop (Z-bit set after wait)
|
||||
|
||||
rset3 lda #6
|
||||
sta countlo
|
||||
sta counthi
|
||||
|
||||
rset4 ldy #$FF
|
||||
rset5 dey
|
||||
beq decount
|
||||
|
||||
jsr inp
|
||||
bcc rset5
|
||||
and #$7f
|
||||
cmp #'0' ;check for "0" result
|
||||
beq leave
|
||||
jmp rset5
|
||||
|
||||
decount dec countlo
|
||||
bne rset4
|
||||
dec counthi
|
||||
bne rset4
|
||||
jmp ringset
|
||||
|
||||
leave jsr inp ;grab the <cr> off the tail end of the "0"
|
||||
bcc leave
|
||||
|
||||
jsr clearBuffer
|
||||
|
||||
lda #0
|
||||
sta bytcnt ;reset byte counter
|
||||
sta bytcnt+1
|
||||
sta bytcnt+2
|
||||
noRing clc
|
||||
rts ;return
|
||||
|
||||
*-------------------------------
|
||||
* test for a ring and handle it
|
||||
|
||||
ring jsr inp ;check for a char
|
||||
bcc noRing ;nope...
|
||||
|
||||
and #$7f ;strip high
|
||||
cmp #'2' ;is it a 'ring'? (numeric)
|
||||
bne notRing ;nope, check for connect messages
|
||||
|
||||
********************************
|
||||
grabCR jsr inp ;grab the <cr> off the tail end of the "2"
|
||||
bcc grabCR
|
||||
|
||||
answerRing jsr answer ;the phone rang, so send 'ATA'
|
||||
|
||||
clc
|
||||
rts
|
||||
|
||||
********************************
|
||||
notRing cmp #'4' ; is it a '40','46','47' or '48'?
|
||||
beq :gotCode
|
||||
cmp #'5' ; is it a '50'?
|
||||
beq :gotCode ; Yes, check for carrier speed
|
||||
jmp noRing
|
||||
|
||||
:gotCode sta code1
|
||||
|
||||
:nxtchar jsr inp ; get next character
|
||||
bcc :nxtchar ; it MUST be there
|
||||
|
||||
and #$7f
|
||||
cmp #cr
|
||||
beq :startck
|
||||
|
||||
sta code1+1
|
||||
bra :nxtchar
|
||||
|
||||
:startck ldy #32 ;def = 9600 baud carrier
|
||||
ldx #5
|
||||
|
||||
lda code1 ;get the first code char
|
||||
cmp #'5' ;is it a '50'?
|
||||
bne :not9600 ;if not, then check for other carrier speeds
|
||||
|
||||
lda code1+1
|
||||
cmp #'0'
|
||||
beq :setcspd
|
||||
|
||||
:not9600 ldy #1
|
||||
ldx #0
|
||||
lda code1+1 ;is it a 300 baud carrier?
|
||||
cmp #'0'
|
||||
beq :setcspd ;yes
|
||||
|
||||
ldy #4
|
||||
inx
|
||||
cmp #'6' ;is it a 1200 baud carrier?
|
||||
beq :setcspd ;yes
|
||||
|
||||
ldy #8
|
||||
inx
|
||||
cmp #'7' ;is it a 2400 baud carrier?
|
||||
beq :setcspd
|
||||
|
||||
ldy #16
|
||||
inx
|
||||
cmp #'8' ;is it a 4800 baud carrier?
|
||||
beq :setcspd
|
||||
jmp noRing
|
||||
|
||||
:setcspd sty carrspd
|
||||
stx portspd
|
||||
|
||||
; check for protocol connections
|
||||
ckptrocl ldy #0
|
||||
:nxtchar jsr inp ; get next character
|
||||
bcc :nxtchar ; it MUST be there
|
||||
|
||||
and #$7f
|
||||
cmp #cr
|
||||
beq :startck
|
||||
|
||||
sta code2,y ; save it...
|
||||
iny
|
||||
bra :nxtchar
|
||||
|
||||
:startck lda code2 ; get first char of protocol
|
||||
cmp #'7' ; is it '70'?
|
||||
bne :ring3
|
||||
|
||||
lda code2+1 ; get last character of protocol
|
||||
cmp #'0' ; is it '70'?
|
||||
bne :ring3
|
||||
|
||||
ldx #5
|
||||
stx portspd
|
||||
|
||||
********************************
|
||||
:ring3 ldy portspd ;get the speed to open port at
|
||||
jsr setspeed ;set the correct speed
|
||||
|
||||
ldy #5
|
||||
ring4 lda #0 ;let carrier's settle
|
||||
jsr wait
|
||||
dey
|
||||
bne ring4
|
||||
|
||||
jsr clearBuffer ;remove any garbage
|
||||
sec ;we have a connection!
|
||||
rts
|
||||
|
||||
*-------------------------------
|
||||
* clear the input buffer
|
||||
|
||||
clearBuffer
|
||||
lda #Flush_List
|
||||
ldx #>Flush_List
|
||||
ldy #0
|
||||
jmp doext
|
||||
|
||||
* set DTR on GS Serial Port, and hangup if needed
|
||||
*-------------------------------
|
||||
|
||||
hangup lda #$80 ;blow 'em off (hangup)
|
||||
gsdtr sta DTRstate
|
||||
|
||||
lda #DTR_List
|
||||
ldx #>DTR_List
|
||||
ldy #0
|
||||
jmp doext
|
||||
|
||||
* wait routine
|
||||
*-------------------------------
|
||||
|
||||
wait sec ;from apple ][+ ref man - pg 147
|
||||
wait2 pha
|
||||
wait3 sbc #1
|
||||
bne wait3
|
||||
pla
|
||||
sbc #1
|
||||
bne wait2
|
||||
rts
|
||||
|
||||
* Check for carrier using Get_Port_Stat routine
|
||||
*-------------------------------
|
||||
|
||||
getcarr phx
|
||||
phy
|
||||
|
||||
lda #carrlist
|
||||
ldx #>carrlist
|
||||
ldy #0
|
||||
jsr doext
|
||||
|
||||
lda carrbits
|
||||
and cdbyte
|
||||
beq nocarr
|
||||
sec
|
||||
ply
|
||||
plx
|
||||
rts
|
||||
|
||||
nocarr clc
|
||||
ply
|
||||
plx
|
||||
rts
|
||||
|
||||
* send ata to phone
|
||||
*-------------------------------
|
||||
|
||||
answer lda #$80
|
||||
jsr wait
|
||||
|
||||
ldx #$ff
|
||||
answer2 inx
|
||||
lda ansstr,x ;get text
|
||||
beq answer3 ;we are done
|
||||
|
||||
jsr out ;send it
|
||||
bra answer2
|
||||
|
||||
answer3 rts
|
||||
|
||||
* set the rs-232 speed [speed offset in Y]
|
||||
*
|
||||
* 0 = 300 baud
|
||||
* 1 = 1200 baud
|
||||
* 2 = 2400 baud
|
||||
* 3 = 4800 baud
|
||||
* 4 = 9600 baud
|
||||
* 5 = 19200 baud
|
||||
*-------------------------------
|
||||
|
||||
setspeed phx
|
||||
|
||||
ldx carrspd ;find caller speed (x300)
|
||||
stx callspd
|
||||
|
||||
tya ;get y-reg into a-reg
|
||||
bne Try1200
|
||||
lda #<Baud300
|
||||
sta Baudread+1
|
||||
lda #>Baud300
|
||||
sta Baudread+2
|
||||
bra SetBaud
|
||||
|
||||
Try1200 cmp #1
|
||||
bne Try2400
|
||||
lda #<Baud1200
|
||||
sta Baudread+1
|
||||
lda #>Baud1200
|
||||
sta Baudread+2
|
||||
bra SetBaud
|
||||
|
||||
Try2400 cmp #2
|
||||
bne Try4800
|
||||
lda #<Baud2400
|
||||
sta Baudread+1
|
||||
lda #>Baud2400
|
||||
sta Baudread+2
|
||||
bra SetBaud
|
||||
|
||||
Try4800 cmp #3
|
||||
bne Try9600
|
||||
lda #<Baud4800
|
||||
sta Baudread+1
|
||||
lda #>Baud4800
|
||||
sta Baudread+2
|
||||
bra SetBaud
|
||||
|
||||
Try9600 cmp #4
|
||||
bne Try19200
|
||||
lda #<Baud9600
|
||||
sta Baudread+1
|
||||
lda #>Baud9600
|
||||
sta Baudread+2
|
||||
bra SetBaud
|
||||
|
||||
Try19200 lda #<Baud19200
|
||||
sta Baudread+1
|
||||
lda #>Baud19200
|
||||
sta Baudread+2
|
||||
|
||||
SetBaud ldx #$c2
|
||||
ldy #$20
|
||||
jsr doinit
|
||||
|
||||
ldx #0
|
||||
Baudread lda $ffff,x
|
||||
beq Fin_Init
|
||||
jsr out
|
||||
inx
|
||||
bra Baudread
|
||||
|
||||
Fin_Init ldx #0
|
||||
Init_Loop lda Port_Init,x
|
||||
beq donebaud
|
||||
jsr out
|
||||
inx
|
||||
bra Init_Loop
|
||||
|
||||
donebaud lda #Out_Buf
|
||||
ldx #>Out_Buf
|
||||
ldy #0
|
||||
jsr doext
|
||||
|
||||
plx
|
||||
rts
|
||||
|
||||
*-------------------------------
|
||||
* setup interupt routine
|
||||
|
||||
setirq rts
|
||||
|
||||
*-------------------------------
|
||||
* raise dtr
|
||||
|
||||
raisedtr lda #0
|
||||
phx
|
||||
phy
|
||||
|
||||
jsr gsdtr
|
||||
|
||||
ply
|
||||
plx
|
||||
rts
|
||||
|
||||
* globals
|
||||
*-------------------------------
|
||||
|
||||
counthi db 0
|
||||
countlo db 0
|
||||
|
||||
Baud300 hex 01
|
||||
asc '6B'
|
||||
hex 00 ;accept 300 Baud
|
||||
Baud1200 hex 01
|
||||
asc '8B'
|
||||
hex 00 ;accept 1200 Baud
|
||||
Baud2400 hex 01
|
||||
asc '10B'
|
||||
hex 00 ;accept 2400 Baud
|
||||
Baud4800 hex 01
|
||||
asc '12B'
|
||||
hex 00 ;accept 4800 Baud
|
||||
Baud9600 hex 01
|
||||
asc '14B'
|
||||
hex 00 ;accept 9600 Baud
|
||||
Baud19200 hex 01
|
||||
asc '15B'
|
||||
hex 00 ;accept 19200 baud
|
||||
|
||||
Port_Init
|
||||
hex 01
|
||||
asc '0D' ;8 bits
|
||||
hex 01
|
||||
asc '2P' ;no parity
|
||||
hex 01
|
||||
asc 'AD' ;auto-tabbing
|
||||
hex 01
|
||||
asc 'XD' ;no xoff recognition
|
||||
hex 01
|
||||
asc 'FD' ;no find keyboard
|
||||
hex 01
|
||||
asc 'CD' ;no column overflow
|
||||
hex 01
|
||||
asc 'ED' ;echo disabled
|
||||
hex 01
|
||||
asc 'MD' ;no lf masking
|
||||
hex 01
|
||||
asc 'BE' ;buffering enabled
|
||||
hex 01
|
||||
asc 'Z'
|
||||
hex 00 ;no more control characters
|
||||
|
||||
*-------------------------------
|
||||
|
||||
Out_Buf hex 04 ;Parameters to set the
|
||||
hex 13 ;Output buffer
|
||||
da 0
|
||||
adrl Buffer ;Buffer it where
|
||||
da 2 buffer
|
||||
|
||||
*-------------------------------
|
||||
|
||||
carrlist hex 03 ;Parameter list for
|
||||
hex 06 ;detecting carrier drop
|
||||
da 0
|
||||
carrbits da 0 Carrier
|
||||
|
||||
*-------------------------------
|
||||
|
||||
DTR_List hex 03 ;Parameter list for
|
||||
hex 0b ;setting DTR
|
||||
da 0
|
||||
DTRstate da 0 bit
|
||||
|
||||
*-------------------------------
|
||||
|
||||
Flush_List hex 02 ;parameter list for flushing input queue
|
||||
hex 14
|
||||
da 0
|
||||
|
||||
*-------------------------------
|
||||
|
||||
code1 ds 2 ;2 byte code returned by modem
|
||||
code2 ds 2
|
||||
portspd ds 1
|
||||
carrspd ds 1
|
||||
asc 'GSPort2 Hayes VSM'
|
||||
|
||||
@@ -0,0 +1,536 @@
|
||||
TR
|
||||
TR ADR
|
||||
*-------------------------------
|
||||
* GS Port Driver Bios - Slot #2
|
||||
* written by Andy Nicholas on July 26, 1987
|
||||
*-------------------------------
|
||||
|
||||
cr equ $0d
|
||||
lf equ $0a
|
||||
slot equ $c2
|
||||
slot1 equ $20
|
||||
|
||||
*-------------------------------
|
||||
|
||||
gsport2 ent
|
||||
|
||||
* Jump Table
|
||||
*-------------------------------
|
||||
|
||||
org $e00
|
||||
|
||||
hex 20 ;serial card slot * 16
|
||||
initspd hex 00
|
||||
|
||||
callspd dfb 0 ;speed of call
|
||||
|
||||
bytcnt dfb 0,0,0
|
||||
|
||||
jmp init
|
||||
jmp ringset
|
||||
jmp ring
|
||||
jmp answerRing
|
||||
jmp hangup
|
||||
jmp inp
|
||||
jmp out
|
||||
jmp getcarr
|
||||
jmp setspeed
|
||||
jmp setirq
|
||||
jmp raisedtr
|
||||
|
||||
doinit jmp $c200
|
||||
doread jmp $c200
|
||||
dowrite jmp $c200
|
||||
dostatus jmp $c200
|
||||
doext jmp $c200
|
||||
|
||||
* init the serial port pascal locations
|
||||
*-------------------------------
|
||||
|
||||
init lda $c20d ;get init address
|
||||
sta doinit+1
|
||||
lda $c20e ;get read address
|
||||
sta doread+1
|
||||
lda $c20f ;get write address
|
||||
sta dowrite+1
|
||||
lda $c210 ;get status address
|
||||
sta dostatus+1
|
||||
lda $c212
|
||||
sta doext+1
|
||||
|
||||
rts
|
||||
|
||||
* input data
|
||||
*-------------------------------
|
||||
|
||||
inp phx ;save x
|
||||
phy
|
||||
jsr setcall ;set x & y
|
||||
lda #1
|
||||
jsr dostatus ;is there input ready?
|
||||
bcs :inp2 ;yes, read character
|
||||
|
||||
lda #0
|
||||
clc
|
||||
bra :inp3
|
||||
|
||||
:inp2 jsr setcall ;yes, read
|
||||
jsr doread
|
||||
|
||||
sec
|
||||
:inp3 ply
|
||||
plx ;restore & return
|
||||
rts
|
||||
|
||||
* output data
|
||||
*-------------------------------
|
||||
|
||||
out phx ;save x
|
||||
phy ;save y
|
||||
pha ;save a
|
||||
|
||||
out1 jsr setcall ;ready for send?
|
||||
lda #$00
|
||||
jsr dostatus ;ready for send?
|
||||
bcc out1 ;nope
|
||||
|
||||
pla ;get a
|
||||
jsr setcall
|
||||
jsr dowrite ;send it
|
||||
|
||||
ply ;get y
|
||||
plx ;get x
|
||||
rts
|
||||
|
||||
* setup for call
|
||||
*-------------------------------
|
||||
|
||||
ringset jsr hangup
|
||||
|
||||
lda #0 ;let modem reset
|
||||
jsr wait
|
||||
jsr wait
|
||||
|
||||
lda #$00
|
||||
jsr gsdtr
|
||||
|
||||
ldy initspd ;set init speed
|
||||
jsr setspeed
|
||||
|
||||
lda #0 ;slight delay (let modem do init)
|
||||
jsr wait
|
||||
|
||||
ldx #$FF
|
||||
:rset2 inx ;do pre-inc
|
||||
lda initstr,x ;get modem init string
|
||||
beq :rset3 ;we are done
|
||||
|
||||
jsr out ;output
|
||||
bra :rset2 ;loop (Z-bit set after wait)
|
||||
|
||||
:rset3 lda #6
|
||||
sta countlo
|
||||
sta counthi
|
||||
|
||||
:rset4 ldy #$FF
|
||||
:rset5 dey
|
||||
beq :decount
|
||||
|
||||
jsr inp
|
||||
bcc :rset5
|
||||
and #$7f
|
||||
cmp #'0' ;check for "0" result
|
||||
beq :leave
|
||||
jmp :rset5
|
||||
|
||||
:decount dec countlo
|
||||
bne :rset4
|
||||
dec counthi
|
||||
bne :rset4
|
||||
jmp ringset
|
||||
|
||||
:leave jsr inp ;grab the <cr> off the tail end of the "0"
|
||||
bcc :leave
|
||||
|
||||
jsr clearBuffer
|
||||
|
||||
stz bytcnt ;reset byte counter
|
||||
stz bytcnt+1
|
||||
stz bytcnt+2
|
||||
noRing clc
|
||||
rts ;return
|
||||
|
||||
*-------------------------------
|
||||
* test for a ring and handle it
|
||||
|
||||
ring jsr inp ;check for a char
|
||||
bcc noRing ;nope...
|
||||
|
||||
and #$7f ;strip high
|
||||
cmp #'2' ;is it a 'ring'? (numeric)
|
||||
bne notRing ;nope, check for connect messages
|
||||
|
||||
********************************
|
||||
grabCR jsr inp ;grab the <cr> off the tail end of the "2"
|
||||
bcc grabCR
|
||||
|
||||
answerRing jsr answer ;the phone rang, so send 'ATA'
|
||||
|
||||
clc
|
||||
rts
|
||||
|
||||
********************************
|
||||
notRing cmp #'4' ; is it a '40','46','47' or '48'?
|
||||
beq :gotCode
|
||||
cmp #'5' ; is it a '50'?
|
||||
beq :gotCode ; Yes, check for carrier speed
|
||||
jmp noRing
|
||||
|
||||
:gotCode sta code1
|
||||
ldy #1
|
||||
|
||||
:nxtchar jsr inp ; get next character
|
||||
bcc :nxtchar ; it MUST be there
|
||||
|
||||
and #$7f
|
||||
cmp #cr
|
||||
beq :nxtchar
|
||||
|
||||
sta code1+1
|
||||
iny
|
||||
cpy #'6'
|
||||
bne :nxtchar
|
||||
|
||||
ldy #32 ;def = 9600 baud carrier
|
||||
ldx #4
|
||||
|
||||
lda code1 ;get the first code char
|
||||
cmp #'5' ;is it a '50'?
|
||||
bne :not9600 ;if not, then check for other carrier speeds
|
||||
|
||||
lda code1+1
|
||||
cmp #'0'
|
||||
beq :setcspd
|
||||
|
||||
:not9600 ldy #1
|
||||
ldx #0
|
||||
lda code1+1 ;is it a 300 baud carrier?
|
||||
cmp #'0'
|
||||
beq :setcspd ;yes
|
||||
|
||||
ldy #4
|
||||
inx
|
||||
cmp #'6' ;is it a 1200 baud carrier?
|
||||
beq :setcspd ;yes
|
||||
|
||||
ldy #8
|
||||
inx
|
||||
cmp #'7' ;is it a 2400 baud carrier?
|
||||
beq :setcspd
|
||||
|
||||
ldy #16
|
||||
inx
|
||||
cmp #'8' ;is it a 4800 baud carrier?
|
||||
beq :setcspd
|
||||
jmp noRing
|
||||
|
||||
:setcspd sty carrspd
|
||||
stx portspd
|
||||
|
||||
; check for protocol connections
|
||||
ckptrocl lda code2
|
||||
cmp #'7' ; is it '70'?
|
||||
bne :ring3
|
||||
|
||||
lda code2+1 ; get last character of protocol
|
||||
cmp #'0' ; is it '70'?
|
||||
bne :ring3
|
||||
|
||||
ldx #5
|
||||
stx portspd ; save speed to open port at
|
||||
|
||||
********************************
|
||||
:ring3 ldy portspd ;get the speed to open port at
|
||||
jsr setspeed ;set the correct speed
|
||||
|
||||
ldy #5
|
||||
ring4 lda #0 ;let carrier's settle
|
||||
jsr wait
|
||||
dey
|
||||
bne ring4
|
||||
|
||||
jsr clearBuffer ;remove any garbage
|
||||
sec ;we have a connection!
|
||||
rts
|
||||
|
||||
*-------------------------------
|
||||
* clear the input buffer
|
||||
|
||||
clearBuffer
|
||||
lda #Flush_List
|
||||
ldx #>Flush_List
|
||||
ldy #0
|
||||
jmp doext
|
||||
|
||||
* set DTR on GS Serial Port, and hangup if needed
|
||||
*-------------------------------
|
||||
|
||||
hangup lda #$80 ;blow 'em off (hangup)
|
||||
gsdtr sta DTRstate
|
||||
|
||||
lda #DTR_List
|
||||
ldx #>DTR_List
|
||||
ldy #0
|
||||
jmp doext
|
||||
|
||||
* wait routine
|
||||
*-------------------------------
|
||||
|
||||
wait sec ;from apple ][+ ref man - pg 147
|
||||
wait2 pha
|
||||
wait3 sbc #1
|
||||
bne wait3
|
||||
pla
|
||||
sbc #1
|
||||
bne wait2
|
||||
rts
|
||||
|
||||
* Check for carrier using Get_Port_Stat routine
|
||||
*-------------------------------
|
||||
|
||||
getcarr phx
|
||||
phy
|
||||
|
||||
lda #carrlist
|
||||
ldx #>carrlist
|
||||
ldy #0
|
||||
jsr doext
|
||||
|
||||
lda carrbits
|
||||
and cdbyte
|
||||
beq nocarr
|
||||
sec
|
||||
hex 2c ;skip clc
|
||||
|
||||
nocarr clc
|
||||
ply
|
||||
plx
|
||||
rts
|
||||
|
||||
* send ata to phone
|
||||
*-------------------------------
|
||||
|
||||
answer lda #$80
|
||||
jsr wait
|
||||
|
||||
ldx #$ff
|
||||
:answer2 inx
|
||||
lda ansstr,x ;get text
|
||||
beq :answer3 ;we are done
|
||||
|
||||
jsr out ;send it
|
||||
bra :answer2
|
||||
|
||||
:answer3 rts
|
||||
|
||||
* set the rs-232 speed [speed offset in Y]
|
||||
*
|
||||
* 0 = 300 baud
|
||||
* 1 = 1200 baud
|
||||
* 2 = 2400 baud
|
||||
* 3 = 4800 baud
|
||||
* 4 = 9600 baud
|
||||
* 5 = 19200 baud
|
||||
*-------------------------------
|
||||
|
||||
setspeed phx
|
||||
|
||||
ldx carrspd ;find caller speed (x300)
|
||||
stx callspd
|
||||
|
||||
tya ;get y-reg into a-reg
|
||||
bne :Try1200
|
||||
lda #<Baud300
|
||||
sta :Baudread+1
|
||||
lda #>Baud300
|
||||
sta :Baudread+2
|
||||
bra :SetBaud
|
||||
|
||||
:Try1200 cmp #1
|
||||
bne :Try2400
|
||||
lda #<Baud1200
|
||||
sta :Baudread+1
|
||||
lda #>Baud1200
|
||||
sta :Baudread+2
|
||||
bra :SetBaud
|
||||
|
||||
:Try2400 cmp #2
|
||||
bne :Try4800
|
||||
lda #<Baud2400
|
||||
sta :Baudread+1
|
||||
lda #>Baud2400
|
||||
sta :Baudread+2
|
||||
bra :SetBaud
|
||||
|
||||
:Try4800 cmp #3
|
||||
bne :Try9600
|
||||
lda #<Baud4800
|
||||
sta :Baudread+1
|
||||
lda #>Baud4800
|
||||
sta :Baudread+2
|
||||
bra :SetBaud
|
||||
|
||||
:Try9600 cmp #4
|
||||
bne :Try19200
|
||||
lda #<Baud9600
|
||||
sta :Baudread+1
|
||||
lda #>Baud9600
|
||||
sta :Baudread+2
|
||||
bra :SetBaud
|
||||
|
||||
:Try19200 lda #<Baud19200
|
||||
sta :Baudread+1
|
||||
lda #>Baud19200
|
||||
sta :Baudread+2
|
||||
|
||||
:SetBaud jsr setcall ;setup x&y for call
|
||||
jsr doinit
|
||||
|
||||
ldx #0
|
||||
:Baudread lda $ffff,x
|
||||
beq Fin_Init
|
||||
jsr out
|
||||
inx
|
||||
bra :Baudread
|
||||
|
||||
Fin_Init ldx #0
|
||||
:Init_Loop lda Port_Init,x
|
||||
beq :donebaud
|
||||
jsr out
|
||||
inx
|
||||
bra :Init_Loop
|
||||
|
||||
:donebaud lda #Out_Buf
|
||||
ldx #>Out_Buf
|
||||
ldy #0
|
||||
jsr doext
|
||||
|
||||
plx
|
||||
rts
|
||||
|
||||
*-------------------------------
|
||||
* setup interupt routine
|
||||
|
||||
setirq rts
|
||||
|
||||
*-------------------------------
|
||||
* raise dtr
|
||||
|
||||
raisedtr lda #0
|
||||
phx
|
||||
phy
|
||||
|
||||
jsr gsdtr
|
||||
|
||||
ply
|
||||
plx
|
||||
rts
|
||||
|
||||
*-------------------------------------------------
|
||||
* setup firmware i/o routines
|
||||
|
||||
setcall ldx slot
|
||||
ldy slot1
|
||||
rts
|
||||
|
||||
* globals
|
||||
*-------------------------------
|
||||
|
||||
counthi db 0
|
||||
countlo db 0
|
||||
|
||||
Baud300 hex 01
|
||||
asc '6B'
|
||||
hex 00 ;accept 300 Baud
|
||||
Baud1200 hex 01
|
||||
asc '8B'
|
||||
hex 00 ;accept 1200 Baud
|
||||
Baud2400 hex 01
|
||||
asc '10B'
|
||||
hex 00 ;accept 2400 Baud
|
||||
Baud4800 hex 01
|
||||
asc '12B'
|
||||
hex 00 ;accept 4800 Baud
|
||||
Baud9600 hex 01
|
||||
asc '14B'
|
||||
hex 00 ;accept 9600 Baud
|
||||
Baud19200 hex 01
|
||||
asc '15B'
|
||||
hex 00 ;accept 19200 baud
|
||||
|
||||
Port_Init
|
||||
hex 01
|
||||
asc '0D' ;8 bits
|
||||
hex 01
|
||||
asc '2P' ;no parity
|
||||
hex 01
|
||||
asc 'AD' ;auto-tabbing
|
||||
hex 01
|
||||
asc 'XD' ;no xoff recognition
|
||||
hex 01
|
||||
asc 'FD' ;no find keyboard
|
||||
hex 01
|
||||
asc 'CD' ;no column overflow
|
||||
hex 01
|
||||
asc 'ED' ;echo disabled
|
||||
hex 01
|
||||
asc 'MD' ;no lf masking
|
||||
hex 01
|
||||
asc 'BE' ;buffering enabled
|
||||
hex 01
|
||||
asc 'Z'
|
||||
hex 00 ;no more control characters
|
||||
|
||||
*-------------------------------
|
||||
|
||||
Out_Buf hex 04 ;Parameters to set the
|
||||
hex 13 ;Output buffer
|
||||
da 0
|
||||
adrl Buffer ;Buffer it where
|
||||
da 2 buffer
|
||||
|
||||
*-------------------------------
|
||||
|
||||
carrlist hex 03 ;Parameter list for
|
||||
hex 06 ;detecting carrier drop
|
||||
da 0
|
||||
carrbits da 0 Carrier
|
||||
|
||||
*-------------------------------
|
||||
|
||||
DTR_List hex 03 ;Parameter list for
|
||||
hex 0b ;setting DTR
|
||||
da 0
|
||||
DTRstate da 0 bit
|
||||
|
||||
*-------------------------------
|
||||
|
||||
Flush_List hex 02 ;parameter list for flushing input queue
|
||||
hex 14
|
||||
da 0
|
||||
|
||||
*-------------------------------
|
||||
|
||||
code1 ds 2 ;2 byte code returned by modem
|
||||
code2 ds 2
|
||||
code3 ds 2
|
||||
portspd ds 1
|
||||
carrspd ds 1
|
||||
|
||||
Buffer ds $15
|
||||
cdbyte db #$20
|
||||
ansstr asc 'ATA',0d00
|
||||
initstr asc 'ATZ',0d00
|
||||
|
||||
*initstr asc 'ATX1S0=0S2=128&C1&D2&S1&K5E0V0W1M0',0d00
|
||||
|
||||
@@ -0,0 +1,541 @@
|
||||
TR
|
||||
TR ADR
|
||||
*-------------------------------
|
||||
* GS Port Driver Bios - Slot #2
|
||||
* written by Andy Nicholas on July 26, 1987
|
||||
*-------------------------------
|
||||
|
||||
cr equ $0d
|
||||
lf equ $0a
|
||||
|
||||
*-------------------------------
|
||||
|
||||
gsport2 ent
|
||||
|
||||
|
||||
* Jump Table
|
||||
*-------------------------------
|
||||
|
||||
org $e00
|
||||
|
||||
protocol hex 00 ;serial card slot * 16
|
||||
initspd hex 05
|
||||
|
||||
callspd dfb 0 ;speed of call
|
||||
|
||||
bytcnt dfb 0,0,0
|
||||
|
||||
jmp init
|
||||
jmp ringset
|
||||
jmp ring
|
||||
jmp answerRing
|
||||
jmp hangup
|
||||
jmp inp
|
||||
jmp out
|
||||
jmp getcarr
|
||||
jmp setspeed
|
||||
jmp setirq
|
||||
jmp raisedtr
|
||||
|
||||
doinit jmp $c200
|
||||
doread jmp $c200
|
||||
dowrite jmp $c200
|
||||
dostatus jmp $c200
|
||||
doext jmp $c200
|
||||
|
||||
* init the serial port pascal locations
|
||||
*-------------------------------
|
||||
|
||||
init lda $c20d ;get init address
|
||||
sta doinit+1
|
||||
lda $c20e ;get read address
|
||||
sta doread+1
|
||||
lda $c20f ;get write address
|
||||
sta dowrite+1
|
||||
lda $c210 ;get status address
|
||||
sta dostatus+1
|
||||
lda $c212
|
||||
sta doext+1
|
||||
|
||||
rts
|
||||
|
||||
* input data
|
||||
*-------------------------------
|
||||
|
||||
inp phx save ;x
|
||||
phy
|
||||
ldx #$c2 ;is there input ready?
|
||||
ldy #$20
|
||||
lda #1
|
||||
jsr dostatus
|
||||
bcs :inp2 yes,
|
||||
|
||||
lda #0
|
||||
clc
|
||||
bra :inp3
|
||||
|
||||
:inp2 ldx #$c2 ;yes, read
|
||||
ldy #$20
|
||||
jsr doread
|
||||
|
||||
sec
|
||||
:inp3 ply
|
||||
plx ;restore & return
|
||||
rts
|
||||
|
||||
* output data
|
||||
*-------------------------------
|
||||
|
||||
out phx ;save x
|
||||
phy ;save y
|
||||
pha ;save a
|
||||
|
||||
out1 ldx #$c2 ;ready for send?
|
||||
ldy #$20
|
||||
lda #$00
|
||||
jsr dostatus
|
||||
bcc out1 ;nope
|
||||
|
||||
pla get ;a
|
||||
ldx #$c2
|
||||
ldy #$20
|
||||
jsr dowrite ;send it
|
||||
|
||||
ply get ;y
|
||||
plx get ;x
|
||||
rts
|
||||
|
||||
* setup for call
|
||||
*-------------------------------
|
||||
|
||||
ringset jsr hangup
|
||||
|
||||
lda #0 ;let modem reset
|
||||
jsr wait
|
||||
jsr wait
|
||||
|
||||
lda #$00
|
||||
jsr gsdtr
|
||||
|
||||
ldy initspd ;set init speed
|
||||
jsr setspeed
|
||||
|
||||
lda #0 ;slight delay (let modem do init)
|
||||
jsr wait
|
||||
|
||||
ldx #$FF
|
||||
rset2 inx do ;pre-inc
|
||||
lda initstr,x ;get modem init string
|
||||
beq rset3 ;we are done
|
||||
|
||||
jsr out ;output
|
||||
bra rset2 ;loop (Z-bit set after wait)
|
||||
|
||||
rset3 lda #6
|
||||
sta countlo
|
||||
sta counthi
|
||||
|
||||
rset4 ldy #$FF
|
||||
rset5 dey
|
||||
beq decount
|
||||
|
||||
jsr inp
|
||||
bcc rset5
|
||||
and #$7f
|
||||
cmp #'0' ;check for "0" result
|
||||
beq leave
|
||||
jmp rset5
|
||||
|
||||
decount dec countlo
|
||||
bne rset4
|
||||
dec counthi
|
||||
bne rset4
|
||||
jmp ringset
|
||||
|
||||
leave jsr inp ;grab the <cr> off the tail end of the "0"
|
||||
bcc leave
|
||||
|
||||
jsr clearBuffer
|
||||
|
||||
lda #0
|
||||
sta bytcnt ;reset byte counter
|
||||
sta bytcnt+1
|
||||
sta bytcnt+2
|
||||
noRing clc
|
||||
rts ;return
|
||||
|
||||
*-------------------------------
|
||||
* test for a ring and handle it
|
||||
|
||||
ring jsr inp ;check for a char
|
||||
bcc noRing ;nope...
|
||||
|
||||
and #$7f ;strip high
|
||||
cmp #'2' ;is it a 'ring'? (numeric)
|
||||
bne notRing ;nope, check for connect messages
|
||||
|
||||
********************************
|
||||
grabCR jsr inp ;grab the <cr> off the tail end of the "2"
|
||||
bcc grabCR
|
||||
|
||||
answerRing jsr answer ;the phone rang, so send 'ATA'
|
||||
|
||||
clc
|
||||
rts
|
||||
|
||||
********************************
|
||||
notRing cmp #'4' ; is it a '40','46','47' or '48'?
|
||||
beq :gotCode
|
||||
cmp #'5' ; is it a '50'?
|
||||
beq :gotCode ; Yes, check for carrier speed
|
||||
jmp noRing
|
||||
|
||||
:gotCode sta code1
|
||||
ldy #1
|
||||
|
||||
:nxtchar jsr inp ; get next character
|
||||
bcc :nxtchar ; it MUST be there
|
||||
|
||||
and #$7f
|
||||
cmp #cr
|
||||
bne :valid
|
||||
cpy #5
|
||||
bne :nxtchar
|
||||
bra :next
|
||||
|
||||
:valid sta code1,y
|
||||
iny
|
||||
cpy #6
|
||||
bne :nxtchar
|
||||
|
||||
:next ldy #32 ;def = 9600 baud carrier
|
||||
ldx #4
|
||||
|
||||
lda code1 ;get the first code char
|
||||
cmp #'5' ;is it a '50'?
|
||||
bne :not9600 ;if not, then check for other carrier speeds
|
||||
|
||||
lda code1+1
|
||||
cmp #'0'
|
||||
beq :setcspd
|
||||
|
||||
:not9600 ldy #1
|
||||
ldx #0
|
||||
lda code1+1 ;is it a 300 baud carrier?
|
||||
cmp #'0'
|
||||
beq :setcspd ;yes
|
||||
|
||||
ldy #4
|
||||
inx
|
||||
cmp #'6' ;is it a 1200 baud carrier?
|
||||
beq :setcspd ;yes
|
||||
|
||||
ldy #8
|
||||
inx
|
||||
cmp #'7' ;is it a 2400 baud carrier?
|
||||
beq :setcspd
|
||||
|
||||
ldy #16
|
||||
inx
|
||||
cmp #'8' ;is it a 4800 baud carrier?
|
||||
beq :setcspd
|
||||
jmp noRing
|
||||
|
||||
:setcspd sty carrspd
|
||||
stx portspd
|
||||
|
||||
* check for protocol connections
|
||||
lda code2 ; get first char of protocol
|
||||
cmp #'7' ; is it '70'?
|
||||
bne :ring3
|
||||
|
||||
lda code2+1 ; get last character of protocol
|
||||
cmp #'0' ; is it '70'?
|
||||
beq :ring3
|
||||
|
||||
lda #$80
|
||||
sta protocol ; save indicator of a protocol connection
|
||||
ldx #5
|
||||
stx portspd
|
||||
|
||||
********************************
|
||||
:ring3 ldy portspd ;get the speed to open port at
|
||||
jsr setspeed ;set the correct speed
|
||||
|
||||
ldy #5
|
||||
ring4 lda #0 ;let carrier's settle
|
||||
jsr wait
|
||||
dey
|
||||
bne ring4
|
||||
|
||||
jsr clearBuffer ;remove any garbage
|
||||
sec ;we have a connection!
|
||||
rts
|
||||
|
||||
*-------------------------------
|
||||
* clear the input buffer
|
||||
|
||||
clearBuffer
|
||||
lda #Flush_List
|
||||
ldx #>Flush_List
|
||||
ldy #0
|
||||
jmp doext
|
||||
|
||||
* set DTR on GS Serial Port, and hangup if needed
|
||||
*-------------------------------
|
||||
|
||||
hangup lda #$80 ;blow 'em off (hangup)
|
||||
gsdtr sta DTRstate
|
||||
|
||||
lda #DTR_List
|
||||
ldx #>DTR_List
|
||||
ldy #0
|
||||
jmp doext
|
||||
|
||||
* wait routine
|
||||
*-------------------------------
|
||||
|
||||
wait sec ;from apple ][+ ref man - pg 147
|
||||
wait2 pha
|
||||
wait3 sbc #1
|
||||
bne wait3
|
||||
pla
|
||||
sbc #1
|
||||
bne wait2
|
||||
rts
|
||||
|
||||
* Check for carrier using Get_Port_Stat routine
|
||||
*-------------------------------
|
||||
|
||||
getcarr phx
|
||||
phy
|
||||
|
||||
lda #carrlist
|
||||
ldx #>carrlist
|
||||
ldy #0
|
||||
jsr doext
|
||||
|
||||
lda carrbits
|
||||
and cdbyte
|
||||
beq nocarr
|
||||
sec
|
||||
ply
|
||||
plx
|
||||
rts
|
||||
|
||||
nocarr clc
|
||||
ply
|
||||
plx
|
||||
rts
|
||||
|
||||
* send ata to phone
|
||||
*-------------------------------
|
||||
|
||||
answer lda #$80
|
||||
jsr wait
|
||||
|
||||
ldx #$ff
|
||||
answer2 inx
|
||||
lda ansstr,x ;get text
|
||||
beq answer3 ;we are done
|
||||
|
||||
jsr out ;send it
|
||||
bra answer2
|
||||
|
||||
answer3 rts
|
||||
|
||||
* set the rs-232 speed [speed offset in Y]
|
||||
*
|
||||
* 0 = 300 baud
|
||||
* 1 = 1200 baud
|
||||
* 2 = 2400 baud
|
||||
* 3 = 4800 baud
|
||||
* 4 = 9600 baud
|
||||
* 5 = 19200 baud
|
||||
*-------------------------------
|
||||
|
||||
setspeed phx
|
||||
|
||||
ldx carrspd ;find caller speed (x300)
|
||||
stx callspd
|
||||
|
||||
tya ;get y-reg into a-reg
|
||||
bne Try1200
|
||||
lda #<Baud300
|
||||
sta Baudread+1
|
||||
lda #>Baud300
|
||||
sta Baudread+2
|
||||
bra SetBaud
|
||||
|
||||
Try1200 cmp #1
|
||||
bne Try2400
|
||||
lda #<Baud1200
|
||||
sta Baudread+1
|
||||
lda #>Baud1200
|
||||
sta Baudread+2
|
||||
bra SetBaud
|
||||
|
||||
Try2400 cmp #2
|
||||
bne Try4800
|
||||
lda #<Baud2400
|
||||
sta Baudread+1
|
||||
lda #>Baud2400
|
||||
sta Baudread+2
|
||||
bra SetBaud
|
||||
|
||||
Try4800 cmp #3
|
||||
bne Try9600
|
||||
lda #<Baud4800
|
||||
sta Baudread+1
|
||||
lda #>Baud4800
|
||||
sta Baudread+2
|
||||
bra SetBaud
|
||||
|
||||
Try9600 cmp #4
|
||||
bne Try19200
|
||||
lda #<Baud9600
|
||||
sta Baudread+1
|
||||
lda #>Baud9600
|
||||
sta Baudread+2
|
||||
bra SetBaud
|
||||
|
||||
Try19200 lda #<Baud19200
|
||||
sta Baudread+1
|
||||
lda #>Baud19200
|
||||
sta Baudread+2
|
||||
|
||||
SetBaud ldx #$c2
|
||||
ldy #$20
|
||||
jsr doinit
|
||||
|
||||
ldx #0
|
||||
Baudread lda $ffff,x
|
||||
beq Fin_Init
|
||||
jsr out
|
||||
inx
|
||||
bra Baudread
|
||||
|
||||
Fin_Init ldx #0
|
||||
Init_Loop lda Port_Init,x
|
||||
beq donebaud
|
||||
jsr out
|
||||
inx
|
||||
bra Init_Loop
|
||||
|
||||
donebaud lda #Out_Buf
|
||||
ldx #>Out_Buf
|
||||
ldy #0
|
||||
jsr doext
|
||||
|
||||
plx
|
||||
rts
|
||||
|
||||
*-------------------------------
|
||||
* setup interupt routine
|
||||
|
||||
setirq rts
|
||||
|
||||
*-------------------------------
|
||||
* raise dtr
|
||||
|
||||
raisedtr lda #0
|
||||
phx
|
||||
phy
|
||||
|
||||
jsr gsdtr
|
||||
|
||||
ply
|
||||
plx
|
||||
rts
|
||||
|
||||
* globals
|
||||
*-------------------------------
|
||||
|
||||
counthi db 0
|
||||
countlo db 0
|
||||
|
||||
Baud300 hex 01
|
||||
asc '6B'
|
||||
hex 00 ;accept 300 Baud
|
||||
Baud1200 hex 01
|
||||
asc '8B'
|
||||
hex 00 ;accept 1200 Baud
|
||||
Baud2400 hex 01
|
||||
asc '10B'
|
||||
hex 00 ;accept 2400 Baud
|
||||
Baud4800 hex 01
|
||||
asc '12B'
|
||||
hex 00 ;accept 4800 Baud
|
||||
Baud9600 hex 01
|
||||
asc '14B'
|
||||
hex 00 ;accept 9600 Baud
|
||||
Baud19200 hex 01
|
||||
asc '15B'
|
||||
hex 00 ;accept 19200 baud
|
||||
|
||||
Port_Init
|
||||
hex 01
|
||||
asc '0D' ;8 bits
|
||||
hex 01
|
||||
asc '2P' ;no parity
|
||||
hex 01
|
||||
asc 'AD' ;auto-tabbing
|
||||
hex 01
|
||||
asc 'XD' ;no xoff recognition
|
||||
hex 01
|
||||
asc 'FD' ;no find keyboard
|
||||
hex 01
|
||||
asc 'CD' ;no column overflow
|
||||
hex 01
|
||||
asc 'ED' ;echo disabled
|
||||
hex 01
|
||||
asc 'MD' ;no lf masking
|
||||
hex 01
|
||||
asc 'BE' ;buffering enabled
|
||||
hex 01
|
||||
asc 'Z'
|
||||
hex 00 ;no more control characters
|
||||
|
||||
*-------------------------------
|
||||
|
||||
Out_Buf hex 04 ;Parameters to set the
|
||||
hex 13 ;Output buffer
|
||||
da 0
|
||||
adrl Buffer ;Buffer it where
|
||||
da 2 buffer
|
||||
|
||||
*-------------------------------
|
||||
|
||||
carrlist hex 03 ;Parameter list for
|
||||
hex 06 ;detecting carrier drop
|
||||
da 0
|
||||
carrbits da 0 ;Carrier status here
|
||||
|
||||
*-------------------------------
|
||||
|
||||
DTR_List hex 03 ;Parameter list for
|
||||
hex 0b ;setting DTR
|
||||
da 0
|
||||
DTRstate da 0 ;bit 7 effects DTR
|
||||
|
||||
*-------------------------------
|
||||
|
||||
Flush_List hex 02 ;parameter list for flushing input queue
|
||||
hex 14
|
||||
da 0
|
||||
|
||||
*-------------------------------
|
||||
|
||||
code1 ds 2 ;2 byte carrier speed
|
||||
code2 ds 2 ;2 byte protocol format
|
||||
code3 ds 2 ;2 byte connect speed
|
||||
portspd ds 1
|
||||
carrspd ds 1
|
||||
|
||||
Buffer ds $15
|
||||
cdbyte db #$20
|
||||
ansstr asc 'ATA',0d00
|
||||
initstr asc 'ATZ',0d00
|
||||
|
||||
*initstr asc 'ATX1S0=0S2=128&C1&D2&S1&K5E0V0W1M0'0d00
|
||||
|
||||
@@ -0,0 +1,534 @@
|
||||
TR
|
||||
TR ADR
|
||||
*-------------------------------
|
||||
* GS Port Driver Bios - Slot #2
|
||||
* written by Andy Nicholas on July 26, 1987
|
||||
*-------------------------------
|
||||
|
||||
cr equ $0d
|
||||
lf equ $0a
|
||||
slot equ $c2
|
||||
slot1 equ $20
|
||||
|
||||
*-------------------------------
|
||||
|
||||
gsport2 ent
|
||||
|
||||
* Jump Table
|
||||
*-------------------------------
|
||||
|
||||
org $e00
|
||||
|
||||
hex 20 ;serial card slot * 16
|
||||
initspd hex 00
|
||||
|
||||
callspd dfb 0 ;speed of call
|
||||
|
||||
bytcnt dfb 0,0,0
|
||||
|
||||
jmp init
|
||||
jmp ringset
|
||||
jmp ring
|
||||
jmp answerRing
|
||||
jmp hangup
|
||||
jmp inp
|
||||
jmp out
|
||||
jmp getcarr
|
||||
jmp setspeed
|
||||
jmp setirq
|
||||
jmp raisedtr
|
||||
|
||||
doinit jmp $c200
|
||||
doread jmp $c200
|
||||
dowrite jmp $c200
|
||||
dostatus jmp $c200
|
||||
doext jmp $c200
|
||||
|
||||
* init the serial port pascal locations
|
||||
*-------------------------------
|
||||
|
||||
init lda $c20d ;get init address
|
||||
sta doinit+1
|
||||
lda $c20e ;get read address
|
||||
sta doread+1
|
||||
lda $c20f ;get write address
|
||||
sta dowrite+1
|
||||
lda $c210 ;get status address
|
||||
sta dostatus+1
|
||||
lda $c212
|
||||
sta doext+1
|
||||
|
||||
rts
|
||||
|
||||
* input data
|
||||
*-------------------------------
|
||||
|
||||
inp phx ;save x
|
||||
phy
|
||||
ldx slot
|
||||
ldy slot1
|
||||
lda #1
|
||||
jsr dostatus ;is there input ready?
|
||||
bcs :inp2 ;yes, read character
|
||||
|
||||
lda #0
|
||||
clc
|
||||
bra :inp3
|
||||
|
||||
:inp2 ldx slot ;yes, read
|
||||
ldy slot1
|
||||
jsr doread
|
||||
|
||||
sec
|
||||
:inp3 ply
|
||||
plx ;restore & return
|
||||
rts
|
||||
|
||||
* output data
|
||||
*-------------------------------
|
||||
|
||||
out phx ;save x
|
||||
phy ;save y
|
||||
pha ;save a
|
||||
|
||||
:out1 ldx slot ;ready for send?
|
||||
ldy slot1
|
||||
lda #$00
|
||||
jsr dostatus ;ready for send?
|
||||
bcc :out1 ;nope
|
||||
|
||||
pla ;get a
|
||||
ldx slot
|
||||
ldy slot1
|
||||
jsr dowrite ;send it
|
||||
|
||||
ply ;get y
|
||||
plx ;get x
|
||||
rts
|
||||
|
||||
* setup for call
|
||||
*-------------------------------
|
||||
|
||||
ringset jsr hangup
|
||||
|
||||
lda #0 ;let modem reset
|
||||
jsr wait
|
||||
jsr wait
|
||||
|
||||
lda #$00
|
||||
jsr gsdtr
|
||||
|
||||
ldy initspd ;set init speed
|
||||
jsr setspeed
|
||||
|
||||
lda #0 ;slight delay (let modem do init)
|
||||
jsr wait
|
||||
|
||||
ldx #$FF
|
||||
:rset2 inx ;do pre-inc
|
||||
lda initstr,x ;get modem init string
|
||||
beq :rset3 ;we are done
|
||||
|
||||
jsr out ;output
|
||||
bra :rset2 ;loop (Z-bit set after wait)
|
||||
|
||||
:rset3 lda #6
|
||||
sta countlo
|
||||
sta counthi
|
||||
|
||||
:rset4 ldy #$FF
|
||||
:rset5 dey
|
||||
beq :decount
|
||||
|
||||
jsr inp
|
||||
bcc :rset5
|
||||
and #$7f
|
||||
cmp #'0' ;check for "0" result
|
||||
beq :leave
|
||||
jmp :rset5
|
||||
|
||||
:decount dec countlo
|
||||
bne :rset4
|
||||
dec counthi
|
||||
bne :rset4
|
||||
jmp ringset
|
||||
|
||||
:leave jsr inp ;grab the <cr> off the tail end of the "0"
|
||||
bcc :leave
|
||||
|
||||
jsr clearBuffer
|
||||
|
||||
stz bytcnt ;reset byte counter
|
||||
stz bytcnt+1
|
||||
stz bytcnt+2
|
||||
noRing clc
|
||||
rts ;return
|
||||
|
||||
*-------------------------------
|
||||
* test for a ring and handle it
|
||||
|
||||
ring jsr inp ;check for a char
|
||||
bcc noRing ;nope...
|
||||
|
||||
and #$7f ;strip high
|
||||
cmp #'2' ;is it a 'ring'? (numeric)
|
||||
bne notRing ;nope, check for connect messages
|
||||
|
||||
********************************
|
||||
grabCR jsr inp ;grab the <cr> off the tail end of the "2"
|
||||
bcc grabCR
|
||||
|
||||
answerRing jsr answer ;the phone rang, so send 'ATA'
|
||||
|
||||
clc
|
||||
rts
|
||||
|
||||
********************************
|
||||
notRing cmp #'4' ; is it a '40','46','47' or '48'?
|
||||
beq :gotCode
|
||||
cmp #'5' ; is it a '50'?
|
||||
beq :gotCode ; Yes, check for carrier speed
|
||||
jmp noRing
|
||||
|
||||
:gotCode sta code1
|
||||
ldy #1
|
||||
|
||||
:nxtchar jsr inp ; get next character
|
||||
bcc :nxtchar ; it MUST be there
|
||||
|
||||
and #$7f
|
||||
cmp #cr
|
||||
beq :nxtchar
|
||||
|
||||
sta code1+1
|
||||
iny
|
||||
cpy #'6'
|
||||
bne :nxtchar
|
||||
|
||||
ldy #32 ;def = 9600 baud carrier
|
||||
ldx #4
|
||||
|
||||
lda code1 ;get the first code char
|
||||
cmp #'5' ;is it a '50'?
|
||||
bne :not9600 ;if not, then check for other carrier speeds
|
||||
|
||||
lda code1+1
|
||||
cmp #'0'
|
||||
beq :setcspd
|
||||
|
||||
:not9600 ldy #1
|
||||
ldx #0
|
||||
lda code1+1 ;is it a 300 baud carrier?
|
||||
cmp #'0'
|
||||
beq :setcspd ;yes
|
||||
|
||||
ldy #4
|
||||
inx
|
||||
cmp #'6' ;is it a 1200 baud carrier?
|
||||
beq :setcspd ;yes
|
||||
|
||||
ldy #8
|
||||
inx
|
||||
cmp #'7' ;is it a 2400 baud carrier?
|
||||
beq :setcspd
|
||||
|
||||
ldy #16
|
||||
inx
|
||||
cmp #'8' ;is it a 4800 baud carrier?
|
||||
beq :setcspd
|
||||
jmp noRing
|
||||
|
||||
:setcspd sty carrspd
|
||||
stx portspd
|
||||
|
||||
; check for protocol connections
|
||||
ckptrocl lda code2
|
||||
cmp #'7' ; is it '70'?
|
||||
bne :ring3
|
||||
|
||||
lda code2+1 ; get last character of protocol
|
||||
cmp #'0' ; is it '70'?
|
||||
bne :ring3
|
||||
|
||||
ldx #5
|
||||
stx portspd ; save speed to open port at
|
||||
|
||||
********************************
|
||||
:ring3 ldy portspd ;get the speed to open port at
|
||||
jsr setspeed ;set the correct speed
|
||||
|
||||
ldy #5
|
||||
ring4 lda #0 ;let carrier's settle
|
||||
jsr wait
|
||||
dey
|
||||
bne ring4
|
||||
|
||||
jsr clearBuffer ;remove any garbage
|
||||
sec ;we have a connection!
|
||||
rts
|
||||
|
||||
*-------------------------------
|
||||
* clear the input buffer
|
||||
|
||||
clearBuffer
|
||||
lda #Flush_List
|
||||
ldx #>Flush_List
|
||||
ldy #0
|
||||
jmp doext
|
||||
|
||||
* set DTR on GS Serial Port, and hangup if needed
|
||||
*-------------------------------
|
||||
|
||||
hangup lda #$80 ;blow 'em off (hangup)
|
||||
gsdtr sta DTRstate
|
||||
|
||||
lda #DTR_List
|
||||
ldx #>DTR_List
|
||||
ldy #0
|
||||
jmp doext
|
||||
|
||||
* wait routine
|
||||
*-------------------------------
|
||||
|
||||
wait sec ;from apple ][+ ref man - pg 147
|
||||
wait2 pha
|
||||
wait3 sbc #1
|
||||
bne wait3
|
||||
pla
|
||||
sbc #1
|
||||
bne wait2
|
||||
rts
|
||||
|
||||
* Check for carrier using Get_Port_Stat routine
|
||||
*-------------------------------
|
||||
|
||||
getcarr phx
|
||||
phy
|
||||
|
||||
lda #carrlist
|
||||
ldx #>carrlist
|
||||
ldy #0
|
||||
jsr doext
|
||||
|
||||
lda carrbits
|
||||
and cdbyte
|
||||
beq nocarr
|
||||
sec
|
||||
hex 2c ;skip clc
|
||||
|
||||
nocarr clc
|
||||
ply
|
||||
plx
|
||||
rts
|
||||
|
||||
* send ata to phone
|
||||
*-------------------------------
|
||||
|
||||
answer lda #$80
|
||||
jsr wait
|
||||
|
||||
ldx #$ff
|
||||
:answer2 inx
|
||||
lda ansstr,x ;get text
|
||||
beq :answer3 ;we are done
|
||||
|
||||
jsr out ;send it
|
||||
bra :answer2
|
||||
|
||||
:answer3 rts
|
||||
|
||||
* set the rs-232 speed [speed offset in Y]
|
||||
*
|
||||
* 0 = 300 baud
|
||||
* 1 = 1200 baud
|
||||
* 2 = 2400 baud
|
||||
* 3 = 4800 baud
|
||||
* 4 = 9600 baud
|
||||
* 5 = 19200 baud
|
||||
*-------------------------------
|
||||
|
||||
setspeed phx
|
||||
|
||||
ldx carrspd ;find caller speed (x300)
|
||||
stx callspd
|
||||
|
||||
tya ;get y-reg into a-reg
|
||||
bne :Try1200
|
||||
lda #<Baud300
|
||||
sta :Baudread+1
|
||||
lda #>Baud300
|
||||
sta :Baudread+2
|
||||
bra :SetBaud
|
||||
|
||||
:Try1200 cmp #1
|
||||
bne :Try2400
|
||||
lda #<Baud1200
|
||||
sta :Baudread+1
|
||||
lda #>Baud1200
|
||||
sta :Baudread+2
|
||||
bra :SetBaud
|
||||
|
||||
:Try2400 cmp #2
|
||||
bne :Try4800
|
||||
lda #<Baud2400
|
||||
sta :Baudread+1
|
||||
lda #>Baud2400
|
||||
sta :Baudread+2
|
||||
bra :SetBaud
|
||||
|
||||
:Try4800 cmp #3
|
||||
bne :Try9600
|
||||
lda #<Baud4800
|
||||
sta :Baudread+1
|
||||
lda #>Baud4800
|
||||
sta :Baudread+2
|
||||
bra :SetBaud
|
||||
|
||||
:Try9600 cmp #4
|
||||
bne :Try19200
|
||||
lda #<Baud9600
|
||||
sta :Baudread+1
|
||||
lda #>Baud9600
|
||||
sta :Baudread+2
|
||||
bra :SetBaud
|
||||
|
||||
:Try19200 lda #<Baud19200
|
||||
sta :Baudread+1
|
||||
lda #>Baud19200
|
||||
sta :Baudread+2
|
||||
|
||||
:SetBaud ldx slot
|
||||
ldy slot1
|
||||
jsr doinit
|
||||
|
||||
ldx #0
|
||||
:Baudread lda $ffff,x
|
||||
beq Fin_Init
|
||||
jsr out
|
||||
inx
|
||||
bra :Baudread
|
||||
|
||||
Fin_Init ldx #0
|
||||
:Init_Loop lda Port_Init,x
|
||||
beq :donebaud
|
||||
jsr out
|
||||
inx
|
||||
bra :Init_Loop
|
||||
|
||||
:donebaud lda #Out_Buf
|
||||
ldx #>Out_Buf
|
||||
ldy #0
|
||||
jsr doext
|
||||
|
||||
plx
|
||||
rts
|
||||
|
||||
*-------------------------------
|
||||
* setup interupt routine
|
||||
|
||||
setirq rts
|
||||
|
||||
*-------------------------------
|
||||
* raise dtr
|
||||
|
||||
raisedtr lda #0
|
||||
phx
|
||||
phy
|
||||
|
||||
jsr gsdtr
|
||||
|
||||
ply
|
||||
plx
|
||||
rts
|
||||
|
||||
* globals
|
||||
*-------------------------------
|
||||
|
||||
counthi db 0
|
||||
countlo db 0
|
||||
|
||||
Baud300 hex 01
|
||||
asc '6B'
|
||||
hex 00 ;accept 300 Baud
|
||||
Baud1200 hex 01
|
||||
asc '8B'
|
||||
hex 00 ;accept 1200 Baud
|
||||
Baud2400 hex 01
|
||||
asc '10B'
|
||||
hex 00 ;accept 2400 Baud
|
||||
Baud4800 hex 01
|
||||
asc '12B'
|
||||
hex 00 ;accept 4800 Baud
|
||||
Baud9600 hex 01
|
||||
asc '14B'
|
||||
hex 00 ;accept 9600 Baud
|
||||
Baud19200 hex 01
|
||||
asc '15B'
|
||||
hex 00 ;accept 19200 baud
|
||||
|
||||
Port_Init
|
||||
hex 01
|
||||
asc '0D' ;8 bits
|
||||
hex 01
|
||||
asc '2P' ;no parity
|
||||
hex 01
|
||||
asc 'AD' ;auto-tabbing
|
||||
hex 01
|
||||
asc 'XD' ;no xoff recognition
|
||||
hex 01
|
||||
asc 'FD' ;no find keyboard
|
||||
hex 01
|
||||
asc 'CD' ;no column overflow
|
||||
hex 01
|
||||
asc 'ED' ;echo disabled
|
||||
hex 01
|
||||
asc 'MD' ;no lf masking
|
||||
hex 01
|
||||
asc 'BE' ;buffering enabled
|
||||
hex 01
|
||||
asc 'Z'
|
||||
hex 00 ;no more control characters
|
||||
|
||||
*-------------------------------
|
||||
|
||||
Out_Buf hex 04 ;Parameters to set the
|
||||
hex 13 ;Output buffer
|
||||
da 0
|
||||
adrl Buffer ;Buffer it where
|
||||
da 2 buffer
|
||||
|
||||
*-------------------------------
|
||||
|
||||
carrlist hex 03 ;Parameter list for
|
||||
hex 06 ;detecting carrier drop
|
||||
da 0
|
||||
carrbits da 0 Carrier
|
||||
|
||||
*-------------------------------
|
||||
|
||||
DTR_List hex 03 ;Parameter list for
|
||||
hex 0b ;setting DTR
|
||||
da 0
|
||||
DTRstate da 0 bit
|
||||
|
||||
*-------------------------------
|
||||
|
||||
Flush_List hex 02 ;parameter list for flushing input queue
|
||||
hex 14
|
||||
da 0
|
||||
|
||||
*-------------------------------
|
||||
|
||||
code1 ds 2 ;2 byte code returned by modem
|
||||
code2 ds 2
|
||||
code3 ds 2
|
||||
portspd ds 1
|
||||
carrspd ds 1
|
||||
|
||||
Buffer ds $15
|
||||
cdbyte db #$20
|
||||
ansstr asc 'ATA',0d00
|
||||
initstr asc 'ATZ',0d00
|
||||
|
||||
*initstr asc 'ATX1S0=0S2=128&C1&D2&S1&K5E0V0W1M0',0d00
|
||||
|
||||
@@ -0,0 +1,243 @@
|
||||
LST OFF
|
||||
TR
|
||||
TR ADR
|
||||
*--------------------------
|
||||
*Internal Micromodem ][ //e
|
||||
*--------------------------
|
||||
* Date 12/09/86
|
||||
*--------------------------
|
||||
|
||||
rel
|
||||
dsk MODEMS/rel/mm2
|
||||
|
||||
data EQU $c087
|
||||
status EQU $c086
|
||||
cr1 EQU $c086
|
||||
ringin EQU $c085
|
||||
cr2 EQU $c085
|
||||
cr3 EQU $c083
|
||||
|
||||
mm2 ent
|
||||
|
||||
org $b00
|
||||
|
||||
*-------------------------------
|
||||
* jump table
|
||||
|
||||
slot dfb $20 ;serial card slot
|
||||
dfb 0 ;transmit / receive
|
||||
callspd dfb 0 ;speed of call
|
||||
|
||||
bytcnt dfb 0,0,0
|
||||
|
||||
JMP init
|
||||
JMP ringset
|
||||
JMP ring
|
||||
JMP answer
|
||||
JMP hangup
|
||||
JMP inp
|
||||
JMP out
|
||||
JMP chkdcd
|
||||
jmp setspd
|
||||
jmp setirq
|
||||
rts ;raise dtr
|
||||
|
||||
*-------------------------------
|
||||
* init the modem card
|
||||
|
||||
init sei
|
||||
LDX slot ;get slot offset
|
||||
LDA %00000000 ;reset tone/speaker
|
||||
STA cr3,x
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* setup for call
|
||||
|
||||
ringset LDA #0 ;reset time-on
|
||||
STA bytcnt
|
||||
STA bytcnt+1
|
||||
STA bytcnt+2
|
||||
STA carwait ;reset wait flag
|
||||
TAY set ;300 baud
|
||||
JMP setspd
|
||||
|
||||
*-------------------------------
|
||||
* scna for ring and handle it
|
||||
|
||||
ring LDX slot ;get offset
|
||||
BIT carwait ;do they want manual-answer?
|
||||
BMI ring2a ;yep
|
||||
|
||||
LDA ringin,x ;check for ring
|
||||
AND %10000000
|
||||
BNE ring4 ;nothing
|
||||
|
||||
ring2 LDA ringin,x ;wait for ring to clear
|
||||
AND %10000000
|
||||
BEQ ring2
|
||||
|
||||
ring2a LDA %00000011 ;reset uart
|
||||
STA cr1,x
|
||||
LDA %00010101 ;set for 8n1
|
||||
STA cr1,x
|
||||
|
||||
LDA %00000000 ;reset modem
|
||||
STA cr2,x
|
||||
LDA %10001011 ;pick up phone [enable carrier]
|
||||
STA cr2,x
|
||||
|
||||
LDA #$50 ;setup carrier wait time
|
||||
STA carwait
|
||||
|
||||
LDA #$3c ;wait for things to settle
|
||||
JSR wait
|
||||
|
||||
ring3 LDA #0 ;do big wait...
|
||||
JSR wait
|
||||
|
||||
LDA data,x
|
||||
LDA status,x ;reset carrier flag
|
||||
LDA status,x ;do we have carrier?
|
||||
AND %00000100
|
||||
BEQ ring5 ;yep
|
||||
|
||||
DEC carwait ;loop until count is done
|
||||
BNE ring3
|
||||
|
||||
JSR hangup
|
||||
ring4 CLC ;nothing happened
|
||||
RTS
|
||||
|
||||
ring5 LDA #-1 ;reset carrier timing
|
||||
STA carwait
|
||||
SEC
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* send ata to phone
|
||||
|
||||
answer LDA #-1 ;signal we want manual-answer
|
||||
STA carwait
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* hangup phone
|
||||
|
||||
hangup LDX slot ;get offset
|
||||
LDA %00000001
|
||||
STA cr2,x ;hang up phone
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* input data
|
||||
|
||||
inp STX save_x ;save X
|
||||
LDX slot ;get offset
|
||||
LDA status,x ;get status
|
||||
AND %00000001
|
||||
CLC
|
||||
BEQ inp2 ;no data
|
||||
|
||||
LDA data,x ;get data
|
||||
SEC
|
||||
inp2 LDX save_x ;restore & return
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* output data
|
||||
|
||||
out STX save_x ;save x
|
||||
DEC timecnt ;count down bytes per second
|
||||
BNE out1 ;not a seconds worth yet
|
||||
|
||||
PHA
|
||||
LDA callspd ;reset counter
|
||||
ASL
|
||||
ASL
|
||||
ASL ;time count = base.rate * 32
|
||||
ASL
|
||||
ASL
|
||||
STA timecnt
|
||||
PLA
|
||||
|
||||
INC bytcnt ;seconds - at 64 yet?
|
||||
BIT bytcnt
|
||||
BVC out1 ;nope
|
||||
|
||||
LDX #0 ;reset seconds
|
||||
STX bytcnt
|
||||
|
||||
INC bytcnt+1 ;minutes - at 64 yet?
|
||||
BIT bytcnt+1
|
||||
BVC out1 ;nope
|
||||
|
||||
LDX #0 ;reset minutes
|
||||
STX bytcnt+1
|
||||
|
||||
INC bytcnt+2 ;inc hours
|
||||
|
||||
out1 LDX slot
|
||||
|
||||
PHA
|
||||
out2 LDA status,x ;check status
|
||||
AND %00000110
|
||||
BEQ out2 ;loop until ready
|
||||
PLA
|
||||
|
||||
STA data,x ;output byte
|
||||
LDX save_x
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* check for carrier
|
||||
|
||||
chkdcd STX save_x ;dont kill any reg's
|
||||
PHA
|
||||
|
||||
LDX slot
|
||||
LDA status,x ;reset carrier flag
|
||||
LDA status,x ;check carrier
|
||||
AND %00000100
|
||||
CLC
|
||||
BNE chkdcd2 ;opps, no carrier
|
||||
|
||||
SEC ;sec = we have carrier
|
||||
chkdcd2 PLA ;restore & return
|
||||
LDX save_x
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* set the rs-232 speed [speed offset in Y]
|
||||
|
||||
setspd LDA #1 ;find caller speed (x300)
|
||||
STA callspd
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* set up interupts
|
||||
|
||||
setirq rts
|
||||
|
||||
*-------------------------------
|
||||
* wait routine
|
||||
|
||||
wait SEC ;from apple ][+ ref man - pg 147
|
||||
wait2 PHA
|
||||
wait3 SBC #1
|
||||
BNE wait3
|
||||
PLA
|
||||
SBC #1
|
||||
BNE wait2
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* available speeds
|
||||
|
||||
save_x dfb 0
|
||||
|
||||
timecnt dfb 0
|
||||
carwait dfb 0
|
||||
|
||||
asc 'MM2'
|
||||
|
||||
@@ -0,0 +1,357 @@
|
||||
LST OFF
|
||||
TR
|
||||
TR ADR
|
||||
*-------------------------------
|
||||
* Multiple Speed Modem Driver
|
||||
*-------------------------------
|
||||
* 3/18/88 AEN
|
||||
*-------------------------------
|
||||
|
||||
rel
|
||||
dsk MODEMS/rel/multispd
|
||||
|
||||
cr EQU $0d
|
||||
lf EQU $0a
|
||||
|
||||
data equ $c088
|
||||
status equ $c089
|
||||
command equ $c08a
|
||||
control equ $c08b
|
||||
|
||||
initstr equ $10d0
|
||||
ansstr equ $10c0
|
||||
cdbyte equ $10bf
|
||||
|
||||
multispd ent
|
||||
org $b00
|
||||
|
||||
*-------------------------------
|
||||
* jump table
|
||||
|
||||
slot dfb $20 ;serial card slot
|
||||
initspd db 0 ;init speed
|
||||
callspd db 0 ;speed of call
|
||||
|
||||
bytcnt db 0,0,0
|
||||
|
||||
JMP init
|
||||
JMP ringset
|
||||
JMP ring
|
||||
JMP answer
|
||||
JMP hangup
|
||||
JMP inp
|
||||
JMP out
|
||||
JMP chkdcd
|
||||
jmp setspd
|
||||
jmp setirq
|
||||
jmp raisedtr
|
||||
|
||||
*-------------------------------
|
||||
* init the serial card
|
||||
|
||||
init LDA #0 ;reset bytes
|
||||
LDX slot
|
||||
STA status,x ;reset uart
|
||||
STA command,x ;reset command
|
||||
|
||||
clc
|
||||
txa
|
||||
adc #<data
|
||||
sta dataloc+1 ;make into absolute save
|
||||
rts
|
||||
|
||||
*-------------------------------
|
||||
* setup for call
|
||||
|
||||
ringset LDX slot ;get offset
|
||||
LDA #%00000000 ;kill DTR, RTS
|
||||
STA command,x
|
||||
|
||||
LDA #0 ;let modem reset
|
||||
JSR wait
|
||||
|
||||
LDA #%00001011 ;turn on DTR, RTS
|
||||
STA command,x
|
||||
|
||||
sei ;disable ints
|
||||
|
||||
LDY initspd ;set init speed
|
||||
JSR setspd
|
||||
|
||||
LDA data,x ;clear data strobe
|
||||
|
||||
lda #0 ;long delay
|
||||
jsr wait
|
||||
jsr wait
|
||||
|
||||
LDX #-1 ;start at -1
|
||||
rset2 INX do ;pre-inc
|
||||
LDA initstr,x ;get modem init string
|
||||
BEQ rset3 ;we are done
|
||||
|
||||
JSR out ;output
|
||||
|
||||
lda #$80
|
||||
jsr wait
|
||||
jmp rset2 ;loop
|
||||
|
||||
rset3 lda #6
|
||||
sta countlo
|
||||
sta counthi
|
||||
|
||||
rset4 ldy #$FF
|
||||
rset5 dey
|
||||
beq decount
|
||||
|
||||
jsr inp
|
||||
bcc rset5
|
||||
and #$7f
|
||||
cmp #'K' ;check for "OK"
|
||||
beq leave
|
||||
jmp rset5
|
||||
|
||||
decount dec countlo
|
||||
bne rset4
|
||||
dec counthi
|
||||
bne rset4
|
||||
jmp ringset
|
||||
|
||||
leave lda #0
|
||||
sta bytcnt ;reset byte counter
|
||||
sta bytcnt+1
|
||||
sta bytcnt+2
|
||||
clc
|
||||
rts ;return
|
||||
|
||||
jring jmp ringset ;128 byte branches!!
|
||||
|
||||
*-------------------------------
|
||||
* scan for ring and handle it
|
||||
|
||||
ring LDX slot
|
||||
LDA status,x ;do we have carrier?
|
||||
AND cdbyte
|
||||
CLC
|
||||
BNE ring3 ;nope
|
||||
|
||||
LDA data,x ;gobble byte(s)
|
||||
LDA data,x
|
||||
LDA #0 ;reset speed byte
|
||||
STA spdata
|
||||
|
||||
LDY #0 ;set default to 300
|
||||
ring1 JSR setspd
|
||||
|
||||
ring2 LDA status,x ;we still get carrier
|
||||
AND cdbyte
|
||||
BNE jring ;nope
|
||||
|
||||
LDA status,x ;have a char waiting?
|
||||
AND #%00001000
|
||||
BEQ ring2 ;nope, check carrier
|
||||
|
||||
LDA status,x ;check framing
|
||||
AND #%00000010
|
||||
BNE ring4 ;oops, framing error
|
||||
|
||||
LDA data,x ;get byte (no framing error)
|
||||
STA spdata ;save speed data
|
||||
AND #$7f
|
||||
CMP #cr ;is it a return?
|
||||
BEQ ring2a ;yep, we have the speed
|
||||
|
||||
AND #%01110000 ;check for higher speed
|
||||
CMP #%01110000
|
||||
BEQ ring5 ;go to up a notch
|
||||
JMP ring2 ;loop back
|
||||
|
||||
ring2a SEC all ;is well, connect
|
||||
ring3 RTS
|
||||
|
||||
ring4 LDA data,x ;empty uart
|
||||
LDA data,x
|
||||
|
||||
LDA spdata ;get last "legal" byte
|
||||
AND #%11100000 ;check for 300 baud overrun
|
||||
CMP #%11100000
|
||||
BEQ ring5 ;looks like a higher speed
|
||||
|
||||
LDY curspd ;what speed
|
||||
BEQ ring2 ;hmm, cant go below 300
|
||||
|
||||
DEY
|
||||
JMP ring1 ;set new speed, check again
|
||||
|
||||
ring5 LDY curspd ;we at 2400?
|
||||
CPY initspd ;as high as we can go?
|
||||
BEQ ring2 ;yep, cant go any higher
|
||||
|
||||
INY
|
||||
JMP ring1 ;set new speed, up 1 notch
|
||||
|
||||
*-------------------------------
|
||||
* send ata to phone
|
||||
|
||||
answer LDX #0
|
||||
answer2 LDA ansstr,x ;get text
|
||||
BEQ answer3 ;we are donw
|
||||
|
||||
JSR out ;send it
|
||||
|
||||
lda #$80
|
||||
jsr wait
|
||||
|
||||
INX
|
||||
BNE answer2 ;loop
|
||||
|
||||
answer3 RTS
|
||||
|
||||
*-------------------------------
|
||||
* hangup phone
|
||||
|
||||
hangup LDX slot ;get offset
|
||||
LDA #0
|
||||
STA command,x ;hang up phone
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* input data
|
||||
|
||||
inp STX save_x ;save X
|
||||
LDX slot ;get offset
|
||||
LDA status,x ;get status
|
||||
AND #%00001000
|
||||
CLC
|
||||
BEQ inp2 ;no data
|
||||
|
||||
LDA data,x
|
||||
SEC
|
||||
inp2 LDX save_x ;restore & return
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* output data
|
||||
|
||||
out STX save_x ;save x
|
||||
DEC timecnt ;count down 1 section
|
||||
BNE out1
|
||||
|
||||
INC bytcnt ;1 second gone by
|
||||
BIT bytcnt
|
||||
BVC out1
|
||||
|
||||
LDX #0 ;reset seconds
|
||||
STX bytcnt
|
||||
|
||||
INC bytcnt+1 ;1 minute gone by
|
||||
BIT bytcnt+1
|
||||
BVC out1
|
||||
|
||||
LDX #0 ;reset minutes
|
||||
STX bytcnt+1
|
||||
|
||||
INC bytcnt+2 ;1 hour gone by
|
||||
|
||||
out1 LDX slot
|
||||
|
||||
PHA
|
||||
out2 LDA status,x ;check status
|
||||
AND #%00010000
|
||||
BEQ out2 ;loop until ready
|
||||
PLA
|
||||
|
||||
dataloc STA data ;output byte
|
||||
LDX save_x
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* check for carrier
|
||||
|
||||
chkdcd STX save_x ;dont kill any reg's
|
||||
PHA
|
||||
|
||||
LDX slot ;get offset
|
||||
LDA status,x
|
||||
AND cdbyte ;check carrier
|
||||
CLC
|
||||
BNE chkdcd2
|
||||
|
||||
SEC
|
||||
chkdcd2 PLA restore ;all & return
|
||||
LDX save_x
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* set the rs-232 speed [speed offset in Y]
|
||||
|
||||
setspd STY curspd ;save current speed
|
||||
STX save_x
|
||||
LDX slot ;get offset
|
||||
LDA speed,y ;get speed
|
||||
STA control,x ;set speed
|
||||
|
||||
LDA #1 ;find caller speed (x300)
|
||||
STA callspd
|
||||
CPY #0 ;at 300?
|
||||
BEQ setspd3 ;yep
|
||||
|
||||
ASL callspd ;speed = speed * 2
|
||||
setspd2 ASL callspd ;speed = speed * 2
|
||||
DEY
|
||||
BNE setspd2 ;loop until correct speed found
|
||||
|
||||
setspd3 LDX save_x ;restore & return
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* setup interupt routine
|
||||
|
||||
setirq rts
|
||||
|
||||
|
||||
*-------------------------------
|
||||
* turn on dtr/rts
|
||||
|
||||
raisedtr stx save_x
|
||||
ldx slot
|
||||
|
||||
lda #%00001011 ;turn on DTR, RTS
|
||||
sta command,x
|
||||
sei ;re-disable
|
||||
|
||||
ldx save_x
|
||||
rts
|
||||
|
||||
*-------------------------------
|
||||
* wait routine
|
||||
|
||||
wait SEC from ;apple ][+ ref man - pg 147
|
||||
wait2 PHA
|
||||
wait3 SBC #1
|
||||
BNE wait3
|
||||
PLA
|
||||
SBC #1
|
||||
BNE wait2
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* available speeds
|
||||
|
||||
speed dfb %00010110 ;300
|
||||
dfb %00011000 ;1200
|
||||
dfb %00011010 ;2400
|
||||
dfb %00011100 ;4800
|
||||
dfb %00011110 ;9600
|
||||
db %00011111 ;19200
|
||||
|
||||
countlo db 0
|
||||
counthi db 0
|
||||
curspd dfb 0 ;current speed
|
||||
|
||||
timecnt dfb 0 ;1-second counter
|
||||
spdata dfb 0 ;speed data
|
||||
save_x dfb 0
|
||||
;end
|
||||
|
||||
asc 'MultiSpd'
|
||||
|
||||
@@ -0,0 +1,377 @@
|
||||
LST OFF
|
||||
TR
|
||||
TR ADR
|
||||
*-------------------------------
|
||||
* No Carrier Driver
|
||||
*-------------------------------
|
||||
* 3/18/88 AEN
|
||||
*-------------------------------
|
||||
|
||||
rel
|
||||
dsk MODEMS/rel/nocar
|
||||
|
||||
cr equ $0d
|
||||
lf equ $0a
|
||||
|
||||
data equ $c088
|
||||
status equ $c089
|
||||
command equ $c08a
|
||||
control equ $c08b
|
||||
|
||||
initstr equ $10d0 ;location of init string
|
||||
ansstr equ $10c0 ;location of auto-answer string
|
||||
cdbyte equ $10bf ;location of carrier detect mask
|
||||
|
||||
nocar ent
|
||||
org $b00
|
||||
|
||||
*-------------------------------
|
||||
* jump table
|
||||
|
||||
slot dfb $20 ;serial card slot
|
||||
initspd dfb 0
|
||||
callspd dfb 0 ;speed of call
|
||||
|
||||
bytcnt dfb 0,0,0
|
||||
|
||||
JMP init
|
||||
JMP ringset
|
||||
JMP ring
|
||||
JMP answer
|
||||
JMP hangup
|
||||
JMP inp
|
||||
JMP out
|
||||
JMP chkdcd
|
||||
jmp setspd
|
||||
jmp setirq
|
||||
jmp raisedtr
|
||||
|
||||
*-------------------------------
|
||||
* init the serial card
|
||||
|
||||
init LDA #0 ;reset bytes
|
||||
LDX slot
|
||||
STA status,x ;reset uart
|
||||
STA command,x ;reset command
|
||||
|
||||
clc
|
||||
txa
|
||||
adc #<data
|
||||
sta dataloc+1 ;make into absolute save
|
||||
rts
|
||||
|
||||
*-------------------------------
|
||||
* setup for call
|
||||
|
||||
ringset JSR hangup
|
||||
LDA #%00001011 ;turn on DTR, RTS
|
||||
STA command,x
|
||||
|
||||
sei
|
||||
|
||||
LDY initspd ;set init speed
|
||||
JSR setspd
|
||||
|
||||
LDA data,x ;clear data strobe
|
||||
|
||||
rset LDA #0 ;slight delay (let modem do init)
|
||||
JSR wait
|
||||
JSR wait
|
||||
|
||||
JSR chkok ;is modem out there and ready?
|
||||
BCS rset2 ;yep
|
||||
|
||||
LDX #0 ;print modem init string
|
||||
JSR prstr
|
||||
JMP rset
|
||||
|
||||
rset2 LDA #0
|
||||
STA bytcnt ;reset byte counter
|
||||
STA bytcnt+1
|
||||
STA bytcnt+2
|
||||
CLC
|
||||
RTS return
|
||||
|
||||
rset5 JMP ringset ;extend a branch
|
||||
|
||||
*-------------------------------
|
||||
* scan for ring and handle it
|
||||
|
||||
ring LDA #5 ;make sure timer never triggers
|
||||
STA cdcount+2
|
||||
JSR inp ;check for a char
|
||||
BCC ring5 ;nope...
|
||||
|
||||
AND #$7f ;strip high
|
||||
CMP #'3'
|
||||
BEQ rset5 ;no carrier
|
||||
|
||||
LDY #0
|
||||
CMP #'1' ;connect 300
|
||||
BEQ ring3
|
||||
|
||||
INY
|
||||
CMP #'5' ;connect 1200
|
||||
BEQ ring3
|
||||
|
||||
INY
|
||||
CMP #'6' ;connect 2400
|
||||
BEQ ring3
|
||||
|
||||
CMP #'2' ;check for ring
|
||||
CLC
|
||||
BNE ring5 ;nope, nothing
|
||||
|
||||
LDA #0
|
||||
JSR wait ;slight delay
|
||||
JSR wait
|
||||
|
||||
answer LDX #ansstr
|
||||
JSR prstr ;answer the phone
|
||||
CLC
|
||||
RTS
|
||||
|
||||
ring3 JSR setspd ;set the correct speed
|
||||
|
||||
LDY #5
|
||||
ring4 LDA #0 ;let carrier's settle
|
||||
JSR wait
|
||||
DEY
|
||||
BNE ring4
|
||||
|
||||
JSR inp ;gobble extra stuff coming in
|
||||
JSR inp
|
||||
|
||||
LDA #-1 ;set cd status to connected
|
||||
STA cdstat
|
||||
SEC we ;have a connection!
|
||||
ring5 RTS
|
||||
|
||||
*-------------------------------
|
||||
* hangup phone
|
||||
|
||||
hangup LDX slot ;get offset
|
||||
LDA #0
|
||||
STA cdstat
|
||||
STA command,x ;hang up phone
|
||||
JSR wait
|
||||
CLC *** make
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* input data
|
||||
|
||||
inp STX save_y ;save X
|
||||
INC cdcount
|
||||
BNE inp2
|
||||
INC cdcount+1 ;count up tries
|
||||
BNE inp2 ;all is still ok
|
||||
|
||||
DEC cdcount+2 ;count big stuff
|
||||
BNE inp2
|
||||
|
||||
LDA #5 ;reset counter
|
||||
STA cdcount+2
|
||||
|
||||
JSR chkok ;is modem out there?
|
||||
BCC inp2 ;nope, it isnt, must be user
|
||||
|
||||
LDX #0 ;we have lost CD
|
||||
STX cdstat
|
||||
|
||||
inp2 LDX slot ;get offset
|
||||
LDA status,x ;get status
|
||||
AND #%00001000
|
||||
CLC
|
||||
BEQ inp3 ;no data
|
||||
|
||||
LDA #-1
|
||||
STA cdstat ;reset status & counter
|
||||
LDA #0
|
||||
STA cdcount
|
||||
STA cdcount+1
|
||||
LDA #5
|
||||
STA cdcount+2
|
||||
|
||||
LDA data,x ;get data
|
||||
CMP #28 ;kill connection?
|
||||
SEC
|
||||
BNE inp3 ;nope
|
||||
|
||||
LDX #1
|
||||
STX cdcount+2 ;reset counter
|
||||
|
||||
inp3 LDX save_y ;restore & return
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* output data
|
||||
|
||||
out STX save_x ;save x
|
||||
DEC timecnt ;count down 1 section
|
||||
BNE out1
|
||||
|
||||
INC bytcnt ;1 second gone by
|
||||
BIT bytcnt
|
||||
BVC out1
|
||||
|
||||
LDX #0 ;reset seconds
|
||||
STX bytcnt
|
||||
|
||||
INC bytcnt+1 ;1 minute gone by
|
||||
BIT bytcnt+1
|
||||
BVC out1
|
||||
|
||||
LDX #0 ;reset minutes
|
||||
STX bytcnt+1
|
||||
|
||||
INC bytcnt+2 ;1 hour gone by
|
||||
|
||||
out1 LDX slot
|
||||
|
||||
PHA
|
||||
out2 LDA status,x ;check status
|
||||
PHA
|
||||
AND #%00000100
|
||||
BEQ out3 ;no error, all is well
|
||||
|
||||
LDA data,x
|
||||
CMP #28 ;was is loss of carrier?
|
||||
BNE out3 ;nope
|
||||
|
||||
LDA #1 ;set count down for CD loss
|
||||
STA cdcount+2
|
||||
|
||||
out3 PLA
|
||||
AND #%00010000
|
||||
BEQ out2 ;loop until ready
|
||||
PLA
|
||||
|
||||
dataloc STA data ;output byte
|
||||
LDX save_x
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* check for carrier
|
||||
|
||||
chkdcd LDA cdstat
|
||||
PHA
|
||||
ASL
|
||||
PLA
|
||||
EOR #$ff
|
||||
prstr2 RTS
|
||||
|
||||
*-------------------------------
|
||||
* print control string to modem
|
||||
|
||||
prstr LDA initstr,x ;get data byte
|
||||
BEQ prstr2 ;did it work?
|
||||
|
||||
INX
|
||||
JSR out ;output byte
|
||||
CMP #cr
|
||||
BNE prstr
|
||||
|
||||
LDA #0 ;slight pause
|
||||
JSR wait
|
||||
BEQ prstr ;loop (z-bit always set)
|
||||
|
||||
*-------------------------------
|
||||
* check for OK from question
|
||||
|
||||
chkok LDX #atstr ;send an AT
|
||||
JSR prstr
|
||||
|
||||
LDY #250 ;check 250 times
|
||||
chkok2 DEY count ;down
|
||||
CLC
|
||||
BEQ chkok3 ;no OK gotton
|
||||
|
||||
LDA #40 ;delay slightly
|
||||
JSR wait
|
||||
JSR inp
|
||||
BCC chkok2
|
||||
|
||||
CMP #'0' ;check for "0" for OK
|
||||
BNE chkok2
|
||||
LDA #80
|
||||
JSR wait
|
||||
JSR inp ;gobble EOL char
|
||||
SEC we ;have confirmation
|
||||
chkok3 RTS
|
||||
|
||||
*-------------------------------
|
||||
* set the rs-232 speed [speed offset in Y]
|
||||
|
||||
setspd STX save_x
|
||||
LDX slot ;get offset
|
||||
LDA speed,y ;get speed
|
||||
STA control,x ;set speed
|
||||
|
||||
LDA #1 ;find caller speed (x300)
|
||||
STA callspd
|
||||
CPY #0 ;at 300?
|
||||
BEQ setspd3 ;yep
|
||||
|
||||
ASL callspd ;speed = speed * 2
|
||||
setspd2 ASL callspd ;speed = speed * 2
|
||||
DEY
|
||||
BNE setspd2 ;loop until correct speed found
|
||||
|
||||
setspd3 LDX save_x ;restore & return
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* setup interupt routine
|
||||
|
||||
setirq rts
|
||||
|
||||
*-------------------------------
|
||||
* turn on dtr/rts
|
||||
|
||||
raisedtr stx save_x
|
||||
ldx slot
|
||||
|
||||
lda #%00001011 ;turn on DTR, RTS
|
||||
sta command,x
|
||||
sei
|
||||
|
||||
ldx save_x
|
||||
rts
|
||||
|
||||
*-------------------------------
|
||||
* wait routine
|
||||
|
||||
wait SEC from ;apple ][+ ref man - pg 147
|
||||
wait2 PHA
|
||||
wait3 SBC #1
|
||||
BNE wait3
|
||||
PLA
|
||||
SBC #1
|
||||
BNE wait2
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* available speeds
|
||||
|
||||
speed dfb %00010110 ;300
|
||||
dfb %00011000 ;1200
|
||||
dfb %00011010 ;2400
|
||||
dfb %00011100 ;4800
|
||||
dfb %00011110 ;9600
|
||||
dfb %00011111 ;19200
|
||||
|
||||
atstr EQU *-initstr
|
||||
asc 'AT'
|
||||
hex 0808
|
||||
asc ' '
|
||||
hex 08082800
|
||||
|
||||
timecnt dfb 0 ;1-second counter
|
||||
cdstat dfb 0 ;carrier status
|
||||
cdcount dfb 0,0,0 ;loss of cd counter
|
||||
save_x dfb 0
|
||||
save_y dfb 0
|
||||
|
||||
asc 'Nocarrier'
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
LST OFF
|
||||
TR
|
||||
TR ADR
|
||||
*-------------------------------
|
||||
* Date 01/06/87
|
||||
*-------------------------------
|
||||
|
||||
rel
|
||||
dsk MODEMS/rel/nullmdm
|
||||
|
||||
nullmdm ent
|
||||
|
||||
org $b00
|
||||
|
||||
*-------------------------------
|
||||
* jump table
|
||||
|
||||
dfb 0 ;serial card slot
|
||||
dfb 0 ;init modem at?
|
||||
dfb 0 ;speed of call
|
||||
|
||||
bytcnt dfb 0,0,0
|
||||
|
||||
JMP do_rts
|
||||
JMP do_rts
|
||||
JMP ring
|
||||
JMP do_rts
|
||||
JMP do_rts
|
||||
JMP inp
|
||||
JMP out
|
||||
JMP chkdcd
|
||||
jmp do_rts
|
||||
jmp do_rts ; set irq's
|
||||
jmp do_rts ; raise dtr
|
||||
|
||||
; init the serial card
|
||||
do_rts RTS
|
||||
|
||||
; scan for ring and handle it
|
||||
ring CLC
|
||||
RTS
|
||||
|
||||
; input data
|
||||
inp LDA #0
|
||||
CLC
|
||||
RTS
|
||||
|
||||
; output data
|
||||
out INC bytcnt ;do byte-counting
|
||||
BNE out1
|
||||
INC bytcnt+1
|
||||
BNE out1
|
||||
INC bytcnt+2
|
||||
|
||||
out1 RTS
|
||||
|
||||
; check for carrier
|
||||
chkdcd CLC
|
||||
RTS
|
||||
|
||||
asc 'NullModem'
|
||||
|
||||
@@ -0,0 +1,306 @@
|
||||
LST OFF
|
||||
TR
|
||||
TR ADR
|
||||
*-------------------------------
|
||||
* Single Speed External
|
||||
*-------------------------------
|
||||
* 3/19/88 Andrew E. Nicholas
|
||||
*-------------------------------
|
||||
|
||||
rel
|
||||
dsk MODEMS/rel/singlespd
|
||||
|
||||
cr equ $0d
|
||||
lf equ $0a
|
||||
|
||||
data equ $c088
|
||||
status equ $c089
|
||||
command equ $c08a
|
||||
control equ $c08b
|
||||
|
||||
initstr equ $10d0
|
||||
ansstr equ $10c0
|
||||
cdbyte equ $10bf
|
||||
|
||||
singlespd ent
|
||||
org $b00
|
||||
|
||||
*-------------------------------
|
||||
* jump table
|
||||
|
||||
slot dfb $20 ;serial card slot
|
||||
initspd dfb 0 ;transmit / receive
|
||||
callspd dfb 0 ;speed of call
|
||||
|
||||
bytcnt dfb 0,0,0
|
||||
|
||||
JMP init
|
||||
JMP ringset
|
||||
JMP ring
|
||||
JMP answer
|
||||
JMP hangup
|
||||
JMP inp
|
||||
JMP out
|
||||
JMP chkdcd
|
||||
jmp setspd
|
||||
jmp setirq
|
||||
jmp raisedtr
|
||||
|
||||
*-------------------------------
|
||||
* init the serial card
|
||||
|
||||
init LDA #0 ;reset
|
||||
LDX slot
|
||||
STA status,x ;reset uart
|
||||
STA command,x ;reset command
|
||||
|
||||
clc
|
||||
txa
|
||||
adc #<data
|
||||
sta dataloc+1 ;make into absolute save
|
||||
rts
|
||||
|
||||
*-------------------------------
|
||||
* setup for call
|
||||
|
||||
ringset LDX slot ;get offset
|
||||
LDA #%00001011 ;turn on DTR, RTS
|
||||
STA command,x
|
||||
|
||||
sei ;disable ints
|
||||
|
||||
LDY initspd ;set init speed
|
||||
JSR setspd
|
||||
|
||||
LDA data,x ;clear data strobe
|
||||
|
||||
LDA #0 ;long delay
|
||||
JSR wait
|
||||
jsr wait
|
||||
|
||||
LDX #-1 ;start at -1
|
||||
rset2 INX ;do pre-inc
|
||||
lda #$80
|
||||
jsr wait
|
||||
LDA initstr,x ;get modem init string
|
||||
BEQ rset3 ;we are done
|
||||
jmp rset2
|
||||
|
||||
rset3 lda #6
|
||||
sta countlo
|
||||
sta counthi
|
||||
|
||||
rset4 ldy #$FF
|
||||
rset5 dey
|
||||
beq decount
|
||||
|
||||
jsr inp
|
||||
bcc rset5
|
||||
and #$7f
|
||||
cmp #'K' ;check for "OK"
|
||||
beq leave
|
||||
jmp rset5
|
||||
|
||||
decount dec countlo
|
||||
bne rset4
|
||||
dec counthi
|
||||
bne rset4
|
||||
jmp ringset
|
||||
|
||||
leave lda #0
|
||||
sta bytcnt ;reset byte counter
|
||||
sta bytcnt+1
|
||||
sta bytcnt+2
|
||||
clc
|
||||
rts ;return
|
||||
|
||||
*-------------------------------
|
||||
* scan for ring and handle it
|
||||
|
||||
ring LDX slot ;get offset
|
||||
LDA status,x
|
||||
AND cdbyte ;strip out CD byte
|
||||
CLC
|
||||
BNE ring3 ;nothing
|
||||
|
||||
SEC ;we have a connection
|
||||
LDX #5
|
||||
ring2 LDA #0 ;delay before going online
|
||||
JSR wait
|
||||
DEX
|
||||
BNE ring2
|
||||
JSR inp ;gobble extra
|
||||
SEC
|
||||
|
||||
ring3 RTS
|
||||
|
||||
*-------------------------------
|
||||
* send ata to phone
|
||||
|
||||
answer LDX #0
|
||||
answer2 LDA ansstr,x ;get text
|
||||
BEQ answer3 ;we are donw
|
||||
|
||||
JSR out ;send it
|
||||
|
||||
lda #$80 ;delay a little
|
||||
jsr wait
|
||||
|
||||
INX
|
||||
BNE answer2 ;loop
|
||||
|
||||
answer3 RTS
|
||||
|
||||
*-------------------------------
|
||||
* hangup phone
|
||||
|
||||
hangup LDX slot ;get offset
|
||||
LDA #0
|
||||
STA command,x ;hang up phone
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* input data
|
||||
|
||||
inp STX save_x ;save X
|
||||
LDX slot ;get offset
|
||||
LDA status,x ;get status
|
||||
AND #%00001000
|
||||
CLC
|
||||
BEQ inp2 ;no data
|
||||
|
||||
LDA data,x
|
||||
SEC
|
||||
inp2 LDX save_x ;restore & return
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* output data
|
||||
|
||||
out STX save_x ;save x
|
||||
DEC timecnt ;count down bytes per second
|
||||
BNE out1 ;not a seconds worth yet
|
||||
|
||||
PHA
|
||||
LDA callspd ;reset counter
|
||||
ASL
|
||||
ASL
|
||||
ASL ;time count = base.rate * 32
|
||||
ASL
|
||||
ASL
|
||||
STA timecnt
|
||||
PLA
|
||||
|
||||
INC bytcnt ;seconds - at 64 yet?
|
||||
BIT bytcnt
|
||||
BVC out1 ;nope
|
||||
|
||||
LDX #0 ;reset seconds
|
||||
STX bytcnt
|
||||
|
||||
INC bytcnt+1 ;minutes - at 64 yet?
|
||||
BIT bytcnt+1
|
||||
BVC out1 ;nope
|
||||
|
||||
LDX #0 ;reset minutes
|
||||
STX bytcnt+1
|
||||
|
||||
INC bytcnt+2 ;inc hours
|
||||
|
||||
out1 LDX slot
|
||||
|
||||
PHA
|
||||
out2 LDA status,x ;check status
|
||||
AND #%00010000
|
||||
BEQ out2 ;loop until ready
|
||||
PLA
|
||||
|
||||
dataloc STA data ;self-modified
|
||||
LDX save_x
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* check for carrier sec = we have carrier
|
||||
|
||||
chkdcd STX save_x ;dont kill any reg's
|
||||
PHA
|
||||
|
||||
LDX slot ;get offset
|
||||
LDA status,x
|
||||
AND cdbyte ;check carrier
|
||||
CLC
|
||||
BNE chkdcd2
|
||||
|
||||
SEC
|
||||
chkdcd2 PLA restore ;all & return
|
||||
LDX save_x
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* set the rs-232 speed [speed offset in Y]
|
||||
|
||||
setspd STX save_x
|
||||
LDX slot ;get offset
|
||||
LDA speed,y ;get speed
|
||||
STA control,x ;set speed
|
||||
|
||||
LDA #1 ;find caller speed (x300)
|
||||
STA callspd
|
||||
CPY #0 ;at 300?
|
||||
BEQ setspd3 ;yep
|
||||
|
||||
ASL callspd ;speed = speed * 2
|
||||
setspd2 ASL callspd ;speed = speed * 2
|
||||
DEY
|
||||
BNE setspd2 ;loop until correct speed found
|
||||
|
||||
setspd3 LDX save_x ;restore & return
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* setup interupt routine
|
||||
|
||||
setirq rts
|
||||
|
||||
*-------------------------------
|
||||
* turn on dtr/rts
|
||||
|
||||
raisedtr stx save_x
|
||||
ldx slot
|
||||
|
||||
lda #%00001011 ;turn on DTR, RTS
|
||||
sta command,x
|
||||
sei ;re-disable
|
||||
|
||||
ldx save_x
|
||||
rts
|
||||
|
||||
*-------------------------------
|
||||
* wait routine
|
||||
|
||||
wait SEC ;from apple ][+ ref man - pg 147
|
||||
wait2 PHA
|
||||
wait3 SBC #1
|
||||
BNE wait3
|
||||
PLA
|
||||
SBC #1
|
||||
BNE wait2
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* available speeds
|
||||
|
||||
speed dfb %00010110 ;300
|
||||
dfb %00011000 ;1200
|
||||
dfb %00011010 ;2400
|
||||
dfb %00011100 ;4800
|
||||
dfb %00011110 ;9600
|
||||
dfb %00011111 ;19200
|
||||
|
||||
countlo db 0
|
||||
counthi db 0
|
||||
save_x dfb 0
|
||||
timecnt dfb 0
|
||||
|
||||
asc 'SingleSpd'
|
||||
|
||||
@@ -0,0 +1,329 @@
|
||||
TR
|
||||
TR ADR
|
||||
*-------------------------------
|
||||
* USRobotics HST 19200 Super Serial driver for acos
|
||||
* written by Andy Nicholas on one cold january night
|
||||
*-------------------------------
|
||||
|
||||
rel
|
||||
dsk rel/ssc.hst
|
||||
org $0b00
|
||||
|
||||
cr equ $0d
|
||||
lf equ $0a
|
||||
|
||||
data equ $c088
|
||||
status equ $c089
|
||||
command equ $c08a
|
||||
control equ $c08b
|
||||
|
||||
initstr equ $10d0
|
||||
ansstr equ $10c0
|
||||
cdbyte equ $10bf
|
||||
|
||||
*-------------------------------
|
||||
|
||||
ssc_hst ent
|
||||
|
||||
* jumptable
|
||||
*-------------------------------
|
||||
|
||||
slot db $20 ;serial card slot*16
|
||||
initspd db 00
|
||||
|
||||
callspd dfb 0 ;speed of call
|
||||
|
||||
bytcnt dfb 0,0,0
|
||||
|
||||
jmp init
|
||||
jmp ringset
|
||||
jmp ring
|
||||
jmp answer
|
||||
jmp hangup
|
||||
jmp inp
|
||||
jmp out
|
||||
jmp chkdcd
|
||||
jmp setspd
|
||||
jmp setirq
|
||||
jmp raisedtr
|
||||
|
||||
* init the serial card
|
||||
*-------------------------------
|
||||
|
||||
init lda #0 ;reset bytes
|
||||
ldx slot
|
||||
sta status,x ;reset uart
|
||||
sta command,x ;reset command
|
||||
|
||||
clc
|
||||
txa
|
||||
adc #<data
|
||||
sta dataloc+1 ;make into absolute save
|
||||
rts
|
||||
|
||||
* setup for call
|
||||
*-------------------------------
|
||||
|
||||
ringset ldx slot ;get offset
|
||||
|
||||
lda #%00000000 ;kill DTR, RTS
|
||||
sta command,x
|
||||
|
||||
lda #0 ;let modem reset
|
||||
jsr wait
|
||||
jsr wait
|
||||
|
||||
lda #%00001011 ;turn on DTR, RTS
|
||||
sta command,x
|
||||
|
||||
sei
|
||||
|
||||
ldy initspd ;set init speed
|
||||
jsr setspd
|
||||
|
||||
lda data,x ;clear data strobe
|
||||
|
||||
lda #0 ;slight delay (let modem do init)
|
||||
jsr wait
|
||||
|
||||
ldx #0
|
||||
loop lda initstr,x ;get modem init string
|
||||
beq rset3
|
||||
jsr out ;output
|
||||
inx
|
||||
bne loop
|
||||
|
||||
rset3 lda #6
|
||||
sta countlo
|
||||
sta counthi
|
||||
|
||||
rset4 ldy #$FF
|
||||
rset5 dey
|
||||
beq decount
|
||||
|
||||
jsr inp
|
||||
bcc rset5
|
||||
and #$7f
|
||||
cmp #'K' ;check for "OK"
|
||||
beq leave
|
||||
jmp rset5
|
||||
|
||||
decount dec countlo
|
||||
bne rset4
|
||||
dec counthi
|
||||
bne rset4
|
||||
jmp ringset
|
||||
|
||||
leave lda #0
|
||||
sta bytcnt ;reset byte counter
|
||||
sta bytcnt+1
|
||||
sta bytcnt+2
|
||||
clc
|
||||
rts return
|
||||
|
||||
jring jmp ringset ;extend branch to ringset
|
||||
|
||||
* scan for ring and handle it
|
||||
*-------------------------------
|
||||
|
||||
ring jsr inp ;check for a char
|
||||
bcc ring5 ;nope...
|
||||
|
||||
and #$7f ;strip high
|
||||
cmp #'E'
|
||||
clc
|
||||
bne ring5 ;keep checking
|
||||
|
||||
ring2 jsr inp ;check for char
|
||||
bcc ring2
|
||||
|
||||
ldy #0 ;def = 300 baud
|
||||
and #$7f ;strip high
|
||||
|
||||
cmp #'R' ;oops, "No Carrier" message
|
||||
beq jring
|
||||
|
||||
cmp #cr ;connect 300
|
||||
beq ring3
|
||||
|
||||
cmp #'3' ;connect 300
|
||||
beq ring3
|
||||
|
||||
iny
|
||||
cmp #'1' ;connect 1200
|
||||
beq ring3
|
||||
|
||||
iny
|
||||
cmp #'2' ;connect 2400
|
||||
beq ring3
|
||||
|
||||
iny
|
||||
cmp #'4' ;connect 4800
|
||||
beq ring3
|
||||
|
||||
iny
|
||||
cmp #'9' ;connect 9600
|
||||
bne ring2
|
||||
|
||||
ring3 jsr setspd ;set the correct speed
|
||||
|
||||
ldy #5
|
||||
ring4 lda #0 ;let carrier's settle
|
||||
jsr wait
|
||||
dey
|
||||
bne ring4
|
||||
|
||||
sec we ;have a connection!
|
||||
ring5 rts
|
||||
|
||||
* send ata to phone
|
||||
*-------------------------------
|
||||
|
||||
answer ldx #0
|
||||
answer2 lda ansstr,x ;get text
|
||||
beq answer3 ;we are done
|
||||
|
||||
jsr out ;send it
|
||||
inx
|
||||
bne answer2 ;loop
|
||||
|
||||
answer3 rts
|
||||
|
||||
* hangup phone
|
||||
*-------------------------------
|
||||
|
||||
hangup ldx slot ;get offset
|
||||
lda #0
|
||||
sta command,x ;hang up phone
|
||||
rts
|
||||
|
||||
* input data
|
||||
*-------------------------------
|
||||
|
||||
inp stx save_x ;save X
|
||||
ldx slot ;get offset
|
||||
lda status,x ;get status
|
||||
and #%00001000
|
||||
clc
|
||||
beq inp2 ;no data
|
||||
|
||||
lda data,x
|
||||
sec
|
||||
inp2 ldx save_x ;restore & return
|
||||
rts
|
||||
|
||||
* output data
|
||||
*-------------------------------
|
||||
|
||||
out stx save_x ;save x
|
||||
dec timecnt ;count down 1 section
|
||||
bne out1
|
||||
|
||||
inc bytcnt ;1 second gone by
|
||||
bit bytcnt
|
||||
bvc out1
|
||||
|
||||
ldx #0 ;reset seconds
|
||||
stx bytcnt
|
||||
|
||||
inc bytcnt+1 ;1 minute gone by
|
||||
bit bytcnt+1
|
||||
bvc out1
|
||||
|
||||
ldx #0 ;reset minutes
|
||||
stx bytcnt+1
|
||||
|
||||
inc bytcnt+2 ;1 hour gone by
|
||||
|
||||
out1 ldx slot
|
||||
|
||||
pha
|
||||
out2 lda status,x ;check status
|
||||
and #%00010000
|
||||
beq out2 ;loop until ready
|
||||
pla
|
||||
|
||||
dataloc sta data ;self modified
|
||||
ldx save_x
|
||||
rts
|
||||
|
||||
* check for carrier
|
||||
*-------------------------------
|
||||
|
||||
chkdcd stx save_x ;dont kill any reg's
|
||||
pha
|
||||
|
||||
ldx slot ;get offset
|
||||
lda status,x
|
||||
and cdbyte ;check carrier
|
||||
clc
|
||||
bne chkdcd2
|
||||
|
||||
sec
|
||||
chkdcd2 pla restore ;all & return
|
||||
ldx save_x
|
||||
rts
|
||||
|
||||
* set the rs232 speed/19200 always
|
||||
*-------------------------------
|
||||
|
||||
setspd stx save_x
|
||||
ldx slot ;get offset
|
||||
lda speed ;get speed
|
||||
sta control,x ;set speed
|
||||
|
||||
lda #1 ;find caller speed (x300)
|
||||
sta callspd
|
||||
cpy #0 ;at 300?
|
||||
beq setspd3 ;yep
|
||||
|
||||
asl callspd ;speed = speed * 2
|
||||
setspd2 asl callspd ;speed = speed * 2
|
||||
dey
|
||||
bne setspd2 ;loop until correct speed found
|
||||
|
||||
setspd3 ldx save_x ;restore & return
|
||||
rts
|
||||
|
||||
*-------------------------------
|
||||
* setup interupt routine
|
||||
|
||||
setirq rts
|
||||
|
||||
*-------------------------------
|
||||
* turn on dtr/rts
|
||||
|
||||
raisedtr stx save_x
|
||||
ldx slot
|
||||
|
||||
lda #%00001011 ;turn on DTR, RTS
|
||||
sta command,x
|
||||
sei ;re-disable interrupts
|
||||
|
||||
ldx save_x
|
||||
rts
|
||||
|
||||
* wait routine
|
||||
*-------------------------------
|
||||
|
||||
wait sec ;from apple ][+ ref man - pg 147
|
||||
wait2 pha
|
||||
wait3 sbc #1
|
||||
bne wait3
|
||||
pla
|
||||
sbc #1
|
||||
bne wait2
|
||||
rts
|
||||
|
||||
* global data area
|
||||
*-------------------------------
|
||||
|
||||
speed hex 1F ;19200b all we have to worry about
|
||||
|
||||
timecnt dfb 0 ;1-second counter
|
||||
save_x dfb 0
|
||||
countlo dfb $FF
|
||||
counthi dfb $FF
|
||||
|
||||
asc 'SSC/HST'
|
||||
|
||||
@@ -0,0 +1,380 @@
|
||||
TR
|
||||
TR ADR
|
||||
*-------------------------------
|
||||
* Numeric SSC driver rewritten by Andy Nicholas
|
||||
* October 27, 1988
|
||||
*-------------------------------
|
||||
|
||||
rel
|
||||
dsk rel/ssc.numeric
|
||||
|
||||
cr equ $0d
|
||||
lf equ $0a
|
||||
|
||||
data equ $c088
|
||||
status equ $c089
|
||||
command equ $c08a
|
||||
control equ $c08b
|
||||
|
||||
initstr equ $10d0
|
||||
ansstr equ $10c0
|
||||
cdbyte equ $10bf
|
||||
|
||||
*-------------------------------
|
||||
|
||||
ssc_numeric ent
|
||||
|
||||
org $b00
|
||||
|
||||
* jump table
|
||||
*-------------------------------
|
||||
|
||||
slot hex 20 ;serial card slot*16
|
||||
initspd hex 00
|
||||
|
||||
callspd dfb 0 ;speed of call
|
||||
|
||||
bytcnt dfb 0,0,0
|
||||
|
||||
jmp init
|
||||
jmp ringset
|
||||
jmp ring
|
||||
jmp answerRing
|
||||
jmp hangup
|
||||
jmp inp
|
||||
jmp out
|
||||
jmp chkdcd
|
||||
jmp setspd
|
||||
jmp setirq
|
||||
jmp raisedtr
|
||||
|
||||
* init the serial card
|
||||
*-------------------------------
|
||||
|
||||
init lda #0 ;reset bytes
|
||||
ldx slot
|
||||
sta status,x ;reset uart
|
||||
sta command,x ;reset command
|
||||
|
||||
clc
|
||||
txa
|
||||
adc #<data
|
||||
sta dataloc+1 ;make into absolute save
|
||||
rts
|
||||
|
||||
* setup for call
|
||||
*-------------------------------
|
||||
|
||||
ringset ldx slot ;get offset
|
||||
|
||||
lda #%00000000 ;kill DTR, RTS
|
||||
sta command,x
|
||||
|
||||
lda #0 ;let modem reset
|
||||
jsr wait
|
||||
jsr wait
|
||||
|
||||
lda #%00001011 ;turn on DTR, RTS
|
||||
sta command,x
|
||||
|
||||
sei
|
||||
|
||||
ldy initspd ;set init speed
|
||||
jsr setspd
|
||||
|
||||
lda data,x ;clear data strobe
|
||||
|
||||
lda #0 ;slight delay (let modem do init)
|
||||
jsr wait
|
||||
|
||||
ldx #0
|
||||
:loop lda #$80
|
||||
jsr wait
|
||||
lda initstr,x ;get modem init string
|
||||
beq rset3
|
||||
jsr out ;output
|
||||
inx
|
||||
bne :loop
|
||||
|
||||
rset3 lda #6
|
||||
sta countlo
|
||||
sta counthi
|
||||
|
||||
rset4 ldy #$FF
|
||||
rset5 dey
|
||||
beq decount
|
||||
|
||||
jsr inp
|
||||
bcc rset5
|
||||
and #$7f
|
||||
cmp #'0' ;check for "OK" (numeric)
|
||||
beq leave
|
||||
jmp rset5
|
||||
|
||||
decount dec countlo
|
||||
bne rset4
|
||||
dec counthi
|
||||
bne rset4
|
||||
jmp ringset
|
||||
|
||||
leave lda #0
|
||||
sta bytcnt ;reset byte counter
|
||||
sta bytcnt+1
|
||||
sta bytcnt+2
|
||||
clc
|
||||
rts return
|
||||
|
||||
jring jmp ringset ;extend branch to ringset
|
||||
|
||||
* scan for ring and handle it
|
||||
*-------------------------------
|
||||
|
||||
ring jsr inp ;check for a char
|
||||
bcc noring ;nope...
|
||||
|
||||
and #$7f ;strip high
|
||||
cmp #'2' ;is it a 'ring'? (numeric)
|
||||
bne notRing ;nope, check for connect messages
|
||||
|
||||
********************************
|
||||
grabCR jsr inp ;grab the <cr> off the tail end of the "2"
|
||||
bcc grabCR
|
||||
|
||||
answerRing jsr answer ;the phone rang, so send 'ATA'
|
||||
|
||||
clc
|
||||
rts
|
||||
|
||||
********************************
|
||||
notRing
|
||||
cmp #'1' ;is it a '1' or '10' or '11' or '12' or '14'?
|
||||
beq gotCode ;yes, save it
|
||||
cmp #'5' ;is it connect 1200?
|
||||
bne noring ;nope
|
||||
|
||||
gotCode sta code
|
||||
|
||||
secondChar jsr inp ;second character will ALWAYS be there
|
||||
bcc secondChar
|
||||
|
||||
and #$7f ;strip high
|
||||
cmp #cr ;but might be a <cr>
|
||||
bne multiCode
|
||||
|
||||
********************************
|
||||
singleCode ldy #0 ;connect 300?
|
||||
lda code
|
||||
cmp #'1'
|
||||
beq ring3
|
||||
|
||||
iny
|
||||
cmp #'5' ;connect 1200?
|
||||
beq ring3 ;nope, unknown code, keep checking
|
||||
jmp noring
|
||||
|
||||
********************************
|
||||
multiCode
|
||||
sta code+1
|
||||
|
||||
ldy #2 ;def = 2400 baud
|
||||
|
||||
lda code ;get the first code char
|
||||
cmp #'1' ;must be a one
|
||||
bne noring ;if not, then keep trying
|
||||
|
||||
lda code+1 ;is it 2400?
|
||||
cmp #'0'
|
||||
beq ring3
|
||||
|
||||
iny
|
||||
cmp #'1' ;is it 4800?
|
||||
beq ring3
|
||||
|
||||
iny
|
||||
cmp #'2' ;is it 9600
|
||||
beq ring3
|
||||
|
||||
iny
|
||||
cmp #'4' ;is it 19200?
|
||||
beq ring3
|
||||
jmp noring
|
||||
|
||||
********************************
|
||||
ring3 jsr setspd ;set the correct speed
|
||||
|
||||
ldy #5
|
||||
ring4 lda #0 ;let carrier's settle
|
||||
jsr wait
|
||||
dey
|
||||
bne ring4
|
||||
|
||||
sec ;we have a connection!
|
||||
rts
|
||||
|
||||
noring clc
|
||||
rts
|
||||
|
||||
* send ata to phone
|
||||
*-------------------------------
|
||||
|
||||
answer lda #$80
|
||||
jsr wait
|
||||
|
||||
ldx #0
|
||||
answer2 lda ansstr,x ;get text
|
||||
beq answer3 ;we are done
|
||||
|
||||
jsr out ;send it
|
||||
|
||||
lda #$80
|
||||
jsr wait
|
||||
|
||||
inx
|
||||
bne answer2 ;loop
|
||||
|
||||
answer3 rts
|
||||
|
||||
* hangup phone
|
||||
*-------------------------------
|
||||
|
||||
hangup ldx slot ;get offset
|
||||
lda #0
|
||||
sta command,x ;hang up phone
|
||||
rts
|
||||
|
||||
* input data
|
||||
*-------------------------------
|
||||
|
||||
inp stx save_x ;save X
|
||||
ldx slot ;get offset
|
||||
lda status,x ;get status
|
||||
and #%00001000
|
||||
clc
|
||||
beq inp2 ;no data
|
||||
|
||||
lda data,x
|
||||
sec
|
||||
inp2 ldx save_x ;restore & return
|
||||
rts
|
||||
|
||||
* output data
|
||||
*-------------------------------
|
||||
|
||||
out stx save_x ;save x
|
||||
dec timecnt ;count down 1 section
|
||||
bne out1
|
||||
|
||||
inc bytcnt ;1 second gone by
|
||||
bit bytcnt
|
||||
bvc out1
|
||||
|
||||
ldx #0 ;reset seconds
|
||||
stx bytcnt
|
||||
|
||||
inc bytcnt+1 ;1 minute gone by
|
||||
bit bytcnt+1
|
||||
bvc out1
|
||||
|
||||
ldx #0 ;reset minutes
|
||||
stx bytcnt+1
|
||||
|
||||
inc bytcnt+2 ;1 hour gone by
|
||||
|
||||
out1 ldx slot
|
||||
|
||||
pha
|
||||
out2 lda status,x ;check status
|
||||
and #%00010000
|
||||
beq out2 ;loop until ready
|
||||
pla
|
||||
|
||||
dataloc sta data ;self modified
|
||||
ldx save_x
|
||||
rts
|
||||
|
||||
* check for carrier
|
||||
*-------------------------------
|
||||
|
||||
chkdcd stx save_x ;dont kill any reg's
|
||||
pha
|
||||
|
||||
ldx slot ;get offset
|
||||
lda status,x
|
||||
and cdbyte ;check carrier
|
||||
clc
|
||||
bne chkdcd2
|
||||
|
||||
sec
|
||||
chkdcd2 pla restore ;all & return
|
||||
ldx save_x
|
||||
rts
|
||||
|
||||
* set the rs-232 speed/speed in Y reg
|
||||
*-------------------------------
|
||||
|
||||
setspd stx save_x
|
||||
ldx slot ;get offset
|
||||
lda speed,y ;get speed
|
||||
sta control,x ;set speed
|
||||
|
||||
lda #1 ;find caller speed (x300)
|
||||
sta callspd
|
||||
cpy #0 ;at 300?
|
||||
beq setspd3 ;yep
|
||||
|
||||
asl callspd ;speed = speed * 2
|
||||
setspd2 asl callspd ;speed = speed * 2
|
||||
dey
|
||||
bne setspd2 ;loop until correct speed found
|
||||
|
||||
setspd3 ldx save_x ;restore & return
|
||||
rts
|
||||
|
||||
*-------------------------------
|
||||
* setup interupt routine
|
||||
|
||||
setirq rts
|
||||
|
||||
|
||||
*-------------------------------
|
||||
* turn on dtr/rts
|
||||
|
||||
raisedtr stx save_x
|
||||
ldx slot
|
||||
|
||||
lda #%00001011 ;turn on DTR, RTS
|
||||
sta command,x
|
||||
sei
|
||||
|
||||
ldx save_x
|
||||
rts
|
||||
|
||||
* wait routine
|
||||
*-------------------------------
|
||||
|
||||
wait sec
|
||||
wait2 pha
|
||||
wait3 sbc #1
|
||||
bne wait3
|
||||
pla
|
||||
sbc #1
|
||||
bne wait2
|
||||
rts
|
||||
|
||||
* global data area
|
||||
*-------------------------------
|
||||
|
||||
speed dfb %00010110 ;300
|
||||
dfb %00011000 ;1200
|
||||
dfb %00011010 ;2400
|
||||
dfb %00011100 ;4800
|
||||
dfb %00011110 ;9600
|
||||
dfb %00011111 ;19200
|
||||
|
||||
timecnt dfb 0 ;1-second counter
|
||||
save_x dfb 0
|
||||
countlo dfb $FF
|
||||
counthi dfb $FF
|
||||
code ds 2 ;the code we got from the modem
|
||||
asc 'SSC/Numeric'
|
||||
|
||||
@@ -0,0 +1,383 @@
|
||||
LST OFF
|
||||
TR
|
||||
TR ADR
|
||||
*-------------------------------
|
||||
* Numeric SSC driver rewritten by Andy Nicholas
|
||||
* October 27, 1988
|
||||
*-------------------------------
|
||||
|
||||
rel
|
||||
dsk MODEMS/rel/ssc
|
||||
|
||||
cr equ $0d
|
||||
lf equ $0a
|
||||
|
||||
data equ $c088
|
||||
status equ $c089
|
||||
command equ $c08a
|
||||
control equ $c08b
|
||||
|
||||
initstr equ $10d0
|
||||
ansstr equ $10c0
|
||||
cdbyte equ $10bf
|
||||
|
||||
*-------------------------------
|
||||
|
||||
ssc ent
|
||||
|
||||
org $b00
|
||||
|
||||
* jump table
|
||||
*-------------------------------
|
||||
|
||||
slot hex 20 ;serial card slot*16
|
||||
initspd hex 00
|
||||
|
||||
callspd dfb 0 ;speed of call
|
||||
|
||||
bytcnt dfb 0,0,0
|
||||
|
||||
jmp init
|
||||
jmp ringset
|
||||
jmp ring
|
||||
jmp answerRing
|
||||
jmp hangup
|
||||
jmp inp
|
||||
jmp out
|
||||
jmp chkdcd
|
||||
jmp setspd
|
||||
jmp setirq
|
||||
jmp raisedtr
|
||||
|
||||
* init the serial card
|
||||
*-------------------------------
|
||||
|
||||
init lda #0 ;reset bytes
|
||||
ldx slot
|
||||
sta status,x ;reset uart
|
||||
sta command,x ;reset command
|
||||
|
||||
clc
|
||||
txa
|
||||
adc #<data
|
||||
sta dataloc+1 ;make into absolute save
|
||||
rts
|
||||
|
||||
* setup for call
|
||||
*-------------------------------
|
||||
|
||||
ringset ldx slot ;get offset
|
||||
|
||||
lda #%00000000 ;kill DTR, RTS
|
||||
sta command,x
|
||||
|
||||
lda #0 ;let modem reset
|
||||
jsr wait
|
||||
jsr wait
|
||||
|
||||
lda #%00001011 ;turn on DTR, RTS
|
||||
sta command,x
|
||||
|
||||
sei
|
||||
|
||||
ldy initspd ;set init speed
|
||||
jsr setspd
|
||||
|
||||
lda data,x ;clear data strobe
|
||||
|
||||
lda #0 ;slight delay (let modem do init)
|
||||
jsr wait
|
||||
|
||||
ldx #0
|
||||
:loop lda #$80
|
||||
jsr wait
|
||||
lda initstr,x ;get modem init string
|
||||
beq rset3
|
||||
jsr out ;output
|
||||
inx
|
||||
bne :loop
|
||||
|
||||
rset3 lda #6
|
||||
sta countlo
|
||||
sta counthi
|
||||
|
||||
rset4 ldy #$FF
|
||||
rset5 dey
|
||||
beq decount
|
||||
|
||||
jsr inp
|
||||
bcc rset5
|
||||
and #$7f
|
||||
cmp #'0' ;check for "OK" (numeric)
|
||||
beq leave
|
||||
jmp rset5
|
||||
|
||||
decount dec countlo
|
||||
bne rset4
|
||||
dec counthi
|
||||
bne rset4
|
||||
jmp ringset
|
||||
|
||||
leave jsr inp ;grab the <cr> off the tail end of the "0"
|
||||
bcc leave
|
||||
|
||||
lda #0
|
||||
sta bytcnt ;reset byte counter
|
||||
sta bytcnt+1
|
||||
sta bytcnt+2
|
||||
clc
|
||||
rts return
|
||||
|
||||
jring jmp ringset ;extend branch to ringset
|
||||
|
||||
* scan for ring and handle it
|
||||
*-------------------------------
|
||||
|
||||
ring jsr inp ;check for a char
|
||||
bcc noRing ;nope...
|
||||
|
||||
and #$7f ;strip high
|
||||
cmp #'2' ;is it a 'ring'? (numeric)
|
||||
bne notRing ;nope, check for connect messages
|
||||
|
||||
********************************
|
||||
grabCR jsr inp ;grab the <cr> off the tail end of the "2"
|
||||
bcc grabCR
|
||||
|
||||
answerRing jsr answer ;the phone rang, so send 'ATA'
|
||||
|
||||
clc
|
||||
rts
|
||||
|
||||
********************************
|
||||
notRing
|
||||
cmp #'1' ;is it a '1' or '10' or '11' or '12' or '14'?
|
||||
beq gotCode ;yes, save it
|
||||
cmp #'5' ;is it connect 1200?
|
||||
bne noRing ;nope
|
||||
|
||||
gotCode sta code
|
||||
|
||||
secondChar jsr inp ;second character will ALWAYS be there
|
||||
bcc secondChar
|
||||
|
||||
and #$7f ;strip high
|
||||
cmp #cr ;but might be a <cr>
|
||||
bne multiCode
|
||||
|
||||
********************************
|
||||
singleCode ldy #0 ;connect 300?
|
||||
lda code
|
||||
cmp #'1'
|
||||
beq ring3
|
||||
|
||||
iny
|
||||
cmp #'5' ;connect 1200?
|
||||
beq ring3 ;nope, unknown code, keep checking
|
||||
jmp noRing
|
||||
|
||||
********************************
|
||||
multiCode
|
||||
sta code+1
|
||||
|
||||
ldy #2 ;def = 2400 baud
|
||||
|
||||
lda code ;get the first code char
|
||||
cmp #'1' ;must be a one
|
||||
bne noRing ;if not, then keep trying
|
||||
|
||||
lda code+1 ;is it 2400?
|
||||
cmp #'0'
|
||||
beq ring3
|
||||
|
||||
iny
|
||||
cmp #'1' ;is it 4800?
|
||||
beq ring3
|
||||
|
||||
iny
|
||||
cmp #'2' ;is it 9600
|
||||
beq ring3
|
||||
|
||||
iny
|
||||
cmp #'4' ;is it 19200?
|
||||
beq ring3
|
||||
jmp noRing
|
||||
|
||||
********************************
|
||||
ring3 jsr setspd ;set the correct speed
|
||||
|
||||
ldy #5
|
||||
ring4 lda #0 ;let carrier's settle
|
||||
jsr wait
|
||||
dey
|
||||
bne ring4
|
||||
|
||||
sec ;we have a connection!
|
||||
rts
|
||||
|
||||
noRing clc
|
||||
rts
|
||||
|
||||
* send ata to phone
|
||||
*-------------------------------
|
||||
|
||||
answer lda #$80
|
||||
jsr wait
|
||||
|
||||
ldx #0
|
||||
answer2 lda ansstr,x ;get text
|
||||
beq answer3 ;we are done
|
||||
|
||||
jsr out ;send it
|
||||
|
||||
lda #$80
|
||||
jsr wait
|
||||
|
||||
inx
|
||||
bne answer2 ;loop
|
||||
|
||||
answer3 rts
|
||||
|
||||
* hangup phone
|
||||
*-------------------------------
|
||||
|
||||
hangup ldx slot ;get offset
|
||||
lda #0
|
||||
sta command,x ;hang up phone
|
||||
rts
|
||||
|
||||
* input data
|
||||
*-------------------------------
|
||||
|
||||
inp stx save_x ;save X
|
||||
ldx slot ;get offset
|
||||
lda status,x ;get status
|
||||
and #%00001000
|
||||
clc
|
||||
beq inp2 ;no data
|
||||
|
||||
lda data,x
|
||||
sec
|
||||
inp2 ldx save_x ;restore & return
|
||||
rts
|
||||
|
||||
* output data
|
||||
*-------------------------------
|
||||
|
||||
out stx save_x ;save x
|
||||
dec timecnt ;count down 1 section
|
||||
bne out1
|
||||
|
||||
inc bytcnt ;1 second gone by
|
||||
bit bytcnt
|
||||
bvc out1
|
||||
|
||||
ldx #0 ;reset seconds
|
||||
stx bytcnt
|
||||
|
||||
inc bytcnt+1 ;1 minute gone by
|
||||
bit bytcnt+1
|
||||
bvc out1
|
||||
|
||||
ldx #0 ;reset minutes
|
||||
stx bytcnt+1
|
||||
|
||||
inc bytcnt+2 ;1 hour gone by
|
||||
|
||||
out1 ldx slot
|
||||
|
||||
pha
|
||||
out2 lda status,x ;check status
|
||||
and #%00010000
|
||||
beq out2 ;loop until ready
|
||||
pla
|
||||
|
||||
dataloc sta data ;self modified
|
||||
ldx save_x
|
||||
rts
|
||||
|
||||
* check for carrier
|
||||
*-------------------------------
|
||||
|
||||
chkdcd stx save_x ;dont kill any reg's
|
||||
pha
|
||||
|
||||
ldx slot ;get offset
|
||||
lda status,x
|
||||
and cdbyte ;check carrier
|
||||
clc
|
||||
bne chkdcd2
|
||||
|
||||
sec
|
||||
chkdcd2 pla restore ;all & return
|
||||
ldx save_x
|
||||
rts
|
||||
|
||||
* set the rs-232 speed/speed in Y reg
|
||||
*-------------------------------
|
||||
|
||||
setspd stx save_x
|
||||
ldx slot ;get offset
|
||||
lda speed,y ;get speed
|
||||
sta control,x ;set speed
|
||||
|
||||
lda #1 ;find caller speed (x300)
|
||||
sta callspd
|
||||
cpy #0 ;at 300?
|
||||
beq setspd3 ;yep
|
||||
|
||||
asl callspd ;speed = speed * 2
|
||||
setspd2 asl callspd ;speed = speed * 2
|
||||
dey
|
||||
bne setspd2 ;loop until correct speed found
|
||||
|
||||
setspd3 ldx save_x ;restore & return
|
||||
rts
|
||||
|
||||
*-------------------------------
|
||||
* setup interupt routine
|
||||
|
||||
setirq rts
|
||||
|
||||
*-------------------------------
|
||||
* turn on dtr/rts
|
||||
|
||||
raisedtr stx save_x
|
||||
ldx slot
|
||||
|
||||
lda #%00001011 ;turn on DTR, RTS
|
||||
sta command,x
|
||||
sei
|
||||
|
||||
ldx save_x
|
||||
rts
|
||||
|
||||
* wait routine
|
||||
*-------------------------------
|
||||
|
||||
wait sec
|
||||
wait2 pha
|
||||
wait3 sbc #1
|
||||
bne wait3
|
||||
pla
|
||||
sbc #1
|
||||
bne wait2
|
||||
rts
|
||||
|
||||
* global data area
|
||||
*-------------------------------
|
||||
|
||||
speed dfb %00010110 ;300
|
||||
dfb %00011000 ;1200
|
||||
dfb %00011010 ;2400
|
||||
dfb %00011100 ;4800
|
||||
dfb %00011110 ;9600
|
||||
dfb %00011111 ;19200
|
||||
|
||||
timecnt dfb 0 ;1-second counter
|
||||
save_x dfb 0
|
||||
countlo dfb $FF
|
||||
counthi dfb $FF
|
||||
code ds 2 ;the code we got from the modem
|
||||
asc 'SSC/Numeric'
|
||||
|
||||
@@ -0,0 +1,387 @@
|
||||
|
||||
* Numeric SSC driver rewritten by Andy Nicholas
|
||||
* October 27, 1988
|
||||
*-------------------------------
|
||||
|
||||
rel
|
||||
dsk rel/ssc
|
||||
|
||||
cr equ $0d
|
||||
lf equ $0a
|
||||
|
||||
data equ $c088
|
||||
status equ $c089
|
||||
command equ $c08a
|
||||
control equ $c08b
|
||||
|
||||
initstr equ $10d0
|
||||
ansstr equ $10c0
|
||||
cdbyte equ $10bf
|
||||
|
||||
*-------------------------------
|
||||
|
||||
ssc ent
|
||||
|
||||
org $b00
|
||||
|
||||
* jump table
|
||||
*-------------------------------
|
||||
|
||||
slot hex 20 ;serial card slot*16
|
||||
initspd hex 00
|
||||
|
||||
callspd dfb 0 ;speed of call
|
||||
|
||||
bytcnt dfb 0,0,0
|
||||
|
||||
jmp init
|
||||
jmp ringset
|
||||
jmp ring
|
||||
jmp answerRing
|
||||
jmp hangup
|
||||
jmp inp
|
||||
jmp out
|
||||
jmp chkdcd
|
||||
jmp setspd
|
||||
jmp raisedtr
|
||||
|
||||
* init the serial card
|
||||
*-------------------------------
|
||||
|
||||
init lda #0 ;reset bytes
|
||||
ldx slot
|
||||
sta status,x ;reset uart
|
||||
sta command,x ;reset command
|
||||
|
||||
clc
|
||||
txa
|
||||
adc #<data
|
||||
sta dataloc+1 ;make into absolute save
|
||||
rts
|
||||
|
||||
* setup for call
|
||||
*-------------------------------
|
||||
|
||||
ringset ldx slot ;get offset
|
||||
|
||||
lda #%00000000 ;kill DTR, RTS
|
||||
sta command,x
|
||||
|
||||
lda #0 ;let modem reset
|
||||
jsr wait
|
||||
jsr wait
|
||||
|
||||
lda #%00001011 ;turn on DTR, RTS
|
||||
sta command,x
|
||||
|
||||
sei
|
||||
|
||||
ldy initspd ;set init speed
|
||||
jsr setspd
|
||||
|
||||
lda data,x ;clear data strobe
|
||||
|
||||
lda #0 ;slight delay (let modem do init)
|
||||
jsr wait
|
||||
|
||||
ldx #0
|
||||
:loop lda #$80
|
||||
jsr wait
|
||||
lda initstr,x ;get modem init string
|
||||
beq rset3
|
||||
jsr out ;output
|
||||
inx
|
||||
bne :loop
|
||||
|
||||
rset3 lda #6
|
||||
sta countlo
|
||||
sta counthi
|
||||
|
||||
rset4 ldy #$FF
|
||||
rset5 dey
|
||||
beq decount
|
||||
|
||||
jsr inp
|
||||
bcc rset5
|
||||
and #$7f
|
||||
cmp #'0' ;check for "OK" (numeric)
|
||||
beq leave
|
||||
jmp rset5
|
||||
|
||||
decount dec countlo
|
||||
bne rset4
|
||||
dec counthi
|
||||
bne rset4
|
||||
jmp ringset
|
||||
|
||||
leave jsr inp ;grab the <cr> off the tail end of the "0"
|
||||
bcc leave
|
||||
|
||||
lda #0
|
||||
sta bytcnt ;reset byte counter
|
||||
sta bytcnt+1
|
||||
sta bytcnt+2
|
||||
clc
|
||||
rts return
|
||||
|
||||
jring jmp ringset ;extend branch to ringset
|
||||
|
||||
* scan for ring and handle it
|
||||
*-------------------------------
|
||||
|
||||
ring jsr inp ;check for a char
|
||||
bcc noRing ;nope...
|
||||
|
||||
and #$7f ;strip high
|
||||
cmp #'2' ;is it a 'ring'? (numeric)
|
||||
bne notRing ;nope, check for connect messages
|
||||
|
||||
********************************
|
||||
grabCR jsr inp ;grab the <cr> off the tail end of the "2"
|
||||
bcc grabCR
|
||||
|
||||
answerRing jsr answer ;the phone rang, so send 'ATA'
|
||||
|
||||
clc
|
||||
rts
|
||||
|
||||
********************************
|
||||
notRing
|
||||
cmp #'1' ;is it a '1' or '10' or '11' or '12' or '14'?
|
||||
beq gotCode ;yes, save it
|
||||
cmp #'5' ;is it connect 1200?
|
||||
bne noRing ;nope
|
||||
|
||||
gotCode sta code
|
||||
|
||||
secondChar jsr inp ;second character will ALWAYS be there
|
||||
bcc secondChar
|
||||
|
||||
and #$7f ;strip high
|
||||
cmp #cr ;but might be a <cr>
|
||||
bne multiCode
|
||||
|
||||
********************************
|
||||
singleCode ldy #0 ;connect 300?
|
||||
lda code
|
||||
cmp #'1'
|
||||
beq ring3
|
||||
|
||||
iny
|
||||
cmp #'5' ;connect 1200?
|
||||
beq ring3 ;nope, unknown code, keep checking
|
||||
jmp noRing
|
||||
|
||||
********************************
|
||||
multiCode
|
||||
sta code+1
|
||||
|
||||
ldy #2 ;def = 2400 baud
|
||||
|
||||
lda code ;get the first code char
|
||||
cmp #'1' ;must be a one
|
||||
bne noRing ;if not, then keep trying
|
||||
|
||||
lda code+1 ;is it 2400?
|
||||
cmp #'0'
|
||||
beq ring3
|
||||
|
||||
iny
|
||||
cmp #'1' ;is it 4800?
|
||||
beq ring3
|
||||
|
||||
iny
|
||||
cmp #'2' ;is it 9600
|
||||
beq ring3
|
||||
|
||||
iny
|
||||
cmp #'4' ;is it 19200?
|
||||
beq ring3
|
||||
|
||||
dey
|
||||
cmp #'7' ;is it 9600/ARQ?
|
||||
beq ring3
|
||||
|
||||
dey ;no 4800/arq
|
||||
dey
|
||||
cmp #'6'
|
||||
beq ring3 ;2400/ARQ
|
||||
|
||||
dey
|
||||
cmp #'5' ;1200/ARQ
|
||||
beq ring3
|
||||
|
||||
jmp noRing
|
||||
|
||||
********************************
|
||||
ring3 jsr setspd ;set the correct speed
|
||||
|
||||
ldy #5
|
||||
ring4 lda #0 ;let carrier's settle
|
||||
jsr wait
|
||||
dey
|
||||
bne ring4
|
||||
|
||||
sec ;we have a connection!
|
||||
rts
|
||||
|
||||
noring clc
|
||||
rts
|
||||
|
||||
* send ata to phone
|
||||
*-------------------------------
|
||||
|
||||
answer lda #$80
|
||||
jsr wait
|
||||
|
||||
ldx #0
|
||||
answer2 lda ansstr,x ;get text
|
||||
beq answer3 ;we are done
|
||||
|
||||
jsr out ;send it
|
||||
|
||||
lda #$80
|
||||
jsr wait
|
||||
|
||||
inx
|
||||
bne answer2 ;loop
|
||||
|
||||
answer3 rts
|
||||
|
||||
* hangup phone
|
||||
*-------------------------------
|
||||
|
||||
hangup ldx slot ;get offset
|
||||
lda #0
|
||||
sta command,x ;hang up phone
|
||||
rts
|
||||
|
||||
* input data
|
||||
*-------------------------------
|
||||
|
||||
inp stx save_x ;save X
|
||||
ldx slot ;get offset
|
||||
lda status,x ;get status
|
||||
and #%00001000
|
||||
clc
|
||||
beq inp2 ;no data
|
||||
|
||||
lda data,x
|
||||
sec
|
||||
inp2 ldx save_x ;restore & return
|
||||
rts
|
||||
|
||||
* output data
|
||||
*-------------------------------
|
||||
|
||||
out stx save_x ;save x
|
||||
dec timecnt ;count down 1 section
|
||||
bne out1
|
||||
|
||||
inc bytcnt ;1 second gone by
|
||||
bit bytcnt
|
||||
bvc out1
|
||||
|
||||
ldx #0 ;reset seconds
|
||||
stx bytcnt
|
||||
|
||||
inc bytcnt+1 ;1 minute gone by
|
||||
bit bytcnt+1
|
||||
bvc out1
|
||||
|
||||
ldx #0 ;reset minutes
|
||||
stx bytcnt+1
|
||||
|
||||
inc bytcnt+2 ;1 hour gone by
|
||||
|
||||
out1 ldx slot
|
||||
|
||||
pha
|
||||
out2 lda status,x ;check status
|
||||
and #%00010000
|
||||
beq out2 ;loop until ready
|
||||
pla
|
||||
|
||||
dataloc sta data ;self modified
|
||||
ldx save_x
|
||||
rts
|
||||
|
||||
* check for carrier
|
||||
*-------------------------------
|
||||
|
||||
chkdcd stx save_x ;dont kill any reg's
|
||||
pha
|
||||
|
||||
ldx slot ;get offset
|
||||
lda status,x
|
||||
and cdbyte ;check carrier
|
||||
clc
|
||||
bne chkdcd2
|
||||
|
||||
sec
|
||||
chkdcd2 pla restore ;all & return
|
||||
ldx save_x
|
||||
rts
|
||||
|
||||
* set the rs-232 speed/speed in Y reg
|
||||
*-------------------------------
|
||||
|
||||
setspd stx save_x
|
||||
ldx slot ;get offset
|
||||
lda speed,y ;get speed
|
||||
sta control,x ;set speed
|
||||
|
||||
lda #1 ;find caller speed (x300)
|
||||
sta callspd
|
||||
cpy #0 ;at 300?
|
||||
beq setspd3 ;yep
|
||||
|
||||
asl callspd ;speed = speed * 2
|
||||
setspd2 asl callspd ;speed = speed * 2
|
||||
dey
|
||||
bne setspd2 ;loop until correct speed found
|
||||
|
||||
setspd3 ldx save_x ;restore & return
|
||||
rts
|
||||
|
||||
*-------------------------------
|
||||
* turn on dtr/rts
|
||||
|
||||
raisedtr stx save_x
|
||||
ldx slot
|
||||
|
||||
lda #%00001011 ;turn on DTR, RTS
|
||||
sta command,x
|
||||
sei
|
||||
|
||||
ldx save_x
|
||||
rts
|
||||
|
||||
* wait routine
|
||||
*-------------------------------
|
||||
|
||||
wait sec
|
||||
wait2 pha
|
||||
wait3 sbc #1
|
||||
bne wait3
|
||||
pla
|
||||
sbc #1
|
||||
bne wait2
|
||||
rts
|
||||
|
||||
* global data area
|
||||
*-------------------------------
|
||||
|
||||
speed dfb %00010110 ;300
|
||||
dfb %00011000 ;1200
|
||||
dfb %00011010 ;2400
|
||||
dfb %00011100 ;4800
|
||||
dfb %00011110 ;9600
|
||||
dfb %00011111 ;19200
|
||||
|
||||
timecnt dfb 0 ;1-second counter
|
||||
save_x dfb 0
|
||||
countlo dfb $FF
|
||||
counthi dfb $FF
|
||||
code ds 2 ;the code we got from the modem
|
||||
asc 'SSC/Numeric'
|
||||
@@ -0,0 +1,335 @@
|
||||
TR
|
||||
TR ADR
|
||||
*-------------------------------
|
||||
* USRobotics 2400 driver written by Andy Nicholas
|
||||
* January 19, 1988
|
||||
*-------------------------------
|
||||
|
||||
rel
|
||||
dsk rel/ssc
|
||||
|
||||
cr equ $0d
|
||||
lf equ $0a
|
||||
|
||||
data equ $c088
|
||||
status equ $c089
|
||||
command equ $c08a
|
||||
control equ $c08b
|
||||
|
||||
initstr equ $10d0
|
||||
ansstr equ $10c0
|
||||
cdbyte equ $10bf
|
||||
|
||||
*-------------------------------
|
||||
|
||||
ssc ent
|
||||
|
||||
org $b00
|
||||
|
||||
* jump table
|
||||
*-------------------------------
|
||||
|
||||
slot hex 20 ;serial card slot*16
|
||||
initspd hex 00
|
||||
|
||||
callspd dfb 0 ;speed of call
|
||||
|
||||
bytcnt dfb 0,0,0
|
||||
|
||||
jmp init
|
||||
jmp ringset
|
||||
jmp ring
|
||||
jmp answer
|
||||
jmp hangup
|
||||
jmp inp
|
||||
jmp out
|
||||
jmp chkdcd
|
||||
jmp setspd
|
||||
jmp raisedtr
|
||||
|
||||
* init the serial card
|
||||
*-------------------------------
|
||||
|
||||
init lda #0 ;reset bytes
|
||||
ldx slot
|
||||
sta status,x ;reset uart
|
||||
sta command,x ;reset command
|
||||
|
||||
clc
|
||||
txa
|
||||
adc #<data
|
||||
sta dataloc+1 ;make into absolute save
|
||||
rts
|
||||
|
||||
* setup for call
|
||||
*-------------------------------
|
||||
|
||||
ringset ldx slot ;get offset
|
||||
|
||||
lda #%00000000 ;kill DTR, RTS
|
||||
sta command,x
|
||||
|
||||
lda #0 ;let modem reset
|
||||
jsr wait
|
||||
jsr wait
|
||||
|
||||
lda #%00001011 ;turn on DTR, RTS
|
||||
sta command,x
|
||||
|
||||
sei
|
||||
|
||||
ldy initspd ;set init speed
|
||||
jsr setspd
|
||||
|
||||
lda data,x ;clear data strobe
|
||||
|
||||
lda #0 ;slight delay (let modem do init)
|
||||
jsr wait
|
||||
|
||||
ldx #0
|
||||
:loop lda #$80
|
||||
jsr wait
|
||||
lda initstr,x ;get modem init string
|
||||
beq rset3
|
||||
jsr out ;output
|
||||
inx
|
||||
bne :loop
|
||||
|
||||
rset3 lda #6
|
||||
sta countlo
|
||||
sta counthi
|
||||
|
||||
rset4 ldy #$FF
|
||||
rset5 dey
|
||||
beq decount
|
||||
|
||||
jsr inp
|
||||
bcc rset5
|
||||
and #$7f
|
||||
cmp #'K' ;check for "OK"
|
||||
beq leave
|
||||
jmp rset5
|
||||
|
||||
decount dec countlo
|
||||
bne rset4
|
||||
dec counthi
|
||||
bne rset4
|
||||
jmp ringset
|
||||
|
||||
leave lda #0
|
||||
sta bytcnt ;reset byte counter
|
||||
sta bytcnt+1
|
||||
sta bytcnt+2
|
||||
clc
|
||||
rts return
|
||||
|
||||
jring jmp ringset ;extend branch to ringset
|
||||
|
||||
* scan for ring and handle it
|
||||
*-------------------------------
|
||||
|
||||
ring jsr inp ;check for a char
|
||||
bcc ring5 ;nope...
|
||||
|
||||
and #$7f ;strip high
|
||||
cmp #'E'
|
||||
clc
|
||||
bne ring5 ;keep checking
|
||||
|
||||
ring2 jsr inp ;check for char
|
||||
bcc ring2
|
||||
|
||||
ldy #0 ;def = 300 baud
|
||||
and #$7f ;strip high
|
||||
|
||||
cmp #'R' ;oops, "No Carrier" message
|
||||
beq jring
|
||||
|
||||
cmp #cr ;connect 300
|
||||
beq ring3
|
||||
|
||||
cmp #'3' ;connect 300
|
||||
beq ring3
|
||||
|
||||
iny
|
||||
cmp #'1' ;connect 1200
|
||||
beq ring3
|
||||
|
||||
iny
|
||||
cmp #'2' ;connect 2400
|
||||
beq ring3
|
||||
|
||||
iny
|
||||
cmp #'4' ;connect 4800
|
||||
beq ring3
|
||||
|
||||
iny
|
||||
cmp #'9' ;connect 9600
|
||||
bne ring2
|
||||
|
||||
ring3 jsr setspd ;set the correct speed
|
||||
|
||||
ldy #5
|
||||
ring4 lda #0 ;let carrier's settle
|
||||
jsr wait
|
||||
dey
|
||||
bne ring4
|
||||
|
||||
sec ;we have a connection!
|
||||
ring5 rts
|
||||
|
||||
* send ata to phone
|
||||
*-------------------------------
|
||||
|
||||
answer ldx #0
|
||||
answer2 lda ansstr,x ;get text
|
||||
beq answer3 ;we are done
|
||||
|
||||
jsr out ;send it
|
||||
|
||||
lda #$80
|
||||
jsr wait
|
||||
|
||||
inx
|
||||
bne answer2 ;loop
|
||||
|
||||
answer3 rts
|
||||
|
||||
* hangup phone
|
||||
*-------------------------------
|
||||
|
||||
hangup ldx slot ;get offset
|
||||
lda #0
|
||||
sta command,x ;hang up phone
|
||||
rts
|
||||
|
||||
* input data
|
||||
*-------------------------------
|
||||
|
||||
inp stx save_x ;save X
|
||||
ldx slot ;get offset
|
||||
lda status,x ;get status
|
||||
and #%00001000
|
||||
clc
|
||||
beq inp2 ;no data
|
||||
|
||||
lda data,x
|
||||
sec
|
||||
inp2 ldx save_x ;restore & return
|
||||
rts
|
||||
|
||||
* output data
|
||||
*-------------------------------
|
||||
|
||||
out stx save_x ;save x
|
||||
dec timecnt ;count down 1 section
|
||||
bne out1
|
||||
|
||||
inc bytcnt ;1 second gone by
|
||||
bit bytcnt
|
||||
bvc out1
|
||||
|
||||
ldx #0 ;reset seconds
|
||||
stx bytcnt
|
||||
|
||||
inc bytcnt+1 ;1 minute gone by
|
||||
bit bytcnt+1
|
||||
bvc out1
|
||||
|
||||
ldx #0 ;reset minutes
|
||||
stx bytcnt+1
|
||||
|
||||
inc bytcnt+2 ;1 hour gone by
|
||||
|
||||
out1 ldx slot
|
||||
|
||||
pha
|
||||
out2 lda status,x ;check status
|
||||
and #%00010000
|
||||
beq out2 ;loop until ready
|
||||
pla
|
||||
|
||||
dataloc sta data ;self modified
|
||||
ldx save_x
|
||||
rts
|
||||
|
||||
* check for carrier
|
||||
*-------------------------------
|
||||
|
||||
chkdcd stx save_x ;dont kill any reg's
|
||||
pha
|
||||
|
||||
ldx slot ;get offset
|
||||
lda status,x
|
||||
and cdbyte ;check carrier
|
||||
clc
|
||||
bne chkdcd2
|
||||
|
||||
sec
|
||||
chkdcd2 pla restore ;all & return
|
||||
ldx save_x
|
||||
rts
|
||||
|
||||
* set the rs-232 speed/speed in Y reg
|
||||
*-------------------------------
|
||||
|
||||
setspd stx save_x
|
||||
ldx slot ;get offset
|
||||
lda speed,y ;get speed
|
||||
sta control,x ;set speed
|
||||
|
||||
lda #1 ;find caller speed (x300)
|
||||
sta callspd
|
||||
cpy #0 ;at 300?
|
||||
beq setspd3 ;yep
|
||||
|
||||
asl callspd ;speed = speed * 2
|
||||
setspd2 asl callspd ;speed = speed * 2
|
||||
dey
|
||||
bne setspd2 ;loop until correct speed found
|
||||
|
||||
setspd3 ldx save_x ;restore & return
|
||||
rts
|
||||
|
||||
*-------------------------------
|
||||
* turn on dtr/rts
|
||||
|
||||
raisedtr stx save_x
|
||||
ldx slot
|
||||
|
||||
lda #%00001011 ;turn on DTR, RTS
|
||||
sta command,x
|
||||
sei
|
||||
|
||||
ldx save_x
|
||||
rts
|
||||
|
||||
* wait routine
|
||||
*-------------------------------
|
||||
|
||||
wait sec
|
||||
wait2 pha
|
||||
wait3 sbc #1
|
||||
bne wait3
|
||||
pla
|
||||
sbc #1
|
||||
bne wait2
|
||||
rts
|
||||
|
||||
* global data area
|
||||
*-------------------------------
|
||||
|
||||
speed dfb %00010110 ;300
|
||||
dfb %00011000 ;1200
|
||||
dfb %00011010 ;2400
|
||||
dfb %00011100 ;4800
|
||||
dfb %00011110 ;9600
|
||||
dfb %00011111 ;19200
|
||||
|
||||
timecnt dfb 0 ;1-second counter
|
||||
save_x dfb 0
|
||||
countlo dfb $FF
|
||||
counthi dfb $FF
|
||||
|
||||
asc 'SSC'
|
||||
|
||||
@@ -0,0 +1,566 @@
|
||||
LST OFF
|
||||
TR
|
||||
TR ADR
|
||||
*-------------------------------
|
||||
* Config Program - Ospjunk
|
||||
*-------------------------------
|
||||
* Date: 12/2/89
|
||||
*-------------------------------
|
||||
|
||||
REL
|
||||
temp = 0
|
||||
temp2 = 2
|
||||
temp3 = 4
|
||||
temp4 = 6
|
||||
|
||||
fmparm = $60
|
||||
doszero = $62
|
||||
dosptr = $64
|
||||
part = $66
|
||||
dosbyt = $68
|
||||
|
||||
lnbuf = $200
|
||||
flname = $300
|
||||
devnam = $800
|
||||
fbuf1 = $1C00
|
||||
fnam1 = $1E00
|
||||
fbuf2 = fbuf1
|
||||
fnam2 = fnam1
|
||||
msgbuf = fbuf1
|
||||
msgnam = fnam1
|
||||
miscbuf = fbuf1
|
||||
miscnam = fnam1
|
||||
|
||||
copybuf = $6000
|
||||
copymax = $5800
|
||||
mli = $BF00
|
||||
|
||||
DSK REL/OSPJUNK
|
||||
|
||||
cls EXT
|
||||
print EXT
|
||||
inpln EXT
|
||||
inpmode EXT
|
||||
maxlen EXT
|
||||
ld_drvs EXT
|
||||
getname EXT
|
||||
open EXT
|
||||
geteof EXT
|
||||
rdblk EXT
|
||||
close EXT
|
||||
create EXT
|
||||
wrblk EXT
|
||||
refnum EXT
|
||||
slot EXT
|
||||
drive EXT
|
||||
|
||||
*-------------------------------
|
||||
* load the acos.obj file after find out where it is
|
||||
|
||||
drv_path ENT
|
||||
JSR cls ; clear screen
|
||||
|
||||
JSR print
|
||||
ASC 'Please enter the pathname of the volume or'
|
||||
ASC ' subdirectory which contains the'0D0D
|
||||
ASC 'file: LLUCE.DRIVERS'0D0D0D
|
||||
ASC 'Path: /'00
|
||||
|
||||
LDA #32 ; set maximum pathname at 32
|
||||
STA maxlen
|
||||
LDA #%11000000
|
||||
STA inpmode ; set input mode
|
||||
|
||||
JSR inpln
|
||||
INY
|
||||
STY lnbuf-2 ; save length
|
||||
LDA #'/'
|
||||
STA lnbuf-1 ; save initial '/'
|
||||
|
||||
JSR mli
|
||||
DB $C6 ; set prefix
|
||||
DA p_spfx
|
||||
BCS drv_p2 ; error
|
||||
|
||||
JSR mli
|
||||
DB $C7 ; get prefix and put into
|
||||
DA p_pfx4 ; program byffer
|
||||
|
||||
JSR ld_drvs ; load in the stats
|
||||
BCC logcon ; all is ok
|
||||
|
||||
drv_p2 JMP drv_path ; opps, error
|
||||
|
||||
|
||||
*-------------------------------
|
||||
* log back to the config disk
|
||||
; log back to config disk
|
||||
logcon ENT
|
||||
JSR mli
|
||||
DB $C6 ; set prefix
|
||||
DA p_pfx2
|
||||
; ... later, add in error checking
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* log the destination disk
|
||||
|
||||
logdst ENT
|
||||
JSR mli
|
||||
DB $C6
|
||||
DA p_pfx3
|
||||
; ... later, add in error checking
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* log the program disk
|
||||
|
||||
logprg ENT
|
||||
LDA prgpfx ; has a program prefix been defined?
|
||||
BEQ logcon ; nope, log to config disk
|
||||
|
||||
JSR mli
|
||||
DB $C6 ; log to program disk (with LLUCE.SYSTEM)
|
||||
DA p_pfx4
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* move filename to user routine
|
||||
|
||||
movname ENT
|
||||
STX dosbyt ; point to filename
|
||||
STA dosbyt+1
|
||||
|
||||
LDY #15
|
||||
:movnam2 LDA (dosbyt),y ; copy filename
|
||||
STA flname,y
|
||||
DEY
|
||||
BPL :movnam2
|
||||
RTS
|
||||
; variables and stuff
|
||||
msgref ENT
|
||||
DB 0
|
||||
module DB 0
|
||||
sdvparm DB 0,0,0
|
||||
|
||||
|
||||
copyrts JMP logcon ; log back to main
|
||||
|
||||
*-------------------------------
|
||||
* copy a list of files
|
||||
|
||||
copy ENT
|
||||
STX temp4 ; save pointer for getname
|
||||
STA temp4+1
|
||||
|
||||
:copy2 JSR getname ; get source name
|
||||
BCS copyrts
|
||||
|
||||
JSR logcon ; log to config disk
|
||||
|
||||
LDX #<flname ; get info on file
|
||||
LDA #>flname
|
||||
JSR getinfo
|
||||
BNE :copy2 ; opps, error, skip this file
|
||||
|
||||
JSR open
|
||||
JSR geteof ; get eof marker
|
||||
STX p_geof+2
|
||||
STA p_geof+3 ; save marker
|
||||
STA temp
|
||||
CPX #0 ; save number of pages to read
|
||||
BEQ *+4
|
||||
INC temp
|
||||
|
||||
LDX #<copybuf
|
||||
LDA #>copybuf
|
||||
LDY #>copymax*2 ; get maximum ram space
|
||||
JSR rdblk
|
||||
|
||||
JSR close ; close the file
|
||||
|
||||
JSR logdst ; log to destination
|
||||
|
||||
LDY #0 ; use type $00
|
||||
JSR create ; create file
|
||||
|
||||
JSR open ; open file
|
||||
|
||||
LDA temp
|
||||
ASL ; get number of blocks (1/2 pages) to write
|
||||
TAY
|
||||
LDX #<copybuf
|
||||
LDA #>copybuf
|
||||
JSR wrblk ; write out the block
|
||||
|
||||
JSR seteof ; set end of file
|
||||
JSR close
|
||||
|
||||
LDX #<flname
|
||||
LDA #>flname
|
||||
JSR setinfo ; set file info
|
||||
JMP :copy2
|
||||
|
||||
*-------------------------------
|
||||
* get info on a file
|
||||
|
||||
getinfo ENT
|
||||
STX p_ginfo+1 ; point to filename
|
||||
STA p_ginfo+2
|
||||
LDA #10
|
||||
STA p_ginfo
|
||||
|
||||
JSR mli
|
||||
DB $C4 ; get info
|
||||
DA p_ginfo
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* set the file info
|
||||
|
||||
setinfo ENT
|
||||
STX p_ginfo+1 ; point to filename
|
||||
STA p_ginfo+2
|
||||
LDA #7
|
||||
STA p_ginfo
|
||||
|
||||
JSR mli
|
||||
DB $C3 ; set info
|
||||
DA p_ginfo
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* set the current end of file
|
||||
|
||||
puteof ENT
|
||||
STX p_geof+2 ; set eof marker
|
||||
STA p_geof+3
|
||||
|
||||
seteof ENT
|
||||
LDA refnum
|
||||
STA p_geof+1
|
||||
|
||||
JSR mli
|
||||
DB $D0 ; set eof
|
||||
DA p_geof
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* rename a file
|
||||
|
||||
rename ENT
|
||||
STX temp4 ; point to data
|
||||
STA temp4+1
|
||||
JSR getname ; get first name
|
||||
|
||||
LDY #63
|
||||
:ren2 LDA flname,y ; copy first name
|
||||
STA lnbuf+128,y
|
||||
DEY
|
||||
BPL :ren2
|
||||
|
||||
JSR getname ; get new name
|
||||
|
||||
JSR mli
|
||||
DB $C2 ; rename file
|
||||
DA p_ren
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* find the config disk
|
||||
|
||||
findcon ENT
|
||||
LDX #23
|
||||
LDA #0
|
||||
:loop STA $BF58,x ; clear prodos system bit-map
|
||||
DEX
|
||||
BNE :loop
|
||||
|
||||
JSR mli
|
||||
DB $C7 ; get prefix
|
||||
DA p_pfx2 ; point to path
|
||||
|
||||
LDA conpfx ; is prefix set to null?
|
||||
BNE :findc2 ; nope
|
||||
|
||||
LDA $BF30 ; get current slot/drive
|
||||
STA p_onlin+1
|
||||
|
||||
JSR mli
|
||||
DB $C5 ; find out prefix of volume
|
||||
DA p_onlin
|
||||
|
||||
LDA conpfx+1
|
||||
AND #$F ; just save name length
|
||||
clc
|
||||
adc #1 ; advance length of prefix
|
||||
STA conpfx
|
||||
|
||||
LDA #'/' ; add leading slash for volume name
|
||||
STA conpfx+1
|
||||
|
||||
:findc2 JMP logcon ; log to config
|
||||
|
||||
*-------------------------------
|
||||
* check free space on volume
|
||||
|
||||
chkspc ENT
|
||||
LDA drive
|
||||
ASL
|
||||
ASL
|
||||
ASL
|
||||
ORA slot ; make into #dsss0000 format
|
||||
ASL
|
||||
ASL
|
||||
ASL
|
||||
ASL
|
||||
|
||||
STA p_onln+1
|
||||
JSR mli
|
||||
DB $C5 ; get drive name
|
||||
DA p_onln
|
||||
BEQ :chkspc2 ; all is well
|
||||
|
||||
LDA #0 ; return 0 blocks free -- error
|
||||
TAX
|
||||
RTS
|
||||
|
||||
:chkspc2 LDA dstpfx+1
|
||||
AND #$F
|
||||
TAX ; make into volume name
|
||||
INX
|
||||
STX dstpfx
|
||||
LDA #'/'
|
||||
STA dstpfx+1
|
||||
|
||||
LDX #<dstpfx
|
||||
LDA #>dstpfx ; get info on volume
|
||||
JSR getinfo
|
||||
|
||||
SEC
|
||||
LDA p_ginfo+5 ; return total number of free blocks
|
||||
SBC p_ginfo+8
|
||||
TAX
|
||||
LDA p_ginfo+6
|
||||
SBC p_ginfo+9
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* setup initial drive spec list
|
||||
|
||||
setspec ENT
|
||||
JSR chkspc ;reset path to original drive
|
||||
|
||||
JSR makesegs ;tack the /mpro.segs on path
|
||||
|
||||
LDY #0
|
||||
LDA #1
|
||||
JSR coppath ;copy 1 path (A:)
|
||||
|
||||
STY temp
|
||||
JSR chkspc ;reset path
|
||||
JSR makesys
|
||||
LDY temp
|
||||
|
||||
LDA #3 ;copy 3 more paths
|
||||
JSR coppath ;b: - d:
|
||||
|
||||
LDA settrans ;transfer wanted?
|
||||
BNE :trans
|
||||
LDA #3 ;paths to copy
|
||||
JMP :notrans
|
||||
|
||||
:trans STY temp
|
||||
JSR maketac1
|
||||
JSR maketac2
|
||||
LDY temp
|
||||
|
||||
LDA #1
|
||||
JSR coppath ;copy one path (E:)
|
||||
|
||||
STY temp
|
||||
JSR chkspc
|
||||
JSR makesys
|
||||
LDY temp
|
||||
|
||||
LDA #2 ;fill out 2 specs
|
||||
:notrans JSR coppath
|
||||
|
||||
LDA #0 ; mark end of path's
|
||||
STA devnam,y
|
||||
|
||||
RTS
|
||||
|
||||
settrans ENT
|
||||
DB 0
|
||||
|
||||
*-------------------------------
|
||||
* copy a path onto the pathname
|
||||
|
||||
coppath STA temp
|
||||
|
||||
:loop6 LDX #-1
|
||||
:loop5 INX
|
||||
LDA dstpfx,x ; copy in pathname
|
||||
STA devnam,y
|
||||
INY
|
||||
CPX dstpfx ; done?
|
||||
BNE :loop5 ; nope
|
||||
|
||||
DEC temp ; count down paths to enter
|
||||
BNE :loop6
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* setup /xxx/mpro.segs and log it
|
||||
|
||||
makesegs ENT
|
||||
LDX #0
|
||||
LDY dstpfx
|
||||
:loop LDA pfxname+1,x ; copy on /xxxx/mpro.segs
|
||||
STA dstpfx+1,y
|
||||
INX
|
||||
INY
|
||||
INC dstpfx ; update length
|
||||
CPX pfxname
|
||||
BNE :loop
|
||||
RTS
|
||||
|
||||
setdrv ENT
|
||||
JSR makesegs
|
||||
JSR mli
|
||||
DB $C0 ; create new path
|
||||
DA p_crpth
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* setup /mpro.sys and log it
|
||||
|
||||
makesys ENT
|
||||
LDX #0
|
||||
LDY dstpfx
|
||||
:loop LDA sysname+1,x ; copy on /xxxx/mpro.sys
|
||||
STA dstpfx+1,y
|
||||
INX
|
||||
INY
|
||||
INC dstpfx ; update length
|
||||
CPX sysname
|
||||
BNE :loop
|
||||
RTS
|
||||
|
||||
setsys ENT
|
||||
JSR makesys
|
||||
|
||||
JSR mli
|
||||
DB $C0 ; create new path
|
||||
DA p_crpth
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* setup /stac and log it
|
||||
|
||||
maketac1 ENT
|
||||
LDX #0
|
||||
LDY dstpfx
|
||||
:loop LDA tac1+1,x ; copy on /xxxx/mpro.sys/stac
|
||||
STA dstpfx+1,y
|
||||
INX
|
||||
INY
|
||||
INC dstpfx ; update length
|
||||
CPX tac1
|
||||
BNE :loop
|
||||
RTS
|
||||
|
||||
maketac2 ENT
|
||||
LDX #0
|
||||
LDY dstpfx
|
||||
:loop LDA tac2+1,x ; copy on /xxxx/mpro.sys/stac/vol./
|
||||
STA dstpfx+1,y
|
||||
INX
|
||||
INY
|
||||
INC dstpfx ; update length
|
||||
CPX tac2
|
||||
BNE :loop
|
||||
RTS
|
||||
|
||||
settac ENT
|
||||
JSR maketac1
|
||||
JSR mli ; create /xxx/mpro.sys/stac/
|
||||
DB $C0 ; create new path
|
||||
DA p_crpth
|
||||
|
||||
JSR maketac2
|
||||
JSR mli ; create /xxx/mpro.sys/stac/vol./
|
||||
DB $C0 ; create new path
|
||||
DA p_crpth
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* variables
|
||||
|
||||
pfxname STR '/MPRO.SEGS'
|
||||
sysname STR '/MPRO.SYS'
|
||||
tac1 STR '/STAC'
|
||||
tac2 STR '/VOL.'
|
||||
|
||||
p_spfx DB 1
|
||||
DA lnbuf-2
|
||||
|
||||
p_geof DB 2
|
||||
DB 0
|
||||
DB 0,0,0
|
||||
|
||||
p_ginfo DB $A
|
||||
DA 0
|
||||
DB 0
|
||||
DB 0
|
||||
DA 0
|
||||
DB 0
|
||||
DA 0
|
||||
DA 0
|
||||
DA 0
|
||||
DA 0
|
||||
DA 0
|
||||
|
||||
p_ren DB 2
|
||||
DA lnbuf+128
|
||||
DA flname
|
||||
|
||||
p_pfx DB 1
|
||||
DA lnbuf
|
||||
|
||||
p_pfx2 ENT
|
||||
DB 1
|
||||
DA conpfx
|
||||
|
||||
p_pfx3 DB 1
|
||||
DA dstpfx
|
||||
|
||||
p_pfx4 DB 1
|
||||
DA prgpfx
|
||||
|
||||
conpfx DS 40 ; max length
|
||||
|
||||
dstpfx ENT
|
||||
DS 40 ; max length
|
||||
|
||||
prgpfx DS 40 ; max length
|
||||
|
||||
p_onlin DB 2
|
||||
DB 0
|
||||
DA conpfx+1
|
||||
|
||||
p_onln DB 2
|
||||
DB 0
|
||||
DA dstpfx+1
|
||||
|
||||
p_crpth ENT
|
||||
DB 7
|
||||
DA dstpfx
|
||||
DB $C3
|
||||
DB $F
|
||||
DA 0
|
||||
DB $D
|
||||
DA 0
|
||||
DA 0
|
||||
|
||||
@@ -0,0 +1,118 @@
|
||||
LST OFF
|
||||
TR
|
||||
TR ADR
|
||||
*-------------------------------
|
||||
* Printer re-configuration
|
||||
*-------------------------------
|
||||
|
||||
REL
|
||||
prdrv = $900
|
||||
point0 = $11
|
||||
point1 = $14
|
||||
|
||||
DSK REL/PRINTER
|
||||
|
||||
TopBox EXT
|
||||
print EXT
|
||||
cls EXT
|
||||
start EXT
|
||||
escape EXT
|
||||
inpnum EXT
|
||||
chinit EXT
|
||||
wrtchg EXT
|
||||
|
||||
|
||||
nullprnt EXT ;null printer driver
|
||||
serial EXT ;serial/cout printer driver
|
||||
grappler EXT ;parallel grappler printer driver
|
||||
parallel EXT ;parallel printer driver
|
||||
|
||||
re_pr ENT
|
||||
JSR TopBox
|
||||
JSR print
|
||||
DB 1,2,29
|
||||
ASC '- Printer Interfaces -'
|
||||
DB 1,4,5
|
||||
ASC 'Please refer to Appendix B of your user'
|
||||
ASC ' manual for more information.'00
|
||||
|
||||
JSR cls
|
||||
LDX #<start ; setup esc handler
|
||||
LDA #>start
|
||||
JSR escape
|
||||
|
||||
LDA #<prdrv ;tell it to move the modem
|
||||
STA point1 ;driver
|
||||
LDA #>prdrv
|
||||
STA point1+1
|
||||
|
||||
JSR print
|
||||
DB 1,7,0
|
||||
ASC ' 1 - Apple //c built-in port '
|
||||
ASC ' 7 - Apple Parallel interface'0D
|
||||
ASC ' 2 - Apple Super Serial Card (SSC) '
|
||||
ASC ' 8 - Epson APL printer card'0D
|
||||
ASC ' 3 - Apple IIgs built-in port '
|
||||
ASC ' 9 - Appricorn Parallel card'0D
|
||||
ASC ' 4 - Generic Printer Driver '
|
||||
ASC '10 - Tyvec Printer Interface'0D
|
||||
ASC ' 5 - Star Micronics Grafstar '
|
||||
ASC '11 - No Printer in system'0D
|
||||
ASC ' 6 - Orange Micro Grappler card'0D0D0D
|
||||
ASC 'Which? [1-11] '00
|
||||
|
||||
LDX #11 ;get printer #
|
||||
JSR inpnum
|
||||
|
||||
CMP #5
|
||||
BLT :serial
|
||||
CMP #7
|
||||
BLT :grappler
|
||||
CMP #11
|
||||
BLT :parallel
|
||||
|
||||
:null LDA #<nullprnt
|
||||
STA point0
|
||||
LDA #>nullprnt
|
||||
STA point0+1
|
||||
JMP :noslot
|
||||
|
||||
:serial LDA #<serial
|
||||
LDX #>serial
|
||||
JMP :getslot
|
||||
|
||||
:grappler LDA #<grappler
|
||||
LDX #>grappler
|
||||
JMP :getslot
|
||||
|
||||
:parallel LDA #<parallel
|
||||
LDX #>parallel
|
||||
|
||||
:getslot STA point0
|
||||
STX point0+1
|
||||
|
||||
JSR print
|
||||
DB 1,20,0
|
||||
ASC 'What slot/port does your printer use? [1-7] '00
|
||||
|
||||
LDX #7 ; get slot
|
||||
JSR inpnum
|
||||
ASL
|
||||
ASL
|
||||
ASL
|
||||
ASL
|
||||
:noslot PHA ;save slot
|
||||
|
||||
LDY #0 ;move the single page
|
||||
:loop LDA (point0),Y ;source
|
||||
STA (point1),Y ;destination
|
||||
INY
|
||||
BNE :loop
|
||||
|
||||
LDY #0
|
||||
PLA ;get the slot back
|
||||
STA (point1),Y
|
||||
|
||||
JSR chinit ; check for init
|
||||
JMP wrtchg ; write the changes
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
LST OFF
|
||||
TR
|
||||
TR ADR
|
||||
********************************
|
||||
* *
|
||||
* Grappler Printer Driver *
|
||||
* *
|
||||
********************************
|
||||
|
||||
*-------------------------------
|
||||
* Date: 12/07/86
|
||||
*-------------------------------
|
||||
|
||||
REL
|
||||
DSK PRINTERS/REL/GRAPPLER
|
||||
|
||||
cr = $D
|
||||
lf = $A
|
||||
|
||||
grappler ENT
|
||||
|
||||
*-------------------------------
|
||||
|
||||
ORG $900
|
||||
; jump table
|
||||
slot DB $10
|
||||
|
||||
JMP init
|
||||
JMP print
|
||||
JMP clear
|
||||
|
||||
*-------------------------------
|
||||
* init printer
|
||||
|
||||
init RTS ; no init code needed
|
||||
|
||||
*-------------------------------
|
||||
* print character: A = character
|
||||
|
||||
print PHA
|
||||
STX save_x
|
||||
|
||||
LDX slot
|
||||
print2 LDA $C080,X ; check printer status
|
||||
AND #%00000111 ; check busy/wait bits
|
||||
EOR #%00000011 ; turn all bits off
|
||||
BNE print2 ; wait to come ready
|
||||
|
||||
PLA
|
||||
PHA
|
||||
AND #$7F
|
||||
STA $C080,X ; print data
|
||||
CMP #cr
|
||||
BNE print3
|
||||
|
||||
LDA #lf ; add lf to cr
|
||||
LDX save_x
|
||||
JSR print
|
||||
|
||||
print3 LDX save_x ; finish up
|
||||
PLA
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* clear print buffer (not available)
|
||||
|
||||
clear RTS
|
||||
|
||||
save_x DB 0
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
LST OFF
|
||||
TR
|
||||
TR ADR
|
||||
********************************
|
||||
* *
|
||||
* No Printer Driver *
|
||||
* *
|
||||
********************************
|
||||
|
||||
*-------------------------------
|
||||
* Date: 01/03/86
|
||||
*-------------------------------
|
||||
|
||||
REL
|
||||
DSK PRINTERS/REL/NULL
|
||||
|
||||
nullprnt ENT
|
||||
|
||||
ORG $900
|
||||
; jump table
|
||||
slot DB $10
|
||||
|
||||
JMP init
|
||||
JMP print
|
||||
JMP clear
|
||||
|
||||
; init printer
|
||||
init RTS
|
||||
|
||||
; print character: A = character
|
||||
print RTS
|
||||
|
||||
; clear print buffer (not available)
|
||||
clear RTS
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
LST OFF
|
||||
TR
|
||||
TR ADR
|
||||
********************************
|
||||
* *
|
||||
* Parallel Printer Driver *
|
||||
* *
|
||||
********************************
|
||||
|
||||
*-------------------------------
|
||||
* Date: 12/07/86
|
||||
*-------------------------------
|
||||
|
||||
REL
|
||||
DSK PRINTERS/REL/PARALLEL
|
||||
|
||||
cr = $D
|
||||
lf = $A
|
||||
|
||||
parallel ENT
|
||||
|
||||
*-------------------------------
|
||||
|
||||
ORG $900
|
||||
|
||||
slot DB $10
|
||||
|
||||
JMP init
|
||||
JMP print
|
||||
JMP clear
|
||||
|
||||
*-------------------------------
|
||||
|
||||
init LDA slot
|
||||
LUP 4
|
||||
LSR
|
||||
--^
|
||||
CLC
|
||||
ADC #$C0 ; get $Cx value
|
||||
STA print2+2
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* print character: A = character
|
||||
|
||||
print PHA
|
||||
STX save_x
|
||||
print2 LDA $C1C1 ; is printer ready?
|
||||
BMI print2 ; nope
|
||||
|
||||
PLA
|
||||
PHA
|
||||
LDX slot ; get offset
|
||||
AND #$7F
|
||||
STA $C080,x ; print data
|
||||
CMP #cr
|
||||
BNE print3
|
||||
|
||||
LDA #lf ; add lf to cr
|
||||
LDX save_x
|
||||
JSR print
|
||||
|
||||
print3 LDX save_x ; finish up
|
||||
PLA
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
|
||||
clear RTS
|
||||
|
||||
save_x DB 0
|
||||
|
||||
@@ -0,0 +1,125 @@
|
||||
LST OFF
|
||||
TR
|
||||
TR ADR
|
||||
********************************
|
||||
* *
|
||||
* Serial Printer Driver *
|
||||
* *
|
||||
********************************
|
||||
|
||||
*-------------------------------
|
||||
* Date: 12/07/86
|
||||
*-------------------------------
|
||||
|
||||
REL
|
||||
DSK PRINTERS/REL/SERIAL
|
||||
|
||||
cr = $D
|
||||
lf = $A
|
||||
|
||||
serial ENT
|
||||
|
||||
ORG $900
|
||||
|
||||
*-------------------------------
|
||||
; jump table
|
||||
slot DB $10
|
||||
|
||||
JMP init
|
||||
JMP print
|
||||
JMP clear
|
||||
|
||||
*-------------------------------
|
||||
* flag init status for output
|
||||
|
||||
init PHA
|
||||
LDA #0 ; signal that printer not init'ed
|
||||
STA initflg
|
||||
PLA
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* print character: A = character
|
||||
|
||||
print PHP ; disable int's
|
||||
SEI
|
||||
PHA ; save all reg's
|
||||
STX save_x
|
||||
STY save_y
|
||||
LDA $C082 ; enable roms
|
||||
|
||||
LDX #$13
|
||||
print1 LDA $24,X ; save zero page stuff
|
||||
STA zero,X
|
||||
DEX
|
||||
BPL print1
|
||||
|
||||
BIT initflg ; has printer been used?
|
||||
BMI print3 ; yep
|
||||
|
||||
LDA slot
|
||||
STA $26 ; save slot for card
|
||||
LUP 4
|
||||
LSR ; move down slot
|
||||
--^
|
||||
CLC
|
||||
ADC #$C0
|
||||
STA print2+2
|
||||
STA $36+1 ; point ($0036) at $c100
|
||||
|
||||
LDA #0 ; init printer card
|
||||
TAX
|
||||
TAY
|
||||
STA $24 ; zero horiz offset
|
||||
STA $27 ; zero character buffer
|
||||
STA $36
|
||||
print2 JSR $C100
|
||||
LDA $36 ; point to output routine
|
||||
STA jprint+1
|
||||
LDA $36+1
|
||||
STA jprint+2
|
||||
DEC initflg ; show we have done init
|
||||
|
||||
LDA #'I'-$40 ; send ctrl-I 80 n
|
||||
JSR doprint
|
||||
LDA #'8'
|
||||
JSR doprint
|
||||
LDA #'0'
|
||||
JSR doprint
|
||||
LDA #'N'
|
||||
JSR doprint
|
||||
LDA #cr
|
||||
JSR doprint
|
||||
|
||||
print3 LDA #0 ; set ch over to border
|
||||
STA $24
|
||||
PLA ; get byte to print
|
||||
PHA
|
||||
JSR doprint
|
||||
|
||||
LDX #$13
|
||||
print4 LDA zero,X ; restore zero page
|
||||
STA $24,X
|
||||
DEX
|
||||
BPL print4
|
||||
|
||||
LDA $C083 ; enable ram card
|
||||
LDA $C083
|
||||
LDX save_x ; restore reg's
|
||||
LDY save_y
|
||||
PLA
|
||||
PLP ; restore int status
|
||||
RTS
|
||||
|
||||
doprint ORA #$80 ; print with high-bit set
|
||||
jprint JMP $C000 ; do output routine
|
||||
|
||||
; clear print buffer (not available)
|
||||
clear RTS
|
||||
|
||||
save_x DB 0
|
||||
save_y DB 0
|
||||
initflg DB 0
|
||||
|
||||
zero DS $14
|
||||
|
||||
@@ -0,0 +1,663 @@
|
||||
LST OFF
|
||||
TR
|
||||
TR ADR
|
||||
********************************
|
||||
* *
|
||||
* Config Program - Routine *
|
||||
* *
|
||||
********************************
|
||||
|
||||
*-------------------------------
|
||||
* Date: 3/11/88
|
||||
*-------------------------------
|
||||
|
||||
REL
|
||||
cr = $D ; cariage return
|
||||
bs = 8 ; backspace
|
||||
can = $18 ; ctrl-x
|
||||
esc = $27 ; escape
|
||||
del = $7F ; delete
|
||||
|
||||
temp = 0
|
||||
temp2 = 2
|
||||
*temp3 = 4
|
||||
temp4 = 6
|
||||
x_save = 9
|
||||
y_save = $A
|
||||
numptr = $1A
|
||||
psave = $1C
|
||||
prnt = $1E
|
||||
|
||||
ch = $24
|
||||
cv = $25
|
||||
|
||||
lnbuf = $200
|
||||
flname = $300
|
||||
|
||||
DSK REL/ROUTINE
|
||||
|
||||
cout EXT ; routine that are external to this one
|
||||
plotchr EXT
|
||||
|
||||
*-------------------------------
|
||||
* print a line of text
|
||||
*-------------------------------
|
||||
|
||||
print ENT
|
||||
STA psave ; save all reg's
|
||||
STY psave+1
|
||||
PLA
|
||||
STA prnt ; point to address of data
|
||||
PLA
|
||||
STA prnt+1
|
||||
|
||||
:print2 INC prnt ; inc address
|
||||
BNE :print3
|
||||
INC prnt+1
|
||||
|
||||
:print3 LDY #0
|
||||
LDA (prnt),Y ; get data
|
||||
CMP #1
|
||||
BNE :pr3a
|
||||
|
||||
:pr3v JSR gettmp
|
||||
JSR gettmp ; get horiz/vert address
|
||||
STA cv
|
||||
JSR gettmp
|
||||
STA ch
|
||||
JMP :print3
|
||||
|
||||
:pr3a PHA
|
||||
JSR cout ; display it
|
||||
PLA
|
||||
BNE :print2 ; keep going
|
||||
|
||||
JSR gettmp
|
||||
LDA psave
|
||||
LDY psave+1
|
||||
JMP (prnt)
|
||||
|
||||
*-------------------------------
|
||||
* get a byte from temp and advance pointers
|
||||
*-------------------------------
|
||||
|
||||
gettmp ENT
|
||||
LDY #0
|
||||
LDA (prnt),Y
|
||||
INC prnt
|
||||
BNE :gettmp2
|
||||
INC prnt+1
|
||||
:gettmp2 RTS
|
||||
|
||||
*-------------------------------
|
||||
* put a cursor, get a key, remove cursor, return
|
||||
*-------------------------------
|
||||
|
||||
rdkey ENT
|
||||
STX x_save ; save x & y
|
||||
STY y_save
|
||||
LDA #$5F
|
||||
JSR plotchr ; bypass cout for speed
|
||||
|
||||
:rdkey2 LDA $C000 ; check for a key
|
||||
BPL :rdkey2
|
||||
STA $C010 ; reset flag
|
||||
AND #$7F
|
||||
|
||||
STA $C030
|
||||
STA $C030 ; audio feedback
|
||||
|
||||
PHA
|
||||
LDA #' ' ; remove cursor
|
||||
JSR plotchr
|
||||
PLA
|
||||
LDX x_save
|
||||
LDY y_save
|
||||
JSR chk_esc ; check for escape
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* get a line of input
|
||||
*-------------------------------
|
||||
|
||||
inpln ENT
|
||||
LDY #0 ; start at first byte
|
||||
:inpln1 JSR rdkey ; get data
|
||||
:inpln1a CMP #cr ; return
|
||||
BEQ :inpln6
|
||||
CMP #bs ; back space
|
||||
BEQ :inpln2
|
||||
CMP #can ; ctrl-x / cancel
|
||||
BEQ :inpln2
|
||||
CMP #del ; delete
|
||||
BNE :inpln3
|
||||
|
||||
:inpln2 CPY #0 ; can we back up?
|
||||
BEQ :inpln1 ; nope
|
||||
|
||||
PHA
|
||||
JSR prbs ; backspace w/delete
|
||||
DEY ; decrease line count
|
||||
PLA
|
||||
CMP #can ; if its a cancel
|
||||
BEQ :inpln2 ; keep going
|
||||
BNE :inpln1
|
||||
|
||||
:inpln3 CMP #' ' ; if its a control char...
|
||||
BCC :inpln1
|
||||
|
||||
CPY maxlen ; check for max length
|
||||
BNE :inpln4
|
||||
BRA :inpln1
|
||||
|
||||
:inpln4 BIT inpmode ; do we convert?
|
||||
BPL :inpln4a ; nope
|
||||
|
||||
JSR conv ; convert to upper
|
||||
|
||||
:inpln4a BIT inpmode ; check the inpmode
|
||||
BVC :inpln5
|
||||
|
||||
CMP #',' ; dont accept a comma
|
||||
BEQ :inpln1
|
||||
CMP #' '
|
||||
BNE :inpln5 ; dont accept a space
|
||||
CPY #0 ; for first char of the line
|
||||
BEQ :inpln1
|
||||
|
||||
:inpln5 STA lnbuf,Y ; save char
|
||||
INY
|
||||
JSR cout ; print it
|
||||
JMP :inpln1 ; loop
|
||||
|
||||
:inpln6 LDA #cr
|
||||
STA lnbuf,Y ; save the return
|
||||
CPY #0 ; was is just a return?
|
||||
BNE :inpln7 ; nope
|
||||
|
||||
LDA inpmode ; can we accept a blank line?
|
||||
AND #$20
|
||||
BNE :inpln7 ; yep
|
||||
|
||||
BRA inpln ; dont take, cr, start over
|
||||
|
||||
:inpln7 LDA inpmode ; do cr?
|
||||
AND #$10
|
||||
BNE :inpln8 ; nope
|
||||
|
||||
LDA #cr
|
||||
JMP cout ; print the return AND exit
|
||||
|
||||
:inpln8 RTS
|
||||
|
||||
maxlen ENT
|
||||
DB 0
|
||||
inpmode ENT
|
||||
DB %00000000
|
||||
|
||||
*-------------------------------
|
||||
* input a number in the range [1-x] where x={1-99}
|
||||
*-------------------------------
|
||||
|
||||
inpnum ENT
|
||||
STX maxnum ; save maximum number
|
||||
LDA #2
|
||||
STA maxlen ; set length at 2
|
||||
LDA ch
|
||||
STA prnt+1 ; record currnt horiz offset
|
||||
LDA #%00010000
|
||||
STA inpmode ; use input mode 0
|
||||
|
||||
:inpnum2 JSR inpln ; get line
|
||||
LDA #0
|
||||
STA prnt ; make number init to 0
|
||||
|
||||
LDA lnbuf ; get data
|
||||
SEC
|
||||
SBC #'0'
|
||||
CMP #10 ; in range?
|
||||
BCS :inpnum5 ; nope, we are done
|
||||
|
||||
STA prnt ; update total
|
||||
|
||||
LDA lnbuf+1 ; get more data
|
||||
SEC
|
||||
SBC #'0'
|
||||
CMP #10 ; in range?
|
||||
BCS :inpnum5 ; nope
|
||||
|
||||
:inpnum3 DEC prnt ; count down 10's
|
||||
BMI :inpnum4
|
||||
|
||||
CLC
|
||||
ADC #10 ; add 10 and loop
|
||||
BCC :inpnum3
|
||||
|
||||
:inpnum4 STA prnt ; save new total
|
||||
:inpnum5 LDA prnt
|
||||
BEQ :inpnum7 ; opps, problem
|
||||
|
||||
CMP maxnum ; is it in range?
|
||||
BCC :inpnum8
|
||||
BEQ :inpnum8 ; all is well!
|
||||
|
||||
:inpnum7 LDA ch
|
||||
CMP prnt+1 ; at original spot?
|
||||
BEQ :inpnum2 ; yep
|
||||
|
||||
JSR prbs ; backup
|
||||
JMP :inpnum7
|
||||
|
||||
:inpnum8 RTS
|
||||
|
||||
maxnum DB 0
|
||||
|
||||
*-------------------------------
|
||||
* print a backspace
|
||||
*-------------------------------
|
||||
|
||||
prbs ENT
|
||||
LDA #bs ; do a backspace w/delete
|
||||
JSR cout
|
||||
LDA #' '
|
||||
JSR cout
|
||||
LDA #bs
|
||||
JMP cout
|
||||
|
||||
*-------------------------------
|
||||
* input a 'y' or a 'n' for a yes/no situation
|
||||
*-------------------------------
|
||||
|
||||
inpyn ENT
|
||||
LDA #1 ; max length 1
|
||||
STA maxlen
|
||||
LDA ch ; save horiz position
|
||||
STA temp+1
|
||||
LDA #%10010000
|
||||
STA inpmode
|
||||
|
||||
:inpyn2 JSR inpln ; get the line
|
||||
LDA lnbuf
|
||||
CMP #'Y' ; did they say 'YES' ?
|
||||
CLC
|
||||
BEQ :inpyn3 ; yep
|
||||
|
||||
CMP #'N' ; did they say 'NO' ?
|
||||
SEC
|
||||
BEQ :inpyn3 ; yep
|
||||
|
||||
LDA ch
|
||||
CMP temp+1 ; are they the same?
|
||||
BEQ :inpyn2
|
||||
|
||||
JSR prbs ; backup
|
||||
JMP :inpyn2
|
||||
|
||||
:inpyn3 RTS
|
||||
|
||||
*-------------------------------
|
||||
* convert a character to uppercase
|
||||
*-------------------------------
|
||||
|
||||
conv ENT
|
||||
AND #$7F ; strip high
|
||||
CMP #'a' ; below 'a'?
|
||||
BCC :conv2 ; yep
|
||||
|
||||
CMP #'z'+1 ; above 'z'?
|
||||
BCS :conv2 ; yep
|
||||
|
||||
SBC #$1F ; use clear carry for sbc $20
|
||||
:conv2 RTS
|
||||
|
||||
*-------------------------------
|
||||
|
||||
copyinp ENT
|
||||
STX temp ; point to dest
|
||||
STA temp+1
|
||||
TYA
|
||||
PHA ; save ending byte
|
||||
|
||||
LDX #0 ; start offsets
|
||||
LDY #0
|
||||
:copyin2 LDA lnbuf,X ; get byte
|
||||
INX
|
||||
CMP #cr ; we done?
|
||||
BEQ :copyin3 ; yep
|
||||
|
||||
STA (temp),Y ; copy and inc pointers
|
||||
INC temp
|
||||
BNE :copyin2
|
||||
INC temp+1
|
||||
BNE :copyin2
|
||||
|
||||
:copyin3 PLA ; get back ending byte
|
||||
BEQ :copyin4 ; opps, there wasnt one
|
||||
|
||||
STA (temp),Y ; save ending byte
|
||||
INC temp
|
||||
BNE :copyin4 ; inc pointers
|
||||
INC temp+1
|
||||
|
||||
:copyin4 LDX temp ; return pointers
|
||||
LDA temp+1
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* copy a line of input to some location uppercase
|
||||
*-------------------------------
|
||||
|
||||
ucopyinp ENT
|
||||
STX temp ; point to dest
|
||||
STA temp+1
|
||||
TYA
|
||||
PHA ; save ending byte
|
||||
|
||||
LDX #0 ; start offsets
|
||||
LDY #0
|
||||
:ucopy2 LDA lnbuf,X ; get byte
|
||||
INX
|
||||
CMP #cr ; we done?
|
||||
BEQ :ucopy3 ; yep
|
||||
|
||||
JSR conv ; convert to uppercase
|
||||
STA (temp),Y ; copy and inc pointers
|
||||
INC temp
|
||||
BNE :ucopy2
|
||||
INC temp+1
|
||||
BNE :ucopy2
|
||||
|
||||
:ucopy3 PLA ; get back ending byte
|
||||
BEQ :ucopy4 ; opps, there wasnt one
|
||||
|
||||
STA (temp),Y ; save ending byte
|
||||
INC temp
|
||||
BNE :ucopy4 ; inc pointers
|
||||
INC temp+1
|
||||
|
||||
:ucopy4 LDX temp ; return pointers
|
||||
LDA temp+1
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* print a string pointed by A & X
|
||||
* if y<128, use length = y
|
||||
* if y>127, stop at chr$(y)
|
||||
*-------------------------------
|
||||
|
||||
prstr ENT
|
||||
STX temp
|
||||
STA temp+1 ; point to data
|
||||
STY temp2
|
||||
TYA
|
||||
AND #$7F ; (was $7D ???)
|
||||
STA temp2+1 ; save possible length
|
||||
|
||||
LDY #0
|
||||
:prstr2 LDA (temp),Y ; get data
|
||||
AND #$7F ; clear high
|
||||
INY
|
||||
|
||||
BIT temp2 ; use which compare?
|
||||
BPL :prstr3 ; other one
|
||||
|
||||
CMP temp2+1 ; are we done?
|
||||
BEQ :prstr4 ; yep
|
||||
|
||||
JSR cout ; show and loop
|
||||
JMP :prstr2
|
||||
|
||||
:prstr3 CPY temp2 ; done?
|
||||
BEQ :prstr4 ; yep
|
||||
|
||||
JSR cout
|
||||
BRA :prstr2
|
||||
|
||||
:prstr4 TYA
|
||||
CLC
|
||||
ADC temp ; compute next address
|
||||
TAX
|
||||
LDA #0
|
||||
ADC temp+1
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* get names from a list
|
||||
*-------------------------------
|
||||
|
||||
getname ENT
|
||||
LDY #0
|
||||
LDA (temp4),Y ; we done?
|
||||
SEC
|
||||
BEQ :getnam3
|
||||
|
||||
:getnam2 LDA (temp4),Y ; copy name
|
||||
STA flname+1,Y
|
||||
INY
|
||||
CMP #0
|
||||
BNE :getnam2
|
||||
|
||||
DEY
|
||||
STY flname ; save length
|
||||
|
||||
TYA
|
||||
SEC
|
||||
ADC temp4 ; update length
|
||||
STA temp4
|
||||
LDA temp4+1
|
||||
ADC #0
|
||||
STA temp4+1
|
||||
CLC
|
||||
:getnam3 RTS
|
||||
|
||||
*-------------------------------
|
||||
* translate a binary to text [0-99]
|
||||
*-------------------------------
|
||||
|
||||
bindec8 ENT
|
||||
LDY #0 ; start 10's counter
|
||||
:bin8 CMP #10
|
||||
BCC :bin8a ; less than 10, were done
|
||||
|
||||
SBC #10 ; minus 10
|
||||
INY ; add 1 to the 10's counter
|
||||
BNE :bin8 ; loop
|
||||
|
||||
:bin8a ADC #'0' ; make 1's into text
|
||||
TAX ; save
|
||||
TYA
|
||||
ADC #'0' ; make 10's into text
|
||||
RTS ; were done
|
||||
|
||||
*-------------------------------
|
||||
* input a number [X-A point to text]
|
||||
*-------------------------------
|
||||
|
||||
numin ENT
|
||||
STX numptr ; point to text
|
||||
STA numptr+1
|
||||
LDA #0
|
||||
STA num ; zero totals
|
||||
STA num+1
|
||||
|
||||
:numin2 LDY #0
|
||||
LDA (numptr),Y ; get digit
|
||||
AND #$7F ; clear high
|
||||
SEC
|
||||
SBC #'0' ; make in 0-9 range
|
||||
CMP #'9'+1
|
||||
BCS :numin4 ; opps, we are done
|
||||
|
||||
INC numptr ; point to next byte
|
||||
BNE *+4
|
||||
INC numptr+1
|
||||
|
||||
STA num+2 ; save digit
|
||||
LDA #0
|
||||
STA num+3
|
||||
|
||||
LDX #10
|
||||
:numin3 CLC ; num = num + num2
|
||||
LDA num
|
||||
ADC num+2
|
||||
STA num+2
|
||||
LDA num+1
|
||||
ADC num+3
|
||||
STA num+3
|
||||
DEX
|
||||
BNE :numin3 ; num = num * 10
|
||||
|
||||
LDA num+2 ; move result
|
||||
STA num
|
||||
LDA num+3
|
||||
STA num+1
|
||||
JMP :numin2 ; loop
|
||||
|
||||
:numin4 LDX num ; return value
|
||||
LDA num+1
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* display a decimal number [0 to 65535]
|
||||
*-------------------------------
|
||||
|
||||
decmem ENT
|
||||
STX num ; save number
|
||||
STA num+1
|
||||
|
||||
LDA #0
|
||||
STA num+2
|
||||
STA num+3
|
||||
STA num+5
|
||||
STA num+6
|
||||
|
||||
SED
|
||||
LDY #16 ; use decimal mode
|
||||
:decmem2 ASL num
|
||||
ROL num+1
|
||||
LDA num+2
|
||||
ADC num+2 ; do actual 'woz' conversion
|
||||
STA num+2
|
||||
LDA num+3
|
||||
ADC num+3
|
||||
STA num+3
|
||||
ROL num+4
|
||||
DEY ; loop down
|
||||
BNE :decmem2
|
||||
|
||||
CLD ; done with decimal
|
||||
LDY #4 ; print 5 digits
|
||||
|
||||
:decmem3 LDA num+4 ; get digit
|
||||
AND #$F
|
||||
BNE :decmem4 ; is it zero?
|
||||
|
||||
BIT num+5 ; is this a leading zero?
|
||||
BPL :decmem5 ; yep
|
||||
|
||||
:decmem4 DEC num+5
|
||||
CLC
|
||||
ADC #'0' ; print digit
|
||||
LDX num+6
|
||||
STA txtnum+1,X ; save number to memory
|
||||
INC num+6
|
||||
|
||||
:decmem5 LDX #3 ; move up next digit
|
||||
:decmem6 ASL num+1
|
||||
ROL num+2
|
||||
ROL num+3
|
||||
ROL num+4
|
||||
DEX
|
||||
BPL :decmem6
|
||||
|
||||
DEY ; count down digits
|
||||
BMI :decmem7
|
||||
BNE :decmem3
|
||||
|
||||
STX num+5 ; print last zero for sure
|
||||
BPL :decmem3
|
||||
:decmem7 LDA num+6 ; save number length
|
||||
STA txtnum
|
||||
RTS
|
||||
|
||||
num DS 7
|
||||
txtnum DS 6
|
||||
|
||||
*-------------------------------
|
||||
* escape handler
|
||||
*-------------------------------
|
||||
|
||||
escape ENT
|
||||
STA escadr ; possible reset
|
||||
CMP #0 ; turn off handler?
|
||||
BEQ :esc2 ; yep
|
||||
|
||||
STX escadr+1 ; save escape address
|
||||
STA escadr+2
|
||||
TSX
|
||||
STX escadr+3 ; save stack location
|
||||
LDA #-1
|
||||
STA escadr ; turn on handler
|
||||
:esc2 RTS
|
||||
|
||||
; check for esc and handle if needed
|
||||
chk_esc BIT escadr ; is handler enabled?
|
||||
BPL :esc3 ; nope
|
||||
|
||||
PHA
|
||||
AND #$7F ; did escape occur?
|
||||
CMP #esc
|
||||
BNE :esc2 ; nope
|
||||
|
||||
LDA escadr+1 ; setup jump location
|
||||
STA temp
|
||||
LDA escadr+2
|
||||
STA temp+1
|
||||
LDX escadr+3
|
||||
TXS ; reset stack
|
||||
PLA
|
||||
PLA ; restore stack
|
||||
JMP (temp) ; change program control
|
||||
|
||||
:esc2 PLA
|
||||
:esc3 RTS
|
||||
|
||||
escadr DB 0,0,0,0
|
||||
|
||||
*-------------------------------
|
||||
* print a number
|
||||
*-------------------------------
|
||||
|
||||
prnumb ENT
|
||||
JSR decmem ; convert number
|
||||
LDX #<txtnum+1
|
||||
LDA #>txtnum+1
|
||||
LDY txtnum
|
||||
INY ; display it
|
||||
JMP prstr
|
||||
|
||||
*-------------------------------
|
||||
* wait for a return
|
||||
*-------------------------------
|
||||
|
||||
get_cr ENT
|
||||
JSR print
|
||||
DB 1,22,0
|
||||
ASC 'Press [RETURN] to continue...'00
|
||||
|
||||
wait_cr JSR rdkey
|
||||
CMP #cr
|
||||
BNE wait_cr
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* wait for a 'g'o message
|
||||
*-------------------------------
|
||||
|
||||
get_ok ENT
|
||||
JSR print
|
||||
DB 1,20,0
|
||||
ASC 'Press [RETURN] when diskette is online.'00
|
||||
|
||||
BRA wait_cr
|
||||
|
||||
+189
@@ -0,0 +1,189 @@
|
||||
LST OFF
|
||||
TR
|
||||
TR ADR
|
||||
********************************
|
||||
* *
|
||||
* Config Program - Start *
|
||||
* *
|
||||
********************************
|
||||
|
||||
*-------------------------------
|
||||
* Date: 3/11/88
|
||||
*-------------------------------
|
||||
|
||||
REL
|
||||
m_vers = '1' ; make into ascii # (Main Version)
|
||||
s_vers = '0' ; make into ascii # (Sub Version)
|
||||
p_vers = '5' ; make into ascii # (Patch Version)
|
||||
|
||||
entrmon = $FF59
|
||||
|
||||
prn = $16 ; [4 bytes]
|
||||
|
||||
reset = $3F2
|
||||
mli = $BF00
|
||||
|
||||
DSK REL/START
|
||||
|
||||
findcon EXT
|
||||
VideoStartup EXT
|
||||
cls EXT
|
||||
print EXT
|
||||
inpyn EXT
|
||||
inpnum EXT
|
||||
ld_drvs EXT
|
||||
do_init EXT
|
||||
drv_path EXT
|
||||
refnum EXT
|
||||
escape EXT
|
||||
close EXT
|
||||
logcon EXT
|
||||
re_mdm EXT
|
||||
re_pr EXT
|
||||
re_clk EXT
|
||||
do_dflts EXT
|
||||
do_filt EXT
|
||||
TopBox EXT
|
||||
|
||||
|
||||
begin ENT
|
||||
STA $C051 ;text mode
|
||||
STA $C00E ;Turn MouseText off
|
||||
BIT $C082
|
||||
|
||||
LDA #<do_quit ;fudge reset vector
|
||||
STA reset
|
||||
LDA #>do_quit
|
||||
STA reset+1
|
||||
EOR #$A5
|
||||
STA reset+2
|
||||
|
||||
LDX #$F0 ;reset stack
|
||||
TXS
|
||||
|
||||
JSR findcon ;find the config disk, logit
|
||||
JSR VideoStartup ; Init the video driver
|
||||
|
||||
JSR do_main
|
||||
|
||||
JSR cls ; clear screen
|
||||
JSR print
|
||||
DB 1,7,0
|
||||
ASC 'When you do an initial configure, '
|
||||
ASC 'all previous data will be destroyed'0D0D
|
||||
ASC 'and replaced with the new configuration. '
|
||||
ASC 'All old data will be lost.'0D0D0D
|
||||
ASC 'Do you want to do an Initial Configure? [Y/N] '00
|
||||
|
||||
JSR inpyn ; input yes/no
|
||||
BCS :no_init
|
||||
|
||||
JSR ld_drvs ; load in drivers file
|
||||
JMP do_init ; do initial config
|
||||
|
||||
*-------------------------------
|
||||
|
||||
:no_init JSR drv_path ; get drivers file path and load it
|
||||
|
||||
start ENT
|
||||
LDA #0 ; turn off escape handler
|
||||
STA refnum
|
||||
JSR escape
|
||||
JSR close ; close all files
|
||||
JSR logcon
|
||||
|
||||
JSR do_main
|
||||
|
||||
JSR cls ; clear screen
|
||||
JSR print
|
||||
ASC 'Select an Option:'0D0D
|
||||
ASC ' 1 - Reconfigure Modem '0D
|
||||
ASC ' 2 - Reconfigure Printer '0D
|
||||
ASC ' 3 - Reconfigure Clock'0D
|
||||
ASC ' 4 - Edit System Defualts'0D
|
||||
ASC ' 5 - Edit Profanity Filter'0D
|
||||
ASC ' 6 - Quit',0D0D
|
||||
|
||||
ASC 'Which? [1-6] '00
|
||||
|
||||
LDX #7 ; get a number [1-6]
|
||||
JSR inpnum
|
||||
|
||||
PHA
|
||||
LDX #<start
|
||||
LDA #>start
|
||||
JSR escape ;esc goes back to here
|
||||
PLA
|
||||
ASL
|
||||
TAX
|
||||
|
||||
LDA jumptable,X
|
||||
STA prn
|
||||
INX ;push low
|
||||
LDA jumptable,X
|
||||
STA prn+1
|
||||
JMP (prn)
|
||||
|
||||
jumptable DA 0
|
||||
DA re_mdm ; 1
|
||||
DA re_pr ; 2
|
||||
DA re_clk ; 3
|
||||
DA do_dflts ; 4
|
||||
DA do_filt ; 5
|
||||
DA do_quit ; 6
|
||||
DA do_mtr ; 7 (hidden command)
|
||||
|
||||
*-------------------------------
|
||||
* print the top box
|
||||
|
||||
do_main ENT
|
||||
JSR TopBox
|
||||
JSR print
|
||||
DB 1,2,19
|
||||
ASC 'LLUCE - Configuration Program - Ver. '
|
||||
DB m_vers ; major version #
|
||||
ASC '.'
|
||||
DB s_vers ; sub version #
|
||||
DB p_vers ; patch version #
|
||||
DB 0
|
||||
|
||||
JSR print
|
||||
DB 1,4,20
|
||||
ASC 'Copyright 1989 - L&L Productions, Inc.'00
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
|
||||
drvname ENT
|
||||
STR 'LLUCE.DRIVERS'
|
||||
|
||||
*-------------------------------
|
||||
* Quit
|
||||
*-------------------------------
|
||||
|
||||
; quit the program
|
||||
do_quit ENT
|
||||
JSR $FC58 ; clear screen
|
||||
STA $C051 ; goto text mode
|
||||
|
||||
LDA #$FF ; reset inverse flag
|
||||
STA $32
|
||||
|
||||
|
||||
JSR mli
|
||||
DB $65 ; quit
|
||||
DA p_quit
|
||||
RTS
|
||||
|
||||
|
||||
p_quit DB 4
|
||||
DB 0
|
||||
DA 0
|
||||
DB 0
|
||||
DA 0
|
||||
|
||||
do_mtr LDA #-1
|
||||
STA $32
|
||||
|
||||
JMP entrmon ; monitor
|
||||
|
||||
+289
@@ -0,0 +1,289 @@
|
||||
LST OFF
|
||||
TR
|
||||
TR ADR
|
||||
*-------------------------------
|
||||
* video driver for config
|
||||
*-------------------------------
|
||||
* Date: 3/11/88
|
||||
*-------------------------------
|
||||
|
||||
REL
|
||||
cr = $D
|
||||
lf = $A
|
||||
bs = 8
|
||||
|
||||
x_save = 9
|
||||
y_save = $A
|
||||
base = $D
|
||||
inverse = $10
|
||||
ch = $24
|
||||
cv = $25
|
||||
|
||||
page1 = $C054
|
||||
page2 = $C055
|
||||
|
||||
DSK REL/VIDEO
|
||||
|
||||
VideoStartup ENT
|
||||
STA $C00D ;set80vid
|
||||
STA $C001 ;set80col
|
||||
STA page1
|
||||
|
||||
LDA #0 ; set to page 1
|
||||
STA inverse ; set to normal mode
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
|
||||
cls ENT
|
||||
LDA #6 ;clear screen
|
||||
STA cv ;line 6 on down
|
||||
|
||||
clslup2 LDA cv ;clear to end of screen
|
||||
ASL ;cv := cv * 2
|
||||
TAY
|
||||
LDA LineAddress,y
|
||||
STA base
|
||||
INY
|
||||
LDA LineAddress,y
|
||||
STA base+1
|
||||
|
||||
LDY #39
|
||||
LDA #" "
|
||||
:loop STA (base),y
|
||||
DEY
|
||||
BPL :loop
|
||||
|
||||
STA page2 ;do aux part
|
||||
LDY #39
|
||||
:loop2 STA (base),y ;do the line
|
||||
DEY
|
||||
BPL :loop2
|
||||
STA page1 ;back to page 1
|
||||
|
||||
INC cv
|
||||
LDA cv
|
||||
CMP #24
|
||||
BNE clslup2
|
||||
|
||||
LDA #0 ;0,6
|
||||
STA ch
|
||||
LDA #7
|
||||
STA cv
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
|
||||
cleos ENT
|
||||
STX cv
|
||||
JMP clslup2
|
||||
|
||||
cleol ENT
|
||||
PHA
|
||||
LDA ch ; save location of cursor
|
||||
PHA
|
||||
LDA cv
|
||||
PHA
|
||||
|
||||
:cleol2 LDA #' '
|
||||
JSR cout ; put space over char
|
||||
LDA ch
|
||||
BNE :cleol2 ; go until it wraps to next line
|
||||
|
||||
PLA
|
||||
STA cv ; put cursor back
|
||||
PLA
|
||||
STA ch
|
||||
PLA
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
|
||||
TopBox ENT
|
||||
PHA
|
||||
|
||||
LDA #0
|
||||
STA cv
|
||||
|
||||
JSR doILine
|
||||
INC cv
|
||||
JSR doEdge
|
||||
INC cv
|
||||
JSR doEdge
|
||||
INC cv
|
||||
JSR doEdge
|
||||
INC cv
|
||||
JSR doEdge
|
||||
INC cv
|
||||
JSR doILine
|
||||
|
||||
STA page2
|
||||
LDY #0
|
||||
LDA #' '
|
||||
STA (base),y
|
||||
STA page1
|
||||
|
||||
LDY #39
|
||||
LDA #' '
|
||||
STA (base),y
|
||||
|
||||
PLA
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
|
||||
doEdge JSR makebase
|
||||
|
||||
LDY #39
|
||||
LDA #" "
|
||||
:loop STA (base),y
|
||||
DEY
|
||||
BPL :loop
|
||||
|
||||
STA page2
|
||||
LDY #39
|
||||
:loop2 STA (base),y
|
||||
DEY
|
||||
BPL :loop2
|
||||
|
||||
LDY #0
|
||||
LDA #' '
|
||||
STA (base),y
|
||||
STA page1
|
||||
|
||||
LDY #39
|
||||
LDA #' '
|
||||
STA (base),y
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* print an inverse line across the screen
|
||||
|
||||
doILine JSR makebase
|
||||
|
||||
LDY #39
|
||||
LDA #"_"
|
||||
:loop STA (base),y
|
||||
DEY
|
||||
BPL :loop
|
||||
|
||||
STA page2
|
||||
LDY #39
|
||||
:loop2 STA (base),y
|
||||
DEY
|
||||
BPL :loop2
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
|
||||
makebase LDA cv
|
||||
ASL
|
||||
TAY ;setup indirect address
|
||||
LDA LineAddress,y
|
||||
STA base
|
||||
INY
|
||||
LDA LineAddress,y
|
||||
STA base+1
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
|
||||
plotchr ENT
|
||||
PHA ; save
|
||||
|
||||
JSR makebase ;setup indirect for screen address
|
||||
|
||||
LDA ch
|
||||
LSR
|
||||
TAY
|
||||
BCS :odd ;it's odd, so page 1
|
||||
STA page2
|
||||
|
||||
:odd PLA
|
||||
ORA #$80 ;set high bit
|
||||
STA (base),y ;put it onto the screen
|
||||
STA page1
|
||||
RTS
|
||||
|
||||
*-------------------------------
|
||||
* output a character
|
||||
|
||||
cout ENT
|
||||
STX x_save ; save everything
|
||||
STY y_save
|
||||
PHA
|
||||
|
||||
AND #$7F ; clear high
|
||||
CMP #cr
|
||||
BEQ :cout2
|
||||
CMP #lf
|
||||
BEQ :cout3
|
||||
CMP #bs
|
||||
BEQ :cout5
|
||||
CMP #' '
|
||||
BCC :cout4
|
||||
|
||||
JSR plotchr ; plot the sucker
|
||||
|
||||
INC ch ; move over 1 space
|
||||
LDY ch
|
||||
CPY #80 ; wrap-around?
|
||||
BNE :cout4 ; nope
|
||||
|
||||
:cout2 LDY #0 ; reset horiz
|
||||
STY ch
|
||||
|
||||
:cout3 INC cv ; go down 1 line
|
||||
LDA cv ; is it in range?
|
||||
CMP #24
|
||||
BNE :cout4 ; nope
|
||||
|
||||
DEC cv ; put it back
|
||||
|
||||
:cout4 PLA
|
||||
LDX x_save ; restore stuff
|
||||
LDY y_save
|
||||
RTS
|
||||
|
||||
:cout5 DEC ch ; backup
|
||||
BPL :cout4 ; all is well
|
||||
|
||||
LDA #79 ; move to end of line
|
||||
STA ch
|
||||
|
||||
LDA cv ; are we at the top
|
||||
CMP #0
|
||||
BEQ :cout4 ; yep
|
||||
|
||||
DEC cv
|
||||
JMP :cout4 ; ok, we are done
|
||||
|
||||
*-------------------------------
|
||||
|
||||
LineAddress DA $400
|
||||
DA $480
|
||||
DA $500
|
||||
DA $580
|
||||
DA $600 ;first 1/3 of text screen
|
||||
DA $680
|
||||
DA $700
|
||||
DA $780
|
||||
|
||||
DA $428
|
||||
DA $4A8
|
||||
DA $528
|
||||
DA $5A8
|
||||
DA $628 ;second 1/3 of text screen
|
||||
DA $6A8
|
||||
DA $728
|
||||
DA $7A8
|
||||
|
||||
DA $450
|
||||
DA $4D0
|
||||
DA $550
|
||||
DA $5D0
|
||||
DA $650 ;last 1/3 of text screen
|
||||
DA $6D0
|
||||
DA $750
|
||||
DA $7D0
|
||||
|
||||
Reference in New Issue
Block a user