dumpfloppy 1: 17/01/2013 20:33:00 CP/M UTILITIES (handwritten)   1_!i˞~ ]~ >12fK!+``*!"`:`O 8GQ{eze*`"`!}d|d>Dh!`͠`͗`͗` !`͇`>2`2`7H!w`~#( OBoot !`͇``͠`!`͠`͗`͗`@0N#(~# w 6<---\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" =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##~?  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!}|q2E>! ^#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͌xЯ2͢*C ~<wʃG:ؠ!ئʎì 4~ʶ¬:<ʶ$ʶïZͻϯx>2>2ͻ:!ؾZԯ2:Eηẅ́͊Ͳ>2>2T*CGͻ:ẅ́n>2;O ^DM;}H>"*C :ط:ddslO s#r:Eη͊:==»y==»*Ww#*"͸*:G#š"͸:!ؾw4!iw:Z!E~=26:O͔|(~O6#:̈́ :̈́!:̈́ $:ͅ'*-:ͅ 036:̈́ 9<:̈́?BEH_~#fo!y(2o))))U.2:޷ 2y2y=2`i"&`i#z n&ɯ2>2$2#>2%b2$y2% >2:2:2 :2!:޷(1=2:!޾ $:! ޾ :!!޾ 4>@ 6! 42#2<2#s 12":޷2!~6(":!޾ :!޾ :!޾($:޷:2:2:2:#޷ۯ2:o&)))))))7[&:$޷ >2:%:" 2:"{ >E>F2 > 2>( !JQ!JQ>ʹo !ow( : E !r: O:ʹ͊>ʹ́:2͊!Q:O<2ޯa(<2>Dh: O7!C(!UG(&{dzd}e|eyʹ!́~# !w# : 2">: ސ2 :=2>2"ޯ2<ɴx 266"!^(!u*~| } !|Y8aBIOS Error NRWPY8aKY(>́(Oy@8(y2:́́(::(w @0ɯ!(Q>>́>́>́ϯ2*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>27ã(6dSDôÔÿt BootInsert PC-CP/M-System diskޅ(xޅHލޔhޢ@  ?1N:(22 22>۷(!3֯22!9(>!2"!2"2261222>2!"*!:G>(=#x(w#!} 56K CP/M 2.2 / 3.01 alphatronic PC Serial number 00000   |{0*w#"!4BIOS II alphatronic PC V 3.0 13.03.84  @$@B B HH II$@DI ABI$"$H$H@$$I! H*  $H@@A I $D!!$I"BI"I"@$BIIH$$$$BBI$@BI!"$$A DI$@ A$@$$@H! "!$$" @B$!!!DH$$"H @@BHH  !$$A"D@ "A" "BHA " !$ D B I $ !$$ H@BD D$ HI DIA!$$$ $" "$D ! $"  $AB " BDD $$D!"DI$!$BH!"IB I$"D HD" " $"! @H !BI " I  $I$I$DI$ !I$@"$"$! $I$I HA HA @@B  "$HA B  $I B! @@@BH@B@DH@!DHB!I HH    ASM COM@BIOS ASM` BIOS30 LST BIOS30 LST !"#$%&'()*+BIOS30 LST,-./0123456789:;BIOS30 LST<=CBIOS ASME>?@ABDDT COM&CDEDEBLOCK ASMPFGHIJDISKCOPYCOMKDUMP COMLED COM4MNOPFILECOPYCOMQRLOAD COMSMOVCPMPCCOM^TUVWXYPCFORM COMZPIP COM:[\]^STAT COM,_`aSUBMIT COM bSYSCOPY COM cSYSGEN COMdV COM \ ?ʻ w# !ͼ ? !ͼ !)ͼ !ͼ :5͡ :6:6͡ :7͡ :\ ʻ 24!dͮ 25ͮ 27ͮ 26!8 ( ʃ !Y 1  :7ʞ !z 8  !"2D2X2#! 8 !ͼ z{* ! !"!8 w#  +6# *#"~!ͼ G:6QxJQS*!w#"! 1 !"!Y~~# …¡z!ͼ wʹ* ! w#" ! 8 !" ! zz_O4:  :6y:! G~#x=2> > ! >x6 #='G! ~ p( O*}O>4?:7w:#ĸ*"!͸* }w>ͪg( ʆ1 Y :7ʗ8 z !<ͼ CP/M ASSEMBLER - VER 2.0 NO SOURCE FILE PRESENT NO DIRECTORY SPACE SOURCE FILE NAME ERROR SOURCE FILE READ ERROR OUTPUT FILE WRITE ERROR CANNOT CLOSE FILES END OF ASSEMBLY G:7xʘ!#~ʄl͸Ä**!O {zʊ͸*"!!#^4!$wͯͯWƐ'@'ê>:ͪ!#^Ww*!{͚|͚}͚͚{!$~#͚͚> ͪ> ͪ  @2 0 0:x0_<2! wI2 2> 2 >2ɯ22 !~@_6^4#: w~$w: 0 q: A: A͋q: a{_2  2 - !ɯ2I:  ;*:  ͭͷ ͭ͋>9q>9: '!2 >9 7:! 6 >2>2: 2 Qͭ:Ğ! :lj<͖<j<|<: OʊQ>ÖH >2 2 û: B­>ôD> ¸!52 !"!N#~#A07O! ~*!) " :  '<ͭ'<>V$>O$:Ğà\ÞØ`rÍÖ![w#w#b!"!F#v2[G*##~w*##~<*}q!~ڬ6![^![^#fk"͎͘!G#*####*^#Vû!^*"*z'{ͅ>ɯo>g"k!m6ů{_zW5>)D*kOxGd !m?FDM!xGyOڂÃ)sn55)=â|g}o=î--#zg{ozg{ozg{oÓ:: ;,!ɯ22=2l!"]!~H5_!m~0:ą:  *":  :‰:̅ԅ!^#=ʅVq”*qͦ1& O:lµ̅>2ly:_!w~!s!m~ùy !~=w_!m~ ͅͰ>2lyPLnR>UX:l̅2l͓*>E2C!" """ :ʼ:*1 |R|ͦ0FIL: R  R* } *" :¿::¿üX!C^#fk[@ :Œ:=ʌG!ʆF#H vÛc*| EH ͺ,^1 ͦ *""1 EH DH ͺ,1 ͦ :  1:  " > 2 {zA"*![N![ N#Fr+sq#p/>G=#w#w3#w#w!JSYMBOL TABLE OVERFLOW G*##~w*##~͎*_###s#r^#V`à 4 Wm ()*+,-/ABCDEHLMDBDIDSDWEIIFINORSPACIADCADDADIANAANDANICMACMCCMPCPIDAADADDCRDCXENDEQUHLTINRINXJMPLDALXIMODMOVMVINOPNOTORAORGORIOUTPOPPSWRALRARRETRLCRRCRSTSBBSBISETSHLSHRSTASTCSUBSUIXORXRAXRICALLENDMLDAXLHLDPCHLPUSHSHLDSPHLSTAXXCHGXTHLENDIFMACROTITLE  PF FP! ( 2/?'  v:P@< !  PP27 ( *"  NZZ NCC POPEP M x_BH!œ#¶ ¦{KÈCÈ<:JCR:  !6 s!#  ɯ<:O=_Z!F!V#fjQ̓E!^#Vo&)~#FxGyѯ<àn8!~ڢͅ6~44O! s#r!~ ڿ6ͅ^4!mw!wp!~ͅ!55N! N#fio&)^#fk:|: |Ë  |*" ͩ !6="1 :  1}1:n:>BʋSSͦSSxS 1:  1"" ͦ 1 |R >O U!" 1 1!|_!^#fk $8AP`ixH ñññ81Ľ y0îH ñGîG  ñH ñ(Ľ yîH ñîîĽ y0îîH ñG 1: :,; c*| } 8OĽ y0G G t :):,.>C :|: Jü;r :R: ʼʋ!ʼR!ʼʋ>SR{ozg!~4ʧͦ !6 ! **̈́**̈́\iͩ !w#H USE FACTOR !* "z{*"* "I !" :1 R O*UR X* G:xl :  *̩ : l x͖ *#"EH DH 0:~ ! ^4! w͆ Æ *! 6z͖ {͖ 4>R>V>D >P >L >N  ; MDS-800 I/O Drivers for CP/M 2.2 ; (four drive single density version) ; ; Version 2.2 February, 1980 ; vers equ 22 ;version 2.2 ; ; Copyright (c) 1980 ; Digital Research ; Box 579, Pacific Grove ; California, 93950 ; ; true equ 0ffffh ;value of "true" false equ not true ;"false" test equ false ;true if test bios ; if test bias equ 03400h ;base of CCP in test system endif if not test bias equ 0000h ;generate relocatable cp/m system endif ; patch equ 1600h ; org patch cpmb equ $-patch ;base of cpm console processor bdos equ 806h+cpmb ;basic dos (resident portion) cpml equ $-cpmb ;length (in bytes) of cpm system nsects equ cpml/128 ;number of sectors to load offset equ 2 ;number of disk tracks used by cp/m cdisk equ 0004h ;address of last logged disk on warm start buff equ 0080h ;default buffer address retry equ 10 ;max retries on disk i/o before error ; ; perform following functions ; boot cold start ; wboot warm start (save i/o byte) ; (boot and wboot are the samehome jmp seldsk jmp settrk jmp setsec jmp setdma jmp read jmp write jmp listst ;list status jmp sectran ; maclib diskdef ;load the disk definition library disks 4 ;four disks diskdef 0,1,26,6,1024,243,64,64,offset diskdef 1,0 diskdef 2,0 diskdef 3,0 ; endef occurs at end of assembly ; ; end of controller - independent code, the remaining subroutines ; are tailored to the particular operating environment, and must ; be altered for any system which differs from the intel mds. ; ; the following code assumes the mds monitor exists at 0f800h ; and uses the i/o subroutines within the monitor ; ; we also assume the mds system has four disk drives revrt equ 0fdh ;interrupt revert port intc equ 0fch ;interrupt mask port icon equ 0f3h ;interrupt control port inte equ 0111$1110b ;enable rst 0(warm boot), rst 7 (monitor) ; ; mds monitor equates mon80 equ 0f800h ;mds monitor rmon80 equ 0ff0fh ;restart mon80 (boot error) ci equ 0f803h ;console character to reg-a ri equ 0f806 for mds) ; const console status ; reg-a = 00 if no character ready ; reg-a = ff if character ready ; conin console character in (result in reg-a) ; conout console character out (char in reg-c) ; list list out (char in reg-c) ; punch punch out (char in reg-c) ; reader paper tape reader in (result to reg-a) ; home move to track 00 ; ; (the following calls set-up the io parameter block for the ; mds, which is used to perform subsequent reads and writes) ; seldsk select disk given by reg-c (0,1,2...) ; settrk set track address (0,...76) for subsequent read/write ; setsec set sector address (1,...,26) for subsequent read/write ; setdma set subsequent dma address (initially 80h) ; ; (read and write assume previous calls to set up the io parameters) ; read read track/sector to preset dma address ; write write track/sector from preset dma address ; ; jump vector for indiviual routines jmp boot wboote: jmp wboot jmp const jmp conin jmp conout jmp list jmp punch jmp reader jmp h ;reader in to reg-a co equ 0f809h ;console char from c to console out po equ 0f80ch ;punch char from c to punch device lo equ 0f80fh ;list from c to list device csts equ 0f812h ;console status 00/ff to register a ; ; disk ports and commands base equ 78h ;base of disk command io ports dstat equ base ;disk status (input) rtype equ base+1 ;result type (input) rbyte equ base+3 ;result byte (input) ; ilow equ base+1 ;iopb low address (output) ihigh equ base+2 ;iopb high address (output) ; readf equ 4h ;read function writf equ 6h ;write function recal equ 3h ;recalibrate drive iordy equ 4h ;i/o finished mask cr equ 0dh ;carriage return lf equ 0ah ;line feed ; signon: ;signon message: xxk cp/m vers y.y db cr,lf,lf if test db '32' ;32k example bios endif if not test db '00' ;memory size filled by relocator endif db 'k CP/M vers ' db vers/10+'0','.',vers mod 10+'0' db cr,lf,0 ; boot: ;print signon message and go to ccp ; (note: mds boot initialized iobyte at 0003h) lxi   sp,buff+80h lxi h,signon call prmsg ;print message xra a ;clear accumulator sta cdisk ;set initially to disk a jmp gocpm ;go to cp/m ; ; wboot:; loader on track 0, sector 1, which will be skipped for warm ; read cp/m from disk - assuming there is a 128 byte cold start ; start. ; lxi sp,buff ;using dma - thus 80 thru ff available for stack ; mvi c,retry ;max retries push b wboot0: ;enter here on error retries lxi b,cpmb ;set dma address to start of disk system call setdma mvi c,0 ;boot from drive 0 call seldsk mvi c,0 call settrk ;start with track 0 mvi c,2 ;start reading sector 2 call setsec ; ; read sectors, count nsects to zero pop b ;10-error count mvi b,nsects rdsec: ;read next sector push b ;save sector count call read jnz booterr ;retry if errors occur lhld iod ;increment dma address lxi d,128 ;sector size dad d ;incremented dma address in hl mov b,h mov c,l ;ready for call to set dma call setdma lda ios ;sector number just read cpi 2ged disk number mov c,a ;send to ccp to log it in ei jmp cpmb ; ; error condition occurred, print message and retry booterr: pop b ;recall counts dcr c jz booter0 ; try again push b jmp wboot0 ; booter0: ; otherwise too many retries  lxi h,bootmsg call prmsg jmp rmon80 ;mds hardware monitor ; bootmsg: db '?boot',0 ; ; const: ;console status to reg-a ; (exactly the same as mds call) jmp csts ; conin: ;console character to reg-a call ci ani 7fh ;remove parity bit ret ; conout: ;console character from c to console out jmp co ; list: ;list device out ; (exactly the same as mds call) jmp lo ; listst: ;return list status xra a ret ;always not ready ; punch: ;punch device out ; (exactly the same as mds call) jmp po ; reader: ;reader character in to reg-a ; (exactly the same as mds call) jmp ri ; home: ;move to home position ; treat as track 00 seek mvi c,0 jmp settrk ; seldsk: ;select disk given by register c lxi h,0000h ;return 0006 ;read last sector? jc rd1 ; must be sector 26, zero and go to next track lda iot ;get track to register a inr a mov c,a ;ready for call call settrk xra a ;clear sector number rd1: inr a ;to next sector mov c,a ;ready for call call setsec pop b ;recall sector count dcr b ;done? jnz rdsec ; ; done with the load, reset default buffer address gocpm: ;(enter here from cold start boot) ; enable rst0 and rst7 di mvi a,12h ;initialize command out revrt xra a out intc ;cleared mvi a,inte ;rst0 and rst7 bits on out intc xra a out icon ;interrupt control ; ; set default buffer address to 80h lxi b,buff call setdma ; ; reset monitor entry points mvi a,jmp sta 0 lxi h,wboote shld 1 ;jmp wboot at location 00  sta 5 lxi h,bdos shld 6 ;jmp bdos at location 5 if not test sta 7*8 ;jmp to mon80 (may have been changed by ddt) lxi h,mon80 shld 7*8+1 endif ; leave iobyte set ; previously selected disk was b, send parameter to cpm lda cdisk ;last log0 if error mov a,c cpi ndisks ;too large? rnc ;leave HL = 0000 ; ani 10b ;00 00 for drive 0,1 and 10 10 for drive 2,3 sta dbank ;to select drive bank mov a,c ;00, 01, 10, 11 ani 1b ;mds has 0,1 at 78, 2,3 at 88 ora a ;result 00? jz setdrive mvi a,00110000b ;selects drive 1 in bank setdrive: mov b,a ;save the function lxi h,iof ;io function mov a,m ani 11001111b ;mask out disk number ora b ;mask in new disk number mov m,a ;save it in iopb mov l,c mvi h,0 ;HL=disk number dad h ;*2 dad h ;*4 dad h ;*8 dad h ;*16 lxi d,dpbase dad d ;HL=disk header table address ret ; ; settrk: ;set track address given by c lxi h,iot mov m,c ret ; setsec: ;set sector number given by c lxi h,ios mov m,c ret sectran: ;translate sector bc using table at de mvi b,0 ;double precision sector number in BC xchg ;translate table address to HL dad b ;translate(sector) address mov a,m ;translated sector number to A sta ios mov l,a ;return sector number in   L ret ; setdma: ;set dma address given by regs b,c mov l,c mov h,b shld iod ret ; read: ;read next disk record (assuming disk/trk/sec/dma set) mvi c,readf ;set to read function call setfunc call waitio ;perform read function ret ;may have error set in reg-a ; ; write: ;disk write function mvi c,writf call setfunc ;set to write function call waitio ret ;may have error set ; ; ; utility subroutines prmsg: ;print message at h,l to 0 mov a,m ora a ;zero? rz ; more to print push h mov c,a call conout pop h inx h jmp prmsg ; setfunc: ; set function for next i/o (command in reg-c) lxi h,iof ;io function address mov a,m ;get it to accumulator for masking ani 11111000b ;remove previous command ora c ;set to new command mov m,a ;replaced in iopb ; the mds-800 controller requires disk bank bit in sector byte ; mask the bit from the current i/o function ani 00100000b ;mask the disk select bit lxi h,ios ;address the sector select byte ora m ; retry ; ; check i/o error bits call inbyte ral jc wready ;unit not ready rar ani 11111110b ;any other errors? (deleted data ok) jnz werror ; ; read or write is ok, accumulator contains zero ret ; wready: ;not ready, treat as error for now call inbyte ;clear result byte jmp trycount ; werror: ;return hardware malfunction (crc, track, seek, etc.) ; the mds controller has returned a bit in each position ; of the accumulator, corresponding to the conditions: ; 0 - deleted data (accepted as ok above) ; 1 - crc error ; 2 - seek error ; 3 - address error (hardware malfunction) ; 4 - data over/under flow (hardware malfunction) ; 5 - write protect (treated as not ready) ; 6 - write error (hardware malfunction) ; 7 - not ready ; (accumulator bits are numbered 7 6 5 4 3 2 1 0) ; ; it may be useful to filter out the various conditions, ; but we will get a permanent error message if it is not ; recoverable. in any case, the not ready condition is ; treated as a separate condiselect proper disk bank mov m,a ;set disk select bit on/off ret ; waitio: mvi c,retry ;max retries before perm error rewait: ; start the i/o function and wait for completion call intype ;in rtype call inbyte ;clears the controller ; lda dbank ;set bank flags ora a ;zero if drive 0,1 and nz if 2,3 mvi a,iopb and 0ffh ;low address for iopb mvi b,iopb shr 8 ;high address for iopb jnz iodr1 ;drive bank 1? out ilow ;low address to controller mov a,b out ihigh ;high address jmp wait0 ;to wait for complete ; iodr1: ;drive bank 1 out ilow+10h ;88 for drive bank 10 mov a,b out ihigh+10h ; wait0: call instat ;wait for completion ani iordy ;ready? jz wait0 ; ; check io completion ok call intype ;must be io complete (00) unlinked ; 00 unlinked i/o complete, 01 linked i/o complete (not used) ; 10 disk status changed 11 (not used) cpi 10b ;ready status change? jz wready ; ; must be 00 in the accumulator ora a jnz werror ;some other condition,tion for later improvement trycount: ; register c contains retry count, decrement 'til zero dcr c jnz rewait ;for another try ; ; cannot recover from error mvi a,1 ;error code ret ; ; intype, inbyte, instat read drive bank 00 or 10 intype: lda dbank ora a jnz intyp1 ;skip to bank 10 in rtype ret intyp1: in rtype+10h ;78 for 0,1 88 for 2,3 ret ; inbyte: lda dbank ora a jnz inbyt1 in rbyte ret inbyt1: in rbyte+10h ret ; instat: lda dbank ora a jnz insta1 in dstat ret insta1: in dstat+10h ret ; ; ; ; data areas (must be in ram) dbank: db 0 ;disk bank 00 if drive 0,1 ; 10 if drive 2,3 iopb: ;io parameter block db 80h ;normal i/o operation iof: db readf ;io function, initial read ion: db 1 ;number of sectors to read iot: db offset ;track number ios: db 1 ;sector number iod: dw buff ;io address ; ; ; define ram areas for bdos operation endef end    B O O T I I for alphatronic P C 07-Feb-84 MACRO-80 3.4 01-Dec-80 PAGE 1 .Z80 0000 OFFS EQU 0000H ;Nessecary for system generation ;______________________________________________________________________________  ; ; OOOOOOO OOOOOO OOOOOO OOOOOOOOO OOOOOOO OOOOOOO ; O O O O O O O O O ; O O O O O O O O O ; OOOOOOO O O O O O O O ; O O O O O O O O O  ; Last Changes : 07.02.84 TITLE B O O T I I for alphatronic P C 07-Feb-84  ; Memory allocation : ; FFFF +-----------------------+ ; ! ! ; ! Screen memory ! ; ! ! ; F000 !-----------------------! ; ! ! ; ! Drivers ! PC - Monitor ; ! ! ; E400 !-----------------------! ; ! ! ; ! B I O S ! 11 pages ( B00 )  ; O O O O O O O O O ; OOOOOOO OOOOOO OOOOOO O OOOOOOO OOOOOOO ; ;______________________________________________________________________________ ; F o r a l p h a t r o n i c P C  ; First EFM2 - Version ; Begin : 20.01.84 ; Manfred Meyer EFM2  ; Copyright by T A ; Aktual version number : 3.0  ; ! ! ; D900 !-----------------------! B O O T I I for alphatronic P C 07-Feb-84 MACRO-80 3.4 01-Dec-80 PAGE 1-1 ; ! ! ; ! B D O S ! 14 pages ( E00 ) ; ! ! ; CB00 !-----------------------! ; ! ! ; ! C C P ! 8 pages ( 800 )  ; ! ! ; C300 !-----------------------! Load adress of CP/M-system ; ! ! ; ! Loader Part I !  ; ! ! ; C200 !-----------------------! Load adress of initial loader ; The 'Initial program loader' (IPL) loads the   CP/M-loader (Sp.0 / Sek.1) ; to the address C200H. ; The CCP beginns at C300H. To make it possible for users to add a larger ; BIOS, the actual loader ( Part I ) is moved to the address 6000H from ; where it loads the system tracks into the memory. ; 6100 !-----------------------! ; ! ! ; ! Loader Part II ! ; ! ! ; 6000 !-----------------------!  ; In this konfiguration the complete CP/M system occupies 34 ; sectors ( including loader sector ). From these, the last four ; con 0064 DMAAD EQU 64H 0065 DMATC EQU 65H 0068 DMARG EQU 68H 00F0 FDCNTL EQU 0F0H 00F8  FDCDT EQU 0F8H 00F9 FDCST EQU 0F9H C200 LADINI EQU 0C200H ;Load address IPL B O O T I I for alphatronic P C 07-Feb-84 MACRO-80 3.4 01-Dec-80 PAGE 1-2 6000 LADEXE EQU 06000H ;Execution address CP/M loader 0000 FBASE EQU 0000H+OFFS ;Load address = begin CCP ( relativ ) 1600  BIOS EQU FBASE+1600H ;BIOS - Entry ( relativ ) 001E LAENGE EQU 30 ;Number of sectors to read E412 CO EQU 0E412H ;CO in the monitor E45D tain the host buffer ( 1 kbyte ) with about a quarter kbyte ; cold boot codes, meaning 31 sectors contain relevant data. ; The first sector ( loader sector ) is read by the IPL - so that ; only 30 sectors need to be read by the loader in this konfiguration. ; To ensure that system with a longer BIOS can also be correctly ; loaded, the number of sectors to be loaded can be patched. ; This information is found at the end of the sector containing ; the loader : >1E<-- 0003 IOBYTE EQU 03H 0095 IODEV EQU 95H  ALCONS EQU 0E45DH ;Initialising 'alphatronic features' E44B CONCCL EQU 0E44BH ;Console cold clear in monitor E469 SYSFLG EQU 0E469H ;System Flag ( Status of SPORT2 ) E466  CCHA EQU 0E466H ;Screen format flag ( 40/80 columns ) 0020 SPORT2 EQU 20H ;System Port ( OUT ) 0000'  ASEG ORG 100H .PHASE LADINI ;Load address IPL  ;_____________________________________________________________________________ C200 31 5FFF LADER1: LD SP,LADEXE-1 ;Stack beneed the loader area    C203 21 E469 LD HL,SYSFLG ;System flag in monitor C206 CB 9E RES 3,(HL) ;Monitor-ROM instead of screen memory C208 7E LD A,(HL) C209 D3 20 OUT (SPORT2),A ;Screen memory -off- C20B E5 PUSH HL C20C CD E45D CALL ALCONS ;Load alphatronic compatible tables C20F E1 POP HL  C210 CB DE SET 3,(HL) C212 7E LD A,(HL) C213 D3 20 OUT (SPORT2),A ;Switch back screen memory C215 3E 31 LD A,31H C217 32 E466 LD (CCHA),A ;Set 80 columns mode C21A CD E44B CALL CONCCL ;Initialize driver and 'console clear' C21D 21 C22B LD HL,INIEND C220 11 6000 ffset for DMA address 6008 22 60C9 LD (DMAOFF),HL 600B 3A 60CB LD A,(SECTRS) ;Number of sectors to read 600E 4F LD C,A 600F FE 20 CP 32 ;More than one track ? ( without loader sector ) 6011 06 00 ZWEISP: LD B,0 6013 38 04 JR C,EINESP 6015 0E 1F LD C,31 ;Subtract 31 sektors ( first track ) 6017 91  SUB C 6018 47 LD B,A ;Number of remaining sectors in 6019 51 EINESP: LD D,C ;Number of sectors to read in * 256 - 1 601A 1E FF LD E,0FFH ; = Number of bytes to read - 1 in 601C D5 PUSH DE 601D CB F2 SET 6,D ;Bit 2^6 -> Memory write 601F 7B LD A,E 6020 D3 65  LD DE,LADEXE ;Move loader to execution address C223 01 00CC LD BC,LADEND-LADEXE C226 ED B0 LDIR C228 C3 6000 JP LADEXE C22B  INIEND: .DEPHASE ;______________________________________________________________________________  B O O T I I for alphatronic P C 07-Feb-84 MACRO-80 3.4 01-Dec-80 PAGE 1-3 .PHASE LADEXE ;Execution address of the loader kernel  6000 0E 2A LD C,'*' 6002 CD E412 CALL CO ;An asterik indicates the running loader 6005 21 0000 NOCMAL: LD HL,0000 ;O OUT (DMATC),A ;Low Byte terminal count 6022 7A LD A,D 6023 D3 65 OUT (DMATC),A ;High Byte ditto 6025 D1 POP DE 6026 13  INC DE ;Correct number of bytes to read 6027 2A 60C9 LD HL,(DMAOFF) ;Old offset 602A EB EX DE,HL 602B 22 60C9 LD (DMAOFF),HL ;New offset 602E 21 0000 LD HL,FBASE ;Start address CCP 6031 19 ADD HL,DE ; + last DMA offset = new DMA address 6032 7D LD A,L 6033 D3 64 OUT (DMAAD),A ;Low Byte DMA address 6035 7C LD A,H 6036 D3 64 OUT (DMAAD),A ;High Byte ditto 6038 3E 44 LD A,44H 603A D3 68 OUT (DMARG),A ;Command for DMA contr  oller 603C 21 60B6 LD HL,READCO ;Read command string 603F CD 60A0 CALL SETCMD ;To FD controller 6042 CD 6097 CALL RDSTAT ;Read FDC status register 0 6045 E6 C0 AND 0C0H ;Bit 2^6 and 2^7 must be zero 6047 F5 PUSH AF ;Save result 6048 0E 06 LD C,6 604A CD 6097  LOOP: CALL RDSTAT ;The other six status bytes 604D 0D DEC C ;must also be read 604E 20 FA JR NZ,LOOP B O O T I I for alphatronic P C 07-Feb-84 MACRO-80 3.4 01-Dec-80 PAGE 1-4 6050 F1 POP AF 6051 20 16 JR NZ,ERRMES 6053 B8 CP B ;Sectors remaining to read 6054 CA 1600 JP Z, JR Z,RESTOR ;and try again 6071 4F LD C,A 6072 CD E412 CALL CO 6075 18 F5 JR MESLOP 6077 07 42 6F 6F ERRTXT: DB 07,'Boot ',00 607B 74 20 00 607E 21 60C4 RESTOR: LD HL,RECACO ;Recalibrate command 6081 CD 6087 CALL COMMON 6084 C3 6005 JP NOCMAL ;Retry  ;______________________________________________________________________________ 6087 CD 60A0 COMMON: CALL SETCMD ;Common code for 'Restore' and 'Seek' 608A 21 60C7 LD HL,SENSCO ;Sense interupt status command 608D CD 60A0 CALL SETCMD 6090 CD 6097 CALL RDSTAT ;Check status 6BIOS ;Cold boot - when ready 6057 21 60C0 LD HL,SEEKCO ;SEEK-Command ( Cylinder 1 ) 605A CD 6087 CALL COMMON 605D 3E 01 LD A,01H 605F 32 60B8 LD (READCO+2),A ;Set cylinder number 0 -> 1 6062 32 60BA LD (READCO+4),A ;Sector number von 2 -> 1 6065 37 SCF ;Cy = 1 6066 48 LD C,B 6067 18 A8 JR ZWEISP ;Read next track ;______________________________________________________________________________  6069 21 6077 ERRMES: LD HL,ERRTXT 606C 7E MESLOP: LD A,(HL) ;Display error message 606D 23 INC HL 606E B7 OR A 606F 28 0D 093 CD 6097 CALL RDSTAT ;Two bytes 6096 C9 RET 6097 DB F9 RDSTAT: IN A,(FDCST) ;Read status register 6099 C6 40 ADD A,40H ;Bit 2^5 -> Cy 609B 30 FA JR NC,RDSTAT ;Wait for 'ready' 609D DB F8 IN A,(FDCDT) ;Get status byte 609F C9 RET 60A0 4E  SETCMD: LD C,(HL) ;Length of the command 60A1 23 INC HL 60A2 DB F9 WAIT: IN A,(FDCST) ;Check status register B O O T I I for alphatronic P C 07-Feb-84 MACRO-80 3.4 01-Dec-80 PAGE 1-5 60A4 CB 7F BIT 7,A 60A6 28 FA JR Z,WAIT ;Wait for 'request' 60A8 7E LD A,(HL) ;Send one byte from the string 60A9 D3 F8    OUT (FDCDT),A ;to the controller 60AB 23 INC HL 60AC 0D DEC C ;Decrement length count 60AD 20 F3 JR NZ,WAIT  60AF DB F0 RDINT: IN A,(FDCNTL) 60B1 CB 77 BIT 6,A 60B3 20 FA JR NZ,RDINT ;Controller ready ? 60B5 C9 RET  ;_____________________________________________________________________________ ; ; D a t a a r e a ;_____________________________________________________________________________ 60B6 09 READCO: DB 09 60B7 C6 DB 0C6H ;'Read multi track' command 60B8 00 0C8 08 DB 08H ;'Sense interupt status' command 60C9 DMAOFF: DS 2 ;Offset for actual DMA address 60CB 1E SECTRS: DB LAENGE ;Number of sectors to read ( patchable ) 60CC 3C 2D 2D 2D LADEND: DB '<---' ;______________________________________________________________________________ .DEPHASE B O O T I I for alphatronic P C 07-Feb-84 MACRO-80 3.4 01-Dec-80 PAGE 1-6 END B O O T I I for alphatronic P C 07-Feb-84 MACRO-80 3.4 01-Dec-80 PAGE S Macros: Symbols: ALCONS E45D BIOS 1600 CCHA E466 CO E412 COMMON 6087 CONC DB 00H ;Drive 00 / Side 0 60B9 00 DB 00H ;Cylinder 0 60BA 00 DB 00H ;Head 0 60BB 02 DB 02H ;Sector number 2 60BC 01 DB 01H ;Sector size ( 1 -> 256 Bytes ) 60BD 10 DB 10H ;Last sector of the track ( EOT ) 60BE 36 DB 36H ;Length of gap 3 60BF FF DB 0FFH ;Number of data bytes per sector  60C0 03 SEEKCO: DB 03 60C1 0F DB 0FH ;'Seek' command 60C2 00 DB 00H ;Drive 0 / side 0 60C3 01 DB 01H ;Cylinder 1  60C4 02 RECACO: DB 02 60C5 07 DB 07H ;'Recalibrate' command 60C6 00 DB 00H ;Drive 0 / Side 0 60C7 01 SENSCO: DB 01 6CL E44B DMAAD 0064 DMAOFF 60C9 DMARG 0068 DMATC 0065 EINESP 6019 ERRMES 6069 ERRTXT 6077 FBASE 0000 FDCDT 00F8 FDCNTL 00F0 FDCST 00F9 INIEND C22B IOBYTE 0003 IODEV 0095 LADEND 60CC LADER1 C200 LADEXE 6000 LADINI C200 LAENGE 001E LOOP 604A MESLOP 606C NOCMAL 6005 OFFS 0000 RDINT 60AF RDSTAT 6097 READCO 60B6 RECACO 60C4 RESTOR 607E SECTRS 60CB SEEKCO 60C0 SENSCO 60C7 SETCMD 60A0 SPORT2 0020 SYSFLG E469 WAIT 60A2 ZWEISP 6011 No Fatal error(s) BIOS II for alphatronic PC V 3.0 03-Mar-84 MACRO-80 3.4 01-Dec-80 PAGE 1 .Z80 C300 OFFS EQU 0C300H ;Nessecary for absolute listing  ;______________________________________________________________________________ ;    ; OOOOOOO O OOOOOO OOOOOO OOOOOOO OOOOOOO ; O O O O O O O O O ; O O O O O O O O  ; OOOOOOO O O O OOOOOO O O ; O O O O O O O O ; O O O O O O O O O  ; OOOOOOO O OOOOOO OOOOOO OOOOOOO OOOOOOO ;______________________________________________________________________________  ; F o r a l p h a t r o n i c P C TITLE BIOS II for alphatronic PC V 3.0 03- ; Date of first changes : 20.01.84 ; Programmer : Manfred Meyer EFM2 ; Copyright by T A ; Date of last changes : 13.03.84 ; Actual version number : 3.0  ; ____________________________________________________________________________ ; Released version : BIOS II for alphatronic PC V 3.0 03-Mar-84 MACRO-80 3.4 01-Dec-80 PAGE 1-1 ; - Hostbuffer 1 KByte ; - Pseudo-drive P: = alphatronic Mar-84 ; First EFM2 - Version ; Based on BIOS56 V 2.3 10.8.83 ; Modifications : ; - 1 KByte Hostbuffer instead of 256 Bytes  ; - Cold-boot-code moved into hostbuffer ; - Reduced for only two physical drives ; - Display serial number at cold boot ; - BIOS intercepts the errors 'Write protection' ; and 'Not ready' and provides the opportunity ; to eliminate the cause. P2 Format in drive A: ; - 'Not ready' (NR) and 'write protected' (WP) causes ; BIOS ERROR and can be eliminated .  ; - Cold boot code in the hostbuffer will be overwritten ; during first disk access. ; - CP/M serial number is displayed decimal at cold boot. ; Notes : ; - Delay after motor start ca 700 mSek  ; - Number of 'Ready'- checks before BIOS ERROR : 255 ; ____________________________________________________________________________    PAGE BIOS II for alphatronic PC V 3.0 03-Mar-84 MACRO-80 3.4 01-Dec-80 PAGE 1-2  ;***************************************************** ;* * ;* SYSTEM FUNDAMENTAL CONSTANTS *  ;* * ;***************************************************** C300 CBASE EQU 0+OFFS  C300 CPMB EQU CBASE+0000H ;Start adress CCP CB00 FBASE EQU CBASE+0800H ;Start adress BDOS D900 BIOS EQU CBASE+1600H ;Start adress BIOS ATION C5AB CCPSTK EQU CBASE+2ABH ;WHERE CCP PUT STACK ;*****************************************************  ;* * ;* CP/M TO HOST DISK CONSTANTS * ;* *  ;***************************************************** 0800 BLKSIZ EQU 2048 ;CP/M ALLOCATION SIZE 0400 HSTSIZ EQU 400H ;HOST DISK SECTOR SIZE 0008 HSTSPT EQU 8 ;HOST DISK SECTORS/TRK 0008 HSTBLK EQU HSTSIZ/128 ;CP/M SECTS/HOST BUFF 0040 CPMSPT EQU HSTSPT*HSTBLK ;CP/M SECT 1600 CPML EQU BIOS-CPMB ;Length of CP/M-System ;*****************************************************  ;* * ;* SOME LOCATION ON ENTRY TO WRITE * ;* * ;***************************************************** C564 GETCHR EQU CBASE+264H ;SERCH NEXT NON BLOCK CHR ;POINTED BY (DE) C509 ERRCCP EQU CBASE+209H ;PRINT "CMD?" AND RESTART C52E CCPSCNR EQU CBASE+22EH ;CHECK BULT IN CMD ENTRY C582 RESCCP EQU CBASE+282H ;RESTART CCP C5B2 CCPPAT EQU CBASE+2B1H+1 ;WHERE PUT PATCH LOCOR/TRACK 0007 SECMSK EQU HSTBLK-1 ;SECTOR MASK ;*****************************************************  ;* * ;* BDOS CONSTANTS ON ENTRY TO WRITE * ;* *  ;***************************************************** BIOS II for alphatronic PC V 3.0 03-Mar-84 MACRO-80 3.4 01-Dec-80 PAGE 1-3 0000  WRALL EQU 0 ;WRITE TO ALLOCATED 0001 WRDIR EQU 1 ;WRITE TO DIRECTORY 0002 WRUAL EQU 2 ;WRITE TO UNALLOCATED    ;***************************************************** ;* * ;* I/O PORT CONSTANTS (UPD765) * ;* *  ;***************************************************** 00F0 FDCNTL EQU 0F0H ; FDC CONTROL REG 00F8 FDCDT EQU 0F8H ; FDC DATA REG. 00F9  FDCST EQU 0F9H ; FDC STATUS REG. 0064 DMAPT4 EQU 064H ; DMA CH.1 0065 DMAPT5 EQU 065H 0068 DMAPT8 EQU 068H  ; COMMAND CODE (MFM) 0046 RDCM EQU 01000110B ; READ DATA 0045 WDCM EQU 01000101B ; WRITE DATA 000F  ;***************************************************** ;* * ;* LBC-130 IOCS ENTORY POINT FOR HOOK * ;*  * ;***************************************************** F800 ARAMAD EQU 0F800H F000 VRAMAD EQU 0F000H 8000  TMC0 EQU 8000H 1388 TMC1 EQU 1388H 0BB8 TMC2 EQU 0BB8H 0402 TMC3 EQU 0402H 03E8 TMC4 EQU 03E8H BIOS II for alphatronic PC V 3.0 03-Mar-84 MACRO-80 3.4 01-Dec-80 PAGE 1-4 B64A D300 EQU 46666 ;DELAY TIME=350mS 0FA0 D30 EQU 4000 ;DELAY TIME=30mS E3FF SPBOTM EQU 0E3FFH  SKCMD EQU 00001111B ; SEEK 0007 RBCMD EQU 00000111B ; RECALIBRATE 0008 SICMD EQU 00001000B ; SENCE INTERRUPT 0004 SDCMD EQU 00000100B ; SENCE DEVICE STATUS 0003 SPCMD EQU 00000011B ; SPECIFY ; SPECIFY COMMAND DATA 00D0 SRT EQU 11010000B ; STEP LATE 3-MS 0008 HUTM EQU 00001000B ; HEAD UNLOAD 240-MS 0032 HLTM EQU 00110010B ; HEAD LOAD TIME 50-MS 0000 DMA EQU 00000000B ; DMA MODE 0020  EOI EQU 00100000B ;END OF INTRRUPT 00FC SOCP0 EQU 0FCH ;8259 OPERATION COMMAND 0 00FD SOCP1 EQU 0FDH ; PORT 1  ;*** IOCS ENTORY POINT FOR HOOK *** E44B CONCCL EQU 0E44BH E44E CONWCL EQU 0E44EH E403 TTYST EQU 0E403H E40C CRTST EQU 0E40CH E415 BATST EQU 0E415H E41E USCNST EQU 0E41EH E406 TTYIN EQU 0E406H E40F CRTIN EQU 0E40FH E418 BATIN EQU 0E418H E421 USCNIN EQU 0E421H E409 TTYOUT EQU 0E409H E412 CRTOUT EQU 0E412H E41B BATOUT EQU 0E41BH  E424 USCNOT EQU 0E424H E427 PTRIN EQU 0E427H E42A USR1IN EQU 0E42AH E42D USR2IN EQU 0E42DH E430 PTPOUT EQU 0E430H     E433 USP1OT EQU 0E433H E436 USP2OT EQU 0E436H E439 LPTOUT EQU 0E439H E43C USL1OT EQU 0E43CH E43F TTOST EQU 0E43FH E442 CRTOST EQU 0E442H E445 LPTST EQU 0E445H E448 USL1ST EQU 0E448H E466 CCHA EQU 0E466H E451 DTIME EQU 0E451H ;DELAY TIME ROUTINE E45D ALPHA EQU 0E45DH ;alphatronic compatible constant exchange E469 SFF1 EQU 0E469H ;system flag 0020 SPORT2 EQU 20H ;system port 2 (out)  ;***************************************************** ;* * ;* LOCATIONS DEPEND ON SYSTEM MEMORY SIZE *  ;***************************************************** 001B ESC EQU 1BH 000D CR EQU 0DH 000A LF EQU 0AH  ; MEMORY BANK CONTROL PORT ADDRESS & COMMAND 00FE CPUC EQU 0FEH 0001 DISAXP EQU 01H  PAGE BIOS II for alphatronic PC V 3.0 03-Mar-84 MACRO-80 3.4 01-Dec-80 PAGE 1-6 ;***************************************************** ;* * ;* BIOS BEGINS HERE * ;* * ;******************************** ;* * ;***************************************************** 0000 BIAS EQU 0 0000 WBOOTV EQU BIAS+0 ;WORM BOOT ENTRY 0003 IOBYTE EQU BIAS+3 ;INTEL IOBYTE 0004 LOGDISK EQU BIAS+4 ;WHERE CCP PUTS LOGDISK # 0005 DOSV EQU BIAS+5 0080  INITSP EQU BIAS+80H ;INITIAL SP LOCATION 0080 INTDMA EQU BIAS+80H ;INITIAL DMA ADDRESS ;*****************************************************  ;* * ;* SOME CHARACTER CODE DEFINITION * BIOS II for alphatronic PC V 3.0 03-Mar-84 MACRO-80 3.4 01-Dec-80 PAGE 1-5 ;* * ********************* PUBLIC BIOSII,ENDBIOS 0000' ASEG  ORG 100H .PHASE BIOS D900 BIOSII:  D900 C3 DF37 CBOOTE: JP CBOOT D903 C3 D9A3 WBOOTE: JP WBOOT D906 C3 DA1A JP CONST D909 C3 DA28 JP CONIN D90C C3 DA36  JP CONOUT D90F C3 DA64 JP LIST D912 C3 DA53 JP PUNCH D915 C3 DA44 JP READER D918 C3 DAB4 JP HOME D91B C3 DA94 JP SELDSK D91E C3 DABF     JP SETTRK D921 C3 DAC4 JP SETSEC D924 C3 DACA JP SETDMA D927 C3 DADC JP READ D92A C3 DAEF JP WRITE D92D C3 DA74 JP LISTST ;LIST STATUS D930 C3 DAD0 JP SECTRAN ;**************************************************** D933 20 42 6F 6F  MSG1: DB ' Boot',00 D937 74 00 D939 49 6E 73 65 MSG2: DB 'Insert PC-CP/M-System disk',00 D93D 72 74 20 20 D941 50 43 2D 43 D945 50 2F 4D 2D D949 53 79 73 74 D94D 65 6D 20 64 D951 69 73 6B 00 ;*****************************************************  ; DW 0,0 ; DW DIRBUF,DPBLK ; DW CSV2,ALV2 D975 0000 0000 DW 0,0 D979 0000 0000 DW 0,0 D97D DEB7 D994 DW DIRBUF,DPBLKP D981 DE68 DEA2 DW CSV3,ALV3 D985 DPBLK: D985 0040 DW 64 ;SECTOR PER TRACK D987 04  DB 4 ;2^4 SECTOR PER CLUSTER D988 0F DB 15 ;2^4-1 (BLOCK MASK) D989 01 DB 1 ;EXTENT MASK D98A 0097 DW 151 ;NUMBER OF LAST CLUSTER D98C 007F  DW 127 ;DIRECTORY SIZE -1 D98E C0 DB 0C0H ;TWO CLUSTERS FOR DIRECTORY D98F 00 DB 0 ;ALLOC 2 D990 0020 DW 32 ;SIZE OF DIRECTORY CHECKSUM VECTOR D992 0002  ;* * BIOS II for alphatronic PC V 3.0 03-Mar-84 MACRO-80 3.4 01-Dec-80 PAGE 1-7 ;* DISK PARAMETER DEFINITION * ;* *  ;***************************************************** 0002 DISKS EQU 2 000F PDRIV EQU 0FH ;P: DRIVE NO. ('P'-41H)  D955 DPBASE: D955 0000 0000 DW 0,0 D959 0000 0000 DW 0,0 D95D DEB7 D985 DW DIRBUF,DPBLK D961 DE28 DE78 DW CSV0,ALV0 D965 0000 0000 DW 0,0 D969 0000 0000 DW 0,0 D96D DEB7 D985 DW DIRBUF,DPBLK D971 DE48 DE8D DW CSV1,ALV1 ; DW 0,0  DW 2 ;SYSTEM TRACK OFFSET D994 DPBLKP: ;CONSTANT for ALPHATRONIC P2 D994 0020 DW 32 D996 03 DB 3 D997 07 DB 7  D998 00 DB 0 D999 0097 DW 151 D99B 003F DW 63 D99D C0 DB 0C0H ; D99E 00 DB 0 D99F 0010 DW 16 ;  D9A1 0002 DW 2 ;***************************************************** ;* *  ;* ENTRY FROM COLD BOOT * BIOS II for alphatronic PC V 3.0 03-Mar-84 MACRO-80 3.4 01-Dec-80 PAGE 1-8 ;* *     ;***************************************************** ;CBOOT: Routines in host buffer D9A3  WBOOT: ;ENTER HERE ON SYSTEM BOOT TO INITIALIZE D9A3 31 0080 LD SP,INITSP ;SET STACK POINTER D9A6 CD E44E CALL CONWCL ; D9A9 3A 0004 LD A,(LOGDISK) D9AC FE 0F CP 0FH D9AE 28 1D JR Z,DSKCHG ;IF P: THEN DISKETTE CHANGE D9B0 WBOOT0: D9B0 AF XOR A D9B1 32 DE18  LD (HSTDSK),A ;BOOT FROM DRIVE 0 D9B4 32 DE0B LD (HOMFLG),A ;CLEAR HOME FLAG D9B7 32 DE1A LD (HSTSEC),A ;START READING SECTOR 0 D9BA 32 DE19 LD (HSTTRK),A D9BD 3E C6 1 21 D903 LD HL,WBOOTE D9E4 32 0000 LD (WBOOTV),A D9E7 22 0001 LD (WBOOTV+1),HL D9EA 21 CB06 LD HL,FBASE+6 D9ED 32 0005 LD (DOSV),A D9F0 22 0006  LD (DOSV+1),HL ; CHANGE SOME BRANCH ADDRESS TO HANDLE SPECIAL COMMAND D9F3 AF XOR A ;0 TO ACCUMULATOR D9F4 32 DE1C LD (HSTACT),A ;HOST BUFFER INACTIVE D9F7 32 DE1E LD (UNACNT),A ;CLEAR UNALLOC COUNT D9FA 01 0080 LD BC,INTDMA D9FD CD DACA CALL SETDMA BIOS II for alphatronic PC V 3.0 03-Mar-84 MACRO-80 3.4 01-Dec-80 PAGE 1-9 DA00 3A 0004 LD A,(LOGDISK) DA03 SELERR: DA03 4F LD C,A ;SAY CCP DRIVE=(C) DA04 CD DA94  LD A,0C6H ;MULTI SECTOR READ COMMAND D9BF CD DBFA CALL DISKRW ; D9C2 B7 OR A D9C3 28 1A JR Z,GOCPM ;GO TO CP/M D9C5 21 D933 LD HL,MSG1 ;BOOT ERROR D9C8 CD DA0E CALL MSG D9CB 18 D6 JR WBOOT D9CD AF DSKCHG: XOR A D9CE 32 0004 LD (LOGDISK),A ;SET DRIVE A: D9D1 32 DE1D  LD (HSTWRT),A D9D4 21 D939 LD HL,MSG2 D9D7 CD DA0E CALL MSG D9DA CD DA28 CALL CONIN D9DD 18 D1 JR WBOOT0 D9DF  GOCPM: ; (ENTER HERE FROM COLD START BOOT) ; SET UP PAGE ZERO JUMPS TO WARM BOOT AND BDOS D9DF 3E C3 LD A,0C3H ;(JP) D9E CALL SELDSK DA07 7C LD A,H DA08 B5 OR L ;SELECT OK? DA09 28 F8 JR Z,SELERR ;IF NOT, SELECT DRIVE A DA0B C3 C300 JP CPMB ;THEN GOTO DOS  DA0E 7E MSG: LD A,(HL) DA0F B7 OR A DA10 C8 RET Z DA11 E5 PUSH HL DA12 4F LD C,A DA13 CD DA36  CALL CONOUT DA16 E1 POP HL DA17 23 INC HL DA18 18 F4 JR MSG ;****************************************************** DA1A CONST: DA1A 3A 0003 LD A,(IOBYTE) DA1D CD DA84 CALL IOSEL DA20 E403 DW TTYST     DA22 E40C DW CRTST DA24 E415 DW BATST DA26 E41E DW USCNST DA28 3A 0003 CONIN: LD A,(IOBYTE) DA2B CD DA84 CALL IOSEL DA2E E406 DW TTYIN DA30 E40F DW CRTIN DA32 E418 DW BATIN DA34 E421 DW USCNIN DA36 3A 0003 CONOUT: LD A,(IOBYTE) DA39 CD DA84 CALL IOSEL DA3C E409 DW TTYOUT DA3E E412 DW CRTOUT DA40 E41B DW BATOUT DA42 E424 DW USCNOT  DA44 3A 0003 READER: LD A,(IOBYTE) DA47 0F RRCA DA48 CD DA85 CALL IOSEL1 DA4B E406 DW TTYIN DA4D E427 DW PTRIN DA4F E42A  DA74 LISTST: DA74 3A 0003 LD A,(IOBYTE) DA77 07 RLCA DA78 07 RLCA DA79 CD DA84 CALL IOSEL DA7C E43F  DW TTOST DA7E E442 DW CRTOST DA80 E445 DW LPTST DA82 E448 DW USL1ST DA84 07 IOSEL: RLCA DA85 E6 06 IOSEL1: AND 06H DA87 E3 EX (SP),HL DA88 D5 PUSH DE DA89 5F LD E,A DA8A 16 00 LD D,00H DA8C 19 ADD HL,DE DA8D 7E  LD A,(HL) DA8E 23 INC HL DA8F 66 LD H,(HL) DA90 6F LD L,A DA91 D1 POP DE DA92 E3 EX (SP),HL DA93 C9  DW USR1IN DA51 E42D DW USR2IN DA53 3A 0003 PUNCH: LD A,(IOBYTE) DA56 0F RRCA DA57 0F RRCA DA58 0F  RRCA BIOS II for alphatronic PC V 3.0 03-Mar-84 MACRO-80 3.4 01-Dec-80 PAGE 1-10 DA59 CD DA85 CALL IOSEL1 DA5C E409 DW TTYOUT DA5E E430 DW PTPOUT DA60 E433  DW USP1OT DA62 E436 DW USP2OT DA64 LIST: DA64 3A 0003 LD A,(IOBYTE) DA67 07 RLCA DA68 07  RLCA DA69 CD DA84 CALL IOSEL DA6C E409 DW TTYOUT DA6E E412 DW CRTOUT DA70 E439 DW LPTOUT DA72 E43C DW USL1OT  RET ; SELECT DISK DA94 SELDSK: DA94 21 0000 LD HL,0 ;ERROR FLAG FOR DOS DA97 79  LD A,C ;SELECTED DISK NUMBER DA98 FE 0F CP PDRIV DA9A 28 10 JR Z,PCONV ;IF P: DRIVE DA9C FE 02 CP DISKS DA9E D0 RET NC ;SELECT ERROR DA9F 32 DE15 LD (SEKDSK),A ;SEEK DISK NUMBER DAA2 6F LD L,A ;DISK NUMBER TO HL DAA3 29 SELDS0: ADD HL,HL ;MULTIPLY BY 16 DAA4 29 ADD HL,HL DAA5 29  ADD HL,HL DAA6 29 ADD HL,HL BIOS II for alphatronic PC V 3.0 03-Mar-84 MACRO-80 3.4 01-Dec-80 PAGE 1-11 DAA7 11 D955 LD DE,DPBASE ;BASE OF PARM BLOCK DAAA 19 ADD HL,DE ;   HL=.DPB(CURDSK) DAAB C9 RET DAAC 2E 02 PCONV: LD L,02 ;P: DRIVE TABLE (=C POSITION) DAAE AF XOR A DAAF 32 DE15 LD (SEKDSK),A ;P: DRIVE (PHISICAL UNIT =A) DAB2 18 EF JR SELDS0 ; HOME THE SELECTED DISK DAB4 HOME: DAB4 3A DE1D LD A,(HSTWRT) ;CHECK FOR PENDING WRITE DAB7 B7 OR A DAB8 20 03 JR NZ,HOMED DABA 32 DE1C LD (HSTACT),A ;CLEAR HOST ACTIVE FLAG DABD 0E 00 HOMED: LD C,0 DABF SETTRK: ;SET TRACK GIVEN BY REGISTERS BC DABF 79 LD A,C DAC0 32 DE16 LD (SEKTRK),A ;TRACK TO SEEK DA OR E DAD5 C8 RET Z DAD6 EB EX DE,HL DAD7 09 ADD HL,BC ;OFFSET TABLE BY LOGICAL SECTOR DAD8 6E LD L,(HL) DAD9 26 00 LD H,0 ;THEN FETCH PHYSICAL SECTOR DADB C9 RET ;***************************************************** ;*  * ;* THE READ ENTRY POINT TAKES THE PLACE OF * ;* THE PREVIOUS BIOS DEFINTION FOR READ. * BIOS II for alphatronic PC V 3.0 03-Mar-84 MACRO-80 3.4 01-Dec-80 PAGE 1-12 ;* * ;***************************************************** DADC READ: C3 C9 RET DAC4 SETSEC: ;SET SECTOR GIVEN BY REGISTER C DAC4 79 LD A,C DAC5 3D DEC A  ;MAKE ZERO ORIGIN NUMBER DAC6 32 DE17 LD (SEKSEC),A ;SECTOR TO SEEK DAC9 C9 RET DACA SETDMA: ;SET DMA ADDRESS GIVEN BY BC DACA 60 LD H,B DACB 69 LD L,C DACC 22 DE26 LD (DMAADR),HL DACF C9 RET DAD0 SECTRAN:  ;TRANSLATE SECTOR NUMBER BC DAD0 60 LD H,B DAD1 69 LD L,C DAD2 23 INC HL DAD3 7A LD A,D DAD4 B3  ;READ THE SELECTED CP/M SECTOR DADC AF XOR A DADD 32 DE1E LD (UNACNT),A DAE0 3E 01 LD A,1 DAE2 32 DE24 LD (READOP),A ;READ OPERATION DAE5 32 DE23  LD (RSFLAG),A ;MUST READ DATA DAE8 3E 02 LD A,WRUAL DAEA 32 DE25 LD (WRTYPE),A ;TREAT AS UNALLOC DAED 18 62 JR RWOPER ;TO PERFORM THE READ  ;***************************************************** ;* * ;* THE WRITE ENTRY POINT TAKES THE PLACE OF *  ;* THE PREVIOUS BIOS DEFINTION FOR WRITE. * ;* * ;*****************************************************    DAEF WRITE: ;WRITE THE SELECTED CP/M SECTOR DAEF AF XOR A ;0 TO ACCUMULATOR DAF0 32 DE24 LD (READOP),A ;NOT A READ OPERATION DAF3 79  LD A,C ;WRITE TYPE IN C DAF4 32 DE25 LD (WRTYPE),A DAF7 FE 02 CP WRUAL ;WRITE UNALLOCATED? DAF9 20 17 JR NZ,CHKUNA ;CHECK FOR UNALLOC  ; WRITE TO UNALLOCATED, SET PARAMETERS DAFB 3E 10 LD A,BLKSIZ/128 ;NEXT UNALLOC RECS DAFD 32 DE1E LD (UNACNT),A DB00 3A DE15 LD A,(SEKDSK) ;DISK TO SEEK DB03  32 DE1F LD (UNADSK),A ;UNADSK = SEKDSK DB06 3A DE16 LD A,(SEKTRK) DB09 32 DE20 LD (UNATRK),A ;UNATRK = SECTRK DB0C 3A DE17 LD A,(SEKSEC) DB0F 32 DE21 LD (UNOS II for alphatronic PC V 3.0 03-Mar-84 MACRO-80 3.4 01-Dec-80 PAGE 1-13 DB2C 20 1B JR NZ,ALLOC ;SKIP IF NOT ; TRACKS ARE THE SAME DB2E 3A DE17  LD A,(SEKSEC) ;SAME SECTOR? DB31 21 DE21 LD HL,UNASEC DB34 BE CP (HL) ;SEKSEC = UNASEC? DB35 20 12 JR NZ,ALLOC ;SKIP IF NOT  ; MATCH, LDE TO NEXT SECTOR FOR FUTURE REF DB37 34 INC (HL) ;UNASEC = UNASEC+1 DB38 3E 40 LD A,CPMSPT ;COUNT CP/M SECTORS DB3A BE CP (HL) ;END OF TRACK? DB3B 20 06 JR NZ,NOOVF ;SKIP IF NO OVERFLOW ; OVERFLOW TO NEXT TRACK DB3D 36 00 LD (HL),0 ;UNASEC = 0 DB3F 21 DE20 LD HL,UNATRK DASEC),A ;UNASEC = SEKSEC DB12 CHKUNA: ;CHECK FOR WRITE TO UNALLOCATED SECTOR DB12 3A DE1E LD A,(UNACNT) ;ANY UNALLOC REMAIN? DB15 B7  OR A DB16 28 31 JR Z,ALLOC ;SKIP IF NOT ; MORE UNALLOCATED RECORDS REMAIN DB18 3D DEC A ;UNACNT = UNACNT-1 DB19 32 DE1E LD (UNACNT),A DB1C 3A DE15 LD A,(SEKDSK) ;SAME DISK? DB1F 21 DE1F LD HL,UNADSK DB22 BE CP (HL) ;SEKDSK = UNADSK? DB23 20 24 JR NZ,ALLOC ;SKIP IF NOT ; DISKS ARE THE SAME DB25 3A DE16 LD A,(SEKTRK) DB28 21 DE20 LD HL,UNATRK DB2B BE CP (HL) ;SEKTRK = UNATRK? BIB42 34 INC (HL) ;UNATRK = UNATRK+1 DB43 NOOVF: ;MATCH FOUND, MARK AS UNNECESSARY READ DB43 AF  XOR A ;0 TO ACCUMULATOR DB44 32 DE23 LD (RSFLAG),A ;RSFLAG = 0 DB47 18 08 JR RWOPER ;TO PERFORM THE WRITE DB49 ALLOC:  ;NOT AN UNALLOCATED RECORD, REQUIRES PRE-READ DB49 AF XOR A ;0 TO ACCUM DB4A 32 DE1E LD (UNACNT),A ;UNACNT = 0 DB4D 3C INC A ;1 TO ACCUM DB4E 32 DE23 LD (RSFLAG),A ;RSFLAG = 1 ;***************************************************** ;*     * ;* COMMON CODE FOR READ AND WRITE FOLLOWS * ;* * ;***************************************************** DB51 RWOPER: ;SAVE SP AND SET NEW SP ADDRESS DB51 ED 73 DE09 LD (SPREG),SP DB55 31 E3FF LD SP,SPBOTM ;ENTER HERE TO PERFORM THE READ/WRITE DB58 AF XOR A ;ZERO TO ACCUM DB59 32 DE22 LD (ERFLAG),A ;NO ERRORS (YET) DB5C 3A DE17 LD A,(SEKSEC) ;COMPUTE HOST SECTOR DB5F B7 OR A ;CARRY = 0 DB60 1F RRA ;SHIFT RIGHT 74 21 DE18 LD HL,HSTDSK ;SAME DISK? DB77 BE CP (HL) ;SEKDSK = HSTDSK? DB78 20 12 JR NZ,NOMATCH ; SAME DISK, SAME TRACK?  DB7A 3A DE16 LD A,(SEKTRK) DB7D 21 DE19 LD HL,HSTTRK DB80 BE CP (HL) ;SEKTRK = HSTTRK? DB81 20 09 JR NZ,NOMATCH  ; SAME DISK, SAME TRACK, SAME BUFFER? DB83 3A DE1B LD A,(SEKHST) DB86 21 DE1A LD HL,HSTSEC ;SEKHST = HSTSEC? DB89 BE  CP (HL) DB8A 28 24 JR Z,MATCH ;SKIP IF MATCH DB8C NOMATCH: ;PROPER DISK, BUT NOT CORRECT SECTOR  DB61 B7 OR A ;SEKSEC = 0..64 DB62 1F RRA ;HSTSEC = 0..7 BIOS II for alphatronic PC V 3.0 03-Mar-84 MACRO-80 3.4 01-Dec-80 PAGE 1-14 DB63 B7 OR A ;-> Division / 8 DB64 1F RRA ; DB65 32 DE1B LD (SEKHST),A ;HOST SECTOR TO SEEK ; ACTIVE HOST SECTOR?  DB68 21 DE1C LD HL,HSTACT ;HOST ACTIVE FLAG DB6B 7E LD A,(HL) DB6C 36 01 LD (HL),1 ;ALWAYS BECOMES 1 DB6E B7 OR A ;WAS IT ALREADY? DB6F 28 22 JR Z,FILHST ;FILL HOST IF NOT ; HOST BUFFER ACTIVE, SAME AS SEEK BUFFER? DB71 3A DE15 LD A,(SEKDSK) DB DB8C 3A DE1D LD A,(HSTWRT) ;HOST WRITTEN? DB8F B7 OR A DB90 C4 DBF4 CALL NZ,WRITEHST ;CLEAR HOST BUFF DB93 FILHST: ;MAY HAVE TO FILL THE HOST BUFFER DB93 3A DE15 LD A,(SEKDSK) DB96 32 DE18 LD (HSTDSK),A DB99 3A DE16 LD A,(SEKTRK) DB9C 32 DE19 LD (HSTTRK),A DB9F 3A DE1B LD A,(SEKHST) DBA2 32 DE1A LD (HSTSEC),A DBA5 3A DE23 LD A,(RSFLAG) ;NEED TO READ? DBA8 B7 OR A DBA9 C4 DBF8 CALL NZ,READHST ;YES, IF 1 DBAC AF XOR A ;0 TO ACCUM DBAD 32 DE1D LD (HSTWRT),A ;NO PENDING WRITE DBB0 MATCH: ;COPY DATA TO OR FROM BUFFER BIOS II for alphatronic    PC V 3.0 03-Mar-84 MACRO-80 3.4 01-Dec-80 PAGE 1-15 DBB0 3A DE17 LD A,(SEKSEC) ;MASK BUFFER NUMBER DBB3 E6 07 AND SECMSK ;LEAST SIGNIF BITS DBB5 6F  LD L,A ;READY TO SHIFT DBB6 26 00 LD H,0 ;DOUBLE COUNT DBB8 29 ADD HL,HL ;SHIFT LEFT 7 DBB9 29 ADD HL,HL DBBA 29 ADD HL,HL DBBB 29  ADD HL,HL DBBC 29 ADD HL,HL DBBD 29 ADD HL,HL DBBE 29 ADD HL,HL ; HL HAS RELATIVE HOST BUFFER ADDRESS DBBF 11 DF37  LD DE,HSTBUF DBC2 19 ADD HL,DE ;HL = HOST ADDRESS DBC3 ED 5B DE26 LD DE,(DMAADR) ;GET/PUT CP/M DATA DBC7 01 0080 LD BC,128 ;LENGTH OF LDE DBCA 3A DE24 LD A,(READOP)BUFFER FOR DIRECTORY WRITE DBE2 B7 OR A ;ERRORS? DBE3 20 0A JR NZ,RWMV1 ;SKIP IF SO DBE5 AF XOR A ;0 TO ACCUM DBE6 32 DE1D LD (HSTWRT),A ;BUFFER WRITTEN DBE9 CD DBF4 CALL WRITEHST DBEC 3A DE22 LD A,(ERFLAG) DBEF ED 7B DE09 RWMV1: LD SP,(SPREG) ;RESTORE SP ADDRESS DBF3 C9 RET  ;***************************************************** ;* * ;* WRITEHST PERFORMS THE PHYSICAL WRITE TO *  ;* THE HOST DISK, READHST READS THE PHYSICAL * ;* DISK. * ;* * ;************** ;WHICH WAY? DBCD B7 OR A DBCE 20 06 JR NZ,RWMOVE ;SKIP IF READ ; WRITE OPERATION, MARK AND SWITCH DIRECTION DBD0 3E 01  LD A,1 DBD2 32 DE1D LD (HSTWRT),A ;HSTWRT = 1 DBD5 EB EX DE,HL ;SOURCE/DEST SWAP DBD6 RWMOVE: ;BC INITIALLY 128, HL IS SOURCE, DE IS DEST DBD6 ED B0 LDIR ; DATA HAS BEEN MOVED TO/FROM HOST BUFFER DBD8 3A DE25 LD A,(WRTYPE) ;WRITE TYPE DBDB FE 01  CP WRDIR ;TO DIRECTORY? DBDD 3A DE22 LD A,(ERFLAG) ;IN CASE OF ERRORS DBE0 20 0D JR NZ,RWMV1 ;NO FURTHER PROCESSING ; CLEAR HOST *************************************** DBF4 WRITEHST: DBF4 3E 45 LD A,045H ;WRITE COMMAND DATA BIOS II for alphatronic PC V 3.0 03-Mar-84 MACRO-80 3.4 01-Dec-80 PAGE 1-16 DBF6 18 02 JR DISKRW DBF8 READHST: DBF8 3E 46 LD A,046H ;READ COMMAND DATA  ;_____________________________________________________________________________ ; ; F l o p p y - d r i v e r a l p h a t r o n i c P C  ;_____________________________________________________________________________ DBFA 32 DE0C DISKRW: LD (RDWTFL),A ;SAVE READ OR WRITE COMMAND DAT   A DBFD 3E 0A LD A,0AH ;SET REPEAT COUNTER DBFF 32 DD18 LD (COUNT),A ;Save repeat counter ;_____________________________________________________________________________ ; ; Switch on motor and delay in case motor needs time to gain speed ;_____________________________________________________________________________ DC02 DB F0 DRW1: IN A,(FDCNTL) ; DC04 CB 7F BIT 7,A ;CHECK MOTOR CONDITION DC06 3E FF LD A,0FFH  DC08 D3 F0 OUT (FDCNTL),A ;Turn on motor basically DC0A 28 0C JR Z,DRW3 ;Skip if motor already running DC0C 21 B64A LD HL,D300 ;DELAY TIME = 350 msec.  CB 6F BIT 5,A ;TEST READY FLAG DC26 20 0B JR NZ,DRW5 ;SKIP IF READY DC28 0D DEC C ;Already 16 times checked ? DC29 20 F1 JR NZ,RDYLOP DC2B 21 DD6F LD HL,TXNRDY ;Drive not ready ! DC2E CD DD19 COMMON: CALL BIOERR ;Give chance to make ready DC31 18 E7 JR RETRY1  BIOS II for alphatronic PC V 3.0 03-Mar-84 MACRO-80 3.4 01-Dec-80 PAGE 1-17 DC33 CB 77 DRW5: BIT 6,A ;Test write protect flag DC35 28 0C JR Z,DRW22 ;Skip if not w.p.  DC37 3A DE0C LD A,(RDWTFL) DC3A FE 45 CP 45H ;WRITE COMMAND? DC3C 20 05 JR NZ,DRW22 ;SKIP IF READ COMMAND DC3E 21 DD72  DC0F CD E451 CALL DTIME DC12 21 B64A LD HL,D300 ;DELAY TIME = 350 msec. DC15 CD E451 CALL DTIME ;_____________________________________________________________________________ ; ; Check ready flag and - if nessecary - also write protection flag ;_____________________________________________________________________________ DC18 06 03 DRW3: LD B,3 ;Retry counter for BIOS ERR DC1A 0E FF RETRY1: LD C,0FFH ; DC1C 3E 04 RDYLOP: LD A,04H ;SENSE DEVICE STATUS COMMAND DC1E CD DDB4 CALL SETCMD DC21 CD DDD6 CALL RDSTAT ;READ STATUS REG. DC24 LD HL,TXWPRO ;Write protection ! DC41 18 EB JR COMMON ;_____________________________________________________________________________  ; ; Check 'home flag' and execute recalibrate if nessecary ;_____________________________________________________________________________  DC43 3A DE0B DRW22: LD A,(HOMFLG) ;Read home flag ( 00..11 ) DC46 4F LD C,A DC47 3A DE18 LD A,(HSTDSK) ;Read host disk number ( 00/01 ) DC4A 3C  INC A ;Make mask ( 01/10 ) DC4B 47 LD B,A DC4C A1 AND C ;Test drive bit in HOMFLG DC4D 20 10 JR NZ,DRW7 ;1 -> drive needs not to be recalibrated     DC4F 78 LD A,B DC50 B1 OR C ;Set drive bit DC51 32 DE0B LD (HOMFLG),A DC54 3E 07 LD A,07H ;Recalibrate command DC56 CD DDB4 CALL SETCMD DC59 CD DD8A CALL CALSEK DC5C C2 DCF7 JP NZ,DRW10 ;Exit when recalibrate error ;_____________________________________________________________________________ ; ; Position head to chosen track / sector ;_____________________________________________________________________________  DC5F 3E 0F DRW7: LD A,0FH ;Seek command DC61 CD DDB4 CALL SETCMD DC64 CD DD81 CALL RQM DC67 3A DE19 LD A,(HSTTRK) ;6 32 DE04 LD (FDTBL+2),A ;(FDTBL+2)=SECTOR NO. DC89 AF XOR A DC8A CB 61 BIT 4,C ;SIDE 0 OR 1? DC8C 28 01 JR Z,DRW8 ;SKIP IF SIDE 0 DC8E 3C  INC A ;_____________________________________________________________________________ ; ; Set parameters for DMA-Controller ( normal operation / warmboot ) ;_____________________________________________________________________________ DC8F 32 DE03 DRW8: LD (FDTBL+1),A ;(FDTBL+1)=SIDE NO. DC92 3E 44 LD A,44H DC94 D3 68 OUT (DMAPT8),A ;OUTPUT MODE DATA TO DMAC DC96 3A DE0C LD A,(RDWTFL) ;READ COMMAND DATA DC99 4F LDREAD HOST TRACK NO. DC6A D3 F8 OUT (FDCDT),A ;OUTPUT TRACK NO. TO FDC DC6C 32 DE02 LD (FDTBL),A ;(FDTBL)=TRACK NO. DC6F CD DD8A CALL CALSEK DC72 C2 DCF7 JP NZ,DRW10 ;Exit when seek error DC75 C5 PUSH BC ; contains still host flag mask DC76 21 0FA0 LD HL,D30 ;SETRING TIME DC79 CD E451 CALL DTIME DC7C C1  POP BC DC7D 3A DE1A LD A,(HSTSEC) ;READ HOST SECTOR NO. DC80 07 RLCA DC81 07 RLCA ; = .HSTSEC * 4  BIOS II for alphatronic PC V 3.0 03-Mar-84 MACRO-80 3.4 01-Dec-80 PAGE 1-18 DC82 4F LD C,A DC83 E6 0F AND 0FH DC85 3C INC A ;(PHYSICAL SECTOR)=(LOGICAL SECTOR)+1 DC8 C,A DC9A 11 DF37 LD DE,HSTBUF ;READ HOST BUFFER ADDRESS DC9D 21 43FF LD HL,43FFH ;SET TC DATA FOR DMAC DCA0 CB 7F BIT 7,A ;CHECK REBOOT COMMAND DCA2 28 06 JR Z,DRW9 ;SKIP IF NO REBOOT DCA4 11 C200 LD DE,CPMB-100H ;SET (CCP-ADDRESS)-100H DCA7 21 55FF LD HL,55FFH ;SET TC DATA(REBOOT) DCAA CB 47 DRW9: BIT 0,A ;CHECK WRITE COMMAND DCAC 28 02  JR Z,DRW11 ;SKIP IF READ COMMAND DCAE 26 83 LD H,83H ; ;_____________________________________________________________________________  ; ; Program DMA - Controller ;_____________________________________________________________________________    DCB0 7B DRW11: LD A,E ;OUTPUT HOST BUFFER ADDRESS DCB1 D3 64 OUT (DMAPT4),A DCB3 7A LD A,D DCB4 D3 64 OUT (DMAPT4),A DCB6 7D LD A,L ;OUTPUT TC DATA DCB7 D3 65 OUT (DMAPT5),A DCB9 7C LD A,H DCBA D3 65 OUT (DMAPT5),A ;_____________________________________________________________________________ ; ; Program read- / write command ;_____________________________________________________________________________ DCBC 79 LD A,C ;OUTPUT READ OR WRITE COMMAND DCBD CD DDB4 CALL SETCMD DCC0 DD 21 DE02 LD IX,FDTBL DCC4 0E LD C,7 DCDC CD DDD6 DRW15: CALL RDSTAT ;READ FDC STATUS DCDF DD 77 00 LD (IX),A ;SAVE FDC STATUS ON ERRTBL DCE2 DD 23 INC IX DCE4 0D DEC C DCE5 20 F5  JR NZ,DRW15 DCE7 3A DE0E LD A,(ERRTBL) ;READ ERROR STATUS DCEA E6 C0 AND 0C0H DCEC 20 10 JR NZ,DRW21 ;Error ?  ;_____________________________________________________________________________ ; ; Operation terminated successfully -> Back to BDOS / BIOS ( Warmboot ) ;_____________________________________________________________________________ DCEE 32 DE22 OKEXIT: LD (ERFLAG),A ;00 to error flag DCF1 3E 80 LD 07 LD C,7 DCC6 CD DD81 DRW13: CALL RQM BIOS II for alphatronic PC V 3.0 03-Mar-84 MACRO-80 3.4 01-Dec-80 PAGE 1-19 DCC9 DD 7E 00 LD A,(IX) ;OUTPUT OTHER DATA DCCC D3 F8  OUT (FDCDT),A DCCE DD 23 INC IX DCD0 0D DEC C DCD1 20 F3 JR NZ,DRW13 ;_____________________________________________________________________________ ; ; Read result status bytes when controller 'ready' ;_____________________________________________________________________________ DCD3 CD DDCF DRW14: CALL RDINT ;CHECK INT DCD6 DD 21 DE0E LD IX,ERRTBL DCDA 0E 07  A,80H DCF3 D3 F0 OUT (FDCNTL),A ;Switch off floppy disk motor DCF5 AF XOR A DCF6 C9 RET ;Return with = 0 ;_____________________________________________________________________________ ; ; E r r o r ! Repeat nine times - reset controller every third retry ;_____________________________________________________________________________ DCF7 3A DE0B DRW10: LD A,(HOMFLG) ;Recalibrate or seek error DCFA 90 SUB B ;Reset drive bit in home flag DCFB 32 DE0B LD (HOMFLG),A DCFE 3A DD18 DRW21: LD A,(COUNT) DD01 3D DEC A ;Increment repeat count DD02 32 DD18    LD (COUNT),A DD05 E6 03 AND 03 DD07 CC DDDF CALL Z,FDCINT ;Reset FDC DD0A C2 DC02 JP NZ,DRW1 ;Repeat nine times DD0D 3E 01  ERREX: LD A,1 ;Set error flag DD0F 32 DE22 LD (ERFLAG),A BIOS II for alphatronic PC V 3.0 03-Mar-84 MACRO-80 3.4 01-Dec-80 PAGE 1-20 DD12 AF XOR A DD13  32 0004 LD (LOGDISK),A ;Log in drive A: DD16 3C INC A DD17 C9 RET ;Return with = 1 DD18 COUNT: DS 1 ;Repeat counter  ;_____________________________________________________________________________ ; ; 'Write protection' and 'Not ready' can be ONOUT DD30 EB EX DE,HL ;Save current cursor position DD31 22 DE0E LD (ERRTBL),HL ;in actually unused ERROR TABLE DD34 21 DD5E LD HL,TXBIOE DD37 CD DA0E CALL MSG ;Print 'BIOS ERR ' DD3A E1 POP HL DD3B CD DA0E CALL MSG ;Print 'NR' or 'WP' DD3E CD DA28 CALL CONIN ;Wait for any key DD41 21 DD75 LD HL,TXRMOV DD44 CD DA0E CALL MSG ;Remove error message DD47 2A DE0E LD HL,(ERRTBL) ;Get back current cursor position DD4A 11 DD7E  LD DE,TXCPOS+2 DD4D 7C LD A,H DD4E C6 20 ADD A,20H DD50 12 LD (DE),A ;Line DD51 13 INC DE DD52 7D LD A,L DD53 C6 20 eliminated ( BIOS ERROR ) ;_____________________________________________________________________________ DD19 78 BIOERR: LD A,B ; DD1A B7 OR A ;Retries possible ? DD1B 20 06 JR NZ,ERROK DD1D E1 POP HL ;No ! Remove return adress from stack DD1E 32 0004 LD (LOGDISK),A ;If not, log in drive A DD21 18 EA JR ERREX ;and exit DD23 05 ERROK: DEC B ;Decrement retry counter DD24 C5 PUSH BC DD25 E5 PUSH HL ; contains adress DD26 0E 1B LD C,1BH ;of following text ( NR/WP ) DD28 CD DA36 CALL CONOUT DD2B 0E 17 LD C,17H DD2D CD DA36 CALL C ADD A,20H DD55 12 LD (DE),A ;Column DD56 21 DD7C LD HL,TXCPOS DD59 CD DA0E CALL MSG ;Set cursor position DD5C C1 POP BC DD5D C9  RET DD5E 1B 59 38 61 TXBIOE: DB 1BH,'Y',38H,61H,07H ;Place message at line 24 / col 65 BIOS II for alphatronic PC V 3.0 03-Mar-84 MACRO-80 3.4 01-Dec-80 PAGE 1-21 DD62 07  DD63 42 49 4F 53 DB 'BIOS Error ',00 DD67 20 45 72 72 DD6B 6F 72 20 00 DD6F 4E 52 00 TXNRDY: DB 'NR',00 DD72 57 50 00 TXWPRO: DB 'WP',00 DD75 1B 59 38 61 TXRMOV: DB 1BH,'Y',38H,61H,1BH,4BH,00 ;Remove error message DD79 1B 4B 00 DD7C 1B 59 00 00 TXCPOS: DB 1BH,'Y',00,00,00 DD80 00    ;_____________________________________________________________________________ ; ; Wait till controller ready for changing data with processor (RQM=1)  ;_____________________________________________________________________________ DD81 F5 RQM: PUSH AF DD82 DB F9 RQM1: IN A,(FDCST) ;READ STATUS REG. FROM FDC DD84 CB 7F BIT 7,A ;TEST RQM FLAG DD86 28 FA JR Z,RQM1 ;SKIP IF RQM=0 DD88 F1 POP AF DD89 C9 RET  ;_____________________________________________________________________________ ; ; Check status after 'Seek' and 'Recalibrate' function  CALS3: LD (ERRTBL),A DDAC 18 DF JR CALS1 DDAE 3A DE0E CALS2: LD A,(ERRTBL) DDB1 FE 00 CP 00H ;TEST ERROR DDB3 C9 RET ;Z=1 NO ERROR, Z=0 ERROR  ;_____________________________________________________________________________ ; ; Send command to the FD - controller  ;_____________________________________________________________________________ BIOS II for alphatronic PC V 3.0 03-Mar-84 MACRO-80 3.4 01-Dec-80 PAGE 1-22  DDB4 CD DD81 SETCMD: CALL RQM ;CHECK RQM FLAG DDB7 D3 F8 OUT (FDCDT),A ;OUTPUT COMMAND DATA DDB9 FE 07 CP 07H ;RECALIBRATE COMMAND? DDBB CD DD81 CALL RQM DD ;_____________________________________________________________________________ DD8A CD DDCF CALSEK: CALL RDINT ;CHECK INT  DD8D 3E 08 CALS1: LD A,8 ;SENSE INT COMMAND DATA DD8F CD DD81 CALL RQM DD92 D3 F8 OUT (FDCDT),A DD94 CD DDD6 CALL RDSTAT DD97 FE 80 CP 80H ;FDC'S STATUS EMPTY? DD99 28 13 JR Z,CALS2 ;SKIP IF FDC'S STATUS IS EMPTY DD9B 4F LD C,A DD9C CD DDD6 CALL RDSTAT DD9F 79 LD A,C DDA0 C6 40  ADD A,40H ;ATTENTION INTERRUPT? DDA2 38 E9 JR C,CALS1 DDA4 E6 80 AND 80H ;ERROR? DDA6 28 01 JR Z,CALS3 ;SKIP IF NO ERROR DDA8 79 LD A,C DDA9 32 DE0E BE 28 05 JR Z,SETCM1 DDC0 3A DE1A LD A,(HSTSEC) ;READ HOST SECTOR DDC3 E6 FC AND 0FCH ;CHECK SIDE 0 OR 1 DDC5 3A DE18 SETCM1: LD A,(HSTDSK) ;READ HOST DISK DDC8 28 02 JR Z,SETCM2 ;SKIP IF SIDE 0 DDCA F6 04 OR 04H DDCC D3 F8 SETCM2: OUT (FDCDT),A ;OUTPUT SIDE+HSTDISK DDCE C9 RET  ;_____________________________________________________________________________ ; ; Wait for ' controller ready ' after command phase ;_____________________________________________________________________________ DDCF DB F0 RDINT: IN A,(FDCNTL) ;Read FDC Controll-Register DDD1 CB 77    BIT 6,A DDD3 20 FA JR NZ,RDINT ;Wait for INT DDD5 C9 RET ;_____________________________________________________________________________  ; ; Get one status byte aftes read- / write function ;_____________________________________________________________________________  DDD6 DB F9 RDSTAT: IN A,(FDCST) ;READ FDC STATUS REG. DDD8 C6 40 ADD A,40H ;SET STATUS OF FDC? DDDA 30 FA JR NC,RDSTAT DDDC DB F8  IN A,(FDCDT) ;READ FDC DATA REG. DDDE C9 RET ;____________________________________________________________________ LD A,01CH ;HLT=56mS DDFC CD DD81 CALL RQM DDFF D3 F8 OUT (FDCDT),A DE01 C9 RET ;_____________________________________________________________________________ ;Working and Buffer Registers ;C,H,R,N,EOT,GPL,DTL DE02 00 00 00 FDTBL: DB 00H,00H,00H DE05 01 10 DB 01H,10H DE07 36 FF DB 36H,0FFH DE09 SPREG: DS 2 DE0B HOMFLG: DS 1 DE0C RDWTFL: DS 1 DE0D WIOCNT: DS 1 DE0E ERRTBL: DS 7 _________ ; ; Initialize floppy disk controller ;_____________________________________________________________________________  DDDF AF FDCINT: XOR A DDE0 D3 F0 OUT (FDCNTL),A ;FDC RESET DDE2 21 0028 LD HL,40 ;DELAY = 3 MSEC. DDE5 CD E451 CALL DTIME DDE8 3E FF LD A,0FFH DDEA D3 F0 OUT (FDCNTL),A DDEC 3E 03 LD A,03H ;SPECIFY CMD. DDEE CD DD81 CALL RQM DDF1 D3 F8 OUT (FDCDT),A DDF3 3E CF  LD A,0CFH ;SRT=8mS, HUT=480mS DDF5 CD DD81 CALL RQM BIOS II for alphatronic PC V 3.0 03-Mar-84 MACRO-80 3.4 01-Dec-80 PAGE 1-23 DDF8 D3 F8 OUT (FDCDT),A DDFA 3E 1C  ;***************************************************** ;* * ;* UNITIALIZED RAM DATA AREAS * ;*  * ;***************************************************** DE15 SEKDSK: DS 1 ;SEEK DISK NUMBER DE16  SEKTRK: DS 1 ;SEEK TRACK NUMBER DE17 SEKSEC: DS 1 ;SEEK SECTOR NUMBER DE18 HSTDSK: DS 1 ;HOST DISK NUMBER DE19 HSTTRK: DS 1 ;HOST TRACK NUMBER DE1A HSTSEC: DS 1 ;HOST SECTOR NUMBER DE1B SEKHST: DS 1 ;SEEK SHR SECSHF DE1C HSTACT: DS 1 ;HOST ACTIVE FLAG    DE1D HSTWRT: DS 1 ;HOST WRITTEN FLAG DE1E UNACNT: DS 1 ;UNALLOC REC CNT DE1F UNADSK: DS 1 ;LAST UNALLOC DISK DE20  UNATRK: DS 1 ;LAST UNALLOC TRACK DE21 UNASEC: DS 1 ;LAST UNALLOC SECTOR DE22 ERFLAG: DS 1 ;ERROR REPORTING DE23 RSFLAG: DS 1 ;READ SECTOR FLAG DE24 READOP: DS 1 ;1 IF READ OPERATION DE25 WRTYPE: DS 1 ;WRITE OPERATION TYPE DE26 DMAADR: DS 2 ;LAST DMA ADDRESS DE28 CSV0: DS 32 ;CSV0 SIZE=CSK0 DE48 CSV1: DS 32 ; CSV2: DS 32 BIOS II for alphatronic PC V 3.0 03-Mar-84 MACRO-80 3.4 01-Dec- DF44 3E 95 LD A,95H ;LST=LPT,PUN=PTP,RDR=PTR,CON=CRT DF46 32 0003 LD (IOBYTE),A DF49 21 DFC1 LD HL,NUMBUF DF4C 22 DFBE LD (NUMPTR),HL DF4F 2A CB04 LD HL,(FBASE+4) ;Get serial number * DF52 CD DFC6 CALL DECOUT DF55 21 DFB5 LD HL,NUMBER DF58 3A DFC0 LD A,(NUMSIZ) DF5B 47 LD B,A DF5C 3E 05 LD A,5 DF5E 90 SUB B DF5F B7 NUMINC: OR A DF60 28 04 JR Z,NUMCOP DF62 3D DEC A DF63 23 INC HL DF64 18 F9 JR NUMINC DF66 11 DFC1 NUMCOP: LD DE,N80 PAGE 1-24 DE68 CSV3: DS 16 DE78 ALV0: DS 21 ;ALV0 SIZE=[DSM/8]+1 DE8D ALV1: DS 21  ; ALV2: DS 21 DEA2 ALV3: DS 21 DEB7 DIRBUF: DS 128 ;SYSTEM DIRECTORY BUFFER DF37 HSTBUF: ;HOST BUFFER DF37 31 0080 CBOOT: LD SP,INITSP ;SET STACK POINTER DF3A AF  XOR A ;ACC = 0 DF3B 32 0004 LD (LOGDISK),A ;SET INITIALLY TO DISK A/USER 0 DF3E 32 DE1D LD (HSTWRT),A DF41 32 DFC0 LD (NUMSIZ),A ;Init poiter for Serial number output UMBUF ;Copy serial number into text ;to get leading zeros DF69 78 NUMLOP: LD A,B DF6A B7 OR A DF6B 28 07 JR Z,NUMOUT DF6D 05  DEC B DF6E 1A LD A,(DE) DF6F 77 LD (HL),A DF70 23 INC HL DF71 13 INC DE DF72 18 F5 JR NUMLOP  DF74 21 DF7D NUMOUT: LD HL,MSG0 DF77 CD DA0E CALL MSG BIOS II for alphatronic PC V 3.0 03-Mar-84 MACRO-80 3.4 01-Dec-80 PAGE 1-25 DF7A C3 D9DF JP GOCPM ; common code for warm and cold boot DF7D 20 35 36 4B MSG0: DB ' 56K CP/M 2.2 / 3.0 ' DF81 20 20 43 50 DF85 2F 4D 20 32 DF89 2E 32 20 2F DF8D 20 33 2E 30   DF91 20 20 20 DF94 61 6C 70 68 DB 'alphatronic PC ' DF98 61 74 72 6F DF9C 6E 69 63 20 DFA0 20 50 43 20 DFA4 20 20 DFA6 53 65 72 69  DB 'Serial number ' DFAA 61 6C 20 6E DFAE 75 6D 62 65 DFB2 72 20 20 DFB5 30 30 30 30 NUMBER: DB '00000 ',CR,LF,00 DFB9 30 20 0D 0A DFBD 00  DFBE NUMPTR: DS 2 DFC0 NUMSIZ: DS 1 DFC1 NUMBUF: DS 5 DFC6 C5 DECOUT: PUSH BC  ;Convert to decimal format DFC7 D5 PUSH DE DFC8 E5 PUSH HL DFC9 01 FFF6 LD BC,-10 DFCC 11 FFFF LD DE,-1 DFCF 09 DECOU2: ADD HL,BC  D1 POP DE DFF1 C1 POP BC DFF2 C9 RET BIOS II for alphatronic PC V 3.0 03-Mar-84 MACRO-80 3.4 01-Dec-80 PAGE 1-26 DFF3 42 49 4F 53  DB 'BIOS II alphatronic PC V 3.0 13.03.84' DFF7 20 49 49 20 DFFB 20 61 6C 70 DFFF 68 61 74 72 E003 6F 6E 69 63 E007 20 20 50 43 E00B 20 20 20 56  E00F 20 33 2E 30 E013 20 20 20 31 E017 33 2E 30 33 E01B 2E 38 34 E01E BUFFER: DS HSTSIZ-(BUFFER-HSTBUF) E337 C300 BUFEND: DW CBASE E339 CD39 ENDBIO: DW CBASE+(ENDBIO-BIOSII) .DEPHASE  DFD0 13 INC DE DFD1 DA DFCF JP C,DECOU2 DFD4 01 000A LD BC,10 DFD7 09 ADD HL,BC DFD8 EB EX DE,HL DFD9 7C LD A,H DFDA B5 OR L DFDB C4 DFC6 CALL NZ,DECOUT DFDE 7B LD A,E DFDF C6 30 ADD A,'0' ;Convert number to ASCII - Format DFE1 E5 PUSH HL DFE2 2A DFBE LD HL,(NUMPTR) DFE5 77 LD (HL),A ;Save digit in buffer DFE6 23 INC HL DFE7 22 DFBE LD (NUMPTR),HL ;Save incremented buffer pointer DFEA 21 DFC0 LD HL,NUMSIZ DFED 34 INC (HL) ;actualize length byte DFEE E1 POP HL DFEF E1 POP HL DFF0  END BIOS II for alphatronic PC V 3.0 03-Mar-84 MACRO-80 3.4 01-Dec-80 PAGE S Macros: Symbols: ALLOC DB49 ALPHA E45D ALV0 DE78 ALV1 DE8D ALV3 DEA2 ARAMAD F800 BATIN E418 BATOUT E41B BATST E415 BIAS 0000 BIOERR DD19 BIOS D900 BIOSII D900I BLKSIZ 0800 BUFEND E337 BUFFER E01E CALS1 DD8D CALS2 DDAE CALS3 DDA9 CALSEK DD8A CBASE C300 CBOOT DF37 CBOOTE D900 CCHA E466 CCPPAT C5B2 CCPSCN C52E CCPSTK C5AB CHKUNA DB12 COMMON DC2E CONCCL E44B CONIN DA28 CONOUT DA36 CONST DA1A CONWCL E44E COUNT DD18 CPMB C300 CPML 1600 CPMSPT 0040 CPUC 00FE CR 000D CRTIN E40F CRTOST E442 CRTOUT E412 CRTST E40C CSV0 DE28 CSV1 DE48 CSV3 DE68 D30 0FA0 D300 B64A DECOU2 DFCF DECOUT DFC6 DIRBUF DEB7 DISAXP 0001 DISKRW DBFA DISKS 0002 DMA 0000 DMAADR DE26 DMAPT4 0064 DMAPT5 0065 DMAPT8 0068 DOSV 0005 DPBASE D955 DPBLK D985 DPBLKP D994 DRW1 DC02 DRW10 DCF  7 DRW11 DCB0 DRW13 DCC6 DRW14 DCD3 DRW15 DCDC DRW21 DCFE DRW22 DC43 DRW3 DC18 DRW5 DC33 DRW7 DC5F DRW8 DC8F DRW9 DCAA DSKCHG D9CD DTIME E451 ENDBIO E339I EOI 0020 ERFLAG DE22 ERRCCP C509 ERREX DD0D ERROK DD23 ERRTBL DE0E ESC 001B  FBASE CB00 FDCDT 00F8 FDCINT DDDF FDCNTL 00F0 FDCST 00F9 FDTBL DE02 FILHST DB93 GETCHR C564 GOCPM D9DF HLTM 0032 HOME DAB4 HOMED DABD HOMFLG DE0B HSTACT DE1C HSTBLK 0008 HSTBUF DF37 HSTDSK DE18 HSTSEC DE1A HSTSIZ 0400 HSTSPT 0008 HSTTRK DE19 HSTWRT DE1D HUTM 0008 INITSP 0080 INTDMA 0080 IOBYTE 0003 IOSEL DA84 IOSEL1 DA85 LF 000A LIST DA64 LISTST DA74 LOGDIS 0004 LPTOUT E439 LPTST E445 MATCH DBB0 MSG DA0E MSG0 DF7D MSG1 D933 MSG2 D939 NOMATC DB8C NOOVF DB43  NUMBER DFB5 NUMBUF DFC1 NUMCOP DF66 NUMINC DF5F NUMLOP DF69 NUMOUT DF74 NUMPTR DFBE NUMSIZ DFC0 OFFS C300 OKEXIT DCEE PCONV DAAC PDRIV 000F PTPOUT E430 PTRIN E427 PUNCH DA53 RBCMD 0007 RDCM 0046 RDINT DDCF RDSTAT DDD6 RDWTFL DE0C 0000 WRDIR 0001 WRITE DAEF WRITEH DBF4 WRTYPE DE25 WRUAL 0002 No Fatal error(s) MOVE DBD6 RWMV1 DBEF RWOPER DB51 SDCMD 0004 SECMSK 0007 SECTRA DAD0 SEKDSK DE15 SEKHST DE1B SEKSEC DE17 SEKTRK DE16  SELDS0 DAA3 SELDSK DA94 SELERR DA03 SETCM1 DDC5 SETCM2 DDCC SETCMD DDB4 SETDMA DACA SETSEC DAC4 SETTRK DABF SFF1 E469 SICMD 0008 SKCMD 000F SOCP0 00FC SOCP1 00FD SPBOTM E3FF SPCMD 0003 SPORT2 0020 SPREG DE09 SRT 00D0 TMC0 8000 TMC1 1388 TMC2 0BB8 TMC3 0402 TMC4 03E8 TTOST E43F TTYIN E406 TTYOUT E409 TTYST E403 TXBIOE DD5E TXCPOS DD7C TXNRDY DD6F TXRMOV DD75 TXWPRO DD72 UNACNT DE1E UNADSK DE1F UNASEC DE21 UNATRK DE20 USCNIN E421 USCNOT E424 USCNST E41E USL1OT E43C USL1ST E448 USP1OT E433 USP2OT E436 USR1IN E42A USR2IN E42D VRAMAD F000 WBOOT D9A3 BIOS II for alphatronic PC V 3.0 03-Mar-84 MACRO-80 3.4 01-Dec-80 PAGE S-1 WBOOT0 D9B0 WBOOTE D903 WBOOTV 0000 WDCM 0045 WIOCNT DE0D WRALL  RDYLOP DC1C READ DADC READER DA44 READHS DBF8 READOP DE24 RESCCP C582 RETRY1 DC1A RQM DD81 RQM1 DD82 RSFLAG DE23 RWMOVE DBD6 RWMV1 DBEF RWOPER DB51 SDCMD 0004 SECMSK 0007 SECTRA DAD0 SEKDSK DE15 SEKHST DE1B SEKSEC DE17 SEKTRK DE16  SELDS0 DAA3 SELDSK DA94 SELERR DA03 SETCM1 DDC5 SETCM2 DDCC SETCMD DDB4 SETDMA DACA SETSEC DAC4 SETTRK DABF SFF1 E469 SICMD 0008 SKCMD 000F SOCP0 00FC SOCP1 00FD SPBOTM E3FF SPCMD 0003 SPORT2 0020 SPREG DE09 SRT 00D0 TMC0 8000 TMC1 1388 TMC2 0BB8 TMC3 0402 TMC4 03E8 TTOST E43F TTYIN E406 TTYOUT E409 TTYST E403 TXBIOE DD5E TXCPOS DD7C TXNRDY DD6F TXRMOV DD75 TXWPRO DD72 UNACNT DE1E UNADSK DE1F UNASEC DE21 UNATRK DE20 USCNIN E421 USCNOT E424 USCNST E41E USL1OT E43C USL1ST E448 USP1OT E433 USP2OT E436 USR1IN E42A USR2IN E42D VRAMAD F000 WBOOT D9A3 BIOS II for alphatronic PC V 3.0 03-Mar-84 MACRO-80 3.4 01-Dec-80 PAGE S-1 WBOOT0 D9B0 WBOOTE D903 WBOOTV 0000 WDCM 0045 WIOCNT DE0D WRALL   ; Skeletal CBIOS for first level of CP/M 2.0 alteration ; msize equ 20 ;cp/m version memory size in kilobytes ; ; "bias" is address offset from 3400H for memory systems ; than 16K (referred to as "b" throughout the text). ; bias equ (msize-20)*1024  ccp equ 3400H+bias ;base of ccp bdos equ ccp+806h ;base of bdos bios equ ccp+1600h ;base of bios cdisk equ 0004H ;current disk number 0=A,...,15=P iobyte equ 0003h ;intel i/o byte ; org bios ;origin of this program nsects equ ($-ccp)/128 ;warm start sector count ; ; jump vector for individual subroutines jmp boot ;cold start wboote: jmp wboot ;warm start jmp const ;console status jmp conin ;console character in jmp conout ;console character out jmp list ;list character out jmp punch ;punch character out jmp reader ;reader character out jmp home ;move head to home position jmp seldsk ;select disk jmp settrk ;set track number jmp setsec ;set sector number jmp setdma ;set dma address jmp read ;read disk jmp k size-1 dw 63 ;directory max db 192 ;alloc 0 db 0 ;alloc 1 dw 16 ;check size dw 2 ;track offset ; ; end of fixed tables ; ; individual subroutines to perform each function boot: ;simplest case is to just perform parameter initialization xra a ;zero in the accum sta iobyte ;clear the iobyte sta cdisk ;select disk zero jmp gocpm ;initialize and go to cp/m ; wboot: ;simplest case is to read the disk until all sectors loaded lxi sp,80h ;use space below buffer for stack mvi c,0 ;select disk 0 call seldsk call home ;go to track 00 ; mvi b,nsects ;b counts # of sectors to load mvi c,0 ;c has the current track number mvi d,2 ;d has the next sector to read ; note that we begin by reading track 0, sector 2 since sector 1 ; contains the cold start loader, which is skipped in a warm start lxi h,ccp ;base of cp/m (initial load point) load1: ;load one more sector push b ;save sector count, current track push d ;save next sector to read push h ;save dma addrwrite ;write disk jmp listst ;return list status jmp sectran ;sector translate ; ; fixed data tables for four-drive standard ; IBM-compatible 8" disks ; disk parameter header for disk 00 dpbase: dw trans,0000H dw 0000H,0000H dw dirbf,dpblk  dw chk00,all00 ; disk parameter header for disk 01 dw trans,0000H dw 0000H,0000H dw dirbf,dpblk dw chk01,all01 ; disk parameter header for disk 02 dw trans,0000H dw 0000H,0000H dw dirbf,dpblk dw chk02,all02 ; disk parameter header for disk 03 dw trans,0000H dw 0000H,0000H dw dirbf,dpblk dw chk03,all03 ; ; sector translate vector trans: db 1,7,13,19 ;sectors 1,2,3,4 db 25,5,11,17 ;sectors 5,6,7,8 db 23,3,9,15 ;sectors 9,10,11,12 db 21,2,8,14 ;sectors 13,14,15,16 db 20,26,6,12 ;sectors 17,18,19,20 db 18,24,4,10 ;sectors 21,22,23,24 db 16,22 ;sectors 25,26 ; dpblk: ;disk parameter block, common to all disks dw 26 ;sectors per track db 3 ;block shift factor db 7 ;block mask db 0 ;null mask dw 242 ;disess mov c,d ;get sector address to register c call setsec ;set sector address from register c pop b ;recall dma address to b,c push b ;replace on stack for later recall call setdma ;set dma address from b,c ; ; drive set to 0, track set, sector set, dma address set call read cpi 00h ;any errors? jnz wboot ;retry the entire boot if an error occurs ; ; no error, move to next sector pop h ;recall dma address lxi d,128 ;dma=dma+128 dad d ;new dma address is in h,l pop d ;recall sector address pop b ;recall number of sectors remaining, and current trk dcr b ;sectors=sectors-1 jz gocpm ;transfer to cp/m if all have been loaded ; ; more sectors remain to load, check for track change inr d mov a,d ;sector=27?, if so, change tracks cpi 27 jc load1 ;carry generated if sector<27 ; ; end of current track, go to next track mvi d,1 ;begin with first sector of next track inr c ;track=track+1 ; ; save register state, and change tracks push b push d push h call settr  k ;track address set from register c pop h pop d pop b jmp load1 ;for another sector ; ; end of load operation, set parameters and go to cp/m gocpm: mvi a,0c3h ;c3 is a jmp instruction sta 0 ;for jmp to wboot lxi h,wboote ;wboot entry point shld 1 ;set address field for jmp at 0 ; sta 5 ;for jmp to bdos lxi h,bdos ;bdos entry point shld 6 ;address field of jump at 5 to bdos ; lxi b,80h ;default dma address is 80h call setdma ; ei ;enable the interrupt system lda cdisk ;get current disk number mov c,a ;send to the ccp jmp ccp ;go to cp/m for further processing ; ; ; simple i/o handlers (must be filled in by user) ; in each case, the entry point is provided, with space reserved ; to insert your own code ; const: ;console status, return 0ffh if character ready, 00h if not ds 10h ;space for status subroutine mvi a,00h ret ; conin: ;console character into register a ds 10h ;space for input routine ani 7fh ;strip parity bit ret ; conout: ;console chara;must be between 0 and 3 rnc ;no carry if 4,5,... ; disk number is in the proper range ds 10 ;space for disk select ; compute proper disk parameter header address lda diskno mov l,a ;L=disk number 0,1,2,3 mvi h,0 ;high order zero dad h ;*2  dad h ;*4 dad h ;*8 dad h ;*16 (size of each header) lxi d,dpbase dad d ;HL=.dpbase(diskno*16) ret ; settrk: ;set track given by register c mov a,c sta track ds 10h ;space for track select ret ; setsec: ;set sector given by register c mov a,c sta sector ds 10h ;space for sector select ret ; sectran: ;translate the sector given by BC using the ;translate table given by DE xchg ;HL=.trans dad b ;HL=.trans(sector) mov l,m ;L = trans(sector) mvi h,0 ;HL= trans(sector) ret ;with value in HL ; setdma: ;set dma address given by registers b and c mov l,c ;low order address mov h,b ;high order address shld dmaad ;save the address ds 10h ;space for setting the dma address ret ; read: ;perform read operatiocter output from register c mov a,c ;get to accumulator ds 10h ;space for output routine ret ; list: ;list character from register c mov a,c ;character to register a ret ;null subroutine ; listst: ;return list status (0 if not ready, 1 if ready) xra a ;0 is always ok to return ret ; punch: ;punch character from register c mov a,c ;character to register a ret ;null subroutine ; ; reader: ;read character into register a from reader device mvi a,1ah ;enter end of file for now (replace later) ani 7fh ;remember to strip parity bit ret ; ; ; i/o drivers for the disk follow ; for now, we will simply store the parameters away for use ; in the read and write subroutines ; home: ;move to the track 00 position of current drive  ; translate this call into a settrk call with parameter 00 mvi c,0 ;select track 0 call settrk ret ;we will move to 00 on first read/write ; seldsk: ;select disk given by register C lxi h,0000h ;error return code mov a,c sta diskno cpi 4 n (usually this is similar to write ; so we will allow space to set up read command, then use ; common code in write) ds 10h ;set up read command jmp waitio ;to perform the actual i/o ; write: ;perform a write operation ds 10h ;set up write command ; waitio: ;enter here from read and write to perform the actual i/o ; operation. return a 00h in register a if the operation completes ; properly, and 01h if an error occurs during the read or write ; ; in this case, we have saved the disk number in 'diskno' (0,1) ; the track number in 'track' (0-76) ; the sector number in 'sector' (1-26) ; the dma address in 'dmaad' (0-65535) ds 256 ;space reserved for I/O drivers mvi a,1 ;error condition ret ;replaced when filled-in ; ; the remainder of the CBIOS is reserved uninitialized ; data area, and does not need to be a part of the ; system memory image (the space must be available, ; however, between "begdat" and "enddat"). ; track: ds 2 ;two bytes for expansion sector: ds 2 ;two   bytes for expansion dmaad: ds 2 ;direct memory address diskno: ds 1 ;disk number 0-15 ; ; scratch ram area for BDOS use begdat equ $ ;beginning of data area dirbf: ds 128 ;scratch directory area all00: ds 31 ;aH ;2:7069 $@Hation vector 1 all02: ds 31 ;allocation vector 2 all03: ds 31 ;allocation vector 3 chk00: ds 16 ;check vector 0 chk01: ds 16 ;check vector 1 chk02: ds 16 ;check vector 2 chk03: ds 16 ;check vector 3 ; enddat equ $ ;end of data area datsiz equ $-begdat;size of data area end maad' (0-65535) ds 256 ;space reserved for I/O drivers mvi a,1 ;error condition ret ;replaced when filled-in ; ; the remainder of the CBIOS is reserved uninitialized ; data area, and does not need to be a part of the ; system memory image (the space must be available, ; however, between "begdat" and "enddat"). ; track: ds 2 ;two bytes for expansion sector: ds 2 ;two =COPYRIGHT (C) 1980, DIGITAL RESEARCH DDT VERS 2.2$10 !~=W!xe ~#Xbxʇ {z~#o}o҃i.2_!fp+q*e2_2_!hp+q*g!jp+q*i!lp+q*k!np+q*m2_!pp+q*oÃO$*sy͏ , $  ͌ 9!z6 # L!zw͌j# X:z 0 ͘=N#Fy}80*z{¯#z+++ ¥ z#½# · 9!`͠ y9!rͷ y=!z{w# % w!P͠ y͓}*w#"͌ @.@<!Eͷ~P !ͷ’P͌Q!ͷªP}QxQ!ͷ͓G@Q! ͷ y͓Gþ!ͷ ͓Q!ͷ͓Q͌Q!.ͷ6y#G͙Qà!2ͷQ͓͌Q!>ͷq eg͙Q:zJEËC–EQyQxQRQ** {zҷ*~#" <AOGƐ'@'OxƐ'@'ON# z8O!B N#N ¾SP.* |} !9":q!"28!"9:] !í 1  ͓ !" >- Ͷ Aګ ҫ _!7^#V~  \p Z z ů2[\͓͢ ҫ ͐ =« f " ͓ ҫ ͐ ʻf " =ʻf "=« ý> 2͐ f "]=f =« *]}o"_  *]"a. ~ #E }"]*a 6 *]}#|#*]E ͐ « f f f {zA|« W}d ͐ f f f DMʡڏ"=ʡͲ=ʡYPͲ1**!O~4#~#F#x~#s#r#w>͐ « f f  . ᯕo>g. 2|2\  !]w# ʫ .&  0 6 #& .K !e K w# ʫ : U 6 #K 6AW w#] !e~H#~E#~X*}|́ "!́ ͐ !ʬ =« f kʫ j \͢F w# ͋ t ʫ : W& _& & O { `i"F & & w# & ͋ « t Y t Y GтWx ͢!o ~Z #N  *. *.  NEXT PC͐ =« f  . ~ Ͷ ʻ .͓ =« f |« }w#Ä >2L͐ ! =« f }ʫ +"MD Å D  !  #)*)þ))>+><7"9.Yͯ * M^2U :2:2ͳ:_³ͯ !6! @!!BH @@ABH B! "BHI$$BI$BI $ HI D$HD$$ H B!$D$"$B$DA!ABI$H B$I $HI$H$! $I $I$$A !A@$I$"!$H$I$I "! $A$  HHAA"I @BB $A"$$$I$$H!!! BH" !I B  $$!BD! $!BI D@"!$I$$H"!I$I$I$UUU$$A$ x (#"!N#FW( *J>7Å*M|N+"M N:LHͅÅD Å >* *͓ b" . *"] !/~##ʁtZ*F#n!Is!^#V&&##&))::^#V#*^#V>+)x-8_ ë «   Ͷ ͐ =« f xY |« }ҫ gA>S Ag}S S i |« }!w s#r:[ʔ _!~ʦ ![4ç \͢¦ 2[ 7 >?  e͢!g"c> _͢a_!f~> 5*c~#"c 0 7   > >  ͢| } @ >. *_}o| , 0 ë ^#V#!Y ))))o P q s#r#!V4 !V6# ,® >2Vñ m ͅ m ͅ m ͅ « Vʫ ! XN!~  ! _^! ^#V~ x+ >= = !~  . !   #x f L L ͓ͅ ҆ *" !6ï +"_*~ #E گ ʫ ^#V. ï ~ CZMEIABDHSP!"M"+"!91*~!O~6=G#^#V#~x (#"!N#FW( *J>7Å*M|N+"M N:LHͅÅD Å >* *͓ b" . *"] !/~##ʁtZ*F#n!Is!^#V&&##&))::^#V#*^#V>+)x-8_  ;***************************************************** ;* * ;* Sector Deblocking Algorithms for CP/M 2.0 * ;* * ;***************************************************** ; ; utility macro to compute sector mask smask macro hblk ;; compute log2(hblk), return @x as result ;; (2 ** @x = hblk on return) @y set hblk @x set 0 ;; count right shifts of @y until = 1 rept 8 if @y = 1 exitm endif ;; @y is not 1, shift right one position @y set @y shr 1 @x set @x + 1 endm endm ; ;***************************************************** ;* * ;* CP/M to host disk constants  * ;* * ;***************************************************** blksiz equ 2048 ;CP/M allocation size hstsiz equ 512 ;host disk sector size hstspt equ 20 ;host disk sectors/trk hstblk equ hstsiz/1 boot to initialize xra a ;0 to accumulator sta hstact ;host buffer inactive sta unacnt ;clear unalloc count ret ; home: ;home the selected disk home: lda hstwrt ;check for pending write ora a jnz homed sta hstact ;clear host active flag homed: ret ; seldsk: ;select disk mov a,c ;selected disk number sta sekdsk ;seek disk number mov l,a ;disk number to HL mvi h,0 rept 4 ;multiply by 16 dad h endm lxi d,dpbase ;base of parm block dad d ;hl=.dpb(curdsk) ret ; settrk: ;set track given by registers BC mov h,b mov l,c shld sektrk ;track to seek ret ; setsec: ;set sector given by register c mov a,c sta seksec ;sector to seek ret ; setdma: ;set dma address given by BC mov h,b mov l,c shld dmaadr ret ; sectran: ;translate sector number BC mov h,b mov l,c ret ; ;***************************************************** ;* * ;* The READ entry point takes the place of 28 ;CP/M sects/host buff cpmspt equ hstblk * hstspt ;CP/M sectors/track secmsk equ hstblk-1 ;sector mask smask hstblk ;compute sector mask secshf equ @x ;log2(hstblk) ; ;***************************************************** ;*  * ;* BDOS constants on entry to write * ;* * ;***************************************************** wrall equ 0 ;write to allocated wrdir equ 1 ;write to directory wrual equ 2 ;write to unallocated ; ;***************************************************** ;* * ;* The BDOS entry points given below show the * ;* code which is relevant to deblocking only. * ;* * ;***************************************************** ; ; DISKDEF macro, or hand coded tables go here dpbase equ $ ;disk param block base ; boot: wboot: ;enter here on system * ;* the previous BIOS defintion for READ. * ;* * ;***************************************************** read: ;read the selected CP/M sector xra a sta unacnt mvi a,1 sta readop ;read operation sta rsflag ;must read data mvi a,wrual sta wrtype ;treat as unalloc jmp rwoper ;to perform the read ; ;***************************************************** ;* * ;* The WRITE entry point takes the place of * ;* the previous BIOS defintion for WRITE. * ;* * ;***************************************************** write: ;write the selected CP/M sector xra a ;0 to accumulator sta readop ;not a read operation mov a,c ;write type in c sta wrtype cpi wrual ;write unallocated? jnz chkuna ;check for unalloc ; ; write to unallocated, set parameters mvi a,blksiz/128 ;next unalloc recs sta unacnt lda se  kdsk ;disk to seek sta unadsk ;unadsk = sekdsk lhld sektrk shld unatrk ;unatrk = sectrk lda seksec sta unasec ;unasec = seksec ; chkuna: ;check for write to unallocated sector lda unacnt ;any unalloc remain? ora a jz alloc ;skip if not ; ; more unallocated records remain dcr a ;unacnt = unacnt-1 sta unacnt lda sekdsk ;same disk? lxi h,unadsk cmp m ;sekdsk = unadsk? jnz alloc ;skip if not ; ; disks are the same lxi h,unatrk call sektrkcmp ;sektrk = unatrk? jnz alloc ;skip if not ; ; tracks are the same lda seksec ;same sector? lxi h,unasec cmp m ;seksec = unasec? jnz alloc ;skip if not ; ; match, move to next sector for future ref inr m ;unasec = unasec+1 mov a,m ;end of track? cpi cpmspt ;count CP/M sectors jc noovf ;skip if no overflow ; ; overflow to next track mvi m,0 ;unasec = 0 lhld unatrk inx h shld unatrk ;unatrk = unatrk+1 ; noovf: ;match found, mark as unnecessary read xra a ;0 to accumulator sta rsfltrack? lxi h,hsttrk call sektrkcmp ;sektrk = hsttrk? jnz nomatch ; ; same disk, same track, same buffer? lda sekhst lxi h,hstsec ;sekhst = hstsec? cmp m jz match ;skip if match ; nomatch: ;proper disk, but not correct sector lda hstwrt ;host written? ora a cnz writehst ;clear host buff ; filhst: ;may have to fill the host buffer lda sekdsk sta hstdsk lhld sektrk shld hsttrk lda sekhst sta hstsec lda rsflag ;need to read? ora a cnz readhst ;yes, if 1 xra a ;0 to accum sta hstwrt ;no pending write ; match: ;copy data to or from buffer lda seksec ;mask buffer number ani secmsk ;least signif bits mov l,a ;ready to shift mvi h,0 ;double count rept 7 ;shift left 7 dad h endm ; hl has relative host buffer address lxi d,hstbuf dad d ;hl = host address xchg ;now in DE lhld dmaadr ;get/put CP/M data mvi c,128 ;length of move lda readop ;which way? ora a jnz rwmove ;skip if read ; ; write operation, mark and switchag ;rsflag = 0 jmp rwoper ;to perform the write ; alloc: ;not an unallocated record, requires pre-read xra a ;0 to accum sta unacnt ;unacnt = 0 inr a ;1 to accum sta rsflag ;rsflag = 1 ; ;***************************************************** ;* * ;* Common code for READ and WRITE follows * ;* * ;***************************************************** rwoper: ;enter here to perform the read/write xra a ;zero to accum sta erflag ;no errors (yet) lda seksec ;compute host sector rept secshf ora a ;carry = 0 rar ;shift right endm sta sekhst ;host sector to seek ; ; active host sector? lxi h,hstact ;host active flag mov a,m mvi m,1 ;always becomes 1 ora a ;was it already? jz filhst ;fill host if not ; ; host buffer active, same as seek buffer? lda sekdsk lxi h,hstdsk ;same disk? cmp m ;sekdsk = hstdsk? jnz nomatch ; ; same disk, same  direction mvi a,1 sta hstwrt ;hstwrt = 1 xchg ;source/dest swap ; rwmove: ;C initially 128, DE is source, HL is dest ldax d ;source character inx d mov m,a ;to dest inx h dcr c ;loop 128 times jnz rwmove ; ; data has been moved to/from host buffer lda wrtype ;write type cpi wrdir ;to directory? lda erflag ;in case of errors rnz ;no further processing ; ; clear host buffer for directory write ora a ;errors? rnz ;skip if so xra a ;0 to accum sta hstwrt ;buffer written call writehst lda erflag ret ; ;***************************************************** ;* * ;* Utility subroutine for 16-bit compare * ;*  * ;***************************************************** sektrkcmp: ;HL = .unatrk or .hsttrk, compare with sektrk xchg lxi h,sektrk ldax d ;low byte compare cmp m ;same? rnz ;return if not ; low bytes equal, test high 1s   inx d inx h ldax d cmp m ;sets flags ret ; ;***************************************************** ;* * ;* WRITEHST performs the physical write to * ;* the host disk, READHST reads the physical * ;* disk. * ;* * ;***************************************************** writehst: ;hstdsk = host disk #, hsttrk = host track #, ;hstsec = host sect #. write "hstsiz" bytes ;from hstbuf and return error flag in erflag. ;return erflag non-zero if error ret ; readhst: ;hstdsk = host disk #, hsttrk = host track #, ;hstsec = host sect #. read "hstsiz" bytes ;into hstbuf and return error flag in erflag. ret ; ;***************************************************** ;* * ;* Unitialized RAM data areas * ;* * ;***************************************************** ;1:\=2:l*͋~=2:ͬ`i"~#@:ͬ$#S:*#)=e}p+:/<_:_}ˆ i`#*#""*&)))))))DM*}o|g{2:2,:A2:A2>2͢dh~͢h:͕:22:=:2͢"I͋h:͕>2͢<I͋2*|h>͕ o&)))))))͋͐ q> ͅ> _~ O****.0MD**!*$*'~!">2!4!4::*+"}]͐ *+"}o͐!N͞>2:!4ʅ!Nͭy]*DM2:h*͋H<2:{~.W:ʑ:]*":!O͕}¼PN#F ~#foDM!>))덑o|g = |g}o  |{0_r``T/`TI`TN`0lV$Ol`*. S1 U40TRIUMPH ADLERY ealphatronicU20 OOOOO OO G' _>#@ _>! G/,,@ # "! #Y!f_OO0 _OOY"fU5 @ @ *%Y#fU7#! @ W4 sekdsk: ds 1 ;seek disk number sektrk: ds 2 ;seek track number seksec: ds 1 ;seek sector number ; hstdsk: ds 1 ;host disk number hsttrk: ds 2 ;host track number hstsec: ds 1 ;host sector number ; sekhst: ds 1 ;seek shr secshf hstact: ds 1 ;host active flag hstwrt: ds 1 ;host written flag ; unacnt: ds 1 ;unalloc rec cnt unadsk: ds 1 ;last unalloc disk unatrk: ds 2 ;last unalloc track unasec: ds 1 ;last unalloc sector ; erflag: ds 1 ;error reporting rsflag: ds 1 ;read sector flag readop: ds 1 ;1 if read operation wrtype: ds 1 ;write operation type dmaadr: ds 2 ;last dma address hstbuf: ds hstsiz ;host buffer ; ;***************************************************** ;*  * ;* The ENDEF macro invocation goes here * ;* * ;***************************************************** end Y%fA"! "##$Y 0U40BDBDBDBD$ADADADADY 1$Y"1$U70Y!5D I S K C O P Y Version 1.3Y#5Copyright by TA 22-Feb-84BB $Bad source and/or destination drives ! Try : DISKCOPY A: B: or DISKCOPY B: A: or DISKCOPY A: A:$Source and destination disks have not the same parameters !$Bad drive code(s) !$Insert source and destination diskettes$Insert s y s t e m diskette in drive A:$Insert s o u r c e diskette in drive A:$Insert destination diskette in drive A:$ , then type $Permanent read / write error$Function complete $ AWriting track $ AReading track $iÇ.!c1h ?Stack overflow, try more P switches b&:*; ʘ1" Q1Titing track $ AReading track   |{0_r``T/`TI`TN`0lV$Ol`*. S1 U40TRIUMPH ADLERY ealphatronicU20 OOOOO OO G' _>#@ _>! G/,,@ # "! #Y!f_OO0 _OOY"fU5 @ @ *%Y#fU7#! @ W4  !9"1d H#}#>2!/">2!)G}:<2g2#ʃ >|}> #> *p#"x}6> > !/~ >.#»!/"6* _> >  07 ::U:7_<2!~ɯ2|\\File Dump Program V1.5 $ File not found $ -0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -A -B -C -D -E -F 0123456789ABCDEF $ile not found $ -0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -A -B -C -D -E -F 0123456789ABCDEF $ COPYRIGHT (C) 1979, DIGITAL RESEARCH DISK OR DIRECTORY FULL$FILE EXISTS, ERASE IT$NEW FILE$** FILE IS READ/ONLY **$"SYSTEM" FILE NOT ACCESSIBLE$BAK$$$BAK$$$-(Y/N)?$NO MEMORY$BREAK "$" AT $1mM"m +!8s~1m!f6 *M  *!M 1m! 6!6! 6: 2Ebͽ!e:d\::eH2 H҆ͽ:e2!:d2e:!2dû :!I¬!: :H2 ҮX:h2iҐ:!ʍ:!:!H:!H,!"! 6#~ F)ͷX:! X):i!h)9 e:!:h2jO>F L>!":i!jHҼ*"+M ~ ʼͲ!f6!h6!"! 6F!f6:h2k!iҠ:i2k:j2h:k!hҶ9 æ:h2j!!6:j2he:! >"Ͳ*"M ~2!O :! *+"!!6e*!M͛ /$^L:!@OL:! 2͑e:b:! L:h<2hb:! b:hO>!hw:! pX:! …!!6  LÊ!!6ûô:!ʛ͑:! ҩ OҸû:!R†!6G>!!!6 :2.t -? >!!6!6s, !6:xB!6OU2!SB!G6:҃!6:G҃*G& ~2!:G<2G_ Qқ=e  b:!-®! 6:!#¿͇;J:!:!!6Lv:!:Jv: *#"͎! 6:!B)! >w!"&*o"(R :!C:eR :!DKeX :!K\ͷX :!Lj^ :!Pš͎҇! 6F×͢җ:Ç :!T¨F :!U¾: 2 :!V͎"$DMͩ/ *oDMͩ : 2 :! (::H%^bF : ͎H :!Ay! 6*""&*o"(R͎an͢na! 6R :!F”͢ґ Ä :!J $:2$͢ :=2:<2!*& ~2!ü*""I*M*o/!:"  "&! 6R*I""ë :!M:H| ! 6>F ͛e: <2 O! Hqy d F : 2! 6*#s#r :!N ͢ *o/ Ҧ Ͷn! 6!"&R! 6o$ Î Ç :!S0 $͢- :2"+s#r!:* *& ~2!:<2 :!W> v :!X³ Z͎\ Ee ð :7/҃ E!76e ͕ :xƒ - ͷ*&"K(Kڰ *KM N͔*K"KҌ :!Z ͎  ͢ : :!  'v!gq:f *g&!lq:l $ !h4:l 1 !h6*lM :hB     !h55!mq:m :hO>H2ny} !m6 !o6:n!oښ *mM !o4‚ !pq:p ڪ >:p :p H:p H!qq*qM͛  ^W :q@2q*qMW   !sp+q*r !up+q *tDM !wp+q*v !zp+q*y2x!|p+q*{2x!~p+q*}2x!p+q*!p+q*!p+q*!p+q*2x!p+q*!6   >>! q* &!p+q*6:0O  ú!p+q:/(*DMͩ:  : I N* *DM:aO>!Һ x!: ڦ> ʡ* +" >¡! 6: <2 =O! N͒:  O͒: ! 6:h!o$O* ͸ ! 6 !h6!: 2 3* & 6 : <2 =O! N͒*dM  :sGsu n>!6:<2=O! N͒!">!"͎/Ҵ*+">>!": *#"*""*!".+",*$"**o".!",!36:3{.*22*,**"0M ~ H3*0"**+"*+">23:2/k!36,*+s#rx:3x*0"*: “**"&*"+"(á*$#"&**#"(*"#""*$#"$*"+""*$+"$*#"!4qM*"*$: *(y"$DM}|C#~ *#"*&DMyxC 1*+":4?w+"$""ͷR: —*$"("҈!"&Ô""&*""&$mڸ*o"(**$"($"O26͛*"M :6w͢:6 :7 e !p+q*DM  =? ) !p+q.*DMF -L *9"`!"b!h6!j6!|6.!=\ -x !e:dʥ *eM \R :xʥ @ *dM \, :x \͕ :x - V :e _ :f w : =e !e:d*eM =e : =e =͕ !]6:x>- !"!76!6!6!66*dM  *dM !6:8!*`*;DM \u 2xʻ>!xҨ- *`*;6:82*`"`:<2w!"`9`h*`*;~2*`#"`:*eM !b+!s{!f!6:!b*b*^DM =ͅ N- *b"b:<2)f!"b!q9bڀ*b*^:w*b#"b!q:6ڶZͅ ʱ- !66*6& :w:6<26!J6*b}:J<2Jm=? :x- : ;*dM .=\ -=ͨ ;: *eM =ͨ .M= -C!q:Y*M !q:a/>z!/H!q*MaҎ:_:!q:ҥ*My:!p+q!'"!6>**ͪ{2**ͪ"*! ͪ":!!!7q:*7M͒:7o$+͛ͪ*$M ~28Om:8 I͇͢u$oqo͛rP! 6!"&*$"(R͎ҔM͢ҡÔ($ҵ! 6R͇vͶ2!*!Mm$"*"M :!w͢:! e2!:! : /HH/Q:! @!!6 R!!6 :!KR$*& :!w:<2dn!:s+q*$";!>6:>/;oH*;#"(";:92=*=& *(M !::=2>/H:=<2=*(#"(æÀ:>*(+"(R:>!6$:2*o/*!My:<2=O!s Hq**DMͷ! 6: e!"*""?k*&"?*?+M ~2A :hHҏ *&"?(?:A ½8*#" ҽ*?M ~2AO *?"?ҕ!"*"*"^: 2B! 6F:B2 o(>&H6͛9!C6>!Ca R>:C<2C?! 6!"͇͢Ґq"ڊ͛Íq!!6 !!6 !6*!Ma2D*!M͒2!:D/!+w!6e2!͢!Eq!E:!:H:H!Fq  *FM8 *FM   Oy2F :FY5>>:!02HO> /!";u*)))*) *H& "PҘ! 6+s#ré! 6"DM!>))덑o|g =±^#V) ^#V|g}o _{ozgi`N#Fogo&og_{_z#W H = LIBX$$$$$$$LIB$:2*o/*!My:<2=O!s Hq**DMͷ! 6: e!"*""?k*&"?*?+M ~2A :hHҏ *&"?(?:A ½8*#" ҽ*?M ~2AO *?"?ҕ!"*"*"^: 2B! 6F:B2 o(>&H6͛9!C6>!Ca R>:C<2C?! 6!"͇͢Ґq"ڊ͛Íq!!6 !!6 !6*!Ma2D*!M͒2!:D/!+w!6e2!͢!Eq!E:!:H:H!Fq1 ͤʹew>Lͣ kP_͞%:] ͤUkk y]̓k5k w y; z}̓l!5~$.ʘ# È#y ҈ Ù!\ͭ!: 6# 6 # ²6# » !]~# :m mͪm!;  w# !h͹!]^6!; ^6k]%k; %lUk  AO͞/.͞ 6I : $ >?7#bɯ2: 2\27 Ϳ? > 3A E`\=I <ʧ[ G[ Vs <ʧ\ʺ] >3`: =<' >3A : G: Vs <ʧ| G| Vs < §: B <ʧ:7 ¤ >3`[ =3`(\=<5\Y] >3`| =<| >3`a: = 3N { >3 ͞ʹk!"8 ! * }|8\L*8 #"8 >27 [ Gk *8 |+!8: Q  k,k͍Jk͍dk͍ik0͞U20$U70$k͞¬kk¼kk>WwK ͞ Y6^(C) ontinue$Y6S(A) bort$Y6;(N) ew start$Y6J(E) nd$//8wk!)GU:#͓xd: ͓xs:͓xʂ:͓6$)E22w#kx*. *. ͞͞͞͞͞!5ͤ!  ͞_ys#y͞K͞͞ 6$ $y +k;0!( 1w+ͤaU~U bkO~#$eYͪE$O͞k͞Y͞z͆{ O͞S1 U40TRIUMPH ADLERY ealphatronicU20 OOOOO OO G' _>#@ _>! G/,,@ # "! #Y!f_OO0 _OOY"fU5 @ @ *%Y#fU7#! @ W4Y%fA"! "##$Y 0U40BDBDBDBD$ADADADADY 1$Y"1$U70Y!5F I L E C O P Y Version 1.2Y#5Copyright by T A 05-Mar-84BB $DADADADA$BDBDBDBDDD$DD$CB$Y& This program is designed to copy a single file - using drive A: only . $Y5%Enter filename without drive code ! Wild cards are not permitted !$Y* Name of source file ? $Y, Name of destination file ? $Y5@V1R e a d i n g . . .V0$  Y5@V1W r i t i n g . . .V0$Operation still in progress ! Insert s o u r c e diskette$Insert destination diskette$Insert s y s t e m diskette$This is not the correct s o u r c e diskette ! Changes diskettes !$This is not the correct destination diskette ! Changes diskettes !$Destination file already exists !$ File not found$ Directory full on destination disk$ Destination disk full$ Cannot close, file may be write protected$ Copy operation completed$#"y<~(wG-"<Ͳ/ ,5w+2<2FILECOPYSRCFILECOPYDST3T Ē*<‡5:<<2<; ! : A O: 0O! q: O: O! p+q* |O* }O! p+q*  f! p+q* DMB! p+q)R* DMB1B* DM+;! p+q* i2 ! p+q* i2 ! p+q* i2 i2 !" p+q*! f!$ p+q*# i!& p+q*% i!( p+q*' i2 !* p+q*) f!/ s+p+q+p+q:/ =2/ X*+ *- w*+ #"+ *- #"- 1* #" ͖r*   ~!" ! ͸×* " x20 º*   DM":0 Ad*   6!" Ç!" : !"6 "8 ": }2< !"4 "= ! 6Y: !2 6=21 á:1 : r+s#r==_HL"4 " >6 ͪS* "6 =23 :1 =21 v=O* #" Y8  ͝҉* +"8 .!2 ʞR̀* "4 4 = ͝* #" çR*6 DM+R*8 DM+R*: DM+R*< M!? q=  ͝Kd*= ! ͸p!@ 6>!@ X*= }O!< *@ & w*= #"= !@ 4)!< 4\mad* }O!< :? wlR*4 DM+{R* DM+R 4 ͝*4 }¿= 4 ͝< N*4 #"4  å;*4 DM+: Y2A 0O> :A 0:A AO>&R̀:A A H.2B !2 w:B !D s+q*C &͍:D _og_{ozg^#V) _{ozgi`N#Fogo&og_{_z#W( p+q*' i2 !* p+q*) f!/ s+p+q+p+q:/ =2/ X*+ *- w*+ #"+ *- #"- 1* #" ͖r*   ~!" ! ͸×* " x20 º*   DM":0 Ad*   6!" Ç!" : !"6 "8 ": }2< !"4 "= !   ,COPYRIGHT (C) DIGITAL RESEARCH, 1980 1] ʑ?ʑ! __0 r))) O @+|r}Pr#e.á{r Invalid Memory Size$!$ʡ~/w/wʔ*"w|?´>@G!>0w#w!4~:60+4½{r!N#F! x(  # =!v"w!t6!r#+w+ww >VxG}o|g"y! :m _ l!"xl ~#_*y!:m ʁ xʽá Synchronisation Error$ {­~#o}oҹùÁ*wV# :m j! ~#* DM! x w#!!N#F! D!\>0w#w.!]4~:60+4*"b=r Ready for "SYSGEN" or "SAVE 00 CPM00.COM"$*y  Constructing 00k CP/M 2.2$1_!i˞~ ]~ >12fK!+``*!"`:`O 8GQ{eze*`"`!}d|d>Dh!`͠`͗`͗` !`͇`>2`2`7H!w`~#( OBoot !`͇``͠`!`͠`͗`͗`@0N#(~# w 6<---\X COPYRIGHT (C) 1979, DIGITAL RESEARCH _͌> ͒> Ò> Ò͘~#͌ì _2<2 !2:2a{_:ʖ:>Ľʖ:=2–!B!6#5ʖ:Ľ!ͬʧ )!F#xʺ~0wëw!" !~6ͽ:ý(!#͘*~ ""͌#>?͌͘ =_.:;<> Oo$>!Y2*O"ʉ@G:ʐ:wÖx2p0ʹ#*©6?ëw˜0ï#6 ¹.0#*6?w0#6 #6" !>ͦ!q:_  !p+q.*   !q*&!p+q*2!p+q*2!p+q*22!p+q*!p+q*!p+q*!p+q*2!p+q*#~?  xDIR ERA TYPESAVEREN USERbK!yO#< Ty#O 321y_͸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!~Ypsp2mÆÆf ͧÆFILE EXISTS _: É: :ʉ=2)ͽÉ T!@k!}|q  =qf^!~2>`~22\!!B!~> >#0~O#Cx2͘1)ͽÂf zͧÆBAD LOADCOMf^: ! Â$$$ SUBbK"C {2!"E 9" 1A 22!ty)K!G_^#V*C   ~E , &-AGMS  !!ô!ô!Bdos Err On : $Bad Sector$Select$File R/O$ :B A2 ! ~6  x : 2 p & x ~+é 7 2 H ! >w _ : ! 5ͤ N k ͱ ¦ ͱ xʊ #N x : ! 2 ͤ ! 5™ #wO ~x½  p H    y< < ʑ  : !qMD #: :/GyO>2!q*C " ͡  ʔ*J Ҕ^ :Oyʃ?|x | s-|N-# S:2E !~Яw > T   D ^ 6k -äPYy 5*{zBK5ڋ>*C w~#+w#w+ɯ2E 22 i  ^ *C :~w~͔͔# #  w ~>2!E 5T *C !"C  "C !w# F! w͌ x 2͢ *C  ~<wʃG:!ʎì 4~ʶ ¬:<ʶ$ ʶïZͻ   x >2>2ͻ :!Z2:E w ̈́ ͊ Ͳ  >2>2T *C G ͻ : w ̈́ n> 2;O ^ DM;}H> "*C  ::dd slO s#r:E ͊ :==»y==»*Ww# *" ͸ *:G#š" ͸ :!w4 i w: Z!E ~=26 2E > ! ^#V w#P :B O|^#V#"##"##"##"!O *!O *|!6ʝ 6>*w#w*w#w'û *! J * ""!N#F*^#V*~#foyx *{_zW+ * yx # *DM*s#r*s#ryOxG*0MD!!N: E G>O: \ S *C  :q n& ^#V> O^ "*}:*)= ":O:o"*C  *C !ͮ ~2~2ͦ :2ͮ : O:w:w |g}o *#  ) :B O! yoxg*:B O }!N#F "*#*s#r^  ~!J  ! J *:o$*C ~i 6i w**{#z r+s{ozg**͕ **  , w͜ ͸ Ͳ ! !N#F$**O !~#:A #~$=2E k͌  2*C !!~~#~O~G#n,-.‹! w! yG!x͢.:E <ʄ! q!pQ:E <. ʄ$.:E <ʄ i 6}2E x N! ~态O>G~G!~G} *C !r#r#r ^ ͥ_y#x#{s+p+q-*C  ͥ!!q#p#w*:B O Y G }*MD "ã:!B w!>2*C ~=2u:B 2~2wE:A *C w>" !""2B !" !r QQQâ~?ͦ ~?r Q *"C Q- Q͜QüQr Q$Q*):B  9rP ]JpEvD&80'8'G Gy"zBeHaH8 0 ! H  8H"B8  ?A7ã(6dSDôÔÿt BootInsert PC-CP/M-System disk(xHh@  ?1N:(22 22>(!3֯22!9(>!2"!2"22  :O͔|(~O6#:̈́ :̈́!:̈́ $:ͅ'*-:ͅ 036:̈́ 9<:̈́?BEH_~#fo!y(2o))))U.2: 2y2y=2`i"&`i#z n&ɯ2>2$2#>2%b2$y2% >2:2:2 :2!:(1=2:! $:!  :!! 4>@ 6! 42#2<2#s 12":2!~6(":! :! :!($::2:2:2:#2:o&)))))))7[&:$ >2:%:" 2:"{ >E>F2 > 2>( !JQ!JQ>ʹo !ow( : E !r: O:ʹ͊>ʹ́:2͊!Q:O<2a(<2>Dh: O7!C(!UG(&{dzd}e|eyʹ!́~# !w# : 2">: 2 :=2>2"2<ɴx 266"!^(!u*~| } !|Y8aBIOS Error NRWPY8aKY(>́(Oy@8(y2:́́(::(w @0ɯ!(Q>>́>́>́@$@B B HH II$@DI ABI$"$H$H@$$I! H*  $H@@A I $D!!$I"BI"I"@$BIIH$$$$BBI$@BI!"$$A DI$@ A$@$$@H! "!$$" @B$!!!DH$$"H @@BHH  !$$A"D@ "A" "BHA " !$ D B I $ !$$ H@BD D$ HI DIA!$$$ $" "$D ! $"  $AB " BDD $$D!"DI$!$BH!"IB I$"D HD" " $"! @H !BI " I  $I$I$DI$ !I$@"$"$! $I$I HA HA61222>2!"*!:G>(=#x(w#!} 56K CP/M 2.2 / 3.0 alphatronic PC Serial number 00000   |{0*w#"!4BIOS II alphatronic PC V 3.0 13.03.84 @@B  "$HA B  $I B! @@@BH@B@DH@!DHB!I HH HI DIA!$$$ $" "$D ! $"  $AB " BDD $$D!"DI$!$BH!"IB I$"D HD" " $"! @H !BI " I  $I$I$DI$ !I$@"$"$! $I$I HA HA   <--Patch SKEW (1-9): 8>=G_!"x1221Ex2]O̓xA2v x>2BxE(!A(> 'x&N(:( -x͉ ̓xxxx)NDE(hx_pxy- ̓o-H-H^ y( į*!q#p#w#6#<!?}d|d{eze>Dh͛>:v͛>:vy̔>}dffs`@ vf;fem忔}xd }md́e&b;[@bf ͔ >!@Q!@Q / x>0O̓x:xmXxmrxmwx0̓ $O̓*. *. ̓S1 U40TRIUMPH ADLERY ealphatronicU20 OOOOO OO G' _>#@ _>! G/,,@ # "! #Y!f_OO0 _OOY"fU5 @ @ *%Y#fU7#! @ W4Y%fA"! "##$Y 0U40BDBDBDBD$ADADADADY 1$Y"1$U70Y!5P C F O R M Skew x Version 1.4Y#5Copyright by T A 13-Mar-84$͉a8~0 bkO~#$(͏Y& JWhi(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE) COPYRIGHT (C) 1979, DIGITAL RESEARCH, PIP VERS 1.5$$$ SUB =.:,<> _[]INPIRDPTRUR1UR2RDROUTLPTUL1PRNLSTPTPUP1UP2PUNTTYCRTUC1CONNULEOFDISK READ ERROR$DISK WRITE ERROR$VERIFY ERROR$NOT A CHARACTER SINK$READER STOPPING $NOT A CHARACTER SOURCE$ABORTED$BAD PARAMETER$INVALID USER NUMBER$RECORD TOO LONG$INVALID DIGIT$END OF FILE, CTL-Z?$CHECKSUM ERROR$CORRECT ERROR, TYPE RETURN OR CTL-Z$INVALID FORMAT$HEX$$$$NO DIRECTORY SPACE$NO FILE$COM$START NOT FOUND$QUIT NOT FOUND$CANNOT CLOSE DESTINATION FILE$DESTINATION IS R/O, DELETE (Y/N)?$**NOT DELETED**$$$$$$$NOT FOUND$COPYING -$REQUIRES CP/M 2.0 OR NEWER FOR OPERATION.$UNRECOGNIZED DESTINATION$CANNOT WRITE$INVALID PIP FORMAT$CANNOT READ$INVALID SEPARATOR$1 :2L> ̈́M9 ch drive ( A..B ) ? $AB$ $Remove system disk ! $Insert new diskette in X ! Choose function : (S)tart (A)bort (E)nd $SAE$F O R M A T T I N G E R R O R ! $ Choose function :  (N)ew start (E)nd $(R)etry$NE$REN$ Insert system disk in A and press any key to reboot ! $LAALY* KTrack $Y+>Operation terminated correctly !$ERROR ! D i s k w r i t e p r o t e c t e d !$                                6: /!6ɯ2L62r6~#26~26#"6Ñ1}26|26"6Ñ1~#26~#26"6:6=>$ԕ&ͽ11i`)2^#V   6: /!6f_OO0 _OOY"fU5 @ @ *%Y#fU7#! @ W4Y%fA"! "##$Y 0U40BDBDBDBD$ADADADADY 1$Y"1$U70Y!5P C F O R M Skew x Version 1.4Y#5Copyright by T A 13-Mar-84$͉a8~0 bkO~#$(͏Y& JWhi221@:2!o6+6+6!6#6!6#6:G*o .!N6:^*M^!K6!6!6+6' :$::=2K  :ʤ\:ҷ\x'Ͳ:!\͢  :͈'! :$: $͈Ͳ!N6' :!Cwͯ !6:^͢c!6{:/>!/H{ͯ :<2Š ::=HҮͯ !6:Ҿ:2 !6::/H͈;!6:> !/>HHͯ :^!w:<2:0}:@E}:!S!W6: z!]6:cm!c6:_z!_6l ::,: HHҰͯ : 2ó:E:1:2v!q!*8!*6: >ͦ>ͦ!q:_  !p+q.*   !q*&!p+q*2!p+q*2!p+q*22!p+q*!p+q*!p+q*!p+q*2!p+q*  !p+q* !q*& *M *M !p+q*!!p+q*"!p+q*$!6  !kp+q*j> >ڪ Þ !qp+q/ *pDM9: :M2r:N!r !:r *r& N!r4 !6:͔: :ͳ.!ws+p+q+p+q:w=2wN *s*u w*s#"s*u#"u' !"*M^7 !x6:!xھ **DM͆ 2yʭ :yʗ ͯ *"*6:2x÷ *"!x4d !"/ !j}=2| !"*KM^'_ !z6:|!z1 * "}*}DM͆ ' ͯ *"!z4 :e !"͆ !z6:|!z '? 2*H#"H!{6:{ր!Ң *{& :{4 2!{4m *":ڹ ͯ !z4I '2!"!q: !4>!S :S! :2*M! ^#V͎ * :w*#" = = = = = ͯ  *M !6q  !6q  !6q  *& !6à  !6 à  !60à  *& !6  !6  !6  *& . 1 4 7 : = F P [ f q  *M:>!(:=2%> >>!F!5+N! ~2!4<2T>>!b}*bMͭz:b2!b6:<2é>!`ҥ*`MͭҞ!`6!6> :é:(!q:!wO! ~2*& :w>!:!4!6>:N<2N!> *N& N2 !p+q!6!6+6 !6: S: M!6g8:N2M*M8p!6!6!6>!ڕ*&P 6!4z!6!6#6#6!6*M8:ھ:*͇g2ê::¿::,͡A<2O>*M8):[ͱ!N5!6ñ:5!6#6>!ڰ!6:<2O>/:!O!T *M͡H~K:¡!6[–ͱ!N5:2:2!4=:[¼ͱ4:!6:.2O8: :* ͇g:[ ͱ!N5!6:%:<2*6 * 6å!q!6> !d*&I :]>!4A>:<2O* :w:?†!6!q!6?!:ҠgÐ!q*&*~!6:22: :]Hں:A2O>: 2ͯ  :2!q: " *M n :c4 *M n :2!c:Q !c:2: !:cw>!n !5 Y : { !6!q:!lwҙ  â :0O !q:O| :O| !6:]2l:o'2o:n'2n:m'2m*mMͣ *nMͣ *oMͣ :]:   *}2D" * * *&"!q:UY: Y:ҩ: ʩ:_2ʘ:€!6<:<2!ژ!6 >!]Ҥ; !6:Q::H: !6*M : !6!q:a/>z!/H:_2:!q:A/>Z!/H8: 2::=O>m:W!Q} Hmd>9>!6:2*M!E ^#V͎ڗO **~2*#"m2m͖ 2m!6m!6m!6 m2mͯ m!62m!62m!62m!62m'2:2:TҒ:2!6*ME:2::Ҳ:<22ý: 2:} >ͯ :i:2:d*M:[ ÷:S:QHI:N<22: H@"2Í202O> c!6Í202O> ڍ*&O*& !sc*&P :w:·>!ұͯ :22:_!6=!6>'!E!4!p+q*0 !r+s+p+q*~$7*>*>H&>*#"*#"> 2:R͎:!6!6=2:ʙ!6:“H9Ž>!6-e!6ͻ2=2ʺ-é:>>"ͻ2:!!5ͻ2ͬ!\-:>>!p+q:,!6*DM9:<!6:z 2W!6D*&L :w:<2Ov*:>=20O> ڒ:0:AO>Ҥ::A }}Hͬ!wͻO`idͻV[2O>2:!X!6:!:=O!L NE!4 E E:/.*&L 6$L9k9.Xͯ *KM^020 :020:121'ͳ':²ͯ !G6!"!"7 *M^n/ :a/:H!6:ͯ !&6  2*">!b!ͯ >!`0ͯ !q:E:24J!46*}a!44EJ *KM^'́:‚ͯ !36'n::0:f9OY#9.3'ͳ.:020' 'ͳ'7 6'!j>A+!s!"@͓1!"<**"͓n "Dn"":!Q2҂:X!Wғä:ڤ*MEÓ:ұ@@:O2Mc;!6#6>!)*&P ~"::H:H:H:H"!6!4:_jYO jM*"S*" 3@bl*M1͓!""7 *M^͆ \͔!":͎H*#"ͧÝ/ :>͛9ͯ .*#":_!' !'6!36' :1/!aE*#">z?C9IͲÁ.!6> !ڇ*&' ~2 ʀ: y.*M!4Q>!қ:=2á:2:Ҭ\>!ҿ:=2K:2K!:!:K\: \!p+q͈*3 Copyright (c) 1979, Digital Research????????????CON:RDR:PUN:LST:DEV:VAL:USR:DSK:TTY:CRT:BAT:UC1:TTY:PTR:UR1:UR2:TTY:PTP:UP1:UP2:TTY:CRT:LPT:UL1:R/OR/WSYSDIRR/O R/W SYS DIR ** Aborted **Active User :Active Files: Drive Characteristics65536: 128 Byte Record CapacityKilobyte Drive Capacity32 Byte Directory EntriesChecked Directory EntriesRecords/ ExtentRecords/ BlockSectors/ TrackReserved Tracks is Temp R/O Disk: d:=R/OSet Indicator: d:filename.typ $R/O $R/W $SYS $DIRDisk Status : DSK: d:DSK:User Status : USR:Iobyte Assign: =Bad DelimiterInvalid AssignmentBad Delimiter: Bytes Remaining On R/, Space: Invalid File Indicator** Too Many Files **File Not Found Size Recs Bytes Ext Acc65536 set to R/O Invalid Disk AssignmentWrong CP/M Version (Requires 2.0)!9"2!T OË!]6:\:] Hr3 Ë:\ʀË͇ /ҋͺ *2!"q*"&L ͐ ͐ ͐!$p+q*#~*#N͐*##"#÷!&p+q͠*%DMͱ O O!(q*(&DM!  ::=H-\:N2O_og_{ozg^#V))) _{ozg^#V) d^#V|g}o n_{ozgO{ozgi`N#Fogo&og H ©=¨!j>A+!s!"@͓1!"<**"͓n "Dn"":!Q2҂:X!Wғä:ڤ*MEÓ:ұ@@:O2Mc;!6#6>!)*&P ~"::H:H:H:H"!6!4:_jYO jM*"S*" 3@bl*M1͓!""7 *M^͆ \͔!":͎H*#"ͧÝ/ :>͛9ͯ .*#":_!' !'6!36' :1/!aE*#">z?C9IͲÁ.!6> !ڇ*&' ~2 ʀ: y.*M!4Q>!қ:=2á:2:Ҭ\>!ҿ:=2K:2K!:!:K\: \!p+q͈*L!*p+q*)O2'!,p+q*+O2'O2'O!.p+q*-LRRLR\LR" O!/q*/& L!1p+q*0#L~*##N!ͽ͞"T!Vq*VMͳ!Xp+q!W* >Wr#MͲ!_p+q!`6>!`6*`&*^*`&Y />!`4 >*]& ~ O!]49!a6:a*]& ~2bO>z*bM >!b/~,H~:H~*H~.H~>H~<H~=H*]& 6!]4T!]4!cq*a&Y :cw!a4!gr+s+p+q!h6>fr*d*f!is*d́"dPY! "f>!h#~Haͫo!h6:i0O͐!mr+s+p+q*lTZs#r*lڶ*l+s#r*jN#F+q#pÌ!nq!"o"q}2uo&"s* s:n*sDM2u:uqos*s"s*o͊O !v6>!vQ*v&w 6`i+46)A*:'ʓ:'O!) ~2vʍ:vO!w 6,]!v6>!v*v&w ~һ*vM !v4˜8AO͐:͐ͱ*##N!ͽ"* N#F*͠"  >!H% - *DM ͱͷDM  ͱ* N#F 9ͱ * ^#V))DM Tͱ* ~ *} *M!+s#r#4 !s+p+q!6!66:!ڄ !6!6>!r *&**&Y i !6!4+4A :} :!4- >!699 2¨ :!4: :2!6+6>! :O!9 DMi ͱ:!O!Y DMi :2:2͠!4 F :® )!6>!ګ ͠:O!9 DMi 8ͱ!6> !ڤ Å :2k ä  ͐:!O!Y DMi w !4C F :¿ >F : F :=229:Y= ;>9*&Y DM =2 I>!6:=28 :2:2 :!!29:Y T >:Y,e \>Ì !p+q*~:ʉ *N͐*#"o :͐!p+q!'"!6> **{2*́"PY! ">!+~H !6:0O͐à k͐)*)) *)) N#Fq#p*)) *)s#r*)#")!)6 J:)!)J!)6 :)<2)*)")҈q:tw͠ͱ!"))ҍ*)) ^#V")]͠.*)DM\ -°!\6:\ͣ:ͱ*}DM'ͫ*)%) N#F'ͫ*)!) N#F'k͐ͫ*)) N#FͫR͐/͐ *) ~IO͐NW͐ͫ8AO͐:͐ *) ~2)t(͐:)҃)͐*)#")Ã& \!"))\Ұ*)")]͠*)M! ^#V *) >*) w *) >*) w *) >*) w *) >*) w.*)DM\ -+!\6uͱ:)O! DMͱ*)#")Ù*))))))"):m w>.Yn -:YS:Z Hҧ!6> 2)½>!)6> !)*)&*)>2) :) .͐*)M͐:)<2)99:Y=/9&ͩ c,Hͩ 9 EHͺ i`N#Fog_og_ogDM!>))덑o|gҘ =†DM!>))ҭ =¥~ ³^#V) ½^#V|g}o _{ozgi`N#Fogo&og_{_z#W͠Q" 8AO͐jͱͷDM͏ m  Z"l"!6>ʥ *}҆ *M ͱ*}x O͐} W͐ͱ !+s#r!+s#r#4D ͠:\ʹ :\=Oͳͩ !6!)6l :) :)=2) :] & !"}2\!h6?!j6?\:'C:'ƀo&")!)6!"):)/)HҘ]!)6> !)ڎ*)&*)*)&*) y!)6 Ä:) 2):)<2)M*)#")/:)ҩ*)+")`*")#"]!*)!/H!")!"]*)) *)s#r!)6> !).*)&*)*)&*) w:)<2)*)) >w#6*)) w#6*)!) w#6*)%) w#6*)) N#F*)) q#p*)%) *) ~e *) * ~o&͞ *)%) q#p!)6* >!)6!)6>!)=:)!)w=*)&*)~2):)*)& *):)2):):*)!) *)) s, >X\:)“>!d!")>!)d!")!")*++!)a*)) ^#V")]*)")*)) ^#V")]!)6> !)T*)&*)~2)*)&*)~2)O;*)) ^#V"0202056 :10013000444454205645525320322E32243100027A :10014000C5C51130010E09CD0500C12107007E3D56 :1001500090571E00D521000278B1 yx # *DM*s#r*s#ryOxG*0MD!!N: E G>O: \ S *C  :q n& ^#V> O^ "*}:*)= ":O:o"*C  *C !ͮ ~2~2ͦ :2ͮ : O:w:w |g}o *#  w *) >*) w.*)DM\ -+!\6uͱ:)O! DMͱ*)#")Ù*))))))"):m w>.Yn -:YS:Z Hҧ!6> 2)½>!)6> !)*)&*)>2) :) .͐*)M͐:)<2)99:Y=/9&ͩ c,Hͩ 9 EHͺ i`N#Fog_og_ogDM!>))덑o|gҘ =†DM!>))ҭ =¥~ ³^#V) ½^#V|g}o _{ozgi`N#Fogo&og_{_z#W   copyright(c) 1977, digital research $Error On Line $SUBNo 'SUB' File Present$Disk Write Error$Command Buffer Overflow$Command Too Long$Parameter Error$Invalid Control Character$Directory Full$Cannot Close, Read/Only?$!9"!͇͊!p+q* ͊!p+q*͍2!p+q*͍2!p+q*͊!p+q*͍!p+q*͍!p+q*͍2!s+p+q+p+q:=2ʦ** w*#"*#"!p+q(+*DM*p*& 6:ep\:=ͧ!t6>!t%\= >!t6:t<2t=O! ~2u b:<2O>9b!60+~9b!60+4:uat:u_2u:uMʉSͧ!v6!"v!|6:|Ҁ!x6 2}:} Hk:} h:}$6 2}$*}M3:}02}O> ͧ3!z6ͭ:}"!}5́ͭ́3*yM"h:}^a a2}O>Vͧ^:}>*z& ~ !z4í!{q*v#"v͙dͧ*vv :{w:x<2xO>}|ͧïCOPYRIGHT DRI 1979, MT MCMLXXXIIIn\ \P+\PE\PJ\0hR$Oh\*. S1 U40TRIUMPH ADLERY ealphatronicU20 OOOOO OO G' _>#@ _>! G/,,@ # "! #Y!f_OO0 _OOY"fU5 @ @ *%Y#fU7#! @ W4Y%fA"! "##$Y 0U40BDBDBDBD$ADADADADY 1$Y"1$U70Y!5S Y S C O P Y Version 6.3Y#5Copyright by T A / DRI 29-Sep-83BB $1(:] )\́<!!2|\|>P  ! DMX\|>F2=2z!!!! B2=2zA2A2A2#!& 2͆!K&>2!! A2A2A27:C:ʱ:2#!! !6͆!K&z>2 h!x!o&))))))) #~> #~a{__> > ~#&O***.0WMD**!>R*$>W*'! ">2!4:¢tN;>2:!4!^BKCy*DMX2:!&& ë<2:-!6]:ͧz2~e:~2O! 6*~& 6$>!~_z*~& w!~5Bx:yͧ*v+"vv ~_{ozg001 $$$$ SUB ͊!p+q*͍2!p+q*͍2!p+q*͊!p+q*͍!p+q*͍!p+q*͍2!s+p+q+p+q:=2ʦ** w*#"*#"!p+q(+*DM*p*& 6:ep\:=ͧ!t6>!t%\= >!t6:t<2t=O! ~2u b:<2O>9b!60+~9b!60+4:uat:u_2u:uMʉSͧ!v6!"v!|6:|Ҁ!x6 2}:} Hk:} h:}$6 2}$*}M3:}02}O> ͧ3!z6ͭ:}"!}5́ͭ́3*yM"h:}^a a2}O>Vͧ^:}>*z& ~ !z4í!{q*v#"v͙dͧ*vv :{w:x<2xO>}|ͧm`ʫ:*"Ñ:`~#.:`,!W#K!]mO2}s!x&N#F ~#fo6.3 Y& JSource Drive Name (or to skip ) Source on , then type Destination Drive Name (or to reboot) Destination on , then type Permanent Error, type to ignoreFunction completeParameters are different Invalid Drive nameNo Source File on DiskSource File incomplete0x0:ڛ0 ¯00O:گ0>0ͯ0y*0w+"05 *00Ow+ 0 1 nameNo Source File on DiskSource File incomplete0x0:ڛ0 ¯00O:گ0>0ͯ0y*0w+"05 *00Ow+ 0 A2A2A27:C:ʱ:2#!! !6͆!K&z>2 h!x!o&))))))) #~> #~a{__> > ~#&O***.0WMD**!>R*$>W*'! ">2!4:¢tN;>2:!4!^BKCy*DMX2:!&& ë<2:  {COPYRIGHT (C) 1978, DIGITAL RESEARCH @  !"#$%&'()*+,-./0123456789:;<=>?@o&)))))))a{__> ͆> ͍͆~͆#ÝO****!*$*'! ">2!4:+zNͲ>2:,!4i!^!-FNͺym*DM2: N!͝x f͍<2:_b2:,m*"1!x͝:] \<Ÿ!{͘f2|\ ¥! DM\ø!͘f!͘x AqA2A͍ͩ!͝x f͍2!B͝!͘x fA:qA2Aͩ!͘x f͍!6!B͝>͍ͩ!T͘SYSGEN VER 2.0SOURCE DRIVE NAME (OR RETURN TO SKIP)SOURCE ON , THEN TYPE RETURNDESTINATION DRIVE NAME (OR RETURN TO REBOOT)DESTINATION ON <, THEN TYPE RETURNPERMANENT ERROR, TYPE RETURN TO IGNOREFUNCTION COMPLETEINVALID DRIVE NAME (USE A, B, C, OR D)NO SOURCE FILE ON DISKSOURCE FILE INCOMPLETE+~z.^.<*u:T &..G~# ʥ.ETEINVALID DRIVE NAME (USE A, B, C, OR D)NO SO9@ chdir ͵ ͠ ͖ 8{ Ăy0 2$@NAMES DIR ZCPR2 ͯ 2,P ͖ (Ăy 2͵ ͋ ͖ ͖ Ăy0 ͖ 2ͯ 1 'd ! ^#V#*0}o|g*  ":D x=D y/ >>E>>Y| } >>K2@0 2$@NAMES DIR ZCPR2 ͯ 2,P ͖ (Ăy 2͵ ͋ ͖ ͖ Ăy0 ͖ 2ͯ 1 'd ! ^#V#*0}o|g*  ":D x=D yý!9"1! ~#͐:M!_)))$.""_!͊(y2!:@2U!:]/(4:mW 2ͨ Strike Any Key to Enter VFILER -- /!]~ (͟y͹xÂ;͹Â2!2W!2i!22X!ɯ2L!n>2L!!l! ͖͟l!!] ͖2h2|/2\B:(*!<:G:!Oyͽxͷ:W!ͽ**_!"g!=ƀo&:\w*g! ͖6 #"g!\< *g!"e!"*_!  *_!"a! "c!*c!*a!  #  0 Nwy#*c! "c!*e!*a! "a!"c!*e!*+*0 x No Memory for Copy Bufferæi`"]! !*g!#z!:F!(ͩInvalid Command: x 0>^ͽx@ͽm!G~ȸ(####~#fo4h 4h+ - 4hBhC^DF GdH L0MN4PeQ RS+T U W V XYYZ$ Y? / ͨ-- VFILER 1.7: ZCPR2 File Manipulation Program -- -- Tagging Commands -- -- File Operations -- T - Tag File C - Copy File U - Untag File D - Delete File W - Mass Tag/Untag F - File Size M - Mass Copy -- File Print & View -- R - Rename File P - Print V - View Y - Mass Delete -- Movement Commands -- -- Miscellaneous -- - File Forward   H - Detailed Help N - File Forward L - Login DIR - File Backward Q - Refresh Screen B - File Backward S - Status of Disk G - Go To a File X - Exit + - Screen Forward Z - Run ZCPR2 Command  - - Screen Backward / - This Summary -- Screen Movement -- File: ^S - LEFT ^D - RIGHT ^E - UP ^X - DOWN Screen: ^A - LEFT ^F - RIGHT 0/`:L!(-ͨChaining to External HELP ...!bc `External HELP Facility Not Available``ZCPR2 Command Line? ! 6~#6  #^#6~ʦc `: Chaining Error -- No MCL*!Ns#Fr#F! w# :A2:!!0 8 q#:wz   6Y(w#Chaining Error -- MCL Overflow*6>2K!Mass Tag or Untag (T/U)? T(=U¦2!2J!*g! ~*6  *g! "g!*Q! !"!*O!2J!>2!*g! ~*6* *g! "g!*Q! !"!*O!2!/2K!*g! ~*6 (@4>2!2K!*g! ~*46* !> ͽ*g!#z~ýpty0*g!! ͖Rename File to: "!!! ~#?(S!!#! O>w#:!2l! !#!m!͖!x!͟l!<(@File Already ExistsAmbiguous File Name NOT Allowed*g!#!#! ͖*!z~ͽ!<¦ñ $6# 6!N#<i&6 G .(#*(w#G . 6?#.#G8 (.( *( w##͟6?#Goto Filename: !*_!"g!"O!2 (G: <2 @ 2 *O!@"O!*g! "g!*e! *_!"g!File NOT Found *O!!"!*g!( ! ͌*g!#! ?(#ͨ Cancels, Turns Up One Line, Other Keys Page Screen >2N!2!>FPrint on LST Device (Y/N)? Y¦Printing *g!#z>2!=2N!>2 ͎͟l!< Unable to Open Fileæ2!2 l! L!~(@_: O{   :!Q#: 0`{ 2 : (L:tG:N!<2N!د2N!ͨ [View More...]  ͨ (:t=2N!:qG:N!<2N!د2N!:rG: <2 : ![~(#!m!>.2K!/2J! `>2J! 4:J!͎#l!*!"Y!!"!:o*Y!/o:K!(:!( *" *}o|g":J!*g!#z>:ͽ>Kͽ*ͨ Tagged:>Ký!"!*_!*O!("Q!"O!"g!`*O!*_!(!6@*e!(8 !"!*Q!*e!(*Q! !"!*_!"g!"O!@*e!8"Q!`@͵`*g! *Q! f*O!"g!*g! "g!͌t͵`*O!*g! o*Q!"g!ͧ*g!"g!*g!*O!8 t>*g!4*Q!(-8+"g!*!$"!*g!4*Q!(8@͵`*!E!"!*O!"g!*!}(*g! "g!*!"!Status of Disk: ͶAڦG:U!A`x2X!ͧl:ͷ!"S!*_!*e!( *S!#"S!! *S!ͨ Files in DIR`Mass Delete (Y/N/V=Verify Each)? Y(V¦2V!2*_!"g!*g! ~* ͎:V!V((}*g! "g!*e! >2 >22V!͎Delete oͨ (Y/N)? Y(6:(*Q!"Q!*g! ͧ*Q!"g!*Q!*O! :V!Y Deleting File o!l!l!<(: *g!No File Found`*g! *e!( ͖*_!"e!*g!1List Em~#Mass Copy*g!"!*_!"g!*g! ~*('*g! "g!*e! 2/2*!"g!*O!2!" !͎!x!͟2! !m!!͖l!< Unable to Open Sourceæ: pCopy to DIR: ͉: :l!2\: :!2i!:\G:l! 7:i!G:! -Drives or User Areas must be differentæͧ:\2!:i!ͽ!<(D:(0Copy Exists -- Erase (Y/N)? Y( :!ͽ4!!!!< !Destination Directory Full`Copying File !!k2E!:!ͽ!"[!*"*l!(=(ASource Read Error`*~?# *"*[!#"[!*]! >2E!:i!ͽ*"*[!|(B+"[!*"!(Copy Disk Full!2`:E!ʻ!< Copy Close Errorp* !" !!" !!!͟!<ʍ22!!(=YCopy Read Erroræ!~?  > ͽ> ͽa{_!Fx#~w6 #   [0!e(#7,:;<=>!m!z͆>.ͽ~ͽ#*g!l! ~#6#2 :X!__ z{|g}o>2M!:M!=2M! 8 |:M!( G> ͽ2M!{0ͽ<2\##~2#~2##^#V"*#8W+}(z i`:()= "6!*6!ͨK Bytes on Disk"3!!Nm! ͖͟!l!6:!O:!GJ!x!͟l!2! ?:MG!:! 1: "3!B>28!"3!25!2!;2!*3!È:!25!*K}U !!:8!U ѯ>#~G#*3!: > #   ޯF#N>:ɯ28! Aw#  w#!"H!*H!~2G!#"H! l!:G!!ͨVFILER, Version 1.7 [Z80 Code]!"!*g!"S! *Q!"S!͌*!}F0o"!|!g"!$!*!(}( o"!{9o%"!!D*!$|0"!}!o"!*!"j!*g!"!8j!!~c##~04 8cy2'%fS$ Command error ! Syntax : WIDTH 40 or WIDTH 80 $) ͨ : Command (? for Help)?!ͨ-- Screen Directory --!.ͨCurrent File:*j!"!*!"g!͵f*!$"!f*O!"S!*Q!*S!f> ͽ#z~ͽ "S!͌*!ͨ-->*!ͨ !èWorking ...>2F!!File Size of !+2F!!!!!ͨStrike Any Key to Continue -- File: HELP VFILERHELP COM;VFILER xxx W??????????? "3!B>28!"3!25!2!;2!*3!È:!25!*K}U !!:8!U ѯ>#~G#*3!: > #   ޯF#N>:ɯ28! Aw#  w#!"H!*H!~2G!#"H! l!:G!!ͨVFILER, Version 1.7 [Z80 Code]!"!*g!"S! *Q!"S!͌*!}F0o"!|!g"!$!*!(}( o"!{9o%"!!D*!$|0"!}!o"!*!"j!*g!"!8j!  W Extended Submit Vers 2.0Xsub Already Present$Requires CP/M Version 2.0 or later$:y*###ƒ# yk   җ 4!~=ŐW!xʵ ~#èbx {~#o}où.xsubb!np+q*m2_!pp+q*o ]xsub*"-!/"*"+!""1 M*!"́!"* (xsub active)$|*y ʥ*"*7***x*́͋<͛ :%*=26͋!7^#6 #6 #6$ 8*7~O #w# !6:6=!V "2U 1 Ͱͷ2OͷA2~ ͷ>2U ͷFEA=ͷZ21>(=2{ ]ͷr2S>(=2z "ͷ2| Kͷuͷ2w ͷ202v ͷ6AN(͂>> (JͷN:U ( ͷ ͷͷͷuͷNE(ͷͷy͘ ͊ͫ8:{ ( ͊ͫ8 y!| *! q#p#w#:v w#Dh>$:~ $>$:~ $y$>$//w >$/(/>$:~ $/o((@0w(>:z @ $:~ Ox(>$!v ~$# // >!@Q!@Q  xͩ0O/ͷ$O*. *. a8~0 bkO~#$(@w#0 O2} @w0:} G Multi Disk Formatter for NEC765a contoller (c)R.P.Almeida -based on PCFORM by TA$Y% KWhich drive ( A..D ) ? $ABCD$ $Y& Remove system disk ! $Y' KInsert disk to format in drive X: !Y) KChoose function : (S)tart (A)bort (E)nd $SAE$Y) KChoose function : (N)ew start (E)nd $(R)etry$NE$REN$Y+ KF O R M A T T I N G E R R O R ! $Y+ KInsert system disk and press any key $LAALY# KFormatting Track $Y' How many Tracks (dec) $Y' KHow Many Sides (1..2) $12$Y' KDensity (S/D) $SD$Y' KSectors per Track (dec) $Y' KParamater N (0..6) $0123456$Y' KParamater GPL (dec) $Y' KYou are formatting * sides *-Density 40 Tracks 16 Sec/Trk N=1 GPL=36Y( Is This OK (Y/N/A) ? $YNA$ABCDEF0123456789$Y- N Paramater ValuesK Bytes/Sector N S/T 8" 5/3" GPL Remarks DD/SD DD/SD DD/SD 128 00 --/26 --/16 --/1B S/D only IBM disk 1 256 01 26/15 16/09 36/2A IBM disk 2/2D 512 02 15/08 09/05 54/3A 1024 03 08/04 05/02 74/?? IBM disk 2D 2048 04 04/02 02/01 ??/?? 4096    05 02/01 01/-- ??/?? 8192 06 01/-- --/-- ??/-- $  6(racks 16 Sec/Trk N=1 GPL=36Y( Is This OK (Y/N/A) ? $YNA$ABCDEF0123456789$Y- N Paramater ValuesK Bytes/Sector N S/T 8" 5/3" GPL Remarks DD/SD DD/SD DD/SD 128 00 --/26 --/16 --/1B S/D only IBM disk 1 256 01 26/15 16/09 36/2A IBM disk 2/2D 512 02 15/08 09/05 54/3A 1024 03 08/04 05/02 74/?? IBM disk 2D 2048 04 04/02 02/01 ??/?? 4096 sRg + _A(B _J A2T>( !JQ!JQ2UY͖ 2U>o͖ !:bg( :X( >{R>S2i2V> ͔(>D2i>2V>J͔:f_!62\02g2Z> <=2W!s>SN 2[:X2Y:U(>2Z:\_!(~#fo {dzd}e|e>Dh:V(>F>͔!Y~# >͔͹…2X!T!T2X>͔͹…!QJ( >(:U:T( >(Oy@8(y2`:` !`w# :`(@0w   x#0w# 128 256 51210242048409681926 Disk format finder for NEC765A controller (c)R.P.Almeida 03/07/86 $Drive Seek/Restore Error $Cannot read track (no readable sectors)!!! $You have put a 40 track disk in a 80 track drive!!! $Which Drive to check (A..B) ? $ $Track ** paramaters -- N=* *-Density ** sectors/track **** bytes/sector $                !  !  "  "  #  #  $  $  %  %  &  &  '  '