T_ "<%O1& ɠUs$5d'"~TU4dddY=%d0@X'$54&ŀ&$d\'d dd\' ddY_ 54dddY=%+d0@~X&d'~X &_ @&$5d5'2\'/WV'%' WVU%W/214We~W 9d$V%Ao/214We$%)oU%O1@D$oc Us$9dL$&Y` Y`%99&9턮oo9 ' 9_9dd&9&9 46dO_01o&d54D$"-VD$ _554bd3/21L4U%e1@'L&2&/214m&? ( Ł $ &Z*/+-._ 1 1 1&\#54bd32'm/U%\O4'R11@1' \''=oZ$m.oZ* $m&;'CWħŁ $ $ Z*Us$ 5 4550ja&5зHH9d~4 4dd5ddX&4     ~ X dd% d@ddd @ʀdsdPH'*H&1?&dzd'W Y~XݶK@ H&1?& ԦKX@ Hd}d'dXׯj;dY5 'd]94JI''KZIYĆLdHZIY&".0&Ő54YĆLdHZIY5#9%I焷d#IZI #ƀ9_9dd:94a@dd& 0&540' H&_5ƀ54d Y   54d߷@ZI5~\ 4ZP'4J&5540d&d4I' 554927&d' 1?d&Z&] 4O@dd594M52}oaaM& lSy%5bD$'p"n@P'd& sdd d& dZTkb.a5&}d& &sd &sdOdH5@9}+93ap!%aR0$+#@M' X&\ 0&9}d&0- ;"ajsd94|d& d0'C8*ZC L4_DYY 5Z&5_  L0&94"VV5aR~R54[4!#J "!#" ×ŗɗ̗і##""#5f큌~%fdd946}d& %< : ' ''' 'k'(')'C ''' |dd3'z5  d4 ][|dd3&5d9dŒ},0큌~/ |d\ )d'2/2d|d /_f0dd }d'~]9dŒ}-+f0~-}d큌~-dQ0dGdŒg-;0 荤d-d'J dŒf'0d†2d  =a]add0ddd0dddC_}d'DVzd dd]dddd0 zd&d94dDDD=4d=TTTd54d546Ҿdd0dadd1(dddsddCddsdddsddCddsd0 zd&sd54""`J&0& csc coco assembler cross-reference v1. by^ bud pass, conyers, ga c1983  assembler program name  output file name  phase  memory overflow finished! cross-reference listing of  xref of  (continued)symbol references (definition and uses)'d _` error  printer not ready! @BINTXTCMDBASSYSBAKSCRDATBACDIRPRTOUTRELRFIDEVARC FCAOAENEFSDFDFIEIOVFWPWPFCFSDNIOWPFSBSFSFNFSFSBSFSSNFSFSFS hita reset0123456789:;^_ [ ] 0 \@?@@@@@@```` p` @@@` @@ @  @``@@@@`` @`` @`` ` p` @` `0P` @`p @@@````p @@@@@@@@@b @@ @  @` `p```PP`PP``PPPPPpp𐐐p p`𐐐𰐐𐐐````` ```𐐐````  @@ 00@@@@c@@ 𐐐pp```p𐐐@@@@@@ `@@@@@@@𐐐``pP@@@@@@```` `` ` @ @@@@ @@@@@@@ 1 @PST;T;T;TURRRUUsRUAdURRRRRRV>RRLAMMER*/%:*AND INTERPRETER */E:*BY JEFF HARPER */e:* 08/02/84 */:* */:*ADAPTED FOR ECB COCO */:*FROM AN ARTICLE IN US80*/:*MAY/JUNE 1981 PG.90 *0:*************************0MM(25)256(26)0)LN4100H MS(LN256):LSLN256MS0QMMM0 (M3)LS (M2)MS M(M)256(M1):13100(MLM402"ENTER FUNCTION TO PLOT"0< "Z=";E$0FE$"Z$="E$0PMML0Z N1 (E$)1dQ((E$,N,1))MM(25)256(26)0)LN4100H MS(LN256):LSLN256MS0QMMM0 (M3)LS (M2)MS M(M)256(M1):13100(MLM402"ENTER FUNCTION TO PLOT"0< "Z=";E$0FE$"Z$="E$0PMML0Z N1 (E$)1dQ((L WKL& LLZ& Z&LF[R^uRL0\ R~^RH_L 0&_oL #1L  5R~^RQ %"_Q%RbR'~QyN6_ RR~QYR~^ڽRQ %_Q%RbR'Qy |_9_LR& '# 'Qy_R܆__z__|_94__#_ _L#L __0& J&__'_+~M__0_ }_'V__L0_'D_'__'1 __L $?!_oo_0___ O}_&__1M_L % R~^R~QY_&_Z&_oooo59_R~P LA+ Z#.a+z#&' &_0_L*&ٽL'o ' _|_____}_'__|_z_L.'0+9#ށA+Z#ց_'ҁa+z#_Z&M1 _Z&_&~Nd~Nn|_P___NR'!Qy~LLA+ Z#,a+z#$' &_0_L*&ٽL'f ' _|_____}_'__|_z_L.'0+9#ށA+Z#ց_'ҁa+z#_Z&_'M1~O|_PL}_'Q?_QNPQ?Q?Q?_`QNQ?_L _Q?_L_:**************************+WNX10(YRADIAN)128+uNY192(10(ZRADIAN)96)+ NX0 NX0+ NX255 NX255+ NY0 NY0+ NY191 NY191++:+: "SMALLEST X VALUE";BX, &"LARGEST X VALUE";EX,%0"SMALLEST Y VALUE";BY,?:"LARGEST Y VALUE";EY,ID 1,1,\N A$"N" 720,cX:,b:**************************,l:* DRAW X, Y, AND Z AXIS *,v:**************************-(128,51)(128,96),:(178,96),:(127,96)(103,120),-"BM190,98 U2NH2E2"-5"BM96,103 E2NH2NE2F2"-N "BM126,42 NR4E4L4"-U:-v:**************************-:* PLOT FUNCTION VALUES *-:**************************-Ѐ XBX EX S1-ڀ YBY EY S2-䁦 360. YBY (NX,NY)(NX,NY),: 770.$(NX,NY),., Y.4 X.;:.\ :**************************.}*:* PLOT CROSS STRIPES *.4:**************************.tA$: A$"" 1140 : 100.:.:*************************/:*A BASIC SELF-PROGR2 30,34,52,37A2296A73:"zap display start ";A$A4A$"P":B(B1):B1"printer on":307 :"printer off":307A5A$"R"137A6A$""AAP:312A7116A8A0A0A9B1 A65535A0A:A65440A65440A;ABAB<:B1#2," "B=ZL116B>ADAB#?23B<@B1#2,AD$;" ";BNA:AD$;" ";BgBOP$"":DA$"":DB$""BsCZG13BDD$"":ZB12BE17BFD$;BGB1#2,D$;BHD31 D91DB$DB$(D):DB$DB$"."BIZB:" ";BJB1#2," ";CKZG:DB$;CLB1#2,DB$CGMK$:K$"X"K$"R"K$"P"ZL16:ZL:340CONZLCdOB1K$:340CyPK$:K$""336CQK$"-"K$"="AAB96:312CRK$";"K$"+"312CSK$"A"AAB:312CTK$"X"307CUK$"R"AAP:146DVK$"P"A$K$:308DWB1312DX336D<Y@135,"DISASSEMBLER 6809"D[Z:7)"COPYRIGHT (C) 1981"D[3)"SOFT SECTOR MARKETING INC."D\:6)"WRITTEN BY L. ASHMUN"D]:7)"INSTRUCTIONS ? Y/N"D^K$D_K$"N"D`K$"Y"354Da350DbEc7)"COMMANDS AVAILABLE"E2d7)"(DISASSEMBLY MODE)"EYe:" X = NEW START ADDRESS **"E~f" S = GOTO SUBROUTINE *"Eg" R = RETURN FROM SUBROUTINE *"Eh" Z = GOTO ZAP DISPLAY MODE"Ei" P = PRINTER ON/OFF SWITCH"F j" ENTER = NEXT PAGE *"F4k:" * NOT ACTIVE WITH PRINTER on."FXl"** X WILL NOT CANCEL PRINTER"Flm" OUTPUT."Fn:10)"PRESS ENTER"FoK$:K$(13)367FpFq7)"COMMANDS AVAILABLE"Fr7)"(zap display mode)"Gs:" X = NEW START ADDRESS **"G%t" + = INCREMENT ONE PAGE *"GGu" - = DECREMENT ONE PAGE *"Giv" A = REDISPLAY SAME PAGE *"Gw" R = RETURN TO DISASSEMBLY MODE"Gx" P = PRINTER ON/OFF SWITCH"Gy:" * NOT ACTIVE WITH PRINTER on."Gz"** X WILL NOT CANCEL PRINTER"H{" OUTPUT."H,|:10)"PRESS ENTER";HF}K$:K$(13)381HL~HRHw" PRINTER BAUD RATE SELECTION"HB(150)HB190B$"300 BAUD"HB87B$"600 BAUD"HB41B$"1200 BAUD"HB18B$"2400 BAUD"I:" CURRENT RATE - ";B$I:I$" 1 = 300 BAUD"I9" 2 = 600 BAUD"IO" 3 = 1200 BAUD"Ie" 4 = 2400 BAUD"I:" PRESS ENTER FOR NO CHANGE"I::" WHICH BAUD RATE ";B$I155,80IB$""IB$"1"150,190IB$"2"150,87JB$"3"150,41JB$"4"150,18JJ$J; I12:"DISA":I" 3 = 1200 BAUD"Ie" 4 = 2400 BAUD"I:" PRESS ENTER FOR NO CHANGE"I::" WHICH BAUD RATE ";B$I155,80IB$""IB$"1"150,190IB$"2"150,87JB$"3"1/hPR$PR$"X":113/+iPR$PR$"Y":113/AjPR$PR$"U":113/WkPR$PR$"S":113/nlPR$PR$"PC":113/mPR$PR$"A":113/nPR$PR$"B":113/oPR$PR$"CC":113/pPR$PR$"DP"/qX1/rX1:JD 15:PR$PR$",":1010s: hex. to dec.0tX(A$):X1X1:A00*uX1X405vZ1X0MwN((A$,X1Z,1))0ixN47N58NN48:1230yN64N71NN55:1230zN00{Z 124,125,126,1270|P1:1280}P16:1280~P256:1280P40960AANP:Z01 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F11: program control1<200:1KT$"*":B01WH$(15)1fS(20):S01|Z015:H$(Z):Z1:"DISASSEMBLY START ";A$1A$"Z"3071A$"P":B(B1):B1"printer on":137 :"printer off":1372 A$""A10:1422116:A1A2/"END ADDRESS ";A$2DA$""A$"FFFF"2_116:AEA:AEA1 1422hAA12zB1#2," "2APA:ZX1162AAE A65535ZX16:ZX:1372OP$"":MN$"":PR$"":DA$""2L0:X0:ADA223:A$AD$:17:OPD3TP(OP 192)643*TP1180,232,251,2513[B1#2,A$;5)OP$;20)MN$;26);PR$;45)DA$3~:A$;5)OP$;16)MN$;22);PR$;3K$3K$"X"ZX16:ZX:1373K$"P"ZX16:ZX:A$K$:1393K$"Z"ZX16:ZX:3073B11634 K$"R"ZX16:ZX:1784'K$"S"ZX16:ZX:1734/ZX4<B11474QK$:K$""1654aK$"Z"3074yK$"P"A$K$:1394K$"X"1374K$"S"1734K$"R"1784K$(13)1654:1474S20:"stack full":1374SS1:S(S)AP5 :"subroutine";S;"address";:A$55A$""A0:1475E116:1475oS0AS(S)::"return";S:SS1:1475:"stack empty":1375OP16 2325OP31 1965OP16 184,185,186,187,187,188,189,187,190,191,187,192,193,194,195527762976MN$"NOP":6(MN$"SYNC":6?MN$"bad opcode":6SMN$"LBRA":466gMN$"LBSR":466wMN$"DAA":6MN$"ORCC":BT1:306MN$"ANDCC":BT1:306MN$"SEX":6MN$"EXG":1006MN$"TFR":1006ąOP4721679ňOP32199,200,201,202,203,204,205,206,207,208,209,210,211,212,2137MMN$"BRA":2147aMN$"BRN":2147uMN$"BHI":2147MN$"BLS":2147MN$"BCC":2147MN$"BCS":2147MN$"BNE":2147MN$"BEQ":2147MN$"BVC":2148MN$"BVS":2148MN$"BPL":2148)MN$"BMI":2148=MN$"BGE":2148QMN$"BLT":2148eMN$"BGT":2148sMN$"BLE"8օL1MN$"L"MN$:468ׁ418؈OP48218,219,220,221,222,223,224,225,226,227,228,229,230,225,2318MN$"LEAX":529MN$"LEAY":529MN$"LEAS":529.MN$"LEAU":529GPP0:MN$"PSHS":869`PP1:MN$"PULS":869yPP0:MN$"PSHU":869PP1:MN$"PULU":869MN$"bad opcode":9MN$"RTS":9MN$"ABX":9MN$"RTI":9MN$"CWAI":BT1:30:MN$"MUL"::MN$"SWI"::.MD(OP 48)16:XOP 15:sX 235,235,236,237,235,238,239,240,241,242,235,243,244,245,246:MN$"NEG":247:MN$"bad opcode"::MN$"COM":247:MN$"LSR":247:MN$"ROR":247:MN$"ASR":247;MN$"ASL":247;MN$"ROL":247;*MN$"DEC":247;>MN$"INC":247;RMN$"TST":247;vMN$"JMP":OP78OP94235:247;MN$"CLR";OP1634;MD1249,250,52,37;MN$MN$"A":;MN$MN$"B":;XOP 15:BT1<&X 254,255,256,257,258,259,260,261,262,263,264,265,266,268,269<:MN$"SUB":272 MN$"ST":OP143OP207276>OP192X$"X":X$"U">)273>DOP192X$"A":X$"B">SMN$MN$X$>uMD(OP 48)16:OP141 MD4>MD130,34,52,37,41>MN$"bad opcode":>17:OPD>OP33296>D48L1:196>D63MN$"SWI2":>D191291? D131296?*D1D 15:D2(D 240)167?ED13MN$"CMPD":289?aD112MN$"CMPY":289?|D114MN$"LDY":289?D115MN$"STY":289? 296?!BT2:D2 30,34,52,37?"296?#D1D 15:D2(D 240)1611@$D114MN$"LDS":295@%D115MN$"STS":295@%&296@@'BT2:D2 30,34,52,37@W(MN$"bad opcode":@`)17@n*D63296@+D63MN$"SWI3":@,D131296@-D1D 15:D2(D 240)167@.D13MN$"CMPU":305@/D112MN$"CMPS":305@0296A1BT2:D2zC}DoBoC~@mB' '/*ERROR* /~OK `ImC' loCN|'L'܁'JILLEGAL >HEADER Kl5'J'J'$ILLEGAL :BASIC .DATA "MACHINE  D Dčo ' ASCII BINARY B|DATA }č2ōuENDFILEoBCčCD5 %1_'@瀌%9}:&94DDDD5 #Njp95@Z&n@Z&9`9*TAPETYPE THE MICRO WORKSERROR STATUS = RECORD TYPE = FILE NAME = FILE TYPE = TRANSFER ADDRESS = LOAD ADDRESS = THRU 1Jb*a*r:B`9*TAPETYPE $<&: DISASSEMBLER 6809&>: COPYRIGHT (C) 1981&a: SOFT SECTOR MARKETING INC.&h:&: WRITTEN BY L. ASHMUN&:&: VERSION 1.4&& 345& 383& 132& : special dec. to hex.' D5(D416):D6D4D516'D$H$(D5)H$(D6)'#'>: 1 byte dec. to hex.'PD(A):AA1'kDH(D16):DLDDH16'D$H$(DH)H$(DL):OP$OP$D$'D32 D91DA$DA$(D)'': 2 byte dec. to hex.'AD0AD65535AD$"error":( A1(AD4096):AIADA14096(+A2(AI256):AIAIA2256(HA3(AI16):A4AIA316(lAD$H$(A1)H$(A2)H$(A3)H$(A4)(r(: immediate mode(PR$"#":Z1BT(17:PR$PR$D$:Z( (!: direct mode("17:PR$D$(#($: extended mode)%Z12)&17:PR$PR$D$:Z)');(: 1 byte relative mode)D)17)W*D127DD256)o+ADDA:23:PR$AD$)u,)-: 2 byte relative mode).17:D1D:17:D2D)/DD1256D2)0D32767DD65536)1ADDA:23:PR$AD$)2*3: indexed modes*"4R$"":R1$"":17:XZD 16*<5(D 96)3255,56,57*L6R$"X":58*\7R$"Y":58*l8R$"U":58*w9R$"S"*:(D 128)061*;D4D 15:XZ0R1$"-":D4(D416)*<13:PR$R1$D$","R$:*=PBD 15+>PB 64,65,66,67,68,69,70,71,72,70,73,74,75,70,76+2?R$","R$"+":XZ070:83+J@R$","R$"++":83+fAR$",-"R$:XZ070:83+{BR$",--"R$:83+CR$","R$:83+DR$"B,"R$:83+ER$"A,"R$:83+FPR$"bad pbyte":+GR$","R$:77+HR$","R$:79,IR$"D,"R$:83,JR$",PC":77,*KR$",PC":79,?L37:R$PR$:83,iM17:D4D:D127D4(D256):R1$"-",wN13:82,O17:DDD:17:ADDD256D,PAD32767AD(AD65536):R1$"-",Q24:D$AD$,RR$R1$D$R$,SXZ0PR$"("R$")" :PR$R$-T-U: push/pull group-%V17-@WD0PR$"bad pbyte":-ZX(D 128)0PR$",PC"-xY(D 64)0PR$PR$",S/U"-Z(D 32)0PR$PR$",Y"-[(D 16)0PR$PR$",X"-\(D 8)0PR$PR$",DP"-](D 4)0PR$PR$",B".^(D 2)0PR$PR$",A"._(D 1)0PR$PR$",CC".8`PR$(PR$,(PR$)1).YaPP1PR$PR$T$:PR$T$PR$._b.~c: transfer/exchange group.d17:X0:J(D 240)16.eJ1103,104,105,106,107,108,102,102,109,110,111,112.fPR$"bad pbyte":.gPR$PR$"D":113/9630DĬ$BD01D" B%&3F91o6 ?ĮDU1[4&$ 50B#3F96z j'& _H&Sm979  OR7 $ +&ccA!6% Nm.+$6 :Z&~ -Z&0 m&' $. m+ Z&A#9 'U16 '='#' 4'&1!7&ZREG ERR 9m&㦤4`5B17"" " A01F &={6H#6; b' Y& S=A06CCABDPXYUPC ~}|"& "'8Z&2bWRONG 9Z' 8 7_7[Q+̆ooC"7$6ؽخ'~&+!M&}0 } }0| }|99/M''&"lm 945 Z& ϶"&4"Ff Z&594S000&5n44m' oo544&' '&Ԇ ʆ_ Ƨ&Z&94m&'1&'' &or ' 4J&j&2a5oW65 `&479 &09 ','094614 6%2b54DDDD75 #093A946%O4XIXIXIXI 5oǦ-&l0$')''39"'0%#m&4km' CS90 690O6 '0;946!% "_4XIXIXI 05 '0 #"909461bK''* '+ %%?_ ۆ b'0 H ħb5 sigmon 6809 DEBUGGING SYSTEM (C)1980 SIGMA MICROSYSTEMS, INC. C90 690O6 '0;946!% "_4XIXIXI 05 '0 #"909461bK''* '+ %2yC}DoBoC~@mB' '/*ERROR* /~OK `ImC' loCN|'L'܁'JILLEGAL >HEADER Kl5'J'J'$ILLEGAL :BASIC .DATA "MACHINE  D Dčo ' ASCII BINARY B|DATA }č2ōuENDFILEoBCčCD5 %1_'@瀌%9}:&94DDDD5 #Njp95@Z&n@Z&9`9*TAPETYPE THE MICRO WORKSERROR STATUS = RECORD TYPE = FILE NAME = FILE TYPE = TRANSFER ADDRESS = LOAD ADDRESS = THRU 1Jb*a*r:B0' #W00' F9F+8' 0'&+ql 5.ύ8܍3.)GF' 0_'D~'_/?Z&9$_/?Z& Z&9 9!!9!!9' 9@'@ Ə礽& J&ʏ Y'N&M9FILENAME FILE TYPE FROM THRU EXEC LENGTH EXIT TO BASIC OR PRINTTO PRINTER PRINT OR LOG TO PRINTER PRINT OR LOG ALL FILES PRINT OR N> ' 9@'@ Ə礽& J&ʏ Y'N&M9FILENAME FILE TYPEo>0(3wO_4440ƿ~ooo3E(r>>0fP]'% vO OCAN'T DO 417b''&1"m&59,' ' &0줯b015DISASM STEP SSET~EXITlGODUMPLISTDUMPGPRTENOPRTLBREAK PLOAD READWRITEMOVEQFINDMODESPEED &6 B" 3D96  0&0 & 086u 40EO&O/"0I6F m]& 04 2b0m'40'c&b0 &Ob'')@''&5 1O' '4%$7"  *' ' ' '!4m' 6j 5 \&5& L t -0`H050D4O M'?'<'84%37"/0B_M'%H4$]',c,'Z \5 ঀ,& 94DDDD ,;5 0HH0' ?&o 9DXYUSPC??ABCCDP????4* '[̦䅀'f'''''''' ' ' ' 'Ɓ'͆?so5M* ']a9'6M*`Ć-J,B +5 ++ -$ - 0,k B,] A,O~ 6,ݍ:iDӆ,΍+Z6 I H,PCR96v2b`IIII0XYUS6W6 I 4#l695@''&6"96kABX : ADCAADCBADDAADDBADDDANDAANDBANDCASLAH ASLBX ASL xhASRAG ASRBW ASR wgBCC $BCS %BEQ 'BGE ,BGT .BHI "BHS $BITABITBBLE /BLO %BLS #BLT -BMI +BNE &BPL *BRA BRN !BSR BVC (BVS )BSR BRA CLRAO CLRB_ CLR oCMPACMPBCMPXCOMAC COMBS COM scCWAI<DAA  DECAJ DECBZ DEC zjEORAEORBEXG  INCAL INCB\ INC |lJMP ~nJSR LDA LDB LDD LDU LDX LEAS2LEAU3LEAX0LEAY1LSLAH LSLBX LSL xhLSRAD LSRBT LSR tdMUL = NEGA@ NEGBP NEG p`NOP  ORA ORB ORCCPSHS4 PSHU6 PULS5 PULU7 ROLAI ROLBY ROL yiRORAF RORBV ROR vfRTI ; RTS 9 SBCASBCBSEX  STA STB STD STU STX SUBASUBBSUBDSWI ? SYNC TFR  TSTAM TSTB] TST }mSWI2? CMPDCMPYLDY STY LDS STS SWI3? CMPUCMPS??? 971PC,S/U,Y,X,DP,B,A,CC, ̦ ' +7l2b q Oj7  '6 sM']'t''';' 9''''~'n'''@'S5'7' %/#JoM&l'7 |g,jjP ROM!! GO?  b Y'ρN&7 X00Ħ "#&),/258;>ADGJ +9"(9#%9$"9%9&9'9(9)9*9+ 9, 9-9.9/92b V'?1A> ?c >0l*j$ 6Z*j606* & |AdB77_7\ #ڦ?'_FVFVFVFV4 ?&DDDDM&a&d&f&h&1j  G0l h?*z_'\'\'\'\' '@'; خ6  K= P0 < h V ' 9"'''A%%o b - &[&0l K$'ށ#'g-'ҁ0%9#Ɓ''o o m&1>A%]'Z"D#_P'%_20]' '+&K+&\ } z&J4_X'\Y'\U' \S'2c%VVVVʀm '9-& -&\ 0  '0 s' 2 &9''ԁ"'%M' 3B4 '.-m %&L5E67.-4?54b\,52aƌm ' c. -?9l>?1! uC'B'\D&0X4ASM ERR 99Ɵ  :7  &7'ȅ&%p&O1?m'!M'9 ƣ.- V ڃ4 & & l4aa5)5 074<'$' '"@''& xn4 ' ׁ'w's4%l7"h_D8A'UP'.B'ID'6C'IU'"S'Y'X','ҁ ' ʀ @  P&     XXXX4_D& P&/0\X'%\Y' \U'\S'\P'A' \B'\C'\ ',&4mP' jH'5941wo3($1l'$ 1'l% !m&5 '?& Z&񦄁 ' 'bm&1!m&9b9 '?'%K'!'hQ%%}5 $u 0%]'t6 QZ 40c]' '"0Z&\Z4X0E:?5047 5r0#' 'Z&BBREAK ERR 9Z'  Z9'܍ oM&l'99 'o7l2bj1?jW56?;7?n49oQXIQ hihihihi949' B&55 ] *+,-/DG1j0RZ&D+&  RRXG1RI%~40'500 Z&50G2 D'>GE Z*X`'@[[ս 00RZ&G5IGB5I&  Z* [*νB`@9ӽ 0RZ&IB$ D&ӽ IGEBGI Ɔݽ G0G9G0ZZ&91ZGZ&G9 &j 3 '+ ˞GGI$E2Z 'M** M+%`0a=` 0Z  + & 9 *1 & #&r# & 'd #&`0` r4HO_5H# : m-&__X'# Y'XU'`S'ƄP& mC& ~& 9 '% 1+N* & 0* &9%''*MHHHH0*?4 '_4HZoo5H/%0%' # & 'O4Ho7o5H940% #"OmC5t m ʀ+'-&1 &" m+' -'' \ mt> & ' 4ѽ5]& m9~ņ@&2S'U&r /3 'a &] m,' ' & 'H9_P&ʀC&A&B&D&X&Y& S& @' U& @'~O]'ʼn' m'P'C& ~3@' 2C& 3C&v )k&& 3P'_ ' &NYYYY\ &XXXX m,'2  m3  Ĉ'&92&]+YYYY"%\\Z ~~74' + 5~ƆA' ZB'ƋD&R4>5 & &%t&! 4'& 5'\  ' & 9C&&~'~O I&<'~$&~ '' '&~ ?'& pC'?&2'3&   /9'~2A'B&X  /Ƨ9 m,&~R S ~ mR&  Ƅ  o9 &  & ~+~~&"*~'\O 'O_SC+ '~&]*& v''O  4  ' `~3% & ' 'I$ 4ڽ59&9oZ&u~`&#Su 'u2 ~)n~~qn_M'&F '', &]&9r ؁'# ]&| Z &m \&\_ 0 i : 3% / & 4 ?5:' {'&+0&9&K40 .5$ '00 90+9/99)' ADDRESS OVERLAP ;~%(+% $ 0~ܔݜӧ$&ܒ%ӜݒܔӜݔ&9 '& &0 9009`L9% '/'+7%֚ۖ' J/&)Z ֙4/&)90`0 ǟ_ ''-' 0Z$9]'1\&900`0`090Z&$/01Z&$&Z&9&%Ӟ91Z& 92#ݭTȞ 20_ '!j%Tͦ'怟0&& 0m&0; D%,%'񞩟'-&0v% ў %949?9' 50%099 &Y잫$&b$ܙ``J+J Za`ݙ & ֞9 & &$0 9$& & ܈XIXIӈӧ݈%' &$1!B 0J&9p$$ '/]9񦄁&'% /"Z&]'`*P : W.9_\&9O4ܧݧ5' 9ܐ O4ӧ5$@%# 0Z&&9 MEMORY OVERFLOW0AҞ$ Z*_ #\&hx9'4H40O\o5& %-2b5Ȇ 4H4O~0#&}'&5ض&0'05H TAPE FILE ERROR xo55 y']$ B ' &P2 4Z& 40Z&54姀Z&2'  &%o5Hݢݤ9&&0Y' &DELETE ENTIRE BUFFER ? 4\֘ ' o_.o5܍'ט2b{)"' 0 &9\9 PRINTER NOT READY  & $9F 0' %&094HO50%^&4%#1?0 501% #4@_g&Z& 55ہ ' _'['́ &' U^'&4 'P]'Z'\& >ȁ&'01? '& 1!0|g &g'1!0 94؆ '0 %Ȟ0'4&01?0& 㟒|t%9k I&9' 0%9y& &{y9y ܞ' 90&9O%%.'* @0J&y 0#J6~ '~"P 9+99'&ÁD&~~=&X&ƌ Y&I S&  D&9 ԁU&  4 m5B& L&   m9 L&      990'  '&\ 0 CS 9н~/_ p[& m ,'k&~i~R R]&~ف]& &ʏ _5~ '&  ~;ABX:ADCԉADDԋANDԄASLZHASRZGBCC $BCS %BEQ 'BGE ,BGT .BHI "BITԅBLE /BLS #BLT -BMI +BNE &BPL *BRA BSR BVC (BVS )BRN !MUL=SEXCLRZOSYNCMPԁCOMZCORCDAADECZJBHS $LDYюEORԈINCZLLDSLDDJMPnJSR؍LDAԆLDXЎLDULSRZDNEGZ@NOPORAԊPSH4PUL5ROLZIRORZFRTI;RTS9LDBSBCԂSTDPSTYQSTSQSTATSTBPSTXPSUBԀSWI?BLO %TSTZMEXGBTFRBLEA@0STUPORBCWA?݁ 'ˁ0-9.=ݟ=&>0> >0j Z& PZ&> מ; m*&1 'x ='; ݦ ' H&0 ~ &~ '=0j]'Z m &0j  '0-9/ A- Z.0Z& ͽ p n  m / & , g j' }' }&ɽj '@'ͽ  &B 'ʽŀ'~&d~,O & ' ~0j4Z&R 0r5Z&B,~J'rr '%, ƀ–'S ׎  p40930-:9.6 m0-9/,'90 94 & M'3 ̽3 m '4& ,79  m ' F& 7ž0 ' 3'EF m 4'4'8 &̽ - & ,ž0 ' & 3&~ &9R ,ž0' ˍн m,'~R ,ž0'ؖ&Ԏ ̍L,ž0' ˽ m,&"#,ž0'&܎ ~R'ҽO9~Jw 2oZ& p '  p J2 ' -a- mZ&,~J3 pN& 3 mO& m1' Z*Ͻ !o 3&c"c m # ,&3 m~,~JGLPOSMR ,~J mE'ʽ~J ' 3 ~R ,~JR'' 0 3  ~   'NR & 60 ' $ M&* ~M&*P'> 9 p2 m3&~ &2A' B&@/  p2 m32#'~ '.R m,''#. '\'ҽ.9ѽO ~~~ m,' B &_с ' &ʖ@'~M&*~~2#&~,&3' v'&% '*  & &' 9&~=0~'& ##> 9Ž'3 ' &v2A'B&% ~G~ /&~=ƣ9&~s~L+ p*'J m '4 '0,', m '! ','+'-'/'*& '̽9'  ˽+'-'*'/' ~v 0Hb 0H#  O m<'>&v m*&9'& m m#'~̽90H$'W%&~0-9.~40j J&50j  m#&0-:- A-Z/̽Z'ী B@9oo m%  H& m9oo m0'1&Fii B& m #&ؽ9 m#'M0O0HH&~B'M9 m0+ց9.{2b'Ʒ OHmHh}k'DxHlY&l '_ ƌ} s&~'Y {{ W'-~'!47r7np& ͼ4rnp&u}m'v'5oklo}m' v0t{HpRko''t0vmr' ŗp' ~4p'~R1?&~-lov0tHnR}l'{qHoH~rn& H~&  prt9HtR 9kݦ' '|k Zv8 L Z&{8k%7ݦ:& 0 _ L'\.& T /':'  V#9k$9 TBIN9' 90DDDD@{g~PRINTER ? (Y/N) FIND VER 5.0 FIND : FROM THRU TRANSFER ADDR CANNOT FIND THE FILE !" FILE IS !NOT BINARY !" SYSTEM ERROR !" .& T /':'  V#9k$9 TBIN9' 90DDDD@{g~PRINTER ? (Y/N) FIND VER 5.0 FIND : FROM THRU TRANSFER ADDR CANNOT FIND THE FILE !" F{{{2b&}Ď ƷO},|}E|h|f}}' }|}Y&}}o}b|o}}&_ ƌ} s&~|H}}&{{{Y  W'-~|H}}&477& ͼ4&t}}& ŗp' ~4p'~R'J}}}o}}o{{}{|}|}{|}|}{|}|}`|}o}}01?&~{-}N|𽡱~{rn& }|-~{!&} } }ݦ'{|q '|} Z}| L Z&|}%7ݦ:& 0 _ L'\.& T /':'  V#9}$9 TBI{|N9' 90DDDD@~PRINTER ? (Y/N) BINARY COMPARE VER 2.0 MATCH : PRESS ANY KEY : A^}gDDRESS MEMORY FILE $ CANNOT FIND THE FILE !" FILE IS NOT BINARY !" SYSTEM ERROR !" {}$9 TB 2bsU'1H#R4'$ RVDBU>oH%̢#05BD@ 0&B +'> 10 O | 1' ! " 7' O{\5  8' Wg5 2's% /'/ +'+W0W  z  } K'0%%0<%. +' 0' *@&'-&. BB& S'J& ~ H& P s'"f .'2 *. +' .& 0'40 c5R'kL'(J&0 4  C'B& qO!._ +& +-BD /' >*3%c4 8& 7'o!-5@5R'0; y65 4 O5%4 (5歟'5ܭ5o4o5o5 +' /'<#<D$<%' o& #&| 3'-=H% #k - R" %|怿%@ @%=0R0r?'&$i$Ł@$0$V $ց$ /'03$ 00A3d#'" !Z&9'$ ǁ''ρ"&0 "BA'3AlB}'&y"&0 0͍ '_U]'SB [& ]&WB&]';0m'-U_ '&]' Y'SC % ']' YB ]& &00'% & &#''$X?& ]'" ]&3"a<&7"_|}'zx$20S& &U C'P&C D&P,\& g'* &]&!& ħA3_Z&LA 9||''& Ł'&C #'8*%|Ĉ'&TTTT?',?' 3 &P  &C &C9}&^'N&aBP'@&Z p& `& m|怿Đ&s[uď%:"6',X"j+M&F->&7MA' B'D&, '&G'{,PCR 4X`'Y 'U@'S5& 4$5,yŀ&}&d'-P Ѷ&|*-zP &||$c> & 2b}']794 +'B0$ /'80D'D/ )],$%%% %H U C B X R5|$|}'9& &>9| :' J'֍||&|}&i |4;o5F +&DB$<0|'3B/BB1"B%40550&45 DDDD09#99 +' /& V 1' ~%<%,  6'   8& 7& 6' } ˎ 8& 7' & ' 6' Y U &O94W0')j"j'jm/j'5 4 0&}' 1& #5 594 5 4$54ҍ5 #'ۍ  }' 8& 7& Z&9 1' #'d 7'  L0 ㍾o-& ρ& 3_jr$  'l`\&  lKG&0 Y TZ&90 p0 i;0 _ +& /'%0 A 0 50 u"%0Z&DD3BD0 r' >O_HHHH0HHHH::6EM+9>>5@ 0% 9/ A%F/909@0 r0 .)@Q& O(~'S& 0DD'P' T&j 7 1M  8q?Q&5P 1&B 7'̢# #m[.->0 L,& 6|| >>0 &|0 7@Y&YY9N&^Y90 @Z'S'7L& + f 2 +j0 @N&1 EA&& 5 : /EA0 e|& :00 M0000F0 >F,) r m,B% ,| &|,3 ˎ LZ& 3 0i0a 3&4v & ,,>&u m' 5o4oӽ55o94" 4""54 1 /0"D%3 %5%줜D%1" 40 >545Z&94f1 "1>Z&5f 0 =194 --=H' "  - /'1 #D%1><54f1 s"Z&5f 6&#{3b LZ&}z0 E'ց',H&S'D$%$ '#΍ ʍI 0'94p\4@3߆$5 0'51, 6' 3$d%4v +' }'@4d5.5%' &4@-k 5&, 1' % 1''" '"TZ& 1''  1'@ $ ~# '")Z&'"5@3_&} 0'wŁ&g95@ 2&a +' /&Y0&M 3־> 6&0 &|H'%0&0G&Y 940H0%%H' 0 #5"0 ""$$줌%1% -'00#--H=0'Yzw& & &< -- ')'%$'!0' %|>0=D&69A'^C'Z&C+0 014b5b+020AZJH=0Z&9> %0-B}'-9 =9/> !"%&'()*+-./013SORCERERBIN APRENTISBAS#FIND BIN2COMPARE BINSORCERERVIP$SMED BIN SIGMON BINyCBUG BIN,DISA BAS?COLORMONBAS2)COMPARE SRC3DFNCPLTBAS OPYANY BIN4IACKUP DBIN5[XREF BIN KOPYPACKBAS7&2 9 H%0'}'$x-=4H0k%'"H540n@D&Z C& B&QO5 4 H05) --/v--:4L_ # \ 40i50b53 3 34 4 1' /'}'#D 5 +' 4ά<&H-=4'%.+/& ;  , o䦀45/ v( h m, 1'%0 !'  0&}' 1' m''7&55 J&5 S&sH&4D *5D3m,b/& ;  ,Qo4/U *}' C  ;' 3s5 2fOL , 0&}&%5  0m//-4=H#55<&5],/= * ;'; Z'm-, *m,/5 0'- *." .&'J&5 #@'* .'}' /&H5Y /' H-="0 5 - +& *9],/*44 <1"<5 /'$& 4'T! 6' 8& 7' 4&  /&}&J&940&5 6' 9SRCFCB $ * error *#FCC #FCB #FDB #EQU#NAM #ORG #END #FCC '/'# THE SOURCERER #2.1 BY F.DELARGY#(C) 1983 COMPUTERWARE #TYPE IN STARTING ADDRESS:#TYPE IN ENDING ADDRESS :# [S]CREEN [P]RINTER [Q]UIT# [T]APE [D]ISK# PROGRAM:#PAGE No. # FILENAME: # [S]YMBOLIC [L]ONG [Z]AP#TABLES?#[A]LPHA OR [N]UMERIC#[C]:FCC [B]:FCB [D]:FDB#USE PREVIOUS TABLES#NEW ADDRESS:#THIS IS PASS ONE CHOOSE RANGE FOR LABELS #THIS IS PASS TWO CHOOSE RANGE TO OUTPUT # [R]ESTART [J]UMP [C]ONT [L]IST# HIT ANY KEY TO CONTINUE# LINE NUMBERS?# [Y OR N]#START OF TABLE # END OF TABLE # * no room for labels at $#SINGLE FCB'S#ALL LABELS?#SORTING LABELS #PREPARE DEVICE # *** END ***#LABEL BUFFER: $#LAST MEM LOC= $#MODIFY TABLES ?:# [Z]AP [D]ELETE [A]DD [C]ONT#TABLE NUMBER: #TABLE START END TYPE# SORRY, TABLE SPACE FULL MUST DELETE TABLE TO MAKE ROOM # RS EDITASM+ FORMAT? #DXYUSP??ABCD????PSYXDBACNEG ??? ??? COM LSR ??? ROR ASR ASL ROL DEC ??? INC TST JMP CLR ??? ??? NOP SYNC??? ??? BRA BSR ??? DAA ORCC??? ANDCSEX EXG TFR BRA BRN BHI BLS BHS BLO BNE BEQ BVC BVS BPL BMI BGE BLT BGT BLE LEAXLEAYLEASLEAUPSHSPULSPSHUPULU??? RTS ABX RTI CWAIMUL ??? SWI SUBACMPASBCASUBDANDABITALDA STA EORAADCAORA ADDACMPXJSR LDX STX CMPDADDDSTD LDD $RRCC??? ANDCSEX EXG TFR BRA BRN BHI BLS BHS BLO BNE BEQ BVC BVS BPL BMI BGE BLT BGT BLE LEAXLEAYLEAS&$ :** SOURCERER'S APPRENTICE **&G:***** BY FRANK DELARGY *****&i:** (C) 1983 COMPUTERWARE **&(:START, END AND EXEC ADDRESS&2:*--------------------------*&<:200,&H3E00&F: 10) "tAPE OR dISK";&PDEVICE$: DEVICE$"" 80'Z'Dd DEVICE$"D" DEVICE1 : DEVICE$"T" DEVICE1 : 80']n DEVICE1 460'wx0:8)"PREPARE DISK"'@ 128,"";: "WHAT IS THE FILE NAME: ";FILE$' "WHAT IS EXTENTION: ";EXT$:FILE$FILE$"/"EXT$'RECNO1( "D",1,FILE$,1( #1,1 FLDNAME$(# 350(a FLDVAL0 FLDVAL255 200 : "PLEASE RE-INPUT": 70(zȅ FLDVAL255 270(ҁ 350:LNGTHFLDVAL256: 350:LNGTHLNGTHFLDVAL(܁ 350:STARTFLDVAL256: 350:STARTSTARTFLDVAL) "START ADDRESS : $";:VLUESTART: 390)(LASTSTARTLNGTH)[ "END ADDRESS : $";:VLUELNGTHSTART: 390)xRECNORECNOLNGTH: 180) 350)LASTVALFLDVAL)" 350), FLDVAL0 LASTVAL0 "error": 330*6 350:VLUEFLDVAL256: 350:VLUEFLDVALVLUE*&@ "EXECUTE ADDRESS:$";: 390*.J 1*4T*L^ RECNO(1) 410*oh #1,RECNO:FLDVAL(FLDNAME$)*rRECNORECNO1*|* ("0000"(VLUE),4)**0: 10) "ERROR"**" HIT KEY TO RESTART"*A$: A$"" 440+ 60+:TAPE LOOKER+֞+5 N&H3E00 &H3E70+N D$: N,("&H"D$)+T+[0+k1&H3E00+" PREPARE TAPE"+:5)"HIT ENTER TO CONTINUE"+&A$: A$"" 550+00+:A1(0),"DSTART256(&H1E7)(&H1E8):EXCA256(&H9D)(&H9E):MENDA1START,XN@224,5)"START ADDRESS :$";:VLUESTART: 390,X5)"END ADDRESS :$";:VLUEMEND: 390,b5)"EXECUTE ADDRESS :$";:VLUEEXCA: 390,l5)"DO YOU WANT TO CONTINUE",vANSER$: ANSER$"" 630- ANSER$"Y" 510 : 690-u CC,00,00,ED,8D,00,6A,30,8D,00,68,9F,7E,BD,A7,01,26,3D,0D,7C,26,F7,B6,3E,7B,81,02,26,F0- 9F,7E,C6,08,30,8D,00,4E,10,8E,04,0B,10,9F,88,A6,80. BD,A3,0A,5A,26,F8,BD,A7,7C,BD,A7,0B,26,13,0D,7C,2B,15,DC,7C,4F,E3,8D,00,2A,ED,8D,00,26,9F,7E,20,E8. BD,A7,E9,7E,A6,19,BD,A7,E9,EC,8D,00,22,DD,9D,EC,8D,00,1E,FD,01,E7,12,12,12,12,EC,8D,00,04,7E,B4,F4,12.D,00,4E,10,8E,04,0B,10,9F,88,A6,80. BD,A3,0A,5A,26,F8,BD,A7,7C,BD,A7,0B,26,13,0D,7C,2B,15,DC,7C,4F,E3,8D,00,2Alm8,rm73,pay,tm3,bm62 The SOURCERER INTRODUCTION: Computerware is making a large investment in the software future of the Color Computer. We are working on software products at both the assembly and BASIC language level, as well as both serious and entertainment orientented. To achive this goal, we need your support... One of the problems that developers of software have is that it takes a lot of initial time and money to 'create' the product before any revenue from its sale is generated. All too often when it is finished, customers who are not familiar with the development cycle for software products, see a cassette or disk and a manual and perceive that that is what the product cost. NOT TRUE!! To be able to recover the development cost on inexpensive software, the manufacturer has to be able to sell a large number of copies. This is where you, the customer, can help by not giving away (or accepting from others) copyrighted software - actually any software product that is being offered for sale. We have a lot of customers who tell us that they actively support us because they want our support in the years to come. When you think about that fact it makes sence. If we can't make enough sales because people are stealing copies of our products we will not continue to put our efforts into developing those products. So the bottom line is simply this: respect the copyright of software and do your part by not giving away or accepting copies of software that is offered for sale. Thank You, Computerware LICENSE: Computerware Sourcerer, In all machine readable formats, and the written documentation accompanying them are copyrighted. The purchase of Computerware Sourcerer conveys to the purchaser a license to use Computerware Sourcerer for his/her own use, and not for sale or free distribution to others. No other license, expressed or implied is granted. WARRENTY INFORMATION: The license to use Computerware Sourcerer is sold AS IS without warrenty. This warranty is inlieu of all other warranties expressed or implied. Computerware does not warrant the suitablity of Sourcerer for any particular user application and will not be responsible for damages incidental to its use in a user system. If this product should fail to load during the first 90 days of use, simply return the ORIGINAL cassette or disk along with a copy of the recipt for a free replacement. Please try the back side of your cassette before returning it. If this program fails to load after the 90 day warranty, just send your ORIGINAL cassette or disk along with $5.00 for cassette versions or $8.00 for disk versions to Computerware and we will repair or replace it at our option. The SOURCERER THE SOURCERER Source Generator for the 6809 OVERVIEW The Sourcerer is probably the most powerful disassembler/source generator available for the TRS-80 Color Computer. It is written in position independent code and is just over 6.5k bytes long. All that is required is 16k of memory and standard BASIC. (32k of memory may be required to disassemble larger programs and is required to run the COMPARE program.) Output to printer, disk and cassette as well as the screen is supported. There are a number of different modes available to make the resulting source code as meaningful as possible. WHAT YOU GET If you purchased the Sourcerer on cassette, you will find the file SOURCERER on side 1 and a BASCI program called the Sourcerer's Apprentice (filename APRENTIS) on side 2. the Apprentice allows cassette users to find start, end, and transfer addresses of cassette files. If you purchased the Sourcerer on disk, you will find the files SORCERER/BIN, APRENTIS/BAS, FIND/BIN, and COMPARE/BIN. The first two are the same as supplied on cassette. The FIND program does the same thing as the Apprentice, but works only for disk files and is written in machine language. The COMPARE program does a file to memory, byte by byte compare. You can use this to make sure that your reassembled code is the same as the code you originally dissembled. Instructions for the Apprentice, FIND, and COMPARE can be found in Appendix A. GETTING STARTED Before you start, you should load the program you intend to disassemble on into memory. The Sourcerer coexists in memory with the program it is disassembling. To load the Sourcerer from cassette, put the tape in the player and press the PLAY button. Type CLOADM and press the ENTER key. To load from disk, put the diskette in dirve 0 and type LOADM"SOURCERER and press the ENTER key. Once the program has loaded, type EXEC to start it up. NOTE: The SOurcerer normally loads from $1000 to $2A88. If this conflicts with the code you will be disassembling, you should load the program with an offset. For example, LOADM"SOURCERER",&H5000 will load the program into memory starting at &6000. (This assumes that you have 32k of memory.) If you don't know the start and end addresses of the object program, use the included program 'FIND' or 'APRENTIS'. (See Appendix A) The SOUCERER Once the program has started, you will see on the screen: THE SOURCERER v.r BY F.DELARGY (c) 1983 COMPUTERWARE [S]CREEN [P]RINTER [Q]UIT [T]APE [D]ISK The v.r is the version and the release number. The present number is 2.0 but this may change as additional features are added. At this point, you should select the device you want the output to go to. You may select Q to Quit. If you selected the screen for output, you should skip to the next section titled Modes of Execution. Note that the output will be sent to the screen at the same time it is being sent to any other device. If you select Tape, Disk or the Printer, you will be asked for the filename to use for the resulting file. This name will appear at the top of the listing. The filename you enter should be eight (8) or less characters long. Do NOT enter an extension for disk files, it will automatically be set .SRC. If you requested output to a disk or cassette file, you will next be asked if you want the file to be written in EDTASM+ format. If you are not making a Symbolic dissembly, you should answer NO. Due to limitations in the EDTASM+ file format which are not in other assemblers (like our Macro Assembler), you will need to use this option if you intend to re-assemble the file with EDTASM+. A positive response will cause the resulting file to have no NAM statement, single FCB's and FDB's, and TAB characters instead of spaces. (See Appendix B). After you enter the filename, you will be asked if you want line numbers included in the file. Some assemblers require line numbers, others don't. Check your particular assembler manual to see if you need them. COmputerware's Macro assembler does not need line numbers and in fact will not work if there are line numbers in the source file. MODES OF EXECUTION There are three modes of execution in the Sourcerer. Each is designed to help you get a more understandable (and assemblable) source code. Each of these modes is discussed below. ZAP MODE: Most machine language programs have ASCII strings and address or data tables interspersed throughout the program. Indentification of these areas will be the moast difficult part of disassembling most programs. Sometimes it will be easy to find these areas as they may be placed at the end of the program (like the Sourcerer and Find) but other times it will take a fair amount of analysis to find them. The Zap mode is used to help find areas of the program which are not valid 6809 code. Within the Zap mode, there are two sub-modes - Numeric and Alphanumeric. The SOURCERER Alpha mode will display an ASCII dump of the range of memory specified. This is useful for finding strings. The numeric mode displays a hex dump of the range of memory specified. A numeric Zap sent to the printer will also have the ASCII representation displayed. This is probably the best way to use the Zap mode. This will help you find specific addresses for the start and end of tables. Examples of each of these modes can be found in Appendix C. As soon as you enter the ending address, you will be asked to make sure the output device is ready. When it is, press any key and the listing will start. You can press the BREAK key at any time during the listing to stop it. LONG MODE: The long disassembly mode can be used as a method of documentation or as an interactive analysis or debugging tool, it produces an assembly listing that uses absolute addresses as opposed to symbols and labels. Each output line consists of the following fields. LINE NUMBERS ADDRESS MACHINE CODE MNEMONIC DATA (Optional) For Example: 0044 0F78 BDCF37 JSR $CF37 Any areas of meory that cannot me disassembled will be printed with an FCB of the bytes in question and a comment line of *ERROR*. These are the areas that should be investigated further with the Zap mode. This output was designed to look like a assembly listing. Since the machine code is included in the listing, you cannot reassemble a long disassembly. (See Symbolic Mode below.) After selecting the Long mode of disassembly, you will be asked for the starting and ending addresses to work on. Remember, the program you want to work on MUST be in memory befor the start. If you have already found some areas of memory that are tables (FCC's, FCB's, or FDB's), you cn define them now. If you don't have any tables, answer the TABLES? prompt with a N and go on to the next section. If you do have tables to define, the first thing you will be asked is if you want singl FCB's. Some assemblers can only handle one FCB per line of code. Others, like our Macro Assembler, can have more than one per line. Check your specific assembler manual to find out for sure. The SOURCERER Next you will enter the start and end of each table you found. You also get to tell the sourcerer if the table is to be made up of FCC's, FCB's, or FDB's. After you enter the information for the last table, enter the start address for the next table as FFFF. The maximum number of tables is 32, after you enter the 32nd tables, the program will automatically move on. If you have previously defined some table, you are given the option of re-using them. You can either use the tables as they are or make changes and additions to the table list. If you ask to make changes, you will see up to three screens of 12 previoulsy defined tables (8 on the last screen for a total of 32). You now have the option of (A)dding new tables, (D)eleting old tables, temporarlly going to the (Z)ap mode to find more tables, or (C)ontinuing with the disassembly. If you need to change a table, first Delete it then re-enter it correctly. The Long disassembly is a one-pass process. As soon as you finish entering the table information, you will be asked to make sure that the output device is ready. Press any key and the listing will start. SYMBOLIC MODE: The Symbolic mode is made the most powerful available. With a symbolic disassembly to tape or disk, you can read the resulting source file with an assembler and immediately assemble the code with or without any modifications you wish to make. You can, for example, disassemble you favorite game and change the scoring rules, number of players, or any other feature you want and then reassemble your own custom version of Space Bleepers. The Symbolic mode is a two pass process. During the first pass, the Sourcerer finds all the extended addresses and assigns symbols to them. Any extended addresses which are not within the range of the code being disassembled are put in as EQUate lines at the top of the listing. Labels and symbols are mode up of the letters R, X, B, C, U, or H and the actual address in hex. The letters stand for RAM, eXtended BASIC ROM, Standard BASIC ROM, Cartridge area, Undefined memory, and Hardware addresses respectively. This will make it easy for you to use an editor and change any familiar addresses to the more common name. For example, the label BA002 can be changed to CHROUT. (The character output vector). Most editors allow you to change all occurences of the label with only one change command. You can also add commens while using the editor. The SOURCERER Upon selecting the symbolic mode, you will be asked if you want all the labels. If you respond (N)o, the Sourcerer will produce labels for program counter relative instructions only. These include Load Effective Address (LEAX, LEAY, etc.) and Branch or Jump to Subroutine (JSR, BSR). This should suffice for most programs. Next, you will be asked to enter the size of the label buffer. A $0600 byte buffer is usually enough for a 8k program such as the BASIC ROM. Most programs will require less than this. The Sourcerer will display the last memory location to be used for the label buffer on the sreen. If this number falls outside your available meory or overlaps the program you are disassembling, you should start over and use a smaller buffer. Pass one of the Symbolic Mode just assigns symbols to appropriate addresses. You must enter the starting and ending addresses for pass one to work on. If you have tables to define you will be allowed to enter them at this point. (See above for details). CONTROL FUNCTIONS During a listing to the screen, there are anumber of keys that the Sourcerer listens to. These are: KEY FUNCTION --- -------- BREAK 1 - Change from listing mode to paging mode. 2 - Stops the Disassembly and returns to the Menu. NOTE: Pressing the BREAK key will stop the disassembly to any device. S 1 - While in Symbolic mode, Skips EQUates 2 - During listing, toggles list speed (fast/slow). H Halts output until another key is pressed. J Jumps toa new address. Continue disassembly from there. B Go Back to where you were before the last jump. L Change from paging to Listing mode. C Continue disassembling for one page. R Quit. Return to menu. The SOURCERER APPENDIX A The Additional Utility Programs As mentioned before, there are some utility programs included with the Soucerer which will make your source generating a lot easier. Below, you will find instructions for using these programs. The Sourcerer's Apprentice This program is located on the back of the cassette. It is written in BASIC and should therefore be loaded with CLOAD from tape or LOAD"APRENTIS from disk. Once the program is loaded, type RUN to start it up. YOu will first ne asked if you are working from Tape or Disk. Press 'T' or 'D'. If you selected tape, you will be told to get the tape ready and press ENTER. Make sure the tape is positioned just before the file you are interested in and the PLAY button is pressed before pressing ENTER. The start, end, and transfer addresses of the next file on the tape will be displayed to the screen. If you selected disk, you will be asked for the filename and the extention. Again, the start, end, and transfer addresses will be displayed on the screen. FIND (Disk Version only) FIND is similar to the Apprentice. To run FIND, simply type LOADM"FIND and press ENTER. The program will EXECute automatically after loading. Now just enter the filename of the disk file you are interested in. You are given the option at this point to direct the output to the printer. Any character other than 'Y' will cause the output to go to the screen. In a few moments, the start, end, and transfer addresses will be displayed. To exit FIND, just press ENTER when it asks for a filename. FIND loads from $0F00 through $1202. COMPARE (Disk version only) COMPARE is used to find any differences between two binary files. To use COMPARE, you should first load one of the files into memory. Then type LOADM"COMPARE. The program will automatically EXECute. At the MATCH: prompt, enter the filename of the other file (the one you DIDN'T load into memory). COMPARE will then give you the option of having the output sent to the printer. FInally, COMPARE will produce a table showing the addresses where it found differences between the file and memory. COMPARE loads from $7B00 through $7DC4. The SOURCERER APPENDIX B Modifying the Sourcerer There are a few areas of the Sourcerer which can be modified by the user to reflect his own system. It is recommended that you make the changes desired and save the new version onto a new disk, NOT your original master disk. If your printer requires line feeds after each cariage return, just POKE &H1002,1 and they will be added by the program. If this location contains a 0, no line feeds are sent. The program defaults to no line feeds (this is standard for most printers). If you are using an alternate screen display (like a terminal or our 64k Screen Expander), you can tell the Sourcerer to use extra lines on the screen. Just POKE &H1005,n where the n is equal to the number of lines you are capable of displaying minus 1. This is set to 14 as the program is supplied. For the Screen Expander, you should poke this location with a 23. If you are only using Radio Shack's EDTASM+ assembler, you will want to POKE &H1003,1. After this change, the Sourcerer will always write EDTASM+ compatible files to the disk. If you will never use the EDTASM+ format, you will want to POKE &H1003,255. With this change, the Sourcerer will always write standard files to the disk. If you are using both formats, leave this byte a 0 and you will be prompted each time you write a disk file. APPENDIX C A sample Session with the Sourcerer Disassembling FIND.BIN On the following pages, you will find instructions and sample listings for disassembling the FIND.BIN file supplied on the disk. The first page is a numeric ZAP which makes it easy to see that there are tables from 116B to 1177 (FCB's) and from 1178 to 1202 (FCC's). With these tables entered, the resulting long and symbolic disassemblies are shown on the next four pages. 6 q1`}~ (C) 1980 BY THE MICRO WORKS4 4a`55/HHHH4'9DDDD09#"4 5呂&9;0+ /+.9 2_*M+S&P9'Ӂ1&o_#445j' 2al_'4HHHH4 M__5u402~db%a䭟&d0-?_0a bj&bSA b0d&2f99 S1500404 C0C402׍M0 Z4;460A1ҍ-+),*%#4@Aħh%-Z&2b5=z504!&54ABDFH2bT4M0i2a   4A:545.Z&j&2a 4X,Z\& ! &'9#! 1?&'918   1({b0-AF.=V' 90da2c$0p~9^U&Z|oH'F&6lM+5 '#&a% m'z"`m&k  0& 40*oool䣄$4bJcc'05m&2b5'd oo=0%49"04 b=4c b=%aM&b$la Ł &A50u'*+~0] d04妠&5l'礁 &4ƆhaiYJ*5nP'0C& 1'&ݕ9W)$vf$1H 0406彣00$0 Z&40df4@l5@502d9M K H^r W 8 G]R]IJMCS!B"UAD'LTPX$.=* CABDXYUP SEFHINZVC?'0J&0n CBUG:M &.4P"G$"D$ CM&, &鞈@ ߍ49H  &~M*g OJ&'@54P"G$"G%ܕDV 4ܕDV.4ܕ&"Tfja&55ܕ&9 'V &4&0" : &'% 큌%``큌% 0  &܈݈  54P_ 4ܕ&dYY ja&2by qn564P_ 4ܕ&dYY ja&2by qn5o>0(3wO_4440ƿ~ooo3E(r>>0fP]'% vO OCAN'T DO 417b''&1"m&59,' ' &0줯b015DISASM STEP SSET~EXITlGODUMPLISTDUMPGPRTENOPRTLBREAK PLOAD READWRITEMOVEQFINDMODESPEED &6 B" 3D96  0&0 & 086u 40EO&O/"0I6F m]& 04 2b0m'40'c&b0 &Ob'')@''&5 1O' '4%$7"  *' ' ' '!4m' 6j 5 \&5& L t -0`H050D4O M'?'<'84%37"/0B_M'%H4$]',c,'Z \5 ঀ,& 94DDDD ,;5 0HH0' ?&o 9DXYUSPC??ABCCDP????4* '[̦䅀'f'''''''' ' ' ' 'Ɓ'͆?so5M* ']a9'6M*`Ć-J,B +5 ++ -$ - 0,k B,] A,O~ 6,ݍ:iDӆ,΍+Z6 I H,PCR96v2b`IIII0XYUS6W6 I 4#l695@''&6"96kABX : ADCAADCBADDAADDBADDDANDAANDBANDCASLAH ASLBX ASL xhASRAG ASRBW ASR wgBCC $BCS %BEQ 'BGE ,BGT .BHI "BHS $BITABITBBLE /BLO %BLS #BLT -BMI +BNE &BPL *BRA BRN !BSR BVC (BVS )BSR BRA CLRAO CLRB_ CLR oCMPACMPBCMPXCOMAC COMBS COM scCWAI<DAA  DECAJ DECBZ DEC zjEORAEORBEXG  INCAL INCB\ INC |lJMP ~nJSR LDA LDB LDD LDU LDX LEAS2LEAU3LEAX0LEAY1LSLAH LSLBX LSL xhLSRAD LSRBT LSR tdMUL = NEGA@ NEGBP NEG p`NOP  ORA ORB ORCCPSHS4 PSHU6 PULS5 PULU7 ROLAI ROLBY ROL yiRORAF RORBV ROR vfRTI ; RTS 9 SBCASBCBSEX  STA STB STD STU STX SUBASUBBSUBDSWI ? SYNC TFR  TSTAM TSTB] TST }mSWI2? CMPDCMPYLDY STY LDS STS SWI3? CMPUCMPS??? 971PC,S/U,Y,X,DP,B,A,CC, ̦ ' +7l2b q Oj7  '6 sM']'t''';' 9''''~'n'''@'S5'7' %/#JoM&l'7 |g,jjP ROM!! GO?  b Y'ρN&7 X00Ħ "#&),/258;>ADGJ +9"(9#%9$"9%9&9'9(9)9*9+ 9, 9-9.9/92b V'?1A> ?c >0l*j$ 6Z*j606* & |AdB77_7\ #ڦ?'_FVFVFVFV4 ?&DDDDM&a&d&f&h&1j  G0l h?*z_'\'\'\'\' '@'; خ6  K= P0 < h V ' 9"'''A%%o b - &[&0l K$'ށ#'g-'ҁ0%9#Ɓ''o o m&1>A%]'Z"D#_P'%_20]' '+&K+&\ } z&J4_X'\Y'\U' \S'2c%VVVVʀm '9-& -&\ 0  '0 s' 2 &9''ԁ"'%M' 3B4 '.-m %&L5E67.-4?54b\,52aƌm ' c. -?9l>?1! uC'B'\D&0X4ASM ERR 99Ɵ  :7  &7'ȅ&%p&O1?m'!M'9 ƣ.- V ڃ4 & & l4aa5)5 074<'$' '"@''& xn4 ' ׁ'w's4%l7"h_D8A'UP'.B'ID'6C'IU'"S'Y'X','ҁ ' ʀ @  P&     XXXX4_D& P&/0\X'%\Y' \U'\S'\P'A' \B'\C'\ ',&4mP' jH'5941wo3($1l'$ 1'l% !m&5 '?& Z&񦄁 ' 'bm&1!m&9b9 '?'%K'!'hQ%%}5 $u 0%]'t6 QZ 40c]' '"0Z&\Z4X0E:?5047 5r0#' 'Z&BBREAK ERR 9Z'  Z9'܍ oM&l'99 'o7l2bj1?jW56?;7?n49o/9630DĬ$BD01D" B%&3F91o6 ?ĮDU1[4&$ 50B#3F96z j'& _H&Sm979  OR7 $ +&ccA!6% Nm.+$6 :Z&~ -Z&0 m&' $. m+ Z&A#9 'U16 '='#' 4'&1!7&ZREG ERR 9m&㦤4`5B17"" " A01F &={6H#6; b' Y& S=A06CCABDPXYUPC ~}|"& "'8Z&2bWRONG 9Z' 8 7_7[Q+̆ooC"7$6ؽخ'~&+!M&}0 } }0| }|99/M''&"lm 945 Z& ϶"&4"Ff Z&594S000&5n44m' oo544&' '&Ԇ ʆ_ Ƨ&Z&94m&'1&'' &or ' 4J&j&2a5oW65 `&479 &09 ','094614 6%2b54DDDD75 #093A946%O4XIXIXIXI 5oǦ-&l0$')''39"'0%#m&4km' CS90 690O6 '0;946!% "_4XIXIXI 05 '0 #"909461bK''* '+ %%?_ ۆ b'0 H ħb5 sigmon 6809 DEBUGGING SYSTEM (C)1980 SIGMA MICROSYSTEMS, INC. C90 690O6 '0;946!% "_4XIXIXI 05 '0 #"909461bK''* '+ %2yC}DoBoC~@mB' '/*ERROR* /~OK `ImC' loCN|'L'܁'JILLEGAL >HEADER Kl5'J'J'$ILLEGAL :BASIC .DATA "MACHINE  D Dčo ' ASCII BINARY B|DATA }č2ōuENDFILEoBCčCD5 %1_'@瀌%9}:&94DDDD5 #Njp95@Z&n@Z&9`9*TAPETYPE THE MICRO WORKSERROR STATUS = RECORD TYPE = FILE NAME = FILE TYPE = TRANSFER ADDRESS = LOAD ADDRESS = THRU 1Jb*a*r:B0' #W00' F9F+8' 0'&+ql 5.ύ8܍3.)GF' 0_'D~'_/?Z&9$_/?Z& Z&9 9!!9!!9' 9@'@ Ə礽& J&ʏ Y'N&M9FILENAME FILE TYPE FROM THRU EXEC LENGTH EXIT TO BASIC OR PRINTTO PRINTER PRINT OR LOG TO PRINTER PRINT OR LOG ALL FILES PRINT OR N> ' 9@'@ Ə礽& J&ʏ Y'N&M9FILENAME FILE TYPE2zC}DoBoC~@mB' '/*ERROR* /~OK `ImC' loCN|'L'܁'JILLEGAL >HEADER Kl5'J'J'$ILLEGAL :BASIC .DATA "MACHINE  D Dčo ' ASCII BINARY B|DATA }č2ōuENDFILEoBCčCD5 %1_'@瀌%9}:&94DDDD5 #Njp95@Z&n@Z&9`9*TAPETYPE THE MICRO WORKSERROR STATUS = RECORD TYPE = FILE NAME = FILE TYPE = TRANSFER ADDRESS = LOAD ADDRESS = THRU 1Jb*a*r:B`9*TAPETYPE && : TRS-80 COLOR COMPUTER&=: MONITOR PROGRAM (C) BY&Z: DOUGLAS R COOK WB7SOW&w(: 3895 WEST WESTLAND DR&2: WEST JORDAN, UTAH 84084&<: 801-561-4005&F: A(16)'P"SELECT- DUMP, ENTER, SAVE, LOAD, PEEK, EXAMINE, PRINT OR INSTRUCTIONS";C$'5Z (C$,2)"DU" 190'Od (C$,2)"EN" 310'in (C$,2)"SA" 390'x (C$,2)"LO" 480' (C$,2)"PE" 570' (C$,2)"IN" 620' (C$,2)"PR" 680' (C$,2)"EX" 790' 80( : DUMP SUBROUTINE($"START ADDRESS";AD(:ȉ"END ADDRESS";EN(NҀ AAD EN 8(W܇ A;(e D0 7(sF(AD)( (F);" ";( D(( A("Q:: 80(, ENTER SUBROUTINE)6" Y=YES, ENTER KEY FOR NO, END TO END":"START ADDRESS";AD)@ AAD 32768::32K)-J A;" ";: H)7T A,H)^ A;H;:" ENTER KEY TO RESUME, Y TO REDU, END TO STOP ";Q$: Q$"Y" 330)h Q$"END" : 80)r A)| SAVE SUBROUTINE)"START ADDRESS";AD)"END ADDRESS";EN*"O",1,"DATA"*" BAD EN 16: J0 15*9A(J1)(BJ): J*#1,A(1),A(2),A(3),A(4),A(5),A(6),A(7),A(8),A(9),A(10),A(11),A(12),A(13),A(14),A(15),A(16):: B;A(1): B*‡#1,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*̚1:Q: 80*ց 80+"LOAD ADDRESS";AD+"I",1,"DATA"+/ CAD 32767 16+#1,A(1),A(2),A(3),A(4),A(5),A(6),A(7),A(8),A(9),A(10),A(11),A(12),A(13),A(14),A(15),A(16)+ J0 15: CJ,A(J1): CJ;(CJ),A(J1): J, A(1)A(2)A(3)A(4)A(5)A(6)A(7)A(8)A(9)18 550,  C,&1:Q: 80,20 PEEK SUBROUTINE,J:"START ADDRESS";AD,`D"END ADDRESS";EN,pN DAD EN,XS(D): D;(D),S;(S);" ";(S): D,b Q: 80,l:" INPUT DECIMAL OR HEXADECIMAL NUMBERS THIS WAY-"-v" DECIMAL NUMBERS DIRECT"-" HEX NUMBERS PRECEEDED BY- &H LIKE THIS &HA7A7 SHIFT @ WILL STOP PROGRAM AND ANY KEY WILL CONTINUE PROGRAM"-:" THIS PROGRAM WILL NOT RUN THE PEEK,SAVE OR DUMP FUNCTION WITHOUT EXTENDED COLOR BASIC!". :" ***ENTER KEY FOR SELECTIONS***".-Q: 80.E"START ADDRESS";AS.["END ADDRESS";ES.p AAS ES 25.Ƈ (A);" ";.Ѐ D0 24.S(AD). (S);. D.. A. Q$:: Q$"END" : 80."START ADDRESS";AF/ "END ADDRESS";EF/ *EF32768/04 AAF EF/>C(A):A;(A),C;" ";(C);" ";(C):"CHANGE";QQ$: (QQ$,1)"Y" 850/H (QQ$,1)"E" 870:/M (QQ$,1)"" 8600 R"CHANGE TO ";D: A,D: A;(A),D;" ";(D);" ";(D):Q$: Q$"END" 8700\: A0f: 800%pAF EF/>C(A):A;(A),C;" ";(C);" ";(C):"CHANGE";QQ$: (QQ$,1)"Y" 850/H (QQ$,1)"E" 870:/M (QQ$,1)"" 8600 R"CHANGE TO ";D: A,D: A;(A),D;" ";(D);" ";(D):Q$: Q$"E???????????????????????????????????????????????????2 WoRoIoFoCo@@ 0 1"40 Ѧ15Z&섃@94DDDD 59 #79p90 r10 e411'`5Z4&591% 0 :1B0 r-1"'90 !10 o90 1a0 :id`Z&0VQ40 15=`02`0 PH%4m Z'0 945 0^'1@ 190m'O 9H0 } k5S'LG&0 n''c'0 C'R&O01 49''49"@592b90 ߁G&ׁ1'2'' '0 HHHH4 0 09j0l+9301 4p 301 4pt<54p'&5C&0%3A 0940 \1590 t0`0@0(4 1Ȯ5 E11>@0'Z&0'Z& 1"0 1"001 5 93m'9'^' '' &: 0 0 00r4 5@0)4 $&94fĦ4&90#A3^0m''!' &2 : 易`| 90 `0&90q 01%0&Z&0003q}1!p% 턦 3B1!턦Ā&1;4 !&334@&5 Z&܍w B0We '' '0%9"@ZZ&1(34@O0oo'45J' 3BĀ&}rm ''P91v3&'3AZ&94@3>4@05@5@Ć?F 13R0[453AZ'4& 5ħO_930[3A'ħZ&0901#a'Y&ꍛ1 Z&;19⦤90P0&94@0,c5@4 4 1Ն1*015@&2b9&404@1!4' '5@50 13_-0,'' O10r''ŁD'T&D90 Z&''& '' %@$@@ Z&ֆ`9`@\ 09p3Ae1454&3lZ&@'7l5090E L 'Z&BIN94V5O)섍1?&O_ - R901p%40 '9}ڟ~|&⦄&4050453ā ' &Z&9j0e0c 040m&%'o3DB1%0~6| &J~|*B3V Z&~2dd4  0C5 0&Z& Y1`ܝ~-41!034 5 0)195O0'10504;| '5p}4|*齧1/050 G'9 9' HHHHZ&`9''3 & 3[m'050%:%A%ہF"4A$@5A% 91!m'2d91>4 `Z&59hCi`qyxrBY`JASON`Rn`WARDjjjjjDISKjjjjjBACKUP``MASTERCABDXYUPSX Y U PC S A BDP CC CC BK BK BKXXXX XXXX XXXXEFHINZVC 'd DISPLAYCHANGEENTER BYTEMOVEZAPCHANGEJUMPHEXDECIMALBREAKPOINTSEARCHWRITEGRAPHIC MODECHANGE PAGE SELECTTRANSFER ROM TO RAMGOmmARE`YOU`SURE`hYmNiCOMMANDPRESS ANY KEY TO CONTINUEjjjDISK``ERRORjjjTHE ORACLE IS IN RAMhTiAPE`OR`hDiISKPROGRAM`LOADS`TOO`LOW`IN`RAMLOADINGjjjINPUT ERRORjjjLOAD468$1236a NAME`mTRAn`ADDn`mSTART`ADDn`mEND`ADDn`mDPRESS ANY KEY TO CONTINUEjjjDISK``ERRORjjjTHE ORACLE IS IN RAMhTiAPE`OR`hDiISKPROGRAM`LOADS`TOO`LOW`IN`RAMLOADINGjjjINPUT ERRORjjjLOAD4& ROMPACK TO TAPE TO DISK&> FIRST CSAVEM THE ROMPACK&[ TO TAPE (C000 TO DFFF)&~(:"WHAT IS THE TAPE FILENAME"&2 NAME$&