1;most references to kernal are defined here 2; 3erexit cmp #$f0 ;check for special case 4 bne erexix 5; top of memory has changed 6 sty memsiz+1 7 stx memsiz 8 jmp cleart ;act as if he typed clear 9erexix tax ;set termination flags 10 bne erexiy 11 ldx #erbrk ;break error 12erexiy jmp error ;normal error 13 14clschn =$ffcc 15 16outch jsr $ffd2 17 bcs erexit 18 rts 19 20inchr jsr $ffcf 21 bcs erexit 22 rts 23 24ccall =$ffe7 25 26coout jsr ppach ; go out to save .a for print# patch 27 bcs erexit 28 rts 29 30coin jsr $ffc6 31 bcs erexit 32 rts 33 34readst =$ffb7 35 36cgetl jsr $ffe4 37 bcs erexit 38 rts 39 40setmsg =$ff90 41 42plot =$fff0 43 44csys jsr frmadr ;get int. addr 45 lda #>csysrz ;push return address 46 pha 47 lda #<csysrz 48 pha 49 lda spreg ;status reg 50 pha 51 lda sareg ;load 6502 regs 52 ldx sxreg 53 ldy syreg 54 plp ;load 6502 status reg 55 jmp (linnum) ;go do it 56csysrz =*-1 ;return to here 57 php ;save status reg 58 sta sareg ;save 6502 regs 59 stx sxreg 60 sty syreg 61 pla ;get status reg 62 sta spreg 63 rts ;return to system 64 65csave jsr plsv ;parse parms 66 bcs nsnerr6 67 jmp snerr6 ;disallow bank/address parms 68nsnerr6 ldx vartab ;end save addr 69 ldy vartab+1 70 lda #<txttab ;indirect with start address 71 jsr $ffd8 ;save it 72 bcs erexit 73 rts 74 75cverf lda #1 ;verify flag 76 bra :+ 77 78cload lda #0 ;load flag 79: pha 80 jsr plsv ;parse parameters 81 bcs cld9 82 ldx andmsk 83 stx $9f61 84cld9 pla 85; 86cld10 ; jsr $ffe1 ;check run/stop 87; cmp #$ff ;done yet? 88; bne cld10 ;still bouncing 89 sta verck 90 ldx poker ;.x and .y have alt... 91 ldy poker+1 ;...load address 92 jsr $ffd5 ;load it 93 bcs jerxit ;problems 94; 95 lda verck 96 cmp #1 97 bne cld50 ;was load 98; 99;finish verify 100; 101 ldx #ervfy ;assume error 102 jsr $ffb7 ;read status 103 and #$10 ;check error 104 bne cld55 ;replaces beq *+5/jmp error 105; 106;print verify 'ok' if direct 107; 108 lda txtptr 109 cmp #bufpag 110 beq cld20 111 lda #<okmsg 112 ldy #>okmsg 113 jmp strout 114; 115cld20 rts 116 117; 118;finish load 119; 120cld50 jsr $ffb7 ;read status 121 and #$ff-$40 ;clear e.o.i. 122 beq cld60 ;was o.k. 123 ldx #erload 124cld55 jmp error 125; 126cld60 lda eormsk 127 bne cld20 128 lda txtptr+1 129 cmp #bufpag ;direct? 130 bne cld70 ;no... 131; 132 stx vartab 133 sty vartab+1 ;end load address 134 lda #<reddy 135 ldy #>reddy 136 jsr strout 137 jmp fini 138; 139;program load 140; 141cld70 jsr stxtpt 142 jsr lnkprg 143 jmp fload 144 145copen jsr paoc ;parse statement 146 jsr $ffc0 ;open it 147 bcs jerxit ;bad stuff or memsiz change 148 rts ;a.o.k. 149 150snerr6 jmp snerr 151 152cclos jsr paoc ;parse statement 153 lda andmsk ;get la 154 jsr $ffc3 ;close it 155 bcc cld20 ;it's okay...no memsize change 156; 157jerxit jmp erexit 158 159; 160;parse load and save commands 161; 162;[filename[,dev[,relocate]]] 163; or: 164;[filename[,dev[,bank,address]]] 165; 166;if the first form is used: 167;- poker points to the start of basic 168;- the carry flag is set 169;- eormsk contains 0 170;otherwise: 171;- relocate is taken as 0 172;- the bank number is in andmsk 173;- poker contains the specified address 174;- the carry flag is clear 175;- eormsk contains 1 176; 177plsv 178;default file name 179; 180 lda #0 ;length=0 181 sta eormsk 182 jsr $ffbd 183; 184;default device # 185; 186 pha 187 jsr getfa 188 tax 189 pla 190 ldy #0 ;command 0 191 jsr $ffba 192; 193;default address 194; 195 lda txttab 196 sta poker 197 lda txttab+1 198 sta poker+1 199; 200 jsr chrgot ;end of statement? 201 beq plsv30 ;yes 202 jsr paoc15 ;get/set file name 203 jsr paoc20 ;quit if no comma 204 jsr getbyt ;get 'fa' 205 ldy #0 ;command 0 206 stx andmsk 207 jsr paoc19 ;store x,y then maybe quit 208 jsr getbyt ;get 'sa' 209 txa ;new command 210 tay 211 ldx andmsk ;device # 212 jsr paoc19 ;store x,y then maybe quit 213 sty andmsk ;bank number 214 ldy #0 215 jsr $ffba 216 jsr frmadr ;put address in poker 217; 218;eat trailing garbage after address parm 219; 220; jsr chrgot 221; beq plsv20 222;plsv10 jsr chrget 223; bne plsv10 224; 225plsv20 inc eormsk 226plsv30 rts 227 228;store file parms then maybe end 229paoc19 jsr $ffba 230 231;quit if there's no comma 232; 233paoc20 jsr chrgot 234 cmp #',' 235 beq paoc30 236 pla 237 pla 238 sec 239 rts 240paoc30 jmp chrget 241 242;parse open/close 243; 244paoc lda #0 245 jsr $ffbd ;default file name 246; 247 jsr chrgot 248 beq snerr6 ;must got something 249 jsr getbyt ;get la 250 stx andmsk 251 jsr getfa 252 tax 253 lda andmsk ;restore la 254 ldy #0 ;default command 255 jsr paoc19 ;store x,y then maybe quit 256 jsr getbyt 257 stx eormsk 258 ldy #0 ;default command 259 lda andmsk ;get la 260 cpx #3 261 bcc paoc5 262 dey ;default ieee to $ff 263paoc5 jsr paoc19 ;store x,y then maybe quit 264 jsr getbyt ;get sa 265 txa 266 tay 267 ldx eormsk 268 lda andmsk 269 jsr paoc19 ;store x,y then maybe quit 270paoc15 jsr frmstr ;length in .a 271 ldx index1 272 ldy index1+1 273 jmp $ffbd 274 275; rsr 8/10/80 - change sys command 276; rsr 8/26/80 - add open&close memsiz detect 277; rsr 10/7/80 - change load (remove run wait) 278; rsr 4/10/82 - inline fix program load 279; rsr 7/02/82 - fix print# problem 280