IMD 1.17: 3/01/2010 9:15:12 plus2 utilities by microcode emerald microware aloha, or 97007 xerox sssd format  422'i]  EAD     .\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>2=÷éá?Tà;ó  !5#F#N#~(.l6~#2:k2!f""22 1:;<()pEra M˯Y 2go6:62pXpro Plus2 v0.7 gp Boot err1Y?|(N!n("'BKT ( yݾ8!4~! O>!2"!2":O!;(8yOͳ:< !tSETCLK>!2~?~((y.Kf:G.*H>ͷ(: .-;.7. 3.!/y2.'y2.C.:ĩ@.Es41&e1y2U!;!A2x.> (O.!

:0::  !7>#(>>2bM~#O 2/20/86 REVCRC COMCRCKLISTCRCD COM) so that you may warm boot from them. The formats that can be cold booted from are: Kaypro, XPRO 16, and Xerox 820-1 12/15 *** PLUS2 ROM SET REVISION LOG *** 12/20/85 Added P2DSKDF files (3). The P2DSKDF.LIB is basically empty right now, and FORMAT COM' P2BIOS AZM}P2CNFG COM !"#$%&'()*+,-P2CNFG COM:./012345/85 Revised AUTOBOOT.COM to allow spaces in command line (SD $A, etc) 12/12/85 Revised PLUS2 ROM to correct booting problem w#CRC.COM 5.0 6/18/82CRCKFILE???!9" 1 M @ CRC Ver 5.0 CTL-S pauses, CTL-C aborts :] O@ ++Searching for CRCKLISTwe will be adding formats as we have a chance to test them. Feel to add any that you can try out, and forward them to us. SETCLK COM6SYSGEN COM 78ith single sided, double density, 8". 12/10/85 Revised P2CNFG.COM to correct minor problem in boot sector. (It didn't lik file++@ Now searching for "CRCKFILE" file++ !  1 .) F!  ͡]͸! - Revised ASSIGN.COM to warm boot on exit. - Revised SYSGEN.COM to sysgen to other resident disk formats (X 820-2, SWP, etc.e to generate from standard Xerox system disks, sometimes ....)  ͔0CRCKLIST???CRCKFILE???!9" M à*,*.}|ډ!".*,{z{** u*.".G*.", F*}’">͇†]<  CANNOT CLOSE CRCFILE$CRCKLISTCRCSK FULL: CRCFILE$  w #e w~ T #>2 @ - s M@ File not found ! 4 >2 o: G: „: G: „@ *Match* 2 !|: ʲ !\   :\2 ! \  \ ! \  \! \  \<7=Ɓo&   ]  2:0~#!A.O.Gy~#0M0 K MMɷ:m2 FSÄCRCKLIST$$$››tK›,!".***,}>*.#".ɯ22)! ",". <  NO FILECRC FILE$!   >. @ Checking wi# !]͐ DONE$!e S!]Q !eZ @ --> FILE: XXXXXXXX.XXX CRC = oS) \<‘@ ++ 4@ <-- is, was --> : ) > T : ) M 2 ! 4<2 ~# @ Not a space between CRC values<2 G-CATALOG???h2|2   ~$#~# x  : F} *}= ">͇1 ]2 3o: : @ ***No CRC Files found***$> ʉ ʉw#: OPEN FAILED++ !" !" * | ʹ) \!~2 #" Ý: ) > T : ) @ ++FILE READ E@ ++ Now searching for "-CATALOG" file++ !  ) .) ! ”>.”#””͡”››tK› ++ABORTED++$ : ~ 2 M @ Quantity of file CRC that matched - : ̓ :  M @ Quantity of file CRC that did not*#"ɯ2i2}! "!"]]2 s : ~# ++FILE NOT FOUND++$:<2 P6: .6@ Can not parse string ! ~ʽT #ñM ! > 6 #6^#6! ~T #! 4M #x]RROR++ <* |): o% |g}o" 2  ; 0T ~T #~A > T > _h : F{͇2h2›͸›* =: =͔="  ʳ ª~#.  ¿~  #~  .+~#0  match - : ̓ : J M @ Quantity of lines failed parse test - : ̓ : ~ M @ Quantity of file(s) not found - : ̓ * --> FILE: ABORTKY .COM CRC = 6C B9 --> FILE: ASSIGN .COM CRC = E6 5A --> FILE: AUTOBOOT.COM CRC = 53 E5 --> FILE: Cl]Q !]6 !E 6!C 6 :C *C &l ~2D U¼:E 2 :D S:E 2:D F:E 2:D V:E 2:D P:E 2 :D N2E !DF .COM CRC = 89 ED --> FILE: P2DSKDF .SKW CRC = 69 5A --> FILE: 2/20/86 .REV CRC = E6 6D d͔  ͔ 0T  Җ Wyʩ 0T 0ztiil Hit Space: RC .COM CRC = B2 07 --> FILE: CRC .DOC CRC = E5 81 --> FILE: P2DSKDF .LIB CRC = 7B 47 --> FILE: D .COM CC 4Ø:!4:!5(  ! I3= : [= t:\a:\=_: :] t ?]\ : ҃! 6?KK : k Used: /k Not used: k *% DMf : remain on 1 !RC = 66 48 --> FILE: FORMAT .COM CRC = A5 1C --> FILE: LOCK .COM CRC = DB 91 --> FILE: P2BIOS .AZM CRC = B1 D6 --Î : 2   ]Q  ?\\ : DM, Q ! "= *3 ##)*= "; */ &# "! *3 #"#  !! "% >!1 . 2' \9" ! J> # ->! . *ͪe> # < * v K  K  K !B r+s+p+qA ?  p*A *? :]$Ž > FILE: P2CNFG .COM CRC = C1 B5 --> FILE: SETCLK .COM CRC = 1D C8 --> FILE: SYSGEN .COM CRC = D3 73 --> FILE: P2DSK : 2 : ʩ: ƀo&"* ~ʛ*# +"# ** DMY қ** DM  *; q#p* " . ** #DM*; -e**  *; w* #": 2 Ғ * +" : <2 O>ҳ ! 6* #" * ~2 p ̓: AOK = * Ͱ= * ͷ= * Ͱ= *# ͷ= * s#r*S &l ) *M s#r*I "M ^I K  X:S <2S O!T *K s#r*S &l ) *I s#r*G "K û!" "    #* #" : ! ڗ  K ! 4Á ! 6: =! ڻ * & NK ! 4œ >3  03} Z; { ) # : = !: = : <2 * " !" >! .  * *&͵ "( * *&͵ > j*( #"( *DM*( V"( !"  )*= *; s#r*; "; : 2 !S 6!"V * "n >!S d*S &T ) ^#V"K O!l ^#V"M :S =2S M K  a*K "G *Ͱ= . g S -A >>!  ~?l W >#^ : /! )*= * #" )*= N#Fq#p   * )*= * ) *= ^#VN#F? H * #" )*= ^#V";  *; ^#V" * )*= (   K!" }2 : <2 O:* * * "    >! = * DM** +" *( * " Ø* #" *&M "I *K  )*= ^#V"O I G  *G )*= N#F*O ? J*G #"G (*I )*= ^#V*O DM? m*I +"I JI G  *G )*=:' —  ʑ #‹  W ʢ #™ i`N#FogDM!>))덑o|g =¼ DM!>)) = ^#V) ^#V|g}o ^#V"; *;  ͪ  *; q#pÝn* " ! p+q* )*= ^#V"; ! 6> ! i* &*; >OK : <2 E:/ *; ^#V*% *( * " 3*1 #" " " *5 " > # R : B * +" ! +s#r( ! 6: " * ~2 * #" * +" > ʶ  ^#V"Q *I )*= *G )*= N#Fq#p*I )*= *Q s#r*G #"G *I +"I K I  G M   !M G  :S <2S O!T *G  _{ozgO{ozgi`N#Fogo&og_{_z#W OK = Y -S {-_ ! s+p+q*  ͼ 2 <2 DMf kK : *; Nf E*; ~ڻWK þE *; ~SK E = ! 6:! ':/  F   ### Z80? ### $ ### System size is too small ### $:!.1ʽM ### Plus2 ROMs not in ^#V'2%~ %M= O<----- Format selecteFormat: Entire disk single track abort:͜ESC> to abort:͜( MUser exit.z0˯A8!(02C*NAw*q~%ݶM  This 5.25" d_M):(2:<2M= WSkew: Press to format -OR- to abort:͜z0˯F >2 +M Kaypro 8 QUAD (double-side!0MIBM 3740 (single-side*~-M Xerox 820-II (single-side)stalled ### &:Q *L~! .K"1M *******************************************************z0˯S( E >]MS Enter track number to format (0n&_M):(#Һ2y:<2lM= WTrack(s):><( =o&rive has not been selected yet. Is it a quad drive (double-sided 96-tpi)? (Y/N):͜z0˯N(Y %6(M=% =% ʮ ### Disk is write protected. ### ### ~%(*MCover write-protect slot with label.(MRemove Xpro 16 (single-side) Xerox SWP (single-side~%  eM Xerox 820-II (double-side) Xpro 16 (d***** * Plus2 Format Utility v0.4 * *  1985 MICROCode Consulting _MAL Verify? (Y/N):͜z0˯N(Y N2:l<2M= WVerify: >(MYeMN Skew factor is/~% M5.2M8.0M" formats available for PHYSICAL drive x: ~%1MXerox 820 (single-side) Xerox 8 label from write-protect slotM ### ---- Press any key to continue ---- .'͜ô~ʊ 2 ~%B  ouble-side) Xerox SWP (double-side!Enter letter in <> above -OR- to abort:͜z0˯A80O * ************************************************************! ~A2M Enter PHYSICAL drive to format -OR- <~ 2M. Press to change or to leave as is:͜z0˯ (CC MC Enter skew factor (1n&+20-II (single-side) Xerox 820-II (double-side) Kaypro 2 (single-side) Kaypro 4 (double-side~%  ### Cannot format single-sided disk with double-sided formatß  ### Cannot format double-sided disk with single-sided2: 2y2!n!E\}(!f~6>!gv¿¿vQ2fL 2k!~()= "HE\(: another disk -OR- to abort:͑  <8(ۯ7### Drive not ready - press any key to cona(0O2}02'd (M ͜ !802!6͜(5(# !8(0y key to continue ###͜7> = g~!: =~%(#2 !1͉ 2 ~ 2 !!~(! driveß ### Drive not ready - no disß !" 2 =2 :y<(1M=4  Formatting track*y&_:y͑ ò M=1 =29F ( J! Vz(!f~6>!fv--2f͡  !f> L * #" >2kz>F#~# !tinue ###͜2 8ͨ >̚$͢:>( >8>2 :y< !>5F(?0 2 y2 M= M ... Done*62w#xP x(M +x(M +!O~y~08_ 0y(@0CO#M ### Bad digit in line, please re-enter ### :n#"~ (G>NF>N2N  N  ~Gx( 22: 22y22~22!n}#n!gormatting... (any key aborts) 1 1 2 2 3 3 ~~(?)8'M4 4 5 5 6 6 7 +~ $)= >- % >2 ~ !H !H6#FJ!H~ {8_q { _O!H ~M=3  M>(:C@8/O~: (?02 _'{ر^ q x(>(k 7>7͉ w˷>G!ML ( +| 7>0M ### Numeric overflow (255 max.), please re-enter ### :( $1>XeKr '' OR"~%Y!6" !nF>2~Gx( 2 : 2y2!n!" !nF>2~Gx( 8M0----5---' 0M=1-ABORTED! ...M=1:(#MTotal flawed sectors:!_.'M Press to format  o&_MKaypro'M| 2} 2> 2> =(<_S~2~#!^#V#R8< >O<.HL > ͞ 2 G > ͎ &W>2 %~( %^ "z>͞  ͉ ### Cannot restore drive - press an   ' O   LL 2 2L L ( with M80, you must set the M80 equate to ; TRUE, and M80 will use the conditional assemblies that apply. ; ; ; To assemble ;**************************************************************** ;* * ;* P2BIOS.AZM (or .MAC) for the PLUS2 ROM set bM, or SYSGEN.COM. You may run P2CNFG on the ; system either before or after the BIOS is install to set up your ; BOOT sector is BIOS ; is supplied for those how need to install special drivers in ; their BIOS. It may be assembled using either Z80MR - ( PN N  NN ( with Z80MR: ; ; A>z80mr p2bios ; This will make a P2BIOS.HEX file ; ; To assemble with M80: ; ; A>m80 =p2bios ; This wiy * ;* by MICROCode Consulting * ;* * ;***************************************************************information, which will still make most of the setup ; parameters for the BIOS. The system size must match the system ;size o public ; domain; available from Micro Cornucopia - on one of their user ; disks, the Kaypro Users Group NW - library disk, th           ll make a P2BIOS.REL file ; A>L80 p2bios,p2bios/n/e ; This makes a P2BIOS.COM file ; ; ; You will also need a copy of your* ; ; ; This custom BIOS is supplied with the PLUS2 ROM set for the ; Xerox 820-1 or Big Board I. Under normal conditions, f the BIOS that you are installing. The procedure is as follows: ; ; A>movcpm 62 * ;make a system of the proper size ; REe Emerald ; Microware bulletin board - accessible by modem, or with QP/M ; from MICROCode Consulting. ; If you are assembling operating system in a .COM file ; to use to install the BIOS for sysgen. You can make this by using ; MOVCPM.COM, QINSTALL.COyou will ; not need to use this file as the P2CNFG.COM program has a ; complete relocatible version of the BIOS built in. Th  ADY FOR "SYSGEN" OR ; SAVE 34 "CPM62.COM" ; A>save 34 cpm62.com ;save it to a file ; A>ddt cpm62.com ;load it with ddt ;################################################# dirm equ 0FD00H ;directory buffer atdef equ 935H-900H+dirm ;attribute dTION ON B, CARRIAGE RETURN TO CONTINUE ; FUNCTION COMPLETE ; your disk is now sysgened ; A> ; ; You can run P2CN PLUS2 is 62k ; msize equ 62 ; system memory size in k moff equ 0 ; 1/4k increment: 0, 1, 2, or 3 for ; 0.00, 0.25, 0u need other printer drivers, you will need to muck around ; with the code ; ; ;## Xerox port information ; prtctl equ 07 *ip2bios.hex ;or p2bios.com if you used M80 ; *h1f80,f200 ;calculate the offset for z80mr ; 1180,2d80 ; sum,diff efinition sysdf equ 936H-900H+dirm ;system definitions biosdf equ 96BH-900H+dirm ;where BIOS info is upon cold boot usrloc FG.COM on the resultant copy without modifying the ; BIOS, as long as you do not make the selection which changes the ; syste.5, and 0.75 k bias equ (msize-20)*1024+moff*256 ; bias for systems ; larger than 20k qcp equ 3400H+bias ; start oh ; serial printer port b status/control prtdat equ 05h ; serial printer port b data comctl equ 06h ; COMM control port ; *r2D80 ;or r1E80 if M80 - select the load point ; 0100 2300 ; *^c ;go back to system ; A>sysgen ;use sysgen to maequ 000Ah ;location for 31 user location hold ;should be clear of drive/user flag iobyte equ 3 ; logical to physical mm size. ; ; The new bios will be loaded on the next cold start (reset) or ; warm reset (^backspace on the Xerox std. keyboaf QCP bios equ qcp+1600H ; start of Basic I/O Subsystem (BIOS) qdos equ qcp+806H ; start of QDOS qpml equ bios-qcp ; lengthcomdat equ 04h ; COMM data port pioad equ 8 pioac equ 9 piobd equ 10 piobc equ 11 sysdat equ 1ch ;## Misc Info ####ke the final load ; SOURCE DRIVE OR CARRIAGE RETURN TO SKIP ; DESTINATION DRIVE OR CARRIAGE RETURN TO SKIP ; DESTINAap maxdsk equ 4 ; max disk # ;## CP/M system size variables ############################################ ; ; Max size forrd) ; false equ 0 true equ 0FFH M80 EQU FALSE ; ; ; Printer driver handled from printer driver code bytes ; ; If yo   of QP/M system in bytes (less BIOS) nsects equ qpml/128 ; length of QP/M system in sectors(less BIOS) IF M80 .Z80 asego the QCP boot: ld hl,atdef ;set video attribute di in a,(sysdat) ;set video mode and 11110111b or (hl) out (sysdatlected disk drive jp seldsk ; select disk drive jp settrk ; set track # jp setsec ; set sector # jp setdma ; set DMAfrg: ld a,(hl) inc hl ld (0ffffh),a djnz fixfrg ; ld de,frginf ;Ferg size info ld c,8 ;set into Ferg DPB ldir ;  printer type protocol: ; 0=none, 1=xon/xoff, 2=etx/ack parprt: db 0 ;parallel printer type: 0=normal, ; 08=single org 100h .phase bios ELSE org bios ENDIF ;M80 jp boot ; arrive here from cold start jp wboot ; arrive here fo),a inc hl dfport: ld b,(hl) ;count REDEFINE PORTS inc hl ld c,(hl) ;port inc hl otir ;set it bit 7,(hl) j address jp read ; read selected sector jp write ; write selected sector jp listst ; list status (Ready to print a char ld hl,ppint ;parallel printer interrupt vector ld (0ff1ch),hl ; fix both sides of gpio ld (0ff1eh),hl ; xor a ; clear s port A, 0A=single port B IF M80 ferg: db 'm'-'a' ;Have Ferg 256k/1M or -1 if not ELSE ferg: db 0Ch ENDIF ;M80 qpr warm start jp const ; console status return in A FF=ready, 00=not jp conin ; console char in jp conout ; console charr z,dfport ;more of the same ; IF M80 ld l,low biosdf ELSE LD L,.LOW.BIOSDF ENDIF ;M80 ld a,(hl) ld (iobyte),a ;s) jp sectran ; sector translate jp getdt ; right in the bios - get time/date ; fergpg: db 0ch ;Ferguson logical/physicaystem disk number ld (4),a ld (usrloc),a ; and user # location ; ; Ferguson code ; ei ld a,(ferg) inc a jr z,noerm: db 0efh ;Have QP/M system makes this EF, FF if CP/M ; ; Cold boot entry point, set up system pointers and pass control t out jp list ; listing char out jp punch ; punch char out jp reader ; reader char in jp home ; move to track 0 on seet I/O byte inc hl ld de,fergpg ;set 7 definition bytes ld c,7 ldir ; ld b,3 ;fix Ferg mapping (lower 3 only) fixl bank 0 map ;0C = 256k, 3C = 1M serand: db 4 ;serial AND mask serxor: db 4 ;serial XOR mask serprt: db 0 ;serial  a ; call print db 1ah IF M80 dc 'Era M?' ELSE db 'Era M' db 0BFh ENDIF ;M80 call conin res 5,a sub 'Y' p ; done loading ; ex de,hl inc c ; bump sector count ld a,c ; on to next track? cp (ix+16) ; IX has DPH base jr  wb0: call print db 13,10 IF M80 dc 'Boot err ' ELSE db 'Boot err' db 0A0h ENDIF ;M80 call conin ; wb01: ld sld (6),hl ld a,(4) ; last logical disk unit used ld c,a ; pass to qcp to select and 0fh ; make sure this is valid driackad),hl ; save track address for bumping ld de,qcp ; first memory location to load ld bc,nsects*256+1 ; set count & secjr nz,noera di ld (0ffffh),a ;swap in page 0 ld h,a ld l,a ld de,1 ld (hl),0e5h ld b,16 ;direc entries clear ouc,wb1 ; ld hl,0 ;bump track number trackad equ $-2 inc (hl) ; ld a,(ix+21h) ;get density (another cute cheat) xor 20p,100H ; re-set stack ld c,0 ; select drive A: ld e,c ; make sure we say NEVER selected before call seldsk ; get IX seve ld hl,ferg ; can't forget Ferg! cp (hl) jr z,okdsk0 cp maxdsk ; El bozo select of far off drive... jr c,okdsktor 1 (logical) wb1: push de push bc call setsec ;set sector ld b,d ld c,e call setdma ; and dma call read ;fetct ldir ld a,(fergpg) ;top ferg page for bank 0 ld (0ffffh),a ;back to top page ei noera: call print db 26 db ' h ;invert rra ;rotate to get sector # (0 or 16) ld c,a ;back into C jr wb1 ; goccp: ld a,0C3H ; set up QP/M jumps tt to DPH jr nz,wb0 ld c,(ix+1fh) ;start track from start sector # (cheat) bit 5,(ix+21h) ;check density jr z,oktrk0 ; 0 ld a,c and 0f0h ; strip that pig out, but leave user alone ld c,a ; okdsk0: call getdt ld a,(qpm) and 10h or h it pop bc pop hl jr nz,wb0 ; oops, error on warm boot ; ld de,128 ; new dma address add hl,de dec b jr z,goccPlus2 v0.3' db 13,10+80h jr goccp ; ; Warm boot entry point, re-load the QCP and QDOS ; wboot: call diskint jr wb01 ;o qdos and wboot ld hl,bios+3 ; wboot entry point ld (0),a ld (1),hl ld hl,qdos ; entry point to qdos ld (5),a track # ok if double-density ld c,a ;sorry - it is track 0 (single density) oktrk0: call settrk ; track to start ld (tr  (hl) jr nz,isokdt ; ld hl,tdprg ;time/date prog ld de,qcp+7 ld bc,tdprge-tdprg ;size ldir ;move it in jp qcp ;as ret conin: call const ;yawn... jr z,conin ;wait for something to happen ; ld a,(iobyte) ;something changed push af CHEAT and use dph for last param) ;; dw 0 ;or offset dphm: dw 0 ;dphm dw 0 dw 0 dw 0 dw dirm ;dirbuf dw dpbm ;k: ld a,c ;Ferg stuff ld (mtrack),a ld l,12H ; seek track jr callrom setsec: ld a,c ;Ferg ld (msect),a ld l, and 4 jr z,punch ld a,c out (comdat),a ret getdt: ld l,4bh ;don't forget QP/Ms needs jr callrom const: ld a,sume A0 ; tdprg: db 6,'SETCLK' ; set Emerald Microware clock tdprge equ $ ; MUST be capitals isokdt: ld a,3 ;so can do a and 2 ;maybe 'twas reader? call nz,readst ; check it out pop bc jr nz,reader ;yep - fetch ; ld l,2dh ;since not reaDPB for this dw 0 dw alloc ; ; Mapping of I/O byte as follows: ; ; bit 7: 0=serial, 1=parallel printer ; 6: 1=consol15H ; set sector number jr callrom setdma: ld (mdma),bc ;Ferg ld l,18H ; set dma address jr callrom conout: ld a(iobyte) ld b,a ;save here, too ld l,2ah and 1 call nz,callrom ;if nz, means ok to check console ret nz ;got char ;uto-boot on cold start ld hl,qcp qcpval equ $-2 ld (qcpval),a jp (hl) ;bye.... dpbm: dw 16*8 ;16k * 8 sectors/k frgder, must be console jr callrom ; (we hope) diskint: ld l,03H ; re-set disk software sub-system jr callrom home: ld e output also goes to printer ; 5-2: ; 1: 1=COMM port serial I/O console ; 0: 1=kbd/video [possible to have both],(iobyte) push af and 2 call nz,punch ;send to COMM port pop af push af and 40h ;console goes to printer, too pus bit 1,b ;reader? ret z ; nope ; readst: in a,(comctl) ;reader status: -1 if ready, 0 if not rrca ld a,0 sbc a,a inf: db 3 db 7 db 0 dw (256-64)-1 ;max size dw 63 ;64 dir entries db 0c0h,00h ;pre-alloc for dir dw 0 ;no check (l,0CH ; home disk drive rom routine jr callrom sectran: ld l,21H ; xlate logical to physical sector jr callrom settr ; reader: call readst ;COMM is reader jr z,reader in a,(comdat) ret punch: in a,(comctl) ;COMM is punch (surprise!) h bc call nz,list ;send to LST: device, too pop bc pop af rrca ret nc ; ld l,45h ; video output ; ; put here sietry sub 'I' ;Ignore clears error flag ret ;any other fumble fingers return the error write: ld a,(mdisk) cp 'M'-'A' (sysdat),a ex af,af' ; restore reg A ei ret ; done with rom routine seldsk: ld a,c ld (mdisk),a ;Ferg ld hl,fer z,rdw2 ;make sure data moving right direction ex de,hl rdw2: ld bc,128 ldir ld a,(fergpg) ;restore ld (0ffffh),a el call callrom ;do op & check result ld hl,qpm and (hl) ;since qp/m auto-logs, pop hl ; can ignore RNF error ret z nce conout is most frequently called of any ; callrom: ld (savsp),sp ; save current stack (may be under rom) ld sp,stack ; s ld l,1EH ; write a logical sector jr nz,rwchk frgio: push af ;clear buffer ld l,51h call callrom ;so we can useg cp (hl) ;Ferg is easy ld hl,dphm ret z ;always there since RAMcard not removable ; (not entirely true - but don'ti jr nz,mend ;end for write m64: ld hl,mbuf ld de,0 mdma equ $-2 jr z,isrd0 ex de,hl isrd0: ld bc,128 ldir mend ;was ok ; push hl call print ;naughty error! db 13,10,'BIOS err on ' dname: db 'x: Acpt Ignr Rtry?',88h call conin et a local stack di in a,(sysdat) ; turn rom on or 80h ; is faster than set out (sysdat),a ei ld h,0 ;ROM base at it pop af or a push af call nz,m64 ;move into high mem pop af di ;into the world according to Fergy ld hl,0f try it ; with the power on) ; add a,'A' ld (dname),a ld l,0FH ; select disk drive jr callrom ; let ROM do the: xor a ;success always! ret ; ; screwy list mapping ; list: call listst jr nz,list0 ;is list ready yet? ; call cons ;ask user what to do push af call print db 13,1BH,52H+80H pop af pop hl res 5,a cp 'R' jr z,rwchk ;wants to R 0000h call callhl ; di ex af,af' ; save reg A ld sp,0 ; restore stack savsp equ $-2 in a,(sysdat) and 7fh outfffh ld (hl),0 mtrack equ $-1 ld hl,0 msect equ $-1 srl h rr l ;love them simple Z-80 shifts or a ld de,mbuf jr work read: ld a,0 ;Ferg mdisk equ $-1 sub 'M'-'A' jr z,frgio ; ld l,1BH ; read a logical sector ; rwchk: push h t ;well then, maybe hit key to abort jr z,list ;snooze... jp conin ;ok get key and toss it ; list0: ld a,(iobyte) ;got  of parallel printer or a jr nz,issprt ;single port printer ; in a,(piobd) ;Xerox parallel cable and 10000b ;check sta;send char ret ; ; serial: ld a,c out (prtdat),a ;send the character ; ld a,(serprt) ;see what the protocol is or a to start or a ret ; ; Other special things ; callhl: jp (hl) ; to routine specified in hl ppint: push af ;parallel - forget it serwt1: call siost ;get status jr z,serwt1 ld a,3 ;send ETX out (prtdat),a jr serwt ;wait for response a bite! rlca jr nc,serial ;wants it a bit at a time (seriously) listxp: ld a,(parprt) ;see what type of parallel or a tus xor 10000b ret z ;else fall through to ready giveup: or 0ffh ; 0ffh=ready ret ; siost: ld hl,serand ;serial AND ret z ;nothing - exit dec a jr nz,isetx ;if <> 1, is etx/ack ; ; XON/XOFF ; call serin ;get serial in char, else 0 port interrupt ld a,0ffh ;just say is ready ld (prtrdy),a pop af ei reti print: ex (sp),hl ; pop return address,  serin: in a,(prtctl) ;see if char is knocking at the door and 1 ret z ; nobody home... in a,(prtdat) ;else get data r jr nz,notxpp ; ld a,c ;Xerox standard parallel printer out (pioad),a xor a ;Send strobe out (piobd),a dec a ;ok p mask ld a,10000b out (prtctl),a in a,(prtctl) and (hl) ; is it ready inc hl xor (hl) ;serial XOR mask jr z,giveif none ret z cp 'S'-'A'+1 ;check for ctrl-s ret nz ;ignore if not serwt: call serin ;wait for any char jr z,serwt ;points to text to print ld a,(hl) ; get a byte of text inc hl ex (sp),hl ; save new return address push af ld c,a ;et listst: ld a,(iobyte) ; check i/o byte rlca jr nc,siost ;check status on sio port b ld a,(parprt) ;see what typerinter - do your stuff out (piobd),a ret ; notxpp: ld b,c ld c,a xor a ld (prtrdy),a ;say printer busy out (c),b up ;is ready xor a ;serial printers take a long time... ret issprt: ld a,0ffh ;see if ready prtrdy equ $-1 ;is ready  printer knows what is it sending anyway ret ;got char - exit ; ; etxack ; isetx: ld a,c cp 0ah ;lf? ret nz ;nope   print it call conout pop af rlca ; was high bit set ret c ; if so, exit jr print stack equ bios+400h ; don't ^{!!Vw#w!m~<6!|~r(6!N!q)}(#*lyb( >w# %!=){. !:}  > _con:rdr:pun:lst: 8 0_~O7let stack damage BIOS code alloc equ $ ; Fergy stuff needs some RAM too mbuf equ 0f900h $biose equ alloc+239/8+1 ;worst cClnʾ !~6G 4ѯ+ *l!J s{)#Ͱ+*lF!>b( x ((h&z{ | }!0-z {|!,{ozg~#foO! ~_#V!$͗r+sbk#| "> w+ w w##w w #~+: ~## !)  #i& ~ !n~(#~#F6 pwase is 240 IF M80 .DEPHASE ENDIF ;M80 end !~!qN#F{p+pH#n z{ 8 +!9~ !~b(!5 > 6> *l w`i#Ͱ᯾ %,!*%"R%"P%"N " " "!^6 PF+N+-!* !!9~#(/ (O"('( +}|+#~( 6#~#!46#6*ͨ@~#.(ͨ*++ͨw#a s#r  0 H V f p   9 M ^ r  ) 6 62'"!9)y.T>w <!ms 6#6 ~+ !͗z(s#r|{ 8!:|!!9n&:ʘɯ2$>Q# !9)):$|!Vw0#4!aw>2$>2#x(U:#O ! DM!c*|rDM*]T  ! 9!"`i]> !:!~6 y= ͑[_   >   ! D Q _ l z      120024004800960019200Standard XeroxSingle port ASingle port BAA|BA|B|CA|B|C|D5.25 SS/DS/QUAD8.00 SS8.00 DS 6 mSeput to printerVideo attributeCursor characterDisplay real-time clockKeyboard modeScreen dump keyAbort keyClock display to********************* READ system from which drive or to abort: ABCD Invalid driveInvalid system diskTole count, MOTOR ON (8.00)A: drive typeA: step rateB: drive typeB: step rateC: drive typeC: step rateD: drive typeD: ste    # ( 1 9 ? E J U a h m q s u y }        " * 2 : < > @ B D c12 mSec20 mSec30 mSec 3 mSec 6 mSec10 mSec15 mSec234546810121416182345678012345678 ***ggle keySerial printer word size parity stop bits baud rateCTS when busyDTR whenhere is not a system image present on that diskError reading system image - bad disk? Detectedk system. Maximum system sizp rateInverse video mod. installedNONE256k1 MegQP/MCP/M2.5 MHz4.0 MHz5.0 MHzNoYesSerialParallelKeyboard/videoCOMMF H K N Q T W Y [ ] _ a c e g i k m o q s u j\dx~rr r************************************************************* * Xerox 820 Plus2 Configuration Utility v1.5  busySerial printer protocolParallel printer interfaceCOMM port word size parity stop bits baude allowed is 62k System does not have the Plus2 BOOT sector and BIOS. Installing default Plus2 values into system image. Kbd/video & COMMBlinkingInverseNONEXON/XOFFETX/ACK7-bit8-bitNONEOdd parityEven parityIgnoreHighLow12110300600System clock rateFerguson RAMcardOperating systemDefault printer (LST:)Default console (CON:)Echo console out * * (c) 1986 MICROCode Consulting * ******************************************* rateDrives availableMotor timeout (sec.)Retry countSector hole count, MOTOR OFFSector hole count, MOTOR ON (5.25)Sector h  MAIN MENU Console and system configuration Disk drive configuration Keyboard/video configuration coMʰ! \! \*͈L*ͦL!2]ó+!2]!!A\͞[! \!6 \!U \!x \! \! \*eo options --- --- Keyboard options --- --- System options --- --- IObyte options --- RESET DEFAULTʩ*A**!-y%*A**!y%*͖]**͖]*͖]diskCould not write system imageError writing system image - bad disk? System image written. Ͷ]!w \! \! \!Nmunications (COMM) configuration

Printer configuration (serial and parallel) system Size (currentlyk) Reset ^'! \! \! \!< \!j{[q!!A\͞[!t \!"*#"y*A*!'L!D& VALUES: Are you sure? (Y/N): YN Current system size isk. Do you wish to install a different system size at this time? (*͖]*͖]'W*)0* Q!T!Ͱ!!A\͞[! \! "*#" \!!A\! \!]!{["͖]ʻU%*]͞[! \*M͖]!d%ÆIM͖]!d%Æall values to default eXit and write system image Press any key above -OR- to abort ?CDKMPRSX --- COMM"͖]ʑÚ*A**!y%y!!A\͞[! \!"*#"*A*!-'Y/N): YN Enter system size you wish to install in k (32-62): No change. %dInvalid system size Enter 1/4k system size (0=.ʥ*A*!&'x! \!H!!&'!H&"͖]Ú* *A* *!&K"͖]!d%Æ*-!0d%Æ!W \*^'!c \*\!nd%Æ!,1"*):<1I port --- --- Drive configuration --- --- Serial port (PRINTER) --- --- Parallel printer --- --- Vid! !A\͞[! ]!"*#":%)!W*A*!' :%)H&"͖]wÚ*00, 1=.25, 2=.50, 3=.75): %d WRITE system to which drive or to abort: ABCD Invalid driveInvalid system  y%,*A* * !&y%ÿ!!A\͞[! \!A!!#'!B!!#d(!C!!#'!/KpCR6SXû    i]}}@] . .?< <}A!!(':3#"+͖]&!}2!G&"͖]>û*ʀ*A*+*+++͖]i!l! *!(y%)!]!n1*)))##)!]!J1"**))))Ͱ!B1*))))!]: "!1* )]!]*|Å!d \!Wuû!"ÅͫW!!!W+T!"Å*i*rÅͣ[#& \!D! !#'!E! !#d(!F! !#d(!G! !#d(!G&"͖]Ú**+7* USER ABORT. ### %s ### <%c> %s <-- to change to quit  Choose any letter in <> above -OR- to exit ?ABCDEFGHIJKLMNOPQRSTUV.%d %02xH (%d) ]!"*#"'3* *4} Ú!!A\͞[mX!uX*^'! \! \!{[|}Ú!Y|ʌ!!Ï!!!]!C1:|ʪ!!í!!!]!1:|!!!!:#:|!!@!!!]!a1:|"*M͖]!d%IM͖]2!d%*a V!d%!"d%cͣ[=H!I \͈Úͣ[.MDZP!2 \!A!!('!B!!('!C!'!('!D!!('!P \!E!!('!F!!('!G %02xH (%d)<-- Enter character as numberDecimal or Hex allowed (Follow hex by 'H')Value: %x!9)͈L: "!j1*)))]! !A\͙[!  \!WÞî!@ \îͫW!!M!W+î* *>!Pd%Å!" ! "!!]!L1:!]!=1:|4"!7"!!]! "*#" r"*<1* !]C"!u1:)][!9)&}o|ʺ'mX!!9)&}o)]uX! ]mX!p!9!9)))uX!9)!9)))#!]!1:".$:"1$!@:#|G$! J$!!]!1:$!]!F1:%!]!D1:&*B+"Bʜ)!.]Á)!9) "B*B&"BmX! *B*BuX!9)!1A\! \!9)#!4A\!* \!+"&!.]%! ]!9))0)!9) #)) \!9)!9A\!y \!9)#!=A\! \!!]!y1:)#!]!w1:ʿ":"!@:|"! "!!]!q1:!]!1:)\"2*2+"2)(!.](! ]!9))0)!9) #)) \! ]mX!p!9!9)))!]!E1:'###!]!G1:()!]!H1:))!]!I1:*)!]!L1"!"*#"'Q%* 9)##!4A\!A \!9)###!4A\!V \!W*! \!\+]|Š*ͫW!!^ !DW+9)!9A\!{[|&!9) #}*&!9) 6Þ%!9)!8A\͙[!9)#!8A\͙[!!A|#! #!:|(#!+#!!]!1:++͖]K#! N#!:++͖]g#!j#!!]!1:!])uX!9)!9)))\"4*4+"4(!.]ï(!9) "4*4&"4mX!*4*4uX!!%!"-%!0"-%!"-%ͣ[% %%*#"*#" *!]$KͶ]!N \͈mX!\!9)uX!!ʇ*æ**ͫW!!!DW+*!9) "D*D&"D**D**D*æ*!9) *D}!9)!A\͞[! \!!\!9##6!{[}21:1͖]S':1]':1! ]!9)Ͱ!9)!: "!1*)]!]!"*#"#*1*)]*!]ë#!1:!)!]!1:!A\͞[!9) "D*D&"D!9)!A\͙[mX!p! 9! 9)))uX!9)!9)))\"BA\͞[!9))0))"!9)!A\͙[mX!o! 9! 9)))uX!9)!9)))\"* \͙[!9) "D*D&"DmX!p! 9! 9)))uX!9)!9)))\"B*B+"Bʅ+!.!Ͱ0*F 6*F#)0!Ͱ0*F 6*F#)0!Ͱ0ͣ[m000å0*F#"F *H&}o}B0!"L*L#"L}2!=1]|-!}2! "F*F#"F Q-*F *F<1]}#-!u1]|l-!}2s-!}2!w1]"F*F]\!"[j\T\T\*Z*[* [ *[*[*[* [*[gb!9\*Ze]hʿ\*ZahL\!qfͨ<*Z!}2"$/!}2"$/ͣ[./ /*F͖]͖]B/!}2#I/!}2#!10"F|a/*F+}2$!F1]~/!F1]}2%!D]j+!9) "B*B&"BmX! *B*BuX!"B*B#"B+!9)*B!4A\͙[ù+!B1],!B1]}(1!9)]*L̈́]%1*L#0!ηη*ZM"Z!9*$"[*Ɛ9[*["M |J[!e&>Ln[!&}oè-!}2ø-!}2ø-!}2ø-ͣ[--Þ-*F&} o͖]-!}2-!}2!q10"F|-*F+}2!1]"F!!..!gb!90*Z"Z!9!e͉0!"@!9!sATr!e͉0!9M*@͑O]*@+R]!1]ʦ/!D1]!]}2&!E1]/!E1]+++}2'!G1]/!G1]!]}2(!H1]0!2 !1],,!}2 <,!}2 <,!}2 <,ͣ[,,",!1]&}o|U,!X,!}2!e1]͖]q,!}23!C1]&}o|"@*Z!sA!e͉0\!9= |ʦ\!9Ͳ" [hʢ[!9!K" [hL[!9!+.#+_!9" [͟>321]"H!}2}2*F&} o|>.*H&} o|7.!:.!}2*F&}o|g.*H&}o|`.!c.!}2!1]ʄ.!1]ͼ}!"@! 9M͊]||]Mͱ`L"!9!"]9ͩ!9"]32"]hʾ]*HhLʀ^ ]*]}H1]!]}2)!I1]60!I1]!]}2*!L1"J!"F*F#"F'0*J#"J]"H*H&}o0*F 6*F#)0ʊ,!Í,!}2!1]"F*F&}o|ʱ,!}2*F&}o|,*F&}o+}2*F&}@o|,!}2!a1]͖],!}2!L1]&|Ļ0!"["["[* [ "[* [ "[/\* ["[H\* ["[H\!"[* ["[H\\ \\\\*[&}o}2!1]í.!}2 ý.!}2 ý.!}2 ý.ͣ[.. ã.!1]V|.!}2!.!}2!!1]"F*F&}o/!}2"$/ J2`"]}`|4^ ]*]}J232"]h*]h.*]^1.|4^ ]*]}J2`*]6!9!9эͮM$!c b(c:b^1|ʲc:b}2b!"cʉcL32^1B|ʲc:b)))J2.}2b~c:bMc\&}o+!"]M$!*]!. 9͠!gb!9!u^!u^u^32}2`^1|6` ]:`}J2`:`:F^1|Q`!assignment?:||&&^==!=-<=>=<>cl.lecl.gecl.ltcl.gtcf.lecf.gecf.ltcf.gtc.lec.gec.ltc.gtc.ulec.ugec.ultc+"`7boa*<"`!9"`*`*`Ő7b*+*<́b*`|b!fͨ|`!M!...ugt<<>>+*/%sizeof()operands and/or operator incompatibletoo complexnot a functioncan't subscript]illegal struct gb!9*`a*ebM"ebM}*eb#M}*eb##M *ebM *eb! 9ͮ͠*eb M *eb M"] ͑^*]LLg_ ]J2}*]|_!9͠*]ͮM_!9!9͠!9͠uͮ!9͐mdÓdIdYdYdM~d!Ódwdwdwdwd!fͨ|a!!d9!9"`32LIa32|Ia `c}%aJ2 `reference->can't compute sizeinvalid expression'"string space exhaustedn t br f Illegal expression - need lvaluenot a }Mb!"b!"bbb"ebnfJ2}2bLc:bJ2}2b!f"b*b|Zc b:bTRc*bW͠*]uͮü^*H|_32"]}`ú_]]!"]J2_!9ͩ͠ʱ_!ô_!"]__._E_LÓ__*d Éd *d##!Ӑ *d 6eddüd*d"dmust be a constant,Warning - =X op assumed=illegal 6*`!9"`* |a*:"`*:*<*`Őa!9"` `"`*`*`Őʷa ` `raÐa*:*<*`ͳa*`*: pointerXp|Zp]p_papcpfpׁiplpŁop΁F""-g M"g*gM"g"g*g"g*g#|Pg*gTr**g*gͮ*g*gV"p:k:k:kCk*gTr*gÌm* g" g* g͐ʽl!""g* g"gl!"g* g"g*gl*-gͦ%i*g#|i*g##|i*g*gB*g#*g#}%i-gЄ*g#*g#}*g##|_i*g|*gTrM XZ*g* gM"XZ͑ʉn*g"g*g"g*g"g*g o*g#|´n*gu* g|-o{o*gTr* g|nM P|*g|±m*g͠"g*g͠" g|1k*gkT*gr1kclk<k>k+k-k|*gsl* g+|ˆl*g$l*g* gg#|dg*gTrM"g*g##&}o" g*g##&}o" g* gL"g* gL" gj*g|pj*ggg*g|gpg+g!l*g!l*g!lúo* g4v|úollll* g+|ʺoñmT|±m!* g" g* gSmssssssM P|)m@Am DmGmJmMmPmñm*g* g~|ºoñml-l+m/m<8m*wm&wm|wm^M P|m*ghLm*ggЄ* gʹZ*g{*g#*g#}*g##*g## j*g͉*g͉"g|ʾj*g͉|i*g#|bi*gTr*g͉|h"g*g"g*g"gj!f""g|pnÉm g*gTpTh6n gTTLp*g" g*g* ghLʞj*g~jT*gržjpÞjgj<gj>xj%xj&xj|xj^{jM*g*g#*g#}úojggh K!!:1:1:9!G ###*9&!>K!2LL1M|7^#V úuH a,8 w`Õu;a@,:jyÎg٦df? `F6ݫ0 #?v308FM}2EL:O O'L(:>( @2Lx2rLy2}L4M4!,1DM:M>O7M>( @M( 7=M  y;L!}L442 ul""jfbȀ,?sxD9@ju 6p #xl:B\7vmg0h(o7S@ͳ@F 8YfGŨ'M;L}!qR,1g.".1"01}G!qMG"M> 2LLLLúLLL>=LLLLgo }|LLyOL!L5۬ Pp'@Af$"[6fʀLt@ Q@U @0ʊT*S!SnS|ʞTSnS\|µTS!"S"R!9"S*R++"R)"S*S#"S+"S|TnS#2W*S\S| bm;mY#049!dcpAm5pޯdvK> 7Mqn7=<@`>2`!c4>22m* VôVS*S|ʟV*S#"S+* S}* S+" S|ʮVñVôVhV*S|V*S6*R|V2W$WnS#|V2W*S|V*R)nS}S$W2W$Wͣ[ !9)"R*R|XS*R!9)|QS*R#"RUS*R&S!!S!9S*R|zS*R!"RbX, \- 0\ 2 2P}C\t=\&%Rz V%x+ l7l8@4Ï02saCyJBUT*S|)USnS*S͠]#U2WST!"S"S*S|QU!"S*S#"SfU*R++"R*S̈́]fU2W!" S! "R*S#"S+"SUXUOUBUHUDUUTVSVCV*S*S"ST*R+++|AW*SnS" S#ʗW* S|]W×W* S\S|pWSÔW*R+|„W* Sͺ[*RS]"R*R"RʦS*RS*R|S*R#"R+"RSͣ[SSS!"RnS"R#S!"R!"R*RnS|!@Y bx  +6ǀ g !͜$SNG! < $!Hr< 4͜WBXJO`< YEl:[X!T" S#ʤU* S*R)]* S" SrU*S\V͎T!"RU!"RU!"RUSnS|UU!"SS!" SSnST" S#4ÑW* S*R[×WAWnS#ʧW*SêW!!9"R!"RͶT!"R*R++"R)"RͶT!"R*R++"R)"RͶT6͑[}<(= \S|TSS!"R!9)"S01T*S9DT*S"SyT*S&}_o"SAbT*SFuT*S"SyT!*R*S2ëp((`:O@!PuPj^f`b#n Z`{L=i$ze1H,L :@͌lf*V* S*R)]* S" SS* S+" S|'V*VU*R|5V2W*S|QV*R)*S* S)]Ͱ$WS*S|hV*R)"SnS" S#ʴV* S\S| @'}}  EAD     . 8wo]#  !y `i (y((  DX(DX.]. ].]+ K[!9"ZXɯ2^X*ZX++"Zî]|}!  ,ɯ|!|}!-+|/g}/o.],|**͘jS\>))0# 0 = ͮ]aXoZ~X#oX*cX+"cX| X*\X+X*ZX##"ZXX[\X!08 0 ))) O S\X}0:8oX+|:eXoX*k!9 \3~#o&]~o@\@\}w#.͸].=͸] ͸] ø]|(ͮ]!\^#VX)"\XX!9*ZX*ZX++"ZX)X*ZX++"ZX~*ZX++"ZX)"_X6>*\X~%#"\XoX.-:^X] }*_Xw#6"_X͘*\X!9)"kX*aX+"aX!jX4:hX *kX|(*aX+"aX*kXͮ]"kX>2gX2hX*kX| O:fX=8H| D:iX +:gX(:eX0 X*aXoZ*aXoZX*aXoZ :# R0{ @ y ˈ@ y(@ H(>-y0P('d ~ yx/gy/o]E\E˭}!a{X~#"\X> 2eX> 2hX2fX2jX2gX2iX2cX2dX*\X~- !iX4*\X#"\X~0 2eX@Z"aX*\X~. *\X#"\X@Z"cX*\X~#"\Xo\}d 2hXu ~ZgX(X*kXbZM[kX!:fX(!( ! B]!]~Z:fX [kX! B]*kX&=obZ!jX5 :iX( > 2eX*aXoZ"kX͑[,}!A[,n&|+ z sDM!z> S\))0 = ɯ z]|]MD!x< z>8jS\>))0# 0 = ͮ]X.o( .b(.x }2fX>02eX~ZXc XXs n:iX(,~(#oX*aX+"aX*cX+"cX| *aXoZX*cX|*cX \*\E~(# 7\}(.ø].ø]N#F#x( ~#~# `i*[|} > !8!=O ~s;! 9)!9_\  31x SETCLK v1.2 (set only) (c) 1985 MICROCode Consulting *|< *0s|*sx !~_stem image ###Read system tracks from disk in drive or to skip: 8: : :((### No OK? (Y/N):((N8˯NY ! *2~( 6(08 0ͽWW(ty disk is NOT Plus2 format ##7N>2y2RPress to:!!$(!: disk in drive d: --- (<<< UseF   ### Z80? ### $ ### Plus2 ROMs not installed ### $!\??s1&1s1~#"2 (24-hr format) Ent system image present ##Ñ! ###* R : ַ2:G?/ 0:yͿͿx(=(=(.7.5.2>((08 0ͽ8 0w#7{{O0~~#>_      r abort >>74! DMXU>(8 ^(3### ERROR writing system image ###7[ ( yݾ!4:Q *L~! .K1 Plus2 SYSGEN v1.2  1985 MICROCode Consulting*O:] ʑ\< +### er DATE and TIME: mm/dd/yy hh:mm:ss OK? (Y/N):  Enter DATE and TIME: mm/d!#m O0++O! NdO0(k or to exR### ERROR reading system image ###7> Ϳ> =(<_~Ϳ~#(  Input file does not exist ##͸\! 4\ ### File too small to contain sy#ydO8dd/y!~ hO8yy h+mO§~"(=%f 7### Double densi ( (A8e0˯Ϳ͸͸read system image frowrite system image t     ! " # $ % & '