BDOS3 SPRM BIOS3 MAC=e BNKBDOS3SPRj !"#$%&SCB MAC'()?͙s! ! ?+> ws  X*]w#6?#] .,:;[]=<>|!eʃ45#SCB RELSYSGEN SUBLDR SUBINITDIR COM654321"y27!":2:=7!~7#*{2!"z"9"1!dy3\K!n҂b&&!R_^#V* !BNKBIOS3SPR -.CPM3 SYS*2+,/013456789:;CPM3 SYSCPMLDR COM=>?xa{ҏ_p# ’ ʙ ʙ:A2'!%"!9"1!>%:25:!=gINITDIR COMzCPMLDR RELCOPYSYS ASMuMAKEDATELIBp ^#Vͦ:ü!"((C) 98 CALDERA101198^djGENCPM COM@ABCDEFGHIJKLMNOGENCPM COM&PQRSTRESBDOS3SPRUVPATCH COMWXYo:O*7*/*"*"[ <:g:!,*}D!~6 !S͌rOͨ͠bCOPYSYS COMBIOS3 REL BNKBIOS3SYM+5(.7@ U&%*gy&&%2GP+QB4``LDRBIOS3MAC(Z[\]^M80 COM_`abcdefghijklmnM80 COMopqrLINK COM{stuvwxyz{|}~ bb  :G:xͨ›:ͨ: !6 :<!G:l!*^#V#^#Vw# ͒͒ ͒ ͙͒:sAxw>ɯw% :7!>wɯ:= x :r:G:=Ľ9xr:y!4 5~# G | *ġ :*w**= ҵ * >  )ý :O!ͼ *:Oi } Á ~ |*<* p :0!:® :Í2*i "!s#r#p*N#F*^#V#F*:O}|y*Ͱ+*͹}D2x™# 22zG?S͝ >Gx™~™:ʙ2 ##~[*$a*" ͋ʄ *!~Ê͙͛S69MD:!: 2Ͱ2z>z<*"!z<~s^#V#N#FxN:  w:͆ DM*T] KKN :@͆ *"N "  :k Nq N#Fyʀ *}| y‰5 6y͌Ҡ^I@O:=ʯ:Iy I I:µ  #I:! I I I! O͠:o$*~ 6 ~w w**{#z' r+s{ozg**|g= v ** ʄ ʏ  >22ͦ |y #*Ͱ*DM"*s#r*s#r#pyoxg[ DM*0MD"!*MD$:Oi !N: i G>O: ʀ w l͋ 6> - Ͷ ͙ÇPY*{zBK yʢ â< yº! > ~Gw#* #o ͠# CP/M Error On : $Disk I/O$Invalid Drive$Read/Only File$Read/Only Disk$File Exists$? in Filename$Í#X *i # 6  ͆ DM*6# x£ *w**s#rL*6#6͝ *"ͤ ͔  *|<>! > > >*}S~#!""Sz-*"##">2:2*N#G2H  W W|:<ʈ:W:H2xy“ w*>ww: *#*s#r*  :!:G~# <*#~!d!ͼ ʷ !ͼ &!~6̀!"2**͂ :ʘ n` ~#fob 2O͊ "}:O*"2":O:G2!w*~zWw+ z #~*!*~$ + *!>  #>? #*~ w0" *y͐}0͋  Ͷ ͙^ 2͋ Í>2a."z:2:<:^^d{_zW{_zW ) 4#4#4 #  w#JN 4  ~*w::/GyO A +B 8y2:xOo&:W>Oi E:5 N/*"y2:F D >!"**[ + "**K!z~<:w ##> * ! ~2~+ -O~2 >2 :2 :w:P 4~:w r##rp# b |g}oj * :@ʕ ~#w> ͙{> _++V * -Os++r!x>w~6:6~#+w#w+~|^#V#"##"##"###"#"##"! *!*|!6J67*w#w*w#w#w>2'q2*O͂yڍ>2Í s͝ ͳ L2 ͤ ͔ *'  :O~Sy? x  - NG:<ʏ:J!2!5Jx4 J#wO͏:K~xTHp!" Iy<ʃ !~# N Ä:G*`~!x_<_*y <:/G ~##~?  @ F6##N6:z<! Vq##~_@w͡:z<¸. . r##s}̴̭N! ~态O>G~G!~͆͂ b ͧb !B6NN!B!z<*"!"z:{*:w:w**ʌͺR g[ |OE w @~@w>2 :>* ͊  :3:z͞ !>2Ob 2_*"}o|g">2{&&2{2|*͆ D<8+}7*#}o|g:O*s#r#w!~w~@w6HͿw ʠʡڠ¡w  ~w 2 > y &!"*>o+"1͗ *!"s͙" ͆y2zp##q:!2!"R |:2 ͥ:N>2<2͡|!w:>2*6s͙ͤ|͔ ȇG~o>_yW#x#W{s+p+q r#r#r͋S "͙>2z4 !!q#p#w2wW* _҆-!sz}D#cdfg!"()O ͊ DM͠}>""2:2* ::E sMO s#rͰ :(±y==±*!^W*=2wX կw#q*>=)ү_|:0ʠ êͺ:<­ ‡Hq:>~c!o#~^#VG#~#~!##N#F#^#V#~#fo~r#~?w#>r# =J̧ 4  wͶ ~O ʙ:z<>w##~2_4~?ʈ>x:<ʈʈ{ͥ  ~<Œw:ҧ* ~§2& @t ͬ ͖ :z<ô~?̀ ~?  ͥ *>:!f͐ *~wĦ ɯ2*#~2~w !"2=2*~2=22̀:*wͳ  6 *:_2{2"+ "~̀~!:҈|W|*" j*:Œ"R :W>R  :!jx!w4 ͚̚͡@ o!o#~*ͥ&  && > ͋͹d- j 6Ͷ > ͙F b -w ~< 2 :w++~=w4-Oҫ5:<4{͊ >2 :!3:z͞ Ͱ @ R _@ !">o"6 "!_ ʍ:OsÙ*"8cͬ͌ ôͬ͌ í  ͔ͥ͡ `-}͔ Pͬ yá>O6 *L͝ ͪ !~+6:0 ' "!~6*>=)X!f_CÀ*}<~*~{ͧ6>Ëp# |mͥZ @ :G:O:=27)yy/W!:#?>F6:_/G:^:_|OfKyp!VuWy/2&:2{&Ó8:*:"R ̀**8q̀*"z::2ͬ͌ ͬ͌ ͬ(}/_|/*W}->2$-:$<~2$*!""++ !ͥ ÆBB"$B@D! !  $$@@!!DD@@@I!@$"$ABD$A@!@ !$ " $$ @DD! !$!$$A DD"@$BD"$"I$HBI !  $$D $@I$H2 ;fdc-port: # of sector FDCOP EQU 13 ;fdc-port: command FDCST EQU 14 ;fdc-port: status DMAL EQU 15 ;dma-port: dma addres= :<̝ ~' ") :OG#!K* N*))KKBI"B" $$@"; CP/M 3 BIOS for Z80-Simulator ; ; Copyright (C) 1989-2006 by Udo Munk ; .Z80 ; ; bdos functions ; WARM EQU 0 BDOS EQ1${$" BH$DH@$ @A$ I"I$$DDH$I$ @ BD$DII !$$BD$$ @BB$H I s low DMAH EQU 16 ;dma-port: dma address high MMUINI EQU 20 ;initialize mmu MMUSEL EQU 21 ;bank select mmu CLKCMD EQU 25 UUUUUUUUUUUUUUUUUAHBI$"@!@HII D"BB"$ "H BD!$ H$BD!!$D  D $"BHDU 5 PRINT EQU 9 OPEN EQU 15 READS EQU 20 DMA EQU 26 MULTI EQU 44 ; ; i/o ports ; CONSTA EQU 0 ;console status port CONK"ɷ J>">2:N#=N>2!N2~2#! Œ t t)xu) O$B IDI"@ !@$ A ! B$A@ $$ A$ $@" B"@ D! A$$D! I"!BI$ ;clock command CLKDAT EQU 26 ;clock data ; ; clock commands ; GETSEC EQU 0 ;get seconds GETMIN EQU 1 ;get minutes GET! $ HHAII "!!!!B"D !B"I$$A"D$!!$H $$! H  BBD$A DBAHD$NDAT EQU 1 ;console data port PRTSTA EQU 2 ;printer status port PRTDAT EQU 3 ;printer data port AUXSTA EQU 4 ;auxilary st _"!w O?WGzO:xGyOõxwq*}<:<:*^#V=*"*DM* ! @"$I!$I$H H$I"I$I$BHDI $@@HHI$H"H $I$I$ B!I"" BDBA$@HOU EQU 2 ;get hours GETDAL EQU 3 ;get days low GETDAH EQU 4 ;get days high ; ; character device mode byte fields ; mb$IH$ B!$$H!H"$! A$A "$B"D$$$@D DB!$@H@$$DD!$$I$DH"H$atus port AUXDAT EQU 5 ;auxilary data port FDCD EQU 10 ;fdc-port: # of drive FDCT EQU 11 ;fdc-port: # of track FDCS EQU 1*= ѵ+)) P ͞ g #+} ͔ ͳ >2*^#V+:<ʐ <' ͞ ' ~' *+"}{_}oinput EQU 00000001B ;device may do input mb$output EQU 00000010B ;device may do output mb$in$out EQU mb$input+mb$output ;devicJP 0 ;reserved for system implementor JP 0 ;reserved for future use JP 0 ;reserved for future use ; ; drive table ; Dreturn input status of aux. port JP AUXOST ;return output status of aux. port JP DEVTBL ;return address of character i/o tdisk parameter block DEFW 0FFFEH ;checksum vector DEFW 0FFFEH ;allocation vector DEFW 0FFFEH ;directory buffer contr out JP LIST ;write list character out JP AUXOUT ;write auxiliary output char JP AUXIN ;read auxiliary input char JP DEFW 0FFFEH ;hashing DEFB 0 ;hash bank DPH1: DEFW TRANS ;sector translation table DB 0,0,0,0,0,0,0,0,0 ;bdos scratce may do both baud$none EQU 0 ; ; external references in scb ; EXTRN @civec, @covec, @aovec, @aivec, @lovec, @bnkbf EXTRRIVES: DW DPH0 DW DPH1 DW DPH2 DW DPH3 DW 0 DW 0 DW 0 DW 0 DW DPH8 DW DPH9 DW 0 DW 0 DW 0 DW 0 DW 0 able JP DEVINI ;initialize character i/o devices JP DRVTBL ;return address of disk drive table JP MULTIO ;set number ofol block DEFW 0FFFFH ;dtabcb not used DEFW 0FFFEH ;hashing DEFB 0 ;hash bank DPH3: DEFW TRANS ;sector translationHOME ;move head to track 0 on selcted disk JP SELDSK ;select disk drive JP SETTRK ;set track number JP SETSEC ;set sech area DB 0 ;media flag DEFW DPB0 ;disk parameter block DEFW 0FFFEH ;checksum vector DEFW 0FFFEH ;allocation vecN @crdma, @crdsk, @fx, @resel, @vinfo, @usrcd EXTRN @ermde, @date, @hour, @min, @sec, @mxtpa ; CSEG ; ; cp/m 3 jump vecto DW 0 ; ; fixed data tables for IBM-compatible 8" disks ; ; disk parameter header ; DPH0: DEFW TRANS ;sector translatio sectors to read/write JP FLUSH ;flush deblocking buffers JP MOVE ;memory to memory move JP TIME ;time set/get signal table DB 0,0,0,0,0,0,0,0,0 ;bdos scratch area DB 0 ;media flag DEFW DPB0 ;disk parameter block DEFW 0FFFEH ;checktor number JP SETDMA ;set dma address JP READ ;read specified sector JP WRITE ;write specified sector JP LISTST ;rettor DEFW 0FFFEH ;directory buffer control block DEFW 0FFFFH ;dtabcb not used DEFW 0FFFEH ;hashing DEFB 0 ;hash br for individual subroutines ; JP BOOT ;perform cold start initialization WBOOTE: JP WBOOT ;perform warm start initializatn table DB 0,0,0,0,0,0,0,0,0 ;bdos scratch area DB 0 ;media flag DEFW DPB0 ;disk parameter block DEFW 0FFFEH ;chec JP SELMEM ;select bank of memory JP SETBNK ;specify bank for dma operation JP XMOVE ;set bank for memory dma transfer sum vector DEFW 0FFFEH ;allocation vector DEFW 0FFFEH ;directory buffer control block DEFW 0FFFFH ;dtabcb not used urn list status JP SECTRAN ;translate logical to physical sector JP CONOST ;return output status of console JP AUXIST ;ank DPH2: DEFW TRANS ;sector translation table DB 0,0,0,0,0,0,0,0,0 ;bdos scratch area DB 0 ;media flag DEFW DPB0 ;ion JP CONST ;check for console input char ready JP CONIN ;read console character in JP CONOUT ;write console characterksum vector DEFW 0FFFEH ;allocation vector DEFW 0FFFEH ;directory buffer control block DEFW 0FFFFH ;dtabcb not used DEFW 0FFFEH ;hashing DEFB 0 ;hash bank ; ; sector translate vector for the IBM 8" disk ; TRANS: DEFB 1,7,13,19 ;secto44,45,46,47,48,49,50 DEFB 51,52,53,54,55,56,57,58,59,60 DEFB 61,62,63,64,65,66,67,68,69,70 DEFB 71,72,73,74,75,76,77,78,79table DB 0,0,0,0,0,0,0,0,0 ;bdos scratch area DB 0 ;media flag DEFW DPB1 ;disk parameter block DEFW 0FFFEH ;checkscb for loading ccp ; CCPFCB: DEFB 1,'CCP COM',0,0,0,0 DEFB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 CCPREC: DEFB 0,0,0 ; DSEG;track offset DEFB 0,0 ;physical sector size and shift ; ; fixed data tables for 4mb harddisks ; ; disk parameter header ize DEFW 0 ;track offset DEFB 0,0 ;physical sector size and shift ; ; character device table ; CHRTBL: DEFB 'CRT rs 1,2,3,4 DEFB 25,5,11,17 ;sectors 5,6,7,8 DEFB 23,3,9,15 ;sectors 9,10,11,12 DEFB 21,2,8,14 ;sectors 13,14,15,16 DEFB ,80 DEFB 81,82,83,84,85,86,87,88,89,90 DEFB 91,92,93,94,95,96,97,98,99,100 DEFB 101,102,103,104,105,106,107,108,109,110 um vector DEFW 0FFFEH ;allocation vector DEFW 0FFFEH ;directory buffer control block DEFW 0FFFFH ;dtabcb not used ; ; bios error messages ; CCPOER: DEFB 13,10,'BIOS ERROR: cannot open CCP.COM',13,10,'$' CCPIOE: DEFB 13,10,'BIOS ERROR: r ; DPH8: DEFW HDTRA ;sector translation table DB 0,0,0,0,0,0,0,0,0 ;bdos scratch area DB 0 ;media flag DEFW DPB1 ;d' DEFB mb$in$out DEFB baud$none DEFB 'LPT ' DEFB mb$output DEFB baud$none DEFB 'PTP ' DEFB mb$output DEFB ba20,26,6,12 ;sectors 17,18,19,20 DEFB 18,24,4,10 ;sectors 21,22,23,24 DEFB 16,22 ;sectors 25,26 ; ; disk parameter block fDEFB 111,112,113,114,115,116,117,118,119,120 DEFB 121,122,123,124,125,126,127,128 ; ; disk parameter block for 4mb harddisk DEFW 0FFFEH ;hashing DEFB 0 ;hash bank ; ; sector translate vector for 4mb harddisk ; HDTRA: DEFB 1,2,3,4,5,6,7,8,9,10eading CCP.COM',13,10,'$' ; CSEG ; DRIVE: DEFB 0 ;drive to select BANK: DEFB 0 ;bank to select for dma ; ; end of fixeisk parameter block DEFW 0FFFEH ;checksum vector DEFW 0FFFEH ;allocation vector DEFW 0FFFEH ;directory buffer controud$none DEFB 'PTR ' DEFB mb$input DEFB baud$none DEFB 0 ; ; signon message ; SIGNON: DEFB 13,10 DEFM 'BANKED BIOor the IBM 8" disk ; DPB0: DEFW 26 ;sectors per track DEFB 3 ;block shift factor DEFB 7 ;block mask DEFB 0 ;extent m ; DPB1: DEFW 128 ;sectors per track DEFB 4 ;block shift factor DEFB 15 ;block mask DEFB 0 ;extent mask DEFB 11,12,13,14,15,16,17,18,19,20 DEFB 21,22,23,24,25,26,27,28,29,30 DEFB 31,32,33,34,35,36,37,38,39,40 DEFB 41,42,43,d tables ; ; individual subroutines to perform each function ; DSEG ; BOOT: LD B,1 ;indicate cold boot ; LD HL,8000H l block DEFW 0FFFFH ;dtabcb not used DEFW 0FFFEH ;hashing DEFB 0 ;hash bank DPH9: DEFW HDTRA ;sector translation S3 V1.4 for Z80SIM, ' DEFM 'Copyright 1989-2006 by Udo Munk' DEFB 13,10 DEFB 0 ; ; small stack ; DS 8 STACK: ; ; fask DEFW 242 ;disk size-1 DEFW 63 ;directory max DEFB 192 ;alloc 0 DEFB 0 ;alloc 1 DEFW 16 ;check size DEFW 2 DEFW 2039 ;disk size-1 DEFW 1023 ;directory max DEFB 255 ;alloc 0 DEFB 255 ;alloc 1 DEFW 0 ;check s LD (@civec),HL ;CONSOLE:=CON for input LD (@covec),HL ;CONSOLE:=CON for output LD HL,4000H LD (@lovec),HL ;LST:=LPT LD always ready RET ; ; console character output from register c ; CONOUT: LD A,C ;get to accumulator OUT (CONDAT),A ;senLD C,READS CALL BDOS LD DE,CCPIOE INC A JP NZ,0100H ;start ccp CCPERR: LD C,PRINT ;print error message CALL BDOS H ;harddisk 1? JP Z,SEL1 ;go CP 9 ;harddisk 2? RET NZ ;no, error ; disk number is in the proper range ; return proper JP Z,LDCCP LD HL,SIGNON ;print message WBOOT2: LD A,(HL) OR A JP Z,LDCCP LD C,A CALL CONOUT INC HL JP WBOOT2 ; ET ; ; auxilary output from register c ; AUXOUT: LD A,C OUT (AUXDAT),A RET ; ; ; i/o drivers for the disks ; DRVTBL HL,2000H LD (@aovec),HL ;AUXOUT:=PTP LD HL,1000H LD (@aivec),HL ;AUXIN:=PTR ; LD A,3 ;initialize 3 memory banks OUTd character to console RET ; ; list out status, return 0ffh if ready, 00h if not ; LISTST: LD A,0FFH ;list out always reaALT ; ; character i/o drivers ; DEVTBL: LD HL,CHRTBL RET ; ; character device initialization ; DEVINI: RET ; ; conso disk parameter header address SEL1: LD L,C LD H,0 ADD HL,HL ;drive index in hl LD BC,DRIVES ADD HL,BC ;get pointer t ; load ccp.com into tpa ; LDCCP: XOR A ;initialize fcb LD (CCPFCB+15),A LD HL,0 LD (CCPREC),HL LD DE,CCPFCB ;open fi: LD HL,DRIVES RET ; DSEG ; ; move to the track 00 position of current drive ; translate this call into a settrk call wi (MMUINI),A JP WBOOT1 ; CSEG ; WBOOT: LD B,0 ;indicate warm boot WBOOT1: LD SP,STACK ; ; initialize low memory jumps dy RET ; ; list character output from register C ; LIST: LD A,C OUT (PRTDAT),A RET ; ; auxilary input status, 0ffh ile in status, return 0ffh if character ready, 00h if not ; CONST: IN A,(CONSTA) RET ; ; console character input from regiso dph LD A,(HL) INC HL LD H,(HL) LD L,A LD A,(DRIVE) OUT (FDCD),A ;selekt disk drive RET ; ; set track given by le ccp.com LD C,OPEN CALL BDOS LD DE,CCPOER INC A JP Z,CCPERR ;print error if file not found LD DE,0100H ;setup DMA th parameter 00 ; HOME: LD C,0 ;select track 0 JP SETTRK ;we will move to 00 on first read/write ; ; select disk given bin bank 1 ; LD A,1 CALL SELMEM ; LD A,0C3H ;jmp instruction LD (WARM),A LD HL,WBOOTE ;warm boot enty point LD (WAf ready, 00h if not ; AUXIST: XOR A ;never ready, hardware not available yet RET ; ; auxilary output status, 0ffh if readter a ; CONIN: IN A,(CONDAT) RET ; ; console out status, return 0ffh if ready, 00h if not CONOST: LD A,0FFH ;console outregister c ; SETTRK: LD A,C OUT (FDCT),A RET ; ; set sector given by register c ; SETSEC: LD A,C OUT (FDCS),A RET to tpa LD C,DMA CALL BDOS LD DE,128 ;read up to 16KB LD C,MULTI CALL BDOS LD DE,CCPFCB ;read the ccp into memory y register C ; SELDSK: LD HL,0000H ;error return code LD A,C LD (DRIVE),A CP 4 ;disk drive 1-4? JP C,SEL1 ;go CP 8RM+1),HL LD (BDOS),A LD HL,(@mxtpa) ;bdos entry point LD (BDOS+1),HL ; ; print message on cold boot ; LD A,B OR A y, 00h if not ; AUXOST: XOR A ;never ready, hadware not available yet RET ; ; auxilary input ; AUXIN: IN A,(AUXDAT) R ; ; translate the sector given by bc using the ; translate table given by de ; SECTRAN: EX DE,HL ;hl=.trans ADD HL,BC ur),A LD A,GETDAL ;get day OUT (CLKCMD),A IN A,(CLKDAT) LD (@date),A LD A,GETDAH OUT (CLKCMD),A IN A,(CLKDAT) LD,HL RET ; ; select memory bank SELMEM: OUT (MMUSEL),A RET ; ; specify memory bank for dma operation SETBNK: LD (BANK),$$#$-$A$J$S$@Y$u u J$u u }$$$$$*%P%$%&'('d'''(('({ A g X J v !)$*^#V#^#Vw# llMUSEL),A LD A,1 ;write command -> A ; ; enter here from read and write to perform the actual i/o ; operation. return 00h i. ;hl=.trans(sector) LD L,(HL) ;l = trans(sector) LD H,0 ;hl= trans(sector) RET ;with value in HL ; ; set dma address (@date+1),A RET ; ENDDAT EQU $ ;end END ;of BIOS A RET ; ; xmove not implemented yet, hardware missing ; XMOVE: RET ; ; get/set time ; TIME: LD A,C CP 0FFH RET Z l ls:¬MA wM  2*7w#6?#7 .,:;[]=<>|!?]45#Ra{i_p# l s s,A ;start i/o operation XOR A ;reselect bank 0 OUT (MMUSEL),A IN A,(FDCST) ;status of i/o operation -> A RET ; ; noth654321"y2;!"(:2(=2(:=;!~;4#.{2(!" "9"2!;(y3]K!o\b!,_^#V* RET ; CSEG ; ; perform read operation ; READ: LD A,(BANK) ;switch to saved bank OUT (MMUSEL),A XOR A ;read command ;get minutes OUT (CLKCMD),A IN A,(CLKDAT) LD (@min),A LD A,GETHOU ;get hours OUT (CLKCMD),A IN A,(CLKDAT) LD (@ho͂:(A2= / ::0! dگ61#d ڸïp#:w#6 !6:6 *#!)6.#)͂ O(BDOS ing to do ; MULTIO: XOR A RET ; ; nothing to do ; FLUSH: XOR A RET ; ; memory move ; MOVE: EX DE,HL LDIR EX DE!J ^#V̀:#!"(COPYRIGHT 1998, CALDERA, INC. 101198/(  + 1 7 = }!!!!"""""# ####$$-> A JP WAITIO ;to perform the actual i/o ; ; perform write operation ; WRITE: LD A,(BANK) ;switch to saved bank OUT (MFunction = File = !,$-"h!9"f! ͉:2(t™:! =Hgo:O*;*9ʌ ^:— ~x  ) :* :   >*( +"( w++2+ 2+ p!" ͳ*& ~2+ o#"& !+ 6M : W:2 x ͺ*( +"( w  : >2* 2 :*( : +w"( ͺ:G: 4#4#4)7( #  w#*J|^#V#"i(##"k(##"m(###"o(#"q(##"(!s( )*s(!()*(|!(6~67r  ! O(Ì*( ~2* *}ʷ!#¶!""÷:_:*( #wxH! )6"& :!  xÓ*"r*r"ÿ<:g:!͐*f}D! ~6t!r ͷO(^  :r y< < <% zr ͷr 6r 9r MDÌ:o !6!h : ʚnt2 r 62 >r z<* !% "( ^-:* $P:<\: W:2 xM s:<9>2 :* 9x~+q ’x2 :**k(w#w*m(w#w#w>2('å2(*OͶyڲ ò <*e(Ͳ:0!(:(:(ò 2*(>*ͫ"(2 GH)+6:2, :!-  :, !+*( ~L#Bxz:* : *( ~ʓO šn!6@G:x: P:<: P n6 t6! ^6 t6u:)<͠^!)$"!z<~r s^#V#N#FxN:oʲ ̀õ (# Þ ͂^2 ¢ů͠: !ڽ*( ~5WèjM 2 ͨx*( +w"( j!(s#r#p*k(N#F*m(^#V#F*(:(O}|y9*( +"*( }|yP#9*( *(DM"(*k(s#r*m(s#r#pyoxڊ{2Ó#w:2. +:. 2- !% "( 2* ! "& !* ~4:2- Ԃ: Gͳͨ^2+ >2:2 *N#G2  CP/M Error On : Disk I/OInvalid DriveRead/Only FileRead/Only DiskPassword E G:Ҏ>xʝʝw>ɯw̩z:»!>wɯ:=zxzz: :G:=/ͽx:Āy!4 >2+ 2* jx. #NzW:  : !2 W! 5= ^x^ z: m :* ;#wO: g͝DM*(0MD"(!*MD$:(Oë!(N:( «G>O:( ù* :(n` ~#foͤ2(O"(}:(O*( "(:+ ̜2 5*( ~o#"( M š*( ~`Uoj*( ~#"( Ñ!* ~6s!+ 6:+ ‚xorrorFile Exists? in Filenameò ò >2(a." :(2:<:5(5(;(:(2ɯ2(2{_zW{_zW ) 75~y 5 6y(^@O:=7:y :I :=e:  zz#͂:!  2("(:(O:(G2(!(w*~zWw+ !z?#~*!* *G!O~2(~m͗O~t>2(?:(2Eʀ@~›:(6!¦w͚̋,ÇPY*({zBKNyʺ NúOͫE:(ڟ?N/*"(y2ͦ+>2( :(2(9:(>#:(>#*e ^#V#~2(>â9͆>!"(*y(³*(X)*ÿ͂"*g(*K! ~<:wb##>w#w> r !~#<!"*>o+"v- *!b("": r#~?w#>r# L=J! Lv w,b ?~O ͆(O:(w:Ғ4~:(w?r##rp# ä |g}oì*g( #G ¾1*q(:(*w***> r ~Gw#* #~$%+@*9> # #>? ;*~ w-xąH"(0 *(#ĊH̀2(k,ºʺ*(*iҺ@:O~2(~WW:2(Ôyʛ?ʔx ʔ |̷ÔN+S!X:(ڜq: ʺ!((ʵ>2( ͤ2(O DM͸}>r "("(2(:(2(* :(:(!"@*(*#":&2(͒:È0:+Òy<_W`iͫDM*w( ~bNpwDM*w(=: <>w##~2( 4~?̓-¹:(<üAX2(r K:(w++~=wv 4͗O5:(2(X)e(:(O!*c(:(Oͫ}@2æ  ~á *g(:(o$*~K6?~wKw**i({#zir+s{( ,ˆʀHÈ2(xą ):(@O~#w͚ʀô̓-b_++V@* )͗Os++rG:(<2(x# W:(<­:2(2 G?>Gr x~:(2(Ô##~*$*">2FsO s#r:(„y==„*(!(^W*y(^#Vx+7=2(wͼկw#KWK*("(J T͞*(:(["T] KKͦ*w("w(ͦ"w(@ :(N N#Fy*(}|h#ð*(ͫ# 6*q(@-:(!(v q: v v Mڂ?Ͷ >T͓Â!"(>(Â:(G:(O:(h=2(7ryy/W!(:(lozg*(*(|g͸*u(*(  R>22Z$w*q(>ww:(c( *(#*i(s#r*:(!(:!x>w~6:(6~#+w#w+~;wɯ2 K,OFq-yl?Npg&:(ʓ~>2: *(~w *" 2(>ʄ@~k:((s~*9~Ês~ ~ͅ<(Ͷ:(WMںʛ>(úͶ >TJ:(!(ʷ͞x!(w4 PWP  Â*!!~~#~O~#RXDM*w(6# x *o(w*(*w(s#r̀*i(6#6*}("(j-@*(|<ď+>!8>8> t>nͦv8 ~*o(wnڈ>F6:(_/G:(ʧ:(ڨ|OͤG:(_OzW{|:(*(}|BKN zyGG~#<*q(#~!;(!(!(!~6k!"2(*q(N1q*{(]*{([*y(}<^#V(t6 ^#V}÷†wŒ~è# # x ͗w w@ ~wb͐ÚG~.|°! w:ck[!x?[! ~ʤ͆[͗PPv qO-á=.: <ʰ! Vq##~_@w—#>2—#͇ͱ * «#>2(͙ wB p'+!#:(w͚AP{" 2! W>O2 ø }-R*e()$:(rr !Z$2!"ög:(2T͐-:ʹ!>2<2(!!(w: >2(*6!O~#2(̓ *~wć"q&&͋"&@6,͚%Xͤ͋&͗wO~<:( g&~w#w#6##)͋&@ * g&~?G++: <œ. ʩ.ʩA r r##s <}r cN! ~态O>G~G!~G~o>_y "ök*w()$*c()$-}-ͤÀk*s(" :(;$:r 2͚ù͚͚}/_|/*e(W}_*c("e(}o|g"c(>2({ ~"2(Asv"@!N"!N"~v"$̓ W"+!v"w̚v"$̓ r" r"ͅ:(r">2(+A@2!#cdfg!"()*#Fx T]## #~ ȷ   *4 # '  4 !( *~^ ^ 33G# P v :dv 6 yN͆p# Þ&͐*6!¿&?~p*6 &>2ͱ ! ! ͷ w*oW#x#W{s+p+q7r#r#r>@ >2  !!q#p#w2(wW*e(_3ҫ -!(s:(!(xQ*2{2g*w(ʪ$Ң$Þ$+}$*(#}o|g:(O *s#r#w!~w/~@w//Hͥ*e(>=)%_g:0% ͚A=: <%~?¯"k"?~?ʾ"ZT͐"*>o"͒"!:O"(Ý"}-6͚{(X)^#V!"(:(<)!~<<)^#V*(<)"("(x+)!(*(>X)*{()Q*:(_2({2(Ē*"(͂"X*~<) #*~w>2 *p@! ~*"v@*w# ) 6# ͙   !N(w'ͧ B pͧ ,Úgsr ͐-ͤ͜!S')_'ͤ̓ ~?w͐s-?F͜pq(~wɯ2(2(ù*~2(~w#~2(~wZ!""2(=2*~2(=2(2(k:*wX/ 6X*w:- %:(<%R$Hͥ:(>(~c!o#~E%^#V)$G#~#~!%~ b%% k%%##N#F#^#V#~#fo~o͚c2(ZT͐-3#͗#@!Y#sY#̓ Y# Y#ͅ:(As#:(@#@!#$̓ ҍ) -)a*ʚ)~)6*(:(X*)!(:(T>q*k)!(:()-6>)2ͱ ?~¾'¾''''>w'͙ =2(͜!:(wÚ~̓ ʑ'pá'!(6Ǹ!~$6:03i"!~6*e(>=)Q!(QX<k*{(}<^#V{!~! _*o(~s̓!o#~>T}! 6**#K" G*~ xr ͐-xą@7(͚S!ʀ)**"g(*3*:= :(Oi* :=H*:(Gi* a*6:(G/O*((*(W :(T=I@I $@ $ @!H"BI"HI DIHA DD$HH $  B D$ "I$I$H$ I !  $I$I$I $@HD$D"D$H D@!IB@ A"B HBIB$$ "$ D$!"D$H$D$I@D BD" H$BHHBDHB"H!"=‡,*(":(*}(®,:=::<>2*i(^#V+ d,!(K*}(@+*)):( K:($D$ $I"B IIBB"$B@DH"$$ IH $$ !I"AD B!B a*##()0-"(x+x+!"("("(X*C+*(~<**("(*:(*!:(**:9-**("(x++"(@!$"A$A DBIDB  @$$DD""I $BHI$IB !@"BD BBD "@B @$ $BI I B$@!!$$HH !"BB$HHDA! "D"H $B!$!AI!$ $ H  Hڗ>2#-×:#-<)2#-*(!""++"(29-C-%w*{(}<^#Vz!(c-!>c-! J-w*q(~69!͐  BI$A$"@$I$!!""@H! $!@I$ð**(}+*(}+"(*(x+"(x+m+*(^#V*( s#r*(*(s#r*(:(Y+4Y+̓+*(*(~#ng+*( s#r ^#V" ! "H !$B I$D@! !$ @H!$$D"@A@ DHII  D@@ $ DHI"D$ A$I! I" $$BD"$H "AHD @ I  B"$9b|:(w:(ʴ+>2d,:+#++>29+2~2#! , , ,)x @ $""@ B! @@D $$A$ $D "@I $A$$I!HI$ BA$ $DH $I$I"HI$I!$DB$"B I$$H @@@@" BHB  !I$ @ $@$"$AI$$IBI$I H@@I!$DA $ $@$ !$!!" !$BI$"" HB@ UUUUUUUUUUUUUUUUUAPDA$! @I !@D@BDI@!B$ @$I$$ "@$$@@HHB,) ,O +"!w [,O?WGzO:(V,xGyOG,xwq*}(}Copyright (C) 1982, Digital Research654321ector (word, r/w) @BNKBF equ scb$base+35h ; Address of 128 Byte Buffer ; for Banked Bection ; Vector (word, r/w) @COVEC equ scb$base+24h ; Console Output Redirection r/w) @MIN equ scb$base+5Bh ; Minute in BCD (byte, r/w) @SEC equ scb$base+5Ch ; Second in BCD (byte, r/w) e, r/o) @MLTIO equ scb$base+4Ah ; Current Multi-Sector Count ; (byte,r/w) @ERMDE equ scb$base+4Bh ; BDOS Error Mo BNKBIOS3 SPR FC00 0400 BNKBIOS3 SPR B000 1000 RESBDOS3 SPR F600 0600 BNKBDOS3 SPR 8200 2E00 61K TPA $$$$$IOS (word, r/o) @CRDMA equ scb$base+3Ch ; Current DMA Address ; (word, r/o) @CRDSK ; Vector (word, r/w) @AIVEC equ scb$base+26h ; Auxiliary Input Redirection ?ERJMP equ scb$base+5Fh ; BDOS Error Message Jump ; (word, r/w) @MXTPA equ scb$ba}!,"**NK6 :+OK2$^#V#N#FxNp:$p:Gjxj Y# A>QFQY?DD  !"#$%&'()*+,-./0123456789:;<:d> ɯɯ2dy>2>2>2>2>2KK{<<ʽ! ~6 69BK! OS",!."*K6*}ʴ}<ʴ.}o|g "($Kt>=2(*f*(}DɯQ"(>QKQKQ>Q"%Q"xʘ!~ʘO#Ë2O!"`@<,@$< v!>y>yɯɯy!c:d654321$Nwy!"(9"f1f! Ҕ2! ~#foCOPYRIGHT 1998, CALDERA, INC. 101198DehmÓ×áÛ'"&+!*$K*"x!*!@$@hK\K:K ~#~ w*NK*NK^#V#N#F!IOS3 V1.4 for Z80SIM, Copyright 1989-2006 by Udo Munk CCP COM1@>>2!"2*     x>QGQx3ڰbڼqҼo5p5"""*!yb! ~G*!NKկ2=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~CRT LPT PTP PTR  BANKED B?DD  !"#$%&'()*+,-./0123456789:;< ( 7 F Uds))**+͵+ܵ,,::;;<˷<ڷ===>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~CRT LPT PTP PTR  BANKED B η ݷ $ %%(&7&F'U'd(s( BIOS ERROR: cannot open CCP.COM $ BIOS ERROR: reading CCP.COM $!"""$!@"*! "(!"&>gÓ!y2cځʁ 566&757D8S8b9q9IOS3 V1.4 for Z80SIM, Copyright 1989-2006 by Udo Munk CCP COM1@>>2!"2*b 8GVet !!""δ#ݴ#$i&)c ~#fo:c y y n&yx$I$I$I$@ @ B!H12233̶4۶45"xʘ!~ʘO#Ë2O!"`@<,@$< v!>y>yɯɯy!c:d )8GVet @ - -.'.6/E/T0c0r1:d> ɯɯ2dy>2\>2[>2Z>2X>2Y>>?%?4@C@RAaAϳ޳Ãà à Ãڗ>2#×:#<֫2#*!""++"29Cw*{}<^#Vz!c!>c! Jw*q~69!͐a##)0"xx!"""XC*~<ά*":!::9*"x";JYhw=‡*":*}®:=::<>2*i^#V+ d!K*}@*)): K: *9HWfupJ Z     *"g*3:= :Oi :=H:Gi a6:G/O**W :T=i&)c ~#fo:c y y n&yxɴ,ðҰ) O "!w [O?WGzO:VxGyOGxwq*}}qk֫!:6>gÓ!y2cځʁ |:w:ʴ>2d:#ϭ>29୯2~2#!   )x + : I Xgv+"}{_}o>2~77ø~7"9:OG#Q{ozg# ""Ã1Oj$|{X^#V!":X*{Q:_2{2Ē"͂"X~<«9bð*}*}"*x"xm*^#V* s#r**s#r*:諭Y4Y̓**~#ng* s#r ^#V± ѱ !2*%DM**ѵ+)) H~#+}#<:<ʲ<77:<ʢ2+A@2݌"ök*w)*c)-}ͤÀk*s":;:r2͚Βù͚Ÿ͚}/_|/*eW}_*c"e}o|g"c>2{ʙ:<œ. ʩ.ʩA܏rr##s܏<}rcN! ~态O>G~G!~G~o>_yq͋"@6Ȯ͚Xͤ͋͗wO~<: g~w#w#6##)͋@ * g~?G++2@ !ת)#w*~"ҡ!Fw䡨ҡ̓ҡ:w̚":>奯2̓*~wć"N!r)!N!)z<*)"!":X*:w:w#:w*2*}Dr!Z2!"ög:2T͐-:ʹ>2<2ڙ!w: >2*6ݖݙO~<w:*—>2—͇ͱ* «>2͙wBp+ҥ:w͚AP{ 2W>O2ø}R*e):rG~.|°! w:ck[!x?[! ~ʤ͆[͗PPvqO-á=.:<ʰ! Vq##~_@w!o#~>T}! 6**#K"G*~ xr͐-xą@˟7(͚Sʀ̀!~$6:03i"!~6*e>=)Q!QX2ͱԢߡ?~¾¾ʩƩ>w͙=2͜:wÚ~̓ʑpá!6N)@ u:G*g`~!x_<_@*oy<:/G?~##~? 6K@?F6##N6⢯2p##q:͚Βc2ZT͐-ڙ3͗@YsY̓YעYͅ:ߡAsҥ:@ҥ@ҥ$̓Ͷ:WMںʛ>úͶ >TJ:!ʷ͞x!Ǟw4 ϞPWޞP܏ÂՏÂ*!!~~#~O~#w: :<RHͥ:>~c!o#~E^#V)G#~#~!~ b k##N#F#^#V#~#fo~oq~wɯ22ù*~2~w#~2~wZ!""2=2*~2=2ߠ2k:*wX/ 6X*wͧBpͧȮÚgsr͐-͜đͤS)_ͤ̓~?w͐s-?F͜p#*~w>2*p@! ~*"v@*w# ) 6#̢͙N͚Aؒ=:<~?¯kä?~?ʾZT͐ڤ*>o"͒"!Ô:Oݖ"Ý}6͚FsO s#r:(„y==„*!^W*y^#Vx7=2wͼկw#KWK*"J T͞*:["2{2g*wޕʪҢÞ+}*#}o|g:O*s#r#w!~w/~@w//Hͥ*e>=)_g:0W#x#W{s+p+q7r#r#r>@˟ >2 ˟!!q#p#w2wW*e_3ҫ-!s:!xQ*N͆p# Þ͐*6!¿?~p*6 >2ͱݢԢߡͷw*o#FxT]## #~ ȷ  *4# ' 4! *~^ ^33G# Pv:dv6 y+SX:ڜq:ʺ!ʵ>2܏ͤ2ѝO ̑DM͸}ޝ>r""2:2* ::̀2kºʺ**iҺ@:O~헯2~WW:2Ôyʛ?ʔx ʔ |̷ǗÔN͔~Gw#* #~$%+@*9>  #>? ;*~ w-xąH"0 *ĊHO:w:Ғ4~:w?r##rp# ä |g}oì*g #G ¾1*q:*w***> r !"*>o+"v *!b"ݖ": r#~?w#>r# L=J Lv wȮb܏?~O ͆ڛe ^#V#~2>â9͆>!"*y³*X*ÿ͂"*g*K!~<:wb##>w#wđ> r!~#<:29:>:>*:r:/GyOOA +¬ ¢y2:x¹o&:W>OͫE:ڟ?N/*"y2ͦ>2 ݖEʀ@~›:6¦w͚̋ȮÇPY*{zBKNyʺ Nú2?:2†wŒ~è# # x ͗w ٚښٚښw@ ~wb͐ÚݔG~#<*q#~!;!ͪ!Ԫ!~6k!"2*qN1q*{]*{[*y}<^#Vt6 ^#V}Æڈ>F6:_/G:ʧ:ڨ|OͤG:_Ȏ̑zW{œ|:*}|BKNœ zyGRXޕDM*w6# x *ow**ws#r̀*i6#6*}"j@*|<ď>!8>8> t>nͦv8 ~*own>2: *~w *" ݖ2>ʄ@~k:(s~*9~Ês~Ԣ~ͅ<g͝DM*0MD"!*MD$:Oë!N: «G>O: ‘ù*đ :ڑn` ~#foͤ2Ȏ"}:O*"!x>w~6:6~#+w#w+~;wɯ2KOFq-yl?Npg:ʓ~ozg**|g͸*u* Ɠ ѓR>22Zw*q>ww:c *#*is#r*:!::!vq:vՏvMڂ?Ͷ >T͓Â!">Â:G:O:h=27ryy/W!:lT] KKͦޕ*w"wͦ"w@ :ÕNɕ N#Fyؕ*}|h#ð*ͫ# 6*q@͆G:<ޗ2x# W:<­:22G?>Grx~:2Ô##~*$*">2!s#r#p*kN#F*m^#V#F*:O}|y9*+"*}|yP#9**DM"*ks#r*ms#r#pyox( ȮˆʀHÈ2xą ):@ΙO~#w͚ʀô̓b_++V@* )͗Os++r)e:O!*c:Oͫ}@2æ ~á*g:o$*~K6?~wKw**i{#zir+s{=:<>w##~2 4~?ɛ̓¹:<ɛɛüޙAX2rK:w++~=wv4͗O5:2X!"@**#":&2͒:È0:+Òy<_W`iͫDM*w ~bNpwޕDM*w*kw#w*mw#w#w>2'å2*OͶyڲò<*eͲ:0!::ò2*>*ͫ" LERROR = Y NUMSEGS = 02 MEMSEG00 = 00,8A,00 MEMSEG01 = 00,C0,02 MEMSEG02 = 00,C0,03 MEMSEG03 = 00,C0,04 MEMSEG04 = 00ry< <<%zrͷr6r9rMDÌ:o!6!h: ʚnt2 r62>rz<*PMLDR error: failed to read CPM3.SYS $ CP/M V3.0 Loader Copyright (C) 1998, Caldera Inc. $101198D = N ALTBNKSE = N ALTBNKSF = N ALTBNKSG = N ALTBNKSH = N ALTBNKSI = N ALTBNKSJ = N ALTBNKSK = N ALTBNKSL = N ALTBNKSM 4#4#4)7 #  w#*J|^#V#"i##"k##"m###"o#"q##"!s )*s!)*|!6~67,C0,05 MEMSEG05 = 00,C0,06 MEMSEG06 = 00,C0,07 MEMSEG07 = 00,C0,08 MEMSEG08 = 00,C0,09 MEMSEG09 = 00,C0,0A MEMSEG0A = 00,C9ʌ^:—~x ):*:ŋŋ>*(+"(w++2+2+ɇp؇!" U " yڨ2 2 : 2 {2 !" " 9"C1!Q y2K!dڞ_^#V*   = N ALTBNKSN = N ALTBNKSO = N ALTBNKSP = N NDIRRECA = 08 NDIRRECB = 08 NDIRRECC = 08 NDIRRECD = 08 NDIRRECE = 01 NDIRRErrorFile Exists? in Filenameòò>2a.":2:<:55;:2ɯ22{_zW{_zW )70,0B MEMSEG0B = 00,C0,0C MEMSEG0C = 00,C0,0D MEMSEG0D = 00,C0,0E MEMSEG0E = 00,C0,0F MEMSEG0F = 00,C0,10 HASHDRVA = Y HAS>2+2*jx.#NzW::!2W!5=^x^z:m:*;#wO:> D J 1  ͐ (͐͐ʥ͒͘!~# 7͘ ͐:g:v:bg:v!`~$r#~B̬1ɷW|gCP/M Error On : Disk I/OInvalid DriveRead/Only FileRead/Only DiskPassword EHDRVB = Y HASHDRVC = Y HASHDRVD = Y HASHDRVE = Y HASHDRVF = Y HASHDRVG = Y HASHDRVH = Y HASHDRVI = Y HASHDRVJ = Y HASHDPRTMSG = Y PAGWID = 4F PAGLEN = 17 BACKSPC = N RUBOUT = N BOOTDRV = A MEMTOP = FF BNKSWT = Y COMBAS = C0:¡ y! 4 5~y¸5 6y • ͕: ! O;MD2 > BDOS ERR: $S)"!z<~rs^#V#N#FxN:oʲ̀õ(# Þ ͒͘%}͐͐ ͐vCPM3 SYS CPMLDR error: failed to open CPM3.SYS $ CRVK = Y HASHDRVL = Y HASHDRVM = Y HASHDRVN = Y HASHDRVO = Y HASHDRVP = Y ALTBNKSA = N ALTBNKSB = N ALTBNKSC = N ALTBNKSelect$Perm.$#v{_zW{_zW );# B w#MJ |^#V###" ##" ######" !  L* L/c4> \^4U :U H0ʄ4H=;: y4ɯ;:͞:!*#@*?!!44͍ 4:@¾4x4*?͔9͊02@W* P_V-* MD=" : 2 ɯ2 >G=O* ~~w#~2 ~wf~~p2 !" >2 * ~=2 ~2 ͞r>*etting up Allocation vector for drive $ Setting up Checksum vector for drive $ *** Bank 1 and Common are not included *** ***: ʒ> Þͤ" Ͷ* ê* u" ! ~#O)E: N/* " y2 ͷ͚;ͮʞ* [: O~Myʗx ʐ ʅ0123456789ABCDEF ERROR: $Reading file: $Writing file: $Directory full$Reading file: $Writing file: $Invalid drive.$) ? $) ?(+* 1}|y!# * (* DM" ! * s#r* s#r#pyoxgnDM* 3 MD" $ * MD' : O)! N:       ? LDRBIOS3 V1.1 for Z80SIM, Copyright 1989-2006 by Udo Munk ! ~ O # yw*C* }D:f3>0f3y*{3w+"{36 *{32Ow+ ʏ3 3~3w+~3Ô2ʢ3w+> $* * W : _2 e: $ Base,size,bank $Zero length segment not allowed.$Bank one not allowed.$ ERROR: Memory conflict - segment trimmed. $MemoMÐNM# k2 G>G=~[*  LOw!x>Fwx2 2 ~: : 6: w2 $) ? $Bad character, re-enter $ $ Disk read error: $File cannot fit into GENCPM buffer: $Unable to open: $BDOS3 B|G>O: ʓÊ* ͕ : ʫn` ~#fou2 O͝" }: O* :" 2 " : O: G2 ! w*  * ! !y !f y y n&yxɯ BIOS3 V1.1 for Z80SIM, Copyright 1989-2006 by Udo Munk ! ~ O # y{2 " u" ^  B/ g >o ^ L6: <!=9 * M " * N : G/O*  * =g ## ry conflict - cannot trim segment.$ ERROR: Memory conflict - segment trimmed. $ ERROR: Memory conflict - segment trimmed. ~O $>w=ͫ2 4O15: ! V: ͱ: ͞Ͷ: <=! wIOS3 Setting up directory hash tables: $ Enable hashing for drive $: $Unable to allocate space for hash table.$ S~2 ~2 : 2 : w: w |g}o* )7: O!6yoxg: O)}* : o$~w{ozg ^#V$ CP/M 3 Sys $ Memseg No. $ Bank $ Accept new memory segment table entries $Default entries are shown in (parens). Default *fUM7 !gU6>!gU dUbU:Rھ !hU6!fU4dUbU:R+s#rØ :hU *fUM7!fU60*dU! ʹQ"dU!gU4 !jUs+q(7:jU #7*Sp+q*S ͧ *S 6!Sp+q*S!Sp+q*S! ͧ!Sp+q*S" ͧ!Sp+q*SSB2Sͽ:S8!T6>!T8*T&QNP  6!T4@!S6:TJM(:S2S:S2xSR:Oҁ*S&QDM*SeÙ $ BNKBIOS3 SPR$BIOS3 SPR$BNKBIOS3 SPR$BDOS3 SPR$RESBDOS3 SPR$BNKBDOS3 SPR$ 64K TPA Copyright (C) 1982, Digital ReseaxU:RH.:vU2wUo&QO  ^#V"xU|*vU&QO  ~ xU:RH|:vU2wUo&QO  ^#V"xU!vU4base is Hex, precede entry with # for decimal $ Use GENCPM.DAT for defaults $Create a new GENCPM.DAT file $Display Load Map atiU&DM^  *iUM N!oUs+p+q+p+q :S8 ͜*mU6:rU<2rUO!S NZ 2qU :qU,p *mU#"mU6!pU6 :qU#€ !pU6 $!VUr+s+p+q+q:RU *RU*SUDM*UU,5 -1 !YUs+p+q:YUN *WU*YUM!WU R!ZUq:ZU i > :ZUa/>z!ZU/H҈ *S&QDM*Se:O:S2T!"T*TMT :T2S!S66*S|!S2T*S|!So&)##"T*S&QDM*Te*Trch *** CP/M 3.0 SYSTEM GENERATION DONE ***$!Sq:SM*S&!Sp+q:Sd*S !Sp+q*S#6:SҀ:Sڀ´ :wU:sUH !vU6:O!vU *vU&QO  tU:R/ ~HxU:RH:vU2wUo&QO  ^#V Cold Boot $Number of console columns $Number of lines in console page $Backspace echoes erased character $Rubout echoes erased :qU02qU:pU> !qUHҸ >!qUҳ :qU2qUø !qU6!pU:qU *mU^*pU&Q*qU& s !qU6*mU6ͧ *mU6= :ZU_2ZU:ZU![Uq:[U/>![U/HҪ >ͧ>!]Up+q(7*\U~ Y7 N7NSe:S *SMZ Y*\Uw!MT :T2S:S2T!"T>SGR+s#r*TMT :T2S*S|!T2S:S2xSSR?R*T&QSJR+s#r*S|2T:*S *S#N! *S6 7 7!Sr+s+q+q!S6N*SDMN:SSN͜:S.:S/!S!]6 !m6 !Sp"xU!vU4 :wU!T6!S6k" #͸ Ͱ>SGR?*S|2SJ*S|2S!S:O2S*S|!SO:O2S*S|O:S2SSR?character $Initial default drive ($:) ? $Top page of memory $Bank switched memory $Common memory base page $Long error messages *kUDMN*kU~ u (7*mUN !rU6>!rUd *mU#"mU:rU:O/HQ *mU6] ,7*mUN !rU4% *mU++"mUNÀ *mUN*oU ^Uq:^UO! N7:^UO! N7!`Up+q 7*_U|O *_U}O H7!aUq*aU&QDM( !cUp+q!hU6!fU60!'"dU>bUGRŠ Oڡ*S&QDM*Teù*S&QDM*Te*TMT :T!Sw:O6!S6:S2xSS S? S*S|2T*S|!S+q *S 6 *S 6*S!Sp+q*S!Sp+q*S!Sp+q*S] ͧ!Sp+q*S} ͧ!:Oڭ!T>O:S2S*S|O:S!T2S:S=2S*S|O:S2SzM$:O;*.U*S*PU |!SO:O2S*S|O:S2$Double allocation vectors $Accept new system definition $ CP/M 3.0 System Generation Copyright (C) 1982, Digital Research !pU6!rU6Se!uUr+s+q:Oڣ >!wU6#q#p!vU6:O!vUڃ*vU&QO  tU:R|:sU1*vU&QO  ~ o&)*T"T*S&QDM*Te*TMT :T!Sw:OE:T2T *T&S  :S2S_! ʹQ!0*T&S q*S&T?R>!U6>!UI*U&)*T>RRB*U&)*TV͞Q"T *T## *T UR*T URH*T *UDMS *ySRSJRҮ?ͧ*yS+R}<2U!U6!U:U*U&QV "SDMͧ *UDM> !U4*SDM?N  ,7*OM ,7*OM N:UX N!U6:O!Uڶ!U6:Uگ:U =O!P ~2S*U&QO DM *U&Q#F!V "U"UURŸ!T6ä!T6*U?Rһ*UV͞Q!y"T!T6T?RA!U6>!U(*U&)*T>RR!*U&)s#r!U4\:O/!U#!T6!S44#44!U6>!UY*U&U) >w#6*U&0U) >w#6!U4):P/:O/Hq!U6v!U6!".U"PU}! ʹQ0*T&S q:T 2T*S&Q"S$S TV !QS6#6#6:O2S:O2SS1S S9S Sͧ 0S URH*T URH*T URHB!U6!U4”:U!U6!U6!U6>!U *U&)*TV͞Q"T*U&)V*yS"S!Ur+s+q:UʯS1S S9S *Un}2QS*U#~2RS0S VS?R}0R}S͚Q+s#r*U&)+!Us+6:U!Uڜ>O  N`iR!q#p*U&QO  ~ͧì*U&QO  ~7ͧì*U&QO ~2UO*TV͞Q"T UR!!T6!U4:O/!T<!T6A!T6UV V*U"U~a>>!Us+p+q+p+q%N*UDM2U2U>!Uڲ*U&)*T>RRʫ*U&)*TV͞Q"T V͞Q"T*T UR+N:UAO7:7!U6*T ^#V!ʹQ*!QS6]Tͧ 0S 0S :PK!P6:T2O:O/2OSUS S]S ;J!S6N!}Ur+s+p+q*zU6 *zU#6 *|U|O! *z*T>RR*T ?Rң!U6*T UR:U!U6N:UO!P ~2S *T V͞Q"T N#F`i))"UN:UASGR+s#rBKͧ 0S^ !U4s0S *UQS :ORw R ! S"U!S"U!R"U!S"U!R"U!S"U!O N "U|}O:OHwMN!U:O*U&QO  Hq!U:OO`iR*U&QO  q#pì*U}2U!N 7*UDM(  7*UMI :O *T&S *UDM :T 2T*T&S DM*UW:T2T*T&S *U&QW:T2T*ݱU&Q*U&U) q#p*U&U) .U͏Q+s#r*T UR«'N:UAO7:7!U6*T >͛Q!ʹQ*U&0U) s#r*U&) PUU## w*|U|O! *zU w*|U}O! *zU w*|U}O! *zU w!S:SO`iRV "U :Ow*U :O7N*U&O DM͸ ͜*U&O ~9*T q#p:Of!U6*U&T) *Us#r*U* U" U*U͑ 2U…*U#DMS  *UDMS *UDM9eͧVͧ *UDM> *U*Vs#r*U##*Vs#r*U *Vs#r*UDM> !U6U6!U6!U:U#Ҭ*U&QO ~2U  2U!O  *U&QO  ¥!U:U/+~!U/H|ͧ!U6T&S ) :T2T!Up+q*U"RVM6,ͧ*UDM !Ur+s+p+q*U^#V"yS*U##^#V"{S*U ^#V"}S*U#DMS Q+s#r *T ͫQ*U&0U) Q+s#r!U4†:UҼ͜:S2O!S:O2O!"O!O6!U6ON:P2S O N*OMOw*U :Ow.*U :Ow*U :OwX*U   :ODW*U >w:P/:O/HbW*U >@wmW*U >w^*U :Ow!V"UN*U&QO  *T w*U&QO N`iR!N`iR!UR *T q#p*U&QO  U:R+å:U!U+~!UH<N*U&QO :Uw!U6å:U!U+~!UHҥN!U:U*U&QO  Hq!U:UO** $ Overlay Directory buffer for drive $: $ Number of directory buffers for drive $: $Minumum numb6:mD#!S6!S6 Available space in 256 byte pages: $TPA =$, Bank 0 =$, Other banks =$Unable to allocate Dir des#r*U&))  >w#6!U6>!Uڈ**U&QNP VGRHҁ**U&)),V  *U: R+s#r*U&QNP  6ʤ!*SMZ A2U*UM͌ ڞ!a!:U2O͜͜:P2SO *O&R"S:P2SNO͸ ͜:O/2S:O":P2SOffers is 1. $ Number of data buffers for drive $: $ Share buffer(s) with which drive ($:) ? $ `iR*U&QO  q#p!U6!U4ÈA!U42͜!U6:O!U? :UNN:U=O *U&QO NI *Uer of buffers is 1. $ Number of directory buffers for drive $: $ *** Maximum number of directory buffers *** ***blocking buffer space.$Unable to allocate Data deblocking buffer space.$Unable to allocate Data deblocking buffer space.$Drive s!U4*!U4“)!U6>!U**U&QO  *U&U) N#Fq#p*U&QO  *U&U w!U4”*:O*!&V6*!&V6 ! ͜:P2SNO͸ ͜:":Q2S͜NP͸ ͜!O6!S6!U6͜NU͸ ͜ :O2T!O4:O/2O:N0S. 0S~ !PS Allocate buffers outside of Common $ Accept new buffer definitions $!U6>!Uڎ)*U&)*T>RRʇ)*U&)*TV͞Q&QO  NI :O5 N*U&QO  N ͜!U4¾!S6!U6%NU͸ ͜PNTS2Uʯ SUS  for the current drive is$. *** *** Number of directory buffers reduced *** *** accordingly. *** $pecified has not been defined. $0FFFFH is an invalid value in the DPH directory BCB address field.$ Setting up Blocking/DeblocU6:U2:&V=2)V!"'V"$V}2U!U6*S&R* U)R""V:OQ+.U"V:R*PU)R""V!U6>!Uڞ+*U&U) *U&QO  N#6!U6>!Uڢ"*U&S 6!U4‡"!U6>!U"*U&S 6$!U4§"!T6*T&S  !T6S1S S9S Vͧ 0S"T UR*T URHk) *T V͞Q"T*T ^: *U&QNP q#p*U&QNP  6*T UR‡)S]S N!U6U͸ ͜:UҦ vETS ÷ !S6+6!U6\ :UY":Q2S͜NP͸ :P2S͜͜NO͸ ͜͜:P2S Share buffer(s) with which drive ($:) ? $ *** Data buffer required and *** *** allocated for drive $: king buffers: $ The physical record size is$: $ *** Directory buffer required *** *** and allocated for drive $: *Fq#p*U&QNP  6!U4V+!U6!U6#6!U6n&)),V  ^#V" V*U&)),V >RR:UHҝ2:U+$N!U6%N*^ 0S^ V?R#R"S!U6>!UA#*U&T) >w#6!U4!#!" U:]Az#!S6#6!U6>!Uw#*U&P 6!U4\#Â#!S6#$ͧ!U4(!U6>!Uڏ*!"V}2U>!U)*U&QNP V VͧQ>&R:UHM,! VR+s#r!U4,! VR+s#r:Uʂ2*U&)*TV͞Q"T V͞QZ,!U4n&)),V  ^#V" V+!S6!U6:U2A(NU͸ ͜+!"V}2Uo&"V2U>!U(4*U&QNP  ~!4*U&QNP*U&QNP  DM  *U&QNP  >w:U1!U6*U&QNP  ~1'ͧ (N:UAO7>(*U&QNP  DM o&)*TV͞Q"T!NP  >57*T ^#V"VC7*T ^#V"V* V"T *Vs#r!U4> VͧQ>&R:UHҍ7! V/:U[O!P ~2S'N*U&QNP  ~AO72'NSe:S.*SMZ A2U*UM͌ .Ò.*UMͺD.Ò.*U&QNP  :Uw,V  ^#V" V*U&)),V >RR:UHҸ7!U6> VͧQ>&R:UHi5! VR+s#r!U465! VR+s#r:Uʝ7*"T >͛QR"V *T UR­,!U6ò,!U6*T UR/A*U&QNP  >w:Oړ-:U-!U6*U&QNP  6  ~ >Hn3:O/3!U4T3*U&QNP !^N#FQ*V"V*U&QNP  ^*V"V*U&QNP  ~ ø0*U&QNP  ~1:U?1!U6*U&QNP  :Uwÿ1:UkO!P ~2SA(N*U&QNP  ~AO7s(NSe:Sʼ1R+s#r!U4Z7! VR+s#rv5!U4n&)),V  ^#V" V5!U6>!U8*U&T) >RR8*U&)*TV͞Q"T *Vs#r*U&/*UMB/2*T UR!2!U6*U&QNP >RRc/*T q#p*U&QNP  6!2A*U&QNP  >w:O^U&)*TV͞Q"T*U&QNP  >^6*U&QNP  ~6**V6 **V *Vs#r*U&QNP V͏Q+s#r*T *Vs#r:&V2%N:UAO7}%NÐ-:U{O!P ~2S%N:UAO7%N*U&QNP  DM͸ ͜*U&QNP  ~~-*U&QNP  6Ð-* >H!4:O3!U4*U&QNP  ~3*U&QNP !^N#FQ*V"V4*U&QNP !^N#FQ*SMZ A2U*UM͌ ښ1O1*UMͺDҨ1O1*U&QNP  :Uw͜*U&QNP  :Uw!2:S!U2:U+O!P ~2Sy(N*U&QT) V͏Q+s#r!U4½7!U6>!Uگ8*U&)*TV͞Q"T*U&U) >RRp8*T *Vs#r*U&U) V͏Q+s#r*U&0U) >RR0:U/:U/!U6!U6*U&QNP  68'N:UAO7}'N/:U/!U6!U6:U[0:UƋO!P ~2S'N:UAO7'V͚Q+s#r:&V*V͚Q+s#r^6*T" V*U&QNP  n&)*TV͞Q"T ^#V"V* V"T *Vs#r*U&QNP  >V7*U&QNU&QNP  6'.:U;O!P ~2S%N:UAO7%*U&QNP  DM  :U'.!U6*U&QNP  ~'.%ͧ&N*V"V*U&QNP  ^*V"V!U42*&V&*VQ*U&) "V:Oڲ8V*S"*V*V*S*V * U *PU *.U |O:OO:SNP  DM͸ ͜*UMB!22!U6*U: $VR+s#r!U4> VͧQ>&R:UHr2! VR+s#r!U4?2! VR+s#rʨ8*T *Vs#r*U&0U) V͏Q+s#r!U48A!U6>!U8*U&U) *U&QO  N#Fq#p!U4·8*PU*V*.U "V>N*U&QNP  DM͸ ͜*U&QNP  ~D0*U&QNP  6[0*U&QNP  6!U61:UKO!P ~2S'N:UAO7'P  ~6**V6 **V *Vs#r*U&QNP V͏Q+s#r*T *Vs#r:&VV͚Q+s#r:&V*V͚Q+s#rV7*T" V*U&QNP  >:UAO7K&*U&QNP  DM  -*U&QNP  ~VGRl.N&N*VDM( &N*U&QNP  *Vs*U&QNP  ~‘2SO:S2S:S2S:S2S|2S!S2OV"S*S&R*S "V*V "V*yS" V* VV !SUR4* VV 6* V#" V4!U6n&))SGRS:RH:9*V*S|O:OO:S2ST9*V*S|O:OO:S2S!S:S2S:S2S:S2S:O2O*S}0R}͏Q+s#r **V 6:&VV͚Q+s#r **V s#r:&V*V͚Q+s#r!U4ˆ>:&V*VGR+s#r! >w#6:&V*V͚Q+s#r!U4> VͧQ>&R:UQNP w#6:&V*V͚Q+s#r*U&QNP  >?*U&*vV&QO  ?R+s#r,D!&V:)V2)V*qV&QNP  ~oDzV"V:R+s#rR:O0RlD$ͧ>ðD*zV͑ 2yV‘DQO  N`iR* V)R!q#p!U6n&)),V  ^#V" V*U&)),V >RR:UHF@!U6> VͧQ>&R:U͜͜!rVs+q*qV&QNP ^#V"zV:O>B:&VzV͚Q"VJR+s#r÷D!)V55:rVaC*qV&QNP  ~2sV!tV6:sV!tV^C!&V:)V C!)V6*'VS͚QSJR" V>SGRS:RH9*V|O:O2S*S}0R}S͚QV"V*S&R"V*S&R*S "V::*V* VH@! VR+s#r!U4?! VR+s#r(!U{@*U&U *U&QO  w!U4K@!U6QNP  ~W>*T" V*U&QNP  n&)*TV͞Q"T ^#V"V* V"T *Vs#r?*V*Vs#r*T *Vs#r*V##"V*V##H$ͧ>ðD*yV&QO  zV:R+s#r!tV4zC>!|Vq*|V: $VͬQ>&RD>y$ͧ>ERROR: $ at line $MissiH<! VR+s#r!U4;! VR+s#r:U+@*U&)*TV͞Q"T*U&QNP  >=*U&QNP  ~¸<*T" V*U&Q#"'V!vV6!xV6!uV6:O!uVB*uV&QO  2wV!O  ~:xV!wVHB:uV2vV:wV2xV!uV4“B*vV&QO  |O:O2SV*S"VO`iR* V "V*S&R*S "V*V*V"S*S|O:S2S*U&)*V"*V*V"VVS?R"S*yS" V* V>!UA*U&)*TV͞Q"T*U&U) >RR@*T *Vs#r*U&U) V͏Q+s#r*U&0U) >RR A*T *Vs#r*U&0U"V!U6*U&QNP  ~!Uھ?*U&QNP  ~\?*U&QNP ^#V͑ 2U**V6*U&QO N`iR!N`iR!ng parameter variable$Equals (=) delimiter missing$Invalid drive ignored$Invalid character$Invalid parameter variable$!"VVNP  n&)*TV͞Q"T ^#V"V* V"T *Vs#r=*V*Vs#r*T *Vs#r*V##"V*V##"V!U6*U&QNP  ~!Uڽ?R+s#rC!&V:)V2)V*zV͑ 2yV8C#ͧ>WC*yV&QO  zV:R+s#r!tV4dB÷D*qV&QNP  ~2sV!tV6:sV!tVV !SURҠ:* VV 6* V#" V|:!U6!U6!U6:O!U;*U&QO  2U!O  ~:U!UH::U2U:U2U!) V͏Q+s#r!U4€@!"lV"nV!pV6:O!pVڐA*pV&QO  ~iA*pV&QO  R*lV"lVÉA*pV&QO  UR  **V q#p*U&QO   **V w*U&QO  *U&QNP nVGR>lVGRHA!U6B!U6:V"F!V6TSF!V6&F!V4F*V&V ~2V:V :V H:V H}F:V jF*V#"VF*V&V ~2V7F:VL*V&V 6,*V#"V*VNML*V&V 6 L*V&V 6 !V4K!V4J>!VLTS^ TS :VMTS^ !V6>!VM*V&V 6}V HҘJ!V4\J:V¨J!V6ìJ!V4EJ:VڹJ>:VVͧ TS. TS~ !V6!V6>!VL!V6#n& QN  ~2V!:V0/>9!V/HҢH:V02VìH:VA 2V *V&QN  ^*V&Q*V"V*V&S ~?I *V&QN  :VO!P 6OBOOTDRV OMEMTOP OBNKSWT OCOMBAS OLERROR  ONUMSEGS  OMEMSEG00 OHASHDRVAOALTBNKSA +QPNDIRRECA a/>z!V/HҜF:V_2V:V©F!V6:V!V6:V/:V/HG!V6>!VF*V&}V 6 !V4F'F2V!V6:V:V=H!V4L!V6M!V4!VqL:VO! *V&V wL:VO! *V&V w?N*ySDM}o{M*R9N]!?V6:V:V/HҽL!V6>!VQKL *V&QN *V& *V&V w!V4K:VcK!V6êK:VK:VA*V&V wêK:i`N#Fog_og_ogDM!>))덑o|gQ =»Q^#V))) DM!>))Q =Qi`N#Fog!S6!V4!S5>!S:J:VZI*V&S ~A/>P/HOI*V&S ~A*VwWI3EͽE:J:VzI*V&S ~Y*Vw:J!V6*;RPNDTARECA KSPODIRDRVA [TPODTADRVA kUPOVLYDIRA {VPOVLYDTAA WPCRDATAF PDBLALV PO:V H:V/H1G*V&}V :Vw'F2V!V4F:V=:V H:V/HZG'F2V1G:VG:V=>!VHҀG!V6GN>2NV:xSgx3N {֦½M:N¹M*R!?N9N~#o}o/N !VHJ>!VI:V2VJ! :V=“GDͽEãG:VʣGEͽE:V :V/HG'F2VãGòF'F2V!V6!S:V:V H:V/HH*V&S :Vw!V4Sg:SN'N>:S-N:So'N-N:xSgÏM!|!|:V LL*V~A*V&V wÚL:VQLL*V~CL*V&V 6YNL*V&V 6NÚL*VNM:VšLL*V&V 6,*V#"V*VNMBNKBIOS3SPRRESBDOS3SPRV6!V:V+J*V^*V&Q*V& s3JIEͽE!V4‰I!V6!V6:V:V/HүJ!V6:V *V&QN *V& *V&~`i+w'F2VG:V :V/H+H'F2VH!V6#6>!V:J *V&QN  ^#V"V!N  ~2VH:VʀH:VA2VìHPRTMSG OPAGWID OPAGLEN OBACKSPC ORUBOUT BNKBDOS3SPRCPM3 SYSGENCPM DAT+"}{_}o>2~77ø~7"9:OG#Q{ozg# ""x>QGQx3ڰbڼqҼo5p5"""*!yb! ~G*!NKկ2~ a{ ##~ 2m#~2n*m" : aB{B @2\! :\Ҥ!e~ #Z!CO"e>M2g>2 zÖ: *@ "H$UUT$$ $I D$BA@! B$$A IA $!"  @$@$BI!!@""$DA   . $BB!*$K*"x!*!@$@hK\K:K ~#~ w*NK*NK^#V#N#F!e}C|O:gM>2 *e}P|R:gL>2 \2 |: @: ,?<2 L*>2 ó!>2 654321$Nwy!"(9"f1f! Ҕ2! ~#foCOPYRIGHT 1998, CALDERA, INC. 101198$I$@!",!."*K6*}ʴ}<ʴ.}o|g "($Kt>=2(*f*(}DɯQ"(>QKQKQ>Q"%Q6 =++w: #<: +=6 ?>!6 #=D!~a_{_ w#Q: Ƃ2 * 6 : ʝʯKK{<<ʽ<K : >! ~6 69BK! OSPATCH VERSION3.0 PATCH.COM Copyright 1998, Caldera, Inc. 101198654321Ãà à Ã!2*%DM**ѵ+)) H~#+}#<:<ʲ<77:<ʢ2 '0: =„>2 '0:S ʂ>2 '0: =±! 3 #:! ]* } 1]:]>2 >2 }!,"**NK6 :+OK2$^#V#N#FxNp:$p:Gjxj Y# A>QFQ:o2! *m" -< |#}0#:] <>2   : : :3! ]~. a{ ##eÃ1j$|A: N* | :02# }0 _'_:# 2$ !]}02$ * " * " ? <͍ <ͭ* |́* }́* |́* }́$Invalid patch number: $Drive $ is R/O$ on $Illegal drive: $ Enter File: $ Enter Password: $ Do you want to indicate that patmented ; JP BOOT ; * perform cold start initialization JP WBOOT ; perform warm start initialization JP CONST ; cheB* | B!]>I.C!e>I<:\̹@B:C<: 0B C:" 2( :" 00B:( 0B C: 9; CP/M 3 LDRBIOS for Z80-Simulator ; ; Copyright (C) 1989-2006 by Udo Munk ; .Z80 ; ; I/O ports ; CONSTA EQU 0 ;consol2 >:" '2" {2 z2 : 2 ܻ: WÈ* |}* |}: _:$ d:$ G* |}* |}2 :ch $ Valid file types: COM or PRL$ Valid patch numbers: 1-32$ Current patches for $ WARNING: Patches greater than $ existck for console input char ready JP CONIN ; read console character in JP CONOUT ; * write console character out JP LIST:<!e>b  9O9$9p<!>b9f<:] ͍ͣ9<!m>I#   <e status port CONDAT EQU 1 ;console data port FDCD EQU 10 ;fdc-port: # of drive FDCT EQU 11 ;fdc-port: # of track FDCS EQ {2 x < <͍ C?C C >2% % :' YPyPtz\ V xw <͍ <:$ for $ has been installed$ already exists for $ Patch $None$ for $ Patch installed$ Patch not installed$ $ $: $ ; write list character out JP AUXOUT ; write auxiliary output char JP AUXIN ; read auxiliary input char JP HOME 9ͣ< <9͍9<:\@B:C|zʒt< <1Q ̓ͮUtͳr CU 12 ;fdc-port: # of sector FDCOP EQU 13 ;fdc-port: command FDCST EQU 14 ;fdc-port: status DMAL EQU 15 ;dma-port: dma addҏکÜ:$ 2) >:$ 2) >:$ 2) >:$ =2) >2* ! :* O "+ !9 :) O F*+ ~w x <͍:  COMPRL101198 @ ; * move head to track 0 on selcted disk JP SELDSK ; * select disk drive JP SETTRK ; * set track number JP SETSEC ; * P/M 3 PATCH - Version 3.0$ ERROR: $PATCH requires CP/M 3$Invalid file type: .$Serial number mismatch$No file: $False password: ress low DMAH EQU 16 ;dma-port: dma address high ; CSEG ; ; jump vector for individual subroutines ; * needs to be imple> > 2}!"~"\ʽtS \ _" 2 ~ B* : #=I" 2 ^C* : #=b<* }set sector number JP SETDMA ; * set dma address JP READ ; * read specified sector JP WRITE ; write specified sector 16,22 ;sectors 25,26 ; ; disk parameter block for the IBM 8" disk ; DPB0: DEFW 26 ;sectors per track DEFB 3 ;block shiisk parameter block DEFW 0FFFEH ;checksum vector DEFW 0FFFEH ;allocation vector DEFW 0FFFEH ;directory buffer controve ; translate this call into a settrk call with parameter 00 ; HOME: LD C,0 ;select track 0 JP SETTRK ;we will move to 0 to memory move JP TIME ; time set/get signal JP SELMEM ; select bank of memory JP SETBNK ; specify bank for dma OR A JP Z,WBOOT LD C,A CALL CONOUT INC HL JP BOOTL ; ; those are not implemented in loader bios ; WBOOT: CONST: JP LISTST ; return list status JP SECTRAN ; * translate logical to physical sector JP CONOST ; return output status ft factor DEFB 7 ;block mask DEFB 0 ;extent mask DEFW 242 ;disk size-1 DEFW 63 ;directory max DEFB 192 ;alloc 0 l block DEFW 0FFFFH ;dtabcb not used DEFW 0FFFFH ;hashing not used DEFB 0 ;hash bank ; ; sector translate vector f0 on first read/write ; ; select disk given by register C ; SELDSK: LD HL,0000H ;error return code LD A,C CP 0 ;we bootoperation JP XMOVE ; set bank for memory dma transfer JP 0 ; reserved for system implementor JP 0 ; reserved for CONIN: LIST: AUXOUT: AUXIN: WRITE: LISTST: CONOST: AUXIST: AUXOST: DEVTBL: DEVINI: DRVTBL: MULTIO: FLUSH: TIME: Sof console JP AUXIST ; return input status of aux. port JP AUXOST ; return output status of aux. port JP DEVTBL ; DEFB 0 ;alloc 1 DEFW 16 ;check size DEFW 2 ;track offset DEFB 0,0 ;physical sector size and shift ; ; signon messagor the IBM 8" disk ; TRANS: DEFB 1,7,13,19 ;sectors 1,2,3,4 DEFB 25,5,11,17 ;sectors 5,6,7,8 DEFB 23,3,9,15 ;sectors 9,10, from drive 0 only RET NZ ;return error ; disk number is in the proper range ; return proper disk parameter header address future use JP 0 ; reserved for future use ; ; fixed data tables for a IBM-compatible 8" disk ; ; disk parameter header ELMEM: SETBNK: XMOVE: RET ; ; console character output from register c ; CONOUT: LD A,C ;get to accumulator OUT (CONDAT return address of character i/o table JP DEVINI ; initialize character i/o devices JP DRVTBL ; return address of diske ; SIGNON: DEFB 13,10 DEFM 'LDRBIOS3 V1.1 for Z80SIM, ' DEFM 'Copyright 1989-2006 by Udo Munk' DEFB 13,10,0 ; ; end o11,12 DEFB 21,2,8,14 ;sectors 13,14,15,16 DEFB 20,26,6,12 ;sectors 17,18,19,20 DEFB 18,24,4,10 ;sectors 21,22,23,24 DEFB OUT (FDCD),A ;selekt disk drive LD HL,DPH0 RET ; ; set track given by register c ; SETTRK: LD A,C OUT (FDCT),A RET ; DPH0: DEFW TRANS ;sector translation table DB 0,0,0,0,0,0,0,0,0 ;bdos scratch area DB 0 ;media flag DEFW DPB0 ;d),A ;send character to console RET ; ; ; i/o drivers for the disk follow ; ; move to the track 00 position of current dri drive table JP MULTIO ; set number of sectors to read/write JP FLUSH ; flush deblocking buffers JP MOVE ; * memoryf fixed tables ; ; individual subroutines to perform each function ; BOOT: LD HL,SIGNON ;print message BOOTL: LD A,(HL) ; ; set sector given by register c ; SETSEC: LD A,C OUT (FDCS),A RET ; ; translate the sector given by BC using the DʋX2[?~+ACDEMNOPQRUVX!>~ p:>2>Žw:9==28=͖q:,=ʨNЯ2,=4OMگ!F> 2H=J> J7ò- !"C=20==2?*="=:H=*>$2H=$2E=U :ʋ:E=ZUB#UBTTL*UI$ITLECHGR@ORRA*RITHL680807Z80%COMMENT&CREF'DEPHASE(LALL;LFCOND)LIST move ; MOVE: EX DE,HL LDIR EX DE,HL RET ; ENDDAT EQU $ ;end END ;of bios N LOBALkvALTvLTF2FB9FDIFFEFF:FIDN3FNBFTaM)NQNRNC8NCLUDErNDsNDRrNIsNIR"NRNXF1F2FDEFFNDEFR; translate table given by DE ; SECTRAN: EX DE,HL ;hl=.trans ADD HL,BC ;hl=.trans(sector) LD L,(HL) ;l = trans(sector%No END statement:=.ʊ$ʒ[$Nwy#*F=+~# ʿ+U ~#~"RR *F=+"F=:(=k+s -"x-ʯ7D*PASS2+PHASE,PRINTX-RADIX5REQUEST.SALL!+@=~vO#~ Q w#6 #wD̈́K>2<2@2>2-=PRPC1C1M2MP2NC2NZ1PQP2PE2POQR1ZQD2:DA DAXrDDsDDRrDIsDIR3*HLDOCALJXI8ACLIBACRO:@OVBVIAMErDEGOP) LD H,0 ;hl= trans(sector) RET ;with value in hl ; ; set dma address given by registers b and c ; SETDMA: LD A,C ;l=(('()-((5*5,,))))))))h6f6(5C,~&+*A4**i7+9M+ +[9;7+U+\+!++))*+++,))d+h+2<2<2=2<2?2=!= w#—<2(=2.=2/=2=> 2<:@2<:@2*=>;23=<22=!"4=+"@+"6=*'@!!62[?21=2+=29=2?<2)=?!H="jOPQRRARG*RIsTDRsTIR*UTR UTsUTDsUTIAGECHLOPR"OP UBLICUSHS$USHALARC!EPTZ&ESETR(ETsMETIsEETN IMow order address OUT (DMAL),A LD A,B ;high order address OUT (DMAH),A ;in dma RET ; ; perform read operation ; READ>YTE3ALLSALL1Cj?CF1M/MA?MCMP2NC2NZOMMONOND1PQ PrPDsPDR2PE*PIrPIsPIRj/PL2POSEG1Z'AAj'AA ADBC"CR#N1! ; !H="F=*C=|U :(=lÍ'!==Nwy#3!>">!> q#K6 U l;l:<—:>VʋMʋm+'-@  F"  (85vCd} *F=~#"F= oA 0F= ~# R*4=#"4=!"6=:2==23=!9=>2@2@͖ CCl CC0Cw#C!H= ʎ ~w# Y*LjLALCZ,LCkLCAroLDMNCNZPPEPOY.RjRARCZ0RCkRCArgRD"STR2STZBB*BIR4BCj7CFZ6ET"ET3"HLD0IMZ8LAPHLZ:RA: XOR A ;read command -> a OUT (FDCOP),A ;start i/o operation IN A,(FDCST) ;status of i/o operation -> a RET ; ; memory CXR ECEFB"EFLEFMEFSEFWIiISJNZSSEGWIiILSE ND NDC NDIF NDM NTRY QUQXjXXXITMXTXTERNALXTR : 7}ɷ[ a { } 6 *F=+"F=*F=#"F= aS 6 != q#a !=6#ͱ  2<a w*[:<ʯĝ;>L{Nԝ:<ĝc:<=ĝNԝc>LcnAÜNԝcn [:<ĝ>Lĝ;{VZԝBxL{?LZ8ĝBLNܝc:<Ü̓ :>H:<0:<Ü>L:< L>2<(YPy:<O:<ĝ>LyWÜ!>?AFwx# 3:<G:<7b*=#"='h'*>'>͍ +*>:@table full |}:<:@:-=*?=~@ڹ >>vL!=F#~vL *p?  G~8#~ +~w#~w#s#r#*=s#rGxĝ> Ü:<ĝ :<[4:<:<ʙԝ c:<ĝÜ([:>:> c:<̝ ڱ:L@ÜNܝ*e R:<fĝ[NܝcH:<(:<ĝ>LcNܝe ĝ>LcNܝ:< ĝ:<ĝ>:<<=<2<ů2< 6 (-2:>6!6"6'6*#">ßG:>@2>:2>!~@w:<# ~a~a#^#V#͍ R*=xD{a#za:> *?=# :0=a*?=~*?=#~wxGõ>LyL@ ʡ>LyC͜(2>2>:<(>"LÒ:<ĝ>2LÒ:< :< ĝ:< `ƝL͜ĝc:<7 G!r?:=' " 2=~!?  "p?^#V!g? w#: !=~K 6!=N zʾ ^#V#^#V#~=y =G‹ #n #~=¸LZԝO*k7:<(>Lں{:<̝ :<Lcĝ>L[/k:<̝"(:ĝH>LKҫ:<ԝ Om-ͷyHLyL:>G¯BxGj*=*=͍ j##T9zC<xx>~ͯ~@ô~ʹ#~?Gxʚ#~72>>A;hS#^#V"=G̓2>#^#V">>C1#^#V+~z><2>=Z6LZ@LZRLZRLyZOLyym-LZRO*ZRv̝LZRĝ>L2*L>LyK͜c:<} :<^:<;͜{:<  s:<񇇇@OÜ #"?=#~+?j?!g?w#Ÿ w#s#rP P +>Ð <*A=~*@####~7#_"@:=$.?_ ;O$ < :<*cy  :<Ü:<Ü>%{ :L/:<L>FL;{N*c:m-ë*ů2< 6 (2>B#~Š:>@>§>2>>A;''2>{2>!>"?=ͩ:<*=##"=:>G:>@x̓:>G̓*>*ZOLyZ@*m-L6 ,ɷÝKN͝Ým-zf<ĝ{Y! ^#N! ^#:<ĝ>LGÜ:<( c`ƝLp:<͜(@{ĝ>:L[ĝ:< Ü;c>6LKB(@{"?=͓ *n?z :m?O s#rw# & =7 >wG#w"?=#w#w#w###w#I "A=####p*@͍ ;*?=|>!x F?Symbol <ʴ ĝ:<ĝ>LyBONĝe ̝c:<ĝ5N*c:<ʴ(:<ĝ â:<Nܝe ̝c:<̝#">C'B'x&x746!96**>##~#fo6"6'##">̓xP:>@xʈ:C+B+x*=++*>#:=G~w#s#r#S ~Œ2< ;ʹ ʹ° & × °6 þ*F= # #7 -#~G ĵxw+!"F=$ t:<)ʯ+ʲ-ʵ*ʸ/ʻ;ʨ,ʨ >>>> > > >!G) # ) o2=) # x) eo) n=   P#Z#d#n###N$$%##Q%\%h%u%{%%%%#%&&&-&C&c&̈́$zW{_̈́$zW{_̈́$zW{_*>|/W}/_:W?O>L!1>!*4=#|+:/=ʤ*6=#"6=:/=|ʾ>-vLZ!>ZZ>SvLä~#vLPX |>:d MACRO-80 6 ,8!:>8!2>> ß!:W?O:>O!f! "x̓!G:W?O`!"f!ó _y{y!*=YG*=s#rC'B'b:>2>:>x̓³z ĩ2>*>#~2>*>#>͍ +*>:@)0) 0ʮ:<7͓ $ !*@w!7 Gx22>">ĩ:<>C~@x##^#VOQb#^#V"=y y¾þ7͓ "?=~=x*F=+H 2=*F=++"F=H "F=GHg:<o|DHB} |BwDʕHʝOdQ•ͼOqQ þ!H B%%*>|/W}/_:W?O>%%̈́$zʬ#)â#̈́$#+}zW{_ò#*>:W?y#:W?O2>:W? #*="=*>͔$>%%* 3.44 09-Dec-81 PAGE :> Q)*<#"<*<#" !>">O!f ~*>w!>"> '"!*=:=*=:=:ó !"_~xž!ůG|2>?"y2W?͎!!F%:W?Of!è!@ 2W?:W?G2>O! x怱!>w*F=+N{*>2>z">DExx0:(:*=G:)=G:(=N:/=S:> ~:> o:@  þ:=X # '¿ 'nq0Ի)z#zͥDnHn!H 0)T]))_è!H 0Ի)))_ÿ!H G0 ))))_Hû:<>G$:W?%$%$y%$$$:W?%$ ?$=:W?9$y9$2>:W?O>%%{_zW*>i$:W?O> %%i$ DM!>=ʂ$))p$=x¦*=*=͍ "?="=ĩ:A> y> C+B+y*?=+~xGW> #######Fyx |= yWx=z6"z6"ʳ 6"6"6" >G̓!Gó "Y?zR" ͪ""=">y2W?͎!"ʡ"2X?ʋ"ʋ"ʋ"?ʿ=Ÿ:?Ÿ:.=¿>+2+>ÿ>+2+>:> ¿:.=:> :1=:,=>C2*>:[?:/=:> !3=4:2=p:[?:@>vL!>$¿j OþXOR AND NOT MOD SHL SHR OR EQ NE LT LE GT GE LOW HIGHNUL TYPE :< :<::W?y*>ͳ$:W?O> %%zzB%|G|$|%$%|/G}/O!>$ $7>{_zW}o|G+#W>_xGxGFɯFxGF .7FxFx!>~w#4ZL>2>U C \ \'"(ʬʋ"ʋ"ͪ":X?*Y?!#o>g~#fo:W?O*Y?ʶ"y}!"=y%"*="""*>"{%z% ~#d:+=Z:?=##:?#!9=~#06d(>C:8=H> d!H=~# Z dK> d> dO:[?yvLJ>23=:/=ʍ> v ɯG og2>2>2=2<2>2>2>2<2<9">*)@͍ 4\!]!~!! f!O2>̓!=y "" "?"y2W?͎!z5%|5%|ͳ$%:W?O> %%>O!G͙%͍ o%͙%͍ ?o%͙%͍ W_ ͙%È%͙%͍Y+>22<(2 {=ʝҝ<2 +{22=+?pU :=+>!)zP))z/P)P):<@ =P):<@ P)7:(=)U $ )) )P)?P):(=(! "F=P)72*)"F=x))72*)9*)@͍ 4:?!"#@"%@*?#0*)@+<2?2?2@*@$͍ >0"?%O;.0~<=r0:@<2@:@:@=2@<#~^0:@^0ͩ2=1 6 "ʠ''(G) ) *F=++' ) '³' ʳ'6 ,';'' "F=(y(# G) ) 'L) -!V?p#"?=ͩ2'!5O"@ A."?=~w#~@k/~.#^#Vͩ.*= ͩ *={ĩn*F=ԃ +!"4="6=}2/=p!/!3=4 o%͙%{_zo%7o%?o%:W?L&*>*>\W:W?O>%*>]W:W?O>:>@2>!>4~?%o%$w5y%:>2>̈́$}R_=w#"?=:<ĩ,+:,= *F=+qN1,4O=2,=*F=~#"F=!5, () 'U ') )@ :<:=x,>=!]?G~~,**#"F=2*-*"F=y))# *)) <ĝ# R* # &R* :**F=+#~>b*T],l*zr* Y*#*F=z̝}O|:@^07"?:?=2? &0*F=~ 0 0U 0"F=0>&2?>1&0:?0>&;:2?*@~ 1=1O+1 0x ȸ'# ( ,ʍ'LÍ'Z:=y,ʍ'̓ x1 "N('ĝO) d( o(GŷLP(xx|(L,4!r?>͗;Z:3=8p!3=44!/!?>͗;Zʹ/*<|.:@<2[?2[?.!L//!O//*<|/>,vL:@<>,J:@<2[?2[?̈́$}R_̈́$}@_̈́$}6_̈́$}Ro{R_̈́$}?_*=*=͍ :W?_ :> Ox&> 2>Էµw#„,p, /U ,/@ #~µ~$w2'+"=>2=!"=ñ&>2=:=U - -~w#~d -~wG:> U Oĝ7 -#~@w ~ĵwy,ʉ*1>O*>; *F=+~# ****#"F= () 'O*6 +~10:@*@~<1=11O+11 #1x+~111<*F=U 0w1G~# \1 d10P1x0G0&06 "F= A(1(h'y,›(ZCä(:@ʹ(z*=#"=:<'ä(*=:=Gõ&2(:<:>U<2>1h'̓ y,(:<=)G2<:<=)2|,/F/ͩ+:@C/>vLKLNo Fatal error(s) Warning(s):=Gͩ./!//,̓ x 2=xGʱ&:=±&*=*=͍ :=G*="=:<ă"= :=&:<ĩ:\?2':\?ȯ2\?U 2'1>G2=<2\?2,,͝-w͵,~Bدw#w#w#wU ~#~>-,"C=m-:>21=Ux¯x 20=*C="?= x4̓ :>"C=~w|) )ĝ@ >2/=Y+2/=Y+2-=Y+U G+ G+ $ :+~@w,U ,+>2-=>2.=Y+2.=@ >2.=Y+}+>}+:@/o: ;:Þ::@1*@4:<<2(=?)2<@ ͣ:<ģ:<̣!<;)=@ 4=2(=<2<@ 51):<_2>W!<7~?)<\)w!<4:(=2(=! Z> Z:@<> J> J!/:@2\?G2=*=õ&2'1>2\?G2=*=õ&:\?,:==`'o& ^#V*=͍ s#r2=*=##K':<ʇ':=ʇ'*= 21=m-x¯*C=-#~µ~@ w#s#r#*=s#r4͸K:?w/:<Ĩ/!<4~=Z.!]?~-!1>~-!@#]?~# . .. .I2* @~82G+#2~/_2~F2=G+~F23*2+<=C2+;2~>.33?*@O DEU Ă2=1Ç6G͕0 ʶ1ʛ6â6"%@;:͞:!*#@* @*?!!64>2@" @͍ 7:@6x 7* @y4ɯ;:͞:!*#@*?!!44͍ 4:@¾4x4*?͔9͊02@*?r:5H=͈:3 4*@*@*?"?"*@*?:?;*)@%T9o zo W{_*@*@T9BK*@"@xE;+w 8;"@O;9*A=*@T9o zo W{_*@T9BK*@*A=" ;Ý+ '}3"}3<ʛ3>ʦ3%2,ʰ3 ʰ3 ʰ3;ʰ3!) 3w+ Ô2"{3q3(:> 63:<.33PX 2@* @!94" @"@2@r:I9H=r:1:3 +9*@* @4* @#2@4}_|W:=̓ :> 2=xx2=*=T##~#7+4r:47H=r:1:3 7* @4 bk6 ʝOJ) V7JG7> J> J:> @ ʝ2 @O ʄ7@@"@ bkë4:?2@+5ů2@@ :@ʊ5U :U O^5yf5y n5y@{5:@=2@:@<2@:@:<(:@@ "@xʕ; w#È;2>2>O!^#V#ͷ; ;:>Zz^#V{;};++V+^{;w#w+++; F#"?=~@#~<~#^#V|2>:f3)0R3>)30R3=363D>3E>3 >0f3xG3x0:R3 f30O:f3>0f3y*{3w+"{36 *{32Ow+9"=:=2=@ !!@Ns#Frͦ9ͯ9q#p*@^#V+*@##^#V+*!@}9ͯ9"!@9*@ "@*)@͍ I;*?%:?͍ I;*@T9ͦ9 u77\4^4!H=: @O~ʥ7 #Ù7!ɷ #"?~(w/"@i2 ,7w+2@2@P)!ɷ/"@i2O:> ʰ5*@͊0y6+,ĝ5) <ĝw+:> G6G5͌2 D6>G65# <2@ 5 G5<<_<{…<{@Đ<{ʈ<{_!f~vLz<###~#vL;<>L<5m<:>wZ!3=4:2=p*?=~@w> |<> vL> ʏ3 3~3w+ ~3Ô2ʢ3w+22322{=*F=+~ 6 6 ʵ3õ3!=͍ 3#6 +>1&3:>1!*%@{_{:s#r#>w#wͯ9%:s#r*:"#@*#@ͦ9s#r{_*%@{̺9*@w{W:a:"%@{_ͯ9zʺ9*@}‚:}2@2@3H08O82@Ç6U ĝ*@18:@<2@=76G67676 w+5:@G66+.0xĝ" @&i"?m6\4>Ô5^4*%@>2@3*>M>C>UvL2<*?=#{G#^#V#^#V"=̓"?=#~ ĩ>IvL!>">*>6!>~G#^#Vͩ  4>1!4r ?Stack overflow, try more P switches (:> O4"?/c4> \^4U :U H0ʄ4H=;: o~r:{ʗ:a:{_ͯ9{ȯw#w*@s#r͔9*#@ͦ9q#p*%@{:*@"%@~{_ͦ9{_{:a:÷IXJ>2@÷IZJ2@÷IP7:@<2@÷IJ[HJ0HJADJ:HJ-JO!~6GzJ#~ cJUJHFx+#tJ~iJ2@ÚJ2@:Hy=7H 7H,A#H 7!@͸H:@!@ܘH!@:@SH@;A> =IHܘH:@hH:@hH:@2@ _2P@JK>*J GF> J:HF!IF"Fo>g6 #> w:@J!IF~ JaJJAw#þJ~# J J K#"F_̈́K%K;K*@##:@2@G,A ~²HHw# ¨H #èH w#»H:@!5A~ Hw#H*J:7>IxHJOx=y&I[QAQBQCQDQEQHQLQMbSPcPSWQIQR bBCbDEbHLbAFjIXDjIYdrNZqZrNCqPrPOrPE?Command error?File not found?Can't enter file~J#F!FF!FF!FFXGCOMSCN*F+~ #KJ#"F+~7ȷ> J> JEB!"CB!@:@NKCA!"AA!@:@K~K͡KIR7JD7R7>I> ڀI6 #=xIF",AF vL> vL>vL*Cy.2@*J5AxژIʥIJÙIy/yJL¾I2@JOæINI2@÷IOI2@÷IRI2@÷ICI2@2@÷IMI2@÷IIJ2@RELCRFPRN<2@2@Fů2@H8AH-A §G>2@!@͸H> 2-A25A2,Ay,2@G:@2@H>A:@G;AH-A:,A2@ 2@G:@@2@!@BEB@NLEB@K:@ʰH:@K>L*AACA@NLCA@K|}YLƀ)`iíL> vL> vL> vL:@ʰH:p+q*<~$ʝ*:o929*p9"95*.:~(*.:~ʐn*.:~)p̀^*.:~*.:~(N@Nw#2@.ʷN!ڷNw#N2@.ʾN!ҥNþN6 #·N:@.Nw#NpMMN2M2M:M=O<͞8-*<&^<) ^#V"d:M*<&^<) q#p!<4*9&))9  *`:s#r*A:)8"p9*9&))9 q#p:9<29O>D@¡M =­L!CA>!@íL:@ʰH:@J*AA|=L#"AABA;*; ";*+":*"::,*;*;":3*.:#":*+":*":**:":*+" ;*" ;**:";*+"9;*";;**;"=;!]:6çCOPYRIGHT (C) 1980 DIGITAL RESEARCH HҍDO:9ʛD*Ͳ!6~̈́6*& 6:2M*M~+O70O#"M0:9=29D:9ڗ*9&))9 ^#V"p9  ^#V"`:*`:DM!96#~ͬ . ":\ -:+: .+: -:9w:@<KM*ED|%M#"EDFDKGD>@=NM!=*M!>JM_!@ sM qM vL~>!]:ڤ*]:&f;) N#F͋41!]:4:u92:2:2;2E;2u;2;2;2;!D:6+6!E:6!"p9!"m9}2o9!z962v92x92w9!t96X!"y:"{:"}:"654321? OVL LINKING $ $ 1L9M9!96w:o9!9D:!""!""!"9*9^#V"9"q:͜*.:#".: =.:<>[],()?$! : @: <_2 <: 5!B".:ͬ zMËM7ȷ!MF@@²M> J!MFKDISK FULL:":":":":":":":":":":":":"i:"k:"m:"o:}2:!:6#6#6*9"q:2C:2D:2E:2R:!"X:o&"Z:|!"s:!"p;";";";":":";":u9 ͥ6**=;"`:"b:q:b:͞8.96`:q:͞8"9|!96wj1:9R,v! !#<ڲ*#<& :<«>!#<4>*.:#".:*.:N2<&õ͵:< ͵!<6 !%<6+6:%< :%<  !. ":\ -ˆ*.:~=Ÿͬ ï.+: -§:9ҹ'*.:~*.:~(H*.:~,Dͬ :9'ù:w92y9:9F:9!M:>7;*+":*+":*+" ;*+"9;!":":";"?;!":":";"A;:9*b::9=o&))9  ^#V!!<4*<&^<) <6͸ !\6͊ !!%<6͊> :%<5 !͸ ͵" :<:„ :\:%<Hb !:]A<2\O>v !*%<&\ 65*0< *0<##N#Fq#pä*0<##q#p*u:#^#V*u: ^#V*u: ^#V*u:~*u:~*u:>*u:~*u: ^#V*w: ^#V*)<& "+:h= !6͵Ý :!Q: D*Q:&J: :E<ͫ8F*P<&i:) *q:s#rN*q:DMͷ!V<6>!V<ڷ!"Y<*V<&i:) ^#V"u:>u:ͫ8ʝ ô !%<6:<.° ͵͊ڰ :%< ڧ !͸ ͵Ô ! :%<<2% :<02<> : :>!8:=<Hw!>:><Hw!?:?<":> >!:*!^:6+":^:$t 8'> *0< ~L*0< DMB5*0< 6*0*>ɡc :![<,*[<&i:) ^#V"u:*[<&<) N#F.>u:ͫ8%Okͥ!"&<͵͊6 - *&<))))*<& "&<0 D͵ *&<:/͵: W :ZD͵:Hw!@:@<Hw!B͔8>ͥG<0<##N#F+q#p*0< ͹8ک+*0<##>w#6!4d:ͫ8ʆh!q=}*o=*d: DM*q=>*}U!r=}>M :!a=q*d: :aڎ :͔8$>ͥG<ͮ8!TJ<ͫ8:P<Hr:Q<ҁ!U<6 Æ0<##>w#6*0<##N#F*.< ~O`i~8p8!6Ͷ8ikS*0< DMv5*0< DMd"d:<>!|=r+s+q+q+q+p+q+q+p+q:u=2}=:z=Һ!}=44*`:"d:*}=& "`:q:ͮ896<*s=DM*u=̈́*^=&^<) N#FU*^=&^:DM9͏5*:@ ~ !92(< !92)<7 :)<ր2)?!b=q*d:##:b=w*d:##~*d:##>w*d:##~*d:##>w*d: ~!c=q*d: >:c=Hẅ́d:Ý :E<ͫ8*P<&i:) N#F,DM,*L*y=M*u=Ms*x=Mf*u=*d: *s=DM -B:z=Y*{=DM*d: ~#k!{96 MODULE TOP $UNDEM`͹ҖÞ2DM_   *=#"=̈́d:8+s#r >!=Ͷ86!=6>#w#62~=ͽ"d:`:d:͞8N/=:=*]:&f;) N#F͋4:*]:&<) N#F.B2=:="="=:=O>"=n2=ð-*]:&i:) ^#V"u:>u:ͫ8*>DM*>h!ͮ"!>2>:>>!>ͫ8HA!ͱ!">G!*!>">*>DM*>MC:>e!*]:M͋!*>*>*]:*>*>!\:6:R:>S:ͫ8:U:H:C:/HҼ!\:6!\:6:E:!C:!\:6!\:6:C:*F:"::\:*p9###": Ͳ(Ͳ*=DM_-Ͳ*=*=+DM_)Ͳl*|9DM_68f ͥOr:t9Z^E.:n~:x9ZyU/?OVFINED START SYMBOL: $YY???? $$$XX???? $$$RQST$ UNDEFINED SYMBOLS: $ABSOLUTE $CODE SIZE $DATA SIZE $COMMON SIZE $U!=6>=08>͔8'6!~=6w*=#"=>&8)))M`̈́d:8+s#r>!=Ͷ8\66!=q!=:~=v d!=6h!-2=ͥ"=ͮ"=!"=nͺ"u::]:<2]:w!=r+s+p+q*=}*=_DM͘4*=#*=|_͘4!=p+q*="d:2:=2=:=O>5:=Ҭ!ͱ!"!>>͔8ž!*!>">!>6í!!:]:2%>*>M^ *>DM4*>#DM4O`i~8p8"#>*%>M^ *#>*b:"d:`:d:͞8%"*p9"::D:*H:":8*:*:"::r98*:)8":*:*:":Z:X:͞8_X:Z:͞8#"y:e!"y:!:6*X:":!=6>!=ڞ*LAY?OVLA0RELIRLIRLREL))O`i~8p8>!:!>6::!>:>=O!: NͲ!>4½)2:͕":)2::: !:SE FACTOR $!=q*=MͲ!~=4!=q> !=8:=0OͲC:= AOͲ!=q:=O:=O!=p+q!=̈́8MD>=08MD:=ڤ:==O! *d:N:=<2=|:E:J:*Q:M2"V:!"V:|!=6:Q:!=:==O!J: NͲ:=<2=6D*=DM^"=ã*=&:) =8"=:=O>:=O>==͞8UO!: ͹8"=*=*="=*=DM*=8*d: ~**d: ~#"*d: 6̈́d:8+s#r!!{96:*:MH"H"!^:6:*:Mi"2"g:͜2f:o"=6*:::: -y=&y:) >Ͷ8Ҕͥ:=<2=v!":::2=!=6:=#w:==2= *=&:) *=&: N!: ͠8*=&: ~2=*=& :=w:=26!>6::!>. ):>=O!: Hq!>4 *h&\8*|& "9>*7:DM\͏5*9+"9!>q:>2]:*]:&f;) N#F͋4!>q:]:;!t;!;!;:u;2\. ] -Ÿ\ͩ6!t;6!;6!;6!;6!=6+6>!=*=&f;) ^#V"= *= ~ *= DMv5 *:R:*U:&:) S:8"V:D>!{:Ͷ81*:"V:DX:ͣ8D*X:"V:Z:X:͞8mX:Z:͞8#DM*X:v6*d: :!z9/H!"=ͽ"d:`:d:͞8HҴ>=08>͔8S6!~=6U`/wUp/>=08 \8 "::29:*::ͺ/Ҵ":*:͉:*:M"!:͹8"/Ͳͯ/Ͳ Ͳ=6#:*:*:*:=:=<2=õ*=&: :=w::<2:*b:"d:`:d:͞8q͜/!9H`2UO!: 8DM>ͪ̈́d:8+s#r&!]:6>!]:7!f:Ҏ *]:&y:) N#F*>͘4:]: Z:y:͞8Ҽ *y:"Z:X:y:͞8 *y:"X:*]:&y:) N#F+q#p!>s+p+q::2>O!: :8">= 6!=6:=<2=:=7::2\. ] -)\ͩ6*p9###H:ͮ8!D:U!\:6*p9###F:ͮ8!C:r!\:6*p9###X:ͮ8҉:DM*:6*:DM*:6*:DM*:6`:s:͞89ͮ8*9|=ͫ8*:͉*:*:"::*:M/I#:*:͉*d:DM :*:Mҟ#{#=ͯ6Ü#*:&#*4>"d:!3>6>!3>)h!3>ڶ):3>=O! *d:Ny û) y :3><23>Œ)*:"::)͸*9"q:̈́d:8+s#r5)!0:4~ (*6*)29!hʦ':92h\͕6¦'\=45)2|29!:6*7:"1:!"9"9^ :_:/2^::!:!_:' ',':e (.e -'8"M>͹-ͺ"u:-*K>&<) N#F.*0< ~R.*0< DMd5*0< *0<##N#Fq#p].*0<##q#p2P>:P>ʤ.*K>&:) 8"M>!)>6Ý%*)>&:) '>8+s#r*]:&y:) N#F*]:%*'>DM*)>M͋%*]:&y:) N#F*'>*)>*]:5y y !*>q:*,*X:DM',,',|9A:͞8&,*A:"|9!G>p+q*F>"H>*C>&y:) F>8+!H>͹8g,*H>DM4O**H>"H>3,::=O!: N!: !y::) :8DM>*:Mf#:*:*:&:) :8*:͉*]:&y:) N#F*]:*:DM5!=6#!=61:#"1:*7:{z*!"1:/ *1:!>~26>xG:6>26>G )x{_ P*#B*>ɯ`iq#zV*COMPRLRSPSPROVLSYM!;>q*5:> :;>we>*2!:\d5I'}/B(}͉ͽ"d:`:d:͞8)͹(:v92\!0>6>!0>گ(h!0>҈(*0>&"9:P>O>Ҙ."9͹-2P>c.>5:08>͔8ʾ.q*å.>*5:DM\͔5\v5:w9Z.. \": -.:e /.*o9&> &>!*>&:*>#&+"ÿ&:*>1&p"ÿ&:*>?&k$ÿ&:^:ҿ&:*>=O!& ^#VI"ÿ&ÿ&͈"ÿ&>ÿ&͵"ÿ&#ÿ&T#ÿ 8*p9͗8"A>**A>DM**:o9,***p9DM*,*m9DM****:r9,*:DM*,*!J>6>!J> -*:":*:M^ :]:$$*g:*:":C$*]:&:) :8*]:&y:) q#p:]:P$!=6*]:&y:) N#F *:":>!:Ͷ8::H*5:#"5:!3:͹8ڦ*>*3:DM\͔5!"5:!<>q:8>!<>28>:7><27>*!7>6*8>Mq*!8>6!=>q*=>Mq**A:#"A:!?>p+q*>>}O**>>|O*:\ 6 å(:0>=O! *d:*0>&\ w:0><20>g(!!:6.e -¼(\W5/(!!:6.e -(\d5*d:"1>!_:6I'*1>"d:̈́\8_* DMe - /:w9#/:w92\\B5:9 A/. ~9\ -9/!"5:}28>27>*ͥ.:x9Z^/. \": -f/.en* -v/:x&#ÿ&#ÿ&$ÿ&$ÿ&Q$ÿ&d$ÿ&W&]&`&f&o&u&{&&&&&&&!+>6)&)2->:^:&*->My (')2,>')2+>:+>*!J>4,*p9"A::\:(-ͦ-ͦ-ͦ-!L>6::=!L>|-*L>&: ~2K>u-*K>&:) A:͠8e-ͦ-J-:r-.u--!L>4--*p9Ҳ$:R:Ҕ$=6ò$*:&:) :8"S:::2U:!R:6:0:$)$ò$!&>6>!&>%%*&>&:) *&>&:) 8*&>&:) q#p*&>&:+:o9+h,*p9"A::\:,+**V:DM**X:":!@>6::=!@>q+*@>&: N!: p9͞8j+*@>&: N͍+!@>47+:o9:o9d:8+s#rI(.: -)!:6!:6^ ͽ"d:`:d:͞8)/)*{:DM>fy ^%y !":y y *d:"4>9ʌ/:x92\\B5!"5:}2R>ͽ"d:`:d:͞8(0͹/H02DMv0 q*!Q>6h!Q>/:Q>=O! *d:Nq*:Q><2Q>/:R><2R> '*+>M%('͕".>:^:('*.>DM*,>^%:+>&7','!0:6&H'='!0:6!"1:"7::!:'*:͗8"1:"7:. 9\ -u'*A>A:ͮ8ҕ-ͦ-|-:7>ʥ-ͦ-Õ-!O>q*O>Mͧ**A:#"A:M>A:͞8-ͦ-ù-ͦ-*K>&i:) ^#V"u:>u:ͫ8.ͥ*K>&:) y:) q#p*&>&:) >w#6:&><2&>$s:q:͞87%*q:"s::G%͸*9"q:^ :_:/2^::{9]%!!)>s+p+q:)>ˆ%*g:*'>"'>:f:҅%HҌ+ -!C>q:C>¢+*X:"D>ó+*C>&:) ^#V"D>D>A:͞8+96D>A:͞8+*+*C>&f;) N#F͋4*C>&y:) >Ͷ8,:C>0 q* q*0 q*̈́d:8+s#râ/ q* q*ͥ.!S>q> !S>O0:S>0Oq*Z0:S> AOq*!T>q:T>O60:T>O60!V>p+q*U>|YP   YP6YPYPYPYPYPYP Ͳ ò!>6#6͐6">*>|$7>41Ê4ͦ3!p>p+q*o>"[>!s>s+p+q*q>DM3*[> ^#V"]>*[> N#F*q>?8*]>:s>w *[> 6!u>p+q*t>DM3*[> ^#V"]>*[>XXDATA $$$XXCOMM $$$::;7;YYABS $$*[> N#Fq#p *[> ~ڮ2*[> DMB5 *[> 61*[> N#F*[> *[> N#F͔51!e>p+q*[> N#F*d>?8^8*[>q#p*[> LINK 1.31 $01/04/83?MEMRY$MEMRYX O[0*U>}O[0*9>!=8"W>*W>!=8!Y>s:h0:Y>2h\͕60\>645*W>!=8!|s2*9͗8"9>. \~9 -0:9 19ͫ8"|>##*|> ~!7!>6D7*>|?7!>66"|>D7!>6:>Y7!~>6#6#6Å7*|>~2~>*|> ~2>:>z7:>2>*|> N#F*t>?8*]>~   +5{>.+55OͲ5w66ͩ6́5;6<566́5͕6<>́5͕6<>645͜6<H6$YYPROG $$$YYDATA $$$YYCOMM $$$*[> 8+*[>##q#p*[>*[> N#F^#V?8*[> s#r *[> N#F`i"h>*[> N#F `i"j>*h>"f>j>f>͞8ڐ3*f>+*[> ^#V\8DM2 MEMORY OVERFLOW, USE [A] SWITCH$INSUFFICIENT MEMORY$OVERLAPPING SEGMENTS$*9>"9>\d5͍0C\͏5!Z>s*9>!=8C "9*9*|9s#r͍0C*Z>&\8DM\͔5:j2j\v5:9ҁ1*|9)8"| ~2>!>6>!>ڰ7*>&v> ~/*>&: w!>4‹7:72"g:^ *:"|> *g:":*9My *9My *9My *~>My *>My *6! w #ˆ5>Ö5>2,6""6"$6yo`"&6!"*6͋6-66*&6|6 "&6*"6MD6*$6DM:,65ͷ6g666Ͱ66**6|6U6*$6n;;;;_2*f>"f>\3*[> ^#V*j>\8DM2*[>  *[> ͞8Ҿ31*[> N#F*[> *[> N#F͏5!n>s+p+q*[>l>͠84 *[> ~ 9:y9ZŠ1a9ҟ10ñ1g9ұ10!_>q.*[> :_>w*[> ~!`>q*[> :`>w*[> *[> ^#VN#FR* *[> 6*[>My *|>":i`N#Fog_og_{ozg_ogDM!>))덑o|gV8 =D8DM!>))k8 =c8_{ozg^#V) 45*"6""6**6#"*6ú56**6ABORTED$NO SPACE$NO FILE: $CANNOT CLOSE$DISK READ ERROR: $DISK WRITE ERROR$YY4_2*l>DM2ͦ3Ê4*[>##l>͞8Ҋ4 *[> ~34_2*l>DM2:n>j4*[>  *[> N#FPY͹8d463g4ͦ3Ê4*[>  *[> ͞8҇XXABS $$$XXPROG $$$>^#V!=8"b>?8!a>s1!a>P2*[> DMv5*a>M1*[> DM͕6P2*[> DML5*b>!=8MͲ1*[>  *[> ͞8ҍ2*[>  ~8^#V|g}o ˆ8_{ozgi`N#Fogo&og_{_z#W o Link-80 3.44 09-Dec-81 Copyright (c) 1981 Microsoft ?Command Error~P#~#  `{ +!~rt Address?Loading Error?Nothing Loaded?Out of memory?Illegal Polish Exp:!‡!!!2!!!2*S!wO |!y:!(͔*QDMÙ&[Begin execution]:Z:X* * ͅ ~`~¨@w+++o>GO ~+t>}_|W>2 * * <* * : <ͅ P* * W{_* #" " "=:WGO0ڗ xڗ)))ҖINDEX ERROR$MULTIPLE DEFINITION: $MAIN MODULE ERROR$FIRST COMMON NOT LARGEST$COMMON ERRG #~ ex+#<~: /͔>*P d> P:e!fo>g6 7ʌʌ  y:+y#P2\2f g ~ 4!>2 2Y:c2c ,/MEG@RSUXYE{ O :Ù&O†6 #=ƒ* ! ͮ 2X * ~O_+++y++:XK͔:c2c *Q>[P"N!C \* s#r!I ʌҖ)o>gdy +%Overlaying areaDataProgramÔ!! ~#fo!ͅ ͅ OR$UNRECOGNIZED ITEM $ !  :\GO: " " " " * * " ";* * BK* * "=2 G<2 2WHO2WG:c2c:'>`͇Ax¹'"U _2:f Ğ2U!c~w   \! ~# != = = \* ͅ = *ͅ = s#r"N2 * * ͅ ʐ ʅ 2 M\: z x/Gy/O~w#~ͅ &}< = yy7yM7>,>#ͅ !M> _!h >?P~#P!yk!:!z6#z: O4ͅ {Ҏ!y yBKO!; s#r! :f ~w:f 2Yæ2Y*`|##yȷ#jC~@#I" #ͬ*`|#*U~ !:Y:c~ G@x kwM M" z _z! ^#V   $ 2 = ] m `i ^+V! 4* M ! 4Ð ! 5 PY\  s #r l*+"S" " " " go"Q"`2 2!2!2X2Z2]2^2c2_2\2W!*" " " " "=";!" " " " 2 2 !" ?No Staʆ!; Not Found> P> P>2 g 28: _<2 !~g ! w#! s#r! s#rͅ ڬ! s#r!; s#ry ! ~#fo! ѵ! g   # |/g}/o   DM!>= ))K K z zi  B#6Ly[ҥ0ڥAҡ:ҥÊ[ʡ]ʡ@ʡ\ʡ^ʡ_ʡOb: : 2 BK|A~_q#Vp\AU: =N"N>>PÔRQUESTͬæ* : * ͅ ~_~@+++~#* BK" ö+++ö2!2* " ͅ " " ";" " ͅ 7* * * ͅ ]!* * * BK* * * * *O~>-ʑ > >/P+^+V+~P ™ /PN~ ʼ !ÿ "~ N+^+V>>PN:b?2b̔>wt :bȯ2bj~+ܾU6+6++r+sA*K:J2 fU: ;: =>@w+6++r+sA:!A>.2!2P* !J͞!g2!+}2_! K}o|g҄ : ʫ ͅ ҫ | >]P͔: : $>2*Q"!o&'  d   >0G>@w+r+s+@1: 2 r+sA: =* >jV/o/g ڮA~@w:]2^s+++~ s2^q+p:^O!; 2 2 : go" " " 2X" <2 : * * * * *=͝QiEZͿE! ~#foBK#: =ʝ: ”* | " * * BK* * " " " "; ~w#~wPYb>̈́BKj~@: ~@w+~_q+U: =>Cw+p+q+r+sA! Дk [ M  ~++GOŸ& H+D ; & yE >  * [ S } 7~k ~~r <</_*w#!ڐ ‚! \" " : :Z!ګ!  w#! ¸+w2!͞A!!?/D illegal with common runtim /}o|g x0   > xPH>G~#' j~@+^+V$MEMRY$$PROG$COMNM*QA!Hw#] j{ ~@{ +^+V"Q! >2 }|!; s#rͅ y A!>/P͔A~W+++~P+%2nd COMMON Larger /*;" |2 * ͅ ʊҔ}Ҕ͝p#: ”* |ʲҔ·}ҔÔ: =: Uw+p+q+p+q#Bi++s" ͇͔A%Mult. Def. Global ~@*`+"`PYb>̈́BKůj~+nN+F@‡: ›:B(b: =›zAA;|A: › Å |}! 6S#6Y#6M<$>* * ͅ ~O~@ +^+V > h%+~h% > h%= >~ <</O ß ͑&%|e?No code can be loaded before program withcommon runtime not found, please create header file?End of file on common runtime 2A! ?Start symbol - - undefinedg  ~#³ ͞ REL7*`}2X:c` j: j͔ A> j~@wA7U: >8: =->G: =7>@w[?@2g ԇx " h 5)> F6 #=>x2f y.̇p xanbʃ!p ~ ƒ6R#6Er#sA: ›|A\zA#U: =ʯ>Bw+r+s+r+sA*`#"`!7~#46+wxG ɯ2 7}G[h%> h%> h%:WG)0P) 60P3|L}U[P0:͔! ~#foN"header!aǗzʣ̈́"Qb! ^#V! ͪ!;ͪyک: * * ͅ * " * '* * * BKp @p ͔`p p p * } , >wk  :`? !K * !b  Undefined Global(s) Bytes Free 2bP  ~BCHK:Jʯʯ U6+wAU: : =>@w+w++1: 2 : : =r+sA!HIF5#wY!HYH!Hw74#6 _Gw#;!T"7O<2 XP̊wwO!9 N# *="=*?PYͅ ڙ"?: ʹ=¯* !" * * ͅ үï͝*={OzG* * DM7xw# ! p#”* ! N#F#~#fo! ^#V  ! ~#foͅ H! {_{_~H! ^q#Vp! ove anyway(Y or N)?ͅ 0"ͅ D" "!ͅ D"yS": W"*Sʀ"a"Oͅ €"y*S€"! |‡}ʠ~_|!^#V* " (M\~#+-: " *=>2 * ͅ A*=>j+^+V\"?A +x~+ xw+ : 7={O>: 7J?Intersecting wO* ͅ~s#_~rW}&: $#qͅ {_! 6)`i{ڠ! #Yš* * 6* " * * "ͅ ҇"!9;;;;;;ͅ "ͅ ڣ"z"&'7"ڿ"""ͅ #ͅ #"z"7r+sM~O@wy@+Ns+Fr{~2f M* :f w+r+s+p+q+" ~+V+^+F+N+* e@ DM!`i"N*=b: =#<2 =A: A*= APY7* K" !*="=* !" }2 <2 A:[* * |G}ʼ~ <26: ?Oʣ: Jͅ Jͅ J!M>,P*6&0M^#Vy!HF#~#P>(P>)P: ͞* ͅ ҙ" ! yڬ! ^#V ڻ F#fh! ^#V ^#Vy! ^* ";* "=* *;)##+#KP*;";!* BK*;* *=l#ʮ#l#O* * " *ƅ ҈*;"PN!"N* "͔%%Bad fixup offset entry, will be ignored Value Loc Entry A Entry rel. >"!2Z!:Z?!͙!͙! y-!* * ͅ #* " ͅ |!*Sͅ O©H©A+++¨+—~ y/O oHOx_Ow#2 +w+w+w+ w+w+ " Start = External Public = %*#V^#V! s#r Gyx! @s#r#1xS|W}_x2 * 2 yoxg* " *=BK* *="=#PY* " * " Ø#* *=#BK* * " * * " " *=" *;" >>><2Z=O! $! ^#V0y=Uy?\ͅ ?\|y! i! us#rx^#V͞"yb!*Sͅ "ͅ ڵ!*Sͅ ڮ!!!ù!!!!!!!2 YxbelowaboveOrigin loader memory, m" 7ɩ))'):B($: ̈́: r2 * * DM* " *= "=* BK" " " " * " Ͷ'* ! 8$~R#~E#~L4$:c)$7$w+)$COMHEX`$  <%2 : $}$* * ͅ $! V 0_҅(zʞ()Å(ͣ) *)!.*ʹ)!.*V#^(((!((ʹ)(z(!.*ʹ)(ͣ)z{7.'& 2[2h2k2}*}&|g+"C':ENOT ENOUGH MEM|<<20'|d!"&'n)"('>2,'z2-'!]*Q >>h%!*'͞'!0'͞'!3'͞'!9'͞'##²&##͞'##¿&#͞'!z'͞'!'͞'* "'* "'* "'* "'* "i` COPYRIGHT (C) 1978 MICROPRO INTERNATIONAL CORPORATION MicroPro WORDMASTER release 5.55A serial # KF2222KF c~ʌ$ ~$:\ʲ$: µ$*Q\" " &yO: &w&%*Q|$ͅ $%ͅ $ͅ $.%>%7Ԓ%R%:*z w#)0:ww:*!;) )+ )!1)?Segment , file not foundcan't create fileread errorDisk is full)!@)~+ —NO FILE NAME~R w& ~ʰR w:\ʼ>2'~&!;  :'&FILE EXISTS ON DESTINATION DSK\'* "'&'m&'͓','V'G'V'l'|'V'l'|'V'l'|'!' N#F#^#V#~#fo|} +x~+ q'x>>[>2>J>>[}<͸)>;|<͸)>H)P>>[>1>;>1>HOÒ%!"&̀: %yO%>%R%: Ă% <%>h%*Q}h%|h%سȯh%zG%%z~#h%\%!: _w{<%2 )!O))ͣ)!a))ͣ)!l).***‹)*—).**2[!2'# NEW FILE &&( !C MùWMBACKUP$$$h !\~2l:&wh&( *`'Q!'~\!Sm &!ew# |'xw# Ó'~#fo&'q#p:B(* ͅ ~'M(:J2A(*;" 2 U6+:A(wAMzO*&2&*&͟"&͖:ON#*&% >>[>K<=N#=XP1)>t1)t2L'!9"`'F %%"%yO#"%!%\%.%fh%¹%! ~+ x :_*Q:_*Q\!%?Can'*<ʂ)2*!* )+ )##2*w# '*m ͗¹ & !lS# ABORT (Y/N)? 0"LY͗c*`'!#h!&~5!l(6"M'h>*$0""M'~:k( ʍG#"(2A(7(:B((*;" :A(2B(*;r#s+:A(i(*;͢(" 2A(2B(!* p# P(!HN#*~# ^(Ar#s *){ʅ({ƀ##*0~#Ÿ~<ʲ+~#¯~dүҲ>2K':!F>wps#r#="9'*9'";'"='"?'"At save object file{{ _zW;&> A&{ H&O>:h%y Y~# c&+&>:h%GxLHFQʳOʂEZA# ???*M'#$ù $#"O'h!6*O'""M'I"O''>';|T,V͝ $*='+ ڕ ~ ˆ #*='þ ¬ > ͬ > $U ͕w# *%F  +"% /> g%/*;'͟*='{* "O'O'*O' ì #~+:¬  ʬ @# .!   "D"O'^ 4INVALID FILE NAMELIB#   !$*&$:&!&5!&5]U> $ "&!"&!&~#6> $N#*% ʄ}$$*='>{ܭ͟$#þ*X'*\'(*&+Q͖"\'"X'͵:\'!?'!"X'*X'!\'z5~/͕}K zK!;'*='N#͔v z9#2'͵\!"'"X'"V':\'!*')>M> !""T'*T'I"R'"O'ʐC,D2KxLTPTʚ*X'!͟BG/>2^'I"O'"R'F5N;RGSAUQʫ_'='*='+ ~ 33!='c'O, !='͍͒ h ? 3 ͕w# C s#r+*='*?'͟!='!='x͕zL͞k >   ~ #L.:*? пC  !5' !3'͑þ_*3'"5'!3'͕) C !5'h *?'ͅ!5'͂ ͹͍(^k:&ڒ:&ͻ:&G:&xʣGxҸ:&!&xڸ> G > !J ~G@ @0 0 !"&2;'!́!+|*X'|$+"X'*X':'#͵ J͖ J Jͨ _^# ## 'p7p*O'I"O'  á+ī ››7>~>"7)"LA?[*;'͟*A'#͟*='#AIZ<ʉMʉ!W Y:L''8;;h(ˆN~#Da{:\'G:^'x!"E'"G'!"^'-"&"O' 4MEM FULLV ͽ ͇Җ :\'K7 ͇Ҩ à ͽ ͮ :\' !?'$ *?'Q !;'$ *='9 y ͮͽ :c' G:\ ͍ h ͡ *?'? "?'͛† !3'*1'*C'|q  ͟4QBUF FULLe ;܅ $#!    $"&:2&2&% % %| +2_':&!&8>w!%!&5Gu6ʹ2&u!&~6d!&6k6r6@I!&~6ʨjAFINRSWY;|pQI"O'L>ȷp  pa*R'~   :b'C># :X'ͬ͟ ;'(*?'͟?'4PUTCUR ERR`+6d!&~6W!&~Tw2&t:&*&"&X:&¤*&>{ܭD |*Z'A>ʞzz#ÑI"O'"R'P[ XL. T: KG GN *O'*T'*X'͹*3'A"X''x *='< "=' *?'J "?' 6 GyOxG*=':c'g}o|g:c'o|gw  v #^ +ͫ#^ Q #='͛ Ҭ  >$! 0 $ "='$ I :& ͹ } :& C N N :& C k |ڠ ʠ ʠ–>~ ҝ>^â> g%N#:&H :!J ͕Em,?*:T *vE |` # TURKEY *R' *O'c'D; > > & E >5 [ & 2b'"O'y ȷկ m *O'":K']Uʙ “$"&>2&:&9*& n]U !$N#ü$:+:&9]U*&͟]U"T'"O'# QX?'!94STACK OVFL͠ Ç͠ >"?'A"='͛Í:\'/!2\'"X'͇(T*X'Q"X'>N5!w  #ʙ ʈ ͫʈ ѷ} *X':\' *?'ҽ #DM!*A'ͽ *='| gDM!*;'ͫ L>͂*X'S ͮ FH!&~4*& tuL  V X*tnELL"T+VX "gVͱ•͙ N#ͣ~ #*?'{͕yOxG;+ô:I'N#"#:I':!J':I'%!%"4FILE LINE LONGER THAN ENTIRE SCRN ???:&!&q:&!&q:&qt2&> $:&!&54!&!&~ |*&')$$=O4MEM SHORTAGE, TRY CLEARING QBUFI͕ͽ)JzJ3@3T!;'͕y&/! *E'*='|u"òͲ ڛ"u ʦ Ûuڬx2&Ϳ~xu u"?'͛   *;'s*&* '͟&+5!8/!* '#" '";'!"E'!C'I*A' U~:-'GO ~z o*A |ʬ2&*&!"&*V':&.>2&:&<ð!&!&P>(2>> 22&>22J'7WM HLP%!2&! &¢>2&&¢46 (":&ʀ !&6*&2&:&=<څ!"&"&*&"&z2&*&"&*V'*='|$"E'͌*&"&͞"&͙"&:ß*G'*?'͟='͟!;'*&* '͟ҷ" '!?'|*"'͟""'*$'͟"$'*&*~|`i)\!"&!&~/w!"&dʹ0 > ʫ %*& !$ͬ W|y yG:&xs z Ã:&!&'ͪ–:&W< zÛ̓ҥ*"'͟ҽ\ ͬ > ì !&~6!&͚$L:> ͕ͪ!͟*(')!C' \!C'x=ͪsy\ͪs!C'*A'vԏk2&"A' _#&7`:&=u>(%Êi2&*& :&!&W*&ͣ$:&!&ڽl$ $*&"&Y:&!&/{ܗ$V͚$ :&WxV~# P!&4:=2+~#͚$2|*&l$*&,&"&7͕|33nx+++vPUTHOLE ERR!1' ͬҝ####B'͟!7'͏s#r+ ##s#r++͑#r+s.+r+s!?'͑&]+:& >:[!&7:\':&:&7^!;'*;'#&Ͱ ";' *('͕͟/< !&w? *&#q*&+"&2&ɯ2&u*&*&N%>2& V HK "]K iu"Ž *V'#(#:\'M:\'7^^;͑;ԑ:\';'?'*/'`i͟ !_'4F!.'=O:-'=G ͅ!SV͟  %~# !!V͟Aq  J+~ FFBAKx<4COPY ERRo>gO>Gg%64+4:=5+42&Þ%2&O> #ɩ%%%Ñ#>!$>͛%2&*%~ʹ#͛%²#ʹ#͛%>#2&>#!*J y:&#N###4INTERRUPTEDN#!!!~ 6w< !x7ʩ!: ! q#~w\'"#+ʹ!-!>ù!+"Z'"##"+)""~)" "#bk))"0_ =)!%w#w#w#w#w#w#>2^02_0:m$(!~#$,(~(# 3(%Aʩ(Pʩ(Sʩ(Hʩ(Lʩ(*t(+t(-¶(^0~Sʣ(M|DMx++^#V#~#fo++ÕGz¨{x͟ڶ!|7͟ʱڱ|7N#$#$c 0$e$0$$?$ b$:& b$N#:9b$> e$b$N#T$l$$ G:&Ox ƒ$y"!"Z'"X'4NUMBER TOO LARGE0?:!&~w!l(Oy";ܾ>"$ " "!>"m"t""$~"ƒ"ʣ(e0Lʣ(d0Qʣ(g0Rʣ(%1¶(x#3(~AҶ(#3(#6 !)-x&!x&!%͉&!%͉&ͳ'(`&͛'͠':%)!&͉&l&͛'+6&<CLOSE ERR&   ( <DIRECTORY FULL_:K'{b ѷl  *\ ?=)$=)w#Ž&!\60 ڱ&>GO#w ³&>O # &6 &6L#6I#6B#w2|r&\u'>2]0!"%![0~2%wG&!,x&>O/ Ҏ$ʎ$ : x͚$!& ڷ$4:ʯ$$6+4Û$ʤ$ $ $ $4ä$+4N#6~wä$> $> $>$”""ù ¹""G͹ x"ʙ""G"͹ è""$þʳw# y <+~ "> $ 2k(6x$2&~"#" ͠'!%60#60#60#>2f0!"&:O0*!"%2%2%2%Z&%u'!-x&z{:]0ʢ)*%F)w)!"%r&\‰)*%#"%+ <:K'RENAME FAILUREʹ 5!:6'D'>.6'D'>-6'x&!%>$ %>~l$%# >>*% )%!%[% H%#~<5%+6> g%4:&7%[% [% [%>^g%@"% g%͛%t%!& ʆ% „ ##~$##*%~@#6#~<7#!%"%N#ʹ#͜#A##ʕ#*%~ƒ#ʹ#Ĝ#O#w#~!#͕ |<^!s#r7>G!"͕}O)|! ʠ!,N'!k-x&!,N':% '> ':%'_!% '6 4ɯ2%2]02e02d02g02%:\d4CD# Dq@T+ Ed3 Fqt;GC"HrA$K&IDS*Jrd[.Kc2LsAk6Ms:Ns{>Ow D = Y OVLYDIRE = Y OVLYDIRF = Y OVLYDIRG = Y OVLYDIRH = Y OVLYDIRI = Y OVLYDIRJ = Y OVLYDIRK = Y OVLYDIRL = Y OVLYDIRM DO NEXT CHR 4X ^W FILE DOWN 1 LINE ^P NEXT CHR IN FILE ^Z FILE UP 1 LINE ^V NEXT CHR(S) TO VIDEO ^R FILE DOWNDTARECP = 01 ODIRDRVA = A ODIRDRVB = A ODIRDRVC = A ODIRDRVD = A ODIRDRVE = A ODIRDRVF = A ODIRDRVG = A ODIRDRVH = A O VIDEO MODE SUMMARY (TYPE ^J FOR NEXT FRAME) ^O INSERTION ON/OFF RUB DELETE CHR LEFT ^S CURSOR LEFT CHAR ^G DELR*P*T(T) $Y !I11 cy@Z dh@C7'#It G#ȴd0 #Ȁd7 Sq = Y OVLYDIRN = Y OVLYDIRO = Y OVLYDIRP = Y OVLYDTAA = Y OVLYDTAB = Y OVLYDTAC = Y OVLYDTAD = Y OVLYDTAE = Y OVLYDTAF = N SCREEN ESC EXIT VIDEO MODE ^C FILE UP SCREEN ^J DISPLAY THIS  COMMAND MODE SUMMARY (TYPE ^J FOR NEXT FRAME) DIRDRVI = A ODIRDRVJ = A ODIRDRVK = A ODIRDRVL = A ODIRDRVM = A ODIRDRVN = A ODIRDRVO = A ODIRDRVP = A ODTADRVA = A ODTETE CHR RIGHT ^D CURSOR RIGHT CHAR ^\ DELETE WORD LEFT ^A CURSOR LEFT WORD ^T DELETE WORD RIGHT ^F CURSOR RIGHCF = 01 NDIRRECG = 01 NDIRRECH = 01 NDIRRECI = 32 NDIRRECJ = 32 NDIRRECK = 01 NDIRRECL = 01 NDIRRECM = 01 NDIRRECN = 01 Hd2@ dh p4B$b)HO)3 o: )@C!2y4 AD"I< "D@r2Lq@C!2y4 KR r Y OVLYDTAG = Y OVLYDTAH = Y OVLYDTAI = Y OVLYDTAJ = Y OVLYDTAK = Y OVLYDTAL = Y OVLYDTAM = Y OVLYDTAN = Y OVLYDTAO = Y +- MEANS + OR - ALLOWED HERE, + ASSUMED IF OMITTED @ MEANS CARRIAGE RETURN OR LINE FEED NECESSARY HERE $ MEANS ESADRVB = A ODTADRVC = A ODTADRVD = A ODTADRVE = A ODTADRVF = A ODTADRVG = A ODTADRVH = A ODTADRVI = A ODTADRVJ = A ODTADT WORD ^U DELETE LINE LEFT ^Q CURSOR RIGHT TAB ^K DELETE LINE RIGHT ^E CURSOR UP LINE ^Y DELETE WHOLE LINE ^X NDIRRECO = 01 NDIRRECP = 01 NDTARECA = 01 NDTARECB = 01 NDTARECC = 01 NDTARECD = 01 NDTARECE = 01 NDTARECF = 01 NDTAREC! @ B "6QS@`Ɠ,>a @ (Tݕ_7teW"{6u ^2BEQ4f@< OVLYDTAP = Y CRDATAF = N DBLALV = Y C OR ^Z OR CARRIAGE RETURN NECESSARY HERE n MEANS A NUMBER, 1 ASSUMED IF OMITTED, # = 65535 +-nC MOVE n CHARACTERSRVK = A ODTADRVL = A ODTADRVM = A ODTADRVN = A ODTADRVO = A ODTADRVP = A OVLYDIRA = Y OVLYDIRB = Y OVLYDIRC = Y OVLYDIR CURSOR DOWN LINE ^I PUT TAB IN FILE ^^ CURSOR TOP/BOT SCREEN ^N PUT CRLF IN FILE ^B CURSOR RIGHT/LEFT LINE ^@ G = 01 NDTARECH = 01 NDTARECI = 01 NDTARECJ = 01 NDTARECK = 01 NDTARECL = 01 NDTARECM = 01 NDTARECN = 01 NDTARECO = 01 e[p  3@3@'PG@8xd >O-0 $|dZ`6JdL 0LayT'Lk$# +-nD DELETE n CHARACTERS +-nL MOVE n LINES +-nK KILL(DELETE) n LINES +-nT TYPE n LINES nZ Q (QUIT) ABANDON EDIT O RETURN TO ORIGINAL FILE ^Q DISPLAY HELP FILE ^V NEXT CHR(S) TO VIDEO ^C INTERRUPn LINES INTO Q BUFFER, DELETE FROM FILE, n>0 n/QP APPEND n LINES TO Q BUFFER, DELETE FROM FILE, n>0 nQG (GET) Cr ͆ ͆! O(Ì*(~2**}ʷ!#¶!""÷:_:*(#w·xH!)6"&:! x TIMES +-nSkey$text$ SUBSTITUTE AFTER SHORT SEARCH n TIMES +-nRkey$text$ (REPLACE) SUBSTITUTE AFTER LONG SEARCH /F,/N,*&~2+o#"&!+6Mʼn:W:2x ͺ*(+"(w  :܉>2*2:*(:+w"(ͺ:G:SLEEP n SECONDS +-nP MOVE, TYPE n PAGES +-n@ MOVE n LINES, TYPE 1 +-B MOVE TOP/BOTTOM FILE ^J SAME AS 1@ nItT COMMAND OPY Q BUFFER INTO FILE n TIMES nQT TYPE Q BUFFER n TIMES nQK (KILL) CLEAR Q BUFFER nQX EXECUTE COMMAN5~y 5 6y(^͆@O:=7:͆y ͆:I ͆:=e: zz#͆͂:! ͆/S,/R SAME, EXCEPT EXIT <..> OR QX IF NOT FOUND Y[d:]name.typ$ (YANK) READS FILE IN AT CURSOR nW[d:]name.typ$ WRITE :+̜2 5*(~o#"(Mš*(~`Uoj*(~#"(Ñ!*~6s!+6:+‚xoext$ INSERT text n TIMES I@ ENTER INSERT MODE (ESC OR ^Z EXITS MODE) A@, nAtext$ (APPEND) DO 1L THEN JUST LIKE DS IN Q BUFFER n TIMES nQLtext$ (LOAD) PUT text INTO Q BUFFER n/QLtext$ APPEND text TO Q BUFFER n TIMES V ENTER VI G:Ҏ>xʝʝw>ɯw̩z:»!>wɯ:=zxzz::G:=/ͽx:Āy!4 n LINES INTO THE FILE NAMED ^N CRLF INSIDE TEXT OR KEY ^Y ESC INSIDE TEXT OR KEY ^A MATCHES ANY IN KEY ^S MAڊ{2Ó#w:2.+:.2-!%"(2*!"&!*~4:2-Ԃ:Gͳͨ^2+>2:2*N#G2 INSERT n<....> LOOP: REPEAT .... n TIMES (DEFAULT = 65535) nM....@ (MACRO) SAME AS ABOVE  COMMAND MODE SUMMARY ͂^2¢ů͠Ċ:!ڽ*(~݈׈5WèՊ؇j׈M2ͨxΊ*(+w"(jDEO MODE N! PUT CHR CODE N INTO FILE ; ALL FOLLOWING IS COMMENT E END EDIT H END EDIT AND START OVER šn!6@G:x: P:<: P n6 t6! ^6 t6u:)<͠^!TCHES SEPERATOR IN KEY ^OX MATCHES NOT X IN KEY  COMMAMD MODE SUMMARY (TYPE ^J TO RETURN TO EDITING) nQP PUT 2GH)+6:2,:!- ͆:,!͆+*(~L#Bxz:*:*(~ʓO(TYPE ^J FOR NEXT FRAME) +-nFkey$ (FIND) SHORT SEARCH FOR key n TIMES +-nNkey$ (NEXT) LONG SEARCH FOR key n͆ !%"(^-:*$P:<\:W:2xM s:<9>2:*9x~+q’x2:*Ó*"r*r"ÿ<:g:!͐*f}D! ~6t!rͷօO(^ƅƅƅ  :b*!U#PhU 4 c4  pQq ,(!,KlmY#$GId*Kl < cd˚@@0  A@`4BA0T, CAt<DB1 L' EB`\/ FC1l7GC|? HD2!G$IDa4O(JE2TW,KEt_0LF3!g4MFao8m80 =b:ldrbios3/m l80 b:cpmldr,b:ldrbios3,b:cpmldr/n/e era b:ldrbios3.rel #-AJS@YuuJuu}ͦߦ*Pȧ(d'{AgXJv!)*^#V#^#Vw# llFunction = File = !,$"h!9"f! ͉:2t™:!=Hgo:O*;*m80 =b:scb/m m80 =b:bios3/m link b:bnkbios3[b]=b:bios3,b:scb era b:bios3.rel era b:scb.rel era b:bnkbios3.sym b: gencpm aNG3w<OG@ @xe"@  @  B@  B@ QN%H$S p@f7I&3yr4Ar8F!J ^#V̀:#!"(COPYRIGHT 1998, CALDERA, INC. 101198/…(+17Ȉ=} ӓ͂:A2=/::0! dگ61#d ڸïp#:w#6 !6:6 *#!)6.#)͂ O(BDOS uto display a: C@b< Cxu7C(O&AD"I< "D@c0p22@\C'A 4B$b)HO)654321"y2;!":2=2:=;!~;4#.{2!""9"2!;y3]K!Ƃo\b!,_^#V* > wM  2*7w#6?#7 .,:;[]=<>|!?]45#Ra{i_p# l s s#)i72@\C'A$""D"  |iu Z jͣc02@ <-V`C}OvU'o ( 0  ` @ @/? l ls:¬MA<0;!x*w>og;#"w*w*w*w>og^<"w*w*w^+++*w>og^}2w!Hg"w*w"w!HW"wx͛:*w+:|xog*wx͛:R%!(DB$*w+:|xog>;!@!|x4nR%>B'@÷}x~# Rx)>og;"vw :w R9 %>B'!E>;%@!<,;!:ySx !w6!w6!{yD><,0;!yySu !w6{ ͔(A͑"w*w}1ҫ!wE><0;!w!w6!w6!w"'x!%xy2w:w!)x"w*w~2w*w~og |2w:w !+xg)))))~ʾ*w:xog)))))~2w:w/:w!; :wog |/:wog |b!x r:w!Fr!xp:w/:w!*w*w<*!xͨ*w*w<"w*w+"w*w+*7C^#V<|z*w"w*w"xw!xD:w2w!x͂ :ww!xD!x͂ aÀ!xͨ%>B'!G> ;%@@%*=*w+*}x~og;@*w+*}x~og>;!9E>;!SE>;ͥ*w+*}x~og;* ^#V"y*y^#V"y:y *w*y)))))~2w*w*y)))))*w:wog)))))> GA;:w!F :w *w:wog)))))6 :w!/x!F:w_>͉:G!w>A;2wRf%!DB$![D>6;!!D;!!w>;!!-E> ;!@%*}!w;@:wog |:xog"w*w"w*w"wû:w!»*w#"w*w#"w*w#"w!x4*w#"w!xDí:w*w>og;#"w !|w# À}!"w*7C^#V*w<|!xD*w"x2x:w2x:xog:xogGA;*w+*}x~ogF>k}*xwÑ ̀*zw"w*w+"w*w+"w:w*w"w:w2w*w*w*w>og^ *w#:wog)))))og^|n !w55r !w5*y+"y*w+"w!7Ewx͛:!8Ewx͛:"w*w:wog<,;!3x!rx*7C~og#))+"w*w#"w!HG"^#V"x*vw*zw< *zw#"zw:w*~w*zw`;w*w#*x~og)))))*~w*zw`;> GA;*w *x~og)))))~*~w)~!F7:F!xp*w :xog)))))>w!F6*w:xog)))))~!Fe!HG:xog)))))6*w#"w!x4!xͨÚ<"w*7C^#V*w<*w<"w*w>og;#"w*w*w*w>og^<"w*7C^#V*w<!x:w *w | *w#*w^|± *w#"y!yͨ!yͨ*w*w<"w:w=2w:w !w4Ó ^#V"y>2y:zw2y:yog:yogwbj"w!txDͺ(xx~# RE%!E>;%!F>;%@Ra%>B'!F>;%@*xx~2|x!F"w*w+:|xog!G*zw`;w*w*x~og)))))*~w*zw`;>GA; *|w#"|w "x*x | !x/F><,;!x!8yC"~w*Ã"zw"|z !aF6c#6FCP/M Version 3.0COPYRIGHT 1982, DIGITAL RESEARCH151282654321!w6!"w"w"zw"|w!w6*w`~!F­!w6*7C^#V*w<2x:w2x:xog:xog2y:yog | *w*y~og))))):yo! z;>2z>2z:zog |! z:z_>͉:*y+:zog>͛:!zF><0;!z!z5!z4Ò!"w"w"w2Rz2Vz2%*!w;@!7Ewx͛:!8Ewx͛:>m2y:w2y:yog:yogog^|*w: ![͊=m^#V"z!z*zr::z52z9!z5!z͛"tw!z͵"Hw*Hw|f!zF><0;!z*Hw^#V"Jw*Hw ^#V"7C*7*w+"z^#V:zog)))))6>2z:zog |U*z^#V:zog))))):zog6!z4!z4*w+"w*z~og+"w*z"z*z"z!z͜g*~w:yog`;:yogx͛:ʳ !y4W *~w:yog`;6c*zw+"zw:y!y4 >I*xw"w!yL! Wz"w*w*w"Szgo"w!HW"w!Hg"w*Sz*w<!XzD2Uz:w2\z:\zog:Uzog2y:yog |e*w:yog))))):yog6!y40!y4^#V"y!F6*wC^#V*7C~og#;͍6!Lw>͓7*7C###"{!{A#͍6!Pw>͓7!Tw"z*7C ~gj"z*7C~!z W#:>2z:zog |l*z++:zw*y4nS^#V"y*7C~og*w *y~og)))))~og<*y"y!y 2y:y:wog#>og^"w*w<:wo2z:w2z:zog:zog<*z^#V:zog)))))6>2z:zog |*z^#V:zog))))):zog6!z4ý!z4Ë*w*w#"w*w"w:yog#"w*xw*w< :y<2y:w2y:yog:yog*w#"w:Vzog*w<|!mz͜:Wzog*w<|!qz͜!**y~og)))))"y!z"y>2z:zog |*y+:zog~g.*w *y~og)))))~g.`|!z:zogw!z4á*yog)w#w*z!zF:|e*7C^#V |H:z=*z+:zogwe:zog+*z++:zog)s#r!z4×^#V"{*{>l7!g"w*~w:yog`;*w*w)))))*w `;>GA;*~w:yog`;~*w+*w)))))*w `;w!w6*w<$*z"z!zͨ*w*w"wA!z͵"Hw͖!z͛"twåz~# I*z^#V*w;͍6!z>͓7!z͚"w!z͌!zpg | !y *w#"w!y43 2y!yD !"w*xw*w GA;*w#"w*z4*z~og*w<|˜*Gx͛:R-%>B'!G> ;%@RI%>B'!2G>;%@c%*`! z;@! z>;!9E>;!SE>;ͥLw>l785"{!{^#V"{*{>l7>5!Lw>l78>55*7C ^#V^#V"{*{>l7>5!Pw>l78>55>^#P^#V"yR;%!-DB$!E>;!*y;!!E>;!@RL%>B'@(^#V"yR%>B'*y;%!-E> ;%@"w!z͘*z"z!zͤʤ!G͊= z~# ­*z^#V*w;͍6!z>͓7!z͚"w!z͌!zp"w!z͘*z"z!z!zͩy2w*w:yog)))))~og |*!y*w#"w!y4 :wE!yͨò ^#V"y!w# !yD*y6:w2y:yog*y~og̓z~og#>og^}*zwz~# ¡*z"z!zͨ*w*w"w*z6*w#"w%z~# *z~2z:w2z:zog:zog<\*V" {*7C^#V* {^#V<&!S͊=* {^#V͍6!Pw>l779`^#V""{!${"&{!"${*"{~*&{w*${ruq!U͊=Û͇!!RC4<:MCG:LCʕ!PCP>2QC$!LC5¡:MC!OC<_!;C>w w>+!NC~5>. G:QCx0:NC> !PC~ 5!NC4!Kx2LC=E$:RC+-/29{!7{K':iC+$!XC+$> 3$> 3$3$26{!4{'!:{Ú=ê$$^$^#Vʃ$a$ͪ$F$#F|$#N|$#^#r+^#V#^#V́"> ́"> > ́">́{2> ́"́">́"> 2!2`i#:1{ "<21{͚"Û :3{O:-{"H":1{3":-{B="?":1{*?"> #͖"Û :3{O:-{CV"D:PCi"> # #Æ":-{C}"# >R#Æ"#({;!GG({x͛:ʙ>ɯB^#V^͞#V ͪͪ"  Later CP/M or MP/M Version Required$*}**}{oC5-2QCx!KC^4{# # !;C~0>0"+{*9C~2/{:PCA Ϳ"A <:/{20{>Vͬ"!0{S 5~/o :SC‰ >9ͬ"ʉ >*ͬ"w  y *:0{!9>x2LCy2MC"){Aͯ:LC!MCP& G7!9~#$&*){7<$2;C2PC2SC<2KC!9 V+iv-v>2PC#ҏ…s#^#V++r+s~F$5F$$5^$q#pF$O$4~ $_$s#r#s#r#q!$Ú=$$C$$ Format Overflow*C-&C![{PY*}~##~#fo##^#V#{_z/!T]W{_z<KB ^#V^#V)F<*}!9{ozg|B#͖"͖"Û :0{*+{!3{4!2{4S+-$G:/{Ox*9C## ¶"<>Sͬ">+ͬ">-ͬ">Cͬ">Dͬ":/,.B!2{N*9C# Ⱦ"G:2{zg|g}o!\!l!*:3>:͞!L*3>͞K* !*ͤ͞ q#=€ Ï">21{<22{23{ 2.{:2{_:/{"*9C~2-{:-{9 :1{ :1{21{͟" :3{=O:1{##:3{O:.{#͖"Õ Z *A!O:1{!y ʉ ,v.¦#Ҧ,×eʰE+-# %> %͹%> %{ ʛyÖvgl #~wþ_:/{O x*9C# Ⱦ#!i#9w$G:PC8#x+-L#SF#x+L#-SI#>+>-> F$ h#x=b#G#O# #:kCx#ډ#!ZCxO#  >  ͤͤͤͤͤͤͤͤͤ͞21{:1{)!:.{0)!:3{O:-{*#!> #;!:1{21{:3{O:.{#͖"Õ :-{͟"!:-{"†!:-{"o!:3{O:-{##͖"Û :-{21{:3{O> #:KC,y2OC ~#z0 0!SC_w!KC~I4_!;Cs<<2NCG:OC<2KC=<:;C<ͯ‡:;Cʇ!OC5=>'%!9ʨ%=~#'¡%{>'%%Ì%{=>'%{>b%*XC++|2{!{'ɯ%>%>2|" |" |`i" |!9"|!{%[| ~))o |O#"9C[4BZ!9SJ~#$:> $J&9}x2LCy j2MC"){A $Õ# µ#x¯#>$O# ##O#x#>O#='#$x!XC#$#:iC#$:XC> ͲͲͤͲͲ Ͳ͞ Ͳͤ!Ͳͤ"Ͳͤ#Ͳͤ$ͻͤ%ͻͤ(ͤ1͖"Û :1{!:.{0¢!:3{O> #!:3{=O:-{##:3{O:.{#:1{21{!:3{O:.{#͖"Õ :-{V":1{":1{21{͟"":3{=O:1{## %*[|~n&*[|~C&!U|>;G3!!!C(!C"i|!g|͋*k&!U|>;G3!R.!!C(!C"m|!k|͋*À&*]|"o|!o|͋*!q|( }6Ò,:`C2 }!`C6: } ڡ,*XC#"XC: } ±,!XC6#6: }"3" 3*3^#V#"3^#VͿ,,"$3,"(3|,|~Ϳ,,ya-A"|!|͚=^#V^#VOA:Cڨ*!*͚=2CO!C·*6ü* +~#w!C s#r!C4A**C** I/O Stack Overflow!9"|!|*+!"3*(3(3w# 1*(3~#3*(3 B>3*$3w#w3͵,,34/Ϳ,q3͵,,3Ϳ,Nm/3*(3~" 4#4#4͵,,3~Œ1C#"ZC!ZC#(!ZC6#6*ZC*kC#<|(!C"|!"|!|͚=('!`C6"|!9"|!|(! 9^|~# (*|^#V|)ɐ*/!}6P  eA eA!}^r+s6 #6 !}4^N*(3|Z/}=G/.V/R.R/O>~f/f/>ͨ/N*(3|’/YR.=/y*a|^#V!aCs#r*c|^#V!cCs#r*_|^#V:|*qC:|G&!u|('*_|^#V}*qC}G&!w|(':C '*_|^#V}*qC} =.:;<>[]y *"3, -(-,$-,1J- o&))))\xH  g-#w g--"-*(3#ʖ9$>'+%~T]O ++~+>x^#V"|*|6͌+;,T+!C"}!" }!}͚=M,]+^,2}:}+,ͩ+:|> b€+,1K43.>13͵,,3~.>13*(3~ʹ1>31P43*(3!*~!/2,3*(3|1(^#V,,{z1z]2*|*| r:*| nb5)*| !|>=;O)!|>;*|:!|;*|~#{)*|^#V)))|{)*|6P#6*|‹/eAÎ/>~ʞ/=ʞ/>ͨ/q2-3*(3/"*3./{..**3*(3#:-3O/.#s#r/../.è/G '!y|(':C''*_|^#V}''!{|('^#V"}|!C"|*}|"|!|͚=2|!|K'^#V"|:CZ':C'*|'*|5!|6:| ʀ'ͳ'r'-AҖ-G-,:ʛ- 6à-p4-+4--#,-#*½-6?-w-¬-,---#6 -..- 4-.,.#*-6?.wÆ+ͩ++>,;,+V,+D,+Ì+V,+:}+^,+,^,++D,+M,+,,é+!`C6M,+V,+D,2'3z(2:,324/q#2Nm/#2*(3|]2*~]2=!'3Z2:,3ͨ/W2S2w:2^1>͵,,3|}3~> 3<3͵,~#µ)*|^#V))|)*|6#6õ)*|6<#6*|6#6*|6#6*|6#6*| 6*|^#V}4}2|*|^#V}.r+s{0!'34**3+>|0+}o͵,Ϳ,~2&3Ϳ,""3,:&3.1[.a0G:&3.1*$3p[04#63,:&3|00*3++"3Å0}+a'ò'!|'*|'*|5!`C6!|':`Cʯ'*|6Ì'g,2|:|'!C"|!"|!|͚=!XC6#6!|6 :C'!|'^#V"|!TC"|*|"--,.-.#6 .%#6.*(3##^ ~?1.# *.xCON CON RDR PUN LST M!L. ~"-$.-,1ҕ.\|.l ,:|!`Cw,+g,2|*|~!,:|*|#*|~ogw*|4:|:| :|,:| ?:|':`C‡,!TC"}! }81,!,3|”2*$3w=3*(3$B*$3^#V6+6++<3͵,,3>3"N#F#~Ϳ,q#p#w>3͵,,3>3*~,!2=2>!* *!|44*|^#V}"*>2|*|^#V}M**|~#M**|6#6*|"|*|"|*|"|!|(0*|^#V|Š**|"|!00}|23"3,0"31F<|.1##"(36*$3s#rv-š2{ ʚ2*(3:&3w060*3"3<1:&3š20<ʚ2!|!|K1%(!C"|!"|!|͚="((:C(*|~ ?(*XC#"XC(*|~ S(!XC6#6(:C(*|~ u(*\C#"\C!ZC6#6(*|~ (*Z.$.!~ .-!9.,°. ʾ.-#Ý.x=GÚ.->ɯ*(3+.^#V.#{#z.6#6. r+s!}F#~(3" s#r#w=3* 3 }!m}6 4>2l}*i}!4#4#4~#N#F#y#x#:l}*i}!!:k}~͒9<7>?'w#•9'w#¦97>?'w##´9^{w{W#9!9Ú=9999!9MD^#V# + {7>7w#Ì7 O~#¢7Gxڵ77 9> 79#7!9!97>?'w#7!9͛8! 9͛8yx >c>_!?^#Vͺ>]>>(_>y͖>>)_>|@>R>'?|L>R>ͺ>>B>,_>]>> _eA eA eA0:_>_>!9Fx7yҮ5! 9~WwzO+›55_ /!9~#=557"n}>6*n}"p}56*p}"p}56o>g{ozg!<Ú=<<3.3~3#!!3! 6? w9ȇ :):Wf.0:r~#fo0:s#r!>O @:)8:|W}_ W:|}o|gG:yx/Wy/_{zW{_e:yw# r:~#9! y@88!9o>g~18Gx8f848!9!w# L898!9!9!'#s8!m>m>]>|{>}{> ڦ>dԨ> ͨ>ڳ>ê>xm>N #~_>ü>!?ͺ>*}!9{_z>{> ?>]>>#_>*}>*p}G!9!xb6 ]6+/6$%O>G!$q#p#6R4"f}"i}2h}x2k}.32l}>3!h}~54m3ʘ4=4:k}:~#W #ÿ:F#"r}x;:*r}!9G_>WObk++:~+:y9^{w{W#‡8~W8~+¶8ê87>?'w# þ88!9~#88!99#8>=^#V#͇>??>: "?>?_>!?ͺ>ͺ>>=_>^#V|W?}N?.))@ú>#F>A?> #r?~ >.?~ ?=c?^o&9}og9##z<|6;xڹ6K6{w#ã6q7O!9 w#660#60! 9~ 7!97>Q={zQ=}|Q={+=+=i`~sw#r##q#p i`N#F#^#V~Q=q4#p+i`##s#rW=Bs=B FREE Request Out-of-Range$ Free Space 4*i}<˜4G34*f}:k}O*i}:m}´4y O4:k}G3*f}w# 4N3:l}4*i}!]343*f}"f}g4:l}/g.>~#/o&9y>o&90w+i76.=!C{#z*aC*cC@xGx|g}o5@5!9VzwzO#5<599! 9/GO~9O9~q+d5!96#=w5O; ҈;S\e. ғ;.HEg)Ҟ; )ң; )Ҩ; )ҭ; )Ҳ; )ҷ; )Ҽ; ); z|/); ;=;); KEYNULCONCONRDRPUNLSTBADG!C~N@3@B Condition Stack Overflow$4Ox!t} w#s#r#s#r!9!C s#r!CN!t 3Cannot re-format the directory with RSXs in memory. Unrecognized drive.Cannot select drive.! ABCDEFGHIJKLMNOPDRIVE: SPECIFIED DRIVE.1Do you want to re-format the directory on drive: Do you want the existing time stamps cleared0Do yo—ByʴB >O6# ŽB ~B=ɯ ~#fo++-B!}~#B*}$BBCBC  Insufficient Memory} +++++‡@#{ @#zʥ@++~Ç@++!C5!~# ´@ð@!CN!t} +++++@#~#@+{@#z@++~@#^#V=!C~ Enter Drive: :Directory is password protected.Password, please. >u want to recover time/date directory space (Y/N)? YyABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzEnd of PASS 1. $ Invalid I/O List End of Execution$(CdOA5:C_!C^#V"CTC.~# !A*qC)))))C )| 6A*TC|}*D"XC:C*CTCw# \A*D{ vA zA!#"D ERROR: INITDIR TERMINATED. Requires CP/M 3.0 or higher. Directory already re-formatted.Not enough room in directory.SYSINSYSPRINTACopyright (c) 1980 Digital Research, v1.3 !"}"}"}2C2C*} A"}q#p##}o"}*}o|ABB+w+w+r+s4w#w# Wrong password.No time stamps present. Not enough available memory. Disk is READ ONLY. Cannot find last XFCB.     30INITDIR WILL ACTIVATE TIME STAMPS FORs#r<2}++*}s#r"}*}#"}*}DM!}x~¾B#~+¾B+F+Nq#p*}+"}ʹBҼB=oB!+~O~#~G!/xwwwwzwzwzwzwFGzzzxwwwwwwwwGwwwxxwxxwwx|| }} }{Jw6{9{B{C{CD{F{ Invalid Format ItemxX0Y""f@VmjYVlUyBlڰ :0rP1nʲLJ5cAyI ;6 pfiEt(Ub F$ [@{m8A8upBk  0"[-Ke%ـlD24D) #: Id ynјY)AB@h(P&!r7Bi6L@r2L@3%0h(H @P( @P( @P( !U %Ja`ͼ` `@k+T$ dp#t f`C՛V]b3jH6'p0!!*WH|#+x[݀:a v@hEpFHӄW !^ͦb+2+:PV CpvHA$Uw eͽDdo!epBgᕿf`AթS C%}@c~w title 'Copysys - updated sysgen program 6/82' ; System generation program VERS equ 30 ;version x.x for CP/M x.x ; ;*******Ce6LgA!@r6а0 f a0 f f'/v{BH»@Y{La0`5;l:JfѰՐ^b1b+$Dp"[<-Ki%pm@D"[T-Kl%A@mD"[n-Kn%ЉmD"[-?帡`n@D$"[-Ks% {tXf. rfi3A R G#`a6 #n1  Fp l [ -"ڴ#+[p[@?쁲[*@`^2K6meRq}Bwٴj^2! ;4f@RzKƬ;ͽ~ â:!~mU0wz@uB@+d>g>:N ,:h : Rxf0V jo<- 'i0)d`@!M#%y`ݒ{JI;%%Ydn0ڄ-V<|fހfQ*************************************************** ;* * ;* * ;* Copysys source code * ;* * ;*#b1En6`  fԐ1Uum(@8"ͩ bT|Ёnʲc`ݒͣJU;$wgvHea͵@lNd6Xt\ Ux&m&bsX$@UaUzjH+{P@3k(3jK4K6`JYG&ml fհmIW, x@(dz¦.U _6J X ^Ȋ l9O/J7ps[F՛/xFV][^+vz@W ]+z@t"^+zEW Tz@͵͸ja] mfݠ6ma`Q2XCp̃\Ub4f07 JYM"3i(2GV ew*a q='@DuO#?(W * ;********************************************************** ; FALSE equ 0 TRUE equ not FALSE ; ; NSECTS equ 26 table-sector numbers are translated here to decrease ; the systen tie for missed sectors when slow controllers are ; involvedDSK equ 9 ;Bios func #9 SELect DiSK SETTRK equ 10 ;BIOS func #10 SET TRacK SETSEC equ 11 ;BIOS func #11 SET SECtor SETDMA UE lda TEMP jnz TRK2 ; mvi a,00h sta BREG ;zero out B register mov a,c ;Acc = track # sta CREG ;set up PB mvisk OPENF equ 15 ;disk open function CLOSEF equ 16 ;open a file DWRITF equ 21 ;Write func MAKEF equ 22 ;mae a file DEL of regE to get jmp address mov a,e ;Acc = E sui 1 mov e,a ;get ready for multiply add e add e mov e,a ret ;ba ;no. of sectors NTRKS equ 2 ;no. of systems tracks NDISKS equ 4 ;no. of disks drives SECSIZ equ 128 ;size of sector LOG. Translate takes place according to the "SKEW" factor ; set above. ; OST: db NTRKS ;operating system tracks SPT: db NSECTequ 12 ;BIOS func #12 SET DMA address READF equ 13 ;BIOS func #13 READ selected sector WRITF equ 14 ;BIOS func #14 WRITe sei a,SETTRK ;settrk func # sta BIOSFC mvi c,DRBIOS lxi d,BIOSPB jmp BDOS TRK2: lhld WBOOT lxi d,SETTRK call MLTBY3TEF equ 19 ;delete a file DREADF equ 20 ;disk read function DRBIOS equ 50 ;Direct BIOS call function EIGHTY equ 080h ;vack at it ; SEL: sta TEMP lda V3FLG cpi TRUE lda TEMP jnz SEL2 ; sta CREG ;CREG = selected register lxi h,0000h2SEC equ 7 ;LOG2 128 SKEW equ 6 ;skew sector factor ; FCB equ 005Ch ;location of FCB FCBCR equ FCB+32 ;current record loS ;sectors per track TRAN: TRELT set 1 TRBASE set 1 rept NSECTS db TRELT ;generate first/next sector TRELT set TRELT+Slected sector ; org TPA ;Transient Program Area jmp START dw 0,0,0,0,0,0,0,0 dw 0,0,0,0,0,0,0,0 dw 0,0,0,0,0,0,0,0 dad d pchl ;gone to set track ; SEC: ; Set up sector number sta TEMP lda V3FLG cpi TRUE lda TEMP jnz SEC2 ;lue of 80 CTLC equ 'C'-'@' ;ConTroL C Y equ 89 ;ASCII value of Y ; MAXTRY equ 01 ;maximum number of tries CR equ 0Dh ;C shld EREG ;for first time mvi a,SELDSK sta BIOSFC ;store it in func space mvi c,DRBIOS lxi d,BIOSPB jmp BDOS Scation TPA equ 0100h ;Transient Program Area LOADP equ 1000h ;LOAD Point for system BDOS equ 05h ;DOS entry point BOOT eqKEW if TRELT gt NSECTS TRBASE set TRBASE+1 TRELT set TRBASE endif endm ; ; Now leave space for extensions to translate dw 0,0,0,0,0,0,0,0 dw 0,0,0,0,0 db 0,0,0 maclib makedate @LCOPY @BDATE db 0,0,0,0 db '654321' ; ; Translate mvi a,00h sta BREG ;zero out BREG mov a,c ; Acc = C sta CREG ;CREG = sector # mvi a,SETSEC sta BIOSFC ;set up barriage Return LF equ 0Ah ;Line Feed STACKSIZE equ 016h ;size of local stack ; WBOOT equ 01 ;address of warm boot ; SELEL2: mov c,a lhld WBOOT lxi d,SELDSK call MLTBY3 dad d pchl ; TRK: ; Set up track sta TEMP lda V3FLG cpi TRu 00h ;reboot for system CONI equ 1h ;console input function CONO equ 2h ;console output function SELD equ 14 ;select a d table ; if NSECTS lt 64 rept 64-NSECTS db 0 endm endif ; ; Utility subroutines ; MLTBY3: ;multiply the contentsios call mvi c,DRBIOS lxi d,BIOSPB jmp BDOS SEC2: lhld WBOOT lxi d,SETSEC call MLTBY3 dad d pchl ; DMA: ; SeDOS ; DWRITE: ; Write for file copy mvi c,DWRITF jmp BDOS ; DREAD: ; Disk read function mvi c,DREADF jmp BDOS ; BDOS ; Convert to upper case cpi 'A' or 20h rc cpi ('Z' or 20h)+1 rnc ani 05Fh ret ; PUTCHAR: ; Write characterETCHAR cpi CR jnz REBOOT ;jmp only if not verified call CRLF ret ; DESTIN: lxi d,PUTPRM ;address of message call READF call MLTBY3 dad d pchl ; WRITE: ; Perform write operation sta TEMP lda V3FLG cpi TRUE lda TEMP jnz WRITISK ;tell user bad drive jmp SOURCE ;try again ; GETC: ; Select disk given by Acc. adi 'A' sta GDISK ;store source dt DMA address to value of BC sta TEMP lda V3FLG cpi TRUE lda TEMP jnz DMA2 ; mov a,b ; sta BREG ; mov a,c ;SOPEN: ; File open function mvi c,OPENF jmp BDOS ; CLOSE: mvi c,CLOSEF jmp BDOS ; MAKE: mvi c,MAKEF jmp BDOS ; from rA to console mov e,a mvi c,CONO call BDOS ret ; CRLF: ; Send Carriage Return, Line Feed mvi a,CR call PUTCCRMSG ;print it call GETCHAR ;get answer cpi CR jz REBOOT ;all done sui 'A' cpi NDISKS ;valid disk jc PUTC ; E2 ; mvi a,WRITF sta BIOSFC ;set up bios # mvi c,DRBIOS lxi d,BIOSPB jmp BDOS WRITE2: lhld WBOOT lxi d,WRITF isk sui 'A' mov e,a ;move disk into E for select func call SEL ;select the disk jmp GETVER ; DFLTDR: mvi c,25 ;fuet up the BC sta CREG ;register pair mvi a,SETDMA ; sta BIOSFC ;set up bios # mvi c,DRBIOS lxi d,BIOSPB jmp BDOS DELETE: mvi c,DELTEF jmp BDOS ; ; ; DSTDMA: mvi c,26 jmp BDOS ; SOURCE: lxi d,GETPRM ;ask user for source drivHAR mvi a,LF call PUTCHAR ret ; CRMSG: ; Print message addressed by the HL until zero with leading CRLF push d ca; Invalid drive call BADDISK ;tell user bad drive jmp PUTSYS ;to try again ; PUTC: ; Set disk fron rA adi 'A' sta Pcall MLTBY3 dad d pchl ; MULTSEC: ; Multiply the sector # in rA by the sector size mov l,a mvi h,0 ;sector in hl rnc 25 for current disk call BDOS ;get curdsk adi 'A' sta GDISK call CRLF lxi d,VERGET call OUTMSG jmp VERCR ; GDMA2: lhld WBOOT lxi d,SETDMA call MLTBY3 dad d pchl ; READ: ; Perform read operation sta TEMP lda V3FLG cpi e call CRMSG call GETCHAR ;obtain response cpi CR ;is it CR? jz DFLTDR ;skip if CR only cpi CTLC ;isit ^C? jz REll CRLF pop d ;drop through to OUTMSG OUTMSG: mvi c,9 jmp BDOS ; SELCT: ; Select disk given by rA mvi c,0Eh jmp BDISK ;message sent sui 'A' mov e,a ;disk # in E call SEL ;select destination drive ; Put system, set r/w to write lxept LOG2SEC dad h endm ret ;with HL - sector*sectorsize ; GETCHAR: ; Read console character to rA mvi c,CONI callETVER: ; Getsys set r/w to read and get the system call CRLF lxi d,VERGET ;verify source disk call OUTMSG VERCR: call GTRUE lda TEMP jnz READ2 ; mvi a,READF sta BIOSFC mvi c,DRBIOS lxi d,BIOSPB jmp BDOS READ2: lhld WBOOT lxi d,BOOT ; sui 'A' ;normalize drive # cpi NDISKS ;valid drive? jc GETC ;skip to GETC if so ; ; Invalid drive call BADDi d,VERPUT ;verify dest prmpt call CRMSG ;print it out call GETCHAR ;retrieve answer cpi CR jnz REBOOT ;exit to systlda RW ora a jz TRYREAD ; ; Must be write call WRITE jmp CHKRW TRYREAD: call READ CHKRW: ora a jz RWSEC ;zerotor) call MULTSEC ;*sector size xchg ;to DE lhld DMADDR ;base DMA dad d mov b,h mov c,l ;to set BC for SEC callFCBCR ;current record = 0 lxi h,LOADP RDINP: push h mov b,h mov c,l call DMA ;DMA address set lxi d,FCB ;ready f sta SECTOR ; RWSEC: ; Read or write a sector lda SPT ;sectors per track lxi h,SECTOR inr m ;set to next sector ility mvi c,12 ;version check call BDOS mov a,l ;version in Acc cpi 30h ;version 3 or newer? jc OLDRVR ; mvi a,Tem if error call CRLF ret ; ; GETPUT: ; Get or put CP/M (rw = 0 for read, 1 for write) ; disk is already selected lxi flag if read/write ok ; ;Error, retry operation jmp TRYSEC ; ; End of track ENDTRK: lda SPT ;sectors per track call call DMA ;dma address set from BC xra a sta RETRY ;to set zero retries ; TRYSEC: ; Try to read or write current sectr read call DREAD pop h ;recall ora a ;00 if read ok jnz PUTSYS ;assume eof if not ; More to read continue lxi d,Scmp m ;A=26 and M=0,1,..,25 jz ENDTRK ; ; Read or write sector to or from current DMA address lxi h,SECTOR mov e,m ;seRUE sta V3FLG ; jmp FCBCHK OLDRVR: mvi a,FALSE sta V3FLG ; ; Check for default file liad instead of get FCBCHK: h,LOADP ;load point in RAM for DMA address shld DMADDR ; ; ; ; ; Clear track 00 mvi a,-1 ; sta TRACK ; RWTRK: MULTSEC ;*secsize xchg ; to DE lhld DMADDR ;base dma for this track dad d ;+spt*secsize shld DMADDR ;ready for neor lda RETRY cpi MAXTRY jc TRYOK ; ; Past MAXTRY, message and ignore lxi d,ERRMSG call OUTMSG call GETCHAR cpi CECSIZ dad d ;HL is new load address jmp RDINP ; GETSYS: call SOURCE ;find out source drive ; xra a ;zero out a ctor number mvi d,0 ;to DE lxi h,TRAN mov b,m ;tran(0) in B dad d ;sector translated mov c,m ;value to C ready folda FCB+1 ;blank if no file cpi ' ' jz GETSYS ;skip to system message lxi d,FCB ;try to open it call OPEN inr a ;2 ; Read or write next track lxi h,TRACK inr m ;track = track+1 lda OST ;# of OS tracks cmp m ;=track # ? jz ENDRW xt track jmp RWTRK ;for another track ; ENDRW: ; End of read or write ret ; ;******************* ;* ;* MAIN ROUTINE R jnz REBOOT ; ; Typed a CR, ok to ignore call CRLF jmp RWSEC ; TRYOK: ; Ok to tyr read write inr a sta RETRY sta RW ;RW = 0 to signify read call GETPUT ;get or read system lxi d,DONE ;end message of get or read func call OUTMSG r select push b ;save tran(0) call SEC pop b ;recall tran(0),tran(sector) mov a,c ;tran(sector) sub b ;--tran(sec55 becomes 00 jnz RDOK ; ; File not present lxi d,NOFILE call CRMSG jmp REBOOT ; ;file present RDOK: xra a sta ;end of read/write ; ; Otherwise not done mov c,m ;track number call TRK ;set to track mvi a,-1 ;counts 0,1,2,...,25 ;* ;* ;******************* ; START: lxi sp,STACK lxi d,SIGNON call OUTMSG ; ;get version number to check compatab ;print it out ; ; Put the system PUTSYS: call DESTIN ;get dest drive ; lxi h,RW ;load address mvi m,1 call GETPUText record ora a ;end of file? jnz EOF ;skip write if so ; lda CRNREC inr a ;bump it sta CRNREC ; lda BEGIN m ; ; Source and destination fcb's ready ; lxi d,SFCB ; call OPEN ;open the file lxi d,NOFILE ;error messg inr a ;25OS call CRLF jmp BOOT ; BADDISK: lxi d,QDISK call CRMSG ret ;**************************** ;* ;* ;* DATA STRUCTUR00h mov e,a ;DE = selected disk call SELCT ; now copy the FCBs mvi c,36 ;for copy lxi d,SFCB ;source file lxi h,DF ; lxi d,LOADP xchg shld BEGIN ; lda BEGIN mov l,a lda BEGIN+1 mov h,a LOOP2: xchg call DSTDMA lxi d,DFCB ;to put system back on disk lxi d,DONE call OUTMSG ;print out end prompt ; ; FILE COPY FOR CPM.SYS ; CPYCPM: ; Prompov l,a lda BEGIN+1 mov h,a lxi d,EIGHTY dad d ;add eighty to begin address shld BEGIN jmp COPY1 ;loop until EOF ;5 becomes 0 cz FINIS ;done if no file ; ; Source file is present and open lxi d,LOADP ;get DMA address xchg ;move adES ;* ;* ;**************************** ; BIOSPB: ; BIOS Parameter Block BIOSFC: db 0 ;BIOS function number AREG: dCB ;destination file MFCB: ldax d inx d ;ready next mov m,a inx h ;ready next dest dcr c ;decrement coun jnz call DWRITE lxi d,FSPACE ora a cnz FINIS lda CRNREC dcr a sta CRNREC cpi 0 jz FNLMSG lda BEGIN mov l,a t the user for the source of CP/M3.SYS ; lxi d,CPYMSG ;print copys prompt call CRMSG ;print it call GETCHAR ;obtain rep EOF: lxi d,DONE call OUTMSG ; COPY2: call DESTIN ;get destination drive for CPM3.SYS lxi d,DFCB ;set up dest FCB dress to HL regs shld BEGIN ;save for begin of write ; lda BEGIN ;get low byte of mov l,a ;DMA address into L lda BEb 0 ;A register contents CREG: db 0 ;C register contents BREG: db 0 ;B register contents EREG: db 0 ;E register contents MFCB ; lda GDISK ;Acc = source disk sui 40h ;correct disk lxi h,SFCB mov m,a ;SFCB has source disk # lda PDISK ;lda BEGIN+1 mov h,a lxi d,EIGHTY dad d shld BEGIN jmp LOOP2 ; Copy operation complete FNLMSG: lxi d,DFCB mvi c,Cly cpi Y ;is it yes? jnz REBOOT ;if not exit ;else ; ; mvi c,13 ;func # for reset call BDOS ; inr a lxi xchg lda PDISK sui 040h ;normalize disk mov m,a ;correct disk for dest xchg ;DE = DFCB call DELETE ;delete fileGIN+1 ; mov h,a ;into H also COPY1: xchg ;DE = address of DMA call DSTDMA ; ; lxi d,SFCB ; call DREAD ;read n DREG: db 0 ;D register contents HLREG: dw 0 ;HL register contents ; SFCB: DR: ds 1 F1F8: db 'CPM3 ' T1T3: db 'SYS' get the dest. disk lxi h,DFCB ; sui 040h ;normalize disk mov m,a ; xra a ;zero out a sta DFCBCR ;current rec = 0 LOSEF call BDOS ; lxi d,DONE ; FINIS: ; Write message given by DE, reboot call OUTMSG ; REBOOT: mvi c,13 call BD d,ERRMSG cz FINIS ; call SOURCE ;get source disk for CPM3.SYS CNTNUE: lda GDISK ;Acc = source disk sui 'A' mvi d, if there ; lxi d,DFCB ; call MAKE ;make a new one lxi d,NODIR inr a ;check directory space cz FINIS ;end if noneEXT: db 0 CS: db 0 RS: db 0 RCC: db 0 D0D15: ds 16 CCR: db 0 R0R2: ds 3 ; DFCB: ds 36 DFCBCR equ DFCB+32 ; ; V3FLG: format.' db CR,LF,' Type return to ignore.$' CLSERR: db 'ERROR: Close operation failed.$' ; ds STACKSIZE * 3 STACK: enWCopyright 1998, Caldera, Inc. 101198654321 PUTPRM: db 'Destination drive name (or return to reboot) $' VERPUT: db 'Destination on ' PDISK: ds 1 db ' then type return db 0 ;flag for version # TEMP: db 0 SDISK: ds 1 ;selected disk BEGIN: dw 0 DFLAG: db 0 TRACK: ds 1 ;current track CRNRE; ; [JCE] Have the date and copyright messages in only one source file ; @BDATE MACRO db '101198' ENDM @LCOPY MACRO d      {__27:6:72!"> 22O* 27:6$' CPYMSG: db 'Do you wish to copy CPM3.SYS? $' DONE: db 'Function complete$' ; ; Error messages...... ; QDISK: db 'ERROR:C: db 0 ;current rec count SECTOR: ds 1 ;current sector RW: ds 1 ;read if 0 write if 1 DMADDR: ds 2 ;current DMA address db 'Copyright 1998, ' db 'Caldera, Inc. ' ENDM @SCOPY MACRO db '(c) 98 Caldera' ENDM :7>2y2> 22* 27:6:7M>2y2> 22* 27:6:7{x2y2> 22* Invalid drive name (Use A, B, C, or D)$' NOFILE: db 'ERROR: No source file on disk.$' NODIR: db 'ERROR: No directory space.$' RETRY: ds 1 ;number of tries on this sector SIGNON: db 'CP/M 3 COPYSYS - Version ' db VERS/10+'0','.',VERS mod 10 +'0' db27:6:7¡> 22* 27:6:7>22*o&)))))))a{__> >  FSPACE: db 'ERROR: Out of data space.$' WRPROT: db 'ERROR: Write protected?$' ERRMSG: db 'ERROR: Possible incompatible disk '$' GETPRM: db 'Source drive name (or return for default) $' VERGET: db 'Source on ' GDISK: ds 1 db ' then type return $'  ` ]AO/A2A_sA2| L2  m@ C |i[acK%Y4SՑP 9- 4UPI =Y0ԑPc IM.2PUco directory space.$ERROR: Out of data space.$ERROR: Write protected?$ERROR: Possible incompatible disk format. Type return to TIO x<"9:9o::g* :==2=:9o::g"9× +/CPM3 SYS  AڣA2A_ !"@>2<!<4:VN>2>:!>4E!>^!FN)yI50#(u!=UJ4ՑP'`q5%:2VcIM22dPUMI 0S5^ ̕{%^uVKL*V@&K$eignore.$ERROR: Close operation failed.$!w# :@!w:!@w22Y<"9:og*CP/M 3 COPYSYS - Version 3.0$Source drive name (or return for*@DMX2B:B* <2B:?;ͬ>͆:*@"@1iC }0s>26x>26:] ʲ default) $Source on  then type return $Destination drive name (or return to reboot) $Destination on then type return $Do youFE26 @AIVEC FE28 @AOVEC FE35 @BNKBF FE22 @CIVEC FE24 @COVEC FE3C @CRDMA FE3E @CRDSK FE58 @DATE FE4B @ERMDE FE43 @FX FE5A @HOUR\<“Y2|!DMX\Ú/2?͈!?6Y </:A_$cZeh%i  ?ci'-yi.ILdZ`L ɖ L*a1diG5^ ̕{%^uVKL*V@&K$e wish to copy CPM3.SYS? $Function complete$ERROR: Invalid drive name (Use A, B, C, or D)$ERROR: No source file on disk.$ERROR: N FE2A @LOVEC FE5B @MIN FE62 @MXTPA FE41 @RESEL FE5C @SEC FE44 @USRCD FE3F @VINFO FE57 @BFLGS FE51 @ERDSK FE54 @MEDIA FE4A @ML!w# :@!w:!@w22Y<"9:9o::g*d:=<2=:9o::g"9=͈:@w%