IMD 1.16: 29/05/2007 12:08:48 FOGCPM.017 --FOGCPM017DZ COM DZ COM !"DZ COM #$%&-12-00 85 -CPM017 DOCDZ-DXERSDOC'()DZINSTALCOMG*+,-./012DZMENU OVR<3456789:DZMSGS OVR;<=>?@ABCDEFGHIJDZMSGS OVRKLMNOPQRSTUVWXYZDZMSGS OVR[\]^_`abcdefghijDZMSGS OVR+klmnopZ80MR COMiqrstuvwxyz{|}~Z80MR DOCZ80MR DOCLZ80MR TXTZ80MR TXTPHASE1 AZM This is the disk name. ú COPYRIGHT (C) 1985 WASHINGTON ELECTRONICS & SYSTEMS LTDUse your WordStar 3.3 Instal prog for screen, NOT printerPied Piper, Hazletine 1500P~~~ x:Z> ~_x)B{*́{~>v|͋{3?XWçx: !62:=2:ogq~wçx >>_xw( > >_xw~w(#:ogq~w:<>332!6~А!2wçx:o&)^#V:o&~wçx nf~w~G>p8'w~Onf zy(~<5>çx~0 !g!n~2çx :03:o&!~w:! 8:<2 :!0:<2͘w:o&)^#V:o&~w:А!0p:g()~>?w~>xxw~!(~h~(: 0":o&~! :o&:p8w~͌~<5çx ~G>p8w> ͌~<5çx> ͌çx~ 0 ~0͌~Ao& }͌çx~>x)~)çxnf|Tnf&}Tçx~ 8 ~> x͒~> ,0͌çx nfB8nf! ͤͽnf! J0 }͌çx>ݾ0>0͌> ݾ0~T>h͌~͒çxNF!B0>0͌NF! B0nfr>h͌ nfͽçx@~G>p8wo&~͌~<5… çx :ݾ0:w:~А!G0q:g( :0>h!4:G ~!Hw~!Iw~!Hw~!Iw~(!=~(!B~2 ~2 ͘w~2~2çx: :w:o&~!8n:P :o&:O~o&B}H:А!0!P:o&:0#:o&)^#V:o&6 :<2:o&~wçx>(:w:w>:o& }ͥ >>*U ~~ͥ çx: !Ր: !ՐG0 ::ͥ çx :w:w> 6:ݾ>?!5 n&n&~~8y~n&~ͥ n&n&~G~p8.wn&)^#Vn&~(͘w~<5 n&:wn&6~?G0*n&n&~~8! 6~ͥ çx:>ͥ çx:0 :<͌ ͘ws:046~! 0"n&!~(n&!6 ~p8Ywo&:wn&6:G>pڣ wn&)^#Vn&6 ~<5~ ~<5T çx:G>p wo&: !6!6O!6!6!!:G>pڋw:Yn&)!PgÁn&)!Pnf ut~<5:A çx :!>>_xwʼ> >_xwnf~w~: l ~!6nf:ogq~w:<>332!!6> çxnf͑nf~%çxçdzbbx!!g*"*6#6ͱ!͂!ͮ#‘E*##ͱE`is#r!"**DM&l!ͽ`is#r*6#6çx!ut*utnfN#FnfB>?~ՐG0"nfutnf^#Vut!!g~ nf"nfnfs#r*##nf+s#rNF* *^#VDM&lͽ`i"nfnfs#rnfnfs#rͱ!͂#nfDM&lͮ*DM&lͽ‘Enf##ͱE`is#rnf*DM&lnfDM&lͽ`is#rnf"çx*ut~(Xnf^#Vrnf##^#Vrnf^#VrU Ͱ nf^#Vutçx *ut6~(enf^#V"NF`iR0NnfNF##^#VB>wnfN#Fnf "nf^#Vut!"~çx*utçxnf406a*!ͤutͱ7 6a6:w6:og)N#FnfB 6:og6Y~Ȑu:og~w:og~w~0$:ݾ ~b͌*<{*́{:og)^#VȀ͋{:og)^#Vnf~w:og6~çx nf#g.nfO utçx >6wog)6#6~og)!g~<5ž!I>${:I>>:J АG0!I>>!m6:I .!Iz͞| !Iz..COMz!I>#H!Iz!m>#H.!mz͞yw:m~Oo&B#}w!m~~!Iz~0Ͱ !Iz>7wr >?͌!I6Q!!!Izi~!!͊}*ͱ|ͱ‘*u0ͱ#‘çDZMSGS.OVRHit space to continue, or ^U if you've seen enoughx >016<{nf^#V́{Ȁ!͋{nfn&~w~<wçxw~ ͇M!n & DMbzÕ!ʹz ~V! !!ʹz i~! !͊}66666 >͌ ~:! !>:2 !6-: 66p:.А~ АG0 66O:-А~ АG062~0 : 6: : U Ͱ :͌6 ~0X:!0U Ͱ ! :o& }> ! ʹz2>7wr U ! ~Րw>͌ 6:w#n f ͻ}~ Ր0&Ͱ !ʹz >7wr >?͌U ! >͌ U 1ᑷ{çx ~ 0 ~0w~7w~çx 6~0>?>9ݾ>?G0nfn& }w6>~>xxwA>?>Fݾ>?G0nfn&  }w6~çx :w:w:?w:? 06!:>w:> 06!:> 6 >͌ ~А~ АG0 >> > ͌~͌~͌~~ͥ çx>:Eͥ *Brçx>:Fͥ *@rçx>:Gͥ {`iͽU çx@>>ͥ >> :2E>.͌>.͌:2F>> :IG>p8wo&I~͌~<5j:D0͓ WAITz!>7Hͯ z!>7H!z>7wr  Free memory = z>7wr :2Gçx~2 : !6:=G:0:=2:ݾ8 ~@w)~a>?>zݾ>?G0 ~w~w~çx: :ͥ çx!W:>PώDM&lW!>͑CC7 :?JVCW:>(:>ͅ2>Hçx!V çx:V͌çx>(:=2>(:=2çx ~G>p8w͌ U ~<5”:T!0:2T:!8!6>>ͥ çxO>!z>7wr >[͌nfr>]͌>?͌!ut6<n&:Vw:V &>ݾ0Z~=wnf!ͤut[:V!WͿ0.nf!:WOGgoͮ`iututK:V ~ nfut ~?G! U ͞ nfçx>:o& }ͥ  Y/N? z>7wr U !V͑:VͿz@@Fy(KU :V( !V6v:VՐ!0:VͿzFyՐwçx ~ >?>}ݾ>?G~'ՐGwçx:D ~͒~çx:D nfͽ nf, çx:`$66 !DB z>7wr nf^#Vw6~͎ :MАG0$~ >'͌6~͌~$ 6@>ݾ0>,͌~ͻ ~ &:MАnf^#V+͎ G06~?G06i:o& DM:o&BȐV"6HnfͱE^#VDM&l7y"6%:(*nfN#F^#V`iR>?w~=!nfnf^#V+s#r~0>'͌m$nf^#Vw:o&:Iw:o&)*Js#r:L * #??? DB z>7wr nf^#V nfnf:LO^#V +s#rm$nf^#Vgut6 :Ϳz Fy( :wR nfN#Fnf utͨ#DW z>7wr :X ,nf^#Vg.nf^#V#O ut~ nf nf~\:o&~w:o&)nfs#rnfnf^#V#s#r~R R$-$z>7wr  -B!I"P#o`nfnf^#V#s#rçx:0)>nf^#Vr:w> :w:N0 !N6U ö)nf^#V4w*^#Vut:ՐnfN#Fnf`iR>?G':o&)*s#r*~&:o&)6#6:o&)*s#r*Pg:0͞ *f:~ͥ nfN#FnfB0?͠% EQU $-z>7wr nf^#VDM&lnfDM&lͽ`iͽ&*##^#Vut*~&% DS z>7wr ~ nfͱE`is#rnfnfnf^#VDM&lnfDM&lͽ`i &e& .PHASE z >7wr *^#V, \~АnfnfN#F^#VBՐGnf~ՐG0 nf"$OX&&&&%&'*~; 4>;͌:Pw!P6!*^#V^*ͤ`~2P'!*^#V^:Ր!R0*~͌nfr*ͤ`~0YnfN#FnfB >:͌;͎' EQU $-z>7wr nf^#VDM&lnfDM&lͽ`iͽ' EQU z>7wr nf o`*##^#V"U )~)nf^#Vut!M6nf nf^#VutDM&lnfDM&lͽ!W`(nf utU :(:~ͥ NFnfB>ͱEnfDM&l7ߐG0 nfTnf#utnfN#FnfB( >>.:M(:~=ͥ :M͌U ~Ҷ)*^#Vut: 3!utnfͱE^#VDM&lWR)nf6#6dnfNF^#VB8Mnf^#V408nfͽs#rnfNF^#VB8nfnfs#rçx~͌ :w:w*But~!(n&)X^#Vut~!8 :w:wn&)^#V"| n&)^#V"~ݾՐn&)X~=o&)XN#F^#VBАG0O~w~ݾ>?:АG0/n&)^#V"| n&)^#V"~~=o&)Xn&)XN#F^#VBАG0 ~=w:Tݾ8 ~w!T6~͹)çx:͹)!6çx:!b.:o& :OBȐߐ:=G:ՐG0i:=2͌ >>6w>6wА~АGo,~)~ƒ,~<5T,~<5H,U *ButKE*G:O:o&B#!݋ͽ`iutNFnfB,nfutnf}OGnfBut:=͌ :!b.Ͱ nfrnfut:o&)Xnfs#r:o&)nfs#r:o&)6#6:o&)6#6:o&6 >6w¤-nf4Ҿ--nfTnf#ut~<5™-nfut>6wnfww>>~>G?.:5.~w~͌E.>_͌nf#ut~<5-U -:o&)X^#V"@*"çx*ut6KnfBҭ/:w:ݾ.n&)XN#FnfB..~xx݆͌>xx݆͌nf#utÏ.çx:=G:>?:ՐG:Ր:gՐGGP0:w:w>}.n&)X^#V"#"~!+0~}.~~ͥ çx :o&)X^#VutNF*BB>: АGw:o&)X^#V DM*@B>?wnf DM*BB>?w~ݦݶ0+çx:o&)X6#6!6çx&1Auto-build control table: Start addressz(>7w!utg1 Finish addressz(>7wKE*G`iutKE*GW1KE*G`iut!utnfut!D6nf"BNFnfB>:G3nf!J| 2nf"@nfwА~Ϳz&?FyՐGQ2nf#ut3nfB2nf+ ڰ2nfDM&l!ͽ`iwА~$АGҰ2nf+utnf>BnfTc]iutnf>InfTc]iut!utnf#utnf#ut1!D6vçx :wo&)^#Vut:ݾ>~АG҇3~=wo&)^#Vut|„3n&)^#Vut:3~ž3nfTcutnfutçx nf>Bnf]iutnfݾ4nf#ut3nf#>Inf#Tc]iutçx :w:ww:o&)X^#Vut3ut:>r5>$ͭ35>ͭ35:o&)nf͝4.PHASEz>7wnfnf%ms#r5:o&)nf:>nf]is#r5:o&)^#Vut|АnfNF^#V`iR>Gnf~ՐG@5 `5nf:k:w:o&)6#65055 5: i5l5l5l5g4l5l5l5l5l5l5l5l5l5l5l5t4l5l5l5l5l5l5l5l5l5l5l5l5l5l5l5l5c54l544l5l544l5l54444l5l5444l5l5444l5*B,l~k+~~ͥ çx*B,l+S0vçx076Start addressz >7w!ut^6Finish addressz>7w!utnf"Bnf"@!D6~2!6!!!zi~!!͎}!6nfͣb"nf4:ՐG6*^#VutͰ 6 .Z80 ;z>7wr !Iz>7wr nfr>>.nfrͰ NFnfB>NFnfBА:ՐGG:GҜ7!͊$Ͱ :!ҙ7:2;7ͤ7 ENDz>7wr Ͱ !6!6*ͻ}!6!D6çx :>͘8!U6:H8>8Abandon? z >7wr 2Uô8!D6 o!D6*B,lô8!D6Vq!D6:>XА2U!H6ô8>^8LST:z>#w"6ô8>!mz}8.MACz>#w"6ô8ô8 ô8- 8PT8Q7R8S18Wm8X188:U8 6çx 8Auto-build symbol table: Start addressz'>7w!ut39 Finish addressz(>7wKE*G`iutKE*GWo9KE*G`iut!D6nf"B!"@nfͣb"nf͠g!"@!ut!O6v!6NFnfB>:G=:nfDM&lnfDM&lͽd!7,:nf"@nfut!6v!6!͊$Ͱ ü9!O6!D6!60vçx:uo&)9^#V"B:uo&a~w:u=>,2u 6~!>?:ݾ>?Gұ:~͌ çxKE*G:O:o&BDMbͽ`i"Bçx :;: o&)X^#V"vY;: o&)XN#F*vBG;: !:;: G͘Gw;*v"@~ҳ<66:r<*v͠g:IАw~!>ݦҭ<~O*v n&xАw~Lk:ݦ҅=:pڅ=wo&~k~=5l=çx: ¡=!utê=!utnfçx nf6çxS!~nfͳ=<:V 5>:V>~>>!~>Z2>>2>>2>=>>>>>>ú>:V%G>~kú>:V#•>nfut>6wnf}͛knf!ͤut~<5a>ú>K~BҺ>:VG!>B~nf~!z>Bwnf{fçxE>~͌nfr!z>7wr ~ʃ?:? (after z>7wr nf~d?nf~͌nf^#Vrw?) z>7wr ~nfnf=çx:<>ͥ ?Options? (Global/Instr/No-verify/Back/Start)z,>7wr 6!6!6!6!6!6:ݦ҄@<6:Vͅa@!6w@!6w@!6w@!6w@!6w@6:V [@6^@ w@-B8@G @I(@N0@S@@H@~ҁ@K@U ͞ çx:o&xnf&}w: һ@:<2!6>@:o&xnf|w: @:<2!66!utçx !666:>A.A6~WAValues (in hex) to search for? z>7wr !ut66:ݦ_B<~A:V ڷAK:o&x:Vw: ҴA:<2A:V A6A \B:V!WͿ B~'͌6CB \B \B- B B',BFBtAU ͞ çx :<>ͥ ͎BCommand when found?z>7wr 6!6:ݦC<:V B:VB>^͌>N͌!V6 B:V B6B CK:( C:<2o&:VwC ãBU ͞ çx :o&)X^#Vut:o&)^#Vut|eC:o&)^#Vut~|Cnfͣbut~2Dnf^#Vutnf~w:> DNFnfBʼC2DDNFnfBՐ~АGC2DDNFnfBՐ~ՐG D2DD-BCPCTCWnf##^#Vut|C~?Dʹ:LDnf^#V"B 6çx:>EC1E!"B 61Eʹ: 61EX:1EA!6:>A™D!6hB͛?:> JVv1E:o&)X^#Vutnf&}2xnf|2y!6:1E::ͥ 1E::ͥ 1E1E 1E - DADB`DCrDEDFDIDP`DRfDT`DV{DXDEçx:u<>,2uo&)9*Bs#r:uo&a:wçx:o&)^#Vut|Аnf~АGnf:o&)XN#F^#V`iR>GE Enf:k+vçx !ͣbut~eFnf##^#Vutnf~Րnf~;ՐGVFnf^#V|АݶVFnf:knfutEçxDF?-Symbol name? z!>7H:>RH:>w:o&)X^#Vut3ut:>nf!z>7wnf>~F!ͣbut Gnf##^#Vut:o&)nfs#r:k+wH:o&~w EG6L~w:o&)^#VutTcut~nf!z>7wnf>:wKBnfB>?K@nfB>GG:w~k+wH>GDestroy fake symbols?z>7wr 4H>HDestroy ALL symbols?z>7wr Em+vwH8+vwHwH wH - IH?FA=HBFI.GLFRFTFWFYGLH> JVçx :w:o&)X^#Vut3ut͞ U :!I:ͥ >;͌>;nfnf=~k+çx:=22>çx:>2v*Bdut|’I!ͣbut6~w~sKnfut^#Vut:Inf"@:o&)X*@s#rnf~dJ:>BА:>TАGaJ:"J:o&)nfs#rnffnfrnf~OaJnf^#VrJ:>PА:>TАGJ:šJ:o&)nfs#r>nf~͌nfr!nf^#V^:Jnfͤ`nf##^#Vut~!K:w:ݾpKU :!^K~On&B}w:w~w:o& DMo&`iRȐ[KsKeK:GҥK:!œKèKͰ U vK0vçx: K:o& }22K:22=2>çx:>ͱLKI 6L:22=2> 6LͮK 6L:G:3LKIaL:=G:ML:o& }2:2:2> 6L:R2R 6L:Q2Q 6L:P2P 6LeIL!6 6LLL L - LBLCKFgLILO LPLRKSLTLUuLVLZLLçx: L6M6MLLW:o&)X^#VDM&l~O`hͽ`i"B+S0çx:w~!>n&)XKB^#VBАGxM~eIN 6çx: WN:o&)X^#V"B:o&)X^#VDM&l*BDM&lͽͽ`i"BåNKB!BmN!"BåNKE*G*BDM&l7Nʹ:åN:O:o&B#DM*BB"B 6çx :o&)Xn& C܌͂^#VDM&lͮ`i"B+: N+NS0vçx:G>pEOwo&6 n&)6#6n&)6#6~<5Oç *** DazzleStar *** (July 85)COPYRIGHT (C) 1985 Washington Electronics & Systems Ltd, all rights reservedxA!HOʹz"!>7H6:G>p1Pw͌ ~!z>7wr U ~7H~<5Oç!:Pɒ:2DPS :2ͮK!Q6!P6N!?6 !>6 Ͱ =ͶO!"B"@͓:mP> ͬSàP͓sfY 6!U6:US!N6:2 :2!?6 :PH!6:9Q!6>Q*** Interrupted *** Press ESCAPEz!>7wr U !?͑:?Q!? :?!Q> 6YͰ/!?͑:?WQm!? !>6:?ͅ2?Ϳz 8Fy…QH!6:?S:>0>?>9!>>?GһQ:>!ͫNþQ S:?!ͫNS: QhFQ S:!R:=:ͥ RLS::=:<,ͥ S::<:<,ͥ S:!MR:<:ͥ PR9MS9MSLSS4E:?ARwRAddressz>7w!"BßR:o&)^#V"B 6:?A°R> JVSͼMSNS: R+4R S7S:>ͬ0> JV 6SRDS:vSKS:!SͮK:!$S mS:o&)X:o&):o&)6#6:o&)6#6:k+0S̀HSjES S3-ᑋQ|S|SQQQQQQQQQQ|SpS|S|S|S|S|SbRRRRQbR|S|S|SRRR_R|SSQRRR|S|SSYR4RvSSR|S|S|SQ4R|SàP:͌ DZMENU.OVRx!6 :M0!6:M>?:M>?~ ՐGGX>͌ :TݾEW!T6!@Vʹz ~0X!S!?!@Vʹz i~!S!?͊}<{*Ś{ȀT?͋{*Su:TݾАG0*Sͻ}F~2T>6wn&RͰT#?!@Vʹz \>PH~<5 W!M6KWON z!>HaWOFFz!>H:TG>pXwn&RͰTutn& #}͌ 66nf#~G~xX~W~6wo&nf#~݆o&~w~<5#X~o£X~{X:RwËX:QwËX:PwËX-f`XsrXuiXWn&))#~w6ôX~: rxw~͌~-U :2<2: : !YYv!T6çx:T Ր>!T>GBY> JVçy888880008;_ggssNOv[HALԀa@LD q,RET j a[RE JR c,DJNZ [JR LD q,[JP CALL "LD (l),*LD h,(lJP e,CALL e,LD s,f'DA/CP7SC?CCEX (SP),H[JP (HLEX DE,HDLD SP,HEEXLD (t), LD A,(tz i ADD HL,RST OUT (p),IN A,(p****EX AF,AFADD AADC ASUBSBC AANDXORORCPNNPPRLRRRRSLSRSRHINDEÿBIRESELCIOULCIO(HL(HLBDHSBDHABDSа101820283038POPUSg k b,#i z EX (SP),[JP (yLD SP, ADD y,a4j vFLD q,pLD d,6LD d,!LD y,"LD (l),*LD y,(l*DNEE[RETGLD I,WLD A,M[RETOLD R,_LD A,gRRoRLĠmɨmİoIҸoDFIM VIM ^IM @IN q,(CAOUT (C),BSBC HL,JADC HL,CLD (l),KLD s,(lg k b,xnfn&ͿxͿz z͍xe:E0$:Rw: 6:8 : 6 6!M6*~]~͎ ~Ϳz @FyՐG:MАG0">'͌~͈͌]' ; z>7wr  ~0~͌~0~T/~0~͌nfr-DB]NB]PB]XB]YB]]:E!Q:ՐG0~0*Fͤ`:E!O0)!6nf~!z>Bwnf͖d{fçx >;͌>$͌>ݾ0>-͌~O!B}T>+͌~Tçxnf| nf6e_nf̈́xutnfz!ؑ3YP8KsrutNFnf NFnf zznf#^Vz_çxnf~ nf6#6l`nf~7HMn&~ А!P0!6! ut\a ; z!^>7Hn&~͌~G~Ϳz FyՐnfB>?nfB>GGG05nfB8nfDM&l!ͽ`iut~T nfrçx ~ՐnfN#FnfB>GnfNF^#VB>Gwçx *^ut~ՐnfNF^#VB>G0nf##^#Vutnfutçx nfͣbut~ՐnfNF^#VBАG0nf##^#Vutnfutçx *^utNF^#VB8 !ut~("*^*^^#Vnf^b0 *^ut~Րnf~ՐGnf##^#VNF^#VB>G0nf##^#Vutnfutçx :^А*^NF^#VBАG0 *^utZnfTcut~Րnf##^#VNF^#VBАG0nf##^#Vutnfutnfçx*^utNF^#V`iR0 !ut~(@nf##^#Vut| (nfNF^#V`iR0nfutnfutçxe??z!>BH*^ut:^(*^NF^#VB0 *^ut!E6~Րw~fnfutNF^#VBАnf~ՐG0Dnf~!ʹzFy((!E6nf"F!nf^#V^6nfNF^#V`iR06nf##^#Vut| 6ceçx ~ nf##*^s#rnf"^*nf##nf##nf##nfs#r!H6:H2^çxS!!gnfutnfs#rnf~w!nfh_nfnffçxçx nf~͌nf~O nf~͌nf~͌çx ~ ( nf~wçxnf~O(9nf~!5gnf~!5gnf~!5gçx !6I!6M!6H!6 !6 !6 *^ut:^(0*^NF^#V`iR8*^ut:^2:^2:^2~Րw~infutNF^#VB86nf~Аnf~OՐGhnfNF^#VB 3nf~2nf~2nf~2nf"FnfNF^#V`iR8 nfPg~0nf"^:2^:2^:2^~0nf##^#Vut| 6 hçx ~ՐnfNF^#VBАGnf~АGnf~OՐGwçxnfut| *^ut4nfnf i0nfutnf##^#Vutnfnf i0nfuth!!gnfut6nfnfs#rnf6 nf6 nf6 nfnffnfutnfut~Ϳz `Fy(nf~w9~Ϳz Fy(nf~wnf~w!"^!H6nfçx*^ut~(Wnf~Аnf~OАG0nf^#Vnf^#VVnf##^#Vutçxnf~Аwnf~OАGw*^ut!ut~Րw~0CNFnfB 6~0&nfutnf##^#Vut| 6~(V~ nf##^#V"^nf##nf##!!*!^6:^2^!"^~0jçx:͌ *^ut~Ր:!>?Gmnfut~mnfutnf~(nf##^#V^#VutNFnfB8P>/͌nf^#Vrnff:o& DM:o&`iRȐmU :<͌ nf##^#VutAl:!8U çxnfut| *^utnf##^#Vut!!gnfut6nfnfs#rnf6Onfnfs#rnfnffj!^6nfutçx:^0p*^ut!ut!ut~(D͘0Gnf^#Vutnfutnfutnf##^#Vut!^6:^2^çx !ut*͋0n<{*́{Ȁ~w͋{~ '*͋0V<{*́{Ȁ~w͋{~!Ϳ0%nf!~OGgoͮ`iutnfutçxy!mzo.DZz!>(H6!z~2q!!!zi~!!͊}*u)q͘0)q<{*́{Ȁ~w͋{Tnut͖dut~ppp*u*͋GOp<{*́{Ȁ~w͋{~/ co~A>?>Zݾ>?G0C~O !nfTnnf%mutnf~nf]iutõop6*͋0U<{*́{Ȁ~w͋{~Ր~ ՐG~B>G0~G!>B~Bwnf{f--o/o{oRp~ nf"@6~=w*u0 H{*́{͋{co*ͻ}!z>7wr >?͌U !"^çxu:w !6!mzrq.DZz!>H!mz͒q.DZBz!>H!mzͲq.$$$z!>H!z~0!!!zi~*;}!!!zi~!!͎}*^u t ~ Ր:Grn f ut~ G>-͌nf^#Vr>,͌n f fnf~O nf^#VrWnf~͌nf^#Vr!nf^#V^B{*́{!z>͗|͋{Ͱ n f ##^#Vu t r:҃s!z~0]!H6*ͻ}!!!zi~!!!z|*ͻ}!!!zi~!!͊}!!!z|*ͻ}~ 2çx!"^!H6!"^çx~2s*s#2s8:so& }2sçx>I͌:s͌çx !"snfY~ wnf#Y~2s:s o&)X^#V"s:sqt>Xs$>Ys>!͌0gtWt_tgtgtitw>?͌*s"swnfY~2s2s[v:so&X~2sBv:s#v!N6?v>(͌s>+͌:so&:s\:s2I:so&"J>)͌*s#"s?v!sʹzͿz|yy(9>(!sʹzFy(#:sSu!I6B!I6W -2Eu:EuLu!I6T!I6L*sg"J:I\*s "s?v:so& }2I*so&"J:I\*s#"s?v*swKso& #"s>ݾ0*sDM&l!ͽ`i"s!I6R*s"J:I\*s~>^*s#"s)s$>\͌-[tdtl unupuxuyvvþv:s:sxx2s:s :s?2s:s?2s:so&)X^#V"s:s(%:s=2s*sY~0 *s#"s*s#"s:sw*st~2s:s͌:s :sG:0nf#ut:s>?Ks*sBАGҕt -*.t?ttçx nf"s"s!"s*s2s*s#"sKMY*sB *s2s*s"s!s6*s#"s*s#"s*sY~2s8*s#Y~:sxx*sY.x*s#"s!s6!sVo͎z#~#_W ͎z#^#͎z^#V# ͎z^#V#~## {ͪz:&i+R8 !9x8A/ %(#8 G DG~ #͚z͚zxAO͌yy͚zy8 w#+w# +#͚zx8Aw#+w# # +#_z^#V#x0H(G6#͎zF#x0 yG+( >Vo͎zF!9N#T] ͎zF#&h*>S:,{((F !/{ !<2,{"-{2/{"-{:/{߀:/{!,{5!0{-{ >F{oRead/write nesting too deep"zN#F* nfr8B0 5|" | nf|(nfr8B05|utů;n nf|("{!{f.<*nfnf!H*(>>Wo>ŷ yG|!9~( #~|  #NG~|#~|*-{wOy> |͍">6i>;$:\((W~ M< @~2\\!\l ~Nw#q#\<(*:(>D>Fz}oError in RENAME>> 2}"iۅ>;:}wn f ͺ}*>"|( #} ;( $>F }oCLOSE/ERASE error>2~">6> >:~(6\< +: >8$ (!b\<( \>*">62h~i;:h~(ۅ$!\ *:]! (>N~oBad device name:^# :_# # {s#rF ~ݶ Iut*CONMlKBDT{LSTT{NULT{{PUNT{RDRT{>D` oDevice errorF!|utw   ww^^^#V*-{7~ Uf ~WQgv MnfF~(* (  wN( ~ (6 6 N(*-{\nf *~*F@~*\6 Ͷ6 Ͷ*-{nf*-{7N *-{\6 Ͷ6 Ͷ"|(( %#} F>Foo>} ^ >FoAt end-of-fileNo reset/rewriteNo rewrite$^VnNFnGNEFFuqpuqpyݾxݾ}ݾnf^ut4}ݾxݾyݾ~ͫ͡  ,~݆w44: ͗#͵Ɂ͗f0.<N3 ut640͗<(6D͗(60͗nf)=uD|ݖ0͗^t0͗yͫqEpFuGFO͗͡ѷ !4E 4F 4G͡srͫ0:!0͛<(Ƃ> 6͡~w~6:"0͛< ͗<Ƃ͵ɁN D^:6jg!̄v( q!qpsr u t 6z(v N`h͂}Ӂ(cͿ [N!"}(Ӂ(^ZͿ? ͡sr6Nh`͂ͽy(= Z( ~ݾ(3͡~wͫ8  ,Ɂ~ݾ^Z(?~ ^Z͗f͗>Uo`h  >DoMust be discfileDisc full2$| }(=3!&6!9N #y(#~ (,( 4~( (=O!\i!h6!$Fɷ( (& %? (empty string):$=>!%6?#~6 G>No͑!  !~'w#~'w!u t PTEM0000$$$O0y0nf}(  )t!~>2څ͑nf~ :څO  = ͛͛:څ(PMWrong file typeˈ/Cannot close fileDirectory full >DoDisc full:Ȓ>! (@#w#6:K#6.K +!] ѷREH#w> + Not found: 6 #6 y  #  (z:(L.(1*(y,(u;8@8m`8_[(c](_w#v J~ (CLv F ~ /x( &>~@80w6 É~w>>ɗ|(>BK|(x r , >Jo!ɗ|(>BK|(|(x؊DMӍ x( Ӎx怴ي`iӍ>Oo!|(> !>))jj0#RBJ#= ͖&@ zx&x(x/Gy/O&z ( bj0|R>Jo!xox/Gy/Oz/W{/_.@z ( 8`is{š|>O>Jo!xox/Gy/Oz/W{/_Ӎ.Ӎ|!x y!R0 G`iRDMBDMR7a ,$yOxGR{# z# {# z#  ####^#V# DMZBDMROGogDMbb|!BDM!R>Oo ,$yOxGRBRN ˻>@T`iBBN(RBDM욍|`iRT]BDM|!RZ{(!yK?0# xQ?0" !x(A(GA(El&OxOGDy7OxOGyɷ&D@ono|(g}(%|} < $8$yDq>Jo>@oDo|(yOg}(*|} < $8$|qy >OD>Jo>oOߎDoyO|(g}(|(E(gy/g}/o#!_z( ~8<0 r5>To(~wJ &Or5_ŷ(:~<85y81Gz8,y(9~<(YN &Op!9>To&93!9N#&iF#x(y8O  (#(  {<<XO`h!9~&o9#C(OF0&DoxO!9N#w&xDo9xwH+O#/Ô!9ܔN!9N ^#Vbk++!9ܔ(T]OBN>ToNw O #&i9#`h>@ΐ>=>=>=>=ɷDV#BV^V#B V^^#V#9!9^#V#9Ú~#_Wø~#ogq#p#s#r#^#{ W9!9^#9* 9>So^#V#N#F#^#V#^#V#q#p#s#r#BK0  yo&D)!0B0 B(R!)BK^#V 0#(##^#V#{# z# ##B>Co{;"!9"!@"""Ò*ƒ" !"!"!"!""" ""C2Œ!P"c . 8,"!i6i6 2,{^#V+z((* |(R(nf} | ѯHd^#Vbkt#u#F6#* utS qp66x(qp!ut6 !! >MVa!d~( 5*A~w#"Ac !e"A!cF#~(4_#6 6 M^V!d6"!R8*^#Vz !~#foB8 (=B06*R x y *!*" |!~#foB}|"b| *R !"w#w^#V| !"*bs#rN#F!R8*B88*ƒ+B00*B8!^#V|(>B0\ շR8)( >Po*R !" ^#V}| *BѷR *R"|/g}/o" #6##^#VB  w# w #^#Vr+sq#p{z* 8" 8 |/g}/o" 9>HoO0:^_Byoɷ*00^#B _B y(*|L}L B B*% Y(y(Nn7 0 B B* ̀ Error $ at address $Continue ? (Y/N) $ $G~ _(*~ $F(N nf 6 6 n f x6|;nf!PN# > > ~#F  x:=.g !#Corrupt$No room$N#F#^#V#  N#F#㹏k 7CŒĒbb. 54}# ;{:{s+{  uu muBss&ls^^FW^ zYyY RnY0?V>VBsOS$9#94 9X1W1,>1G5 k D '&4PDZ-DXERS.DOC 25 April 1985 Long distance users of bulletin boards -------------------------------------- Lon distanc call moun u i you'r transferrin th whol o th DazzleSta suite Anyon wh woul prefe t sen m dis i welcom t d so Pleas tak not o th following: Sen th dis i re-usabl maile (I' no fussy home-mad i ok bu it' n goo i hav t destro i t ge i open). * Enclos ` (fiv pound U sterling t cove copyin cost an retur postage Overseas sugges yo includ pape money roughl equivalen value i an reasonabl currency (no on that' inflatin 50 pe annum) I yo wan ai mai o something sa so an includ th additiona cost. * Mak sur yo sen good-brand little-use disk don' inten t hav head-cras o Bdo Er jus becaus som cheapskat pulle a ol dis ou o th garbag can I don' lik  th loo o you dis I'l mail it straight back to you -- fair warning? * FORMAT THE DISK. Formats (in order of preference): a. Pied Piper (DS 96tpi) b. Gemini QDDS (96tpi) c. Epson PX-8 cassettes (sufficient for 150KB) d An othe 96tp o 48tp 5 forma writabl b the Wester Digita 179 serie chip e. 8" SSSD (may take several months) I "d the includ a muc inf a yo ca concernin you format an pu o th dis fil with fo example th number t 1000 i ASCI (separate b spac o cr/l o whateve yo like) Th fil mus b bi enoug t generat severa extent i th directory 7 o 80K woul b nice I you dis i doubl sided an goe u on sid completely an then the other, make sure the disk is more than half full. Format whic ma giv m problems anythin tha ha singl densit o track 0, and double elsewhere. Format definitel won' bothe wit include 3" 3.5" Apple an hard-sectore forma (i.e there' mor tha on inde hol i you disk) any 100tpi format. Don' forge t includ you ow nam an address I yo migh pu th suit o bulleti boar the th phon numbe o you bulleti board it bau rate hours nam an addres o sysop et woul b interesting. I yo als includ self-addresse pre-pai envelop I'l tr t le yo kno i late versio get released. John Washington Washington Electronics and Systems Ltd 33 Turnoak Avenue, Woking, Surrey GU22 0AJ England t generat severa extent i th directory 7 o 80K woul b nice I you dis i doubl sided an goe u on sid completely an then the other, make sure the disk is more than half full. Format whic ma giv m problems anythin tha ha singl densit o track 0, and double elsewhere. Format definitel won' bothe wit include 3" 3.5" Apê#Y/^6~G~x>?~Onf +NF`iR>?G0.nf+~O n&~w~Zݾ0 n& }w~È/Y/W:@/:ݾ@/G0v!8>ͲÈ/Y/:E/: @/G0!>>).nf6:(-nf:wnfnf~́w!>>).È/!Iz0v̓DZINSTAL program for configuring DazzleStar July8534>ͲvͲ!>F!!! ͸DZ.COM3!! !*!kc*ͨZ" S!Ͳ!N"*~ *#"*~ʽv0*** WARNING ***3>Ͳvi*** Configuration area may be corrupt.3&>ͲvͰ*** You are recommended to type "X" and investigate.34>Ͳ!H6!I6PA Nascom/Gemini 25x80 addressed thru BIOS3*>P.ͦ*B Nascom/MAP-80 25x80 with VFC at F8003'>P.ͦSC Pied Piper 24x80 ADM-3A3>P.ͦ̈́D Pied Piper 24x80 Hazletine 15003">P.ͦͭE Epson PX-8 8x80 ADM-3A3>P.ͦF Newbury Labs VDU3>P.ͦG Superbrain3 >P.ͦH Cifer 28873 >P.ͦ I Osborne3 >P.ͦ6X exit3>P.ͦvͲh Type choice, then 3>P.ͦ: 5i͂? 3>ͲcZ"~2S!Ͳ:́2vͲ!6>!62o&J6:o&O6:o&T6:o&]6:o&b6:o&g6:P͸.!H6!\6]ͧNascom/Gemini 25x80 thru VFC at F8003$!>P͸.!l6!"m!H6!\6]Pied Piper, ADM-3A3!>P͸.] Pied Piper, Hazletine 15003!>P͸.!K6~!L6!Y6!Z6![6>!62o&]:o&J~w:o&b:o&J~w:P͸.!H6!o6]Newbury Labs VDU3!>P͸.!J6!K6!L6!Y6]Superbrain3 !>P͸.!L6Y!g6!h6!i6~!j6K]+Cifer 28873 !>P͸.!L6P!Y6!g6!h6!i6^!j6$>!62o&]:o&J~w:o&b:o&J~w:P͸.!g6!h6!i6T>!62o&]:o&J~w:o&b:o&J~w:!624:o& :o&J~w=:o& :o&O~wB:o& :o&T~wP:o& :o&g~wg:o& :o&]~wn:o& :o&b~w:.!p8*2:o& :o&~w:P.!!:o& #6!6COPYRIGHT (C) 1985 WASHINGTON ELECTRONICS & SYSTEMS LTD37>P.!!LnUse your WordStar 3.3 Instal prog for screen, NOT printer39>P.!P!!6 ͎rdSt3>P.![!:o2!6:\E/:bE/GV!: `iDo you want the menus in inverse video? (y/n)3->ͲvͲcZ"~2S!Ͳ:́2: @͠:Y !6:0,*!ki*ͨZ"! !Ͳ*xõ4#~#_W #^#^#V# ^#V#~## {:&i+R8 !9!9N#T] F#&h*>S3:S((F !V !<2S"T2Vͱ""T:Vq":V̏"!S5!WT >F 4Read/write nesting too deep(>>W 4>ŷ yG`!9~( #~Q  #NG~`#~Q*Tw!y> Qͱ"%ɯ>"3|( #} 4( $3>F  4CLOSE/ERASE error"3>&214:(m'$!\ *3:]!  (>N+ 4Bad device name:^# :_# #  s#rF ~ݶ Iut*3CON11 KBD LST ! NUL PUN ! RDR! >D   4Device errorF! ut3w   3w3w^^3"31m'>46 n f G!%*3^#V*Tͱ"z!"~ "f ~W"gv MnfR!F~(* (  wN( ~ (6 6 N(*Tͱ""nf R!*ͱ"k!~*"k!F"~*ͱ""6 H!6 H!*Tͱ"k!nf*Tz!"N ͅ!*T"6 H!6 H!"3|(( %#} F>F# 4># ^# >F 4At end-of-fileNo reset/rewriteNo rewrite$^VnNFnGNEFFuqpuqpyݾxݾ}ݾnf^ut4}ݾxݾyݾ~3#=#  ,͊#~݆w44:p0 )##3G#[#)#3f0.<N3 ut640)#3<(6D)#3(60)#3nf)=uD|ݖ0)#^3t0)#3y=#qEpFuGFO3#3)#3ѷ !4E 4F 4G33#sr=#͊#0:p0!0-$<(X$>͟$63#~w~6:p0"0-$< )#3<ʆ&X$†&G#͊#[#N D^ʑ%%!^&v( &&!O&qpsr u t 6z(y&v N`h,}y&e#(cQ#͟$[N!ʹ+}(y&e#(^$Q#$ 3#sr6Nh`,,y(t#= ͙#$ͺ#͟$t#~ݾ(3͙#t#3#~:&w=#͊#8  ,[#~ݾ^$ͺ#$~ ^$)#3f)#3>U 4`h& &>D 4Must be discfileDisc full2&| }(=3!&6!9N #y(#~ (,( 4~( (=O!\*!h6!&Fɷ( (& @'%? (empty string):&=>!&6?#~6 G>N 4#(!'  !n0~'wͮ'#~'wͮ'!6(u t PTEM0000$$$O0y0nf}(  )t!~>2l'#(nf~3:l'O3  = -(-(:l'(P?*MWrong file type]*/Cannot close fileu*Directory full* >D 4Disc full:y0>! (@#w#6:*#6.* +!* ѷREH#w> + Not found: 6 #6 y  # ʦ+ (z:(L.(1*(y,(u;8@8m`8_[(c](_w#v J~ (CLv F ~ /x( &>~@80w6 +~w>>ɗ|(->BK|(-x , , |,->J 4!ɗ|(->BK|(-|(xj,DM- x( -x怴k,`i-->O 4!|(> !>))jj0#RB,J#= DMZ-BDMR-OGogDMbb|!BDM!R>O 4 ,$yOxGR-BRW- ˻>@]-`iBBW-(RBDM-|`iRT]BDM|!RZ{(!yK?0# xQ?0" !x(A(GA(El&OxOG.Dy7OxOGy_z( ~8<0 r5>T 4(~wJ &Or5_ŷ(:~<85y81Gz8,y(9~<(YN &Op!9>T 4&93!9/N!9N ^#Vbk++!9/(T]OBN>T 4Nw O #&i9#`h>@>/>=>=>=>=ɷD^#{ W9!9^#9*39>S 40  //ڣ/yo&D)!0B0 B//R/!)BK^#V 0#(##^#V#{# z# ##/>C 4E5{;"3!9"l0!0"3"3"t0*w0"33!"h0!"f0!f0"j0!"""3"n0"r002v0!P"0 3. 8,"p03!1616 2S^#V+z((*3|(R(nf} | ѯH2^#Vbkt#u#F6#*3utS3qp66x(qp!ut6 !!1>1122!0~( 5*0~w#"00 3!0"0!0F#~(4_#6 6 1^3V!06"3!R8*j0^#Vz f0!~#foB8 (=B06*j0R x y *3!32"33-2! ~#foB}|"2| *j0R !f0"j0w#w^#V| !f0"j0*2s#rN#F!R8*3B88*w0+B00*j0B8!f0^#V|(>B0 3 շR8)( >P 4*j0R !f0"j0 ^#V}| *3BѷR *3R"3|/g}/o"3#6##^#VB  w# w #^#Vr+sq#p{z*3 8"3 8 |/g}/o"39>H 43O0:4_3y 4ɷ*3Ϳ40õ40^#3 43_3 43y(*3|3}3 3 3*3Ϳ4ҵ44 33Y(y(Nʵ4nʵ44 0 3 3*315 Error $ at address $Continue ? (Y/N) $ $G~ _(*~ $F(N nf 6 056 05n f x056|4nf!N# >m >$ ~#F # x:=.g#7!n$k#Corrupt$No room$N#F#^#V#  N#F##555#D533 '"3Cv0u0b0M &&&TbaC RA Cd,"3!R8*j0^#Vz f0!~#foB8 (=B06*j0R x y *3!32"33-2! EE --Cursor Movement-- | -Miscellaneous- | -Other Menus-KK^S char left ^D char right |^A Address ^F Follow |^J Help ^K File/exitEE^E line up ^X line down |^L QF/QA again ^V View |^Q Quick/search FF --Scrolling-- |; Comment ^Y Delete |^B Build control@@^W up line ^Z down line |RETURN Comment (equiv ;) |^P Symbols AA^R up screen ^C down screen|^U Stop a command |^O OnscreenKK 0 redisplay from this line| (17 jul 85) |(^J2 suppresses menu)J&&^J menu HELP==================-Other Menus-^S char left ^D char right |^A Address ^F Follow |^J Help ^K File/exitHH^J1 or ^J2 suppresses the display of menus, leaving more space on screen --Scrolling-- |; Comment ^Y Delete |^B Build controlGG^J3 brings back the menus ^J and anything else displays the fileCC DZMSGS.OVR one page at a time 0 redisplay from this line| (17 jul 85) |(^J2 suppresses menu)K55^K menu FILE OPERATIONS & EXIT TO CP/M her Menus-11S Save control table and symbol table to file .DZ |^J Help ^K File/exit--R Read a .DZ file P Printeaving more space on screenW Write a .MAC file ^Y Delete |^B Build controlQ QUIT and return to CP/M ^J and anything else displays the file11X eXit (after saving tables if necessary) to CP/M time 0 redisplay from this line| (17 jul 85) |(^J2 suppresses menu)Q00^Q menu VARIOUS QUICK & SEARCH FUNCTIONS======== her Menus-99R top file F find value(s)Help ^K File/exitJJC end file A find, plus obey command string%%V return to previous position in file ^Y Delete |^B Build controlKKE top of window B display from next control pointDDX bottom of window P display from next symbol LL T display from next sym or ctrl ptO''^O menu ONSCREEN================= her Menus-44R split near top of screen (i.e. all hex dump)ue(s)Help ^K File/exit77C split near bottom of screen (i.e. all disassembly)obey command string""O split at current cursor positionile ^Y Delete |^B Build controlGGV split as at start-up F Fake symbol display now %ofointGGB/P/T display control/symbol table(s) U User symbol display now %ou GG  S Split user symbol now %osrl ptP$$^P menu SYMBOL TABLE==================== her Menus-44I indirect (i.e. symbol in disassembled instruction)ue(s)Help ^K File/exit66B byte A auto-build symbol table)obey command stringL label IIR relative label ? satisfy all types of referencentT table (e.g. LD HL,T1234 ) W word S Split user symbol now %osrl ptB&&^B menu CONTROL TABLE================== her Menus-FFB bytes I instructions L labels | M messages and bytes t@@W words (numbers, not addresses) usual lo/hi | N numeric onlyand stringGGX words, as W, but hi/lo |_________________________ ..R relative offsets (e.g. DW label-$ ) |isfy all types of referencent77Y delete this entry | H hex ;;A auto-build control table | D decimall now %osrl pt-- menu -=============================== her Menus-/-bytes I instructions L labels | M messages and bytes t**- digit go back locations in filehi | N numeric onlyand stringX words, as W, but hi/lo |_________________________ R relative offsets (e.g. DW label-$ ) |isfy all types of referencentY delete this entry | H hex A auto-build control table | D decimall now %osrl pt / menu This is the penultimate menu of the file, and should never appearII(Good luck with your browsing, you're the kind of person who can probably t@@ send me some good ideas -- I look forward to hearing from you!)and stringX words, as W, but hi/lo |_________________________ COPYRIGHT (C) 1985 e.g. DW label-$ ) |isfy all types of referencent44J Washington, 33 Turnoak Ave, Woking, GU22 0AJ, U.K.hex  17 jul 1985 | D decimall now %osrl pt?BB? menu This is the last menu of the file, and should never appear appearBB unless end of file is read (2ndary menu type not defined?)robably t/?end me some good ideas -- I look forward to hearing from you!)and stringX words, as W, but hi/lo |_________________________ COPYRIGHT (C) 1985 e.g. DW label-$ ) |isfy all types of referencentCOPYRIGHT (C) 1985 noak Ave, Woking, GU22 0AJ, U.K.hex 44J Washington, 33 Turnoak Ave, Woking, GU22 0AJ, U.K.decimall now %osrl pt  17 jul 1985nu of the file, and should never appear appear88======================================================== defined?)robably t/?end me some good ideas -- I look forward to hearing from you!)and stringX words, as W, but hi/lo |_________________________ COPYRIGHT (C) 1985 e.g. DW label-$ ) |isfy all types of referencentCOPYRIGHT (C) 1985 noak Ave, Woking, GU22 0AJ, U.K.hex J Washington, 33 Turnoak Ave, Woking, GU22 0AJ, U.K.decimall now %osrl pt 17 jul 1985nu of the file, and should never appear appear======================================================== defined?)robably t/?end me some good ideas -- I look forward to hearing from you!)and stringX words, as W, but hi/lo |_________________________ COPYRIGHT (C) 1985 e.g. DW label-$ ) |isfy all types of referencentCOPYRIGHT (C) 1985 noak Ave, Woking, GU22 0AJ, U.K.hex J Washington, 33 Turnoak Ave, Woking, GU22 0AJ, U.K.decimall now %osrl pt, as W, but hi/lo |_________________________ COPYRIGHT (C) 1985 e.g. DW label-$ ) |isfy all types of referencentCOPYRIGHT (C) 1985 noak Ave, Woking, GU22 0AJ, U.K.hex J Washington, 33 Turnoak Ave, Woking, GU22 0AJ, U.K.decimall now %osrl pt 17 jul 1985nu of the file, and should never appear appear=========================================== Washington Electronics & Systems Ltd 17 July 85 HELP FILE for DazzleStar Disassembler ===================================== Contents Introduction -------- Starting up (the command line) Windows on the screen Moving thru the file Moving further Command groups Control table & ^KS ^KR HELP! Auto-build control points or symbol names "Onscreen" functions (the ^O family) File commands (the ^K family) Symbol table ^OF, ^OS, ^OU: how they affect display /contents contd next screen -------------------------------------------------------------------------- .c 25 Entering names and phrases into the symbol table Building and destroying the symbol table Comments (adding and deleting them) "Quick" family (^Q) ^QF ^QA improvements Moving forward or back by just a few bytes TYPICAL USE Installatio Notes Rough notes Self-relocating code Symbol table access Wishes DZINSTAL development plans... Feedback Disclaime an Warning MORE PROGRAMS -------------------------------------------------------------------------- .c 25 Introduction Thi fil i DZMSGS.OV an serve a a introductio t DazzleStar. DazzleSta i progra whic ca disassembl CP/M-8 .CO͠ file producin Z8 mnemonics Th firs par o thi documen serve a compromis betwee referenc manua an tutorial an late part discus suc thing a installation printin thi manual an typica method o disassembly. I th descriptions item marke {! ar no ye implemented -------------------------------------------------------------------------- .cp 25 DazzleSta disassemble program producin listin (o sourc tex fil fo inpu t a assembler usin Zilo Z8 mnemonics Mos program hav data a wel a code s DazzleSta keep contro table whic specifie ho eac par o th progra i t b disassembled Ther i als symbo table s tha label an value ca b give whateve name (o phrases even th use wishes. Th contro an symbo table wil b discusse i mor detai later first let' tak loo a ho t ge DazzleSta runnin an th wa you scree i used. -------------------------------------------------------------------------- .c 25 Starting up (the command line) Th fil t b disassemble mus b specifie i th comman tail Sinc th .CO extensio i th mos frequent .CO i adde i n extensio i explicitl given Fo example t disassembl fil FRED.COM typ "D FRED ("D FRED.COM als works) Othe files fo exampl FRED.OVR ca b specifie b givin th nam i full I yo omi th nam o th inpu file DazzleSta wil assum you'r ne use an displa thi "help file -------------------------------------------------------------------------- .cp 25 Windows on the screen Th scree i arrange wit window whic ar independentl updated. .-------------------------------. | Status Line | |-------------------------------| Experienced users can | | suppress the menu to | Men windo | expan th othe windows Info about |-------------------------------| nearby con- | Control window | trol points |-------------------------------| | | You curso i normally Sometimes | Disassembly window | within this window these two |-------------------------------| windows are | Hex dump window or | If disassembly window combined | second disassembly window | is very small, your '-------------------------------' curso may be i thi window -------------------------------------------------------------------------- .c 25 Moving thru the file Th comman key chose ar base o WordStar s yo shoul quickl fin lo o ol friend o you keyboard. Cursor ^E Scroll ^R previous page movement up (or thereabouts) ^S left right ^D ^W scroll up line down ^X ^Z scroll down line ^^ (up) also work, which allows use of ^_ (down) cursor arrows on some machines ^C next page Actually jus th letter alon als wor ok n nee t us . -------------------------------------------------------------------------- .cp 25 Moving further S th scree give vie o you file usuall i tw differen ways Th mai vie i disassembl o th fil (i whateve mod th contro tabl specifie a thi point) an th secon vie show th sam par o th fil a ra he an characters. T mov shor distanc throug th file us th scrol command (especiall ^ an ^R) Ofte you'l wan t mov further s ther ar hand way t d this: Go to address ^A hex address and display ^F goes to the address in the 2nd and 3rd bytes of screenful the instruction specified by the cursor (to remember: A for Address, F for Follow) -------------------------------------------------------------------------- .cp 25 Command groups Som o th comman code ar tw character lon (simila t WordSta wher analogie ar possible) The ar loosel grouped accordin t th firs characte o th pair. Th meaning o thes group wil b explaine later but jus fo th record her the are: ^K- various file commands ^O- Onscreen: how the screen is arranged ^Q- Quick: move quickly to another part of the file ^P- build symbol table ^B- Build control table (forget WordStar paragraph reform, who ^J- Help need para- refor i disassembler?) "Quick i no ver goo mnemoni fo th ^ family bu man o th use ar simila t WordStar fo exampl ^QR ^QC ^QF ^QA ^Q ar al inspire b WordStar. -------------------------------------------------------------------------- .cp 25 Control table DazzleSta build tabl o "contro points (calle th contro table whic decide ho eac par o th inpu fil i displayed Thi tabl ca b modifie wit ^B sequences: Control disassembly ^B Byte (i.e DB) ^B Decima ^B Byte an messages ^BI Instructions ^BH Hexadecimal ^BN Numeric bytes only ^BW Words (i.e. DW) ^BL Labels (i.e. DW label) ^BR Relative labels (i.e. DW label-$) ^BY Delete this entry ^BA Auto-build control table ^BO Offset (.PHASE directive) YES! You can save your work: ^KS Write .DZ file (text file containing all symbols, comments, and control points, so disassembly can continue another day) ^KҠ Rea .DZ file (produced by ^KS) -------------------------------------------------------------------------- .cp 25 HELP! ^J clear th to o th scree t mak mor roo fo displayin code bu turns of th menu. ^J3 turns the menu back on again. ^J returns to the main menu ^J followed by anything else displays this file Whe th firs characte o two-characte comman ha bee typed i th secon characte i no type withi reasonabl tim the th use i prompte b th displa o a appropriat secondar menu. -------------------------------------------------------------------------- .cp 25 Auto-build control points or symbol names ^BA searc fo asci string to auto-buil contro tabl ^PA auto-buil symbo tabl (name derive fro he addresses) Bot o thes command as fo star an a en address I yo specif th whol o larg program yo ma hav t wai significan tim (minutes even) Mor serious yo ma ru ou o memory wit n chanc to save your earlier work -- do use ^KS before trying either ^BA or ^PA. -------------------------------------------------------------------------- .cp 25 "Onscreen" functions, which affect the way the display is presented ^OR most of the screen will be used for hex dump (i.e. screen divider moves near the top of the screen) ^OC most of the screen will be used for instructions etc (i.e. screen divider moves near the bottom of the screen) ^OO split the screen at the current cursor position ^OV a few rows at the bottom of the screen for hex dump, with most of the screen used for instructions etc (i.e. back to the type of presentation used initially) ^OF, ^OS, ^OU toggles described later (see symbol table description) ^OB display control table ^OP display symbol table ^OT display both of them (T for "two") ^OI display instructions (i.e. normal display) -------------------------------------------------------------------------- .cp 25 ^KS save control & symbol tables on disk (.DZ file) ^KQ return to CP/M -- nothing is saved ^KX save control & symbol tables (if altered) and return to CP/M ^KP print part or whole disassembly on LST: ^KW write part or whole disassembly to disk (.MAC file) {! ^KF Files (display directory) (These would be nice,  !} {! ^KO copy but space is not yet !} {! ^KL Login drive available to implement !} {! ^KY Delete a file them) !} {! ^KE Rename !} {! ^KD Do ^KS and return to no-file menu (no such menu yet) !} {! (and maybe never will be) !} -------------------------------------------------------------------------- .cp 25 Symbol table Th symbo tabl ca b though o a severa independen symbo table -- whe a instructio i decode DazzleSta decide wha kin o symbo i involve (fo example byt reference wor reference label relativ label etc) Whe th instructio i displayed you symbo nam i onl use i yo aske fo i t b use fo thi kin o symbol S i i eas t tel DazzleSta t tur this:  LD HL,0100 (size of 256 byte block) ... JP 0100 (restart the program) into: LD HL,blocksize ... JP start without any confusion between the two uses of 0100. -------------------------------------------------------------------------- .cp 25 Late th command wil b describe mor formally bu firs let' g throug tha exampl i mor detail: LD HL,0100 ... JP 0100 Mov th curso (b usin ^Š o ^X t th LĠ H̠ line Typ ^PIblocksize Mov th curso t th JР line No typ ^PIstart I reall i tha simple Whe yo subsequentl displa somewher els i th fil wit referenc t 010 i wil sho 'start o 'blocksize a appropriate. -------------------------------------------------------------------------- .cp 25 ^OF, ^OS, ^OU: how they affect display A firs DazzleSta display th symbol-name yo hav specified o (fo value fo whic yo havn' ye specifie name th correspondin pseudo-symbo (e.g L0100) S initiall yo migh se 010 J L123 o th screen an late (afte definin L123 a MAIN yo migh se 010 J MAIN Mor informally w cal thes pseudo-symbol (tha ar constructe fro he numbers "fake symbols Fak symbol ca b toggle on and off (^OF) bu ar initiall off I yo turne the o i thi example yo would ge 010 JРL123 MAI whic i no goo ide fo you .MA fil bu som peopl prefe whe they'r browsin ( lik it eve i yo don't!). Similarly ^Oՠ toggle of an o th displa o you chose nam (otherwis know a th "user symbol) Notic tha nothin i destroye i you symbo tabl -- secon ^O wil brin bac everything Lik al th ^ sequences onl th displa i affected. -------------------------------------------------------------------------- .cp 25 ^OӠ toggle th "split feature Thi onl ha a effec whe use symbo ha space i it Fo example defin B000 a "IOBYT fou two-bi fields" With ^OS on, and ^OF off, a typical display would be: probably the LD (IOBYT),A ; fou two-bi fields most useful when generatin.MA file With ^OS off, and ^OF on: most useful when LD (B0003 IOBYT fou two-bi fields),A browsing Th othe combination ar allowed bu no s useful fo example wit ^O off an ^O off: LD (IOBYT fou two-bi fields),A -------------------------------------------------------------------------- .cp 25 Entering names and phrases into the symbol table ^Px (x is a letter) gives a question, to which you reply symbol name blah blah blah You'v probabl guesse alread tha symbo name ca includ spaces i fac yo ca typ anythin yo fanc u t abou 4 characters. Th addres (o value associate wit th symbo i th addres o th curren lin whe yo pres ^P ^P i usefu exceptio t this an wil b describe o th nex screen. ^PB Byte references to this line will use this symbol, e.g. LD A,(ref) ^PL Label references will use this symbol, e.g. JP label, CALL label ^PR Relative references, e.g. JR label ^PT Table references, e.g. LD HL,table ^PW Word references, e.g. LD HL,(word) ^P Simila t ^P etc. bu generate symbo whic wil satisf al reference t suc value. -------------------------------------------------------------------------- .cp 25 ^P i littl mor complicated Yo ofte wis t ente th nam o symbol no whe yo ar A th plac wher th symbo wil be bu whe yo ar a lin o cod whic REFER t th symbol O course b usin ^ yo coul easil arriv a th plac wher th symbo wil be Bu a eve mor convenien metho i provided... ^P (mnemonic Indirect) Th addres associate wit thi symbo depend o th conten o th lin th curso wa o whe yo hi ^PI. E.g. 070B LD (B5200),A ^PI would define B5200. 070E LD A,H ^PI would be illegal (bell sounds, and '***') -------------------------------------------------------------------------- .cp 25 Building and destroying the symbol table ^P ask yo t specif th firs an las addresse o th regio t b searche (defaul i th whol file) complet disassembl i don behin th scene (s b patient!) an whereve symbo i referenced bu no foun i th symbo table ne symbo i created. Th nam give use th lette appropriat fo th us o th symbo an th fou he digit o it value Fo example decodin C 3 1 i a are startin wit a "I contro poin (Instructions woul generat symbo L1234. ^P٠ Flushe th symbo table firs o al fak symbols the o al symbols Sinc th operatio i rathe dangerous confirmatio i requeste a bot stages Th contro point ar no affecte (an ther i n wa t flus al contro points excep b usin ^Kؠ an the editin th .D fil b han o b "littl utility whic hop you'l writ an mak public!). -------------------------------------------------------------------------- .cp 25 Comments Inserting comments on lines: {!} Not yet possible {!} Inserting a comment between lines: Move the cursor to the line following where you want the comment. Pres semicolon (Th scree wil b redisplayed wit ga fo your new comment). Type comment, terminating with Backspac i implemented bu otherwis th commen canno b edited However yo ca late retyp i completely an delet th ol one Ther i n limi t th numbe o line o commen a an poin (apar fro th tota symbo tabl space). -------------------------------------------------------------------------- .c 25 Symbol an comment ar store i th sam wa internally an ca b quit lon (abou 4 character o more) I you'r tryin t understan program rathe tha generatin sourc tex tha wil assemble i ca b hand t giv symbol chatt names Fo example, CAL Outpu cha i A L A,(B374 ?? fla fo pas ???) O J NZ,pas maybe? Thi ca b bi help becaus th result o you idea ar immediatel availabl throughou th disassembly an yo ca revis th symbo name a yo becom mor sur o ho thing work Onc you'v use thi metho yo wil rarel wan t g bac t usin pape listing eve thoug pape i s hand fo drawin arrow al over -------------------------------------------------------------------------- .cp 25 "Quick" family ^QR go to the start of the program and display ^QC go to th en o thprogram and display ^QV go to address before previous ^F or ^A (the last ten addresses are remembered, so you can follow calls and jumps in the code and then "unwind" to where you were) ^QB find next control point and display from there ^QP find next symbol and display from there ^QT find next symbol or control point and display from there ^QF find the next occurence of a sequence of bytes and/or words ^QA as ^QF plus execute a string of commands when match found ^L repeat the previous ^QF or ^QA -------------------------------------------------------------------------- .c 25 STOP PRESS! ^QF ^QA improvements ^QƠ improved Ca no typ thing lik C 123 an i doe wha yo hop i would I othe words there' a arra o te bytes an eac he numbe yo typ i pu int th nex byte I yo typ mor tha tw consecutiv he digit the thi i obviousl word an s it' spli int tw byte (i th usua wier low/hig fashion an store i th nex tw byte o th array Whe yo typ th searc i started matchin a man byte a yo gave suppos yo wan wild- cards an mask even It's on the wish list! ^Q wil als tak a apostroph followe b printabl char a spe o wha t searc for Sam limitatio o ten N apology Ho man programmer d yo kno wit vocabular wid enoug t us differen word tha hav mor tha te letter i common O even.. Ho man programmer d yo kno tha ca spel fo te consecutiv letter withou a error? -------------------------------------------------------------------------- .c 25 ^Q i sor o "macro facility ^Q ask fo wha t fin (lik ^QF (fo example C 1234 bu the ask fo "comman string t execut whe th sequenc i found Finall i ask fo option (lik ^QF) Option includ G global, i.e. keep on doing it I instructions, i.e. search only for matches with ^BI areas N no-verify, i.e. do it without demanding Y/N B backward search R restart, i.e. start search from 100 instead of the current line (or end of file, if B option also used) That's a rather terse description of ^QA, let's look at an example... -------------------------------------------------------------------------- .c 25 Suppos yo hav progra wit frequen call t som routine usin inlin parameters Fo example, CALL L6789 DB --- DB --- normal code With one command you can go through the whole program ^QA Value(s) to search for? CD 6789 Command? 3BB2BI Options? GN I yo hav larg program thi comman ma no b particularl fast bu i ca d lo fo yo (whil yo hav cu o coffee). Afterwards, ^QB helps you to browse through checking if you wish. -------------------------------------------------------------------------- .c 25 Moving forward or back by just a few bytes digi (DON' pres th G t th star o th progra (^QR an us ^Q an ^ t fin reference t th addres o tha displa routine Probabl jus befor eac cal you'l fin L DE pickin u th addres o th strin t b displayed I so follo i (^F t se wha i say an thu ge clu abou th purpos o th cod yo jus cam fro (^QV) Inser commen i thi code Better giv th star o th strin symbo nam s yo se somethin like L DE,T738 ms Dis full nex tim yo displa thi piec o code Mor important you'l als se whe anothe piec o cod use th sam string. -------------------------------------------------------------------------- .c 25 Som program hav genera routin t cal BDOS an thi routin i calle b th routin t outpu string Ye othe variation ar common fo example CALL followe b in-lin parameters Whe yo fin suc routine us ^Q t fin ever CAL o tha routin an ad contro point t correc th disassembly ^Q allow yo t repea thi automatically. proble t watc for som program hav initialisatio cod whic i late reuse a buffe o something Suc dua usag (whic wa probabl don i th origina sourc tex b reORGing i difficul fo an disassemble t sor out an I' stil wonderin ho t ge roun thi i DazzleStar Ideas? -------------------------------------------------------------------------- .pa Installatio Notes ------------------ Funn thin abou installatio direction -- hav yo notice ho they'r th firs thin yo wan t locate ye they'r alway tucke awa somewher near th bac o th book? Sorr i i too yo  whil t fin thi section bu ɠ figure tha afte you'v installe DZ yo wouldn' wan thi inf a th star o th hel file an hav t ski pas i ever time. First th ba news I yo hav onl 48K o memor i you machin (o less) it' unlikel you'l b abl t ru DazzleStar However th goo new i tha you'r no limite t disassemblin program tha fi int memor TOGETHE wit th disassembler Thi freedo i du t th wa i whic D read th progra t b disassembled usin pagin techniqu t ensur tha mos o th accesse d no requir i t re-rea th disk. -------------------------------------------------------------------------- .c 25 Thi fil i calle DZMSGS.OVR Whe yo ru DZ.CO (th DazzleSta mai program) thi "help fil DZMSGS.OV shoul b locate o th curren drive otherwis you'l ge messag t remin you. DZ.CO͠ ca b rename t anythin yo prefer sugges yo retai th conventio tha th nam star wit DZ becaus thi make i simpl t cop al th file withou forgettin on (fo example b usin th comman PI x:=y:DZ*.*[V] or i yo prefe SWEE {an wh doesn't?} al th file wil b adjacen i th displa o th directory makin the eas t tag) Ne SWEE eve give yo wildcar tagging I yo renam DZ.CO yo won' b abl t us DZINSTAL.CO t modif it. -------------------------------------------------------------------------- .c 25 Thi fil i i WordSta "document format an therefor i mos easil printe b usin WordStar I yo don' hav WordStar yo ca stil ge goo listin b usin printe (o CP/ BIOS whic ignore th hig bi o characters Som printer trea th hig bi a signa t us italics i whic cas yo ca ge tolerabl readabl printout o rathe bette on b discoverin a escap sequenc whic turn of thi feature Fo a Epso printer tr  PI LST:=TTY: However som printer trea th hig bi a graphi characters withou an mean o suppressin them i whic cas yo won' hav muc joy Try PI DZMSGS.TXT=DZMSGS.OVR[Z] an prin th ne fil DZMSGS.TX tha PI produces I'v no trie thi myself bu I' tol i works. -------------------------------------------------------------------------- .c 25 You should have the following files on your distribution disk : DZ.COM DZMENU.OVR DZMSGS.OVR DZINSTAL.COM DZ-DXERS.DOC Moreover t ru correctly th .OV file mus b o th currentl logge dis (no essentia whe you'r s familia wit DazzleSta tha yo ca wor withou menu an help). -------------------------------------------------------------------------- .c 25 Scree siz i assume t b no mor tha 2 row o 8 column (8 i th onl widt supported) I i expecte tha mos screen wil hav 2 rows thoug perhap 1 woul b sufficien (thoug irritatingl smal i yo als wan th menus) A Epso PX- (onl eigh rows ca b use successfull bu n men displa i possible. DZINSTAL.CO i introduced Yo ca gues wha i does bu thi versio i somewha limited I offer men t choos whic machin yo have an the modifie DZ.CO appropriately I you machin i no o th lis ( highl likel situation! the yo nee som othe method T mak thi easier som o th earl location i DZ.CO ar use i th sam wa a WS.CO (WordSta 3.3) Yo ca eithe patc D "b hand o us th WordSta 3. installatio program i yo hav it Othe version o WordSta wil NO wor -- i particula versio 3. definitel use differen locations an ther i n poin i yo tryin it -------------------------------------------------------------------------- .c 25 Dڠ doesn' suppor man o th feature tha WordSta does s ther aren' to man location t patch. 18A.. A message (e.g. terminal type), ending in null 232 Screen height (only 24 or 25 supported) 233 Screen width (only 80 supported) 234 Lead-in for cursor positioning (no. of bytes, followed by string) 23D Sequence between row and column (nothing for most terminals) 242 Seq after cursor positioning (nothing for most terminals) 247 Non-zero for column before row for cursor positioning 248 Line offset (e.g. 0 or 20h for top row) 249 Column offset 267 Inverse video sequence 26E Inverse video sequence 293 Non-zero if high bit is inverse video 34D Initial help level -------------------------------------------------------------------------- .c 25 ROUGȠ NOTES.. Th followin materia i bein integrate int th documentation bu i no ye completed Rathe tha leav yo withou it, here it is in its temporary form. Type-ahea simila t WordSta introduced i.e interna scree i updated bu rea scree i no update unti en o type-ahead Possibl t typ ahea durin initia banner. Whe typin ahead althoug scree updat i suppressed thi i no modifie s tha th statu lin i alway show immediately Typ ahea accepte durin mos lon dis operation (e.g ^KR) bu man machine loc ou interupt durin dis accesses I you machin i on o them typ slowl whe th dis i running becaus th typ ahea cod ca onl b calle i betwee th acces o eac dis sector. -------------------------------------------------------------------------- .c 25 ^ accepte i type-ahead t abor curren operation Display messag '** Interrupte ** Pres ESCAPE' an ignore al inpu unti escap key. ^K an ^K deman addres ranges s partia .MA file an listing may be obtained. Ful .MA file an listing (obtaine b answerin th querie fo firs an las addres b hittin includ "EQU line fo an symbol outside the program area. Inverse video introduced. -------------------------------------------------------------------------- .c 25 Secondar menu enhance t displa variabl information I particular ^OF ^OU ^O sho curren setting O o OFF. Displa o he dum windo rationalised Onl refreshe whe th disassembl windo ha move outsid th limit o th he dum window i othe word tim isn' waste redisplayin th he dum windo unles doin s woul sho yo somethin new. Visua fla (*** pu a en o statu lin whe bel i sounde (help user wh don' hav a audibl ctrl-G) Fla i remove whe nex majo comman i starte (i.e no remove whil simpl movin th cursor). -------------------------------------------------------------------------- .c 25 Siz o configurin are (DZ.CO 103..350 reduced Thi i importan i yo ar usin WSINSTA t d configuring D no sa anythin abou you printer I thes location (beyon 350 ar modifie th result ar unpredictable and likely to be disastrous. ^Q an ^Q implemente -- fin (an displa from nex contro poin (QB o nex symbo (QP). -------------------------------------------------------------------------- .c 25 He displa windo wa alway a leas on line Fulles disassembl windo (^OC no completel suppresse he windo t ge maximu space particularl desirabl o th PX- an othe smal screens. Disassembl windo wa alway a leas on line Fulles he displa (^OR no completel suppresse disassembl windo t ge maximu space. Display of control window updated after ^KR completes. ^֠ comman introduced Relate t ^F bu View instea o Follows Useful when choosing names for messages, for example. Try it and see. -------------------------------------------------------------------------- .c 25 Change mad t he dum i anticipatio o narrowe he dum fo Osborn an othe screen les tha 8 char wide However i i expecte tha suc machine wil suppor virtua scree a leas 8 char wide i othe words machine whic canno scrol sideway t vie 8 char whe nee b wil no b supported Change no complete -- contac m i this is of interest to you. ^QƠ an ^Q comman strin no allow ^N whic i pu int th comman string as . Name (bot symbol an comments no trea an a specia characters i treate a 4-digi he strin derive fro th curren address an i treate a th typ o thi symbo (i.e th firs lette o th fak symbo tha wa a thi point) Thi i usefu i repetitiv ^Q commands, and in macros {! macros are not yet implemented !}. However an ar no recognize b ^KR an wil b lef i th nam untranslated -------------------------------------------------------------------------- .c 25 Multiple comments allowed. ^Y for delete comment or symbol on current line ^KѠ ask fo Y/ verificatio befor exiting i symbo tabl ha bee change sinc i wa las saved -------------------------------------------------------------------------- .c 25 ^KS ^KQ an ^K change t us th dis mor safely Instea o simpl overwriting xyz.DZ, the following is done: erase xyz.DZB (if any) erase xyz.$$$ (if any) save current symbol table in xyz.$$$ rename xyz.DZ (if any) to xyz.DZB rename xyz.$$$ to xyz.DZ Thi sequenc avoid problem i yo ge ba secto whil writin th ne fil (a leas yo stil hav you previou version wherea th olde metho ha alread destroye it) Th disadvantag i tha you'r mor likel t bom ou wit "Dis Full message Mak sur tha ther i reasonabl amoun o roo o you dis befor enterin th disassembler Wha i reasonabl amount I yo alread hav o you dis sav fil (.DZ correspondin t th progra yo ar plannin t disassemble chec it size Ensur ther i a leas a muc spac again plu fe K extr (sa 4KB t allo fo ne definition tha yo ad t th symbo table. -------------------------------------------------------------------------- .c 25 ^OB ^OP an ^O introduced Display contro table symbo table o both ^ stay i th ne mode allowin scrollin forward an rever t norma o comman ^OI. Program whic buil .D file (fo exampl fro th outpu o lin editor ma indicat th typ o symbo a '?' Suc symbol wil matc al reference t th valu defined ^K et wil writ th '? ou t a update .D file. -------------------------------------------------------------------------- .c 25 Fak symbol wer generate a th tim o definition an store i th symbo tabl a fiv characte names Ne versio save symbo tabl spac b storin the a null an expand the whe displaying. Afte printin (^KP th scree i no properl wipe clean Thi i purel cosmeti problem you symbo tabl et i intact It' probabl als tru fo ^KW whic share lo o cod wit ^KP bu ^K ha no bee checke recently. I th cod bein disassemble ha table o label o relativ reference (i othe words area define b ^B o ^B a th start) th autosymbo comman (^PA doesn' generat symbols Fixed now? -------------------------------------------------------------------------- .c 25 L IX,nnn i disassemble wit 'nnnn a a T-symbol I'v recentl com acros cod wher "retur address wa bein kep i I rathe tha pu i o th stack However stil thin i i bes t mak tha for us T-symbol Default (i squar brackets fo questions Yo ca hi , nor by ^PA). -------------------------------------------------------------------------- .c 25 Further work needed:- Additio neede (perhap i DZINSTAL t allo checkin eac distributio fil fo correc checksum Meanwhil yo ar recommende t us CRC.CO t chec th files. A file DZ-CRC.LST will be included in the suite. Somethin lik th followin exampl o a inde woul b nic a th star o "help" an rando acces int th hel file. -------------------------------------------------------------------------- .c 25 HELP INDEX (not yet implemented) C Cursor movement K File commands O Onscreen: how the screen is arranged Q Quick: move quickly to another part of the file J Help levels (suppressing and restoring help) P Symbol table (how to define names for things) B Control table (control points decide how disassembly is done) I Installation for different terminals U Typical use 3 Symbol display options 4 Automatic building of a disassembly of all or part of the file 9 Complaints Z Exit to CP/M (and what to do to restart again later) -------------------------------------------------------------------------- .c 25 I deman warrant it perhap a extr fil wil b adde t giv tw summarie o command (a i alphabeti order (b groupe b function Don't bother, nobody's interested. -------------------------------------------------------------------------- .c 25 Self-relocating code -------------------- ^B generate .PHAS directive Thu numbe o .PHAS directive ca b pu amongs th code bu ther i stil th restrictio tha th fil t b disassemble mus b i ascendin addres order ^B allow disassembl o somethin whic ha .PHAS directive tha made .---------. into .---------. | | _______ | | .OVR file '---------' |---------| At time ____ | | of exec- .---------. / |---------| ution | | / ___ | | '---------' / '---------' / .---------. / | |/ '---------' -------------------------------------------------------------------------- .c 25 ^B doe no cop wit program tha shuffl block around o execut tw block o cod (fro differen part o th file a th sam addres (a ru time) S ^B doe help bu it' no th ful answer Again th use interfac wil b th key Anothe proble (perhap related? i program tha sav spac b puttin initializatio cod wher variable wil late b stored Ideas anyone? -------------------------------------------------------------------------- .c 25 Symbol table access ------------------- Searchin th symbo tabl ha bee perennia proble i th desig o DazzleStar Som o th type o acces t i requir linea arrangement t answe question lik " hav symbol wha i th nex symbo (i any a thi address? o "Wha i th nex symbo a o abov such-and-suc a address?" Bu som o th question concer rando addresse (o values -- imagin th accesse t th symbo tabl whe th following is being disassembled: LD C,9 LD DE,(9ABC) CALL 5 LD A,(80) OR A JP NZ,471F -------------------------------------------------------------------------- .c 25 A lon a th symbo tabl i fairl smal it desig doesn' matter Bu tryin t fin rando value i larg tabl i classi problem an arrangin th searc linearl i abou th slowes wa o doin it Th effec wa ver eviden i prototype o DazzleStar resultin i ver noticabl hesitation durin scree displa i th symbo tabl had say te thousan byte o usefu information. -------------------------------------------------------------------------- .c 25 Th Feb8 versio ha som limite "smarts t spee u wha wa otherwis linea search Sinc then whil solvin th proble o insertin symbol consistentl an som othe problem i th display remove th "smarts" an th onl thin whic no help spee th searc i pointe int th tabl a th addres wher th mos recen contro poin wa found That' ho i i fo Apr85 s ambitiou user ma fin th hesitation irritatin whe the disassembl somethin th siz o DazzleSta itself Tak heart d inten t improv thi situation Th pla i t kee a inde o th symbo tabl (perhap a arra o severa doze pointer o eve severa hundred t spee u th search Th inde wil b update "fo free -- scannin th symbo tabl whil waitin fo yo t hi anothe key Onl whe usin type-ahea wil th searc sometime hav t regres toward th simpl linea scan I fac th cod (fo scannin th tabl whil waiting i alread i Apr85 bu th inde itsel i no ye implemented. -------------------------------------------------------------------------- .c 25 Wishes The following are fundamental things that I've yet to see any disassembler solve. Anyone disagree? (I hope so!). VALUES (e.g. LD HL,1000 rather than LD HL,TABLE) ------ I woul b ver nic t b abl t sa whethe somethin i valu o a address Th mai proble (a ha s ofte bee th cas wit developin DZ i t defin suitabl wa fo th use t specif what' what Onc yo (dea reader! sugges reall nea desig fo th use interface th implementatio wil b th eas bit I' reall lik t hea som ideas STO PRESS .. Respons t thi sinc firs publishin i many week ag ha bee ZERO Hell .. HELL .. I THER ANYON THERE? .. Damn th line must have gon dead. -------------------------------------------------------------------------- .c 25 DZINSTAL development plans... N wa ca hop t kee u wit ever termina type s DZINSTA̠ wil jus hav smal selectio o th mos popula one (popula wit me tha is) Don' le tha pu yo of sendin m th spe fo you ow SuperWhizzo bu tak car t specif EXACTL wha mode you'r talkin abou (an ho t se th switche i th terminal o wha versio o BIO yo have etc) Jus i cas yo hav a unusua terminal late versio o DZINSTA migh als hav anothe wa roun th problem Assumin yo hav WordSta the you'l b abl t sho you configure WordSta t DZINSTA s i ca patc D t ge th sam effect (I yo don' hav WordStar it' quit nea wor processor whic anticipate DazzleStar' command wit remarkabl prescience makin i breez t lear onc you'v mastere DazzleStar). -------------------------------------------------------------------------- .c 25 There' catch Man configure WordStar mak us o patche t d wondrou thing (fo example mappin i an ou you vide ram i you machin doe thos kin o tricks) Alas D doesn' suppor som o thes feature (yet? an s thing ma no g a smoothl a you' wish onl hav informatio o th configuratio are o W/ version 3. an 3. -- i yo hav differen versio I' appreciat an inf o it. I yo hav difficultie configurin DazzleSta fo you machine I' lik t hea fro you eithe t solv th proble i futur version o a least to warn others. -------------------------------------------------------------------------- .c 25 Feedback I' reall lik t ge you furthe idea an comments whethe genera o detailed positiv o negative o anythin concernin DazzleStar. Pleas contact: Joh Washington Washingto Electronic an System Ltd 3 Turnoa Avenue Woking Surrey GU2 0AJ UK. ɠ can' guarante you'l ge reply (thoug enclosin stampe self- addresse envelop woul improv you chances) bu you comment reall wil b rea carefull an give seriou thought. I' registere o CBB Londo Wes (089 420164) A th momen ɠ chec th mai bo ther mos weeks An yo ma fin i interestin t chec ther an se ho othe user o DazzleSta ar gettin on However you'r mor likel t ge repl fro m i yo us th ol fashione pen-and-in posta system. -------------------------------------------------------------------------- .c 25 Disclaime an Warning Th autho wil hav n liabilit o responsibilit i th even o an los o damag cause o allege t b cause directl o indirectl b thi program. Thi versio o th progra i i th publi domain howeve th autho retain al copyright t thi progra an it associate files Thi progra ma no b sol b an part unles specificall authorize b th author Joh Washington i writin befor th firs cop i sold Thi progra ma no b include i an othe packag fo sale eve i thi progra i indicate a bein i th publi domain Al o thi warnin applie t an derive o modifie copie o thi program an t an derive o modifie copie o th associate files An derive o modifie copie o thi progra mus no hav an copyrigh notic violate change o altered an thi warnin mus b included. Pleas repor an violation t th author Than you. -------------------------------------------------------------------------- .c 25 FURTHE WARNING woul b ver surprise i DazzleSta overwrot you syste tracks o arbitrar part o th dis (an woul VER muc wan t hea abou i i i happened) Th mos likel caus o accident i throug th lac o an warnin befor overwritin a existin file fo example usin ^K whe .MA fil o tha nam alread exists N precaution agains compute o dis erro ar堠 included I particular DazzleSta wil fai i th dis i i writin t become full A wit an othe software mak BACK-U COPIE O AN FILE YOU' REGRE LOSING An d i REGULARLY N softwar i proo agains hea crashes -------------------------------------------------------------------------- .c 25 MORE PROGRAMS I you' lik t se mor program fro th sam stable pleas encourag m b SENDING A CONTRIBUTION a strongl agains high-priced copy- protecte software Th decisio whethe t continu m presen polic o t publis softwar a industry-standar price wil depen o you reaction. -------------------------------------------------------------------------- .c 25 WHAT ELSE? Othe disassemblers wit simila specifications ar unde development I suc produc ma b o seriou interes t you writ an enquire statin whic microprocessor an wit whic operatin system(s th disassemble i t run I i no necessar fo disassemble t ru o th micr fo whic i i disassemblin code Fo example a 805 disassemble coul ru o CP/M-80 6800 disassemble might i practice b mor usefu o hos usin 68000 but i principle i coul ru o MS-DOS CP/M-86 CP/M-80 o eve you favourit mainframe. Foreig languag version migh als b considere i ther i sufficien deman (Frenc o Germa mos likely) Correspondenc i Frenc o Germa i als OK. -------------------------------------------------------------------------- .c 25 Credits M considerabl thank t thos wh too th tim an troubl t tel m wha the di an didn' lik abou DazzleStar You ow comment an idea coul als hav bi effec o futur improvements BU ONL I YO SEND THEM TO ME. Thank especiall t Rory whos effort hav neve flagge ove man months, and Roger, John, Phil, Chris, Bob, Steve, William, Gill and Katie. -------------------------------------------------------------------------- .c 25 John Washington Washington Electronics and Systems Ltd 33 Turnoak Avenue, Woking, Surrey, England GU22 0AJ -- End of Help File -- -- NOW PRESS ^U -- -------------------------------------------------------------------------- .c 25 -------------------------------------------------------------------------- .c 25 Credits M considerabl thank t thos wh too th tim an troubl t tel m wha the di an didn' lik abou DazzleStar You ow comment an idea coul als hav bi effec o futur improvements BU ONL I YO SEND THEM TO ME. Thank especiall t Rory whos effort hav neve flagge ove man months, and Roger, John, Phil, Chris, Bob, Steve, William, Gill and Katie. -------------------------------------------------------------------------- .c 25 John Washington1!\ !2*.+"{46![5+ ~y!"y4!4w_#~ ʸ A:4~~# ¼ > \ ?ʻ w# !ͼ ? !ͼ !)ͼ !ͼ :5͡ :6:6͡ :71!\ !2*.+"{46![5+ ~y!"y4!4w_#~ ʸ A:4~~# ¼ > \ ?ʻ w# !ͼ ? !ͼ !)ͼ !ͼ :5͡ :6:6͡ :71/Rͣ:Z !H 4~?! 2rGD͑$%*."p&:.2r&%:C[!:A ' :B ' Gï Z80MR VER 1.2 FILE 12345678 ?ʻ w# !ͼ ? !ͼ !) 0000 ERROR(S) ASSEMBLY COMPLETE !"*y4~!}! ~# Nwy#" j ͆go2Z22C "D "F "A 2&"&"&"&!+~m~#d^F#N#">2>2*y4*!~̢! Ã:<2*:> > > >2> :PG $0ɃUNDEFINED@@DOUBLE DEFINEDERRORREDEFINEDPUBLICEXTRN#ASEGCSEGDSEG SYMBOLS!Z w#”!I 4͌*!͏n!.:C !.*_: : #':C ; &m:C !2"_!.EJECT AHEADIN:INCLUDLIST WMACLIS^2I I:H rPe2Be2<ɗ2I 2"_!|.&>OFF ON >>:!!w# !# 2: 2!:93A<2.!"> w#w#w!" ;&!4933w#93 LIBH# 4^#V*_~ ##.!ʡ ʃw# o>GxPWʡ v6 #6 #622"_:=!6 #6E#6N#6D#Ã2R :# Æ   ;&!4933w#93 LIBH# 4^#V*_ : E: X E k:_J :I :H *}>+ʉ2Y :J ʩ:B '2B :A '2A G:B:8/*C *}o:</P!J >6 #=2I 6 #6 #6!P " : X :0  !' " m&!K z' {' *  8 0w2I #: E: X E k:_J :I :H *}>+ʉ2Y :J ʩ:B '2B :A '2A G:B j D͆ ! > ~ 4 6_' " m&!K z' {'* >\   O >X !4 ! ~#" !" !  !2! 6A#6Z#6M2 : @ڞ ʞ Ҟ 2  ͭ  ø INPUT FILE OPEN ERROR ! > ~ 4 6_' " m&!K z' {'* >\   O >X !4 ! ~#" !" !  !2! 6A#6Z#6M2 : @ڞ ʞ Ҟ 2  ͭ  ø INPUT FILE OPEN ERROR ! > ~ 4 6_' " m&!K z' {'* >\   O >X !4 ! ~#" !" !  !2! 6A#6Z#6M2 : @ڞ ʞ Ҟ 2  ͭ  ø INPUT FILE OPEN ERROR ! > ~ 4 6_' " m&!K z' {'* >\   O >X !4 ! ~#" !" !  !2! 6A#6Z#6M2 : @ڞ ʞ Ҟ 2  ͭ  ø INPUT FILE OPEN ERROR ! > ~ 4 6_' " m&!K z' {'* >\   O >X !4 ! ~#" !" !  !2! 6A#6Z#6M2 : @ڞ ʞ Ҟ 2  ͭ  ø INPUT FILE OPEN ERROR ! > ~ 4 6_>*w#"!/ø OBJECT WRITE ERROR >2D: ZZ>22! !2!>r!22: @ڒʒҒ2!"ø OBJECT FILE CREATE ERROR HEXOBJ>~ 4 6_>*w#"!/ø OBJECT WRITE ERROR >2D: ZZ>22! !2!>r!22: @ڒ*>ʿ:ʲ>û!—!:~#"!"29ͭ ! 2ø 12345678ABC INCLUDE FILE OPEN ERROR !/ø OBJECT WRITE ERROR >2D: ZZ>22! !2!>r!22: @ڒ*>ʿ:ʲ>û!—!:~#"!"29ͭ ! 2ø 12345678ABC INCLUDE FILE OPEN ERROR !/ø OBJECT WRITE ERROR >2D: ZZ>22! !2!>r!22: @ڒ*>ʿ:ʲ>û!—!:~#"!"29ͭ ! 2ø 12345678ABC INCLUDE FILE OPEN ERROR !/ø OBJECT WRITE ERROR >2D: ZZ>22! !2!>r!22: @ڒ*>ʿ:ʲ>û!—!:~#"!"29ͭ ! 2ø 12345678ABC INCLUDE FILE OPEN ERROR !/ø OBJECT WRITE ERROR >2D: ZZ>22! !2!>r!22: @ڒ*>ʿ:ʲ>û!—!:~#"!"29ͭ ! 2ø 12345678ABC INCLUDE FILE OPEN ERROR !/ø OBJECT WRIT>*W7w#"7!rø PRINT WRITE ERROR >2: Eڜ>2:2! !2!6P#6R#6N26: @2!"ø PRINT FILE CREATE ERROR >:W!/ø OBJECT WRIT>*W7w#"7!rø PRINT WRITE ERROR >2: Eڜ>2:2! !2!6P#6R#6N26COND \ELSE END ENDC ENDIF IF \ASEG rCSEG wDATA DB DDB DEFB DEFL JDEFM DEFS 5DEFW $DS 5DSEG |DW $EJEC AENDM EQU QEXTRN LIST LOCAL MACRO NAME NLIST ORG XPUBLICSPAC TITLE X*}&: &!&!# 933w#q &#,62R͌m͏!Xzs*4 UxBp#@\p##̐w# @"4̓!Z4&*46#"4*_: &!~ʽ~~#Ô&ʺ33$YM &!&!# 933w#q &#,62R&*|&#&933&!*4+6#933Qw#A6# '  ' 6#"4,"^#V*_|:C ***4>q#p#=œ"4"#'!*4"6#:' :' 6#"4̓*#"*P~#Z{  ʟ# ͵*Q#,+33>?͵͵~#F͵9~&#>#͵*>+F+N=_"4""*+"G*~#ʎ€~# ڊ͵Î> > "ͣ G> ͵q# '93,!;w# &'w#'w##~'w+~'w*{4~ k*{4*y4!w#xLyL*y4 "y4*{4 "{4!2*4s#r̓:4<*y454!9%ø MACRO OR EXPRESSION NESTED TOO DEEP-STACK OVERRUN #!"""*}4"4*{4~ 6#6#R.:J y&|%!!I 4m+}%ɗ2I 2! ڈw#HÈ!'2 &ڈ'ʁw&#f'u6 #6 # ˆ6!2#'#'>2j2:33 &3*w4 ~w& &93,í#'>2j2:33 &3*w4 ~w93,93AO!0 q93,Mͳ'M0'M͠':&g &O͐&#'>~>~>2&ʈ2j#'2: "_!.&INPAGEPAGE û:&&!#=q: &#''M͆$,2.2.'  &2.͆$'!Y$6 $6#'M#,'#'My&&͐&!&;&R.*D #"D :C "F R.y&}>2C *D }&*F }|:C 2C *D |&+"D *F +xy"F 2C #'R.͠'y2.*}&*D }&!Z4#'!,#~2 #^#V*_'!Y$~':AQQo&)^#V!bʅ;E<͔# T&~`j G#b+/{:~; З/ʙ*_bE"_ͩ}͔#;™^.ͮ;0 ڼ))))oͪ-:.&$@$,:. 8&&G: 2 ͪ-:.&: ͔##!>;ͪ-,: :. 8&& 2 ͜-:.&:AS *.:.Ok &:.&:.o:.g++|&y&|<~ =&}>2.&".|2.: ͔#͆$$%&͜->͔#:.':.'*.|'}''>F-#>Vʔ#>^Ô#z-:.!@2 :. !:.a&>͔#: Ô#̓#&&>͔#Æ$z-:.!A2 :. 9!:. >͔#$͜-:.̓#a!:.["$: *2 5#G: Ô#͜-:.':.'*.}Ǵ': Ô#z-:.&:.&*.}&>o: 2 !͜-:.̓#!O: 2 >͔#: Ô#: >2 5#Ô#z-:. l":. ʾ":.̓#2"@2 :.̓#ұ":.["$: p&5#:.̓#$2 :.["$͔#: pv&͔#$mo?m>>:.@!#Œ":.̓#Җ":.["Ң"!#:."#ɇ͔#͆$͔#>6͔#$͆$G: v&Ô#:.@&!%#:."#G &x"&<&O ~Ĕ##~&Ô#:K[*{**!1!!2CS"s"":.["&͔#: ͔#͆$͜-:. d#: F͔#͆$:.̓#5#G: Ô#z-:.'P#$kŠ#>& (?*I-̥#2#!#Ê$@Ҵ#''''''!.#!.:Y$O~O#^#V#"}$p$> ${ZW> $>0$'y!Z$o|gF>0$'AON%{̈́&>0Q$lyN%z̈́&f$ yB2X y z$ZP!.Ê$!.#*y4:j"w4ͩ$%$%!~s&2!o&6#w#w#6*w4 "w4~ N> $>$y$$#^#V:1%>.%$%:*&%:*&ƌ2r&"p&}%%"p&>ƀ2r&>2o&*w4s&2:H :>y»%}:o&ʡ%ҡ%_:&G:r&¡%*p&&z¡%{¡%s&*o&&w!o&4%&"p&>2o&y2r&2s&%"s&yO:&2r&&"p&>2o&:r& %>2o&*}$u&2%:o&*p&U\"p&!o&~G>::j6&~O#&2o&~W&#O6&2o&W&> > Z& h&0:&G:r&¡%*p&&&#͐&A&ʲ&"&:&ڨ&:&"&&"&"&:&&:&"&:H &*&ME*&*&*&:J '++~A2J 2I ## : 3'͍'͠'ͪ'3:H l'*w4y_'ѱw#s#r&~@w>H&y&yѩ&z&{&!P z' {' y&: &͍'͠'ͪ'3*w4~'O_'y|ѱw#s#r())4))))))@*e*e*++$+L+++g,,,,,,,,ADC:HL,BC/ED4A;ADC:HL,DE/ED5A;ADC:HL,HL/ED6A;ADC:HL,SP/ED7A;ADD:HL,BC/9;ADD:HL,DE/19;ADD:HL,HL/29;ADD:HL,SP/39;ADD:IX,BC/DD09;ADD:IX,DE/DD19;ADD:IX,IX/DD29;ADD:IX,SP/DD39;ADD:IY,BC/FD09;ADD:IY,DE/FD19;ADD:IY,IY/FD29;ADD:IY,SP/FD39;CCF/3F;CPD/EDA9;CPDR/EDB9;CPI/EDA1;CPIR/EDB1;CPL/2F;DAA/27;DEC:BC/B;DEC:DE/1B;DEC:HL/2B;DEC:IX/DD2B;DEC:IY/FD2B;DEC:SP/3B;DI/F3;EI/FB;EX:(SP),HL/E3;EX:(SP),IX/DDE3;EX:(SP),IY/FDE3;EX:AF,AF'/8;EX:DE,HL/EB;EXX/D9;HALT/76;INC:BC/3;INC:DE/13;INC:HL/23;INC:IX/DD23;INC:IY/FD23;INC:SP/33;IND/EDAA;INDR/EDBA;INI/EDA2;INIR/EDB2;JP:(HL)/E9;JP:(IX)/DDE9;JP:(IY)/FDE9;LD:(BC),A/2;LD:(DE),A/12;LD:A,(BC)/A;LD:A,(DE)/1A;LD:A,I/ED57;LD:A,R/ED5F;LD:I,A/ED47;LD:R,A/ED4F;LD:SP,HL/F9;LD:SP,IX/DDF9;LD:SP,IY/FDF9;LDD/EDA8;LDDR/EDB8;LDI/EDA0;LDIR/EDB0;NEG/ED44;NOP/0;OTDR/EDBB;OTIR/EDB3;OUTD/EDAB;OUTI/EDA3;POP:AF/F1;POP:BC/C1;POP:DE/D1;POP:HL/E1;POP:IX/DDE1;POP:IY/FDE1;PUSH:AF/F5;PUSH:BC/C5;PUSH:DE/D5;PUSH:HL/E5;PUSH:IX/DDE5;PUSH:IY/FDE5;RET:C/D8;RET:M/F8;RET:NC/D0;RET:NZ/C0;RET:P/F0;RET:PE/E8;RET:PO/E0;RET:Z/C8;RET/C9;RETI/ED4D;RETN/ED45;RLA/17;RLCA/7;RLD/ED6F;RRA/1F;RRCA/F;RRD/ED67;SBC:HL,BC/ED42;SBC:HL,DE/ED52;SBC:HL,HL/ED62;SBC:HL,SP/ED72;SCF/37;+:;BIT @!CALLDJNZ7 IM IN JP JR  OUT !RES !SET !RLC !RRC !RL !RR !SLA !SRA (!SRL 8!LD @!ADC u#ADD u#AND M#CP M#OR M#SBC u#SUB M#XOR M#RST l!INC A!DEC A!ͪ-!.. ~6#†-,ʜ-&ͪ-;!&-:.k·->&2.m-n-:.&&y}'|&".<'!ME".".(.>@2..)&2:33A..3y ..:. 2.R.|>.}F.:.2.:.G*.:.O̓x(2G.xŸq.GU.".2.y2.33".:.O:.ʒ..".:.O*.:.GU.-:.k&2.*.*.!0..O!C/~.#F#~#foɷ####.2:73 ?/.?/!l/33~>/O#/ѱ6/###/F#~#fo\0*1/1+0-0&1^"1=\0>u0<0NOT 0RES 0MOD 1SHR F0SHL .0AND 1OR "1XOR 01EQ \0GT u0LT 0UGT 0ULT 0HIGH/LOW /y&>1x&:.2.‡.2.lgÇ.y&>1x&:.2.‡.2.gÇ.y&x&Ç.ͅ1x0xʇ. )<0ͅ1xʇ. |g}oM0ͅ10}o0!Ç.!Ç.ͅ10+|o0i0ͅ10|o0i0ͅ10i0|i0o0ͅ10o0i0ͅ1|'.!z0͞10Ç.&Ç.>1 Ç.O10Ç.yoxgy&ͅ1x&}/o|/gÇ.ͅ1xgyoÇ.ͅ1xgyoÇ.ͅ1xgyoÇ.:.|1y|1o1:.|1o1:.o1:.2.:.2.&:.O2.:.2.Oo1ͅ1͞1Ç.!x@3yʳ1 é1@3ͅ11Ç.ͅ11*.Ç.}1&!".|x@3ᯰ@3 1@3 ".@3".*.@3".*.93!'K2(g23:҇20I3Ç2 '_2%$&eoK2'U2:2=222R.:2<22)& 2–2:33$&3yʲ2y &>&>O!33.2~# y2!2:!2!93+6 2933:30 3w #9333_Z?139013%$!ɿK2(g` >O>GͶ393Hʈ3͡393Oʈ3Qʈ3͎393Bʈ3393Dʈ33&33!930)oÑ3!930)))oä3!930 3 ))))où3!930  o& 33!3!33" 4*y4"w433~O4+4#4*w4N#~#fo*w4 4;4ø NOT ENOUGH MEMORY *y4"w4"y4:4<54w#f46#p#p44[544B C D E H L A AF BC DE HL SP IX IY I R NZ Z NC PO PE P M $ O2.:.2.Oo1ͅ1͞1Ç.!x@3yʳ1 é1@3ͅ11Ç.ͅ11*.Ç.}1&!".|x@3ᯰ@3 1@3 ".@3".*.@3".*.93!'K2(g23:҇20I3Ç2 '_2%$&eoK2'U2:2=222R.:2<22)& 2–2:33$&3yʲ2y &>&>O!33.2~# y2!2:!2!93+6 2933:30 3w #9333_Z?139013%$!ɿK2(g` >O>GͶ393Hʈ3͡393Oʈ3Qʈ3͎393Bʈ3393Dʈ33&33!930)oÑ3!930)))oä3!930 3 ))))où3!930  o& 33!3!33" 4*y4"w433~O4+4#4*w4N#~#fo*w4 4;4ø NOT ENOUGH MEMORY *y4"w4"y4:4<54w#f46#p#p44[544B C D E H L A AF BC DE HL SP IX IY  Documentation for Z80MR............................A Z80 Macro Assembler ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: Introduction ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: Z80MR is a Z80 macro assembler with syntax closely following RMAC and MAC. It assembles standard Z80 mnemonics into an Intel Hex format. The resulting file (which has a .HEX extension) can be translated to a .COM file with LOAD.COM (on your CP/M disk that you received with your Kaypro) if it ORG's at 100 (hex). If it ORG's elsewhere the .HEX file may be read into memory and manipulated with DDT.COM. Why Z80.................................................................... The assembler you received with your Kaypro (ASM.COM) is an 8080 assembler. The Kaypro actually runs a Z80 c.p.u. The reason this is possible is that the Z80 actually runs all of the 8080 instructions but in addition there are more instructions unknown to the 8080. The extra instructions were designed for increased speed, easier programming, and more compact code. For this reason it is to your best advantage to program in Z80 code for the Kaypro. Z80 Mnemonics.............................................................. Z80 mnemonics are a great improvement to 8080. Thought was given to logical, universal mnemonics that are much easier to remember and use. I learned assembly language on the 8080 and resisted the change to Z80 at first. But after using Z80 mnemonics for a short time I became very unwilling to do anything with 8080 code. Now I run almost every 8080 program that comes in through a 8080 to Z80 translating program (XLATE2.COM on Kaypro disk #17). Even if you are writing programs for the 8080 it is still far easier to write in Z80 mnemonics. There is a special listing command that flags Z80- only instructions for this very reason (described later). Macros..................................................................... Macros are a way of writing subroutines in assembly language and then calling the subroutine by entering the 'macro name' into the source. The macro may be called as many times as necessary anywhere in the program. When the assembler is operated, the lines of source code that make up the macro will be inserted into the file by the assembler. Note that using a macro does not reduce the size of the object code that is produced since all the lines of code that make up the macro definition are assembled into the object file at assembly time. This is called expanding the macro. By using the *MACLIST ON option, the lines of code produced by the expansion of a macro are listed in the .PRN file. Then the code can be examined and at times optimized in certain locations. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: Assembler Syntax ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: Components and General Form of Assembly Language Programs.................. The structure of an assembly language program is more important to an assembler than the actual instructions you write. A program that would run beautifully can fail to assemble if the syntax is not correct. A program with no errors at assembly time is not guaranteed to run correctly ( or as expected ). The assemblers report of 0 errors means that it understood all of the instructions you entered, not that your program is logically correct. Fields..................................................................... Assemblers are almost always field oriented some to a greater degree than others. A field is a flexible position in the line of code with respect to the right margin. This assembler recognizes 4 fields in an assembly language source line. label operation operand comment The assembler knows when it has reached the end of a field when it sees a 'field delimiter'. This can be a space or a tab for this assembler though some require tabs so it is a good habit to always use tab characters as delimiters. Label Field................................................................ A symbol is a word used to represent a number. Symbols that refer to addresses are called labels. The assignment of a number to a label can either be defined as the lines below TEN EQU 10 START EQU 100H or calculated by the assembler as an address for branching instructions. START: JP FINISH NOP NOP FINISH: JP START Also notice that the label is optional and is only for the programmers conveniance. Labels must appear in the label field. Some assemblers allow you to indent labels but this one won't. START EQU 100H START: JP FINISH Will give you a problem. The EQU must be in the operation field and the label in the label field. Most assemblers require that the undefined labels be terminated in a colon but this assembler does not require a colon for symbols in column 1. START JP FINISH will not generate an error but colons are another good habit and also make your code more readable. This assembler only examines the first six characters of any label or symbol so that if the following labels were used in the same program FINISH1 EQU 1000H FINISH2 EQU 2000H A 'D' error (duplicate symbols) would be generated. Operation and Operand Fields............................................... The operation field follows the label field and may either contain a Z80 op code mnemonic, an assembler directive (or pseudo op), or a macro call. Assembler directives and macros are described later in this file. This field will usally contain the mnemonic for a Z80 instruction. Some Z80 instructions only use this field while others contain an operand which will be located in the operand field. GOBACK: OR A RET Z LD A,0FFH RET The way Z80 mnemonics were designed, the number of nmenonics in the operation portion of instructions is kept to a minimum since the operands really distinguish the differences between similar instructions. The first line above is a good example of this. The operation is an 'OR' operation on the number in the accumulator (implied) with another register. It makes sense that the operand should be the register containing the other number in the 'OR' operation. In Z80 assembly language this is the case. The first line OR's the accumulator with the accumualator (used to see if the accumulator contains a 0). Notice that the second line uses the operand field to contain the condition for a conditional jump (in this case the zero flag). The third line uses the operand field to contain both the target register for a load and the number to load. The last line is an unconditional return which uses the same operator (RET) as the conditional return but does not use the operand field because there are no conditons to place there. This structure makes Z80 programs much more readable than 8080 programs as well as making the instructions easier to remember. The following is the same code written with 8080 mnemonics. Notice the different philosophy on the use of the fields. GOBACK: ORA RETZ MVI A,0FFH RET Also the LD command in the Z80 is used for all data moves while 8080 users must remember a different mnemonic for different types of moves. 8080 Z80 MOV H,A LD H,A MVI H,00 LD H,00 LXI H,0000 LD HL,0000 The Comment Field.......................................................... Comments are not limited to the comment field and can actually be the entire line. All assemblers recognize the semicolon as the beginning of a comment and most ignore the rest of the line. For compatability between assemblers it is a good to begin comments with a semicolon. But for this assembler the following methods of inserting comments are good syntax. 1. Beginning a line with an '*' in column one causes the assembler to ignore therest of the line except if one of the assembler commands (described below) immediately follows the asterisk (no embedded spaces). 2. A semicolon will cause the assembler to consider everything following it to be considered a comment. 3. The first blank encountered following the beginning of the operand field will cause the assembler to consider the rest of the line to be considered a comment. ****************************************** ;An adventure in Comments * A short tale START: JP FINISH ; finish this story NOP ASM can't handle this FINISH: RET Thats all folks Would assemble with no errors. Comments do not appear in the object code. Numbers and Bases.......................................................... The assembler will accept numbers in HEX (base 16) BINARY (base 2) or DECIMAL. Hex numbers must end with an H and binary numbers must end in a B. Decimal numbers should have no suffix letter. When a HEX digit begins with a letter, the letter should be preceded with a 0. LD A,0F3H OR 01001000B LD HL,4000H+28 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: Commanding the Assembler ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: The primary responsibility of the assembler is to translate Z80 mnemonics into object code. The assembler also recognizes certain commands and directives that the programmer can use to manipulate the assembler's output. These are often referred to as 'pseudo-ops'. This assembler requires these pseudo-ops to be in upper case. A description of these commands follows: ORG ; Sets the origin of the code or section of code. Actually ; it sets the reference number that the assembler uses to ; generate addresses for labels and instructions. ; could be a number or a previously defined symbol. ; e.g. ORG 0 ; ORG START END ; Determines the end of an assembly language program. ; if present describes the first executable instruction of ; the program. DW wordlist DEFW wordlist ; Both of these have identical meanings. In assembly language ; programs, 8 bit values are called bytes and 16 bit ; values are called words. Addresses are assembled with the ; most significant byte (MSB) following the least significant ; byte (LSB) because this is how the microprocessor handles ; these values. The DW pseudo-op allows us to describe these ; values in the way we are used to (MSB first) and still ; assemble correctly for the processor. ; DW 8000H ; will assemble the same as ; DB 00H ; DB 80H ; ; If more than one word is to follow a DW following values ; should be seperated by commas ; e.g. DW 8000H,0F000H,0000H ; The wordlist can also be symbols ; e.g. START: JP FINISH ; DW START,FINISH ; FINISH: JP START DDB wordlist ; This pseudo-op is a way of assembling 16 bit values with ; the MSB first (opposite of DW). ; DDB 8000H ; will assemble the same as ; DB 80H ; DB 00H DB bytelist DEFB bytelist DEFM bytelist DATA bytelist ; These four pseudo-ops have identical meanings. The bytelist ; can be one byte or multiple bytes seperated with commas. ; The bytes can be any mix of symbols, ascii characters in ; quotes, or numbers on the same line. This is familiar ; code in Kaypro programs: ; ;ESC EQU 1BH ;CLRSCR EQU 1AH ;CRLF DDB 0D0AH ; ; ORG 100H ; ; LD DE,MES ; LD C,9 ; CALL 5 ; RET ; ;MES: DB CLRSCR ; DB ESC,'=',12+20H,12+20H ; DB '*Your Message Here *',CRLF ; DB '*Or Here*','$' ; ; END ; ; If you've been waiting for an example to enter assemble ; and run, try this one out. Just enter it (with out the ; semicolons of course) assemble it and run it as described ; in AZM-COM.DOC. ; ; The program clears the screen, positions the cursor at ; row 12 column 12 and prints the message using the BDOS ; function 9 (print string). ; ; The symbol CLRSCR is defined by an EQU to the hex code to ; clear the screen on the Kaypro (^Z). ; ; The cursor positioning sequence on the Kaypro consists of ; the two lead-in characters (escape and an equals sign) and ; then the row+20H and the column+20H. ; ; Since the next bytes are just a carriage return, line feed ; pair the second part of the message will appear at the ; left side of the screen. We could include extra DB's to ; position the cursor anywhere on the screen if we like. ; ; BDOS function 9 (summoned by loading a 9 in the C register ; and calling 0005H) prints the characters it finds at the ; address in the DE registers until it sees a '$'. DS n DEFS n ; Reserve data space ( n bytes ). This is used to position ; allocate or label data storage space in a program. n is ; a number describing the number of bytes reserved. ; DS 16 ; Reserves 16 bytes. The next instruction will be located ; 16 bytes from the location counter when the DS was ; encountered. label EQU ; ; The EQU sets the label equal to the expression. The ; label should not be terminated with a colon when used ; with an EQU pseudo-op. The label can be any symbol ; (byte or word) and the a number in any of the ; following forms: ; SWEET EQU 16 ;decimal ; SWEET EQU 10H ;hex ; SWEET EQU 00010000B ;binary ; ; With this assembler the EQU must be located in the ; operation field. ; A label defined with an EQU cannot be redefined later ; in the program. label DEFL ; ; This assigns the value of the to the label like ; the EQU pseudo-op but a label defined with a DEFL can ; be redefined later in the program. *INCLUDE ; This pseudo-op causes the assembler to stop assembling ; lines in the file it is presently in and read in the ; file . It then begins assembling lines in this ; included file until it reaches the end of the file when ; it returns to the original file and resumes assembling ; lines in it once more. The can be any CPM ; filename.ext though if the extent is left off it looks ; for the given filename with an extent of .LIB. The asterisk ; must appear in column 1 with the word INCLUDE immediately ; following with no embedded spaces. ; ;*INCLUDE DRIVER.AZM ; will begin assembly on ; the file DRIVER.AZM ;*INCLUDE Z80MACRO ; will begin assembly on ; the file Z80MACRO.LIB ; Conditional Assembly Pseudo-Ops............................................ IF ELSE ENDIF Conditional assembly is a way of writing a single program so that it can be assembled different ways or with different options by only changing a couple of lines of codes. When the assembler encounters an IF pseudo-op it evaluates the symbol . IF is non-zero it assembles the following lines until it reaches an ELSE or an ENDIF. If is 0 the lines are ignored until the assembler encounters an ELSE or an ENDIF. If the ELSE is encounter the assembler begins assembling lines again. The ENDIF pseudo-op causes the assembler to resume assembling all lines. You can not have an IF without an ENDIF. Any of these pseudo-ops must appear in the operation field. TRUE EQU 0FFH FALSE EQU 0 KPRO2 EQU TRUE KPRO10 EQU FALSE IF KPRO2 BITPRT EQU 1CH ELSE BITPRT EQU 14H ENDIF Operators.................................................................. Operators allow the programmer to make the assembler do arithmetic and logical operations. They are usually used to manipulate operands or generate symbols. Some of them are used to create tests for conditional assembly. There should be no embedded spaces when using these operators as the first blank encountered terminates the operand field. The operands may be symbols or numbers in any of the bases. The operators supported by this assembler are: Arithmetic Operators + ; arithmetic addition. - ; arithmetic subtraction * ; arithmetic multiplication / ; arithmetic division (truncating the result) Logical Operators (Bit Manipulation) & ( or .AND. ) ; logical AND operation ^ ( or .OR. ) ; logical OR operation .XOR. ; logical exclusive OR operation \ ( or .NOT. ) ; logical inversion .SHR. ; shift left operand to right by right operand .SHL. ; shift left operand to left by right operand .HIGH. ; byte value is assigned the high byte of a ; 16 bit value .LOW. ; byte value is assigned the low byte of a 16 ; bit value Conditional Assembly Operators ( return TRUE or FALSE to IF ) = ( or .EQU. ) ; logical equivalence > ( or .GT. ) ; greater than .UGT. ; unsigned greater than < ( or .LT. ) ; less than .ULT. ; unsigned less than Listing Options Pseudo-Ops................................................. There are a number of listing options. All of these options only effect the print file (.PRN). The options include some for debugging as well as some for the actual format of the file on the page. The .PRN file is the basic tool assembly language programmers have for examining the output of the assembler. The pseudo-ops beginning with an asterisk must begin in column 1. *EJECT ( or EJEC ) ; The next line of the listing should be placed at the top ; of the next page. *HEADING ; Place the text ( following this command ) on the top of ; each page. Usually used to date the listing file. TITLE 'text' ; Place the text in the quotation marks (either double or ; single on the top of each page in the listing file. SPAC n ; Leave n blank lines in the listing. Used to leave white ; space in the file with out using a page break. *LIST ON *LIST OFF ; Turn the listing on or off. This is usually used to omit ; long comments or certain sections from the .PRN file. *MACLIST ON *MACLIST OFF ; Turn the expansion of macros on or off. Seeing how the ; macros are being expanded is handy for optimizing code ; but can waste paper when that is no longer the area of ; interest. LIST options NLIST options ; These pseudo-ops allow you to turn any of the supported ; listing file options on  (LIST) or off (NLIST) without ; changing the other options. Both of these pseudo-ops ; must be followed with one or more of the following option ; letters. If these pseudo-ops is used some options are ; on by default ( marked with (on) in the following list. ; ; A ; List all bytes in DB, DW, DDB, etc. Otherwise ; ; only the bytes that can fit in one line are ; ; included in the listing ( others are implied ). ; B ; Place symbol table into object file. ; G ; Place system generated symbols into object files ; I (on); List lines of conditional code following a false ; ; conditional. If off only the code actually ; ; assembled is listed. ; M (on); Expand macros in listing files ; O (on); Produce an object module. That is show the bytes ; ; being generated by the assembler otherwise just ; ; the source and (optionally) macro expansions. ; R ; use absolute displacement for JR and DJNZ ; S (on); List source code in listing file ; T (on); List symbol table in listing file ; X ; Generate and list cross references in listing file ; Z ; Generate an error for Z80 only opcodes. Allows you ; ; to write in Z80 mnemonics for an 8080 processor. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: Error Reporting ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: When the assembler is unable to understand what you are instructing it to do it generates an error message. These are almost always due to typo's or bad form. It displays the error code below and the line the error was found on to the console and also displays the error codes in the listing file. D ; Duplicate symbol definition. You will see this error ; message if you do any of the following: ; Use the same symbol twice. ; FORMATX ; FORMATC ; will generate an error (only 6 significant ; characters). ; Upper and lower case symbols with the same letters ; FORMAT: ; format: ; are identical to the assembler. ; Assigning a different value to a symbol that was ; previously defined with a EQU pseudo-op. ; If you are going to reassign use DEFL. E ; Relocation error. I believe this occurs if the assembler ; cannot reassign an address as expected. F ; Format Error. You will see this if you break any of the ; rules regarding field use and macro format. K ; Keyword error. This means you tried to use one of the ; assemblers reserved words or pseudo-ops as a symbol. ; ORG: JP END ; NOP ; END: JP ORG ; is in very bad taste. L ; Label error. The attempt to assign a value to a lable was ; unsuccessful. Also remember that labels do not end in a ; colon when preceding EQU. ; START: EQU 100H ; is bad news ; START EQU 100H ; is perfect M ; Missing label. The symbol you are using was never defined. N ; Macro nesting error. Macros can be nested (that is a macro ; can call another macro) but if the nesting gets to deep ; the assembler will quit and give you one of these. Also, ; you can only call macros that were previously defined. O ; Op code error. If you see this, look in the operation and ; operand fields. Consult the mnemonic table. People ; switching over from 8080 will see a few of these. P ; Phase error. A 2 pass assembler builds a symbol table on ; the first pass and generates the object code on the second. ; If a number that it calculates for a symbol on the first ; pass does not agree with a number it generates in the ; pass this error is shown check the symbols in the line ; the error appeared. Q ; Questionable operand. Actually theres no question about it ; it is a bad operand. Typo's give you these as well as ; blowing op code format. Usally easy to find your mistake. S ; Syntax error. You broke one of the syntax rules described ; above. T ; Symbol table full. Not much you can do with this except ; pare down the code. U ; Undefined symbol. You used a symbol but forgot to define ; it in with an EQU. V ; Value error. Usually means you are trying to do a 16 ; bit operation with an 8 bit number or the other way ; around. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: Macros ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: The macro is a powerful method of writing assembly language programs. It makes it possible to write assembly language programs in a way that resembles higher level languages. In fact by creating a library of macros you are in essence creating your own language, and your own compiler. Often times in assembly language (particularly writing for CP/M) each program contains source lines that are used again and again in other programs. By using macros the routines only need to be written once and then may be called in any program. The best thing about a macro library is that only the macros that are called produce object code. So there is no penalty in having a mac!ro library that is large and complete even if you are only going to call one macro. Macros have a form that is unique and must be followed closely for correct results. The general form of a macro is name MACRO #parameter1,#parameter2,.... instruction instruction instruction . . . ENDM The name is the symbol that will be used to invoke the macro. MACRO is a keyword that will indicate to the assembler that a macro is being defined. The parameters always must begin with a '#' sign in macros and they are seperated by commas. The instruction can be Z80 instructions, or any of the assembler commands listed above incuding conditionals. The instruction can also be another macro call (called nested macros) but only if the nested macro has been already defined. The ENDM keyword tells the assembler that it has reached the end of the code that must be assembled when this macro is called. Do not use a colon behind the macro name. The previous message program example can be rewritten to look like this with macros. ORG 100H *INCLUDE Z80MACRO BDOS PRNSTR,MES RET MES: DB ESC,'=',12+20H,12+20H DB '*Your message here*' DDB CRLF DB '*Or here*' END With the following macro library called Z80MACRO.LIB ;Call Bdos function #FUNCT using paramater contained in #DE ESC EQU 1BH ; ascii escape CRLF EQU 0D0AH ; ascii carriage return line feed PRNSTR EQU 9 BDOS MACRO #FUNCT,#DE LD C,#FUNCT ; FUNCTION NUMBER GOES TO C LD DE,#DE ; GET PARAMETER CALL 5 ; CALL BDOS ENDM We could also rewrite the cursor positioning sequence into a macro. Note how just this small example can save us time in future programs. Also, the macro library is a great place to keep frequently used symbols like ESC and CRLF. But what about using address symbols in macros? How can we avoid the 'D' error if we call the macro more than once. The other keyword unique to macros is LOCAL. This makes the assembler generate its own unique label every time the macro is expanded in a program. Following the word LOCAL ( which must be on the second line of the macro ) are the symbols we want the compiler to generate unique labels for. These symbols must also be proceded with a '#' sign. AJUMP MACRO LOCAL #ADR_Z,#BACK OR A JR Z,#ADR_Z LD A,40H JR #BACK #ADR_Z: LD A,04H #BACK: LD DE,0 ENDM The macro itself is not really useful but it is correct and shows the use of local labels. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::  CALL BDOS ENDM We could also rewrite the cursor positioning sequence into a macro. Note how just this small example can save us time in future programs. Also, the macro library is a great place to keep frequently used symbols like ESC and CRLF. But what about using address symbols in macros? How can we avoid the 'D' error if we call the macro more than once. The other keyword unique to macros is LOCAL. This makes the assembler generate its own unique label every time the macro is expanded in This file contains the 3 .DOC files: AZM-COM.DOC PHASE.DOC MAC-AZM.DOC ****************************************************************************** AZM-COM.DOC The Z80MR creates two output files from an assembly language source file with a .AZM extention. The assembly language file can be any combination of Z80 mnemonics or assembler commands and pseudo-ops in the correct form as described in the file Z80MR.DOC. Each line of the source program is seperated by a carriage return linefeed and can be created on any editor. The object file is the executable machine code represented by ascii characters in a form known as Intel Hex Format. The object file will have the same filename as the source file but will have a .HEX extension. This format must be translated into the actual machine executable binary values in order to be run on a computer. This can be done with LOAD.COM or DDT.COM which came with your CP/M. (described later). Many EPROM burners only accept the program to be burned in Hex format. The listing file is the other ouput by the assembler. It is ascii representation of the code actually produced by the assembler. There are many options available for controlling what is included in the listing file as described in Z80MR.DOC. The listing file will have the same filename as the source file but will have a .PRN extension. Invoking the Assembler..................................................... To assemble the file TEST.AZM the following command can be used: Z80MR TEST The assembler will read in the file TEST.AZM from the current drive and create an object file TEST.HEX and a listing file TEST.PRN. Controlling Output......................................................... Either of the output files (or both) may be omitted. In addition, the files may be located on different drives. Since the source file must always have a .AZM extention we may use the extention to control the output. Z80MR TEST.sol The letter in the 's' positio"n tells the assembler where to find the source file and may be any disk drive letter from A to D. The letter in the 'o' position tells the assembler where to locate the object file and may be A-D as above or Z if the file is not desired. The letter in the 'l' position tells the assembler what to do with the listing file. It can be any drive letter from A-D or Z if the file is not desired. In addition the listing file may be sent to the console if an X is in that position. Loading Hex Files.......................................................... The object file must be translated from Hex format to machine executable values by another program. If the program was written to ORG at 100H the program may be loaded with the CP/M utility LOAD.COM. All of the programs on this disk with a .COM extension are ORGed at 100H. This is where CPM loads its transient programs. To load TEST.HEX with LOAD.COM just enter LOAD TEST The extention of .HEX is assumed. If you have a program that does not ORG at 100H you must use DDT to read in the .HEX file which it does by translating the Hex format to binary as it reads it into memory. Once in memory you may manipulate it with DDT even SAVE an image of the program in memory actually creating a .COM file. If you write a program that ORGs where CP/M resides you can wipe out CP/M and have to reset the computer to recover. See the file PHASE.DOC for some more information on ORGing files at High memory locations. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: PHASE.DOC PHASED code One of the limitations of this assembler is the lack of a .PHASE directive. This directive causes the assembler to generate addresses for a different section of memory for labels than the actual place the code is to be loaded. This is important for the Kaypro since when the ROM is called, the lower 32K of memory is no longer available. Simply ORGing at higher location later in the program and jumping there will cause the entire area of memory between 100H and the end point of the program to be saved resulting in a huge .COM file when loaded with LOAD.COM. There are many ways to phase code and still end up with a reasonable sized .COM file. Here I will present two of the most common methods. Label+OFFSET Method........................................................ In order for code to be assembled in one area to run in another, our only concern is how the addresses are calculated by the assembler. Normally, an assembler sets a location counter when it sees an ORG pseudo-op. As it produces each byte of the it increments the location counter to calculate the next address. If it finds a label, it sets the label's address according to this location counter. The programmer has another method of setting the address of labels, with EQU. If every label in the program takes the form of Label+OFFSET where the offset is a constant, then the assembler will produce the code to run in high memory while creating a file that will load in low memory. The following short program which re-loads your monitor ROM from the ROM to RAM illustrates this. ;************************************************************************** ;** Rom Save Program ** ;** Run and then enter SAVE 16 ROM.COM ** ;** ROM.COM will contain object code of your monitor ROM ** ;************************************************************************** ORG 100h TRUE EQU 0FFH FALSE EQU 0 OLD EQU TRUE ; TRUE IF NOT 10 OR 4-84 IF OLD SYSPRT EQU 1CH ; old kaypro 2's and fours ELSE SYSPRT EQU 14H ; tens, 4-84's, 2-84's ENDIF OFFSET EQU 8000h ; offset for calculating high addresses LD DE,HISTRT ; the destination of the High memory code LD HL,LODEND+1 ; the source code is just beyond this loader LD BC,HIEND-HISTRT ; the number of bytes to move (end - start) LDIR ; move it up there JP HISTRT ; jump to it LODEND: NOP ; to calculate end of loader/start of high ; memory code segment HISTRT EQU $+OFFSET ; BEGIN USING OFFSET IN A,(SYSPRT) ; get present sysport data SET 7,A ; bank select bit OUT (SYSPRT),A CALL MOVIT ; move the code routine IN A,(SYSPRT) RES 7,A ; back to ram bank OUT (SYSPRT),A CALL TPAMOV ; now move to 100H for save JP 0 ; back to CP/M MOVIT EQU $+OFFSET LD HL,0 ; Source is at 0 (in ROM ) LD DE,OFFSET+1000H ; Load above us LD BC,1000h ; pick up 4K (2732) LDIR RET TPAMOV EQU $+OFFSET LD HL,OFFSET+1000H ; destination becomes source LD DE,100H ; move to TPA start LD BC,1000H ; 4K bytes to move LDIR RET HIEND EQU $+OFFSET ; end of code to be relocated END Assemble this program (the source is on the disk as phase1.azm so you don't have to type it in). Examine the listing file. Notice that the assembler generated high memory addresses though the program loads low. Using DDT.COM.............................................................. With this me#thod you would split the above program into two parts, the loader and the code that is to be relocated. You can assemble the loader and pick an arbitrary source address for the code to be relocated (say 200h). Then you can assemble the relocatable portion with an high ORG. (8000H say). Now you can join the two HEX files together with DDT.COM reading in the high portion with an OFFSET. To get the offset use DDT's Hex sum and difference command in the form of: H, The second number will be the OFFSET. The program we wrote above would go together like this. ;************************************************************************** ;** Loader.azm Loads relocating code to its destination *** ;************************************************************************** ORG 100H BYTCNT EQU 100H ; we can either supply a value here that we ; know will load enough code or assemble ; the high code first and let the assembler ; give us this value (examine print file) HISTRT EQU 8000H ; where the relocation code goes HILOAD EQU 200H ; where the other file goes LD DE,HISTRT ; the destination of the High memory code LD HL,HILOAD ;the source code is just beyond this loader LD BC,BYTCNT ;the number of bytes to move (end - start) LDIR ; move it up there JP HISTRT ; jump to it ; memory code segment END ;************************************************************************** ;** Phase2.azm *** ;** Relocate with DDT *** ;************************************************************************** TRUE EQU 0FFH FALSE EQU 0 OLD EQU FALSE IF OLD SYSPRT EQU 1CH ; old kaypro 2's and fours ELSE SYSPRT EQU 14H ; tens, 4-84's, 2-84's ENDIF BYTCNT EQU HIEND-HISTRT ORG 8000h HISTRT: IN A,(SYSPRT) ; get present sysport data SET 7,A ; bank select bit OUT (SYSPRT),A CALL MOVIT ; move the code routine IN A,(SYSPRT) RES 7,A ; back to ram bank OUT (SYSPRT),A CALL TPAMOV ; now move to 100H for save JP 0 ; back to CP/M MOVIT: LD HL,0 ; Source is at 0 (in ROM ) LD DE,9000H ; load above us LD BC,1000h ; pick up 4K (2732) LDIR RET TPAMOV: LD HL,9000H ;destination becomes source LD DE,100H ; move to TPA start LD BC,1000H ; 4K bytes to move LDIR RET HIEND EQU $ END Now we can use DDT to join the two files. DDT LOADER.HEX H200,8000 8200 8200 ; in this case both numbers are the same (we want ; second IPHASE2.HEX ; prepare to load file R8200 ; read in with offset ^C ; exit to CPM SAVE 1 PHASE3.COM ; and the com file is created ORGing High ( CP/M modifications )......................................... DDT.COM can be used to load .HEX files anywhere in memory despite where the load point (ORG) was set. It does this by reading the file in with a negative offset with the R command. Usually CPM is modified by saving the SYSGEN image and then overlaying the image with the modified section and re-SYSGENing. Lets say you wrote a new BIOS for your Kaypro. The BIOS for the old Kaypros ORGed at FA00H. You assemble it with the assembler with the ORG at FA00H. The object file is KBIOS.HEX If you want to overlay the present bios with your new bios immediately to see if it works it is done as follows: Enter DDT by entering DDT IKBIOS.HEX ; this sets up DDT for a file read R ; actually reads the file in and overlays ; your old bios with the binary code ^C ; returns you to CPM and if all is well ; with your new bios you will warm boot Now you want a permanent copy of your new bios on your system tracks. Once done you will be able to copy your new system onto any disk with SYSGEN. SYSGEN copies the system into memory but not at the same place the system runs. The BIOS image actually begins at 1F80H in the SYSGEN image. We must read the file in at 1F80H even though it ORGs at FA00H. We can do this with DDT also. First we must save the SYSGEN image to a file. sysgen KAYPRO SYSGEN V2.2 SOURCE DRIVE (OR RETURN TO SKIP)a ; get the system from A: SOURCE ON A THEN RETURN ; enter a carriage return DESTINATION DRIVE (OR RETURN TO REBOOT) ; enter a carriage return save 40 cpm.com ; save it to a file Now we use DDT to work on it ddt cpm.com h1f80,fa00 ; we ask for the sum and difference ; of desired address - load address ; DDT prints this. The second number is the ; offset ikbios.hex r ^C Now when we return to CP/M we run sysgen to save the new image to system tracks. SYSGEN KAYPPRO SYSGEN V2.2 SOURCE DRIVE (OR RETURN TO SKIP) ;enter return (use the memory image) DESTINATION DRIVE (OR RETURN TO REBOOT) ;we will put it on B DESTINATION ON B THEN RETURN ; another return FUNCTION COMPLETE DESTINATION DRIVE (OR RETURN TO REBOOT) ; one more return Now when when we boot w$ith the disk in drive B the new system will be loaded. ****************************************************************************** MAC-AZM.DOC Most of the assembly language programs released on Micro Cornucopuia disks are set up for the M80 assembler. If you've been wondering what the .MAC extension is for, those are M80 source code programs. Many of the people that got this disk did so to assemble the Kaypro Tinkerkit (source of the rom monitor and bios) without spending $150 for M80. It can be done. For the most part .MAC files can easily be translated to .AZM with very few changes. Unfortunately M80 is as extremely versatile assembler which when used to its full advantage contains some pseudo-ops and directives that Z80MR does not understand. I will reveal the most common of these and provide some help on getting around them in this file. First things first......................................................... Rename the file to have a .AZM extension. Edit the file. Near the beginning of the file you will see the pseudo op that tells M80 what mnemonics you will be using. M80 can handle both Z80 and 8080 mnemonics. You can even switch in the middle of the program. Two pseudo-ops .Z80 and .8080 tell the assembler which mnemonics to recognize. If there is a .Z80 there delete it. If there is a .8080 there you will need to run the program through an 8080 to Z80 translator (like XLATE2.COM). At this point what I usually do is run the program through the assembler. The assembler is very good at finding errors, so I let it tell me what it doesn't like. You can run the program through the assembler without generating any output files (see AZM-COM.DOC) and still get the error report on the console. A ^P before running the assembler will dump to the printer as well. Now you can go back into the file and fix the syntax where the assembler generated errors. Dual mnemonic files........................................................ XLATE2 is a great translator on 8080 only files. It also will only translate the 8080 mnemonics in a file that has both. Unfortunately there are a couple of Z80 mnemonics that are the same as 8080 mnemonics and will be dutifully translated by XLATE2. The problem is that the mnemonics are the same but the instructions they represent are not. So the file will assemble OK but will run with unpredictable results. An example. JP is a valid Z80 mnemonic. It is also widely used since it is an unconditional jump (JMP in 8080) JP is also a valid 8080 mnemonic. It is the jump on parity instruction. So a Z80 JP is translated as if it was the 8080 JP which will make it JP P in the output file. Bad news. This in itself is enough to make it too undependable to use on dual mnemonic files. To avoid the grief you can do one of two things: Translate the 8080 sections by hand if they are small enough. Split the file into smaller files where the mnemonics change. Run the 8080 sections through the translator. You can let the assembler rejoin the files using the *INCLUDE statement or use pip or your editor to rejoin and assemble the whole mess. What I'd really like to see is someone rework XLATE2 so that it would stop translating when it saw .Z80 (and also comment the pseudo-op out) and start again when it saw .8080 (and comment it out as well). Also some of the other minor syntax changes could be fixed as well. Yes XLATE2 can be assembled with Z80MR (it is a .MAC file). After removing the .Z80 at the beginning of the file the only error I got was for the MOD operation on the version number (MOD not supported by this assembler). My solution, just enter the version number there. Having the assembler figure out the ascii just wasn't that important. Macros..................................................................... The M80 macros go through Z80MR pretty well for the most part. There are some syntax changes to be made. Precede the parameters with # signs (including locals). Also there are some macro pseudo-ops that are not supported (also not widely used). If some one writes Z80MR macros to substitute for these (and a MOD operator) please send it in and we'll include it in the macro library that we are developing for this assembler. .phase and .dephase........................................................ These are used to make the assembler generate label addresses for some other part of memory than where the file will be loaded. The file PHASE.DOC offers some alternative ways of doing this. % ORG 100h OLD EQU 0 IF OLD SYSPRT EQU 1CH ; old kaypro 2's and fours ELSE SYSPRT EQU 14H ; tens, 4-84's, 2-84's ENDIF OFFSET EQU 8000h ; offset for calculating high addresses LD DE,HISTRT ; the destination of the High memory code LD HL,LODEND+1 ; the source code is just beyond this loader LD BC,HIEND-HISTRT ; the number of bytes to move (end - start) LDIR ; move it up there JP HISTRT ; jump to it LODEND: NOP ; to calculate end of loader/start of high ; memory code segment HISTRT EQU $+OFFSET ; BEGIN USING OFFSET IN A,(SYSPRT) ; get present sysport data SET 7,A ; bank select bit OUT (SYSPRT),A CALL MOVIT ; move the code routine IN A,(SYSPRT) RES 7,A ; back to ram bank OUT (SYSPRT),A CALL TPAMOV ; now move to 100H for save JP 0 ; back to CP/M MOVIT EQU $+OFFSET LD HL,0 ; Source is at 0 (in ROM ) LD DE,OFFSET+1000H ; Load above us LD BC,1000h ; pick up 4K (2732) LDIR RET TPAMOV EQU $+OFFSET LD HL,OFFSET+1000H ; destination becomes source LD DE,100H ; move to TPA start LD BC,1000H ; 4K bytes to move LDIR RET HIEND EQU $+OFFSET END D HL,LODEND+1 ; the source code is just beyond this loader LD BC,HIEND-HISTRT ; the number of bytes to move (end - start) LDIR ; move it up there JP HISTRT ; jump to it LODEND: NOP ; to calculate end of loader/start of high ; memory code segment HISTRT EQU $+OFFSET ; BEGIN USING OFFSET IN A,(SYSPRT) ; get present sysport data SET 7,A ; bank select bit OUT (SYSPRT),A CALL MOVIT ; move the code routine IN A,(SYSPRT) RES 7,A ; back to ram bank OUT (SYSPRT),A CALL TPAMOV ; now move to 100H for save JP 0 ; back to CP/M MOVIT EQU $+OFFSET LD HL,0 ; Source is at 0 (in ROM ) LD DE,OFFSET+1000H ; Load above us LD BC,1000h ; pick up 4K (2732) LDIR RET TPAMOV EQU $+OFFSET LD HL,OFFSET+1000H ; destinat This is the release date of the disk. PHASE1 AZM  Fog Library Disk FOG-CPM.017 Copyright (1985) by Fog International Computer Users Group to the extent not copyrighted by the original author for the exclusive use and enjoyment of its members. Any reproduction or distribution for profit or personal gain is strictly forbidden. For information, contact FOG, P. O. Box 3474, Daly City, CA. 94015-0474. as part of the description of a file indicates that the program is distributed on a "try first, pay if you like it" basis. If you find the program(s) meet your need, please refer to the author's documentation for information on becoming a registered user. Only by registering and paying for the programs you like and use will the authors of such programs continue development. Often, more complete documentation, additional modules, and new releases are available only to registered users. Two popular Z80 disassemblers are on this disk. Filename Description -12-00 .85 This is the release date of the disk. -CPM017 .DOC This is the description of the disk contents. DZ .COM 395E 36K [DazzleStar 1 of 5] A Z80 disassembler with complete on-line help. DZ-DXERS.DOC 2818 3K [DazzleStar 2 of 5] DZINSTAL.COM 97EA 9K [DazzleStar 3 of 5] DZMENU .OVR 7232 8K [DazzleStar 4 of 5] DZMSGS .OVR 9577 54K [DazzleStar 5 of 5] Z80MR .COM 9785 14K [Z80 MacroAssembler 1 of 4] Z80 macroassembler complete with example file. Z80MR .DOC D298 26K [Z80 MacroAssembler 2 of 4] Z80MR .TXT C1CA 17K [Z80 MacroAssembler 3 of 4] PHASE1 .AZM A408 2K [Z80 MacroAssembler 4 of 4] thors of such programs continue development. Often, more complete documentation, additional modules, and new releases are available only to registered users. Two popular Z80 disassemblers are on this disk. Filename Description -12-00 .85 This is the release date o&'