þþF&dX;SAVE#D:BBKMON3.M65nX;xX;disassembler‚X;Œ„DISAQ…MYBUF8–R> $;;check for hex  H„DNOKª3´ ‡PULLHEX;;get hex add¾ Q„HCNTÈF…DNOK1;;no digitsÒR>;;1-4 digitsÜDƒDD1æ„DNOK1;;show errorð…DNOK1!†GOTERRúƒDD1Q‚HL;;get low bytePƒMEMQ‚HH;;& high PƒMEM"Q>;;turn off,P…PRFLG;;print flag6 †DCLOSE;;close iocb 2@%‚Y2;;check forJQ…MYBUF8;;',P'TR> ,^ H„DCMDh3r Q…MYBUF8|R> P† H„DCMDP…PRFLG;;set print flagšX;¤X;open #2 to printer®X;¸$> ÂQ>;;open printerÌ P…ICCOM9Ö Q>5„PDEVà P…ICBAH9ê Q>4„PDEVô P…ICBAL9þQ>;;output P„AUX19 „CIOVX;&#X;format output line with spaces0X;: „DCMD%> D‚F1Q…FORMD8N P…MYBUF8X1bI‚F1lX;vX;put address in buffer€X;Š QƒMEM” ƒHEX;;convert to hexž%>¨Q„HEXB;;high nibble² P…MYBUF8¼3ÆQ„HEXS;;low nibbleÐ P…MYBUF8ÚQƒMEM;;now do lowä ƒHEX;;byteî3øQ„HEXB;;high nibble P…MYBUF8 3Q„HEXS;;low nibble  P…MYBUF8*X;4X;get base opcode>X;H%>R Q@ƒMEM7\P†BASEOP;;keep itf$>p‚O1Q†BASEOP;;check if validzR„DOPC9;;from table„F‚O2Ž2˜(>—;;151 opcodes¢H‚O1¬Q> ;;13 = not valid¶PƒOPT;;opcode typeÀ$>—;;151st = ???Ê &…INDEXÔ!‚O3Þ‚O2&…INDEX;;keep validè‚O3Q†OFFSET9;;index toò>;;mnemonic tableü%>‚O4QƒMNE9;;put mnemonicP…MYBUF8;;into buffer2$3.)> 8H‚O4B$…INDEX;;now get typeLQ…MTYPE9;;of addressingVPƒOPT` †INCMEM;;increase memjX;tX; put opcode into buffer~X;ˆ Q†BASEOP’ ƒHEX;;convert to hexœQ„HEXB;;high 1st¦%>° P…MYBUF8º3ÄQ„HEXS;;low 2ndÎ P…MYBUF8ØX;âX;get type of addressingìX;and jsr to correctö X;handlerX; QƒOPTT?>( Q„DCOM92P†JPLACE< Q„DCOM9FP†JPLACEP†JPLACE ÿÿZQ>5…MYBUF;;now print itd %>4…MYBUFn …PRINTxQ…PRFLG;;printer also?‚ FƒKEY;;noŒX;–X;send to printer X;´Q> ;;knock out¾P…MYBUF;;arrowsÒ P…MYBUFÜ$> ;;iocb 2æQ> ð P…ICCOM9ú Q>5…MYBUF P…ICBAH9 Q>4…MYBUF P…ICBAL9"Q>(;;40 chars, P…ICBLL96Q>@ P…ICBLH9J „CIOVTƒKEY …PAUSE;;check for pause^E‚K5;;exit on RET.h !„DCMDr ‚K5!…INPUT|X;†X;1 byte binary to hexX;šƒHEX5¤M>®>¸ Q†HEXDIG9 P„HEXSÌ7ÖV?àV?êV?ôV?þ> Q†HEXDIG9 P„HEXB:&X;0X;put low byte operand into:X;output bufferDX;N†PUTLOW'‚Y3;;enter w/ Y=posX%>b Q@ƒMEM7l ƒHEXv%‚Y3;;put next to€Q„HEXB;;mnemonicŠ P…MYBUF8”%>;;& at rightž P…MYBUF8¨%‚Y3²3¼ Q„HEXSÆ P…MYBUF8Ð%>ÚP…MYBUF8;;fall throughäX;îX;increase mem,mem+1 by 1øX;†INCMEMQƒMEM ,O> PƒMEM* QƒMEM4O>> PƒMEMH:RX;\X;put high byte of operandfX;into output bufferpX;z…PUTHI'‚Y3;;enter y= pos.„%>Ž Q@ƒMEM7˜ ƒHEX;;convert to hex¢%‚Y3¬Q„HEXB;;next mnemonic¶ P…MYBUF8À%>;;and at rightÊ P…MYBUF8Ô3Þ Q„HEXSè P…MYBUF8ò%‚Y3ü3 P…MYBUF8 !†INCMEM;;inc. mem by 1 X;$ X;handlers for various modes. X;of addressing8 X;B X;immediate modeL X;V …IMMEDQ> #` %> j P…MYBUF8t 3~ Q> $ˆ P…MYBUF8’ 3œ †PUTLOW¦ :° X;º X;zero pageÄ X;Î „ZEROQ> $Ø %> â P…MYBUF8ì 3ö †PUTLOW : X; X;zero page,x X;( …ZEROX „ZERO2 Q> ,< %>F P…MYBUF8P 3Z Q> Xd P…MYBUF8n :x X;‚ X;absoluteŒ X;– …ABSOLQ> $  %> ª P…MYBUF8´ %>¾ †PUTLOWÈ %> Ò …PUTHIÜ :æ X;ð X;absoulte,xú X; †ABSOLX …ABSOL Q> , %>" P…MYBUF8, 36 Q> X@ P…MYBUF8J :T X;^ X;absolute,yh X;r †ABSOLY †ABSOLX| %>† Q> Y P…MYBUF8š :¤ X;® X;preindexed with x¸ X; „PREX †LPARENÌ %> Ö †PUTLOWà %>ê Q> ,ô P…MYBUF8þ Q> X 3 P…MYBUF8 Q> )& 30 P…MYBUF8: :D X;N X;post indexed with yX X;b „PREY „PREXl %>v Q> )€ P…MYBUF8Š 3” Q> ,ž P…MYBUF8¨ 3² Q> Y¼ P…MYBUF8Æ :Ð X;Ú X;accumulatorä X;î …ACCUMQ> Aø %>  P…MYBUF8 : X; X;relative - branches* X;4 …RELATQ>;;escpaeH P…MYBUFR Q>f P…MYBUF;;arrowp %>z Q@ƒMEM7„ PƒAC1;;rel branchŽ %>;;save it twice!˜ †PUTLOW¢ QƒMEM¬ P϶ QƒMEMÀ PÐÊ QƒAC1Ô G„BSUBÞ ,è OÏò PÏü QÐO>PÐ #…MYBUF$ „BPUTQÏ. ƒHEX8%>B Q„HEXBL P…MYBUF8V3` Q„HEXSj P…MYBUF8tQÐ~ ƒHEXˆ%> ’ Q„HEXBœ P…MYBUF8¦3° Q„HEXSº P…MYBUF8Ä%> ÎQ> $Ø P…MYBUF8â:ì „BSUBQ>ÿöSƒAC1, O>PƒAC1QÏ(;2SƒAC1<PÏFQÐPS>ZPÐd !„BPUTnX;xX;implied is real easy‚X;Œ …IMPLD:–X;  X;indirectªX;´…INDIR †LPAREN¾%>È †PUTLOWÒ%> Ü …PUTHIæ%>ðQ> )ú P…MYBUF8:X;!X;general put left parenthesis"X;in buffer,X;6†LPAREN%> @Q> (J P…MYBUF8TQ> $^3h P…MYBUF8r:|X;†X;zero page yX;š…ZEROY …ZEROX¤Q> Y® P…MYBUF8¸:ÂX;ÌX;no instruction ???ÖX;à †NOINST:êX;ôX; binary saveþX;X;save a portion of memoryX;…BSAVE †DCLOSE;;close iocb&%>0 Q…MYBUF8:R> D;;check forDFƒSS1;;D: - error ifNƒSS9!†GOTERR;;not thereXƒSS13b Q…MYBUF8lR> :vHƒSS9€ƒSSB3Š Q…MYBUF8”R> ,;;find ','ž F†GOTCMA¨)>;;only 16 chars²HƒSSB¼FƒSSD;;give errorƆGOTCMA'…PRFLG;;keep y posÐ3ÚQ…MYBUF8;;look for $äR> $îHƒSS9ø3 ‡PULLHEX  Q„HCNTFƒSS9;;1-4 digs R>*DƒSSC4ƒSSD!†GOTERR> ƒSSCQ‚HLHPƒMEMRP†PUTBUF\Q‚HHf PƒMEMpP†PUTBUFz Q…MYBUF8„R> ,;;another ,ŽHƒSSD˜3¢ Q…MYBUF8¬R> $;;hex coming up¶HƒSSDÀ3Ê ‡PULLHEX;;get hex #Ô Q„HCNTÞFƒSSDèR>òEƒSSDüQ‚HL;;save low byteP‚Y1;;of hex addP†PUTBUFQ‚HH;;save hi byte$P‚Y2.P†PUTBUF8P‚Y2;;check if endBRƒMEM;;> startLFƒJJ2;;chk low bytesVE…DOSUB;;ok to subtract`ƒJJ3!†PRADER;;range errorjƒJJ2Q‚Y1;;comp low bytestRƒMEM~DƒJJ3ˆ…DOSUB;;;get # bytes’Q‚Y1œSƒMEM¦ P„NBYT°Q‚Y2º SƒMEMÄ P„NBYTÎ#„NBYT;;add 1 to #ØHƒJJ7;;of bytesâ #„NBYTìX;öX;open file for outputX; ƒJJ7$>„DDEV Q>;;open P…ICCOM9( Q>ƒEOL2 %…PRFLG<P…MYBUF8;;put in eolFQ>5…MYBUFP P…ICBAH9ZQ>4…MYBUFd P…ICBAL9nQ>;;outputx P„AUX19‚Q>Œ P„AUX29– „CIOV IƒJJ6ª …IOERR;;I/O error´!„DERR;;close file¾X;ÈX;now do the saveÒX;܃JJ6$>;;put headersæ„GG10Q†PUTBUF9;;& startð „PUTD;;and end addú2(> H„GG10X;"X;now put all bytes,X;6$>„DDEV;;iocb 2@Q„NBYT;;# bytes toJP…ICBLL9;;saveT Q„NBYT^ P…ICBLH9hQ> ;;put commdr P…ICCOM9|QƒMEM;;add where†P…ICBAL9;;save starts QƒMEMš P…ICBAH9¤ „CIOV®I†SVDONE;;done¸ƒJJ4 …IOERR;;errorÂ!„DERR;;close filĕSVDONE †DCLOSE;;close #2Ö !…INPUTàX;êX;put 1 byte at a timeôX;þ„PUTD&‚X1;;enter with A 5;;save it Q> ;;put$>„DDEV;;iocb #2& P…ICCOM90Q>;;length = 0: P…ICBLL9D P…ICBLH9N7;;get byteX „CIOV;;put itbGƒGG4;;errorl$‚X1;;no error-get xv:€ƒGG4'‚Y1;;show errorŠ7”7ž …IOERR¨ !…INPUT²X;¼X;'address range error'ÆX;ІPRADERQ>5†ADDERR;;print addÚ%>4†ADDERR;;range errorä …PRINTî !…INPUTøX;X;binary load X;…BLOAD †DCLOSE;;close iocb %>*Q…MYBUF8;;check for D4R> D>FƒKK2HƒKK1!†GOTERR;;show errorRƒKK23\ Q…MYBUF8fR> :;;check for :pHƒKK1zQ>5…MYBUF;;here is„$>„DDEV;;deviceŽP…ICBAH9;;& name˜Q>4…MYBUF¢ P…ICBAL9¬ Q>;;read¶ P„AUX19ÀQ>Ê P„AUX29Ô Q>;;openÞ P…ICCOM9è „CIOVòIƒKK3ü …IOERR;;show I/O error !…INPUTƒKK3 „GETB;;get 1 byteR>ÿ;;is it header?$ HƒLL1;;no!. „GETB;;is 2nd # header8R>ÿBFƒLL2LƒLL1Q>5†NOTBIN;;no binaryV%>4†NOTBIN;;file mess` …PRINTj !…INPUTtƒLL2 „GETB;;get load add~PƒMEM;;low byteˆPƒFR0’ „GETB;;hi byteœ PƒMEM¦ PƒFR0° „GETB;;get end addºP‚Y1;;low byteÄ „GETB;;& hi byteÎP‚Y2Ø;;;find numberâQ‚Y1;;of bytes toìSƒMEM;;loadöP„NBYT;;save loQ‚Y2  SƒMEMP„NBYT;;save hi#„NBYT;;increase by 1(HƒLL62 #„NBYT<ƒLL6 ‡BIN2HEX;;convert startF%>;;add to hexP$> ZƒLL5Q†PRNBUF8;;put in messdP…LDADR9;;buffern2x3‚)>ŒHƒLL5– ƒLL7Q>5…LDADR;;print 'loading %>4…LDADR;;at $0000'ª …PRINT´X;¾X;now get all bytesÈX;Ò$>„DDEV;;iocb 2ÜQ„NBYT;;# of bytes toæP…ICBLL9;;getð Q„NBYTú P…ICBLH9Q>;;get commd P…ICCOM9QƒMEM;;load add low" P…ICBAL9,QƒMEM;;load hi6 P…ICBAH9@ „CIOVJ I…LDONET …IOERR;;show any error^…LDONE †DCLOSE;;close iocbh !…INPUTrX;|X;get 1 byte from file†X;„GETBQ>;;get commdš$>„DDEV;;iocb 2¤ P…ICCOM9®Q>;;only 1 at a¸P…ICBLL9;;time P…ICBLH9Ì „CIOVÖGƒKK4;;if errorà:êƒKK47;;pull returnô7þ …IOERR;;show error !…INPUTX;X;memory dump&X;0 „MDUM3: ‡PULLHEX;;get addressDQ„HCNT;;1 - 4 digitsNFƒMMAXR>bDƒMMBlƒMMA1;;sho errorv !†GOTERR€ƒMMBQ‚HL;;put addressŠPƒMEM;;on screen”Q‚HHž PƒMEM¨ƒMMC …PRADD²X;¼X;fill buffer with blanksÆX;ÐQ> Ú$>,;;do 44 spacesä…ZLOOPP…MYBUF9î0ø I…ZLOOPX; X;put 6 ATASCI charactersX;in buffer X;*%>4$>>ƒMMMQ@ƒMEM7;;do charsHR>ƒEOL;;no retRHƒMMN;;replace with\ Q>;;fƒMMNP…MYBUF9p2z3„)>;;6 charsŽHƒMMM˜Q>ƒEOL;;eol at end¢ P…MYBUF9¬ƒMMP%>;;now do hex #s¶'‚Y2;;x cntrÀƒMMO'‚Y1;;y cntrÊQ@ƒMEM7;;get bin #ÔPƒFR0;;chng to hexÞ ‡BIN2HEXè%>;;get hex bytesò Q†PRNBUF8ü$‚Y2P…MYBUF9;;store in2;;my buffer3$ Q†PRNBUF8. P…MYBUF982B2L&‚Y2V%‚Y1`3j)>tHƒMMO~Q>;;set displayˆ Pþ;;flag’Q>5…MYBUF;;print a lineœ %>4…MYBUF¦ …PRINT°Q>ºPþ;;reset dispflgÄQƒMEMÎ,ØO>âPƒMEM;;add 6 to memì QƒMEMöO> PƒMEM  …PAUSE;;check forEƒMMR;;pause-carry!ƒMMC;;set= RETURN(ƒMMR!…INPUT2X;<X;general pause routineFX;activated by anyPX;key pressZX;d…PAUSEQü;;check fornR> ;;key-RETURNxHƒPPA;;exits‚ƒPPEQ>ÿ;;any otherŒPü;;key pauses–; :ªƒPPAR>ÿ;;if no key´HƒPPB;;no pause¾ƒPPD,È:ÒƒPPBQ>ÿ;;resetÜPüæƒPPCQü;;if key pressedðR> ;;during pauseúFƒPPE;;either RETURNR>ÿ;;to abortFƒPPC;;or any key toQ>ÿ;;continue"Pü,HƒPPD