@L|}6CD l0C)HCC WhL/h `CmCDiD`  R@W1  Y0@R !L` D  C D     )16CS S)  C)D1 p p 0 C9DI pCDL~CiCDiD` D  C D     )16CS S)  C)D1 p p }0 C9DI pCDL~CiCDiD` DD˙` d J)L !}D L(( LL()  L| L( S LH 0p n  } CY?  q  L L  ` )} `A! d߰")-݆ "  $G@LLL&0") $G% }H0 3S8`G ȱG ȱG   Gȭ Gȭ GG}GHiH8(()) G$H% `(0 })8` d)L ݆ & LGȘ ݆LL d  ! LL d)N>Q  HH) }  hyhyB q L> Lm JJ  Ln*` dB%' }8  H H` 1 { LL   !L     Hh SY?  q  1L }  !? S   q 1 L   Ll  Lg E`L   !L)  q 1L}) `L0AM݊L݉ ML  N݆LLLNLMLHG!@}1F GȱGLLEEȩÑEȑEEȑE Ed E7EȩE  q} L !,0,0SGɛ L 1 !L EHEh W G gLLSROTCES EERF } G) *Gȩ GȽG GȌd q q G`  8   0G  `D}CEDC0X:Ȣ Y ȱC* ? 0.. , 0%n ?A[ 0 : L`L  `, 0`Y}`piH n0)բY? 08`0 }  0$L GGȽG L `8L`L}8`  05G)݁,G)ȱGȱGHh0})Hh` B! 8`8iiiLE`}E8FEh( l0`ɃLL L8^~jj8jHi hEEEiEȱEiE` dTE} H8EEȱEEȩEh J E8   . m  i`LI!)E1FR}1LJ舩9GIH`LJJ`HGHh l`} S gL   8 rii `дCDCG W  }C  Lq` X٨`DOS SYS IIIIIIIIIIIIIIIC`0 ߩ0}}}) |||DDOS DOSDOS SYS }}}}CDOS SYS} 0`BDELV !B }`LVUQ   ]   TU J ]L!T  #      TU  } L ? .  t`GBJ V~DEHI B V0dV!}QDEHI VF9 ,0 ,0 s0hhL  L` H hDHEh"}DEL8HI   0 HI,0 0  9 .G VLO#},0 L4*IJ`llD1:AUTORUN.SYSNEED MEM.SAV TO LOAD THIS FILE.D1:MEM.SAV J y08 B|DEHI$} V0 0`B;DELV䌚 !B y`@ʆ v s? F0Ξ05: [ BDEHI%} VY8 B V  @  /DE `E:D1:DUP.SYSERROR-SAVING USER MEMORY ON DISKTYPE Y TO &}STILL RUN DOS B;DE J V (` 9 V⪍ ઍ  -'}LLu DEHILV 9 .l 9 .l  `` s$B VBH(}I|DE V BLV nB,DE J V* \*` B V BLVDEHI BLVL)}1u H232435; 1 ;  hh@2 e1i1LHҍ 00) 08 109hh@ Ҡ2e*}1i1232435ޥ<<8} 3E:}DISK OPERATING SYSTEM II VERSION 2.0SCOPYRIGHT 1980 ATARIA. DISK DIRECTORY I. FORMAT DISKB. RUN CARTRIDGE J. D,}UPLICATE DISKC. COPY FILE K. BINARY SAVED. DELETE FILE(S) L. BINARY LOADE. RENAME FILE M. RUN AT ADDRESSF. LOCK F-}ILE N. CREATE MEM.SAVG. UNLOCK FILE O. DUPLICATE FILEH. WRITE DOS FILES9!&x#!7&p))'&X*./)L''-؆莟.}R'S  vW DEHHI 1A#! @ ~0ɛ8A0.) ȅ 1 1i/}il ! 1L NO SUCH ITEMSELECT ITEM OR FOR MENU! 0 .{z:*{}.|~ 1 0 00}JB 18L^%|DLl%DIRECTORY--SEARCH SPEC,LIST FILE? # 0 0 n&|D! 1L NOT A DISK FILE1}N !B 1L " 1 !BDED:}:1BJ|DE 1DEBH2}I 1 h0ߢ 0.  0?詛 1 ~0YЛ 1 "L<" "L 3} BL1TYPE "Y" TO DELETE...DELETE FILE SPECCOPY--FROM, TO?OPTION NOT ALLOWED COPYING---DN:4}# 0|D .L$A#B#C#JB|DE 1BHIDD#E 1D#0: B5} 1L B#C#C#B# B 1N#$0SYS1}:e#D# d# D# .d#ȽD# d# 𩛙d#X# 1,A#6}PdD#ELO- A.BJdD#E 1 1HH 0hh|DL^%1}:e# Lt% e#dD#EL%7} 1 0 . .0% 1L WILD CARDS NOT ALLOWED IN DESTINATION 0 A.|K@C}//3Hu ξL/L DRIVE TO WRITE DOS FILES TO?WRITING NEW DOS FILESTYPE "Y" TO WRITE DOS TO DRIVE 2.?}D2:DOS.SYSERROR - NOT VERSION 2 FORMAT. , &* բ( 1L `[) 0NΞ 0 L1M) 1@} L BAD LOAD FILELOAD FROM WHAT FILE?) 0 0#B 1L WHAT FILE TO LOCK?) 0 0$B 1L WHAT FILE TO UNLOCK?DUA}P DISK-SOURCE,DEST DRIVES?TYPE "Y" IF OK TO USE PROGRAM AREACAUTION: A "Y" INVALIDATES MEM.SAV. h  ,B}  `)  <0 2 2 0  ,   ,,ޢ* 1L ,K* 1 ~0 0C}FINSERT BOTH DISKS, TYPE RETURNERROR - DRIVES INCOMPATIBLE., 1 ~038  , 1L D}, &*  Lz+, 0 , 1 ~0 + Y,0!,0 ,L+ ,mm  v,"ǭE}0Ξ, 05,Lt+L +,Hh` NOT ENOUGH ROOMINSERT SOURCE DISK,TYPE RETURNF}INSERT DESTINATION DISK,TYPE RETURN`    `L,8,0( rG}L1(`ߢ) 1* 1 ~0Y`hhL S SL1) 8`NAME OF FILE TO MOVE?- 0 0|DLtH}% A., 1 <0 0 .@L# .BJ 1  DEHIB V L1 ,5 1 <0,L. I} JB|,A#Pd#DE 1 HI BDEHHII 1 B 1 , 1 <0,0Lf- B VJ},A#P, 1 <0 0L#L ߢ) 1* 1 ~0Yj383}mm ݭK}}`8}``|* ? ɛ,`|:(|/ 1L `DESTINATION CANT L}BE DOS.SYS0 0H{ $22Δ $28/L /) $2 Π $2 0 ξM}hAΞB,0 J 1 BޝDEHI,HDE 1HIHIDELSAVE-N}GIVE FILE,START,END(,INIT,RUN)O X0 1`BDEPHI V` X0H 1 L O}0 0 1L0`PLEASE TYPE 1 LETTER,0`hhL <0 1L0LA1 ,;ɛ7,"ɛ:ݦ1ݥP}A"D|ݤD|ȩ:|ȩ|ɛ,,(/+.ީ1 1,ɛ`轤{Q}NAME TOO LONG B VL ` L1I H1EӝDL1|mDiE` V0`8d/8 i:"2!22 1R} L ERROR- 144ɛ+,' 20*.. өw2 1``2TOO MANY DIGITSINVALIDS} HEXADECIMAL PARAMETER800 0 8 00`,0'D800H,ɛh`2L1NEED D1 THRU D4uT} HEXADECIMAL PARAMETER800 0 8 00`,0'D800H,ɛh`2L1NEED D1 THRU D4ubc  FILEAUXAPPNOUTFILOUTININDECIONAMESLOCKSTRTLENGLINETMPBUFBUFLEISTALENANSLSCIO2V}@ @ W}dCOPY PROGRAMn;@,ASK FOR OPTIONS( LISTING(Y/N)#6-X}4Y#6-@9;@,6.h V`9PLA/LDX #$10/JSR CIO/RTS9;@,6.h V`9PLA/LDX #$20/JSY}R CIO/RTS`!6-I:,&AV!;,ag-@P:'@P,c67B:,%@,.2 Z} g COPY FORTH1-->FORTH((( Enter FORTH source disk(drive 2)--(%Enter FORTH destination disk(dri[}ve 1)(Copying FORTH1**@@ D2:FORTH1 BREAD INTO BUF$@))\}@@D1:FORTH$ B$OUTPUT OPTION HEADER  B WRITE BUF$((Copying FORTH22**]}@@ D2:FORTH2< BF@n B output buffer(Copying FORTH3**@^}@ D2:FORTH3 B@ B output buffer@'OUTPUT OPTI_}ON HEADER'"B$';;(@ 100 .TITLE >:@4,FORTH>:@4,.'##(@110 .TAB 14,21,3`}58'(@ 120 .PAGEt'33(@"130 STRTLD=DCB0 load start address~'//(@140 ENDLD=TOP load end addresa}s'11(@ 150 RUNLD=ENTER load run address'"@B'!!(@160 .OPT NOLIST'$*READ INb}TO BUF$+'AP@'READ CHARACTERS + 6-C:,+;$AR&AV$P:'AV,;ASP:'AV, + 6-c}B:,*+;$AV&AV$P:'AV,;AWP:'AV,4+6-?:C:,,>+%%6-F:AV,%AV$F:AW,C+36-F:d}AQ,A60( READ ERROR:3&H+ 6-f+$.WRITE FROM BUF$.(Af@(WRITE CHARACTERS. 6-e}C:,.;$Ah&AV$P:'AV,;AiP:'AV,/ 6-/;$Ar&AV$P:'AV,;AsP:'Af}V,/6-?:C:,,&/.F:Ag,!@+( WRITE ERROR:.&:/$ D2:COMBINESTALENANSLSCIO2\./:JFILETMPNIBBLBYTVALVALIPOCOLCNOLO  @@x i} @ # @SYMBOL TABLE DUMP&&;@ ,;@,;@, (Enter fil j}e name(no ext) 6.D:67@,.$67B:,%@,..SYM. @@LDETERMI k}NE SCREEN/PRINTERV( Print symbols`j+ 4Y+@@P:t+ 4N+@@ l}E:%%ASK IF TO DISPLAY LOCAL SYMBOLS$$(Display local symbols(Lxxx)#6-@4Y#6- m}""SKIP FIRST SIX BYTES(HEADER)(-@@$)@( T #6-#NUMBER OF COLUMNS OUTPUT SYMBOL n}S 6.  )@)@ )@ GET NAME! 6-@& )@+ (" o}(@%(@(0 # 6-!A'#6-&A(5 67<,.>:,6-%@:  A'A1D AA p}7@<@,1L0*7@<@,/L9A0F * 6- B*67@<@,.H * 6- B*67@ q}<@,.J ("@(67@<@,.*L ("A(67@<@,.=M (@N 6-%@ r}X 0"@(@&6-0 A0b (@  A0''OUTPUT BYTE IN HEX'INPUT: s}BYTE$'6-P:'@,)' 6..'$ B$OUTPUT NIBBLE IN HEX8'6-&@$B' BL'$t'OUTPUT NIBB t}LE~'INPUT: NIBBLE'1 @.67B:,%@,.>:@H%,1$'%"67B:,%@,.>:@U%,%$D:SYMBOL |MTT5lBNDEJK V0 = =M =0 L B V LUlH =H =H =Ihv}HhEhD8HDHIEIHI V`BHI V`D:*.IN/ =0 L B V LUlH =H =H =IhI@A cP ` `Lx8LLoLjLxLyLHHGhx}h`HHGhh` L L c" L L! L c LJɛI ƴH h y}洠`H hH)_ h)} ~L IJ Ȅ    z}д` Ъ!B(Ciim@@m?@?@mC@C@mP@P@mS@S@mV@V@mY@Y@m\@\@m_@_@mb@b@m{}l@l@mo@o@m@@m@@m@@m@@mN@N@m9@9@m;@;@m$C$C +@ ,@ i!.@ i3@C C C@|}A &C.@3@)`l!B ` `Lx8LLoLjLxLyLHHGh(1000 ;1010 ; Through the courtesy of1020 ;1030 ; FORTH INTEREST GROUP1040 ; P. O. Box 11051050 ; San Carlos, CA 940701~}060 ;1070 ; Release 11080 ; With compiler security and1090 ; variable length names1100 ;1110 ; Equates giving memory ass}ignments,1120 ; machine registers and disk parameters1130 ;1140 SSIZE =512 sector size in bytes1150 NBUF =8 number of buf}fers desired in RAM1160 ; (SSIZE*NBUF>=1024)1170 SECTR =100 sectors per drive1180 SECTL =200 sector limit fo}r 2 drives1190 BMAG =SSIZE+4*NBUF 1056 total buffer magnitude, in bytes1210 ;1220 BOS =$84 bottom of data stack, in Z-page}1230 TOS =$BA top of data stack, in Z-page1240 N =TOS+8 xXxxxxxxx scratch workspace1250 IP =N+8 Xx interpretive pointer12}60 W =IP+3 xXx code field pointer1270 UP =W+2 Xx user area pointer1280 XSAVE =UP+2 X temporary for X-register1290 ;1300 T}IBX =$0100 terminal input buffer of 84 bytes1340 DAREA =$2800 disk buffer area1341 *=DAREA+BMAG1342 UAREA=* 128 bytes of }user area1343 *=*+1281344 DCB0 .BYTE $10 iocb #1345 .BYTE 0,0 open,eof1346 .WORD 0 block #(0=closed)1348 .BYTE "D:SY}STEM.4TH",$9B1350 *=3*SECTR+23+DCB01352 DCB1 .BYTE $201353 .BYTE 0,01354 .WORD 01356 .BYTE "D:DR1",$9B1358 ORIG =3*}SECTR+23+DCB1+$FF/$100*$100 origin of FORTH's dictonary1460 ;1470 ; Boot up parameters.1480 ;1482 *=$2E0 ; final RUN add}ress1484 .WORD ENTER ; cold entry1490 *=ORIG1500 ENTER NOP User cold entry point1510 JMP COLD+2 vector to COLD entry1}520 REENTR NOP User warm entry point1530 JMP WARM vector to WARM entry1540 .WORD $0004,$5ED2 6502 encoded in radix-36155}0 .WORD NTOP Name address of MON1560 .WORD $7E Backspace character1570 .WORD UAREA Initial user area1580 .WORD TOS Ini}tial top of stack1590 .WORD $1FF Initial top of return stack1600 .WORD TIBX Initial terminal input buffer1610 .WORD 31 }Initial name field width1620 .WORD 1 0=no disk,1=disk1630 .WORD TOP Initial fence address1640 .WORD TOP Initial top of }dictionary1650 .WORD VLO Initial vocabulary link pointer1690 ;<>1700 L22 .BYTE $83,"LI" <--- name field1710 .WORD 0 <-}-- link field (last is 0)1720 LIT .WORD *+2 <--- code address field1730 LDA (IP),Y <--- start of parameter field1740 PHA}1750 INC IP1760 BNE L301770 INC IP+11780 L30 LDA (IP),Y1790 L31 INC IP1800 BNE PUSH1810 INC IP+11820 ;1830 PUSH} DEX1840 DEX1850 ;1860 PUT STA 1,X1870 PLA1880 STA 0,X1890 ;1900 ; NEXT is the address interpreter that moves1910 }; from machine level word to word.1920 ;1930 NEXT LDY #11940 LDA (IP),Y Fetch code field address pointed1950 STA W+1 to} by IP1960 DEY1970 LDA (IP),Y1980 STA W1981 CMP #$FF1982 BEQ L32 branch to avoid JMP (xxFF)1990 ;JSR TRACE Remove }this when all is well2000 CLC Increment IP by two2010 LDA IP2020 ADC #22030 STA IP2040 BCC L542050 INC IP+12060 }L54 JMP W-1 Jump to an indirect jump(W)2061 ;L32 JSR TRACE avoid JMP (xxFF)2062 L32 CLC2063 LDA IP2064 ADC #22065 STA} IP2066 BCC FIXW2067 INC IP+12068 FIXW INY2069 LDA (W),Y simulate JMP (xxFF)2070 STA L34+22071 DEY2072 LDA (W),Y}2073 STA L34+12074 L34 JMP W-1 **this instruction will be modified**2079 ;2080 ; CLIT pushes next inline byte to data st}ack2090 ;2100 L35 .BYTE $84,"CLI"2110 .WORD L222120 CLIT .WORD *+22130 LDA (IP),Y2140 PHA2150 TYA2160 BEQ L31 f}orced branch into LIT2170 ;2180 ; Temporary trace routine.2190 ;2250 ;XW=$CC Scratch register to next code field address}2260 ;NP=$CE another scratch register pointer to name2270 ;2280 ;TRACE STX XSAVE2290 ;JSR CRLF2300 ;LDA IP+12310 ;JSR HE}X22320 ;LDA IP2330 ;JSR HEX2 Print IP2340 ;JSR XBLANK2350 ;2360 ;LDY #02370 ;LDA (IP),Y2380 ;STA XW2390 ;STA NP Fetch} next code field pointer2400 ;INY2410 ;LDA (IP),Y2420 ;STA XW+12430 ;STA NP+12440 ;JSR PRNAM Print dictionary name2450 };2460 ;LDA XW+12470 ;JSR HEX2 Print W2480 ;LDA XW2490 ;JSR HEX22500 ;JSR XBLANK2510 ;2520 ;LDA XSAVE Print SP2530 ;JS}R HEX22540 ;JSR XBLANK2550 ;2560 ;LDA #1 Print return stack bottom2570 ;JSR HEX22580 ;TSX2590 ;INX2600 ;TXA2610 ;JSR }HEX22620 ;JSR XBLANK2630 ;2640 ;JSR ONEKEY Wait for operator keystroke2650 ;LDX XSAVE2660 ;LDY #02670 ;RTS2680 ;2690 }; TCOLON called from DOCOLON to label2700 ; each point where FORTH nests one level2710 ;2720 ;TCOLON STX XSAVE2730 ;LDA W}2740 ;STA NP Locate name of called word2750 ;LDA W+12760 ;STA NP+12770 ;JSR CRLF2780 ;LDA #':2790 ;JSR LETTER2800 ;JSR} XBLANK2810 ;JSR PRNAM2820 ;LDX XSAVE2830 ;RTS2840 ;2850 ; Print name by its code field address in NP2860 ;2870 ;PRNAM} JSR DECNP2880 ;JSR DECNP2890 ;JSR DECNP2900 ;LDY #02910 ;PN1 JSR DECNP2920 ;LDA (NP),Y loop till D7 in name set2930 ;B}PL PN12940 ;PN2 INY2950 ;LDA (NP),Y2960 ;JSR LETTER print letters of name field2970 ;LDA (NP),Y2980 ;BPL PN22990 ;JSR X}BLANK3000 ;LDY #03010 ;RTS3020 ;3030 ; Decrement name field pointer3040 ;3050 ;DECNP LDA NP3060 ;BNE DECNP13070 ;DEC }NP+13080 ;DECNP1 DEC NP3090 ;RTS3100 ;3110 ;3120 SETUP ASL A3130 STA N-13140 L63 LDA 0,X3150 STA N,Y3160 INX3170} INY3180 CPY N-13190 BNE L633200 LDY #03210 RTS3220 ;<>3230 L75 .BYTE $87,"EXECUT"3240 .WORD L353250 EXEC .WOR}D *+23260 LDA 0,X3270 STA W3280 LDA 1,X3290 STA W+13300 INX3310 INX3320 JMP FIXW to JMP (W) in Z-page3330 ;<>}3340 L89 .BYTE $86,"BRANC"3350 .WORD L753360 BRAN .WORD *+23370 CLC3380 LDA (IP),Y3390 ADC IP3400 PHA3410 INY3}420 LDA (IP),Y3430 ADC IP+13440 STA IP+13450 PLA3460 STA IP3470 JMP NEXT+23480 ;<>3490 L107 .BYTE $87,"0BRANC"}3500 .WORD L893510 ZBRAN .WORD *+23520 INX3530 INX3540 LDA $FE,X3550 ORA $FF,X3560 BEQ BRAN+23570 ;3580 BUMP CL}C3590 LDA IP3600 ADC #23610 STA IP3620 BCC L1223630 INC IP+13640 L122 JMP NEXT3650 ;<>3660 L127 .BYTE $86,"(LOOP}"3670 .WORD L1073680 PLOOP .WORD L1303690 L130 STX XSAVE3700 TSX3710 INC $101,X3720 BNE PL13730 INC $102,X3740 };3750 PL1 CLC3760 LDA $103,X3770 SBC $101,X3780 LDA $104,X3790 SBC $102,X3800 ;3810 PL2 LDX XSAVE3820 ASL A3830} BCC BRAN+23840 PLA3850 PLA3860 PLA3870 PLA3880 JMP BUMP3890 ;<>3900 L154 .BYTE $87,"(+LOOP"3910 .WORD L1273}920 PPLOO .WORD *+23930 INX3940 INX3950 STX XSAVE3960 LDA $FF,X3970 PHA3980 PHA3990 LDA $FE,X4000 TSX4010 I}NX4020 INX4030 CLC4040 ADC $101,X4050 STA $101,X4060 PLA4070 ADC $102,X4080 STA $102,X4090 PLA4100 BPL PL1}4110 CLC4120 LDA $101,X4130 SBC $103,X4140 LDA $102,X4150 SBC $104,X4160 JMP PL24170 ;<>4180 L185 .BYTE $84,"(DO}"4190 .WORD L1544200 PDO .WORD *+24210 LDA 3,X4220 PHA4230 LDA 2,X4240 PHA4250 LDA 1,X4260 PHA4270 LDA 0,X}4280 PHA4290 ;4300 POPTWO INX4310 INX4320 ;4330 POP INX4340 INX4350 JMP NEXT4360 ;<>4370 L207 .BYTE $81,""4380} .WORD L1854390 I .WORD R+2 share code for R4400 ;<>4410 L214 .BYTE $85,"DIGI"4430 .WORD L2074440 DIGIT .WORD *+2445}0 SEC4460 LDA 2,X4470 SBC #$304480 BMI L2344490 CMP #$A4500 BMI L2274510 SEC4520 SBC #74530 CMP #$A4540 BM}I L2344550 L227 CMP 0,X4560 BPL L2344570 STA 2,X4580 LDA #14590 PHA4600 TYA4610 JMP PUT exit true with converted} value4620 L234 TYA4630 PHA4640 INX4650 INX4660 JMP PUT exit false with bad conversion4670 ;<>4680 L243 .BYTE $86,}"(FIND"4690 .WORD L2144700 PFIND .WORD *+24710 LDA #24720 JSR SETUP4730 STX XSAVE4740 L249 LDY #04750 LDA (N),Y}4760 EOR (N+2),Y4770 AND #$3F4780 BNE L2814790 L254 INY4800 LDA (N),Y4810 EOR (N+2),Y4820 ASL A4830 BNE L28048}40 BCC L2544850 LDX XSAVE4860 DEX4870 DEX4880 DEX4890 DEX4900 CLC4910 TYA4920 ADC #54930 ADC N4940 STA 2},X4950 LDY #04960 TYA4970 ADC N+14980 STA 3,X4990 STY 1,X5000 LDA (N),Y5010 STA 0,X5020 LDA #15030 PHA5040} JMP PUSH5050 L280 BCS L2845060 L281 INY5070 LDA (N),Y5080 BPL L2815090 L284 INY5100 LDA (N),Y5110 TAX5120 INY}5130 LDA (N),Y5140 STA N+15150 STX N5160 ORA N5170 BNE L2495180 LDX XSAVE5190 LDA #05200 PHA5210 JMP PUSH52}20 ;<>5230 L301 .BYTE $87,"ENCLOS"5240 .WORD L2435250 ENCL .WORD *+25260 LDA #25270 JSR SETUP5280 TXA5290 SEC53}00 SBC #85310 TAX5320 STY N+5 clear high byte of offset5330 JMP L314 skip over inc first time5350 L313 INY5352 BNE }L314 no carry5354 INC N+5 carry to high byte of offset5356 INC N+3 carry to high byte of addr5360 L314 LDA (N+2),Y5370 } CMP N5380 BEQ L3135390 STY 4,X5392 LDA N+5 store high byte of offset5394 STA 5,X5400 L318 LDA (N+2),Y5420 BNE L32}75430 STY 2,X5440 STY 0,X5442 LDA N+5 store high byte of offset5444 STA 1,X5446 STA 3,X5450 TYA5460 CMP 4,X547}0 BNE L3265472 LDA N+5 make sure high bytes not different5474 CMP 5,X5476 BNE L3265480 INC 2,X5482 BNE L326 check }for carry5484 INC 3,X5490 L326 JMP NEXT5500 L327 STY 2,X5502 PHA save A5504 LDA N+5 save high byte of offset5506 ST}A 3,X5508 PLA5510 INY5512 BNE L328 check for carry5514 INC N+55516 INC N+35520 L328 CMP N5530 BNE L3185540 STY} 0,X5542 LDA N+5 store high byte of offset5544 STA 1,X5550 JMP NEXT5560 ;<>5570 L337 .BYTE $86,"(EMIT"5580 .WORD L}3015590 PEMIT .WORD XEMIT vector to code for EMIT5591 ;<>5592 ;<>5593 L338 .BYTE $84,"EMI"5594 .WORD L3375595 EMIT .W}ORD DOCOL5596 .WORD CKPRFL,PEMIT,SEMIS5597 ;<>5598 L339 .BYTE $86,"CKPRF"5599 .WORD L3385600 CKPRFL .WORD DOCOL5601 } .WORD PRFLAG,AT,ZBRAN5602 .WORD L340-*5603 .WORD CLIT5604 .BYTE $705605 .WORD OVER,PUTB5606 L340 .WORD SEMIS5607 ;}<>5608 L341 .BYTE $86,"PRFLA"5609 .WORD L3395610 PRFLAG .WORD DOVAR5611 .WORD 0 printer off5634 L344 .BYTE $83,"KE"}5636 .WORD L3415638 KEY .WORD XKEY vector to code for KEY5640 ;<>5650 L351 .BYTE $89,"?TERMINA"5660 .WORD L3445670 QT}ERM .WORD XQTER vector to code for ?TERMINAL5680 ;<>5690 L358 .BYTE $84,"(CR"5700 .WORD L3515710 PCR .WORD XCR vector t}o code for CR5720 ;<>5721 L359 .BYTE $82,"C"5722 .WORD L3585723 CR .WORD DOCOL5724 .WORD CLIT5725 .BYTE $9B EOL572}6 .WORD CKPRFL,DROP,PCR,SEMIS5730 L365 .BYTE $85,"CMOV"5740 .WORD L3595750 CMOVE .WORD *+25760 LDA #35770 JSR SETUP}5780 L370 CPY N5790 BNE L3755800 DEC N+15810 BPL L3755820 JMP NEXT5830 L375 LDA (N+4),Y5840 STA (N+2),Y5850 INY}5860 BNE L3705870 INC N+55880 INC N+35890 JMP L3705900 ;<>5910 L386 .BYTE $82,"U"5920 .WORD L3655930 USTAR .WOR}D *+25940 LDA 2,X5950 STA N5960 STY 2,X5970 LDA 3,X5980 STA N+15990 STY 3,X6000 LDY #16 for 16 bits6010 L396 A}SL 2,X6020 ROL 3,X6030 ROL 0,X6040 ROL 1,X6050 BCC L4116060 CLC6070 LDA N6080 ADC 2,X6090 STA 2,X6100 LDA N}+16110 ADC 3,X6120 STA 3,X6130 LDA #06140 ADC 0,X6150 STA 0,X6160 L411 DEY6170 BNE L3966180 JMP NEXT6190 ;<>}6210 L418 .BYTE $82,"U"6220 .WORD L3866230 USLAS .WORD *+26240 LDA 4,X6250 LDY 2,X6260 STY 4,X6270 ASL A6280 ST}A 2,X6290 LDA 5,X6300 LDY 3,X6310 STY 5,X6320 ROL A6330 STA 3,X6340 LDA #16 for 16 bits6350 STA N6360 L433 ROL} 4,X6370 ROL 5,X6380 SEC6390 LDA 4,X6400 SBC 0,X6410 TAY6420 LDA 5,X6430 SBC 1,X6440 BCC L4446450 STY 4,X6}460 STA 5,X6470 L444 ROL 2,X6480 ROL 3,X6490 DEC N6500 BNE L4336510 JMP POP6520 ;<>6530 L453 .BYTE $83,"AN"6540} .WORD L4186550 ANDD .WORD *+26560 LDA 0,X6570 AND 2,X6580 PHA6590 LDA 1,X6600 AND 3,X6610 ;6620 BINARY INX663}0 INX6640 JMP PUT6650 ;<>6660 L469 .BYTE $82,"O"6670 .WORD L4536680 OR .WORD *+26690 LDA 0,X6700 ORA 2,X6710 P}HA6720 LDA 1,X6730 ORA 3,X6740 INX6750 INX6760 JMP PUT6770 ;<>6780 L484 .BYTE $83,"XO"6790 .WORD L4696800 XOR} .WORD *+26810 LDA 0,X6820 EOR 2,X6830 PHA6840 LDA 1,X6850 EOR 3,X6860 INX6870 INX6880 JMP PUT6890 ;<>6900 }L499 .BYTE $83,"SP"6910 .WORD L4846920 SPAT .WORD *+26930 TXA6940 ;6950 PUSH0A PHA6960 LDA #06970 JMP PUSH6980 ;}<>6990 L511 .BYTE $83,"SP"7000 .WORD L4997010 SPSTO .WORD *+27020 LDY #67040 LDA (UP),Y load data stack pointer (X-r}eg) from7050 TAX silent user variable S07060 JMP NEXT7070 ;<>7080 L522 .BYTE $83,"RP"7090 .WORD L5117100 RPSTO .WOR}D *+27110 STX XSAVE load return stack pointer7120 LDY #8 (machine stack pointer) from7130 LDA (UP),Y silent user variab}le R07140 TAX7150 TXS7160 LDX XSAVE7170 JMP NEXT7180 ;<>7190 L536 .BYTE $82,";"7200 .WORD L5227210 SEMIS .WORD }*+27220 PLA7230 STA IP7240 PLA7250 STA IP+17260 JMP NEXT7270 ;<>7280 L548 .BYTE $85,"LEAV"7290 .WORD L5367300} LEAVE .WORD *+27310 STX XSAVE7320 TSX7330 LDA $101,X7340 STA $103,X7350 LDA $102,X7360 STA $104,X7370 LDX XSAV}E7380 JMP NEXT7390 ;<>7400 L563 .BYTE $82,">"7410 .WORD L5487420 TOR .WORD *+27430 LDA 1,X move high byte7440 PHA}7450 LDA 0,X then low byte7460 PHA to return stack7470 INX7480 INX popping off data stack7490 JMP NEXT7500 ;<>751}0 L577 .BYTE $82,"R"7520 .WORD L5637530 RFROM .WORD *+27540 DEX make room on data stack7550 DEX7560 PLA high byte7}570 STA 0,X7580 PLA then low byte7590 STA 1,X restored to data stack7600 JMP NEXT7610 ;<>7620 L591 .BYTE $81,""763}0 .WORD L5777640 R .WORD *+27650 STX XSAVE7660 TSX address return stack7670 LDA $101,X copy bottom value7680 PHA to} data stack7690 LDA $102,X7700 LDX XSAVE7710 JMP PUSH7720 ;<>7730 L605 .BYTE $82,"0"7740 .WORD L5917750 ZEQU .WOR}D *+27760 LDA 0,X7770 ORA 1,X7780 STY 1,X7790 BNE L6137810 INY7820 L613 STY 0,X7830 JMP NEXT7840 ;<>7850 L619 }.BYTE $82,"0"7860 .WORD L6057870 ZLESS .WORD *+27880 ASL 1,X7890 TYA7900 ROL A7910 STY 1,X7920 STA 0,X7930 JM}P NEXT7940 ;<>7950 L632 .BYTE $81,""7960 .WORD L6197970 PLUS .WORD *+27980 CLC7990 LDA 0,X8000 ADC 2,X8010 STA }2,X8020 LDA 1,X8030 ADC 3,X8040 STA 3,X8050 INX8060 INX8070 JMP NEXT8080 ;<>8090 L649 .BYTE $82,"D"8100 .WOR}D L6328110 DPLUS .WORD *+28120 CLC8130 LDA 2,X8140 ADC 6,X8150 STA 6,X8160 LDA 3,X8170 ADC 7,X8180 STA 7,X819}0 LDA 0,X8200 ADC 4,X8210 STA 4,X8220 LDA 1,X8230 ADC 5,X8240 STA 5,X8250 JMP POPTWO8260 ;<>8270 L670 .BYTE $8}5,"MINU"8280 .WORD L6498290 MINUS .WORD *+28300 SEC8310 TYA8320 SBC 0,X8330 STA 0,X8340 TYA8350 SBC 1,X8360 } STA 1,X8370 JMP NEXT8380 ;<>8390 L685 .BYTE $86,"DMINU"8400 .WORD L6708410 DMINU .WORD *+28420 SEC8430 TYA8440 } SBC 2,X8450 STA 2,X8460 TYA8470 SBC 3,X8480 STA 3,X8490 JMP MINUS+38500 ;<>8510 L700 .BYTE $84,"OVE"8520 .WOR}D L6858530 OVER .WORD *+28540 LDA 2,X8550 PHA8560 LDA 3,X8570 JMP PUSH8580 ;<>8590 L711 .BYTE $84,"DRO"8600 .WO}RD L7008610 DROP .WORD POP8620 ;<>8630 L718 .BYTE $84,"SWA"8640 .WORD L7118650 SWAP .WORD *+28660 LDA 2,X8670 PHA}8680 LDA 0,X8690 STA 2,X8700 LDA 3,X8710 LDY 1,X8720 STY 3,X8730 JMP PUT8740 ;<>8750 L733 .BYTE $83,"DU"8760 }.WORD L7188770 DUP .WORD *+28780 LDA 0,X8790 PHA8800 LDA 1,X8810 JMP PUSH8820 ;<>8830 L744 .BYTE $82,"+"8840 .W}ORD L7338850 PSTOR .WORD *+28860 CLC8870 LDA (0,X) fetch 16-bit value addressed8880 ADC 2,X by bottom of stack, adding} to8890 STA (0,X) second item on stack, and8900 INC 0,X return to memory8910 BNE L7548920 INC 1,X8930 L754 LDA (0,X)}8940 ADC 3,X8950 STA (0,X)8960 JMP POPTWO8970 ;<>8980 L762 .BYTE $86,"TOGGL"8990 .WORD L7449000 TOGGL .WORD *+29}010 LDA (2,X) complement bits in memory address9020 EOR 0,X second on stack, by pattern9030 STA (2,X) on bottom of stack}9040 JMP POPTWO9050 ;<>9060 L773 .BYTE $81,""9070 .WORD L7629080 AT .WORD *+29090 LDA (0,X)9100 PHA9110 INC 0,X}9120 BNE L7819130 INC 1,X9140 L781 LDA (0,X)9150 JMP PUT9160 ;<>9170 L787 .BYTE $82,"C"9180 .WORD L7739190 CAT .}WORD *+29200 LDA (0,X) fetch byte addressed by bottom9210 STA 0,X of stack to stack, zeroing9220 STY 1,X the high byte}9230 JMP NEXT9240 ;<>9250 L798 .BYTE $81,""9260 .WORD L7879270 STORE .WORD *+29280 LDA 2,X9290 STA (0,X) store sec}ond 16-bit value on stack9300 INC 0,X to memory as addresses by9310 BNE L8069320 INC 1,X bottom of stack9330 L806 LDA }3,X9340 STA (0,X)9350 JMP POPTWO9360 ;<>9370 L813 .BYTE $82,"C"9380 .WORD L7989390 CSTOR .WORD *+29400 LDA 2,X94}10 STA (0,X)9420 JMP POPTWO9430 ;<>9440 L823 .BYTE $C1,""9450 .WORD L8139460 COLON .WORD DOCOL9470 .WORD QEXEC,SCS}P,CURR,AT,CON9480 .WORD STORE,CREAT,RBRAC,PSCOD9490 ;9500 DOCOL LDA IP+19510 PHA9520 LDA IP9530 PHA9540 ;JSR TCOLO}N Mark the start of traced : def9550 CLC9560 LDA W9570 ADC #29580 STA IP9590 TYA9600 ADC W+19610 STA IP+19620 } JMP NEXT9630 ;<>9640 L853 .BYTE $C1,""9650 .WORD L8239660 .WORD DOCOL9670 .WORD QCSP,COMP,SEMIS,SMUDG9680 .WORD L}BRAC,SEMIS9690 ;<>9700 L867 .BYTE $88,"CONSTAN"9710 .WORD L8539720 CONST .WORD DOCOL9730 .WORD CREAT,SMUDG,COMMA,PSCO}D9740 ;9750 DOCON LDY #29760 LDA (W),Y9770 PHA9780 INY9790 LDA (W),Y9800 JMP PUSH9810 ;<>9820 L885 .BYTE $88,"V}ARIABL"9830 .WORD L8679840 VAR .WORD DOCOL9850 .WORD CONST,PSCOD9860 ;9870 DOVAR CLC9880 LDA W9890 ADC #29900 P}HA9910 TYA9920 ADC W+19930 JMP PUSH9940 ;<>9950 L902 .BYTE $84,"USE"9970 .WORD L8859980 USER .WORD DOCOL9990 .W}ORD CONST,PSCOD010000 ;010010 DOUSE LDY #2010020 CLC010030 LDA (W),Y010040 ADC UP010050 PHA010060 LDA #0010070  }ADC UP+1010080 JMP PUSH010090 ;<>010100 L920 .BYTE $81,""010110 .WORD L902010120 ZERO .WORD DOCON010130 .WORD 0010 }140 ;<>010150 L928 .BYTE $81,""010160 .WORD L920010170 ONE .WORD DOCON010180 .WORD 1010190 ;<>010200 L936 .BYTE $81, }""010210 .WORD L928010220 TWO .WORD DOCON010230 .WORD 2010240 ;<>010250 L944 .BYTE $81,""010260 .WORD L936010270  }THREE .WORD DOCON010280 .WORD 3010290 ;<>010300 L952 .BYTE $82,"B"010310 .WORD L944010320 BL .WORD DOCON010330 .WOR }D $20010340 ;<>010350 L960 .BYTE $83,"C/"010360 .WORD L952010370 CSLL .WORD DOCON010380 .WORD 32010390 ;<>010400 L9}68 .BYTE $85,"FIRS"010410 .WORD L960010420 FIRST .WORD DOCON010430 .WORD DAREA bottom of disk buffer area010440 ;<>01}0450 L976 .BYTE $85,"LIMI"010460 .WORD L968010470 LIMIT .WORD DOCON010480 .WORD DAREA+BMAG buffers end at user area010}490 ;<>010500 L984 .BYTE $85,"B/BU"010510 .WORD L976010520 BBUF .WORD DOCON010530 .WORD SSIZE sector size010540 ;<>0}10550 L992 .BYTE $85,"B/SC"010560 .WORD L984010570 BSCR .WORD DOCON010580 .WORD 1 blocks to make one screen010590 ;<>}010600 L1000 .BYTE $87,"+ORIGI"010610 .WORD L992010620 PORIG .WORD DOCOL010630 .WORD LIT,ORIG,PLUS,SEMIS010640 ;<>010}650 L1010 .BYTE $83,"TI"010660 .WORD L1000010670 TIB .WORD DOUSE010680 .BYTE $A010690 ;<>010700 L1018 .BYTE $85,"WIDT}"010710 .WORD L1010010720 WIDTH .WORD DOUSE010730 .BYTE $C010740 ;<>010750 L1026 .BYTE $87,"WARNIN"010760 .WORD L1}018010770 WARN .WORD DOUSE010780 .BYTE $E010790 ;<>010800 L1034 .BYTE $85,"FENC"010810 .WORD L1026010820 FENCE .WORD} DOUSE010830 .BYTE $10010840 ;<>010850 L1042 .BYTE $82,"D"010860 .WORD L1034010870 DP .WORD DOUSE010880 .BYTE $120}10890 ;<>010900 L1050 .BYTE $88,"VOC-LIN"010910 .WORD L1042010920 VOCL .WORD DOUSE010930 .BYTE $14010940 ;<>010950 L}1058 .BYTE $83,"BL"010960 .WORD L1050010970 BLK .WORD DOUSE010980 .BYTE $16010990 ;<>011000 L1066 .BYTE $82,"I"0110}10 .WORD L1058011020 IN .WORD DOUSE011030 .BYTE $18011040 ;<>011050 L1074 .BYTE $83,"OU"011060 .WORD L1066011070 OU}T .WORD DOUSE011080 .BYTE $1A011090 ;<>011100 L1082 .BYTE $83,"SC"011110 .WORD L1074011120 SCR .WORD DOUSE011130 .B}YTE $1C011140 ;<>011150 L1090 .BYTE $86,"OFFSE"011160 .WORD L1082011170 OFSET .WORD DOUSE011180 .BYTE $1E011190 ;<>}011200 L1098 .BYTE $87,"CONTEX"011210 .WORD L1090011220 CON .WORD DOUSE011230 .BYTE $20011240 ;<>011250 L1106 .BYTE $}87,"CURREN"011260 .WORD L1098011270 CURR .WORD DOUSE011280 .BYTE $22011290 ;<>011300 L1114 .BYTE $85,"STAT"011310 }.WORD L1106011320 STATE .WORD DOUSE011330 .BYTE $24011340 ;<>011350 L1122 .BYTE $84,"BAS"011360 .WORD L1114011370 BA}SE .WORD DOUSE011380 .BYTE $26011390 ;<>011400 L1130 .BYTE $83,"DP"011410 .WORD L1122011420 DPL .WORD DOUSE011430 . }BYTE $28011440 ;<>011450 L1138 .BYTE $83,"FL"011460 .WORD L1130011470 FLD .WORD DOUSE011480 .BYTE $2A011490 ;<>0115!}00 L1146 .BYTE $83,"CS"011510 .WORD L1138011520 CSP .WORD DOUSE011530 .BYTE $2C011540 ;<>011550 L1154 .BYTE $82,"R""}011560 .WORD L1146011570 RNUM .WORD DOUSE011580 .BYTE $2E011590 ;<>011600 L1162 .BYTE $83,"HL"011610 .WORD L1154011#}620 HLD .WORD DOUSE011630 .BYTE $30011640 ;<>011650 L1170 .BYTE $82,"1"011660 .WORD L1162011670 ONEP .WORD DOCOL0116$}80 .WORD ONE,PLUS,SEMIS011690 ;<>011700 L1180 .BYTE $82,"2"011710 .WORD L1170011720 TWOP .WORD DOCOL011730 .WORD TWO%},PLUS,SEMIS011740 ;<>011750 L1190 .BYTE $84,"HER"011760 .WORD L1180011770 HERE .WORD DOCOL011780 .WORD DP,AT,SEMIS01&}1790 ;<>011800 L1200 .BYTE $85,"ALLO"011810 .WORD L1190011820 ALLOT .WORD DOCOL011830 .WORD DP,PSTOR,SEMIS011840 ;<>'}011850 L1210 .BYTE $81,""011860 .WORD L1200011870 COMMA .WORD DOCOL011880 .WORD HERE,STORE,TWO,ALLOT,SEMIS011890 ;<>0(}11900 L1222 .BYTE $82,"C"011910 .WORD L1210011920 CCOMM .WORD DOCOL011930 .WORD HERE,CSTOR,ONE,ALLOT,SEMIS011940 ;<>0)}11950 L1234 .BYTE $81,""011960 .WORD L1222011970 SUB .WORD DOCOL011980 .WORD MINUS,PLUS,SEMIS011990 ;<>012000 L1244 .*}BYTE $81,""012010 .WORD L1234012020 EQUAL .WORD DOCOL012030 .WORD SUB,ZEQU,SEMIS012040 ;<>012050 L1246 .BYTE $82,"U"+} unsigned less than012060 .WORD L1244012070 ULESS .WORD DOCOL012080 .WORD OVER,OVER,XOR,ZLESS,ZBRAN012090 .WORD L1247-,}*,DROP,ZLESS,ZEQU012100 .WORD BRAN012101 .WORD L1248-*012102 L1247 .WORD SUB,ZLESS012104 L1248 .WORD SEMIS012110 ;<>0-}12120 L1254 .BYTE $81,""012140 .WORD L1246012150 LESS .WORD *+2012160 SEC012170 LDA 2,X012180 SBC 0,X subtract0121.}90 LDA 3,X012200 SBC 1,X012210 STY 3,X zero hi byte012220 BVC L1258012230 EOR #$80 correct overflow012240 L1258 BPL/} L1260012250 INY invert boolean012260 L1260 STY 2,X leave boolean012270 JMP POP012280 ;<>012290 L1264 .BYTE $81,""010}2300 .WORD L1254012310 GREAT .WORD DOCOL012320 .WORD SWAP,LESS,SEMIS012330 ;<>012340 L1274 .BYTE $83,"RO"012350 .WOR1}D L1264012360 ROT .WORD DOCOL012370 .WORD TOR,SWAP,RFROM,SWAP,SEMIS012380 ;<>012390 L1286 .BYTE $85,"SPAC"012400 .WOR2}D L1274012410 SPACE .WORD DOCOL012420 .WORD BL,EMIT,SEMIS012430 ;<>012440 L1296 .BYTE $84,"-DU"012450 .WORD L12860123}460 DDUP .WORD DOCOL012470 .WORD DUP,ZBRAN012480 L1301 .WORD L1303-L1301012490 .WORD DUP012500 L1303 .WORD SEMIS0125104} ;<>012520 L1308 .BYTE $88,"TRAVERS"012530 .WORD L1296012540 TRAV .WORD DOCOL012550 .WORD SWAP012560 L1312 .WORD OVER5},PLUS,CLIT012570 .BYTE $7F012580 .WORD OVER,CAT,LESS,ZBRAN012590 L1320 .WORD L1312-L1320012600 .WORD SWAP,DROP,SEMIS06}12610 ;<>012620 L1328 .BYTE $86,"LATES"012630 .WORD L1308012640 LATES .WORD DOCOL012650 .WORD CURR,AT,AT,SEMIS012660 7};<>012670 L1339 .BYTE $83,"LF"012680 .WORD L1328012690 LFA .WORD DOCOL012700 .WORD CLIT012710 .BYTE 4012720 .WORD 8}SUB,SEMIS012730 ;<>012740 L1350 .BYTE $83,"CF"012750 .WORD L1339012760 CFA .WORD DOCOL012770 .WORD TWO,SUB,SEMIS01279}80 ;<>012790 L1360 .BYTE $83,"NF"012800 .WORD L1350012810 NFA .WORD DOCOL012820 .WORD CLIT012830 .BYTE $5012840 .W:}ORD SUB,LIT,$FFFF,TRAV,SEMIS012850 ;<>012860 L1373 .BYTE $83,"PF"012870 .WORD L1360012880 PFA .WORD DOCOL012890 .WORD;} ONE,TRAV,CLIT012900 .BYTE 5012910 .WORD PLUS,SEMIS012920 ;<>012930 L1386 .BYTE $84,"!CS"012940 .WORD L1373012950 S<}CSP .WORD DOCOL012960 .WORD SPAT,CSP,STORE,SEMIS012970 ;<>012980 L1397 .BYTE $86,"?ERRO"012990 .WORD L1386013000 QERR=} .WORD DOCOL013010 .WORD SWAP,ZBRAN013020 L1402 .WORD L1406-L1402013030 .WORD ERROR,BRAN013040 L1405 .WORD L1407-L1405>}013050 L1406 .WORD DROP013060 L1407 .WORD SEMIS013070 ;<>013080 L1412 .BYTE $85,"?COM"013090 .WORD L1397013100 QCOMP .?}WORD DOCOL013110 .WORD STATE,AT,ZEQU,CLIT013120 .BYTE $11013130 .WORD QERR,SEMIS013140 ;<>013150 L1426 .BYTE $85,"?EX@}E"013160 .WORD L1412013170 QEXEC .WORD DOCOL013180 .WORD STATE,AT,CLIT013190 .BYTE $12013200 .WORD QERR,SEMIS01321A}0 ;<>013220 L1439 .BYTE $86,"?PAIR"013230 .WORD L1426013240 QPAIR .WORD DOCOL013250 .WORD SUB,CLIT013260 .BYTE $130B}13270 .WORD QERR,SEMIS013280 ;<>013290 L1451 .BYTE $84,"?CS"013300 .WORD L1439013310 QCSP .WORD DOCOL013320 .WORD SPC}AT,CSP,AT,SUB,CLIT013330 .BYTE $14013340 .WORD QERR,SEMIS013350 ;<>013360 L1466 .BYTE $88,"?LOADIN"013370 .WORD L145D}1013380 QLOAD .WORD DOCOL013390 .WORD BLK,AT,ZEQU,CLIT013400 .BYTE $16013410 .WORD QERR,SEMIS013420 ;<>013430 L1480 E}.BYTE $87,"COMPIL"013440 .WORD L1466013450 COMP .WORD DOCOL013460 .WORD QCOMP,RFROM,DUP,TWOP,TOR013470 .WORD AT,COMMAF},SEMIS013480 ;<>013490 L1495 .BYTE $C1,""013500 .WORD L1480013510 LBRAC .WORD DOCOL013520 .WORD ZERO,STATE,STORE,SEMIG}S013530 ;<>013540 L1507 .BYTE $81,""013550 .WORD L1495013560 RBRAC .WORD DOCOL013570 .WORD CLIT013580 .BYTE $C0013H}590 .WORD STATE,STORE,SEMIS013600 ;<>013610 L1519 .BYTE $86,"SMUDG"013620 .WORD L1507013630 SMUDG .WORD DOCOL013640 I}.WORD LATES,CLIT013650 .BYTE $20013660 .WORD TOGGL,SEMIS013670 ;<>013680 L1531 .BYTE $83,"HE"013690 .WORD L15190137J}00 HEX .WORD DOCOL013710 .WORD CLIT013720 .BYTE 16013730 .WORD BASE,STORE,SEMIS013740 ;<>013750 L1543 .BYTE $87,"DECIK}MA"013760 .WORD L1531013770 DECIM .WORD DOCOL013780 .WORD CLIT013790 .BYTE 10013800 .WORD BASE,STORE,SEMIS013810 ;L}<>013820 L1555 .BYTE $87,"(;CODE"013830 .WORD L1543013840 PSCOD .WORD DOCOL013850 .WORD RFROM,LATES,PFA,CFA,STORE0138M}60 .WORD SEMIS013870 ;<>013880 L1568 .BYTE $C5,";COD"013890 .WORD L1555013900 .WORD DOCOL013910 .WORD QCSP,COMP,PSCN}OD,LBRAC013920 .WORD SMUDG,SEMIS013930 ;<>013940 L1582 .BYTE $87,"013990 L1592 .BYTE $85,"DOES"014000 .WORD L1582014010 DOES .WORD DOCOL014020 .P}WORD RFROM,LATES,PFA,STORE,PSCOD014030 ;014040 DODOE LDA IP+1014050 PHA014060 LDA IP014070 PHA014080 LDY #2014090 Q} LDA (W),Y014100 STA IP014110 INY014120 LDA (W),Y014130 STA IP+1014140 CLC014150 LDA W014160 ADC #4014170 PHAR}014180 LDA W+1014190 ADC #0014200 JMP PUSH014210 ;<>014220 L1622 .BYTE $85,"COUN"014230 .WORD L1592014240 COUNT .S}WORD DOCOL014250 .WORD DUP,ONEP,SWAP,CAT,SEMIS014260 ;<>014270 L1634 .BYTE $84,"TYP"014280 .WORD L1622014290 TYPE .WOT}RD DOCOL014300 .WORD DDUP,ZBRAN014310 L1639 .WORD L1651-L1639014320 .WORD OVER,PLUS,SWAP,PDO014330 L1644 .WORD I014340U} .WORD CAT,EMIT,PLOOP014350 L1648 .WORD L1644-L1648014360 .WORD BRAN014370 L1650 .WORD L1652-L1650014380 L1651 .WORD DRV}OP014390 L1652 .WORD SEMIS014400 ;<>014410 L1657 .BYTE $89,"-TRAILIN"014420 .WORD L1634014430 DTRAI .WORD DOCOL014440W} .WORD DUP,ZERO,PDO014450 L1663 .WORD OVER014460 .WORD OVER,PLUS,ONE,SUB,CAT,BL014470 .WORD SUB,ZBRAN014480 L1672 .WORX}D L1676-L1672014490 .WORD LEAVE,BRAN014500 L1675 .WORD L1678-L1675014510 L1676 .WORD ONE014520 .WORD SUB014530 L1678 .Y}WORD PLOOP014540 L1679 .WORD L1663-L1679014550 .WORD SEMIS8-L1675014510 L1676 .WORD ONE014520 .WORD SUB014530 L1678 .>020000 ;<>020010 L1685 .BYTE $84,"(.",$22,"" (.")020020 .WORD L1657020030 PDOTQ .WORD DOCOL020040 .WORD R,COUNT,DUP,O[}NEP,RFROM020050 .WORD PLUS,TOR,TYPE,SEMIS020060 ;<>020070 L1701 .BYTE $C2,"."020080 .WORD L1685020090 .WORD DOCOL02\}0100 .WORD CLIT020110 .BYTE $22020120 .WORD STATE,AT,ZBRAN020130 L1709 .WORD L1719-L1709020140 .WORD COMP,PDOTQ,WORD,]}HERE,CAT020150 .WORD ONEP,ALLOT,BRAN020160 L1718 .WORD L1723-L1718020170 L1719 .WORD WORD,HERE,COUNT,TYPE020180 L1723 .W^}ORD SEMIS020190 ;<>020200 L1729 .BYTE $86,"EXPEC"020210 .WORD L1701020220 EXPEC .WORD DOCOL020230 .WORD OVER,PLUS,OVE_}R,PDO020240 L1736 .WORD PKEY020250 .WORD DUP,CLIT020260 .BYTE $E020270 .WORD PORIG,AT,EQUAL,ZBRAN020280 L1744 .WORD L`}1760-L1744020290 .WORD DROP,CLIT020300 .BYTE $7E020310 .WORD OVER,I,EQUAL,RFROM020320 .WORD TWO,SUB,PLUS,TOR,BRAN020a}330 L1759 .WORD L1779-L1759020340 L1760 .WORD DUP020350 .WORD CLIT020360 .BYTE $9B020370 .WORD EQUAL,ZBRAN020380 L176b}5 .WORD L1772-L1765020390 .WORD LEAVE,DROP,BL,ZERO,BRAN020400 L1771 .WORD L1773-L1771020410 L1772 .WORD DUP020420 L1773 c}.WORD I020430 .WORD CSTOR,ZERO,I,ONEP,STORE020440 L1779 .WORD EMIT020450 .WORD PLOOP020460 L1781 .WORD L1736-L17810204d}70 .WORD DROP,SEMIS020480 ;<>020490 L1788 .BYTE $85,"QUER"020500 .WORD L1729020510 QUERY .WORD DOCOL020520 .WORD TIBe},AT,CLIT020530 .BYTE 80 80 characters from terminal020540 .WORD EXPEC,ZERO,IN,STORE,SEMIS020550 ;<>020560 L1804 .BYTE $f}C1,$80 ASCII null020570 .WORD L1788020580 .WORD DOCOL020590 .WORD BLK,AT,ZBRAN020600 L1810 .WORD L1830-L1810020610 .g}WORD ONE,BLK,PSTOR,ZERO,IN020620 .WORD STORE,BLK,AT,ZERO,BSCR020630 .WORD USLAS,DROP,ZEQU,ZBRAN020640 L1824 .WORD L1828-q}+B'DOS SYSB*+DUP SYSBUCOMBINE B hSYMBOL BuAUTORUN SYSBwMX80 IN1B}FORTH1 BZFORTH2 B{+FORTH3 L1824020650 .WORD QEXEC,RFROM,DROP020660 L1828 .WORD BRAN020670 L1829 .WORD L1832-L1829020680 L1830 .WORD RFROM020690 r}.WORD DROP020700 L1832 .WORD SEMIS020710 ;<>020720 L1838 .BYTE $84,"FIL"020730 .WORD L1804020740 FILL .WORD DOCOL0207s}50 .WORD SWAP,TOR,OVER,CSTOR,DUP020760 .WORD ONEP,RFROM,ONE,SUB,CMOVE020770 .WORD SEMIS020780 ;<>020790 L1856 .BYTE $8t}5,"ERAS"020800 .WORD L1838020810 ERASE .WORD DOCOL020820 .WORD ZERO,FILL,SEMIS020830 ;<>020840 L1866 .BYTE $86,"BLANKu}"020850 .WORD L1856020860 BLANK .WORD DOCOL020870 .WORD BL,FILL,SEMIS020880 ;<>020890 L1876 .BYTE $84,"HOL"020900 v}.WORD L1866020910 HOLD .WORD DOCOL020920 .WORD LIT,$FFFF020930 .WORD HLD,PSTOR,HLD,AT,CSTOR020940 .WORD SEMIS020950 ;w}<>020960 L1890 .BYTE $83,"PA"020970 .WORD L1876020980 PAD .WORD DOCOL020990 .WORD HERE,CLIT021000 .BYTE 68 PAD is 68x} bytes above here021010 .WORD PLUS,SEMIS021020 ;<>021030 L1902 .BYTE $84,"WOR"021040 .WORD L1890021050 WORD .WORD DOCy}OL021060 .WORD BLK,AT,ZBRAN021070 L1908 .WORD L1914-L1908021080 .WORD BLK,AT,BLOCK,BRAN021090 L1913 .WORD L1916-L19130z}21100 L1914 .WORD TIB021110 .WORD AT021120 L1916 .WORD IN021130 .WORD AT,PLUS,SWAP,ENCL,HERE021140 .WORD CLIT021150 {}.BYTE $22021160 .WORD BLANK,IN,PSTOR,OVER,SUB021170 .WORD TOR,R,HERE,CSTOR,PLUS021180 .WORD HERE,ONEP,RFROM,CMOVE02119|}0 .WORD SEMIS021200 ;<>021210 L1943 .BYTE $85,"UPPE"021220 .WORD L1902021230 UPPER .WORD DOCOL021240 .WORD OVER This}} routine converts test to upper021250 .WORD PLUS case. It allows interpretation021260 .WORD SWAP from a terminal without~} a shift021270 .WORD PDO lock021280 L1950 .WORD I021290 .WORD CAT,CLIT021300 .BYTE $80021310 .WORD ANDD,ZBRAN021320} L1956 .WORD L1961-L1956021330 .WORD I,CLIT021340 .BYTE $80021350 .WORD TOGGL021360 L1961 .WORD PLOOP021370 L1962 .WO}RD L1950-L1962021380 .WORD SEMIS021390 ;<>021400 L1968 .BYTE $88,"(NUMBER"021410 .WORD L1943021420 PNUMB .WORD DOCOL}021430 L1971 .WORD ONEP021440 .WORD DUP,TOR,CAT,BASE,AT021450 .WORD DIGIT,ZBRAN021460 L1979 .WORD L2001-L1979021470 .W}ORD SWAP,BASE,AT,USTAR,DROP021480 .WORD ROT,BASE,AT,USTAR,DPLUS021490 .WORD DPL,AT,ONEP,ZBRAN021500 L1994 .WORD L1998-L1}994021510 .WORD ONE,DPL,PSTOR021520 L1998 .WORD RFROM021530 .WORD BRAN021540 L2000 .WORD L1971-L2000021550 L2001 .WORD} RFROM021560 .WORD SEMIS021570 ;<>021580 L2007 .BYTE $86,"NUMBE"021590 .WORD L1968021600 NUMBER .WORD DOCOL021610 .}WORD ZERO,ZERO,ROT,DUP,ONEP021620 .WORD CAT,CLIT021630 .BYTE $2D021640 .WORD EQUAL,DUP,TOR,PLUS021650 .WORD LIT,$FFFF}021660 L2023 .WORD DPL021670 .WORD STORE,PNUMB,DUP,CAT,BL021680 .WORD SUB,ZBRAN021690 L2031 .WORD L2042-L2031021700 .}WORD DUP,CAT,CLIT021710 .BYTE $2E021720 .WORD SUB,ZERO,QERR,ZERO,BRAN021730 L2041 .WORD L2023-L2041021740 L2042 .WORD D}ROP021750 .WORD RFROM,ZBRAN021760 L2045 .WORD L2047-L2045021770 .WORD DMINU021780 L2047 .WORD SEMIS021790 ;<>021800 L}2052 .BYTE $85,"-FIN"021810 .WORD L2007021820 DFIND .WORD DOCOL021830 .WORD BL,WORD021840 .WORD HERE Optional, allowi}ng free use of lower021850 .WORD COUNT case from terminal021860 .WORD UPPER,HERE,CON,AT,AT021870 .WORD PFIND,DUP,ZEQU,Z}BRAN021880 L2068 .WORD L2073-L2068021890 .WORD DROP,HERE,LATES,PFIND021900 L2073 .WORD SEMIS021910 ;<>021920 L2078 .BYT}E $87,"(ABORT"021930 .WORD L2052021940 PABOR .WORD DOCOL021950 .WORD ABORT,SEMIS021960 ;<>021970 L2087 .BYTE $85,"ERR}O"021980 .WORD L2078021990 ERROR .WORD DOCOL022000 .WORD WARN,AT,ZLESS,ZBRAN022010 L2094 .WORD L2096-L2094022020 .WO}RD PABOR022030 L2096 .WORD HERE022040 .WORD COUNT,TYPE,PDOTQ022050 .BYTE 4," ? "022060 .WORD MESS,SPSTO022070 .WORD} DROP,DROP make room for 2 error values022080 .WORD IN,AT,BLK,AT,QUIT,SEMIS022090 ;<>022100 L2113 .BYTE $83,"ID"022110 } .WORD L2087022120 IDDOT .WORD DOCOL022130 .WORD PAD,CLIT022140 .BYTE $20022150 .WORD CLIT022170 .BYTE $5F022180 .}WORD FILL,DUP,PFA,LFA,OVER022190 .WORD SUB,PAD,SWAP,CMOVE,PAD022200 .WORD COUNT,CLIT022210 .BYTE $1F022220 .WORD ANDD},OVER,OVER,PLUS,ONE022222 .WORD SUB,DUP,CAT,CLIT022224 .BYTE $7F022226 .WORD ANDD,SWAP,CSTOR022228 .WORD TYPE,SPACE,S}EMIS022230 ;<>022240 L2142 .BYTE $86,"CREAT"022250 .WORD L2113022260 CREAT .WORD DOCOL022270 .WORD MEMTOP,AT 6502 onl}y, assures room exists022280 .WORD HERE in dictionary022290 .WORD CLIT022300 .BYTE $A0022310 .WORD PLUS,ULESS,TWO,QER}R022320 .WORD DFIND,ZBRAN022330 L2155 .WORD L2163-L2155022340 .WORD DROP,NFA,IDDOT,CLIT022350 .BYTE 4022360 .WORD ME}SS,SPACE022370 L2163 .WORD HERE022380 .WORD DUP,CAT,WIDTH,AT,MIN022390 .WORD ONEP,ALLOT022440 .WORD DUP,CLIT022450 .}BYTE $A0022460 .WORD TOGGL,HERE,ONE,SUB022470 .WORD CLIT022480 .BYTE $80022490 .WORD TOGGL022500 .WORD LATES,COMMA,}CURR,AT,STORE022510 .WORD HERE,TWOP,COMMA,SEMIS022520 ;<>022530 L2200 .BYTE $C9,"[COMPILE"022540 .WORD L2142022550 .}WORD DOCOL022560 .WORD DFIND,ZEQU,ZERO,QERR022570 .WORD DROP,CFA,COMMA,SEMIS022580 ;<>022590 L2216 .BYTE $C7,"LITERA"}022600 .WORD L2200022610 LITER .WORD DOCOL022620 .WORD STATE,AT,ZBRAN022630 L2222 .WORD L2226-L2222022640 .WORD COMP,L}IT,COMMA022650 L2226 .WORD SEMIS022660 ;<>022670 L2232 .BYTE $C8,"DLITERA"022680 .WORD L2216022690 DLIT .WORD DOCOL02}2700 .WORD STATE,AT,ZBRAN022710 L2238 .WORD L2242-L2238022720 .WORD SWAP,LITER,LITER022730 L2242 .WORD SEMIS022740 ;<>}022750 L2248 .BYTE $86,"?STAC"022760 .WORD L2232022770 QSTAC .WORD DOCOL022780 .WORD CLIT022790 .BYTE TOS022800 .WO}RD SPAT,ULESS,ONE,QERR022810 .WORD SPAT,CLIT022820 .BYTE BOS022830 .WORD ULESS,CLIT022840 .BYTE 7022850 .WORD QERR,}SEMIS022860 ;<>022870 L2269 .BYTE $89,"INTERPRE"022880 .WORD L2248022890 INTER .WORD DOCOL022900 L2272 .WORD DFIND022}910 .WORD ZBRAN022920 L2274 .WORD L2289-L2274022930 .WORD STATE,AT,LESS,ZBRAN022940 L2279 .WORD L2284-L2279022950 .WOR}D CFA,COMMA,BRAN022960 L2283 .WORD L2286-L2283022970 L2284 .WORD CFA022980 .WORD EXEC022990 L2286 .WORD QSTAC023000 .W}ORD BRAN023010 L2288 .WORD L2302-L2288023020 L2289 .WORD HERE023030 .WORD NUMBER,DPL,AT,ONEP023040 .WORD ZBRAN023050 L}2295 .WORD L2299-L2295023060 .WORD DLIT,BRAN023070 L2298 .WORD L2301-L2298023080 L2299 .WORD DROP023090 .WORD LITER023}100 L2301 .WORD QSTAC023110 L2302 .WORD BRAN023120 L2303 .WORD L2272-L2303023130 ;<>023140 L2309 .BYTE $89,"IMMEDIAT"02}3150 .WORD L2269023160 .WORD DOCOL023170 .WORD LATES,CLIT023180 .BYTE $40023190 .WORD TOGGL,SEMIS023200 ;<>023210 }L2321 .BYTE $8A,"VOCABULAR"023220 .WORD L2309023230 .WORD DOCOL023240 .WORD BUILD,LIT,$A081023250 .WORD COMMA,CURR,A}T,CFA023260 .WORD COMMA,HERE,VOCL,AT023270 .WORD COMMA,VOCL,STORE,DOES023280 DOVOC .WORD TWOP,CON,STORE,SEMIS023290 ;<>}023300 L2346 .BYTE $C5,"FORT"023310 .WORD L2321023320 FORTH .WORD DODOE023330 .WORD DOVOC023340 .WORD $A081023350 X}FOR .WORD NTOP points to top name in FORTH023360 VLO .WORD 0 last vocabulary link ends at zero023370 ;<>023380 L2357 .BYTE} $8B,"DEFINITION"023390 .WORD L2346023400 DEFIN .WORD DOCOL023410 .WORD CON,AT,CURR,STORE,SEMIS023420 ;<>023430 L2369} .BYTE $C1,""023440 .WORD L2357023450 .WORD DOCOL023460 .WORD CLIT023470 .BYTE $29023480 .WORD WORD,SEMIS023490 ;}<>023500 L2381 .BYTE $84,"QUI"023510 .WORD L2369023520 QUIT .WORD DOCOL023530 .WORD ZERO,BLK,STORE,LBRAC023540 L2388 }.WORD RPSTO023542 .WORD ZERO,LIT,BRFLG,CSTOR023550 .WORD CR,QUERY,INTER,STATE,AT023560 .WORD ZEQU,ZBRAN023570 L2396 .W}ORD L2399-L2396023580 .WORD PDOTQ023590 .BYTE 2,"OK"023600 L2399 .WORD BRAN023610 L2400 .WORD L2388-L2400023620 .WORD} SEMIS023630 ;<>023640 L2406 .BYTE $85,"ABOR"023650 .WORD L2381023660 ABORT .WORD DOCOL023670 .WORD SPSTO,DECIM,DR0,C}R023680 .WORD PDOTQ023690 .BYTE 14,"fig-FORTH 1.0D"023700 .WORD FORTH023710 .WORD DEFIN,QUIT023720 ;<>023730 L2423 }.BYTE $84,"COL"023740 .WORD L2406023750 COLD .WORD *+2023752 LDA DINI+2 first COLD start?023754 BNE COLD2 branch if n}ot023756 LDA #1 set BOOT?023758 STA $9023760 LDA #0 clear COLDFG023761 STA $244023764 LDA $C move DOSINI add to loc}al JSR023766 STA DINI+1023768 LDA $D023770 STA DINI+2023772 LDA #REENTR&$FF move REENTR to DOSINI location023774 ST}A $C023776 LDA #REENTR/$100023778 STA $D023784 COLD2 LDA ORIG+$0C from cold start area023786 STA FORTH+6023788 LDA O}RIG+$0D023790 STA FORTH+7023792 LDY #1 indicate cold start023794 STY CLDFG023800 LDY #$15023810 BNE L2433023812 WA}RM LDY #0 indicate warm start023814 STY CLDFG023816 DINI JSR $0000 execute DOSINI to reinit DOS (addr set by COLD)023820 } LDY #$0F023830 L2433 LDA ORIG+$10023840 STA UP023850 LDA ORIG+$11023860 STA UP+1023870 L2437 LDA ORIG+$0C,Y023880 }STA (UP),Y023890 DEY023900 BPL L2437023910 LDA #PCOLD+2/$100023920 STA IP+1023930 LDA #PCOLD+2&$FF023940 STA IP0}23950 CLD023960 LDA #$6C023970 STA W-1023980 JMP RPSTO+2 and off we go!023982 ;<>023984 ; internal cold start02398}6 L2440 .BYTE $86,"(COLD"023988 .WORD L2423023990 PCOLD .WORD DOCOL023992 .WORD SPSTO,CLDR0,CLDR1,CLIT023994 CLDFG .BY}TE 0 (1=cold start)023996 .WORD ZBRAN024000 .WORD L2449-*024002 .WORD EMPTY024004 .WORD FIRST,USE,STORE024005 .WORD} FIRST,PREV,STORE024006 L2449 .WORD ABORT024007 ;<>024008 L2453 .BYTE $84,"S->"024010 .WORD L2423024020 STOD .WORD DOC}OL024030 .WORD DUP,ZLESS,MINUS,SEMIS024040 ;<>024050 L2464 .BYTE $82,"+"024060 .WORD L2440024070 PM .WORD DOCOL02408}0 .WORD ZLESS,ZBRAN024090 L2469 .WORD L2471-L2469024100 .WORD MINUS024110 L2471 .WORD SEMIS024120 ;<>024130 L2476 .BYT}E $83,"D+"024140 .WORD L2464024150 DPM .WORD DOCOL024160 .WORD ZLESS,ZBRAN024170 L2481 .WORD L2483-L2481024180 .WORD} DMINU024190 L2483 .WORD SEMIS024200 ;<>024210 L2488 .BYTE $83,"AB"024220 .WORD L2476024230 ABS .WORD DOCOL024240 .W}ORD DUP,PM,SEMIS024250 ;<>024260 L2498 .BYTE $84,"DAB"024270 .WORD L2488024280 DABS .WORD DOCOL024290 .WORD DUP,DPM,S}EMIS024300 ;<>024310 L2508 .BYTE $83,"MI"024320 .WORD L2498024330 MIN .WORD DOCOL024340 .WORD OVER,OVER,GREAT,ZBRAN0}24350 L2515 .WORD L2517-L2515024360 .WORD SWAP024370 L2517 .WORD DROP024380 .WORD SEMIS024390 ;<>024400 L2523 .BYTE $8}3,"MA"024410 .WORD L2508024420 MAX .WORD DOCOL024430 .WORD OVER,OVER,LESS,ZBRAN024440 L2530 .WORD L2532-L2530024450 }.WORD SWAP024460 L2532 .WORD DROP024470 .WORD SEMIS024480 ;<>024490 L2538 .BYTE $82,"M"024500 .WORD L2523024510 MSTA}R .WORD DOCOL024520 .WORD OVER,OVER,XOR,TOR,ABS024530 .WORD SWAP,ABS,USTAR,RFROM024540 .WORD DPM,SEMIS024550 ;<>02456}0 L2556 .BYTE $82,"M"024570 .WORD L2538024580 MSLAS .WORD DOCOL024590 .WORD OVER,TOR,TOR,DABS,R,ABS024600 .WORD USLAS},RFROM,R,XOR,PM024610 .WORD SWAP,RFROM,PM,SWAP,SEMIS024620 ;<>024630 L2579 .BYTE $81,""024640 .WORD L2556024650 STAR }.WORD DOCOL024660 .WORD USTAR,DROP,SEMIS024670 ;<>024680 L2589 .BYTE $84,"/MO"024690 .WORD L2579024700 SLMOD .WORD DO}COL024710 .WORD TOR,STOD,RFROM,MSLAS024720 .WORD SEMIS024730 ;<>024740 L2601 .BYTE $81,""024750 .WORD L2589024760 S}LASH .WORD DOCOL024770 .WORD SLMOD,SWAP,DROP,SEMIS024780 ;<>024790 L2612 .BYTE $83,"MO"024800 .WORD L2601024810 MOD .}WORD DOCOL024820 .WORD SLMOD,DROP,SEMIS024830 ;<>024840 L2622 .BYTE $85,"*/MO"024850 .WORD L2612024860 SSMOD .WORD DO}COL024870 .WORD TOR,MSTAR,RFROM,MSLAS024880 .WORD SEMIS024890 ;<>024900 L2634 .BYTE $82,"*"024910 .WORD L2622024920} SSLAS .WORD DOCOL024930 .WORD SSMOD,SWAP,DROP,SEMIS024940 ;<>024950 L2645 .BYTE $85,"M/MO"024960 .WORD L2634024970 M}SMOD .WORD DOCOL024980 .WORD TOR,ZERO,R,USLAS,RFROM024990 .WORD SWAP,TOR,USLAS,RFROM025000 .WORD SEMIS025010 ;<>02502}0 L2662 .BYTE $83,"US"025030 .WORD L2645025040 USE .WORD DOVAR025050 .WORD DAREA025060 ;<>025070 L2670 .BYTE $84,"PRE}"025080 .WORD L2662025090 PREV .WORD DOVAR025100 .WORD DAREA025110 ;<>025120 L2678 .BYTE $84,"+BU"025130 .WORD L26}70025140 PBUF .WORD DOCOL025150 .WORD LIT025160 .WORD SSIZE+4 holds block #, one sector, two nu..025170 .WORD PLUS,DUP},LIMIT,EQUAL025180 .WORD ZBRAN025190 L2688 .WORD L2691-L2688025200 .WORD DROP,FIRST025210 L2691 .WORD DUP025220 .WORD} PREV,AT,SUB,SEMIS025230 ;<>025240 L2700 .BYTE $86,"UPDAT"025250 .WORD L2678025260 UPDAT .WORD DOCOL025270 .WORD PREV},AT,AT,LIT,$8000025280 .WORD OR,PREV,AT,STORE,SEMIS025290 ;<>025300 L2716 .BYTE $8D,"EMPTY-BUFFER"025310 .WORD L27000}25320 EMPTY .WORD DOCOL025330 .WORD FIRST,LIMIT,OVER,SUB025340 .WORD ERASE,SEMIS025350 ;<>025360 L2729 .BYTE $83,"DR"}025370 .WORD L2716025380 DR0 .WORD DOCOL025390 .WORD ZERO,OFSET,STORE,SEMIS025400 ;<>025410 L2740 .BYTE $83,"DR"02542}0 .WORD L2729025430 .WORD DOCOL025440 .WORD LIT,SECTR sectors per drive025450 .WORD OFSET,STORE,SEMIS025460 ;<>02547}0 L2751 .BYTE $86,"BUFFE"025480 .WORD L2740025490 BUFFR .WORD DOCOL025500 .WORD USE,AT,DUP,TOR025510 L2758 .WORD PBUF}025520 .WORD ZBRAN025530 L2760 .WORD L2758-L2760025540 .WORD USE,STORE,R,AT,ZLESS025550 .WORD ZBRAN025560 L2767 .WORD }L2776-L2767025570 .WORD R,TWOP,R,AT,LIT,$7FFF025580 .WORD ANDD,ZERO,RSLW025590 L2776 .WORD R025600 .WORD STORE,R,PREV,}STORE025610 .WORD RFROM,TWOP,SEMIS025620 ;<>025630 L2788 .BYTE $85,"BLOC"025640 .WORD L2751025650 BLOCK .WORD DOCOL0}25660 .WORD OFSET,AT,PLUS,TOR,PREV025670 .WORD AT,DUP,AT,R,SUB,DUP025680 .WORD PLUS,ZBRAN025690 L2804 .WORD L2830-L2804}025700 L2805 .WORD PBUF025710 .WORD ZEQU,ZBRAN025720 L2808 .WORD L2818-L2808025730 .WORD DROP,R,BUFFR,DUP,R,ONE025740 } .WORD RSLW,TWO,SUB025750 L2818 .WORD DUP025760 .WORD AT,R,SUB,DUP,PLUS,ZEQU025770 .WORD ZBRAN025780 L2826 .WORD L2805-}L2826025790 .WORD DUP,PREV,STORE025800 L2830 .WORD RFROM025810 .WORD DROP,TWOP025820 .WORD SEMIS end of block025830 ;}<>025840 L2833 .BYTE $85,"FLUS"025850 .WORD L2788025860 FLUSH .WORD DOCOL025870 .WORD LIMIT,FIRST,SUB,BBUF025880 .WO}RD CLIT025890 .BYTE 4025900 .WORD PLUS,SLASH,ONEP,ZERO,PDO025910 L2835 .WORD LIT,$7FFF,BUFFR025920 .WORD DROP,PLOOP02}5930 .WORD L2835-*025940 .WORD SEMIS025950 ;<>025960 L2838 .BYTE $86,"(LINE"025970 .WORD L2833025980 PLINE .WORD DOC}OL025990 .WORD TOR,CSLL,BBUF,SSMOD026000 .WORD RFROM,BSCR,STAR,PLUS026010 .WORD BLOCK,PLUS,CSLL,SEMIS026020 ;<>026030} L2857 .BYTE $85,".LIN"026040 .WORD L2838026050 DLINE .WORD DOCOL026060 .WORD PLINE,DTRAI,TYPE,SEMIS026070 ;<>026080 }L2868 .BYTE $87,"MESSAG"026090 .WORD L2857026100 MESS .WORD DOCOL026110 .WORD WARN,AT,ZBRAN026120 L2874 .WORD L2888-L2}874026130 .WORD DDUP,ZBRAN026140 L2877 .WORD L2886-L2877026150 .WORD CLIT026160 .BYTE 4026170 .WORD OFSET,AT,BSCR,SL}ASH,SUB026180 .WORD DLINE026190 L2886 .WORD BRAN026200 L2887 .WORD L2891-L2887026210 L2888 .WORD PDOTQ026220 .BYTE 6,"}MSG # "026230 .WORD DOT026240 L2891 .WORD SEMIS026250 ;<>026260 L2896 .BYTE $84,"LOA"026270 .WORD L2868026280 LOAD .}WORD DOCOL026290 .WORD BLK,AT,TOR,IN,AT,TOR026300 .WORD ZERO,IN,STORE,BSCR,STAR026310 .WORD BLK,STORE,INTER,RFROM02632}0 .WORD IN,STORE,RFROM,BLK026330 .WORD STORE,SEMIS026340 ;<>026350 L2924 .BYTE $C3,"--"026360 .WORD L2896026370 .WO}RD DOCOL026380 .WORD QLOAD,ZERO,IN,STORE,BSCR026390 .WORD BLK,AT,OVER,MOD,SUB,BLK026400 .WORD PSTOR,SEMIS026410 ;<>02}6420 XEMIT TYA write one ASCII char to terminal026430 SEC026440 LDY #$1A026450 ADC (UP),Y026460 STA (UP),Y026470 IN}Y bump user variable OUT026480 LDA #0026490 ADC (UP),Y026500 STA (UP),Y026510 LDA 0,X fetch char to output026520 ST}X XSAVE026530 JSR OUTCH and display it026540 LDX XSAVE026550 JMP POP026560 ;<>026570 XKEY STX XSAVE read one terminal} keystroke to stack026590 JSR INCH026600 LDX XSAVE026610 JMP PUSH0A026620 ;<>026630 XQTER LDA #0 assume no BREAK0266}40 LDY $11 check BRKKEY026645 BNE XQTER2 branch if no BRK026650 LDA #1 indicate BREAK026652 STA $11 reset BRKKEY02665}4 BNE XQTER3026656 XQTER2 LDY BRFLG check term I/O break flag026658 BEQ XQTER3 no break during I/O026660 LDA #1 indicat}e break026662 XQTER3 LDY #0 clear BRFLG026664 STY BRFLG026666 JMP PUSH0A026670 ;<>026680 XCR STX XSAVE display CR/LF t}o terminal026690 LDA #$9B EOL026692 JSR OUTCH026700 LDX XSAVE026710 JMP NEXT026715 ;026720 ; Terminal Handler02672}5 ;026730 GOVEC TAY indirect jump to handler026735 LDA $E401,X026740 PHA026745 LDA $E400,X026750 PHA026755 TYA026}760 RTS026765 ;026770 OUTCH LDX #$6 put byte to editor026775 JSR GOVEC026780 CPY #$80026785 BEQ BREAK026790 RTS02}6795 ;026800 BREAK INC BRFLG break key hit026805 RTS026810 BRFLG .BYTE 0 break during I/O flag026815 ;026820 INCH LDX #}$24 get byte from keyboard026825 JSR GOVEC026830 CPY #$80026835 BEQ BREAK026840 RTS027230 ;<>027240 L3202 .BYTE $C1},""027250 .WORD L2924027260 TICK .WORD DOCOL027270 .WORD DFIND,ZEQU,ZERO,QERR027280 .WORD DROP,LITER,SEMIS027290 ;<>}027300 L3217 .BYTE $86,"FORGE"027310 .WORD L3202027320 FORG .WORD DOCOL027330 .WORD TICK,NFA,DUP027340 .WORD FENCE,A}T,ULESS,CLIT027350 .BYTE $15027360 .WORD QERR,TOR,VOCL,AT027370 L3220 .WORD R,OVER,ULESS,ZBRAN027380 .WORD L3225-*027}390 .WORD FORTH,DEFIN,AT,DUP027400 .WORD VOCL,STORE027410 .WORD BRAN027420 .WORD L3220-*027430 L3225 .WORD DUP,CLIT0}27440 .BYTE 4027450 .WORD SUB027460 L3228 .WORD PFA,LFA,AT027470 .WORD DUP,R,ULESS,ZBRAN027480 .WORD L3228-*027490 }.WORD OVER,TWO,SUB,STORE027500 .WORD AT,DDUP,ZEQU,ZBRAN027510 .WORD L3225-*027520 .WORD RFROM,DP,STORE027530 .WORD SE}MIS027540 ;<>027550 L3250 .BYTE $84,"BAC"027560 .WORD L3217027570 BACK .WORD DOCOL027580 .WORD HERE,SUB,COMMA,SEMIS0}27590 ;<>027600 L3261 .BYTE $C5,"BEGI"027610 .WORD L3250027620 .WORD DOCOL027630 .WORD QCOMP,HERE,ONE,SEMIS027640 ;<}>027650 L3273 .BYTE $C5,"ENDI"027660 .WORD L3261027670 ENDIF .WORD DOCOL027680 .WORD QCOMP,TWO,QPAIR,HERE027690 .WOR}D OVER,SUB,SWAP,STORE027700 .WORD SEMIS027710 ;<>027720 L3290 .BYTE $C4,"THE"027730 .WORD L3273027740 .WORD DOCOL02}7750 .WORD ENDIF,SEMIS027760 ;<>027770 L3300 .BYTE $C2,"D"027780 .WORD L3290027790 .WORD DOCOL027800 .WORD COMP,PDO},HERE,THREE027810 .WORD SEMIS027820 ;<>027830 L3313 .BYTE $C4,"LOO"027840 .WORD L3300027850 .WORD DOCOL027860 .WOR}D THREE,QPAIR,COMP,PLOOP027870 .WORD BACK,SEMIS027880 ;<>027890 L3327 .BYTE $C5,"+LOO"027900 .WORD L3313027910 .WORD} DOCOL027920 .WORD THREE,QPAIR,COMP,PPLOO027930 .WORD BACK,SEMIS027940 ;<>027950 L3341 .BYTE $C5,"UNTI"027960 .WORD }L3327027970 UNTIL .WORD DOCOL027980 .WORD ONE,QPAIR,COMP,ZBRAN027990 .WORD BACK,SEMIS028000 ;<>028010 L3355 .BYTE $C3,}"EN"028020 .WORD L3341028030 .WORD DOCOL028040 .WORD UNTIL,SEMIS028050 ;<>028060 L3365 .BYTE $C5,"AGAI"028070 .WO }RD L3355028080 AGAIN .WORD DOCOL028090 .WORD ONE,QPAIR,COMP,BRAN028100 .WORD BACK,SEMIS028110 ;<>028120 L3379 .BYTE $C }6,"REPEA"028125 .WORD L3365028130 .WORD DOCOL028140 .WORD TOR,TOR,AGAIN,RFROM028150 .WORD RFROM,TWO,SUB,ENDIF028160 } .WORD SEMIS028170 ;<>028180 L3396 .BYTE $C2,"I"028190 .WORD L3379028200 IF .WORD DOCOL028210 .WORD COMP,ZBRAN,HERE, }ZERO028220 .WORD COMMA,TWO,SEMIS028230 ;<>028240 L3411 .BYTE $C4,"ELS"028250 .WORD L3396028260 .WORD DOCOL028270 . }WORD TWO,QPAIR,COMP,BRAN,HERE028280 .WORD ZERO,COMMA,SWAP,TWO028290 .WORD ENDIF,TWO,SEMIS028300 ;<>028310 L3431 .BYTE $}C5,"WHIL"028320 .WORD L3411028330 .WORD DOCOL028340 .WORD IF,TWOP,SEMIS028350 ;<>028360 L3442 .BYTE $86,"SPACE"028}370 .WORD L3431028380 SPACS .WORD DOCOL028390 .WORD ZERO,MAX,DDUP,ZBRAN028400 L3449 .WORD L3455-L3449028410 .WORD ZERO},PDO028420 L3452 .WORD SPACE028430 .WORD PLOOP028440 L3454 .WORD L3452-L3454028450 L3455 .WORD SEMIS028460 ;<>028470 L}3460 .BYTE $82,"<"028480 .WORD L3442028490 BDIGS .WORD DOCOL028500 .WORD PAD,HLD,STORE,SEMIS028510 ;<>028520 L3471 .B}YTE $82,"#"028530 .WORD L3460028540 EDIGS .WORD DOCOL028550 .WORD DROP,DROP,HLD,AT,PAD028560 .WORD OVER,SUB,SEMIS028}570 ;<>028580 L3486 .BYTE $84,"SIG"028590 .WORD L3471028600 SIGN .WORD DOCOL028610 .WORD ROT,ZLESS,ZBRAN028620 L3492 }.WORD L3496-L3492028630 .WORD CLIT028640 .BYTE $2D028650 .WORD HOLD028660 L3496 .WORD SEMIS028670 ;<>028680 L3501 .B}YTE $81,""028690 .WORD L3486028700 DIG .WORD DOCOL028710 .WORD BASE,AT,MSMOD,ROT,CLIT028720 .BYTE 9028730 .WORD OVE}R,LESS,ZBRAN028740 L3513 .WORD L3517-L3513028750 .WORD CLIT028760 .BYTE 7028770 .WORD PLUS028780 L3517 .WORD CLIT028}790 .BYTE $30028800 .WORD PLUS,HOLD,SEMIS028810 ;<>028820 L3526 .BYTE $82,"#"028830 .WORD L3501028840 DIGS .WORD DOC}OL028850 L3529 .WORD DIG028860 .WORD OVER,OVER,OR,ZEQU,ZBRAN028870 L3535 .WORD L3529-L3535028880 .WORD SEMIS028890 ;<>}028900 L3541 .BYTE $83,"D."028910 .WORD L3526028920 DDOTR .WORD DOCOL028930 .WORD TOR,SWAP,OVER,DABS028940 .WORD BDI}GS,DIGS,SIGN,EDIGS028950 .WORD RFROM,OVER,SUB,SPACS028960 .WORD TYPE,SEMIS028970 ;<>028980 L3562 .BYTE $82,"D"028990 } .WORD L3541029000 DDOT .WORD DOCOL029010 .WORD ZERO,DDOTR,SPACE,SEMIS029020 ;<>029030 L3573 .BYTE $82,"."029040 .WOR}D L3562029050 DOTR .WORD DOCOL029060 .WORD TOR,STOD,RFROM,DDOTR029070 .WORD SEMIS029080 ;<>029090 L3585 .BYTE $81,""}029100 .WORD L3573029110 DOT .WORD DOCOL029120 .WORD STOD,DDOT,SEMIS029130 ;<>029140 L3595 .BYTE $81,""029150 .WORD }L3585029160 QUES .WORD DOCOL029170 .WORD AT,DOT,SEMIS029180 ;<>029190 L3605 .BYTE $84,"LIS"029200 .WORD L3595029210 }LIST .WORD DOCOL029220 .WORD DECIM,CR,DUP,SCR,STORE029230 .WORD PDOTQ029240 .BYTE 6,"SCR # "029250 .WORD DOT,CLIT029 }260 .BYTE 16029270 .WORD ZERO,PDO029280 L3620 .WORD CR029290 .WORD I,THREE,DOTR,SPACE,I029300 .WORD SCR,AT,DLINE,PLOO!}P029310 L3630 .WORD L3620-L3630029320 .WORD CR,SEMIS029330 ;<>029340 L3637 .BYTE $85,"INDE"029350 .WORD L3605029360 "} .WORD DOCOL029370 .WORD CR,ONEP,SWAP,PDO029380 L3647 .WORD CR029390 .WORD I,THREE,DOTR,SPACE,ZERO029400 .WORD I,DLINE#},QTERM,ZBRAN029410 L3657 .WORD L3659-L3657029420 .WORD LEAVE029430 L3659 .WORD PLOOP029440 L3660 .WORD L3647-L366002945$}0 .WORD CR,CR029480 .WORD SEMIS029490 ;<>029500 L3666 .BYTE $85,"TRIA"029510 .WORD L3637029520 .WORD DOCOL029530 %}.WORD THREE,SLASH,THREE,STAR029540 .WORD THREE,OVER,PLUS,SWAP029550 .WORD PDO029560 L3681 .WORD CR029570 .WORD I,LIST,&}PLOOP029580 L3685 .WORD L3681-L3685029590 .WORD CR,CLIT029600 .BYTE $F029610 .WORD MESS,CR,CR,CR029640 .WORD SEMIS0'}29650 ;<>029660 L3696 .BYTE $85,"VLIS"029670 .WORD L3666029680 VLIST .WORD DOCOL029690 .WORD CLIT029700 .BYTE $8002(}9710 .WORD OUT,STORE,CON,AT,AT029720 L3706 .WORD OUT029730 .WORD AT,CSLL,GREAT,ZBRAN029740 L3711 .WORD L3716-L371102975)}0 .WORD CR,ZERO,OUT,STORE029760 L3716 .WORD DUP029770 .WORD IDDOT,SPACE,SPACE,PFA029780 .WORD LFA,AT,DUP,ZEQU029790 .*}WORD QTERM,OR,ZBRAN029800 L3728 .WORD L3706-L3728029810 .WORD DROP029820 .WORD SEMIS80 .WORD LFA,AT,DUP,ZEQU029790 .Z040000 ;<>040002 ; get n-th item from stack:040004 ; n --> m040010 L4001 .BYTE $84,"PIC"040020 .WORD L3696040030 PICK",} .WORD *+2040040 LDA 0,X040050 ASL A040060 STX XSAVE040070 CLC040080 ADC XSAVE040090 TAY040100 LDA 0,Y040110 "-}STA 0,X040120 LDA 1,Y040130 STA 1,X040140 JMP NEXT040150 ;<>040160 ; call CIO040170 ; iocb cmd -->040180 L4018 .BY".}TE $86,"JSRCI"040190 .WORD L4001040198 JSRCIO .WORD *+2040200 LDY 2,X get iocb offset040210 LDA 0,X store command040"/}220 STA $342,Y040230 INX040240 INX040250 INX040260 INX040270 STX XSAVE040280 TYA040290 TAX040300 JSR $E456 ("0}CIOV)040310 STY PSTAT+2 store status040320 LDX XSAVE040330 JMP NEXT040340 ;<>040350 ; status of previous CIO op0403"1}60 L4036 .BYTE $86,"(STAT"040370 .WORD L4018040380 PSTAT .WORD DOVAR040390 .WORD 0040400 ;<>040410 ; disk error abor"2}t040420 ; -->040430 ; : ?DISKERROR040440 ; (STAT) @ 7F > error if >80040450 ; IF040460 ; BASE @ HEX save base"3}040470 ; HERE COUNT TYPE print word040480 ; ." ? DISK ERROR "040490 ; (STAT) @ . print err #040500 ; BASE ! "4} restore base040510 ; SP! IN @ BLK @ QUIT040512 ; ENDIF ;040520 L4052 .BYTE $8A,"?DISKERRO"040530 .WORD L4036"5}040540 DSKER .WORD DOCOL040550 .WORD PSTAT,AT,CLIT040560 .BYTE $7F040570 .WORD GREAT,ZBRAN040572 .WORD L4064-*04058"6}0 .WORD BASE,AT,HEX040590 .WORD HERE,COUNT,TYPE,PDOTQ040600 .BYTE 14," ? DISK ERROR "040610 .WORD PSTAT,AT,DOT040620 "7} .WORD BASE,STORE040630 .WORD SPSTO,IN,AT,BLK,AT,QUIT040640 L4064 .WORD SEMIS040650 ;<>040660 ; point to block on disk, "8}update040670 ; DCB if necessary040680 ; blk dcb -->040690 ; : (POINT)040760 ; BEGIN read blocks until needed bloc"9}k found040770 ; DUP 3 + @ get latest blk #040780 ; 3 PICK < check if found yet040790 ; WHILE040792 ; DUP 2+ C@ ":}end-of-file?040794 ; IF 6 ERROR ENDIF error if so040800 ; (RDNXTBLK) read next block040810 ; REPEAT block now map";}ped040830 ; DUP C@ get iocb #040840 ; ROT ROT put it down stack040850 ; 19 + offset to block entry in D"<}CB040860 ; SWAP040870 ; 3 * + compute offset for block040880 ; DUP @ get sector #040890 ; SWAP 2+ C@ get "=}disp040900 ; POINT ?DISKERROR ; point to block040910 L4091 .BYTE $87,"(POINT"040920 .WORD L4052040930 PPOIN .WORD DOCOL">}041010 L4101 .WORD DUP,THREE,PLUS,AT041020 .WORD THREE,PICK,LESS,ZBRAN041030 .WORD L4105-*041031 .WORD DUP,TWOP,CAT,ZB"?}RAN041032 .WORD L4104-*041033 .WORD CLIT041034 .BYTE 6041035 .WORD ERROR041040 L4104 .WORD PRDNX,BRAN041042 .WORD "@}L4101-*041050 L4105 .WORD DUP,CAT,ROT,ROT,CLIT041060 .BYTE 19041070 .WORD PLUS,SWAP041080 .WORD THREE,STAR,PLUS,DUP04"A}1090 .WORD AT,SWAP,TWOP,CAT041100 .WORD POINT,DSKER,SEMIS041110 ;<>041120 ; mark new block in DCB041130 ; dcb --> dcb"B}041140 ; : (NEWBLK)041150 ; (STAT) @ 3 = end-of-file?041160 ; IF041170 ; DUP 2+ 1041180 ; SWAP C! make blk coun"C}t pos.(all file mapped)041190 ; ELSE041200 ; DUP 3 + DUP 1041210 ; SWAP +! inc blk #(neg.)041220 ; @ "D} fetch blk #041230 ; 3 * 19 + OVER + offset in DCB041240 ; >R store offset on ret. stk041250 ; DUP C@ "E} get iocb #041260 ; NOTE ?DISKERROR get pos. in file041270 ; R 2+ C! store disp041280 ; R> ! store secto"F}r041290 ; ENDIF ;041300 L4130 .BYTE $88,"(NEWBLK"041310 .WORD L4091041320 PNEWB .WORD DOCOL041330 .WORD PSTAT,AT,THRE"G}E,EQUAL041340 .WORD ZBRAN041342 .WORD L4137-*041350 .WORD DUP,TWOP,ONE041360 .WORD SWAP,CSTOR,BRAN041362 .WORD L414"H}4-*041370 L4137 .WORD DUP,THREE,PLUS,DUP041380 .WORD ONE,SWAP,PSTOR,AT041390 .WORD THREE,STAR,CLIT041400 .BYTE 190414"I}10 .WORD PLUS,OVER,PLUS,TOR,DUP041420 .WORD CAT,NOTE,DSKER,R,TWOP,CSTOR041430 .WORD RFROM,STORE041440 L4144 .WORD SEMIS"J}041450 ;<>041460 ; read next block in file041470 ; dcb --> dcb041480 ; : (RDNXTBLK)041490 ; DUP 3 + @ next blk #"K}041500 ; OVER (POINT) point in file041510 ; USE @ @ <0 oldest buffer marked update?041520 ; IF read 1 "L}byte at a time if so041530 ; B/BUF 0 DO read 1 block041540 ; DUP C@ get iocb #041550 ; GET DROP get/i"M}gnore byte041555 ; ?DISKERROR041560 ; LOOP041570 ; ELSE read 1 block041580 ; DUP C@ get icob #0415"N}90 ; USE @ use oldest buffer041600 ; 7FFF OVER ! clear buffer blk #041610 ; 2+ B/BUF GETBUF get buffer from "O}disk041620 ; DROP ignore length041630 ; ?DISKERROR041640 ; ENDIF041650 ; (NEWBLK) ; update DCB for new b"P}lock041660 L4166 .BYTE $8A,"(RDNXTBLK"041670 .WORD L4130041680 PRDNX .WORD DOCOL041690 .WORD DUP,THREE,PLUS,AT,OVER04"Q}1700 .WORD PPOIN,USE,AT,AT,ZLESS,ZBRAN041710 .WORD L4176-*,BBUF041720 .WORD ZERO,PDO041730 L4173 .WORD DUP,CAT,GET,DROP"R}041740 .WORD DSKER,PLOOP041742 .WORD L4173-*,BRAN041750 .WORD L4179-*041760 L4176 .WORD DUP,CAT,USE,AT,LIT041770 .WO"S}RD $7FFF,OVER,STORE,TWOP,BBUF041780 .WORD GETBU,DROP,DSKER041790 L4179 .WORD PNEWB,SEMIS041800 ;<>041810 ; get I/O statu"T}s041820 ; iocb --> status041830 ; : STATUS041840 ; DUP #STATUS JSRCIO041850 ; ICSTA + C@ ;041860 L4186 .BYTE $86,"STATU"U}"041870 .WORD L4166041880 STATU .WORD DOCOL041890 .WORD DUP,CLIT041900 .BYTE $0D041910 .WORD JSRCIO,LIT,$343041920"V} .WORD PLUS,CAT,SEMIS041930 ;<>041940 ; open I/O041950 ; iocb aux1 aux2 nameaddr -->041960 ; : OPEN041970 ; 4 PICK "W} get iocb #041980 ; DUP >R put on ret stk041990 ; ICBA + ! store name addr042000 ; R ICAX2 + C! st"X}ore aux2042010 ; R> ICAX1 + C! store aux1042020 ; #OPEN JSRCIO ;042030 L4203 .BYTE $84,"OPE"042040 .WORD L4186042050"Y} OPEN .WORD DOCOL042060 .WORD CLIT042070 .BYTE 4042080 .WORD PICK,DUP,TOR,LIT,$344042090 .WORD PLUS,STORE,R,LIT,$34B"Z}042100 .WORD PLUS,CSTOR,RFROM,LIT042110 .WORD $34A,PLUS,CSTOR,CLIT042120 .BYTE $03042130 .WORD JSRCIO,SEMIS042140 ;<>"[}042150 ; close file042160 ; iocb -->042170 ; : CLOSE042180 ; #CLOSE JSRCIO ;042190 L4219 .BYTE $85,"CLOS"042200 .WOR"\}D L4203042210 CLOSE .WORD DOCOL042220 .WORD CLIT042230 .BYTE $0C042240 .WORD JSRCIO,SEMIS042250 ;<>042260 ; note pos"]}ition in file042270 ; iocb --> sector disp042280 ; : NOTE042290 ; DUP save iocb #042300 ; #NOTE JSRCIO04231"^}0 ; DUP >R put iocb # on ret stk042320 ; ICAX3 + @ get sector #042330 ; R> ICAX5 + C@ ; get disp042340 L423"_}4 .BYTE $84,"NOT"042350 .WORD L4219042360 NOTE .WORD DOCOL042370 .WORD DUP,CLIT042380 .BYTE $26042390 .WORD JSRCIO,"`}DUP,TOR,LIT,$34C042400 .WORD PLUS,AT,RFROM,LIT,$34E042410 .WORD PLUS,CAT,SEMIS042420 ;<>042430 ; point to position in f"a}ile042440 ; iocb sector disp -->042450 ; : POINT042460 ; 3 PICK get iocb #042470 ; ICAX5 + C! store disp0"b}42480 ; 2 PICK042490 ; ICAX3 + ! store sector042500 ; #POINT JSRCIO ;042510 L4251 .BYTE $85,"POIN"042520 .WORD L4"c}234042530 POINT .WORD DOCOL042540 .WORD THREE,PICK,LIT,$34E,PLUS042550 .WORD CSTOR,TWO,PICK,LIT,$34C042560 .WORD PLUS,"d}STORE,CLIT042570 .BYTE $25042580 .WORD JSRCIO,SEMIS042590 ;<>042600 ; internal GET042610 ; iocb addr len cmd --> len"e}042620 ; : (GET)042630 ; >R save command042640 ; 3 PICK get iocb #042650 ; ICBLL + ! store buf"f} len042660 ; 2 PICK042670 ; ICBAL + ! store buf addr042680 ; DUP R> JSRCIO do appropriate get042690 ; ICBLL + @ ;"g} return length042700 L4270 .BYTE $85,"(GET"042710 .WORD L4251042720 PGET .WORD DOCOL042730 .WORD TOR,THREE,PICK,LI"h}T,$348042740 .WORD PLUS,STORE,TWO,PICK042750 .WORD LIT,$344,PLUS,STORE042760 .WORD DUP,RFROM,JSRCIO,LIT042770 .WORD $"i}348,PLUS,AT,SEMIS042780 ;<>042790 ; get buffer I/O042800 ; iocb addr len --> len042810 ; : GETBUF042820 ; #GET (GET) ;"j}042830 L4283 .BYTE $86,"GETBU"042840 .WORD L4270042850 GETBU .WORD DOCOL042860 .WORD CLIT042870 .BYTE $07042880 .WO"k}RD PGET,SEMIS042890 ;<>042900 ; get record I/O042910 ; iocb addr len --> len042920 ; : GETREC042930 ; #GETREC (GET)042"l}940 L4294 .BYTE $86,"GETRE"042950 .WORD L4283042960 GETRE .WORD DOCOL042970 .WORD CLIT042980 .BYTE $05042990 .WORD "m}PGET,SEMIS043000 ;<>043010 ; get byte043020 ; iocb --> byte043030 ; : GET043040 ; XCH 1 GETBUF get byte at XCH043050"n} ; DROP ignore length043060 ; XCH C@ ; get byte043070 L4307 .BYTE $83,"GE"043080 .WORD L4294043090 GET "o}.WORD DOCOL043100 .WORD LIT,XCH,ONE,GETBU,DROP043110 .WORD LIT,XCH,CAT,SEMIS043112 XCH .BYTE 0 temp for character043120"p} ;<>043130 ; internal PUT043140 ; iocb addr len cmd -->043150 ; : (PUT)043160 ; >R save command043170 ; 3 P"q}ICK get iocb043180 ; ICBLL + ! save len043190 ; 2 PICK043200 ; ICBAL + ! save buf addr043210 ; R> JSRCI"r}O ;043220 L4322 .BYTE $85,"(PUT"043230 .WORD L4307043240 PPUT .WORD DOCOL043250 .WORD TOR,THREE,PICK,LIT,$348043260 "s}.WORD PLUS,STORE,TWO,PICK,LIT043270 .WORD $344,PLUS,STORE,RFROM043280 .WORD JSRCIO,SEMIS043290 ;<>043300 ; put buffer I"t}/O043310 ; iocb addr len -->043320 ; : PUTBUF043330 ; #PUT (PUT) ;043340 L4334 .BYTE $86,"PUTBU"043350 .WORD L432204"u}3360 PUTBU .WORD DOCOL043370 .WORD CLIT043380 .BYTE $0B043390 .WORD PPUT,SEMIS043400 ;<>043410 ; put record I/O04342"v}0 ; iocb addr len -->043430 ; : PUTREC043440 ; #PUTREC (PUT)043450 L4345 .BYTE $86,"PUTRE"043460 .WORD L4334043470 PU"w}TRE .WORD DOCOL043480 .WORD CLIT043490 .BYTE $09043500 .WORD PPUT,SEMIS043510 ;<>043520 ; put byte043530 ; iocb byt"x}e -->043540 ; : PUT043550 ; XCH C! store byte at XCH043560 ; XCH 1 PUTBUF ; put 1 byte043570 L4357 .BYTE $83,"P"y}U"043580 .WORD L4345043590 PUTB .WORD DOCOL043600 .WORD LIT,XCH,CSTOR,LIT,XCH,ONE043610 .WORD PUTBU,SEMIS043620 ;<>"z}043630 ; disk read/write for FORTH files043640 ; addr blk f -->043650 ; f=0(write),1(read)043660 ; : R/W043670 ; >R "{} save f043680 ; DUP SECTR > blk>offset(DR1)?043690 ; IF043700 ; SECTR - subtract offset for DR1043710 ;"|} DCB1043720 ; ELSE043730 ; DCB0043740 ; ENDIF addr blk dcb --043750 ; DUP 1+ C@ 0= file open?043760 ; IF "}} open if not043770 ; DUP C@ get iocb #043780 ; 12 0 read/write043790 ; 4 PICK 5 + file name"~} addr043800 ; OPEN ?DISKERROR043802 ; (INITDCB) init DCB043810 ; ENDIF043812 ; OVER OVER dup blk,dcb043820 ; "}(POINT) point to block043830 ; DUP C@ get iocb #043840 ; 4 PICK buffer addr043850 ; B/BUF "}size of block043860 ; R get f043870 ; IF043880 ; GETBUF DROP043890 ; ELSE043900 ; PUTBUF043910 ; ENDIF0"}43920 ; ?DISKERROR043930 ; DUP 3 + @ get blk #043940 ; 3 PICK = new block?043950 ; IF043960 ; (NEWBLK) u"}pdate DCB043970 ; ENDIF043972 ; R> get f043974 ; IF043980 ; DROP DROP pop stack for read043982 ; ELSE0"}43984 ; (POINT) point to beginning of block(to flush last sector, bug in DOS)043986 ; ENDIF DROP ;043990 L4399 .BYTE"} $83,"R/"044000 .WORD L4357044010 RSLW .WORD DOCOL044020 .WORD TOR,DUP,LIT,SECTR,GREAT,ZBRAN044030 .WORD L4406-*0440"}40 .WORD LIT,SECTR,SUB,LIT,DCB1,BRAN044050 .WORD L4407-*044060 L4406 .WORD LIT,DCB0044070 L4407 .WORD DUP,ONEP,CAT,ZEQU,"}ZBRAN044080 .WORD L4415-*044090 .WORD DUP,CAT,CLIT044100 .BYTE 12044110 .WORD ZERO,CLIT044120 .BYTE 4044130 .WORD"} PICK,CLIT044132 .BYTE 5044134 .WORD PLUS,OPEN044140 .WORD DSKER,PIND044150 L4415 .WORD OVER,OVER,PPOIN,DUP,CAT,CLIT0"}44160 .BYTE 4044170 .WORD PICK,BBUF,R,ZBRAN044180 .WORD L4421-*044190 .WORD GETBU,DROP,BRAN044200 .WORD L4422-*0442"}10 L4421 .WORD PUTBU044220 L4422 .WORD DSKER,DUP,THREE,PLUS044230 .WORD AT,THREE,PICK,EQUAL,ZBRAN044240 .WORD L4426-*04"}4250 .WORD PNEWB044260 L4426 .WORD RFROM,ZBRAN044262 .WORD L44266-*,DROP,DROP,BRAN044264 .WORD L4427-*044266 L44266 .W"}ORD PPOIN044270 L4427 .WORD DROP,SEMIS044280 ;<>044290 L4429 .BYTE $86,"MEMTO"044300 .WORD L4399044310 MEMTOP .WORD DO"}CON044320 .WORD $2E5 top of user memory044330 ;<>044340 ; initialize DCB after OPEN044350 ; dcb --> dcb044360 ; : (INI"}TDCB)044370 ; DUP 1+ 1 SWAP C! file open044380 ; DUP 2+ 0 SWAP C! no eof044390 ; DUP 3 + 1 SWAP ! max block=1044400 ; DUP"} C@ get iocb044410 ; NOTE ?DISKERROR get pos of first block044420 ; 3 PICK 24 + offset to first disp044430"} ; C! store disp044440 ; OVER 22 + ! ; store sector044450 L4445 .BYTE $89,"(INITDCB"044460 .WORD L4429"}044470 PIND .WORD DOCOL044480 .WORD DUP,ONEP,ONE,SWAP,CSTOR044490 .WORD DUP,TWOP,ZERO,SWAP,CSTOR044500 .WORD DUP,THREE,"}PLUS,ONE,SWAP044510 .WORD STORE,DUP,CAT,NOTE,DSKER044520 .WORD THREE,PICK,CLIT044530 .BYTE 24044540 .WORD PLUS,CSTOR,"}OVER,CLIT044550 .BYTE 22044560 .WORD PLUS,STORE,SEMIS044570 ;<>044580 ; non-special character KEY044590 ; --> key044"}600 ; : (KEY)044610 ; BEGIN loop until non-044620 ; KEY special key044630 ; DUP 7E = backspace?044640"} ; OVER 9B = OR or EOL?044650 ; IF044660 ; 0 set FALSE044670 ; ELSE044680 ; DUP 7F AND clear invert bit0"}44690 ; DUP 1A > 1B - 1F044700 ; OVER 20 < AND044710 ; >R044720 ; DUP 7C > 7D - 7F044730 ; SWAP 80 < AND04"}4740 ; R> OR either one?044750 ; ENDIF044760 ; WHILE044770 ; DROP drop key value044780 ; REPEAT ;044790 "}L4479 .BYTE $85,"(KEY"044800 .WORD L4445044810 PKEY .WORD DOCOL044820 L4482 .WORD KEY,DUP,CLIT044830 .BYTE $7E044840 "} .WORD EQUAL,OVER,CLIT044850 .BYTE $9B044860 .WORD EQUAL,OR,ZBRAN044870 .WORD L4489-*,ZERO,BRAN044880 .WORD L4500-*0"}44890 L4489 .WORD DUP,CLIT044900 .BYTE $7F044910 .WORD ANDD,DUP,CLIT044920 .BYTE $1A044930 .WORD GREAT,OVER,CLIT0449"}40 .BYTE $20044950 .WORD LESS,ANDD,TOR,DUP,CLIT044960 .BYTE $7C044970 .WORD GREAT,SWAP,CLIT044980 .BYTE $80044990 "}.WORD LESS,ANDD,RFROM,OR045000 L4500 .WORD ZBRAN045010 .WORD L4503-*,DROP,BRAN045020 .WORD L4482-*045030 L4503 .WORD SE"}MIS045040 ;<>045050 ; close DR0045060 ; -->045070 ; : CLOSE-DR0045080 ; 10 CLOSE close iocb045090 ; 0 DCB0+1 ! ; "} clear DCB045100 L4510 .BYTE $89,"CLOSE-DR"045110 .WORD L4479045120 CLDR0 .WORD DOCOL045130 .WORD CLIT045140 .BYTE $"}10045150 .WORD CLOSE,ZERO,LIT,DCB0+1045160 .WORD STORE,SEMIS045170 ;<>045180 ; close DR1045190 ; -->045200 ; : CLOSE"}-DR1045210 ; 20 CLOSE045220 ; 0 DCB1+1 ! ;045230 L4523 .BYTE $89,"CLOSE-DR"045240 .WORD L4510045250 CLDR1 .WORD DOCOL"}045260 .WORD CLIT045270 .BYTE $20045280 .WORD CLOSE,ZERO,LIT,DCB1+1045290 .WORD STORE,SEMIS045300 ;<>045310 ; DCB0 f"}ile name address045320 ; DCB0+5 CONSTANT DR0NAME045330 L4533 .BYTE $87,"DR0NAM"045340 .WORD L4523045350 .WORD DOCON,DC"}B0+5045360 ;<>045370 ; DCB1 file name address045380 ; DCB1+5 CONSTANT DR1NAME045390 L4539 .BYTE $87,"DR1NAM"045400 .WO"}RD L4533045410 .WORD DOCON,DCB1+5050000 ;<>050010 NTOP .BYTE $83,"MO"050020 .WORD L4539050030 MON .WORD *+2050031 R"}TS050040 STX XSAVE050050 BRK break to monitor050060 LDX XSAVE use this as reentry point050070 JMP NEXT050080 ;<>050"}090 .OPT LIST050100 TOP .ENDem from stack:040004 ; n --> m040010 L4001 .BYTE $84,"PIC"040020 .WORD L3696040030 PICK