Files
2026-05-07 10:02:50 +12:00

243 lines
4.3 KiB
ArmAsm

;most references to kernal are defined here
;
erexit cmp #$f0 ;check for special case
bne erexix
; top of memory has changed
sty memsiz+1
stx memsiz
jmp cleart ;act as if he typed clear
erexix tax ;set termination flags
bne erexiy
ldx #erbrk ;break error
erexiy jmp error ;normal error
clschn =$ffcc
outch jsr $ffd2
bcs erexit
rts
inchr jsr $ffcf
bcs erexit
rts
ccall =$ffe7
settim =$ffdb
rdtim =$ffde
coout jsr ppach ; go out to save .a for print# patch
bcs erexit
rts
coin jsr $ffc6
bcs erexit
rts
readst =$ffb7
cgetl jsr $ffe4
bcs erexit
rts
rdbas =$fff3
setmsg =$ff90
plot =$fff0
csys jsr frmnum ;eval formula
jsr getadr ;convert to int. addr
lda #>csysrz ;push return address
pha
lda #<csysrz
pha
lda spreg ;status reg
pha
lda sareg ;load 6502 regs
ldx sxreg
ldy syreg
plp ;load 6502 status reg
jmp (linnum) ;go do it
csysrz =*-1 ;return to here
php ;save status reg
sta sareg ;save 6502 regs
stx sxreg
sty syreg
pla ;get status reg
sta spreg
rts ;return to system
csave jsr plsv ;parse parms
ldx vartab ;end save addr
ldy vartab+1
lda #<txttab ;indirect with start address
jsr $ffd8 ;save it
bcs erexit
rts
cverf lda #1 ;verify flag
.byt $2c ;skip two bytes
cload lda #0 ;load flag
sta verck
jsr plsv ;parse parameters
;
cld10 ; jsr $ffe1 ;check run/stop
; cmp #$ff ;done yet?
; bne cld10 ;still bouncing
lda verck
ldx txttab ;.x and .y have alt...
ldy txttab+1 ;...load address
jsr $ffd5 ;load it
bcs jerxit ;problems
;
lda verck
beq cld50 ;was load
;
;finish verify
;
ldx #ervfy ;assume error
jsr $ffb7 ;read status
and #$10 ;check error
bne cld55 ;replaces beq *+5/jmp error
;
;print verify 'ok' if direct
;
lda txtptr
cmp #bufpag
beq cld20
lda #<okmsg
ldy #>okmsg
jmp strout
;
cld20 rts
;
;finish load
;
cld50 jsr $ffb7 ;read status
and #$ff-$40 ;clear e.o.i.
beq cld60 ;was o.k.
ldx #erload
cld55 jmp error
;
cld60 lda txtptr+1
cmp #bufpag ;direct?
bne cld70 ;no...
;
stx vartab
sty vartab+1 ;end load address
lda #<reddy
ldy #>reddy
jsr strout
jmp fini
;
;program load
;
cld70 jsr stxtpt
jsr lnkprg
jmp fload
copen jsr paoc ;parse statement
jsr $ffc0 ;open it
bcs jerxit ;bad stuff or memsiz change
rts ;a.o.k.
cclos jsr paoc ;parse statement
lda andmsk ;get la
jsr $ffc3 ;close it
bcc cld20 ;it's okay...no memsize change
;
jerxit jmp erexit
;
;parse load and save commands
;
plsv
;default file name
;
lda #0 ;length=0
jsr $ffbd
;
;default device #
;
ldx #1 ;device #1
ldy #0 ;command 0
jsr $ffba
;
jsr paoc20 ;by-pass junk
jsr paoc15 ;get/set file name
jsr paoc20 ;by-pass junk
jsr plsv7 ;get ',fa'
ldy #0 ;command 0
stx andmsk
jsr $ffba
jsr paoc20 ;by-pass junk
jsr plsv7 ;get ',sa'
txa ;new command
tay
ldx andmsk ;device #
jmp $ffba
;look for comma followed by byte
plsv7 jsr paoc30
jmp getbyt
;skip return if next char is end
;
paoc20 jsr chrgot
bne paocx
pla
pla
paocx rts
;check for comma and good stuff
;
paoc30 jsr chkcom ;check comma
paoc32 jsr chrgot ;get current
bne paocx ;is o.k.
paoc40 jmp snerr ;bad...end of line
;parse open/close
;
paoc lda #0
jsr $ffbd ;default file name
;
jsr paoc32 ;must got something
jsr getbyt ;get la
stx andmsk
txa
ldx #1 ;default device
ldy #0 ;default command
jsr $ffba ;store it
jsr paoc20 ;skip junk
jsr plsv7
stx eormsk
ldy #0 ;default command
lda andmsk ;get la
cpx #3
bcc paoc5
dey ;default ieee to $ff
paoc5 jsr $ffba ;store them
jsr paoc20 ;skip junk
jsr plsv7 ;get sa
txa
tay
ldx eormsk
lda andmsk
jsr $ffba ;set up real eveything
paoc7 jsr paoc20
jsr paoc30
paoc15 jsr frmevl
jsr frestr ;length in .a
ldx index1
ldy index1+1
jmp $ffbd
; rsr 8/10/80 - change sys command
; rsr 8/26/80 - add open&close memsiz detect
; rsr 10/7/80 - change load (remove run wait)
; rsr 4/10/82 - inline fix program load
; rsr 7/02/82 - fix print# problem