@L}5 _$% l0$)$$Hȱ$ UhL" `e$$%`$%`  R@P!( L(1   Y I`  d  Ld M * @  $ % CC$$)%1 Udߥ$9%: !0 S$% DD˙`  }J)Lr d M * @  $ % CC$$)%1 Udߥ$9%: !0 S$%} DD˙`  }J)Lr J  ((  p L ()   J}L= ( L 0q A    IB JC;? D W } LL  ` W )LA!  ߰")-݆ p" } $G@LL 08`Q")<2Q0 -G$Ș݆ UL# ; p8(()(0ʥ)NQ` }$GȘ݆LU )L ݆ L GȘ ݆LL )W>Z   HH)H }p h  hyhy D L> L JJ    ! LA*` BF }7'8  M HN H` 8 Z  \LdJJ!"! GFE@F (!L }EE !E^ ^ E E7EȩEdE/EȩE  D } .L }  ;F d  ;?F7F? ( .   Z D LL d } . D  L    p  E` , d)  D L) 0BM݊L݉} ML  N݆ L NLML [ TEqEHȱEqEh 0Gȹ G} HLL GɛL  LFREE SECTORS G) *Gȩ GȽG GȌ*jj >G} C8jJ3j2CD( C202C ԠBX` N 1? l LlD:RAMDISK}.COMLu L1 L ;LHL  T`  `1  ɐ     `TU  } L ? .  t`GBJ ~DEHI B V0dV!}QDEHI VF9 ,0 ,0 s0hhL  L` H hDHEh"}DEL8HI4 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;DEL`?<0LV`@ʆ 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  (` 9 V⪍ ઍ  -'}LLu ÝDEHILV 9 .l 9 .l  `` s$B BH(}I|DE V BLV nB,DE JLV B V BLVDEIʩ BꭝLu  } 3E:}DISK OPERATING SYSTEM II VERSION COPYRIGHT 1984 ATARI CORP.A. DISK DIRECTORY I. FORMAT DISKB. RUN CARTRIDG*}E J. DUPLICATE DISKC. COPY FILE K. BINARY SAVED. DELETE FILE(S) L. BINARY LOADE. RENAME FILE M. RUN AT ADDRES+}SF. LOCK FILE N. CREATE MEM.SAVG. UNLOCK FILE O. DUPLICATE FILEH. WRITE DOS FILES P. FORMAT SINGLEL !N',}#"&))9(&*)/h)''-&؆莟R'S  vL/ˢ L }Insert DOS 2.0s, type Y Λx -}DEfHI 1莏#q! @ y0ɛ8A0,' ȅ 1 1ild! 1L!NO SUCH ITEMSELECT.} ITEM OR FOR MENU! 0 .z:*{}.|{ 1 0 0JB 18L%|DL/}%DIRECTORY--SEARCH SPEC,LIST FILE?[# 0 0 &|D3" 1L!NOT A DISK FILEN !B 1L!E# 1 !BD0}ED:}:1BJ|DE 1DEBHI 1 h0ߢ 0.1}  0?詛 1 y0YЛ 1 ;#L" ;#L! BL1TYPE "Y" TO DELETE...DELETE FILE SPEC2}COPY--FROM, TO?OPTION NOT ALLOWED736 FREE SECTORS COPYING---D1:DIRECK.COMl# 0|D .L/%#3}##JB|DE 1BHID#E 1#0: B 1L!#͑### B 1#c$0SY4}S1}:## # # .#Ƚ# # 𩛙## 1,#PD#ELJ- <.BJD#E 5}1 1HH 0hh|DL%1}:̳# L% #D#EL% 1 0 . .0O% 1L!WILD CARDS NOT A6}LLOWED IN DESTINATION 0 <.|K}N 2 FORMAT. t* 5) 1L!`) 0NΞ 0 L1) 1 L!BAD LOAD FILELOAD FROM WHAT FILE?) 0 ?}0#B 1L!WHAT FILE TO LOCK?) 0 0$B 1L!WHAT FILE TO UNLOCK?DUP DISK-SOURCE,DEST DRIVES?TYPE "Y" IF OK TO US@}E PROGRAM AREACAUTION: A "Y" INVALIDATES MEM.SAV.FE! +L1   `*  70 2 2A} 0.* 1 y0 0)INSERT BOTH DISKS, TYPE RETURN^, 1 y038逍 N, 1L! ,B}C, t*  Lx+, 0 ^, 1 y0 , ,0,0 ,L+ ,I0 ,Vǭ0C}Ξ, 0 }, 1 y0C,ШC, 0K'!" H H 'h h Lx+!EF 5L1L!D,I,HhD}` NOT ENOUGH ROOMINSERT SOURCE DISK,TYPE RETURNINSERT DESTINATION DISK,TYPE RETURNE}`  `8 rL1`-* 1P* 1 y0Y`hhL!NAME OF FILE TO MOVE?- 0 0|DL% <.F},^ 1 70 0 .@L# .BJ 1  DEHIB V L1 ,} 1 70,L.  G}JB|,#P#DE 1 HI BDEHHII 1 B 1 ,^ 1 70,0La- B V,#PH},^ 1 70 0L#L!-* 1P* 1 y0Yj383}mm ݭI}}`8}``|* ? ɛ,`|:-)| / 1L!`DESTINATION CANT BE DOJ}S.SYS0 0H{ 24Δ 28/L!/) 2 Π 2 0 ξK}hAΞB,0 J 1 BDEHI,HÝDE 1HIHIDELSAVE-GIVE L}FILE,START,END(,INIT,RUN)O S0 1`BDEPHI V` S0H 1 L!M}0 0 1L~0`PLEASE TYPE 1 LETTER,0`hhL! 70 1L0L<1 ,;ɛ7,"ɛ:ݦ1ݥN}A"D|ݤD|ȩ:|ȩ|ɛ,,(/+.ީ1 1,ɛ`轤{NAMEO} TOO LONG B VL!` L1I H1EΝDL1|mDiE` V0`8d/8 i:222 1 LP}!ERROR- 138ɛ+,' 20*.. өr2 1``2TOO MANY DIGITSINVALID HEXAQ}DECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8uR} ECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8uR"Q#ٍl3h3j3k3m3;i3Au3Sv3Mw3 U1Source file = x3Ou3Bv3Jw3 U1Object file = 3Lu3Sv3Tw3 U1List fT}ile = 3M4M43- 3 Q20\Au3Sv3Mw3n3o3p30x3 5205C4 `209 % 2. P0 Q/0n3$eU}eL#R#Q$ -280즛 -20=ƆL# 3 Q20ѩ HI BD E V0L#n3аL#o3*V}p3 s3t3q3r3L$p3's3t3Ⅵ 0;$ Q/ 1 -2P0 "" / - -2l W}<<< RUN/INIT VECTORS >R$Q%>>ADCANDASLBCCBCSBEQ BITBMIBNEBPLBRABRKBVCBVSCLCCLDCLICLVCMPX}CPXCPYIDBJDCDECDEXDEYCDSHDWBENDEORAEQUEINCLUDEINCINXINY JMP JSRLDALDXLDYDLISTLSRNOPORAY}@ORGKPAGEPHAPHPPLAPLPR%Q&ROLRORRTIRTSSBCSECSEDSEISTASTXSTYGSUBTTLTAXTAYFTITLETSXTXAZ}TXSTYAC4` |- B4 - -;ʪ0=煂$ -LS& |- -T$ȱee[}0ȵтOꅇ`R&Q'Ġ斱@L( &E)eeL0 |+奅Ɖ妅ƈ i\} ŘV`(, |+)cL' |+LP' |+L' 誅Aȱ0{ʈ#~( |+Y,5ȱ]}YDX.8`Ɩ |+􈱀,t)ȱ,}ȱY۩L' R'Q(ieYʦ!O СƖ,IȱXթ6Ɩ |+^} ŘVȱXЦȱ)П`x 301 F?L(` |+3襉3膖,S,m3_}S( m3m30'9xF |+3舆]33,R(Q),m30-pE3 0`ȱ'3x񆖩Sн<3`}2m3)m3`<32h3h3 ( |+0i3` -ɛ;8`AƖ)?%(ZiiL' |+`a} |+`;+ɛ' |+,s3t3p3ܥq3r3o3n3` |+R)Q*`L%{ . /4/4 1i0 /4 5b}2ϩI˽1 c b H0 h )ƒ )ƒ`& Heeh`1 c 0 Hb h$0 &`Hc})hŊ&&(H勪hFfƒ`0 }1 0 b }c b L*80 1 0 b c b L*8R*Q+1 1 c c L*+-!*)/d}+%-&:|K0 b Ƭƫ ` )L* )L* )Hb h0 L*0 =1 0 b =c b L*0 1 0 b c b L*L2O,e}W$ 8`HIG H`Hc 1 c ALH[ȩ@-[R+Q,8`! L+[ @f} e*`ƫL+ - |- + * w,2 d 欱->+:*g/c%_&B|w]𖦫 [ e*`Ƭ82 d g}` %[@ e*` ! e*`L+ +-[@ e*` Խ!& R,Q-e*` . .$0 h}`U |-ѱ$@ȱg5aWG)A7 :00&&&&L,`8`%L@\*x':0i}:00H& & &eeheeȱL,ȱ01П&&L-ȱ800&&&L0-ȥR-Q.j}ȱ'҅'Ʌ'SL,{a[A镜豀:0蕛`ɛ ȱ ``M4 A0k}兰 . $0 $0$U"LPG" ȝ"eeiř?" /L-C4r@4R.Ql}/ .QƓĂ僰祐eeJJj(jJJ8j` H%΅h  ȱ*(ȱ*`m}M4娰T8eejf0 ƃƂ0 ٙ ,ȰȱeĨ ŧ`ł僰壟n} R/Q0A0"0 $0Lr/ $0 $00 0 S0 /00 A0 0"L/`h3h3i3V 222h3j3o}k3j3ԭk3 ؠȱ2)2 BD2El3HI V BD"EQHILVHJJJJ8 i:"h)8 i:؝"`p} "P"R0Q1`x0y0"ɛP`#+3;CHIJKLMNO $0ƒ擤333Ē`q} 03 1` 0 1`m ť 1 ` H m  8hiHI Vr}0 Ȍ  `R1Q2l hh BHI Ȅ V䤒ȱȱBHI/D4E V0 1ȹ/4s}eiHH`/4#ȹx3/40.󩛙/4 :.Ɠȹ/4肋 ./4ȭu3/4ȭv3/4ȭw3/4ȩ/4/414D/4:04`t} BLV䄒H -2JhDEBLVR2Q3H B VݦBdHID E VH ` u} Page (C) 1984 v} R3g3 WORDMARK SystemsR" (C) 1984 OR"Q#ٍl3h3j3k3m3;i3Au3Sv3Mw3 U1Source file = x3Ou3Bv3Jw3 U1Object file = 3Lu3Sv3Tw3 U1List f x}ile = 3M4M43- 3 Q20\Au3Sv3Mw3n3o3p30x3 5205C4 `209 % 2. P0 Q/0n3$e y}eL#R#Q$ -280즛 -20=ƆL# 3 Q20ѩ HI BD E V0L#n3аL#o3* z}p3 s3t3q3r3L$p3's3t3Ⅵ 0;$ Q/ 1 -2P0 "" / - -2l {}<<< RUN/INIT VECTORS >R$Q%>>ADCANDASLBCCBCSBEQ BITBMIBNEBPLBRABRKBVCBVSCLCCLDCLICLVCMP |}CPXCPYIDBJDCDECDEXDEYCDSHDWBENDEORAEQUEINCLUDEINCINXINY JMP JSRLDALDXLDYDLISTLSRNOPORA }}@ORGKPAGEPHAPHPPLAPLPR%Q&ROLRORRTIRTSSBCSECSEDSEISTASTXSTYGSUBTTLTAXTAYFTITLETSXTXA ~}TXSTYAC4` |- B4 - -;ʪ0=煂$ -LS& |- -T$ȱee }0ȵтOꅇ`R&Q'Ġ斱@L( &E)eeL0 |+奅Ɖ妅ƈ i } ŘV`(, |+)cL' |+LP' |+L' 誅Aȱ0{ʈ#~( |+Y,5ȱ }YDX.8`Ɩ |+􈱀,t)ȱ,}ȱY۩L' R'Q(ieYʦ!O СƖ,IȱXթ6Ɩ |+ } ŘVȱXЦȱ)П`x 301 F?L(` |+3襉3膖,S,m3 }S( m3m30'9xF |+3舆]33,R(Q),m30-pE3 0`ȱ'3x񆖩Sн<3 }2m3)m3`<32h3h3 ( |+0i3` -ɛ;8`AƖ)?%(ZiiL' |+` } |+`;+ɛ' |+,s3t3p3ܥq3r3o3n3` |+R)Q*`L%{ . /4/4 1i0 /4 5 }2ϩI˽1 c b H0 h )ƒ )ƒ`& Heeh`1 c 0 Hb h$0 &`H })hŊ&&(H勪hFfƒ`0 }1 0 b }c b L*80 1 0 b c b L*8R*Q+1 1 c c L*+-!*)/ }+%-&:|K0 b Ƭƫ ` )L* )L* )Hb h0 L*0 =1 0 b =c b L*0 1 0 b c b L*L2O, }W$ 8`HIG H`Hc 1 c ALH[ȩ@-[R+Q,8`! L+[ @ } e*`ƫL+ - |- + * w,2 d 欱->+:*g/c%_&B|w]𖦫 [ e*`Ƭ82 d }` %[@ e*` ! e*`L+ +-[@ e*` Խ!& R,Q-e*` . .$0 }`U |-ѱ$@ȱg5aWG)A7 :00&&&&L,`8`%L@\*x':0 }:00H& & &eeheeȱL,ȱ01П&&L-ȱ800&&&L0-ȥR-Q. }ȱ'҅'Ʌ'SL,{a[A镜豀:0蕛`ɛ ȱ ``M4 A0 }兰 . $0 $0$U"LPG" ȝ"eeiř?" /L-C4r@4R.Q }/ .QƓĂ僰祐eeJJj(jJJ8j` H%΅h  ȱ*(ȱ*` }M4娰T8eejf0 ƃƂ0 ٙ ,ȰȱeĨ ŧ`ł僰壟 } R/Q0A0"0 $0Lr/ $0 $00 0 S0 /00 A0 0"L/`h3h3i3V 222h3j3 }k3j3ԭk3 ؠȱ2)2 BD2El3HI V BD"EQHILVHJJJJ8 i:"h)8 i:؝"` } "P"R0Q1`x0y0"ɛP`#+3;CHIJKLMNO $0ƒ擤333Ē` } 03 1` 0 1`m ť 1 ` H m  8hiHI V }0 Ȍ  `R1Q2l hh BHI Ȅ V䤒ȱȱBHI/D4E V0 1ȹ/4 }eiHH`/4#ȹx3/40.󩛙/4 :.Ɠȹ/4肋 ./4ȭu3/4ȭv3/4ȭw3/4ȩ/4/414D/4:04` } BLV䄒H -2JhDEBLVR2Q3H B VݦBdHID E VH ` } Page (C) 1984 } R3g3 WORDMARK SystemsR" (C) 1984 OA65 (A very simple 6502 assembler) The A65 assembler is modeled after the Atari MACRO Assembler (AMAC) that was distribut}ed by APX along with the MEDIT editor and the DDT debugger. The most significant thing about it is that the source files can}not contain line numbers (so editors that use line numbers must be able to write an unnumbered output file). A second char}acteristic is that it is a disk-to- disk assembler (the source must be in a disk (or cassette) file and the object cannot b}e inserted directly into memory. The assembler is run from the DOS menu using the 'L' command, and prompts you for the so}urce file name, the object file name and the listing file name: a RETURN in response to the object and listing prompts will} cause the assembler to generate files on the same drive with extensions '.OBJ' and '.LST' using the same file name as the }source file. If no '.' appears in the source file name, '.ASM' is its assumed extension. A listing can be printed directl}y by specifying 'P:' as the list file or dumped to the screen by specifying 'E:'. A '-' should cause the listing to be omit}ted, and it does, but it also results in the object file being garbled(???). Some of the 65C02 opcodes are implemented, b}ut they have not been tested very thouroughly. Otherwise, the machine instructions are as any other standard 6502 assemble}r would expect. Expressions can include +, -, * and / operators as well as HI[] and LO[] functions to extract the high and } low bytes of 16-bit numbers. Brackets, [ and ], may be used to group terms in an expression if necessary. Symbols may hav}e up to 8 characters. The assembler directives are: DB defines a byte, in decimal (12), hex ($0C), octal (@14) or }binary (%00001100) and may also be a character string (enclosed in quotes) DC defines a byte, as above, but wi}th the high bit set (if defining a string, only on the last byte of the string has the high bit set) DW define}s a word, low byte first, as if an indirect pointer DS allocates a number of bytes without storing any data in them EN}D terminates the program and specifies INIT and RUN addresses EQU defines a symbol to have a specific value = } same as EQU INCLUDE causes the file specified to be inserted at this point in the assembly (cannot be nested) ORG} sets the location counter to a fixed address *= same as ORG PAGE causes the assembler to go to the top of th n}ext listing page SUBTTL allows entering a second title line TITLE specifies the first title line LIST specifies list}ing control (several options are controlled by the operands of the LIST pseudo-op) Octal numbers, EQU, *=, LIST a}nd the INIT and RUN addresses may have bugs in them -- good luck. Most of the rest has been debugged reasonably well. Th}e END statement can have the following forms: END no RUN or INIT vectors generated at all END} ADDR ADDR is the RUN entry point END ADDR, ADDR is the INIT entry point (no RUN vector) END }INIT,RUN both vectors specified The possible options for the LIST command are: -- not implemented yet (the LIST }command is ignored completely) -- (This is what I call minimum documentation, I may add to it as questions are asked) } Charles Marslett 8/21/85 on, I may add to it as questions are asked) M TITLE '6502/65C02 ASSEMBLER' SUBTTL 'SOURCE = A65.MAC, 6/24/84' ; ; Copyright (C) 1984, 1986 by Charles Marslett ; } WORDMARK Systems ; All rights reserved. 2705 Pinewood Dr. ; Garl}and, TX 75042 ; ; Permission granted to copy, modify or execute ; this program for noncommercial purposes only. ; PRUNIT} = $10 ;LIST OUTPUT IOCB OBUNIT = $20 ;OBJECT FILE IOCB INUNIT = $30 ;SOURCE FILE IOCB LIST I ; INCLUDE D2:ASMDEF.MAC } ; ORG $2000 ;END OF RESIDENT MYDOS 3.316 OPERS DS 50 ;EXPRESSION STACKS OPNDL DS 50 OPNDH DS 50 ; TEXTBF DS LINLEN O}BJBUF DS BUFLEN PRBUF DS PRTLEN+2 ; START LDA #TTLSIZE STA TTLLEN LDX #$FF STX CURLINE INX STX CURPAGE STX CUR}PAGE+1 STX TTLFLG LDA #59 ;DEFAULT LINES/PAGE STA LPP LDA #'A' STA EXTTXT LDA #'S' STA EXTTXT+1 LDA #'M' ST}A EXTTXT+2 JSR PROMPT DB 'Source file = ',0 DW INF ; LDA #'O' STA EXTTXT LDA #'B' STA EXTTXT+1 LDA #'J' ST}A EXTTXT+2 JSR PROMPT DB 'Object file = ',0 DW OUTF ; LDA #'L' STA EXTTXT LDA #'S' STA EXTTXT+1 LDA #'T' S}TA EXTTXT+2 JSR PROMPT DB 'List file = ',0 DW PRF ; LDA #1 ;FIRST PASS IS 1 STA PASSNO ;SECOND PASS IS 0 ; LD}A #LOW[SYMTAB] STA ENDSTAB LDA #HIGH[SYMTAB] STA ENDSTAB+1 LDX #$FF STX SYMTAB ; LDA PRF+2 CMP #'-' BEQ NOPR}NT LDX #PRUNIT LDA #LOW[PRF] LDY #HIGH[PRF] JSR OPNOUT BMI ABORT ; NOPRNT LDA #'A' STA EXTTXT LDA #'S' STA }EXTTXT+1 LDA #'M' STA EXTTXT+2 ; PASSLP LDA #0 STA ENDFLG STA ENTPTF STA INIFLG LDX #INUNIT STX FILE LDA #L}OW[INF] LDY #HIGH[INF] JSR OPENIN BMI ABORT ; LOOP LDA #$00 STA SFLGS STA LABEL JSR READLN BMI CKEOF JSR GE}NCODE ;GENERATE CODE/DO DIRECTIVE JSR ADDSYM ;IF LABEL DEFINED, ADD TO SYM/TAB LDA PASSNO BNE NOPLIN ;IF NOT PASS 2,} SKIP PRINTING LDA ICMD-2+PRUNIT BMI NOPLIN JSR PRINT ;LIST LINE TO PRINTER BMI ABORT NOPLIN LDA ENDFLG BNE ASDON}E ; CLC LDA LEN ADC PC STA PC LDA LEN+1 ADC PC+1 STA PC+1 JMP LOOP ; ABORT LDX FILE CLINFS JSR CLOSEF T}XA SEC SBC #$10 TAX CPX #INUNIT BCS CLINFS BCC ABXIT ; CKEOF CPY #136 ;IS THIS EOF? BNE ABORT ;IF SO, THEN }TREAT AS 'END' ASDONE LDX FILE JSR CLOSEF CPX #INUNIT BNE ENDINCL DEC PASSNO BPL PASS2 ABXIT JMP ASMXIT ;ASSEMBL}Y DONE, GO WRAP UP! ; PASS2 LDX #OBUNIT LDA #LOW[OUTF] LDY #HIGH[OUTF] JSR OPNOUT BMI ABORT ; LDA #$FF STA OBJ}BUF STA OBJBUF+1 LDA #2 STA ILEN,X LDA #0 STA ILEN+1,X STA OBJPTR ;NO DATA IN BUFFER YET (LEN=0) LDA #11 STA} ICMD,X LDA #LOW[OBJBUF] STA IBUF,X LDA #HIGH[OBJBUF] STA IBUF+1,X JSR CIOV BMI ABORT JMP PASSLP ; ENDINCL TX}A SBC #$10 STA FILE LDA ENDFLG BNE ASDONE JMP LOOP ; ASMXIT LDA ENTPTF BEQ NOENTV LDX #2 LDA #LOW[RUNVEC] } STA PC LDA #HIGH[RUNVEC] STA PC+1 LDX #2 LDA INIFLG BEQ VECT2 LDX #4 LDA INIPT STA OPCODE+2 LDA INIPT+1 }STA OPCODE+3 ; VECT2 LDA ENTPT STA OPCODE LDA ENTPT+1 STA OPCODE+1 JMP WRVECT ; NOENTV LDA INIFLG BEQ NOINIV }LDA INIPT STA OPCODE LDA INIPT+1 STA OPCODE+1 LDA #LOW[INIVEC] STA PC LDA #HIGH[INIVEC] STA PC+1 LDX #2 WRVE}CT STX LEN JSR CODOBJ+4 LDX #VECLL CPYVL LDA VECLIN-1,X STA TEXTBF-1,X DEX BNE CPYVL JSR PRINT ;PRINT VECTOR CO}DE LINE NOINIV LDY OBJPTR BEQ NOOBJB JSR WRTOBJ NOOBJB LDX #OBUNIT JSR CLOSEF LDA ICMD-2+PRUNIT BMI NOPSYM LDA }#' ' STA PRBUF LDA #EOL STA PRBUF+1 JSR LIST JSR PRSTAB ;PRINT SYMBOL TABLE LDX #PRUNIT JSR CLOSEF NOPSYM JMP} (DOSVEC) ;AND RETURN TO DOS ; VECLIN DB '<<< RUN/INIT VECTORS >>>',$9B VECLL = *-VECLIN ; INCLUDE D2:OPCODE.MAC INCL}UDE D2:DATA.MAC INCLUDE D2:DIREC.MAC INCLUDE D2:EXPR.MAC INCLUDE D2:SYMBOLS.MAC INCLUDE D2:PRINT.MAC INCLUDE D2:OBJ}ECT.MAC INCLUDE D2:INPUT.MAC ; ; CLOSE A FILE ; CLOSEF LDA #12 STA ICMD,X JMP CIOV ; ; OPEN A FILE FOR INPUT ;} OPENIN STY TEMP PHA JSR CLOSEF LDA #4 DOPEN STA IAUX,X PLA STA IBUF,X LDA TEMP STA IBUF+1,X LDA #3 STA I}CMD,X JMP CIOV ;OPEN INPUT FILE ; ; OPEN LIST OR OBJECT FILE ; OPNOUT STY TEMP PHA LDA #12 STA ICMD,X JSR CIO}V LDA #8 BNE DOPEN ; ; READ A LINE INTO THE TEXT BUFFER ; AND INITIALIZE THE TEXT POINTERS ; READLN LDX FILE ;REA}D SELECTED FILE LDA #5 STA ICMD,X LDA #LINLEN STA ILEN,X LDA #0 STA ILEN+1,X STA TXTPTR LDA #LOW[TEXTBF] ST}A IBUF,X STA TEXTP LDA #HIGH[TEXTBF] STA IBUF+1,X STA TEXTP+1 JSR CIOV LDA ILEN,X TAX LDA #EOL STA TEXTBF,X} TYA RTS ; TTLINE DB $0C ;FORMFEED TITLE DB ' ' DB ' ',' P}age ' PAGE DB ' ',EOL SUBTTL DB ' ' DB ' ',' (C) 1984',EO}L DB ' ' DB ' ','WORDMARK Systems',EOL TTLSIZE = *-TTLINE ; ; NO}N-ZERO PAGE RAM ; CURLINE DS 1 LPP DS 1 CURPAGE DS 2 TTLLEN DS 1 TTLFLG DS 1 ENDFLG DS 1 ENTPTF DS 1 INIFLG DS 1 EN}TPT DS 2 INIPT DS 2 EXTTXT DS 3 INF DS FNSIZE DS 1 OUTF DS FNSIZE DS 1 PRF DS FNSIZE DS 1 DATBUF DS STRMAX DS 6} FNBUF DS FNSIZE DS 2 LABEL DS SYMSIZ DS 2 ; SYMTAB END START DS 1 PRF DS FNSIZE DS 1 DATBUF DS STRMAX DS 6G; ; PARAMETERS OF THE ASSEMBLER ; SYMSIZ = 8 ;MAX NUMBER OF CHARACTERS IN A SYMBOL FNSIZE = 18 ;MAX LENGTH OF A FILE NAM}E STRING STRMAX = 120 ;MAX LENGTH OF QUOTED STRING LINLEN = 100 ;MAX LENGTH OF AN INPUT LINE PRTLEN = 80 ;PRINT LINE WIDTH} BUFLEN = 256+6 ;MAX SIZE OUTPUT RECORD CWIDTH = SYMSIZ+9 ; TAB = $7F EOL = $9B ; ; REGISTERS ON ZERO PAGE ; DOSVEC} = $0A ; ORG $0080 TEXTP DS 2 ;ADDRESS OF TEXT BUFFER TABPTR DS 2 ;ADDRESS OF OPCODE ENTRY ENDSTAB DS 2 ;ADDRESS OF END} OF SYMTAB PASSNO DS 1 ;CURRENT ASSEMBLER PASS OPCODE DS 1 ;OPCODE VALUE VALUE DS 2 ;VALUE OF OPERAND SECVAL DS 2 OPER D}S 1 SVAL DS 2 ;SYMBOL VALUE SFLGS DS 1 ;SYMBOL FLAGS ; BIT 7=UNDEFINED ; BIT 6=GLOBAL ; BIT 5=0 ; BIT 4=0 } ; BIT 3-1=ORG COUNT ; BIT 0=UNUSED SLEN DS 1 PARENS DS 1 TEMP DS 2 ;GENERAL TEMPORARIES CNT = TEMP MODE DS 1 ;ADD}RESSING MODE OFFSET ISVAL DS 1 ;FLAG (NONZERO -> LABEL=VALUE) LEN DS 2 ;LENGTH OF CURRENT INSTRUCTION ADRERR DS 1 ;ADDRESS} ERROR FIELD TXTPTR DS 1 ;CURRENT TEXT BYTE OFFSET OBJPTR DS 1 ;NEXT BYTE IN OBJECT BUFFER FILE DS 1 ;IOCB USED CURRENTLY }FOR INPUT SYMBOL DS SYMSIZ ;RESERVE 9 BYTES FOR THE SYMBOL DS 1 PC DS 2 ;CURRENT VALUE OF * HIGHP DS 2 LOWP DS 2 OPRSP} DS 1 ;OPERATOR STACK POINTER OPDSP DS 1 ;OPERAND STACK POINTER FUNC DS 1 ;HIGH/LOW FUNCTION FLAG ; FR0 = $D4 FR1 = $E0 } INBUFF = $F3 ; RUNVEC = $02E0 INIVEC = $02E2 ; ORG $0340 DS 2 ICMD DS 1 ISTAT DS 1 IBUF DS 2 DS 2 ILEN DS 2 I}AUX DS 2 DS 2 DS 2 ; FASCII = $D8E6 IFP = $D9AA CIOV = $E456 ICMD DS 1 ISTAT DS 1 IBUF DS 2 DS 2 ILEN DS 2 IF;System equates used LINZBS = $00 CASINI = $02 RAMLO = $04 DOSVEC = $0A POKMSK = $10 ICHIDZ = $20 ICBLHZ = $29 CRITIC} = $42 FMSZPG = $43 DRKMSK = $4E COLRSH = $4F HOLD1 = $51 RMARGN = $53 ROWCRS = $54 COLCRS = $55 SAVMSC = $58 NEWROW} = $60 LOGCOL = $63 SAVADR = $68 COLAC = $72 ICCOM = $0342 ICBAL = $0344 ICBAH = $0345 ICBLL = $0348 ICBLH = $0349 I}CAX1 = $034A CIOV = $E456 ;End of system equates ;Zero-page equates Z0016 = $86 Z0017 = $84 Z0018 = $85 Z0021 = $A8 Z}0027 = $8F Z0034 = $96 Z0035 = $A5 Z0036 = $97 Z0037 = $A6 Z0039 = $9B Z0044 = $C6 Z0045 = $9A Z0060 = $80 Z0070 = $}F2 Z0080 = $FF Z0094 = $A4 Z0102 = $94 Z0107 = $C2 Z0109 = $D6 Z0111 = $CE Z0115 = $95 Z0117 = $9C Z0122 = $98 Z012}5 = $82 Z0126 = $83 Z0127 = $99 Z0130 = $B1 Z0134 = $87 Z0135 = $88 Z0136 = $89 Z0171 = $F0 Z0195 = $AD Z0227 = $8C } Z0230 = $8A Z0231 = $8B Z0234 = $9D Z0235 = $9E Z0237 = $9F Z0238 = $A0 Z0239 = $91 Z0258 = $8D Z0259 = $8E Z0273 =} $92 Z0300 = $90 Z0301 = $93 Z0305 = $A7 Z0306 = $AA Z0308 = $A9 Z0336 = $D4 Z0337 = $D5 Z0354 = $D0 Z0389 = $81 ;E}nd of zero-page equates ORG $39BC LDA #$87 STA L0001 ;$4817 TAX DB $FF STX L0002 ;$4813 INX STX L0003 ;$481A } STX L0004 ;$4815 STX L0005 ;$4816 STX L0006 ;$4818 LDA #$3B STA L0007 ;$4814 LDA #$41 STA L0008 ;$481D LDA #$}53 STA L0009 ;$481E LDA #$4D STA L0010 ;$481F JSR L0011 ;$4675 DB $53,$6F ADC COLAC,X ;$0072 DB $63 ADC ICHID}Z ;$0020 ROR SAVADR+1 ;$0069 JMP (L0012) ;$2065 DB $3D,$20,$00 JSR L0013 ;$A948 L0020 DB $4F STA L0008 ;$481D LD}A #$42 STA L0009 ;$481E LDA #$4A STA L0010 ;$481F JSR L0011 ;$4675 DB $4F,$62 ROR A ADC LOGCOL ;$0063 DB $74 } JSR L0014 ;$6966 JMP (L0012) ;$2065 DB $3D,$20,$00 DB $33 PHA LDA #$4C STA L0008 ;$481D LDA #$53 STA L0009 };$481E LDA #$54 STA L0010 ;$481F JSR L0011 ;$4675 JMP L0015 ;$7369 DB $74 JSR L0014 ;$6966 JMP (L0012) ;$2065 } DB $3D,$20,$00 LSR FMSZPG+5 ;$0048 LDA #$01 STA Z0016 ;$0086 LDA #$F5 STA Z0017 ;$0084 LDA #$48 STA Z0018 ;$00}85 TAX DB $FF STX L0019 ;$48F5 TAX BPL L0020 ;$39FC LSR Z0021 ;$00A8 PHA JSR L0022 ;$4759 BMI L0023 ;$3AA8 } LDA #$41 STA L0008 ;$481D LDA #$53 STA L0009 ;$481E L0041 LDA #$4D STA L0010 ;$481F L0054 LDA #$00 STA L0024 ;$}4819 TAX BMI L0025 ;$39F8 DB $9B LDA #$20 TAY PHA JSR L0026 ;$473D BMI L0023 ;$3AA8 L0038 LDA #$00 STA Z00}27 ;$008F STA L0028 ;$48EB JSR L0029 ;$4768 BMI L0030 ;$3AB8 DB $20,$00,$00 JSR L0031 ;$4363 JSR L0032 ;$4481 B}MI L0023 ;$3AA8 LDA L0024 ;$4819 BNE L0033 ;$3ABC CLC LDA Z0034 ;$0096 ADC Z0035 ;$00A5 STA Z0035 ;$00A5 LDA Z0}036 ;$0097 ADC Z0037 ;$00A6 STA Z0037 ;$00A6 JMP L0038 ;$3A7C L0023 LDX Z0039 ;$009B JSR L0040 ;$4735 TXA SEC }SBC #$10 TAX INX BMI L0041 ;$3A65 DB $F4 BCC L0042 ;$3AC9 L0030 INY DEY BNE L0023 ;$3AA8 L0033 LDX Z0039 ;$00}9B JSR L0040 ;$4735 INX BMI L0043 ;$3A94 EOR (Z0044),Y ;$00C6 STX POKMSK ;$0010 DB $17 L0042 LDY Z0045 ;$009A }BEQ L0046 ;$3AD0 JSR L0047 ;$463F L0046 TAX JSR L0048 ;$3520 DB $47 JSR L0049 ;$42F4 TAX BPL L0050 ;$3AFB AND  }FMSZPG+4,X ;$0047 JMP (DOSVEC) ;$000A TAX JSR L0051 ;$33A9 TAY PHA JSR L0022 ;$4759 BMI L0023 ;$3AA8 LDA #$FF } STA L0052 ;$3864 STA L0053 ;$3865 LDA #$02 STA ICBLL ;$0348 LDA #$00 STA ICBLH ;$0349 STA Z0045 ;$009A LDA # }$0B STA ICCOM ;$0342 LDA #$64 STA ICBAL ;$0344 LDA #$38 STA ICBAH ;$0345 JSR CIOV ;$E456 BMI L0023 ;$3AA8 JMP } L0054 ;$3A6A TXA SBC #$10 STA Z0039 ;$009B LDA L0024 ;$4819 BNE L0033 ;$3ABC JMP L0038 ;$3A7C LDA (CASINI),Y ; }$0002 EOR (FMSZPG+1,X) ;$0044 DB $43 STA (CASINI),Y ;$0002 EOR (DRKMSK,X) ;$004E DB $44,$82,$04 EOR (RMARGN,X) ;$}0053 JMP L0055 ;$01C8 DB $42,$43,$43 CLD ORA (CRITIC,X) ;$0042 DB $43,$53 SED ORA (CRITIC,X) ;$0042 EOR HOLD1} ;$0051 BCC L0056 ;$3B4C DB $42 EOR #$54 TYA ORA (CRITIC,X) ;$0042 EOR L0057 ;$E849 L0056 ORA (CRITIC,X) ;$0042 } LSR L0058 ;$8845 ORA (CRITIC,X) ;$0042 BVC L0059 ;$3BA1 CPY #$01 DB $42,$52 EOR (Z0060,X) ;$0080 BRK DB $42,$}52,$4B TAY ORA (CRITIC,X) ;$0042 LSR FMSZPG,X ;$0043 CLV ORA (CRITIC,X) ;$0042 LSR RMARGN,X ;$0053 STY L0061 ;$}4300 JMP L0062 ;$EC43 BRK DB $43 JMP L0063 ;$AC44 BRK DB $43 JMP L0064 ;$DC49 BRK DB $43 JMP L0065 ;$E156} DB $02,$43 EOR L0066 ;$F050 DB $03,$43 BVC L0067 ;$3BDF CPX #$03 DB $43 BVC L0068 ;$3BE5 DB $FF EOR #$44 } DB $42,$FF LSR A DB $44,$43,$E2,$07,$44 EOR FMSZPG ;$0043 INC LINZBS ;$0000 DB $44 EOR SAVMSC ;$0058 CPY LINZB}S ;$0000 DB $44 L0059 EOR SAVMSC+1 ;$0059 DB $FF,$43,$44,$53,$FF PHA DB $44,$57,$FF,$42 EOR DRKMSK ;$004E DB $44} LDA (CASINI,X) ;$0002 EOR COLRSH ;$004F DB $52,$FF EOR (FMSZPG+2,X) ;$0045 EOR (COLCRS),Y ;$0055 DB $FF EOR FM}SZPG+6 ;$0049 LSR L0069 ;$4C43 EOR FMSZPG+1,X ;$0044 EOR Z0070 ;$00F2 DB $07 EOR #$4E DB $43,$F4 BRK EOR #$4E} CLI CPX LINZBS ;$0000 EOR #$4E EOR L0071,Y ;$0AA0 LSR A EOR L0072 ;$8C50 DB $0B LSR A DB $53,$52 CMP (CA}SINI),Y ;$0002 JMP L0073 ;$4144 DB $D2,$03 JMP L0074 ;$5844 BNE L0075 ;$3BEB JMP L0076 ;$5944 L0075 DB $FF,$44 J}MP L0077 ;$5349 DB $54 LDX #$04 JMP L0078 ;$5253 INC LINZBS,X ;$0000 LSR L0079 ;$504F STA (CASINI,X) ;$0002 DB }$4F,$52 EOR (Z0080,X) ;$00FF RTI DB $4F,$52,$47,$FF,$4B BVC L0081 ;$3C4A DB $47 EOR Z0039 ;$009B DB $9B LSR F}MSZPG+2,X ;$0045 DB $52 EOR L0082,Y ;$4620 EOR DRKMSK,X ;$004E LSR L0083 ;$2059 DB $4F BVC L0084 ;$3C5E DB $4F,}$44 EOR ICHIDZ ;$0020 PLP EOR (CRITIC,X) ;$0042 LSR L0085 ;$524F EOR L0086 ;$4C41 AND #$9B DB $42,$53 CLI D}B $9B EOR (CRITIC,X) ;$0042 DB $53 CLI DB $9B JSR L0087 ;$4228 EOR #$54 DB $32 JSR L0086 ;$4C41 L0100 DB $57} EOR (SAVMSC+1,X) ;$0059 DB $53 JSR L0088 ;$2930 DB $9B,$03 JMP L0089 ;$392B CMP #$21 L0081 BNE L0090 ;$3C4F J }MP L0091 ;$38FF L0090 CMP #$5F BEQ L0092 ;$3C80 CMP #$3B BNE L0093 ;$3C6C LDA Z0094 ;$00A4 BNE L0095 ;$3CA8 LDY !}#$00 LDA (LINZBS),Y ;$0000 DB $3C,$FF,$3B,$FF RTI DB $4F,$52,$47,$54 EOR FMSZPG+1,X ;$0044 EOR Z0017 ;$0084 L009"}3 LDA #$48 STA Z0018 ;$0085 TAX DB $FF STX L0019 ;$48F5 TAX BPL L0096 ;$3C21 LSR Z0021 ;$00A8 PHA JSR L0097#} ;$A459 BRK BVC L0098 ;$3CC9 EOR (Z0017,X) ;$0084 BRK BVC L0099 ;$3CCE BVC L0100 ;$3C3C BRK BVC L0101 ;$3CD7 $} EOR (Z0102,X) ;$0094 BRK BVC L0103 ;$3CDC BVC L0104 ;$3C24 DB $04,$52,$4F JMP L0105 ;$04B2 DB $52,$4F,$52 LDY%} #$00 DB $52,$54 EOR #$B0 BRK DB $52,$54,$53 SBC (CASINI),Y ;$0002 DB $53 L0095 DB $42,$43,$9C BRK DB $53 &}EOR FMSZPG ;$0043 DB $FC BRK DB $53 EOR FMSZPG+1 ;$0044 LDY L0106,X ;$5300 EOR FMSZPG+6 ;$0049 CMP (RAMLO+1,X) '};$0005 DB $53,$54 EOR (Z0107,X) ;$00C2 ASL RMARGN ;$0053 DB $54 CLI CPY #$08 DB $53,$54 EOR L0108,Y ;$47FF (}DB $53 EOR CRITIC,X ;$0042 DB $54 L0099 DB $54 DB $4C,$D6,$00 DB $54 EOR (SAVMSC,X) ;$0058 DB $D4 BRK L0101 D)}B $54 EOR (SAVMSC+1,X) ;$0059 DB $FF LSR ROWCRS ;$0054 EOR #$54 JMP L0110 ;$DE45 BRK DB $54,$53 CLI DEC LIN*}ZBS ;$0000 DB $54 CLI EOR (Z0111,X) ;$00CE BRK DB $54 CLI DB $53 CPY L0112 ;$5400 EOR L0113,Y ;$FF41 DB $+}FF L0123 LDA L0028 ;$48EB BNE L0114 ;$3D00 L0221 LDA #$80 STA Z0115 ;$0095 L0114 CLC RTS TAY BRK JSR L0116 ;$4,}2AD LDA Z0117 ;$009C BEQ L0118 ;$3D15 TAX ORA #$A5 DB $9B STA L0119 ;$48EA DEX BNE L0120 ;$3D0D L0118 JSR L0-}121 ;$42E8 LDA #$00 STA Z0115 ;$0095 STA Z0102 ;$0094 STA Z0034 ;$0096 STA Z0036 ;$0097 LDA #$20 STA Z0122 ;$00.}98 JSR L0121 ;$42E8 CMP #$3B BEQ L0123 ;$3CF7 TAX BMI L0123 ;$3CF7 CMP #$3D BNE L0124 ;$3D45 LDA #$B5 STA Z/}0125 ;$0082 LDA #$3B STA Z0126 ;$0083 INY JSR L0121 ;$42E8 STY Z0127 ;$0099 JMP L0128 ;$3D93 L0124 JSR L0116 ;$40}2AD JSR L0121 ;$42E8 STY Z0127 ;$0099 LDA #$22 STA Z0125 ;$0082 LDA #$3B STA Z0126 ;$0083 TAY BRK L0129 INY 1} LDA (Z0125),Y ;$0082 BPL L0129 ;$3D57 CLC TYA ADC Z0125 ;$0082 STA Z0125 ;$0082 LDA #$00 ADC Z0126 ;$0083 S2}TA Z0126 ;$0083 TAY ORA (Z0130,X) ;$00B1 DB $82 BMI L0131 ;$3D7C TAX DB $FF L0133 INX INY LDA Z0117 ;$009C 3} BEQ L0132 ;$3D8F CMP (Z0125),Y ;$0082 BNE L0129 ;$3D57 BEQ L0133 ;$3D70 L0131 LDA #$4F STA Z0122 ;$0098 LDA #$EA 4} STA Z0134 ;$0087 STA Z0135 ;$0088 STA Z0136 ;$0089 LDA #$03 STA Z0034 ;$0096 TAY BRK RTS L0132 LDA (Z0125),Y5} ;$0082 BPL L0129 ;$3D57 L0128 TAY BRK LDA (Z0125),Y ;$0082 STA Z0134 ;$0087 INY INC Z0034 ;$0096 LDA (Z0125),6}Y ;$0082 BEQ L0137 ;$3DB4 LDY Z0127 ;$0099 CMP #$40 BCC L0138 ;$3DA9 JMP L0139 ;$4010 L0138 JSR L0140 ;$3E1A STY7} Z0127 ;$0099 BCC L0137 ;$3DB4 LDA #$45 STA Z0122 ;$0098 L0137 LDA Z0134 ;$0087 AND #$FC CLC ADC Z0134 ;$0087 8}CLC ADC Z0102 ;$0094 STA Z0134 ;$0087 JMP L0141 ;$45FE L0151 JSR L0142 ;$411C CLC LDA Z0135 ;$0088 SBC Z0035 ;$09}0A5 STA Z0135 ;$0088 BNE L0143 ;$3DD1 DEC Z0136 ;$0089 L0143 LDA Z0136 ;$0089 SBC Z0037 ;$00A6 STA Z0136 ;$0089 :}DEC Z0135 ;$0088 LDA Z0135 ;$0088 ASL A LDA Z0136 ;$0089 ADC #$00 BEQ L0144 ;$3DEC LDA #$20 CMP Z0122 ;$0098 ;}BCC L0144 ;$3DEC LDA #$56 STA Z0122 ;$0098 L0144 CLC RTS L0152 LDA (Z0060),Y ;$0080 CMP #$28 BNE L0145 ;$3E06 D<}B $A9 ORG $3CF5 DB $2C ORG $3DF6 STA Z0102 ;$0094 INY JSR L0142 ;$411C DEY LDA (Z0060),Y ;$0080 CMP #$29 =}BNE L0146 ;$3E63 JMP L0147 ;$3EF8 L0145 JSR L0142 ;$411C JMP L0148 ;$3EB1 L0155 LDA #$01 STA Z0034 ;$0096 BNE L0149>} ;$3E15 L0153 JSR L0142 ;$411C L0149 LDA #$08 JMP L0150 ;$3EF6 L0140 INC Z0034 ;$0096 CMP #$01 BEQ L0151 ;$3DC3 IN?}C Z0034 ;$0096 CMP #$0A BEQ L0152 ;$3DEE CMP #$0B BEQ L0153 ;$3E12 TAX LDA (Z0060),Y ;$0080 INX DB $04 BNE @}L0154 ;$3E43 CMP #$41 BNE L0154 ;$3E43 INY LDA (Z0060),Y ;$0080 CMP #$30 BCC L0155 ;$3E0C CMP #$7B BCS L0155 A};$3E0C DEY BCC L0156 ;$3E4B L0154 CMP #$23 BEQ L0157 ;$3E8D CMP #$28 BEQ L0158 ;$3E65 L0156 JSR L0142 ;$411C LDB}A Z0136 ;$0089 BEQ L0159 ;$3EB9 L0167 LDA (Z0060),Y ;$0080 CMP #$2C BNE L0148 ;$3EB1 INY LDA (Z0060),Y ;$0080 CMC}P #$59 BEQ L0160 ;$3EDE CMP #$58 BEQ L0161 ;$3EB5 L0146 SEC RTS L0158 DEC Z0034 ;$0096 INY JSR L0142 ;$411C LD}DA Z0136 ;$0089 BNE L0146 ;$3E63 DEY LDA (Z0060),Y ;$0080 CMP #$2C BEQ L0162 ;$3EE6 CMP #$29 BNE L0146 ;$3E63 E} INY LDA (Z0060),Y ;$0080 CMP #$2C BNE L0163 ;$3EFA INY LDA (Z0060),Y ;$0080 CMP #$59 BNE L0146 ;$3E63 L0172 LF}DA #$10 JMP L0150 ;$3EF6 L0157 DEC Z0034 ;$0096 INY JSR L0142 ;$411C LDA Z0136 ;$0089 BEQ L0164 ;$3EA9 LDA Z0135G} ;$0088 BPL L0165 ;$3E9F INC Z0136 ;$0089 BEQ L0164 ;$3EA9 L0165 LDA #$20 CMP Z0122 ;$0098 BCC L0164 ;$3EA9 LDA H}#$56 STA Z0122 ;$0098 L0164 INX DB $03 BEQ L0166 ;$3EF4 LDA #$08 BNE L0150 ;$3EF6 L0148 LDA #$0C BNE L0150 ;$3EI}F6 L0161 LDA #$1C BNE L0150 ;$3EF6 L0159 LDA Z0122 ;$0098 CMP #$20 BNE L0167 ;$3E52 DEC Z0034 ;$0096 LDA (Z0060),J}Y ;$0080 CMP #$2C BNE L0168 ;$3EFE INY LDA (Z0060),Y ;$0080 CMP #$58 BNE L0169 ;$3ED2 L0170 LDA #$14 BNE L0150K} ;$3EF6 L0169 CMP #$59 L0173 BNE L0146 ;$3E63 INX DB $03 BEQ L0170 ;$3ECE INX ASL Z0171 ;$00F0 BEQ L0172 ;$3E88L} DB $03 STA Z0034 ;$0096 LDA #$18 BNE L0150 ;$3EF6 L0162 INY LDA (Z0060),Y ;$0080 CMP #$58 BNE L0173 ;$3ED4 M}INY LDA (Z0060),Y ;$0080 CMP #$29 BNE L0173 ;$3ED4 L0166 LDA #$00 L0150 STA Z0102 ;$0094 L0147 CLC RTS L0163 LDA N}#$11 BNE L0150 ;$3EF6 L0168 LDA #$04 BNE L0150 ;$3EF6 L0216 TAY SEI LDA #$20 L0175 STA L0174 ;$4858 DEY BNE L0O}175 ;$3F06 LDY Z0127 ;$0099 DEX BEQ L0176 ;$3F41 DEX BEQ L0177 ;$3F45 DEX BEQ L0178 ;$3F24 DEX BEQ L0179 ;$P}3F60 DEX BEQ L0180 ;$3F5C DEX BNE L0181 ;$3F23 JMP L0182 ;$3FE2 L0181 RTS L0178 JSR L0142 ;$411C LDA Z0135 ;$00Q}88 LDX Z0034 ;$0096 STA L0183 ;$4859 INX LDA Z0136 ;$0089 STA L0183 ;$4859 INX STX Z0034 ;$0096 DEY LDA (Z0R}060),Y ;$0080 INY CMP #$2C BEQ L0178 ;$3F24 BNE L0184 ;$3F94 L0176 LDA #$02 BNE L0185 ;$3F47 L0177 LDA #$01 L018S}5 BIT L0006 ;$4818 BEQ L0186 ;$3F50 LDA Z0016 ;$0086 BNE L0187 ;$3FA3 L0186 TAX LDA L0188 ;$400D ORA L0006,X ;$481T}8 STA L0006,X ;$4818 BNE L0179 ;$3F60 L0180 LDA #$80 BMI L0189 ;$3F62 L0179 LDA #$00 L0189 STA Z0102 ;$0094 TAX U}BRK L0192 LDA (Z0060),Y ;$0080 CMP #$27 BEQ L0190 ;$3FA5 INX SEI BCS L0191 ;$3FB6 JSR L0142 ;$411C LDA Z0135 ;V}$0088 LDX Z0034 ;$0096 STA L0183 ;$4859 INX DEY L0200 STX Z0034 ;$0096 LDA (Z0060),Y ;$0080 INY CMP #$2C BEQW} L0192 ;$3F66 L0199 BIT L0006 ;$4818 BMI L0193 ;$3FBF BVS L0194 ;$3FD5 LDA Z0102 ;$0094 EOR L0174 ;$4858 STA L0174X} ;$4858 L0184 TAX ASL Z0195 ;$00AD CLI PHA STA Z0016 ;$0086 DEX BNE L0196 ;$3F96 STX Z0102 ;$0094 JSR L0197 Y};$45E9 L0187 CLC RTS L0190 INY LDA (Z0060),Y ;$0080 CMP #$27 BEQ L0198 ;$3FBC STA L0183 ;$4859 INX INX SEI Z} BCC L0190 ;$3FA5 STX Z0034 ;$0096 L0191 LDA #$53 STA Z0122 ;$0098 BNE L0199 ;$3F85 L0198 INY BNE L0200 ;$3F7C L0[}193 TAX DB $3C L0202 LDA L0174 ;$4858 STA L0201 ;$478C DEX BNE L0202 ;$3FC1 L0205 STX Z0034 ;$0096 LDA L0006 ;$48\}18 AND #$03 STA L0006 ;$4818 RTS L0194 TAX DB $3C L0204 LDA L0174 ;$4858 STA L0203 ;$47D4 DEX BNE L0204 ;$3FD]}7 BEQ L0205 ;$3FCA L0182 LDA L0002 ;$4813 BEQ L0206 ;$3FEC LDA #$FF STA L0002 ;$4813 L0206 JSR L0207 ;$4001 BCC L^}0208 ;$3FFF JSR L0142 ;$411C LDA Z0136 ;$0089 BNE L0209 ;$400C LDA Z0135 ;$0088 BMI L0209 ;$400C STA L0007 ;$4814_} L0208 CLC RTS L0207 JSR L0121 ;$42E8 CMP #$9B BEQ L0208 ;$3FFF CMP #$3B BEQ L0208 ;$3FFF L0209 SEC L0188 RTS `} DB $82 CMP (Z0044,X) ;$00C6 STX ICBLHZ,Y ;$0029 DB $3F BEQ L0210 ;$4029 TAX DEX BEQ L0211 ;$403F DEX BEQ La}0212 ;$4045 DEX BEQ L0213 ;$4063 DEX BEQ L0214 ;$4075 DEX BEQ L0215 ;$4078 JMP L0216 ;$3F02 L0210 JSR L0142 ;$b}411C LDA Z0135 ;$0088 LDX Z0035 ;$00A5 STA Z0035 ;$00A5 STX Z0135 ;$0088 LDA Z0136 ;$0089 LDX Z0037 ;$00A6 STA c}Z0037 ;$00A6 STX Z0136 ;$0089 INC Z0115 ;$0095 RTS L0211 JSR L0142 ;$411C INC Z0115 ;$0095 RTS L0212 LDA (Z0060),d}Y ;$0080 CMP #$3B BEQ L0217 ;$405F CMP #$9B BEQ L0217 ;$405F JSR L0142 ;$411C LDA Z0135 ;$0088 STA L0218 ;$481Be} LDA Z0136 ;$0089 STA L0219 ;$481C DEC L0003 ;$481A L0217 DB $DA ORA L0220,Y ;$6048 L0213 JSR L0142 ;$411C LDA Z0f}135 ;$0088 STA Z0034 ;$0096 LDA Z0136 ;$0089 STA Z0036 ;$0097 LDA #$FF STA Z0102 ;$0094 RTS L0226 STX Z0039 ;$00g}9B L0214 JMP L0221 ;$3CFC L0215 LDA (Z0060),Y ;$0080 CMP #$7B BCS L0222 ;$408B CMP #$2E BCC L0222 ;$408B STA L022q}B%DOS SYSB*)DUP SYSB$SAUTORUN SYSB$wA65 BA65 DOCB+A65 MACB ASMDEF MACBCHECK MACBDATA MACB DIREC MACB:EXPR MACB NINPUT MACB YOBJECT MACB0eOPCODE MACBPRINT MACBSYMBOLS MACBTEST ASMTESTPGM ASM3 ;$48D7 INY INX INX DB $12 BNE L0215 ;$4078 L0222 LDA #$9B STA L0223 ;$48D7 JSR L0224 ;$46E1 CLC LDA Z003r}9 ;$009B ADC #$10 BMI L0225 ;$40A4 TAX LDA #$D7 TAY PHA JSR L0026 ;$473D BPL L0226 ;$4073 L0225 LDA #$49 Ss}TA Z0122 ;$0098 BNE L0214 ;$4075 L0249 BIT Z0227 ;$008C PHA LDA Z0227 ;$008C CMP #$2B BEQ L0228 ;$40C5 CMP #$2D t} BNE L0229 ;$40D6 SEC LDA Z0230 ;$008A SBC Z0135 ;$0088 STA Z0230 ;$008A LDA Z0231 ;$008B SBC Z0136 ;$0089 JMPu} L0232 ;$40D0 L0228 CLC LDA Z0230 ;$008A ADC Z0135 ;$0088 STA Z0230 ;$008A LDA Z0231 ;$008B ADC Z0136 ;$0089 L023v}2 STA Z0231 ;$008B PLA STA Z0227 ;$008C RTS L0229 PLA STA Z0227 ;$008C LDA Z0135 ;$0088 STA Z0230 ;$008A LDA Zw}0136 ;$0089 STA Z0231 ;$008B RTS L0242 LDA Z0117 ;$009C CMP #$4C BNE L0233 ;$411A LDA Z0234 ;$009D CMP #$4F BNx}E L0233 ;$411A LDA Z0235 ;$009E BEQ L0236 ;$40FA CMP #$57 BNE L0233 ;$411A LDA Z0237 ;$009F BNE L0233 ;$411A L02y}36 SEC RTS L0240 LDA Z0117 ;$009C CMP #$48 BNE L0233 ;$411A LDA Z0234 ;$009D CMP #$49 BNE L0233 ;$411A LDA Z02z}35 ;$009E BEQ L0236 ;$40FA CMP #$47 BNE L0233 ;$411A LDA Z0237 ;$009F CMP #$48 BNE L0233 ;$411A LDA Z0238 ;$00A{}0 BEQ L0236 ;$40FA L0233 CLC RTS L0142 LDA #$00 STA Z0239 ;$0091 L0251 JSR L0121 ;$42E8 LDA #$00 STA Z0227 ;$008|}C STY Z0127 ;$0099 JSR L0116 ;$42AD JSR L0240 ;$40FC BCS L0241 ;$4176 JSR L0242 ;$40E2 BCS L0243 ;$4170 LDY Z01}}27 ;$0099 L0252 JSR L0244 ;$41A7 BCS L0245 ;$415C L0254 LDA (Z0060),Y ;$0080 INY CMP #$2D BEQ L0246 ;$416A L0073 C~}MP #$2B BEQ L0246 ;$416A CMP #$5D BEQ L0247 ;$4182 LDA Z0227 ;$008C BEQ L0248 ;$415B JSR L0249 ;$40AA LDA Z0230} ;$008A STA Z0135 ;$0088 LDA Z0231 ;$008B STA Z0136 ;$0089 L0248 RTS L0245 LDA (Z0060),Y ;$0080 INY CMP #$5B BE}Q L0250 ;$4165 SEC RTS L0250 INC Z0239 ;$0091 JMP L0251 ;$4120 L0246 JSR L0249 ;$40AA JMP L0252 ;$4138 L0243 JSR L}0251 ;$4120 JMP L0253 ;$417D L0241 JSR L0251 ;$4120 LDA Z0136 ;$0089 STA Z0135 ;$0088 L0253 LDA #$00 STA Z0136 ;$00}89 RTS L0247 DEC Z0239 ;$0091 JMP L0254 ;$413D L0261 STY Z0127 ;$0099 JSR L0255 ;$43F8 BCS L0256 ;$41A1 JSR L0257} ;$43DA BIT Z0027 ;$008F BMI L0256 ;$41A1 LDA Z0258 ;$008D STA Z0135 ;$0088 LDA Z0259 ;$008E STA Z0136 ;$0089 L0}260 LDY Z0127 ;$0099 CLC RTS L0256 LDA #$55 STA Z0122 ;$0098 BNE L0260 ;$419D L0244 LDA #$00 STA Z0135 ;$0088 S}TA Z0136 ;$0089 STA Z0117 ;$009C JSR L0116 ;$42AD LDA Z0117 ;$009C BNE L0261 ;$4187 LDA (Z0060),Y ;$0080 CMP #$24} BNE L0262 ;$41FC L0267 INY LDA (Z0060),Y ;$0080 CMP #$67 BCS L0263 ;$41F8 CMP #$61 BCC L0264 ;$41CB SBC #$57 } BCS L0265 ;$41E1 L0264 CMP #$47 BCS L0263 ;$41F8 CMP #$41 BCC L0266 ;$41D7 SBC #$37 BCS L0265 ;$41E1 L0266 CMP }#$3A BCS L0263 ;$41F8 CMP #$30 BCC L0263 ;$41F8 SBC #$30 L0265 ASL Z0135 ;$0088 ROL Z0136 ;$0089 ASL Z0135 ;$008}8 ROL Z0136 ;$0089 ASL Z0135 ;$0088 ROL Z0136 ;$0089 ASL Z0135 ;$0088 ROL Z0136 ;$0089 ORA Z0135 ;$0088 STA Z01}35 ;$0088 JMP L0267 ;$41BC L0263 CLC RTS L0272 SEC RTS L0262 CMP #$25 BEQ L0268 ;$424C CMP #$40 BEQ L0269 ;$42}60 CMP #$2A BEQ L0270 ;$4280 CMP #$27 BEQ L0271 ;$428B CMP #$3A BCS L0272 ;$41FA CMP #$30 BCC L0272 ;$41FA L}0274 CMP #$3A BCS L0263 ;$41F8 CMP #$30 BCC L0263 ;$41F8 SBC #$30 PHA ASL Z0135 ;$0088 ROL Z0136 ;$0089 LDA Z}0136 ;$0089 STA Z0273 ;$0092 LDA Z0135 ;$0088 ASL A ROL Z0273 ;$0092 ASL A ROL Z0273 ;$0092 CLC ADC Z0135 ;$0}088 STA Z0135 ;$0088 LDA Z0273 ;$0092 ADC Z0136 ;$0089 STA Z0136 ;$0089 CLC PLA ADC Z0135 ;$0088 STA Z0135 ;$}0088 LDA #$00 ADC Z0136 ;$0089 STA Z0136 ;$0089 INY LDA (Z0060),Y ;$0080 JMP L0274 ;$4214 L0268 INY LDA (Z0060}),Y ;$0080 CMP #$30 BCC L0263 ;$41F8 CMP #$31 BCC L0275 ;$4259 BNE L0263 ;$41F8 L0275 ROL Z0135 ;$0088 ROL Z0136} ;$0089 JMP L0268 ;$424C L0269 INY LDA (Z0060),Y ;$0080 CMP #$38 L0276 BCS L0263 ;$41F8 CMP #$30 BCC L0263 ;$41F8} SBC #$30 ASL Z0135 ;$0088 ROL Z0136 ;$0089 ASL Z0135 ;$0088 ROL Z0136 ;$0089 ASL Z0135 ;$0088 ROL Z0136 ;$0089} ORA Z0135 ;$0088 STA Z0135 ;$0088 JMP L0269 ;$4260 L0270 INY LDA Z0035 ;$00A5 STA Z0135 ;$0088 LDA Z0037 ;$00A6} STA Z0136 ;$0089 BCS L0276 ;$4265 L0271 INY LDA (Z0060),Y ;$0080 INY CMP #$27 BEQ L0276 ;$4265 STA Z0135 ;$00}88 LDA (Z0060),Y ;$0080 INY CMP #$27 BEQ L0276 ;$4265 STA Z0136 ;$0089 LDA (Z0060),Y ;$0080 INY CMP #$27 BE}Q L0276 ;$4265 LDA #$53 DB $99,$98,$00 JMP L0263 ;$41F8 L0116 TAX BRK L0279 LDA (Z0060),Y ;$0080 L0280 CMP #$7B }BCS L0277 ;$42D3 CMP #$61 BCS L0278 ;$42C1 CMP #$5B BCS L0277 ;$42D3 CMP #$41 BCC L0277 ;$42D3 L0278 INY INX } PHP BCS L0279 ;$42AF STA Z0117 ;$009C INX LDA (Z0060),Y ;$0080 CMP #$3A BCS L0280 ;$42B1 CMP #$30 BCS L0278 };$42C1 L0277 LDA #$00 INX STA Z0039 ;$009B RTS L0282 LDA (Z0060),Y ;$0080 CMP #$9B BEQ L0281 ;$42F2 CMP #$20 }BEQ L0281 ;$42F2 CMP #$7F BNE L0282 ;$42D9 L0283 INY L0121 LDA (Z0060),Y ;$0080 CMP #$20 BEQ L0283 ;$42E7 CMP #$7}F BEQ L0283 ;$42E7 L0281 RTS L0285 RTS L0049 LDA #$F5 STA Z0125 ;$0082 LDA #$48 STA Z0126 ;$0083 L0295 JSR L0284 };$4575 LDA #$00 L0292 STA Z0127 ;$0099 LDA Z0126 ;$0083 LDX Z0125 ;$0082 CPX Z0017 ;$0084 SBC Z0018 ;$0085 BCS L}0285 ;$42F3 DB $20 ORG $420E DB $DA,$43 ORG $4310 LDX Z0127 ;$0099 LDA Z0259 ;$008E JSR L0286 ;$4558 LDA Z025}8 ;$008D JSR L0286 ;$4558 INX BIT Z0027 ;$008F BPL L0287 ;$4326 LDA #$55 STA L0288 ;$396A L0287 INX LDA #$4C } BVC L0289 ;$432D LDA #$47 L0289 STA L0288 ;$396A LDA #$20 TAY DB $02 L0290 INX INY STA L0288 ;$396A LDA (Z01}25),Y ;$0082 BPL L0290 ;$4334 STX Z0127 ;$0099 CLC TYA ADC Z0125 ;$0082 STA Z0125 ;$0082 LDA #$00 ADC Z0126 ;}$0083 STA Z0126 ;$0083 LDA #$00 L0291 CLC ADC #$11 CMP Z0127 ;$0099 BCC L0291 ;$434D CMP #$3F BCC L0292 ;$4301} LDA #$9B STA L0293 ;$396B JSR L0294 ;$44D9 JMP L0295 ;$42FC L0031 LDA L0028 ;$48EB BEQ L0296 ;$43D9 LDX Z0135 ;}$0088 LDY Z0136 ;$0089 LDA Z0115 ;$0095 BNE L0297 ;$4374 LDX Z0035 ;$00A5 LDY Z0037 ;$00A6 L0297 STX Z0258 ;$008D } STY Z0259 ;$008E TAX DB $02 L0299 INX LDA L0298 ;$48E8 STA Z0127 ;$0099 BNE L0299 ;$437A STX Z0300 ;$0090 JS}R L0255 ;$43F8 BCC L0296 ;$43D9 LDA Z0018 ;$0085 STA Z0301 ;$0093 LDY Z0017 ;$0084 L0303 STY Z0273 ;$0092 TAY BR}K LDA (Z0273),Y ;$0092 LDY Z0300 ;$0090 STA (Z0273),Y ;$0092 LDY Z0273 ;$0092 BNE L0302 ;$439F DEC Z0301 ;$0093 }L0302 DEY LDA Z0301 ;$0093 CPY Z0125 ;$0082 SBC Z0126 ;$0083 BCS L0303 ;$438F LDA Z0300 ;$0090 TAY ADC Z0017 ;$}0084 STA Z0017 ;$0084 LDA #$00 ADC Z0018 ;$0085 STA Z0018 ;$0085 L0304 DEY LDA Z0127 ;$0099 STA (Z0125),Y ;$0082} INY DB $03 BNE L0304 ;$43B5 LDA Z0259 ;$008E LSR A PHP TAY DB $02 STA (Z0125),Y ;$0082 LDA Z0258 ;$008D } LSR A DEY STA (Z0125),Y ;$0082 DEY TYA ROR A PLP ROR A LSR A LSR A ORA Z0027 ;$008F SEC ROR A STA} (Z0125),Y ;$0082 L0296 RTS L0257 TAY BRK LDA (Z0125),Y ;$0082 ASL A PHA AND Z0111 ;$00CE STA Z0027 ;$008F PL}A ASL A ASL A ASL A PHP ASL A INY LDA (Z0125),Y ;$0082 ROL A STA Z0258 ;$008D PLP INY LDA (Z0125),Y ;}$0082 ROL A STA Z0259 ;$008E L0316 RTS L0255 LDX Z0017 ;$0084 STX Z0305 ;$00A7 LDA Z0018 ;$0085 STA Z0021 ;$00A8 } TAX SBC Z0016,X ;$0086 LDA #$A9 PHA STA Z0306 ;$00AA STA Z0126 ;$0083 STX Z0125 ;$0082 CPX Z0305 ;$00A7 SBC} Z0021 ;$00A8 BCS L0307 ;$4465 L0320 SEC LDA Z0305 ;$00A7 ADC Z0308 ;$00A9 STA Z0125 ;$0082 LDA Z0021 ;$00A8 ADC} Z0306 ;$00AA ROR A ROR Z0125 ;$0082 STA Z0126 ;$0083 TAY BRK LDA (Z0125),Y ;$0082 BMI L0309 ;$4434 L0311 LDA }Z0125 ;$0082 BNE L0310 ;$442E DEC Z0126 ;$0083 L0310 DEC Z0125 ;$0082 LDA (Z0125),Y ;$0082 BPL L0311 ;$4428 L0309 T}AY DB $03 L0315 LDA (Z0125),Y ;$0082 BMI L0312 ;$4443 CMP Z0127 ;$0099 BCC L0313 ;$444A BNE L0314 ;$446C INY B}CS L0315 ;$4436 L0312 CLC LDA Z0127 ;$0099 BEQ L0316 ;$43F7 BNE L0317 ;$444B L0313 INY L0317 LDA (Z0125),Y ;$0082 }BPL L0313 ;$444A CLC TYA ADC Z0125 ;$0082 LDY Z0126 ;$0083 BCC L0318 ;$4458 INY L0318 CLD TAY BRK BCC L031}9 ;$4466 CMP Z0305 ;$00A7 BCC L0319 ;$4466 STA Z0125 ;$0082 STY Z0126 ;$0083 L0307 RTS L0319 STY Z0306 ;$00AA STA} Z0308 ;$00A9 BCC L0320 ;$4412 L0314 LDA Z0308 ;$00A9 CMP Z0125 ;$0082 LDA Z0306 ;$00AA SBC Z0126 ;$0083 BCS L0307} ;$4465 LDA Z0125 ;$0082 STA Z0305 ;$00A7 LDA Z0126 ;$0083 STA Z0021 ;$00A8 BCC L0320 ;$4412 L0321 RTS L0032 LDA }Z0016 ;$0086 BNE L0321 ;$4480 JSR L0284 ;$4575 LDA Z0122 ;$0098 STA L0288 ;$396A TAX DB $02 LDA Z0115 ;$0095 }BMI L0322 ;$44A9 BNE L0323 ;$449F LDA Z0037 ;$00A6 JSR L0286 ;$4558 LDA Z0035 ;$00A5 JMP L0324 ;$44A6 L0323 LDA Z0}136 ;$0089 JSR L0286 ;$4558 LDA Z0135 ;$0088 L0324 JSR L0286 ;$4558 L0322 LDA Z0034 ;$0096 STA Z0273 ;$0092 BEQ L03}25 ;$44B6 LDA Z0102 ;$0094 BMI L0325 ;$44B6 JSR L0326 ;$45BE L0325 TAX DB $14 JSR L0327 ;$4587 L0330 JSR L0294 ;$}44D9 BMI L0328 ;$44D8 LDA Z0102 ;$0094 BMI L0329 ;$44D6 LDA Z0273 ;$0092 BEQ L0328 ;$44D8 JSR L0284 ;$4575 JSR }L0326 ;$45BE LDA #$9B STA L0288 ;$396A JMP L0330 ;$44BB L0329 LDA #$00 L0328 RTS L0294 LDA L0002 ;$4813 INC L0002 };$4813 CMP L0007 ;$4814 BCC L0331 ;$453A LDA #$20 L0343 STA L0332 ;$47D2 STA L0333 ;$47D1 STA L0334 ;$47D0 LDA #}$00 STA L0002 ;$4813 INC L0004 ;$4815 BNE L0335 ;$44FC INC L0005 ;$4816 L0335 LDA L0004 ;$4815 STA Z0336 ;$00D4 }LDA L0005 ;$4816 STA Z0337 ;$00D5 JSR L0338 ;$D9AA JSR L0339 ;$D8E6 TAY DB $FF L0341 INY DB $B1 ORG $4410 DB} $F3 ORG $4511 STA L0340 ;$47CF BPL L0341 ;$450E AND #$7F STA L0340 ;$47CF TAX BPL L0342 ;$44C7 DB $0B STA }ICCOM ;$0342 LDA #$8C STA ICBAL ;$0344 LDA #$47 STA ICBAH ;$0345 LDA L0001 ;$4817 STA ICBLL ;$0348 LDA #$00 S}TA ICBLH ;$0349 JSR CIOV ;$E456 L0331 TAX BPL L0343 ;$44E6 ORA #$8D DB $42,$03 LDA #$6A STA ICBAL ;$0344 LDA #}$39 STA ICBAH ;$0345 LDA #$51 STA ICBLL ;$0348 LDA #$00 STA ICBLH ;$0349 JMP CIOV ;$E456 L0286 PHA LSR A LSR} A LSR A LSR A SED SEC SBC #$0A ADC #$3A STA L0288 ;$396A INX PLA AND #$0F SEC SBC #$0A ADC #$3A }CLD STA L0288 ;$396A INX RTS L0284 TAX BRK LDA #$20 STA L0288 ;$396A INX INX BVC L0344 ;$4510 INC Z0308,}X ;$00A9 DB $9B STA L0288 ;$396A RTS L0327 TAY BRK LDA (Z0060),Y ;$0080 CMP #$7F BNE L0345 ;$459E TXA TAX } DB $12 L0347 DEX CMP L0346 ;$45AC BCC L0347 ;$4592 LDA L0348 ;$45AD TAX BCS L0349 ;$45A6 L0345 STA L0288 ;$396A} CMP #$9B BEQ L0350 ;$45AB INX L0349 INY INX BVC L0331 ;$453A DB $DE,$60,$00 L0348 DB $02,$07,$14 ORA L0351,X} ;$2B23 DB $33,$3B,$43 PHA EOR #$4A DB $4B JMP L0352 ;$4E4D DB $4F L0326 TAX DB $07 TAY BRK STY Z0301 ;$}0093 LDA Z0134 ;$0087 JSR L0286 ;$4558 DEC Z0273 ;$0092 BEQ L0353 ;$45E8 INC Z0301 ;$0093 LDY Z0301 ;$0093 INY } ASL Z0354 ;$00D0 DB $EF L0356 LDA L0355 ;$485E STA Z0016 ;$0086 DEY BNE L0356 ;$45D5 L0358 LDA L0357 ;$485F STA} L0183 ;$4859 INY CPY Z0273 ;$0092 BCC L0358 ;$45DD L0353 RTS L0197 LDY Z0016 ;$0086 BNE L0359 ;$45FD JSR L0360 ;}$4612 L0362 LDA L0183 ;$4859 JSR L0361 ;$4639 INX CPX Z0034 ;$0096 BNE L0362 ;$45F0 STY Z0045 ;$009A L0359 RTS L}0141 LDY Z0016 ;$0086 BNE L0359 ;$45FD JSR L0360 ;$4612 L0363 LDA Z0134 ;$0087 JSR L0361 ;$4639 INX CPX Z0034 ;$00}96 BNE L0363 ;$4605 STY Z0045 ;$009A L0368 RTS L0360 LDY Z0045 ;$009A BEQ L0364 ;$462C TYA ADC L0052 ;$3864 LDX} L0053 ;$3865 BCC L0082 ;$4620 INX L0082 SEC SBC Z0035 ;$00A5 BNE L0365 ;$4629 CPX Z0037 ;$00A6 BEQ L0366 ;$4636} L0365 JSR L0047 ;$463F L0364 LDA Z0035 ;$00A5 STA L0052 ;$3864 LDA Z0037 ;$00A6 STA L0053 ;$3865 L0366 TAX BRK }RTS L0361 STA L0367 ;$3868 INY BNE L0368 ;$4611 L0047 STX Z0306 ;$00AA DEY TYA PHA LDX L0053 ;$3865 CLC ADC} L0052 ;$3864 STA L0369 ;$3866 BCC L0370 ;$4651 INX L0370 STX L0371 ;$3867 TAX JSR L0372 ;$6838 ADC #$04 STA I}CBLL ;$0348 LDA #$01 BCS L0373 ;$4663 LDA #$00 L0373 STA ICBLH ;$0349 JSR CIOV ;$E456 BMI L0374 ;$4670 LDX Z0306} ;$00AA TAY BRK RTS L0374 BRK NOP JMP (DOSVEC) ;$000A L0011 PLA STA Z0308 ;$00A9 PLA STA Z0306 ;$00AA L037}7 LDA #$0B STA ICCOM ;$0342 TAY ORA (Z0306,X) ;$00AA BRK STX ICBLL ;$0348 STX ICBLH ;$0349 L0376 LDA (Z0308),Y ;}$00A9 BEQ L0375 ;$4698 INY STY Z0273 ;$0092 JSR CIOV ;$E456 LDY Z0273 ;$0092 BNE L0376 ;$468A L0375 INY LDA (Z}0308),Y ;$00A9 DB $99,$A7,$00 INY LDA (Z0308),Y ;$00A9 STA Z0021 ;$00A8 STY Z0273 ;$0092 LDA #$05 STA ICCOM ;$0}342 LDA #$10 STA ICBLL ;$0348 LDA #$00 STA ICBLH ;$0349 LDA #$D7 STA ICBAL ;$0344 LDA #$48 STA ICBAH ;$0345 } JSR CIOV ;$E456 BMI L0377 ;$467B JSR L0224 ;$46E1 TAY DB $FF L0378 INY LDA L0223 ;$48D7 STA (Z0305),Y ;$00A7 }BPL L0378 ;$46C8 CLC LDA Z0273 ;$0092 ADC Z0308 ;$00A9 STA Z0273 ;$0092 DB $B9,$AA,$00 ADC #$00 PHA LDA Z0273} ;$0092 PHA RTS L0224 TAX BRK TAY BRK STX Z0301 ;$0093 BEQ L0379 ;$46F5 L0382 CMP #$3A BNE L0380 ;$46EE D}EX L0380 CMP #$2E BNE L0381 ;$46F4 DEC Z0301 ;$0093 L0381 INY L0379 LDA L0223 ;$48D7 BPL L0382 ;$46E9 LDA Z0301 ;$}0093 BNE L0383 ;$471E LDA #$2E STA L0223 ;$48D7 INY LDA L0008 ;$481D STA L0223 ;$48D7 INY LDA L0009 ;$481E }STA L0223 ;$48D7 INY LDA L0010 ;$481F STA L0223 ;$48D7 INY LDA #$9B STA L0223 ;$48D7 L0383 TXA BNE L0384 ;$473}4 L0386 LDA L0223 ;$48D7 STA L0385 ;$48D9 DEY BPL L0386 ;$4721 LDA #$44 STA L0223 ;$48D7 LDA #$3A STA L0387 ;$}48D8 L0384 RTS L0040 LDA #$0C STA ICCOM ;$0342 JMP CIOV ;$E456 L0026 STY Z0273 ;$0092 PHA JSR L0040 ;$4735 LDA #}$04 L0388 STA ICAX1 ;$034A PLA STA ICBAL ;$0344 LDA Z0273 ;$0092 STA ICBAH ;$0345 LDA #$03 STA ICCOM ;$0342 JM}P CIOV ;$E456 L0022 STY Z0273 ;$0092 PHA LDA #$0C STA ICCOM ;$0342 JSR CIOV ;$E456 LDA #$08 BNE L0388 ;$4745 L0}029 LDX Z0039 ;$009B LDA #$05 STA ICCOM ;$0342 LDA #$64 STA ICBLL ;$0348 LDA #$00 STA ICBLH ;$0349 STA Z0127 ;$}0099 LDA #$00 STA ICBAL ;$0344 STA Z0060 ;$0080 LDA #$38 STA ICBAH ;$0345 STA Z0389 ;$0081 JMP CIOV ;$E456 L02}01 DB $0C JSR L0390 ;$2020 JSR L0390 ;$2020 JSR L0390 ;$2020 JSR L0390 ;$2020 JSR L0390 ;$2020 JSR L0390 ;$2020 } JSR L0390 ;$2020 JSR L0390 ;$2020 JSR L0390 ;$2020 JSR L0390 ;$2020 JSR L0390 ;$2020 JSR L0390 ;$2020 JSR L0390 };$2020 JSR L0390 ;$2020 JSR L0390 ;$2020 JSR L0390 ;$2020 JSR L0390 ;$2020 JSR L0390 ;$2020 JSR L0390 ;$2020 JS}R L0390 ;$2020 JSR L0391 ;$6150 DB $67 ADC ICHIDZ ;$0020 L0340 JSR L0390 ;$2020 L0332 JSR L0392 ;$9B20 JSR L0390 ;$}2020 JSR L0390 ;$2020 JSR L0390 ;$2020 JSR L0390 ;$2020 JSR L0390 ;$2020 JSR L0390 ;$2020 JSR L0390 ;$2020 JSR }L0390 ;$2020 JSR L0390 ;$2020 JSR L0390 ;$2020 JSR L0390 ;$2020 JSR L0390 ;$2020 JSR L0390 ;$2020 JSR L0390 ;$202}0 L0108 JSR L0390 ;$2020 JSR L0390 ;$2020 JSR L0390 ;$2020 JSR L0390 ;$2020 JSR L0390 ;$2020 JSR L0390 ;$2020 DB} $9B,$9B ;External reference equates L0001 = $4817 L0003 = $481A L0004 = $4815 L0005 = $4816 L0006 = $4818 L0007 = $48}14 L0008 = $481D L0009 = $481E L0010 = $481F L0012 = $2065 L0013 = $A948 L0014 = $6966 L0015 = $7369 L0019 = $48F5 L}0024 = $4819 L0025 = $39F8 L0028 = $48EB L0043 = $3A94 L0048 = $3520 L0050 = $3AFB L0051 = $33A9 L0052 = $3864 L0053 }= $3865 L0055 = $01C8 L0057 = $E849 L0058 = $8845 L0061 = $4300 L0062 = $EC43 L0063 = $AC44 L0064 = $DC49 L0065 = $E1}56 L0066 = $F050 L0067 = $3BDF L0068 = $3BE5 L0069 = $4C43 L0071 = $0AA0 L0072 = $8C50 L0074 = $5844 L0076 = $5944 L}0077 = $5349 L0078 = $5253 L0079 = $504F L0083 = $2059 L0084 = $3C5E L0085 = $524F L0086 = $4C41 L0087 = $4228 L0088 }= $2930 L0089 = $392B L0091 = $38FF L0092 = $3C80 L0096 = $3C21 L0097 = $A459 L0098 = $3CC9 L0103 = $3CDC L0104 = $3C}24 L0105 = $04B2 L0106 = $5300 L0110 = $DE45 L0112 = $5400 L0113 = $FF41 L0119 = $48EA L0120 = $3D0D L0139 = $4010 L}0160 = $3EDE L0174 = $4858 L0183 = $4859 L0196 = $3F96 L0203 = $47D4 L0218 = $481B L0219 = $481C L0220 = $6048 L0223 }= $48D7 L0288 = $396A L0293 = $396B L0298 = $48E8 L0333 = $47D1 L0334 = $47D0 L0338 = $D9AA L0339 = $D8E6 L0342 = $44}C7 L0344 = $4510 L0346 = $45AC L0350 = $45AB L0351 = $2B23 L0352 = $4E4D L0355 = $485E L0357 = $485F L0367 = $3868 L}0369 = $3866 L0371 = $3867 L0372 = $6838 L0385 = $48D9 L0387 = $48D8 L0390 = $2020 L0391 = $6150 L0392 = $9B20 ;End o}f external references END L0372 = $6838 L0385 = $48D9 L0387 = $48D8 L0390 = $2020 L0391 = $6150 L0392 = $9B20 ;End oDSGRP LDY #STRMAX LDA #' ' CLRSTR STA DATBUF-1,Y DEY BNE CLRSTR ; LDY TXTPTR DEX BEQ GETTTL DEX BEQ GETSTL !} DEX BEQ DEFWOP DEX BEQ DEFBOP DEX BEQ DEFCOP DEX BNE DATXIT JMP DOEJECT DATXIT RTS ; DEFWOP JSR EVALAB !} LDA VALUE LDX LEN STA DATBUF,X INX LDA VALUE+1 STA DATBUF,X INX STX LEN DEY LDA (TEXTP),Y INY CMP #','!} BEQ DEFWOP BNE EXITWS ; GETTTL LDA #2 BNE TTLS GETSTL LDA #1 TTLS BIT TTLFLG BEQ DOTTL LDX PASSNO BNE IGNTTL!} DOTTL TAX LDA TTLCODE,X ORA TTLFLG STA TTLFLG BNE DEFBOP ; DEFCOP LDA #$80 BMI DEFBEN DEFBOP LDA #0 DEFBEN ST"}A MODE LDX #0 DEFBLP LDA (TEXTP),Y CMP #$27 ;STARTING QUOTE? BEQ QTSTR CPX #STRMAX BCS TOLONG JSR EVALAB LDA V"}ALUE LDX LEN STA DATBUF,X INX DEY ENDBS STX LEN LDA MODE EOR DATBUF-1,X STA DATBUF-1,X LDA (TEXTP),Y INY "} CMP #',' BEQ DEFBLP EXITBS BIT TTLFLG BMI LDTITL BVS LDSTTL EXITWS LDX #6 CPYTXT LDA DATBUF-1,X STA OPCODE-1,X "}DEX BNE CPYTXT STX MODE JSR DATOBJ IGNTTL CLC RTS ; QTSTR INY LDA (TEXTP),Y CMP #$27 ;END QUOTE? BEQ CLQUOT "} STA DATBUF,X INX CPX #STRMAX BCC QTSTR STX LEN ; TOLONG LDA #'S' STA ADRERR BNE EXITBS ; CLQUOT INY BNE E"}NDBS ; LDTITL LDX #60 LDTITA LDA DATBUF-1,X STA TITLE-1,X DEX BNE LDTITA TTLXIT STX LEN LDA #$80 STA ISVAL LD"}A TTLFLG AND #3 STA TTLFLG RTS ; LDSTTL LDX #60 LDSTTA LDA DATBUF-1,X STA SUBTTL-1,X DEX BNE LDSTTA BEQ TTLX"}IT ; DOEJECT LDA CURLINE BEQ ALREADY LDA #$FF STA CURLINE ;FORCE A PAGE EJECT ALREADY JSR IFARG BCC NOARG JSR E"}VALAB LDA VALUE+1 BNE TERROR LDA VALUE BMI TERROR STA LPP NOARG CLC RTS ; IFARG JSR NXTFLD CMP #EOL BEQ NO" }ARG CMP #';' BEQ NOARG ; TERROR SEC RTS ; TTLCODE = *-1 DB $41,$82 RTS ; IFARG JSR NXTFLD CMP #EOL BEQ NO P; ; HANDLE ASSEMBLER DIRECTIVES ; ASSDIR DEC LEN AND #$3F BEQ ASSORG TAX DEX BEQ ASSEQU DEX BEQ ASSEND DE& }X BEQ ASSDEFS DEX BEQ ASSLIST DEX BEQ ASSINCL JMP DSGRP ; ASSORG JSR EVALAB LDA VALUE LDX PC STA PC STX& } VALUE LDA VALUE+1 LDX PC+1 STA PC+1 STX VALUE+1 INC ISVAL RTS ; ASSEQU JSR EVALAB INC ISVAL RTS ; ASSEND& } LDA (TEXTP),Y CMP #';' BEQ NOENDV CMP #EOL BEQ NOENDV JSR EVALAB DEY LDA (TEXTP),Y INY CMP #',' BNE RUNE&}ND LDA VALUE STA INIPT LDA VALUE+1 STA INIPT+1 DEC INIFLG BNE ASSEND ; RUNEND LDA VALUE STA ENTPT LDA VALUE&}+1 STA ENTPT+1 DEC ENTPTF NOENDV DEC ENDFLG RTS ; ASSDEFS JSR EVALAB LDA VALUE STA LEN LDA VALUE+1 STA LEN+1&} LDA #$FF STA MODE RTS ; BMPFIL STX FILE CMTXIT JMP COMMNT ; ASSINCL LDA (TEXTP),Y CMP #'z'+1 BCS ICLXIT CMP&} #'.' BCC ICLXIT STA FNBUF,X INY INX CPX #FNSIZE BNE ASSINCL ; ICLXIT LDA #EOL STA FNBUF,X JSR BLDFNB CLC&} LDA FILE ADC #$10 BMI TMINCF TAX LDA #LOW[FNBUF] LDY #HIGH[FNBUF] JSR OPENIN BPL BMPFIL ; TMINCF LDA #'I' &} STA ADRERR BNE CMTXIT ; ASSLIST EQU CMTXIT ;NOT IMPLEMENTED YET [FNBUF] JSR OPENIN BPL BMPFIL ; TMINCF LDA #'I' $G; ; PROVIDE FOR EXPRESSIONS IN OPERANDS ; MUL16 LDA OPNDL-1,X STA SECVAL LDA OPNDH-1,X STA SECVAL+1 LDA OPNDH-2,X*} PHA LDA OPNDL-2,X TAX LDA #0 STA VALUE STA VALUE+1 LDA #8 STA CNT PLA ML0 JSR MUL1 DEC CNT BNE ML0 ;*} LDA #8 STA CNT TXA ML1 JSR MUL1 DEC CNT BNE ML1 RTS ; MUL1 ASL VALUE ROL VALUE+1 MUL0 ASL A BCC MEX PH*}A CLC LDA VALUE ADC SECVAL STA VALUE LDA VALUE+1 ADC SECVAL+1 STA VALUE+1 PLA MEX RTS ; DIV16 LDA OPNDL-1,*}X STA SECVAL LDA OPNDH-1,X STA SECVAL+1 LDA OPNDL-2,X PHA LDA OPNDH-2,X TAX LDA #0 STA VALUE STA VALUE+1 *} LDA #-16 STA CNT PLA GETSIZ BIT SECVAL+1 BMI DODVS ASL SECVAL ROL SECVAL+1 INC CNT BNE GETSIZ RTS ; DODV*}S PHA LDA CNT AND #$0F STA CNT PLA CMP16 CPX SECVAL+1 BNE CMPX CMP SECVAL CMPX PHP ROL VALUE ROL VALUE+1 *}PLP BCC NOSUB SBC SECVAL PHA TXA SBC SECVAL+1 TAX PLA NOSUB LSR SECVAL+1 ROR SECVAL DEC CNT BPL CMP16 *}RTS ; DOADD CLC LDA OPNDL-2,X ADC OPNDL-1,X STA OPNDL-2,X LDA OPNDH-2,X ADC OPNDH-1,X STA OPNDH-2,X JMP DOOPX*}B ; DOSUB SEC LDA OPNDL-2,X SBC OPNDL-1,X STA OPNDL-2,X LDA OPNDH-2,X SBC OPNDH-1,X STA OPNDH-2,X JMP DOOPXB *} ; DONEG SEC LDA #0 SBC OPNDL-1,X STA OPNDL-1,X LDA #0 SBC OPNDH-1,X STA OPNDH-1,X JMP DOOPXU ; DOOP LDX OPD*}SP CMP #'+' BEQ DOADD CMP #'-' BEQ DOSUB CMP #'!' BEQ DONEG CMP #'*' BEQ DOMUL CMP #'/' BEQ DODIV CMP #* }'%' BEQ DOMOD CMP #'&' BEQ DOAND CMP #'|' BEQ DOOR BNE DOOPXU ; DOOPCX LDX OPDSP LDA VALUE STA OPNDL-2,X *!}LDA VALUE+1 STA OPNDH-2,X DOOPXB DEC OPDSP DOOPXU DEC OPRSP LDX OPRSP LDA OPERS+1,X CLC RTS ; DOMUL JSR MUL16 *"} JMP DOOPCX ; DODIV JSR DIV16 JMP DOOPCX ; DOMOD JSR DIV16 PHA TXA LDX OPDSP STA OPNDH-2,X PLA STA OPNDL-2,*#}X JMP DOOPXB ; DOAND LDA OPNDL-2,X AND OPNDL-1,X STA OPNDL-2,X LDA OPNDH-2,X AND OPNDH-1,X STA OPNDH-2,X JMP *$}DOOPXB ; DOOR LDA OPNDL-2,X ORA OPNDL-1,X STA OPNDL-2,X LDA OPNDH-2,X ORA OPNDH-1,X STA OPNDH-2,X JMP DOOPXB ;*%} ; SYMBOLIC FUNCTION TESTS ; LTEST LDA SYMBOL CMP #'L' BNE NOTM LDA SYMBOL+1 CMP #'O' BNE NOTM LDA SYMBOL+2 *&} BEQ TMATCH CMP #'W' BNE NOTM LDA SYMBOL+3 BNE NOTM ; TMATCH SEC RTS ;CY=1 ; HTEST LDA SYMBOL CMP #'H' BN*'}E NOTM LDA SYMBOL+1 CMP #'I' BNE NOTM LDA SYMBOL+2 BEQ TMATCH CMP #'G' BNE NOTM LDA SYMBOL+3 CMP #'H' BNE*(} NOTM LDA SYMBOL+4 BEQ TMATCH NOTM CLC RTS ; DOFUN LDX OPDSP LDA FUNC CMP #'H' BNE SAVLO LDA OPNDH-1,X STA*)} OPNDL-1,X SAVLO LDA #0 STA OPNDH-1,X BEQ UNEXIT ; LOWFUN LDA #'L' BNE LFXIT ; HIGHFUN LDA #'H' LFXIT STA FUNC **}LDA (TEXTP),Y CMP #'[' BNE NOBMP INY NOBMP LDA #'@' BNE PUSHOP ; CKPAREN LDA (TEXTP),Y INY CMP #'-' ;UNARY MI*+}NUS? BEQ PSHCOM CMP #'[' BEQ PUSHOP RETERR SEC RTS ;ELSE, EXPRESSION ERROR! ; PSHCOM LDA #'!' ;UNARY MINUS ON S*,}TACK PUSHOP LDX OPRSP STA OPERS,X ;PUT NEW OPERATOR ON STACK INC OPRSP JMP EVAL ; UNEST LDX OPRSP BEQ RETERR LD*-}A OPERS-1,X CMP #'[' BEQ UNEXIT CMP #'@' BEQ DOFUN JSR DOOP BCC UNEST RTS ; UNEXIT DEC OPRSP JMP GETOPR ; *.} EVALAB LDA #0 STA OPRSP STA OPDSP ;CLEAR EVALUATION STACKS JSR NXTFLD EVAL STY TXTPTR JSR GETSYM JSR HTEST BCS*/} HIGHFUN JSR LTEST BCS LOWFUN LDY TXTPTR ;NOT A SYMBOLIC FUNCTION JSR PRIMRY BCS CKPAREN LDX OPDSP LDA VALUE *0} STA OPNDL,X LDA VALUE+1 STA OPNDH,X INC OPDSP ; GETOPR LDA (TEXTP),Y INY CMP #'-' BEQ ADDSUB CMP #'+' BEQ *1}ADDSUB CMP #'*' BEQ MULDIV CMP #'/' BEQ MULDIV CMP #'%' BEQ MULDIV CMP #'&' BEQ ANDOP CMP #'|' BEQ OROP *2} CMP #']' BEQ UNEST WRPUP LDX OPRSP BEQ EVDON LDA OPERS-1,X CMP #'[' BEQ EVDON JSR DOOP BCC WRPUP RTS ; EV*3}DON CLC DEC OPDSP BEQ EVNXIT SEC EVNXIT LDA OPNDL STA VALUE LDA OPNDH STA VALUE+1 RTS ; ADDSUB LDX OPRSP S*4}TA OPERS,X ;IF WE NEED TO DO IT NOW BEQ EXIT LDA OPERS-1,X CMP #'[' BEQ EXIT CMP #'@' BEQ EXIT JSR DOOP BCC *5}ADDSUB RTS ; ANDOP LDX OPRSP STA OPERS,X BEQ EXIT LDA OPERS-1,X CMP #'!' BNE EXIT JSR DOOP BCC ANDOP RTS *6} ; EXIT INC OPRSP JMP EVAL ; MULDIV LDX OPRSP STA OPERS,X BEQ EXIT LDA OPERS-1,X CMP #'+' BEQ EXIT CMP #'-' *7} BEQ EXIT CMP #'[' BEQ EXIT CMP #'@' BEQ EXIT JSR DOOP BCC MULDIV RTS ; OROP LDX OPRSP STA OPERS,X BEQ E*8}XIT LDA OPERS-1,X CMP #'!' BEQ ORDOOP CMP #'&' BNE EXIT ORDOOP JSR DOOP BCC OROP RTS ; EVLSYM STY TXTPTR J*9}SR FIND ;GET SYMBOL FROM TABLE BCS UNDFSM ;IF SYMBOL UNDEFINED JSR GETVAL BIT SFLGS BMI UNDFSM LDA SVAL STA VAL*:}UE LDA SVAL+1 STA VALUE+1 EVSXIT LDY TXTPTR CLC RTS ; UNDFSM LDA #'U' STA ADRERR BNE EVSXIT ; ; EVALUATE AN*;} OPERAND EXPRESSION ; PRIMRY LDA #0 STA VALUE STA VALUE+1 STA SYMBOL JSR GETSYM LDA SYMBOL BNE EVLSYM ;IF A SY*<}MBOL WAS FOUND LDA (TEXTP),Y CMP #'$' BNE NOTHEX HEXCVL INY LDA (TEXTP),Y CMP #'f'+1 BCS ENDEXP CMP #'a' BCC*=} NLCHD SBC #'a'-10 BCS HEXDGT ; NLCHD CMP #'F'+1 BCS ENDEXP CMP #'A' BCC NUCHD SBC #'A'-10 BCS HEXDGT ; NUC*>}HD CMP #'9'+1 BCS ENDEXP CMP #'0' BCC ENDEXP SBC #'0' HEXDGT ASL VALUE ROL VALUE+1 ASL VALUE ROL VALUE+1 ASL*?} VALUE ROL VALUE+1 ASL VALUE ROL VALUE+1 ORA VALUE STA VALUE JMP HEXCVL ; ENDEXP CLC RTS ; NOPRIM SEC RTS*@} ; NOTHEX CMP #'%' BEQ ISBIN CMP #'@' BEQ ISOCT CMP #'*' BEQ ISPC CMP #$27 ;QUOTED CHARACTERS BEQ ISQSTR CM*A}P #'9'+1 BCS NOPRIM CMP #'0' BCC NOPRIM DECCVL CMP #'9'+1 BCS ENDEXP CMP #'0' BCC ENDEXP SBC #'0' PHA ASL *B}VALUE ROL VALUE+1 LDA VALUE+1 STA TEMP LDA VALUE ASL A ROL TEMP ASL A ROL TEMP CLC ADC VALUE STA VALUE *C} LDA TEMP ADC VALUE+1 STA VALUE+1 CLC PLA ADC VALUE STA VALUE LDA #0 ADC VALUE+1 STA VALUE+1 INY LDA (*D}TEXTP),Y JMP DECCVL ; ISBIN INY LDA (TEXTP),Y CMP #'0' BCC ENDEXP CMP #'1' BCC SHFTBN BNE ENDEXP SHFTBN ROL *E}VALUE ROL VALUE+1 JMP ISBIN ; ISOCT INY LDA (TEXTP),Y CMP #'7'+1 ENDOCT BCS ENDEXP CMP #'0' ND2OCT BCC ENDEXP *F} SBC #'0' ASL VALUE ROL VALUE+1 ASL VALUE ROL VALUE+1 ASL VALUE ROL VALUE+1 ORA VALUE STA VALUE JMP ISOCT *G}; ISPC INY LDA PC STA VALUE LDA PC+1 STA VALUE+1 BCS ENDOCT ; ISQSTR INY LDA (TEXTP),Y INY CMP #$27 BEQ *H}ENDOCT STA VALUE LDA (TEXTP),Y INY CMP #$27 BEQ ENDOCT STA VALUE+1 LDA (TEXTP),Y INY CMP #$27 BEQ ENDOCT *I} LDA #'S' STA ADRERR JMP ENDEXP ; GETSYM LDX #0 GSYMLP LDA (TEXTP),Y GSLP1 CMP #'z'+1 BCS ENDOPC CMP #'a' BCS *J}STCHAR NOLCOP CMP #'Z'+1 BCS ENDOPC CMP #'A' BCC ENDOPC STCHAR INY CPX #SYMSIZ ;ALLOW 8 CHAR SYMBOLS BCS GSYMLP *K} STA SYMBOL,X INX LDA (TEXTP),Y CMP #'9'+1 BCS GSLP1 CMP #'0' BCS STCHAR ; ENDOPC LDA #0 INX STA SYMBOL-1,*L}X RTS ; SKPTXT LDA (TEXTP),Y CMP #EOL BEQ SKXIT CMP #' ' BEQ SKXIT CMP #TAB BNE SKPTXT SKIPF INY NXTFLD L*M}DA (TEXTP),Y CMP #' ' BEQ SKIPF CMP #TAB BEQ SKIPF SKXIT RTS Q SKXIT CMP #TAB BNE SKPTXT SKIPF INY NXTFLD L(G; ; PROMPT FOR COMMAND INPUT ; PROMPT PLA STA LOWP PLA STA LOWP+1 PRETRY LDA #11 STA ICMD LDY #1 LDX #0 ST.O}X ILEN STX ILEN+1 PMTLP LDA (LOWP),Y BEQ PMTEND INY STY TEMP JSR CIOV LDY TEMP BNE PMTLP ; PMTEND INY LDA .P}(LOWP),Y STA HIGHP INY LDA (LOWP),Y STA HIGHP+1 STY TEMP LDA #5 STA ICMD LDA #FNSIZE-2 STA ILEN LDA #0 .Q}STA ILEN+1 LDA #LOW[FNBUF] STA IBUF LDA #HIGH[FNBUF] STA IBUF+1 JSR CIOV BMI PRETRY JSR BLDFNB LDY #$FF CPFN.R}LP INY LDA FNBUF,Y STA (HIGHP),Y BPL CPFNLP CLC LDA TEMP ADC LOWP STA TEMP LDA LOWP+1 ADC #0 PHA LDA TE.S}MP PHA RTS ; BLDFNB LDX #0 LDY #0 STX TEMP+1 LDA FNBUF BPL BLDFNE DEY KEEPNM INY LDA INF,Y STA FNBUF,Y .T} BMI NOTDFLT CMP #'.' BNE KEEPNM NOTDFLT LDA #EOL STA FNBUF,Y LDY #0 BEQ BLDFNE ; BLDFNL CMP #':' BNE BLDFCP .U} DEX BLDFCP CMP #'.' BNE BLDFND DEC TEMP+1 BLDFND INY BLDFNE LDA FNBUF,Y BPL BLDFNL LDA TEMP+1 BNE GOTEXT LDA .V}#'.' STA FNBUF,Y INY LDA EXTTXT STA FNBUF,Y INY LDA EXTTXT+1 STA FNBUF,Y INY LDA EXTTXT+2 STA FNBUF,Y I.W}NY LDA #EOL STA FNBUF,Y GOTEXT TXA BNE GOTPFX SHFTBF LDA FNBUF,Y STA FNBUF+2,Y DEY BPL SHFTBF LDA #'D' STA .X}FNBUF LDA #':' STA FNBUF+1 GOTPFX RTS E GOTPFX SHFTBF LDA FNBUF,Y STA FNBUF+2,Y DEY BPL SHFTBF LDA #'D' STA ,,; ; PUT CONTENTS OF THE DATA BUFFER INTO THE OBJECT FILE ; DATOBJ LDY PASSNO BNE NOOBJG JSR OBJSET DOLOOP LDA DATBUF2Z},X JSR WRTBYTE ;PUT EACH BYTE INTO THE BUFFER INX CPX LEN ;DONE? BNE DOLOOP STY OBJPTR NOOBJG RTS ; ; PUT THE2[} CONTENTS OF THE MACHINE CODE BUFFER INTO THE OBJECT FILE ; CODOBJ LDY PASSNO BNE NOOBJG JSR OBJSET CODELP LDA OPCODE,2\}X JSR WRTBYTE INX CPX LEN BNE CODELP STY OBJPTR RTS ; ; INSURE THE PC AGREES WITH THE LOCATION BEING LOADED ;2]} OBJSET LDY OBJPTR BEQ NEWSET ;IF NOTHING IN BUFFER TYA CLC ADC OBJBUF LDX OBJBUF+1 ;ELSE COMPARE BUF ADDR AND PC2^} BCC NOBX INX NOBX CMP PC BNE NOTSET CPX PC+1 BEQ SETXIT ;IF NEXT BYTE ADDR MATCHES PC NOTSET JSR WRTOBJ ; NEW2_}SET LDA PC STA OBJBUF LDA PC+1 STA OBJBUF+1 SETXIT LDX #0 WRTXIT RTS ; ; WRITE A BYTE TO THE OBJECT FILE BUFFER ;2`} WRTBYTE STA OBJBUF+4,Y INY BNE WRTXIT ;IF NOT THE END OF THE BUFFER ; ; WRITE A BLOCK OF OBJECT TEXT IN OBJBUF ; 2a}WRTOBJ STX LOWP+1 DEY TYA PHA LDX OBJBUF+1 CLC ADC OBJBUF STA OBJBUF+2 BCC WRTEQL INX WRTEQL STX OBJBUF+3 2b} LDX #OBUNIT SEC PLA ADC #4 STA ILEN,X LDA #1 BCS ZEROPB LDA #0 ZEROPB STA ILEN+1,X JSR CIOV BMI OBJERR 2c} LDA OBJBUF+3 STA OBJBUF+1 LDY OBJBUF+2 INY STY OBJBUF BNE WRTOUT INC OBJBUF+1 WRTOUT LDX LOWP+1 LDY #0 RTS 2d} ; OBJERR BRK NOP JMP ($000A) BJBUF+2 INY STY OBJBUF BNE WRTOUT INC OBJBUF+1 WRTOUT LDX LOWP+1 LDY #0 RTS 0$; ; OPCODE TABLE AND OPERAND EVALUATION ROUTINES ; ; BYTE 0, BASE OPCODE VALUE: BITS 7-3 RIGHT SHIFTED 1 BIT (BIT2 ALWAYS6f} 0) ; BYTE 1, CODE IDENTIFYING VALID OPERAND MODES ; ; 0 -- NO OPERAND ALLOWED ; 1 -- RELATIVE ADDRESSING ; 2 -- XIND6g}, ZP, IMM, ABS, INDY, ZPIND, ZPX, ABSY, ABSX ; 3 -- ZP, IMM, ABS ; 4 -- ZP, ACC, ABS, ZPX, ABSX ; 5 -- XIND, ZP, ABS, I6h}NDY, ZPIND, ZPX, ABSY, ABSX ; 6 -- ZP, ABS, ZPYSP ; 7 -- ZP, ABS, ZPX, ABSX (DEC, INC) ; 8 -- ZP, ABS, ZPX ; 9 -- ZP,6i} ABS (BIT) ; 10 -- ABS, ABSIND (JMP) ; 11 -- (JSR) ; ; DEFINE MODES ; XIND = $00 ZP = $04 ACC = $08 IMM = $08 ABS 6j}= $0C INDY = $10 ZPIND = $11 ZPX = $14 ABSY = $18 ABSX = $1C ; OPS DB $B1,$02,'ADC' DB $91,$02,'AND' DB $82,$04,'A6k}SL' DB $C8,$01,'BCC' DB $D8,$01,'BCS' DB $F8,$01,'BEQ' DB $90,$09,'BIT' DB $98,$01,'BMI' DB $E8,$01,'BNE' DB $86l}8,$01,'BPL' DB $C0,$01,'BRA' DB $80,$00,'BRK' DB $A8,$01,'BVC' DB $B8,$01,'BVS' DB $8C,$00,'CLC' DB $EC,$00,'CLD'6m} DB $AC,$00,'CLI' DB $DC,$00,'CLV' DB $E1,$02,'CMP' DB $F0,$03,'CPX' DB $E0,$03,'CPY' DB $FF,$49,'DB' DB $FF,$46n}A,'DC' DB $E2,$07,'DEC' DB $E6,$00,'DEX' DB $C4,$00,'DEY' DB $FF,$43,'DS' DB $FF,$48,'DW' DB $FF,$42,'END' DB $6o}A1,$02,'EOR' EQCODE DB $FF,$41,'EQU' DB $FF,$45,'INCLUDE' DB $F2,$07,'INC' DB $F4,$00,'INX' DB $E4,$00,'INY' DB $A6p}0,$0A,'JMP' DB $8C,$0B,'JSR' ;VERY FUNNY OPCODE (ABNORMAL) DB $D1,$02,'LDA' DB $D2,$03,'LDX' DB $D0,$03,'LDY' DB $F6q}F,$44,'LIST' DB $A2,$04,'LSR' DB $F6,$00,'NOP' DB $81,$02,'ORA' DB $FF,$40,'ORG' DB $FF,$4B,'PAGE' DB $A4,$00,'PH6r}A' DB $84,$00,'PHP' DB $B4,$00,'PLA' DB $94,$00,'PLP' DB $92,$04,'ROL' DB $B2,$04,'ROR' DB $A0,$00,'RTI' DB $B06s},$00,'RTS' DB $F1,$02,'SBC' DB $9C,$00,'SEC' DB $FC,$00,'SED' DB $BC,$00,'SEI' DB $C1,$05,'STA' DB $C2,$06,'STX' 6t} DB $C0,$08,'STY' DB $FF,$47,'SUBTTL' DB $D6,$00,'TAX' DB $D4,$00,'TAY' DB $FF,$46,'TITLE' DB $DE,$00,'TSX' DB $6u}C6,$00,'TXA' DB $CE,$00,'TXS' DB $CC,$00,'TYA' ENDOPS DB $FF,$FF ; NOTHG LDA LABEL BNE LABONL COMMNT LDA #$80 STA6v} ISVAL LABONL CLC RTS ; GENCODE LDY #0 JSR GETSYM ;LABEL? LDA SYMBOL BEQ NOLBL ;NO DO OPCODE THEN LDX #SYMSIZ+6w}1 SAVLAB LDA SYMBOL-1,X STA LABEL-1,X DEX BNE SAVLAB ; NOLBL JSR NXTFLD ;NEXT, SKIP OVER TO OPCODE LDA #0 STA I6x}SVAL STA MODE STA LEN STA LEN+1 LDA #' ' STA ADRERR JSR NXTFLD CMP #';' ;COMMENT? BEQ NOTHG TAX BMI NOTH6y}G CMP #'=' BNE NOTEQ LDA #LOW[EQCODE] STA TABPTR LDA #HIGH[EQCODE] STA TABPTR+1 INY JSR NXTFLD STY TXTPTR 6z} JMP SPCLOP ; NOTEQ JSR GETSYM JSR NXTFLD STY TXTPTR ; LDA #LOW[OPS-1] STA TABPTR LDA #HIGH[OPS-1] STA TABPTR+6{}1 LDY #0 FINDOP INY LDA (TABPTR),Y BPL FINDOP CLC TYA ADC TABPTR STA TABPTR LDA #0 ADC TABPTR+1 STA TABP6|}TR+1 LDY #1 LDA (TABPTR),Y BMI NOTOPC ;IF NO MATCH IN THE TABLE LDX #$FF OPCPL INX INY LDA SYMBOL,X BEQ TSTEM6}} ;END OF SYMBOL, END OF TABENT? CMP (TABPTR),Y BNE FINDOP BEQ OPCPL ; NOTOPC LDA #'O' STA ADRERR LDA #$EA ;3 NO6~}P INSTRUCTIONS STA OPCODE STA VALUE STA VALUE+1 LDA #3 STA LEN LDY #0 ;CC=ZERO, PLUS (ERROR) RTS ; TSTEM LDA6} (TABPTR),Y BPL FINDOP ;NOT END OF TABLE ENTRY, NO MATCH ; SPCLOP LDY #0 LDA (TABPTR),Y STA OPCODE INY INC LEN 6} LDA (TABPTR),Y BEQ OPNDOK LDY TXTPTR CMP #$40 BCC MACHCD ;IF 6502 INSTRUCTION JMP ASSDIR ; MACHCD JSR RDOPND 6}STY TXTPTR BCC OPNDOK LDA #'E' STA ADRERR OPNDOK LDA OPCODE AND #$FC CLC ADC OPCODE CLC ADC MODE STA OPCOD6}E JMP CODOBJ ; ; ESTABLISH MODE FROM SYNTAX OF OPERAND ; RELJMP JSR EVALAB ;EVALUATE ADDRESS CLC LDA VALUE SBC 6}PC STA VALUE BNE GRELV DEC VALUE+1 GRELV LDA VALUE+1 SBC PC+1 STA VALUE+1 DEC VALUE ; LDA VALUE ASL A LDA6} VALUE+1 ADC #0 BEQ RRELV LDA #' ' CMP ADRERR BCC RRELV LDA #'V' STA ADRERR RRELV CLC RTS ; JMPGRP LDA (TE6}XTP),Y CMP #'(' BNE JABS LDA #$2C ;MODE OFFSET = 2C STA MODE INY JSR EVALAB DEY LDA (TEXTP),Y CMP #')' BN6}E SMERR JSMRET JMP SMXIT ; JABS JSR EVALAB JMP SMABS ; ACCREF LDA #1 STA LEN BNE ACCJ ; JSUB JSR EVALAB ACCJ LD6}A #ACC JMP SMRET ; RDOPND INC LEN CMP #1 ;IF RELATIVE BRANCH, SPECIAL BEQ RELJMP INC LEN CMP #$0A ;IF JUMP, ONL6}Y ABS AND ABSIND ARE ALLOWED BEQ JMPGRP CMP #$0B BEQ JSUB TAX ;SAVE FOR FUTURE REF. STA MODE LDA (TEXTP),Y CP6}X #4 BNE NOACC CMP #'A' BNE NOACC INY LDA (TEXTP),Y CMP #'0' BCC ACCREF CMP #'z'+1 BCS ACCREF DEY BCC G6}OTACH NOACC CMP #'#' BEQ SMIMM CMP #'(' BEQ SMIND GOTACH JSR EVALAB ;EVALUATE ABSOLUTE OPERAND DEY LDA VALUE+1 6} BEQ ZPOPND ABSOPD LDA (TEXTP),Y CMP #',' BNE SMABS INY LDA (TEXTP),Y CMP #'Y' BEQ SMAY CMP #'X' BEQ SMAX S6}MERR SEC ;ELSE, ERROR RTS ; SMIND DEC LEN INY JSR EVALAB LDA VALUE+1 BNE SMERR DEY LDA (TEXTP),Y CMP #','6} BEQ SMINX CMP #')' BNE SMERR INY LDA (TEXTP),Y CMP #',' BNE SZI INY LDA (TEXTP),Y CMP #'Y' BNE SMERR 6} LDA #INDY JMP SMRET ; SMABS LDA #ABS BNE SMRET ; SMAX LDA #ABSX BNE SMRET ; SMZPY CMP #'Y' TSMERR BNE SMERR L6}DX MODE CPX #3 BEQ ZPYSP CPX #6 BEQ ZPYSP ; SMAY LDA #3 STA LEN LDA #ABSY BNE SMRET ; ZPOPND LDA ADRERR C6}MP #' ' BNE ABSOPD DEC LEN LDA (TEXTP),Y CMP #',' BNE SMZP INY LDA (TEXTP),Y CMP #'X' BNE SMZPY ZPYSP LDA 6}#ZPX BNE SMRET ; SMIMM DEC LEN INY JSR EVALAB LDA VALUE+1 BEQ SMIMOK LDA VALUE BPL SMIMBD INC VALUE+1 BEQ6} SMIMOK SMIMBD LDA #' ' CMP ADRERR BCC SMIMOK LDA #'V' STA ADRERR SMIMOK LDX MODE CPX #3 BEQ XYIMM LDA #IMM 6} BNE SMRET ; SMINX INY LDA (TEXTP),Y CMP #'X' BNE TSMERR INY LDA (TEXTP),Y CMP #')' BNE TSMERR XYIMM LDA #XI6}ND SMRET STA MODE SMXIT CLC RTS ; SZI LDA #ZPIND BNE SMRET ; SMZP LDA #ZP BNE SMRET BNE TSMERR XYIMM LDA #XI4a; ; PRINT THE GENERATED CODE/SOURCE LINE ; PRINT JSR CLEAR LDA ADRERR STA PRBUF ; LDX #2 LDA ISVAL BMI NOADDR :} BNE VALADR ; LDA PC+1 JSR PRHEX LDA PC JMP LSTHLF ; VALADR LDA VALUE+1 JSR PRHEX LDA VALUE LSTHLF JSR PRHEX:} ; NOADDR LDA LEN STA TEMP BEQ NODATA LDA MODE BMI NODATA JSR PROBJT ;PRINT 1 TO 6 BYTES OF OBJECT CODE NODATA L:}DX #20 JSR PRSRC EXCODE JSR LIST BMI LINXIT LDA MODE BMI LOKXIT LDA TEMP BEQ LINXIT JSR CLEAR JSR PROBJT L:}DA #EOL STA PRBUF,X JMP EXCODE ; LOKXIT LDA #0 LINXIT RTS ; ; PRINT A FORMATTED LINE TO LISTING DEVICE ; LIST LDA:} CURLINE INC CURLINE CMP LPP ;NUMBER OF LINES/PAGE BCC NONEWP LDA #' ' STA PAGE+3 ;BLANK OUT PAGE NO. STA PAGE+:}2 STA PAGE+1 LDA #0 STA CURLINE ;START OF NEW PAGE INC CURPAGE BNE PAGEOK INC CURPAGE+1 PAGEOK LDA CURPAGE ST:}A FR0 LDA CURPAGE+1 STA FR0+1 JSR IFP JSR FASCII ;CONVERT TO ASCII STRING LDY #$FF PGCPLP INY LDA (INBUFF),Y :}STA PAGE,Y ;COPY TO HEADING BUFFER BPL PGCPLP AND #$7F STA PAGE,Y ; LDX #PRUNIT LDA #11 ;PRINT MULTIPLE LINES :}STA ICMD,X LDA #LOW[TTLINE] STA IBUF,X LDA #HIGH[TTLINE] STA IBUF+1,X LDA TTLLEN STA ILEN,X LDA #0 STA ILEN+1:} JSR CIOV ;WRITE TITLE LINE ; NONEWP LDX #PRUNIT LDA #9 STA ICMD,X ;PRINT A LINE ENDING WITH EOL LDA #LOW[PRBUF] :} STA IBUF,X LDA #HIGH[PRBUF] STA IBUF+1,X LDA #81 STA ILEN,X LDA #0 STA ILEN+1,X JMP CIOV ; ; CONVERT NUMBE:}R TO HEX IN PRINT LINE ; PRHEX PHA LSR A LSR A LSR A LSR A SED SEC SBC #9+1 ADC #'9'+1 STA PRBUF,X INX :} PLA AND #$0F SEC SBC #9+1 ADC #'9'+1 CLD STA PRBUF,X INX RTS ; ; CLEAR THE PRINT LINE ; CLEAR LDX #0 :}CLLP LDA #' ' STA PRBUF,X INX CPX #80 BCC CLLP LDA #EOL STA PRBUF,X RTS ; ; PRINT SOURCE LINE ; PRSRC LDY :}#0 PRSCP LDA (TEXTP),Y CMP #TAB BNE STINBF ; TXA LDX #NTABS NXTTAB DEX CMP TABTAB,X BCC NXTTAB LDA TABTAB+1,:}X TAX BCS PRBMPY STINBF STA PRBUF,X CMP #EOL BEQ GOTEOL INX PRBMPY INY CPX #80 BCC PRSCP GOTEOL RTS ; TABT:}AB DB 0,2,7,20,29 DB 35,43,51,59,67 DB 72,73,74,75,76 DB 77,78,79 NTABS = *-TABTAB ; ; PRINT OUT A CHUNK OF OBJECT :}CODE ; PROBJT LDX #7 LDY #0 STY TEMP+1 OBJPRL LDA OPCODE,Y JSR PRHEX DEC TEMP BEQ HEXIT INC TEMP+1 LDY TEMP+:}1 CPY #6 BNE OBJPRL ; LDOUTB LDA DATBUF-1+6,Y STA OPCODE-1,Y DEY BNE LDOUTB ; PRNX6 LDA DATBUF+6,Y STA DATBUF:},Y INY CPY TEMP BCC PRNX6 ; HEXIT RTS +6,Y STA OPCODE-1,Y DEY BNE LDOUTB ; PRNX6 LDA DATBUF+6,Y STA DATBUF8/; ; SYMBOL TABLE FORMAT: ; ; BYTE 0: FLAGS AND BITS 8 AND 0 OF VALUE ; BIT 7 -- ALWAYS 1 ; BIT 6 -- UND>}EFINED ; BIT 5 -- GLOBAL ; BIT 4 -- VALUE BIT 8 ; BIT 3 -- VALUE BIT 0 ; BITS 2-0 -- ORIG>}IN NUMBER ; ; BYTE 1: BITS 7-1 OF VALUE ; ; BYTE 2: BITS 15-9 OF VALUE ; ; PRINT THE SYMBOL TABLE ; PRTABE RTS ; P>}RSTAB LDA #LOW[SYMTAB] STA TABPTR LDA #HIGH[SYMTAB] STA TABPTR+1 PRTALN JSR CLEAR LDA #0 PRTABL STA TXTPTR LDA TA>}BPTR+1 LDX TABPTR CPX ENDSTAB SBC ENDSTAB+1 BCS PRTABE JSR GETVAL LDX TXTPTR LDA SVAL+1 JSR PRHEX LDA SVAL >} JSR PRHEX INX BIT SFLGS BPL SYMDFD LDA #'U' STA PRBUF,X SYMDFD INX LDA #'L' BVC SYMLCL LDA #'G' SYMLCL ST>}A PRBUF,X LDA #' ' LDY #2 SYMNLP INX INY STA PRBUF,X LDA (TABPTR),Y BPL SYMNLP STX TXTPTR CLC TYA ADC TA>}BPTR STA TABPTR LDA #0 ADC TABPTR+1 STA TABPTR+1 LDA #0 NXTCOL CLC ADC #CWIDTH CMP TXTPTR BCC NXTCOL CMP #>}PRTLEN-CWIDTH BCC PRTABL LDA #EOL STA PRBUF+1,X JSR LIST JMP PRTALN ; ; ADD A SYMBOL AND VALUE TO THE SYMBOL TAB>}LE ; ADDSYM LDA LABEL BEQ OLDSYM LDX VALUE LDY VALUE+1 LDA ISVAL BNE USEVAL LDX PC LDY PC+1 USEVAL STX SVAL >} STY SVAL+1 ; LDX #2 FESYM INX LDA LABEL-3,X STA SYMBOL-3,X BNE FESYM STX SLEN JSR FIND BCC OLDSYM LDA END>}STAB+1 STA TEMP+1 LDY ENDSTAB ;POINT TO END OF SYMBOL TABLE CPFS1 STY TEMP LDY #0 LDA (TEMP),Y ;AND MAKE ROOM FOR >} LDY SLEN ;NEW ENTRY OF SLEN BYTES STA (TEMP),Y LDY TEMP BNE DECFS1 DEC TEMP+1 DECFS1 DEY FSNDCK LDA TEMP+1 ;STAR>}T OF NEW SYMBOL? CPY TABPTR SBC TABPTR+1 BCS CPFS1 ;NO, MOVE ANOTHER BYTE ; LDA SLEN TAY ADC ENDSTAB ;POINT TO>} END OF STA ENDSTAB ;LONGER SYMBOL TABLE LDA #0 ADC ENDSTAB+1 STA ENDSTAB+1 NEWTXT DEY LDA SYMBOL-3,Y STA (TABP>}TR),Y CPY #3 BNE NEWTXT ; ; SAVE VALUE AND FLAGS IN SYMBOL TABLE ENTRY ; PUTVAL LDA SVAL+1 LSR A PHP LDY #2 >}STA (TABPTR),Y LDA SVAL LSR A DEY STA (TABPTR),Y DEY TYA ROR A PLP ROR A LSR A LSR A ORA SFLGS SEC >} ROR A STA (TABPTR),Y OLDSYM RTS ; ; RECOVER VALUE AND FLAGS FROM SYMBOL TABLE ENTRY ; GETVAL LDY #0 LDA (TABPTR),>}Y ;GET FLAGS ASL A PHA AND $CE ;EXTRACT FLAGS STA SFLGS ;AND SAVE THEM PLA ASL A ASL A ASL A ;SAVE BIT 8 >}IN CY PHP ASL A ;PUT BIT 0 INTO CY INY LDA (TABPTR),Y ROL A ;MERGE BITS 0 AND 1-7 STA SVAL PLP INY LDA (T>}ABPTR),Y ROL A ;MERGE BITS 8 AND 9-15 STA SVAL+1 SYMFND RTS ; ; FIND LOCATION FOR A SYMBOL IN THE TABLE ; FIND LDX>} ENDSTAB STX HIGHP LDA ENDSTAB+1 STA HIGHP+1 LDX #LOW[SYMTAB] STX LOWP LDA #HIGH[SYMTAB] STA LOWP+1 STA TABPT>}R+1 STX TABPTR ; CPX HIGHP SBC HIGHP+1 BCS SNFND ; HALVE SEC LDA HIGHP ADC LOWP STA TABPTR LDA HIGHP+1 A>}DC LOWP+1 ROR A ROR TABPTR STA TABPTR+1 LDY #0 LDA (TABPTR),Y BMI GSTRT ;FOUND START OF A SYMBOL NOT1ST LDA TAB>}PTR BNE FBKUP DEC TABPTR+1 FBKUP DEC TABPTR LDA (TABPTR),Y BPL NOT1ST ; GSTRT LDY #3 FCHRLP LDA (TABPTR),Y BMI >}MTCHOK CMP SYMBOL-3,Y ;MATCH? BCC FADVC1 ;TABLE ENT. < SYMBOL BNE FBKUP1 ;TABLE ENT. > SYMBOL INY BCS FCHRLP ; >} MTCHOK CLC LDA SYMBOL-3,Y BEQ SYMFND ;SYMBOL FOUND (CY=0) BNE FADVC2 ; FADVC1 INY FADVC2 LDA (TABPTR),Y BPL FADV>}C1 CLC TYA ADC TABPTR LDY TABPTR+1 BCC FADVNI INY FADVNI CPY HIGHP+1 BCC FADVC3 CMP HIGHP BCC FADVC3 STA>} TABPTR ;SYMBOL NOT FOUND (CY=1) STY TABPTR+1 SNFND RTS ; FADVC3 STY LOWP+1 STA LOWP BCC HALVE ; FBKUP1 LDA LOWP >} CMP TABPTR LDA LOWP+1 SBC TABPTR+1 BCS SNFND ;SYMBOL NOT FOUND (CY=1) LDA TABPTR STA HIGHP LDA TABPTR+1 STA >}HIGHP+1 BCC HALVE WP+1 SBC TABPTR+1 BCS SNFND ;SYMBOL NOT FOUND (CY=1) LDA TABPTR STA HIGHP LDA TABPTR+1 STA < TITLE '6502/65C02 ASSEMBLER' VAL = 1*1 VAL8 = 8*1 VAL9 = 1*8 VAL64 = 8*8 PRUNIT = $10 ;LIST OUTPUT IOCB OBUNIT = $20 ;B}OBJECT FILE IOCB INUNIT = $32/5 ;SOURCE FILE IOCB LIST I PRTLEN = 80 ;PRINT LINE WIDTH BUFLEN = [256+6] ;MAX SIZE OUTPUTB} RECORD CWIDTH = [SYMSIZ]+9 PRF = $1234 ; ORG $4000 LDX #PRUNIT STX PRFILE LDA #LOW[PRF+5] LDY #HIGH[PRF+5] LDB}A [$300+5]*3 END 1,$300+5*6 RF = $1234 ; ORG $4000 LDX #PRUNIT STX PRFILE LDA #LOW[PRF+5] LDY #HIGH[PRF+5] LD@ TAX TXA LDX #2 TITLE $0E,'A TITLE š',$0F ORG $44 ZP1 = $20 ZP2 DS 4 ZP3 DS 1 ; ORG $1000 STRINGF} DC 'THIS' BYTES DB 7,'1',$12,%11001 WORDS DW 1,2 DW 3,4 LIST -L THIS ;IS AN ERROR, SHOULD BE PRINTED ;THIS IS NF}OT, IT SHOULD NOT BE PRINTED ITEMM2 LDA ($40),Y LIST L ;RESTORE LISTING, TWO BYTES HAVE BEEN GENERATED ;F} ITEM LDA #LOW $5678 SUBTTL 'THE REAL SUB-TITLE, BURIED IN THE MIDDLE' TITLE 'AND A SECOND TITLE' PAGE 20 DC F}'THIS IS A STRING WITH LOTS OF STUFF AND ' DC 'WITH THE PARITY BITS TURNED ' LDA (ZP1),Y LDA (ZP1,X) JMP (ZP3F}) JMP (ITEM) LDA (ZP1) STA HIGH[$3412] BRA ITEM LABEL BRA LABEL BEQ NEWLABEL NEWLABEL ADC #3+1 SBCF} #3-1 JMP NEWLABEL-5 TESTEQ=12 ANOTHER = 100 LSR [LABEL-1] PAGE END BADERROR LDA NEWLABEL ;THIS FOLLOWS THE END F}AND SHOULD NOT BE INCLUDED AT ALL ANOTHER = 100 LSR [LABEL-1] PAGE END BADERROR LDA NEWLABEL ;THIS FOLLOWS THE END D#+