273 lines
7.7 KiB
ArmAsm
273 lines
7.7 KiB
ArmAsm
;declare 6510 ports
|
|
d6510 = 0 ;6510 data direction register
|
|
r6510 = 1 ;6510 data register
|
|
|
|
.segment "ZPKERNAL" : zeropage
|
|
status .res 1 ;i/o operation status byte
|
|
; crfac .res 2 ;correction factor (unused)
|
|
stkey .res 1 ;stop key flag
|
|
svxt .res 1 ;temporary
|
|
verck .res 1 ;load or verify flag
|
|
c3p0 .res 1 ;ieee buffered char flag
|
|
bsour .res 1 ;char buffer for ieee
|
|
syno .res 1 ;cassette sync #
|
|
xsav .res 1 ;temp for basin
|
|
ldtnd .res 1 ;index to logical file
|
|
dfltn .res 1 ;default input device #
|
|
dflto .res 1 ;default output device #
|
|
prty .res 1 ;cassette parity
|
|
dpsw .res 1 ;cassette dipole switch
|
|
msgflg .res 1 ;os message flag
|
|
ptr1 ;cassette error pass1
|
|
t1 .res 1 ;temporary 1
|
|
tmpc
|
|
ptr2 ;cassette error pass2
|
|
t2 .res 1 ;temporary 2
|
|
time .res 3 ;24 hour clock in 1/60th seconds
|
|
r2d2 ;serial bus usage
|
|
pcntr .res 1 ;cassette stuff
|
|
; ptch .res 1 (unused)
|
|
bsour1 ;temp used by serial routine
|
|
firt .res 1
|
|
count ;temp used by serial routine
|
|
cntdn .res 1 ;cassette sync countdown
|
|
bufpt .res 1 ;cassette buffer pointer
|
|
inbit ;rs-232 rcvr input bit storage
|
|
shcnl .res 1 ;cassette short count
|
|
bitci ;rs-232 rcvr bit count in
|
|
rer .res 1 ;cassette read error
|
|
rinone ;rs-232 rcvr flag for start bit check
|
|
rez .res 1 ;cassete reading zeroes
|
|
ridata ;rs-232 rcvr byte buffer
|
|
rdflg .res 1 ;cassette read mode
|
|
riprty ;rs-232 rcvr parity storage
|
|
shcnh .res 1 ;cassette short cnt
|
|
sal .res 1
|
|
sah .res 1
|
|
eal .res 1
|
|
eah .res 1
|
|
cmp0 .res 1
|
|
temp .res 1
|
|
tape1 .res 2 ;address of tape buffer #1y.
|
|
bitts ;rs-232 trns bit count
|
|
snsw1 .res 1
|
|
nxtbit ;rs-232 trns next bit to be sent
|
|
diff .res 1
|
|
rodata ;rs-232 trns byte buffer
|
|
prp .res 1
|
|
fnlen .res 1 ;length current file n str
|
|
la .res 1 ;current file logical addr
|
|
sa .res 1 ;current file 2nd addr
|
|
fa .res 1 ;current file primary addr
|
|
fnadr .res 2 ;addr current file name str
|
|
roprty ;rs-232 trns parity buffer
|
|
ochar .res 1
|
|
fsblk .res 1 ;cassette read block count
|
|
mych .res 1
|
|
cas1 .res 1 ;cassette manual/controlled switch
|
|
tmp0
|
|
stal .res 1
|
|
stah .res 1
|
|
memuss ;cassette load temps (2 bytes)
|
|
tmp2 .res 2
|
|
;
|
|
;variables for screen editor
|
|
;
|
|
lstx .res 1 ;key scan index
|
|
; sfst .res 1 ;keyboard shift flag (unused)
|
|
ndx .res 1 ;index to keyboard q
|
|
rvs .res 1 ;rvs field on flag
|
|
indx .res 1
|
|
lsxp .res 1 ;x pos at start
|
|
lstp .res 1
|
|
sfdx .res 1 ;shift mode on print
|
|
blnsw .res 1 ;cursor blink enab
|
|
blnct .res 1 ;count to toggle cur
|
|
gdbln .res 1 ;char before cursor
|
|
blnon .res 1 ;on/off blink flag
|
|
crsw .res 1 ;input vs get flag
|
|
pnt .res 2 ;pointer to row
|
|
; point .res 1 (unused)
|
|
pntr .res 1 ;pointer to column
|
|
qtsw .res 1 ;quote switch
|
|
lnmx .res 1 ;40/80 max positon
|
|
tblx .res 1
|
|
data .res 1
|
|
insrt .res 1 ;insert mode flag
|
|
ldtb1 .res 26 ;line flags+endspace
|
|
user .res 2 ;screen editor color ip
|
|
keytab .res 2 ;keyscan table indirect
|
|
;rs-232 z-page
|
|
ribuf .res 2 ;rs-232 input buffer pointer
|
|
robuf .res 2 ;rs-232 output buffer pointer
|
|
frekzp .res 4 ;free kernal zero page 9/24/80
|
|
baszpt .res 1 ;location ($00ff) used by basic
|
|
|
|
.segment "STACK"
|
|
bad .res 1
|
|
.segment "KVAR"
|
|
buf .res 89 ;basic/monitor buffer
|
|
|
|
; tables for open files
|
|
;
|
|
lat .res 10 ;logical file numbers
|
|
fat .res 10 ;primary device numbers
|
|
sat .res 10 ;secondary addresses
|
|
|
|
; system storage
|
|
;
|
|
keyd .res 10 ;irq keyboard buffer
|
|
memstr .res 2 ;start of memory
|
|
memsiz .res 2 ;top of memory
|
|
timout .res 1 ;ieee timeout flag
|
|
|
|
; screen editor storage
|
|
;
|
|
color .res 1 ;activ color nybble
|
|
gdcol .res 1 ;original color before cursor
|
|
hibase .res 1 ;base location of screen (top)
|
|
xmax .res 1
|
|
rptflg .res 1 ;key repeat flag
|
|
kount .res 1
|
|
delay .res 1
|
|
shflag .res 1 ;shift flag byte
|
|
lstshf .res 1 ;last shift pattern
|
|
keylog .res 2 ;indirect for keyboard table setup
|
|
mode .res 1 ;0-pet mode, 1-cattacanna
|
|
autodn .res 1 ;auto scroll down flag(=0 on,<>0 off)
|
|
|
|
; rs-232 storage
|
|
;
|
|
m51ctr .res 1 ;6551 control register
|
|
m51cdr .res 1 ;6551 command register
|
|
m51ajb .res 2 ;non standard (bittime/2-100)
|
|
rsstat .res 1 ; rs-232 status register
|
|
bitnum .res 1 ;number of bits to send (fast response)
|
|
baudof .res 2 ;baud rate full bit time (created by open)
|
|
;
|
|
; reciever storage
|
|
;
|
|
; inbit .res 1 ;input bit storage
|
|
; bitci .res 1 ;bit count in
|
|
; rinone .res 1 ;flag for start bit check
|
|
; ridata .res 1 ;byte in buffer
|
|
; riprty .res 1 ;byte in parity storage
|
|
ridbe .res 1 ;input buffer index to end
|
|
ridbs .res 1 ;input buffer pointer to start
|
|
;
|
|
; transmitter storage
|
|
;
|
|
; bitts .res 1 ;# of bits to be sent
|
|
; nxtbit .res 1 ;next bit to be sent
|
|
; roprty .res 1 ;parity of byte sent
|
|
; rodata .res 1 ;byte buffer out
|
|
rodbs .res 1 ;output buffer index to start
|
|
rodbe .res 1 ;output buffer index to end
|
|
;
|
|
irqtmp .res 2 ;holds irq during tape ops
|
|
;
|
|
; temp space for vic-40 variables ****
|
|
;
|
|
enabl .res 1 ;rs-232 enables (replaces ier)
|
|
caston .res 1 ;tod sense during cassettes
|
|
kika26 .res 1 ;temp storage for cassette read routine
|
|
stupid .res 1 ;temp d1irq indicator for cassette read
|
|
lintmp .res 1 ;temporary for line index
|
|
palnts .res 1 ;pal vs ntsc flag 0=ntsc 1=pal
|
|
|
|
.segment "KVECTORS";rem kernal/os indirects(20)
|
|
cinv .res 2 ;irq ram vector
|
|
cbinv .res 2 ;brk instr ram vector
|
|
nminv .res 2 ;nmi ram vector
|
|
iopen .res 2 ;indirects for code
|
|
iclose .res 2 ; conforms to kernal spec 8/19/80
|
|
ichkin .res 2
|
|
ickout .res 2
|
|
iclrch .res 2
|
|
ibasin .res 2
|
|
ibsout .res 2
|
|
istop .res 2
|
|
igetin .res 2
|
|
iclall .res 2
|
|
usrcmd .res 2
|
|
iload .res 2
|
|
isave .res 2 ;savesp
|
|
|
|
tbuffr =$033C ;cassette data buffer
|
|
|
|
vicscn =$0400
|
|
|
|
; i/o devices
|
|
;
|
|
vicreg =$d000
|
|
|
|
sidreg =$d400
|
|
|
|
viccol =$d800 ;vic color nybbles
|
|
|
|
cia1 =$dc00 ;device1 6526 (page1 irq)
|
|
d1pra =cia1+0
|
|
colm =d1pra ;keyboard matrix
|
|
d1prb =cia1+1
|
|
rows =d1prb ;keyboard matrix
|
|
d1ddra =cia1+2
|
|
d1ddrb =cia1+3
|
|
d1t1l =cia1+4
|
|
d1t1h =cia1+5
|
|
d1t2l =cia1+6
|
|
d1t2h =cia1+7
|
|
d1tod1 =cia1+8
|
|
d1tods =cia1+9
|
|
d1todm =cia1+10
|
|
d1todh =cia1+11
|
|
d1sdr =cia1+12
|
|
d1icr =cia1+13
|
|
d1cra =cia1+14
|
|
d1crb =cia1+15
|
|
|
|
cia2 =$dd00 ;device2 6526 (page2 nmi)
|
|
d2pra =cia2+0
|
|
d2prb =cia2+1
|
|
d2ddra =cia2+2
|
|
d2ddrb =cia2+3
|
|
d2t1l =cia2+4
|
|
d2t1h =cia2+5
|
|
d2t2l =cia2+6
|
|
d2t2h =cia2+7
|
|
d2tod1 =cia2+8
|
|
d2tods =cia2+9
|
|
d2todm =cia2+10
|
|
d2todh =cia2+11
|
|
d2sdr =cia2+12
|
|
d2icr =cia2+13
|
|
d2cra =cia2+14
|
|
d2crb =cia2+15
|
|
|
|
timrb =$19 ;6526 crb enable one-shot tb
|
|
|
|
;tape block types
|
|
;
|
|
eot =5 ;end of tape
|
|
blf =1 ;basic load file
|
|
bdf =2 ;basic data file
|
|
plf =3 ;fixed program type
|
|
bdfh =4 ;basic data file header
|
|
bufsz =192 ;buffer size
|
|
;
|
|
;screen editor constants
|
|
;
|
|
llen =40 ;single line 40 columns
|
|
llen2 =80 ;double line = 80 columns
|
|
nlines =25 ;25 rows on screen
|
|
white =$01 ;white screen color
|
|
blue =$06 ;blue char color
|
|
cr =$d ;carriage return
|
|
|
|
;rsr 8/3/80 add & change z-page
|
|
;rsr 8/11/80 add memuss & plf type
|
|
;rsr 8/22/80 add rs-232 routines
|
|
;rsr 8/24/80 add open variables
|
|
;rsr 8/29/80 add baud space move rs232 to z-page
|
|
;rsr 9/2/80 add screen editor vars&con
|
|
;rsr 12/7/81 modify for vic-40
|