IMD 1.17: 31/05/2011 7:31:54 ice  y{0!0~#0À1!}y|zxʐyҀ{€ŠـUQ COPYRIGHT (C) 1978, DIGITAL RESEARCH _͌> ͌> Ì͘~#͌ç _2<ɯ2þ2<2<2<2a{_:w:>ĸ:=2w!'!5w:ĸ!ͧ͝ʂq !F#xʕ~wÆw!"  w# µ!~6͸:ø !¼#͘*~ ۷͌#>?͌͘q =_.:;<> 5ۅo$>!?2*5"o@G:v:w|x2pʟ#*6?Ñw~ʦÕ#6 Ÿ.#*¿6?w®#6 #6" #~? xDIR ERA TYPESAVEREN !y1# 6y#1 ܷL;L>Mܯ2ɯ21ͳy͸<::ٷ‡1͘ͰA͌>>͌&;Ͱ2D:t!_~#fo\+{t!v"!âREAD ERRORâNOT FOUND! ~ #0 WxxڀڂG ~ # x~#'!?~ɯ2:=!ø:=!:øD9!~ t 6?#m͘ͰA͌>:͌> ͌:`Ox0 ±> 0> ͒x > ͒Ý͝z`D ͢&!5q#~Yq#"!6?=ͳ`9`ALL FILES (Y/N)?D9u͘!6!~Unޯw4!?~`͌͝`B=`KD:D9o&)|+!;ë͢͢`NO SPACECANNOT CLOSED:9_!'*5=%_Y#"DYG!~?߸pYp2S``Kh͢`FILE EXISTS: “:c=22͸c 9!]%C!;}|Ið=IKD!~2>F~22\!!'!~ #~#x2͘:2ͫ;1:͸qKR͢`LOAD ERRORCOMKD: !q$$$ SUBA`lr! N!     ?" ! q!9"1@** }D!{!u!{S:A2]]úBDOS ERR ON : $BAD SECTOR$SELECT$R/O$!~6 ͺO: :  2> :y!4 5 6y:^@Oy  :@#   $O:]* N#ͺ ‘xs~+žSu¯!>wsʹNkNx#N)s#wO)~xsp *@M*>w#6*w*{*::+s#r*5Y*::͕"ڣ**s#r*4{*:@O*M!q:'2*2:!* ͼͼ*!ږ*&*:2!4u:!q:͹!:+!*&*z6!4A!6:(*&*~V*& *~$!w͢*" :2q!6!:햟*&* ~2:!O* :?HHҼ!4v!:`!q:2* "!6AZ :͢*&*6Z!q:2!>:햟>!햟Hr>!햟~Hw#~!>ᖟ!w*MT`:*MTo:>!s+q:=2ʪ:!O* :!O* w{W u * * w: uZ :#!6 >!#:!O* *&*  w!4!6ͮ1 :Aͱ* "!@" :ʈ*" !6 >!څ*&* 6!4iͱ!q$:™ * 4 :¼:ҶBÿ:!6(!6:*DM$:*DM$(:!#!6:͉!6:#*}7!6IY?(>!a!6*}!6:#wO>:!6!6?>!)!)* :㇇O! "z:㇇O!} "*& "*&) "*M::=2:2* ~2* >w͌* "DM$* }2!" }22* M!/ ^#Vm2m*M:m2m*Mm*Mm*" m*&" m:2m* DM]mkm2mm!6!6!6!" m͌m͠m͠$m͠ m*" ͠Zm͠m͠m͠Jm͠Bm͠͹m:2m:2m:* " m*z" mͻm:|2m!6m#-6AJU[dg $:ʅ* :w:2͌: ͫ+s#r_og_{ozg_og~ ¹~ ^#V) ~ i`N#Fogo&ogDT */4:C 60K CP/M VERS 1.4 1!-L2à1 4 */*:*DM4:ږ:>~4>2!"2!"28!"9:O Z!L?BOOT  *y2y >0O!~ϱw!qy2i`"YiYi~O#L!~w !w ͸:>„yxzÉӉxӊʉ͸ʫ±ګ±ñ k>:yۉ:{ۋ:xۈzÉӉxӊʉ͸ʫ±ګ±ñ k>:yۉ:{ۋ:xۈ $@D @@$ $$$BI$H"! $HD@B "B "    D  HB $$UPHH@ @DB  $H I!H ! $BI"HI$@I" I$I$H I $I$!IBI$IBDA$H $ $! I$@$H@ $$IBH DD  !$ $"@B $I$I"$""I$D"$" @@D"DHDI$DDD" @"H! "! "AIB  !   DDI$$BB DI "$ABH I BHH MOVCPM COMF PIP COM7 SUBMIT COM ED COM0{Á INVALID RELOCATION BASE$*{Á BAD INPUT RECORD$F{ÁMISSING FILE NAME$a{ÁCANNOT CREATE OUTPUT FILE$ MACRO LIB: opMUSIC LIBqES ASM>rstuvwxyCOPY COMz=!v"t!q6!o#+w+wt >T}o|g"v! :m ] j!"xj ~#]*v!:m  xASM8080 COM@ !DDT COM&"#$%&LOAD COM'(STAT COM)*+ #CPM COM88zҷ*~#" <AO?e##H@'ON# ICEMESS ASMFORMAT COM{ICE ASMICE ASMx5ʺÞ SYNCRONIZATION ERROR$ {ª~#o}oҶö*tT# :m g! ~#* DM! x w#SYSGEN COM,DUMP COM-DUMP ASM!./012ASM COMf3456789:;<=>?XD͈:͜:3)\:2e:pG:!3H͜XD͈:we!D +pG:–ICE HEXICE $$$ICE PRNGICE $$$!N#F! D!Y>0w#w+!Z4~:60+4*"_:o READY FOR "SYSGEN" OR "SAVE 00 CPM00.COM"$*v {Á CONSTRZTEL COMD@ABCDEFGHXDIR COMIBASIC COMtJKLMNOPQRSTUVWXTOP COM#YZ[\],COPYRIGHT (C) DIGITAL RESEARCH, 1978 1] ʑ?ʑ! __0 r))) O @|r}r.g))å{o INVy: ʍÖpG!~6e͈:!3ҵͫ!C6:ͣ!6:/>!/Hͫ:<2DUCTING 00K CP/M VERS 1.4$:m =!lw#©X2\!6{Á INPUT FILE NOT PRESENT$LOD COM^LOADER COM&_`abcHVGLIB ASM -defghiHVG LIB"jklmnALID MEMORY SIZE$!$ʡ~/w/wʔ|g*"t|?¸>@G!>0w#w!4~:60+4xo!N#F! x, #  ::=H (ͫ!6:*D͈!B6::3/HY!6:> !/>HH;ͫ:ʟ#*6?Ñw~ʦÕ#6 Ÿ.#*¿6?w®#6 #6" #~? xDIR ERA TY_͌> ͌> Ì͘~#͌ç _2<ɯ2þ2<2<2<  #~#x2͘:2ͫ;1:͸qKR͢`LOAD ERRORCOMKD: !q!p+q*̓> >ڦÚ!p+q*DM͞:̓ ̓:}2:~!!:*& N̓!4!6::=ͳ`9`ALL FILES (Y/N)?D9u͘!6!~Unw4!?~`͌͝`B=`KD:!Bw:<2:œ:¬ͭ :!Cҿ!6: !6:!6:!6*'D͈::,PESAVEREN !y1# 6y#1 L;L>M2ɯ21ͳy͸<::‡1͘ͰA͌>2a{_:w:>ĸ:=2w!'!5w:ĸ!ͧ͝ʂq $$$ SUBD9o&)|+!;ë͢͢`NO SPACECANNOT CLOSED:: HHGͫ: 2%::ͭ :GF:2Äv!.q!^*8!g*6: >͆>͌&;Ͱ2D:t!_~#fo\+{t!v"!âREAD ERRORâNOT FOUND! ~ #0 Wx!F#xʕ~wÆw!"  w# µ!~6͸:ø !¼#͘*~ A`lr! N!     ?" ! q!9" 1@ * * }D!{!u!{S :y{0!0~#0À1!}y|zxʐyҀ{€Š 9_!'*5=%_Y#"DYG!~?pYp2S``Kh͢`FILE EXISTS: “:!q*&̓ ̓ ̓!p+q͓* ̓ ̓!q*&̓!p+q*͆2!p+q*͆2!p+q*͆2xG ~ # x~#'!?~ɯ2:=!ø:=!:øD9!~ t 6?#m͌͘#>?͌͘q =_.:;<> 5o$>!?2*5"o@G:v:w|x2p A2] ] úBDOS ERR ON : $BAD SECTOR$SELECT$R/O$! ~6 ͺO: :    2UQ COPYRIGHT (C) 1978, DIGITAL RESEARCH c=22͸c 9!]%C!;}|Ið=IKD!~2>F~22\!!'!~͆2!p+q*̓!p+q*͆!p+q*͆!p+q*͆2!p+q*̓!6 ̓ ͆ ̓ͰA͌>:͌> ͌:`Ox0 ±> 0> ͒x  > ͒Ý͝z`D ͢&!5q#~Yq#"!6?  > : y! 4 5 6y: ^ @Oy    : @ #     $O: ] * N#ͺ 4iͱ!q$:™ * 4 :¼:ҶBÿ:!6( !6:*DM$:*DM$( :!&* ~2:!O* :?HHҼ !4v !: ` !q:2* "!6A Z  : ͢ *&*:2!4u :!q: ͹!: ws ʹ  N k  N x #N) s #wO) ~x s p#!6:͉!6:# *}7!6I Y  ? ( >!a!6 *}!6:#wO>&*6 Z !q:2!>:>!Hr>!~Hw#~!>!w*MT `:*MT o:>!s+q:=2*m  ͻ  !q:<2O:;4 !6:2S W *M !q:O*z :w#6*w*{ *::+s#r*5Y *::Ҕ:=O* ~2*M2«!6*Mr *&"*&* :w: Y  :!:<2:? ʪ:!O* :!O* w{W   u  * * w: uZ  :#!6 >!#DT */4:C 00K CP/M VERS 1.4 1!-L2à1 4 */*:*!>+! *" m*z" mͻ m:|2m!6m#-6AJU[dg $:ʅ* :w:2͕"ڣ **s#r*4{ *:@O*M!q: '2 *2: ! * ͼ ͼ *<M!:!6!6? >! )!)* : O! "z: O!} "* & "* &) "* M:: !څ*&* 6!DM4:ږ:>~4>2!"2!"28!"9:O Z!L?BOOT &*z6!4 A !6 :( *&*~V *& *~$!w͢  *"  :2q !6!:*͌: ͫ+s#r_og_{ozg_og~ ¹~ ^#V) ~ i`N#Fogo&ogO* n&"*<M!:=!͡" * ~2* ~2:< * w* :w:2O`i"Y !6+6>!ږ *M͚ 2 ! :ʟ:2 * >=2: 2* ~2* >w͌* "DM$* }2!" }22* M!/ ^#Vm  *y2y >0O!~ϱw!qy2i`"YiYi~O#L!~w !w ͸:>„yxTYCRTUC1CONNULEOFDISK READ ERROR$DISK WRITE ERROR$VERIFY ERROR$NOT A CHARACTER SINK$READER STOPPING $NOT A CHARACTER SOURCE$AB: HHGͫ: 2%::ͭ :GF:2Äv!.q!^*8!g*6: >͆" @@D"DHDI$DDD" @"H! "! "AIB  !   DDI$$BB DI "$ABH I BHHXD͈:͜:3)\:2e:pG:!3H͜XD͈:we!D +pG:–zÉӉxӊʉ͸ʫ±ګ±ñ k>:yۉ:{ۋ:xۈORTED$BAD PARAMETER$RECORD TOO LONG$INVALID DIGIT$END OF FILE, CTL-Z?$CHECKSUM ERROR$CORRECT ERROR, TYPE RETURN OR CTL-Z$INVALID\(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)!q*&̓ ̓ ̓!p+q͓* ̓ ̓!q*&̓!p+q*͆2!p+q*͆2!p+q*͆2$A"$H !BA $! DBI$  $$$I$$HHHHB$! D"D BIHDAAI$$$H$HI$BI$I $I$I$I$y: ʍÖpG!~6e͈:!3ҵͫ!C6:ͣ!6:/>!/Hͫ:<2D $@D @@$ $$$BI$H"! $HD@B "B "   FORMAT$HEX$$$$NO DIRECTORY SPACE$NO FILE$COM$START NOT FOUND$QUIT NOT FOUND$CANNOT CLOSE DESTINATION FILE$$$$NOT FOUND$COPYING (INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)͆2!p+q*̓!p+q*͆!p+q*͆!p+q*͆2!p+q*̓!6 ̓ ͆ ̓$I$ "I$$I$HH B !B$ A D"::=H (ͫ!6:*D͈!B6::3/HY!6:> !/>HH;ͫ:  D  HB $$UPHH@ @DB  $H I!H ! $BI"HI$@I" I$I$H I $I$!IBI$IBDA$H $ $!-$UNRECOGNIZED DESTINATION$CANNOT WRITE$INVALID PIP FORMAT$CANNOT READ$INVALID SEPARATOR$1. :2͆2:1. COPYRIGHT (C) 1978, DIGITAL RESEARCH, PIP VERS 1.4$$$ SUB =.:,<> _[]INPIRDPTRUR1UR2RDROUTLPTUL1PRNLSTPTPUP1UP2PUNT!p+q*̓> >ڦÚ!p+q*DM͞:̓ ̓:}2:~!!:*& N̓!4!6::!Bw:<2:œ:¬ͭ :!Cҿ!6: !6:!6:!6*'D͈::, I$@$H@ $$IBH DD  !$ $"@B $I$I"$""I$D"$y!6+6+6!6#6!16#6:Ҵ*̓b͓!~6:*:Mͺ!*/!6!A6!6+6e͈:Ö:5:=2  :͓~!s+p+q+p+q:=2G ** w*#"*#" !"*AMͺ!6:9!ڴ **?DM͂D2ʣ :!6Ú!6Ú!6͆2'2=HX[^adgjmpy:2::2!6*Mͭ :2:D*}2͟"ͻ * * *&"!q: : :: :2: !6<:2<22!!26 t !q*&*~!46Z2: :]H:A2O>e: \Z2bͫ:S:QHҫ:~ * :w*#"m å å å å å ͫm *MRm !6 m !6 m !6 m *&̓m !6 m !6  m !6!66#6#6!6*M͠B:&:*69Z2::':S:” A<2O>ny*M͠ґ:ʍ ͫ*"*?6:92í *"!4Z !"!}=2 !6!"*Mͺ!6:!H * ": :B:<22%: 2:DpDz>>ͫ:S:2:b*MV:q*M}:>!8Ґ:8>! & !6:4::H4̀ : A!26*Mt : U!6!q:a/>z!/Hy:_2:!<2Z2: HڢÄZ2Z202O> !6Z202O> *&ͪ*& !s*& :w$60 m *&̓m !67 m !67 m !67 m *&̓m r   ! , 7 :2!q: ʊ [‡!~5!6:ʝ!6#6>!!6:<2O>/:!O!R *M Hó: !6Z[!~: * !"!4*DM͂e/7 ͫ*"!4 :1 :<2!":ʚ ͂e!:q2q:2=28> >>!6Ү!65+N! ~2!54ͤ2¼>>!*M:25!6:7<26>! *M!6!8q:A/>Z!/HҠ: 2::=O>:!pHz>͞>!6:2*M! ^#V;H *Z2:_!6=!6>'!.ͭ !4!p+q*n !r+s+p+q*~$v** e>*#"*#"L>u2:*M8 :œ *M8 :12!:ڹ !:2â !:w>! !5 8 : !16!q:!w  t 5:2:2!4¥:[$Ü:0!6:.jZ2O͠j: T:*d g=:[u!~5!6:e:ր2O:2ä !:2͂!6:! e2!6:ր! *& :͏ 2!46> ::Ð!q:7!wO! ~2A*& :w>!:R!74W!76>:~<2~!k> *~& NVZ2*?~2*#"_2͒2!6H!6H!6 H͆2ppppppppͫ!6ÚBҒ/:!6!6}2:!6:2͞z>!6må!62}2m: :0Ot !q:O :O !6:2:'2:'2:'2*M *M *M :z :t  t   t ::<2*6 * 6 !q!6> !*&G :>!4©>:<2O* :w:?!36!q!6?!: *": ͫ!4¯ :1 !q4e!"!q: \ !14>!\ :!1\ :2*M!E ^#V=ځ ͻ ‡y!p+q!36!6+6 !6: һ: µ!6ày:~2}*M͠!6!6!6>!*& 6!4!4 >>"2:!0!52!BFRm:O>>!p+q:l!6*DM͞:|!6̀ : :<2–͞͠p͓!6> !*&e ~2 : .̓*M̓!4¨>!:=2A::2A:4P:͚m2qX:q2O! 6*q& 6$>!qRm*q& w!q55k :l͚*i+"ii ~ͺe:—ͫ/eeu /eR!=>͜+!9s!"?@=!"=*;*="=ͼ\0>!g6:g<2g=O! ~2h U:<2O>9U!60+~9U!60+4:hag:h_2h:h@|S͚!iҺu2—!6Ä*& :w:<2OڶR:>}20O> :0:AO>$R:A ͽͽH! COPYRIGHT(C) 1977, DIGITAL RESEARCH $ERROR ON LINE $SUBNO 'SUB' FILE PRESENT$DISK WRITE ERROR$COMMAND BUFFER OVERFLOW$COMM͜>!:=2::2!A:*͜y: 9͜!p+q+D*DM! D͈::=Hy͜:~2_{ozg001 $$$$ SUB "?͟";"=ͼ:!2@:!Qbyb*Mͭ Q:ò :2}ͣ!6!"i!o6:os!k62p:p H^:p [:p$)2p$*pMͷ&:p02pO> ͚&!m6͠:pwO`iͿͱ͛2O>r:!\!6:!\:=O! Nͭ !4< ͭ  ͭ :o͓*& 6$AND TOO LONG$PARAMETER ERROR$INVALID CONTROL CHARACTER$DIRECTORY FULL$CLOSE ERROR$!9"!Ϳ}z!p+q* }!p+q_og_{ozg^#V))) _{ozg^#V) ¿^#V|g}o i`N#Fog H =6#6>!*& ~ʼ::Hڼ!6!4‡:H *"*="ͻ **M!p5t͠t&*lMͷ[:p^TA2pO>I͚Q:p>*m& ~ ¶!m4à!nq*i#"i͌d͚*ii :nw:k<2kO>}|͚ !6:ͫ!d6MB2B*;">!6ͫ>!Eͫ!q:Z:Q2r_!r6*}v!r4ͭ _'ͻ *M* w*#"*#"r!p+q(+*DM*c*& 6:ec\:=͚!g6>!g å:8:¥͋ͷ:7¥*3#"3ұ!76:8B!7>w!"=*"?͓× :8C͓ͦ× :8D͙ͦ× :8KH:8Hҽc !"3!76#~±͇ú͙͙:8>9Jú*9d ~28O :8 *)+")!86:8!6:! *M͵ !4 !q: [ : : H: H[ ^ :@2*M     !p+q* !K "$" AT $1dB" '+!Vs~!҄p+qc *DMn !p+q* !p+q*2!p+q*2!p+q*2!p+q*!p+q*!p+q**d 6*+"!##s#r!'6!-6:] :m HB͌ :\2VR 2b:=2!\6:l2v:2}:=2͆ 0Ñ :8S=eL:29J+s#r!:*& ~28:<2ïÔÑ :8WͷÑ :8X\ ͛  ͆ M/ *DMc â:72-× :8 ::H͇ͣ͟× :7HҔ :8A"!76*9"=*"?͓Ü^q!86 :2ҷ. -¦ͳ >!^÷!6!6͠ !6:!6Oú͖28!^6!p+q*2!p+q*!6͐  O >>!&q*&&!(p+q*':Uͽ !d6 !"9*";!61!6#ú1!6?ú1!6>1|~ *M n *8M c 1!$6!6!#6:%2E Y :U/, ͆ !U6  :, ͌ *="b?b=Y *bd N *b"b5 Ñ :8Z† v ͜ v ú҃ { ͯ !76͓Ñ :8F==:L-Ñ :8J=e:2eL:=2:<2!҆*& ~28:,!T:^,*^& ~28:^<2^× Q=D[ { × ͣ:8-W!76:8#hå|҅͋:8:‚!86L  c )~ [ͳ c { !/p+q.*.DMd -´ *W"~!"!h6!|6.![\ - !: *M[ \ :!::2{ × H;:28:2:82À× :8IU!:%:H2#c͙D9:86:8:8v Ñ :8ʑ ç× çv!q*&!q: !4: !6*Mͥ !q: :O>H2y !6 Ê COPYRIGHT (C) 1978, DIGITAL RESEARCH DISK OR DIRECTORY FULL$FILE EXISTS, ERASE ITNEW FILE$BAK$$$BAK$$$-(Y/N)?$NO MEMORY$BREAe*9"`*M*Ͱ/ҟÜ!:9J"=!76͓*`"9TÑ :8M:H%! 6>3Jͦ: <2 O!6   @~ { *M[ \͠ :: \ :1 ͌ U~ c ^͢ [ !:] *M[ [ a͢ [ [ !{6: ͌ !*;d :LwT  ͓:7*;"?93=!"=39="=*9"=;=3M*"?*3*; N*M[ k :ڴ͈ ʯ>!6:<2=O! N!"3>3J!"3/*3+"3>>!"+:7!'+w!&6ͦ28!\q!\:8:H:H!]q*]Myc *]Mͥ j ͜ Oͺ2]c :]Yv>>:8[ -„!%q:ʚ*%M !(q:(a/>z!(/H!)q*)M͢:)_:)!*q:&**Mͺ:*!,p+q!'"/!.6>/:T2U/H%:T<2T*?#"?:U9*?+"?͓:U!6e:2*Ͱ/]Ü*8Mͺ:<2=O! Hq*+*)")!U6!6!6!T6*M[ k  *M[ !06:V!0 *~*YDMk \ 2 >! ͌ *~*Y6:V20 *"?;9=ò OE2M'*9d :Mw:M A!Nq:'X*NM:N;=l*;d ~2OOͮ :O *3#"3*9"A!"E+"C2*;"A*"E!"C!J6:JҼEA=2I*C*A"Gd ~ Ht*G"A>*++"+*3+"02_O> /!"3|Ҷ*3)))*3) *_& "3Ñ)3=!76)3=+s#r!763)="3DM!>JY*+*/{2-*+*/"+*/! "/:-!.Q!.6:-0O V  !2p+q:-/i*1DM:   :#DMZ!#6:7¦!"+*9"Vì*="V*V+d ~2X :Hc *="V?V=:X y*+#"+8 Ü*V~"~:0<20¸  !"~W~=* ͩ *~*Y~21B *~#"~:1*M[ !#+!3s{b ͧ !26:3!2ڣ **|DMk Š\Ҷ;=Mڰó\Ñ!76!"=*;"?͓͎\?;=!76͓ͷ3>32J:I/Ҭ!J6CA=+s#rù:Jҹ*G"A7:7*A"=*9+"?*;#"=*A#"?*9#"9*;#";*9+"9*;+"))덑o|g =^#V) ^#V|g}o '_{ozgi`N#Fogo&og H X=W  Ï* *)DMZ:ʢ͐>!8 ҹÜ!: >!J*!+"!>3Ü! 6: <2 =O!6 N:#d ~2XO *V"V!"3*3"5*5"3"͟:72Y!76͇:Y27?=>=JHwz)!Z6 [ ʏ ͌ *":2<22j ͧ !"!4qW= F **|:4w*#"!5q:T ͛  ͌ !T6*T&  28*8Mͮ  ;9=*ò*9d :8w:8 Cͦ28:8 :#/HH/DҒ:8 !86 ͓!86;*)#")!Kq:7T?;=Q:KN*;d ~2L @*9d :LwÒ=9=Ғ*9d ~2L z*)+"):Kҏ LIBX$$$$$$$LIB ͜ O:$X!$6:!-A;=;Z>͐F* , !%6  !6!:%2$t*%& 6 :%<2%=O!>!Zڢ8 ғú>U:Z<2Z€!76!"39=ò!86 !86 !&6*8M͢2[*8M28:[/:5w:T<2T!h6*}+:h<2hͮ F [ͳ :?͌ d͢ |*M[ .[\ -W[ |g͢ *M[ [ .k :8Œç͓e*& :8w:<2dگò!Qs+q*;"R!U6:U/R=H(*R#"?"R:P2T*T& *?d !Q  1*" COPYRIGHT(C) 1978, DIGITAL RESEARCH  !4w_#~ ʸ A:4~~# ¼ > \ ?ʻ w# !ͼ ? !ͼ  á 4êü /L9ASMPRN!)ͼ !ͼ :5͡ :6:6͡ :7͡ :\ ʻ 24!dͮ 25ͮ 27ͮ 26!8 ( ʃ !Y 1 HEX :7ʞ !z 8  !"2D2X2#! 8 !ͼ z{* ! !"!8 w  #  +6# *#"~!ͼ G:6QxJQS*!w#"! 1 !"!Y~G*##~w*##~<*}q!~ڬ6![^![^#fk"͎͘!G#*####*^#Vû!^*"*OʊQ>ÖH >2 2 û: B­>ôD> ¸!52 !"!N#~#A07O! ~*!) " z'{ͅ>ɯo>g"k!m6ů{_zW5>)D*kOxGd !m?FDM!xGyOڂ͸*"!!#^4!$wͯͯWƐ'@'ê>:ͪ!#^Ww*!{͚|͚}͚͚{!$~#͚͚> ͪ> ͪ?'  v:P@< !  PP27 ( *"  NZZ NCC POPEP~# …¡z!ͼ wʹ* ! w#" ! 8 !" ! zz_O4:  :6y{zA"*![N![ N#Fr+sq#p/>G=#w#w3#w#w!JSYMBOL TABLE OVERFLOW G*##~w*##~:  '<ͭ'<>V$>O$à\ÞØ`rÍÖ)sn55)=â|g}o=î--#zg{ozg{ozg{@2 0 0:x0_<2! wI2 2> 2 >2ɯ22 !~@_6^4#: w~$w: 0 q M x_BH!œ#¶ ¦{KÈCÈ<:JCR:  !6 s!:! G~#x=2> > ! >x6 #='G! ~ p( O*}O>4?:7w:#ĸ*"!͸* }w>ͪg( ʆ1 *_###s#r^#V`à 4 Wm ()*+,-/ABCDEHLMDBDIDSDWEIIFINORSPACIADCADDADIANAANDANICMACMoÓ:: ;,!ɯ22=2l!"]!~H5_!m~0:ą:  *":  :‰:̅ԅ!^#: A: A͋q: a{_2  2 ͞ !ɯ2I:  ;*:  ͭͷ ͭ͋#  ɯ<:O=_Z!F!V#fjQ̓E!^#Vo&)~#FxGyѯ<àn8Y :7ʗ8 z !<ͼ CP/M ASSEMBLER - VER 1.4 NO SOURCE FILE PRESENT NO DIRECTORY SPACE SOURCE FILE NAME ERROR SOURCECCMPCPIDAADADDCRDCXENDEQUHLTINRINXJMPLDALXIMODMOVMVINOPNOTORAORGORIOUTPOPPSWRALRARRETRLCRRCRSTSBBSBISETSHLSHRSTASTCSUBSUIXORXRAX![w#w#b!"!F#v2[=ʅVq”*qͦ1& O:lµ̅>2ly:_!w~!s!m~ùy !~=w_!m~ ͅ>9q>9: '!2 >9 7:! 6 >2>2: 2 Qͭ:Ğ! :lj<͖<j<|<: !~ڢͅ6~44O! s#r!~ ڿ6ͅ^4!mw!wp!~ͅ!55N! N#fio&)^#fk FILE READ ERROR OUTPUT FILE WRITE ERROR CANNOT CLOSE FILES END OF ASSEMBLY G:7xʘ!#~ʄl͸Ä**!O {zʊRICALLENDMLDAXLHLDPCHLPUSHSHLDSPHLSTAXXCHGXTHLENDIFMACROTITLE  PF FP! ( 2/  Ͱ>2lyPLnR>UX:l̅2l͓i.*|g> >کÝ!p+q*DM͡:͆ ͆:_2:`!!:*& N͆!4!6R{ozg!~4ʧͦ !6 ! **̈́**̈́\iͩ !w#H USE FACTOR !* "z{*"O=!9 Ÿ!6q!2qC J R q!z z=naO $q$,!S 1:  1"" ͦ 1 |R >O U!" 1 1!|_!^#fk $8AP`ix͓Q͌Q!.ͷ6y#G͙Qà!2ͷQ͓͌Q!>ͷq eg͙Q:zJEË*>E2C!" """ :ʼ:*1 |R|ͦ0FIL: RÃO$+q+p+qy͏ , $  ͌ 9!z6 # L!zw͌j# X:z 0 ͘* "I !" :1 R O*UR X* G:xl :  *̩ : l x͖ *#"EH DH 0;,!Ù!;qz8O! !;,z;qyO! ͣͣW_͕qyO! ͣ͒qyH ñññ81Ľ y0îH ñGîG  ñH ñ(Ľ yîH ñC–EQyQxQRQ** {zҷ*~#" <AOGƐ'@'OxƐ'@'ON#   R* } *" :¿::¿üX!C^#fk[@ :Œ:=ʌG!ʆF#H=N#Fy}80*z{¯#z+++ ¥ z#½# · 9!`͠ y9!rͷ:~ ! ^4! w͆ Æ *! 6z͖ {͖ 4>R>V>D >P >L >NO!b q!vz͒q.?*!9"8"͉Z*" +*'/7?v"*2:EI SPHLDI XCHGPCHLXTHLREîîĽ y0îîH ñG 1: :,; c*| } 8Oz8O!B N#N ¾SP.* |} !9":q!" 2  y=!z{w# % w!P͠ y͓}*w#"͌ @.@<!Eͷ~P =COPYRIGHT (C) 1978, DIGITAL RESEARCH DDT VERS 1.4$10 !~=W!xe ~#Xbxʇ {z~#o}o҃T HLT CMC STC CMA DAA RAR RAL RRC RLC NOP CPI ORI XRI ANI SBI IN SUI OUT ACI ADI CALLJMP LDA STA LHLDSHLDMOV ADD ADC SUB SBB ANĽ y0G G t :):,.>C :|: Jü;r :R: ʼʋ!ʼR!ʼʋ>S@* ͡. ;ͣW!E# ¡ # ¬# ·@ʴʥzʖ=ʐ=|zJz?4)z z:|: |Ë  |*" ͩ !6="1 :  1}1:n:>BʋSSͦSSx!ͷ’P͌Q!ͷªP}QxQ!ͷ͓G@Q! ͷ y͓Gþ!ͷ ͓Q!ͷ  A XRA ORA CMP INR DCR MVI LXI STAXINX DAD LDAXDCX RST PSW POP PUSHNZZ NCC POPEP M B C D E H L M A B D H SP PSW ??= Ö#r#!P4 !P6# ,¨ >2Pë g  g  g  ¥ Pʥ ! XN!~  !  ( Ϳ ~ Ϳ Ͱ ʵ .͍ =¥ ` |¥ }w#~ ÿ >2F͊ ! =¥ ` }ʥ +"G> Å >  !  # I$$DH@H"B$HDDH@$""A $@ D$BB H A$$BAB"DH I$I "D H@ @@" @D"II! DMʡڏ"=ʡͲ=ʡYPͲ1**!I~4#~#F#x~#s#r#w>͊ ¥ ` `  ( Ϳ ᯕo>g(;#ø##>%><7"T6*}^!T42 G Ͱ *hMͽG:ͮâê ð ' Ê `  "D*"!"!"2I!" "W""!1!++""G>28!"9:] !ç 1_^! ^#V~ x% >= 7 !~ ( !   #x ` F Ϳ F Ϳ ͍ Ҁ *" !6é  ¥   Ϳ Ͱ ͊ =¥ ` xS |¥ }ҥ gA>M Ag}M M c |¥ }!w s#r:[ʎ _!$I A"UUUI$$ D$$ 2|2\  !]w# ʥ .&  0 6 #& .K !e K w# ʥ : U 6 #K 6AW w#] !e~H#~E#~X*}+GGW +GU!ͩ>̀+! @!!BH @@ABH B! "BHI$$BI$BI $ HI D$͍ !" >- Ͱ Aڥ ҥ _!7^#V~  \p Z t ů2[\͍͢+"Y*~ #? ک Ϳ ʥ ^#V( é ~ CZMEIABDHSP!"G"+"!91*~!I~6 =G#^#V#~x ~ʠ ![4á \͢  2[y 7 >?  _͢!a"]> _͢a_!`~> 5*]~#"] 0 7 |{ "!{ ͊ !ʦ =¥ ` kʥ j \͢@ w# ͅ ú n ʥ : W _ O { `iHD$$ H B!$D$"$B$DA!ABI$H B$I $HI$H$! $I  ҥ ͊ =¥ ` " ͍ ҥ ͊ ʻ` " =ʻ` "=¥ ý> 2͊ ` "W=` =¥ *W}o"Y  *W""#"!N#FW" *D>7Å*G|H+"G H:FBÅ> Å >* *͍ \" ( *"W !)~##{nZ*  > >  ͢| } : >. *Y}o| , 0 å ^#V#!S ))))o J k s"@ w# ͅ ¥ n S n S GтWx ͢!i ~T #H  *( Ϳ *(  NEXT PC͊ =¥ ` $I$$A !A@$I$"!$H$I$I "! $A$  HHAA"I @$BH! $!D$H$ [( Ϳ ~ #? }"W*[Ϳ 0 *W}#|#*W? ͊ ¥ ` ` ` {zA|¥ W}d ͊ ` ` `F#h!Cs!^#V   ##::^#V#þ*^#V>%#x'8_#* @ COPYRIGHT (C) 1978, DIGITAL RESEARCH ERROR: $, LOAD ADDRESS $DISK READ$INVERTED LOAD ADDRESS$DISK WRITE$LOAD ADDRESS $ERROR{ozg^#V) _{ozgi`N#Fogo&og_{_z#W* +"8 .!2 ʞR̀* "4 4 = ͝* #" çR*6 DM+R*8 DM+R*: DM+R*< M!?  ~2 O>* M͊ ͊>! /~,H~:H~*H~.H~>H~<H~=H~* & 6Â! DM+;! p+q* i2 ! p+q* i2 ! p+q* i2 i2 !" p+q*! f!$ p+q*# i!& p+q*% i!AME.TYP$R/O INVALID DISK ASSIGNMENT$!9" ! !E <" !E >" ! 6:\:] Hr:\ʽ ADDRESS $BYTES READ:$INVALID HEX DIGIT$CHECK SUM ERROR $FIRST ADDRESS $LAST ADDRESS $BYTES READ $RECORDS WRITTEN $HEXCANNOq=  ͝Kd*= ! ͸p!@ 6>!@ X*= }O!< *@ & w*= #"= !@ 4)!< 4\mad* }O!< :? w 4! 4! q* & : w! 4! 6*E2 : ! 4: 1:2 ! 6+6>! .: O!* DMͳ: ( p+q*' i2 !* p+q*) f!/ s+p+q+p+q:/ =2/ X*+ *- w*+ #"+ *- #"- 1* #" ͖r*   ~!" ! ͸: =§͝ҞLmä ú:\ʷ:\=O]͠]* ! q* &(    ! p+q*  ( T OPEN SOURCE$COMNO MORE DIRECTORY SPACE$CANNOT CLOSE FILE$*!9"!e !" !" \!""͊: ƒlR*4 DM+{R* DM+R 4 ͝*4 }¿= 4 ͝< N*4 #"4  å;*4 DM+: Y2! O!B DMͳ: 2 : 2 ! 4": ©! 6>! ڦ: O!* DMͳ! 6> ! ڟÀ: 2 fß×* " x20 º*   DM":0 Ad*   6!" Ç!" : !"6 "8 ": }2< !"4 "= ! ! p+q*  ( ! q* &( ! p+q* + 2 ! p+q* + 2 + 2 + . + ( + !de"\\\͊: ²d\͝: )d;! q* &f  ! q> ! : A O$ COPYRIGHT (C) 1978, DIGITAL RESEARCHCON:RDR:PUN:LST:DEV:VAL:TTY:CRT:BAT:UC1:TTY:PTR:UR1:UR2:TTY:PTP:UP1:UP2:TTY:CRT:LPT:ULA 0O> :A 0:A AO>&R̀:A A H.2B !2 w:B !D s+q*C &͍:D _og_ : ! O!B DMͳr! 4>": =2 2 : =>* &B DME=2 >! 6: =2 6Y: !2 6=21 á:1 : r+s#r==_HL"4 " >6 ͪS* "6 =23 :1 =21 v=O* #" Y8  ͝ q: O* : ! * &* * & >! 4¨>* & ~ ! 4! 6: ҅* &: 0O! q: O: O! p+q* |O* }O! p+q*  f! p+q* DMB! p+q)R* DMB1B*1: IS $ =$BAD DELIMITER$INVALID ASSIGNMENT$BAD DELIMITER$: $BYTES REMAINING ON $R/$, SPACE: $FILE NOT FOUND$RECS BYTS EX D:FILEN : 2 : 2 : !! 2: 0>: ,A>å! s+p+q! 6! 66: ! ڰ! 6! 6>! ڞ* &* ~ ‚ ^#V) Œ _{ozgi`N#Fogo&og& *-!& w*-!& :+!w!,!4+6 ó :/!!.!ҳ !+!6 !+!4C !-!4 !,!6!* :,!҆ *,!&+ ~2*!͢ **!&() N#Fͳ !9"1W͜Q>2!͢QG}DrYQ|͏}͏#> ex͏#r* _> e> e: : ƀo&"&!!0!6!*!6:0!/!* :*!H ͢ !+!6> !+!*+!&*&!*+!&*(! !+!6 :+! 20!!+!4!͚u b͊2!>͚!͕u bA6mA2Aͦ!͕u b͊!6!>͚>ͦ͊!P͕SYSGEN VER 1* & ʕ! 6! 4+4m: ҩ: ! 4Y>! p+q* ~:* N* #" ù:!" " * N!͌ m " ! 6* ~! xCOPYRIGHT (C) 1978, DIGITAL RESEARCH  o&)))))))a{**!&) Ndͳ K**!&* N ͳ RAO:!+!6> !+! *+!&*(!~ x :+! j .*+!&*(!N!+!4D ! ҉0Ë7e}} :³ʳ7_<2!~ɯ2|\\FILE DUMP VERSION 1.4$ NO INPUT FI*!4å:0! !*!5Á :* 2*!!* 4͢ **!&+ :*!w!+!6> !+![ *+!&*&!*+!&*(! w!+!43 **!&* 6**!&) 6**!&() >w#6.4SOURCE DRIVE NAME (OR RETURN TO SKIP)SOURCE ON , THEN TYPE RETURNDESTINATION DRIVE NAME (OR RETURN TO REBOOT)DESTINATION  A* M:* * " !͕ : ͡ +s#r* #" ! 4* !" p+q!'"% !$ 6>% ͩ ʲ*! *% N {2# *! P "! PY! __> ̓> ̓͊~̓#ÚO****!*$*'! ">2!4:(wNͯ>2,!4 :]?:e?Hҡ **!&))))+ "(!!4!r+s+p+q!5!6>3!ͩ $ *1!*3!N !6!s*1!P "1!PY! N "3!>͒ !5!#LE PRESENT ON DISK$!Y , <    *$A!6 # T!w $r# *`: 0 **!&* 4**!&() *&! ~4 +s#r!+!6>!+! *+!&*&!~ **!&) 4!+!4¬ FÁ:* á >!* !,!6>!,!ON , THEN TYPE RETURNPERMANENT ERROR, TYPE RETURN TO IGNOREFUNCTION COMPLETEINVALID DRIVE NAME (USE A, B, C, OR D)NO SOURCEN "% >͒ !$ +~Hү!$ 6:# 0OVK[" RAODMEͻd2' v2( !) 6:' K:)!4f!^!*FNͷyj*DMͿ2: K!͚u b͊<2:\_/:)j*"1!t͚~H ! !5!6:6!0O _og_ogDM!>))덑o|gg =U DM!>))| =t *A*! ~ ʰxkb))))_y‘BK{ͅ*!66!"80*{#z+++ # !,!6#6:* ==!-! *-!&, ~2*!͢ *(!"&!*-!&+ ~2*!͢ !+!6> !+!ں *+!&*&!~2.!*+!&*(!~2/!OҤ *-!&+ ~2+!*-! FILE ON DISKSOURCE FILE INCOMPLETE:' 4*) Mͻ:( &O+W:' 2' :( 2( !) 4:\\:\=OL:] l!* 6!\6!h6?\3:] \<œ!w͕b2|\ ¢! DMͿ\ô!͕b!͕u AmA2Aͦ͊! LE NOT PRESENT JNZ OPENOK ;SKIP IF OPEN IS OK ; ; FILE NOT THERE, GIVE ERROR MESSAGE AND RETURN LXI D,OPNMSG CALL ERR ME FCBFN EQU FCB+1 ;FILE NAME FCBFT EQU FCB+9 ;DISK FILE TYPE (3 CHARACTERS) FCBRL EQU FCB+12 ;FILE'S CURRENT REEL NUMBER FCRKF CALL BDOS POP B! POP D! POP H; ENVIRONMENT RESTORED RET ; PCHAR: ;PRINT A CHARACTER PUSH H! PUSH D! PUSH B; SAVED  579, PACIFIC GROVE ; CALIFORNIA, 93950 ; ORG 100H BDOS EQU 0005H ;DOS ENTRY POINT CONS EQU 1 ;READ CONSOLE TYPEF EQU 2 ;CTER READY RRC ;INTO CARRY JC FINIS ;DON'T PRINT ANY MORE ; MOV A,H CALL PHEX MOV A,L CALL PHEX NONUM: INX H ;TJMP FINIS ;TO RETURN ; OPENOK: ;OPEN OPERATION OK, SET BUFFER INDEX TO END MVI A,80H STA IBP ;SET BUFFER POINTER TO 80H ;BRC EQU FCB+15 ;FILE'S RECORD COUNT (0 TO 128) FCBCR EQU FCB+32 ;CURRENT (NEXT) RECORD NUMBER (0 TO 127) FCBLN EQU FCB+33 ;FCB MVI C,TYPEF MOV E,A CALL BDOS POP B! POP D! POP H; RESTORED RET ; CRLF: MVI A,CR CALL PCHAR MVI A,LF CALL PCTYPE FUNCTION PRINTF EQU 9 ;BUFFER PRINT ENTRY BRKF EQU 11 ;BREAK KEY FUNCTION (TRUE IF CHAR READY) OPENF EQU 15 ;FILE OPEN O NEXT LINE NUMBER MVI A,' ' CALL PCHAR MOV A,B CALL PHEX JMP GLOOP ; FINIS: ; END OF DUMP, RETURN TO CCP ; (NOTE  HL CONTAINS NEXT ADDRESS TO PRINT LXI H,0 ;START WITH 0000 ; GLOOP: PUSH H ;SAVE LINE POSITION CALL GNB POP H ;RECALL LENGTH ; ; SET UP STACK LXI H,0 DAD SP ; ENTRY STACK POINTER IN HL FROM THE CCP SHLD OLDSP ; SET SP TO LOCAL STACK ARHAR RET ; ; PNIB: ;PRINT NIBBLE IN REG A ANI 0FH ;LOW 4 BITS CPI 10 JNC P10 ; LESS THAN OR EQUAL TO 9 ADI '0' JMREADF EQU 20 ;READ FUNCTION ; FCB EQU 5CH ;FILE CONTROL BLOCK ADDRESS BUFF EQU 80H ;INPUT DISK BUFFER ADDRESS ; ; NON GRAPHTHAT A JMP TO 0000H REBOOTS) CALL CRLF LHLD OLDSP SPHL ; STACK POINTER CONTAINS CCP'S STACK LOCATION RET ;TO THE CCP  LINE POSITION JC FINIS ;CARRY SET BY GNB IF END FILE MOV B,A ; PRINT HEX VALUES ; CHECK FOR LINE FOLD MOV A,L ANI 0FHEA (RESTORED AT FINIS) LXI SP,STKTOP ; READ AND PRINT SUCCESSIVE BUFFERS CALL SETUP ;SET UP INPUT FILE CPI 255 ;255 IF FIP PRN ; ; GREATER OR EQUAL TO 10 P10: ADI 'A' - 10 PRN: CALL PCHAR RET ; PHEX: ;PRINT HEX CHAR IN REG A PUSH PSW RRCIC CHARACTERS CR EQU 0DH ;CARRIAGE RETURN LF EQU 0AH ;LINE FEED ; ; FILE CONTROL BLOCK DEFINITIONS FCBDN EQU FCB+0 ;DISK NA; ; ; SUBROUTINES ; BREAK: ;CHECK BREAK KEY (ACTUALLY ANY KEY WILL DO) PUSH H! PUSH D! PUSH B; ENVIRONMENT SAVED MVI C,B; FILE DUMP PROGRAM, READS AN INPUT FILE AND PRINTS IN HEX ; ; COPYRIGHT (C) 1975, 1976, 1977, 1978 ; DIGITAL RESEARCH ; BOX ;CHECK LOW 4 BITS JNZ NONUM ; PRINT LINE NUMBER CALL CRLF ; ; CHECK FOR BREAK KEY CALL BREAK ; ACCUM LSB = 1 IF CHARA  RRC RRC RRC CALL PNIB ;PRINT NIBBLE POP PSW CALL PNIB RET ; ERR: ;PRINT ERROR MESSAGE ; D,E ADDRESSES MESSAGE LF,'NO INPUT FILE PRESENT ON DISK$' ; VARIABLE AREA IBP: DS 2 ;INPUT BUFFER POINTER OLDSP: DS 2 ;ENTRY SP VALUE FROM CCP ;û Q"ͺ ͩ8Q"ú a~Q"~Q"#~Q"͟Q"Ͷz%"~Q"͟0WxQ"z~Q"#0WxQxxaW8,BUFF DAD D ; ABSOLUTE CHARACTER ADDRESS IS IN HL MOV A,M ; BYTE IS IN THE ACCUMULATOR ORA A ;RESET CARRY BIT RET ; û Q"ͺ ͩ8Q"ú a~Q"~Q"#~Q"͟Q"Ͷz%"~Q"͟0WxQ"z~Q"#0WxQ"zQ"~Q"#aW8ENDING WITH "$" MVI C,PRINTF ;PRINT BUFFER FUNCTION CALL BDOS RET ; ; GNB: ;GET NEXT BYTE LDA IBP CPI 80H JNZ G0  ; STACK AREA DS 64 ;RESERVE 32 LEVEL STACK STKTOP: ; END  ~Q"#zQ"xQ"~Q"yQ"aW8 ~Q"#Q"xQ"~Q"yQ"~Q"͟z%:*!*6*##{oz(< 0=(!.}Q"}Q"~Q"#SETUP: ;SET UP FILE ; OPEN THE FILE FOR INPUT XRA A ;ZERO TO ACCUM STA FCBCR ;CLEAR CURRENT RECORD ; LXI D,FCB MVI C, ~Q"#zQ"xQ"~Q"yQ"aW8 ~Q"#Q"xQ"~Q"yQ"~Q"͟z%:*!*6*##{oz(< 0=(!.}Q"}Q"~Q"# ; READ ANOTHER BUFFER ; ; CALL DISKR ORA A ;ZERO VALUE IF READ OK JZ G0 ;FOR ANOTHER BYTE ; END OF DATA, RETURN WITH Cû Q"ͺ ͩ8Q"ú a~Q"~Q"#~Q"͟Q"Ͷz%"~Q"͟0WxQ"z~Q"#0WxQxxaW8OPENF CALL BDOS ; 255 IN ACCUM IF OPEN ERROR RET ; DISKR: ;READ DISK FILE RECORD PUSH H! PUSH D! PUSH B LXI D,FCB Mû Q"ͺ ͩ8Q"ú a~Q"~Q"#~Q"͟Q"Ͷz%"~Q"͟0WxQ"z~Q"#0WxQ"zQ"~Q"#aW8ARRY SET FOR EOF STC RET ; G0: ;READ THE BYTE AT BUFF+REG A MOV E,A ;LS BYTE OF BUFFER INDEX MVI D,0 ;DOUBLE PRECISION ~Q"#zQ"xQ"~Q"yQ"aW8 ~Q"#Q"xQ"~Q"yQ"~Q"͟z%:*!*6*##{oz(< 0=(!.}Q"}Q"~Q"#VI C,READF CALL BDOS POP B! POP D! POP H RET ; ; FIXED MESSAGE AREA SIGNON: DB 'FILE DUMP VERSION 1.4$' OPNMSG: DB CR, ~Q"#zQ"xQ"~Q"yQ"aW8 ~Q"#Q"xQ"~Q"yQ"~Q"͟z%:*!*6*##{oz(< 0=(!.}Q"}Q"~Q"# INDEX TO DE INR A ;INDEX=INDEX+1 STA IBP ;BACK TO MEMORY ; POINTER IS INCREMENTED ; SAVE THE CURRENT FILE ADDRESS LXI H û Q"ͺ ͩ8Q"ú a~Q"~Q"#~Q"͟Q"Ͷz%"~Q"͟0WxQ"z~Q"#0x* TDL Z80 CP/ͽ!!x= ~ Q{\u ={N%#q#s#r0#*R0 "*&#"&!h~ -#\(={\ ) :d=(:^ 6! [! (vA D >2kS ˎ˞X ˆY ˖O >2dL >2dB >2kH 2oP >2pK (NL!~w: 0 6͍>͍M::(g<+L!K͍}:!KĪ!ïgzV#^#(6(6(6( å>å*}D1d!rͪ!!\!:: !ʬ : !:0Wx%"z~%"#͞0Wx%"z%"~%"#5W8 ~%"#z%"x%"~%"y%"͗ʹ5W8 ~%"#%"x%"~%"y%"~%"sN%:*M DISK ASSEMBLER VERSION 2.21DIRECTORY FULLFILE EXTENSION ERROR DISK FULLCOMMAND SYNTAX ERRORSOURCE FILE NOT FOUND CLOSE ERR#N#^#V~G͙ Ù= 'N%#y #{ #z(^ :d=½!!)"*&#"&ͽx:• *# w# w# wc ͭ!8 G2nI C:n(!#"6! dͭ!:d(-:l :qO! "!ͅ 2l:ng$:d(Q:m K:kW:!xą 2m8H͐͐W 8 O5'% 5. X`E@I UMs%"͒sN%"͒͂"sN%!()!#!="!@C:l(22: [!mL!~ :(=* *!"+7s[ ͙%"~]!ͧ8G͙(%"!O~y%"(%"%"%"~ !e!~8#O͙ 8( w#xP #!*+~("####o&) ~#~r+s! cz*!9n:d0'!)Bͫ(>P2 2e2!X3"o!d~6ʷ =(d:k(k (:d0W*&"}ï:1}!2N !L"6!:3:n !X3!~(b8 #~+87>(0) 8"(ҳ?`aײ`dbE">YO:8 3!l5 "6xSm= >7 *m~#"m!u5 #6Sv͸ͭ!! # y(:( 8  8 * | *"|("("~#^#!R)^#Vg:4!%">O!}ʹ858W W g w( ~6ͽwg[ W ex: 3v n R*# # # (^ :d= -! !0 "*&#"&7͂" !p͙͵#5*+"0:*2/*-"2N%2*"+ʂ"!:3O#"-Â"#5*0"+:/2**2"-Â"s> L(|!}( ( (!2 #:2f:=2g:l2h*m"iC=(:o(G(͠ :d:kW:r(GL:͠ 6:f2:g2:h2l*i"mx#= { z(##~= ~# ^#V+ <(l:d L##~(!}6#-#͓ L`!(NL!\= 28*v~#"v(>å*pq#"p!o5 6Sp̓!kF>ĥN#V(!*sq#"s!r5 6xSs:̓8Wv!z%"W!Wv!x%"z%"y%"}8 %"͊%"͖ }8%"Ö 5~%"~%"#~%"s%"͊N%"~%"s ͵~2<͵> L~ڭ!G͙(O#ͭ!Ùsͻ!&x%"y%"|%"}%"͒sͻ!~&0"!*"|(f *$| * |N#F+ ͦͣ 2 ͣ ̸! !~ ~6wͪ!͙ [ ͙:diO!:ˆy!&ͳ͒sDMͻ!!ܽf!^!v n(!! v [So( n [Sw͒sͻ!&! p#q#r#s~24~8!v n(!{*#">>!O!q##0)#8Gy(!T])))))X (y x(͙˯x *[A6:0//.&$!8:d= ^!7#"'*~D[D{<]Aͻ0!%&8r+s+p+q+% xR>R~8E,(](B(+~("ͱ8,(($( (!w~"L:RL! Ͱ!͸G!~( 4_!epx ( ~!͙!ʹ8Uͻ8P&8:d=( ^ !w#++F+N###*  w" !~G͙ Ù^!^#V~i:ˆ:i8uN!e T]:G:  (w# (y22:y:( *!g6 #! F6!|~pɷi:i+6 62:~2;~29:8¹!!\w#!] 6 #:wsG{8: x@8u0qw{8k#p~8Q.(#w͙~8>. G!e{8 w&xy͘!ͪ͘,( !{, {!7~8.$%A[?a{_!(4͐!(:)80}:( 9͙) ͙xR(  )  ͙8* +R͙!{= >R{[ 00 *'^#V+"b͙] 0R[  [!F#N#(x8͙ ;͙~] :!45(15{0#{8[(:*2 **+" *{! [bɯ>>!""" ,N%!R ',18(Z(<Q<Lx x(B(<ʹ[( b~0{8[(" ͙[ ] Úʹ[ y<2X~(6}!FwO>22͍2<2|xwO: !(: : :i: (!}: ~ :m+~6 (6#͙Sv\<(>2u28 e!>F!ASM>*!:!*#~ *++"Ùw#V#^:[!(ͣ26͐͐!r͓: (8͍!͓!d4~g͐:n(!L"6! d!c͓!e͍!͍͐͐ - d͠ ͠͠!(; '͙; ͙ (]  0Ì[ >;RR(ͻ8* >2[&!6S%C### , x++~'(#w#"$9+O!*8d8`*~ʫ8/#~+8( #d(qX~# ^#V+v n G~_! s#rG_ !4͙ :dx~~8&>*"|(f * |*$ <(<~~,((][(G͙( ( (͙ ͙<x͙x+:8( !|~ 6@eM:} (-! F!O  ~O8 >w͍yq } 8L4~0!5 :2 >22!e6 #= R S ͵[!R S2> %":*K+*-^#VBp+qO~7#~###80##~= v n(#yȾ+~#y :)=0͓!~#NL=08 y0 z(Lɯ>>O[* {_z8J {8Cr#s#r#s#z{80_!+* +~" 6'mj(x G+* +" ~6mR['* 0"Rs#r#p!6Ù0շ[ *R8 #" 6W!zsͻ!+ ###d(++X^#V| 7~͂!ܽV!v!n !f(!#[sS*&#"&{:(<~~,(f* ][(O͙(#w!~ ( +{,(][(O͙(#(#(͙ ͙<x ( ( ͙x<~!2222 L=:(o*#~* 7# u>]L#~2##V#^S#V#^""|* O2>LE+~ @w#V#^"G6#r#s w#w#* r+sq#w#w#w#w" !~#N#^#VyO( <:4!{8)X(Y( H y {8 ) ͙>7!y581 0M*"|(#f(:^!({&: (!y2 {&* |( ##^#VGO{&:d=Ľ!!\%!"08 :0~L({&"(' !G!͙"A:*2C:q(4!D"=6>2?N4!D w:q y#**=~w!?8 y85#5#6#6"=!@4:@:dU$:q :-DKQ@W]p)PԀL>[LÙշ[)* R0 S)W!zͰ!!~#N#=>P3>B/>A+>M$>E#>R>T>Q>U>X>Z >D>I2O!^!e'''''&'''F##7* }!*!>=))0 >=)jB0 O* 0 ͙#w.(08:8A8 [0͙6+y~Gx!͊~8X(Y ͙:4!> 7!G!!N%!|(\L> L>\LxL A8G8 !((8N!A8G008"0Gy)(T]))( (T]X(!((8~(!BD OQH. ,; (]^@>###F#&~ڿ [ $͙]ʿ ( .͙) -(~͌!( ,\ G͙N%!: OG=3>6(S3= } ( <( =͹"͌!;>0̌! ~!((0ͻ8&8N}0** ͙\%"yH!' ^#V K *!'*x!y=!: O:=!<$*@bͮ$*\ ͮ$#`ͮ$*R#@!:3|{ 8}_W{RU$(_<$%(H ~<$#F#~<$x<$# ௒<$## KW ["W {&W "-W CW SW sW *W *ZW "[W "bcԀc"!h~ [+:*O-#ͨ"p#q#͹"G͹"OƐ'@'͂"!NG( 0#: 4N!p y: (zS_-#Q"0-+/*!&<) HBB3L^ n ",Jp'~l,(%;(! ($%(] -([ ,͌!͙{ ͌!, ͙ ]̙ y0[~(͌!( 8#~(##~( ͌!~(#>.͌!͌![{! ( (w!͙{&y/Ox/G{/oz/g#<2"!(zC')<(zg{o(zg{o** x|( !(DM&(DMD~#~###80$##~= ~@(W P ` d###~# ^#V+!: 2"2 ~s&ͻ8w&~# ͙ͳ: up  ֚j@cdc2BCԀCïy(:*( :n y=(7yb#7}S#|S#z͞"{͞"y6 (=6'( =6*(y6:#Þ"#6 #6 b#*+#"+:d0!@~ '*+Deh W ,Myx ++X(!((8~(!BD OQH. ,; (]^@>'_z'WS!{! !0Ì!~(#~0 (͙[)RDM*S[s+r+[s+r++:w++""!5!~6 >M&((BK6(*  DM** yOxG*{ozg(}/o|/g#7'(zg{o(BK6(x!z/g{/o"*" à&&1'4'J'T'^''' S[S[SVSVFF$,HTG=i@--a,c.z.X/*/CH0&z0з14lý0 hTKT\TUTFIQ@/u+Z)!~͗!0Wx͗!z~͗!#0Wx͗!z/2!#8ͧW8 ~͗!#z×!x͗!~͗!y͗! /ͧW8 ~͗!#×!x͗!~͗!y͗!    m8xQ@0(x Ԁ餛Z)!~͗!0Wx͗!z~͗!#0Wx͗!z×!~͗!#8ͧW8 ~͗!#z×!x͗!~͗!y͗! /ͧW8 ~͗!#×!x͗!~͗!y͗!F+3HUczYYC'T/iDT2:{p3^{f46{f5671_1o1; C&{fS-XMXOa0l +XI!º"~͗!$:$C!*n)##{oz(< TR@@d`@@@ @`@Ap`U @S U$ V U  SH Ui U_ UP T U U( v~͗!$:$C!*n)##{oz(< 0=(C!.}×!} ×!~͗!#~2e[#!|8 $!b͟"y2=Deh";`#J:^8":i(!!?7tvZx`zYFzZVz[^YF YFQ@ J\Q@ BYFԀ YFk"c"k"/#]$j@$l$ȉ$ȋ$Ȗ$ %%Y`D`PD>>TDL Z-tel (CP/M) version 1.06>YO!55 "6;S6\= >7 *)vvMvEz)!~͗!0Wx͗!z~͗!#0Wx͗!z/2!#8ͧW8 ~͗!#z×!x͗!~͗!y͗! /ͧW8 ~͗!#×!x͗!~͗!y͗! z Y }m}ίmԯ (&Ș?&K'ȗ'y(Z(g):*н+@0+`Y;Y #C6~#"6>>:(;2: !*9q#"9!85 6S9;:ȯ2;:2-> J>J*}D$$$BAKPRVDIRECTORY FULLFILE EXTENSION ERRORDISK FULLFILE NOT FOUNDCLOSE ERRO6- : />f J* >^ J/ >V J>N J] V 2 V 8OO! ͈ !˾4 ] d F(ˆkˆ #B( +~ (#BK    ÿ2>2- #> [:A(!z<(?>w#> (%w#:>$[*0>'[D:r N(<2[*"<["`iR"|*~ := 2!0S!>w>2 > :S !>5! y R~(A^ H!>4x N HHy  O:b(G 2>Ny  :>G x2> xy $ :wy] O y +4 8!8] [*R8 7 *~S#w!!$O ~+( هO!z ~#foN!$ !u R[NEW FILE]FILE NAME ERRORREMEMBER: YOU HAVE ANOTHER >>>>>O<7} !0# 7V 8,*+V 0[Ͳ *+"͠ . .Z JH y ͞ J"2 Wy #~(z(Y !}͠O(ˏ2z(ÿ^#V##H!N -! 0ERROR # 0:?k _A[?a{?_!:O{ʰ2:<=:2< j:S<Ҵ2S*["b|=2:(͐ 8*2*p:>¼*R¼+|(:W ":S(!>4~!\=82> ͊ ͊!nŽÊDx( ~[7> [> [!˖ˆ:>2 > P( ( ~w#~w#~wutwfn~V^Ffn~ͫͫO yàR8 R<!0}> +"6# 6 #6#ͫ8XGʹ8: x@8Iͫ8C++ ʹ82.( ()ʹ8.+ ~(" ~  Jy(= ~ x( "2z "2z,+ : !@ !F !E !A[? :>-7:!"2!!V 8T])8)88)80_8  '  d  =2Sà; ]:Sʸ:<(= =2àr <"`Rʼ"!>w < :SҴ<2S"!S5> !!:O(!(~ 0 -LTH(!V(˖;2 (Z [ x< +:t(w~ ʗ :>(~ S::\W~ (& (" 0àͫODMxà!>= ))0 ͫOBK5>= )jB0 >'[:(7͐ 0[[! 0:=(>,[͙ 0( (ͫ8@8!-D7ʹ!8~] *R#:(2H( :A > 2> G:wx( }({ >2r :G(~x2 V ͫ  v   n f( ] 2s^(o:g *["   (*} 0wɯ6( >6) ): ~ +~!$O  J+ >n J :oN#~#fo[":r p34 5684 ABCDGIJ!KELeMuN_OPRSTW)X9YC=n\(<<# x(x<( _({կ:W>G>[ÿ( ( >0[~[!ˆÿ;  x< +~ (#DP ! [[ 0> [:w(>:[:g(>@[:G(>F[:O(>E[~[r f(:[8^(4K!B0*0:G(K!B0(,H( ^D ^D:22 0 ( !:"+[!"+O:_ c:;y   ["W8j *+R":G( *["+V8C *+R"*":2. *!&""#$%&'( )* %?#!:':"-ABC!DJETFZIfKLN=OQRS TV-WQXY-*|( ͐ 8 ~#fo* K *K 4 2&o"!v  0 ( ([ > [2)!ͺˮ\͵< 4 !\!\2!;"6>252Ggo"n*BJs#r#q#p͞ :G:5 4 2.*J">2!\*[R(=V8?(((3ʹ *n#"nx *T])JR!"*PYS:2ð4 ,:Î̈́.T]*R"*R"8͐C:2!"͐:2CÎ! :S8> ;."e[R0R<2"͎*".R"q*|*:"#8X2+|(:(*"͎4 *:E |YN |PL |(H͐ BG |(:͐ 4G| /xD }V #A }d k V }k  W }d r 2( '" BR0Q!kxC[*> z R"2DM.DMx C*[*+> z ##B">2KS"Có͐ 8 *| }[4 S~- # >2>2Ͳ S4 \2ͺ8*!-!]~ ([#>.[8 ( x "!>2G:8 4 Qyz0,͐x~ *}#"}N͒:( BDMd:* "* ":=4 *#07***SSr4b"2"Sp5"S"">M274 ̈́Sr~ \x(Ͳ8<͐*Jx B8"J[2:G\=[KB8!S>2*"*"Ò74 :S(2[+| ! -*K0>'[R(! k:;4 Q*kx*[R(1*w[*R(+#"SBB Q*k*"*DM:?!͈ !͈  7e4 *[ R*[R* [R.*J|.DM* [x(" S!!e0D!\!"9>28!"}:8 :5 *}|* J}(D-)!͞ J"2>2EÏD2Gog""}"n2ͫ JR*K\ͺ0! -D \͵>2!\ !;!6# :5( :(:\2;<S͇:wE:w(!k*stu4 !B ,ͫ >2*JRE!"3͐ 8?*04:G 2J"-! 0!0CAN'T FIND 'FOUND ONLY OF 'x[[ R B"*J "J"!-D-RIPPLE DOESN'T BUBBLEw*R"Sx\=B8 *S:wr~ QSͲ:wʅÉ~ʹ8 S2# [͇BDMͲS+"J.DM=x( *+[* "*  " *J "J*[R 7w#"^#V#S3![ :͙ 8"*| (0>!2>2!'"2:5 <2G͏:G(J| ٯ25: ͒:8: :8G͒;Ϳ28:(!!\} !7!\7!4;ғ!=-* [2R(go"):wͫ 4 \S0:814 *| }0 \ʹ>2!͏*"J">2!D4 34 D8͐0̈́[* * R0 * R8 DM:V 0d 8S <R J*s#r [S!R ̷*^#V#N#F:V 04 0O! "<:0O! *:vus4 \=| KG*Kx~ʹ8:S Z! ~# L![R(<[R[R"SͲ\G> 2z{4 ++##͐ 8!"0* [R 7DM!"0̈́*[ R(DM#*/ `iK x B0: D!!;:!4 !\:;w:!;**!"2(- !(r *B * # x 9 O! F A!;0!OO GH4 [s#r:#w*K0QfLL>2ͺ2:([úͺͫ [͐ [0:y>d2x2z:yO:xWax2yy¨:zʷy0_ >2zú5:xO ay2x:x‹:y0_ -\222/!"["R*JR"J[!~O#( ~!0# x y(wD\͐ ܴ~ʹ8:w> ʹ> ʹ4 !!ˮ͈*:͠"2):_X!*D!˞ˮ>*[̈́!~0: 0>+ _ 5###~5!9"v1!]> I 6?#B>?2hHkHs'Z!z"\ͺ88\͵͏\Ϳ2G25͞ J"2>2!>02*~(O#͛:5ď!*|( !u>02*òINIT.T w#22S!! Qw ~* <#~V 8,:g )2~`Ͳ*[K͇!"4 !0>!!"CG !0*A*! ~ ʰxkb))))_y‘BK{ͅ*!66!"80*{#z+++ #EL8 !f  !*JB*f "C "*JB8"J!˦D!"b"p ( ((2 *R! *v$ 2  ; E55Q| >^^ #T|.7?yOxGxwGyO-e2"(<Ͳ[*JB8!6/!1/>H2\>2b!!!+-%OC !)!"K C CCP* " 8ü å >YO::(;<('!:5 &6S;\= =2:>7 *;~#";!>:($*q#"!5 6>\O: ?y '~=8~/ G ͂4 4 8 ~44͂y~˿w ~# :/2 ~=8  *R"T"V{N!"go"L2B2""ss*Dɯ2!c"!ɯ2~Gl !8O"({:G~ C08:8;:4#(% R8 -r+s=>ʼ ~)(>,ͬ>)ͬ>ͬ=0O~G8C##F#fh *Zxx8~##N#F=8 (6 #= G(!(R#BK*V ͜!9R-ʈ :C !8 ó*@"H  {*|(+!"͏K*D*:G *H|"D*H}<( "J*D"Lͷ!8EQ*L|(j*J"H͐>"w͐20Dw>,^S=ͧ"> > >><(==(2:2h2|S;\< >2:72I2~w4 ~04͗$4N#F#x(3 N#F#| }8͚,u t !1 +Q>~#~ #`8_ I0x~`8_6:  ## :( :(I 2T(G~((# ~#(!!x2ͯ%~G(>ͬ+K x] ,ͮCͮC͈ (>ͬ 3 (0-X F#~#+≮ x2"H*H"y2*H"|<( "J*D"L{2('8'ͷ4!:6(~#( *H|<Ē,ͷ2!!"H:(%*$[7"͚,u  w~A[?͈ ͐* :_F+!+Q+#~0?:!Rbk))0_("͙ ͉ *R*R]^S=<#<>2ɯ2:!~((h~(hq^=<$t*~+*12y  ր!:4(~#(= ~ (˿x #>)2B̈́X   ͏h*H>ͬ*!QY~> ͈ *͐*3 (((' ( (Ox0 q#ۯw!<*}ʄ{x=(JC+~w (D: >?̓ :u >?̓ u  #~+ͻ"!  !Ró 0~ h~,̈ (>ͬ+͐*( ͈ -\ h͈  ͐4/4,(X ͈ ѷ(7  ͈ <=( !45 #Gҫ #~( ( ( (C0*R| } CR(!KR w"Rt##s#r#( RҨ"Nwsw ͏[H3 j*HR#FC`i+X ~#+≮ "H! :yHG~ȸ#"(֊ (;2!3'333R&}yx,y^'| )|)1PF' h)-( Kj% yn Y&cc jj^)"&"#-i *D3͚ "D~:(9#~##, ^#VSH:( ><̓ ͚,>>̓ 0ͻ8͈  sրڈF8I4O>^̓ @à [!x2 (< /'((  [!H (~#w  ( ( 8Ox>0 yw# Tw > 4> ;: ͮ,*Z~4u '*Z~(>0 4w w ͉ ~406~(>,̓ '0/7>w# s#!Zbk~##### s#r( (>ͬ *PDM~#+##~#foR`i~#fo??*P2w#w#"R*P+"D*"<W(W.>ͬ:"D **Z##^#V!R0*NR0*RR0 >gͮg*͈ >(ͬ.>,ͬ##^#V*N##cA&&%%$ ] h&&&*>Zdq$V$Y$B) $ !C"K !9~#~#foz(R# ͜ N#F#~ #~:ȷ : ( ( (0?<=ɯ2s"D: ! 9*RÉ( CF`i*P+"X+͈ 4͚  )ͬ+>8~/0 w̓ > ̓ ~<=w~̓ > w4:*͚,u  , 7 N#F#N#F#N#F~) *F>(ͬ*>.͐~)( >,ͬ>,͈ͬ >)ͬ>͉ (>͉ͬ A͏[H3 '2}(y# x#(@######| }(,*V w"V`i"T+6| } s#r#2_!"Z*W͖ )ͬ"F"͟ z¼ ͉ {́'_##~#foFr~ͯ+p8 ͞OâG͞*Z=+68}.(y:(uW8: z@8f0bw8\.(.ʴ+(4" I&B,8 %W֯00>(ͬ>)ͬ}*Fͣ*."Z:̽*O͈ y)8&0("2(Ҽ >(ͬ~*ZKJ*:--!N#F#~#fox`iO*ZgPYN*<| } G "<*+++F+N++| }"͈ Sz>2t>ͬ2 ~">2 >;ͬ̀ (4.!ê͉ >,ͬ #ʬ8/2 ͉ X~#+≮ "H:<(= .0 7p+q+p+q+p+q!~(w8[Zg!8*g~"w##q#p*T>[V| }($~# ~#^#V# : '%(d I'&q#p#O͏##">q#:y 0q#p#͗+= BK8͜"V+6(X#r.(:(H#w8+ . :8.(,:((#w 0G!#6 &BAS7  (ʹ~ .I(O &>,ͬ*Zͱm N#fi͈ 8(>(ͬ.>)ͬ [:_!2͈ >(ͬI>)ͬ2H!w*DW2~́(X##^#V>*:sO>~8x-##F#fh DM=K~Cʼ )(>,ͬ>)ͬ&*X2C>,ͬ.~,( :C T :(͈ WG"(:,+!Sê͈ ͯ+*͉ (,²͉ :C !8 h #~#*H#| >ͬG>)2B3ͮ,G~##-N#F=-!8w##s#r+"P#~ (( "̈ #y8>*"Z>2| } W*>^) ++s#r#8#GO~#^#V#R0͗+=DM ) ) *F[V!9:( GW[N*<2R AP!s|*:>,ͬ=I \27II%ʹ~ I2O 7II>,ͬIH<#͑ *ͥ y! OxOx!:z_dxRy!+2GN#F#N#FK=+U{zد< #(?Û*<=0O~G8C>(ͬ[Z>,ͬ[Z~, C(~, K>)ͬJJxҵD0O##~#foH y88>,ͬ͏>)2B.:*Z~= ##~#fo~G>(~+;È 8(͐48((<( =̓ 4ǹ̓ >:̓ ̀(̓ w*Zͥ {/Oz/͉ >,ͬ 2F͉ O2͈ 8͉ 8 O͈ 8͉ 0$ <2͈ :B=(=7&(l2B*T*R| #~#fox(y O # R}y ѯOxyG͉ (>,ͬx(>)ͬC>,͈ͬ "F*Fxx~֬80W">͈ z¦~">֥_:={_!xV#KZK\K^N#F*>2͈ ڴ+͉ 0R}( ~##Ͷ*VR(D=+{ (N #| }(~##^#V###ȷ*<BbkBPY*<O +bkrsZ*Zo ͐ڼ wO0Dw0hOh̀Ohy ͊ O8(<( =( ǹ 7c̀ ̀ w w>2!͈ <=(sQ~º$2Z͉ (>,ͬ S>2<<(s[z< ?Ҽ S , ͈ S>ͬ0OxG!r" !"#N#F#45 `8_>à "Q+ L!#F"I]#D+# #RD#E#XX#K"HU##A"4H"~w #!?#7 O1!r͐*.4*yOPX!!'!9)!Z~# CZU|oaOWy0ZO|g}oz B8(`i K* *"͈ ʮ!(((( (( ͈ 0"+͈ 0+!R0!6 !͈ 8bk)))0_ y2>2B.2B: ng)#RDM ͯ w&'͉ >,ͬNh<'2B!1* *ͣ*x:_*0D**e7~+͊ O͈ (0>,ͬAhHh*ZFx( ##^#VNh#Gh*R*PN#h| } ̈ ~+2$`i!FҼ Kx͗+[7[Cڼ `i~#( #~#foR7R+B8 Bڼ PYKR w"R`iK##54?#~w 0##~( g 4Z"~>\̓ ~(w #>\à ~ w T#6Z" (J (+~w #{8ͫ* !*͐*.4*44+N+V+^+~+ngAOW_!2xRRG:?0 27 /**R8*C`i*[F8!6 ͚,!~à |*ͮ,#~(#:(<8O*T] *RRBDMSRDO*RT] ͜")*g`(!Z'+(0i#4&(.}(]G~_#~W#~ݝo#~ݜg#~OC(hcGy 'L}gjTeox 2_))0#'x\E(!_Z(e:Z;y*Pډ_ s͜~# "R:!*P~##(1^#V#ͮ,#͆~ ( ht !͆ h hq#p#~ #| }( * DM!.!a**T:>,ͬ.:*TR¼ *a*>2B.*VR(S>̓ Ւo&DM}w T#z+~w 4g 47!ê~(#~+w#!|_w#w#w#w#w#6͐*R4 [T|)0#))0#:2yݴݵ !_5 -(x( }!_GxW*ƀw~)*w+͐*/!'&(*x8Ge'!_4͐*!_ORKBDM*(w#*P~, à ##+y [C`iK[##s#r#~ ## w:2Q*͒,4$CҼ T]|w0x!_(F#~怩O*,$ 4~_#~W#~ݍo#~݌g#~O!`~/wogG}Roݝo}ݜg}O8CZU|oa o-yOhQ~Oh#! һ= 9!h"!=ʉ 0~#>>,ͬ{!!"!*H|<¼ !~6#wV2B~,͈ s?&͙ ͉ (>,ͬ ͙ *+r+s++> (Ҽ 2͜ ͙ >,ͬʹ: !ZNh# }(;N#~# +̓ yă >$yă >=̓ y"Z ͽ*ͮ,######0âe!O$82(((( (Oxy(#p#6':_:^/<͐*!^~w*Z*\*^ZSZ"\C^!Z^#V#Ni#Na#N#F#Z!^~7w?##wy }RҼ !!*R| } CR>>͐*=/GO/G:2 CҼ `i##N#F#t ͚,u !~w# W :008 |g}o#S˞# S\`N8v\);8͐* !_~5!3pe'͔)!(Y'!(Ͳ2!e'r,*P~#j  S, ͈ S*P##^#V, ͈ *RSCF`i!F+Kx͗+[7*P##N#F**ZNAh##~#fox(Nh#G͉ >,ͬʹ.:("ͯ G(ͯ 8!&ê!Zͯ w#*͉ >,ͬʹ 7Ox(͐*y(!^y*!+Ù*#x+y+|+}+z+{^#V#N#F#GOW_go**gl+z< +|ݥ<  >`(|(C(!_*ZA{E(.ͱ*ZxG{L(R(x81G11x0u z>+ă !*ͫ*!1ͽ*͐*(Dx'#*p#= +/w Tʚ;@B'd =60#{//+/{ +=/!bF :_ (x* Aq͈ (E( 0(,(. +60#{: 4|6|a}]x`}Drc}bG~L~~ENFONEXDATINPUDIREALEGO TFNENIRESTORGO SURETURRESTOOU~:Z~F+6{y'!x>=)8)0 07&B,-(+(+'GW_/O͈ 8V.(&E %͈ (-( +((+͈ 8I _ ({ ,ͫy*2~++|"^"\"Z1̣*ͼ()8!;\)):_Q*ͫ*~+b'!u22!_n2?wQ* EVj7F`i###͈ ֜¼ G͉ 7( ,(;͈ *ZFʼ ##N#fiK01̓ _W1W~##ʒ0'U1A1+>(+~#.ʪ0 $(* x#8THMETIC OVERFLOOUT OF MEMORUNDEFINED STATEMENTSUBSCRIPT OUT OF RANGRE-DIMENSIONED ARRACAN'T /ILLEGAL DIRECTYPE MIS-MATCNc(+6$S +p(p#6!a#:~ (*(+͈ -(+($(0 #͈ 0 ++w((6%_y(=_., {_x{.///yONULWAIDEPOKPRINԿLISTECLEAFNRETURSAVšUSINTABTFSPCTHENOSTEЫANOҾSGINABUSFRINPOSQRNLOEXCOSIT*D!(ͽ*7, 0͔)̣*WxG_*0r,{0_͈ ("8 A80 0z&())))oͫ*w*e''mqx!t!.wXXzmFXc|u~r1ͫ* )*)ͫ*~#ͽ*=)*e'͐* 3!|ͽ*5!zD)~$> #W(F~#.(#(, ~#>.E0# (%~##(T]^  # # #x8G#+Z x(~-( (QO STRING SPACSTRING TOO LONTOO COMPLECAN'T CONTINUUNDEFINED USER CALFILE NOT FOUNILLEGAL EOFILES DIFFERENRECOVEREFNRETU./O/GO>/ *=/P-͐*7.y(=OzWO ,..D// +8 b--կ/!AATPEELESTRVAASCHRLEFTRIGHTMIDLPOINSTELSLPRINTRACLTRACRANDOMIZSWITCLWIDTLNULWIDTLVALLVASPEA˧PRECISIOCA_*=̀) +/*/{_#zW#}o#|g#yO++++0+(LKILEXCHANGLINLOADGEOQUOTWRITERRORESUMMSAVMLOAERERVARADOPECLOSERASRENAMLOOKURULOANEAUTCOPALOAAMERGASA+ -ůG~- 0( % #~-+6 N ( #zè. E- 0+/60 #>/+~0(.(#(6E#6+n-6-D/ 0:#p#w#6!4vjKO;(1di65#$1]!Iͫ*'3ͬ**!3Ð)͐*1*:_8!QY͔)!Y'!3Ͳ2!s3 buQxL}>z ENSION ERRONO DISK SPACINPUT FILE NOT FOUNNO INPUT FILNO OUTPUT FILDUPLICATE OUTPUT FILOUTPUT CLOSE ERROINVALID OPEN TYP( >*}D(b8 #~+87>(0) 8"(#= { z(##~= #DO!> (B TABS EXCEED PAGE WIDT:=O Y~ ( ( (# :0B WORD LONGER THAN LIN{g:8Non Extended CPM Based Version>Ó>YO!5 "6S\= >7 *~#">!F>NEV(@*q#"!5 26SfINVALID FILE IUNKNOWN ERRO*INVALID INPUT @ LINE READY:*EXTRA LOST *BREA4*86͚,4!9 !"N"w-w % +"H>,2>2Ó>YO!5 "6S\= >7 *~#">!F>NEV(@*q#"!5 26SfÓ>YO!5 "6S\= >7 *~#">!F>NEV(@*q#"!5 26Sf ! 8{g:8)\ #!^ ˖V(˖+~.#6 6 !Nʶ+~ +:O!R 6 #6 ʶW!RK~ (H22>822>2>2>"222!"!"|"~"!2: ͈ A8/8< *+!͉ ͯ+~͟ +( >*}D(b8 #~+87>(0) 8"(#= { z(##~= ( >*}D(b8 #~+87>(0) 8"(#= { z(##~= # ö> y~ #  {ʶ!z8$ QT.D.L. ZÓ>YO!5 "6S\= >7 *~#">!F>NEV(@*q#"!5 26SfÓ>YO!5 "6S\= >7 *~#">!F>NEV(@*q#"!5 26Sf++(-~w |( +6 = zW8(  +6 ]  v n̞ !F(:=!8!0X :G( J!R~ ( (OE#!RTOPDOC~OE#!H !~ ~.x ˾ (v n̞ ~ v n̞ !˶~ G#!{8+-80 BASIC by Neil Colvin & Roger Amidon Nov. 1977 Highest Memor Bytes Free Welcome to BASIC, Ver. 3.05 >*}D(b8 #~+87>(0) 8"(#= { z(##~=  > OJ#!FK :2:wP:!_!R:2!RS6 !˦ J J!F(:=!8_8~2!\ 2͞ OG!G:!8!88A!Nq> 2R> 2S:2X ͞ >22͞ 8'! ͞ >22͞ :!8GK :W:(GJf<!Û͞ ! 2#~ (w#x͞ O:8y2 ( (B INVALID COMMAND WORx`8˨y`8˩! ~(# ~# ^#V H!###BKa BLd BMy BR CE CMR COS CPY DS EN FOIGN LABS, INC.WRITTEN BY NEIL COLVIN:(G J:G(!~ > OJ#!~(Cv(;!~=(4: !8 OJ#: G~ (  #7 > G~( ( # 9or Version 1.0 Adjust paper to first line of page, then enter CR No directory space left Input file not found Syn2X B PAGE NUMBER 0 INVALI͞ 2͞ O:!0y2B PAGE LENGTH TOO SMAL͞ !82B PAGE WIDTH TOO S(7Ggow#(  !?INPUT ERROR?! $\!e!h&\\< (* R8-\?W=!0y2#!"$\3!#\gͪ jttt}+ !Ϳt͌ !Ϳ_!͑ }+!   ͑ ͑ ͌ ͌  ͑ ͑ *J}2IJ:I!+ t :3 < t :3 !  *'ͪ !+ ʧ t :3g( ( !-~ͯ !+d ͱ (1*6RRR[8% #^#[!ͮjRXtXgo23 23([G"4! -#7##-ͯ ͜ʯ Ù2Lɯ23!"47t @ + w !+ ##g F:3/ (:3237( ~(E>@w! (! ͣ5#^4#V6#K!^#V#{0`hnz}u}-8AGpA>:#~ (#~ >.¤ 0 :3(VG BOD:#!'(!%[4~#fo"4y(7(xt V s#r:3Vn=:3  "4!5!+ (t :3 (T*'H*!*R|Hͼ !+ Ht >23"4-T!  *'ͪ S ~ <=23 8}͑ |[8*!w#"!RԹ!}ͯ |͑ *<~w0#4:L(*'#"'>2L*'*!"<!͌ ^#V+| ) w#w{1 24.MAIN.COPYRIGHT (C) 1977 SMALL SYSTEM SERVICES INC.LODFKͥ t ?DUPLICATE SYMBOL ?DUPLICATE IDENT 2K# .( *!"Mͧ >0> 23:I^X>2K*-.EB ~# #~  ~ >>> >>> YO"4-T!  *'ͪ S ~ <=23[6S6S8t|+ t|+t*8r+s+w+"8*'*Ms#r ͧ ͧ  ͇ڧ ͯ ͯ ͧ t͑ *X7(t :3 2K‘ ‘ *!!6"!<= "!; :3_(j23V‘ <=; :3*4G=>23(| x8n+ }| [8*:R#DM!"8 *6"6*:":!) *[:R8#"  yxBKl  *REPRGLWA;\#@!()<%=>[]*$n)<%=)Bb1Xa* "-"":*/MUB *'.$"'*'"4A!!V:3@2I*:"8"6( )MSSSA.R.R.!+ t :3 (!!A*:RRR[6% '[G"GS'*A"!!!s*G"'{͒}+ͯ {͒ͪ ͒ͪ ͒ͪ _j̈́ͯ <=ͯ͜ ͒*'"4"'™ Ggo _j*?:>2>"? W "( 0 ͯ o(0g[Gͪ ѯeo![8Rù ͦ Gͳ  Gͳ x REL {VALUE? NO SUCH FIL3!*!! "!͛ G>2JG͐ [1!Q"s͐ ȯ2L! W͋z!s N#fi[!#~#(ͮF#fhͷ[! ~#( # @  ##6##~ (44o0$s#r ##F#^#V!4ͮ ͒! ogͯ ͧ ͒  ! #0!sͯ ͯ ï  ͯ ͯ ͜ yͯ ͒ͪ DM  E! LOAD ADR? DATA ADR? UNDEFINED SYMBOLS ! "\TDL/SSS CPM LOADER VER. 2.0 COPYRIGHT 1977 SMALL SYSTEM SERVICES !>~# PP R,LOADIO,LODFIG,INTERR,ABSUB/L B:IO.RL,B:ERRARG.RL ABSUB ASMQ:(*F=#2"x*!R(GN#F#^#V#x(y? >@G>:>>Ox+&+~+~O+#y/+K>:>+! 5!)))) PSWCY == 0 GSBTIM == 0 GSBSCR == 1 GSBEND == 7 VBMR == 0 VBSTAT == 1 VBTIMB == 2 VBDXL == 3 VBDXH == 4 VBXL == 5 VBXH ! [!  !  <(å LIBRARYSREL:/T!>( G#- #6~# ͣ!  UNKNOWN SWITCH: !X < ! x("'! "%x(>2#! X x! "4V ! <ͣ"4( 23VK 2!~(6!~(##U=2>  :!O 6 #<6 <2!"#~  ~ :to(0? ? {|+}40:8OK> >>  ! "-"/"1!-͇w#og == 6 VBXCHK == 7 VBDYL == 8 VBDYH == 09H VBYL == 0AH VBYH == 0BH VBYCHK == 0CH VBOAL == 0DH VBOAH == 0EH VBDCL == 0 V?! GO HEX MAP SYMBOLLIBRAR*: :2Z ^*B"K!*B(; ^#V#^#V#R8 `iRDM > : !"!"2t!t5#^{w#V04:w !>2w!"x\(7!w5#^{w#V04y:w#> >> >!* 6# G(  x(BDCH == 1 VBCL == 2 VBCH == 3 VBCCHK == 4 VBSACT == 7 VBBLNK == 6 VBCLMT == 0 VBCREV == 1 VBCLAT == 3 FTBASE == 0 FTFSR8Ex(>\* 7R0\ ?OVERWRITE USE /HEX!? $NORMEM == 4000H FIRSTC == 2000H SCREEN == 0 BYTEPL == 40 BITSPL == 160 STIMER == 200H CTIMER == 203H FNTSYS == 206H FNTS[! COM !?CANNOT CREATE?! !z"!%  :+ vK :+ IDENT MAP OF SYMBOL TABLE OF SYMBOL?  ͍ ʹ :%ͼ\>>> >>> YOMAIN.7LCOPYRIGHT (C) 1977a SMALL SYST$$$ SUB#~+w6#8 w#06 #:(6 #6 #6 ++.w#0A>>:>#~ (>#~ >.X == 1 FTFSY == 2 FTBYTE == 3 FTYSIZ == 4 FTPTL == 5 FTPTH == 6 MRFLOP == 6 MRXOR == 5 MROR == 4 MRXPND == 3 MRROT ==  LIBRARIES !?INPUT DATA ERROR?! !?OUT OF MEMORY?! :3 (K:vT"ͯ:3@> (>?>ͣ*4&!4~#2K*ML == 20DH ALKEYS == 214H MENUST == 218H MXSCR == 21EH NOPLAY == 228H NOGAME == 235H PSWSGN == 7 PSWZRO == 6 PSWPV == 2 (2%! ! :] ! \!=(;(! x e: : :J:w  !    < >2 2w (OPERAND A + OPERAND B) ; ; DESTROYS DE AND HL ; ;---- PLUS: IADD: CALL POPOPND ;DE=OPERAND B XCHG ;HL=LE PRECISION INTEGER OPERANDS ; ; NEEDS: ; IY->OPERAND B ; OPERAND A ; ; RETURNS: ; IY->(OPERAND A - OPERAND B) ; ; IDIV: CALL POPOPND ;DE=OPERAND B XCHG ;HL=OPND B CALL POPOPND ;DE=OPERAND A CALL IPUSH ;A ON NCU STACK XCHG ;DERN CAT ;STRING CONCATENATION .EXTERN CONVB ;CONVERT OPERAND B .EXTERN DONCU ;PERFORM NCU OPERATION .EXTERN IGET ;GET INT CHG ;A ON NCU STACK CALL IPUSH XCHG ;B ON NCU STACK CALL IPUSH ;+ ; NCU STACK HAS: ; SP -> OPND B ; OPND A ; OPNDOPERAND B CALL POPOPND ;DE=OPERAND A DAD D ;HL=A+B XCHG ;DE=RESULT JMPR IRET ;PUSH A+B ;++++ ; ; MOD ; DIVIDES  DESTROYS DE AND HL ; ;---- MINUS: ISUB: CALL POPOPND ;DE=OPERAND B XCHG ;HL=OPERAND B CALL POPOPND ;DE=OPERAND A =OPND B CALL IPUSH ;B ON NCU STACK MVI A,N.SDIV ;DIVIDE THEM CALL DONCU ;DO THE DIVIDE CALL IPOP ;DE = A/B JMPR IREFROM NCU STACK .EXTERN IND ;INDIRECTION .EXTERN IPOP ;POP FROM NCU STACK .EXTERN IPUSH ;PUSH TO NCU STACK .EXTERN POPOPND B ; OPND A ;- MVI A,N.SDIV ;DIVIDE A/B CALL DONCU MVI A,N.SMUL ;MULTIPLY (A/B)*B CALL DONCU MVI A,N.SSUB ;SUBTRACT .INSERT A:S.ASM .LINK .IDENT ES .PREL .INSERT A:MAC.ASM .INSERT A:ZRAM.ASM .INSERT A:NCUEQU.ASM ;+ ; INTERNALS ;- .INT2 DOUBLE PRECISION INTEGERS AND ; RETURNS THE REMAINDER ; ; NEEDS: ; IY->OPERAND B ; OPERAND A ; ; RETURNS: ; IY->OP XCHG ;HL=A,DE=B CLC ;CLEAR CARRY DSBC D ;HL=A-B XCHG ;DE=RESULT IRET: MVI A,$IVAL ;TYPE INTEGER JMP PSHOPND T ;PUSH & RETURN ;++++ ; ; IMUL ; MULTIPLIES 2 DOUBLE PRECISION INTEGERS ; ; NEEDS: ; IY->OPERAND B ; OPERAND A ; ; ;POP OPERAND .EXTERN PSHOPND ;PUSH OPERAND .EXTERN SCMP ;STRING COMARE ROUTINE ;++++ ; ; NOP ; NO-OP USED FOR OPERATIO CALL DONCU ;A-(A/B)*B CALL IPOP ;DE = RESULT JMPR IRET ;PUSH & RETURN ;++++ ; ; IDIV ; DIVIDES 2 DOUBLE WORD INTEGEERN CPAREN ;CLOSE PAREN .INTERN DOPTAB ;DOUBLE CHAR OPERATORS .INTERN IADD ;INTEGER ADD .INTERN IMUL ;INTEGER MULTIPLY .ERAND A - (OPERAND A / OPERAND B) * OPERAND B ; ; DESTROYS: DE, HL ; ;---- MOD: CALL POPOPND ;DE=OPERAND B XCHG ;HL=OP;PUSH A-B ;++++ ; ; ADD ; ADDS 2 DOUBLE PRECISION INTEGER OPERANDS ; ; NEEDS: ; IY->OPERAND B ; OPERAND A ; ; RETURN RETURNS: ; IY -> OPERAND A * OPERAND B ; ; DESTROYS: HL, DE ; ;---- IMUL: CALL POPOPND ;DE=OPERAND B CALL IPUSH ;ONNS NOT IMPLEMENTED YET ; RETURNS THE FIRST OPERAND AS RESULT ; ;---- NOP: JMP POPOPND ;++++ ; ; SUB ; SUBTRACTS 2 DOUBRS ; ; NEEDS: ; IY->OPERAND B ; OPERAND A ; ; RETURNS: ; IY->(OPERAND A / OPERAND B) ; ; DESTROYS HL, DE ; ;----INTERN OPAREN ;OPEN PAREN .INTERN SOPTAB ;SINGLE CHAR OPERATORS .INTERN UOPTAB ;UNARY OPERATORS ;+ ; EXTERNALS ;- .EXTEERAND B CALL POPOPND ;DE=OPERAND A IMOD: CALL IPUSH ;A ON NCU STACK XCHG ;DE = OPND B CALL IPUSH ;B ON NCU STACK X&  NCU STACK CALL POPOPND ;DE=OPERAND A CALL IPUSH ;ON NCU STACK MVI A,N.SMUL ;MULTIPLY CALL DONCU ;A*B CALL IPOP ;D; CC'S SET FOR COMPARISON ; ; ; CALLS: ; SCMP - STRING COMPARE ; DCMP - INTEGER COMPARE ; ;---- CMP: MOV B,E.TYP-- IRND: CALL ..RND1 ;GET HI ORDER MOV A,H PUSH PSW CALL ..RND1 ;GET LO ORDER POP PSW MOV L,A RET ..RND1: LHLD R LE, NE, EQ ; ; NEEDS: ; IY->OPERAND B ; OPERAND A ; ; RETURNS: ; IF THE RELATIONAL OPERATOR WAS SATISFIED BY THE ; : CALL PSHOPND ;PUSH OPND A INX H ;BUMP BY 1 PUSH H ;SAVE B-A CALL IRND ;GET RANDOM NUM RES 7,H ;CLEAR SIGN POP D ERROR ER.CNV ;ELSE ERROR ;++++ ; ; DCMP ; COMPARES 2 DOUBLE PRECISION INTEGER OPERANDS ; ; NEEDS: ; IY->OPERAND B ;E = RESULT JMPR IRET ;PUSH & RETURN ;++++ ; ; RND ; PRODUCES A RANDOM 16 BIT INTEGER IN THE GIVEN ; RANGE (OPERAND A - O(Y) ;B=TYPE OF OPNDB MOV A,E.TYP-E.SIZ(Y) ;A=TYPE OF OPNDA CMP B ;TYPES EQUAL? JRZ ..C2 ;DISPATCH, NO CONV JRNC ..C1 ANSHT CALL ..SHFT LXI B,23 DAD B ADC D SHLD RANSHT LHLD RANSHT+2 MOV E,A CALL ..SHFT DAD D SHLD RANSHT+2 R RESULT OF (OPERAND B - OPERAND A) ; IY->1 (TRUE) ; ELSE ; IY->0 (FALSE) ; ; DESTROYS DE, HL ; ;---- GE: CALL CMP ;DE=B-A,HL=RND XCHG ;DE=RND,HL=B-A CALL IMOD ;GET MOD(X,B-A) JMP IADD ;GET A+MOD(X,B-A) ;++++ ; ; IRND ; RANDOM  OPERAND A ; ; RETURNS: ; DE = 0 (FALSE) ; CONDITION CODES SET FOR (OPERAND A - OPERAND B) ; ; DESTROYS HL ; ;---- PERAND B) ; ; NEEDS: ; IY->OPERAND B ; OPERAND A ; ; RETURNS: ; IY->RANDOM INTEGER BETWEEN OPERAND A ; AND OPERAND ;AOPND A CALL CONVB ;CONVERT OPND A POPET ..SHFT: MVD B,H CLR A MVI D,7 ..SH1: DAD H RAL DCR D JRNZ ..SH1 DAD B ADC D RET ;++++ ; ; CMP ; COMPARI ;COMPARE A-B JP TRUE ;A >= B? JMPR FALSE ;A < B LE: CALL CMP ;COMPARE A-B JRZ TRUE ;A = B? JM TRUE ;A < B? JMPBITSTRING ROUTINE - RETURNS 16 BITS OF ; MADNESS IN HL. TAKEN FROM HVGSYS ORIGINALLY ; WRITTEN BY JEFF FREDRICKSON ; ; NEEDSDCMP: CALL POPOPND ;DE=OPERAND B XCHG ;HL=OPERAND B CALL POPOPND ;DE=OPERAND A XCHG ;HL=A,DE=B CLC ;CLEAR FOR B INCLUSIVE ; ;---- RND: CALL POPOPND ;DE=OPND B XCHG ;HL=OPND B CALL POPOPND ;DE=OPND A ..R1: CLC ;CLEAR FOR SUB  Y ;RESTORE SP JMPR ..C2 ;DISPATCH ..C1: MOV A,B ;A=TYPE OF OPND A CALL CONVB ;CONVERT OPND B ..C2: CPI $NULL ;NULLS?SON ROUTINE FOR RELATIONAL OPERATORS ; ; NEEDS: ; IY->OPERAND B ; OPERAND A ; ; RETURNS: ; BOTH OPERANDS POPPED OFF R FALSE ;A > B LT: CALL CMP ;COMPARE A-B JP FALSE ;A >= B? TRUE: INX D ;DE=1 (TRUE) FALSE: JMP PSHOPND ;SAVE T/F GT: : NOTHING ; ; RETURNS: ; HL = RANDOM NUMBER (-32767 TO 32767) ; ; DESTROYS: EVERYTHING (ENTIRE 8080 REGISTER SET) ; ;--SUB DSBC D ;HL=A-B DRET: LXI D,0 ;DE=0 (FALSE) MVI A,$IVAL ;TYPE INT RET ;++++ ; ; RELATIONAL OPERATORS LT, GT, GE, DSBC D ;HL=B-A JP ..R2 ;B OPND B JMPR ..R1 ;TRY SUB AGAIN ..R2 JZ DRET ;RETURN EQ THEN CPI $STRADR ;STRINGS? JZ SCMP ;STRING COMPARE CPI $IVAL ;INTEGERS? JZ DCMP ;INT COMPARE ' CALL CMP ;COMPARE A-B JRZ FALSE ;A = B? JM FALSE ;A < B? JMPR TRUE ;A > B EQ: CALL CMP ;COMPARE A-B JRNZ FALSE ;A SHLD 6 LXI H,1500H DAD D LXI D,CPMJPS XCHG LXI B,15*3 LDIR ; COLD OR WARM EXAF ORA A JRNZ BDONE ; COLD L OPER '%',,5,$IVAL,RND ;RANDOM OPER '<',,2,0,LT ;LESS THAN OPER '>',,2,0,GT ;GREATER THAN OPER '=',,2,0,EQ ;EQUAL OPE1X8  L!~(#~˯O F  EAz2{2:W2q:G:<!Iͨ>2J ADDRESS OF SUBROUTINE TO EVALUATE ; THE OPERATOR (2 WORDS) ;---- UOPTAB: OPER '-',,6,$IVAL,MINUS ;UNARY MINUS OPER '+',u>!P͏͒6͘)Ă>2O͉:OÌ)$D!xwʰ ComparÍ Rea != B? JMPR TRUE ;A = B NE: CALL CMP ;COMPARE A-B JRZ FALSE ;A = B? JMPR TRUE ;A != B ;++++ ; ; OPERATOR TABLES ;1e  COPYDSK - ver 1.1b"{ Copy complete::F no error(s) were detecte  OPTIONS: "A" = copy aR '#',,2,0,NE ;NOT EQUAL OPER AASN,,1,0,0 ;ASSIGNMENT OPER DOPTAB: OPER '<','=',2,0,LE ;LESS OR EQUAL OPER '>','=',2,0,!e:Wͭ> ͨ!P~/w# q#ͨ6#r#6#s#6#6#ͨ6#ͨ6#è>:/>v/P @,6,$IVAL,PLUS ;UNARY PLUS OPER '@',,7,$STRADR,IND ;INDIRECTION OPAREN: OPER '(',,0,0,0 ;OPEN PAREN CPAREN: OPER ')',,0,0,0  Writ  error atʹ  >24  on drive:A track:  - sectorP>HƐ' UOPTAB - UNARY OPERATORS ; SOPTAB - SINGLE CHAR BINARY OPERATORS ; DOPTAB - DOUBLE CHAR UNARY OPERATORS ; ; ENTRIES All tracks "O" = copy tracks 0 and 1 "F" = copy from track 2 to end of disk "E" = exit to CP/M (insert system disk firstGE ;GREATER OR EQUAL .BYTE 0 .END !> v/Dw Disk Formatter Program Version 1.0 **** WARNING **** This progr ;CLOSE PAREN SOPTAB: OPER '-',,3,$IVAL,ISUB ;SUBTRACTION OPER '+',,3,$IVAL,IADD ;ADDITION OPER '&',,3,$STRADR,CAT ;STRIN@'Oz~# O_ > ytw ^C Aborte>c`TO*q*RE AS FOLLOWS: ; OFFSET DESCRIPTION ; ------ ----------- ; O.CHAR CHARACTER DESCRIPTION OF OPERATOR ; THIS IS 2 BYTES, 2ND ) Put source in drive A, destination in drive B and enter selection:!MA&O!MFE ?Illegal selectionb2!EMORY ; AND DO MISC STUFF PUSH X POP D LXI H,WBOOT SHLD 1 ; JMP ADDR MVI A,0C3H STA 0 STA 5 LXI H,806H DAD D am wipe out all infomation on the disk in DRIVE B. Remove the disc from drive B and put in the one to be reformatted before anG CONCATENATION OPER '*',,4,$IVAL,IMUL ;MULTIPLICATION OPER '/',,4,$IVAL,IDIV ;DIVISION OPER '\',,4,$IVAL,MOD ;REMAINDER LD DMA MVI B,128 ..FLP: MOV A,M CMA MOV M,A INX H DJNZ ..FLP IN STATUS ; CHECK UP CMA ANI 9CH RZ DCR D JBYTE NULL IF ; IT IS A SINGLE CHAR OPERATOR ; O.PREC PRECEDENCE OF OPERATOR ; O.TYP TYPE OF VALUES OPERATOR WANTS ; O.SUB 65>Gڄ65>Gͷڗ!4:42! :7U# y!P͏͕͒( swering the questions. $ Select one option E - exit to CP\m A - reformat all tracks O - format the system tracks F -A,C CALL PRINTM ..BRK0: CALL INCHAR CPI 'R' JRNZ ..BK2 SET 3,B MVI A,20 ; READ JMPR ..BK3 ..BK2: CPI 'W' JRNZ .NCHAR CPI 'B' JZ BREAK CPI 'G' JZ GO CPI 'D' JZ DUMP CPI 'A' JZ ASDUMP CPI 'Q' JZ MAINLOOP CPI 'X' JZ E**** STEP: LXI H,EXAMREGS SHLD NMIJP LHLD PCSAVE LXI B,BADRH+0A00H OUTP H INR C OUTP L INR C OUTP B ; SET BREAATUS CMA BIT 7,A JRNZ NOTRDY BIT 0,A RET NOTRDY: MVI A,10 ; NOT READY CALL PRINTM CPMJPS: JMP MAINLOOP JMTSAVE OUT BTYPE GO25: XRA A OUT SELECT ; DISABLE FLOPPY INTERUPTS LXI H,0C3F3H ; JP AND DI INSTRUCTIONS LDA IFF ; INTE format the file tracks Enter your selection:$ Disc not ready$ Drive Write Protected$ Seek Error$ Lost data$before an.BRK0 SET 2,B MVI A,21 ..BK3: CALL PRINTM MOV A,B OUT BTYPE STA BTSAVE MVI A,22 ; ' AT ' CALL PRINTM CALL KEYBXAMREGS .IFG REGSS,[ CPI 'R' JZ REGISTER ] .IFG MEMSS,[ CPI 'M' JZ MEMORY CPI 'P' JZ PORT ] CPI 'S' JZ STK TYPE JMP GO25 .PAGE ; ************** ; ** MEMORY ** ; ** & ** ; ** PORT ** ; ************** .IFG MEMSS,[ P WBOOT JMP CONSTAT JMP CONIN JMP CONOUT JMP LIST JMP PUNCH JMP READER JMP HOME JMP SELDSK JMP SETTRK JMP SERUPTS? ORA A JRZ ..G3 SET 3,L ..G3: SHLD EIDI ; LOADS JUMPER TOO SSPD MONSP LXI SP,PCSAVE+4 POP H POP D POP B swering the questionsLD CALL CONVRT MOV A,C OUT BADRL MOV A,B OUT BADRH JMP DEBUG .PAGE .IFG R2708,[.LOC ICEROM+800H] ; ********** ;EP JMP ..DB1 .PAGE ; ****************** ; ** ; ** BREAKPOINT ; ** ; ****************** BREAK: MVI A,17 ; 'BREAK ON ' MEMORY: MVI A,7 ;"MEMORY " JMPR P0 PORT: LDA DMPSTA ;GET STATUS BYTE SET 1,A ;SET PORT COMMAND BIT STA DMPSTA MVI A,TSEC JMP SETDMA JMP READ JMP WRITE .PAGE ; *********** ; ** DEBUG ** ; *********** DEBUGE: MVI A,27 CALL PRINTM  EXX POP PSW EXAF POP Y POP X POP H POP D POP B POP PSW LSPD SPSAVE ; DON'T CHANGE FLAGS MVI A,3 ; TURN ONS OUT COMMAND SEEKWAIT: CALL DSTAT JRNZ SEEKWAIT ANI 00011000B ; SEEK ERROR\CRC ERROR RZ DCR D JRZ SEEKERROR P ** ; ** GO ; ** ; ********** GO: MVI A,23 CALL PRINTM CALL INCHAR CPI 0DH ; CR JRZ ..G2 MVI A,22 ; AT CALL P CALL PRINTM ..BRK1: CALL INCHAR CPI 'M' LXI B,200H+18 JRZ ..BRK2 CPI 'P' LXI B,100H+19 JRNZ ..BRK1 ..BRK2: MOV 29 ;"PORT" P0: CALL PRINTM CALL KEYBD ;READ ADDRESS CALL CONVRT ;MAKE IT BINARY ..P1: LXI H,KEYBUF MOV D,B MOV E,C JMPR DEBUG DERROR: MVI A,0 CALL PRINTM DEBUG: LXI SP,STACK LXI H,DEBUG SHLD NMIJP MVI A,9 CALL PRINTM ..DB1: CALL I WRITE PROTECT OUT MISC ; 4 M1'S TO ..G LDA AFSAVE+1 JMP EIDI .PAGE ; ************ ; ** ; ** STEP ; ** ; ********CHL ;RETRY SEEKERROR: BIT 4,A MVI B,11 ; SEEK ERROR JRNZ WERROR MVI B,12 ; CRC ERROR JMPR WERROR DSTAT: IN STRINTM CALL KEYBD CALL CONVRT ; GET ADDRESS TO ..G TO MOV H,B MOV L,C SHLD PCSAVE ;SAVE IN REGISTER AREA ..G2: LDA B) CALL DADDR ;PRINT ADDRESS ON TERMINAL LDA DMPSTA BIT 1,A ;ARE WE IN PORT COMMAND???? JRNZ ..M1 MVI A,5 ; READ A EXT BYASCII EQUIVALENT ;*** ; **************************** DUMP: MVI A,8 ;"DUMP " CALL PRINTM CALL KEYBD ;READ UPPER & LOWER B MOV A,C ;BINARY OF LAST TWO DIGITS TYPED POP B ; GET BACK MEM LOCATION EXAF MVI A,4 OUT MISC EXAF STAX B ;PUT IN  MOV A,D CMP 2(X) ;AT UPPER LIMIT??? JRNZ ..7 MOV A,E CMP 3(X) ;ALL UPPER LIMIT BITS MATCH??? JRZ ..9 ..7: MOV A,E  LXI H,KEYBUF CALL CONOMSG ;PRINT MEM & CONTENTS CALL KEYBD ;READ ANY CHANGES LDAX D ..P2: CPI COMMA JRZ ..P4 ..P3: C ANI 0F0H ;START AT "XXX0" ADDR BOUNDRY MOV E,A ..2: CALL DLOAD ;SET BUFFER POINTERS CALL DADDR ;CONVRT "HL" TO ASCII MTE OUT MISC LDAX B ;READ FROM ..PORY LOCATION JMPR ..M2 ..M1: INP A ;READ FROM USER TYPED PORT # ..M2: CALL ASCII LDA OUNDS CALL CONVRT LXI X,DMPLOW ;TEMP STORAGE MOV 0(X),B MOV 1(X),C LDAX D ; TEST FOR ONE INPUT CPI COMMA JRZ ..0 NEW DATA PUSH B ;SAVE POINTER JMPR ..M9 ..M8: MOV A,C ;GET DATA USER TYPED POP B ;RESTORE PORT # IN 'C' OUTP A ;WRIT ANI 0FH ;MASK UPPER BITS CPI 0FH ;AT A LINE BOUNDARY??? JRNZ ..8 CALL DPRNT CALL DLOAD INX D CALL DADDR ;FILL INPI CR ;DONE???? JRNZ ..P5 ..P4: POP B LDA DMPSTA ANI 0FDH ;CLEAR OUT PORT BIT STA DMPSTA JMP DEBUG ..P5: CPI LF ;OV A,E ; ..3: CMP 1(X) ;ARE WE AT THE STARTING ADDRESS?? JRZ ..4 CALL DFILL ;PUT IN BLANKS INSTED INX D MOV A,E JMPRDMPSTA ;CHECK IF ASCII BIT IS ON BIT 0,A ;PRINT BYTE IN ASCII?? JRZ ..P1A BIT 1,A ;IF IN PORT COMMAND, NO ASCII JRNZ . LXI H,7FH DAD B MOV B,H MOV A,L ORI 0FH MOV C,A JMPR ..0A ..0: INX D ;BUMP OVER TERMINATOR CALL CONVRT ..0A: ME DATA TO PORT PUSH B ..M9: LDAX D ;GET TERMINATOR JMPR ..P2 ] .PAGE ; *************************** ;*** ;*** DUMP RO ADDRESS JMPR ..4 ..8: INX D ;BUMP TO NEXT LOCATION JMPR ..4 ..9: MOV A,E ;DO WE HAVE TO FILL OUT THE LINE?? ANI 0FH CADVANCE A LOCATION??? JRNZ ..P6 POP B INX B ;POINT AT NEXT LOC. JMPR ..P1 ..P6: CPI ARROW ;GO BACKWARDS???? JRNZ ..P ..3 ; ..4: MVI A,5 OUT MISC LDAX D ; GET CONTENTS OF EXT ..PORY PUSH PSW CALL ASCII ;CONVRT TO 2-DIGIT HEX MVI M,SP.P1A MVI M,SPACE INX H MVI M,SLASH INX H MVI A,5 OUT MISC ; TURN ON THE EXT SHIT LDAX B ;GET DATA FROM MEMORY CAOV 2(X),B ;SAVE UPPER BOUNDRY MOV 3(X),C ; MOV A,0(X) ;CHECK FOR VALID BOUNDARIES CMP B ;IS UPPER BOUND ACTUALLY HIGHER?UTINE - ;*** ;*** REGS - DE -> POINTS AT ..PORY ;*** HL -> OUTPUT BUFFER FOR 2-DIGIT HEX EQUIVALENTS ;*** BC -> " " " PI 0FH ;AT THE END OF THE LINE JRZ ..10 CALL DFILL ;FILL IN WITH BLANKS INX D JMPR ..9 ..10: CALL DPRNT ;PRINT OUT LAST7 POP B DCX B ;DECREMENT PONITER JMPR ..P1 ..P7: CALL CONVRT LDA DMPSTA BIT 1,A ;IN PORT CO.MAND????? JRNZ ..M8 ACE INX H POP PSW ;GET AGAIN FOR ASCII VERSION CALL APRNT ;IS CHAR PRINTABLE??? ..6: STAX B ;PLACE IN ASCII CHAR INX BLL APRNT ;CHECK IF IT'S PRINTABLE MOV M,A INX H MVI M,SLASH INX H ..P1A: MVI M,SPACE+080H PUSH B ;SAVE MEM LOCATION ?? JRZ ..1A JNC DERROR JMPR ..1 ..1A: MOV A,1(X) ;GET LOWER ADDR BITS CPI C JNC DERROR ..1: MOV D,0(X) MOV A,1(X) *  LINE JMP DEBUG ; ; EXTRA DUMPER ROUTINES ; DFILL: PUSH B ;PUTS IN SPACES AS FILLER MVI B,3 ..DF1: MVI M,SPACE INX HX D INX D RET DBYTE: MVI M,SPACE INX H JMP ASCII WORD: MVI M,SPACE INX H MOV A,D CALL ASCII MOV A,E JMP *************** EXAMREGS: ;DUMP ALL THE REGISTERS MVI A,26 CALL PRINTM LXI D,KEYBUF LHLD AFSAVE BIT 7,L CALL PM OW A ASCII "0"??? JRC ..1 CPI 'Z' ;HIGHER THAN AN "Z"??? JRNC ..1 CPI 03AH JRC ..DIG ;CHAR IS A "0-9" CPI 'A' JRNC.1: POP H IN CRTD ;READ TO RESET STATUS JMP DEBUG DLOAD: LXI H,KEYBUF ;RESET POINTERS LXI B,KEYBUF+54 MVI A,SLASH S?? JRNZ ..2 MOV A,B ;ARE WE AT CHAR DELETE LIMIT??? ORA A JRZ ..1 ;YUP.... PUSH D MVI A,4 ; CALL PR DJNZ ..DF1 POP B MVI A,SPACE STAX B INX B RET ; ; DADDR: LDA DMPSTA BIT 1,A ;IF IN PORT CMND, PRINT ONLY TWO ASCII .PAGE ; ********************************************************** ;*** ;*** KEYBD - READ INPUT FOR CONSOLE TERMINA BIT 6,L CALL PM BIT 2,L CALL PM BIT 0,L CALL PM XCHG MVI A,D CALL DBYTE LXI D,AFSAVE-1 MVI B,6 ..DZ: LDAX  ..DIG ;CHAR IS "A-Z" JMPR ..1 ..DIG: STAX D ;SAVE THE CHARACTER TYPED INX D ;BUMP TO NEXT CELL CALL CRTOUT ;ECHO IT IN TTAX B INX B RET APRNT: CPI 07FH ;CHECK IF CHAR IS PRINTABLE JRNC ..AP1 CPI 020H RNC ..AP1: MVI A,PERIOD RET INTM POP D ;RESTORE POINTER DCX D DCR B ;CHECK CHAR COUNTER JMPR ..1 ; ..2: CPI CR ;???? JRZ ..3 CPI LF JRZ DIGITS JRNZ ..D1 MOV A,D ;CONVERT "DE" TO ASCII CALL ASCII ..D1: MOV A,E CALL ASCII MVI M,':' INX H MVI M,SPACE L ;*** SAVE & ECHO CHARACTERS 0-9, A-F & VALID ;*** TERMINATORS. IGNORES ALL OTHER CHARACTERS ;*** ;*** EXIT - DE -> POINTS D DCX D CALL DBYTE DJNZ ..DZ LDED IXSAVE CALL WORD LDED IYSAVE CALL WORD LDED SPSAVE CALL WORD LDED PCSAVE ERMINAL INR B MOV A,B CPI 24 ;AT MAX # OF CHARACTERS JRNZ ..1 ;GET MORE JMP DERROR ..XIT: LXI D,KEYBUF RET .PAGE ; ; ASDUMP: LDA DMPSTA ;SET OR RESET BIT #1 BIT 0,A ;IS IT ZERO?? JRZ ..AD1 RES 0,A ;CLEAR IT JMPR ..AD2 ..AD1: SE..3 CPI ARROW JRNZ ..4 ..3: STAX D ;SAVE CHARACTER MVI A,6 ; CALL PRINTM JMPR ..XIT ; ..4: CPI CTRLX ;SCRAT INX H RET ; ; DPRNT: MVI A,SLASH+080H ;PRINTS LINE ON TERMINAL STAX B PUSH D ;SAVE ..P LOC LXI H,KEYBUF CALL CONAT INPUT STRING BUFFER ;*** A -> BLASTED ;*** B -> BLASTED ;*** ; ********************************************************** CALL WORD DCX H SET 7,M LXI H,KEYBUF CALL CONOMSG JMP DEBUG PM: MVI A,'+' JRNZ ..SKIP MVI A,SPACE ..SKIP: STA ; ***************************************************** ;*** ;*** CONVRT - CONVERT ASCII INPUT TO HEX BINARY ;*** LAST FOUR T 0,A ..AD2: STA DMPSTA ;RESET THE BYTE JMP DEBUG .PAGE ; ******************** ; ** ; ** REGISTER DUMP ; ** ; *****CH THE WHOLE LINE JRNZ ..5 JMP DEBUG ; ..5: CPI COMMA ;ALLOW THESE THRU JRZ ..DIG CPI '''' JRZ ..DIG CPI 030H ;BELOMSG CALL CRTSTAT ;ANYTHING TYPED??? CPI 0FFH ;KEYBOARD INTERUPT??? JRZ ..1 LXI H,MESS6 CALL CONOMSG POP D RET . KEYBD: LXI D,KEYBUF ;POINT AT STRING BUFFER MVI B,0 ;CLEAR CHARACTER COUNTER ..1: CALL GETCHR CPI DELCHAR ; BACKSPACE ..?+ DIGITS BEFORE TERMINATOR ;*** ARE CONVERTED ;*** ;*** ENTRY - DE -> POINTS AT ASCII INPUT STRING ;*** ;*** EXIT - A -> BLAS***** REGISTER: MVI A,28 ;"MODIFY REGISTER" CALL PRINTM CALL KEYBD ;READ WHAT REG(S) ARE TO BE MODIFIED LXI H,KEYBUF+30 HL -> UPDATED TO NEXT AVAILABLE LOCATION ;*** ; **************************************************** ASCII: PUSH PSW ANI 0GLE REGISTER ; ..Q: JRNC ..D ;DUMP DOUBLE REG ..S: DADX B ;POINT 'IX' AT REGISTER IN SAVE SPACE MOV A,1(X) ;READ USER REGIST ..3: SLAR L ;STUFF 0 INTO LOW BITS, HIGH INTO CARRY RALR H ;CARRY ITTO LOW BIT, SCREW THE HIGH BIT DJNZ ..3 ORA L ;PLAC..5: CPI 'C' JRNZ ..6 LXI B,19 ;C JMPR ..Y ..6: CPI 'F' JRNZ ..7 LXI B,21 ;F ..Y: JMP ..S ; ..7: LXI B,16 ;POINT TTED ;*** - BC -> BINARY EQUIV. OF LAST FOUR DIGITS ;*** - HL -> SAVED & RESTORED ;*** - DE -> UPDATED TO CONVERSION TERMINATO ;SKIP OVE INPUT SECTION LXI X,PCSAVE ;POINT AT REG SAVE AREA LDAX D MVI M,SPACE INX H CPI 'S' ;"SP"??? JRNZ ..1 LF0H ;MASK OUT LOW BITS CALL ..SFT CALL ..1 ;MAKE ACCUM ..II MOV M,A ;SAVE IT IN BUFFER INX H ;BUMP POINTER POP PSW ;NOTER CONTENTS CALL ASCII CALL RPRNT MOV 1(X),C ;CHANGE TO NEW CONTENTS JMP DEBUG ; ..D: DADX B MOV A,1(X) CALL ASCIE I THE CURRENT CHAR MOV L,A INX D ;POINT AT NEXT CHAR JMPR ..1 ..OUT: MOV B,H MOV C,L POP H RET ..ERR: POP H O SAVE AREA CPI 'H' JRNZ ..8 INX D LDAX D ;GET NEXT CHAR CPI 'L' JMPR ..Q ..8: INX B INX B CPI 'D' JR ;*** ; ***************************************************** CONVRT: PUSH H LXI H,0 ;CLEAR DATA REG PAIR ..1: LDAX D ;GEXI B,2 ;PUT IN OFSET TO REGISTER SAVE LOC. JMPR ..X ..1: CPI 'P' ;"PC"??? JRNZ ..2 LXI B,0 JMPR ..X ..2: CPI 'I' ;"IX W DO LOW 4 BITS ANI 0FH CALL ..1 MOV M,A INX H RET ..1: CPI 10 JRC ..2 ADI 7 ..2: ADI 030H RET ..SFT: RARI MOV A,0(X) CALL ASCII CALL RPRNT MOV 1(X),B ;CHANGE TO NEW DATA MOV 0(X),C JMP DEBUG RPRNT: MVI M,SPACE+80H LXI POP H JMP DERROR .PAGE ; **************************************************** ;*** ;*** ASCII - CONVERT BINARY TO ASRNZ ..9 INX D LDAX D ;GET NEXT CHAR CPI 'E' JMPR ..Q ..9: INX B INX B CPI 'B' JRNZ ..10 INX D LDAX D ;GETT CHAR TO CONVERT CPI CR ;CHECK FOR TERMINATOR JRZ ..OUT CPI LF JRZ ..OUT CPI ARROW JRZ ..OUT CPI COMMA JRZ ..OUOR IY"????? JRNZ ..3 INX D LDAX D ;.. NEXT DIGIT CPI 'X' JRNZ ..2A LXI B,14 JMPR ..X ..2A: CPI 'Y' JNZ DERROR  RAR RAR RAR RET .IFG REGSS,[ ;************************** ;** ;** MODIFY REGISTERS ;** ;********************* H,KEYBUF+30 CALL CONOMSG CALL KEYBD LDAX D CPI CR JRZ ..1 CALL CONVRT RET ..1: POP B JMP DEBUG ; ] .ENDCII ;*** ;*** ENTRY - A -> DATA TO CONVERT ;*** - HL -> WHERE TO STUFF CONVERTED DATA ;*** ;*** EXIT - A -> BLASTED ;*** - NEXT CHAR CPI 'C' JMPR ..Q ..10: CPI 'A' ;DUMP ACCUMULATOR JNZ DERROR ..10A: INX B INX B JMPR ..S ; ; ; DUMP SINT CPI 03AH ;IS CHAR 0-9???? JRC ..2 CPI 'G' ;LEGAL CHARACTER??? JRNC ..ERR SUI 7 ..2: SUI 030H MVI B,4 ;SHIFT AMOUN LXI B,12 ..X: JMP ..D ; ..3: CPI 'L' JRNZ ..4 LXI B,15 ;L JMPR ..Y ..4: CPI 'E' JRNZ ..5 LXI B,17 ;E JMPR ..Y ,   ** ; ** IIIIII CCCCCC EEEEEEEEEE ** ; ** II CC CC EE ** ; ** II CC e Fault / ; DEBUG MESSAGES M17: .ASCIS /Break on / .ASCIS /Memory / .ASCIS /Port / .ASCIS /read/ .ASCIS /write/ M22: FDH BTYPE == 0FEH MISC == 0FFH IOBYTE == 3 .PAGE ; ************* ; * RAM CELLS * ; ************* .LOC ICERAM .BLKB 3************ MESS6: .WORD 8A0DH MESSAGES: ; @ 0D000H M0: .ASCIS /What?/ M1: .ASCIS /Al's ICEBOX Version 1.0/ M2: .ASC0H MESSAGES== 0D002H MESS6 == 0D000H CTRLC == 'C'&1FH CTRLX == 'X'&1FH CR == 0DH LF == 0AH ARROW == 5EH DEL == 7FH BS = EE ** ; ** II CC EEEEEE ** ; ** II CC EE ** ; ** II CC CC E.ASCIS / at / M23: .ASCIS /Go/ .ASCIS /Arcade/ .ASCIS /Commercial/ .ASCIS [^H0D] 'SZVC A B C D E H L IX IY SP2 STACK == . NMIJP: .BLKW 1 DMA: .BLKB 2 ; DMA ADDRESS FOR DISC TRK: .BLKB 1 ; TRACK NUMBER FOR DLAYED SEEK IFF: .BLKB 1 ; IS [^h0d] [^h0a] /%/ M3: .ASCIS /Boot / .ASCIS [8] [^H20] [8] M5: .ASCIS [13] [10] /-/ M6: .WORD 8A0DH M7: .ASCIS /Memory = 8 DELCHAR == 5FH SPACE == 20H COMMA == 02CH SLASH == 02FH PERIOD == 02EH ; INPUT-OUTPUT EQUATES CRTD == 0E0H CRTS == CE ** ; ** IIIIII CCCCCC EEEEEEEEEE ** ; ** ** ; *************************** PC ' M27: .ASCIS / Debug/ .ASCIS /Modify Register / M29: .ASCIS /Modify Port / .END INTRRUPT FLIP FLOP EIDI: .BLKB 1 ; ENABLE OR DISABLE JUMPER: .BLKB 1 ; FOR JUMP INSTRUCTION PCSAVE: .BLKW 1 ; SAVE BUFFER FOR/ M8: .ASCIS /Dump / M9: .ASCIS [13][10] /-/ ; DISC ERROR MESSAGES M10: .ASCIS /Disc not ready / .ASCIS /Seek Error / .RTD+1 LPTD == 0E2H LPTS == LPTD+1 DATA == 0E4H SECTOR == DATA+1 TRACK == DATA+2 COMMAND == DATA+3 STATUS == COMMAND SELE*********** ; * EQUATES * ; *********** .PRNTX "Z80 ICEBOX - HEAD OF ASSEMBLY" REGSS =\ "1=ASSEMBLE REGISTER MODIFY CODE,.pabs .phex .xlink .xsym .title "Z80 IceBox version 1.0" ; ************************************** ; **  USER REGISTERS SPSAVE: .BLKW 1 ; SAVE BUFFER FOR USER STACK .BLKW 4 IYSAVE: .BLKW 1 IXSAVE: .BLKW 1 .BLKW 3 AFSAVE: .BLASCIS /CRC Error / M13: .ASCIS /Record not found / M14: .ASCIS /Lost Data / M15: .ASCIS /Write Protected / M16: .ASCIS /WritCT == 0F1H FIFO == 0F2H CENABLE == 0F0H EXTL == 0F8H EXTH == 0F9H WPROTL == 0FAH WPROTH == 0FBH BADRH == 0FCH BADRL == 0 .LOC 0D000H ; * ICE MESSAGES FOR LOC 0D000H * CR = 0DH LF = 0AH SPACE = 20H BS = 8H ; ************ ; * MESSAGES * ; 0=DROP" MEMSS =\ "1=ASSEMBLE MEMORY & PORT MODIFY,0=DROP" R2708 =\ "1=2708 0=2716 VERSION" ICERAM == 0FC00H ICEROM == 0F00- KW 1 MONSP: .BLKW 1 ; MONITOR STACK POINTER SAVE DMPLOW: .BLKW 1 ; LIMITS FOR DUMP DMPHI: .BLKW 1 DMPSTA: .BLKB 1 ;DUMP STAT MVI C,LPTS ..LPT: INP B BIT 7,B ; DATA SET READY JRZ ..LPT UART: INP B BIT 0,B JRZ UART DCR C OUTP A POP B REY - A -> CHARACTER ; ** ; ** EXIT - EVERYTHING RESTORED ; ** ; ***************************************** PUNCH: CONOUT:********************************* PRINTM: LXI H,MESSAGES ORA A JRZ CONOMSG PUSH B MOV B,A ..LOOP: MOV A,M ANI 80H  LXI B,CRTS+0200H LXI D,0AE40H ; INITIALIZATION DATA LXI H,4E27H ; *16\8 BITS\NO PARITY\1STOP ..ILP1: ;INP A ; RRC ; JSH X PUSH Y EXAF PUSH PSW EXX PUSH B PUSH D PUSH H ; LSPD MONSP LXI SP,STACK LDAI ; CHECK INTERUPTS MVI A,US BYTE BTSAVE: .BLKB 1 ; BREAK TYPE SAVE KEYBUF: .BLKB 80 ; KEYBOARD I/O BUFFER .LOC ICERAM+128 BUFFER: .BLKB 128 ; DISC ST .PAGE ; ******************************************* ; ** ; ** NON MASKABLE INTERUPT - BREAKPOINT PROCESSING ; ** ; * MOV A,C CRTOUT: PUSH B MVI C,CRTS JMPR UART ; ************************************************** ; ** ; ** LPTOINX H JRZ ..LOOP DJNZ ..LOOP POP B ; *********************************** ; ** ; ** CONOMSG - PRINT MESSAGE ON CONSOLRNC ..ILP1 ..ILP2: OUTP D OUTP E OUTP H OUTP L DCR C ; ==CRTD INP A ; FLUSH THE DATA INP A MVI C,LPTS DJNZ ..IL0FFH ; ENABLED JPE ..NMI2 XRA A ..NMI2: STA IFF LXI H,NMIJP PCHL .PAGE LIST: LDA IOBYTE ANI 0C0H CPI 80H MOV AECTOR BUFFER .PAGE ; ****************** ; * INITIALIZATION * ; ****************** .LOC ICEROM JMP ICE ;GET PC TO F003 ****************************************** .LOC ICEROM+66H ; NMI POINT JMP NMI ; CHANGE TOP ADDRESS BITS TO REAL ADDR NMI: UT - SEND CHARACTER TO PRINTER, EAT CR'S ; ** WAIT FOR DATASET READY. ; ** ; ** ENTRY - A -> CHARACTER ; ** ; ** EXIT -E ; ** ; ** ENTRY - HL -> STRING ENDD BY BYTE WITH SIGN BIT ON ; ** ; ** EXIT - A -> ZORKED ; **H -> ZORKED ; ** ;P1 ; INIT THE RAM LXI H,STACK SHLD MONSP ; SET UP REASONABLE MONITOR STACK MVI A,1 ; ICE SIGNON CALL PRINTM JMP M,C JNZ PUNCH JMP LPTOUT ; ****************************************** ; ** ; ** PRINTM - PRINT MESSAGE FROM A POOL OF MICE: LXI SP,STACK XRA A ; ZERO ALL THE MAPS MVI B,5 LXI H,DMPLOW ..CLR: MOV M,A INX H DJNZ ..CLR LXI B,EXTL+800H ; STA AFSAVE IN FIFO STA PCSAVE+1 IN FIFO STA PCSAVE IN FIFO ; SHOULD BE A AGAIN INX SP INX SP LSPD SPSAVE LXI S ALL RESTORED ; ** ; ************************************************** LPTOUT: CPI 0DH ; NO CARRIAGE RETURN RZ PUSH B  *********************************** CONOMSG:MOV A,M CALL CRTOUT BIT 7,A ; TERMINATED BY BIT 7 ON RNZ INX H JMPR CONOAINLOOP .PAGE ; ***************************************** ; ** ; ** CRTOUT - SEND A CHARACTER TO THE CRT ; ** ; ** ENTRESSAGES ; ** ; ** ENTRY - A -> NUMBER OF THE MESSAGE ; ** ; ** EXIT - A -> ZORKED ; ** H -> ZORKED ; ** ; *********AND TURN ON STUFF ..INIT: OUTP A INR C JRNZ ..INIT ; TURN ON THE MESSAGES INR A OUT CENABLE ; INITIALIZE THE USARTSP,AFSAVE+2 ;PUSH EVERYTHING PUSH PSW XRA A OUT BTYPE INR A ; WRITE PROTECT OUT MISC PUSH B PUSH D PUSH H PU. MSG .PAGE ; ********************************* ; ** ; ** GETCHR - GET A CHARACTER FROM THE CRT AND ; ** FORCE TO UPPER CAS - PERFORMS CP\M BOOTSTRAP ; ** READS TRACK 0-SECTOR 1 THRU TRACK 1-SECTOR 20 ; ** INTO MEMORY STARTING AT LOAD POINT DETERMIN ARCADE MODE CPI 'C' JRZ COMERCIAL ; C = SET COMMERCIAL MODE CPI 'D' JZ DEBUGE ; D = DEBUG MODE JMPR ERROR AREMORY ; AND DO MISC STUFF PUSH X POP D LXI H,WBOOT SHLD 1 ; JMP ADDR MVI A,0C3H STA 0 STA 5 LXI H,806H DAD D  A,0FFH ; TRUE FOR CP\M RET ; *************************** ; ** INPUT ROUTINE FOR DEBUG ; *************************** INUT COMMAND ..LP3: EI HLT INI JNZ ..LP3 DCR E ; NUMBER OF SECTORS TO GO MVI B,128 JNZ ..LP3 ; FORCE INTERUPT MVI E ; ** ; ** EXIT - A -> CHARACTER ; ** ; ********************************* GETCHR: CALL CRTIN CPI 060H ;IS CHAR LOWER CED ; ** BY LOCATION 2 OF TRACK 0-SECTOR 2 MINUS 3 TIMES 256 ; ** ; ************************************ WBOOT: .BYTE 3EH BOCADESET: ; SET MEMORY MAP\WRITE PROTECT MVI A,24 LXI D,13H LXI H,0FFFFH JMPR PREBUG COMERCIAL: MVI A,25 LXI  SHLD 6 LXI H,1500H DAD D LXI D,CPMJPS XCHG LXI B,15*3 LDIR ; COLD OR WARM EXAF ORA A JRNZ BDONE ; COLD LCHAR: CALL GETCHR CPI CTRLX RNZ JMP DEBUG .PAGE ; *********************** ; ** ; ** UPPER LEVEL ICE ; ** ; ******A,#11010000B ; IMMEDIATE OUT COMMAND ..LP4: CALL DSTAT JRNZ ..LP4 IN TRACK CPI #1 JRZ ..LP5 MVI A,1 STA TRK CMAASE??? RM ;RETURN IF CHAR OK ANI 05FH ;FORCE IT TO UPPER CASE RET CONIN: READER: CRTIN: CALL CRTSTAT JRZ CRTIN IOT: .BYTE 0AFH EXAF LXI SP,STACK IM0 ; 8080 MODE MVI A,4 OUT SELECT MVI A,5 OUT 0EH CALL HOME MVI C,2 CALL D,050F0H LXI H,0FFFFH ; JMPR PREBUG PREBUG: ; SET WRITE PROTECT AND EXTERNAL MAP MVI C,EXTL OUTP E INR C OUTP  :18F00000C303F03120FCAF06052142FC772310FC01F808ED790C20FBA8 :18F018003CD3F001E1021140AE21274EED51ED59ED61ED690DED78EDE1 :18F***************** ERROR: MVI A,0 ; PRINT 'WHAT?' CALL PRINTM MAINLOOP: ; PROMPT USER MVI A,2 ; % CALL PRINTM CALL GET OUT SECTOR PUSH H CALL SEEK POP H ORA A JNZ MAINLOOP MVI E,18 ; MORE SECTORS JMPR ..LP2 ..LP5: PUSH X POP H N CRTD ANI 7FH CPI 5FH RNZ MVI A,7FH RET LPTIN: CALL LPTSTAT JRZ LPTIN IN LPTD RET CONSTAT: CRTSTAT: SETSEC LXI B,BUFFER CALL SETDMA CALL READ ORA A JNZ MAINLOOP LDA BUFFER+2 SBI 3 LXI H,2900H MVI L,0 MOV H,AD INR C OUTP L INR C OUTP H CALL PRINTM JMP DEBUGE .PAGE ; ************************************ ; ** ; ** BOOT03000780EE310EF2120FC2240FC3E01CDB5F0C30FF179C50EE1180C :18F048000CFE0DC8C50EE3ED40CB7828FAED40CB4028FA0DED79C1C932 :18F06600CCHR CPI CTRLC JRZ BOOT ; ^C = BOOT CP\M CPI CTRLX JRZ MAINLOOP ; ^X = KILL LINE CPI 'A' JRZ ARCADESET ; A = SET LXI B,1500H ..LP6: MOV A,M CMA MOV M,A INX H DCR C JNZ ..LP6 DJNZ ..LP6 ; DONE READING IN CPM NOW FIX JUMPS IN MPUSH B MVI C,CRTS JMPR UARTSTAT LPTSTAT: PUSH B MVI C,LPTS UARTSTAT: INP A POP B ANI 2 ; DATA READY? RZ MVI PUSH H POP X ; SUPER BOOT MVI E,25 ; NUMBER OF SCTORS ..LP2: LXI B,128*256+DATA MVI A,#10011100B ; MULTIPLE READS O/ 369F0323EFCDBF23229FCDBF23228FCDBF23333ED7B2AFC02 :18F07E003140FCF5AFD3FE3CD3FFC5D5E5DDE5FDE508F5D9C5D5E531E1 :18F0960020FCED5LD DMA MVI B,128 ..FLP: MOV A,M CMA MOV M,A INX H DJNZ ..FLP IN STATUS ; CHECK UP CMA ANI 9CH RZ DCR D JRK RET ; SETSEC - SET SECTOR TO VALUE IN C REG SETSEC: MOV A,C CMA OUT SECTOR RET ; SET DISC NUMBER TO VALUCHL ;RETRY SEEKERROR: BIT 4,A MVI B,11 ; SEEK ERROR JRNZ WERROR MVI B,12 ; CRC ERROR JMPR WERROR DSTAT: IN ST20E02CD21F20180FCBF :18F16E00CD2CF2CD31F2B7C20FF13A82FCDE032100292E0067E5DDE11A :18F186001E1901E4803E63D3E7FB76EDA2C28FF11D068,A JRNZ WERROR MVI B,13 ; RECORD NOT FOUND BIT 4,A JRNZ WERROR MVI B,12 ; CRC ERROR BIT 3,A JRNZ WERROR MVI B,1473EFFEAA0F0AF3225FC2120FCE93A0300E6C0FE80C2 :18F0AE0079C243F0C349F02102D0B7280BC5477EE6802328FA10F8C105 :18F0C6007ECD44F0CB7FCRNZ ..READ1 JMP WRER ; WRITE A SECTOR. RETURN 0=NO ERRORS, 1=ERROR WRITE: CALL SEEK ORA A RNZ LHLD DMA LXI D,BUFE IN C REGISTER (0-3) SELDSK: MOV A,C SET 2,A OUT SELECT RET ; SET BUFFER ADDRESS TO VALUE IN BC REG PAIR SETDMA: SBATUS CMA BIT 7,A JRNZ NOTRDY BIT 0,A RET NOTRDY: MVI A,10 ; NOT READY CALL PRINTM CPMJPS: JMP MAINLOOP JMXI H,0 SHLD 3 ; ZAP IOBYTE AND DISC MVI A,3 CALL PRINTM BDONE: LDA 4 ANI 1 MOV C,A PCIX .PAGE ; **************** ;LOST DATA WERROR: MOV A,B CALL PRINTM MVI A,1 RET SEEK: MVI D,3 ; NUMBER OF RETRYS LXI H,..SK2 IN TRACK MVI 02318F6CDD9F0FE60F8E65FC9CDF0F028FBAE :18F0DE00DBE0E67FFE5FC03E7FC9CDF5F028FBDBE2C9C50EE11803C568 :18F0F6000EE3ED78C1E602C83EFFER MVI B,128 ..WLP0: MOV A,M INX H CMA STAX D INX D DJNZ ..WLP0 MVI D,3 ..ELP: LXI H,BUFFER LXI B,8000H+DATA CD DMA RET ; READ A SECTOR RETURN 0=NO ERRORS 1=ERROR READ: CALL SEEK ORA A RNZ MVI D,4 ..READ1: LHLD DMA LXI BP WBOOT JMP CONSTAT JMP CONIN JMP CONOUT JMP LIST JMP PUNCH JMP READER JMP HOME JMP SELDSK JMP SETTRK JMP SE**** ; ** ; ** CP\M DISC ROUTINES ; ** ; ******************** ; HOME DRIVE - NO INPUTS HOME: XRA A STA TRK MVI D,3B,A LDA TRK CMA CMP B JRNZ ..SK2 XRA A RET ..SK2: LDA TRK CMA OUT DATA MVI A,#00011110B ; SEEK,HEAD LOAD, 10MFC9CDD0F0FE18C0C330F33E00CDB52C :18F10E00F03E02CDB5F0CDD0F0FE032839FE1828F0FE41280BFE43284F :18F1260011FE44CA24F318DC3E1811130 MVI A,#10101100B OUT COMMAND ..OLP: EI HLT OUTI JNZ ..OLP IN STATUS ; CHECK OPERATION CMA ANI 0FCH RZ DCR ,128*256+DATA MVI A,#10001100B ; READ COMMAND OUT COMMAND ..LOOP: EI HLT INI JNZ ..LOOP ; FIX COMPLEMENTED DATA LHTSEC JMP SETDMA JMP READ JMP WRITE .PAGE ; *********** ; ** DEBUG ** ; *********** DEBUGE: MVI A,27 CALL PRINTM  LXI H,. MVI A,#00001110B OUT COMMAND JMP SEEKWAIT ; SETTRK - SET TRACK TO VALUE IN C REG SETTRK: MOV A,C STA TS OUT COMMAND SEEKWAIT: CALL DSTAT JRNZ SEEKWAIT ANI 00011000B ; SEEK ERROR\CRC ERROR RZ DCR D JRZ SEEKERROR P021FFFF18083E1911F0502127 :18F13E00FFFF0EF8ED590CED510CED690CED61CDB5F0C324F33EAF0828 :18F156003120FCED463E04D3F13E05D30ECD0CFD JRNZ ..ELP WRER: BIT 7,A JNZ NOTRDY MVI B,15 ; WRITE PROTECTED BIT 6,A JRNZ WERROR MVI B,16 ; WRITE FAULT BIT 50 JMPR DEBUG DERROR: MVI A,0 CALL PRINTM DEBUG: LXI SP,STACK LXI H,DEBUG SHLD NMIJP MVI A,9 CALL PRINTM ..DB1: CALL I WRITE PROTECT OUT MISC ; 4 M1'S TO ..G LDA AFSAVE+1 JMP EIDI .PAGE ; ************ ; ** ; ** STEP ; ** ; ********RINTM CALL KEYBD CALL CONVRT ; GET ADDRESS TO ..G TO MOV H,B MOV L,C SHLD PCSAVE ;SAVE IN REGISTER AREA ..G2: LDA BLL APRNT ;CHECK IF IT'S PRINTABLE MOV M,A INX H MVI M,SLASH INX H ..P1A: MVI M,SPACE+080H PUSH B ;SAVE MEM LOCATION A,C CALL PRINTM ..BRK0: CALL INCHAR CPI 'R' JRNZ ..BK2 SET 3,B MVI A,20 ; READ JMPR ..BK3 ..BK2: CPI 'W' JRNZ .CALL DADDR ;PRINT ADDRESS ON TERMINAL LDA DMPSTA BIT 1,A ;ARE WE IN PORT COMMAND???? JRNZ ..M1 MVI A,5 ; READ A EXT BYNCHAR CPI 'B' JZ BREAK CPI 'G' JZ GO CPI 'D' JZ DUMP CPI 'A' JZ ASDUMP CPI 'Q' JZ MAINLOOP CPI 'X' JZ E**** STEP: LXI H,EXAMREGS SHLD NMIJP LHLD PCSAVE LXI B,BADRH+0A00H OUTP H INR C OUTP L INR C OUTP B ; SET BREATSAVE OUT BTYPE GO25: XRA A OUT SELECT ; DISABLE FLOPPY INTERUPTS LXI H,0C3F3H ; JP AND DI INSTRUCTIONS LDA IFF ; INTE LXI H,KEYBUF CALL CONOMSG ;PRINT MEM & CONTENTS CALL KEYBD ;READ ANY CHANGES LDAX D ..P2: CPI COMMA JRZ ..P4 ..P3: C.BRK0 SET 2,B MVI A,21 ..BK3: CALL PRINTM MOV A,B OUT BTYPE STA BTSAVE MVI A,22 ; ' AT ' CALL PRINTM CALL KEYBTE OUT MISC LDAX B ;READ FROM ..PORY LOCATION JMPR ..M2 ..M1: INP A ;READ FROM USER TYPED PORT # ..M2: CALL ASCII LDA XAMREGS .IFG REGSS,[ CPI 'R' JZ REGISTER ] .IFG MEMSS,[ CPI 'M' JZ MEMORY CPI 'P' JZ PORT ] CPI 'S' JZ STK TYPE JMP GO25 .PAGE ; ************** ; ** MEMORY ** ; ** & ** ; ** PORT ** ; ************** .IFG MEMSS,[ RUPTS? ORA A JRZ ..G3 SET 3,L ..G3: SHLD EIDI ; LOADS JUMPER TOO SSPD MONSP LXI SP,PCSAVE+4 POP H POP D POP B PI CR ;DONE???? JRNZ ..P5 ..P4: POP B LDA DMPSTA ANI 0FDH ;CLEAR OUT PORT BIT STA DMPSTA JMP DEBUG ..P5: CPI LF ;D CALL CONVRT MOV A,C OUT BADRL MOV A,B OUT BADRH JMP DEBUG .PAGE .IFG R2708,[.LOC ICEROM+800H] ; ********** ;DMPSTA ;CHECK IF ASCII BIT IS ON BIT 0,A ;PRINT BYTE IN ASCII?? JRZ ..P1A BIT 1,A ;IF IN PORT COMMAND, NO ASCII JRNZ .EP JMP ..DB1 .PAGE ; ****************** ; ** ; ** BREAKPOINT ; ** ; ****************** BREAK: MVI A,17 ; 'BREAK ON ' MEMORY: MVI A,7 ;"MEMORY " JMPR P0 PORT: LDA DMPSTA ;GET STATUS BYTE SET 1,A ;SET PORT COMMAND BIT STA DMPSTA MVI A, EXX POP PSW EXAF POP Y POP X POP H POP D POP B POP PSW LSPD SPSAVE ; DON'T CHANGE FLAGS MVI A,3 ; TURN ONADVANCE A LOCATION??? JRNZ ..P6 POP B INX B ;POINT AT NEXT LOC. JMPR ..P1 ..P6: CPI ARROW ;GO BACKWARDS???? JRNZ ..P ** ; ** GO ; ** ; ********** GO: MVI A,23 CALL PRINTM CALL INCHAR CPI 0DH ; CR JRZ ..G2 MVI A,22 ; AT CALL P.P1A MVI M,SPACE INX H MVI M,SLASH INX H MVI A,5 OUT MISC ; TURN ON THE EXT SHIT LDAX B ;GET DATA FROM MEMORY CA CALL PRINTM ..BRK1: CALL INCHAR CPI 'M' LXI B,200H+18 JRZ ..BRK2 CPI 'P' LXI B,100H+19 JRNZ ..BRK1 ..BRK2: MOV 29 ;"PORT" P0: CALL PRINTM CALL KEYBD ;READ ADDRESS CALL CONVRT ;MAKE IT BINARY ..P1: LXI H,KEYBUF MOV D,B MOV E,C 1 7 POP B DCX B ;DECREMENT PONITER JMPR ..P1 ..P7: CALL CONVRT LDA DMPSTA BIT 1,A ;IN PORT CO.MAND????? JRNZ ..M8 ACE INX H POP PSW ;GET AGAIN FOR ASCII VERSION CALL APRNT ;IS CHAR PRINTABLE??? ..6: STAX B ;PLACE IN ASCII CHAR INX B?? JRZ ..1A JNC DERROR JMPR ..1 ..1A: MOV A,1(X) ;GET LOWER ADDR BITS CMP C JNC DERROR ..1: MOV D,0(X) MOV A,1(X) OMSG CALL CRTSTAT ;ANYTHING TYPED??? CPI 0FFH ;KEYBOARD INTERUPT??? JRZ ..1 LXI H,MESS6 CALL CONOMSG POP D RET .ASCII EQUIVALENT ;*** ; **************************** DUMP: MVI A,8 ;"DUMP " CALL PRINTM CALL KEYBD ;READ UPPER & LOWER B LINE JMP DEBUG ; ; EXTRA DUMPER ROUTINES ; DFILL: PUSH B ;PUTS IN SPACES AS FILLER MVI B,3 ..DF1: MVI M,SPACE INX H MOV A,C ;BINARY OF LAST TWO DIGITS TYPED POP B ; GET BACK MEM LOCATION EXAF MVI A,4 OUT MISC EXAF STAX B ;PUT IN  MOV A,D CMP 2(X) ;AT UPPER LIMIT??? JRNZ ..7 MOV A,E CMP 3(X) ;ALL UPPER LIMIT BITS MATCH??? JRZ ..9 ..7: MOV A,E  ANI 0F0H ;START AT "XXX0" ADDR BOUNDRY MOV E,A ..2: CALL DLOAD ;SET BUFFER POINTERS CALL DADDR ;CONVRT "HL" TO ASCII M.1: POP H IN CRTD ;READ TO RESET STATUS JMP DEBUG DLOAD: LXI H,KEYBUF ;RESET POINTERS LXI B,KEYBUF+54 MVI A,SLASH SOUNDS CALL CONVRT LXI X,DMPLOW ;TEMP STORAGE MOV 0(X),B MOV 1(X),C LDAX D ; TEST FOR ONE INPUT CPI COMMA JRZ ..0  DJNZ ..DF1 POP B MVI A,SPACE STAX B INX B RET ; ; DADDR: LDA DMPSTA BIT 1,A ;IF IN PORT CMND, PRINT ONLY TWO NEW DATA PUSH B ;SAVE POINTER JMPR ..M9 ..M8: MOV A,C ;GET DATA USER TYPED POP B ;RESTORE PORT # IN 'C' OUTP A ;WRIT ANI 0FH ;MASK UPPER BITS CPI 0FH ;AT A LINE BOUNDARY??? JRNZ ..8 CALL DPRNT CALL DLOAD INX D CALL DADDR ;FILL INOV A,E ; ..3: CMP 1(X) ;ARE WE AT THE STARTING ADDRESS?? JRZ ..4 CALL DFILL ;PUT IN BLANKS INSTED INX D MOV A,E JMPRTAX B INX B RET APRNT: CPI 07FH ;CHECK IF CHAR IS PRINTABLE JRNC ..AP1 CPI 020H RNC ..AP1: MVI A,PERIOD RET  LXI H,7FH DAD B MOV B,H MOV A,L ORI 0FH MOV C,A JMPR ..0A ..0: INX D ;BUMP OVER TERMINATOR CALL CONVRT ..0A: MDIGITS JRNZ ..D1 MOV A,D ;CONVERT "DE" TO ASCII CALL ASCII ..D1: MOV A,E CALL ASCII MVI M,':' INX H MVI M,SPACE E DATA TO PORT PUSH B ..M9: LDAX D ;GET TERMINATOR JMPR ..P2 ] .PAGE ; *************************** ;*** ;*** DUMP RO ADDRESS JMPR ..4 ..8: INX D ;BUMP TO NEXT LOCATION JMPR ..4 ..9: MOV A,E ;DO WE HAVE TO FILL OUT THE LINE?? ANI 0FH C ..3 ; ..4: MVI A,5 OUT MISC LDAX D ; GET CONTENTS OF EXT ..PORY PUSH PSW CALL ASCII ;CONVRT TO 2-DIGIT HEX MVI M,SP; ; ASDUMP: LDA DMPSTA ;SET OR RESET BIT #1 BIT 0,A ;IS IT ZERO?? JRZ ..AD1 RES 0,A ;CLEAR IT JMPR ..AD2 ..AD1: SEOV 2(X),B ;SAVE UPPER BOUNDRY MOV 3(X),C ; MOV A,0(X) ;CHECK FOR VALID BOUNDARIES CMP B ;IS UPPER BOUND ACTUALLY HIGHER? INX H RET ; ; DPRNT: MVI A,SLASH+080H ;PRINTS LINE ON TERMINAL STAX B PUSH D ;SAVE ..P LOC LXI H,KEYBUF CALL CONUTINE - ;*** ;*** REGS - DE -> POINTS AT ..PORY ;*** HL -> OUTPUT BUFFER FOR 2-DIGIT HEX EQUIVALENTS ;*** BC -> " " " PI 0FH ;AT THE END OF THE LINE JRZ ..10 CALL DFILL ;FILL IN WITH BLANKS INX D JMPR ..9 ..10: CALL DPRNT ;PRINT OUT LAST2 T 0,A ..AD2: STA DMPSTA ;RESET THE BYTE JMP DEBUG .PAGE ; ******************** ; ** ; ** REGISTER DUMP ; ** ; *****CH THE WHOLE LINE JRNZ ..5 JMP DEBUG ; ..5: CPI COMMA ;ALLOW THESE THRU JRZ ..DIG CPI '''' JRZ ..DIG CPI 030H ;BEL KEYBD: LXI D,KEYBUF ;POINT AT STRING BUFFER MVI B,0 ;CLEAR CHARACTER COUNTER ..1: CALL GETCHR CPI DELCHAR ; BACKSPACE ..?T CPI 03AH ;IS CHAR 0-9???? JRC ..2 CPI 'G' ;LEGAL CHARACTER??? JRNC ..ERR SUI 7 ..2: SUI 030H MVI B,4 ;SHIFT AMOUNX D INX D RET DBYTE: MVI M,SPACE INX H JMP ASCII WORD: MVI M,SPACE INX H MOV A,D CALL ASCII MOV A,E JMP DIGITS BEFORE TERMINATOR ;*** ARE CONVERTED ;*** ;*** ENTRY - DE -> POINTS AT ASCII INPUT STRING ;*** ;*** EXIT - A -> BLAS*************** EXAMREGS: ;DUMP ALL THE REGISTERS MVI A,26 CALL PRINTM LXI D,KEYBUF LHLD AFSAVE BIT 7,L CALL PM OW A ASCII "0"??? JRC ..1 CPI 'Z' ;HIGHER THAN AN "Z"??? JRNC ..1 CPI 03AH JRC ..DIG ;CHAR IS A "0-9" CPI 'A' JRNC?? JRNZ ..2 MOV A,B ;ARE WE AT CHAR DELETE LIMIT??? ORA A JRZ ..1 ;YUP.... PUSH D MVI A,4 ; CALL PRT ..3: SLAR L ;STUFF 0 INTO LOW BITS, HIGH INTO CARRY RALR H ;CARRY ITTO LOW BIT, SCREW THE HIGH BIT DJNZ ..3 ORA L ;PLACASCII .PAGE ; ********************************************************** ;*** ;*** KEYBD - READ INPUT FOR CONSOLE TERMINATED ;*** - BC -> BINARY EQUIV. OF LAST FOUR DIGITS ;*** - HL -> SAVED & RESTORED ;*** - DE -> UPDATED TO CONVERSION TERMINATO BIT 6,L CALL PM BIT 2,L CALL PM BIT 0,L CALL PM XCHG MOV A,D CALL DBYTE LXI D,AFSAVE-1 MVI B,6 ..DZ: LDAX  ..DIG ;CHAR IS "A-Z" JMPR ..1 ..DIG: STAX D ;SAVE THE CHARACTER TYPED INX D ;BUMP TO NEXT CELL CALL CRTOUT ;ECHO IT IN TINTM POP D ;RESTORE POINTER DCX D DCR B ;CHECK CHAR COUNTER JMPR ..1 ; ..2: CPI CR ;???? JRZ ..3 CPI LF JRZ E I THE CURRENT CHAR MOV L,A INX D ;POINT AT NEXT CHAR JMPR ..1 ..OUT: MOV B,H MOV C,L POP H RET ..ERR: POP H L ;*** SAVE & ECHO CHARACTERS 0-9, A-F & VALID ;*** TERMINATORS. IGNORES ALL OTHER CHARACTERS ;*** ;*** EXIT - DE -> POINTS R ;*** ; ***************************************************** CONVRT: PUSH H LXI H,0 ;CLEAR DATA REG PAIR ..1: LDAX D ;GED DCX D CALL DBYTE DJNZ ..DZ LDED IXSAVE CALL WORD LDED IYSAVE CALL WORD LDED SPSAVE CALL WORD LDED PCSAVE ERMINAL INR B MOV A,B CPI 24 ;AT MAX # OF CHARACTERS JRNZ ..1 ;GET MORE JMP DERROR ..XIT: LXI D,KEYBUF RET .PAGE ..3 CPI ARROW JRNZ ..4 ..3: STAX D ;SAVE CHARACTER MVI A,6 ; CALL PRINTM JMPR ..XIT ; ..4: CPI CTRLX ;SCRAT POP H JMP DERROR .PAGE ; **************************************************** ;*** ;*** ASCII - CONVERT BINARY TO ASAT INPUT STRING BUFFER ;*** A -> BLASTED ;*** B -> BLASTED ;*** ; **********************************************************T CHAR TO CONVERT CPI CR ;CHECK FOR TERMINATOR JRZ ..OUT CPI LF JRZ ..OUT CPI ARROW JRZ ..OUT CPI COMMA JRZ ..OU CALL WORD DCX H SET 7,M LXI H,KEYBUF CALL CONOMSG JMP DEBUG PM: MVI A,'+' JRNZ ..SKIP MVI A,SPACE ..SKIP: STA ; ***************************************************** ;*** ;*** CONVRT - CONVERT ASCII INPUT TO HEX BINARY ;*** LAST FOUR 3 CII ;*** ;*** ENTRY - A -> DATA TO CONVERT ;*** - HL -> WHERE TO STUFF CONVERTED DATA ;*** ;*** EXIT - A -> BLASTED ;*** -D ;GET NEXT CHAR CPI 'C' JMPR ..Q ..10: CPI 'A' ;DUMP ACCUMULATOR JNZ DERROR ..10A: INX B INX B JMPR ..S ; ; ; DU LXI B,12 ..X: JMP ..D ; ..3: LXI B,15 ;POINT TO SAVE AREA CPI 'L' ;WANT REG 'L' ?? JRZ ..S ; INX B INX B CPI 'E' 0C28FF13E2FE6 :18F19E00D3E7CDE8F220FBDBE6FEFE28153E013224FC2FD3E5E5CDB603 :18F1B600F2E1B7C20FF11E1218C8DDE5E10100157E2F77230DC***** REGISTER: MVI A,28 ;"MODIFY REGISTER" CALL PRINTM CALL KEYBD ;READ WHAT REG(S) ARE TO BE MODIFIED LXI H,KEYBUF+30 .END  HL -> UPDATED TO NEXT AVAILABLE LOCATION ;*** ; **************************************************** ASCII: PUSH PSW ANI 0MP SINGLE REGISTER ; ..Q: JRNC ..D ;DUMP DOUBLE REG ..S: DADX B ;POINT 'IX' AT REGISTER IN SAVE SPACE MOV A,1(X) ;READ USER;WANT 'E' REG??? JRZ ..S ; INX B INX B CPI 'C' JRZ ..S ; INX B INX B CPI 'F' JRZ ..S ; ; ..7: LXI B,16 ;P2C6F15F :18F1CE0010F6DDE5D12153F12201003EC3320000320500210608192234 :18F1E60006002100151911F7F2EB012D00EDB008B7200B2100002203D ;SKIP OVE INPUT SECTION LXI X,PCSAVE ;POINT AT REG SAVE AREA LDAX D MVI M,SPACE INX H CPI 'S' ;"SP"??? JRNZ ..1 L DCR C F1CB C2 F1C6 JNZ ..LP6 F1CE 10F6 DJNZ ..LP6 F0H ;MASK OUT LOW BITS CALL ..SFT CALL ..1 ;MAKE ACCUM ..II MOV M,A ;SAVE IT IN BUFFER INX H ;BUMP POINTER POP PSW ;NO REGISTER CONTENTS CALL ASCII CALL RPRNT MOV 1(X),C ;CHANGE TO NEW CONTENTS JMP DEBUG ; ..D: DADX B MOV A,1(X) CALOINT TO SAVE AREA CPI 'H' JRNZ ..8 INX D LDAX D ;GET NEXT CHAR CPI 'L' JMPR ..Q ..8: INX B INX B CPI 'C :18F1FE00003E03CDB5F03A0400E6014FDDE9AF3224FC16032112F23E8F :18F21600F1D3E7C3D2F2793224FCC9792FD3E5C979CBD7D3F1C9ED4319 :18XI B,2 ;PUT IN OFSET TO REGISTER SAVE LOC. JMPR ..X ..1: CPI 'P' ;"PC"??? JRNZ ..2 LXI B,0 JMPR ..X ..2: CPI 'I' ;"IX  ; DONE READING IN CPM NOW FIX JUMPS IN MEMORY ; AND DO MISC STUFF F1D0 DDE5 PUW DO LOW 4 BITS ANI 0FH CALL ..1 MOV M,A INX H RET ..1: CPI 10 JRC ..2 ADI 7 ..2: ADI 030H RET ..SFT: RARL ASCII MOV A,0(X) CALL ASCII CALL RPRNT MOV 1(X),B ;CHANGE TO NEW DATA MOV 0(X),C JMP DEBUG RPRNT: MVI M,SPACE+80HD' JRNZ ..9 INX D LDAX D ;GET NEXT CHAR CPI 'E' JMPR ..Q ..9: INX B INX B CPI 'B' JRNZ ..10 INX D LDAX F22E0022FCC9CDB6F2B7C016042A22FC01E4803E73D3E7FB76EDA2C3 :18F24600C242F22A22FC06807E2F772310FADBE72FE69CC81520DBC38D :18F25E00OR IY"????? JRNZ ..3 INX D LDAX D ;.. NEXT DIGIT CPI 'X' JRNZ ..2A LXI B,14 JMPR ..X ..2A: CPI 'Y' JNZ DERROR SH X F1D2 D1 POP D F1D3 21 F153 LXI H,WBOOT F1D6 22 0001  RAR RAR RAR RET .IFG REGSS,[ ;************************** ;** ;** MODIFY REGISTERS ;** ;********************* LXI H,KEYBUF+30 CALL CONOMSG CALL KEYBD LDAX D CPI CR JRZ ..1 CALL CONVRT RET ..1: POP B JMP DEBUG ; ] 4 90F2CDB6F2B7C02A22FC1180FC06807E232F121310F91603B8 :18F276002180FC01E4803E53D3E7FB76EDA3C280F2DBE72FE6FCC8154E :18F28E0020E6CB TDL Z80 CP/M DISK ASSEMBLER VERSION 2.21 PAGE 12 Z80 IceBox version 1.0 XAF F1F6 B7 ORA A F1F7 200B JRNZ BDONE ; COLD  CMA F223 D3E5 OUT SECTOR F225 C9 RET 1DE 32 0005 STA 5 F1E1 21 0806 LXI H,806H F1E4 19 DAD D OUT COMMAND F219 C3 F2D2 JMP SEEKWAIT 7FC2F2F2060FCB7720140610CB6F200E060DCB672004 :18F2A60008060CCB5F2002060E78CDB5F03E01C9160321C8F2DBE60629 :18F2BE00073A24FC2FB8 ; ******************** ; ** ; ** CP\M DISC ROUTINES  F1F9 21 0000 LXI H,0 F1FC 22 0003 SHLD 3 ; ZAP IOBYTE AND DISC F1FF 3E ; SET DISC NUMBER TO VALUE IN C REGISTER (0-3)  F1E5 22 0006 SHLD 6 F1E8 21 1500 LXI H,1500H F1EB 19 DA ; SETTRK - SET TRACK TO VALUE IN C REG F21C 79 SETTRK: MOV A,C F21D 32 FC24 2002AFC93A24FC2FD3E43EE1D3E7CDE8F22076 :18F2D600FBE618C8152801E9CB67060B20CB060C18C7DBE72FCB7F20BE :18F2EE0003CB47C93E0ACDB5F0 ; ** ; ******************** ; HOME DRIVE - NO INPUTS F20C03 MVI A,3 F201 CD F0B5 CALL PRINTM F204 3A 0004 BDONE: LDA 4 F2 F226 79 SELDSK: MOV A,C F227 CBD7 SET 2,A F229 D3F1 OUT D D F1EC 11 F2F7 LXI D,CPMJPS F1EF EB XCHG F1F0 01 002D  STA TRK F220 C9 RET C30FF1C353F1C3F0F0C3D9F0C343F081 :18F30600C3A7F0C343F0C3D9F0C30CF2C326F2C31CF2C321F2C32CF2EF :18F31E00C331F2C360F23E1BCDB5F018 AF HOME: XRA A F20D 32 FC24 STA TRK F210 1603 MVI D,3 07 E601 ANI 1 F209 4F MOV C,A F20A DDE9 PCIX  SELECT F22B C9 RET ; SET BUFFER ADDRESS T LXI B,15*3 F1F3 EDB0 LDIR ; COLD OR WARM F1F5 08 E ; SETSEC - SET SECTOR TO VALUE IN C REG F221 79 SETSEC: MOV A,C F222 2F  SHLD 1 ; JMP ADDR F1D9 3EC3 MVI A,0C3H F1DB 32 0000 STA 0 F F212 21 F212 LXI H,. F215 3EF1 MVI A,#00001110B F217 D3E7 5 O VALUE IN BC REG PAIR F22C ED43 FC22 SETDMA: SBCD DMA F230 C9 R ; WRITE A SECTOR. RETURN 0=NO ERRORS, 1= ERROR F260 CD F2B6 WRITE: CALL S CMA F250 77 MOV M,A F251 23 INX H F252 10FA  ANI 0FCH F28C C8 RZ F28D 15 DCR D F28E 20E6  OUT COMMAND F242 FB ..LOOP: EI F243 76 HLT F244 EDA2  MVI D,3 F276 21 FC80 ..ELP: LXI H,BUFFER F279 01 80E4 LXI B,8000H+DATA ET ; READ A SECTOR RETURN 0=NO ERRORS 1=ERR EEK F263 B7 ORA A F264 C0 RNZ F265 2A FC22 LHLD  DJNZ ..FLP F254 DBE7 IN STATUS ; CHECK UP F256 2F CMA F257 E6 JRNZ ..ELP F290 CB7F WRER: BIT 7,A F292 C2 F2F2 JNZ NOTRDY F INI F246 C2 F242 JNZ ..LOOP ; FIX COMPLEMENTED DATA TDL Z80 CP/ F27C 3E53 MVI A,#10101100B F27E D3E7 OUT COMMAND F280 FB .OR F231 CD F2B6 READ: CALL SEEK F234 B7 ORA A F235 C0 RNZ DMA F268 11 FC80 LXI D,BUFFER F26B 0680 MVI B,128 F26D 7E 9C ANI 9CH F259 C8 RZ F25A 15 DCR D F25B 295 060F MVI B,15 ; WRITE PROTECTED F297 CB77 BIT 6,A F299 2014 M DISK ASSEMBLER VERSION 2.21 PAGE 13 Z80 IceBox version 1.0 F249 2A FC22 LHL.OLP: EI F281 76 HLT F282 EDA3 OUTI F284 C2 F280 JNZ .. F236 1604 MVI D,4 F238 2A FC22 ..READ1: LHLD DMA F23B 01 80E4 ..WLP0: MOV A,M F26E 23 INX H F26F 2F CMA F270 12 20DB JRNZ ..READ1 F25D C3 F290 JMP WRER  JRNZ WERROR F29B 0610 MVI B,16 ; WRITE FAULT F29D CB6F BIT D DMA F24C 0680 MVI B,128 F24E 7E ..FLP: MOV A,M F24F 2F OLP F287 DBE7 IN STATUS ; CHECK OPERATION F289 2F CMA F28A E6FC  LXI B,128*256+DATA F23E 3E73 MVI A,#10001100B ; READ COMMAND F240 D3E7  STAX D F271 13 INX D F272 10F9 DJNZ ..WLP0 F274 1603 6  5,A F29F 200E JRNZ WERROR F2A1 060D MVI B,13 ; RECORD NOT FOUND F ANI 00011000B ; SEEK ERROR\CRC ERROR F2D9 C8 RZ 2 F2C6 AF XRA A F2C7 C9 RET F2C8 3A FC24 ..SK2: LDA TRK M DISK ASSEMBLER VERSION 2.21 PAGE 15 Z80 IceBox version 1.0 F2FA  F2B3 3E01 MVI A,1 F2B5 C9 RET  F2E8 DBE7 DSTAT: IN STATUS F2EA 2F CMA F2EB CB7F 2A3 CB67 BIT 4,A F2A5 2008 JRNZ WERROR TDL Z80 CP/M DISK ASSEMBLER F2DA 15 DCR D F2DB 2801 JRZ SEEKERROR F2DD E9  F2CB 2F CMA F2CC D3E4 OUT DATA F2CE 3EE1 MVI A,#00 C3 F153 JMP WBOOT F2FD C3 F0F0 JMP CONSTAT F300 C3 F0D9 JMP C F2B6 1603 SEEK: MVI D,3 ; NUMBER OF RETRYS F2B8 21 F2C8 LXI H,..SK2 F2 BIT 7,A F2ED 2003 JRNZ NOTRDY F2EF CB47 BIT 0,A F2F1 C9  VERSION 2.21 PAGE 14 Z80 IceBox version 1.0 F2A7 060C MVI B,12 ; CPCHL ;RETRY F2DE SEEKERROR: F2DE CB67 BIT 4,011110B ; SEEK,HEAD LOAD , 10MS F2D0 D3E7 OUT COMMAND ONIN F303 C3 F043 JMP CONOUT F306 C3 F0A7 JMP LIST F309 C3 F043 BB DBE6 IN TRACK F2BD 0607 MVI B,A F2BF 3A FC24 LDA T RET F2F2 3E0A NOTRDY: MVI A,10 ; NOT RC ERROR F2A9 CB5F BIT 3,A F2AB 2002 JRNZ WERROR F2AD 060E A F2E0 060B MVI B,11 ; SEEK ERROR F2E2 20CB JRNZ WERROR F2E4 060C F2D2 CD F2E8 SEEKWAIT: CALL DSTAT F2D5 20FB JRNZ SEEKWAIT F2D7 E618  JMP PUNCH F30C C3 F0D9 JMP READER F30F C3 F20C JMP HOME F312 C3 FRK F2C2 2F CMA F2C3 B8 CMP B F2C4 2002 JRNZ ..SKREADY F2F4 CD F0B5 CALL PRINTM F2F7 C3 F10F CPMJPS: JMP MAINLOOP TDL Z80 CP/ MVI B,14 ;LOST DATA F2AF 78 WERROR: MOV A,B F2B0 CD F0B5 CALL PRINTM  MVI B,12 ; CRC ERROR F2E6 18C7 JMPR WERROR 7 226 JMP SELDSK F315 C3 F21C JMP SETTRK F318 C3 F221 JMP SETSEC  .IFG REGSS,[ F35F FE52 CPI 'R' F361 CA F70B JZ F343 CA F376 JZ BREAK F346 FE47 CPI 'G' F348 CA F3C2 JZ  REGISTER ] .IFG MEMSS,[ F364 FE4D CPI 'CD F0B5 CALL PRINTM F329 1805 JMPR DEBUG F32B 3E00 DERROR: MVI A,0 F7 :18F3F60040FC312CFCE1D1C1D9F108FDE1DDE1E1D1C1F1ED7B2AFC3E59 :18F40E0003D3FF3A3FFCC326FC21DDF52220FC2A28FC01FC0AED610CD7 :1 F31B C3 F22C JMP SETDMA F31E C3 F231 JMP READ F321 C3 F260 J053E00CDB5F03120FC2130F3B3 :18F336002220FC3E09CDB5F0CD01F1FE42CA76F3FE47CAC2F3FE44CAC6 :18F34E00CDF4FE41CACAF5FE51CA0FF1FE58CA GO F34B FE44 CPI 'D' F34D CA F4CD JZ DUMP F350 FE41 M' F366 CA F42E JZ MEMORY F369 FE50 CPI 'P' F36B CA F432  F32D CD F0B5 CALL PRINTM F330 31 FC20 DEBUG: LXI SP,STACK F333 21 F330 8F42600ED690CED41C3E3F33E07180A3A46FCCBCF3246FC3E1DCDB5D7 :18F43E00F0CD50F6CDB2F62148FC5059CD80F53A46FCCB4F20073E05EE :18F4560MP WRITE TDL Z80 CP/M DISK ASSEDDF5FE52CA0BF7FE4DAC :18F36600CA2EF4FE50CA32F4FE53CA17F4C33EF33E11CDB5F0CD01F1CB :18F37E00FE4D0112022807FE5001130120EF79CDB5F0CPI 'A' F352 CA F5CA JZ ASDUMP F355 FE51 CPI 'Q' F357 CA F10F  JZ PORT ] F36E FE53 CPI 'S' F370 CA F417 JZ S LXI H,DEBUG F336 22 FC20 SHLD NMIJP F339 3E09 MVI A,9 F33B CD F00D3FF0A1802ED78CDE9F63A46FCCB472817CB4F201336202304 :18F46E00362F233E05D3FF0ACDC0F57723362F2336A0C52148FCCDC6A8 :18F48600F0CD5MBLER VERSION 2.21 PAGE 16 Z80 IceBox version 1.0 ; *********** CD01F1FE52205C :18F3960006CBD83E141808FE5720EFCBD03E15CDB5F078D3FE3247FCC2 :18F3AE003E16CDB5F0CD50F6CDB2F679D3FD78D3FCC330F33E JZ MAINLOOP F35A FE58 CPI 'X' F35C CA F5DD JZ EXAMREGS TEP F373 C3 F33E JMP ..DB1 TDL Z80 CP/M DISK ASSEMBLER VERSB5 CALL PRINTM F33E CD F101 ..DB1: CALL INCHAR F341 FE42 CPI 'B' 0F61AFE2C2804FE0D200CC13A46FCE6FD3246FCC3303D :18F49E00F3FE0A2004C103189EFE5E2004C10B1896CDB2F63A46FCCB07 :18F4B6004F200C79C10 ; ** DEBUG ** ; *********** F324 3E1B DEBUGE: MVI A,27 F326 17CDB5AC :18F3C600F0CD01F1FE0D28103E16CDB5F0CD50F6CDB2F660692228FCE0 :18F3DE003A47FCD3FEAFD3F121F3C33A25FCB72802CBDD2226FCED738 ION 2.21 PAGE 17 Z80 IceBox version 1.0 ; ******************  CALL CONVRT F3B9 79 MOV A,C F3BA D3FD OUT BADRL F3BC ' F39F 20EF JRNZ ..BRK0 F3A1 CBD0 SET 2,B F3A3 3E15 ..G TO F3D9 60 MOV H,B F3DA 69 MOV L,C F3DB 22 FC28  LXI B,100H+19 F38A 20EF JRNZ ..BRK1 F38C 79 ..BRK2: MOV A,C **** F3C2 3E17 GO: MVI A,23 F3C4 CD F0B5 CALL PRINTM F3C7 CD F101  ; ** ; ** BREAKPOINT ; ** ; ********** 78 MOV A,B F3BD D3FC OUT BADRH F3BF C3 F330 JMP DEBUGMVI A,21 F3A5 CD F0B5 ..BK3: CALL PRINTM F3A8 78 MOV A,B F3A9 D3FE  SHLD PCSAVE ;SAVE IN REGISTE R AREA F3DE 3A FC47 ..G2: LDA BTSAVE F F38D CD F0B5 CALL PRINTM F390 CD F101 ..BRK0: CALL INCHAR F393 FE52 CP CALL INCHAR F3CA FE0D CPI 0DH ; CR F3CC 2810 JRZ ..G2 ******** F376 3E11 BREAK: MVI A,17 ; 'BREAK ON ' F378 CD F0B5 CALL PRINTM  TDL Z80 CP/M DISK ASSEMBLER VERSION 2.21 PAGE 18 Z80 IceBo OUT BTYPE F3AB 32 FC47 STA BTSAVE F3AE 3E16 MVI A,22 3E1 D3FE OUT BTYPE F3E3 AF GO25: XRA A F3E4 D3F1 OUT SEI 'R' F395 2006 JRNZ ..BK2 F397 CBD8 SET 3,B F399 3E14  F3CE 3E16 MVI A,22 ; AT F3D0 CD F0B5 CALL PRINTM F3D3 CD F650 F37B CD F101 ..BRK1: CALL INCHAR F37E FE4D CPI 'M' F380 01 0212 LXx version 1.0 .IFG R2708,[.LOC ICEROM+800H] ; ********** ; ' AT ' F3B0 CD F0B5 CALL PRINTM F3B3 CD F650 CALL KEYBD F3B6 CD F6B2 LECT ; DISABLE FLOPPY INTERUPTS F3E6 21 C3F3 LXI H,0C3F3H ; JP MVI A,20 ; READ F39B 1808 JMPR ..BK3 F39D FE57 ..BK2: CPI 'W CALL KEYBD F3D6 CD F6B2 CALL CONVRT ; GET ADDRESS TO I B,200H+18 F383 2807 JRZ ..BRK2 F385 FE50 CPI 'P' F387 01 0113 ; ** ; ** GO ; ** ; ******9  AND DI INST RUCTIONS F3E9 3A FC25 LDA IFF ; INTERUPTS? F3EC B7 C20 SHLD NMIJP F41D 2A FC28 LHLD PCSAVE F420 01 0AFC LXI B,BADRH+ OUT MISC ; 4 M1'S TO ..G F411 3A FC3F LDA AFSAVE+1 F414 C3 FC26  D BIT F437 32 FC46 STA DMPSTA F43A 3E1D MVI A,29 ;"PORT" F EXAF F401 FDE1 POP Y F403 DDE1 POP X F405 E1  ************** ; ** MEMORY ** ; ** & **  ORA A F3ED 2802 JRZ ..G3 F3EF CBDD SET 3,L F3F1 20A00H F423 ED61 OUTP H F425 0C INR C F426 ED69 OUT JMP EIDI TDL Z80 CP/M DISK ASSEMBLER VERSION 2.21 PAGE 19 Z80 IceBox versio43C CD F0B5 P0: CALL PRINTM F43F CD F650 CALL KEYBD ;READ ADDRESS F442 CD F6B2  POP H F406 D1 POP D F407 C1 POP B F408 F1  ; ** PORT ** ; ************** .IFG MEMSS,[ F42E 3E07 2 FC26 ..G3: SHLD EIDI ; LOADS JUMPER TOO F3F4 ED73 FC40 SSPD MONSP F3F8 31 FC2C P L F428 0C INR C F429 ED41 OUTP B ; SET BREAK TYPE F42B n 1.0 ; ************ ; ** ; ** STEP  CALL CONVRT ;MAKE IT BINARY F445 21 FC48 ..P1: LXI H,KEYBUF F448 50 MO POP PSW F409 ED7B FC2A LSPD SPSAVE ; DON'T CHANGE F LAGS  MEMORY: MVI A,7 ;"MEMORY " F430 180A JMPR P0 F432 3A FC46 PORT:  LXI SP,PCSAVE+4 F3FB E1 POP H F3FC D1 POP D F3FD C1 C3 F3E3 JMP GO25 T ; ** ; ************ F417 21 F5DD STEP: LXI H,EXAMREGS F41A 22 FV D,B F449 59 MOV E,C F44A CD F580 CALL DADDR ;PRINT ADDRESS ON TERMIN F40D 3E03 MVI A,3 ; TURN ON WRITE PROTECT F40F D3FF LDA DMPSTA ;GET STATUS BYTE F435 CBCF SET 1,A ;SET PORT COMMAN  POP B F3FE D9 EXX F3FF F1 POP PSW F400 08 DL Z80 CP/M DISK ASSEMBLER VERSION 2.21 PAGE 20 Z80 IceBox version 1.0 ;:  AL F44D 3A FC46 LDA DMPSTA F450 CB4F BIT 1,A  362F MVI M,SLASH F47D 23 INX H TDL Z80 CP/M DISK ASSEMBLER VERSI 23 INX H F46E 362F MVI M,SLASH F470 23 INX H T ION??? F4A1 2004 JRNZ ..P6 F4A3 C1 POP B FD CD F6E9 ..M2: CALL ASCII F460 3A FC46 LDA DMPSTA ;CHECK IF ASCII BIT IS O  2804 JRZ ..P4 F48F FE0D ..P3: CPI CR ;DONE???? F491 200C  ;ARE WE IN PORT COMMAND???? F452 2007 JRNZ ..M1 F454 3E05 ON 2.21 PAGE 21 Z80 IceBox version 1.0 F47E 36A0 ..P1A: MVI M,SPACE+080H  F471 3E05 MVI A,5 F473 D3FF OUT MISC ; TURN ON THE EXT SHIT F475 04A4 03 INX B ;POINT AT NEXT L OC. F4A5 189E  N F463 CB47 BIT 0,A ;PRINT BYTE IN A SCII?? F465  JRNZ ..P5 F493 C1 ..P4: POP B F494 3A FC46 LDA DMPSTA F497 E6 MVI A,5 ; READ A EXT BYT E F456 D3FF OUT MISC F480 C5 PUSH B ;SAVE MEM LOCATI ON F481 21 FC48 A LDAX B ;GET DATA FROM MEMORY F476 CD F5C0 CALL APRNT ;CHECK IF IT'S PRINTA JMPR ..P1 F4A7 FE5E ..P6: CPI ARROW ;GO BACKWARDS???? F4A9 2004 JRNZ ..P7 2817 JRZ ..P1A F467 CB4F BIT 1,A ;IF IN PORT COMM FD ANI 0FDH ;CLEAR OUT PORT BIT F499 32 FC46 STA  F458 0A LDAX B ;READ FROM ..PORY LOCATI ON F459 1802  LXI H,KEYBUF F484 CD F0C6 CALL CONOMSG ;PRINT MEM & CONTENTS F487 CD F650 CALLBLE F479 77 MOV M,A F47A 23 INX H F47B  F4AB C1 POP B F4AC 0B DCX B ;DECREMENT PONIT  AND, NO ASCII F469 2013 JRNZ ..P1A F46B 3620 MVI M,SPACE F46D  DMPSTA F49C C3 F330 JMP DEBUG F49F FE0A ..P5: CPI LF ;ADVANCE A LOCA JMPR ..M2 F45B ED78 ..M1: INP A ;READ FROM USER TYPED PO RT # F45 KEYBD ;READ ANY CHANGES F48A 1A LDAX D F48B FE2C ..P2: CPI COMMA F48D;  ER F4AD 1896 JMPR ..P1 F4AF CD F6B2 ..P7: CALL CONVRT F4B2 3A Fox version 1.0 ; *************************** ;*** TA TO PORT F4C9 C5 PUSH B F4CA 1A ..M9: LDAX D ;GET TERMINATOR F4CB 7F LXI H,7FH F4EA 09 DAD B F4EB 44 MOV B,H F4EC  OUT MISC F4C0 08 EXAF F4C1 02 STAX B ;PUT IN NEW DATA  CALL PRINTM F4D2 CD F650 CALL KEYBD ;READ UPPER & LOWER BOUN DS F4D5 C46 LDA DMPSTA F4B5 CB4F BIT 1,A ;IN PORT CO.MAND  ;*** DUMP ROUTINE - ;*** ;*** REGS - DE -> POINTS AT ..PORY  18BE JMPR ..P2 ] TDL Z80 CP/M DISK ASSEMBLER VERSION 2.21  7D MOV A,L F4ED F60F ORI 0FH F4EF 4F MOV C,A  F4C2 C5 PUSH B ;SAVE POINTER F4C3 1805 JMPR ..M9 F4C5  CD F6B2 CALL CONVRT F4D8 DD21 FC42 LXI X,DMPLOW ;TEMP STORAGE F4DC DD7000  ????? F4B7 200C JRNZ ..M8 F4B9 79 MOV A,C ;BINARY OF LAST  ;*** HL -> OUTPUT BUFFER FOR 2-DIGIT HEX EQUI VALENTS ;***  PAGE 22 Z80 IceBox version 1.0  F4F0 1804 JMPR ..0A F4F2 13 ..0: INX D ;BUMP OVER TERMI 79 ..M8: MOV A,C ;GET DATA USER T YPED F4C6 C1 POP MOV 0(X),B F4DF DD7101 MOV 1(X),C F4E2 1A LDAX D ;  TWO DIGITS TYPED F4BA C1 POP B ; GET BACK MEM L  BC -> " " " ASCII EQUIVAL ENT ;*** ; TDL Z80 CP/M DISK ASSEMBLER VERSION 2.21 PAGE 23 Z80 IceB NATOR F4F3 CD F6B2 CALL CONVRT F4F6 DD7002 ..0A: MOV 2(X),B ;SAVE UPPER B ;RESTORE PORT # IN 'C' F4C7 ED79 OUTP A ;WRITE DATEST FOR ONE INPUT F4E3 FE2C CPI COMMA F4E5 280B JRZ ..0 F4E7 21 00 OCATION F4BB 08 EXAF F4BC 3E04 MVI A,4 F4BE D3FF  **************************** F4CD 3E08 DUMP: MVI A,8 ;"DUMP " F4CF CD F0B5 <  BOUNDRY F4F9 DD7103 MOV 3(X),C ; F4FC DD7E00 MOV A,0V D,0(X) F512 DD7E01 MOV A,1(X) F515 E6F0 ANI 0F0H ;START AT C3E2F0266 :18F5BE0003C9FE7F3003FE20D03E2EC93A46FCCB472804CB871802CBA5 :18F5D600C73246FCC330F33E1ACDB5F01148FC2A3EFCCB7DCD36F6C PUSH PSW F531 CD F6E9 CALL ASCII ;CONVRT TO 2-DIGIT HEX F534 3620 MVF4F180413CDB2F6DD7002DD7103DD7EA6 :18F4FE0000B82805D22BF31808DD7E01FE01D22BF3DD5600DD7E01E641 :18F51600F05FCDB5F5CD80F57BDDBE0 ADDRESS?? F522 2807 JRZ ..4 F524 CD F572 CALL DFILL ;PUT IN BLANKS IN(X) ;CHECK FOR VALID BOUNDAR IES F4FF B8 CMP B ;IS UPPER BO"XXX0" ADDR BOUNDRY F517 5F MOV E,A F518 CD F5B5 ..2: CALLB6D :18F5EE0075CD36F6CB55CD36F6CB45CD36F6EB3E02CD3FF6113DFC06F8 :18F60600061A1BCD3FF610F9ED5B36FCCD45F6ED5B34FCCD45F6ED5B5C :I M,SPACE F536 23 INX H F537 F1 POP PSW ;GET AGAIN FOR12807CD72F5137B18F43E05D3AB :18F52E00FF1AF5CDE9F6362023F1CDC0F502037ADDBE0220067BDDBEC7 :18F546000328167BE60FFE0F200CCD96F5CDBSTED F527 13 INX D F528 7B MOV A,E F529 18F4 JMUND ACTUALLY HIGHER??? F500 2805 JRZ ..1A F502 D2 F32B  DLOAD ;SET BUFFER POINTERS F51B CD F580 CALL DADDR ;CONVRT "HL" TO ASCII F51E 7B 18F61E002AFCCD45F6ED5B28FCCD45F62BCBFE2148FCCDC6F0C330F370 :18F636003E2B20023E201213C9362023C3E9F63620237ACDE9F67BC3ED :18F64E A SCII VERSION F538 CD F5C0 CALL APRNT ;IS CHAR PRINTABLE??? F53B 02 5F513CD80F518CF13188D :18F55E00CC7BE60FFE0F2806CD72F51318F3CD96F5C330F3C50603368A :18F57600202310FBC13E200203C93A46FCCB4F20047PR ..3 ; F52B 3E05 ..4: MVI A,5 F52D D3FF OUT MISC JNC DERROR F505 1808 JMPR ..1 F507 DD7E01 ..1A: MOV A,1(X) ;GET LOWER ADDR BIT MOV A,E ; F51F DDBE01 ..3: CMP 1(X) ;ARE WE AT THE STARTING S F50A FE01 CPI C F50C D2 F32B JNC DERROR F50F DD5600 ..1: MO ..6: STAX B ;PLACE IN ASCII CHAR F53C 03 INX B F53D 7A ACDE9F67BCDE931 :18F58E00F6363A23362023C93EAF02D52148FCCDC6F0CDF0F0FEFF281C :18F5A600082100D0CDC6F0D1C9E1DBE0C330F32148FC017EF F52F 1A LDAX D ; GET CONTENTS OF EXT .. PORY F530 F5 83E04D3FF0802C5180579C1ED79C51A18BE3EEE :18F4CE0008CDB5F0CD50F6CDB2F6DD2142FCDD7000DD71011AFE2C28E0 :18F4E6000B217F0009447DF60 TDL Z80 CP/M DISK ASSEMBLER VERSION 2.21 PAGE 24 Z80 IceBox version 1.0 =  MOV A,D F53E DDBE02 CMP 2(X) ;AT UPPER LIMIT??? F541 2006 JRNZ ..7  DFILL: PUSH B ;PUTS IN SPACES AS FILLER TDL Z80 CP/M DISK ASSEMBLER E0F CPI 0FH ;AT THE END OF THE LINE F564 2806 JRZ ..10 F566 CD F572 VI M,':' F591 23 INX H F592 3620 MVI M,SPACE F594 23  CALL DPRNT F553 CD F5B5 CALL DLOAD F556 13 INX D F557  ; F580 3A FC46 DADDR: LDA DMPSTA F583 CB4F BIT 1,A ;IF IN  F543 7B MOV A,E F544 DDBE03 CMP 3(X) ;ALL UPPER LIMIT BITS MA VERSION 2.21 PAGE 25 Z80 IceBox version 1.0 F573 0603 MVI B,3 F575 CALL DFILL ;FILL IN WITH BLANKS F569 13 INX D F56A 18F3 JMPR INX H F595 C9 RET ; ; F596 3EAF CD F580 CALL DADDR ;FILL IN ADDRESS F55A 18CF JMPR ..4 F55C 13 ..8:PORT CMND , PRINT ONLY TWO DIGITS F585 2004 JRNZ ..D1 F587 7A  TCH??? F547 2816 JRZ ..9 F549 7B ..7: MOV A,E F54A E60F 3620 ..DF1: MVI M,SPACE F577 23 INX H F578 10FB DJNZ ..D ..9 F56C CD F596 ..10: CALL DPRNT ;PRINT OUT LAST LINE F56F C3 F330 JMP DEBUG  DPRNT: MVI A,SLASH+080H ;PRINTS LINE ON TERMINAL F598 02 STAX INX D ;BUMP TO NEXT LOCATION F55D 18CC JMPR ..4 F55F 7B ..9: MOV  MOV A,D ;CONVERT "DE" TO ASCII F588 CD F6E9 CALL ASCI ANI 0FH ;MASK UPPER BITS F54C FE0F CPI 0FHF1 F57A C1 POP B F57B 3E20 MVI A,SPACE F57D 02  ; ; EXTRA DUMPER ROUTINES ; F572 C5  B F599 D5 PUSH D ;SAVE ..P LOC F59A 21 FC48 LXI H,KEYBUF  A,E ;DO WE HAVE TO FILL OUT THE LINE?? F560 E60F ANI 0FH F562 FI F58B 7B ..D1: MOV A,E F58C CD F6E9 CALL ASCII F58F 363A M ;AT A LINE BOUND ARY??? F54E 200C JRNZ ..8 F550 CD F596 STAX B F57E 03 INX B F57F C9 RET ; >  F59D CD F0C6 CALL CONOMSG F5A0 CD F0F0 CALL CRTSTAT ;ANYTHING TYPED??? F5A3  2804 JRZ ..AD1 F5D1 CB87 RES 0,A ;CLEAR IT F5D3 1802  PAGE 26 Z80 IceBox version 1.0 F5C2 3003 JRNC ..AP1 F5C4 FE20 PM F5F2 CB55 BIT 2,L F5F4 CD F636 CALL PM F5F7 CB45 BIT 21 FC48 DLOAD: LXI H,KEYBUF ;RESET POINTERS F5B8 01 FC7E LXI B,KEYBUF+54 F5BB  ; ** ; ******************** F5DD EXAMREGS: ;DUMP AFEFF CPI 0FFH ;KEYBOARD INTERU PT??? F5A5 2808 JR JMPR ..AD2 F5D5 CBC7 ..AD1: SET 0,A F5D7 32 FC46 ..AD2: STA DMPSTA ;RE CPI 020H F5C6 D0 RNC F5C7 3E2E ..AP1: MVI A,PERIOD F5C9 C9  0,L F5F9 CD F636 CALL PM F5FC EB XCHG F5FD 3E02 MVI  3E2F MVI A,SLASH F5BD 02 STAX B F5BE 03 INX B LL THE REGISTERS F5DD 3E1A MVI A,26 F5DF CD F0B5 CALL PRINTM F5E2 11 FCZ ..1 F5A7 21 D000 LXI H,MESS6 F5AA CD F0C6 CALL CONOMSG F5AD D1 SET THE BYTE F5DA C3 F330 JMP DEBUG  RET ; ; F5CA 3A FC46 ASDUMP: LDA DMPSTA  A,D F5FF CD F63F CALL DBYTE F602 11 FC3D LXI D,AFSAVE-1 F605 0606 F5BF C9 RET F5C0 FE7F APRNT: CPI 0748 LXI D,KEYBUF F5E5 2A FC3E LHLD AFSAVE F5E8 CB7D BIT 7,L  POP D F5AE C9 RET F5AF E1 ..1: POP H F5B0 DBE0  TDL Z80 CP/M DISK ASSEMBLER VERSION 2.21 PAGE 27 Z80 IceBox version 1.0 ;SET OR RESET BI T #1 F5CD CB47 BIT 0,A ;IS IT ZERO?? F5CF  MVI B,6 F607 1A ..DZ: LDAX D F608 1B DCX D F609 CD F63FH ;CHECK IF CHAR I S PRINTABLE TDL Z80 CP/M DISK ASSEMBLER VERSION 2.21  F5EA CD F636 CALL PM F5ED CB75 BIT 6,L F5EF CD F636 CALL  IN CRTD ;READ TO RESET STATUS F5B2 C3 F330 JMP DEBUG F5B5  ; ******************** ; ** ; ** REGISTER DUMP ? F CALL DBYTE F60C 10F9 DJNZ ..DZ F60E ED5B FC36 LDED IXSAVE F TDL Z80 CP/M DISK ASSEMBLER VERSION 2.21 PAGE 29 Z80 IceBox versi F645 3620 WORD: MVI M,SPACE F647 23 INX H F648 7A R F658 FE5F CPI DELCHAR ; BACKSPACE ..??? F65A 200F JRNZ ..2 F65C 78 F633 C3 F330 JMP DEBUG F636 3E2B PM: MVI A,'+' F638  ER ;*** A -> BLASTED ;*** B -> BLASTED 612 CD F645 CALL WORD F615 ED5B FC34 LDED IYSAVE F619 CD F645 CALL on 1.0 ; ********************************************** ************  MOV A,D TDL Z80 CP/M DISK ASSEMBLER VERSION 2.21 PAGE 28 Z80 IceBox vers MOV A,B ;ARE WE AT CHAR DELETE L IMIT??? F65D B7 OR 2002 JRNZ ..SKIP F63A 3E20 MVI A,SPACE F63C 12 ..SKIP: STAX  ;*** ; ********************************************** ********** WORD F61C ED5B FC2A LDED SPSAVE F620 CD F645 CALL WORD F623 ED5B FC28  ;*** ;*** KEYBD - READ INPUT FOR CONSOLE TERMINAL ;**ion 1.0 F649 CD F6E9 CALL ASCII F64C 7B MOV A,E F64D C3 F6E9 A A F65E 28F5 JRZ ..1 ;YUP.... F660 D5 PUSH D F661 3E04 D F63D 13 INX D F63E C9 RET F63F 3620 ** F650 11 FC48 KEYBD: LXI D,KEYBUF ;POINT AT STRING BUFFER F653 0600  LDED PCSAVE F627 CD F645 CALL WORD F62A 2B DCX H F62B CBFE * SAVE & ECHO CHARACTERS 0-9, A-F & VALID ;*** TERMINATORS. IGNORES ALL OTHER CHARAC  JMP ASCII  MVI A,4 ; F663 CD F0B5 CALL PRINTM F666 D1  DBYTE: MVI M,SPACE F641 23 INX H F642 C3 F6E9 JMP ASCII  MVI B,0 ;CLEAR CHARACTER COUNTER F655 CD F0D0 ..1: CALL GETCH SET 7,M F62D 21 FC48 LXI H,KEYBUF F630 CD F0C6 CALL CONOMSG  TERS ;*** ;*** EXIT - DE -> POINTS AT INPUT STRING BUFF @ POP D ;RESTORE POINTER F667 1B DCX D F668 05 DCR B ;CH182003C330F3FE2C2816FE272812FE3038C3FE5A30BFEF :18F69600FE3A3806FE41300218B51213CD44F00478FE1820AAC32BF345 :18F6AE001148FCC9E568E FE30 CPI 030H ;BELOW A ASCII "0"??? F690 38C3 JRC ..1 TDL : STAX D ;SAVE THE CHARACTER TYPE D F6A1 13 INX D ;BUMP TO F0B5 CALL PRINTM F67D 182F JMPR ..XIT ; F67F FE18 442006131AFE4581 :18F7860018150303FE422006131AFE431809FE41C22BF30303180230D4 :18F79E0011DD09DD7E01CDE9F6CDCAF7DD7101C330F3DD09ECK CHAR COUNTER F669 18EA JMPR ..1 ; F66B FE0D ..2: CPI 2100001AFE0D2825FE0A2821FE5E281DFE2C286A :18F6C60019FE3A3806FE473015D607D6300604CB25CB1410FAB56F1316 :18F6DE0018D6444DE1C9E1E1Z80 CP/M DISK ASSEMBLER VERSION 2.21 PAGE 30 Z80 IceBox version 1.0 F692 FE5A  NEXT CELL F6A2 CD F044 CALL CRTOUT ;ECHO IT IN TERMINAL F6A5 04 INR B  ..4: CPI CTRLX ;SCRATCH THE WHOLE LINE F681 2003 JRNZ ..5 F683 C3 F330 DD7E01CD82 :18F7B600E9F6DD7E00CDE9F6CDCAF7DD7001DD7100C330F336A02166E8 :14F7CE00FCCDC6F0CD50F61AFE0D2804CDB2F6C9C1C330F35F :0 CR ;???? F66D 2808 JRZ ..3 F66F FE0A CPI LF F671 2804 C32BF3F5E6F0CD06F7CDFDF67723F1E682 :18F6F6000FCDFDF67723C9FE0A3802C607C630C91F1F1F1FC93E1CCD90 :18F70E00B5F0CD50F62166FCDD2128 CPI 'Z' ;HIGHER THAN AN "Z"??? F694 30BF JRNC ..1 F696 FE3A CPI F6A6 78 MOV A,B F6A7 FE18 CPI 24 ;AT MAX # OF CHARACTERS F6A9 20 JMP DEBUG ; F686 FE2C ..5: CPI COMMA ;ALLOW THESE THRU F688 2816  03AH F698 3806 JRC ..DIG ;CHAR IS A "0-9" F69A FE41 CPI 'A' F69C  JRZ ..3 F673 FE5E CPI ARROW F675 2008 JRNZ ..4 F677 FC1A362023FE5320050102001862 :18F7260020FE5020050100001817FE492016131AFE582005010E0018BC :18F73E0008FE59C22BF3010C00C3B0F7FE4C00E9F61148FC0600CDD0F0FE5F200F78B728F5D53E04CDB5F07C :18F66600D11B0518EAFE0D2808FE0A2804FE5E2008123E06CDB5F018C6 :18F67E002FFEAA JRNZ ..1 ;GET MORE F6AB C3 F32B JMP DERROR F6AE 11 FC48 ..XIT: LX JRZ ..DIG F68A FE27 CPI '''' F68C 2812 JRZ ..DIG F 3002 JRNC ..DIG ;CHAR IS "A-Z" F69E 18B5 JMPR ..1 F6A0 12 ..DIG 12 ..3: STAX D ;SAVE CHARACTER F678 3E06 MVI A,6 ; F67A CD2005010F001819FE4520EA :18F75600050111001810FE4320050113001807FE462006011500C39FE1 :18F76E00F7011000FE482006131AFE4C18210303FEA I D,KEYBUF F6B1 C9 RET  281D JRZ ..OUT F6C3 FE2C CPI COMMA F6C5 2819 JRZ ..****************************** ******* F6B2 E5 CONVRT: PUSH H F6B3 21 0000  MOV C,L F6E2 E1 POP H F6E3 C9 RET F ;*** ENTRY - DE -> POINTS AT ASCII INPUT STRI NG ;*** 14 RALR H ;CARRY ITTO LOW BIT, SCR EW THE HIGH BIT F6D9 10FA  TDL Z80 CP/M DISK ASSEMBLER VERSION 2.21 PAGE 31 Z80 IceBox version 1.0 OUT F6C7 FE3A CPI 03AH ;IS CHAR 0-9???? F6C9 3806 JRC ..2 F6CB F LXI H,0 ;CLEAR DATA REG PAIR F6B6 1A ..1: LDAX D ;GET CHAR TO CONVERT F6B7 6E4 E1 ..ERR: POP H TDL Z80 CP/M DISK ASSEMBLER VERSION 2.21 PAGE 32 Z80  ;*** EXIT - A -> BLASTED ;*** - BC -> BINARY EQUIV. OF LAST FOUR DIGIT  DJNZ ..3 F6DB B5 ORA L ;PLACE I THE CURR ENT CHAR  ; ********************************************** ******* ;*** E47 CPI 'G' ;LEGAL CHARACTER??? F6CD 3015 JRNC ..ERR F6CF D607  FE0D CPI CR ;CHECK FOR TERMINATOR F6B9 2825 JRZ ..OUT F6BB FE0A IceBox version 1.0 F6E5 E1 POP H F6E6 C3 F32B JMP DERROR  S ;*** - HL -> SAVED & RESTORED ;*** - DE -> UPDA F6DC 6F MOV L,A F6DD 13 INX D ;POINT AT NEXT CHAR F6DE 18D6 ;*** CONVRT - CONVERT ASCII INPUT TO HEX BINA RY ;***  SUI 7 F6D1 D630 ..2: SUI 030H F6D3 0604 MVI B,4 ;SHIFT AMOUNT  CPI LF F6BD 2821 JRZ ..OUT F6BF FE5E CPI ARROW F6C1  TED TO CONVERSION TERMINATOR ;*** ; **************** JMPR ..1 F6E0 44 ..OUT: MOV B,H F6E1 4D  LAST FOUR DIGITS BEFORE TERMINATOR ;*** ARE CONVERTED ;***  F6D5 CB25 ..3: SLAR L ;STUFF 0 INTO LOW BITS, HIGH INTO CARRY F6D7 CBB  TDL Z80 CP/M DISK ASSEMBLER VERSION 2.21 PAGE 33 Z80 IceBox version 1.0  RET F706 1F ..SFT: RAR F707 1F RAR F708 INTER F6F4 F1 POP PSW ;NOW DO LOW 4 BITS F6F5 E60F ANI 0FH F6F7 n 1.0 F71B 3620 MVI M,SPACE F71D 23 INX H F71E FE53  ON ;*** ; ********************************************** CD F0B5 CALL PRINTM F710 CD F650 CALL KEYBD ;READ WHAT REG(S) ARE TO  ; ********************************************** ****** ;***  1F RAR F709 1F RAR F70A C9 RET  CD F6FD CALL ..1 F6FA 77 MOV M,A F6FB 23 INX H  CPI 'S' ;"SP"??? F720 2005 JRNZ ..1 F722 01 0002 LXI B,2  ****** F6E9 F5 ASCII: PUSH PSW F6EA E6F0 ANI 0F0H ; BE MODIFIED F713 21 FC66 LXI H,KEYBUF+30 ;SKIP OVE INPUT SECTIO ;*** ASCII - CONVERT BINARY TO ASCII ;*** ;*** ENTRY - A ->  .IFG REGSS,[ ;************************** ;*F6FC C9 RET F6FD FE0A ..1: CPI 10 F6FF 3802 ;PUT IN OFSET TO REGISTE R SAVE LOC. F725 1820 JMPR ..X F727 FE50 MASK OUT LOW BITS F6EC CD F706 CALL ..SFT F6EF CD F6FD CALL ..1 ;MAKE ACCUM ..N F716 DD21 FC28 LXI X,PCSAVE ;POINT AT REG SA VE AREA F71A 1A DATA TO CONVERT ;*** - HL -> WHERE TO STUFF CONVERTED DATA ;*** * ;** MODIFY REGISTERS ;** ;*********** JRC ..2 F701 C607 ADI 7 F703 C630 ..2: ADI 030H F705 C9  ..1: CPI 'P' ;"PC"??? F729 2005 JRNZ ..2 F72B 01 0000 LXI B,0 II F6F2 77 MOV M,A ;SAVE IT IN BUFFER F6F3 23 INX H ;BUMP PO LDAX D TDL Z80 CP/M DISK ASSEMBLER VERSION 2.21 PAGE 34 Z80 IceBox versio ;*** EXIT - A -> BLASTED ;*** - HL -> UPDATED TO NEXT AVAILABLE LOCATI *************** F70B REGISTER: F70B 3E1C MVI A,28 ;"MODIFY REGISTER" F70D C  F72E 1817 JMPR ..X F730 FE49 ..2: CPI 'I' ;"IX OR IY"????? F732 2016  LDAX D ;GET NEXT CHAR F778 FE4C CPI 'L' F77A 1821 JMPR ..Q F7LXI B,19 ;C F763 1807 JMPR ..Y F765 FE46 ..6: CPI 'F' F767 2006  03 INX B F79B 1802 JMPR ..S ;  ; F74A FE4C ..3: CPI 'L' F74C 2005 JRNZ ..4 F74E 01 000F  INX B F789 03 INX B F78A FE42 CPI 'B' F78C 2006  JRNZ ..3 F734 13 INX D F735 1A LDAX D ;.. NEXT 7C 03 ..8: INX B F77D 03 INX B F77E FE44 CPI 'D'  JRNZ ..7 F769 01 0015 LXI B,21 ;F F76C C3 F79F ..Y: JMP ..S  ; ; DUMP SINGLE REGISTER ; F79D 3011 ..Q: JRNC . LXI B,15 ;L F751 1819 JMPR ..Y F753 FE45 ..4: CPI 'E' F755  JRNZ ..10 F78E 13 INX D F78F 1A LDAX D ;GET NEXT CHAR DIGIT F736 FE58 CPI 'X' F738 2005 JRNZ ..2A F73A 01 000E  F780 2006 JRNZ ..9 F782 13 INX D F783 1A LDAX D  ; F76F 01 0010 ..7: LXI B,16 ;POINT TO SAVE AREA F772 FE48 CPI .D ;DUMP DOUBLE REG F79F DD09 ..S: DADX B ;POINT 'IX' AT REGISTER IN SA 2005 JRNZ ..5 F757 01 0011 LXI B,17 ;E F75A 1810 JMPR  F790 FE43 CPI 'C' F792 1809 JMPR ..Q F794 FE41 ..10: CPI  LXI B,14 F73D 1808 JMPR ..X F73F FE59 ..2A: CPI 'Y' F741 C2 F32B  ;GET NEXT CHAR F784 FE45 CPI 'E' TDL Z80 CP/M DISK ASSEMBLER VERSION 2.21  'H' F774 2006 JRNZ ..8 F776 13 INX D F777 1A VE SPACE F7A1 DD7E01 MOV A,1(X) ;READ USER REGISTER CONT ENTS F7A4 CD  ..Y F75C FE43 ..5: CPI 'C' F75E 2005 JRNZ ..6 F760 01 0013  'A' ;DUMP ACCUMULATOR F796 C2 F32B JNZ DERROR F799 03 ..10A: INX B F79A  JNZ DERROR F744 01 000C LXI B,12 F747 C3 F7B0 ..X: JMP ..D  PAGE 35 Z80 IceBox version 1.0 F786 1815 JMPR ..Q F788 03 ..9:D F6E9 CALL ASCII F7A7 CD F7CA CALL RPRNT F7AA DD7101 MOV 1(X),C  JMP DEBUG ; ] 30 JMP DEBUG F7CA 36A0 RPRNT: MVI M,SPACE+80H F7CC 21 FC66 LXI H,KE;CHANGE TO NEW CONTENTS F7AD C3 F330 JMP DEBUG ; F7B0 DD09 ..D:  .END YBUF+30 F7CF CD F0C6 CALL CONOMSG F7D2 CD F650 CALL KEYBD F7D5 1A  DADX B F7B2 DD7E01 MOV A,1(X) F7B5 CD F6E9 CALL ASCII F7B8 DD7E00  LDAX D F7D6 FE0D CPI CR F7D8 2804 JRZ ..1 F7DA CD F6B2  MOV A,0(X) F7BB CD F6E9 CALL ASCII F7BE CD F7CA CALL RPRNT F7000000000 CALL CONVRT F7DD C9 RET F7DE C1 ..1: POP B F7DF C3 F330 C1 DD7001 MOV 1(X),B ;CHANGE TO NEW DATA F7C4 DD7100 MOV 0(X),C F7C7 C3 F3E F G H I J K L