IMD 1.18: 17/11/2012 22:16:45 xerox 820 diagnostic exerciser 130s21204 de-a01.000 0681 5.25"  !! ! =! ! ! $! ! $ $ !~ ~#  LOAD ABORTEDBD0051053\X COPYRIGHT (C) 1979, DIGITAL RESEARCH _͌> ͒> Ò> Ò͘~#͌ì _2<ԯ2 Շ!۶2:2a{_:۷ʖ:۷>Ľʖ:=2–!B!6#5ʖ:Ľ!ͬʧ )!F#xʺ~0wëw!" !~6ͽ:ý(!#͘*~ "ַ"͌#>?͌͘ =_.:;<> Oօo$>!Y2*O"ʉ@G:ʐ:wÖx2p0ʹ#*©6?ëw˜0ï#6 ¹.0#*6?w0#6 #6" #~?  xDIR ERA TYPESAVEREN USER!yO#< Ty#O 3ׯ21y_͸2y2ͽ:Է1͘A͌>>͌92^ :۷¥.!_~#fow]٭ڎڥ!v"!çREAD ERRORçNO FILE^:۷ ! ~ 3#0 Wx x ր ւ G ~ # 3x~#B!Y~ɯ2:۷=!۾ý:۷=!۾:ý^T!~  6?#ˆ:`O> K{͘A͒>:͒͢>:͒͢xK > K > ͒x  ͢ØÆ^ BRͧ9!5‚#~Y‚#"T<ÆALL (Y/N)?^ Tʧ͘!6!~ڇ ٯw4!Y~ʆ͌†t=ʆf ^ T ٯ2o&)|+!<ͧÆNO SPACE^ :Ty!B*O=?_s#"^sG!~Yڸpsp2mÆÆf ͧFILE EXISTS _: É: :۷ʉ=2)ͽÉ T!@k!}|q=qf^!~2>`~2ۯ2\!!B!~> >#0~O#Cx2͘1)ͽÂf zͧÆBAD LOADCOMf^: !۶ Â$$$ SUBܙܥܫܱ"C{2!"E9"1A߯22!ty)K!G_^#V*Cސ~E , &-AGMSߛ!!ô!ô!Bdos Err On : $Bad Sector$Select$File R/O$:BA2!~6 O͐  :߷E B 2>: ߷b# : ߷y! 4 5~yy5 6yҐ^H@Oy H H: –ͬ  #H: ! ߾ Hù H H $O͐: 2 *CN# x: 2 p&x~+é7ݯ2 H! >w_: ! ߾5ͤNkͱ¦ͱxʊ#Nx: ߷! ߖ2 ͤ! 5™#wO~x½p Hy<< ʑ :!qMD#2E>! ^#V w#P:BO|^#V#"##"##"##"!O*!O*|!6ʝ6>*w#w*w#w'û*! J*""!N#F*^#V*~#foyx*{_zW+*yx#*DM*s#r*s#ryOxG*0MD!!N: EG>O: \S*C :qn& ^#V>O^"*}:*)=":O:页o"*C *C!ͮ~2~2ͦ:2ͮ:O:w:w |g}o*鯆#  ):BO!yoxg*:BO}!N#F "*#*s#r^ ~!J! J*:o$*C~i6iw**{#zr+s{ozg**͕** ,w͜͸Ͳ!!N#F$**O!~#:A߾#~$=2Ek͌::/GyO>2!q*C"͡ʔ*JҔ^:Oyʃ?|x | s-|N-# S:2E!~Яw>T D^6k-äPYy 5*{zBK5ڋ>*Cw~#+w#w+ɯ2E22i^ *C :~w~͔͔# #  w ~>2!E5T*C!"C"C!w# F! w͌x2͢*C ~<wʃG:!ʎ ì 4~ʶ¬:<ʶ$ʶïZͻx>2>2ͻ:!Z2:E߷ẅ́͊Ͳ>2>2T*CGͻ:ẅ́n>2;O ^DM;}H>"*C ::ddslO s#r:E߷͊:==»y==»*Ww#*"͸*:G#š"͸:!w4 iw:Z!E~=262*C!!~~#~O~G#n,-.‹! w! yG!x͢.:E<ʄ! q!pQ:E<. ʄ$.:E<ʄi6}2ExN! ~态O>G~G!~G} *C!r#r#r ^ͥ_y#x#{s+p+q-*C ͥ!!q#p#w*:BOYG}*MD "ã:!B߾w!>2*C~=2u:B2~2wE:A*C߶w>"!""2B!"!rQQQâ~?ͦ~?rQ*"CQ-Q͜QüQrQ$Q*):B"*)*)Q;*"E:;:A2AQÓQÜQ*C}/_|/*W}_*"}o|g":ʑ*C6:ʑw:2E**E}DQ>22!"2!"28!"9> !\8~#>O P! cannot boot CP/M $"y27 $   y i0\8{f \8>fi877     QuCuCuCC#uCsSy2 n&C!y2o))))O] :Oׯ2!](y2!]:O*:O$](*:O'](2 y2!!+:!G!5: 8F_!t:!0!=˂#0,B ˂!:/ :>!b (>$~$#O Ɛ'@'O SUBMIT TESTALL bios $select $seek $read $write $error $$$cannot seek$bad crc$cannot restore$drive not ready -$write protected$write fault$record not found$bad crc$data overrun$ trk/sect = $ COPYRIGHT (C) 1981, XEROX CORPORATION CP/M REG. TM 2.2  DI 1.0 2-294 $$REG. TM 2.2 DI 0.1 2-294 $"BI"I"@$BIIH$$$$BBI$@BI!"$$ TERM COM,QDISK COM0 PRINTER COMB MTEST COM)v|͔`i|)Öxڷz/W{/_ѯzW{_=yOxGæ2qZZ͉M|}ȯ|g}o)|/g}/o!~7z?` :>ª@w#G.¶ww#?*>?w#> w#.7:77*K͞+::'+FÎr ͖ 8{ Ăw#w#w^#V#*~#fo^#*~#fo^#V#*n^#*MTEST2 COMF !"TESTALL SUB#SUBMIT COM$%QRUN COM(&'()*#z/W{/_!9~#fo! ! ! ! ! ! !9~#A"s!`*"!"!Y">2>2>22!"!!a{   `OE!y6$ -7rBo&))T])))!yn^#V# ~#fo^#& ~#fo!+!#!+!#!+!+}|z{|}|zCPU COMd+,-./01234567$$$ SUB8DISKTST TST 9:DISKTST TST ;<"!@"!" ʞ!F#x±~#±!b2r~# "2r+}|~#G:rx"2rd*!D"ky#yy $'()%&*+),),Z:::C²XƜ9;7||7zZZ)|/g}/o#|͉k|/g}/o#ɯ2qZZk:q|/g}/o#|/g}/o#:q<2qqDM!xxGyODISKTST TST ;=OLDSTART <$$$ SUB>+w# +6#!6#2w2x*s!>r<o&F=-` r'~h6!+`W?_ 4²WƜ35̓ ! !  ^#Vr+s@ ͬ ! ^#Vr+s!9Diagnostics II V1.1 - Terminal test ! ͼ !9DM* \r+|! 6^#6'! 6@#6 ̓+|A! 6#6e! ~#fo##~#foͩ! s#r̓|w̓z!! sͼ  * ͼ*ͼ*2ͼ  *<ͼ !9DM`iw#w͐   `i^#Vr+s !r+sê ! w#w̓\n5 !" w#w̓"\p##' ̓̓" ̓"! n&\n̓++]^^PͼwP}~0 ͐0 ͐`! s#r\^+|Ÿ \`|| \Z͐! ͼ*bͼ\\͐! ͼÜ \Z#r̓|•! 6#6!  w#w̓ ̓̓ !* ̓  s!  ^#Vr+sÝ! w#w̓̓Һ !$ w#w!  w#w9!! '|g}o!9DM\n+! `iw#w͐Ҿ! w#w͐\p+Ҁ!  ! ^#Vr+sV" ̓"! n&̓\p̓" \p̓"! n&\n̓++\p̓" \p^^ ^ ^ ^ ^ ^ ͐\\͐ \`| \\͐! ͼ*bͼ\Z͐! ͼ \\͐\Z͐ ̓җ !( w#w̓(\px ̓$!* n&!$ ~#fo#s#r̓$̓f !$ w#w!( ~#fo#s#r ̓ ! w#w͐\p+Ҳ! ! ^#Vr+sÈ`i^#Vr+sA!9!*!* !*!*̓"! n&!" ^#Vr+s/ ! ^#Vr+s !!  w#w̓ \nҩ \n̓ ! \n  !x9DM̓*s#r!& w#w̓&^̓&! ̓& 0s!& ^#Vr+sÿ!  %d%d%d%d!9DM`iw#w͐\lD !`i^#Vr+s !9*ͼ *ͼ*(ͼ*F#!$ s#r!  ^#Vr+s!ͬ \n+! s#r̓ \p!" s#r̓" ̓̓" !X!" ^#Vr+s ! ^#V !*(!*2!*<!*F!*P*Z6 #6*\6 #6*^w#w͐6!9!9DM͐͐ ͐^#Vr+s͐ ͐0͐7s!&*͐ ͐͐ ͉͐͏`i! ^#Vr+sns{͐ !9!9DM! n&0ͯT! n&9ͯ!i9DM! ^#Vr+s~#fo! s#r͐9DM! P\2!/w}3^! w#w͐\g[͐ !/! ~#fon`is! 6#6͐\g+! ~#fs#rô! ^#Vr+s! ^#Vr+s~#fos! ^#Vr+sô! n}O! 6#6! ^#Vr+s~#fo! s#r͐n}ʴ͐|ʴ!*`w#w!*b*n6#6*p6O#6*r6#6/036*T=!9DM͐n}! ^#Vr+sn&s͐ ͐͐ )͐͏`in&#&*!9!9DM`iw#w͐~#fon&)}ʀ͐ ?͐^#Vr+snѯg`is#rA! s#r! ^#Vr+sn`is{ʀ`in}%j! ! s#r! 6#6! s! s͐n}-! ^#Vr+s! 4͐n&)}! 3 ^#Vr+s! ^#Vr+sns! ^#Vr+s! ^#Vr+sj͐6! ! s#r! n}! ^#Vr+s!! ^#Vr+s6 ͐! !9DM`iw#w! 6#6͐ n! s{ 5! n} C! ^#Vr+s! n}-b! 6#6! ^#Vr+s! ^#Vr+sn! s)|͐Ç!9!9DM! n&|ʷ! n&ü! n&!9DM! n&aͯ! n&zͯ   !! s#r! ^#Vr+sn`is{.K! 3! s#r! 4! ^#Vr+sn`is`in&͐}DwUʳXʼOC S<T͐~#fo|^#Vr+sns{ ! ^#Vr+s! n}Q! ^#Vr+s!Q! ^#Vr+s6 *g! ^#Vr+s`ins}! ^#Vr+s`insÇ͐ ?! nѯg`is#rb͐͐?ó!9!y9DM! `iX`i!9!9DM͐`is#r! ^#Vr+s _ 7:O*o``crl+getde,ato-putcha.paus/clea0ta1clearli2crl3! ^#Vr+s6-͐͐~#fos#r! ^#Vr+s! 6 ! 6! 6! ~#fo! n&! ^#Vr+s~#fo! ͏ѯg & #'+(_%m)m*u-TnA.A@O/O+Y:g,gg7ooo)}}"DZhy7||7zZZ)|/g}/o#|͉k|/g}/o#ɯ2qZZk:q|/g}/o#|/g}/o#:q<2qqDM!xxGyO$!89DM̓! ~#fo##~#foT! s#r̓! 6#6! 6#6*##w#w*w+w# +6#!6#2w2x*s!>r<o&F=-` r'~h6!+`W?_À 5GYXum# ")v|͔`i|)Öxڷz/W{/_ѯzW{_=yOxGæ2qZZ͉M|}ȯ|g}o)|/g}/o#w!# ! w#w̓̓ ! 6 #6! 6#6! 6A! n&C ! n! s! 6!1 ! 3! ! ͕! `!~7z?` :>ª@w#G.¶ww#?*>?w#> w#.7:77*K͞+'+FÎr ͖ 8{ Ăw#w#w^#V#*~#fo^#*~#fo^#V#*n^#*   ɫ # . Ɯ-/! #z/W{/_!9~#fo! ! ! ! ! ! !9~#A"s!`*"!"!Y">2>2>22!"!i͕!> ! ͕! w#w̓~!@ ! 3! ^#Vr+sÝ! !8 ͕!B ! w#w̓̓_ !8 !!a{   `OE!y6$ -7rBo&))T])))!yn^#V# ~#fo^#& ~#fo!+!#!+!#!+!+}|z{|}|z+ Ɯ*,²Ɯ²Ɯ  "!@"!" ʞ!F#x±~#±!b2r~# "2r+}|~#G:rx"2r  ͕!! y! s#rzB ! ͽ! s#rzB !S ̓!! y! s#r! w#w̓̓Ҳ !n} •! ^#Vr+sk! n}-´! 6#6! ^#Vr+s! ^#Vr+sn! sͅ|͐ ?! nѯg`is#rô͐͐ҷ !̓̓!! ̓P͐̓M !  !̓+̓̓!! ̓P n&C͐++|ª! n&!y͐+++|! n&!y! ~#fo##^#Vr+sz! ~#fo^#Vr+s! ns&detected %d seek errors detected !0  !9DM*^#Vr+s͐!l !!l\%s %d errors ! ̓+|ʟ !c 2 ! 4! ^#Vr+sj ̓!`iy! s#r! w#w̓̓= ! 6!! ̓?!9!y9DM! `iʹ`i!9!9DM͐`is#r͐n}]! ^#Vr+sE! ^#Vr+s͐ns! ^#Vr+sn͐̓+̓ʩ !  ! ^#Vr+s ̓J! ^#Vr+s ! 4<! ^#Vr+s\! ! \!! ~#fo! ~#fo~#fo4!! ~#fo##6#6! ~#fo! ~#fos#r! ~#fo^#Vr+s! ns&!9DM͐*##^#Vr+s! !!l\ %d seek errors !9DM͐!!!l!@P+| !8 ! |* % !o 2 !8 4! ^#Vr+s ̓̓J! ^#Vr+s! !! y! s#rz}]͐Ì!9!9DM͐`is#r! ^#Vr+s! ^#Vr+sns{ç͐!9!9DM`iw#w! ~#fo͐n! ! ! ! +!9 Disk test :disktst.tstaARead/Write test Can't open fileWrite errorerror - data read!9DM! n&0ͯڰ! n&9ͯ!i9DM! ^#Vr+s~#fo! s#r͐! s#r! ^#Vr+sn`is{`in}%%s !9DM͐#!% Program aborted--returning to system!9DM!9DM`iw#w! 6#6͐ n! s{ ʇ! ‹ ! ! w#w̓̓ ̓! s#r!! ̓! ^#Vr+sÓ ! w#w̓̓ ! w#w̓̓~#fo͐n}7! ~#fo`i^#Vr+sn}4!c! ~#fo͐n! ~#fo͐nѯgWc!9!9DM͐+|Œ! does not equal data writtenRandom seek test Can't open file backward seek errorforward seek error %d read/write errors  ! ! s#r! 6#6! s! s͐n}-?! ^#Vr+s! 4͐n&ͅ}\! ͻ_!! s#r! ^#Vr+sn`is{.§!*s«! ~¦6*u*+"*"*u#"ur7:,*͌:*}|2q +s! ^#Vr+s͐6! ! s#r! n}S! ^#Vr+s!S! ^#Vr+s6 ,͐! ^#Vr+sns{|! ^#Vr+sS! n^#V# ~#fo^#& ~#fo!+!#!+!#!+!+}|z{|}|z`is#r͐!9!9DM! n&J|?! n&D! n&!9DM! n&aͯu! n&zͯ7, ͻ! s#r! 4! ^#Vr+sn`is`in&}DUXO!CgSʘð͐~#fo|! ^#Vr+s6-͐͐~#fo:qw ! {w !\&!   ]  a_ m7:n}ʭ! ^#Vr+s!ҭ! ^#Vr+s6 Æ! ^#Vr+s`ins! ^#Vr+s`ins͐6!9!9DM͐n}!7||7zZZ)|/g}/o#|͉k|/g}/o#ɯ2qZZk:q|/g}/o#|/g}/o#:q<2qqDM!xxGyO2q*&:q):ʵ=ʵ=r:qo&7*+\!*y#7:)~:,s#r! ^#Vr+s! 6 '! 6'! 6! ~#fo! n&! ^#Vr+s~#fo! ѯgs#r! ^#Vr+s! ^#Vr+sO*o` , FNxg>Goy$$!̓!`i! s#r! w#w̓̓! 6!! ^#Vr+sn&C!9DM͐͐ g͐^#Vr+s͐ T͐0\͐7s!&ò͐ ͐͐ ͉͐)v|͔`i|)Öxڷz/W{/_ѯzW{_=yOxGæ2qZZ͉M|}ȯ|g}o)|/g}/o"s!"u*|*uN*~#%"*s*uN#"u*+"7:)~:,"s!"u*|ʦ*~#fos! ^#Vr+s! n}«! 6#6! ^#Vr+s~#fo! s#r͐n}͐|! ^#Vr+s! ^#Vr+sns! ^#Vr*K͞+!!"'+FÎr ͖ 8{ Ăw#w#w^#V#*~#fo^#*~#fo^#V#*n^#*`is͐ ͐͐ )͐`in&#&ò!9!9DM`iw#w͐~#fon&ͅ}͐ ?͐^#Vr+snѯg  #z/W{/_!9~#fo! ! ! ! ! ! !9~#A"s!`*"!"!Y">2>2>22!"! n&~ҕ! 6 ͐! ! ns`i^#Vr+s! 4o`iw#w͐͐k*6#6`i^#Vr+sÿ8͐m `iw!a{   `OE!y6$ -7rBo&))T])))!yn! s{ ! n&+`is#r! ͐| ! ~#fo͐k6#6 ! ~#fo͐kw#ws J !V P`iw#w͐ƖIÛNLO?MPQM ÎO MYÎMNÎOJ"!@"!" ʞ!F#x±~#±!b2r~# "2r+}|~#G:rx"2r#w͐_ ͐k*~#fo|S ͐k*~#fo! !Q !9~#fo`i^#Vr+s ! ^#Vr+s!9DiagnosticM݀耭\b9hWJfKfLfMfNfOfPfQfRfUfVfWfXfYfZf[f\f]fJ ! ~#fo͐k! ~#fo͐k##~#fo's#r`i^#Vr+s !9T=Select(Y/N) tests to be run: !9DM! ƜIKRS!39DM!v P! P͐*s#r͐*s#r*c6#6*,\**~#+w# +6#!6#2w2x*s!>r<o&F=-` r'~h6!+`W?_s II - Printer Exerciser. v1.6!9DM\ !+ X|`is#r !. P*i *i|`is#r͐ `iSfTf^fafbfcfdfefff_f`fgfjfkflfmfnfofhfifpfsftfufqfrfvfyfzf{fwfxf~#fo\g6\+| !P!(P!;P!NP!lP! n& ! s !zX! s#r͐n! s! n}" ! 63fo##~#fo|! s#r!'! 6#63! 6#6*a6#6*c6#6*e6#6*g6#6! 6 `iw#w͐\gҹ!!~7z?` :>ª@w#G.¶ww#?*>?w#> w#.7:776#6͐ͩ !P ͐" !9L=Enter width of line in columns !9DM\ !S X! s#r! ^#Vr+s|f}f~fffffffffffffffffffffKL  ! n*s! n}3 ! n}1. ! 6~4 ! 6_͐! s#r͐\g! s#r`i6 #6͐! nѯgҝ ͐͐ҝ !!(!/!9!9DM\!/͐!/!͐!/!9DM\!/͐!\g#6! 9Select test pattern: 1. 96 char ascii 2. 64 char ascii 3. User defined test pattern Select one: C= pl! ~#fo͐n&!!/!! `i^#Vr+sG!9!9DM\ !/!`iw#ws#rN=Enter number of nulls to pad carriage motion !9DM*06*165*26*76*866*96*>6* ^#Vr+s͐s`i^#Vr+sZ ͐͐ ! ^#Vr+s! ^#Vr+snsÝ ! (! ͐! s#r͐\g! s#r\+|̓!͐!̓!9DM\!/͐!/!͐!/!9DM\!/ease enter character sequence(sequence will be repeated as nessesary) !9DM\!~X`is*a6#6`in} *һ!!/! w#w͐D!! ^#Vr+s!!!/! w#w͐w! ^#Vr+sY!!?6*@6*A6*E6*F6*G6*H6*L6*M6*N6 *O6*P6*Q6*R6*\ !}P!P!P ! s{ Q ͐͐Q ! ^#Vr+s! ns ! (!ç ! ^#Vr+sn! s{"ʧ ! n}ʧ ͐!/`iw#w\g! s#r͐͐͐#!{! ~#fo͐n&͐#!{! ~#fo͐n&a6#6u!P!P `is`in} 6! (!`in}0L L1[j*a6#6u*a6#6u!(!!9O=/! w#w͐ү!! ^#Vr+sÌ`i^#Vr+s!!9Normal script Superscript Subscript !9DMS6*T6 *U6!!9!9DM͐P!?(! 6 `is`in} [!Ì! (!`in}Yr!Ì`in}N!Ì͐ҧ ! ^#Vr+s! ns\ ͐͐ ! ^#Vr+s6.͐͐ ! ^#Vr+s! ^#Vr+sns ! ~#fo`i^#Vr+s! ^#Vr+sæ!9!9DM\!/`iw#w͐\g! ~#fo͐n&!!! Enter 0 for output to print, 1 for output to punch \!X|*cs#r! P*i |*c  \&!/!`iw#w͐ҟ!!! w#w͐;`! ! ^#Vr+s=!:! w#w͐;ғ! Print bold with 1/120" offsetPrint normal, super and subscriptScale page in inches, horizontalyScale page in inches, verticalo͐+! ~#fo͐ns! ^#Vr+s! ~#fo\g+`ins^!|M[! ^#Vr+sòw}1t! 6~#6}! 6_#6!!9DM!X w#w!Z w#w!b ~#fo̓Xn}!Z ^#Vr+s`i!b ~#fo̓Xns!Z ^#Vr+s`i6!Z ^#Vr+s`i!b s#r! ~#fo!%s#r! ~#fo##!s#r! ~#fo!s#r! ~#fo$##!s#r! ~#fo$!s#r! ! ^#Vr+sp`i^#Vr+s !!!!9!9DM\,!/!`iw#w͐`!-!yBarber pole test!9DM! n&\as!!9DM͐#|‚`iw#w! ~#fo͐n}! ~#fo͐n&`i^#Vr+sG 6 #6͐͐͐`is! w#w͐\g`i~4o&`in͐`i6 ! ^#Vr+sæ^!|! ^#Vr+sÆ~#fo̓Xns!X ^#Vr+sÛ̓Z`i6`i̓`/!\9!9DM`iw#w͐\cr!`i^#Vr+sN!9!9~#fo*##!s#r! ~#fo*!s#r! ~#fo0##!s#r! ~#fo0!|s#rNormal print forward and backInte w#w͐#! ^#Vr+s!+! w#w͐T! ^#Vr+s6`i^#Vr+s!-!!9!!`iw#w! ~#fo͐n}ʱ`i^#Vr+sÐ`i^#Vr+s͐|! ~#fo͐n&`i^#Vr+sú!!9! !9 Press any key to terminate test !9DM! ~#fo##!s#r! ~#fo!s#r! ~#fo##!s#r! ~#foDM͐|\e|!͐ Z͐ @@!! ͐@͐|V\e|:! ^#Vrleaved overprinting, forward and backwardPrint same line once forward and backwardOverprint with absolute horizontal tabbing9DM! P\2!/w}3^! w#w͐\g[͐ !/! ~#fon`is! 6#6͐\g+! ~#f@! @!9DM`iw#w͐k*0͐n}z͐k*0͐n&`i^#Vr+s*!9!s#r! ~#fo ##!+s#r! ~#fo !%s#r! ~#fo##!Us#r! ~#fo!js#r! ~#fo##!  r+s!͐ P͐ @@V!! ͐@!9DM`i6#6͐\*~# ?! nѯg`is#r͐͐?- !9!9DM! n&͗ |] ! n&b ! n&!9DM! n&0ͯ{*;#";%*0+"0|ƒk:  ïx22:!"0O!o "0 ͹  ( fo͐)~#fo͐|ʺ*~#fo͐)~#fo##`i^#Vr+sg!!9!9DM͐n}! ^#Vr+sn! ^#Vrړ ! n&9ͯ!9DM! n&aͯ ! n&zͯ 6  #F#x ~# :wo!2w&(*5*3 D; *5*3DF0 ` J"|GwJ||^^}^=#GN|*3|g&o))A"9*+sn&6 !!!7P!͆! Invalid command line !9DM͐n}z! ^#Vr+sn&(!X!!o %! . &  B!  F!_ R!:w&o o&7:O*=#"=xGyژOҰÝOڰ&k-)*9^#Vr+s‰!"3|*+"5*3z{ط:!.e o09DM`iw#w! 6#6͐ n! s{ ʯ! n} ½! ^#Vr+sÓ! n}-! 6#6! ^#Vr+s! ^#Vr+sn! sh | ͐gá=L: %ͤ (H a4z4 7X > X_1͵!"3*+"5 o`  4JWZa}PRT_CPRT_NUL ,ä-! PRT_CPRT_NUL ,ä-! ͣ^  :0AG77}o|g>2C J"GwJ||^^}^=#GN|*3|g&o))A"9* MAP OF TESTED MEMORY 0K 8K 16K 24K 32K 40K 48K 56K 64K +.......+.......+.......+.......+.......+.......+.......+.......+ ::0AG77}o|g>2C J"GwJ||^^}^=#GN|*3|g&o))A"9*"7*7q*5*3~ʱ O*7|¤ }ʬ xA `*5#| |ڏ }ڏ *7p#"7| *5zڄ {: >2 G!] > # ~#:0AG77}o|g>2C J"Gw:CL<`cSc2C2C%*=|{}$ͻAD=#"=xGyژOҰÝOڰ&k-)*9^#Vr+s‰!"3|*+"5*3z{ط:!.e o04 G>  *3; |g.|g4 :64 ; w>0E <  ~ ya OQ  ~ yx Oh > *3=#"=xGyژOҰÝOڰ&k-)*9^#Vr+s‰!"3|*+"5*3z{ط:!.e o0 6 #6>2 !] "[ : C > *[ / #' 7 #/ ~[ [ "[ *[ ~ S #"[ ͻ SYNTAX ERROR IN COMMAND LINE - PRDRESS - BITS 7 6 5 4 3 2 1 0 *3|g!A@~#~# .> Q ͻ ^#VQ :0AG77}o|g>2C J"GwJ||^^}^=#GN|*3|g&o))A"9*"7*7q*5*3~ʱ O*7|¤ }ʬ xA `*5#| |ڏ }ڏ *7p#"7| *5zڄ {ڄ ʄ *5*3pJ !Aw# :0AG77}o|g>2C J"GwJ||^^}^=#GN|*3|g&o))A"9*OGRAM ABORTEDá*5*3z­ {ھ  ң " "  w# !  ~/w# >  $ ͻ PASSES COMPLETE =*;Q ͻ; COUNT OF ERROR BYTES = *=Q ͻ Ɛ'@' ͻ=#"=xGyژOҰÝOڰ&k-)*9^#Vr+s‰!"3|*+"5*3z{ط:!.e o0  !";"=*=|2 }2 ͻADDR WROTE READ Q ͻ hͻ xhͻ OQ  ~ yx Oh > *3=#"=xGyژOҰÝOڰ&k-)*9^#Vr+s‰!"3|*+"5*3z{ط:!.e o0 /  `# *3" " " w#6 +   w#= ͻMEMORY SPEED TEST: THE 1K OF RAM AT START ADDR 2MHZ I~~# ¼ > \ ?ʻ w# !ͼ ? !ͼ !)ͼ !ͼ :5͡ :6:6͡ :7!ͻCANNOT CLOSE THE FILE  % u> ZͻDISK OR DIRECTORY FULL% ҶͻCANNOT O@EN FILEe ҐͻCA~~# ¼ > \ ?ʻ w# !ͼ ? !ͼ !)ͼ !ͼ :5͡ :6:6͡ :7F THE BELL RINGS ONCE PER MINUTE 4MHZ IF THE BELL RINGS ONCE PER 30 SECONDS > x> =DIAG LOGd0F22F80015C9F1C9F57CCDDD227DCDDD22F1C9FF :0000000000 !4w_#~ ʸ A:4NNOT READ FILE" {2 zҶͻBUFFER MATH ERROR~L#ý> _GxƐ'@'Xd0F22F80015C9F1C9F57CCDDD227DCDDD22F1C9FF :0000000000 !4w_#~ ʸ A:4 !" >2  9 7: O 7P a 7T g v 7Ð : =2 !~~# ¼ > \ ?ʻ w# !ͼ ? !ͼ !)ͼ !ͼ :5͡ :6:6͡ :7|}~~# ¼ > \ ?ʻ w# !ͼ ? !ͼ !)ͼ !ͼ :5͡ :6:6͡ :7d0F22F80015C9F1C9F57CCDDD227DCDDD22F1C9FF :0000000000 !4w_#~ ʸ A:4>ʐ #„ !ʠ 7O: y * w#: =  ͓ >!" 2 y* 6 ͓ ͻCANNOT FLUSH FILEd0F22F80015C9F1C9F57CCDDD227DCDDD22F1C9FF :0000000000 !4w_#~ ʸ A:4Enter 0 for output to print, 1 for output to punch \!X|*cs#r! P*i |*c d0F22F80015C9F1C9F57CCDDD227DCDDD22F1C9FF :0000000000 !4w_#~ ʸ A:4~~# ¼ > \ ?ʻ w# !ͼ ? !ͼ !)ͼ !ͼ :5͡ :6:6͡ :7d0F22F80015C9F1C9F57CCDDD227DCDDD22F1C9FF :0000000000 !4w_#~ ʸ A:4~~# ¼ > \ ?ʻ w# !ͼ ? !ͼ !)ͼ !ͼ :5͡ :6:6͡ :7d0F22F80015C9F1C9F57CCDDD227DCDDD22F1C9FF :0000000000 !4w_#~ ʸ A:4~~# ¼ > \ ?ʻ w# !ͼ ? !ͼ !)ͼ !ͼ :5͡ :6:6͡ :7d0F22F80015C9F1C9F57CCDDD227DCDDD22F1C9FF :0000000000 !4w_#~ ʸ A:4~~# ¼ > \ ?ʻ w# !ͼ ? !ͼ !)ͼ !ͼ :5͡ :6:6͡ :7d0F22F80015C9F1C9F57CCDDD227DCDDD22F1C9FF :0000000000 !4w_#~ ʸ A:4~~# ¼ > \ ?ʻ w# !ͼ ? !ͼ !)ͼ !ͼ :5͡ :6:6͡ :7d0F22F80015C9F1C9F57CCDDD227DCDDD22F1C9FF :0000000000 !4w_#~ ʸ A:4~~# ¼ > \ ?ʻ w# !ͼ ? !ͼ !)ͼ !ͼ :5͡ :6:6͡ :7d0F22F80015C9F1C9F57CCDDD227DCDDD22F1C9FF :0000000000 !4w_#~ ʸ A:4~~# ¼ > \ ?ʻ w# !ͼ ? !ͼ !)ͼ !ͼ :5͡ :6:6͡ :7d0F22F80015C9F1C9F57CCDDD227DCDDD22F1C9FF :0000000000 !4w_#~ ʸ A:4~~# ¼ > \ ?ʻ w# !ͼ ? !ͼ !)ͼ !ͼ :5͡ :6:6͡ :7d0F22F80015C9F1C9F57CCDDD227DCDDD22F1C9FF :0000000000 !4w_#~ ʸ A:4~~# ¼ > \ ?ʻ w# !ͼ ? !ͼ !)ͼ !ͼ :5͡ :6:6͡ :7 d0F22F80015C9F1C9F57CCDDD227DCDDD22F1C9FF :0000000000 !4w_#~ ʸ A:4~~# ¼ > \ ?ʻ w# !ͼ ? !ͼ !)ͼ !ͼ :5͡ :6:6͡ :7d0F22F80015C9F1C9F57CCDDD227DCDDD22F1C9FF :0000000000 !4w_#~ ʸ A:44#"4*)+")||d: !èx2+:¼!")O!o ")͵ͼ!!*d0F22F80015C9F1C9F57CCDDD227DCDDD22F1C9FF :0000000000 !4w_#~ ʸ A:4~~# ¼ > \ ?ʻ w# !ͼ ? !ͼ !)ͼ !ͼ :5͡ :6:6͡ :7d0F22F80015C9F1C9F57CCDDD227DCDDD22F1C9FF :0000000000 !4w_#~ ʸ A:4~~# ¼ > \ ?ʻ w# !ͼ ? !ͼ !)ͼ !ͼ :5͡ :6:6͡ :7.*,=7"*.*,=F,\F|CwF||ZZ}Z=#GN|*,|g&o)):"2*6#"~~# ¼ > \ ?ʻ w# !ͼ ? !ͼ !)ͼ !ͼ :5͡ :6:6͡ :7d0F22F80015C9F1C9F57CCDDD227DCDDD22F1C9FF :0000000000 !4w_#~ ʸ A:4~~# ¼ > \ ?ʻ w# !ͼ ? !ͼ !)ͼ !ͼ :5͡ :6:6͡ :7d0F22F80015C9F1C9F57CCDDD227DCDDD22F1C9FF :0000000000 !4w_#~ ʸ A:46xGyڔOҬÙOڬ&k-)*2^#Vr+s…",|*+".*,z{ط:!.e o0:0d0F22F80015C9F1C9F57CCDDD227DCDDD22F1C9FF :0000000000 !4w_#~ ʸ A:4~~# ¼ > \ ?ʻ w# !ͼ ? !ͼ !)ͼ !ͼ :5͡ :6:6͡ :7Ú :I:"͝!%Aa1z1 7U > U_1ͮ!",!".t*~~# ¼ > \ ?ʻ w# !ͼ ? !ͼ !)ͼ !ͼ :5͡ :6:6͡ :7 AG 77}o|g>2<\F|CwF||ZZ}Z=#GN|*,|g&o)):"2*6#"P OF TESTED MEMORY 0K 8K 16K 24K 32K 40K 48K 56K 64K +.......+.......+.......+.......+.......+.......+.......+.......+ :-AG 77}o|g>2<\F|CwF||ZZ}Z=#GN|*,|g&o)):"2*6#"q*.*,~ʪO*0|}ʥxA\*.#|ʺ|ڈ}ڈ*0p#"0|*.z}{:>2G!V> #~#6 AG 77}o|g>2<\F|C:<E<`\L\2<2<*6|t}ʹ"ADDRESS -6xGyڔOҬÙOڬ&k-)*2^#Vr+s…",|*+".*,z{ط:!.e o0:0 G> *,4|g.|g-:/-4"w>0>< wyZOJwyqOa> *,"0*06xGyڔOҬÙOڬ&k-)*2^#Vr+s…",|*+".*,z{ط:!.e o0:0#6>2!V"T:<> *T(# 0#(~TT"T*T~ L#"T ʹ" SYNTAX ERROR IN COMMAND LINE - PROGRAM A BITS 7 6 5 4 3 2 1 0 *,|g!:@~#~# .> Jʹ" ^#VJ# >AG 77}o|g>2<\F|CwF||ZZ}Z=#GN|*,|g&o)):"2*6#"q*.*,~ʪO*0|}ʥxA\*.#|ʺ|ڈ}ڈ*0p#"0|*.z}{}}*.*,pF!:w# !AG 77}o|g>2<\F|CwF||ZZ}Z=#GN|*,|g&o)):"2*6#"BORTEDÚ*.*,z¦{ڷھ Ҝ""w#! ~/w/    ʹ" PASSES COMPLETE =*4Jʹ"; COUNT OF ERROR BYTES = *6J""ʹ" Ɛ'@' ʹ" MA6xGyڔOҬÙOڬ&k-)*2^#Vr+s…",|*+".*,z{ط:!.e o0:0"4"6*6|+}+ʹ"ADDR WROTE READ Jʹ" aʹ" xa""ʹ" OJwyqOa> *,"0*06xGyڔOҬÙOڬ&k-)*2^#Vr+s…",|*+".*,z{ط:!.e o0:0 \#*," " " w#/ $   w#6 "ʹ"MEMORY SPEED TEST: THE 1K OF RAM AT START ADDR 2MHZ IF THE B TO TOP OF TPA MTEST N 1500 0 Q N 1 ; ;TEST DISK--QUICK VERSION QDISK ; ;TEST TERMINAL--SOROC TERM 1 ; ;TEST PRINTER--Dʹ"CANNOT CLOSE THE FILE"! !n"7!S"ʹ"DISK OR DIRECTORY FULL!ү"ʹ"CANNOT O@EN FILE^!҉"ʹ"CANNOT REELL RINGS ONCE PER MINUTE 4MHZ IF THE BELL RINGS ONCE PER 30 SECONDS > x> =DIAG LOGIABLO MODEL 630 PRINTER P=D L=132 T=1,2,3,4,5,6,7,8,9 C=1 R=1 N=0 O=0 ; ;END OF DIAGNOSTIC SUBMIT FILE AD FILE" {2 zү"ʹ"BUFFER MATH ERROR~"I#ö"> _G"x"Ɛ'@'U| !" >2  2!73!H!7I!Z!7M!`!o!7É!:!=2!!>ʉ"}"MTEST MTEST2 QDISK TERM PRINTER ; ; ;DIAGNOSTICS COMPLETE - RESET TO CONTINUE !#}!!ʙ!7O: y!* w#: =! ͌!!>!" 2 y* 6 ͌!!ʹ"CANNOT FLUSH FILE"  copyright(c) 1977, digital research $Error On Line $SUBNo 'SUB' File Present$Disk Write Error$Command Buffer Overflow$CommR" O!/q*/& L!1p+q*0#L~*##N!ͽ͞"T!Vq*VMͳ!Xp+q!W* >Wr#MͲ!_ͧ!t6>!t%\= >!t6:t<2t=O! ~2u b:<2O>9b!60+~9b!60+4:uat:u_2u:uMTZs#r*lڶ*l+s#r*jN#F+q#pÌ!nq!"o"q}2uo&"s* s:n*sDM2u:uqos-!6]:ͧz2~e:~2O! 6*~& 6$>!~_z*~& w!~5Bx:yͧ*v+"vand Too Long$Parameter Error$Invalid Control Character$Directory Full$Cannot Close, Read/Only?$!9"!͇͊!p+q*p+q!`6>!`6*`&*^*`&Y />!`4 >*]& ~ O!]49!a6:a*]& ~2bO>z*bM >ʉSͧ!v6!"v!|6:|Ҁ!x6 2}:} Hk:} h:}$6 2}$*}M3:}02}O> ͧ3!z*OÓOUi~ ͠ ͻ ͵ ͠ ͖ 8{ Ăy0 2͵ ͖ Gͻ ͋ ͖ 1ͻ ͯ 2ͯ ͖ (Ăyv ~_{ozg001 $$$$ SUB ͊!p+q*͍2!p+q*͍2!p+q*͊!p+q*͍!p+q*͍!p+q*͍2!s+p+q+p+q:!b/~,H~:H~*H~.H~>H~<H~=H*]& 6!]4T!]4!cq*a&Y :cw!a46ͭ:}"!}5́ͭ́3*yM"h:}^a a2}O>Vͧ^:}fr*d*f!is*d́"dPY! "f>!h#~Haͫo!h6:i0O͐!mr+s+p+q*l*z& ~2y :yHڪ!z4>>*z& ~ !z4í!{q*v#"v͙dͧ*vv :{w:x<2xO>}|ͧ 1OÓ OUi~ ͠ ͻ ͵ ͠ ͖ 8{ Ăy0 2͵ ͖ Gͻ ͋ ͖ 1ͻ ͯ 2ͯ ͖ (Ăyg}/o#:<2͓DM!xxGyOҥ)Ø|Ͷ`i|)øxͨz/W{/_ѯzW{_=yOxG2||ͫo1OÓ OUi~ ͠ ͻ aÍë1KïúÏíÓV $ 2ͯ ͖ (ĂyrBB| ! B"! DMUs! n! n}! -| ! n&B""! DM[`i^#Vr+sÁ ! s! ^#V@w#.66A7w#A.> w#7M.7ȷ7?a{ ͗O{!y" h7 2͵ ͋ ͖ ͖ Ăy0 ͖ 2ͯ 1 'd ! ^#V#*0}o|g*  ":D x=D y^#V#*~#fo^#*~#fo^#V#*n^#*n^#V# ~#fo^#& ~#foaI × Þ L ó !gëSuperSoft Associates Diag 2͵ ͋ ͖ ͖ Ăy0 ͖ 2ͯ 1 'd !  !F#x]~#r+s7 ! # Memory test complete "! DMR!7 = qdisk"! DM^U I *! s#r*`is#rB!9| ! ð ?_bk)))))!y|}}|!,}|!-|}!+,z}!+,z}!#-|}!#-|1OÓ OUi~ ͠ ͻ ͵ ͠ ͖ 8{ Ăy0 2͵ ͖ Gͻ ͋ ͖ 1ͻ ͯ 2ͯ ͖ (Ăynostics II Quick test Copyright (c) 1981 "! DMR! Memory test "! DMR! !"! DMUs#r! B!g"!i2~# ]",2-+}|~#]G:xQ"42+w# 4+6#!s#r!6#h!"!@"!"could not set memory to logic one at location: "! DMO ! could not zero memory at location: "! DMO !  %z!-|z!-|z!-|z!-ɯ2||Kz|/g}/o#|͍ͫ|/g}/o#ɯ2||͍:|/g}/o#|/ 2͵ ͋ ͖ ͖ Ăy0 ͖ 2ͯ 1 'd ! ^#V#*0}o|g*  ":D x=D y!{ozgs#r! B!*s#r! s! s#rB! | !@B!@{ozg! n&"""! DMX`i@s#!"22!>ڤ2ͭ<—͗:ڏ6:V!+͗O?_!~7y?͗:>M xB""! DMO !!""! DMR !8 : "! DMO U  R '*`is#r! DML ! B""! DM#Vr+s scB!X ^#Vr+sns}ʷ`i^#Vr+sÏ![ n}!\ ^#Vr+s!|`i^#Vr+s s`i^#Vr+s! r+s`ins&! %s#r`is#r`i^#Vr+s|Q B! ^#Vr+s~#fos#r# ^ N*`is#r*! s#r!` s#r! B"""! DMsBBB6B"""! DM! n!&Ì*`is#r! s#rB~#fon&"o#s#r!\ ^#Vr+s!  s0! s0! s!\ ~#fo!X !` ^#Vr+s~#fo! n&"""!b DMU &{ozgs#r:O ! "! DMR *n&**:Ozq#ê *!\H!e6C#6O#6M\? !6#w# Á\ns`i^#Vr+s! ns| Bs-`*`is#rBn}_`i^#Vr+sn&"! DM*6: y  }_ ! ^#Vr+sns}! n!%9|!X ! s#r!^ s#r![ !Z ssBn!-9| ! ^#Vr+s![ 4!\ !! DM}H! ! B'B^#Vr+sn&!0{ozgs#rBTñ:`in&"! DMQ|ʃ`in! {ozg!X ^#Vr+s!` ^#Vr+s~#fos!\ ^#Vr+s:!Z n}!-|!^ s#r! !` ^#Vr+s~#fos#rBn&|B^|!Ä `Ó:*! s#rB!9|F `in&"! DM ! ~#fo##^#Vr+s|~ ! ~#fo^#Vr+s`ins&!:K?~?:N"!"*|**~#"**#"*+"ù*`is#r "!b DMX s#r|!-|/!\ ^#Vr+s! ! ^#Vr+sns!.9|ʌ!^ ! "!b DMX s#r!Z 4! ! ^Æ`in&&:`in!0|ʯ`in!9$:`in!a|`in!z$g:!X ^#Vr+s! ^#Vr+sns!^ ^#Vr+s!\ ^#Vr+sBXs!X ! s#r![ n}!^-|ʏ!\ ^#Vr+s!|ʏ`i^ ~#fo~#fo! ~#fo!"""! DM !<| !! ~#fo##s#r! ~#fo! ~#fos#r! ~#fo^#V*! s#r*! s#rBB|gB^#Vr+sB! |TB!0^B!Ws!&! BBB0#Vr+sns! n&"!b DM[ >D>U>X>O(>Cʁ>SʳB`~#fo! |!X ^#Vr+s-sB`B`~#fo|/g}/ )))))"):m w>.Yn /////////+++++++++/////////!w  ! 2#  CPU is :# L Z80:$ Y (refresh register not checked)Y 8080/8085  Begin timing test 2. Ç͔#"0 w CPU failed: >2. *, #",  error count X  h *0 # Instruction sequence was z ~#2!w ͍ /! ͍   #$%')+,-/79<=?@ABCDEGHIJKLMOPQRSTUWXYZ[\]_`abcdeghijklmoxxyz{-:YS:Z Hҧ!6> 2)½>!)6> !)*)&*)>2) :) .͐*)M͐:)<2) !w   EKYbcdeafhlBCDEAFHLIXJYspVR$$$*0 "(2. y+~2$+Fx2%H:# {yyÔ!<‹ ҋ  End timing test û- table end *0 X  table size X  *0 +6+6+6:' =2'  h register :& contains :%c  but should contain +~#c  register value before instruction sequence was :|}&.> &cX3;( !"( **( 2( ::( ( >><0 1/O! DIAGNOSTICS II V1.2 - CPU TEST V!*  dbflag is at X  ABͶCͺ:& t4 y D>E y2&m#:%m:. ĖH>Xm>Ym ä*("0 XùY¹*0 ++"0 ä*0 ~#"0 :n :n :4 :% !& W>2& 2% :% !& W:+ 2+  *, |HX  errors Z CPU tests ok jÇW:+ 2+  <n $c  test number  X  h ####½n :% ###:*  M>B< @ @!( wFpN qVs~<>Ñ2# 2$  Use a Z-80 for pass0 (building tables as an 8080 will not setup refresh regs) n !*P A[>z :&n  ( )::$n  ->:%n  (*0 #~n  .:'n  ), *0 ~2'ʇ:%  >  Checksum error--memory may be bad: n ͺͽ ! ͍ !2 "0 >22!1~# z2z ~#2 < " * +p+q+r+s+r+s+r+s +p+q+r+s+r+s+r+s  +r+s +r+s!9+r+s W+w _+XYXYXY*XYXYXY:XYXY (XYMXYBXYXY)XY (XYXYXYXYXY)(XY )XY( )XYR(XYSXYTXYSXY  3  + ~#&  !@ _~ 0123456789abcdef_~|n }n n >h , ,  ͐ "  p c a f b c d e h l s p X  n }n  `iX  bkX  * X  !9X *  y CXYXYXYXYXYXY0XYXYXYXYXYXYXY0XYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYw* ͍ w +F+N+V+^+V+^+V+^ 33 +F+N+V+^+V+^+V+^+V+^ +V+^ +++~ G+~ O :XYDXYXYBXYXY+XYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXY ͐ "  p c a f b c d e h l s p X  n }n  `iX  bkX  * X  !9X *  y C: S    2 @ _~ 0123456789abcdef_~|n }n n >h , , XYXYXYXYXYXYXYXYXYXYXYXYXYXYBXYTXYXYXYXYXYXYXYXYDXYXYDXYXYDXYXYXYXYXYXYXYXYXY#  :# ## *0 ! |/G}/Obk *  ]DͺE t/+w XYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYy C: S    XXYXYBXY@XY.XYXYXY XYXYXYXYBXY@XYFXYXYXY ͐ "  p c a f b c d e h l s p X  n }n  `iX  bkX  * X  !9X *  y CjXYXYXYXYXYXYXYXYXYXYXYXYXYXYXY XYXYXYXYXYXY XY XYXYcXYcXYXXYXXYXYXY (XYK/+  _ͺy {: S    2 @ _~ 0123456789abcdef_~|n }n n >h , , XYXYGXYXYBXYFXYDXYXYXYXYXYXY0XYPXYXYXYXYXYXYXY0XYXYXYXYXYXYXY0XY : S    2 @ _~ 0123456789abcdef_~|n }n n >h , ,  ͐ "  p c a f b c d e h l s p X  n }n  `iX  bkX  * X  !9X *  y C: S    2 @ _~ 0123456789abcdef_~|n }n n >h , ,  ͐ "  p c a f b c d e h l s p X  n }n  `iX  bkX  * X  !9X *  y C: S    2 @ _~ 0123456789abcdef_~|n }n n >h , ,  ͐ "  p c a f b c d e h l s p X  n }n  `iX  bkX  * X  !9X *  y C: S    2 @ _~ 0123456789abcdef_~|n }n n >h , ,  ͐ "  p c a f b c d e h l s p X  n }n  `iX  bkX  * X  !9X *  y C: S    2 @ _~ 0123456789abcdef_~|n }n n >h , ,  ͐ "  p c a f b c d e h l s p X  n }n  `iX  bkX  * X  !9X *  y C: S    2 @ _~ 0123456789abcdef_~|n }n n >h , ,  ͐ "  p c a f b c d e h l s p X  n }n  `iX  bkX  * X  !9X *  y C: S    2 @ _~ 0123456789abcdef_~|n }n n >h , ,  ͐ "  p c a f b c d e h l s p X  n }n  `iX  bkX  * X  !9X *  y C: S    2 @ _~ 0123456789abcdef_~|n }n n >h , ,  ͐ "  p c a f b c d e h l s p X  n }n  `iX  bkX  * X  !9X *  y C: S    2 @ _~ 0123456789abcdef_~|n }n n >h , ,  ͐ "  p c a f b c d e h l s p X  n }n  `iX  bkX  * X  !9X *  y C : S    2 @ _~ 0123456789abcdef_~|n }n n >h , , m Ҁ ʏ 7é :$ =2$ !>ʩ # !ʹ 7: O* w#: =  ͬ >!" 2 y: !: S    2 @ _~ 0123456789abcdef_~|n }n n >h , , DOCHECK4 BALOy_"J1}PUTC IS8080ISSS"Z80# !REFZ80$ REFOKSKPPASS1K"BALOCCA"SKPNDB-"ISNTZ8: S    2 @ _~ 0123456789abcdef_~|n }n n >h , ,  ͐ "  p c a f b c d e h l s p X  n }n  `iX  bkX  * X  !9X *  y C* 6 ͬ &! CANNOT FLUSH FILEJ! CANNOT CLOSE THE FILEɯ2 ů2 !~"#~ "#~L"#~O"#~G ͐ "  p c a f b c d e h l s p X  n }n  `iX  bkX  * X  !9X *  y C0LISZ80Y""FEEP AROUNDLP0LP1LOOPBYTE!RICKENDMSG-"CMPPTR0 HOHO"QUICKCPU' PASS1%  ͐ "  p c a f b c d e h l s p X  n }n  `iX  bkX  * X  !9X *  y C: S    2 @ _~ 0123456789abcdef_~|n }n n >h , , ">2 %  > !W ҳ! DISK OR DIRECTORY FULL> " CANNOT OPEN FILE~ ! CANNOT READ FILE" {2 z" BUFF: S    2 @ _~ 0123456789abcdef_~|n }n n >h , , CHECKSUM+ NERRS, DEHDNEZ#EOJ "BADSUM]PPPj #PP"HEXBYn QPUTC INITSTATE RESTSTT BEGINCHECKDIAG LOG !" >2  R 7S h 7i z 7 ͐ "  p c a f b c d e h l s p X  n }n  `iX  bkX  * X  !9X *  y CER MATH ERROR> ͽ > ͽ > ͽ > ͽ >*ͽ ͽ  ͐ "  p c a f b c d e h l s p X  n }n  `iX  bkX  * X  !9X *  y C @"INLINEINSTTABLE1#LPPPXXXLPSKPDBXYZ SVALLw XNOPBB#ENDCHECK!SV1ALL TARGET+#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; tell them which CPU this is. call mesg!db cr,lf,'CPU is ',0 lda z80  COSAVE "DOZ80 NDOZ80 SKIPP >#SAVEPSW a%DO2 XXSUM XXXSUM! #LOOPP* SVHLA !#SVSPC &GETC ?%BDOg!db cr,lf,'Begin timing test',cr,lf,0 call feep call skppass1!jmp around call skpndb jmp around lp0: lxi h,0 ; 3PUTCX QCLOSOK!#QCLOSA&!%QCLOS1J!8$QLOGX"QLOG1!'QLOG2!QLOG3!refok sta refz80 ora a jnz refok caCALLT/$WORD( V"SAVESTT PUTINST7"SPAC !CMPXE}$SAVEA$}"SAVEB%SAVEC&SAVEO'SAVEP(#YYTAB*s#LLPHf# ora a jz isnt$z80 call mesg!db 'Z80',0 lda refz80 ora a jnz is$z80 call mesg!db ' (refresh register not checkeS1 BDOSRET BDOS2 YYMES LOCAL !XXMES& $LOCND& R!HEXNB, !XXTBL@ #PRST @&XXPRS r$QCLOSE SAVECHR  10 lp1: inr a ; 1 4 jnz lp1 ; 3 10 dad b ; 1 11 jnc lp1 ; 3 10 ; total memory cycles: 67 371 011 ;ll mesg db cr,lf,'Use a Z-80 for pass0 (building tables',cr,lf db 'as an 8080 will not setup refresh regs)',cr,lf,0 refok: FOUNDERR. ENDLP$LPL{!XENDLP$CHECKRNJ$HEXCMPmPUTCMP#e!PUTERR$ENDFLAGX4%HEXGETNXT#PUTREGgd)',0 jmp is$z80 isnt$z80: call mesg!db '8080/8085',0 is$z80: call crlf ; added for QUICKCPU ;;;;;;;;;;;;;;;;;;C!DEBUG ]#QBUF!QLOGSW QNXBUF l%QBUFLG#QBFCNT %FCB U%QNR$ QINIT% QOPEN> %QOPN1R QOPNXS b'QMAKEW  total T states: 235 794 930 xchg ; 1 around: ; indicate finish of speed test call feep call mesg! db 'End timin call skppass1 ; %% jmp balocca ; %% xra a ; %% for temporary use call skpndb ; %% sta z80 ; %% balocca: ;;;;;;;;;;$INDXP $OKKOKPUTMEM0!HEXHBYc S$XMESGXPA2%XHEXBYPRET1#SKPTRACE"PRALL SLEEPBCK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; test speed xra a lxi b,1 ; indicate start of speed test on console call mesQMAK1h @$QMAKXi QREADm %QREDXz QEOF~ &QEOFLP QEOF1 X'QEOFX (%QEOFS 'QWRITE v'QWRITX $QPUTCOK %Q g test',cr,lf,0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; test instructions (extensive instruction teram io$kbd equ 1 io$cnsl equ 2 kbd equ 2bh dsp equ 33h ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; zadded for QUICKCPU sta quickcpu ; added for QUICKCPU call docheck lda pass1 lxi h,pass2! add m mov d,a mvi a,1 c It should be +1/2 . ; ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; defst) call loopbyte call skpndb jmp rick call skppass0 jmp endmsg rick: call mesg db 'table end ',0 lhld cmp$all skppass1 sta pass2 sta pass1 lda pass1 lxi h,pass2! add m b   L0JYt  Y) D ;);DIAGNOSTICS COMPLETE - RESET TO CONTINUE$DIAGNOSTICS COMPLETE - RESET TO CONTINUE ines to create the various versions trs80 equ 0 ; define as 1 if trs80 test if$8080 equ 0 ; define as 1 if 8080 test northsptr call hexwd call mesg db cr,lf,'table size ',0 lxi d,-cmp$ptr+2 dad d call hexwd call crlf ; check error rou;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ;Name: ; Z80 CPU test ; ; ;Installation: ; asm cpu ; load cpu ; c;$AGNOSTICS COMPLETE - RESET TO CONTINUE$DIAGNOSTICS COMPLETE - RESET TO CONTINUE t equ 0 ; define as 1 for northstar dos if 1-trs80 bdos equ 5h ; REMOVE if trs-80 endif cpu8080 equ 3000h ; other progtines jmp hoho lhld cmp$ptr!dcx h!mvi m,1!dcx h!mvi m,1!dcx h!mvi m,1 hoho: lda quickcpu ; added for QUICKCPU dcr a ; pu (pass 0 - builds internal tables) ; save 50 cpu.com ; ;Notes: ; The size given on the above save command may ; vary.  ;$AGNOSTICS COMPLETE - RESET TO CONTINUE$DIAGNOSTICS COMPLETE - RESET TO CONTINUE }|q=qf^!~2>`~2ۯ2\!!B!~> >#0~O#Cx2͘1)ͽÂfMTEST2$$ICS COMPLETE - RESET TO CONTINUE$DIAGNOSTICS COMPLETE - RESET TO CONTINUE  }|q=qf^!~2>`~2ۯ2\!!B!~> >#0~O#Cx2͘1)ͽÂf}|q=qf^!~2>`~2ۯ2\!!B!~> >#0~O#Cx2͘1)ͽÂfPRINTER$ICS COMPLETE - RESET TO CONTINUE$DIAGNOSTICS COMPLETE - RESET TO CONTINUE }|q=qf^!~2>`~2ۯ2\!!B!~> >#0~O#Cx2͘1)ͽÂfMTEST$$$ICS COMPLETE - RESET TO CONTINUE$DIAGNOSTICS COMPLETE - RESET TO CONTINUE QDISK$$ST2 CPU QDISK TERM PRINTER }|q=qf^!~2>`~2ۯ2\!!B!~> >#0~O#Cx2͘1)ͽÂfTERM$R$ICS COMPLETE - RESET TO CONTINUE$DIAGNOSTICS COMPLETE - RESET TO CONTINUE }|q=qf^!~2>`~2ۯ2\!!B!~> >#0~O#Cx2͘1)ͽÂf}|q=qf^!~2>`~2ۯ2\!!B!~> >#0~O#Cx2͘1)ͽÂfCPU$$$ST2 CPU QDISK TERM PRINTER }|q=qf^!~2>`~2ۯ2\!!B!~> >#0~O#Cx2͘1)ͽÂfQDISK$$ICS COMPLETE - RESET TO CONTINUE$DIAGNOSTICS COMPLETE - RESET TO CONTINUE }|q=qf^!~2>`~2ۯ2\!!B!~> >#0~O#Cx2͘1)ͽÂf}|q=qf^!~2>`~2ۯ2\!!B!~> >#0~O#Cx2͘1)ͽÂf MTEST2$$ST2 CPU QDISK TERM PRINTER }|q=qf^!~2>`~2ۯ2\!!B!~> >#0~O#Cx2͘1)ͽÂf}|q=qf^!~2>`~2ۯ2\!!B!~> >#0~O#Cx2͘1)ͽÂf (PUNIT),A ;ZERO SAVE AREA FOR LOGED DRIVE ; ; MOVE XEROX ID TO THE SIGN ON MESSAGE ; LD HL,00F7H}|q=qf^!~2>`~2ۯ2\!!B!~> >#0~O#Cx2͘1)ͽÂfMTEST$$$ST2 CPU QDISK TERM PRINTER }|q=qf^!~2>`~2ۯ2\!!B!~> >#0~O#Cx2͘1)ͽÂf}|q=qf^!~2>`~2ۯ2\!!B!~> >#0~O#Cx2͘1)ͽÂf ;ADR OF XEROX ID AFTER BOOT LD DE,XEROXID ;ADR OF XEROX ID IN BIOS LD BC,09D ;}|q=qf^!~2>`~2ۯ2\!!B!~> >#0~O#Cx2͘1)ͽÂf;$ST$$$CS SUBMIT FILE FOR XEROX 820 ; MTEST MTEST2 CPU QDISK TERM PRINTER  }|q=qf^!~2>`~2ۯ2\!!B!~> >#0~O#Cx2͘1)ͽÂf}|q=qf^!~2>`~2ۯ2\!!B!~> >#0~O#Cx2͘1)ͽÂfNUMBER OF BYTES TO MOVE IN DECIMAL LDIR ;MOVE THEM ; LD HL,SIGNON CALL PMSG ;PRINT SIGNON MESS}|q=qf^!~2>`~2ۯ2\!!B!~> >#0~O#Cx2͘1)ͽÂf&;DIAGNOSTICS SUBMIT FILE FOR XEROX 820$ MTEST MTEST2 CPU QDISK TERM PRINTER T JP POINP ;LIST DEVICE INPUT ; ; ; BOOT: XOR A LD (0003H),A ;RESET IOBYTE TO ZEROS LD }|q=qf^!~2>`~2ۯ2\!!B!~> >#0~O#Cx2͘1)ͽÂf AGE JR GOCPM-$ ; ; WBOOT: LD SP,STACK LD A,(UNIT) ;SAVE LOGED DRIVE FOR LD (PUNIT),A D HL,INPR2 ;ADRS OF TABLE INPR1 CALL POBUSY ;IS PRINTER READY? JR C,INPR1-$ ;* RETORS ON TRK 1 LD HL,.RES.3D00H+BASE LD BC,0902H CALL RDLOOP ;READ EVEN SECTORS ON TRK 1 LD C,2 CALL SEEK ;SEEK TRA 'RESET' SEQUENCE TABLE FOR PRINTER ; INPR2 DEFB 1BH ; 'ESC' DEFB 0DH ; 'CR' DEA LD HL,MONITR ;JUMP TO MONTR GOES AT 38H LD (39H),HL LD BC,0080H CALL SETPTR ;MAKE DISK BUFFER=0080H ; ; INITI ;* LATER USE LD C,0 CALL SELECT ;SELECT UNIT 0 CALL HOME ;SEEK TRACK ZERO JP NZ,BOMB LD HL,.RES.3480H+BASE PEAT TILL READY LD A,(HL) ;GET THE BYTE OUT (05H),A ;SEND IT INC HL CK #2 JR NZ,BOMB-$ LD HL,.RES.4580H+BASE LD BC,0501H CALL RDLOOP ;READ ODD SECTORS ON TRK 2 LD HL,.RES.4600H+BASE FB 50H ; 'P' ; ; ; BOOT LOADER ERROR MESSAGE ROUTINE ; BOMB: LD HL,DEAD CALL PMSG JP MONITR+3 ;JUMP BACKALIZE THE PRINTER ; LD A,07 ;LOAD THE BAUD RATE OUT (0CH),A ;SEND TO THE SIO CH. }|q=qf^!~2>`~2ۯ2\!!B!~> >#0~O#Cx2͘1)ͽÂf ;POINT TO NEXT BYTE DJNZ INPR1-$ ;REPEAT TILL DONE ; ; LD A,(PUNIT) ;SELECT LD BC,0402H CALL RDLOOP ;READ EVEN SECTORS ON TRK 2 GOCPM: LD A,0C3H ;STORE JUMP VECTORS IN RAM LD (00H),A LD HL,CBIO TO PFM-80 ; DEAD: DEFB CR,LF DEFM 'cannot boot CP/M $' ; ; ; RDLOOP: LD (POINTR),HL ;STORE ADDR. PASSED IN HL LD A,C MTEST$ }|q=qf^!~2>`~2ۯ2\!!B!~> >#0~O#Cx2͘1)ͽÂfSAVED DRIVE LD C,A ;* JP CCP ;* JUMP TO COMMAND CONSOLE PROCESSOR ; ; S+3 ;JUMP TO CBIOS WARM BOOT AT 00H LD (01H),HL LD (05H),A LD HL,BDOS ;JUMP TO BDOS GOES AT 05H LD (06H),HL LD (38H),  LD (SECTOR),A ;STORE SECT# PASSED IN C PUSH HL PUSH BC CALL READ ;READ THE SPECIFIED SECTOR POP BC POP HL JR NZ,BY2: CALL POBUSY ;IF SO GET PRINTER READY JR C,CPBSY2-$ ;* LD A,03 ;LO 'RETURN' IS DONE FROM THE MONITOR. ; RES 7,A ;RESET THE HIGH ORDER BIT RET  ;* TO CHECK PRINTER READY SCF ;SET CARRY FLAG RET NZ ;RET W JR NC,LSTOUT-$ ;REPEAT TILL CLEAR CPBSY: CALL POBUSY ;CHECK IF PRINTER BUSY JR C,COMB-$ INC H ;BUMP LOAD ADDRESS BY 256 INC C INC C ;BUMP SECTOR# BY 2 DJNZ RDLOOP-$ RET ; ; ; ; ; CONST: JP MONAD A WITH AN 'ETX' CALL POSEND ;PRINT IT WAIT: CALL POINP ;LOOP TILL RECEIVE JR ;AND RETURN ; ; CONOUT: LD A,C JP MONITR+12 ;MONITOR CONSOLE OUTPUT RTN. ; ; ;***************************************ITH PRINTER NOT READY OR A ;ELSE RESET CARRY FLAG RET ;* AND RET WITHPBSY-$ ;REPEAT TILL READY LD A,E ;GET CHARACTER FROM REG E CALL POSEND ;PITR+6 ;MONITOR CONSOLE STATUS RTN. ; ; CONIN: JP MONITR+9 ;MONITOR CONSOLE INPUT RTN. ; ; RESET THE HIGH C,WAIT-$ ;* AN 'ACT' RET ;THEN RETURN ; ; PRINTER BUSY ROUTINE ; POBUSY: **** ;* * ;* LIST OUTPUT DEVICE DRIVER * ;*  PRINTER READY ; ; ; PRINTER OUTPUT ROUTINE ; POSEND: OUT (05),A ;SEND THE BYTE RET RINT THE CHARACTER CP 0AH ;WAS IT A LINE FEED? RET NZ ;RETURN IF NOT CPBS ORDER BIT IF THE ABOVE INSTRUCTION ; IS A 'CALL MONITR+9'. IF A 'JP MONITR+9' THIS CODE ; IS NOT EXECUTED AND THEIN A,(07) ;READ SIO PORT CH. B AND 04 ;MASK OUT BITS OF INTEREST XOR 04  * ;******************************************* ; LSTOUT: CALL POINP ;CHECK IF PRINTER HAS DATA    ;* AND RETURN ; ; ; PRINTER INPUT STATUS ROUTINE ; POINP: IN A,(07) ;READ SIO PORT CH. B PBLK DEFW CHK0,ALL0 DEFW SECTAB,0000H ;DPH FOR UNIT 1 DEFW 0000H,0000H DEFW DIRBUF,DPBLK DEFW CHK1,ALL1 DEFW S************************************************ ;* * ;* DISK I/O SUBROUTINES FOR CP/M CBIOS * ;* * ;********** H,0 ;LOOKUP PHYSICAL SECTOR NUMBER RET ; AND RETURN IT IN HL ; ; SETPTR: LD (POINTR),BC ;STORE DATA POINTER PASSED REFT CONST. DEFB 7 ;BLOCK MASK CONST. DEFB 0 ;EXTENT MASK CONST. DEFW 81 ;MAX BLOCK# DEFW 31 ;MAX DIRECTORY ENTRY#  AND 01 ;CHECK FOR RECEIVE XOR 01 ;* CHARACTER AVAILABLE SCF ECTAB,0000H ;DPH FOR UNIT 2 DEFW 0000H,0000H DEFW DIRBUF,DPBLK DEFW CHK2,ALL2 DEFW SECTAB,0000H ;DPH FOR UNIT 3 DEF********************************************** ; ; ; SECTOR TRANSLATE TABLE FOR 16 SECTOR ; TRACKS WITH 1 IN 5 INTERLEAVE ;T ; VIA BC ; ; ; SELECT: LD HL,0 ;PREP TO CHECK FOR MAX UNIT# LD A,C CP 4 RET NC ;RETURN WITH HL=0 IF C > 3 LD (DEFB 10000000B ;ALLOCATION MASK MSB DEFB 00000000B ;' ' LSB DEFW 16 ;CHECK SIZE DEFW 3 ;RESERVED TRACKS ;  ;SET CARRY FLAG RET NZ ;RET WITH NO CHARA. AVAIL. IN A,(05) ;* ELSE GW 0000H,0000H DEFW DIRBUF,DPBLK DEFW CHK3,ALL3 ; ; ; ; SETSEC: LD A,C LD (SECTOR),A ;STORE SECTOR NUMBER PASSED RET SECTAB: DEFB 1,6,11,16 DEFB 3,8,13,18 DEFB 5,10,15,2 DEFB 7,12,17,4 DEFB 9,14 ; ; ; DISK PARAMETER BLOCK FOR SA400 UNIT),A ;STORE C AS NEW DRIVE UNIT# LD L,A ADD HL,HL ADD HL,HL ADD HL,HL ADD HL,HL ;MULTIPLY UNIT# BY 16 LD DE,DPHT; ; DISK PARAMETER HEADERS FOR A 4 DISK SYSTEM ; DPHTAB: DEFW SECTAB,0000H ;DPH FOR UNIT 0 DEFW 0000H,0000H DEFW DIRBUF,DET CHARACTER OR A ;RESET CARRY FLAG RET ;AND RETURN ; ; ; ;******** ; VIA BC ; ; TRANS: EX DE,HL ;ADD TRANSLATION TABLE ADDRESS ADD HL,BC ; PASSED IN DE TO SECTOR# IN BC LD L,(HL) LDMICROFLOPPY ; USING SHUGART RECOMMENDED 18 SECTOR / 40 TRACK FORMAT ; DPBLK: DEFW 18 ;SECTORS PER TRACK DEFB 3 ;BLOCK SHI! AB ADD HL,DE ;ADD START ADDRESS OF DHP BLOCK PUSH HL LD C,A ;LOAD C WITH DISK DRIVE NUMBER LD B,0 ;LOAD B WITH SEEK SCATE WRITE ERROR TO HANDLER CALL REPORT ;REPORT DISK ERROR TO CONSOLE JR Z,WRITE-$ ;RE-TRY WRITE IF INDICATED RET ;ELSETO BDOS ; ; ; HOME: CALL MONITR+30 ;CALL HOME ROUTINE IN MONITOR RET Z ;RETURN IF ALL WENT WELL LD C,2 CALL REPORT TER TYPE LD A,(FLAGS) RLA ;TEST FIRST FOR DRIVE-NOT-READY ERROR JR C,REP8-$ ; AND JUMP IF THAT IS THE PROBLEM LD E,A  LD A,(SECTOR) LD C,A CALL MONITR+36 ;CALL READ ROUTINE IN MONITOR RET Z ;RETURN IF NO ERRORS LD C,3 ;INDICATE READ ERPEED FOR THIS DRIVE CALL MONITR+27 ;CALL SELECT ROUTINE IN MONITOR POP HL RET Z ;EXIT IF SELECTED SUCCESSFULY LD C,1  RETURN PERMANENT ERROR ; ; REPORT: LD (FLAGS),A ;STORE 1771 I/O STATUS FLAGS LD A,C LD (CLASS),A ;STORE COMMAND CLASS OFJR Z,HOME-$ ;RE-TRY HOME IF ERROR INDICATED RET ; ; SEEK: LD A,C ;GET TRACK # FROM C LD (TRACK),A CALL MONITR+33 ;CALL;GET REMAINING 1771 ERROR BITS INTO E LD HL,RWERRS LD A,(CLASS) CP 3 ;DETERMINE IF SELECT/SEEK OF R/W ERROR JR NC,REP2-ROR TO HANDLER CALL REPORT ;REPORT DISK ERROR TO CONSOLE JR Z,READ-$ ;RE-TRY READ IF INDICATED RET ; ; ; WRITE: LD HLCALL REPORT JR NZ,SEL2-$ ;JUMP IF COMMAND ABORT INDICATED LD A,(UNIT) ;ELSE TRY TO SELECT THE DRIVE AGAIN LD C,A JR SELE ERROR LD HL,DSKMSG CALL PMSG ;PRINT OUT START OF MESSAGE DEC HL LD A,(CLASS) LD B,A REP1: CALL SKIP ;SKIP TO NEXT  SEEK ROUTINE IN MONITOR RET Z ;EXIT IF NO ERRORS INDICATED LD C,2 CALL REPORT ;REPORT SEEK ERROR TO CONSOLE RET NZ ;$ LD HL,SKERRS ;POINT HL TO PROPER SET OF MESSAGES REP2: LD B,5 RES 0,D REP4: SLA E ;SHIFT OUT A 1771 STATUS REG BIT JR,(POINTR) LD A,(SECTOR) LD C,A CALL MONITR+39 ;CALL WRITE ROUTINE IN MONITOR RET Z ;RETURN IF NO ERRORS LD C,4 ;INDICT-$ SEL2: XOR A LD (UNIT),A LD HL,0 ;DISABLE FURTHER BIOS CALLS BY RET ; INDICATING SELECT ERROR '$' IN STRING @ HL DJNZ REP1-$ CALL PMSG ;PRINT STRING NOW POINTED TO BY HL LD HL,ERRMSG CALL PMSG ;PRINT 'error ' AFRETURN PERMANENT ERROR UNLESS LD A,(TRACK) ; RE-TRY REQUEST IS INDICATED LD C,A JR SEEK-$ ; ; ; READ: LD HL,(POINTR) "  NC,REP5-$ LD C,',' BIT 0,D CALL NZ,OVECTR ;PRINT COMMA BETWEEN STRINGS IF D=1 CALL PMSG ;THEN PRINT ERROR MESSAGE @ HLEFB CR,LF DEFM 'bios $' DEFM 'select $' DEFM 'seek $' DEFM 'read $' DEFM 'write $' ERRMSG: DEFM 'error $' SKERETURN PERM ERROR INDICATION IN A RET ; REP8: LD HL,RDYMSG CALL PMSG ;PRINT DISK-NOT-READY MESSAGE CALL IVECTR ; AND WA DEFB CR,LF DEFM 'CP/M REG. TM 2.2 DI 0.1 2-294 ' XEROXID: DEFM ' ' DEFB CR,LF DEFB '$'INTS TO ASCII STRING CP '$' INC HL RET Z LD C,A ;PRINT CHARACTER IF NOT DOLLAR SIGN CALL OVECTR JR PMSG-$ ; ; PU SET 0,D ;FLAG THAT A STRING WAS PRINTED JR REP6-$ REP5: CALL SKIP ;SKIP TO NEXT STRING @ HL RES 0,D ;FLAG THAT A STRS: DEFM '$' DEFM '$' DEFM 'cannot seek$' DEFM 'bad crc$' DEFM 'cannot restore$' RDYMSG: DEFM 'drive not ready -$' IT FOR CONSOLE INPUT CP 'C'-64 JR Z,REP7-$ XOR A ;RETURN A=0 IF SOMETHING OTHER THAN RET ; CONTROL-C WAS TYPED AT THE ; ; UNIT: DEFS 1 PUNIT: DEFS 1 TRACK: DEFS 1 SECTOR: DEFS 1 POINTR: DEFS 1 FLAGS: DEFS 1 CLASS: DEFS 1 DEFS 32 T2HX: PUSH AF RRA RRA RRA RRA CALL PUTNIB POP AF PUTNIB: AND 00001111B ADD A,90H DAA ADC A,40H DAA LD C,ARING WAS SKIPPED REP6: DJNZ REP4-$ ;REPEAT FOR ALL 5 POSSIBLE ERRORS LD HL,TSMSG CALL PMSG ;PRINT TRACK/SECTOR# HEADER  RWERRS: DEFM 'write protected$' DEFM 'write fault$' DEFM 'record not found$' DEFM 'bad crc$' DEFM 'data overrun$' TS CONSOLE ; SKIP: PUSH BC ;SAVE BC LD B,255 LD A,'$' CPIR ;SCAN MEMORY LOOKING FOR '$' POP BC RET ; ; ; ; CHARSTACK: DEFS 1 ;LOCAL STACK FOR WARM BOOT ; ;******************************************************** ;* * ;* DISK I/O CALL OVECTR ;PRINT A HEX-ASCII CHARACTER RET ; ; ; LF EQU 0AH ;LINE FEED CR EQU 0DH ;CARRIAGE RETURN DSKMSG: DLD A,(TRACK) CALL PUT2HX ;PRINT TRACK# IN HEX LD C,'/' CALL OVECTR LD A,(SECTOR) CALL PUT2HX REP7: LD A,1 OR A ;RMSG: DEFM ' trk/sect = $' SIGNON: DEFB CR,LF DEFM 'COPYRIGHT (C) 1981, XEROX CORPORATION' DEFB CR,LFACTER STRING OUTPUT ROUTINE. PRINTS ASCII DATA ; POINTED TO BY HL UNTIL A DOLLAR SIGN IS ENCOUNTERED PMSG: LD A,(HL) ;HL PO#  BUFFERS FOR BDOS FILE HANDLER * ;* * ;******************************************************** ; ; ; DIRBUF: DEFS CK #2 JR NZ,BOMB-$ LD HL,.RES.4580H+BASE LD BC,0501H CALL RDLOOP ;READ ODD SECTORS ON TRK 2 LD HL,.RES.4600H+BASE ALIZE THE PRINTER ; LD A,07 ;LOAD THE BAUD RATE OUT (0CH),A ;SEND TO THE SIO CH. LD BC,0803H CALL RDLOOP ;READ ODD SECTORS ON TRK 0 LD HL,.RES.3400H+BASE LD BC,0902H CALL RDLOOP ;READ EVEN SECTORS ON128 ;SCRATCH DIRECTORY BUFFER ; ALL0: DEFS 32 ;UNIT 0 ALLOCATION BUFFER CHK0: DEFS 16 ;UNIT 0 CHECK VECTOR ALL1: DEFS 32 LD BC,0402H CALL RDLOOP ;READ EVEN SECTORS ON TRK 2 GOCPM: LD A,0C3H ;STORE JUMP VECTORS IN RAM LD (00H),A LD HL,CBIOB ; ; SEND A 'RESET' SEQUENCE TO THE PRINTER ; LD B,03D ;NUMBER OF BYTES IN SEQUENCE L TRK 0 LD C,1 CALL SEEK ;SEEK TRACK #1 JR NZ,BOMB-$ LD HL,.RES.3C80H+BASE LD BC,0901H CALL RDLOOP ;READ ODD SEC ;UNIT 1 ALLOCATION VECTOR CHK1: DEFS 16 ;UNIT 1 CHECK VECTOR ALL2: DEFS 32 ;UNIT 2 ALLOCATION VECTOR CHK2: DEFS 16 ;UNIT S+3 ;JUMP TO CBIOS WARM BOOT AT 00H LD (01H),HL LD (05H),A LD HL,BDOS ;JUMP TO BDOS GOES AT 05H LD (06H),HL LD (38H),D HL,INPR2 ;ADRS OF TABLE INPR1 CALL POBUSY ;IS PRINTER READY? JR C,INPR1-$ ;* RETORS ON TRK 1 LD HL,.RES.3D00H+BASE LD BC,0902H CALL RDLOOP ;READ EVEN SECTORS ON TRK 1 LD C,2 CALL SEEK ;SEEK TRA2 CHECK VECTOR ALL3: DEFS 32 ;UNIT 3 ALLOCATION VECTOR CHK3: DEFS 16 ;UNIT 3 CHECK VECTOR ; ; ; ; ; END A LD HL,MONITR ;JUMP TO MONTR GOES AT 38H LD (39H),HL LD BC,0080H CALL SETPTR ;MAKE DISK BUFFER=0080H ; ; INITI$ PEAT TILL READY LD A,(HL) ;GET THE BYTE OUT (05H),A ;SEND IT INC HL  ;AND RETURN ; ; CONOUT: LD A,C JP MONITR+12 ;MONITOR CONSOLE OUTPUT RTN. ; ; ;***************************************FB 50H ; 'P' ; ; ; BOOT LOADER ERROR MESSAGE ROUTINE ; BOMB: LD HL,DEAD CALL PMSG JP MONITR+3 ;JUMP BACKPBSY-$ ;REPEAT TILL READY LD A,E ;GET CHARACTER FROM REG E CALL POSEND ;PITR+6 ;MONITOR CONSOLE STATUS RTN. ; ; CONIN: JP MONITR+9 ;MONITOR CONSOLE INPUT RTN. ; ; RESET THE HIGH ;POINT TO NEXT BYTE DJNZ INPR1-$ ;REPEAT TILL DONE ; ; LD A,(PUNIT) ;SELECT **** ;* * ;* LIST OUTPUT DEVICE DRIVER * ;*  TO PFM-80 ; DEAD: DEFB CR,LF DEFM 'cannot boot CP/M $' ; ; ; RDLOOP: LD (POINTR),HL ;STORE ADDR. PASSED IN HL LD A,C RINT THE CHARACTER CP 0AH ;WAS IT A LINE FEED? RET NZ ;RETURN IF NOT CPBS ORDER BIT IF THE ABOVE INSTRUCTION ; IS A 'CALL MONITR+9'. IF A 'JP MONITR+9' THIS CODE ; IS NOT EXECUTED AND THESAVED DRIVE LD C,A ;* JP CCP ;* JUMP TO COMMAND CONSOLE PROCESSOR ; ;  * ;******************************************* ; LSTOUT: CALL POINP ;CHECK IF PRINTER HAS DATA  LD (SECTOR),A ;STORE SECT# PASSED IN C PUSH HL PUSH BC CALL READ ;READ THE SPECIFIED SECTOR POP BC POP HL JR NZ,BY2: CALL POBUSY ;IF SO GET PRINTER READY JR C,CPBSY2-$ ;* LD A,03 ;LO 'RETURN' IS DONE FROM THE MONITOR. ; RES 7,A ;RESET THE HIGH ORDER BIT RET  'RESET' SEQUENCE TABLE FOR PRINTER ; INPR2 DEFB 1BH ; 'ESC' DEFB 0DH ; 'CR' DE JR NC,LSTOUT-$ ;REPEAT TILL CLEAR CPBSY: CALL POBUSY ;CHECK IF PRINTER BUSY JR C,COMB-$ INC H ;BUMP LOAD ADDRESS BY 256 INC C INC C ;BUMP SECTOR# BY 2 DJNZ RDLOOP-$ RET ; ; ; ; ; CONST: JP MON% AD A WITH AN 'ETX' CALL POSEND ;PRINT IT WAIT: CALL POINP ;LOOP TILL RECEIVE JR********************************************** ; ; ; SECTOR TRANSLATE TABLE FOR 16 SECTOR ; TRACKS WITH 1 IN 5 INTERLEAVE ;ITH PRINTER NOT READY OR A ;ELSE RESET CARRY FLAG RET ;* AND RET WITHDEFB 10000000B ;ALLOCATION MASK MSB DEFB 00000000B ;' ' LSB DEFW 16 ;CHECK SIZE DEFW 3 ;RESERVED TRACKS ;  ;SET CARRY FLAG RET NZ ;RET WITH NO CHARA. AVAIL. IN A,(05) ;* ELSE G C,WAIT-$ ;* AN 'ACT' RET ;THEN RETURN ; ; PRINTER BUSY ROUTINE ; POBUSY:  SECTAB: DEFB 1,6,11,16 DEFB 3,8,13,18 DEFB 5,10,15,2 DEFB 7,12,17,4 DEFB 9,14 ; ; ; DISK PARAMETER BLOCK FOR SA400  PRINTER READY ; ; ; PRINTER OUTPUT ROUTINE ; POSEND: OUT (05),A ;SEND THE BYTE RET ; ; DISK PARAMETER HEADERS FOR A 4 DISK SYSTEM ; DPHTAB: DEFW SECTAB,0000H ;DPH FOR UNIT 0 DEFW 0000H,0000H DEFW DIRBUF,DET CHARACTER OR A ;RESET CARRY FLAG RET ;AND RETURN ; ; ; ;********IN A,(07) ;READ SIO PORT CH. B AND 04 ;MASK OUT BITS OF INTEREST XOR 04 MICROFLOPPY ; USING SHUGART RECOMMENDED 18 SECTOR / 40 TRACK FORMAT ; DPBLK: DEFW 18 ;SECTORS PER TRACK DEFB 3 ;BLOCK SHI ;* AND RETURN ; ; ; PRINTER INPUT STATUS ROUTINE ; POINP: IN A,(07) ;READ SIO PORT CH. B PBLK DEFW CHK0,ALL0 DEFW SECTAB,0000H ;DPH FOR UNIT 1 DEFW 0000H,0000H DEFW DIRBUF,DPBLK DEFW CHK1,ALL1 DEFW S************************************************ ;* * ;* DISK I/O SUBROUTINES FOR CP/M CBIOS * ;* * ;********** ;* TO CHECK PRINTER READY SCF ;SET CARRY FLAG RET NZ ;RET WFT CONST. DEFB 7 ;BLOCK MASK CONST. DEFB 0 ;EXTENT MASK CONST. DEFW 81 ;MAX BLOCK# DEFW 31 ;MAX DIRECTORY ENTRY#  AND 01 ;CHECK FOR RECEIVE XOR 01 ;* CHARACTER AVAILABLE SCF & ECTAB,0000H ;DPH FOR UNIT 2 DEFW 0000H,0000H DEFW DIRBUF,DPBLK DEFW CHK2,ALL2 DEFW SECTAB,0000H ;DPH FOR UNIT 3 DEFJR Z,HOME-$ ;RE-TRY HOME IF ERROR INDICATED RET ; ; SEEK: LD A,C ;GET TRACK # FROM C LD (TRACK),A CALL MONITR+33 ;CALLT ; VIA BC ; ; ; SELECT: LD HL,0 ;PREP TO CHECK FOR MAX UNIT# LD A,C CP 4 RET NC ;RETURN WITH HL=0 IF C > 3 LD (ROR TO HANDLER CALL REPORT ;REPORT DISK ERROR TO CONSOLE JR Z,READ-$ ;RE-TRY READ IF INDICATED RET ; ; ; WRITE: LD HLCALL REPORT JR NZ,SEL2-$ ;JUMP IF COMMAND ABORT INDICATED LD A,(UNIT) ;ELSE TRY TO SELECT THE DRIVE AGAIN LD C,A JR SELEW 0000H,0000H DEFW DIRBUF,DPBLK DEFW CHK3,ALL3 ; ; ; ; SETSEC: LD A,C LD (SECTOR),A ;STORE SECTOR NUMBER PASSED RET SEEK ROUTINE IN MONITOR RET Z ;EXIT IF NO ERRORS INDICATED LD C,2 CALL REPORT ;REPORT SEEK ERROR TO CONSOLE RET NZ ;UNIT),A ;STORE C AS NEW DRIVE UNIT# LD L,A ADD HL,HL ADD HL,HL ADD HL,HL ADD HL,HL ;MULTIPLY UNIT# BY 16 LD DE,DPHT,(POINTR) LD A,(SECTOR) LD C,A CALL MONITR+39 ;CALL WRITE ROUTINE IN MONITOR RET Z ;RETURN IF NO ERRORS LD C,4 ;INDICT-$ SEL2: XOR A LD (UNIT),A LD HL,0 ;DISABLE FURTHER BIOS CALLS BY RET ; INDICATING SELECT ERROR  ; VIA BC ; ; TRANS: EX DE,HL ;ADD TRANSLATION TABLE ADDRESS ADD HL,BC ; PASSED IN DE TO SECTOR# IN BC LD L,(HL) LDRETURN PERMANENT ERROR UNLESS LD A,(TRACK) ; RE-TRY REQUEST IS INDICATED LD C,A JR SEEK-$ ; ; ; READ: LD HL,(POINTR) AB ADD HL,DE ;ADD START ADDRESS OF DHP BLOCK PUSH HL LD C,A ;LOAD C WITH DISK DRIVE NUMBER LD B,0 ;LOAD B WITH SEEK SCATE WRITE ERROR TO HANDLER CALL REPORT ;REPORT DISK ERROR TO CONSOLE JR Z,WRITE-$ ;RE-TRY WRITE IF INDICATED RET ;ELSETO BDOS ; ; ; HOME: CALL MONITR+30 ;CALL HOME ROUTINE IN MONITOR RET Z ;RETURN IF ALL WENT WELL LD C,2 CALL REPORT  H,0 ;LOOKUP PHYSICAL SECTOR NUMBER RET ; AND RETURN IT IN HL ; ; SETPTR: LD (POINTR),BC ;STORE DATA POINTER PASSED RE LD A,(SECTOR) LD C,A CALL MONITR+36 ;CALL READ ROUTINE IN MONITOR RET Z ;RETURN IF NO ERRORS LD C,3 ;INDICATE READ ERPEED FOR THIS DRIVE CALL MONITR+27 ;CALL SELECT ROUTINE IN MONITOR POP HL RET Z ;EXIT IF SELECTED SUCCESSFULY LD C,1 '  RETURN PERMANENT ERROR ; ; REPORT: LD (FLAGS),A ;STORE 1771 I/O STATUS FLAGS LD A,C LD (CLASS),A ;STORE COMMAND CLASS OF;GET REMAINING 1771 ERROR BITS INTO E LD HL,RWERRS LD A,(CLASS) CP 3 ;DETERMINE IF SELECT/SEEK OF R/W ERROR JR NC,REP2- ERROR LD HL,DSKMSG CALL PMSG ;PRINT OUT START OF MESSAGE DEC HL LD A,(CLASS) LD B,A REP1: CALL SKIP ;SKIP TO NEXT $ LD HL,SKERRS ;POINT HL TO PROPER SET OF MESSAGES REP2: LD B,5 RES 0,D REP4: SLA E ;SHIFT OUT A 1771 STATUS REG BIT JR'$' IN STRING @ HL DJNZ REP1-$ CALL PMSG ;PRINT STRING NOW POINTED TO BY HL LD HL,ERRMSG CALL PMSG ;PRINT 'error ' AF NC,REP5-$ LD C,',' BIT 0,D CALL NZ,OVECTR ;PRINT COMMA BETWEEN STRINGS IF D=1 CALL PMSG ;THEN PRINT ERROR MESSAGE @ HLTER TYPE LD A,(FLAGS) RLA ;TEST FIRST FOR DRIVE-NOT-READY ERROR JR C,REP8-$ ; AND JUMP IF THAT IS THE PROBLEM LD E,A  SET 0,D ;FLAG THAT A STRING WAS PRINTED JR REP6-$ REP5: CALL SKIP ;SKIP TO NEXT STRING @ HL RES 0,D ;FLAG THAT A ST