þþ‡dX;SAVE#D:BBKMON2.M65nX;xX;assembler‚X;ŒƒASM3– ‡PULLHEX;;get hex add Q„HCNT;;if none errorªFƒZY1´R>¾D‚ZZÈ‚ZY1ÒƒZY1!†GOTERR;;show errorÜ‚ZZQ‚HL;;store add loæPƒMEMð Q‚HH;;& hiú PƒMEMƒCMD …PRADD;;print add †GETLIN;;get input †CRUNCH;;crunch it"%>, Q…MYBUF86R>ƒEOL;;RET. ?@HƒFNMJ !…INPUTTX;^X;find mnemonichX;rƒFNM$>;;reset ptr|&ƒCNT†%>ƒMN2Q…MYBUF8;;look upšRƒMNE9;;in table¤H„NOM2;;1st char®2¸3ÂQ…MYBUF8;;now check 2ndÌ RƒMNE9Ö H„NOM2à2ê3ôQ…MYBUF8;;3rd match?þ RƒMNE9FƒMAT„NOM2%>;;no match#ƒCNT;;try next item&QƒCNT;;in table0R>8;;only 55 entries:HƒZ19D!†PERROR;;error!NƒZ19,XT?b OƒCNT;;x2l>vHƒMN2€ƒMAT$ƒCNT;;get opc offsetŠQƒOPC9;;get opc”P†BASEOP;;keep itž$ƒCNT;;does mne with¨(>;;8 modes²DƒZ21¼!„TRY3;;try next setƃZ21Q>;;set ptrsÐ P„MODEÚ P„LPARäP‚HLîP‚HHø%>;;chk for '(' Q…MYBUF8 R> (H‚Z1 P„LPAR;;set flag*‚Z1R> #;;immediate?4H‚Z2>Q>;;mode 2H P„MODER‚Z2Q…MYBUF8;;chk for '$'\R> $fF‚Z3p3;;if we haven'tz)> ;;found it by„H‚Z2;;now-give errorŽ !†PERROR˜‚Z33¢ ‡PULLHEX;;get hex #¬ Q„HCNT¶F‚ZB;;must have 1-4ÀR>;;digitsÊD‚Z7Ô‚ZB!†PERROR;;error!Þ‚Z7Q„MODE;;immed?èF‚Z8ò!†FIGOP2;;figure opcodeü‚Z8Q…MYBUF8;;zero/abs?R>ƒEOL;;RET?H‚Z9Q‚HH$HƒZ10;;3 byter abs.#„MODE;;mode flag=18!†FIGOP2;;calc.opcodeBƒZ10Q>;;mode =3L P„MODEV!†FIGOP3;;calc opcode`‚Z9R> );;is it ..)?jHƒZ11tQ>;;mode 4 by~P„MODE;;defaultˆ!†FIGOP2;;figure it’ƒZ11R> ,;;need ','œHƒZ12¦Q„LPAR;;left ( ?° FƒZ18;;noº!†FIGOP2;;mode=0 defaultÄ ƒZ18Q‚HHÎHƒZ13;;not x-indexedØQ>âP„MODE;;mode must be 5ì!†FIGOP2;;x indexedöƒZ12!†PERROR;;error!ƒZ133 Q…MYBUF8;;is it 'y'R> YHƒZ14(Q>;;mode is 62P„MODE;;abs,y<!†FIGOP3;;find opcodeFƒZ14R> X;;is it 'x'?PFƒZ15Z!†PERROR;;error!dƒZ15Q‚HH;;is it 3 byternHƒZ16xQ>;;mode =5‚P„MODE;;zero xŒ!†FIGOP2;;calculate–ƒZ16Q>;;default = 7  P„MODEª!†FIGOP3;;find opcode´X;¾X;try 1 bytersÈX;Ò„TRY3$ƒCNT;;x has offsetÜ(>!æE„TRY4;;try next setð!†FIGOP1;;one byterú„TRY4$>;;next group&‚HH;;of basic&‚HL;;mnemonics&„MODE;;1st rest ptrs"$ƒCNT,(>0;;bet 33 & 48?6 D„MAT3@(>8;;if over 56JD„MAT4;;show errorT !†PERROR^„MAT4!„TRY6h „MAT3Ar;|S>!;;subt 33 so†PƒCNT;;cnt= 0-14Q…MYBUF8šR> A;;is it Accum?¤H…NOACC;;no®QƒCNT¸R>;;must be 0-4ÂD‚C3Ì!†PERROR;;error!Ö‚C3>àQƒACC9;;get opcodeêP†BASEOP;;figure codeô!†FIGOP1;;from tableþ…NOACC$ƒCNT;;no AccumQ„OPC39;;get opcodeP†BASEOP;;from table 33& Q…MYBUF80R> #;;immediate?:H‚C4D3NƒC15Q…MYBUF8;;is '$' there?X ‚C4R> $bFƒC11l(> ;;is it jmp()?vHƒC11€3ŠHƒC15”!†PERROR;;erroržƒC113¨ ‡PULLHEX;;now get hex #² Q„HCNT¼FƒC20;;must have 1-4Æ R>;;digsÐD‚C5ÚƒC20!†PERROR;;errorä‚C5$ƒCNT;;chk 5-8î(>øDƒC13!„TRY5;;try others ƒC13Q…MYBUF8R>ƒEOL;;end yet? H‚C6*Q‚HH;;3 byter?4H‚C7>!‡FIGDON2;;default mode=0H‚C7Q>;;absolute modeR P„MODE\!…THOPS;;three bytef‚C6R> ,;;',' ?pF‚C8z!†PERROR;;if no,error„‚C8Q‚HH;;3 byter?ŽH‚C9˜#„MODE;;zero,x¢!…TWOPS;;2 byter¬‚C9Q>;;abs,x¶ P„MODEÀ!…THOPS;;2 byterÊ„TRY5(> ;;10 or more?ÔE‚D1ÞQ‚HH;;3 byter?èH‚D2ò!‡FIGDON2;;bit-2 byteü ‚D2Q>, P†BASEOP ‚D3!‡FIGDON3;;bit-3 byte ‚D1(> ;;=9?$ F‚D3. (> ;;=10?8 H‚D4B Q…MYBUFL R> (;;left (?V H‚D3;;it is jmp` Q>l;;must be jmp()j P†BASEOPt H‚D3~ ‚D4(> ;;is it type 13?ˆ E‚E1’ Q…MYBUFœ R> #;;immediate?¦ H‚D5° ‚D6!‡FIGDON2;;#º ‚D5Q†BASEOPÄ L>Î P†BASEOP;;add 4Ø Q‚HH;;3 byter?â F‚D6;;zero pgì Q†BASEOPö L>;;add 8 P†BASEOP !‡FIGDON3;;do 3 byter ‚E1Q…MYBUF R> #( F‚D6;;immed mode2 Q…MYBUF8< R>ƒEOL;;end yet?F H‚E2P Q‚HH;;3 byter?Z H‚E3d $>n !…FIGA2x ‚E3$>‚ !…FIGA3Œ ‚E2R> ,;;','?– F‚E4  !†PERROR;;errorª ‚E4Q‚HH;;3 byter?´ H‚E5¾ $>È !…FIGA2Ò ‚E5$>;;fall thruÜ …FIGA3Q†BASEOP;;3 byteræ LƒOR59;;modify baseð P†BASEOP;;opcodeú !‡FIGDON3 …FIGA2Q†BASEOP;;2 byter LƒOR59;;modify base P†BASEOP;;opcode" !‡FIGDON2, …TWOPS$„MODE;;2 byter6 Q†BASEOP;;diff. type@ LƒOR39;;modify opcodeJ P†BASEOPT !‡FIGDON2^ …THOPS$„MODE;;3 byter diff.h Q†BASEOP;;typer LƒOR39| P†BASEOP† !‡FIGDON3 „TRY6$>;;reset varsš &‚HH¤ &‚X1® &‚HL¸ 3 Q…MYBUFÌ R> $;;is it hex?Ö F‚W1à !†PERROR;;errorê ‚W13ô  ‡PULLHEX;;get hex #þ Q„HCNT;;must have FƒW15;;1-4 digits R> D‚W2& ƒW15!†PERROR;;error0 ‚W2$>;;must be branch: &‚X1;;by defaultD ;;;find outN Q‚HL;;if branchX SƒMEM;;back orb P‚HL;;forwardl Q‚HHv SƒMEM€ P‚HHŠ E‚W3;;big# c=1” #‚X1ž ‚W3;¨ Q‚HL² S>¼ P‚HLÆ G‚W8Ð Q‚X1Ú F‚W7ä ‚W9!†PERROR;;range errorî ‚W7!‡FIGDON2ø ‚W8Q‚HL R>þ D‚W4 #‚X1 ‚W4Q‚X1* H‚W74 F‚W9> X;H X;error routineR X;\ †PERROR „BEEP;;tonef Q>5…ERMES;;err messp %>4…ERMESz  …PRINT;;print it„ !ƒCMD;;get commdŽ X;˜ X;figure opcode¢ X;¬ †FIGOP2$„MODE¶ Q†BASEOPÀ LƒOR29Ê P†BASEOPÔ X;Þ X;figuring done-put intoè X;memoryò X;ü ‡FIGDON2Q†BASEOP;;do 2 byter%>;;store opcode P@ƒMEM7Q‚HL;;store operand$3. P@ƒMEM78$>;;increase memB!†ADDMEM;;by 2LX;VX;figure 3 byter opcode`X;j†FIGOP3$„MODE;;do 3 bytert Q†BASEOP~ LƒOR29ˆ P†BASEOP’X;œX;figuring done-store in mem¦X;°‡FIGDON3Q†BASEOP;;do opcodeº%>Ä P@ƒMEM7Î3ØQ‚HL;;do low byteâ P@ƒMEM7ì3öQ‚HH;;now high byte P@ƒMEM7 $>;;move mem up 3 !†ADDMEMX;(X;do 1 byter2X;< †FIGOP1Q†BASEOP;;store opcodeF%>P P@ƒMEM7Z$>;;inc. mem by 1d !†ADDMEMnX;xX;get up to 4 hex digits‚X;Œ‡PULLHEX$>;;reset vars–&‚HL &‚HHª &„HCNT´ƒPU1Q…MYBUF8;;get digit¾$>È‚H2R†HEXDIG9;;in table?Ò F‚H3;;yesÜ0æI‚H2ð G‚H6;;noú‚H3&‚X1;;convert to binT‚HL U‚HH;;x 16T‚HL"U‚HH,T‚HL6U‚HH@T‚HLJU‚HHT,^Q‚HLhO‚X1rP‚HL|Q‚HH†O>P‚HHš3¤#„HCNT;;1 more digit®!ƒPU1¸ ‚H6'‚Y2½:ÂX;ÌX;increase mem with xÖX;à †ADDMEM,êAôOƒMEMþPƒMEM QƒMEMO> PƒMEM&!ƒCMD0X;:X;print addressDX;N…PRADDQ> $;;print'$'X …PUTCHbQƒMEM;;high bytelV?;;convert to hexvV?€V?ŠV?” …PUTHX;;put hex on scrnž QƒMEM¨M>;;now low nibble² …PUTHX¼QƒMEM;;now sameÆV?;;for low byteÐV?ÚV?äV?î …PUTHX;;high nibbleøQƒMEMM>  …PUTHX;;next lowQ> :  …PUTCH*Q> ;;space4 …PUTCH>:HX;RX;put hex digit on scrn\X;f…PUTHXL>0;;add in bitspR>:;;add 7?zD…PUTCH;;no„,ŽO>˜X;¢X;general put char¬X;¶…PUTCH&„PUTX;;save xÀ$>;;buff len=0Ê &…ICBLLÔ &…ICBLHÞ$> ;;put cmdè &…ICCOMò$>;;iocb 0ü „CIOV;;use Acc.G„JERR;;error$„PUTX;;restore x :;;done$„JERR7;;pull ret..78 …IOERR;;show errB!…INPUT;;get input