00001 ; 00002 ; Through the courtesy of 00003 ; 00004 ; FORTH INTEREST GROUP 00005 ; P.O. BOX 2154 00006 ; OAKLAND, CALIFORNIA 00007 ; 94621 00008 ; 00009 ; 00010 ; Release 1.k0010 00011 ; 00012 ; with compiler security 00013 ; and 00014 ; variable length names 00015 ; 00016 ; Further distribution need not include this notice. 00017 ; The FIG installation Manual is required as it contains 00018 ; the model of FORTH and glossary of the system. 00019 ; Might be available from FIG at the above address for $95.00 postpaid. 00020 ; 00021 ; Translated from the FIG model by W.F. Ragsdale with input- 00022 ; output given for the Rockwell System-65. Transportation to 00023 ; other systems requires only the alteration of : 00024 ; 00025 ; XEMIT, XKEY, XQTER, XCR, AND RSLW 00026 ; 00027 ; Equates giving memory assignments, machine 00028 ; registers, and disk parameters. 00029 ; 00030 0100 SSIZE EQU 256 ; sector size in bytes 00031 0004 NBUF EQU 4 ; number of buffers desired in RAM 00032 ; (SSIZE*NBUF >= 1024 bytes) 00033 0800 SECTR EQU 2048 ; sector per drive 00034 ; forcing high drive to zero 00035 1000 SECTL EQU 4096 ; sector limit for two drives 00036 ; of 800 per drive. 00037 0410 BMAG EQU 1040 ; total buffer magnitude, in bytes 00038 ; expressed by SSIZE+4*NBUF 00039 ; 00040 0020 BOS EQU $20 ; bottom of data stack, in zero-page. 00041 009E TOS EQU $9E ; top of data stack, in zero-page. 00042 00A6 N EQU TOS+8 ; scratch workspace. 00043 00AC BUFPTR EQU N+6 ;pointer to DMA buffer 00044 00AE IP EQU N+8 ; interpretive pointer. 00045 00B1 W EQU IP+3 ; code field pointer. 00046 00B3 UP EQU W+2 ; user area pointer. 00047 00B5 XSAVE EQU UP+2 ; temporary for X register. 00048 00049 ; 00050 0100 TIBX EQU $0100 ; terminal input buffer of 84 bytes. 00051 0200 ORIG EQU $0200 ; origin of FORTH's Dictionary. 00052 4000 MEM EQU $4000 ; top of assigned memory+1 byte. 00053 3F80 UAREA EQU MEM-128 ; 128 bytes of user area 00054 3B70 DAREA EQU UAREA-BMAG ; disk buffer space. 00055 4000 BRKBYTE EQU MEM ;XSAVE+1 ;?flag if break is pressed 00056 00057 00058 ;? 00059 ; monitor calls for terminal support 00060 ; 00061 ;OUTCH EQU $F819 ; output one ASCII char. to term. 00062 ;INCH EQU $F800 ; input one ASCII char. to term. 00063 ;TCR EQU $D0F1 ; terminal return and line feed. 00064 00065 ; 00066 ; From DAREA downward to the top of the dictionary is free 00067 ; space where the user's applications are compiled. 00068 ; 00069 ; Boot up parameters. This area provides jump vectors 00070 ; to Boot up code, and parameters describing the system. 00071 ; 00072 ; 00073 0200 ORG ORIG 00074 ; 00075 ; 00076 ; User cold entry point 00077 0200 EA ENTER NOP ; Vector to COLD entry 00078 0201 4C 43 12 JMP COLD+2 ; 00079 0204 EA REENTR NOP ; User Warm entry point 00080 0205 4C 53 12 JMP WARM ; Vector to WARM entry 00081 0208 04 00 .WORD $0004 ; 6502 in radix-36 00082 020A D2 5E .WORD $5ED2 ; 00083 020C AA 1A .WORD NTOP ; Name address of MON 00084 020E 7F 00 .WORD $7F ; Backspace Character 00085 0210 80 3F .WORD UAREA ; Initial User Area 00086 0212 9E 00 .WORD TOS ; Initial Top of Stack 00087 0214 FF 01 .WORD $1FF ; Initial Top of Return Stack 00088 0216 00 01 .WORD TIBX ; Initial terminal input buffer 00089 ; 00090 ; 00091 0218 1F 00 .WORD 31 ; Initial name field width 00092 021A 00 00 .WORD 0 ; 0=nod disk, 1=disk 00093 021C 39 1B .WORD TOP ; Initial fence address 00094 021E 39 1B .WORD TOP ; Initial top of dictionary 00095 0220 B8 11 .WORD VL0 ; Initial Vocabulary link ptr. 00096 ; 00097 ; The following offset adjusts all code fields to avoid an 00098 ; address ending $XXFF. This must be checked and altered on 00099 ; any alteration , for the indirect jump at W-1 to operate ! 00100 ; 00101 0224 ORG *+2 ;.ORIGIN *+2 00102 ; 00103 ; 00104 ; LIT 00105 ; SCREEN 13 LINE 1 00106 ; 00107 0224 83 4C 49 D4 L22 .BYTE $83,'LI',$D4 ; <--- name field 00108 ; <----- link field 00109 0228 00 00 .WORD 00 ; last link marked by zero 00110 022A 2C 02 LIT .WORD *+2 ; <----- code address field 00111 022C B1 AE LDA (IP),Y ; <----- start of parameter field 00112 022E 48 PHA 00113 022F E6 AE INC IP 00114 0231 D0 02 BNE L30 00115 0233 E6 AF INC IP+1 00116 0235 B1 AE L30 LDA (IP),Y 00117 0237 E6 AE L31 INC IP 00118 0239 D0 02 BNE PUSH 00119 023B E6 AF INC IP+1 00120 ; 00121 023D CA PUSH DEX 00122 023E CA DEX 00123 ; 00124 023F 95 01 PUT STA 1,X 00125 0241 68 PLA 00126 0242 95 00 STA 0,X 00127 ; 00128 ; NEXT is the address interpreter that moves from machine 00129 ; level word to word. 00130 ; 00131 0244 A0 01 NEXT LDY #1 00132 0246 B1 AE LDA (IP),Y ; Fetch code field address pointed 00133 0248 85 B2 STA W+1 ; to by IP. 00134 024A 88 DEY 00135 024B B1 AE LDA (IP),Y 00136 024D 85 B1 STA W 00137 ;@ JSR TRACE ; Remove this when all is well 00138 024F 18 CLC ; Increment IP by two. 00139 0250 A5 AE LDA IP 00140 0252 69 02 ADC #2 00141 0254 85 AE STA IP 00142 0256 90 02 BCC L54 00143 0258 E6 AF INC IP+1 00144 025A 4C B0 00 L54 JMP W-1 Jump to an indirect jump (W) which 00145 ; vectors to code pointed to by a code 00146 ; field. 00147 ; 00148 ; CLIT pushes the next inline byte to data stack 00149 ; 00150 025D 84 43 4C 49 D4 L35 .BYTE $84,'CLI',$D4 00151 0262 24 02 .WORD L22 ; Link to LIT 00152 0264 66 02 CLIT .WORD *+2 00153 0266 B1 AE LDA (IP),Y 00154 0268 48 PHA 00155 0269 98 TYA 00156 026A F0 CB BEQ L31 ; a forced branch into LIT 00157 ; 00158 ; 00159 ; This is a temporary trace routine, to be used until FORTH 00160 ; is generally operating. Then NOP the terminal query 00161 ; "JSR ONEKEY". This will allow user input to the text 00162 ; interpreter. When crashes occur, the display shows IP, W, 00163 ; and the word locations of the offending code. When all is 00164 ; well, remove : TRACE, TCOLON, PRNAM, DECNP, and the 00165 ; following monitor/register equates. 00166 ; 00167 ; 00168 ; 00169 ; Monitor routines needed to trace. 00170 ; 00171 ;XBLANK EQU $D0AF ; print one blank 00172 ;CRLF EQU $D0D2 ; print a carriage return and line feed. 00173 ;HEX2 EQU $D2CE ; print accum as two hex numbers 00174 ;LETTER EQU $D2C1 ; print accum as one ASCII character 00175 ;ONEKEY EQU $D1DC ; wait for keystroke 00176 0012 XW EQU $12 ; scratch reg. to next code field add 00177 0014 NP EQU $14 ; scratch reg. pointing to name field 00178 ; 00179 ; 00180 026C 86 B5 TRACE STX XSAVE 00181 026E 20 BA 1A JSR CRLF 00182 0271 A5 AF LDA IP+1 00183 0273 20 C9 1A JSR HEX2 00184 0276 A5 AE LDA IP 00185 0278 20 C9 1A JSR HEX2 ; print IP, the interpreter pointer 00186 027B 20 C4 1A JSR XBLANK 00187 ; 00188 ; 00189 027E A9 00 LDA #0 00190 0280 B1 AE LDA (IP),Y 00191 0282 85 12 STA XW 00192 0284 85 14 STA NP ; fetch the next code field pointer 00193 0286 C8 INY 00194 0287 B1 AE LDA (IP),Y 00195 0289 85 13 STA XW+1 00196 028B 85 15 STA NP+1 00197 028D 20 D6 02 JSR PRNAM ; print dictionary name 00198 ; 00199 0290 A5 13 LDA XW+1 00200 0292 20 C9 1A JSR HEX2 ; print code field address 00201 0295 A5 12 LDA XW 00202 0297 20 C9 1A JSR HEX2 00203 029A 20 C4 1A JSR XBLANK 00204 ; 00205 029D A5 B5 LDA XSAVE ; print stack location in zero-page 00206 029F 20 C9 1A JSR HEX2 00207 02A2 20 C4 1A JSR XBLANK 00208 ; 00209 02A5 A9 01 LDA #1 ; print return stack bottom in page 1 00210 02A7 20 C9 1A JSR HEX2 00211 02AA BA TSX 00212 02AB E8 INX 00213 02AC 8A TXA 00214 02AD 20 C9 1A JSR HEX2 00215 02B0 20 C4 1A JSR XBLANK 00216 ; 00217 02B3 20 EF 1A JSR ONEKEY ; wait for operator keystroke 00218 02B6 A6 B5 LDX XSAVE ; just to pinpoint early problems 00219 02B8 A0 00 LDY #0 00220 02BA 60 RTS 00221 ; 00222 ; TCOLON is called from DOCOLON to label each point 00223 ; where FORTH 'nests' one level. 00224 ; 00225 02BB 86 B5 TCOLON STX XSAVE 00226 02BD A5 B1 LDA W 00227 02BF 85 14 STA NP ; locate the name of the called word 00228 02C1 A5 B2 LDA W+1 00229 02C3 85 15 STA NP+1 00230 02C5 20 BA 1A JSR CRLF 00231 02C8 A9 3A LDA #$3A ; ': 00232 02CA 20 E4 1A JSR LETTER 00233 02CD 20 C4 1A JSR XBLANK 00234 02D0 20 D6 02 JSR PRNAM 00235 ;@ JSR ONEKEY ; wait for operator keystroke 00236 02D3 A6 B5 LDX XSAVE 00237 02D5 60 RTS 00238 ; 00239 ; Print name by it's code field address in NP 00240 ; 00241 02D6 20 F8 02 PRNAM JSR DECNP 00242 02D9 20 F8 02 JSR DECNP 00243 02DC 20 F8 02 JSR DECNP 00244 02DF A0 00 LDY #0 00245 02E1 20 F8 02 PN1 JSR DECNP 00246 02E4 B1 14 LDA (NP),Y ; loop till D7 in name set 00247 02E6 10 F9 BPL PN1 00248 02E8 C8 PN2 INY 00249 02E9 B1 14 LDA (NP),Y 00250 02EB 20 E4 1A JSR LETTER ; print letters of name field 00251 02EE B1 14 LDA (NP),Y 00252 02F0 10 F6 BPL PN2 00253 02F2 20 C4 1A JSR XBLANK 00254 02F5 A0 00 LDY #0 00255 02F7 60 RTS 00256 ; 00257 ; Decrement name field pointer 00258 ; 00259 02F8 A5 14 DECNP LDA NP 00260 02FA D0 02 BNE DECNP1 00261 02FC C6 15 DEC NP+1 00262 02FE C6 14 DECNP1 DEC NP 00263 0300 60 RTS 00264 ; 00265 ; 00266 0301 0A SETUP ASL A 00267 0302 85 A5 STA N-1 00268 0304 B5 00 L63 LDA 0,X 00269 0306 99 A6 00 STA N,Y 00270 0309 E8 INX 00271 030A C8 INY 00272 030B C4 A5 CPY N-1 00273 030D D0 F5 BNE L63 00274 030F A0 00 LDY #0 00275 0311 60 RTS 00276 ; 00277 ; EXCECUTE 00278 ; SCREEN 14 LINE 11 00279 ; 00280 0312 87 45 58 45 43 55 L75 .BYTE $87,'EXECUT',$C5 54 C5 00281 031A 5D 02 .WORD L35 ; link to CLIT 00282 031C 1E 03 EXEC .WORD *+2 00283 031E B5 00 LDA 0,X 00284 0320 85 B1 STA W 00285 0322 B5 01 LDA 1,X 00286 0324 85 B2 STA W+1 00287 0326 E8 INX 00288 0327 E8 INX 00289 0328 4C B0 00 JMP W-1 ; to JMP (W) in z-page 00290 ; 00291 ; BRANCH 00292 ; SCREEN 15 LINE 11 00293 ; 00294 032B 86 42 52 41 4E 43 L89 .BYTE $86,'BRANC',$C8 C8 00295 0332 12 03 .WORD L75 ; link to EXCECUTE 00296 0334 36 03 BRAN .WORD *+2 00297 0336 18 CLC 00298 0337 B1 AE LDA (IP),Y 00299 0339 65 AE ADC IP 00300 033B 48 PHA 00301 033C C8 INY 00302 033D B1 AE LDA (IP),Y 00303 033F 65 AF ADC IP+1 00304 0341 85 AF STA IP+1 00305 0343 68 PLA 00306 0344 85 AE STA IP 00307 0346 4C 44 02 JMP NEXT +2 00308 ; 00309 ; 0BRANCH 00310 ; SCREEN 15 LINE 6 00311 ; 00312 0349 87 30 42 52 41 4E L107 .BYTE $87,'0BRANC',$C8 43 C8 00313 0351 2B 03 .WORD L89 ; link to BRANCH 00314 0353 55 03 ZBRAN .WORD *+2 00315 0355 E8 INX 00316 0356 E8 INX 00317 0357 B5 FE LDA $FE,X 00318 0359 15 FF ORA $FF,X 00319 035B F0 D9 BEQ BRAN+2 00320 ; 00321 035D 18 BUMP CLC 00322 035E A5 AE LDA IP 00323 0360 69 02 ADC #2 00324 0362 85 AE STA IP 00325 0364 90 02 BCC L122 00326 0366 E6 AF INC IP+1 00327 0368 4C 44 02 L122 JMP NEXT 00328 ; 00329 ; (LOOP) 00330 ; SCREEN 16 LINE 1 00331 ; 00332 036B 86 28 4C 4F 4F 50 L127 .BYTE $86,'(LOOP',$A9 A9 00333 0372 49 03 .WORD L107 ; link to 0BRANCH 00334 0374 76 03 PLOOP .WORD L130 00335 0376 86 B5 L130 STX XSAVE 00336 0378 BA TSX 00337 0379 FE 01 01 INC $101,X 00338 037C D0 03 BNE PL1 00339 037E FE 02 01 INC $102,X 00340 ; 00341 0381 18 PL1 CLC 00342 0382 BD 03 01 LDA $103,X 00343 0385 FD 01 01 SBC $101,X 00344 0388 BD 04 01 LDA $104,X 00345 038B FD 02 01 SBC $102,X 00346 ; 00347 038E A6 B5 PL2 LDX XSAVE 00348 0390 0A ASL A 00349 0391 90 A3 BCC BRAN+2 00350 0393 68 PLA 00351 0394 68 PLA 00352 0395 68 PLA 00353 0396 68 PLA 00354 0397 4C 5D 03 JMP BUMP 00355 ; 00356 ; (+LOOP) 00357 ; SCREEN 16 LINE 8 00358 ; 00359 039A 87 28 2B 4C 4F 4F L154 .BYTE $87,'(+LOOP',$A9 50 A9 00360 03A2 6B 03 .WORD L127 ; link to (loop) 00361 03A4 A6 03 PPLOO .WORD *+2 00362 03A6 E8 INX 00363 03A7 E8 INX 00364 03A8 86 B5 STX XSAVE 00365 03AA B5 FF LDA $FF,X 00366 03AC 48 PHA 00367 03AD 48 PHA 00368 03AE B5 FE LDA $FE,X 00369 03B0 BA TSX 00370 03B1 E8 INX 00371 03B2 E8 INX 00372 03B3 18 CLC 00373 03B4 7D 01 01 ADC $101,X 00374 03B7 9D 01 01 STA $101,X 00375 03BA 68 PLA 00376 03BB 7D 02 01 ADC $102,X 00377 03BE 9D 02 01 STA $102,X 00378 03C1 68 PLA 00379 03C2 10 BD BPL PL1 00380 03C4 18 CLC 00381 03C5 BD 01 01 LDA $101,X 00382 03C8 FD 03 01 SBC $103,X 00383 03CB BD 02 01 LDA $102,X 00384 03CE FD 04 01 SBC $104,X 00385 03D1 4C 8E 03 JMP PL2 00386 ; 00387 ; (DO) 00388 ; SCREEN 17 LINE 2 00389 ; 00390 03D4 84 28 44 4F A9 L185 .BYTE $84,'(DO',$A9 00391 03D9 9A 03 .WORD L154 ; link to (+LOOP) 00392 03DB DD 03 PDO .WORD *+2 00393 03DD B5 03 LDA 3,X 00394 03DF 48 PHA 00395 03E0 B5 02 LDA 2,X 00396 03E2 48 PHA 00397 03E3 B5 01 LDA 1,X 00398 03E5 48 PHA 00399 03E6 B5 00 LDA 0,X 00400 03E8 48 PHA 00401 ; 00402 03E9 E8 POPTWO INX 00403 03EA E8 INX 00404 ; 00405 ; 00406 ; 00407 03EB E8 POP INX 00408 03EC E8 INX 00409 03ED 4C 44 02 JMP NEXT 00410 ; 00411 ; I 00412 ; SCREEN 17 LINE 9 00413 ; 00414 03F0 81 C9 L207 .BYTE $81,$C9 00415 03F2 D4 03 .WORD L185 ; link to (DO) 00416 03F4 5C 06 I .WORD R+2 ; share the code for R 00417 ; 00418 ; DIGIT 00419 ; SCREEN 18 LINE 1 00420 ; 00421 03F6 85 44 49 47 49 D4 L214 .BYTE $85,'DIGI',$D4 00422 03FC F0 03 .WORD L207 ; link to I 00423 03FE 00 04 DIGIT .WORD *+2 00424 0400 38 SEC 00425 0401 B5 02 LDA 2,X 00426 0403 E9 30 SBC #$30 00427 0405 30 18 BMI L234 00428 0407 C9 0A CMP #$A 00429 0409 30 07 BMI L227 00430 040B 38 SEC 00431 040C E9 07 SBC #7 00432 040E C9 0A CMP #$A 00433 0410 30 0D BMI L234 00434 0412 D5 00 L227 CMP 0,X 00435 0414 10 09 BPL L234 00436 0416 95 02 STA 2,X 00437 0418 A9 01 LDA #1 00438 041A 48 PHA 00439 041B 98 TYA 00440 041C 4C 3F 02 JMP PUT ; exit true with converted value 00441 041F 98 L234 TYA 00442 0420 48 PHA 00443 0421 E8 INX 00444 0422 E8 INX 00445 0423 4C 3F 02 JMP PUT ; exit false with bad conversion 00446 ; 00447 ; (FIND) 00448 ; SCREEN 19 LINE 1 00449 ; 00450 0426 86 28 46 49 4E 44 L243 .BYTE $86,'(FIND',$A9 A9 00451 042D F6 03 .WORD L214 ; Link to DIGIT 00452 042F 31 04 PFIND .WORD *+2 00453 0431 A9 02 LDA #2 00454 0433 20 01 03 JSR SETUP 00455 0436 86 B5 STX XSAVE 00456 0438 A0 00 L249 LDY #0 00457 043A B1 A6 LDA (N),Y 00458 043C 51 A8 EOR (N+2),Y 00459 ; 00460 ; 00461 043E 29 3F AND #$3F 00462 0440 D0 2D BNE L281 00463 0442 C8 L254 INY 00464 0443 B1 A6 LDA (N),Y 00465 0445 51 A8 EOR (N+2),Y 00466 0447 0A ASL A 00467 0448 D0 23 BNE L280 00468 044A 90 F6 BCC L254 00469 044C A6 B5 LDX XSAVE 00470 044E CA DEX 00471 044F CA DEX 00472 0450 CA DEX 00473 0451 CA DEX 00474 0452 18 CLC 00475 0453 98 TYA 00476 0454 69 05 ADC #5 00477 0456 65 A6 ADC N 00478 0458 95 02 STA 2,X 00479 045A A0 00 LDY #0 00480 045C 98 TYA 00481 045D 65 A7 ADC N+1 00482 045F 95 03 STA 3,X 00483 0461 94 01 STY 1,X 00484 0463 B1 A6 LDA (N),Y 00485 0465 95 00 STA 0,X 00486 0467 A9 01 LDA #1 00487 0469 48 PHA 00488 046A 4C 3D 02 JMP PUSH 00489 046D B0 05 L280 BCS L284 00490 046F C8 L281 INY 00491 0470 B1 A6 LDA (N),Y 00492 0472 10 FB BPL L281 00493 0474 C8 L284 INY 00494 0475 B1 A6 LDA (N),Y 00495 0477 AA TAX 00496 0478 C8 INY 00497 0479 B1 A6 LDA (N),Y 00498 047B 85 A7 STA N+1 00499 047D 86 A6 STX N 00500 047F 05 A6 ORA N 00501 0481 D0 B5 BNE L249 00502 0483 A6 B5 LDX XSAVE 00503 0485 A9 00 LDA #0 00504 0487 48 PHA 00505 0488 4C 3D 02 JMP PUSH ; exit false upon reading null link 00506 ; 00507 ; ENCLOSE 00508 ; SCREEN 20 LINE 1 00509 ; 00510 048B 87 45 4E 43 4C 4F L301 .BYTE $87,'ENCLOS',$C5 53 C5 00511 0493 26 04 .WORD L243 ; link to (FIND) 00512 0495 97 04 ENCL .WORD *+2 00513 0497 A9 02 LDA #2 00514 0499 20 01 03 JSR SETUP 00515 049C 8A TXA 00516 049D 38 SEC 00517 049E E9 08 SBC #8 00518 04A0 AA TAX 00519 04A1 94 03 STY 3,X 00520 04A3 94 01 STY 1,X 00521 04A5 88 DEY 00522 04A6 C8 L313 INY 00523 04A7 B1 A8 LDA (N+2),Y 00524 04A9 C5 A6 CMP N 00525 04AB F0 F9 BEQ L313 00526 04AD 94 04 STY 4,X 00527 04AF B1 A8 L318 LDA (N+2),Y 00528 04B1 D0 0E BNE L327 00529 04B3 94 02 STY 2,X 00530 04B5 94 00 STY 0,X 00531 04B7 98 TYA 00532 04B8 D5 04 CMP 4,X 00533 04BA D0 02 BNE L326 00534 04BC F6 02 INC 2,X 00535 04BE 4C 44 02 L326 JMP NEXT 00536 04C1 94 02 L327 STY 2,X 00537 04C3 C8 INY 00538 04C4 C5 A6 CMP N 00539 04C6 D0 E7 BNE L318 00540 04C8 94 00 STY 0,X 00541 04CA 4C 44 02 JMP NEXT 00542 ; 00543 ; EMIT 00544 ; SCREEN 21 LINE 5 00545 ; 00546 04CD 84 45 4D 49 D4 L337 .BYTE $84,'EMI',$D4 00547 04D2 8B 04 .WORD L301 ; link to ENCLOSE 00548 04D4 ED 15 EMIT .WORD XEMIT ; Vector to code for KEY 00549 ; 00550 ; KEY 00551 ; SCREEN 21 LINE 7 00552 ; 00553 04D6 83 4B 45 D9 L344 .BYTE $83,'KE',$D9 00554 04DA CD 04 .WORD L337 ; link to EMIT 00555 04DC 08 16 KEY .WORD XKEY ; Vector to code for KEY 00556 ; 00557 ; ?TERMINAL 00558 ; SCREEN 21 LINE 9 00559 ; 00560 04DE 89 3F 54 45 52 4D L351 .BYTE $89,'?TERMINA',$CC 49 4E 41 CC 00561 04E8 D6 04 .WORD L344 ; link to KEY 00562 04EA 12 16 QTERM .WORD XQTER ; Vector to code for ?TERMINAL 00563 ; 00564 ; 00565 ; 00566 ; 00567 ; 00568 ; CR 00569 ; SCREEN 21 LINE 11 00570 ; 00571 04EC 82 43 D2 L358 .BYTE $82,'C',$D2 00572 04EF DE 04 .WORD L351 ; link to ?TERMINAL 00573 04F1 1D 16 CR .WORD XCR ; Vector to code for CR 00574 ; 00575 ; CMOVE 00576 ; SCREEN 22 LINE 1 00577 ; 00578 04F3 85 43 4D 4F 56 C5 L365 .BYTE $85,'CMOV',$C5 00579 04F9 EC 04 .WORD L358 ; link to CR 00580 04FB FD 04 CMOVE .WORD *+2 00581 04FD A9 03 LDA #3 00582 04FF 20 01 03 JSR SETUP 00583 0502 C4 A6 L370 CPY N 00584 0504 D0 07 BNE L375 00585 0506 C6 A7 DEC N+1 00586 0508 10 03 BPL L375 00587 050A 4C 44 02 JMP NEXT 00588 050D B1 AA L375 LDA (N+4),Y 00589 050F 91 A8 STA (N+2),Y 00590 0511 C8 INY 00591 0512 D0 EE BNE L370 00592 0514 E6 AB INC N+5 00593 0516 E6 A9 INC N+3 00594 0518 4C 02 05 JMP L370 00595 ; 00596 ; U* 00597 ; SCREEN 23 LINE 1 00598 ; 00599 051B 82 55 AA L386 .BYTE $82,'U',$AA 00600 051E F3 04 .WORD L365 ; link to CMOVE 00601 0520 22 05 USTAR .WORD *+2 00602 0522 B5 02 LDA 2,X 00603 0524 85 A6 STA N 00604 0526 94 02 STY 2,X 00605 0528 B5 03 LDA 3,X 00606 052A 85 A7 STA N+1 00607 052C 94 03 STY 3,X 00608 052E A0 10 LDY #16 ; for 16 bits 00609 0530 16 02 L396 ASL 2,X 00610 0532 36 03 ROL 3,X 00611 0534 36 00 ROL 0,X 00612 0536 36 01 ROL 1,X 00613 0538 90 13 BCC L411 00614 053A 18 CLC 00615 053B A5 A6 LDA N 00616 053D 75 02 ADC 2,X 00617 053F 95 02 STA 2,X 00618 0541 A5 A7 LDA N+1 00619 0543 75 03 ADC 3,X 00620 0545 95 03 STA 3,X 00621 0547 A9 00 LDA #0 00622 0549 75 00 ADC 0,X 00623 054B 95 00 STA 0,X 00624 00625 054D 88 L411 DEY 00626 054E D0 E0 BNE L396 00627 0550 4C 44 02 JMP NEXT 00628 ; 00629 ; U/ 00630 ; SCREEN 24 LINE 1 00631 ; 00632 0553 82 55 AF L418 .BYTE $82,'U',$AF 00633 0556 1B 05 .WORD L386 ; link to U* 00634 0558 5A 05 USLAS .WORD *+2 00635 055A B5 04 LDA 4,X 00636 055C B4 02 LDY 2,X 00637 055E 94 04 STY 4,X 00638 0560 0A ASL A 00639 0561 95 02 STA 2,X 00640 0563 B5 05 LDA 5,X 00641 0565 B4 03 LDY 3,X 00642 0567 94 05 STY 5,X 00643 0569 2A ROL A 00644 056A 95 03 STA 3,X 00645 056C A9 10 LDA #16 00646 056E 85 A6 STA N 00647 0570 36 04 L433 ROL 4,X 00648 0572 36 05 ROL 5,X 00649 0574 38 SEC 00650 0575 B5 04 LDA 4,X 00651 0577 F5 00 SBC 0,X 00652 0579 A8 TAY 00653 057A B5 05 LDA 5,X 00654 057C F5 01 SBC 1,X 00655 057E 90 04 BCC L444 00656 0580 94 04 STY 4,X 00657 0582 95 05 STA 5,X 00658 0584 36 02 L444 ROL 2,X 00659 0586 36 03 ROL 3,X 00660 0588 C6 A6 DEC N 00661 058A D0 E4 BNE L433 00662 058C 4C EB 03 JMP POP 00663 ; 00664 ; AND 00665 ; SCREEN 25 LINE 2 00666 ; 00667 058F 83 41 4E C4 L453 .BYTE $83,'AN',$C4 00668 0593 53 05 .WORD L418 ; link to U/ 00669 0595 97 05 ANDD .WORD *+2 00670 0597 B5 00 LDA 0,X 00671 0599 35 02 AND 2,X 00672 059B 48 PHA 00673 059C B5 01 LDA 1,X 00674 059E 35 03 AND 3,X 00675 ; 00676 05A0 E8 BINARY INX 00677 05A1 E8 INX 00678 05A2 4C 3F 02 JMP PUT 00679 ; 00680 ; OR 00681 ; SCREEN 25 LINE 7 00682 ; 00683 05A5 82 4F D2 L469 .BYTE $82,'O',$D2 00684 05A8 8F 05 .WORD L453 ; link to AND 00685 05AA AC 05 OR .WORD *+2 00686 05AC B5 00 LDA 0,X 00687 05AE 15 02 ORA 2,X 00688 05B0 48 PHA 00689 05B1 B5 01 LDA 1,X 00690 05B3 15 03 ORA 3,X 00691 05B5 E8 INX 00692 05B6 E8 INX 00693 05B7 4C 3F 02 JMP PUT 00694 ; 00695 ; XOR 00696 ; SCREEN 25 LINE 11 00697 ; 00698 05BA 83 58 4F D2 L484 .BYTE $83,'XO',$D2 00699 05BE A5 05 .WORD L469 ; link to OR 00700 05C0 C2 05 XOR .WORD *+2 00701 05C2 B5 00 LDA 0,X 00702 05C4 55 02 EOR 2,X 00703 05C6 48 PHA 00704 05C7 B5 01 LDA 1,X 00705 05C9 55 03 EOR 3,X 00706 05CB E8 INX 00707 05CC E8 INX 00708 05CD 4C 3F 02 JMP PUT 00709 ; 00710 ; SP@ 00711 ; SCREEN 26 LINE 1 00712 ; 00713 05D0 83 53 50 C0 L499 .BYTE $83,'SP',$C0 00714 05D4 BA 05 .WORD L484 ; link to XOR 00715 05D6 D8 05 SPAT .WORD *+2 00716 05D8 8A TXA 00717 ; 00718 05D9 48 PUSHOA PHA 00719 05DA A9 00 LDA #0 00720 05DC 4C 3D 02 JMP PUSH 00721 ; 00722 ; SP! 00723 ; SCREEN 26 LINE 5 00724 ; 00725 ; 00726 05DF 83 53 50 A1 L511 .BYTE $83,'SP',$A1 00727 05E3 D0 05 .WORD L499 ; link to SP@ 00728 05E5 E7 05 SPSTO .WORD *+2 00729 05E7 A0 06 LDY #6 00730 05E9 B1 B3 LDA (UP),Y ; load data stack pointer (X reg) from 00731 05EB AA TAX ; silent user variable S0. 00732 05EC 4C 44 02 JMP NEXT 00733 ; 00734 ; RP! 00735 ; SCREEN 26 LINE 8 00736 ; 00737 05EF 83 52 50 A1 L522 .BYTE $83,'RP',$A1 00738 05F3 DF 05 .WORD L511 ; link to SP! 00739 05F5 F7 05 RPSTO .WORD *+2 00740 05F7 86 B5 STX XSAVE ; load return stack pointer (machine 00741 05F9 A0 08 LDY #8 ; stack pointer) from silent user 00742 05FB B1 B3 LDA (UP),Y ; VARIABLE R0 00743 05FD AA TAX 00744 05FE 9A TXS 00745 05FF A6 B5 LDX XSAVE 00746 0601 4C 44 02 JMP NEXT 00747 ; 00748 ; ;S 00749 ; SCREEN 26 LINE 12 00750 ; 00751 0604 82 3B D3 L536 .BYTE $82,';',$D3 00752 0607 EF 05 .WORD L522 ; link to RP! 00753 0609 0B 06 SEMIS .WORD *+2 00754 060B 68 PLA 00755 060C 85 AE STA IP 00756 060E 68 PLA 00757 060F 85 AF STA IP+1 00758 0611 4C 44 02 JMP NEXT 00759 ; 00760 ; LEAVE 00761 ; SCREEN 27 LINE 1 00762 ; 00763 0614 85 4C 45 41 56 C5 L548 .BYTE $85,'LEAV',$C5 00764 061A 04 06 .WORD L536 ; link to ;S 00765 061C 1E 06 LEAVE .WORD *+2 00766 061E 86 B5 STX XSAVE 00767 0620 BA TSX 00768 0621 BD 01 01 LDA $101,X 00769 0624 9D 03 01 STA $103,X 00770 0627 BD 02 01 LDA $102,X 00771 062A 9D 04 01 STA $104,X 00772 062D A6 B5 LDX XSAVE 00773 062F 4C 44 02 JMP NEXT 00774 ; 00775 ; >R 00776 ; SCREEN 27 LINE 5 00777 ; 00778 0632 82 3E D2 L563 .BYTE $82,'>',$D2 00779 0635 14 06 .WORD L548 ; link to LEAVE 00780 0637 39 06 TOR .WORD *+2 00781 0639 B5 01 LDA 1,X ; move high byte 00782 063B 48 PHA 00783 063C B5 00 LDA 0,X ; then low byte 00784 063E 48 PHA ; to return stack 00785 063F E8 INX 00786 0640 E8 INX ; popping off data stack 00787 0641 4C 44 02 JMP NEXT 00788 ; 00789 ; R> 00790 ; SCREEN 27 LINE 8 00791 ; 00792 0644 82 52 BE L577 .BYTE $82,'R',$BE 00793 0647 32 06 .WORD L563 ; link to >R 00794 0649 4B 06 RFROM .WORD *+2 00795 064B CA DEX ; make room on data stack 00796 064C CA DEX 00797 064D 68 PLA ; high byte 00798 064E 95 00 STA 0,X 00799 0650 68 PLA ; then low byte 00800 0651 95 01 STA 1,X ; restored to data stack 00801 0653 4C 44 02 JMP NEXT 00802 ; 00803 ; R 00804 ; SCREEN 27 LINE 11 00805 ; 00806 0656 81 D2 L591 .BYTE $81,$D2 00807 0658 44 06 .WORD L577 ; link to R> 00808 065A 5C 06 R .WORD *+2 00809 065C 86 B5 STX XSAVE 00810 065E BA TSX ; address return stack 00811 065F BD 01 01 LDA $101,X ; copy bottom value 00812 0662 48 PHA ; to data stack 00813 0663 BD 02 01 LDA $102,X 00814 0666 A6 B5 LDX XSAVE 00815 0668 4C 3D 02 JMP PUSH 00816 ; 00817 ; 0= 00818 ; SCREEN 28 LINE 2 00819 ; 00820 066B 82 30 BD L605 .BYTE $82,'0',$BD 00821 066E 56 06 .WORD L591 ; link to R 00822 0670 72 06 ZEQU .WORD *+2 00823 0672 B5 01 LDA 1,X ; Corrected from FD3/2 p69 00824 0674 94 01 STY 1,X 00825 0676 15 00 ORA 0,X 00826 0678 D0 01 BNE L613 00827 067A C8 INY 00828 067B 94 00 L613 STY 0,X 00829 067D 4C 44 02 JMP NEXT 00830 ; 00831 ; 0< 00832 ; SCREEN 28 LINE 6 00833 ; 00834 0680 82 30 BC L619 .BYTE $82,'0',$BC 00835 0683 6B 06 .WORD L605 ; link to 0= 00836 0685 87 06 ZLESS .WORD *+2 00837 0687 16 01 ASL 1,X 00838 0689 98 TYA 00839 068A 2A ROL A 00840 068B 94 01 STY 1,X 00841 068D 95 00 STA 0,X 00842 068F 4C 44 02 JMP NEXT 00843 ; 00844 ; + 00845 ; SCREEN 29 LINE 1 00846 ; 00847 0692 81 AB L632 .BYTE $81,$AB 00848 0694 80 06 .WORD L619 ; link to V-ADJ 00849 0696 98 06 PLUS .WORD *+2 00850 0698 18 CLC 00851 0699 B5 00 LDA 0,X 00852 069B 75 02 ADC 2,X 00853 069D 95 02 STA 2,X 00854 069F B5 01 LDA 1,X 00855 06A1 75 03 ADC 3,X 00856 06A3 95 03 STA 3,X 00857 06A5 E8 INX 00858 06A6 E8 INX 00859 06A7 4C 44 02 JMP NEXT 00860 ; 00861 ; D+ 00862 ; SCREEN 29 LINE 4 00863 ; 00864 06AA 82 44 AB L649 .BYTE $82,'D',$AB 00865 06AD 92 06 .WORD L632 ; LINK TO + 00866 06AF B1 06 DPLUS .WORD *+2 00867 06B1 18 CLC 00868 06B2 B5 02 LDA 2,X 00869 06B4 75 06 ADC 6,X 00870 06B6 95 06 STA 6,X 00871 06B8 B5 03 LDA 3,X 00872 06BA 75 07 ADC 7,X 00873 06BC 95 07 STA 7,X 00874 06BE B5 00 LDA 0,X 00875 06C0 75 04 ADC 4,X 00876 06C2 95 04 STA 4,X 00877 06C4 B5 01 LDA 1,X 00878 06C6 75 05 ADC 5,X 00879 06C8 95 05 STA 5,X 00880 06CA 4C E9 03 JMP POPTWO 00881 ; 00882 ; MINUS 00883 ; SCREEN 29 LINE 9 00884 ; 00885 06CD 85 4D 49 4E 55 D3 L670 .BYTE $85,'MINU',$D3 00886 06D3 AA 06 .WORD L649 ; link to D+ 00887 06D5 D7 06 MINUS .WORD *+2 00888 06D7 38 SEC 00889 06D8 98 TYA 00890 06D9 F5 00 SBC 0,X 00891 06DB 95 00 STA 0,X 00892 06DD 98 TYA 00893 06DE F5 01 SBC 1,X 00894 06E0 95 01 STA 1,X 00895 06E2 4C 44 02 JMP NEXT 00896 ; 00897 ; DMINUS 00898 ; SCREEN 29 LINE 12 00899 ; 00900 06E5 86 44 4D 49 4E 55 L685 .BYTE $86,'DMINU',$D3 D3 00901 06EC CD 06 .WORD L670 ; link to MINUS 00902 06EE F0 06 DMINU .WORD *+2 00903 06F0 38 SEC 00904 06F1 98 TYA 00905 06F2 F5 02 SBC 2,X 00906 06F4 95 02 STA 2,X 00907 06F6 98 TYA 00908 06F7 F5 03 SBC 3,X 00909 06F9 95 03 STA 3,X 00910 06FB 4C D8 06 JMP MINUS+3 00911 ; 00912 ; OVER 00913 ; SCREEN 30 LINE 1 00914 ; 00915 06FE 84 4F 56 45 D2 L700 .BYTE $84,'OVE',$D2 00916 0703 E5 06 .WORD L685 ; link to DMINUS 00917 0705 07 07 OVER .WORD *+2 00918 0707 B5 02 LDA 2,X 00919 0709 48 PHA 00920 070A B5 03 LDA 3,X 00921 070C 4C 3D 02 JMP PUSH 00922 ; 00923 ; DROP 00924 ; SCREEN 30 LINE 4 00925 ; 00926 070F 84 44 52 4F D0 L711 .BYTE $84,'DRO',$D0 00927 0714 FE 06 .WORD L700 ; link to OVER 00928 0716 EB 03 DROP .WORD POP 00929 ; 00930 ; SWAP 00931 ; SCREEN 30 LINE 8 00932 ; 00933 0718 84 53 57 41 D0 L718 .BYTE $84,'SWA',$D0 00934 071D 0F 07 .WORD L711 ; link to DROP 00935 071F 21 07 SWAP .WORD *+2 00936 0721 B5 02 LDA 2,X 00937 0723 48 PHA 00938 0724 B5 00 LDA 0,X 00939 0726 95 02 STA 2,X 00940 0728 B5 03 LDA 3,X 00941 072A B4 01 LDY 1,X 00942 072C 94 03 STY 3,X 00943 072E 4C 3F 02 JMP PUT 00944 ; 00945 ; DUP 00946 ; SCREEN 30 LINE 21 00947 ; 00948 0731 83 44 55 D0 L733 .BYTE $83,'DU',$D0 00949 0735 18 07 .WORD L718 ; link to SWAP 00950 0737 39 07 DUP .WORD *+2 00951 0739 B5 00 LDA 0,X 00952 073B 48 PHA 00953 073C B5 01 LDA 1,X 00954 073E 4C 3D 02 JMP PUSH 00955 ; 00956 ; +! 00957 ; SCREEN 31 LINE 2 00958 ; 00959 0741 82 2B A1 L744 .BYTE $82,'+',$A1 00960 0744 31 07 .WORD L733 ; link to DUP 00961 0746 48 07 PSTOR .WORD *+2 00962 0748 18 CLC 00963 0749 A1 00 LDA (0,X) ; fetch 16 bit value addressed by 00964 074B 75 02 ADC 2,X ; bottom of stack, adding to 00965 074D 81 00 STA (0,X) ; second item on stack, and return 00966 074F F6 00 INC 0,X ; to memory 00967 0751 D0 02 BNE L754 00968 0753 F6 01 INC 1,X 00969 0755 A1 00 L754 LDA (0,X) 00970 0757 75 03 ADC 3,X 00971 0759 81 00 STA (0,X) 00972 075B 4C E9 03 JMP POPTWO 00973 ; 00974 ; TOGGLE 00975 ; SCREEN 31 LINE 7 00976 ; 00977 075E 81 54 4F 47 47 4C L762 .BYTE $81,'TOGGL',$C5 C5 00978 0765 41 07 .WORD L744 ; link to +! 00979 0767 69 07 TOGGL .WORD *+2 00980 0769 A1 02 LDA (2,X) ; complement bits in memory address 00981 076B 55 00 EOR 0,X ; second on stack, by pattern on 00982 076D 81 02 STA (2,X) ; bottom of stack. 00983 076F 4C E9 03 JMP POPTWO 00984 ; 00985 ; @ 00986 ; SCREEN 32 LINE 1 00987 ; 00988 0772 81 C0 L773 .BYTE $81,$C0 00989 0774 5E 07 .WORD L762 ; link to TOGGLE 00990 0776 78 07 AT .WORD *+2 00991 0778 A1 00 LDA (0,X) 00992 077A 48 PHA 00993 077B F6 00 INC 0,X 00994 077D D0 02 BNE L781 00995 077F F6 01 INC 1,X 00996 0781 A1 00 L781 LDA (0,X) 00997 0783 4C 3F 02 JMP PUT 00998 ; 00999 ; C@ 01000 ; SCREEN 32 LINE 5 01001 ; 01002 0786 82 43 C0 L787 .BYTE $82,'C',$C0 01003 0789 72 07 .WORD L773 ; link to @ 01004 078B 8D 07 CAT .WORD *+2 01005 078D A1 00 LDA (0,X) ; fetch byte addressed by bottom of 01006 078F 95 00 STA 0,X ; stack to stack, zeroing the high 01007 0791 94 01 STY 1,X ; byte 01008 0793 4C 44 02 JMP NEXT 01009 ; 01010 ; ! 01011 ; SCREEN 32 LINE 8 01012 ; 01013 0796 81 A1 L798 .BYTE $81,$A1 01014 0798 86 07 .WORD L787 ; link to C@ 01015 079A 9C 07 STORE .WORD *+2 01016 079C B5 02 LDA 2,X 01017 079E 81 00 STA (0,X) ; store second 16bit value on stack 01018 07A0 F6 00 INC 0,X ; to memory as addressed by bottom 01019 07A2 D0 02 BNE L806 ; of stack. 01020 07A4 F6 01 INC 1,X 01021 07A6 B5 03 L806 LDA 3,X 01022 07A8 81 00 STA (0,X) 01023 07AA 4C E9 03 JMP POPTWO 01024 ; 01025 ; C! 01026 ; SCREEN 32 LINE 12 01027 ; 01028 07AD 82 43 A1 L813 .BYTE $82,'C',$A1 01029 07B0 96 07 .WORD L798 ; link to ! 01030 07B2 B4 07 CSTOR .WORD *+2 01031 07B4 B5 02 LDA 2,X 01032 07B6 81 00 STA (0,X) 01033 07B8 4C E9 03 JMP POPTWO 01034 ; 01035 ; : 01036 ; SCREEN 33 LINE 2 01037 ; 01038 07BB C1 BA L823 .BYTE $C1,$BA 01039 07BD AD 07 .WORD L813 ; link to C! 01040 07BF D3 07 COLON .WORD DOCOL 01041 07C1 3C 0B .WORD QEXEC 01042 07C3 F8 0A .WORD SCSP 01043 07C5 52 09 .WORD CURR 01044 07C7 76 07 .WORD AT 01045 07C9 45 09 .WORD CON 01046 07CB 9A 07 .WORD STORE 01047 07CD 30 10 .WORD CREAT 01048 07CF BD 0B .WORD RBRAC 01049 07D1 0C 0C .WORD PSCOD 01050 ; 01051 07D3 A5 AF DOCOL LDA IP+1 01052 07D5 48 PHA 01053 07D6 A5 AE LDA IP 01054 07D8 48 PHA 01055 ;@ JSR TCOLON ; mark the start of a traced : def. 01056 07D9 18 CLC 01057 07DA A5 B1 LDA W 01058 07DC 69 02 ADC #2 01059 07DE 85 AE STA IP 01060 07E0 98 TYA 01061 07E1 65 B2 ADC W+1 01062 07E3 85 AF STA IP+1 01063 07E5 4C 44 02 JMP NEXT 01064 ; 01065 ; ; 01066 ; SCREEN 33 LINE 9 01067 ; 01068 07E8 C1 BB L853 .BYTE $C1,$BB 01069 07EA BB 07 .WORD L823 ; link to : 01070 07EC D3 07 .WORD DOCOL 01071 07EE 64 0B .WORD QCSP 01072 07F0 99 0B .WORD COMP 01073 07F2 09 06 .WORD SEMIS 01074 07F4 D1 0B .WORD SMUDG 01075 07F6 AF 0B .WORD LBRAC 01076 07F8 09 06 .WORD SEMIS 01077 ; 01078 ; CONSTANT 01079 ; SCREEN 34 LINE 1 01080 ; 01081 07FA 88 43 4F 4E 53 54 L867 .BYTE $88,'CONSTAN',$D4 41 4E D4 01082 0803 E8 07 .WORD L853 ; link to ; 01083 0805 D3 07 CONST .WORD DOCOL 01084 0807 30 10 .WORD CREAT 01085 0809 D1 0B .WORD SMUDG 01086 080B D3 09 .WORD COMMA 01087 080D 0C 0C .WORD PSCOD 01088 ; 01089 080F A0 02 DOCON LDY #2 01090 0811 B1 B1 LDA (W),Y 01091 0813 48 PHA 01092 0814 C8 INY 01093 0815 B1 B1 LDA (W),Y 01094 0817 4C 3D 02 JMP PUSH 01095 ; 01096 ; VARIABLE 01097 ; SCREEN 34 LINE 5 01098 ; 01099 081A 88 56 41 52 49 41 L885 .BYTE $88,'VARIABL',$C5 42 4C C5 01100 0823 FA 07 .WORD L867 ; link to CONSTANT 01101 0825 D3 07 VAR .WORD DOCOL 01102 0827 05 08 .WORD CONST 01103 0829 0C 0C .WORD PSCOD 01104 ; 01105 082B 18 DOVAR CLC 01106 082C A5 B1 LDA W 01107 082E 69 02 ADC #2 01108 0830 48 PHA 01109 0831 98 TYA 01110 0832 65 B2 ADC W+1 01111 0834 4C 3D 02 JMP PUSH 01112 ; 01113 ; USER 01114 ; SCREEN 34 LINE 10 01115 ; 01116 0837 84 55 53 45 D2 L902 .BYTE $84,'USE',$D2 01117 083C 1A 08 .WORD L885 ; link to VARIABLE 01118 083E D3 07 USER .WORD DOCOL 01119 0840 05 08 .WORD CONST 01120 0842 0C 0C .WORD PSCOD 01121 ; 01122 0844 A0 02 DOUSE LDY #2 01123 0846 18 CLC 01124 0847 B1 B1 LDA (W),Y 01125 0849 65 B3 ADC UP 01126 084B 48 PHA 01127 084C A9 00 LDA #0 01128 084E 65 B4 ADC UP+1 01129 0850 4C 3D 02 JMP PUSH 01130 ; 01131 ; 0 01132 ; SCREEN 35 LINE 2 01133 ; 01134 0853 81 B0 L920 .BYTE $81,$B0 01135 0855 37 08 .WORD L902 ; link to USER 01136 0857 0F 08 ZERO .WORD DOCON 01137 0859 00 00 .WORD 0 01138 ; 01139 ; 1 01140 ; SCREEN 35 LINE 2 01141 ; 01142 085B 81 B1 L928 .BYTE $81,$B1 01143 085D 53 08 .WORD L920 ; link to 0 01144 085F 0F 08 ONE .WORD DOCON 01145 0861 01 00 .WORD 1 01146 ; 01147 ; 2 01148 ; SCREEN 35 LINE 3 01149 ; 01150 0863 81 B2 L936 .BYTE $81,$B2 01151 0865 5B 08 .WORD L928 ; link to 1 01152 0867 0F 08 TWO .WORD DOCON 01153 0869 02 00 .WORD 2 01154 ; 01155 ; 3 01156 ; SCREEN 35 LINE 3 01157 ; 01158 086B 81 B3 L944 .BYTE $81,$B3 01159 086D 63 08 .WORD L936 ; link to 2 01160 086F 0F 08 THREE .WORD DOCON 01161 0871 03 00 .WORD 3 01162 ; 01163 ; BL 01164 ; SCREEN 35 LINE 4 01165 ; 01166 0873 82 42 CC L952 .BYTE $82,'B',$CC 01167 0876 6B 08 .WORD L944 ; link to 3 01168 0878 0F 08 BL .WORD DOCON 01169 087A 20 00 .WORD $20 01170 ; 01171 ; C/L 01172 ; SCREEN 35 LINE 5 01173 ; Characters per line 01174 087C 83 43 2F CC L960 .BYTE $83,'C/',$CC 01175 0880 73 08 .WORD L952 ; link to BL 01176 0882 0F 08 CSLL .WORD DOCON 01177 0884 40 00 .WORD 64 01178 ; 01179 ; FIRST 01180 ; SCREEN 35 LINE 7 01181 ; 01182 0886 85 46 49 52 53 D4 L968 .BYTE $85,'FIRS',$D4 01183 088C 7C 08 .WORD L960 ; link to C/L 01184 088E 0F 08 FIRST .WORD DOCON 01185 0890 70 3B .WORD DAREA ; bottom of disk buffer area 01186 ; 01187 ; LIMIT 01188 ; SCREEN 35 LINE 8 01189 ; 01190 0892 85 4C 49 4D 49 D4 L976 .BYTE $85,'LIMI',$D4 01191 0898 86 08 .WORD L968 ; link to FIRST 01192 089A 0F 08 LIMIT .WORD DOCON 01193 089C 80 3F .WORD UAREA ; buffers end at user area 01194 ; 01195 ; B/BUF 01196 ; SCREEN 35 LINE 9 01197 ; Bytes per Buffer 01198 ; 01199 089E 85 42 2F 42 55 C6 L984 .BYTE $85,'B/BU',$C6 01200 08A4 92 08 .WORD L976 ; link to LIMIT 01201 08A6 0F 08 BBUF .WORD DOCON 01202 08A8 00 01 .WORD SSIZE ; sector size 01203 ; 01204 ; B/SCR 01205 ; SCREEN 35 LINE 10 01206 ; Blocks per screen 01207 ; 01208 08AA 85 42 2F 53 43 D2 L992 .BYTE $85,'B/SC',$D2 01209 08B0 9E 08 .WORD L984 ; link to B/BUF 01210 08B2 0F 08 BSCR .WORD DOCON 01211 08B4 08 00 .WORD 8 ; blocks to make one screen 01212 01213 01214 01215 01216 01217 ; 01218 ; +ORIGIN 01219 ; SCREEN 35 LINE 12 01220 ; 01221 08B6 87 2B 4F 52 49 47 L1000 .BYTE $87,'+ORIGI',$CE 49 CE 01222 08BE AA 08 .WORD L992 ; link to B/SCR 01223 08C0 D3 07 PORIG .WORD DOCOL 01224 08C2 2A 02 00 02 .WORD LIT,ORIG 01225 08C6 96 06 .WORD PLUS 01226 08C8 09 06 .WORD SEMIS 01227 ; 01228 ; TIB 01229 ; SCREEN 36 LINE 4 01230 ; 01231 08CA 83 54 49 C2 L1010 .BYTE $83,'TI',$C2 01232 08CE B6 08 .WORD L1000 ; link to +ORIGIN 01233 08D0 44 08 TIB .WORD DOUSE 01234 08D2 0A .BYTE $A 01235 ; 01236 ; WIDTH 01237 ; SCREEN 36 LINE 5 01238 ; 01239 08D3 85 57 49 44 54 C8 L1018 .BYTE $85,'WIDT',$C8 01240 08D9 CA 08 .WORD L1010 ; link to TIB 01241 08DB 44 08 WIDTH .WORD DOUSE 01242 08DD 0C .BYTE $C 01243 ; 01244 ; WARNING 01245 ; SCREEN 36 LINE 6 01246 ; 01247 08DE 87 57 41 52 4E 49 L1026 .BYTE $87,'WARNIN',$C7 4E C7 01248 08E6 D3 08 .WORD L1018 ; link to WIDTH 01249 08E8 44 08 WARN .WORD DOUSE 01250 08EA 0E .BYTE $E 01251 ; 01252 ; FENCE 01253 ; SCREEN 36 LINE 7 01254 ; 01255 08EB 85 46 45 4E 43 C5 L1034 .BYTE $85,'FENC',$C5 01256 08F1 DE 08 .WORD L1026 ; link to WARNING 01257 08F3 44 08 FENCE .WORD DOUSE 01258 08F5 10 .BYTE $10 01259 ; 01260 ; 01261 ; DP 01262 ; SCREEN 36 LINE 8 01263 ; 01264 08F6 82 44 D0 L1042 .BYTE $82,'D',$D0 01265 08F9 EB 08 .WORD L1034 ; link to FENCE 01266 08FB 44 08 DP .WORD DOUSE 01267 08FD 12 .BYTE $12 01268 ; 01269 ; VOC-LINK 01270 ; SCREEN 36 LINE 9 01271 ; 01272 08FE 88 56 4F 43 2D 4C L1050 .BYTE $88,'VOC-LIN',$CB 49 4E CB 01273 0907 F6 08 .WORD L1042 ; link to DP 01274 0909 44 08 VOCL .WORD DOUSE 01275 090B 14 .BYTE $14 01276 ; 01277 ; BLK 01278 ; SCREEN 36 LINE 10 01279 ; 01280 090C 83 42 4C CB L1058 .BYTE $83,'BL',$CB 01281 0910 FE 08 .WORD L1050 ; link to VOC-LINK 01282 0912 44 08 BLK .WORD DOUSE 01283 0914 16 .BYTE $16 01284 ; 01285 ; IN 01286 ; SCREEN 36 LINE 11 01287 ; 01288 0915 82 49 CE L1066 .BYTE $82,'I',$CE 01289 0918 0C 09 .WORD L1058 ; link to BLK 01290 091A 44 08 IN .WORD DOUSE 01291 091C 18 .BYTE $18 01292 ; 01293 ; OUT 01294 ; SCREEN 36 LINE 12 01295 ; 01296 091D 83 4F 55 D4 L1074 .BYTE $83,'OU',$D4 01297 0921 15 09 .WORD L1066 ; link to IN 01298 0923 44 08 OUT .WORD DOUSE 01299 0925 1A .BYTE $1A 01300 ; 01301 ; SCR 01302 ; SCREEN 36 LINE 13 01303 ; 01304 0926 83 53 43 D2 L1082 .BYTE $83,'SC',$D2 01305 092A 1D 09 .WORD L1074 ; link to OUT 01306 092C 44 08 SCR .WORD DOUSE 01307 092E 1C .BYTE $1C 01308 ; 01309 ; OFFSET 01310 ; SCREEN 37 LINE 1 01311 ; 01312 092F 86 4F 46 46 53 45 L1090 .BYTE $86,'OFFSE',$D4 D4 01313 0936 26 09 .WORD L1082 ; link to SCR 01314 0938 44 08 OFSET .WORD DOUSE 01315 093A 1E .BYTE $1E 01316 ; 01317 ; CONTEXT 01318 ; SCREEN 37 LINE 2 01319 ; 01320 093B 87 43 4F 4E 54 45 L1098 .BYTE $87,'CONTEX',$D4 58 D4 01321 0943 2F 09 .WORD L1090 ; link to OFFSET 01322 0945 44 08 CON .WORD DOUSE 01323 0947 20 .BYTE $20 01324 ; 01325 ; CURRENT 01326 ; SCREEN 37 LINE 3 01327 ; 01328 0948 87 43 55 52 52 45 L1106 .BYTE $87,'CURREN',$D4 4E D4 01329 0950 3B 09 .WORD L1098 ; link to CONTEXT 01330 0952 44 08 CURR .WORD DOUSE 01331 0954 22 .BYTE $22 01332 ; 01333 ; STATE 01334 ; SCREEN 37 LINE 4 01335 ; 01336 0955 85 53 54 41 54 C5 L1114 .BYTE $85,'STAT',$C5 01337 095B 48 09 .WORD L1106 ; link to CURRENT 01338 095D 44 08 STATE .WORD DOUSE 01339 095F 24 .BYTE $24 01340 ; 01341 ; BASE 01342 ; SCREEN 37 LINE 5 01343 ; 01344 0960 84 42 41 53 C5 L1122 .BYTE $84,'BAS',$C5 01345 0965 55 09 .WORD L1114 ; link to STATE 01346 0967 44 08 BASE .WORD DOUSE 01347 0969 26 .BYTE $26 01348 ; 01349 ; DPL 01350 ; SCREEN 37 LINE 6 01351 ; 01352 096A 83 44 50 CC L1130 .BYTE $83,'DP',$CC 01353 096E 60 09 .WORD L1122 ; link to BASE 01354 0970 44 08 DPL .WORD DOUSE 01355 0972 28 .BYTE $28 01356 ; 01357 ; FLD 01358 ; SCREEN 37 LINE 7 01359 ; 01360 0973 83 46 4C C4 L1138 .BYTE $83,'FL',$C4 01361 0977 6A 09 .WORD L1130 ; link to DPL 01362 0979 44 08 FLD .WORD DOUSE 01363 097B 2A .BYTE $2A 01364 ; 01365 ; 01366 ; 01367 ; CSP 01368 ; SCREEN 37 LINE 8 01369 ; 01370 097C 83 43 53 D0 L1146 .BYTE $83,'CS',$D0 01371 0980 73 09 .WORD L1138 ; link to FLD 01372 0982 44 08 CSP .WORD DOUSE 01373 0984 2C .BYTE $2C 01374 ; 01375 ; R# 01376 ; SCREEN 37 LINE 9 01377 ; 01378 0985 82 52 A3 L1154 .BYTE $82,'R',$A3 01379 0988 7C 09 .WORD L1146 ; link to CSP 01380 098A 44 08 RNUM .WORD DOUSE 01381 098C 2E .BYTE $2E 01382 ; 01383 ; HLD 01384 ; SCREEN 37 LINE 10 01385 ; 01386 098D 83 48 4C C4 L1162 .BYTE $83,'HL',$C4 01387 0991 85 09 .WORD L1154 ; link to R# 01388 0993 44 08 HLD .WORD DOUSE 01389 0995 30 .BYTE $30 01390 ; 01391 ; 1+ 01392 ; SCREEN 38 LINE 1 01393 ; 01394 0996 82 31 AB L1170 .BYTE $82,'1',$AB 01395 0999 8D 09 .WORD L1162 ; link to HLD 01396 099B D3 07 ONEP .WORD DOCOL 01397 099D 5F 08 .WORD ONE 01398 099F 96 06 .WORD PLUS 01399 09A1 09 06 .WORD SEMIS 01400 ; 01401 ; 2+ 01402 ; SCREEN 38 LINE 2 01403 ; 01404 09A3 82 32 AB L1180 .BYTE $82,'2',$AB 01405 09A6 96 09 .WORD L1170 ; link to 1+ 01406 09A8 D3 07 TWOP .WORD DOCOL 01407 09AA 67 08 .WORD TWO 01408 09AC 96 06 .WORD PLUS 01409 09AE 09 06 .WORD SEMIS 01410 ; 01411 ; HERE 01412 ; SCREEN 38 LINE 3 01413 ; 01414 09B0 84 48 45 52 C5 L1190 .BYTE $84,'HER',$C5 01415 09B5 A3 09 .WORD L1180 ; link to 2+ 01416 09B7 D3 07 HERE .WORD DOCOL 01417 09B9 FB 08 .WORD DP 01418 09BB 76 07 .WORD AT 01419 09BD 09 06 .WORD SEMIS 01420 ; 01421 ; ALLOT 01422 ; SCREEN 38 LINE 4 01423 ; 01424 09BF 85 41 4C 4C 4F D4 L1200 .BYTE $85,'ALLO',$D4 01425 09C5 B0 09 .WORD L1190 ; link to HERE 01426 09C7 D3 07 ALLOT .WORD DOCOL 01427 09C9 FB 08 .WORD DP 01428 09CB 46 07 .WORD PSTOR 01429 09CD 09 06 .WORD SEMIS 01430 ; 01431 ; , 01432 ; SCREEN 38 LINE 5 01433 ; 01434 09CF 81 AC L1210 .BYTE $81,$AC 01435 09D1 BF 09 .WORD L1200 ; link to ALLOT 01436 09D3 D3 07 COMMA .WORD DOCOL 01437 09D5 B7 09 .WORD HERE 01438 09D7 9A 07 .WORD STORE 01439 09D9 67 08 .WORD TWO 01440 09DB C7 09 .WORD ALLOT 01441 09DD 09 06 .WORD SEMIS 01442 ; 01443 ; C, 01444 ; SCREEN 38 LINE 6 01445 ; 01446 09DF 82 43 AC L1222 .BYTE $82,'C',$AC 01447 09E2 CF 09 .WORD L1210 ; link to , 01448 09E4 D3 07 CCOMM .WORD DOCOL 01449 09E6 B7 09 .WORD HERE 01450 09E8 B2 07 .WORD CSTOR 01451 09EA 5F 08 .WORD ONE 01452 09EC C7 09 .WORD ALLOT 01453 09EE 09 06 .WORD SEMIS 01454 ; 01455 ; - 01456 ; SCREEN 38 LINE 7 01457 ; 01458 09F0 81 AD L1234 .BYTE $81,$AD 01459 09F2 DF 09 .WORD L1222 ; link to C, 01460 09F4 D3 07 SUB .WORD DOCOL 01461 09F6 D5 06 .WORD MINUS 01462 09F8 96 06 .WORD PLUS 01463 09FA 09 06 .WORD SEMIS 01464 ; 01465 ; = 01466 ; SCREEN 38 LINE 8 01467 ; 01468 09FC 81 BD L1244 .BYTE $81,$BD 01469 09FE F0 09 .WORD L1234 ; link to - 01470 0A00 D3 07 EQUAL .WORD DOCOL 01471 0A02 F4 09 .WORD SUB 01472 0A04 70 06 .WORD ZEQU 01473 0A06 09 06 .WORD SEMIS 01474 ; 01475 ; U< 01476 ; Unsigned less than 01477 ; 01478 0A08 82 55 BC L1246 .BYTE $82,'U',$BC 01479 0A0B FC 09 .WORD L1244 ; link to = 01480 0A0D D3 07 ULESS .WORD DOCOL 01481 0A0F F4 09 .WORD SUB ; subtract two values 01482 0A11 85 06 .WORD ZLESS ; test sign 01483 0A13 09 06 .WORD SEMIS 01484 ; 01485 ; < 01486 ; Altered from model 01487 ; SCREEN 38 LINE 9 01488 ; 01489 0A15 81 BC L1254 .BYTE $81,$BC 01490 0A17 08 0A .WORD L1246 ; link to U< 01491 0A19 1B 0A LESS .WORD *+2 01492 0A1B 38 SEC 01493 0A1C B5 02 LDA 2,X 01494 0A1E F5 00 SBC 0,X ; subtract 01495 0A20 B5 03 LDA 3,X 01496 0A22 F5 01 SBC 1,X 01497 0A24 94 03 STY 3,X ; zero high byte 01498 0A26 50 02 BVC L1258 01499 0A28 49 80 EOR #$80 ; correct overflow 01500 0A2A 10 01 L1258 BPL L1260 01501 0A2C C8 INY ; invert boolean 01502 0A2D 94 02 L1260 STY 2,X ; leave boolean 01503 0A2F 4C EB 03 JMP POP 01504 ; 01505 ; > 01506 ; SCREEN 38 LINE 10 01507 0A32 81 BE L1264 .BYTE $81,$BE 01508 0A34 15 0A .WORD L1254 ; link to < 01509 0A36 D3 07 GREAT .WORD DOCOL 01510 0A38 1F 07 .WORD SWAP 01511 0A3A 19 0A .WORD LESS 01512 0A3C 09 06 .WORD SEMIS 01513 ; 01514 ; ROT 01515 ; SCREEN 38 LINE 11 01516 ; 01517 0A3E 83 52 4F D4 L1274 .BYTE $83,'RO',$D4 01518 0A42 32 0A .WORD L1264 ; link to > 01519 0A44 D3 07 ROT .WORD DOCOL 01520 0A46 37 06 .WORD TOR 01521 0A48 1F 07 .WORD SWAP 01522 0A4A 49 06 .WORD RFROM 01523 0A4C 1F 07 .WORD SWAP 01524 0A4E 09 06 .WORD SEMIS 01525 ; 01526 ; SPACE 01527 ; SCREEN 38 LINE 12 01528 ; 01529 0A50 85 53 50 41 43 C5 L1286 .BYTE $85,'SPAC',$C5 01530 0A56 3E 0A .WORD L1274 ; link to ROT 01531 0A58 D3 07 SPACE .WORD DOCOL 01532 0A5A 78 08 .WORD BL 01533 0A5C D4 04 .WORD EMIT 01534 0A5E 09 06 .WORD SEMIS 01535 ; 01536 ; -DUP 01537 ; SCREEN 38 LINE 13 01538 ; 01539 0A60 84 2D 44 55 D0 L1296 .BYTE $84,'-DU',$D0 01540 0A65 50 0A .WORD L1286 ; link to SPACE 01541 0A67 D3 07 DDUP .WORD DOCOL 01542 0A69 37 07 .WORD DUP 01543 0A6B 53 03 .WORD ZBRAN 01544 0A6D 04 00 L1301 .WORD $4 ; L1303-L1301 01545 0A6F 37 07 .WORD DUP 01546 0A71 09 06 L1303 .WORD SEMIS 01547 ; 01548 ; TRAVERSE 01549 ; SCREEN 39 LINE 14 01550 ; 01551 0A73 88 54 52 41 56 45 L1308 .BYTE $88,'TRAVERS',$C5 52 53 C5 01552 0A7C 60 0A .WORD L1296 ; link to -DUP 01553 0A7E D3 07 TRAV .WORD DOCOL 01554 0A80 1F 07 .WORD SWAP 01555 0A82 05 07 L1312 .WORD OVER 01556 0A84 96 06 .WORD PLUS 01557 0A86 64 02 .WORD CLIT 01558 0A88 7F .BYTE $7F 01559 0A89 05 07 .WORD OVER 01560 0A8B 8B 07 .WORD CAT 01561 0A8D 19 0A .WORD LESS 01562 0A8F 53 03 .WORD ZBRAN 01563 0A91 F1 FF L1320 .WORD $FFF1 ; L1312-L1320 01564 0A93 1F 07 .WORD SWAP 01565 0A95 16 07 .WORD DROP 01566 0A97 09 06 .WORD SEMIS 01567 ; 01568 ; LATEST 01569 ; SCREEN 39 LINE 6 01570 ; 01571 0A99 86 4C 41 54 45 53 L1328 .BYTE $86,'LATES',$D4 D4 01572 0AA0 73 0A .WORD L1308 ; link to TRAVERSE 01573 0AA2 D3 07 LATES .WORD DOCOL 01574 0AA4 52 09 .WORD CURR 01575 0AA6 76 07 .WORD AT 01576 0AA8 76 07 .WORD AT 01577 0AAA 09 06 .WORD SEMIS 01578 ; 01579 ; 01580 ; LFA 01581 ; SCREEN 39 LINE 11 01582 ; 01583 0AAC 83 4C 46 C1 L1339 .BYTE $83,'LF',$C1 01584 0AB0 99 0A .WORD L1328 ; link to LATEST 01585 0AB2 D3 07 LFA .WORD DOCOL 01586 0AB4 64 02 .WORD CLIT 01587 0AB6 04 .BYTE 4 01588 0AB7 F4 09 .WORD SUB 01589 0AB9 09 06 .WORD SEMIS 01590 ; 01591 ; CFA 01592 ; SCREEN 39 LINE 12 01593 ; 01594 0ABB 83 43 46 C1 L1350 .BYTE $83,'CF',$C1 01595 0ABF AC 0A .WORD L1339 ; link to LFA 01596 0AC1 D3 07 CFA .WORD DOCOL 01597 0AC3 67 08 .WORD TWO 01598 0AC5 F4 09 .WORD SUB 01599 0AC7 09 06 .WORD SEMIS 01600 ; 01601 ; NFA 01602 ; SCREEN 39 LIINE 13 01603 ; 01604 0AC9 83 4E 46 C1 L1360 .BYTE $83,'NF',$C1 01605 0ACD BB 0A .WORD L1350 ; link to CFA 01606 0ACF D3 07 NFA .WORD DOCOL 01607 0AD1 64 02 .WORD CLIT 01608 0AD3 05 .BYTE $5 01609 0AD4 F4 09 .WORD SUB 01610 0AD6 2A 02 FF FF .WORD LIT,$FFFF 01611 0ADA 7E 0A .WORD TRAV 01612 0ADC 09 06 .WORD SEMIS 01613 ; 01614 ; PFA 01615 ; SCREEN 39 LINE 14 01616 ; 01617 0ADE 83 50 46 C1 L1373 .BYTE $83,'PF',$C1 01618 0AE2 C9 0A .WORD L1360 ; link to NFA 01619 0AE4 D3 07 PFA .WORD DOCOL 01620 0AE6 5F 08 .WORD ONE 01621 0AE8 7E 0A .WORD TRAV 01622 0AEA 64 02 .WORD CLIT 01623 0AEC 05 .BYTE 5 01624 0AED 96 06 .WORD PLUS 01625 0AEF 09 06 .WORD SEMIS 01626 ; 01627 ; !CSP 01628 ; SCREEN 40 LINE 1 01629 ; 01630 0AF1 84 21 43 53 D0 L1386 .BYTE $84,'!CS',$D0 01631 0AF6 DE 0A .WORD L1373 ; link to PFA 01632 0AF8 D3 07 SCSP .WORD DOCOL 01633 0AFA D6 05 .WORD SPAT 01634 0AFC 82 09 .WORD CSP 01635 0AFE 9A 07 .WORD STORE 01636 0B00 09 06 .WORD SEMIS 01637 ; 01638 ; ?ERROR 01639 ; SCREEN 40 LINE 3 01640 ; 01641 0B02 86 3F 45 52 52 4F L1397 .BYTE $86,'?ERRO',$D2 D2 01642 0B09 F1 0A .WORD L1386 ; link to !CSP 01643 0B0B D3 07 QERR .WORD DOCOL 01644 0B0D 1F 07 .WORD SWAP 01645 0B0F 53 03 .WORD ZBRAN 01646 0B11 08 00 L1402 .WORD 8 ; L1406-L1402 01647 0B13 C7 0F .WORD ERROR 01648 0B15 34 03 .WORD BRAN 01649 0B17 04 00 L1405 .WORD 4 ; L1407-L1405 01650 0B19 16 07 L1406 .WORD DROP 01651 0B1B 09 06 L1407 .WORD SEMIS 01652 ; 01653 ; ?COMP 01654 ; SCREEN 40 LINE 6 01655 ; 01656 0B1D 85 3F 43 4F 4D D0 L1412 .BYTE $85,'?COM',$D0 01657 0B23 02 0B .WORD L1397 ; link to ?ERROR 01658 0B25 D3 07 QCOMP .WORD DOCOL 01659 0B27 5D 09 .WORD STATE 01660 0B29 76 07 .WORD AT 01661 0B2B 70 06 .WORD ZEQU 01662 0B2D 64 02 .WORD CLIT 01663 0B2F 11 .BYTE $11 01664 0B30 0B 0B .WORD QERR 01665 0B32 09 06 .WORD SEMIS 01666 ; 01667 ; ?EXEC 01668 ; SCREEN 40 LINE 8 01669 ; 01670 0B34 85 3F 45 58 45 C3 L1426 .BYTE $85,'?EXE',$C3 01671 0B3A 1D 0B .WORD L1412 ; link to ?COMP 01672 0B3C D3 07 QEXEC .WORD DOCOL 01673 0B3E 5D 09 .WORD STATE 01674 0B40 76 07 .WORD AT 01675 0B42 64 02 .WORD CLIT 01676 0B44 12 .BYTE $12 01677 0B45 0B 0B .WORD QERR 01678 0B47 09 06 .WORD SEMIS 01679 ; 01680 ; ?PAIRS 01681 ; SCREEN 40 LINE 10 01682 ; 01683 0B49 86 3F 50 41 49 52 L1439 .BYTE $86,'?PAIR',$D3 D3 01684 0B50 34 0B .WORD L1426 ; link to ?EXEC 01685 0B52 D3 07 QPAIR .WORD DOCOL 01686 0B54 F4 09 .WORD SUB 01687 0B56 64 02 .WORD CLIT 01688 0B58 13 .BYTE $13 01689 0B59 0B 0B .WORD QERR 01690 0B5B 09 06 .WORD SEMIS 01691 ; 01692 ; ?CSP 01693 ; SCREEN 40 LINE 12 01694 ; 01695 0B5D 84 3F 43 53 D0 L1451 .BYTE $84,'?CS',$D0 01696 0B62 49 0B .WORD L1439 ; link to ?PAIRS 01697 0B64 D3 07 QCSP .WORD DOCOL 01698 0B66 D6 05 .WORD SPAT 01699 0B68 82 09 .WORD CSP 01700 0B6A 76 07 .WORD AT 01701 0B6C F4 09 .WORD SUB 01702 0B6E 64 02 .WORD CLIT 01703 0B70 14 .BYTE $14 01704 0B71 0B 0B .WORD QERR 01705 0B73 09 06 .WORD SEMIS 01706 ; 01707 ; ?LOADING 01708 ; SCREEN 40 LINE 14 01709 ; 01710 0B75 88 3F 4C 4F 41 44 L1466 .BYTE $88,'?LOADIN',$C7 49 4E C7 01711 0B7E 5D 0B .WORD L1451 ; link to ?CSP 01712 0B80 D3 07 QLOAD .WORD DOCOL 01713 0B82 12 09 .WORD BLK 01714 0B84 76 07 .WORD AT 01715 0B86 70 06 .WORD ZEQU 01716 0B88 64 02 .WORD CLIT 01717 0B8A 16 .BYTE $16 01718 0B8B 0B 0B .WORD QERR 01719 0B8D 09 06 .WORD SEMIS 01720 ; 01721 ; COMPILE 01722 ; SCREEN 41 LINE 2 01723 ; 01724 0B8F 87 43 4F 4D 50 49 L1480 .BYTE $87,'COMPIL',$C5 4C C5 01725 0B97 75 0B .WORD L1466 ; link to ?LOADING 01726 0B99 D3 07 COMP .WORD DOCOL 01727 0B9B 25 0B .WORD QCOMP 01728 0B9D 49 06 .WORD RFROM 01729 0B9F 37 07 .WORD DUP 01730 0BA1 A8 09 .WORD TWOP 01731 0BA3 37 06 .WORD TOR 01732 0BA5 76 07 .WORD AT 01733 0BA7 D3 09 .WORD COMMA 01734 0BA9 09 06 .WORD SEMIS 01735 ; 01736 ; [ 01737 ; SCREEN 41 LINE 5 01738 ; 01739 0BAB C1 DB L1495 .BYTE $C1,$DB 01740 0BAD 8F 0B .WORD L1480 ; link to COMPILE 01741 0BAF D3 07 LBRAC .WORD DOCOL 01742 0BB1 57 08 .WORD ZERO 01743 0BB3 5D 09 .WORD STATE 01744 0BB5 9A 07 .WORD STORE 01745 0BB7 09 06 .WORD SEMIS 01746 ; 01747 ; ] 01748 ; SCREEN 41 LINE 7 01749 ; 01750 0BB9 81 DD L1507 .BYTE $81,$DD 01751 0BBB AB 0B .WORD L1495 ; link to [ 01752 0BBD D3 07 RBRAC .WORD DOCOL 01753 0BBF 64 02 .WORD CLIT 01754 0BC1 C0 .BYTE $C0 01755 0BC2 5D 09 .WORD STATE 01756 0BC4 9A 07 .WORD STORE 01757 0BC6 09 06 .WORD SEMIS 01758 ; 01759 ; SMUDGE 01760 ; SCREEN 41 LINE 9 01761 ; 01762 0BC8 86 53 4D 55 44 47 L1519 .BYTE $86,'SMUDG',$C5 C5 01763 0BCF B9 0B .WORD L1507 ; link to ] 01764 0BD1 D3 07 SMUDG .WORD DOCOL 01765 0BD3 A2 0A .WORD LATES 01766 0BD5 64 02 .WORD CLIT 01767 0BD7 20 .BYTE $20 01768 0BD8 67 07 .WORD TOGGL 01769 0BDA 09 06 .WORD SEMIS 01770 ; 01771 ; HEX 01772 ; SCREEN 41 LINE 11 01773 ; 01774 0BDC 83 48 45 D8 L1531 .BYTE $83,'HE',$D8 01775 0BE0 C8 0B .WORD L1519 ; link to SMUDGE 01776 0BE2 D3 07 HEX .WORD DOCOL 01777 0BE4 64 02 .WORD CLIT 01778 0BE6 10 .BYTE 16 01779 0BE7 67 09 .WORD BASE 01780 0BE9 9A 07 .WORD STORE 01781 0BEB 09 06 .WORD SEMIS 01782 ; 01783 ; DECIMAL 01784 ; SCREEN 41 LINE 13 01785 ; 01786 0BED 87 44 45 43 49 4D L1543 .BYTE $87,'DECIMA',$CC 41 CC 01787 0BF5 DC 0B .WORD L1531 ; link to HEX 01788 0BF7 D3 07 DECIM .WORD DOCOL 01789 0BF9 64 02 .WORD CLIT 01790 0BFB 0A .BYTE 10 01791 0BFC 67 09 .WORD BASE 01792 0BFE 9A 07 .WORD STORE 01793 0C00 09 06 .WORD SEMIS 01794 ; 01795 ; 01796 ; 01797 ; (;CODE) 01798 ; SCREEN 42 LINE 2 01799 ; 01800 0C02 87 28 3B 43 4F 44 L1555 .BYTE $87,'(;CODE',$A9 45 A9 01801 0C0A ED 0B .WORD L1543 ; link to DECIMAL 01802 0C0C D3 07 PSCOD .WORD DOCOL 01803 0C0E 49 06 .WORD RFROM 01804 0C10 A2 0A .WORD LATES 01805 0C12 E4 0A .WORD PFA 01806 0C14 C1 0A .WORD CFA 01807 0C16 9A 07 .WORD STORE 01808 0C18 09 06 .WORD SEMIS 01809 ; 01810 ; ;CODE 01811 ; SCREEN 42 LINE 6 01812 ; 01813 0C1A C5 3B 43 4F 44 C5 L1568 .BYTE $C5,';COD',$C5 01814 0C20 02 0C .WORD L1555 ; link to (;CODE) 01815 0C22 D3 07 .WORD DOCOL 01816 0C24 64 0B .WORD QCSP 01817 0C26 99 0B .WORD COMP 01818 0C28 0C 0C .WORD PSCOD 01819 0C2A AF 0B .WORD LBRAC 01820 0C2C D1 0B .WORD SMUDG 01821 0C2E 09 06 .WORD SEMIS 01822 ; 01823 ; 01834 ; SCREEN 43 LINE 4 01835 ; 01836 0C42 85 44 4F 45 53 BE L1592 .BYTE $85,'DOES',$BE 01837 0C48 30 0C .WORD L1582 ; link to 01868 0C7C D3 07 COUNT .WORD DOCOL 01869 0C7E 37 07 .WORD DUP 01870 0C80 9B 09 .WORD ONEP 01871 0C82 1F 07 .WORD SWAP 01872 0C84 8B 07 .WORD CAT 01873 0C86 09 06 .WORD SEMIS 01874 ; 01875 ; TYPE 01876 ; SCREEN 44 LINE 2 01877 ; 01878 0C88 84 54 59 50 C5 L1634 .BYTE $84,'TYP',$C5 01879 0C8D 74 0C .WORD L1622 ; link to COUNT 01880 0C8F D3 07 TYPE .WORD DOCOL 01881 0C91 67 0A .WORD DDUP 01882 0C93 53 03 .WORD ZBRAN 01883 0C95 18 00 L1639 .WORD $18 ; L1651-L1639 01884 0C97 05 07 .WORD OVER 01885 0C99 96 06 .WORD PLUS 01886 0C9B 1F 07 .WORD SWAP 01887 0C9D DB 03 .WORD PDO 01888 0C9F F4 03 L1644 .WORD I 01889 0CA1 8B 07 .WORD CAT 01890 0CA3 D4 04 .WORD EMIT 01891 0CA5 74 03 .WORD PLOOP 01892 0CA7 F8 FF L1648 .WORD $FFF8 ; L1644-L1648 01893 0CA9 34 03 .WORD BRAN 01894 0CAB 04 00 L1650 .WORD $4 ; L1652-L1650 01895 0CAD 16 07 L1651 .WORD DROP 01896 0CAF 09 06 L1652 .WORD SEMIS 01897 ; 01898 ; -TRAILING 01899 ; SCREEN 44 LINE 5 01900 ; 01901 0CB1 89 2D 54 52 41 49 L1657 .BYTE $89,'-TRAILIN',$C7 4C 49 4E C7 01902 0CBB 88 0C .WORD L1634 ; link to TYPE 01903 0CBD D3 07 DTRAI .WORD DOCOL 01904 0CBF 37 07 .WORD DUP 01905 01906 0CC1 57 08 .WORD ZERO 01907 0CC3 DB 03 .WORD PDO 01908 0CC5 05 07 L1663 .WORD OVER 01909 0CC7 05 07 .WORD OVER 01910 0CC9 96 06 .WORD PLUS 01911 0CCB 5F 08 .WORD ONE 01912 0CCD F4 09 .WORD SUB 01913 0CCF 8B 07 .WORD CAT 01914 0CD1 78 08 .WORD BL 01915 0CD3 F4 09 .WORD SUB 01916 0CD5 53 03 .WORD ZBRAN 01917 0CD7 08 00 L1672 .WORD 8 ; L1676-L1672 01918 0CD9 1C 06 .WORD LEAVE 01919 0CDB 34 03 .WORD BRAN 01920 0CDD 06 00 L1675 .WORD 6 ; L1678-L1675 01921 0CDF 5F 08 L1676 .WORD ONE 01922 0CE1 F4 09 .WORD SUB 01923 0CE3 74 03 L1678 .WORD PLOOP 01924 0CE5 E0 FF L1679 .WORD $FFE0 ; L1663-L1679 01925 0CE7 09 06 .WORD SEMIS 01926 ; 01927 ; (.") 01928 ; SCREEN 44 LINE 8 01929 0CE9 84 28 2E 22 A9 L1685 .BYTE $84,'(."',$A9 01930 0CEE B1 0C .WORD L1657 ; link to -TRAILING 01931 0CF0 D3 07 PDOTQ .WORD DOCOL 01932 0CF2 5A 06 .WORD R 01933 0CF4 7C 0C .WORD COUNT 01934 0CF6 37 07 .WORD DUP 01935 0CF8 9B 09 .WORD ONEP 01936 0CFA 49 06 .WORD RFROM 01937 0CFC 96 06 .WORD PLUS 01938 0CFE 37 06 .WORD TOR 01939 0D00 8F 0C .WORD TYPE 01940 0D02 09 06 .WORD SEMIS 01941 ; 01942 ; ." 01943 ; SCREEN 44 LINE12 01944 ; 01945 0D04 C2 2E A2 L1701 .BYTE $C2,'.',$A2 01946 0D07 E9 0C .WORD L1685 ; link to PDOTQ 01947 0D09 D3 07 .WORD DOCOL 01948 0D0B 64 02 .WORD CLIT 01949 0D0D 22 .BYTE $22 01950 0D0E 5D 09 .WORD STATE 01951 0D10 76 07 .WORD AT 01952 0D12 53 03 .WORD ZBRAN 01953 0D14 14 00 L1709 .WORD $14 ;L1719-L1709 01954 0D16 99 0B .WORD COMP 01955 0D18 F0 0C .WORD PDOTQ 01956 0D1A 6A 0E .WORD WORD 01957 0D1C B7 09 .WORD HERE 01958 0D1E 8B 07 .WORD CAT 01959 0D20 9B 09 .WORD ONEP 01960 0D22 C7 09 .WORD ALLOT 01961 0D24 34 03 .WORD BRAN 01962 0D26 0A 00 L1718 .WORD $A ;L1723-L1718 01963 0D28 6A 0E L1719 .WORD WORD 01964 0D2A B7 09 .WORD HERE 01965 0D2C 7C 0C .WORD COUNT 01966 0D2E 8F 0C .WORD TYPE 01967 0D30 09 06 L1723 .WORD SEMIS 01968 ; 01969 ; EXPECT 01970 ; SCREEN 45 LINE 2 01971 ; 01972 0D32 86 45 58 50 45 43 L1729 .BYTE $86,'EXPEC',$D4 D4 01973 0D39 04 0D .WORD L1701 ; link to ." 01974 0D3B D3 07 EXPEC .WORD DOCOL 01975 0D3D 05 07 .WORD OVER 01976 0D3F 96 06 .WORD PLUS 01977 0D41 05 07 .WORD OVER 01978 0D43 DB 03 .WORD PDO 01979 0D45 DC 04 L1736 .WORD KEY 01980 0D47 37 07 .WORD DUP 01981 0D49 64 02 .WORD CLIT 01982 0D4B 0E .BYTE $E 01983 0D4C C0 08 .WORD PORIG 01984 0D4E 76 07 .WORD AT 01985 0D50 00 0A .WORD EQUAL 01986 0D52 53 03 .WORD ZBRAN 01987 0D54 1F 00 L1744 .WORD $1F ; L1760-L1744 01988 0D56 16 07 .WORD DROP 01989 0D58 64 02 .WORD CLIT 01990 0D5A 08 .BYTE 08 01991 0D5B 05 07 .WORD OVER 01992 0D5D F4 03 .WORD I 01993 0D5F 00 0A .WORD EQUAL 01994 0D61 37 07 .WORD DUP 01995 0D63 49 06 .WORD RFROM 01996 0D65 67 08 .WORD TWO 01997 0D67 F4 09 .WORD SUB 01998 0D69 96 06 .WORD PLUS 01999 0D6B 37 06 .WORD TOR 02000 0D6D F4 09 .WORD SUB 02001 0D6F 34 03 .WORD BRAN 02002 0D71 27 00 L1759 .WORD $27 ; L1779-L1759 02003 0D73 37 07 L1760 .WORD DUP 02004 0D75 64 02 .WORD CLIT 02005 0D77 0D .BYTE $0D 02006 0D78 00 0A .WORD EQUAL 02007 0D7A 53 03 .WORD ZBRAN 02008 0D7C 0E 00 L1765 .WORD $0E ; L1772-L1765 02009 0D7E 1C 06 .WORD LEAVE 02010 0D80 16 07 .WORD DROP 02011 0D82 78 08 .WORD BL 02012 0D84 57 08 .WORD ZERO 02013 0D86 34 03 .WORD BRAN 02014 0D88 04 00 L1771 .WORD 04 ; L1773-L1771 02015 0D8A 37 07 L1772 .WORD DUP 02016 0D8C F4 03 L1773 .WORD I 02017 0D8E B2 07 .WORD CSTOR 02018 0D90 57 08 .WORD ZERO 02019 0D92 F4 03 .WORD I 02020 0D94 9B 09 .WORD ONEP 02021 0D96 9A 07 .WORD STORE 02022 0D98 D4 04 L1779 .WORD EMIT 02023 0D9A 74 03 .WORD PLOOP 02024 0D9C A9 FF L1781 .WORD $FFA9 02025 0D9E 16 07 .WORD DROP ; L1736-L1781 02026 0DA0 09 06 .WORD SEMIS 02027 ; 02028 ; QUERY 02029 ; SCREEN 45 LINE 9 02030 ; 02031 0DA2 85 51 55 45 52 D9 L1788 .BYTE $85,'QUER',$D9 02032 0DA8 32 0D .WORD L1729 ; link to EXPECT 02033 0DAA D3 07 QUERY .WORD DOCOL 02034 0DAC D0 08 .WORD TIB 02035 0DAE 76 07 .WORD AT 02036 0DB0 64 02 .WORD CLIT 02037 0DB2 50 .BYTE 80 ; 80 characters from terminal 02038 0DB3 3B 0D .WORD EXPEC 02039 0DB5 57 08 .WORD ZERO 02040 0DB7 1A 09 .WORD IN 02041 0DB9 9A 07 .WORD STORE 02042 0DBB 09 06 .WORD SEMIS 02043 ; 02044 ; X 02045 ; SCREEN 45 LINE 11 02046 ; Actually Ascii Null 02047 ; 02048 0DBD C1 80 L1804 .BYTE $C1,$80 02049 0DBF A2 0D .WORD L1788 ; link to QUERY 02050 0DC1 D3 07 .WORD DOCOL 02051 0DC3 12 09 .WORD BLK 02052 0DC5 76 07 .WORD AT 02053 0DC7 53 03 .WORD ZBRAN 02054 0DC9 2A 00 L1810 .WORD $2A ; L1830-l1810 02055 0DCB 5F 08 .WORD ONE 02056 0DCD 12 09 .WORD BLK 02057 0DCF 46 07 .WORD PSTOR 02058 0DD1 57 08 .WORD ZERO 02059 0DD3 1A 09 .WORD IN 02060 0DD5 9A 07 .WORD STORE 02061 0DD7 12 09 .WORD BLK 02062 0DD9 76 07 .WORD AT 02063 0DDB 57 08 B2 08 .WORD ZERO,BSCR 02064 0DDF 58 05 .WORD USLAS 02065 0DE1 16 07 .WORD DROP ; fixed from model 02066 0DE3 70 06 .WORD ZEQU 02067 0DE5 53 03 .WORD ZBRAN 02068 0DE7 08 00 L1824 .WORD 8 ; L1828-L1824 02069 0DE9 3C 0B .WORD QEXEC 02070 0DEB 49 06 .WORD RFROM 02071 0DED 16 07 .WORD DROP 02072 0DEF 34 03 L1828 .WORD BRAN 02073 0DF1 06 00 L1829 .WORD 6 ; L1832-L1829 02074 0DF3 49 06 L1830 .WORD RFROM 02075 0DF5 16 07 .WORD DROP 02076 0DF7 09 06 L1832 .WORD SEMIS 02077 ; 02078 ; FILL 02079 ; SCREEN 46 LINE 1 02080 ; 02081 ; 02082 0DF9 84 46 49 4C CC L1838 .BYTE $84,'FIL',$CC 02083 0DFE BD 0D .WORD L1804 ; link to X 02084 0E00 D3 07 FILL .WORD DOCOL 02085 0E02 1F 07 .WORD SWAP 02086 0E04 37 06 .WORD TOR 02087 0E06 05 07 .WORD OVER 02088 0E08 B2 07 .WORD CSTOR 02089 0E0A 37 07 .WORD DUP 02090 0E0C 9B 09 .WORD ONEP 02091 0E0E 49 06 .WORD RFROM 02092 0E10 5F 08 .WORD ONE 02093 0E12 F4 09 .WORD SUB 02094 0E14 FB 04 .WORD CMOVE 02095 0E16 09 06 .WORD SEMIS 02096 ; 02097 ; ERASE 02098 ; SCREEN 46 LINE 4 02099 ; 02100 0E18 85 45 52 41 53 C5 L1856 .BYTE $85,'ERAS',$C5 02101 0E1E F9 0D .WORD L1838 ; link to FILL 02102 0E20 D3 07 ERASE .WORD DOCOL 02103 0E22 57 08 .WORD ZERO 02104 0E24 00 0E .WORD FILL 02105 0E26 09 06 .WORD SEMIS 02106 ; 02107 ; BLANKS 02108 ; SCREEN 46 LINE 7 02109 ; 02110 0E28 86 42 4C 41 4E 4B L1866 .BYTE $86,'BLANK',$D3 D3 02111 0E2F 18 0E .WORD L1856 ; link to ERASE 02112 0E31 D3 07 BLANK .WORD DOCOL 02113 0E33 78 08 .WORD BL 02114 0E35 00 0E .WORD FILL 02115 0E37 09 06 .WORD SEMIS 02116 ; 02117 ; HOLD 02118 ; SCREEN 46 LINE 10 02119 ; 02120 0E39 84 48 4F 4C C4 L1876 .BYTE $84,'HOL',$C4 02121 0E3E 28 0E .WORD L1866 ; link to BLANKS 02122 0E40 D3 07 HOLD .WORD DOCOL 02123 0E42 2A 02 FF FF .WORD LIT,$FFFF 02124 0E46 93 09 .WORD HLD 02125 0E48 46 07 .WORD PSTOR 02126 0E4A 93 09 .WORD HLD 02127 0E4C 76 07 .WORD AT 02128 0E4E B2 07 .WORD CSTOR 02129 0E50 09 06 .WORD SEMIS 02130 ; 02131 ; PAD 02132 ; SCREEN 46 LINE 13 02133 ; 02134 0E52 83 50 41 C4 L1890 .BYTE $83,'PA',$C4 02135 0E56 39 0E .WORD L1876 ; link to HOLD 02136 0E58 D3 07 PAD .WORD DOCOL 02137 0E5A B7 09 .WORD HERE 02138 0E5C 64 02 .WORD CLIT 02139 0E5E 44 .BYTE 68 ; PAD is 68 bytes above here. 02140 0E5F 96 06 .WORD PLUS 02141 0E61 09 06 .WORD SEMIS 02142 ; 02143 ; WORD 02144 ; SCREEN 47 LINE 1 02145 ; 02146 0E63 84 57 4F 52 C4 L1902 .BYTE $84,'WOR',$C4 02147 0E68 52 0E .WORD L1890 ; link to PAD 02148 0E6A D3 07 WORD .WORD DOCOL 02149 0E6C 12 09 .WORD BLK 02150 0E6E 76 07 .WORD AT 02151 0E70 53 03 .WORD ZBRAN 02152 0E72 0C 00 L1908 .WORD $C ; L1914-L1908 02153 0E74 12 09 .WORD BLK 02154 0E76 76 07 .WORD AT 02155 0E78 D1 14 .WORD BLOCK 02156 0E7A 34 03 .WORD BRAN 02157 0E7C 06 00 L1913 .WORD $6 ; L1916-L1913 02158 0E7E D0 08 L1914 .WORD TIB 02159 0E80 76 07 .WORD AT 02160 0E82 1A 09 L1916 .WORD IN 02161 0E84 76 07 .WORD AT 02162 0E86 96 06 .WORD PLUS 02163 0E88 1F 07 .WORD SWAP 02164 0E8A 95 04 .WORD ENCL 02165 0E8C B7 09 .WORD HERE 02166 0E8E 64 02 .WORD CLIT 02167 0E90 22 .BYTE $22 02168 0E91 31 0E .WORD BLANK 02169 0E93 1A 09 .WORD IN 02170 0E95 46 07 .WORD PSTOR 02171 0E97 05 07 .WORD OVER 02172 0E99 F4 09 .WORD SUB 02173 0E9B 37 06 .WORD TOR 02174 0E9D 5A 06 .WORD R 02175 0E9F B7 09 .WORD HERE 02176 0EA1 B2 07 .WORD CSTOR 02177 0EA3 96 06 .WORD PLUS 02178 0EA5 B7 09 .WORD HERE 02179 0EA7 9B 09 .WORD ONEP 02180 0EA9 49 06 .WORD RFROM 02181 0EAB FB 04 .WORD CMOVE 02182 0EAD 09 06 .WORD SEMIS 02183 ; 02184 ; UPPER 02185 ; SCREEN 47 LINE 12 02186 ; 02187 0EAF 85 55 50 50 45 D2 L1943 .BYTE $85,'UPPE',$D2 02188 0EB5 63 0E .WORD L1902 ; link to WORD 02189 0EB7 D3 07 UPPER .WORD DOCOL 02190 0EB9 05 07 .WORD OVER ; This routine converts text to U case 02191 0EBB 96 06 .WORD PLUS ; It allows interpretation from a term. 02192 0EBD 1F 07 .WORD SWAP ; without a shift-lock. 02193 0EBF DB 03 .WORD PDO 02194 0EC1 F4 03 L1950 .WORD I 02195 0EC3 8B 07 .WORD CAT 02196 0EC5 64 02 .WORD CLIT 02197 0EC7 5F .BYTE $5F 02198 0EC8 36 0A .WORD GREAT 02199 0ECA 53 03 .WORD ZBRAN 02200 0ECC 09 00 L1956 .WORD 09 ; L1961-L1956 02201 0ECE F4 03 .WORD I 02202 0ED0 64 02 .WORD CLIT 02203 0ED2 20 .BYTE $20 02204 0ED3 67 07 .WORD TOGGL 02205 0ED5 74 03 L1961 .WORD PLOOP 02206 0ED7 EA FF L1962 .WORD $FFEA ; L1950-L1962 02207 0ED9 09 06 .WORD SEMIS 02208 ; 02209 ; (NUMBER) 02210 ; SCREEN 48 LINE 1 02211 ; 02212 0EDB 88 28 4E 55 4D 42 L1968 .BYTE $88,'(NUMBER',$A9 45 52 A9 02213 0EE4 AF 0E .WORD L1943 ; link to UPPER 02214 0EE6 D3 07 PNUMB .WORD DOCOL 02215 0EE8 9B 09 L1971 .WORD ONEP 02216 0EEA 37 07 .WORD DUP 02217 0EEC 37 06 .WORD TOR 02218 0EEE 8B 07 .WORD CAT 02219 0EF0 67 09 .WORD BASE 02220 0EF2 76 07 .WORD AT 02221 0EF4 FE 03 .WORD DIGIT 02222 0EF6 53 03 .WORD ZBRAN 02223 0EF8 2C 00 L1979 .WORD $2C ; L2001-L1979 02224 0EFA 1F 07 .WORD SWAP 02225 0EFC 67 09 .WORD BASE 02226 0EFE 76 07 .WORD AT 02227 0F00 20 05 .WORD USTAR 02228 0F02 16 07 .WORD DROP 02229 0F04 44 0A .WORD ROT 02230 0F06 67 09 .WORD BASE 02231 0F08 76 07 .WORD AT 02232 0F0A 20 05 .WORD USTAR 02233 0F0C AF 06 .WORD DPLUS 02234 0F0E 70 09 .WORD DPL 02235 0F10 76 07 .WORD AT 02236 0F12 9B 09 .WORD ONEP 02237 0F14 53 03 .WORD ZBRAN 02238 0F16 08 00 L1994 .WORD 8 ; L1998-L1994 02239 0F18 5F 08 .WORD ONE 02240 0F1A 70 09 .WORD DPL 02241 0F1C 46 07 .WORD PSTOR 02242 0F1E 49 06 L1998 .WORD RFROM 02243 0F20 34 03 .WORD BRAN 02244 0F22 C6 FF L2000 .WORD $FFC6 ; L1971-L2000 02245 0F24 49 06 L2001 .WORD RFROM 02246 0F26 09 06 .WORD SEMIS 02247 ; 02248 ; NUMBER 02249 ; SCREEN 48 LINE 6 02250 ; 02251 0F28 86 4E 55 4D 42 45 L2007 .BYTE $86,'NUMBE',$D2 D2 02252 0F2F DB 0E .WORD L1968 ; link to (NUMBER) 02253 0F31 D3 07 NUMBER .WORD DOCOL 02254 0F33 57 08 .WORD ZERO 02255 0F35 57 08 .WORD ZERO 02256 0F37 44 0A .WORD ROT 02257 0F39 37 07 .WORD DUP 02258 0F3B 9B 09 .WORD ONEP 02259 0F3D 8B 07 .WORD CAT 02260 0F3F 64 02 .WORD CLIT 02261 0F41 2D .BYTE $2D 02262 0F42 00 0A .WORD EQUAL 02263 0F44 37 07 .WORD DUP 02264 0F46 37 06 .WORD TOR 02265 0F48 96 06 .WORD PLUS 02266 0F4A 2A 02 FF FF .WORD LIT,$FFFF 02267 0F4E 70 09 L2023 .WORD DPL 02268 0F50 9A 07 .WORD STORE 02269 0F52 E6 0E .WORD PNUMB 02270 0F54 37 07 .WORD DUP 02271 0F56 8B 07 .WORD CAT 02272 0F58 78 08 .WORD BL 02273 0F5A F4 09 .WORD SUB 02274 0F5C 53 03 .WORD ZBRAN 02275 0F5E 15 00 L2031 .WORD $15 ; L2042-L2031 02276 0F60 37 07 .WORD DUP 02277 0F62 8B 07 .WORD CAT 02278 0F64 64 02 .WORD CLIT 02279 0F66 2E .BYTE $2E 02280 0F67 F4 09 .WORD SUB 02281 0F69 57 08 .WORD ZERO 02282 0F6B 0B 0B .WORD QERR 02283 0F6D 57 08 .WORD ZERO 02284 0F6F 34 03 .WORD BRAN 02285 0F71 DD FF L2041 .WORD $FFDD ; L2023-L2041 02286 0F73 16 07 L2042 .WORD DROP 02287 0F75 49 06 .WORD RFROM 02288 0F77 53 03 .WORD ZBRAN 02289 0F79 04 00 L2045 .WORD 4 ; L2047-L2045 02290 0F7B EE 06 .WORD DMINU 02291 0F7D 09 06 L2047 .WORD SEMIS 02292 ; 02293 ; -FIND 02294 ; SCREEN 48 LINE 12 02295 ; 02296 0F7F 85 2D 46 49 4E C4 L2052 .BYTE $85,'-FIN',$C4 02297 0F85 28 0F .WORD L2007 ; link to NUMBER 02298 0F87 D3 07 DFIND .WORD DOCOL 02299 0F89 78 08 .WORD BL 02300 0F8B 6A 0E .WORD WORD 02301 0F8D B7 09 .WORD HERE ; ) 02302 0F8F 7C 0C .WORD COUNT ; |- Optional allowing free use of low 02303 0F91 B7 0E .WORD UPPER ; ) case from terminal 02304 0F93 B7 09 .WORD HERE 02305 0F95 45 09 .WORD CON 02306 0F97 76 07 .WORD AT 02307 0F99 76 07 .WORD AT 02308 0F9B 2F 04 .WORD PFIND 02309 0F9D 37 07 .WORD DUP 02310 0F9F 70 06 .WORD ZEQU 02311 0FA1 53 03 .WORD ZBRAN 02312 0FA3 0A 00 L2068 .WORD $A ; L2073-L2068 02313 0FA5 16 07 .WORD DROP 02314 0FA7 B7 09 .WORD HERE 02315 0FA9 A2 0A .WORD LATES 02316 0FAB 2F 04 .WORD PFIND 02317 0FAD 09 06 L2073 .WORD SEMIS 02318 ; 02319 ; (ABORT) 02320 ; SCREEN 49 LINE 2 02321 ; 02322 0FAF 87 28 41 42 4F 52 L2078 .BYTE $87,'(ABORT',$A9 54 A9 02323 0FB7 7F 0F .WORD L2052 ; link to -FIND 02324 0FB9 D3 07 PABOR .WORD DOCOL 02325 0FBB 17 12 .WORD ABORT 02326 0FBD 09 06 .WORD SEMIS 02327 ; 02328 ; ERROR 02329 ; SCREEN 49 LINE 4 02330 ; 02331 0FBF 85 45 52 52 4F D2 L2087 .BYTE $85,'ERRO',$D2 02332 0FC5 AF 0F .WORD L2078 ; link to (ABORT) 02333 0FC7 D3 07 ERROR .WORD DOCOL 02334 0FC9 E8 08 .WORD WARN 02335 0FCB 76 07 .WORD AT 02336 0FCD 85 06 .WORD ZLESS 02337 0FCF 53 03 .WORD ZBRAN 02338 0FD1 04 00 L2094 .WORD $4 ; L2096-L2094 02339 0FD3 B9 0F .WORD PABOR 02340 0FD5 B7 09 L2096 .WORD HERE 02341 0FD7 7C 0C .WORD COUNT 02342 0FD9 8F 0C .WORD TYPE 02343 0FDB F0 0C .WORD PDOTQ 02344 0FDD 04 20 20 3F 20 .BYTE 4,' ? ' 02345 0FE2 68 15 .WORD MESS 02346 0FE4 E5 05 .WORD SPSTO 02347 0FE6 16 07 16 07 .WORD DROP,DROP; make room for 2 error values 02348 0FEA 1A 09 .WORD IN 02349 0FEC 76 07 .WORD AT 02350 0FEE 12 09 .WORD BLK 02351 0FF0 76 07 .WORD AT 02352 0FF2 E8 11 .WORD QUIT 02353 0FF4 09 06 .WORD SEMIS 02354 ; 02355 ; ID. 02356 ; SCREEN 49 LINE 9 02357 ; 02358 0FF6 83 49 44 AE L2113 .BYTE $83,'ID',$AE 02359 0FFA BF 0F .WORD L2087 ; link to ERROR 02360 0FFC D3 07 IDDOT .WORD DOCOL 02361 0FFE 58 0E .WORD PAD 02362 1000 64 02 .WORD CLIT 02363 1002 20 .BYTE $20 02364 1003 64 02 .WORD CLIT 02365 1005 5F .BYTE $5F 02366 1006 00 0E .WORD FILL 02367 1008 37 07 .WORD DUP 02368 100A E4 0A .WORD PFA 02369 100C B2 0A .WORD LFA 02370 100E 05 07 .WORD OVER 02371 1010 F4 09 .WORD SUB 02372 1012 58 0E .WORD PAD 02373 1014 1F 07 .WORD SWAP 02374 1016 FB 04 .WORD CMOVE 02375 1018 58 0E .WORD PAD 02376 101A 7C 0C .WORD COUNT 02377 101C 64 02 .WORD CLIT 02378 101E 1F .BYTE $1F 02379 101F 95 05 .WORD ANDD 02380 1021 8F 0C .WORD TYPE 02381 1023 58 0A .WORD SPACE 02382 1025 09 06 .WORD SEMIS 02383 ; 02384 ; CREATE 02385 ; SCREEN 50 LINE 2 02386 ; 02387 1027 86 43 52 45 41 54 L2142 .BYTE $86,'CREAT',$C5 C5 02388 102E F6 0F .WORD L2113 ; link to ID 02389 1030 D3 07 CREAT .WORD DOCOL 02390 1032 D0 08 .WORD TIB ;) 02391 1034 B7 09 .WORD HERE ;| 02392 1036 64 02 .WORD CLIT ;| 6502 only, assures 02393 1038 A0 .BYTE $A0 ;| room exists in dict. 02394 1039 96 06 .WORD PLUS ;| 02395 103B 0D 0A .WORD ULESS ;| 02396 103D 67 08 .WORD TWO ;| 02397 103F 0B 0B .WORD QERR ;) 02398 1041 87 0F .WORD DFIND 02399 1043 53 03 .WORD ZBRAN 02400 1045 0F 00 L2155 .WORD $0F 02401 1047 16 07 .WORD DROP 02402 1049 CF 0A .WORD NFA 02403 104B FC 0F .WORD IDDOT 02404 104D 64 02 .WORD CLIT 02405 104F 04 .BYTE 4 02406 1050 68 15 .WORD MESS 02407 1052 58 0A .WORD SPACE 02408 1054 B7 09 L2163 .WORD HERE 02409 1056 37 07 .WORD DUP 02410 1058 8B 07 .WORD CAT 02411 105A DB 08 .WORD WIDTH 02412 105C 76 07 .WORD AT 02413 105E CE 12 .WORD MIN 02414 1060 9B 09 .WORD ONEP 02415 1062 C7 09 .WORD ALLOT 02416 1064 FB 08 .WORD DP ;) 02417 1066 8B 07 .WORD CAT ;| 6502 only. The code field 02418 1068 64 02 .WORD CLIT ;| must not straddle page 02419 106A FD .BYTE $FD ;| boundaries 02420 106B 00 0A .WORD EQUAL ;| 02421 106D C7 09 .WORD ALLOT ;) 02422 106F 37 07 .WORD DUP 02423 1071 64 02 .WORD CLIT 02424 1073 A0 .BYTE $A0 02425 1074 67 07 .WORD TOGGL 02426 1076 B7 09 .WORD HERE 02427 1078 5F 08 .WORD ONE 02428 107A F4 09 .WORD SUB 02429 107C 64 02 .WORD CLIT 02430 107E 80 .BYTE $80 02431 107F 67 07 .WORD TOGGL 02432 1081 A2 0A .WORD LATES 02433 1083 D3 09 .WORD COMMA 02434 1085 52 09 .WORD CURR 02435 1087 76 07 .WORD AT 02436 1089 9A 07 .WORD STORE 02437 108B B7 09 .WORD HERE 02438 108D A8 09 .WORD TWOP 02439 108F D3 09 .WORD COMMA 02440 1091 09 06 .WORD SEMIS 02441 ; 02442 ; [COMPILE] 02443 ; SCREEN 51 LINE 2 02444 ; 02445 1093 C9 5B 43 4F 4D 50 L2200 .BYTE $C9,'[COMPILE',$DD 49 4C 45 DD 02446 109D 27 10 .WORD L2142 ; link to CREATE 02447 109F D3 07 .WORD DOCOL 02448 10A1 87 0F .WORD DFIND 02449 10A3 70 06 .WORD ZEQU 02450 10A5 57 08 .WORD ZERO 02451 10A7 0B 0B .WORD QERR 02452 10A9 16 07 .WORD DROP 02453 10AB C1 0A .WORD CFA 02454 10AD D3 09 .WORD COMMA 02455 10AF 09 06 .WORD SEMIS 02456 ; 02457 ; LITERAL 02458 ; SCREEN 51 LINE 2 02459 ; 02460 10B1 C7 4C 49 54 45 52 L2216 .BYTE $C7,'LITERA',$CC 41 CC 02461 10B9 93 10 .WORD L2200 ; link to [COMPILE] 02462 10BB D3 07 LITER .WORD DOCOL 02463 10BD 5D 09 .WORD STATE 02464 10BF 76 07 .WORD AT 02465 10C1 53 03 .WORD ZBRAN 02466 10C3 08 00 L2222 .WORD 8 ; L2226-L2222 02467 10C5 99 0B .WORD COMP 02468 10C7 2A 02 .WORD LIT 02469 10C9 D3 09 .WORD COMMA 02470 10CB 09 06 L2226 .WORD SEMIS 02471 ; 02472 ; DLITERAL 02473 ; SCREEN 51 LINE 8 02474 ; 02475 10CD C8 44 4C 49 54 45 L2232 .BYTE $C8,'DLITERA',$CC 52 41 CC 02476 10D6 B1 10 .WORD L2216 ; link to LITERAL 02477 10D8 D3 07 DLIT .WORD DOCOL 02478 10DA 5D 09 .WORD STATE 02479 10DC 76 07 .WORD AT 02480 10DE 53 03 .WORD ZBRAN 02481 10E0 08 00 L2238 .WORD 8 ; L2242-L2238 02482 10E2 1F 07 .WORD SWAP 02483 10E4 BB 10 .WORD LITER 02484 10E6 BB 10 .WORD LITER 02485 10E8 09 06 L2242 .WORD SEMIS 02486 ; 02487 ; ?STACK 02488 ; SCREEN 51 LINE 13 02489 ; 02490 10EA 86 3F 53 54 41 43 L2248 .BYTE $86,'?STAC',$CB CB 02491 10F1 CD 10 .WORD L2232 ; link to DLITERAL 02492 10F3 D3 07 QSTAC .WORD DOCOL 02493 10F5 64 02 .WORD CLIT 02494 10F7 9E .BYTE TOS 02495 10F8 D6 05 .WORD SPAT 02496 10FA 0D 0A .WORD ULESS 02497 10FC 5F 08 .WORD ONE 02498 10FE 0B 0B .WORD QERR 02499 1100 D6 05 .WORD SPAT 02500 1102 64 02 .WORD CLIT 02501 1104 20 .BYTE BOS 02502 1105 0D 0A .WORD ULESS 02503 1107 64 02 .WORD CLIT 02504 1109 07 .BYTE 7 02505 110A 0B 0B .WORD QERR 02506 110C 09 06 .WORD SEMIS 02507 ; 02508 ; INTERPRET 02509 ; SCREEN 52 LINE 2 02510 ; 02511 110E 89 49 4E 54 45 52 L2269 .BYTE $89,'INTERPRE',$D4 50 52 45 D4 02512 1118 EA 10 .WORD L2248 ; link to ?STACK 02513 111A D3 07 INTER .WORD DOCOL 02514 111C 87 0F L2272 .WORD DFIND 02515 111E 53 03 .WORD ZBRAN 02516 1120 1E 00 L2274 .WORD $1E ; L2289-L2274 02517 1122 5D 09 .WORD STATE 02518 1124 76 07 .WORD AT 02519 1126 19 0A .WORD LESS 02520 1128 53 03 .WORD ZBRAN 02521 112A 0A 00 L2279 .WORD $A ; L2284-L2279 02522 112C C1 0A .WORD CFA 02523 112E D3 09 .WORD COMMA 02524 1130 34 03 .WORD BRAN 02525 1132 06 00 L2283 .WORD $6 ; L2286-L2283 02526 1134 C1 0A L2284 .WORD CFA 02527 1136 1C 03 .WORD EXEC 02528 1138 F3 10 L2286 .WORD QSTAC 02529 113A 34 03 .WORD BRAN 02530 113C 1C 00 L2288 .WORD $1C ; L2302-L2288 02531 113E B7 09 L2289 .WORD HERE 02532 1140 31 0F .WORD NUMBER 02533 1142 70 09 .WORD DPL 02534 1144 76 07 .WORD AT 02535 1146 9B 09 .WORD ONEP 02536 1148 53 03 .WORD ZBRAN 02537 114A 08 00 L2295 .WORD 8 ; L2299-L2295 02538 114C D8 10 .WORD DLIT 02539 114E 34 03 .WORD BRAN 02540 1150 06 00 L2298 .WORD $6 ; L2301-L2298 02541 1152 16 07 L2299 .WORD DROP 02542 1154 BB 10 .WORD LITER 02543 1156 F3 10 L2301 .WORD QSTAC 02544 1158 34 03 L2302 .WORD BRAN 02545 115A C2 FF L2303 .WORD $FFC2 ; L2272-L2303 02546 ; 02547 ; IMMEDIATE 02548 ; SCREEN 53 LINE 1 02549 ; 02550 115C 89 49 4D 4D 45 44 L2309 .BYTE $89,'IMMEDIAT',$C5 49 41 54 C5 02551 1166 0E 11 .WORD L2269; ; link to INTERPRET 02552 1168 D3 07 .WORD DOCOL 02553 116A A2 0A .WORD LATES 02554 116C 64 02 .WORD CLIT 02555 116E 40 .BYTE $40 02556 116F 67 07 .WORD TOGGL 02557 1171 09 06 .WORD SEMIS 02558 ; 02559 ; VOCABULARY 02560 ; SCREEN 53 LINE 4 02561 ; 02562 1173 8A 56 4F 43 41 42 L2321 .BYTE $8A,'VOCABULAR',$D9 55 4C 41 52 D9 02563 117E 5C 11 .WORD L2309 ; link to IMMEDIATE 02564 1180 D3 07 .WORD DOCOL 02565 1182 3A 0C .WORD BUILD 02566 1184 2A 02 81 A0 .WORD LIT,$A081 02567 1188 D3 09 .WORD COMMA 02568 118A 52 09 .WORD CURR 02569 118C 76 07 .WORD AT 02570 118E C1 0A .WORD CFA 02571 1190 D3 09 .WORD COMMA 02572 1192 B7 09 .WORD HERE 02573 1194 09 09 .WORD VOCL 02574 1196 76 07 .WORD AT 02575 1198 D3 09 .WORD COMMA 02576 119A 09 09 .WORD VOCL 02577 119C 9A 07 .WORD STORE 02578 119E 4A 0C .WORD DOES 02579 11A0 A8 09 DOVOC .WORD TWOP 02580 11A2 45 09 .WORD CON 02581 11A4 9A 07 .WORD STORE 02582 11A6 09 06 .WORD SEMIS 02583 ; 02584 ; FORTH 02585 ; SCREEN 53 LINE 9 02586 ; 02587 11A8 C5 46 4F 52 54 C8 L2346 .BYTE $C5,'FORT',$C8 02588 11AE 73 11 .WORD L2321 ; link to VOCABULARY 02589 11B0 56 0C FORTH .WORD DODOE 02590 11B2 A0 11 .WORD DOVOC 02591 11B4 81 A0 .WORD $A081 02592 11B6 AA 1A XFOR .WORD NTOP ; points to top name in FORTH 02593 11B8 00 00 VL0 .WORD 0 ; last vocab link ends at zero 02594 ; 02595 ; DEFINITIONS 02596 ; SCREEN 53 LINE 11 02597 ; 02598 ; 02599 11BA 8B 44 45 46 49 4E L2357 .BYTE $8B,'DEFINITION',$D3 49 54 49 4F 4E D3 02600 11C6 A8 11 .WORD L2346 ; link to FORTH 02601 11C8 D3 07 DEFIN .WORD DOCOL 02602 11CA 45 09 .WORD CON 02603 11CC 76 07 .WORD AT 02604 11CE 52 09 .WORD CURR 02605 11D0 9A 07 .WORD STORE 02606 11D2 09 06 .WORD SEMIS 02607 ; 02608 ; ( 02609 ; SCREEN 53 LINE 14 02610 ; 02611 11D4 C1 A8 L2369 .BYTE $C1,$A8 02612 11D6 BA 11 .WORD L2357 ; link to DEFINITIONS 02613 11D8 D3 07 .WORD DOCOL 02614 11DA 64 02 .WORD CLIT 02615 11DC 29 .BYTE $29 02616 11DD 6A 0E .WORD WORD 02617 11DF 09 06 .WORD SEMIS 02618 ; 02619 ; QUIT 02620 ; SCREEN 54 LINE 2 02621 ; 02622 11E1 84 51 55 49 D4 L2381 .BYTE $84,'QUI',$D4 02623 11E6 D4 11 .WORD L2369 ; link to ( 02624 11E8 D3 07 QUIT .WORD DOCOL 02625 11EA 57 08 .WORD ZERO 02626 11EC 12 09 .WORD BLK 02627 11EE 9A 07 .WORD STORE 02628 11F0 AF 0B .WORD LBRAC 02629 11F2 F5 05 L2388 .WORD RPSTO 02630 11F4 F1 04 .WORD CR 02631 11F6 AA 0D .WORD QUERY 02632 11F8 1A 11 .WORD INTER 02633 11FA 5D 09 .WORD STATE 02634 11FC 76 07 .WORD AT 02635 11FE 70 06 .WORD ZEQU 02636 1200 53 03 .WORD ZBRAN 02637 1202 07 00 L2396 .WORD 7 ; L2399-L2396 02638 1204 F0 0C .WORD PDOTQ 02639 1206 02 4F 4B .BYTE 2,'OK' 02640 1209 34 03 L2399 .WORD BRAN 02641 120B E7 FF L2400 .WORD $FFE7 ; L2388-L2400 02642 120D 09 06 .WORD SEMIS 02643 ; 02644 ; ABORT 02645 ; SCREEN 54 LINE 7 02646 ;; 02647 120F 85 41 42 4F 52 D4 L2406 .BYTE $85,'ABOR',$D4 02648 1215 E1 11 .WORD L2381 ; link to QUIT 02649 1217 D3 07 ABORT .WORD DOCOL 02650 1219 E5 05 .WORD SPSTO 02651 121B F7 0B .WORD DECIM 02652 121D 64 14 .WORD DR0 02653 121F F1 04 .WORD CR 02654 1221 F0 0C .WORD PDOTQ 02655 1223 10 66 69 67 2D 46 .BYTE 16,'fig-FORTH 1.02c' 4F 52 54 48 20 20 31 2E 30 32 63 02656 1234 B0 11 .WORD FORTH 02657 1236 C8 11 .WORD DEFIN 02658 1238 E8 11 .WORD QUIT 02659 ; 02660 ; COLD 02661 ; SCREEN 55 LINE 1 02662 ; 02663 123A 84 43 4F 4C C4 L2423 .BYTE $84,'COL',$C4 02664 123F 0F 12 .WORD L2406 ; link to ABORT 02665 1241 43 12 COLD .WORD *+2 02666 1243 AD 0C 02 LDA ORIG+$0C ; from cold start area 02667 1246 8D B6 11 STA FORTH+6 02668 1249 AD 0D 02 LDA ORIG+$0D 02669 124C 8D B7 11 STA FORTH+7 02670 124F A0 15 LDY #$15 02671 1251 D0 02 BNE L2433 02672 1253 A0 0F WARM LDY #$0F 02673 1255 AD 10 02 L2433 LDA ORIG+$10 02674 1258 85 B3 STA UP 02675 125A AD 11 02 LDA ORIG+$11 02676 125D 85 B4 STA UP+1 02677 125F B9 0C 02 L2437 LDA ORIG+$0C,Y 02678 1262 91 B3 STA (UP),Y 02679 1264 88 DEY 02680 1265 10 F8 BPL L2437 02681 1267 A9 12 LDA #ABORT/256 ; actually #>(ABORT+2) 02682 1269 85 AF STA IP+1 02683 126B A9 19 LDA #ABORT+2 02684 126D 85 AE STA IP 02685 126F D8 CLD 02686 1270 A9 6C LDA #$6C 02687 1272 85 B0 STA W-1 02688 1274 4C F7 05 JMP RPSTO+2 ; And off we go ! 02689 ; 02690 ; S->D 02691 ; SCREEN 56 LINE 1 02692 ; 02693 1277 84 53 2D 3E C4 L2453 .BYTE $84,'S->',$C4 02694 127C 3A 12 .WORD L2423 ; link to COLD 02695 127E D3 07 STOD .WORD DOCOL 02696 1280 37 07 .WORD DUP 02697 1282 85 06 .WORD ZLESS 02698 1284 D5 06 .WORD MINUS 02699 1286 09 06 .WORD SEMIS 02700 ; 02701 ; +- 02702 ; SCREEN 56 LINE 4 02703 ; 02704 1288 82 2B AD L2464 .BYTE $82,'+',$AD 02705 128B 77 12 .WORD L2453 ; link to S->D 02706 128D D3 07 PM .WORD DOCOL 02707 128F 85 06 .WORD ZLESS 02708 1291 53 03 .WORD ZBRAN 02709 1293 04 00 L2469 .WORD 4 02710 1295 D5 06 .WORD MINUS 02711 1297 09 06 L2471 .WORD SEMIS 02712 ; 02713 ; D+- 02714 ; SCREEN 56 LINE 6 02715 ; 02716 1299 83 44 2B AD L2476 .BYTE $83,'D+',$AD 02717 129D 88 12 .WORD L2464 ; link to +- 02718 129F D3 07 DPM .WORD DOCOL 02719 12A1 85 06 .WORD ZLESS 02720 12A3 53 03 .WORD ZBRAN 02721 12A5 04 00 L2481 .WORD 4 ; L2483-L2481 02722 12A7 EE 06 .WORD DMINU 02723 12A9 09 06 L2483 .WORD SEMIS 02724 ; 02725 ; ABS 02726 ; SCREEN 56 LINE 9 02727 ; 02728 12AB 83 41 42 D3 L2488 .BYTE $83,'AB',$D3 02729 12AF 99 12 .WORD L2476 ; link to D+- 02730 12B1 D3 07 ABS .WORD DOCOL 02731 12B3 37 07 .WORD DUP 02732 12B5 8D 12 .WORD PM 02733 12B7 09 06 .WORD SEMIS 02734 ; 02735 ; DABS 02736 ; SCREEN 56 LINE 10 02737 ; 02738 12B9 84 44 41 42 D3 L2498 .BYTE $84,'DAB',$D3 02739 12BE AB 12 .WORD L2488 ; link to ABS 02740 12C0 D3 07 DABS .WORD DOCOL 02741 12C2 37 07 .WORD DUP 02742 12C4 9F 12 .WORD DPM 02743 12C6 09 06 .WORD SEMIS 02744 ; 02745 ; MIN 02746 ; SCREEN 56 LINE 12 02747 ; 02748 12C8 83 4D 49 CE L2508 .BYTE $83,'MI',$CE 02749 12CC B9 12 .WORD L2498 ; link to DABS 02750 12CE D3 07 MIN .WORD DOCOL 02751 12D0 05 07 .WORD OVER 02752 12D2 05 07 .WORD OVER 02753 12D4 36 0A .WORD GREAT 02754 12D6 53 03 .WORD ZBRAN 02755 12D8 04 00 L2515 .WORD 4 ; L2517-L2515 02756 12DA 1F 07 .WORD SWAP 02757 12DC 16 07 L2517 .WORD DROP 02758 12DE 09 06 .WORD SEMIS 02759 ; 02760 ; MAX 02761 ; SCREEN 56 LINE 14 02762 ; 02763 12E0 83 4D 41 D8 L2523 .BYTE $83,'MA',$D8 02764 12E4 C8 12 .WORD L2508 ; link to MIN 02765 12E6 D3 07 MAX .WORD DOCOL 02766 12E8 05 07 .WORD OVER 02767 12EA 05 07 .WORD OVER 02768 12EC 19 0A .WORD LESS 02769 12EE 53 03 .WORD ZBRAN 02770 12F0 04 00 L2530 .WORD 4 ; L2532-L2530 02771 12F2 1F 07 .WORD SWAP 02772 12F4 16 07 L2532 .WORD DROP 02773 12F6 09 06 .WORD SEMIS 02774 ; 02775 ; M* 02776 ; SCREEN 57 LINE 1 02777 ; 02778 12F8 82 4D AA L2538 .BYTE $82,'M',$AA 02779 12FB E0 12 .WORD L2523 ; link to MAX 02780 12FD D3 07 MSTAR .WORD DOCOL 02781 12FF 05 07 .WORD OVER 02782 1301 05 07 .WORD OVER 02783 1303 C0 05 .WORD XOR 02784 1305 37 06 .WORD TOR 02785 1307 B1 12 .WORD ABS 02786 1309 1F 07 .WORD SWAP 02787 130B B1 12 .WORD ABS 02788 130D 20 05 .WORD USTAR 02789 130F 49 06 .WORD RFROM 02790 1311 9F 12 .WORD DPM 02791 1313 09 06 .WORD SEMIS 02792 ; 02793 ; M/ 02794 ; SCREEN 57 LINE 3 02795 ; 02796 1315 82 4D AF L2556 .BYTE $82,'M',$AF 02797 1318 F8 12 .WORD L2538 ; link to M* 02798 131A D3 07 MSLAS .WORD DOCOL 02799 131C 05 07 .WORD OVER 02800 131E 37 06 .WORD TOR 02801 1320 37 06 .WORD TOR 02802 1322 C0 12 .WORD DABS 02803 1324 5A 06 .WORD R 02804 1326 B1 12 .WORD ABS 02805 1328 58 05 .WORD USLAS 02806 132A 49 06 .WORD RFROM 02807 132C 5A 06 .WORD R 02808 132E C0 05 .WORD XOR 02809 1330 8D 12 .WORD PM 02810 1332 1F 07 .WORD SWAP 02811 1334 49 06 .WORD RFROM 02812 1336 8D 12 .WORD PM 02813 1338 1F 07 .WORD SWAP 02814 133A 09 06 .WORD SEMIS 02815 ; 02816 ; * 02817 ; SCREEN 57 LINE 7 02818 ; 02819 133C 81 AA L2579 .BYTE $81,$AA 02820 133E 15 13 .WORD L2556 ; link to M/ 02821 1340 D3 07 STAR .WORD DOCOL 02822 1342 20 05 .WORD USTAR 02823 1344 16 07 .WORD DROP 02824 1346 09 06 .WORD SEMIS 02825 ; 02826 ; /MOD 02827 ; SCREEN 57 LINE 8 02828 ; 02829 1348 84 2F 4D 4F C4 L2589 .BYTE $84,'/MO',$C4 02830 134D 3C 13 .WORD L2579 ; link to * 02831 134F D3 07 SLMOD .WORD DOCOL 02832 1351 37 06 .WORD TOR 02833 1353 7E 12 .WORD STOD 02834 1355 49 06 .WORD RFROM 02835 1357 1A 13 .WORD MSLAS 02836 1359 09 06 .WORD SEMIS 02837 ; 02838 ; / 02839 ; SCREEN 57 LINE 9 02840 ; 02841 135B 81 AF L2601 .BYTE $81,$AF 02842 135D 48 13 .WORD L2589 ; link to /MOD 02843 135F D3 07 SLASH .WORD DOCOL 02844 1361 4F 13 .WORD SLMOD 02845 1363 1F 07 .WORD SWAP 02846 1365 16 07 .WORD DROP 02847 1367 09 06 .WORD SEMIS 02848 ; 02849 ; MOD 02850 ; SCREEN 57 LINE 10 02851 ; 02852 1369 83 4D 4F C4 L2612 .BYTE $83,'MO',$C4 02853 136D 5B 13 .WORD L2601 ; link to / 02854 136F D3 07 MOD .WORD DOCOL 02855 1371 4F 13 .WORD SLMOD 02856 1373 16 07 .WORD DROP 02857 1375 09 06 .WORD SEMIS 02858 ; 02859 ; */MOD 02860 ; SCREEN 57 LINE 11 02861 ; 02862 1377 85 2A 2F 4D 4F C4 L2622 .BYTE $85,'*/MO',$C4 02863 137D 69 13 .WORD L2612 ; link to MOD 02864 137F D3 07 SSMOD .WORD DOCOL 02865 1381 37 06 .WORD TOR 02866 1383 FD 12 .WORD MSTAR 02867 1385 49 06 .WORD RFROM 02868 1387 1A 13 .WORD MSLAS 02869 1389 09 06 .WORD SEMIS 02870 ; 02871 ; */ 02872 ; SCREEN 57 LINE 13 02873 ; 02874 138B 82 2A AF L2634 .BYTE $82,'*',$AF 02875 138E 77 13 .WORD L2622 ; link to */MOD 02876 1390 D3 07 SSLAS .WORD DOCOL 02877 1392 7F 13 .WORD SSMOD 02878 1394 1F 07 .WORD SWAP 02879 1396 16 07 .WORD DROP 02880 1398 09 06 .WORD SEMIS 02881 ; 02882 ; M/MOD 02883 ; SCREEN 57 LINE 14 02884 ; 02885 139A 85 4D 2F 4D 4F C4 L2645 .BYTE $85,'M/MO',$C4 02886 13A0 8B 13 .WORD L2634 ; link to */ 02887 13A2 D3 07 MSMOD .WORD DOCOL 02888 13A4 37 06 .WORD TOR 02889 13A6 57 08 .WORD ZERO 02890 13A8 5A 06 .WORD R 02891 13AA 58 05 .WORD USLAS 02892 13AC 49 06 .WORD RFROM 02893 13AE 1F 07 .WORD SWAP 02894 13B0 37 06 .WORD TOR 02895 13B2 58 05 .WORD USLAS 02896 13B4 49 06 .WORD RFROM 02897 13B6 09 06 .WORD SEMIS 02898 ; 02899 ; USE 02900 ; SCREEN 58 LINE 1 02901 ; 02902 13B8 83 55 53 C5 L2662 .BYTE $83,'US',$C5 02903 13BC 9A 13 .WORD L2645 ; link to M/MOD 02904 13BE 2B 08 USE .WORD DOVAR 02905 13C0 70 3B .WORD DAREA 02906 ; 02907 ; PREV 02908 ; SCREEN 58 LINE 2 02909 ; 02910 13C2 84 50 52 45 D6 L2670 .BYTE $84,'PRE',$D6 02911 13C7 B8 13 .WORD L2662 ; link to USE 02912 13C9 2B 08 PREV .WORD DOVAR 02913 13CB 70 3B .WORD DAREA 02914 ; 02915 ; +BUF 02916 ; SCREEN 58 LINE 4 02917 ; 02918 ; 02919 13CD 84 2B 42 55 C6 L2678 .BYTE $84,'+BU',$C6 02920 13D2 C2 13 .WORD L2670 ; link to PREV 02921 13D4 D3 07 PBUF .WORD DOCOL 02922 13D6 2A 02 .WORD LIT 02923 13D8 04 01 .WORD SSIZE+4 ; hold block #, one sector two num 02924 13DA 96 06 .WORD PLUS 02925 13DC 37 07 .WORD DUP 02926 13DE 9A 08 .WORD LIMIT 02927 13E0 00 0A .WORD EQUAL 02928 13E2 53 03 .WORD ZBRAN 02929 13E4 06 00 L2688 .WORD 6 ; L2691-L2688 02930 13E6 16 07 .WORD DROP 02931 13E8 8E 08 .WORD FIRST 02932 13EA 37 07 L2691 .WORD DUP 02933 13EC C9 13 .WORD PREV 02934 13EE 76 07 .WORD AT 02935 13F0 F4 09 .WORD SUB 02936 13F2 09 06 .WORD SEMIS 02937 ; 02938 ; UPDATE 02939 ; SCREEN 58 LINE 8 02940 ; 02941 13F4 86 55 50 44 41 54 L2700 .BYTE $86,'UPDAT',$C5 C5 02942 13FB CD 13 .WORD L2678 ; link to +BUF 02943 13FD D3 07 UPDAT .WORD DOCOL 02944 13FF C9 13 .WORD PREV 02945 1401 76 07 .WORD AT 02946 1403 76 07 .WORD AT 02947 1405 2A 02 00 80 .WORD LIT,$8000 02948 1409 AA 05 .WORD OR 02949 140B C9 13 .WORD PREV 02950 140D 76 07 .WORD AT 02951 140F 9A 07 .WORD STORE 02952 1411 09 06 .WORD SEMIS 02953 ; 02954 ; FLUSH 02955 ; 02956 1413 85 46 4C 55 53 C8 L2705 .BYTE $85,'FLUS',$C8 02957 1419 F4 13 .WORD L2700 ; link to UPDATE 02958 141B D3 07 .WORD DOCOL 02959 141D 9A 08 8E 08 F4 09 .WORD LIMIT,FIRST,SUB 02960 1423 A6 08 64 02 .WORD BBUF,CLIT 02961 1427 04 .BYTE 4 02962 1428 96 06 5F 13 9B 09 .WORD PLUS,SLASH,ONEP 02963 142E 57 08 DB 03 .WORD ZERO,PDO 02964 1432 2A 02 FF 7F 89 14 L2835 .WORD LIT,$7FFF,BUFFR 02965 1438 16 07 74 03 .WORD DROP,PLOOP 02966 143C F6 FF L2839 .WORD $FFF6 ; L2835-L2839 02967 143E 09 06 .WORD SEMIS 02968 ; 02969 ; EMPTY-BUFFERS 02970 ; SCREEN 58 LINE 11 02971 ; 02972 1440 8D 45 4D 50 54 59 L2716 .BYTE $8D,'EMPTY-BUFFER',$D3 2D 42 55 46 46 45 52 D3 02973 144E 13 14 .WORD L2705 ; link to FLUSH 02974 1450 D3 07 .WORD DOCOL 02975 1452 8E 08 .WORD FIRST 02976 1454 9A 08 .WORD LIMIT 02977 1456 05 07 .WORD OVER 02978 1458 F4 09 .WORD SUB 02979 145A 20 0E .WORD ERASE 02980 145C 09 06 .WORD SEMIS 02981 ; 02982 ; DR0 02983 ; SCREEN 58 LINE 14 02984 ; 02985 145E 83 44 52 B0 L2729 .BYTE $83,'DR',$B0 02986 1462 40 14 .WORD L2716 ; link to EMPTY-BUFFERS 02987 1464 D3 07 DR0 .WORD DOCOL 02988 1466 57 08 .WORD ZERO 02989 1468 38 09 .WORD OFSET 02990 146A 9A 07 .WORD STORE 02991 146C 09 06 .WORD SEMIS 02992 ; 02993 ; DR1 02994 ; SCREEN 58 LINE 15 02995 ; 02996 146E 83 44 52 B1 L2740 .BYTE $83,'DR',$B1 02997 1472 5E 14 .WORD L2729 ; link to DR0 02998 1474 D3 07 .WORD DOCOL 02999 1476 2A 02 00 08 .WORD LIT,SECTR ; sectors per drive 03000 147A 38 09 .WORD OFSET 03001 147C 9A 07 .WORD STORE 03002 147E 09 06 .WORD SEMIS 03003 ; 03004 ; BUFFER 03005 ; SCREEN 59 LINE 1 03006 ; 03007 1480 86 42 55 46 46 45 L2751 .BYTE $86,'BUFFE',$D2 D2 03008 1487 6E 14 .WORD L2740 ; link to DR1 03009 1489 D3 07 BUFFR .WORD DOCOL 03010 148B BE 13 .WORD USE 03011 148D 76 07 .WORD AT 03012 148F 37 07 .WORD DUP 03013 1491 37 06 .WORD TOR 03014 1493 D4 13 L2758 .WORD PBUF 03015 1495 53 03 .WORD ZBRAN 03016 1497 FC FF L2760 .WORD $FFFC ; L2758-L2760 03017 1499 BE 13 .WORD USE 03018 149B 9A 07 .WORD STORE 03019 149D 5A 06 .WORD R 03020 149F 76 07 .WORD AT 03021 14A1 85 06 .WORD ZLESS 03022 14A3 53 03 .WORD ZBRAN 03023 14A5 14 00 L2767 .WORD $14 ; L2776-L2767 03024 14A7 5A 06 .WORD R 03025 14A9 A8 09 .WORD TWOP 03026 14AB 5A 06 .WORD R 03027 14AD 76 07 .WORD AT 03028 14AF 2A 02 FF 7F .WORD LIT,$7FFF 03029 14B3 95 05 .WORD ANDD 03030 14B5 57 08 .WORD ZERO 03031 14B7 85 16 .WORD RSLW 03032 14B9 5A 06 L2776 .WORD R 03033 14BB 9A 07 .WORD STORE 03034 14BD 5A 06 .WORD R 03035 14BF C9 13 .WORD PREV 03036 14C1 9A 07 .WORD STORE 03037 14C3 49 06 .WORD RFROM 03038 14C5 A8 09 .WORD TWOP 03039 14C7 09 06 .WORD SEMIS 03040 ; 03041 ; BLOCK 03042 ; SCREEN 60 LINE 1 03043 ; 03044 14C9 85 42 4C 4F 43 CB L2788 .BYTE $85,'BLOC',$CB 03045 14CF 80 14 .WORD L2751 ; link to BUFFER 03046 14D1 D3 07 BLOCK .WORD DOCOL 03047 14D3 38 09 .WORD OFSET 03048 14D5 76 07 .WORD AT 03049 14D7 96 06 .WORD PLUS 03050 14D9 37 06 .WORD TOR 03051 14DB C9 13 .WORD PREV 03052 14DD 76 07 .WORD AT 03053 14DF 37 07 .WORD DUP 03054 14E1 76 07 .WORD AT 03055 14E3 5A 06 .WORD R 03056 14E5 F4 09 .WORD SUB 03057 14E7 37 07 .WORD DUP 03058 14E9 96 06 .WORD PLUS 03059 14EB 53 03 .WORD ZBRAN 03060 14ED 34 00 L2804 .WORD $34 ; L2830-L2804 03061 14EF D4 13 L2805 .WORD PBUF 03062 14F1 70 06 .WORD ZEQU 03063 14F3 53 03 .WORD ZBRAN 03064 14F5 14 00 L2808 .WORD $14 ; L2818-L2808 03065 14F7 16 07 .WORD DROP 03066 14F9 5A 06 .WORD R 03067 14FB 89 14 .WORD BUFFR 03068 14FD 37 07 .WORD DUP 03069 14FF 5A 06 .WORD R 03070 1501 5F 08 .WORD ONE 03071 1503 85 16 .WORD RSLW 03072 1505 67 08 .WORD TWO 03073 1507 F4 09 .WORD SUB 03074 1509 37 07 L2818 .WORD DUP 03075 150B 76 07 .WORD AT 03076 150D 5A 06 .WORD R 03077 150F F4 09 .WORD SUB 03078 1511 37 07 .WORD DUP 03079 1513 96 06 .WORD PLUS 03080 1515 70 06 .WORD ZEQU 03081 1517 53 03 .WORD ZBRAN 03082 1519 D6 FF L2826 .WORD $FFD6 ; L2805-L2826 03083 151B 37 07 .WORD DUP 03084 151D C9 13 .WORD PREV 03085 151F 9A 07 .WORD STORE 03086 1521 49 06 L2830 .WORD RFROM 03087 1523 16 07 .WORD DROP 03088 1525 A8 09 .WORD TWOP 03089 1527 09 06 .WORD SEMIS ; end of BLOCK 03090 ; 03091 ; 03092 ; (LINE) 03093 ; SCREEN 61 LINE 2 03094 ; 03095 1529 86 28 4C 49 4E 45 L2838 .BYTE $86,'(LINE',$A9 A9 03096 1530 C9 14 .WORD L2788 ; link to BLOCK 03097 1532 D3 07 PLINE .WORD DOCOL 03098 1534 37 06 .WORD TOR 03099 1536 82 08 .WORD CSLL 03100 1538 A6 08 .WORD BBUF 03101 153A 7F 13 .WORD SSMOD 03102 153C 49 06 .WORD RFROM 03103 153E B2 08 .WORD BSCR 03104 1540 40 13 .WORD STAR 03105 1542 96 06 .WORD PLUS 03106 1544 D1 14 .WORD BLOCK 03107 1546 96 06 .WORD PLUS 03108 1548 82 08 .WORD CSLL 03109 154A 09 06 .WORD SEMIS 03110 ; 03111 ; .LINE 03112 ; SCREEN 61 LINE 6 03113 ; 03114 154C 85 2E 4C 49 4E C5 L2857 .BYTE $85,'.LIN',$C5 03115 1552 29 15 .WORD L2838 ; link to (LINE) 03116 1554 D3 07 DLINE .WORD DOCOL 03117 1556 32 15 .WORD PLINE 03118 1558 BD 0C .WORD DTRAI 03119 155A 8F 0C .WORD TYPE 03120 155C 09 06 .WORD SEMIS 03121 ; 03122 ; MESSAGE 03123 ; SCREEN 61 LINE 9 03124 ; 03125 155E 87 4D 45 53 53 41 L2868 .BYTE $87,'MESSAG',$C5 47 C5 03126 1566 4C 15 .WORD L2857 ; link to .LINE 03127 1568 D3 07 MESS .WORD DOCOL 03128 156A E8 08 .WORD WARN 03129 156C 76 07 .WORD AT 03130 156E 53 03 .WORD ZBRAN 03131 1570 1B 00 L2874 .WORD $1B ; L2888-L2874 03132 1572 67 0A .WORD DDUP 03133 1574 53 03 .WORD ZBRAN 03134 1576 11 00 L2877 .WORD $11 ; L2886-L2877 03135 1578 64 02 .WORD CLIT 03136 157A 04 .BYTE 4 03137 157B 38 09 .WORD OFSET 03138 157D 76 07 .WORD AT 03139 157F B2 08 .WORD BSCR 03140 1581 5F 13 .WORD SLASH 03141 1583 F4 09 .WORD SUB 03142 1585 54 15 .WORD DLINE 03143 1587 34 03 L2886 .WORD BRAN 03144 1589 0D 00 L2887 .WORD 13 ; L2891-L2887 03145 158B F0 0C L2888 .WORD PDOTQ 03146 158D 06 4D 53 47 20 23 .BYTE 6,'MSG # ' 20 03147 1594 A3 19 .WORD DOT 03148 1596 09 06 L2891 .WORD SEMIS 03149 ; 03150 ; LOAD 03151 ; SCREEN 62 LINE 2 03152 ; 03153 1598 84 4C 4F 41 C4 L2896 .BYTE $84,'LOA',$C4 03154 159D 5E 15 .WORD L2868 ; link to MESSAGE 03155 159F D3 07 LOAD .WORD DOCOL 03156 15A1 12 09 .WORD BLK 03157 15A3 76 07 .WORD AT 03158 15A5 37 06 .WORD TOR 03159 15A7 1A 09 .WORD IN 03160 15A9 76 07 .WORD AT 03161 15AB 37 06 .WORD TOR 03162 15AD 57 08 .WORD ZERO 03163 15AF 1A 09 .WORD IN 03164 15B1 9A 07 .WORD STORE 03165 15B3 B2 08 .WORD BSCR 03166 15B5 40 13 .WORD STAR 03167 15B7 12 09 .WORD BLK 03168 15B9 9A 07 .WORD STORE 03169 15BB 1A 11 .WORD INTER 03170 15BD 49 06 .WORD RFROM 03171 15BF 1A 09 .WORD IN 03172 15C1 9A 07 .WORD STORE 03173 15C3 49 06 .WORD RFROM 03174 15C5 12 09 .WORD BLK 03175 15C7 9A 07 .WORD STORE 03176 15C9 09 06 .WORD SEMIS 03177 ; 03178 ; --> 03179 ; SCREEN 62 LINE 6 03180 ; 03181 15CB C3 2D 2D BE L2924 .BYTE $C3,'--',$BE 03182 15CF 98 15 .WORD L2896 ; link to LOAD 03183 15D1 D3 07 .WORD DOCOL 03184 15D3 80 0B .WORD QLOAD 03185 15D5 57 08 .WORD ZERO 03186 15D7 1A 09 .WORD IN 03187 15D9 9A 07 .WORD STORE 03188 15DB B2 08 .WORD BSCR 03189 15DD 12 09 .WORD BLK 03190 15DF 76 07 .WORD AT 03191 15E1 05 07 .WORD OVER 03192 15E3 6F 13 .WORD MOD 03193 15E5 F4 09 .WORD SUB 03194 15E7 12 09 .WORD BLK 03195 15E9 46 07 .WORD PSTOR 03196 15EB 09 06 .WORD SEMIS 03197 ; 03198 ; XEMIT writes one ascii character to terminal 03199 ; 03200 ; 03201 15ED 98 XEMIT TYA 03202 15EE 38 SEC 03203 15EF A0 1A LDY #$1A 03204 15F1 71 B3 ADC (UP),Y 03205 15F3 91 B3 STA (UP),Y 03206 15F5 C8 INY ; bump user varaible OUT 03207 15F6 A9 00 LDA #0 03208 15F8 71 B3 ADC (UP),Y 03209 15FA 91 B3 STA (UP),Y 03210 15FC B5 00 LDA 0,X ; fetch character to output 03211 15FE 86 B5 STX XSAVE 03212 1600 20 0B 1B JSR OUTCH ; and display it 03213 1603 A6 B5 LDX XSAVE 03214 1605 4C EB 03 JMP POP 03215 ; 03216 ; XKEY reads one terminal keystroke to stack 03217 ; 03218 ; 03219 1608 86 B5 XKEY STX XSAVE 03220 160A 20 F2 1A JSR INCH ; might otherwise clobber it while 03221 160D A6 B5 LDX XSAVE ; inputting a char to accumulator 03222 160F 4C D9 05 JMP PUSHOA 03223 ; 03224 ; XQTER leaves a boolean representing terminal break 03225 ; 03226 ; 03227 1612 AD 00 40 XQTER LDA BRKBYTE ;check break and clear 03228 1615 9C DFB $9C ;STZ opcode (CMOS) 03229 1616 00 40 DW BRKBYTE 03230 1618 29 01 AND #1 03231 161A 4C D9 05 JMP PUSHOA 03232 ; 03233 ; XCR displays a CR and LF to terminal 03234 ; 03235 ; 03236 161D 86 B5 XCR STX XSAVE 03237 161F 20 BA 1A JSR CRLF 03238 1622 A6 B5 LDX XSAVE 03239 1624 4C 44 02 JMP NEXT 03240 ; 03241 ; -DISC 03242 ; machine level sector R/W 03243 ; 03244 1627 85 2D 44 49 53 C3 L3030 .BYTE $85,'-DIS',$C3 03245 162D CB 15 .WORD L2924 ; link to --> 03246 162F 31 16 DDISC .WORD *+2 03247 1631 B5 00 LDA 0,X 03248 1633 8D 0C C6 STA $C60C 03249 1636 8D 0D C6 STA $C60D ; store sector number 03250 1639 B5 02 LDA 2,X 03251 163B 8D 0A C6 STA $C60A 03252 163E 8D 0B C6 STA $C60B ; store track number 03253 1641 B5 04 LDA 4,X 03254 1643 8D CD C4 STA $C4CD 03255 1646 8D CE C4 STA $C4CE ; store drive number 03256 1649 86 B5 STX XSAVE 03257 164B AD DA C4 LDA $C4DA ; sense read or write 03258 164E D0 06 BNE L3032 03259 1650 20 FE E1 JSR $E1FE 03260 1653 4C 59 16 JMP L3040 03261 1656 20 62 E2 L3032 JSR $E262 03262 1659 20 EF E3 L3040 JSR $E3EF ; head up motor off 03263 165C A6 B5 LDX XSAVE 03264 165E AD E1 C4 LDA $C4E1 ; report error code 03265 1661 95 04 STA 4,X 03266 1663 4C E9 03 JMP POPTWO 03267 ; 03268 ; -BCD 03269 ; Convert binary value to BCD 03270 ; 03271 1666 84 2D 42 43 C4 L3050 .BYTE $84,'-BC',$C4 03272 166B 27 16 .WORD L3030 ; link to -DISC 03273 166D D3 07 DBCD .WORD DOCOL 03274 166F 57 08 64 02 .WORD ZERO,CLIT 03275 1673 0A .BYTE 10 03276 1674 58 05 64 02 .WORD USLAS,CLIT 03277 1678 10 .BYTE 16 03278 1679 40 13 AA 05 09 06 .WORD STAR,OR,SEMIS 03279 ; 03280 ; R/W 03281 ; Read or write one sector 03282 ; 03283 167F 83 52 2F D7 L3060 .BYTE $83,'R/',$D7 03284 1683 66 16 .WORD L3050 ; link to -BCD 03285 1685 D3 07 RSLW .WORD DOCOL 03286 1687 DC 16 .WORD FLASHRW 03287 1689 09 06 .WORD SEMIS 03288 168B D3 07 ?RSLW .WORD DOCOL 03289 168D 70 06 2A 02 DA C4 .WORD ZEQU,LIT,$C4DA,CSTOR B2 07 03290 1695 1F 07 57 08 9A 07 .WORD SWAP,ZERO,STORE 03291 169B 57 08 05 07 36 0A .WORD ZERO,OVER,GREAT,OVER 05 07 03292 16A3 2A 02 FF 0F 36 0A .WORD LIT,SECTL-1,GREAT,OR,CLIT AA 05 64 02 03293 16AD 06 .BYTE 6 03294 16AE 0B 0B .WORD QERR 03295 16B0 57 08 2A 02 00 08 .WORD ZERO,LIT,SECTR,USLAS,ONEP 58 05 9B 09 03296 16BA 1F 07 57 08 64 02 .WORD SWAP,ZERO,CLIT 03297 16C0 12 .BYTE $12 03298 16C1 58 05 6D 16 1F 07 .WORD USLAS,DBCD,SWAP,ONEP 9B 09 03299 16C9 6D 16 2F 16 64 02 .WORD DBCD,DDISC,CLIT 03300 16CF 08 .BYTE 8 03301 16D0 0B 0B .WORD QERR 03302 16D2 09 06 .WORD SEMIS 03303 ; 03304 ; {R/W} (flash r/w) 03305 ; SYSTEM-DEPENDANT 03306 ; 03307 A000 DTARW EQU $A000 03308 A002 MSBF EQU $A002 03309 A003 XMSBF EQU $A003 03310 16D4 85 7B 52 2F 57 FD L3061 .BYTE $85,'{R/W',$FD 03311 16DA 7F 16 .WORD L3060 ; link to R/W 03312 16DC DE 16 FLASHRW .WORD *+2 03313 16DE 86 B5 STX XSAVE ; save X 03314 ;save read-or-write flag 03315 16E0 B5 00 LDA 0,X 03316 16E2 48 PHA 03317 16E3 E8 INX 03318 16E4 E8 INX 03319 ;use LSB of block number 03320 16E5 B5 00 LDA 0,X 03321 16E7 8D 03 A0 STA XMSBF 03322 16EA E8 INX 03323 ;use MSB of block number 03324 16EB B5 00 LDA 0,X 03325 16ED 8D 02 A0 STA MSBF 03326 16F0 E8 INX 03327 ;set source-or-destination address is zero page 03328 16F1 B5 00 LDA 0,X 03329 16F3 85 AC STA BUFPTR 03330 16F5 B5 01 LDA 1,X 03331 16F7 85 AD STA BUFPTR+1 03332 16F9 E8 INX 03333 16FA E8 INX 03334 ;p/u flag, jump to appropriate routine 03335 16FB 68 PLA 03336 16FC C9 00 CMP #0 03337 16FE F0 0D BEQ WRSEC 03338 ;read sector places at destination, reads from port 03339 ; incrementing destination pointer 03340 1700 AD 00 A0 RDSEC LDA DTARW ;get data from $A000 03341 1703 91 AC STA (BUFPTR),Y 03342 1705 C8 INY 03343 1706 D0 F8 BNE RDSEC 03344 1708 A6 B5 LDX XSAVE 03345 170A 4C 44 02 JMP NEXT 03346 ;write sector gets from source, writes to port 03347 ; incrementing source pointer 03348 170D B1 AC WRSEC LDA (BUFPTR),Y 03349 170F 8D 00 A0 STA DTARW 03350 1712 C8 INY 03351 1713 D0 F8 BNE WRSEC 03352 1715 A6 B5 LDX XSAVE 03353 1717 4C 44 02 JMP NEXT 03354 ; 03355 ; ' (tick) 03356 ; SCREEN 72 LINE 2 03357 ; 03358 171A C1 A7 L3202 .BYTE $C1,$A7 03359 171C D4 16 .WORD L3061 ; link to {R/W} 03360 171E D3 07 TICK .WORD DOCOL 03361 1720 87 0F .WORD DFIND 03362 1722 70 06 .WORD ZEQU 03363 1724 57 08 .WORD ZERO 03364 1726 0B 0B .WORD QERR 03365 1728 16 07 .WORD DROP 03366 172A BB 10 .WORD LITER 03367 172C 09 06 .WORD SEMIS 03368 ; 03369 ; FORGET 03370 ; Altered from model 03371 ; SCREEN 72 LINE 6 03372 ; 03373 172E 86 46 4F 52 47 45 L3217 .BYTE $86,'FORGE',$D4 D4 03374 1735 1A 17 .WORD L3202 ; link to ' TICK 03375 1737 D3 07 FORG .WORD DOCOL 03376 1739 1E 17 CF 0A 37 07 .WORD TICK,NFA,DUP 03377 173F F3 08 76 07 0D 0A .WORD FENCE,AT,ULESS,CLIT 64 02 03378 1747 15 .BYTE $15 03379 1748 0B 0B 37 06 09 09 .WORD QERR,TOR,VOCL,AT 76 07 03380 1750 5A 06 05 07 0D 0A L3220 .WORD R,OVER,ULESS 03381 1756 53 03 14 00 .WORD ZBRAN,L3225-* 03382 175A B0 11 C8 11 76 07 .WORD FORTH,DEFIN,AT,DUP 37 07 03383 1762 09 09 9A 07 .WORD VOCL,STORE 03384 1766 34 03 E8 FF .WORD BRAN,$FFFF-24+1 ; L3220-* 03385 176A 37 07 64 02 L3225 .WORD DUP,CLIT 03386 176E 04 .BYTE 4 03387 176F F4 09 .WORD SUB 03388 1771 E4 0A B2 0A 76 07 L3228 .WORD PFA,LFA,AT 03389 1777 37 07 5A 06 0D 0A .WORD DUP,R,ULESS 03390 177D 53 03 F2 FF .WORD ZBRAN,$FFFF-14+1 ; L3228-* 03391 1781 05 07 67 08 F4 09 .WORD OVER,TWO,SUB,STORE 9A 07 03392 1789 76 07 67 0A 70 06 .WORD AT,DDUP,ZEQU 03393 178F 53 03 D9 FF .WORD ZBRAN,$FFFF-39+1 ; L3225-* 03394 1793 49 06 FB 08 9A 07 .WORD RFROM,DP,STORE 03395 1799 09 06 .WORD SEMIS 03396 ; 03397 ; BACK 03398 ; SCREEN 73 LINE 1 03399 ; 03400 179B 84 42 41 43 CB L3250 .BYTE $84,'BAC',$CB 03401 17A0 2E 17 .WORD L3217 ; link to FORGET 03402 17A2 D3 07 BACK .WORD DOCOL 03403 17A4 B7 09 .WORD HERE 03404 17A6 F4 09 .WORD SUB 03405 17A8 D3 09 .WORD COMMA 03406 17AA 09 06 .WORD SEMIS 03407 ; 03408 ; BEGIN 03409 ; SCREEN 73 LINE 3 03410 ; 03411 17AC C5 42 45 47 49 CE L3261 .BYTE $C5,'BEGI',$CE 03412 17B2 9B 17 .WORD L3250 ; link to BACK 03413 17B4 D3 07 .WORD DOCOL 03414 17B6 25 0B .WORD QCOMP 03415 17B8 B7 09 .WORD HERE 03416 17BA 5F 08 .WORD ONE 03417 17BC 09 06 .WORD SEMIS 03418 ; 03419 ; ENDIF 03420 ; SCREEN 73 LINE 5 03421 ; 03422 17BE C5 45 4E 44 49 C6 L3273 .BYTE $C5,'ENDI',$C6 03423 17C4 AC 17 .WORD L3261 ; link to BEGIN 03424 17C6 D3 07 ENDIF .WORD DOCOL 03425 17C8 25 0B .WORD QCOMP 03426 17CA 67 08 .WORD TWO 03427 17CC 52 0B .WORD QPAIR 03428 17CE B7 09 .WORD HERE 03429 17D0 05 07 .WORD OVER 03430 17D2 F4 09 .WORD SUB 03431 17D4 1F 07 .WORD SWAP 03432 17D6 9A 07 .WORD STORE 03433 17D8 09 06 .WORD SEMIS 03434 ; 03435 ; THEN 03436 ; SCREEN 73 LINE 7 03437 ; 03438 17DA C4 54 48 45 CE L3290 .BYTE $C4,'THE',$CE 03439 17DF BE 17 .WORD L3273 ; link to ENDIF 03440 17E1 D3 07 .WORD DOCOL 03441 17E3 C6 17 .WORD ENDIF 03442 17E5 09 06 .WORD SEMIS 03443 ; 03444 ; DO 03445 ; SCREEN 73 LINE 9 03446 ; 03447 17E7 C2 44 CF L3300 .BYTE $C2,'D',$CF 03448 17EA DA 17 .WORD L3290 ; link to THEN 03449 17EC D3 07 .WORD DOCOL 03450 17EE 99 0B .WORD COMP 03451 17F0 DB 03 .WORD PDO 03452 17F2 B7 09 .WORD HERE 03453 17F4 6F 08 .WORD THREE 03454 17F6 09 06 .WORD SEMIS 03455 ; 03456 ; LOOP 03457 ; SCREEN 73 LINE 11 03458 ; 03459 ; 03460 17F8 C4 4C 4F 4F D0 L3313 .BYTE $C4,'LOO',$D0 03461 17FD E7 17 .WORD L3300 ; link to DO 03462 17FF D3 07 .WORD DOCOL 03463 1801 6F 08 .WORD THREE 03464 1803 52 0B .WORD QPAIR 03465 1805 99 0B .WORD COMP 03466 1807 74 03 .WORD PLOOP 03467 1809 A2 17 .WORD BACK 03468 180B 09 06 .WORD SEMIS 03469 ; 03470 ; +LOOP 03471 ; SCREEN 73 LINE 13 03472 ; 03473 180D C5 2B 4C 4F 4F D0 L3327 .BYTE $C5,'+LOO',$D0 03474 1813 F8 17 .WORD L3313 ; link to LOOP 03475 1815 D3 07 .WORD DOCOL 03476 1817 6F 08 .WORD THREE 03477 1819 52 0B .WORD QPAIR 03478 181B 99 0B .WORD COMP 03479 181D A4 03 .WORD PPLOO 03480 181F A2 17 .WORD BACK 03481 1821 09 06 .WORD SEMIS 03482 ; 03483 ; UNTIL 03484 ; SCREEN 73 LINE 15 03485 ; 03486 1823 C5 55 4E 54 49 CC L3341 .BYTE $C5,'UNTI',$CC 03487 1829 0D 18 .WORD L3327 ; link to +LOOP 03488 182B D3 07 UNTIL .WORD DOCOL 03489 182D 5F 08 .WORD ONE 03490 182F 52 0B .WORD QPAIR 03491 1831 99 0B .WORD COMP 03492 1833 53 03 .WORD ZBRAN 03493 1835 A2 17 .WORD BACK 03494 1837 09 06 .WORD SEMIS 03495 ; 03496 ; END 03497 ; SCREEN 74 LINE 1 03498 ; 03499 1839 C3 45 4E C4 L3355 .BYTE $C3,'EN',$C4 03500 183D 23 18 .WORD L3341 ; link to UNTIL 03501 183F D3 07 .WORD DOCOL 03502 1841 2B 18 .WORD UNTIL 03503 1843 09 06 .WORD SEMIS 03504 ; 03505 ; AGAIN 03506 ; SCREEN 74 LINE 3 03507 ; 03508 1845 C5 41 47 41 49 CE L3365 .BYTE $C5,'AGAI',$CE 03509 184B 39 18 .WORD L3355 ; link to END 03510 184D D3 07 AGAIN .WORD DOCOL 03511 184F 5F 08 .WORD ONE 03512 1851 52 0B .WORD QPAIR 03513 1853 99 0B .WORD COMP 03514 1855 34 03 .WORD BRAN 03515 1857 A2 17 .WORD BACK 03516 1859 09 06 .WORD SEMIS 03517 ; 03518 ; REPEAT 03519 ; SCREEN 74 LINE 5 03520 ; 03521 185B C6 52 45 50 45 41 L3379 .BYTE $C6,'REPEA',$D4 D4 03522 1862 45 18 .WORD L3365 ; link to AGAIN 03523 1864 D3 07 .WORD DOCOL 03524 1866 37 06 .WORD TOR 03525 1868 37 06 .WORD TOR 03526 186A 4D 18 .WORD AGAIN 03527 186C 49 06 .WORD RFROM 03528 186E 49 06 .WORD RFROM 03529 1870 67 08 .WORD TWO 03530 1872 F4 09 .WORD SUB 03531 1874 C6 17 .WORD ENDIF 03532 1876 09 06 .WORD SEMIS 03533 ; 03534 ; IF 03535 ; SCREEN 74 LINE 8 03536 ; 03537 1878 C2 49 C6 L3396 .BYTE $C2,'I',$C6 03538 187B 5B 18 .WORD L3379 ; link to REPEAT 03539 187D D3 07 IF .WORD DOCOL 03540 187F 99 0B .WORD COMP 03541 1881 53 03 .WORD ZBRAN 03542 1883 B7 09 .WORD HERE 03543 1885 57 08 .WORD ZERO 03544 1887 D3 09 .WORD COMMA 03545 1889 67 08 .WORD TWO 03546 188B 09 06 .WORD SEMIS 03547 ; 03548 ; ELSE 03549 ; SCREEN 74 LINE 10 03550 ; 03551 188D C4 45 4C 53 C5 L3411 .BYTE $C4,'ELS',$C5 03552 1892 78 18 .WORD L3396 ; link to IF 03553 1894 D3 07 .WORD DOCOL 03554 1896 67 08 .WORD TWO 03555 1898 52 0B .WORD QPAIR 03556 189A 99 0B .WORD COMP 03557 189C 34 03 .WORD BRAN 03558 189E B7 09 .WORD HERE 03559 18A0 57 08 .WORD ZERO 03560 18A2 D3 09 .WORD COMMA 03561 18A4 1F 07 .WORD SWAP 03562 18A6 67 08 .WORD TWO 03563 18A8 C6 17 .WORD ENDIF 03564 18AA 67 08 .WORD TWO 03565 18AC 09 06 .WORD SEMIS 03566 ; 03567 ; WHILE 03568 ; SCREEN 74 LINE 13 03569 ; 03570 18AE C5 57 48 49 4C C5 L3431 .BYTE $C5,'WHIL',$C5 03571 18B4 8D 18 .WORD L3411 ; link to ELSE 03572 18B6 D3 07 .WORD DOCOL 03573 18B8 7D 18 .WORD IF 03574 18BA A8 09 .WORD TWOP 03575 18BC 09 06 .WORD SEMIS 03576 ; 03577 ; SPACES 03578 ; SCREEN 75 LINE 1 03579 ; 03580 18BE 86 53 50 41 43 45 L3442 .BYTE $86,'SPACE',$D3 D3 03581 18C5 AE 18 .WORD L3431 ; link to WHILE 03582 18C7 D3 07 SPACS .WORD DOCOL 03583 18C9 57 08 .WORD ZERO 03584 18CB E6 12 .WORD MAX 03585 18CD 67 0A .WORD DDUP 03586 18CF 53 03 .WORD ZBRAN 03587 18D1 0C 00 L3449 .WORD $0C ; L3455-L3449 03588 18D3 57 08 .WORD ZERO 03589 18D5 DB 03 .WORD PDO 03590 18D7 58 0A L3452 .WORD SPACE 03591 18D9 74 03 .WORD PLOOP 03592 18DB FC FF L3454 .WORD $FFFC ; L3452-L3454 03593 18DD 09 06 L3455 .WORD SEMIS 03594 ; 03595 ; <# 03596 ; SCREEN 75 LINE 3 03597 ; 03598 18DF 82 3C A3 L3460 .BYTE $82,'<',$A3 03599 18E2 BE 18 .WORD L3442 ; link to SPACES 03600 18E4 D3 07 BDIGS .WORD DOCOL 03601 18E6 58 0E .WORD PAD 03602 18E8 93 09 .WORD HLD 03603 18EA 9A 07 .WORD STORE 03604 18EC 09 06 .WORD SEMIS 03605 ; 03606 ; #> 03607 ; SCREEN 75 LINE 5 03608 ; 03609 18EE 82 23 BE L3471 .BYTE $82,'#',$BE 03610 18F1 DF 18 .WORD L3460 ; link to <# 03611 18F3 D3 07 EDIGS .WORD DOCOL 03612 18F5 16 07 .WORD DROP 03613 18F7 16 07 .WORD DROP 03614 18F9 93 09 .WORD HLD 03615 18FB 76 07 .WORD AT 03616 18FD 58 0E .WORD PAD 03617 18FF 05 07 .WORD OVER 03618 1901 F4 09 .WORD SUB 03619 1903 09 06 .WORD SEMIS 03620 ; 03621 ; SIGN 03622 ; SCREEN 75 LINE 7 03623 ; 03624 1905 84 53 49 47 CE L3486 .BYTE $84,'SIG',$CE 03625 190A EE 18 .WORD L3471 ; link to #> 03626 190C D3 07 SIGN .WORD DOCOL 03627 190E 44 0A .WORD ROT 03628 1910 85 06 .WORD ZLESS 03629 1912 53 03 .WORD ZBRAN 03630 1914 07 00 L3492 .WORD $7 ; L3496-L3492 03631 1916 64 02 .WORD CLIT 03632 1918 2D .BYTE $2D 03633 1919 40 0E .WORD HOLD 03634 191B 09 06 L3496 .WORD SEMIS 03635 ; 03636 ; # 03637 ; SCREEN 75 LINE 9 03638 ; 03639 191D 81 A3 L3501 .BYTE $81,$A3 03640 191F 05 19 .WORD L3486 ; link to SIGN 03641 1921 D3 07 DIG .WORD DOCOL 03642 1923 67 09 .WORD BASE 03643 1925 76 07 .WORD AT 03644 1927 A2 13 .WORD MSMOD 03645 1929 44 0A .WORD ROT 03646 192B 64 02 .WORD CLIT 03647 192D 09 .BYTE 9 03648 192E 05 07 .WORD OVER 03649 1930 19 0A .WORD LESS 03650 1932 53 03 .WORD ZBRAN 03651 1934 07 00 L3513 .WORD 7 ; L3517-L3513 03652 1936 64 02 .WORD CLIT 03653 1938 07 .BYTE 7 03654 1939 96 06 .WORD PLUS 03655 193B 64 02 L3517 .WORD CLIT 03656 193D 30 .BYTE $30 03657 193E 96 06 .WORD PLUS 03658 1940 40 0E .WORD HOLD 03659 1942 09 06 .WORD SEMIS 03660 ; 03661 ; #S 03662 ; SCREEN 75 LINE 12 03663 ; 03664 1944 82 23 D3 L3526 .BYTE $82,'#',$D3 03665 1947 1D 19 .WORD L3501 ; link to # 03666 1949 D3 07 DIGS .WORD DOCOL 03667 194B 21 19 L3529 .WORD DIG 03668 194D 05 07 .WORD OVER 03669 194F 05 07 .WORD OVER 03670 1951 AA 05 .WORD OR 03671 1953 70 06 .WORD ZEQU 03672 1955 53 03 .WORD ZBRAN 03673 1957 F4 FF L3535 .WORD $FFF4 ; L3529-L3535 03674 1959 09 06 .WORD SEMIS 03675 ; 03676 ; D.R 03677 ; SCREEN 76 LINE 1 03678 ; 03679 195B 83 44 2E D2 L3541 .BYTE $83,'D.',$D2 03680 195F 44 19 .WORD L3526 ; link to #S 03681 1961 D3 07 DDOTR .WORD DOCOL 03682 1963 37 06 .WORD TOR 03683 1965 1F 07 .WORD SWAP 03684 1967 05 07 .WORD OVER 03685 1969 C0 12 .WORD DABS 03686 196B E4 18 .WORD BDIGS 03687 196D 49 19 .WORD DIGS 03688 196F 0C 19 .WORD SIGN 03689 1971 F3 18 .WORD EDIGS 03690 1973 49 06 .WORD RFROM 03691 1975 05 07 .WORD OVER 03692 1977 F4 09 .WORD SUB 03693 1979 C7 18 .WORD SPACS 03694 197B 8F 0C .WORD TYPE 03695 197D 09 06 .WORD SEMIS 03696 ; 03697 ; D. 03698 ; SCREEN 76 LINE 5 03699 ; 03700 197F 82 44 AE L3562 .BYTE $82,'D',$AE 03701 1982 5B 19 .WORD L3541 ; link to D.R 03702 1984 D3 07 DDOT .WORD DOCOL 03703 1986 57 08 .WORD ZERO 03704 1988 61 19 .WORD DDOTR 03705 198A 58 0A .WORD SPACE 03706 198C 09 06 .WORD SEMIS 03707 ; 03708 ; .R 03709 ; SCREEN 76 LINE 7 03710 ; 03711 198E 82 2E D2 L3573 .BYTE $82,'.',$D2 03712 1991 7F 19 .WORD L3562 ; link to D. 03713 1993 D3 07 DOTR .WORD DOCOL 03714 1995 37 06 .WORD TOR 03715 1997 7E 12 .WORD STOD 03716 1999 49 06 .WORD RFROM 03717 199B 61 19 .WORD DDOTR 03718 199D 09 06 .WORD SEMIS 03719 ; 03720 ; . 03721 ; SCREEN 76 LINE 9 03722 ; 03723 199F 81 AE L3585 .BYTE $81,$AE 03724 19A1 8E 19 .WORD L3573 ; link to .R 03725 19A3 D3 07 DOT .WORD DOCOL 03726 19A5 7E 12 .WORD STOD 03727 19A7 84 19 .WORD DDOT 03728 19A9 09 06 .WORD SEMIS 03729 ; 03730 ; ? 03731 ; SCREEN 76 LINE 11 03732 ; 03733 19AB 81 BF L3595 .BYTE $81,$BF 03734 19AD 9F 19 .WORD L3585 ; link to . 03735 19AF D3 07 QUES .WORD DOCOL 03736 19B1 76 07 .WORD AT 03737 19B3 A3 19 .WORD DOT 03738 19B5 09 06 .WORD SEMIS 03739 ; 03740 ; LIST 03741 ; SCREEN 77 LINE 2 03742 ; 03743 19B7 84 4C 49 53 D4 L3605 .BYTE $84,'LIS',$D4 03744 19BC AB 19 .WORD L3595 ; link to ? 03745 19BE D3 07 LIST .WORD DOCOL 03746 19C0 F7 0B .WORD DECIM 03747 19C2 F1 04 .WORD CR 03748 19C4 37 07 .WORD DUP 03749 19C6 2C 09 .WORD SCR 03750 19C8 9A 07 .WORD STORE 03751 19CA F0 0C .WORD PDOTQ 03752 19CC 06 53 43 52 20 23 .BYTE 6,'SCR # ' 20 03753 19D3 A3 19 .WORD DOT 03754 19D5 64 02 .WORD CLIT 03755 19D7 10 .BYTE 16 03756 19D8 57 08 .WORD ZERO 03757 19DA DB 03 .WORD PDO 03758 19DC F1 04 L3620 .WORD CR 03759 19DE F4 03 .WORD I 03760 19E0 6F 08 .WORD THREE 03761 19E2 93 19 .WORD DOTR 03762 19E4 58 0A .WORD SPACE 03763 19E6 F4 03 .WORD I 03764 19E8 2C 09 .WORD SCR 03765 19EA 76 07 .WORD AT 03766 19EC 54 15 .WORD DLINE 03767 19EE 74 03 .WORD PLOOP 03768 19F0 EC FF L3630 .WORD $FFEC 03769 19F2 F1 04 .WORD CR 03770 19F4 09 06 .WORD SEMIS 03771 ; 03772 ; INDEX 03773 ; SCREEN 77 LINE 7 03774 ; 03775 19F6 85 49 4E 44 45 D8 L3637 .BYTE $85,'INDE',$D8 03776 19FC B7 19 .WORD L3605 ; link to LIST 03777 19FE D3 07 .WORD DOCOL 03778 1A00 F1 04 .WORD CR 03779 1A02 9B 09 .WORD ONEP 03780 1A04 1F 07 .WORD SWAP 03781 1A06 DB 03 .WORD PDO 03782 1A08 F1 04 L3647 .WORD CR 03783 1A0A F4 03 .WORD I 03784 1A0C 6F 08 .WORD THREE 03785 1A0E 93 19 .WORD DOTR 03786 1A10 58 0A .WORD SPACE 03787 1A12 57 08 .WORD ZERO 03788 1A14 F4 03 .WORD I 03789 1A16 54 15 .WORD DLINE 03790 1A18 EA 04 .WORD QTERM 03791 1A1A 53 03 .WORD ZBRAN 03792 1A1C 04 00 L3657 .WORD 4 ; L3659-L3657 03793 1A1E 1C 06 .WORD LEAVE 03794 1A20 74 03 L3659 .WORD PLOOP 03795 1A22 E6 FF L3660 .WORD $FFE6 ; L3647-L3660 03796 1A24 64 02 .WORD CLIT 03797 1A26 0C .BYTE $0C ; form feed for printer 03798 1A27 D4 04 .WORD EMIT 03799 1A29 09 06 .WORD SEMIS 03800 ; 03801 ; TRIAD 03802 ; SCREEN 77 LINE 12 03803 ; 03804 1A2B 85 54 52 49 41 C4 L3666 .BYTE $85,'TRIA',$C4 03805 1A31 F6 19 .WORD L3637 ; link to INDEX 03806 1A33 D3 07 .WORD DOCOL 03807 1A35 6F 08 .WORD THREE 03808 1A37 5F 13 .WORD SLASH 03809 1A39 6F 08 .WORD THREE 03810 1A3B 40 13 .WORD STAR 03811 1A3D 6F 08 .WORD THREE 03812 1A3F 05 07 .WORD OVER 03813 1A41 96 06 .WORD PLUS 03814 1A43 1F 07 .WORD SWAP 03815 1A45 DB 03 .WORD PDO 03816 1A47 F1 04 L3681 .WORD CR 03817 1A49 F4 03 .WORD I 03818 1A4B BE 19 .WORD LIST 03819 1A4D 74 03 .WORD PLOOP 03820 1A4F F8 FF L3685 .WORD $FFF8 ; L3681-L3685 03821 1A51 F1 04 .WORD CR 03822 1A53 64 02 .WORD CLIT 03823 1A55 0F .BYTE $F 03824 1A56 68 15 .WORD MESS 03825 1A58 F1 04 .WORD CR 03826 1A5A 64 02 .WORD CLIT 03827 1A5C 0C .BYTE $0C ; form feed for printer 03828 1A5D D4 04 .WORD EMIT 03829 1A5F 09 06 .WORD SEMIS 03830 ; 03831 ; VLIST 03832 ; SCREEN 78 LINE 2 03833 ; 03834 ; 03835 1A61 85 56 4C 49 53 D4 L3696 .BYTE $85,'VLIS',$D4 03836 1A67 2B 1A .WORD L3666 ; link to TRIAD 03837 1A69 D3 07 VLIST .WORD DOCOL 03838 1A6B 64 02 .WORD CLIT 03839 1A6D 80 .BYTE $80 03840 1A6E 23 09 .WORD OUT 03841 1A70 9A 07 .WORD STORE 03842 1A72 45 09 .WORD CON 03843 1A74 76 07 .WORD AT 03844 1A76 76 07 .WORD AT 03845 1A78 23 09 L3706 .WORD OUT 03846 1A7A 76 07 .WORD AT 03847 1A7C 82 08 .WORD CSLL 03848 1A7E 36 0A .WORD GREAT 03849 1A80 53 03 .WORD ZBRAN 03850 1A82 0A 00 L3711 .WORD $A ; L3716-L3711 03851 1A84 F1 04 .WORD CR 03852 1A86 57 08 .WORD ZERO 03853 1A88 23 09 .WORD OUT 03854 1A8A 9A 07 .WORD STORE 03855 1A8C 37 07 L3716 .WORD DUP 03856 1A8E FC 0F .WORD IDDOT 03857 1A90 58 0A .WORD SPACE 03858 1A92 58 0A .WORD SPACE 03859 1A94 E4 0A .WORD PFA 03860 1A96 B2 0A .WORD LFA 03861 1A98 76 07 .WORD AT 03862 1A9A 37 07 .WORD DUP 03863 1A9C 70 06 .WORD ZEQU 03864 1A9E EA 04 .WORD QTERM 03865 1AA0 AA 05 .WORD OR 03866 1AA2 53 03 .WORD ZBRAN 03867 1AA4 D4 FF L3728 .WORD $FFD4 ; L3706-L3728 03868 1AA6 16 07 .WORD DROP 03869 1AA8 09 06 .WORD SEMIS 03870 ; 03871 ; MON 03872 ; SCREEN 79 LINE 3 03873 ; 03874 1AAA 83 4D 4F CE NTOP .BYTE $83,'MO',$CE 03875 1AAE 61 1A .WORD L3696 ; link to VLIST 03876 1AB0 B2 1A MON .WORD *+2 03877 1AB2 86 B5 STX XSAVE 03878 1AB4 00 BRK ; break to monitor which is assumed 03879 1AB5 A6 B5 LDX XSAVE ; to save this as reentry point 03880 1AB7 4C 44 02 JMP NEXT 03881 03882 ;********************************************************** 03883 ; Monitor routines needed to trace. 03884 ; 03885 ; print a carriage return and line feed. 03886 ; 03887 CRLF 03888 1ABA A9 0D LDA #$0D 03889 1ABC 20 0B 1B JSR OUTCH 03890 1ABF A9 0A LDA #$0A 03891 ; JSR OUTCH 03892 ; LDA #'{' 03893 1AC1 4C 0B 1B JMP OUTCH 03894 03895 ; print one blank 03896 ; 03897 1AC4 A9 20 XBLANK LDA #$20 03898 1AC6 4C 0B 1B JMP OUTCH 03899 03900 ; print accum as two hex digits 03901 1AC9 48 HEX2 PHA 03902 1ACA 4A LSR A 03903 1ACB 4A LSR A 03904 1ACC 4A LSR A 03905 1ACD 4A LSR A 03906 1ACE 20 D2 1A JSR HEX2A 03907 1AD1 68 PLA 03908 1AD2 29 0F HEX2A AND #$0F 03909 1AD4 20 DA 1A JSR HXDGT 03910 1AD7 4C 0B 1B JMP OUTCH 03911 ; 03912 ;convert hex digit to ASCII 03913 ; 03914 1ADA C9 0A HXDGT CMP #$0A 03915 1ADC 90 03 BCC HXDGT1 03916 1ADE 18 CLC 03917 1ADF 69 07 ADC #7 03918 1AE1 69 30 HXDGT1 ADC #'0' 03919 1AE3 60 RTS 03920 03921 ; 03922 ; print accum as one ASCII character 03923 ; 03924 1AE4 29 7F LETTER AND #$7F 03925 1AE6 C9 20 CMP #$20 ;compare ASCII space 03926 1AE8 B0 02 BCS LETTER1 ;good if >= ' ' 03927 1AEA A9 2E LDA #'.' 03928 1AEC 4C 0B 1B LETTER1 JMP OUTCH 03929 03930 ; 03931 ; wait for keystroke 03932 ; 03933 1AEF 4C F2 1A ONEKEY JMP INCH 03934 03935 ; 03936 ; Hardware-dependant terminal support 03937 ; 03938 D000 ARCX EQU $D000 ;ACIA receiver 03939 D000 ATXM EQU $D000 ;ACIA transmitter 03940 D001 ASTS EQU $D001 ;ACIA status reg (read) 03941 D001 ARES EQU $D001 ;ACIA soft reset (write) 03942 D002 ACMD EQU $D002 ;ACIA command reg 03943 D003 ACTL EQU $D003 ;ACIA control reg 03944 03945 ;wait for character from UART 03946 ; 03947 1AF2 AD 01 D0 INCH LDA ASTS 03948 1AF5 29 08 AND #$08 03949 1AF7 F0 F9 BEQ INCH 03950 1AF9 AD 00 D0 LDA ARCX 03951 1AFC C9 03 CMP #$03 ;break pressed? 03952 1AFE D0 03 BNE INCH1 03953 ; JMP BRKBYTE 03954 1B00 4C 04 02 JMP REENTR ;warm boot on crtl-C 03955 1B03 C9 04 INCH1 CMP #$04 ;ctrl-D 03956 1B05 D0 03 BNE INCH2 03957 1B07 4C 00 02 JMP ENTER ;cold boot on ctrl-D 03958 1B0A 60 INCH2 RTS 03959 03960 ;send character out to UART 03961 ; 03962 1B0B 5A OUTCH DFB $5A ;PHY, push reg Y (CMOS) 03963 1B0C 48 PHA 03964 1B0D A0 00 LDY #00 03965 1B0F 88 OUTCH1 DEY ;short delay 03966 1B10 D0 FD BNE OUTCH1 03967 1B12 A0 32 LDY #50 03968 1B14 AD 01 D0 OUTCH2 LDA ASTS 03969 1B17 29 10 AND #$10 ;txm dta reg empty? 03970 1B19 D0 05 BNE CHOUP ;0=not empty 03971 1B1B 88 DEY 03972 1B1C D0 F6 BNE OUTCH2 03973 1B1E F0 08 BEQ OUTCFL ;fail 03974 1B20 68 CHOUP PLA 03975 1B21 8D 00 D0 STA ATXM ;send to transmitter 03976 1B24 A9 00 LDA #$00 ;set Z-flg=okay 03977 1B26 7A DFB $7A ;PLY, pull reg Y (CMOS) 03978 1B27 60 RTS 03979 1B28 68 OUTCFL PLA ;return the character 03980 1B29 7A DFB $7A ;PLY, pull reg Y (CMOS) 03981 1B2A 60 RTS ; and NZ=error 03982 03983 ; initialize UART (6551 ACIA) 03984 ; 03985 1B2B 8D 01 D0 UINIT STA ARES ;soft reset 03986 1B2E A9 8B LDA #$8B ;set specific modes and functions 03987 1B30 8D 02 D0 STA ACMD 03988 ; LDA #$1A ;8-N-1, 2400 baud 03989 1B33 A9 1E LDA #$1E ;8-N-1, 9600 baud 03990 1B35 8D 03 D0 STA ACTL 03991 1B38 60 RTS 03992 ; 03993 ; 03994 0200 TOP .END ENTER ; end of listing