** ********************************** ** ** ** 6502 Translator c1982 ** ** ** ** Computer Systems Consultants ** ** E. M. Pass, Ph.D. ** ** 1454 Latta Lane NW ** ** Conyers, GA 30207 ** ** ** ********************************** ** nam x02xlats opt pag ** org $0000 setdp ** lnbufp equ $cc14 line buffer pointer warmst equ $cd03 warm start inchar equ $cd09 basic input character outchr equ $cd0f basic output character inbuff equ $cd1b input into line buffer prcrlf equ $cd24 print crlf getfil equ $cd2d get file specs setext equ $cd33 set extension rpterr equ $cd3f report error fmscls equ $d403 fms close files fmscal equ $d406 fms call fmgnxb equ $00 get next byte fmpnxb equ $00 put next byte fmopni equ $01 open for input fmopno equ $02 open for output fmclsi equ $04 close for input fmclso equ $04 close for output fmrewf equ $05 rewind file fmrdss equ $09 read single sector fmwtss equ $0a write single sector fcfunc equ $00 fcb function code fceror equ $01 fcb error status fcactv equ $02 fcb activity status fcdriv equ $03 fcb drive number fcname equ $04 fcb name fcextn equ $0c fcb extension fccrpo equ $1e fcb current position fccrec equ $20 fcb current record number fcindx equ $22 fcb data index fcbuff equ $40 fcb sector buffer frillg equ 01 illegal fms function code encountered frinus equ 02 the requested file is in use frexis equ 03 the file specified already exists frabsn equ 04 the specified file could not be found frsysd equ 05 system directory error - reboot system frfuld equ 06 the system directory space is full frnosp equ 07 all available disk space has been used frendf equ 08 read past end of file frrder equ 09 disk file read error frwter equ 10 disk file write error frwrpr equ 11 the file or disk is write protected! frprot equ 12 the file is protected - file not deleted frbfcb equ 13 illegal file control block specified frbadr equ 14 illegal disk address encountered frbdrv equ 15 an illegal drive number was specified frdrnr equ 16 drives not ready frflpr equ 17 the file is protected - access denied frsyss equ 18 system file status error frdtix equ 19 fms data index range error frfmse equ 20 fms inactive - reboot system frilfl equ 21 illegal file specification frsysc equ 22 system file close error frsmap equ 23 sector map overflow - disk too segmented frbrno equ 24 nonexistent record number specified frbfil equ 25 record number match error - file damaged frsntx equ 26 command syntax error - retype command frprnt equ 27 that command is not allowed while printing frhard equ 28 wrong hardware configuration exttxt equ $01 .txt * ASCII constant mnemonics null equ $00 null cancel equ $03 cancel eot equ $04 eot bell equ $07 bell tab equ $09 tab cr equ $0d cr eof equ $1b esc space equ $20 space exclam equ $21 exclamation dquote equ $22 double quote pound equ $23 pound dollar equ $24 dollar percnt equ $25 percent ampers equ $26 ampersand quote equ $27 quote lparen equ $28 left parenthesis rparen equ $29 right parenthesis asters equ $2a asterisk plus equ $2b plus comma equ $2c comma minus equ $2d minus period equ $2e period slash equ $2f slash fnumbr equ $30 0 lnumbr equ $39 9 colon equ $3a colon semico equ $3b semicolon less equ $3c less than equal equ $3d equal greatr equ $3e greater quest equ $3f question at equ $40 at flettr equ $41 a llettr equ $5a z lbrack equ $5b left bracket rslash equ $5c rslash rbrack equ $5d right bracket uarrow equ $5e up arrow under equ $5f underline fsletr equ $61 a lsletr equ $7a z lbrace equ $7b left brace vrtbar equ $7c vertical bar rbrace equ $7d right brace tilde equ $7e tilde delete equ $7f delete ** clrsc1 equ $1a clear screen 1 clrsc2 equ $80 clear screen 2 clrsc3 equ $80 clear screen 3 ** start bra begin starting addr vn fcb $00 version number ** warms jmp warmst warm start ineee jmp inchar input 1 char to a outee jmp outchr output 1 char from a pcrlf jmp prcrlf print crlf rptero jmp rpterr report error inbufr jmp inbuff input to flex line buffer getfsp jmp getfil get file specs setxtn jmp setext set file extension fmsclo jmp fmscls fms close fms jmp fmscal fms call bufptr fdb lnbufp line buffer pointer ** begin leas mystk,pcr initialize lbsr xcrlf print heading leax idlin,pcr lbsr xpdat lda vn,pcr adda #$30 lbsr xoute helpyu lbsr xcrlf lbsr xpdat tst ,x bne helpyu lbsr xcrlf bsr diskd get names and process lbra exits exit on error ** diskd lbsr xcrlf input file leax disim,pcr lbsr xpdat leax fcbi,pcr lbsr inbufr get input file name ldx bufptr,pcr lda [,x] cmpa #$0d lbeq exits exit if no input leax fcbi,pcr point to input fcb lbsr getfsp lbcs exits lda #exttxt set ".txt" as default extension lbsr setxtn leax fcbi,pcr lda #fmopni open file sta ,x lbsr fms beq dikni check error lbra rptero dikni lbsr xcrlf output file leax disom,pcr lbsr xpdat leax fcbo,pcr lbsr inbufr get output file name ldx bufptr,pcr lda [,x] cmpa #$0d lbeq exits exit if no input leax fcbo,pcr point to input fcb lbsr getfsp lbcs exits lda #exttxt set ".txt" as default extension lbsr setxtn leax fcbo,pcr lda #fmopno open file sta ,x lbsr fms beq dikno check error lbra rptero dikno lbsr xcrlf control file leax discm,pcr lbsr xpdat leax fcbc,pcr lbsr inbufr get control file name ldx bufptr,pcr lda [,x] cmpa #$0d lbeq exits exit if no input leax fcbc,pcr point to input fcb lbsr getfsp lbcs exits lda #exttxt set ".txt" as default extension lbsr setxtn leax fcbc,pcr lda #fmopni open file sta ,x lbsr fms beq diknc check error lbra rptero diknc lbsr xcrlf lbsr lmacro load macro names lbsr xcrlf bsr proces process input file dikoc leax fcbo,pcr close output file lda #fmclso sta ,x lbsr fms beq exits lbsr rptero exits lbsr fmsclo close files lbra warms return to flex ** proces ldd #((eot<<8)+eot) process input data leax labela,pcr std ,x stx buffl,pcr leax blan1a,pcr std ,x stx buff1,pcr leax opcoda,pcr std ,x stx buffc,pcr leax blan2a,pcr std ,x stx buff2,pcr leax operna,pcr std ,x stx buffo,pcr leax blan3a,pcr std ,x stx buff3,pcr leax commna,pcr std ,x stx buffn,pcr leax origln,pcr std ,x stx buffg,pcr clr astfl,pcr clear asterisk flag procnx lbsr inchrt get a char cmpa #eof check for eof bne procn9 leax litend,pcr ending text lbsr otstrn lbra procex exit procn9 cmpa #space check for comment bls proce1 cmpa #dollar beq proce1 cmpa #period beq proce1 cmpa #fnumbr blo procas cmpa #lnumbr bls proce1 cmpa #equal beq proce1 cmpa #flettr blo procas cmpa #llettr bls proce1 cmpa #fsletr blo procas cmpa #lsletr bls proce1 procas lda #asters force asterisk proce0 lbsr otchrt output comment line lbsr inchrq cmpa #space bpl proce0 proc0a lbsr otchrt lbra proces go back for next line proce1 ldx buffl,pcr check special chars prce1a cmpa #space bls proce2 cmpa #equal beq proce2 prce1c cmpa #dollar beq prce1e sta ,x+ prce1e lbsr inchrt pshs a lda -$01,x check for colon cmpa #colon puls a bne prce1a ldb #space change to space stb -$01,x proce2 stx buffl,pcr put eot on end ldb #eot stb ,x proce3 ldx buff1,pcr check spaces cmpa #equal check for equal bne prce3a ldb #space stb ,x+ bra proce4 prce3a cmpa #space check spaces bne proce4 sta ,x+ lbsr inchrt bra prce3a proce4 stx buff1,pcr put eot on end ldb #eot stb ,x ldb labela,pcr check for blank label cmpb #space bhs proce5 cmpa #space check for comment bls proce5 cmpa #dollar beq proce5 cmpa #asters beq proce5 cmpa #period beq proce5 cmpa #fnumbr lblo procas cmpa #lnumbr bls proce5 cmpa #equal beq proce5 cmpa #flettr lblo procas cmpa #llettr bls proce5 cmpa #fsletr lblo procas cmpa #lsletr bls proce5 lbeq procas proce5 ldx buffc,pcr check special chars cmpa #asters bne prce5a sta ,x+ lbsr inchrt prce5a cmpa #equal bne prce5b sta ,x+ bra proce6 prce5b cmpa #space check special chars bls proce6 prce5c cmpa #dollar beq prce5e sta ,x+ prce5e lbsr inchrt pshs a lda -$01,x check for colon cmpa #colon puls a bne prce5b proce6 stx buffc,pcr put eot on end ldb #eot stb ,x stb $01,x ldb -$01,x cmpb #colon check for colon bne proce7 ldb #space stb -$01,x clear colon leax opcoda,pcr point to label and opcode leau labela,pcr pshs a prce6c ldb ,x+ copy to eot cmpb #eot beq prce6e prce6d stb ,u+ bra prce6c prce6e stb ,u stu buffl,pcr ldd #((eot<<8)+eot) leax opcoda,pcr clear old areas std ,x stx buffc,pcr leax blan1a,pcr std ,x stx buff1,pcr puls a lbra proce3 proce7 ldx buff2,pcr check spaces cmpa #equal bne prce7a lda #space sta ,x+ lbsr inchrt cmpa #space beq prce7b prce7a cmpa #space bne proce8 sta ,x+ prce7b lbsr inchrt bra prce7a proce8 stx buff2,pcr put eot on end ldb #eot stb ,x proce9 cmpa #space check special chars lbls procea prce9a cmpa #quote check for quoted string beq prce9b cmpa #dquote bne prce9w prce9b ldx buffo,pcr prce9c stx xaddr,pcr store quote sta ,x+ stx buffo,pcr prce9d lbsr inchrq cmpa #space check for end blo prce9z ldx buffo,pcr store it sta ,x+ stx buffo,pcr cmpa [xaddr,pcr] check for end string bne prce9d bra prce9y prce9w ldx buffo,pcr store it sta ,x+ stx buffo,pcr cmpa #plus check for plus beq prce9x cmpa #minus check for minus beq prce9x cmpa #asters check for asterisk bne prce9y prce9x sta astfl,pcr set flag prce9y lbsr inchrt lbra proce9 prce9z ldx buffo,pcr store quote ldb [xaddr,pcr] stb ,x+ stx buffo,pcr procea ldx buffo,pcr put eot on end ldb #eot stb ,x proceb ldx buff3,pcr check spaces prceba cmpa #space bne procec sta ,x+ lbsr inchrt bra prceba procec stx buff3,pcr put eot on end ldb #eot stb ,x proced ldx buffn,pcr check for cr prceda cmpa #space blo procee sta ,x+ lbsr inchrq bra prceda procee stx buffn,pcr put eot on end sta ,x+ ldb #eot stb ,x lda operna+1,pcr cmpa #space check for controls bls procep lda operna,pcr cmpa #pound check for # (immediate) beq procep bra procei proceg ldx buffc,pcr fix dir ldb #eot std ,x+ move z stx buffc,pcr proceh clr operna,pcr clear old location bra procep procei cmpa #$3c check for < (direct) bne procej lda #$5a z bra proceg procej cmpa #$3e check for > (extended) beq proceh procep leax opcoda,pcr make opcode upper-case proceq lda ,x+ cmpa #eot beq procer cmpa #asters * beq procet cmpa #equal = beq procet cmpa #under _ bls proceq anda #$5f sta -$01,x bra proceq procer ldd operna,pcr check for accum anda #$5f cmpd #$4104 bne procet leax -$01,x std ,x++ stx buffc,pcr clr operna,pcr clear original * procet leax origln,pcr output line as comment ldd #((eot<<8)+eot) eot,eot std [buffg,pcr] stx buffg,pcr reset address lda origln,pcr get first char on line cmpa #space blo proc02 do not print null line leax -$02,x ldd #((asters<<8)+greatr) asterisk,greater std ,x lbsr otstrn print line * proc02 leay opcoda,pcr check for . and = and ( lda ,y check for period cmpa #period period lbeq proc2c cmpa #equal lbeq proc2k cmpa #asters lbeq proc2l leau operna,pcr lda ,u skip null bne proc20 leau $01,u lda ,u proc20 cmpa #equal bne proc2a lda #pound sta ,u immediate lbra proc2p proc2a cmpa #lparen ( lbne proc2p ldx buffo,pcr lda ,-x check for ) and y cmpa #rparen ) bne proc2b clr ,u clear ( clr ,x clear ) ldu #$5804 x,eot pshs x ldx buffc,pcr stu ,x+ stx buffc,pcr puls x ldd -$02,x check for ,x cmpa #comma lbne proc2p andb #$5f cmpb #$58 x lbne proc2p lda #eot sta -$02,x clear ,x lbra proc2p proc2b anda #$5f cmpa #$59 y lbne proc2p ldu #$5904 y,eot pshs x ldx buffc,pcr stu ,x+ stx buffc,pcr puls x clr ,x clear y lda -$01,x check for ,y cmpa #comma lbne proc2p clr -$01,x clear , lbra proc2p proc2c clr ,y clear period lda $01,y check for b,c,w,d cmpa #$42 b bne proc2d ldu #$4643 byte->fcb stu ,y ldu #$4204 stu $02,y lbra proc2x proc2d cmpa #$43 c bne proc2e ldu #$4643 char->fcc stu ,y ldu #$4304 stu $02,y lbra proc2x proc2e cmpa #$57 w bne proc2g tst optonH,pcr check option H bne proc2f ldu #$574f word->word stu ,y ldu #$5244 stu $02,y ldb #eot stb $04,y lbra proc2x proc2f ldu #$4644 word->fdb stu ,y ldu #$4204 stu $02,y lbra proc2x proc2g cmpa #$44 d lbne proc2x proc2h ldu #$4644 dbyte->fdb stu ,y ldu #$4204 stu $02,y lbra proc2x proc2k ldu #$4551 equ stu ,y ldu #$5504 stu $02,y lbra proc2x proc2l cmpa #asters bne proc2p lda $01,y cmpa #equal bne proc2k leax litorg,pcr output org and operand lbsr otstrn leax operna,pcr lbsr otstrn leax litcre,pcr lbsr otstrn lda labela,pcr check for blank label cmpa #space bls proc2m leax labela,pcr output label equ * lbsr otstrn leax litequ,pcr lbsr otstrn proc2m lbra proces no other output proc2p ldu $03,y check opcode suffix cmpu #$5a04 z,eot bne proc2q clr $03,y clear z bra proc2x proc2q cmpu #$5954 yt bne proc2x ldu ,y cmpu #$4442 db lbeq proc2h dbyte=>fdb proc2x equ * * procew lbsr lookup find 6502 opcode in table tsta check success of search bne procww leax warnin,pcr warn about non-hit in table lbsr otstrn clr astfl,pcr clear asterisk flag lbra procw9 output original line procww tstb check for pseudo-opcode lbeq procw8 pseudo-opcode output tst fopcd,pcr check first time bne procw0 inc fopcd,pcr set switch leax litsta,pcr output start label lbsr otstrn procw0 tst astfl,pcr check asterisk flag beq procw1 leax warast,pcr warn about asterisk lbsr otstrn procw1 leax labela,pcr output label lda ,x check for blank label cmpa #space bls procw2 lbsr otstrn label equ * leax litequ,pcr lbsr otstrn procw2 lbsr inchlc get line from control file cmpa #eof check for eof lbeq procwp cmpa #space check for last line blo procw2 lbne procwp leax origln+1,pcr point to control line leau option-space,pcr point to options ldb #$03 three option switches procw3 lda ,x+ cmpa #eof check for eof lbeq procwp cmpa #space blo procw2 beq procw4 tst a,u check option beq procw2 procw4 decb bne procw3 clr astfl,pcr clear asterisk flag lda ,x check for asterisk cmpa #asters * bne procw5 sta astfl,pcr set asterisk flag procw5 lda ,x+ cmpa #eof check for eof lbeq procwp cmpa #space bhs procw6 check for eol lda #cr lbsr otchrt output cr bra procw2 procw6 cmpa #under check for _ bne procw7 tst astfl,pcr check asterisk flag bne procw7 pshs x leax operna,pcr output operand lbsr otstrn puls x bra procw5 procw7 pshs x lbsr otchrt output a char puls x bra procw5 procw8 tst fcbc+fccrpo,pcr check track number beq procw9 leax labela,pcr output converted line lbsr otstrn leax blan1a,pcr lbsr otstrn leax opcoda,pcr lbsr otstrn leax blan2a,pcr lbsr otstrn leax operna,pcr lbsr otstrn leax commna,pcr lbsr otstrn bra procwa procw9 leax origln,pcr output original line lbsr otstrn procwa tst astfl,pcr check asterisk flag beq procwp leax warast,pcr warn about asterisk lbsr otstrn procwp lbra proces go back for next line procex rts exit ** lmacro leay opcodt,pcr point to opcode table leax holdit,pcr ask user to wait lbsr xpdat lbsr xcrlf crlf lmacr1 lbsr inchlc get next line cmpa #eof check for eof beq lmacr9 cmpa #asters asterisk bne lmacr4 cmpb #equal bne lmacr1 leax origln+2,pcr output to cr lmacr2 lda ,x+ cmpa #space blo lmacr3 lbsr xoute bra lmacr2 lmacr3 lbsr xcrlf crlf bra lmacr1 lmacr4 cmpa #space check for header bls lmacr1 tfr y,u make entry in opcode table ldx #$0000 stx ,u++ stx ,u++ clr ,u+ leax origln,pcr lmacr5 lda ,x+ cmpa #space bls lmacr6 sta ,y+ bra lmacr5 lmacr6 tfr u,y ldd fcbc+fccrpo,pcr get track/sector std ,y++ lda fcbc+fcindx,pcr get byte sta ,y+ bra lmacr1 lmacr9 sty opcda,pcr set end pointer ldd #$ffff std ,y++ std ,y++ std ,y++ std ,y leax askopt,pcr ask for options lbsr xpdat lbsr xcrlf crlf leax askabc,pcr abc lbsr xpdat lbsr xinee anda #$5f cmpa #$41 a blo lmacra cmpa #$43 c bls lmacrb lmacra lda #$43 c lmacrb leax option-space,pcr inc a,x cmpa #$43 c bne lmacrc inc optonF,pcr c=>f bra lmacrf lmacrc lbsr xcrlf crlf leax askdef,pcr def lbsr xpdat lbsr xinee anda #$5f cmpa #$44 d blo lmacrd cmpa #$45 f bls lmacre lmacrd lda #$45 f lmacre leax option-space,pcr inc a,x lmacrf lbsr xcrlf crlf leax askhij,pcr hij lbsr xpdat lbsr xinee anda #$5f cmpa #$48 h blo lmacrg cmpa #$4a j bls lmacrh lmacrg lda #$48 h lmacrh leax option-space,pcr inc a,x inc option,pcr lbsr xcrlf crlf leax holdit,pcr ask user to wait lbsr xpdat lbsr xcrlf crlf leax litopt,pcr options lbsr otstrn tst optonH,pcr check for macros bne lmacrs leax litmac,pcr macro library lbsr otstrn lmacrs leax fcbc,pcr close and re-open the file lda #fmclsi sta ,x lbsr fms beq lmacrt lbsr rptero lmacrt leax fcbc,pcr lda #fmopni sta ,x lbsr fms beq lmacrx lbsr rptero lmacrx rts exit ** lookup leax opcoda,pcr look up 6502 opcode leay workar,pcr looku0 lda ,x+ move to work area cmpa #space bls looku2 sta ,y+ bra looku0 looku2 ldd #$0000 std ,y++ std ,y++ std ,y leay opcods,pcr point to table ldx workar,pcr get opcode ldu workar+2,pcr ldd workar+4,pcr looku3 cmpx ,y check opcode against table entry bne looku6 cmpu $02,y bne looku6 cmpa $04,y bne looku6 ldd $05,y get track/sector std fcbc+fccrpo,pcr store into fcb lda $07,y get byte sta fcbc+fcindx,pcr store into fcb bne looku4 inca looku4 pshs a,b save the data tstb beq looku5 leax fcbc,pcr point to control file lda #fmrdss read single sector sta ,x lbsr fms beq looku5 lbsr rptero clr ,s force failure looku5 puls a,b,pc get data back and exit looku6 leay $08,y increment to next entry cmpy opcda,pcr check against end blo looku3 clra failure rts exit ** otchrt leax fcbo,pcr output a char pshs a lda #fmpnxb sta ,x puls a lbsr fms beq outchx lbsr rptero lbra dikoc exit on error outchx rts ** otstrn lda ,x+ output string to disk beq otstrn cmpa #eot beq otstrx pshs x bsr otchrt puls x bra otstrn otstrx rts exit ** inchrc pshs b,x input a char from control clrb leax fcbc,pcr point to control fcb bra inchrr inchrt pshs b,x input a char clrb bra inchru inchrq pshs b,x input a char ldb #$ff inchru leax fcbi,pcr inchrr stb inflg,pcr set flag inchrv lda #fmgnxb sta ,x lbsr fms bne inchen anda #$7f beq inchrv cmpa #cr beq inchne cmpa #delete beq inchrv cmpa #tab bne inchet lda #space change to space bra inchne inchet cmpa #space blo inchrv bra inchne inchen lda $01,x check eof cmpa #frendf beq inchef lbsr rptero inchef lda #eof eof inchne ldx buffg,pcr save the line sta ,x+ stx buffg,pcr inchrx puls b,x,pc return ** inchlc pshs x,y get line leax origln,pcr stx buffg,pcr clr ,x inchl1 bsr inchrc get a char cmpa #space bhs inchl1 ldb #eot cmpa #eof bne inchl2 std origln,pcr bra inchl3 inchl2 lda #cr inchl3 std [buffg,pcr] ldd origln,pcr get first two bytes inchlx puls x,y,pc ** xinee lbsr ineee input one char into a cmpa #cancel check ctrl-c bne xinef lbra exits exit program xinef rts xpdaa bsr xoute print to eot from a then x xpdat lda ,x+ print to eot from x beq xpdat anda #$7f cmpa #eot bne xpdaa rts xouts lda #space print 1 space xoute pshs b,x print char in a lbsr outee output to console puls b,x,pc xcrlf pshs x print crlf lbsr pcrlf puls x,pc ** idlin fcb clrsc1,clrsc2,clrsc3,$80,$80,$80,$80 fcc "CSC 6502 Translator V1." fcb eot,null,eot,eot fcc "This program translates 6502 source text" fcb eot fcc " into 6809 source text. (C1982)." fcb eot fcc "Three text files are involved in this " fcc "process, as follows:" fcb eot fcc " Input - contains text to be processed," fcb eot fcc " Output - receives text after processing." fcb eot fcc " Macros - controls translation process." fcb eot,null disim fcc "Input file name " fcb bell,eot disom fcc "Output file name " fcb bell,eot discm fcc "Control file name " fcb bell,eot holdit fcc "Please Wait." fcb bell,eot litopt fcc " TTL " fcb cr fcc " OPT PAG,EXP" fcb cr fcc " SETDP" fcb cr,eot litmac fcc " LIB X02MACLB" fcb cr,eot litorg fcc " ORG " fcb eot litsta fcc "startr" litequ fcc " EQU *" litcre fcb cr,eot litend fcc " LIB X02SUBLB" fcb cr,eot askopt fcc "Enter option selections (default cfh)" fcb bell,eot askabc fcc "a/b/c " fcb bell,eot askdef fcc "d/e/f " fcb bell,eot askhij fcc "h/i/j " fcb bell,eot warnin fcc "*Warning: Unknown 6502 Op-Code" fcb cr,eot warast fcc "*Warning: Check */+/- in Operand" fcb cr,eot ** inflg fcb $00 input routine flag fopcd fcb $00 first opcode flag astfl fcb $00 asterisk flag buffl fdb $0000 labela pointer buff1 fdb $0000 blanks1 pointer buffc fdb $0000 opcoda pointer buff2 fdb $0000 blanks2 pointer buffo fdb $0000 operna pointer buff3 fdb $0000 blanks3 pointer buffn fdb $0000 commna pointer buffg fdb $0000 original line pointer opcda fdb $0000 opcode end pointer baddr fdb $0000 address temps iaddr fdb $0000 . xaddr fdb $0000 . option rzb 96 option switches optonA equ option+33 option A optonB equ option+34 option B optonC equ option+35 option C optonD equ option+36 option D optonE equ option+37 option E optonF equ option+38 option F optonG equ option+39 option G optonH equ option+40 option H optonI equ option+41 option I optonJ equ option+42 option J labela rzb 256 label area blan1a rzb 256 blank1 area opcoda rzb 256 opcode area blan2a rzb 256 blank2 area operna rzb 256 operand area blan3a rzb 256 blank3 area commna rzb 256 comment area workar rzb 256 work area tempar rzb 256 temp area fcb asters,asters asterisks origln rzb 256 original line area fcbi rzb 320 input fcb fcbo rzb 320 output fcb fcbc rzb 320 control fcb rzb 127 mystk fcb $00 local stack opcods equ * pseudo and real opcode tables fcc "EQU",$00,$00,$01,$00,$01 fcc "ERR",$00,$00,$00,$00,$01 fcc "FCB",$00,$00,$01,$00,$01 fcc "FDB",$00,$00,$01,$00,$01 fcc "FCC",$00,$00,$01,$00,$01 fcc "LIB",$00,$00,$00,$00,$01 fcc "NAM",$00,$00,$00,$00,$01 fcc "OPT",$00,$00,$00,$00,$01 fcc "ORG",$00,$00,$00,$00,$01 fcc "PAG",$00,$00,$00,$00,$01 fcc "RMB",$00,$00,$01,$00,$01 fcc "RPT",$00,$00,$00,$00,$01 fcc "RZB",$00,$00,$01,$00,$01 fcc "SET",$00,$00,$01,$00,$01 fcc "SETDP",$00,$00,$01 fcc "SPC",$00,$00,$00,$00,$01 fcc "STTL",$00,$00,$00,$01 fcc "TTL",$00,$00,$00,$00,$01 fcc "WORD",$00,$01,$00,$01 opcodt rzb 2048 opcode table end start