IMD 1.18: 15/11/2012 17:43:03 tdospc   Wang 3.0p  ***44 SYSTEM FILES MISSING***45 DISK READ ERROR***46 DEFECTIVE START DISKBIOS SYSMSDOS SYS*S*&͒͑Āu>6&ء͑Āt׾uctOtE@&2=xt=t  ؾ*3k󥡍-&Z@QVW _^Yt UMAPSQ3һ؋sY[XQRŠ 2t +rC@;u3[X+QR- 26͑>Āu2ZY uþW ͋͗ 5  @`! #o')+-/1 3@579;?A C@E`GIKM/SoWY[]_a c@e`gikoqy{} @` @ ` o @ `  @ ` ǀ @ o ׀ ٠  @o @`!JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ  @`! #o')+-/1 3@579;?A C@E`GIKM/SoWY[]_a c@e`gikoqy{} @` @ ` o @ `  @ ` ǀ @ o ׀ ٠  @o @`!JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ-READ ME- -TPCUPD-001 BOOTARC A RBOOTFILEA !BOOTFILECOM $BOOTROM A %ACFGTPC COM 6CFGTPC MSG =DCHANGE COM OCHECKSUMA Q CHECKSUMCMD TCMDTOCOMA UCMDTOCOMCMD ZCMPAT210DOC \/CMPAT310DOC hDATETIMECOM lFCN5PRN A mFCN5PRN COM rLANTPC DRV sLOCAL A tLOCAL COM uMASTER COM vPCDOS210CLI wEPCDOS310CLI [PRINT COM PRINTER COM REASSIGNCOM RESET COM SWEEP EXE gTPCLOD DOC (TPCLOD GEN TPCLOD PAR TPCLOD ROM TURBOARCA TURBOPC1COM >TURBOPC2COM _TURBOPC3COM TURBOPRNA TURBOPRNCOM TDOSPC (   INSTALLATION NOTES FOR TurboDOS/PC (3/25/85) Welcome to a new inovative world of PC networking support provided by the creators of the TurboDOS operating system, Software 2000. In the distribution of this new product, Intercontinental Micro Systems has attemped to make your configuration simpler with the use of our utility called "CFGTPC" (Configuration Utility for TurboDOS/PC). This utility resides on your distribution diskette that is DOS (PC-DOS or MS-DOS) compatable. First, please read your TurboDOS/PC manual for an understanding of what this product is capable of providing for you. Then you may proceed with the installation of the TurboDOS/PC network driver for your ICM LAN products. TurboPC2 (or TurboPC1 for DOS version 1 only) will default looking for the network driver in the file "TURBOPC.DRV" on the default drive. ICM distributes the object code of the LAN product driver in the file "LANTPC.DRV". Before using the configuration utility, copy our driver object code into the default file name with the DOS command: COPY LANTPC.DRV TURBOPC.DRV Then you may run the configuration utility with the DOS command: CFGTPC Note that the configuration utility will provide help when a "?" is entered into the main options menu or the sub-menus. OM.EXE.BATVBAPW (:t$:t:u >&t&!tWV&2&w& FF&#>!&:$u&&:Du &:|u&|&d&D>!$^Ã!^&&<u>&t&e&$2ۃ&:v&Ãu*&$*F&4'."t' F&F&u(7"udP+#"%@?u%"" "t ̀ߊX%S2&[2P+uX2؀u &'C&&t t#$ÊȀ"tı< t<t< t < u0&"&$4&"- &"#0&"t"&"t  &"&#.# InterContinental Micro Systems, Inc. TurboDOS/PC Version 1.08 Update Information July 12, 1986 Written by: John E. Lauber  OVERVIEW  Thi i th distributio o TurboDOS/Pà versio 1.08 Th existin Softwar 200 Guid stil remain curren wit thi version but I feel a few points should be noted by this document.  FEATURES  TurboDOS/Pà versio 1.0 represent th堠 lon砠 an䠠 har developemen pat begu b thi produc fo tru fil sharin an recor lockin capabilities Al th IB documente fil sharin DO function hav bee place int 1.08 an teste t th bes of our knowledge. Previou bug concernin recor lock wer no tha bad i yo conside tha DO 3.1 ha simila recor loc bug also Th latest IBM DOS version 3.20 is a better effort.  INSTALLATION  TurboDOS/P versio 1.0 MUS B USE wit TurboDO versio 1.43 Ther   ar n exception t thi rule IC wil releas TurboDO 1.4 a th sam tim T/P 1.0 i released s pleas updat your file servers at the same time. Th suppor fo TurboDOS/P client b you fil serve ha bee separate int it' ow modul "TPCSUP" Thi mus b include int al operatin system wit dis peripheral attache t them Thi include dis device tha ma b attache t slav operating systems also. Supplie o you distributio dis i ne patc documen develope fo "COMMAND.COM unde DO 3.1 (DO 3.2 wa no availabl a th time) Thi i simila t th patc develope fo DO 2.1 an dramaticall increase you progra loa tim vi th network Consul th fil "CMPAT310.DOC fo mor details. John E. Lauber #title "Download boot ROM for PC-DOS and TurboDOS/PC" #subttl "Copyright 1986, Software 2000, Inc." ; Version: 07-Jan-86 module "BOOTROM" ; BOOTROM.A is a sample bootstrap ROM that illustrates one ; method of implementing network downloading of MS-DOS or ; PC-DOS and TurboDOS/PC into a diskless workstation. This ; sample code is intended to be stored in an auxilliary ROM ; (supported by most popular PC networking boards) and to ; work in conjunction with the ROM BIOS of an IBM PC or ; compatible work-alike machine. Modifications will most ; likely be required for workstations which differ from the ; IBM PC in any significant way. ; Here is the basic strategy used to implement downloading: ; ; 1. A normal PC-DOS system diskette is prepared. It must ; contain a boot sector, the system files necessary to ; boot PC-DOS (for IBM PC-DOS: IBMBIO.COM, IBMDOS.COM, ; and COMMAND.COM) and the files necessary to load ; TurboDOS/PC (TURBOPC.COM and TURBOPC.DRV). ; ; 2. The system diskette is converted to a download boot ; file (using the utility program BOOTFILE.COM) and ; stored on the file server's disk where the boot ROM ; expects to find it. ; ; 3. The boot ROM is given control during the ROM BIOS ; initialization phase, and alters INT 0x18 (ROM BASIC ; entrypoint) and/or INT 0x19 (floppy disk bootstrap ; entrypoint). When the ROM BIOS has completed its ; initialization phase, it executes INT 0x19 (if a ; diskette is available) or INT 0x18 (otherwise). Since ; these interrupt vectors have been altered, the boot ; ROM will get control at this point. ; ; 4. The boot ROM sends a network request to open the ; download boot file. It then alters INT 0x13 (the ; physical disk I/O entrypoint of the ROM BIOS) to ; point to a disk I/O routine in the boot ROM which ; converts physical disk I/O requests into corresponding ; network requests accessing the download boot file. ; ; 5. Using the altered INT 0x13, the boot ROM reads the ; normal PC-DOS boot sector into memory at 0000:7C00 and ; jumps to it (just as the ROM BIOS would have done). ; ; 6. Loading of PC-DOS now proceeds in the normal fashion ; except that all physical disk I/O operations are being ; redirected over the network. #page ; To prepare a binary file for ROM programming, assemble ; using TASM, link using TLINK, manually strip off .CMD ; header (first 128 bytes) and then manually patch checksum ; byte so that all bytes of the ROM sum to zero (modulo ; 256) as required by the IBM ROM BIOS. tlink "B" ;omit base page ; The sample boot ROM code which follows is divided into ; two parts. Part 1 implements the basic download stragety ; described above, and is dependent upon the IBM-compatible ; ROM BIOS but independent of the type of network hardware. ; Part 2 contains a network circuit driver appropriate to ; the particular type of networking hardware being used. ; Part 1 follows: ; The boot ROM needs access to an area of RAM that is not ; used by PC-DOS. Here we are using the top half of the ; interrupt vector area (0000:0200 to 0000:03FF). ramseg == 0x20 ;RAM segment used by ROM ramlen == 0x200 ;RAM length (bytes) romlen == 8192 ;length of boot ROM (bytes) ; define bits in TurboDOS message format code "msgfmt" frstmb == 1<<0 ;first message in session lastmb == 1<<1 ;last message in session morfol == 1<<2 ;more follows reqfcb == 1<<3 ;request contains fcb reqdat == 1<<4 ;request contains data repf  cb == 1<<5 ;reply contains fcb repdat == 1<<6 ;reply contains data repmsg == 1<<7 ;this is a reply message ; define flag bits in TurboDOS message user field "msgcuf" tfcn == 1<<5 ;T-function priv == 1<<6 ;privileged user logon == 1<<7 ;logged-on loc Data# ;data segment (RAM) xint13: res word 2 ;original INT 0x13 save reccnt: res word 1 ;records to read counter dskfmt == word . ;download file disk format: sides: res byte 1 ;number of sides (1 or 2) sects: res byte 1 ;number of sectors (8 or 9) ; The following structure defines the format of a TurboDOS ; network message. msgbuf: ;network message buffer msglen: res byte 1 ;length msgdid: res word 1 ;destination address msgpid: res byte 1 ;process id msgsid: res word 1 ;source address msgorg: res word 1 ;originator address res byte 1 ;originator process res byte 1 ;forwarding level msgfmt: res byte 1 ;message format code msgl0 == .-msgbuf ;length (header-only) msga: res byte 1 ;AL-reg msgc: res byte 1 ;CL-reg res byte 1 ;CH-reg res byte 1 ;DL-reg res byte 1 ;DH-reg res byte 1 ;BL-reg res byte 1 ;BH-reg msgcuf: res byte 1 ;current user + flags msgl1 == .-msgbuf ;length (header+regs) msgfcb: res byte 36 ;fcb msgcmp: res byte 1 ;compat flags msgl2 == .-msgbuf ;length (header+regs+fcb) msgdat: res byte 128 ;data record msgl3 == .-msgbuf ;length (hdr+regs+fcb+dat) loc Code# ;code segment (ROM) ; ROM Initialization Procedure ; ROM BIOS validates the "signature" and ROM checksum, then ; does far-call to offset 0003 to allow ROM to initialize. ; NOTE: must add checksum byte to end of ROM before burning ; so all bytes in ROM sum to zero modulo 256. start: ;start of ROM word 0xAA55 ;signature for ROM BIOS byte romlen/512 ;ROM size (512-byte segmts) jmp init ;ROM initialization entry signon: byte "TurboDOS/PC Network Boot ROM", 0x0D, 0x0A byte "Copyright 1986, Software 2000, Inc." byte 0x0D, 0x0A, 0 filnam: byte "BOOTFILEDSK" ; ROM init routine replaces the ROM BASIC and/or disk boot ; interrupts so that they point to our net boot routine. int18 == 1 ;replace INT 0x18 (ROM BASIC) int19 == 0 ;replace INT 0x19 (disk boot) init: push ax ;save registers push dx push ds xor ax,ax ;ds -> interrupt page mov ds,ax #if int19 mov 0x19*4,word &boot ;INT 0x19 (disk boot) mov 0x19*4+2,cs ;-> new boot routine #endif #if int18 mov 0x18*4,word &boot ;INT 0x18 (ROM BASIC) mov 0x18*4+2,cs ;-> new boot routine #endif pop ds ;restore registers pop dx pop ax retf ;end of initialization ; Network bootstrap procedure ; The net boot routine gets control when the ROM BIOS is ; all done with its tests and initialization. It opens ; a remote download file containing a disk-image of a ; bootable MS-DOS disk. It replaces the BIOS disk I/O ; interrupt so it points to a routine that simulates ; disk I/O by accessing the download file over the net. ; It then reads the MS-DOS boot sector into RAM and ; transfers control to it. Booting proceeds normally ; except that disk I/O is done over the net. boot: mov ax,&ramseg ;get RAM segment base mov ds,ax ;ds -> RAM mov ss,ax ;ss -> RAM mov sp,=ramlen ;sp -> top of RAM segment sti ;interrupts OK now mov bx,&signon ;display sign-on message call disply call netnit ;initialize network driver ; set up network message to open BOOTFILE.DSK file mov msglen,=msgl2 ;set up message length mov cx,=msgl2-1 ;zero header/regs/fcb mov di,&msgbuf+1 push ds  pop es ;es -> RAM segment xor al,al cld rep stos al mov msgc,=15 ;msgc = open function mov msgfmt,=(frstmb|reqfcb|repfcb) mov cx,=11 ;move filename to msgfcb mov si,&filnam mov di,&msgfcb+1 push cs pop ds ;ds -> ROM segment cld rep movs byte push es pop ds ;ds -> RAM segment or msgfcb+6,=byte 1<<7 ;set attrib F6 (R/O) mov al,netusr ;get user number or al,=(priv|logon) ;privileged+logon flags mov msgcuf,al ;to message mov al,netcmp ;get compatibility flags mov msgcmp,al ;to message mov ax,netsid ;get source address mov msgsid,ax ;to message mov msgorg,ax mov al,netdsk ;get disk drive inc al ;adjust to 1-based mov msgfcb,al ;to message mov ax,netdid ;get dest net address mov msgdid,ax ;to message ; send message to open BOOTFILE.DSK file and get reply msg call sndrcv ;send message/receive reply jz __opn ;if open OK, continue mov bx,&__oer ;display error message jmp halt ;diagnose and halt __oer: byte "Can't open download file",0 __  opn: ; Replace disk I/O interrupt (INT 0x13) so that diskette ; read requests are converted to reads of the remote ; download file. (Save original contents of INT 0x13 in ; a canonical location so they may be restored later by a ; transient program if local disk I/O is required.) xor ax,ax ;es -> interrupt page mov es,ax es mov ax,0x13*4 ;save original INT 0x13 mov xint13,ax es mov ax,0x13*4+2 mov xint13+2,ax es mov 0x13*4,word &dskio ;INT 0x13 (disk I/O) es mov 0x13*4+2,cs ;-> new dskio routine ; Read MS-DOS first FAT sector into memory at 0000:7C00 ; and analyze disk format code (first byte of FAT) mov dskfmt,=0x0801 ;assume initial disk format push ds ;save ds mov ax,=0x0201 ;ah = read, al = 1 sector mov cx,=0x0002 ;ch = cyl 0, cl = sector 2 xor dx,dx ;dh = head 0, dl = drive 0 mov es,dx ;es:bx = DMA address mov bx,=0x7C00 int 0x13 ;read FAT sector pop ds ;restore ds jnc __fat ;successful mov bx,&__fer ;display error message jmp halt ;diagnose and halt __fer: byte "Can't read FAT sector",0 __tbl: ;disk format table byte 2,8 ;fmtcode=FF byte 1,8 ;fmtcode=FE byte 2,9 ;fmtcode=FD byte 1,9 ;fmtcode=FC __fat: es mov al,[bx] ;get disk format code not al ;complement cbw ;convert to word add ax,ax ;times 2 mov bx,ax ;index to bx cs mov ax,__tbl[bx] ;get disk format info mov dskfmt,ax ;save disk format info ; Read MS-DOS boot sector into RAM at 0000:7C00 and ; transfer control to it. Booting should now proceed ; as usual. mov ax,=0x0201 ;ah = read, al = 1 sector mov cx,=0x0001 ;ch = cyl 0, cl = sector 1 xor dx,dx ;dh = head 0, dl = drive 0 mov es,dx ;es:bx = DMA address mov bx,=0x7C00 int 0x13 ;read boot sector jnc __boot ;successful mov bx,&__ber ;display error message jmp halt ;diagnose and halt __ber: byte "Can't read boot sector",0 __boot: jmpf 0x7C00,0 ;transfer to boot sector ; Physical Disk I/O Procedure ; This routine gets control via INT 0x13 in place of the ; normal BIOS disk I/O driver. It simulates disk I/O ; by doing appropriate random reads of the download file. ; Only reset/status/read are supported. ; ; On entry: ; AH = function (0=reset,1=stat,2=rd,3=wrt,4=vfy,5=fmt) ; AL = number of sectors ; CH = cylinder ; CL = sector ; DH = head ; DL = drive (bit 7 -> hard disk) ; ES:BX = DMA address ; On return: ; Carry-flag set if error ; AH = disk status (zero if successful) ; AL = number of sectors actually read dskio: sti ;re-enable interrupts test ah,ah ;reset function? jz reset ;yes, process dec ah ;status function? jz status ;yes, process dec ah ;read function? jnz inval ;no, invalid function test dl,dl ;read of floppy drive A? jz read ;yes, process inval: mov ah,=0xff ;else, invalid function stc ;return with CY set dskxit: retf 2 ;like IRET but don't POPF status: xor al,al ;return successful status reset: clc ;return with CY clear jmps dskxit read: push ds ;save ds push bp ;save registers push di push si push es push dx push cx push bx push ax push ax ;save ax mov ax,&ramseg ;get RAM segment base mov ds,ax ;ds -> RAM pop ax ;restore ax mov di,bx ;es:di -> DMA address ; number of records to read = #sectors * 4 ; first record to read = ; ((cylinder * sides + head) * sects + sector - 1) * 4 add ax,ax add ax,ax ;#sectors * 4 mov reccnt,ax ;save #records to read mov al,ch ;cylinder imul sides ;* sides add al,dh ;+ head imul sects ;* sects xor ch,ch add ax,cx ;+ sector dec ax ;- 1 add ax,ax add ax,ax ;* 4 mov msgfcb+33,ax ;store fcb random record readl: ; set up network message to read a random record push es ;save DMA address push di mov msglen,=msgl2 ;set up message length mov cx,=msgl1-1 ;zero header/regs mov di,&msgbuf+1 push ds pop es ;es -> RAM segment xor al,al cld rep stos al mov msgc,=33 ;msgc = read random funct mov msgfmt,=(reqfcb|repfcb|repdat) mov al,netusr ;get user number  or al,=(priv|logon) ;privileged+logon flags mov msgcuf,al ;to message mov al,netcmp ;get compatibility flags mov msgcmp,al ;to message mov ax,netsid ;get source address mov msgsid,ax ;to message mov msgorg,ax mov al,netdsk ;get disk drive inc al ;adjust to 1-based mov msgfcb,al ;to message mov ax,netdid ;get dest net address mov msgdid,ax ;to message ; send message to read a random record, and get reply msg call sndrcv ;send message/receive reply jz __rrr ;if read OK, co  ntinue mov bx,&__rer ;display error message jmp halt ;diagnose and halt __rer: byte "Can't read download file",0 __rrr: pop di ;restore DMA address pop es mov cx,=128 ;move record to DMA address mov si,&msgdat cld rep movs byte inc word msgfcb+33 ;increment fcb rand rec num dec reccnt ;decrement record count jz readx ;exhausted jmp readl ;not exhausted, read more readx: pop ax ;restore registers xor ah,ah ;return successful status clc ;with no CY flag pop bx pop cx pop dx pop es pop si pop di pop bp pop ds jmp dskxit ;exit ; send message in msgbuf over the network ; receive reply message into msgbuf ; check for disk error response and process sndrcv: call netsnd ;send message jc __nse ;if network error, diagnose mov msglen,=msgl3 ;max message length call netrcv ;receive reply jc __nre ;if network error, diagnose mov al,msglen ;get message length cmp al,=20 ;disk error message? jz __err ;yes, process cmp al,=11 ;aborted message? jz __abt ;yes, process mov al,msga ;else, get return code test al,al ;was operation successful? ret ;done __err: mov msglen,=msgl0+1 ;message length (header+1) mov al,msgfcb ;setup process id mov msgpid,al mov ax,msgsid ;exchange source/dest addr xchg ax,msgdid mov msgsid,ax mov msgfmt,=repmsg ;message format code mov msga,=0xff ;abort jmp sndrcv ;send abort message __abt: mov bx,&__abm ;display error message jmp halt ;diagnose and halt __nse: mov bx,&__nsm ;display error message jmp halt ;diagnose and halt __nre: mov bx,&__nrm ;display error message jmp halt ;diagnose and halt __nsm: byte "Network send error",0 __nrm: byte "Network receive error",0 __abm: byte "Physical disk error " byte "reported by file server",0 ; All errors proceed here to halt with message string ; pointer in cs:bx. halt: call disply ;display diagnostic message mov bx,&__msg call disply ;display abort/halt message sti ;enable interrupts jmps . ;halt __msg: byte 0x0D,0x0A byte "Download aborted, processor halted ",7,0 ; display a null-terminated string ; cs:bx -> string disply: cs mov al,[bx] ;get byte from string inc bx test al,al ;null terminator? jz __x ;yes, done push bx ;save bx mov ah,=14 ;teletype output mode mov bx,=7 ;bh = page, bl = color int 0x10 ;display character pop bx ;restore bx jmps disply ;continue __x: ret ;done #page ; Part 2 contains a network circuit driver appropriate to ; the particular type of networking hardware being used. ; Part 2 follows: BUFSEG == 0xE000 ;TRANSMIT/RECEIVE BUFFER SEGMENT ; IOBASE == 0x0200 ;I/O PORT ADDRESS BASE ; INTMSK == IOBASE+0 ;COM 9026 INTERRUPT MASK REGISTER STATUS == IOBASE+0 ;COM 9026 STATUS REGISTER COMAND == IOBASE+1 ;COM 9026 COMMAND REGISTER ; DISXMT == 1 ;DISABLE TRANSMITTER COMMAND DISRCV == 2 ;DISABLE RECEIVER COMMAND ENAXMT == 3 ;ENABLE TRANSMITTER COMMAND ENARCV == 4 ;ENABLE RECEIVER COMMAND DEFCON == 5 ;DEFINE CONFIGURATION COMMAND CLRFLG == 6 ;CLEAR FLAGS COMMAND ; TA == 1<<0 ;TRANSMITTER AVAILABLE BIT TMA == 1<<1 ;TRANSMIT MESSAGE ACKNOWLEDGED BIT RECON == 1<<2 ;RECONFIGURATION BIT TST == 1<<3 ;TEST MODE BIT POR == 1<<4 ;POWER ON RESET BIT ETS1 == 1<<5 ;EXTENDED TIMEOUT STATUS 1 BIT ETS2 == 1<<6 ;EXTENDED TIMEOUT STATUS 2 BIT RI == 1<<7 ;RECEIVER INHIBITED BIT loc Data# ;data segment (RAM) netsid: res word 1 ;source net address netdid: res word 1 ;destination net address netdsk: res byte 1 ;disk drive (base 0) netusr: res byte 1 ;user number netcmp: res byte 1 ;compatibility flags loc Code# ;code segment (ROM) NETNFO: WORD 0x0201 ;SOURCE NET ADDRESS WORD 0x0202 ;DESTINATION NET ADDRESS BYTE 1 ;DISK DRIVE (BASE 0) BYTE 0 ;USER NUMBER BYTE 0xB8 ;COMPATABILITY FLAGS ; NETNFL == .-NETNFO ;NETWORK INFO LENGTH ; Network initialization procedure. ; Perform any needed network initialization, and set up the ; network information variables in the RAM segment (above). netnit: MOV DX,=COMAND ;GET COMMAND REGISTER MOV AL,=DISXMT ;GET DISABLE TRANSMITTER COMMAND OUT DX,AL ;DISABLE TRANSMITTER MOV AL,=DISRCV ;GET DISABLE RECEIVER COMMAND OUT DX,AL ;DISABLE RECEIVER MOV AL,=DEFCON ;GET CONFIGURATION COMMAND OUT DX,AL ;DEFINE CONFIGURAION MOV AL,=CLRFLG|0x18 ;GET CLEAR FLAGS COMMAND OUT DX,AL ;CLEAR POR AND RECON STATUS FLAGS MOV DX,=INTMSK ;GET INTERRUPT MASK REGISTER XOR AL,AL ;GET INTERRUPT MASK OUT DX,AL ;DISABLE ALL INTERRUPTS PUSH DS ;SAVE DS-REG MOV SI,&NE  TNFO ;GET NETWORK INFORMATION OFFSET MOV DI,&netsid ;GET NETWORK INFORMATION OFFSET MOV CX,=NETNFL ;GET NETWORK INFORMATION LENGTH PUSH DS ;RAM SEGMENT TO TOP OF STACK POP ES ;RAM SEGMENT TO ES-REG PUSH CS ;ROM SEGMENT TO TOP OF STACK POP DS ;ROM SEGMENT TO DS-REG CLD ;CLEAR DIRECTION FLAG REP MOVS BYTE ;COPY NETWORK INFORMATION INTO RAM POP DS ;RESTORE DS-REG RET ;DONE ; Network receive-message procedure. ; Receive a network message into "msgbuf". The maximum ; permissable message length has been passed in "msglen". ; In case of an unrecoverable network error, return with ; the carry-flag set. netrcv: MOV DI,&msgbuf ;GET MESSAGE BUFFER ADDRESS MOV DX,=COMAND ;GET COMMAND REGISTER MOV AL,=ENARCV ;GET ENABLE RECEIVER COMMAND OUT DX,AL ;ENABLE RECEIVER TO BUFFER 0 MOV DX,=STATUS ;GET STATUS REGISTER __WTL: IN AL,DX ;GET CONTROLLER STATUS TEST AL,=TST ;TEST MODE BIT SET? JNZ __ERR ;IF SO, CONTINUE TEST AL,=RI ;RECEIVER INHIBITED BIT SET? JZ __WTL ;IF NOT, CONTINUE PUSH DS ;ELSE, SAVE DS-REG PUSH DS ;RAM SEGMENT TO TOP OF STACK POP ES ;RAM SEGMENT TO ES-REG MOV AX,=BUFSEG ;GET BUFFER SEGMENT MOV DS,AX ;BUFFER SEGMENT TO DS-REG MOV SI,&0 ;GET RECEIVE BUFFER 0 MOV AL,2[SI] ;GET RECEIVE BUFFER COUNT MOV CL,AL ;BUFFER COUNT TO CL-REG XOR AL,AL MOV CH,AL ;MAKE BUFFER COUNT DOUBLE LENGTH ADD SI,CX ;CALC NETWORK MESSAGE ADDRESS SUB AL,CL ;CALC ACTUAL MESSAGE LENGTH MOV CL,AL ;ACTUAL MESSAGE LENGTH TO CX-REG ES MOV AL,[DI] ;GET MAXIMUM MESSAGE LENGTH CMP AL,CL ;MAXIMUM MESSAGE LENGTH EXCEEDED? JNC __MLNE ;IF NOT, CONTINUE MOV CL,AL ;ELSE, TRUNCATE MESSAGE LENGTH __MLNE: CLD ;CLEAR DIRECTION FLAG REP MOVS BYTE ;MOVE MESSAGE FROM RECEIVE BUFFER POP DS ;RESTORE DS-REG CLC ;CLEAR CARRY FLAG RET ;DONE __ERR: STC ;SET CARRY FLAG RET ;DONE ; Network send-message procedure. ; Send a network message from "msgbuf". The actual message ; length has been passed in "msglen". In case of an unre- ; coverable network error, return with the carry-flag set. netsnd: MOV SI,&msgbuf ;GET MESSAGE BUFFER ADDRESS MOV AL,[SI] ;GET MESSAGE LENGTH TEST AL,AL ;MESSAGE LENGTH=0? JZ __X ;IF SO, CONTINUE MOV DX,=STATUS ;ELSE, GET STATUS REGISTER IN AL,DX ;GET CONTROLLER STATUS TEST AL,=TST ;TEST MODE BIT SET? JNZ __ERR2 ;IF SO, CONTINUE MOV AX,=BUFSEG ;ELSE, GET BUFFER SEGMENT MOV ES,AX ;SET ES-REG MOV DI,&0x0200 ;GET TRANSMIT BUFFER MOV AL,1[SI] ;GET MESSAGE DESTINATION ID ES MOV 1[DI],AL ;SET DESTINATION ID XOR AL,AL MOV CH,AL SUB AL,0[SI] ;CALC TRANSMIT BUFFER COUNT ES MOV 2[DI],AL ;SET TRANSMIT BUFFER COUNT MOV CL,AL ;TRANSMIT BUFFER COUNT TO C-REG ADD DI,CX ;CALC MESSAGE BUFFER ADDRESS MOV CL,0[SI] ;GET ACTUAL MESSAGE BUFFER LENGTH CLD ;CLEAR DIRECTION FLAG REP MOVS BYTE ;MOVE MESSAGE INTO TRANSMIT BUFFER MOV DX,=COMAND ;GET COMMAND REGISTER MOV AL,=ENAXMT|1<<3 ;GET ENABLE COMMAND OUT DX,AL ;ENABLE TRANSMITTER MOV CX,=0 ;INITIALIZE LOOP COUNTER MOV DX,=STATUS ;GET STATUS REGISTER __WTL: IN AL,DX ;GET CONTROLLER STATUS TEST AL,=TA ;TRANSMITTER AVAILABLE BIT SET? JNZ __TABS ;IF SO, CONTINUE LOOP __WTL ;ELSE, CONTINUE JMPS __ERR1 ;CONTINUE __TABS: TEST AL,=TMA ;MESSAGE ACKNOWLEDGED BIT SET? JZ __ERR2 ;IF NOT, CONTINUE CLC ;ELSE, CLEAR CARRY FLAG RET ;DONE __ERR1: MOV DX,=COMAND ;GET COMMAND REGISTER MOV AL,=DISXMT ;GET DISABLE TRANSMITTER COMMAND OUT DX,AL ;DISABLE TRANSMITTER __ERR2: STC ;SET CARRY FLAG __X: RET ;DONE ; LOC start+(romlen-1)  ;LOCATE TO LAST BYTE ; CKSUM: BYTE 0 ;CHECKSUM BYTE end ;end of module #title "Utility to convert PC-DOS disk to download boot file" #subttl "Copyright 1986, Software 2000, Inc." ; Version: 07-Jan-86 module "BOOTFILE" ; BOOTFILE.COM is a PC-DOS transient program that converts ; a PC-DOS system disk into a disk-image file that can be ; subsequently accessed by a download boot ROM (BOOTROM.A) ; to implement network downloading of PC-DOS + TurboDOS/PC. ; To utilize this program, first format a PC-DOS system ; disk and copy to it any files that will be required f  or ; the downloading process (e.g. TURBOPC.COM, TURBOPC.DRV). ; Then execute this utility to copy the system disk to a ; download file as follows: ; ; A> BOOTFILE B: C:BOOTFILE.DSK ; | | ; source disk----------+ | ; destination file----------------+ ; ; The download file must be placed on the file-server's ; disk where the boot ROM expects to find it. ; To create the BOOTFILE.COM utility under 8086 TurboDOS, ; perform the following steps: ; ; 0A} TASM BOOTFILE ; 0A} TLINK BOOTFILE.CMD ; 0A} CMDTOCOM BOOTFILE ; WARNING: This program makes direct calls on the ROM BIOS ; (via INT 0x13) to read physical sectors from the source ; system disk. It will not work on machines which do not ; implement a ROM BIOS that is compatible with the IBM PC ; (at least insofar as INT 0x13 is concerned). tlink "8" ;8080 model - use CMDTOCOM tfcb == 0x005C ;MSDOS default FCB loc Data# ;data segment fmttbl: ;nsides/nsects table byte 2,8 ;fmtcode=FF byte 1,8 ;fmtcode=FE byte 2,9 ;fmtcode=FD byte 1,9 ;fmtcode=FC msgtbl: ;msg table by format word &fmtff ;fmtcode=FF word &fmtfe ;fmtcode=FE word &fmtfd ;fmtcode=FD word &fmtfc ;fmtcode=FC ; format messages fmtff: byte "2 sides, 8 sectors $" fmtfe: byte "1 side, 8 sectors $" fmtfd: byte "2 sides, 9 sectors $" fmtfc: byte "1 side, 9 sectors $" ; error messages crlfbl: byte 0x0D, 0x0A, 0x07, "$" errus: byte "Usage: DOWNLOAD d: fn",0x0D,0x0A byte " d: is source drive",0x0D,0x0A byte " fn is destination filename$" errsd: byte "Invalid source drive$" errdd: byte "Invalid destination drive$" errdf: byte "Can't create destination file$" errrs: byte "Error reading source disk$" errwd: byte "Error writing destination file$" errsf: byte "Invalid format code on source disk$" align bufseg: res word 1 ;track buffer segment nsides: res byte 1 ;number of tracks/cylinder nsects: res byte 1 ;number of sectors/track srcdrv: res byte 1 ;input drive (A=0) errcnt: res byte 1 ;error counter loc Code# ;code segment start: call ckparm ;check command parameters call bufadr ;calc track buffer address call ckform ;check source disk format call create ;create destination file xor ch,ch ;ch = cylinder __cyl: xor dh,dh ;dh = head __sid: call dot ;display a dot call rdtrk ;read track from src dsk call chktrk ;check if track=all filler jc __done ;if so, done call wrtrk ;write track to dest file inc dh ;increment head cmp dh,nsides ;head < nsides? jb __sid ;yes, next side inc ch ;increment cylinder cmp ch,=40 ;cyl < cyls? jb __cyl ;yes, next cylinder __done: call close ;close dest file exit: int 0x20 ;terminate ; display error message whose address is in dx ; then terminate error: push dx ;save dx mov dx,&crlfbl ;display CR/LF/BEL mov ah,=9 ;display error message int 0x21 pop dx ;restore dx mov ah,=9 ;display error message int 0x21 jmps exit ;exit program ; check command line parameters ; set up srcdrv and tfcb ckparm: test al,al ;invalid source drive? mov dx,&errsd ;yes, error jnz error test ah,ah ;invalid dest drive? mov dx,&errdd ;yes, error jnz error mov al,tfcb ;get source drive test al,al ;omitted? mov dx,&errus ;yes, error jz error dec al ;adjust to base zero mov srcdrv,al ;save source drive mov al,tfcb+1 ;get source FN(1) cmp al,=' ' ;filename specified? ja error ;if so, error mov al,tfcb+16+1 ;get dest FN(1) cmp al,=' ' ;filename specified? jbe error ;if not, error push ds pop es mov si,&tfcb+16 ;move FCB2 to FCB1 mov di,&tfcb mov cx,=16 cld rep movs byte ret ; calculate address of a buffer large enough to hold one ; track of the source disk and which doesn't cross a 64K ; memory address boundary. Store buffer address as a ; paragraph number in "bufseg". bufadr: mov ax,&EndData# ;get first free offset add ax,=15 ;round up mov cl,=4 ;convert to paragraph shr ax,cl mov cx,cs ;calc first free paragraph add ax,cx mov cx,ax ;save buffer segment in cx add ax,=((9*512)>>4)-1 ;calc end buffer para xor ax,cx ;check if 64K bound crossed and ax,=0xF000 mov ax,cx ;restore buffer segment jz __x ;buffer segment is OK add ax,=0x0FFF ;else, round up to next and ax,=0xF000 ; 64K boundary __x: mov bufseg,ax ;save buffer segment ret ;done ; create destination file, and set record size to ; track size (512*nsects)   create: mov dx,&tfcb ;create dest file mov ah,=0x16 int 0x21 test al,al ;successful? mov dx,&errdf ;no, error jnz error mov ah,nsects ;get sectors/track add ax,ax ;times 512 (sector size) mov tfcb+14,ax ;set record size mov byte tfcb+32,=0 ;zero current record push ds mov ds,bufseg ;set DMA address -> buffer xor dx,dx mov ah,=0x1A int 0x21 pop ds ret ;done ; close destination file close: mov dx,&tfcb ;close dest file mov ah,=0x10 int 0x21 ret ;done ; delete destination file delete: mov dx,&tfcb ;delete dest file mov ah,=0x13 int 0x21 ret ;done ; check source disk format by reading first FAT sector ; and checking format code. Set up nsects/nsides. ckform: mov al,=1 ;read first FAT sector mov cx,=2 ;(track=0, head=0, sec=2) xor dh,dh call rdsecs jnc __rok ;no errors, continue mov dx,&errrs ;report error jmp error __rok: mov es,bufseg ;get disk format code es mov al,0 ;get disk format code not al ;complement cmp al,=4 ;valid? jb __fok ;yes mov dx,&errsf ;no, report error jmp error __fok: cbw ;convert to word add ax,ax ;convert to index mov bx,ax ;table index in bx mov ax,fmttbl[bx] ;get nsides/nsects from tbl mov word nsides,ax ;save nsides/nsects mov dx,msgtbl[bx] ;get format message mov ah,=9 ;display message int 0x21 ret ;done ; read a track from the source disk ; ch = cylinder number ; dh = head number rdtrk: mov cl,=1 ;cl = sector mov al,nsects ;al = number of sectors call rdsecs ;read track from src disk jnc __x ;no errors, continue call close ;close dest file call delete ;delete dest file mov dx,&errrs ;report error jmp error __x: ret ;done ; check if track in the track buffer consists of all ; identical filler bytes (any value except zero)... ; if so, we have reached the end of useful data on the ; source disk, in which case return carry flag set. chktrk: mov es,bufseg ;es:di -> track buffer mov di,=0 es mov al,[di] ;get first byte test al,al ;zero? jz __x ;yes, not filler (CF=0) push cx ;preserve cx mov cx,tfcb+14 ;rpt count = track length cld repz scas byte ;are all bytes identical? pop cx ;restore cx clc ;set CF=0 jnz __x ;not identical (CF=0) stc ;all filler, CF=1 __x: ret ;done ; write track buffer to destination file wrtrk: push dx ;save dx mov dx,&tfcb ;write trk to dest file mov ah,=0x15 int 0x21 pop dx ;restore dx test al,al ;successful? jz __x ;yes, continue call close ;close dest file call delete ;delete dest file mov dx,&errwd ;report error jmp error __x: ret ;done ; read sectors into track buffer using ROM BIOS (int 0x13) ; call with CH=cyl, CL=sec, DH=head, AL=#sectors rdsecs: mov si,=10 ;initialize error counter mov es,bufseg ;es:bx = buffer address xor bx,bx mov dl,srcdrv ;dl = drive __l: mov ah,=2 ;read sectors push si push ax int 0x13 pop ax pop si jnc __x ;successful, continue dec si ;error, decrement count jnz __l ;not exhausted, try again stc ;else, flag error __x: ret ;done ; display a dot dot: push dx ;save dx mov dl,='.' ;display a dot mov ah,=0x02 int 0x21 pop dx ;restore dx ret ;done end start ;end of module TURBOPRNCOM /:;d,./:;eDM.,..;fF.,/h;gS.,.:;h.,/.;iBF.,-:;jLIT.,/:;kSFR'..:;nKR..,..;oFIM.,/:;pKR.,..;qSEK ,-:;rkr..,.:;sPts.,/:;tESC.,/:;uTL.,/:;xDRS..,/:;y,./.,R ,/.;>u00kr*:6rŀ(r R !Z !@uUu\tȢ]< w͠m< vl\øȉ1%t%ú\!ou&j|1Ҵ!ú\!ú\!ð0~sF&<r2Ë !ñEs Î&t QjYuR\!Zt rwþ 1ۊVPX^sNuR.!Z  2 sides, 8 sectors $1 side, 8 sectors $2 sides, 9 sectors $1 side, 9 sectors $ $Usage: DOWNLOAD d: f  n d: is source drive fn is destination filename$Invalid source drive$Invalid destination drive$Can't create destination file$Error reading source disk$Error writing destination file$Invalid format code on source disk$DISC pAUTOEXECBAK %LpANSI SYS `u FsAUTOEXECBAT 8Pp?SW-DEMO2 (RtONFIG BAK gbN?CONFIG SYS eN=PCLOCK COM 7!#title "Download boot ROM for PC-DOS and TurboDOS/PC" #subttl "Copyright 1986, Software 2000, Inc." ; Version: 07-Jan-86 module "BOOTROM" ; BOOTROM.A is a sample bootstrap ROM that illustrates one ; method of implementing network downloading of MS-DOS or ; PC-DOS and TurboDOS/PC into a diskless workstation. This ; sample code is intended to be stored in an auxilliary ROM ; (supported by most popular PC networking boards) and to ; work in conjunction with the ROM BIOS of an IBM PC or ; compatible work-alike machine. Modifications will most ; likely be required for workstations which differ from the ; IBM PC in any significant way. ; Here is the basic strategy used to implement downloading: ; ; 1. A normal PC-DOS system diskette is prepared. It must ; contain a boot sector, the system files necessary to ; boot PC-DOS (for IBM PC-DOS: IBMBIO.COM, IBMDOS.COM, ; and COMMAND.COM) and the files necessary to load ; TurboDOS/PC (TURBOPC.COM and TURBOPC.DRV). ; ; 2. The system diskette is converted to a download boot ; file (using the utility program BOOTFILE.COM) and ; stored on the file server's disk where the boot ROM ; expects to find it. ; ; 3. The boot ROM is given control during the ROM BIOS ; initialization phase, and alters INT 0x18 (ROM BASIC ; entrypoint) and/or INT 0x19 (floppy disk bootstrap ; entrypoint). When the ROM BIOS has completed its ; initialization phase, it executes INT 0x19 (if a ; diskette is available) or INT 0x18 (otherwise). Since ; these interrupt vectors have been altered, the boot ; ROM will get control at this point. ; ; 4. The boot ROM sends a network request to open the ; download boot file. It then alters INT 0x13 (the ; physical disk I/O entrypoint of the ROM BIOS) to ; point to a disk I/O routine in the boot ROM which ; converts physical disk I/O requests into corresponding ; network requests accessing the download boot file. ; ; 5. Using the altered INT 0x13, the boot ROM reads the ; normal PC-DOS boot sector into memory at 0000:7C00 and ; jumps to it (just as the ROM BIOS would have done). ; ; 6. Loading of PC-DOS now proceeds in the normal fashion ; except that all physical disk I/O operations are being ; redirected over the network. #page ; To prepare a binary file for ROM programming, assemble ; using TASM, link using TLINK, manually strip off .CMD ; header (first 128 bytes) and then manually patch checksum ; byte so that all bytes of the ROM sum to zero (modulo ; 256) as required by the IBM ROM BIOS. tlink "B" ;omit base page ; The sample boot ROM code which follows is divided into ; two parts. Part 1 implements the basic download stragety ; described above, and is dependent upon the IBM-compatible ; ROM BIOS but independent of the type of network hardware. ; Part 2 contains a network circuit driver appropriate to ; the particular type of networking hardware being used. ; Part 1 follows: ; The boot ROM needs access to an area of RAM that is not ; used by PC-DOS. Here we are using the top half of the ; interrupt vector area (0000:0200 to 0000:03FF). ramseg == 0x20 ;RAM segment used by ROM ramlen == 0x200 ;RAM length (bytes) romlen == 4096 ;length of boot ROM (bytes) ; define bits in TurboDOS message format code "msgfmt" frstmb == 1<<0 ;first message in session lastmb == 1<<1 ;last message in session morfol == 1<<2 ;more follows reqfcb == 1<<3 ;request contains fcb reqdat == 1<<4 ;request contains data repfcb == 1<<5 ;reply contains fcb repdat == 1<<6 ;reply contains data repmsg == 1<<7 ;this is a reply message ; define flag bits in TurboDOS message user field "msgcuf" tfcn == 1<<5 ;T-function priv == 1<<6 ;privileged user logon == 1<<7 ;logged-on loc Data# ;data segment (RAM) xint13: res word 2 ;original INT 0x13 save reccnt: res word 1 ;records to read counter dskfmt == word . ;download file disk format: sides: res byte 1 ;number of sides (1 or 2) sects: res byte 1 ;number o  f sectors (8 or 9) ; The following structure defines the format of a TurboDOS ; network message. msgbuf: ;network message buffer msglen: res byte 1 ;length msgdid: res word 1 ;destination address msgpid: res byte 1 ;process id msgsid: res word 1 ;source address msgorg: res word 1 ;originator address res byte 1 ;originator process res byte 1 ;forwarding level msgfmt: res byte 1 ;message format code msgl0 == .-msgbuf ;length (header-only) msga: res byte 1 ;AL-reg msgc: res byte 1 ;CL-reg res byte 1 ;CH-reg res byte 1 ;DL-reg res byte 1 ;DH-reg res byte 1 ;BL-reg res byte 1 ;BH-reg msgcuf: res byte 1 ;current user + flags msgl1 == .-msgbuf ;length (header+regs) msgfcb: res byte 36 ;fcb msgcmp: res byte 1 ;compat flags msgl2 == .-msgbuf ;length (header+regs+fcb) msgdat: res byte 128 ;data record msgl3 == .-msgbuf ;length (hdr+regs+fcb+dat) loc Code# ;code segment (ROM) ; ROM Initialization Procedure ; ROM BIOS validates the "signature" and ROM checksum, then ; does far-call to offset 0003 to allow ROM to initialize. ; NOTE: must add checksum byte to end of ROM before burning ; so all bytes in ROM sum to zero modulo 256. start: ;start of ROM word 0xAA55 ;signature for ROM BIOS byte romlen/512 ;ROM size (512-byte segmts) jmp init ;ROM initialization entry signon: byte "TurboDOS/PC Network Boot ROM", 0x0D, 0x0A byte "Copyright 1986, Software 2000, Inc." byte 0x0D, 0x0A, 0 filnam: byte "BOOTFILEDSK" ; ROM init routine replaces the ROM BASIC and/or disk boot ; interrupts so that they point to our net boot routine. int18 == 1 ;replace INT 0x18 (ROM BASIC) int19 == 1 ;replace INT 0x19 (disk boot) init: push ax ;save registers push dx push ds xor ax,ax ;ds -> interrupt page mov ds,ax #if int19 mov 0x19*4,word &boot ;INT 0x19 (disk boot) mov 0x19*4+2,cs ;-> new boot routine #endif #if int18 mov 0x18*4,word &boot ;INT 0x18 (ROM BASIC) mov 0x18*4+2,cs ;-> new boot routine #endif pop ds ;restore registers pop dx pop ax retf ;end of initialization ; Network bootstrap procedure ; The net boot routine gets control when the ROM BIOS is ; all done with its tests and initialization. It opens ; a remote download file containing a disk-image of a ; bootable MS-DOS disk. It replaces the BIOS disk I/O ; interrupt so it points to a routine that simulates ; disk I/O by accessing the download file over the net. ; It then reads the MS-DOS boot sector into RAM and ; transfers control to it. Booting proceeds normally ; except that disk I/O is done over the net. boot: mov ax,&ramseg ;get RAM segment base mov ds,ax ;ds -> RAM mov ss,ax ;ss -> RAM mov sp,=ramlen ;sp -> top of RAM segment sti ;interrupts OK now mov bx,&signon ;display sign-on message call disply push ds ;preserve ds call netnit ;initialize network driver pop ds ;restore ds ; set up network message to open BOOTFILE.DSK file mov msglen,=msgl2 ;set up message length mov cx,=msgl2-1 ;zero header/regs/fcb mov di,&msgbuf+1 push ds pop es ;es -> RAM segment xor al,al cld rep stos al mov msgc,=15 ;msgc = open function mov msgfmt,=(frstmb|reqfcb|repfcb) mov cx,=11 ;move filename to msgfcb mov si,&filnam mov di,&msgfcb+1 push cs pop ds ;ds -> ROM segment rep movs byte push es pop ds ;ds -> RAM segment or msgfcb+6,=byte 1<<7 ;set attrib F6 (R/O) mov al,netusr ;get user number or al,=(priv|logon) ;privileged+logon flags mov msgcuf,al ;to message mov al,netcmp ;get compatibility flags mov msgcmp,al ;to message mov ax,netsid ;get source address mov msgsid,ax ;to message mov msgorg,ax mov al,netdsk ;get disk drive inc al ;adjust to 1-based mov msgfcb,al ;to message mov ax,netdid ;get dest net address mov msgdid,ax ;to message ; send message to open BOOTFILE.DSK file and get reply msg call sndrcv ;send message/receive reply jz __opn ;if open OK, continue mov bx,&__oer ;display error message jmp halt ;diagnose and halt __oer: byte "Can't open download file",0 __opn: ; Replace disk I/O interrupt (INT 0x13) so that diskette ; read requests are converted to reads of the remote ; download file. (Save original contents of INT 0x13 in ; a canonical location so they may be restored later by a ; transient program if local disk I/O is required.) xor ax,ax ;es -> interrupt page mov es,ax es mov ax,0x13*4 ;save original INT 0x13 mov xint13,ax es mov ax,0x13*4+2 mov xint13+2,ax es mov 0x13*4,word &dskio ;INT 0x  13 (disk I/O) es mov 0x13*4+2,cs ;-> new dskio routine ; Read MS-DOS first FAT sector into memory at 0000:7C00 ; and analyze disk format code (first byte of FAT) mov dskfmt,=0x0801 ;assume initial disk format push ds ;save ds mov ax,=0x0201 ;ah = read, al = 1 sector mov cx,=0x0002 ;ch = cyl 0, cl = sector 2 xor dx,dx ;dh = head 0, dl = drive 0 mov es,dx ;es:bx = DMA address mov bx,=0x7C00 int 0x13 ;read FAT sector pop ds ;restore ds jnc __fat ;successful mov bx,&__fer ;display error message jmp halt ;diagnose and halt __fer: byte "Can't read FAT sector",0 __tbl: ;disk format table byte 2,8 ;fmtcode=FF byte 1,8 ;fmtcode=FE byte 2,9 ;fmtcode=FD byte 1,9 ;fmtcode=FC __fat: es mov al,[bx] ;get disk format code not al ;complement cbw ;convert to word add ax,ax ;times 2 mov bx,ax ;index to bx cs mov ax,__tbl[bx] ;get disk format info mov dskfmt,ax ;save disk format info ; Read MS-DOS boot sector into RAM at 0000:7C00 and ; transfer control to it. Booting should now proceed ; as usual. mov ax,=0x0201 ;ah = read, al = 1 sector mov cx,=0x0001 ;ch = cyl 0, cl = sector 1 xor dx,dx ;dh = head 0, dl = drive 0 mov es,dx ;es:bx = DMA address mov bx,=0x7C00 int 0x13 ;read boot sector jnc __boot ;successful mov bx,&__ber ;display error message jmp halt ;diagnose and halt __ber: byte "Can't read boot sector",0 __boot: jmpf 0x7C00,0 ;transfer to boot sector ; Physical Disk I/O Procedure ; This routine gets control via INT 0x13 in place of the ; normal BIOS disk I/O driver. It simulates disk I/O ; by doing appropriate random reads of the download file. ; Only reset/status/read are supported. ; ; On entry: ; AH = function (0=reset,1=stat,2=rd,3=wrt,4=vfy,5=fmt) ; AL = number of sectors ; CH = cylinder ; CL = sector ; DH = head ; DL = drive (bit 7 -> hard disk) ; ES:BX = DMA address ; On return: ; Carry-flag set if error ; AH = disk status (zero if successful) ; AL = number of sectors actually read dskio: sti ;re-enable interrupts test ah,ah ;reset function? jz reset ;yes, process dec ah ;status function? jz status ;yes, process dec ah ;read function? jnz inval ;no, invalid function test dl,dl ;read of floppy drive A? jz read ;yes, process inval: mov ah,=0xff ;else, invalid function stc ;return with CY set dskxit: retf 2 ;like IRET but don't POPF status: xor al,al ;return successful status reset: clc ;return with CY clear jmps dskxit read: push ds ;save ds push bp ;save registers push di push si push es push dx push cx push bx push ax push ax ;save ax mov ax,&ramseg ;get RAM segment base mov ds,ax ;ds -> RAM pop ax ;restore ax mov di,bx ;es:di -> DMA address ; number of records to read = #sectors * 4 ; first record to read = ; ((cylinder * sides + head) * sects + sector - 1) * 4 add ax,ax add ax,ax ;#sectors * 4 mov reccnt,ax ;save #records to read mov al,ch ;cylinder imul sides ;* sides add al,dh ;+ head imul sects ;* sects xor ch,ch add ax,cx ;+ sector dec ax ;- 1 add ax,ax add ax,ax ;* 4 mov msgfcb+33,ax ;store fcb random record readl: ; set up network message to read a random record push es ;save DMA address push di mov msglen,=msgl2 ;set up message length mov cx,=msgl1-1 ;zero header/regs mov di,&msgbuf+1 push ds pop es ;es -> RAM segment xor al,al cld rep stos al mov msgc,=33 ;msgc = read random funct mov msgfmt,=(reqfcb|repfcb|repdat) mov al,netusr ;get user number or al,=(priv|logon) ;privileged+logon flags mov msgcuf,al ;to message mov al,netcmp ;get compatibility flags mov msgcmp,al ;to message mov ax,netsid ;get source address mov msgsid,ax ;to message mov msgorg,ax mov al,netdsk ;get disk drive inc al ;adjust to 1-based mov msgfcb,al ;to message mov ax,netdid ;get dest net address mov msgdid,ax ;to message ; send message to read a random record, and get reply msg call sndrcv ;send message/receive reply pop di ;restore DMA address pop es jnz reader ;if read error, exit mov cx,=128 ;move record to DMA address mov si,&msgdat cld rep movs byte inc word msgfcb+33 ;increment fcb rand rec num dec reccnt ;decrement record count jz readok ;exhausted jmp readl ;not exhausted, read more reader: pop ax ;restore al mov ah,=0xFF ;return error status stc ;with CY flag set jmps readx ;join common exit readok: pop ax ;restore al xor ah,ah ;return successful stat  us clc ;with no CY flag readx: pop bx ;restore registers pop cx pop dx pop es pop si pop di pop bp pop ds jmp dskxit ;exit ; send message in msgbuf over the network ; receive reply message into msgbuf ; check for disk error response and process sndrcv: push ds ;preserve ds call netsnd ;send message pop ds ;restore ds jc __nse ;if network error, diagnose mov msglen,=msgl3 ;max message length push ds ;preserve ds call netrcv ;receive reply pop ds ;restore ds jc __nre ;if network error, diagnose mov al,msglen ;get message length cmp al,=20 ;disk error message? jz __err ;yes, process cmp al,=11 ;aborted message? jz __abt ;yes, process mov al,msga ;else, get return code test al,al ;was operation successful? ret ;done __err: mov msglen,=msgl0+1 ;message length (header+1) mov al,msgfcb ;setup process id mov msgpid,al mov ax,msgsid ;exchange source/dest addr xchg ax,msgdid mov msgsid,ax mov msgfmt,=repmsg ;message format code mov msga,=0xff ;abort jmp sndrcv ;send abort message __abt: mov bx,&__abm ;display error message jmp halt ;diagnose and halt __nse: mov bx,&__nsm ;display error message jmp halt ;diagnose and halt __nre: mov bx,&__nrm ;display error message jmp halt ;diagnose and halt __nsm: byte "Network send error",0 __nrm: byte "Network receive error",0 __abm: byte "Physical disk error " byte "reported by file server",0 ; All errors proceed here to halt with message string ; pointer in cs:bx.  halt: call disply ;display diagnostic message mov bx,&__msg call disply ;display abort/halt message sti ;enable interrupts jmps . ;halt __msg: byte 0x0D,0x0A byte "Download aborted, processor halted ",7,0 ; display a null-terminated string ; cs:bx -> string disply: cs mov al,[bx] ;get byte from string inc bx test al,al ;null terminator? jz __x ;yes, done push bx ;save bx mov ah,=14 ;teletype output mode mov bx,=7 ;bh = page, bl = color int 0x10 ;display character pop bx ;restore bx jmps disply ;continue __x: ret ;done #page ; Part 2 contains a network circuit driver appropriate to ; the particular type of networking hardware being used. ; Part 2 follows: loc Data# ;data segment (RAM) netsid: res word 1 ;source net address netdid: res word 1 ;destination net address netdsk: res byte 1 ;disk drive (base 0) netusr: res byte 1 ;user number netcmp: res byte 1 ;compatibility flags loc Code# ;code segment (ROM) ; Network initialization procedure. ; Perform any needed network initialization, and set up the ; network information variables in the RAM segment (above). netnit: ret ;done ; Network receive-message procedure. ; Receive a network message into "msgbuf". The maximum ; permissable message length has been passed in "msglen". ; In case of an unrecoverable network error, return with ; the carry-flag set. netrcv: ret ;done ; Network send-message procedure. ; Send a network message from "msgbuf". The actual message ; length has been passed in "msglen". In case of an unre- ; coverable network error, return with the carry-flag set. netsnd: ret ;done end ;end of module DRIVER SYS `u NDS COM x5 DSKSETUPCOM |T YDUMP EXE H{+EDLIN COM j RGEXE2BIN EXE `u V FC EXE ` ^8FECHO COM O:rt;8;rt'7! /u \; ,lp.jP3X3ۋx:t>!C:t>!.>!CSPQ!ۡ.9X[$SPQ!9ۣX[ú46nuF>nuN[ø ! !EB=!s=uغ3ɸB!r/l?!P>!Xr;t)lZ*3ҭú"%!#%!$%!z9 !$_ to exit\\LAN assignments: :n&  D| Dn D`w DRi \ [ \ 9M \ W? \ vuúR to exit\\Miscellaneous options:  H b'ZD 5ELD B ]>D t0D dQ D> Dauú R to exit\\Disk assignments:  $D D l 0:Lu  ; D (  _$:LrȻ& fuúo R to exit\\Printer assignments:  DD 0:LuH 7 g ' W D _S:Lr˻ , uúO R to exit\\Queue assignments:  DM 0:Lu} m \^ _:Lr˻r  uú R uQW t _Y0_Y _Ëd.q 10]QSӊCy!M:F.;[YÊC< t$&PL\ X@>G'5\ 9P&\ * X@Ê'uð u -> \Enter B6 hexð(a,W)RtuF t<0sCau0Z ZÈİ'j< s ^_@X'S<'u#C< r<^uC< r ,@r<w0 tMYesENoÊ to continue y \Cannot open file: W \Cannot make file: :\Invalid file: !\Insufficient memory available\Cannot read file: c\Cannot write file: wE\Invalid option\`.\Invalid drive name\E\Invalid printer name\(\Invalid queue name\ \I  nvalid hex input\\Invalid decimal input\\Invalid ASCII input\\Invalid yes/no input\j\Invalid number range input\yG\Invalid network address input\SChange all optionsnetwork address (circuit,node)? (A-P)? (y/n)? CFGTPC MSG&tw! to continue, or q to exit -PsXӋ_)ˇrRQSZR[YOSSڻ[YZW0 Ãٻ)t)ˇuQZdû)t9ѻ)Ӊt_)ˇuSˋ_SDY[WʉWÇӋ GuӋӉWGÇӋ GuӋGWӉGË Gtڋ_G1G1GW؎0_VW؎މ_^R ![CC0S[t< wCӀ?t5SӀ?t :uCB< w G?tC[0#COMMENT \ Thi i th hel fil fo TurboDOS/Pà Configuratio Utility Hel fil label alway begi wit th characte "# an coul b o an length Th fil label mus als begi i th firs colum o lin an additiona character o tha lin ar ignored Ther ar currentl si (6 hel label defined: #MAIN - Main menu #LAN - LAN assignments #MISC - Miscellaneous options #DISKS - Disk assignments #PRINTERS - Printer assignments #QUEUES - Queue assignments Other reserved word labels control the help message display as follows: #COMMENT d - Suppress scan until delimiter "d" reached. #WAIT - Wait for type at the console. #BREAK - Break scan of text file. \ #MAIN HELP Main options Page 1 GENERAL: Mai option provid a entr int eac o th fiv (5 categorie fo configuratio o th TurboDOS/P networ drive o you machine Th arrangemen o thi men i i th mos likel orde o necessar change whe configurin ne machine Eac categor wil displa sub-men o configuratio option o assignment alon wit th curren settings Furthe hel i availabl堠 unde eac categor b enterin '? (simila t hel selecte here). Th TurboDOS/P configuratio utilit operate b firs loadin compatibl networ drive fil int memor whe th progra begins an displayin an changin th networ configuratio option locate i th cop o th drive i memory Afte al change ar made th modifie drive i the save bac int th fil o dis t mak th change permanent. Th curren drive fil unde configuratio i alway displayed directly after the main options menu. #WAIT #COMMENT \ \ HELP Main options Page 2 @ -> Chang al options Thi wil star yo throug eac sub-categor i th orde describe below Whe eac categor i finishe an LAΠ assignm  ent shoul b configure befor proceedin int disk printer o queu assignments Option unde thi categor se th numbe o loca disks remot disks remot printer an remot queues Thes number ar use whe th tim come t assig remot devices Othe option se th LAN-P hardwar relate I/Ϡ an memor bas addresses an TurboDOӠ logica network source and destination information.  B -> Miscellaneou option ar se next Thes ar TurboDO relate option fo th operatio o TurboDOS/Pà o you particula fil server(s) Option includ initia use are fo roo directory privilege use flag compatibilit flags initia prin mode initia spool drive, and end of print character. #WAIT #COMMENT \ \ HELP Main options Page 3 C -> Dis assignmen allow yo t "point t remot disk o you P t disk locate o TurboDO server(s) Th numbe o remot disk configure her i base upo th numbe o remot disk se unde LA assignments. D -> Printe assignment allo yo t "point t remot printer o you P t printer locate o TurboDO server(s) Th numbe o remot printer configure her i base upo th numbe o remot printer se unde LA assignments. E -> Queu assignment allo yo t "point t remot queue o you P t queue locate o TurboDOӠ server(s) Th numbe o remot queue configure her i base upo th numbe o remot queue se unde LA assignments. #WAIT #COMMENT \ \ HELP Main options Page 4 ITEM Whe th option o assignment ar t b changed Th ENTRY:firs ste i t ente th desire categor an selec Th ite t chang fro th sub-menu You'l the b prompte t ente th item' ne value Inpu i alway expecte i th sam for a i i displaye wit fe exceptions Th followin i lis o possibl displa formats: nn ......... Decimal number (0-255) nn hex ..... Hexadecimal number (0-FFH) Yes or No .. Logical boolean expression d .......... TurboDOS device name (A-P) 'a' ........ ASCII character (^L=control-L) text ....... Explanatory text Decima젠 number ma b alternativel entere䠠 i hexadecima b enterin a "H afte th numbe (i.e 33 = 21H, 100 = 64H). #WAIT #COMMENT \ \ HELP Main options Page 5 END Specia car shoul b use whe endin configuratio SESSION:sessio t insur tha wha yo wan i accomplished Endin sessio doe no displa sub-men a pe th othe categories Instead promp i issue askin whethe yo wis t sav th modifie drive bac int th fil o disk ye repl wil updat th drive fil tha wa loade wit th change mad durin th session n repl ignore th changes Bot replie wil exi bac t th operatin system Typin Numbe o loca disks Thi paramete shoul b se accordin t th numbe o loca dis drive locate o you PC P dis device usuall begi wit devic (flopp dis driv 0) a optiona devic   (flopp dis driv 1) an optiona har dis device C- followin this Fo example standar IB PC/X ha on flopp dis devic an har dis devic C o thre (3   loca disk (A-C) Remot dis device wil begi a loca devic o you PC Th maximu allowe loca disk i 32. B -> Numbe o remot disks Thi paramete shoul b se t th numbe o desire remot dis device o you TurboDOӠ server(s yo wis t support Whe dis assignment ar mad (mai option menu) thi numbe o dis ma b assigne networ addresses Th maximu allowed remote disks is 16. NOTE Th combine tota o bot loca an remot disk ma not be greater than 32, governed by DOS limits. #WAIT #COMMENT \ \ HELP LAN assignments Page 2 C -> Numbe o remot printers Thi paramete shoul b se t th numbe o desire remot prin device o you TurboDO server(s tha yo wis t support Whe printe assignment ar mad (mai option menu) thi numbe o printer ma b assigne networ addresses The maximum allowed remote printers is 16. D -> Numbe o remot queues Thi paramete shoul b se t th numbe o desire remot spoo queue o you TurboDOӠ server(s tha yo wis t support Whe queu assignment ar mad (mai option menu) thi numbe o queue ma b assigne networ addresses The maximum allowed remote queues is 16. NOTE Th TurboDOS/P commands PRIN an PRINTER allo th alterin o th curren prin outpu t direc printer or queues, both of which are always remote. #WAIT #COMMENT \ \ HELP LAN assignments Page 3 E -> LAΠ I/Ϡ bas address Thi hexadecima젠 numbe represent th physica I/ bas addres a selecte o you LAΠ networ controlle board I/Ϡ base ar modul 1 (i.e hex 1 hex,... 2E hex 2F hex) Se belo fo commo LAΠ assignment fo differen systems. F -> LAΠ memor bas address Thi hexadecima numbe represent th physica memor segmen a selecte o you LAΠ networ controlle board Memor segmen base ar modul 64 (i.e 200 hex 300 hex,... E00 hex F00 hex) Se belo fo commo LA assignment for different systems. SYSTEM I/O base Memory base --------------------------------------------------- IBM-PC(XT) 0200 E000 IBM-PCjr 0100 C000 Zenith Z100 0068 CF80 #WAIT #COMMENT \ \ HELP LAN assignments Page 4 G -> LA sourc networ address Thi paramete represent th TurboDOӠ networ assignmen fo you PC Thi assignmen i governe b whic circui numbe ha bee se i you syste fo th LA an th physica LA controlle nod settin (LAN ID) Thi mus b se t th LAΠ circui numbe an th Pà controller' nod setting Se circui an nod networ addres entr i th mai option hel area. H -> LAΠ destinatio networ address Thi paramete set you defaul destinatio networ addres fo TurboDO function tha d no specificall referenc circui an nod (i.e MASTE command date/tim functions) Se circui an nod networ addres entr i th mai options help area. NOTE Th circui numbe specifie wit al networ addresse i logica TurboDO assignmen only I general al circui number wil b th same an nod number nee onl b altered Possibl exception t thi rul ar in network forwarding cases. #WAIT #BREAK #MISC #COMMENT \ \ HELP Miscellaneous options Page 1 A -> Initia use are fo root Thi assign use numbe o th remot dis fo th DO roo directory Furthe sub-directorie wil begi assignment wit highe use number endin wit use 31 Th maximu allowe valu here is 31. B -> Privil  ege use flag Thi boolea fla determine th TurboDOS/P suppor fo remot disks I yo ar se privileged th MKDI an RMDI loca command i DO can create and remove sub-directories on remote disks. C -> Compatibilit flags Thi hexadecima byt paramete set fil manipulatio technique o remot disks Supporte identica t norma TurboDOӠ operatin system th bi definitio i a follows: bit 7 = permissive flag bit 4 = mixed-mode flag bit 6 = suspend flag bit 3 = logical flag bit 5 = global-write flag (bits 2-0 not defined) (consult TurboDOS User's Guide for explanations) #WAIT #COMMENT \ \ HELP Miscellaneous options Page 2 D -> Initia prin mode Thi tex oriente paramete determine th defaul prin mod whe TurboDOS/Pà i initiall loade int th PC Th possibl mode ar as follows: Local Prin outpu handle localy. Offline Print output is discarded. Direct to Printer p Prin outpu i󠠠 route directl t remot printe (where p=A-P). NOTE T chang t direc prin mode us P= (wher p=A-P) Examples: P=A, P=B,..., P=O, P=P  Spooled to Queue q Prin outpu i route䠠 t remote queue q (where q=A-P). NOTE T chang t spoole prin mode us Q= (wher q=A-P) Examples: Q=A, Q=B,..., Q=O, Q=P #WAIT #COMMENT \ \ HELP Miscellaneous options Page 3 E -> Initia spoo drive Thi dis devic paramete set th堠 defaul routin o prin spoo file unti explicitly changed with the PRINT command. F -> En o prin character Thi ASCI valu shoul b se t th desire en o prin character o (ASCI '^@ to disable end of print detection through print stream. #WAIT #BREAK #DISKS #COMMENT \ \ HELP Disk assignments Page 1 GENERAL: Remot dis assignment ar displaye an change i thi category Th numbe o remot disk ar show beginnin wit th nex driv nam afte loca disks Th numbe o loca an remot disk ar displaye her becaus the affec th display bu ma onl b change throug th LA assignment category Driv assignments are displayed as follows: Local drive d -> remote drive d network address (c,n) wher "Loca driv d wil b th defaul driv nam tha you P wil know "remot driv d wil b th driv nam o th TurboDO server an "c,n wil b the remote drives network address. T chang dis assignment typ i th loca driv nam o th disk Firs you'l b prompte fo th remot driv name followe b promp fo th networ addres o th drive Typin remote drive p network address (c,n) wher "Loca printe p wil b th printe nam tha you Pà wil know "remot printe p wil b th printe nam o th TurboDO server an "c,n wil b th remot printer' networ address. T chang printe assignment typ i th loca printe name Firs you'l b prompte fo th remot printe name followe b promp fo th networ addres o th printer Typin remote drive q network address (c,n) wher "Loca queu q wil b th queu nam tha you P wil know "remot queu q wil b th printe nam o th TurboDO server an "c,n wil b th remot queue' networ address. T chang queu assignment typ i th loca queu name Firs you'l b prompte fo th remot queu name followe b promp fo th networ addres o th queue Typin N~uF%0K+^;}r%FP~' 0HPp'>~uFW%F'%H+F^;}C%FP\' %HPP'=~uF%;F~%+FP+'3P!'=FtN~tS>u$HH^;~$HHFP&H008COPYRIGHT 1986, SOFTWARE 2000, INC. (VERSION 01/07/86) ؎мtF when change complete  Unable to free drive(s): S^U]^[ÜP.CtXSQR!ZY[SQR!tZY[PSQR$´!ZY[X%NLU86 EXE 0`MODE COM ff #MORE COM `u NODEBUG COM b0NOSTACK COM Fnm .PART EXE T ^bPC-SWEEPCOM  PC-SWEEPDOC ZPC-SWEEPUPD PCTOOLS EXE F 6PREP EXE T XZPRINT COM Pj f$.r2.q.nu-m.-l(,i+h*g*c*Pc*M)L)Kw)JB)f(H(D(CS(B(A'T.;.u..y ]UF]0Hn0^0IF^d_0`0JF3P66PR5P_5PS5P4PvN4P3PQr3P2Pv2P1PvV1Pv3PPE1PF]à]0@=]~]X>nt33@n> t t3@3/^0@=^^dS,S3S^S6SFuFd6P=Fu_~uF_`0Hu`/00F0_000s.0zU #TITLE "TURBODOS OPERATING SYSTEM TURBOPC BOOT ROM CHECKSUM UTILITY" #SUBTTL "COPYRIGHT 1986, SOFTWARE 2000, INC." ; ; COPYRIGHT 1986, SOFTWARE 2000, INC. ; ; VERSION: 01/07/86 ; MODULE "CKSUM" ;MODULE NAME ; #INCLUDE "EQUATE" ;SYMBOLIC EQUIVALENCES ; LOC Data# ;LOCATE IN DATA SEGMENT ; CKSUM: BYTE 0 ;CHECKSUM VALUE ; RES WORD 48 ;STACK AREA STACK == . ;TOP OF STACK AREA ; FNFMSG: BYTE ACR,ALF,"File not found",ACR,ALF,ABEL,"$" WREMSG: BYTE ACR,ALF,"File write error",ACR,ALF,ABEL,"$"    EOJMSG: BYTE ACR,ALF,"Checksuming complete",ACR,ALF,"$" ; LOC Code# ;LOCATE IN CODE SEGMENT ; BYTE "COPYRIGHT 1986, SOFTWARE 2000, INC." BYTE " (VERSION 01/07/86) " ;VERSION DATE ; START: MOV AX,DS ;GET DS-REG MOV SS,AX ;SET SS-REG MOV SP,&STACK ;SET SP-REG MOV DX,&TFCB ;GET DEFAULT FCB ADDRESS MOV CL,=OFFCN ;CL=OPEN FILE FUNCTION INT OPSYSC ;OPEN FILE TEST AL,AL ;FILE OPENED SUCCESSFULLY? JNZ __FNF ;IF NOT, CONTINUE MOV TFCB+33,=WORD 0 ;ELSE, SET RANDOM RECORD=0 MOV TFCB+35,=BYTE 0 __RDL: MOV DX,&TFCB ;GET DEFAULT FCB ADDRESS MOV CL,=RRFFCN ;CL=READ RANDOM FILE FUNCTION INT OPSYSC ;READ FILE TEST AL,AL ;READ SUCCESSFUL? JNZ __EOF ;IF NOT, CONTINUE MOV CX,=128 ;ELSE, GET RECORD LENGTH MOV BX,&TBUF ;GET DEFAULT BUFFER ADDRESS MOV AL,CKSUM ;GET CHECKSUM VALUE __CKSL: ADD AL,[BX] ;ADD RECORD VALUE TO CHECKSUM INC BX ;INCREMENT POINTER LOOP __CKSL ;CONTINUE MOV CKSUM,AL ;UPDATE CHECKSUM VALUE INC WORD TFCB+33 ;INCREMENT RANDOM RECORD JMPS __RDL ;CONTINUE __EOF: MOV AL,CKSUM ;GET CHECKSUM VALUE NEG AL ;NEGATE CHECKSUM VALUE MOV TBUF+127,AL ;STORE CHECKSUM IN LAST BYTE DEC WORD TFCB+33 ;DECREMENT RANDOM RECORD MOV DX,&TFCB ;GET DEFAULT FCB ADDRESS MOV CL,=WRFFCN ;CL=WRITE RANDOM FILE FUNCTION INT OPSYSC ;WRITE FILE PUSH AX ;SAVE RETURN CODE MOV DX,&TFCB ;GET DEFAULT FCB ADDRESS MOV CL,=CFFCN ;CL=CLOSE FILE FUNCTION INT OPSYSC ;CLOSE FILE POP AX ;RESTORE RETURN CODE TEST AL,AL ;WRITE SUCCESSFUL? JNZ __WRE ;IF NOT, CONTINUE MOV DX,&EOJMSG ;ELSE, GET END OF JOB MESSAGE JMPS __X ;CONTINUE __FNF: MOV DX,&FNFMSG ;GET FILE NOT FOUND MESSAGE JMPS __X ;CONTINUE __WRE: MOV DX,&WREMSG ;GET WRITE ERROR MESSAGE __X: MOV CL,=PBFCN ;CL=PRINT BUFFER FUNCTION INT OPSYSC ;DISPLAY MESSAGE MOV CL,=0 ;CL=WARM START FUNCTION INT OPSYSC ;DONE ; END START >PUQdž$P% Pq=t=t@u惾t |ȃ | >Pn%HP3P7]UR0=t=P;]ø?PRPOPP(?P+u]ÍPPD3PPz;yPO?Pk]øm?PYHPP 3S$#dždž |!dž PK剆@u@= }P#dž=t =t | |?P.u P#@P?PPS办0؁t ?PeM@ 8COPYRIGHT 1986, SOFTWARE 2000, INC. (VERSION 01/07/86) ؎мa\uR}\!uC}ޠآ}\"P\Xu au  File not found $ File write error $ Checksuming complete $#TITLE ".CMD TO .COM CONVESION UTILITY PROGRAM" #SUBTTL "COPYRIGHT 1986, SOFTWARE 2000, INC." ; ; COPYRIGHT 1986, SOFTWARE 2000, INC. ; ; VERSION: 01/07/86 ; MODULE "CMDCOM" ;MODULE NAME ; #INCLUDE "EQUATE" ;SYMBOLIC EQUIVALENCES ; LOC Data# ;LOCATE IN DATA SEGMENT ; RES 96 ;STACK AREA STACK == . ;TOP OF STACK AREA SSSAVE: WORD 0 ;STACK SEGMENT SAVE AREA SPSAVE: WORD 0 ;STACK POINTER SAVE AREA ; SRCFCB: BYTE 0," CMD" ;SOURCE FCB RES 24 DSTFCB: BYTE 0," COM" ;DESTINATION FCB RES 24 CPYBUF: RES 128 ;COPY BUFFER ; LOC Code# ;LOCATE IN CODE SEGMENT ; BYTE "COPYRIGHT 1986, SOFTWARE 2000, INC." BYTE " (VERSION 01/07/86) " ;VERSION DATE ; START: MOV SSSAVE,SS ;SAVE SS-REG MOV SPSAVE,SP ;SAVE SP-REG MOV AX,DS ;GET DS-REG MOV SS,AX ;SET SS-REG MOV SP,&STACK ;SET SP-REG MOV DX,&CPYBUF ;GET COPY BUFFER ADDRESS MOV CL,=SDFCN ;CL=SET DMA FUNCTION INT OPSYSC ;SET DMA ADDRESS TO COPY BUFFER MOV SI,&TFCB ;GET DEFAULT FCB ADDRESS MOV DI,&SRCFCB   ;GET SOURCE FCB ADDRESS MOV CX,=9 ;GET LENGTH OF DRIVE/NAME MOV AX,DS ;GET DS-REG MOV ES,AX ;SET ES-REG CLD ;CLEAR DIRECTION FLAG REP MOVS BYTE ;COPY FILE DRIVE/NAME MOV SI,&TFCB ;GET DEFAULT FCB ADDRESS MOV DI,&DSTFCB ;GET DESTINATION FCB ADDRESS MOV CX,=9 ;GET LENGTH OF DRIVE/NAME MOV AX,DS ;GET DS-REG MOV ES,AX ;SET ES-REG CLD ;CLEAR DIRECTION FLAG REP MOVS BYTE ;COPY FILE DRIVE/NAME MOV SRCFCB+12,=BYTE 0 ;SET SOURCE FCB EXTENT=0 MOV DX,&SRCFCB ;GET SOURCE FCB ADDRESS MOV CL,=OFFCN ;CL=OPEN FILE FUNCTION INT OPSYSC ;OPEN SOURCE FILE TEST AL,AL ;SOURCE FILE OPENED SUCCESSFULLY? JNZ __SFNF ;IF NOT, CONTINUE MOV SRCFCB+32,AL ;ELSE, SET CURRENT RECORD=0 MOV DX,&DSTFCB ;GET DESTINATION FCB ADDRESS MOV CL,=DFFCN ;CL=DELETE FILE FUNCTION INT OPSYSC ;DELETE DESTINATION FILE MOV DSTFCB+12,=BYTE 0 ;SET DEST FCB EXTENT=0 MOV DX,&DSTFCB ;GET DESTINATION FCB ADDRESS MOV CL,=MFFCN ;CL=MAKE FILE FUNCTION INT OPSYSC ;CREATE DESTINATION FILE TEST AL,AL ;DESTINATION FILE CREATED? JNZ __DFNC ;IF NOT, CONTINUE MOV DSTFCB+32,AL ;ELSE, SET CURRENT RECORD=0 MOV SRCFCB+32,=BYTE 3 ;SET CURRENT RECORD=3 __CPYL: MOV DX,&SRCFCB ;GET SOURCE FCB ADDRESS MOV CL,=RSFFCN ;CL=READ SEQUENTIAL FUNCTION INT OPSYSC ;READ SOURCE FILE TEST AL,AL ;READ SUCCESSFUL? JNZ __RFNS ;IF NOT, CONTINUE MOV DX,&DSTFCB ;GET DESTINATION FCB ADDRESS MOV CL,=WSFFCN ;CL=WRITE SEQUENTIAL FUNCTION INT OPSYSC ;WRITE DESTINATION FILE TEST AL,AL ;WRITE SUCCESSFUL? JZ __CPYL ;IF SO, CONTINUE JMP __DFWE ;ELSE, CONTINUE __RFNS: DEC AL ;RETURN CODE=1? JZ __EOF ;IF SO, CONTINUE JMP __SFRE ;ELSE, CONTINUE __EOF: MOV DX,&SRCFCB ;GET SOURCE FCB ADDRESS MOV CL,=CFFCN ;CL=CLOSE FILE FUNCTION INT OPSYSC ;CLOSE SOURCE FILE TEST AL,AL ;FILE CLOSE SUCCESSFUL? JZ __SFCS ;IF SO, CONTINUE JMP __SFCE ;ELSE, CONTINUE __SFCS: MOV DX,&DSTFCB ;GET DESTINATION FCB ADDRESS MOV CL,=CFFCN ;CL=CLOSE FILE FUNCTION INT OPSYSC ;CLOSE DESTINATION FILE TEST AL,AL ;FILE CLOSE SUCCESSFUL? JZ __DFCS ;IF SO, CONTINUE JMP __DFCE ;ELSE, CONTINUE __DFCS: CALL DMS ;DISPLAY MESSAGE BYTE ACR,ALF BYTE "End of conversion" BYTE 0 JMP EXIT ;CONTINUE __SFNF: CALL DMS ;DISPLAY MESSAGE BYTE ACR,ALF BYTE "Source file not found" BYTE ABEL,0 JMP EXIT ;CONTINUE __DFNC: CALL DMS ;DISPLAY MESSAGE BYTE ACR,ALF BYTE "Unable to create destination file" BYTE ABEL,0 JMP EXIT ;CONTINUE __DFWE: CALL DMS ;DISPLAY MESSAGE BYTE ACR,ALF BYTE "Unable to write destination file"  BYTE ABEL,0 JMPS EXIT ;CONTINUE __SFRE: CALL DMS ;DISPLAY MESSAGE BYTE ACR,ALF BYTE "Unable to read source file" BYTE ABEL,0 JMPS EXIT ;CONTINUE __SFCE: CALL DMS ;DISPLAY MESSAGE BYTE ACR,ALF BYTE "Unable to close source file" BYTE ABEL,0 JMPS EXIT ;CONTINUE __DFCE: CALL DMS ;DISPLAY MESSAGE BYTE ACR,ALF BYTE "Unable to close destination file" BYTE ABEL,0 JMPS EXIT ;CONTINUE ; EXIT: CALL DMS ;DISPLAY MESSAGE BYTE ACR,ALF,0 XOR AX,AX ;SET RETURN CODE=0 MOV SS,SSSAVE ;RESTORE SS-REG MOV SP,SPSAVE ;RESTORE SP-REG RETF ;DONE ; DMS: PUSH BX ;SAVE BC-REG MOV BP,SP ;GET SP-REG MOV BX,2[BP] ;GET MESSAGE ADDRESS PUSH BP ;SAVE BP-REG CALL MSGBX ;DISPLAY MESSAGE POP BP ;RESTORE BP-REG MOV 2[BP],BX ;SET UP RETURN ADDRESS POP BX ;RESTORE BX-REG RET ;DONE ; MSGBX: PUSHF ;SAVE FLAGS PUSH AX ;SAVE AX-REG __L: CS MOV AL,[BX] ;GET MESSAGE BYTE INC BX ;INCREMENT POINTER TEST AL,AL ;LAST CHARACTER? JZ __X ;IF SO, CONTINUE CALL CONOUT ;ELSE, DISPLAY CHARACTER JMPS __L ;CONTINUE __X: POP AX ;RESTORE AX-REG POPF ;RESTORE FLAGS RET ;DONE ; CONOUT: PUSH AX ;SAVE REGISTERS PUSH BX PUSH CX PUSH DX AND AL,=0x7F ;STRIP SIGN BIT FROM CHARACTER MOV DL,AL ;OUTPUT CHARACTER TO E-REG MOV CL,=RCOFCN ;CL=RAW CONSOLE OUTPUT FUNCTION INT OPSYSC ;OUTPUT CHARACTER TO CONSOLE POP DX ;RESTORE REGISTERS POP CX POP BX POP AX RET ;DONE ; END START ""##8COPYRIGHT 1986, SOFTWARE 2000, INC. (VERSION 01/07/86) `&b؎м`\d ؎\ ؎pduxu}duttdtt  End of conversion Source file not found Unable to create destination file Unable to write destination filep~ Unable to read    source fileM[ Unable to close source file)7 Unable to close destination file 1`&bS^U]^[ÜP.CtXPSQR$±ZY[X CMD COMGIFF ^ F=(}#^ ؊ v v^ ؊FՋF ( S(SP%!F (uA0S(SP!03SP0^`0SPU]UPQPwAP PXPGIP P`P`P} >`t 0mAoAnA]UPwAPQP: PGIPXP) P`P`P FF0=}F03SPF0@FݠoA0PmA0nA0SPk]U0=|3]Â>`t 0uApAtAP`aPrAsAqA 3P*Y0Ht uA053uA0P3.mb 12 .po 1 .pc 40 PATCH TO COMMAND.COM (09/29/85) ------------------------------- The following patch may be made to the COMMAND.COM of an MS-DOS type system in order to speed program loads from remote TurboDOS/PC drives which have large hashed directories. The file PCDOS210.CLI is COMMAND.COM for PC-DOS 2.1 that has the patches already installed, to use simply copy to command.com on your pc. The problems lies not so much in the time DOS takes to load the program but the ambiguous file search performed by the command line interpreter to find acted upon file types (COM's, EXE's, and BAT's). This patch removes the ambiguous file search and replaces it with up to three non-ambiguous file searches. The patch has been applied to IBM-PC DOS 2.10 and Leading Edge MS-DOS 2.11, both with positive results. The following patch examples can be made with the DOS DEBUG program. The offset addresses shown conform when COMMAND.COM is loaded under the debugger. The patch can be carefully installed, then written back to disk for testing. This patch CANNOT be may to the resident portion of COMMAND.COM in memory. If your DOS version differs from the addresses shown, then you can load COMMAND.COM under the Z80 TurboDOS MONITOR program and search for the following three bytes using the "where" command as follows: W AA AA AA These are the three instructions that poke "?" characters into the FCB file type field. It seems to be a fairly unique sequence of bytes. The address returned by the search translates to the code segment offset under DEBUG. The SEARCH portion of the code can be identified about ten instructions later. Best of Luck, John E. Lauber .pa ************************************************** **** ** SYMBOLIC REPRESENTATION OF THE PATCH** **** ************************************************** CODE LOGIC BEFORE PATCH: MOVAH,11;FUNCTION=SEARCH FIRST SEARCH:PUSHCS POPDS;COPY CS TO DS REG MOVDX,FCB;POINT FCB INT21 ORAL,AL;TEST RESULTS MOVAH,12;FUNCTION=SEARCH NEXT JNZENDSRH;NO FILE, CONTINUE CMP WORD PTR [BUFFER+9],4F43 ;BUFFER+9="COM"? JNZ NOTCOM;NO, CONTINUE CMP BYTE PTR [BUFFER+B],4D JNZ NOTCOM;NO, CONTINUE OR BYTE PTR [FLAGS],04;SET "COM" FLAG JMP DOEXEC;AND EXECUTE ; NOTCOM:CMP WORD PTR [BUFFER+9],5845 ;BUFFER+9="EXE"? JNZ NOTEXE;NO, CONTINUE CMP BYTE PTR [BUFFER+B],45 JNZ NOTEXE;NO, CONTINUE OR BYTE PTR [FLAGS],01;SET "EXE" FLAG JMP SEARCH;AND CONTINUE ; NOTEXE:CMP WORD PTR [BUFFER+9],4142 ;BUFFER+9="BAT" JNZ SEARCH;NO, CONTINUE CMP BYTE PTR [BUFFER+B],54 JNZ SEARCH;NO, CONTINUE OR BYTE PTR [FLAGS],02;SET "BAT" FLAG JMP SEARCH;AND CONTINUE ; ENDSRH:TESTBYTE PTR [FLAGS],01;"EXE" FILE? JZ NOEXE;NO, CONTINUE MOV WORD PTR [BUFFER+9],5845 ;SET BUFFER+9="EXE" MOV BYTE PTR [BUFFER+B],45 JMP DOEXEC;AND EX  ECUTE ; NOEXE:TEST BYTE PTR [FLAGS],02;"BAT" FILE? JZ NOFIND;NO, CONTINUE MOV WORD PTR [BUFFER+9],4142 ;SET BUFFER+9="BAT" MOV BYTE PTR [BUFFER+B],54 ; DOBAT:(CONTINUE WITH "BAT" FILE PROCESSING) ... NOFIND:(IF NO "COM", "EXE", OR "BAT" FILE FOUND) ... DOEXEC:(IF "COM" OR "EXE" FILE FOUND) CODE LOGIC AFTER PATCH: PGMLOAD: PUSHCS POPDS;COPY CS TO DS REG MOVWORD PTR [FCB+9],4F43;SET FCB+9 MOVBYTE PTR [FCB+B],4D;TO "COM" CALLSEARCH;LOOK FOR "COM" FILE JNZNOTCOM;IF FAILED, CONTINUE ORBYTE PTR [FLAGS],04;ELSE, SET "COM" FLAG JMPDOEXEC;AND CONTINUE ; NOTCOM: MOVWORD PTR [FCB+9],5845;SET FCB+9 MOVBYTE PTR [FCB+B],45;TO "EXE" CALLSEARCH;LOOK FOR "EXE" FILE JNZNOTEXE;IF FAILED, CONTINUE ORBYTE PTR [FLAGS],01;ELSE, SET "EXE" FLAG JMPDOEXEC;AND CONTINUE ; NOTEXE: MOVWORD PTR [FCB+9],4142;SET FCB+9 MOVBYTE PTR [FCB+B],54;TO "BAT" CALLSEARCH;LOOK FOR "BAT" FILE JNZNOFIND;IF FAILED, CONTINUE ORBYTE PTR [FLAGS],02;ELSE, SET "BAT" FLAG JMPDOBAT;AND CONTINUE ; SEARCH: MOVAH,11;FUNCTION=SEARCH FIRST FILE PUSHCS POPDS;COPY CS TO DS REG MOVDX,FCB;POINT FCB INT21 ORAL,AL;TEST IF SUCCESSFUL RET;EXIT WITH FLAGS SET ; ; FILL WITH NOP'S ; DOBAT:(CONTINUE WITH "BAT" FILE PROCESSING) ... NOFIND:(IF NO "COM", "EXE", OR "BAT" FILE FOUND) ... DOEXEC:(IF "COM" OR "EXE" FILE FOUND) .pa ********************************** **** ** IBM PC-DOS COMMAND.COM** ** SPECIFIC PATCH ADDRESSES** ** DOS VERSION 2.10** **** ********************************** CODE IMAGE BEFORE PATCH: CS:158D B411 MOV AH,11;FUNCTION=SEARCH FIRST CS:158F 0E PUSH CS CS:1590 1F POP DS;COPY CS TO DS REG CS:1591 BAEC2C MOV DX,2CEC;POINT FCB CS:1594 CD21 INT 21 CS:1596 0AC0 OR AL,AL;TEST RESULTS CS:1598 B412 MOV AH,12;FUNCTION=SEARCH NEXT CS:159A 7543 JNZ 15DF;NO FILE, CONTINUE CS:159C 813E712D434F CMP WORD PTR [2D71],4F43;BUFFER+9="COM"? CS:15A2 750F JNZ 15B3;NO, CONTINUE CS:15A4 803E732D4D CMP BYTE PTR [2D73],4D CS:15A9 7508 JNZ 15B3;NO, CONTINUE CS:15AB 800EC22C04 OR BYTE PTR [2CC2],04;SET "COM" FLAG CS:15B0 E9C701 JMP 177A;AND EXECUTE CS:15B3 813E712D4558 CMP WORD PTR [2D71],5845;BUFFER+9="EXE"? CS:15B9 750E JNZ 15C9;NO, CONTINUE CS:15BB 803E732D45 CMP BYTE PTR [2D73],45 CS:15C0 7507 JNZ 15C9;NO, CONTINUE CS:15C2 800EC22C01 OR BYTE PTR [2CC2],01;SET "EXE" FLAG CS:15C7 EBC6 JMP 158F;AND CONTINUE CS:15C9 813E712D4241 CMP WORD PTR [2D71],4142;BUFFER+9="BAT" CS:15CF 75BE JNZ 158F;NO, CONTINUE CS:15D1 803E732D54 CMP BYTE PTR [2D73],54 CS:15D6 75B7 JNZ 158F;NO, CONTINUE CS:15D8 800EC22C02 OR BYTE PTR [2CC2],02;SET "BAT" FLAG CS:15DD EBB0 JMP 158F;AND CONTINUE CS:15DF F606C22C01 TEST BYTE PTR [2CC2],01;"EXE" FILE? CS:15E4 740E JZ 15F4;NO, CONTINUE CS:15E6 C706712D4558 MOV  WORD PTR [2D71],5845;SET BUFFER+9="EXE" CS:15EC C606732D45 MOV BYTE PTR [2D73],45 CS:15F1 E98601 JMP 177A;AND EXECUTE CS:15F4 F606C22C02 TEST BYTE PTR [2CC2],02;"BAT" FILE? CS:15F9 741F JZ 161A;NO, CONTINUE CS:15FB C706712D4241 MOV WORD PTR [2D71],4142;SET BUFFER+9="BAT" CS:1601 C606732D54 MOV BYTE PTR [2D73],54 CS:1606 (CONTINUE WITH "BAT" FILE PROCESSING) CODE IMAGE AFTER PATCH: CS:158D 0E PUSH CS CS:158E 1F POP DS;COPY CS TO DS REG CS:158F C706F52C434F MOV WORD PTR [2CF5],4F43;SET FCB+9="COM" CS:1595 C606F72C4D MOV BYTE PTR [2CF7],4D CS:159A E83900 CALL 15D6;SEARCH FILE CS:159D 7508 JNZ 15A7;NOT FOUND, CONTINUE CS:159F 800EC22C04 OR BYTE PTR [2CC2],04;SET "COM" FLAG CS:15A4 E9D301 JMP 177A;AND CONTINUE CS:15A7 C706F52C4558 MOV WORD PTR [2CF5],5845;SET FCB+9="EXE" CS:15AD C606F72C45 MOV BYTE PTR [2CF7],45 CS:15B2 E82100 CALL 15D6;SEARCH FILE CS:15B5 7508 JNZ 15BF;NOT FOUND, CONTINUE CS:15B7 800EC22C01 OR BYTE PTR [2CC2],01;SET "EXE" FLAG CS:15BC E9BB01 JMP 177A;AND CONTINUE CS:15BF C706F52C4241 MOV WORD PTR [2CF5],4142;SET FCB+9="BAT" CS:15C5 C606F72C54 MOV BYTE PTR [2CF7],54 CS:15CA E80900 CALL 15D6;SEARCH FILE CS:15CD 754B JNZ 161A;NOT FOUND, CONTINUE CS:15CF 800EC22C02 OR BYTE PTR [2CC2],02;SET "BAT" FLAG CS:15D4 EB30 JMP 1606;AND CONTI   NUE CS:15D6 B411 MOV AH,11;FUNCTION=SEARCH FIRST CS:15D8 0E PUSH CS CS:15D9 1F POP DS;COPY CS TO DS REG CS:15DA BAEC2C MOV DX,2CEC;POINT FCB CS:15DD CD21 INT 21 CS:15DF 08C0 OR AL,AL;TEST RESULTS CS:15E1 C3 RET;EXIT WITH FLAGS CS:15E2 90 NOP ... ...;FILL FOR EXTRA BYTES ... CS:1605 90 NOP CS:1606 (CONTTINUE WITH "BAT" FILE PROCESSING) .pa ********************************** **** ** LEADING EDGE COMMAND.COM** ** SPECIFIC PATCH ADDRESSES** ** DOS VERSION 2.11** **** ********************************** CODE IMAGE BEFORE PATCH: CS:1459 B411 MOV AH,11;FUNCTION=SEARCH FIRST CS:145B 0E PUSH CS CS:145C 1F POP DS;COPY CS TO DS REG CS:145D BA402E MOV DX,2E40;POINT FCB CS:1460 CD21 INT 21 CS:1462 0AC0 OR AL,AL;TEST RESULTS CS:1464 B412 MOV AH,12;FUNCTION=SEARCH NEXT CS:1466 7543  JNZ 14AB;NO FILE, CONTINUE CS:1468 813EC52E434F CMP WORD PTR [2EC5],4F43;BUFFER+9="COM"? CS:146E 750F JNZ 147F;NO, CONTINUE CS:1470 803EC72E4D CMP BYTE PTR [2EC7],4D CS:1475 7508 JNZ 147F;NO, CONTINUE CS:1477 800ED92D04 OR BYTE PTR [2DD9],04;ELSE, SET "COM" FLAG CS:147C E9A701 JMP 1626;AND EXECUTE COM-FILE CS:147F 813EC52E4558 CMP WORD PTR [2EC5],5845;BUFFER+9="EXE"? CS:1485 750E JNZ 1495;NO, CONTINUE CS:1487 803EC72E45 CMP BYTE PTR [2EC7],45 CS:148C 7507 JNZ 1495;NO, CONTINUE CS:148E 800ED92D01 OR BYTE PTR [2DD9],01;ELSE, SET "EXE" FLAG CS:1493 EBC6 JMP 145B;AND CONTINUE CS:1495 813EC52E4241 CMP WORD PTR [2EC5],4142;BUFFER+9="BAT"? CS:149B 75BE JNZ 145B;NO, CONTINUE CS:149D 803EC72E54 CMP BYTE PTR [2EC7],54 CS:14A2 75B7 JNZ 145B;NO, CONTINUE CS:14A4 800ED92D02 OR BYTE PTR [2DD9],02;ELSE, SET "BAT" FLAG CS:14A9 EBB0  JMP 145B;AND CONTINUE CS:14AB F606D92D01 TEST BYTE PTR [2DD9],01;"EXE" FILE? CS:14B0 740E JZ 14C0;NO, CONTINUE CS:14B2 C706C52E4558 MOV WORD PTR [2EC5],5845;SET BUFFER+9="EXE" CS:14B8 C606C72E45 MOV BYTE PTR [2EC7],45 CS:14BD E96601 JMP 1626;AND CONTINUE CS:14C0 F606D92D02 TEST BYTE PTR [2DD9],02;"BAT" FILE? CS:14C5 741F JZ 14E6;NO, CONTINUE CS:14C7 C706C52E4241 MOV WORD PTR [2EC5],4142;SET BUFFER+9="BAT" CS:14CD C606C72E54 MOV BYTE PTR [2EC7],54 CS:14D2 (CONTINUE WITH "BAT" FILE PROCESSING) CODE IMAGE AFTER PATCH: CS:1459 0E PUSH CS CS:145A 1F POP DS;COPY CS TO DS REG CS:145B C706492E434F MOV WORD PTR [2E49],4F43;SET FCB+9="COM" CS:1461 C6064B2E4D MOV BYTE PTR [2E4B],4D CS:1466 E83900 CALL 14A2;SEARCH FILE CS:1469 7508 JNZ 1473;NOT FOUND, CONTINUE CS:146B 800ED92D04 OR BYTE PTR [2DD9],04;SET "COM" FLAG CS:1470 E9B301 JMP 1626;AND CONTINUE CS:1473 C706492E4558 MOV WORD PTR [2E49],5845;SET FCB+9="EXE" CS:1479 C6064B2E45 MOV BYTE PTR [2E4B],45 CS:147E E82100 CALL 14A2;SEARCH FILE CS:1481 7508 JNZ 148B;NOT FOUND, CONTINUE CS:1483 800ED92D01 OR BYTE PTR [2DD9],01;SET "EXE" FLAG CS:1488 E99B01 JMP 1626;AND CONTINUE CS:148B C706492E4241 MOV WORD PTR [2E49],4142;SET FCB+9="BAT" CS:1491 C6064B2E54 MOV BYTE PTR [2E4B],54 CS:1496 E80900 CALL 14A2;SEARCH FILE CS:1499 754B JNZ 14E6;NOT FOUND, CONTINUE CS:149B 800ED92D02 OR BYTE PTR [2DD9],02;SET "BAT" FILE CS:14A0 EB30 JMP 14D2;CONTINUE CS:14A2 B411 MOV AH,11;FUNCTION=SEARCH FIRST CS:14A4 0E PUSH CS CS:14A5 1F POP DS;COPY CS TO DS REG CS:14A6 BA402E MOV DX,2E40;POINT FCB CS:14A9 CD21 INT 21 CS:14AB 08C0 OR AL,AL;CHECK RESULTS CS:14AD C3 RET*EXIT WITH FLAGS CS:14AE 90  NOP ... ...*FILL FOR EXTRA BYTES ... CS:14D1 90 NOP CS:14D2 (CONTINUE WITH "BAT" FILE PROCESSING) END OF PATCH PROCEDURES 2 C706C52E4558 MOV WORD PTR [2EC5],5845;SET BUFFER+9="EXE" CS:14B8 C606C72E45 MOV BYTE PTR [2EC  ; ; PATCH INFORMATION FOR COMMAND.COM ; PC-DOS VERSION 3.10 ; ; CHANGES THE AMBIGUOUS PROGRAM LOOKUP TO 3 CONSECUTIVE NON-AMBIGUOUS ; SEARCH FUNCTIONS AND CONTINUES IF A .COM, .EXE, OR .BAT FILE IS FOUND. ; ; THIS PATCH IS DESIGNED FOR TO BE INSTALLED WITH THE PC-DOS DEBUGGER ; "DEBUG.COM" AND IS EXTREMELY DIFFICULT TO PRODUCE. THE FOLLOWING IS THE ; ATTEMP TO OUTLINE THE PATCHING PROCEDURE. THE COMMAND.COM MODULE MAY ; WITH THE DIFFERENT VERSIONS OF PC-DOS VERSION 3 AND MAY REQUIRE SOME ; ADDITIONAL WORK TO FIND THE BEGINNING OF THE COMMAND LOOKUP ROUTINES. ; ; PATCH RESEARCHED AND DEVELOPED BY JOHN E. LAUBER. ; ; THE FILE "PCDOS310.CLI" CONTAINS A PREVIOUSLY PATCHED VERSION OF THE ; 3.10 COMMAND PROCESSOR. ; ; STEP #1 ; ------- ; LOAD THE COMMAND.COM PROGRAM INTO MEMORY WITH THE DEBUGGER. NOTE THE ; CURRENT CODE SEGMENT "CS" REGISTER. USE THE "R CS" COMMAND TO ADD 134H ; TO THE CURRENT CS REGISTER (CS=CS+134H). ; ; STEP #2 ; ------- ; USE THE "A 2346" COMMAND TO BEGIN ASSEMBLY OF THE FOLLOWING PATCH CODE. ; THE LXXXX LABELS ARE FOR CHECKING YOUR ADDRESSES DURING ASSEMBLY TIME. ; L2346: PUSH CX ; "PATCH" PUSH DX PUSH DI PUSH SI ; SAVE REGISTERS PUSHF ; SAVE FLAGS PUSH DX ; SAVE FILE SPEC POINTER MOV DI,DX ; FILE SPEC POINTER TO REG MOV SI,46E1 ; POINT BUFFER XOR DX,DX ; PRESET DEFAULT DRIVE CMP BYTE PTR [DI+1],3A ; DRIVE SPECIFIED? JNZ 2361 ; IF NOT, CONTINUE MOV DL,[DI] ; ELSE, LOAD THE DRIVE NAME AND DL,0DF ; MASK TO VALID NAMES SUB DL,40 ; REMOVE DRIVE NAME BIAS L2361: MOV AX,4700 ; FUNCTION = GET CURRENT DIRECTORY INT 21 POP DX ; RESTORE FILE SPEC POINTER JC 239D ; ON ERRORS, CONTINUE MOV BYTE PTR [46D3],0 ; CLEAR CODE CALL 23AD ; SETUP .COM TYPE INT 21 ; SEARCH .COM FILE MOV AX,8 ; SET .COM CODE JNC 238C ; IF FOUND, CONTINUE CALL 23B4 ; SETUP .EXE TYPE INT 21 ; SEARCH .EXE FILE MOV AX,4 ; SET .EXE CODE JNC 238C ; IF FOUND, CONTINUE CALL 23BB ; SETUP .BAT TYPE INT 21 ; SEARCH .BAT FILE MOV AX,2 ; SET .BAT CODE JC 23A4 ; IF NOT FOUND, CONTINUE L238C: MOV SI,46BF ; POINT FOUND STRING MOV DI,46D4 ; POINT FILE SPECIFIER MOV CX,0D ; GET LENGTH CLD ; DIRECTION = INCREMENT REP MOVSB ; COPY FILE NAME MOV [46D3],AL ; SET FOUND CODE JMPS 23A7 ; CONTINUE ; L239D: MOV DX,[4721] CALL 3159 L23A4: MOV AX,0 ; SET NOT FOUND RETURN CODE L23A7: POPF ; RESTORE FLAGS POP SI POP DI POP DX POP CX ; RESTORE REGS RET ; AND DONE ; L23AD: PUSH DI PUSH SI ; SAVE REGS MOV SI,3AEE ; POINT .COM STRING JMPS 23C0 ; AND CONTINUE ; L23B4: PUSH DI PUSH SI ; SAVE REGS MOV SI,3AF2 ; POINT .EXE STRING JMPS 23C0 ; AND CONTINUE ; L23BB: PUSH DI PUSH SI ; SAVE REGS MOV SI,3AF6 ; POINT .BAT STRING ; L23C0: XOR AX,AX ; ZERO REG MOV DI,DX ; FILE SPEC STRING TO REG MOV CX,80 ; LENGTH = 128 CLD ; DIRECTION = INCREMENT REPNZ SCASB ; SEARCH END OF STRING SUB DI,5 ; BACKUP TO FILE TYPE MOV CX,4 ; LENGTH = 4 REP MOVSB ; SETUP THE TYPE STRING POP SI POP DI ; RESTORE REGS MOV CX,13 ; ATTRIBUTE REG = CODE MOV AX,4E00 ; FUNCTION = FIND FIRST RET ; DONE ; ; STEP #3 ; ------- ; THE FOLLOWING BYTE FROM CS:23DB THROUGH CS:2400 COULD BE ZERO'ED ; OR FILLED WITH NOP'S (HEX 90). THEY MAY ALSO BE IGNORED IF YOUR'RE ; PRESSED FOR TIME. ; ; STEP #4 ; ------- ; USE THE "R CS" TO RESTORE YOUR CODE SEGMENT TO IT'S ORIGINAL VALUE ; (CS=CS-134H). YOUR DEBUGGER'S BX&CX REGISTERS SHOULD STILL BE SET ; TO THE PROPER LENGTH OF THE PROGRAM PROVIDING THAT YOU DID NOT USE ; ANY TRACE COMMANDS. FINALLY, USE THE "N NEWNAME.COM" COMMAND TO SET ; UP YOUR FCB FOR WRITTING, AND USE THE "W" COMMAND TO WRITE THE ; ALTERED COMMAND.COM MODULE BACK TO DISK. TEST THE NEW COMMAND.COM ; MODULE FOR PROPER OPERATION, THEN COPY TO YOUR BOOT DISKETTE FOR ; DEFAULT LOADING. ; ; YOU'RE DONE!  u9Sц0Ҵ-!u/X=t.BC7C0l+!u<"6 Jje i\ SP X[30C0C0]t ¸mS1@mwm10C)wЈ[C/CKKStu[SQRVW!t_^ZY[SQRVW !_^ZY[tPSQRVW$>~t!_^ZY[Xû< t< rà$S:v P X[~~Êt$<\t.CSU^C^][.t$<\tnCð ` [.T!ø! /   \DOS date and time has been set\Cannot read TurboDOS date and timeCannot set DOS timeTurboDOS date has not been set Cannot set DOS dateEDLIN COM j RGEXE2BIN EXE `u V FC EXE ` ^8FECHO COM O:#TITLE "TURBODOS/PC PRINT FILTER FOR DOS FUNCTION 5" #SUBTTL "COPYRIGHT 1985, SOFTWARE 2000, INC." ; ; COPYRIGHT 1985, SOFTWARE 2000, INC. ; ; VERSION: 09/25/85 ; ; EDIT HISTORY: ; 09/25/85 JL - CREATED FROM TURBOPRN ; MODULE "FCN5PRN" ;MODULE NAME ; This is a sample TurboDOS/PC print filter, written to ; work with the most generic MS-DOS implementations. ; ; Its primary function is to intercept print output ; requests at the DOS level (FCN 5) and to pass them ; to TurboDOS/PC via C-function 5. This interception ; does not take place if the current print mode is "local" ; or "offline". ; ; A secondary function is to cause TurboDOS/PC to flush ; its print buffer whenever there has been no print output ; for awhile. This print filter makes use of the BIOS ; timer tick interrupt (INT 0x1C) for this purpose. ; LOC Code# ;LOCATE IN CODE SEGMENT ; BYTE "COPYRIGHT 1985, SOFTWARE 2000, INC." BYTE " (VERSION 09/25/85) " ;VERSION DATE ; ALIGN ;ALIGN TO WORD BOUNDARY ; I21DWD: WORD 0,0 ;INTERRUPT 0x21 TRANSFER DOUBLE WORD I1CDWD: WORD 0,0 ;INTERRUPT 0x1C TRANSFER DOUBLE WORD LOACNT: BYTE 0 ;LIST OUTPUT ACTIVITY COUNT ; ; INT 0x21 (MS-DOS FUNCTIONS) INTERRUPT SERVICE ROUTINE ; I21ISR: CMP AH,=5 ;FUNCTION NUMBER=5? JNZ __X3 ;IF NOT, CONTINUE PUSH CX ;SAVE REGISTERS PUSH BX PUSH AX PUSH DX ;SAVE OUTPUT CHAR MOV DX,=0xFFFF ;SET DX-REG=0FFFFH MOV CH,=0xFF ;SET CH-REG=0FFH MOV CL,=27 ;CL=SET/RETURN PRINT MODE FUNCTION MOV AX,=0xFF01 ;SET T-FCN FLAG INT 0x21 ;GET CURRENT PRINT MODE CMP BL,=2 ;CURRENT PRINT MODE=LOCAL? JZ __X2 ;IF SO, CONTINUE POP DX ;ELSE, RESTORE DX-REG MOV CL,=5 ;CL=LIST OUTPUT FUNCTION MOV AX,=0xFF00 ;SET C-FCN FLAG INT 0x21 ;OUTPUT CHARACTER CS MOV LOACNT,=10 ;SET LIST OUTPUT ACTIVITY COUNT POP AX ;RESTORE REGISTERS POP BX POP CX IRET ;DONE __X2: POP DX POP AX ;RESTORE REGISTERS POP BX POP CX __X3: CS JMPFI I21DWD ;CONTINUE ; ; INT 0x1C (TIMER TICK) INTERRUPT SERVICE ROUTINE ; I1CISR: CS CMP LOACNT,=0 ;LIST OUTPUT ACTIVITY COUNT=0? JZ __X ;IF SO, CONTINUE CS DEC LOACNT ;DECREMENT LIST ACTIVITY COUNT JNZ __X ;IF COUNT NOT EXHAUSTED, CONTINUE PUSH CX ;SAVE CX-REG MOV CL,=31 ;CL=FLUSH LIST BUFFER FUNCTION MOV AX,=0xFF01 ;SET T-FCN FLAG INT 0x21 ;FLUSH LIST BUFFER POP CX ;RESTORE CS-REG TEST AL,AL ;FLUSH LIST BUFFER SUCCESSFUL? JZ __X ;IF SO, CONTINUE CS INC LOACNT ;INCREMENT LIST ACTIVITY COUNT __X: CS JMPFI I1CDWD ;CONTINUE WITH TIMER INTERRUPT ; ; TRANSIENT PROGRAM ENTRYPOINT ;  START: MOV AL,=0x1C ;GET INTERRUPT 0x1C (TIMER TICK) CALL GETINT ;GET INTERRUPT VECTOR ADDRESS MOV DI,BX ;INTERRUPT VECTOR OFFSET TO DI-REG MOV SI,&I1CISR ;GET INTERRUPT 0x1C ADDRESS MOV CX,=16 ;GET COMPARE LENGTH CLD ;CLEAR DIRECTION FLAG REPE CMPS BYTE ;UTILITIY ALREADY INSTALLED? JZ __UAI ;IF SO, CONTINUE MOV I1CDWD,BX ;SAVE INTERRUPT VECTOR OFFSET MOV I1CDWD+2,ES ;SAVE INTERRUPT VECTOR SEGMENT MOV AL,=0x21 ;GET INTERRUPT 0x21 (MS-DOS FUNCTIONS) CALL GETINT ;GET INTERRUPT VECTOR ADDRESS MOV I21DWD,BX ;SAVE INTERRUPT VECTOR OFFSET MOV I21DWD+2,ES ;SAVE INTERRUPT VECTOR SEGMENT MOV DX,&I21ISR ;GET INTERRUPT SERVICE ADDRESS MOV AL,=0x21 ;GET INTERRUPT 0x21 CALL SETINT ;SET INTERRUPT VECTOR ADDRESS MOV DX,&I1CISR ;GET INTERRUPT SERVICE ADDRESS MOV AL,=0x1C ;GET INTERRUPT 0x1C CALL SETINT ;SET INTERRUPT VECTOR ADDRESS MOV DX,&START ;GET LAST BYTE ADDRESS INT 0x27 ;TERMINATE BUT STAY RESIDENT __UAI: INT 0x20 ;DONE ; ; SUBROUTINE TO LOAD AN INTERRUPT VECTOR ; GETINT: PUSH DS ;SAVE DS-REG XOR BX,BX ;GET INTERRUPT VECTOR PARAGRAPH MOV DS,BX ;INTERRUPT PARAGRAPH TO DS-REG MOV BL,AL ;INTERRUPT NUMBER TO BX-REG ADD BX,BX ;X2 ADD BX,BX ;X2=X4 MOV ES,2[BX] ;GET INTERRUPT VECTOR SEGMENT MOV BX,0[BX] ;GET INTERRUPT VECTOR OFFSET POP DS ;RESTORE DS-REG RET ;DONE ; ; SUBROUTINE TO STORE AN INTERRUPT VECTOR ; SETINT: PUSH ES ;SAVE ES-REG XOR BX,BX ;GET INTERRUPT VECTOR PARAGRAPH MOV ES,BX ;INTERRUPT PARAGRAPH TO ES-REG MOV BL,AL ;INTERR  UPT NUMBER TO BX-REG ADD BX,BX ;X2 ADD BX,BX ;X2=X4 ES MOV 0[BX],DX ;GET INTERRUPT VECTOR OFFSET ES MOV 2[BX],DS ;SET INTERRUPT VECTOR SEGMENT POP ES ;RESTORE ES-REG RET ;DONE ; END START tore a Set UpRetrieves a previously saved Set Up from a disk file.Reset PC/InterCommRestores PC/InterComm to its initial settings.Answerback message; now '%s'Specifies the answerback message.Send answerback message (the VT100 Ctrl-BREAK function)Sends the defined answerback message.%2nEnter the computer system name: %2nStoring > > >%2nSave the Set Up in what file (default is %s): vt%2nUnable to create '%s'%2nWrite error or disk full while saving.%2n%60x> > > Loading%2nLoad the Set Up from whaCOPYRIGHT 1985, SOFTWARE 2000, INC. (VERSION 09/25/85) u+QSPR!tZ!.D X[YZX[Y..<.>Dt.DuQ!Yt.D..@9߾zt*@B!<>E!!z' 1ێۈێG1ێÈ&&_red: %2nDo you really want to clear all tab stops? %20xV T 1 0 0 E M U L A T O R (Release 1.1)%n%12y%50xEXECUTE - Modify this item.%13y%50xHELP - Help on this item.%14y%50xCANCEL - Exit menu.%c %rItem is:%2n%18x%c %r%2nHelp is:%2n%r%50x%*yANY KEY - Return to menu._---Break Received------Carrier Lost------Carrier On---/Z[?6c[?10nile Option MenuHow to save when collecting text; now %[Manual%;Auto%;XON/XOFF%;Small%:Small XON/XOFF%] savingManual -- excess text is diuttTˉ..u4t؎.ؾD0(Ȉ&8s0֊td.uU.D&E0*&Eϊ . .ut0 .=LANTPCn)Y   Ȏ؋Hu&&u>u0L)BY80n !" !uGËd. 10R´!ZIntercontinental Micro Systems, Corp. LAN-PC interface driver $ $#TITLE "TURBODOS OPERATING SYSTEM TURBODOS/PC LOCAL DRIVE RESTORE UTILITY" #SUBTTL "COPYRIGHT 1986, SOFTWARE 2000, INC." ; ; COPYRIGHT 1986, SOFTWARE 2000, INC. ; ; VERSION: 01/07/86 ; MODULE "LOCAL" ;MODULE NAME ; RAMSEG == 0x0020 ;BOOTROM RAM SEGMENT ; LOC Code# ;LOCATE IN CODE SEGMENT ; BYTE "COPYRIGHT 1986, SOFTWARE 2000, INC." BYTE " (VERSION 01/07/86) " ;VERSION DATE ; START: MOV SI,&0 ;GET SAVED INTERRUPT 0x13 OFFSET MOV AX,&RAMSEG ;GET BOOT ROM RAM SEGMENT MOV DS,AX ;SET DS-REG MOV DI,&0x13*4 ;GET INTERRUPT 0x13 VECTOR MOV AX,&0 ;GET INTERRUPT VECTOR SEGMENT MOV ES,AX ;SET ES-REG MOV CX,=2 ;GET INTERRUPT VECTOR LENGTH CLD ;CLEAR DIRECTION FLAG REP MOVS WORD ;RESTORE ORIGINAL INT 0x13 VECTOR INT 0x20 ;DONE ; END START 8COPYRIGHT 1986, SOFTWARE 2000, INC. (VERSION 01/07/86) ؿL PATCH PROCEDURES 2 C706C52E4558 MOV WORD PTR [2EC5],5845;SET BUFFER+9="EXE" CS:14B8 C606C72E45 MOV BYTE PTR [2EC   0x%*yTransmitting file %s.%0x%*yCollecting for file %s. Used %u of %u characters.%2nName of file to transmit (default is '%s'): %2nUnable to open '%s'%2nCollect into which file (default is '%s'): %2nUnable to %screate '%s'open or %2n---Write error or disk full------Collection Buffer Full------Write error or disk full while collecting---%n---End of Text---%50xANY KEY - next screen.---Collection in Progress---history.vtscreens.vt---Cannot open save file------Write error or disk full while 9COPYRIGHT 1986, SOFTWARE 2000, INC. (VERSION 01/07/86) ؎м6!ڱ3! !!tLuC6 !!u.:t:!!tۈC$QS![Yĺ !6!!_ !1 Console attached to master processor $ Console detached from master processor $ Console already attached to master processor $ Non-privileged user $ Remote console driver not present $k number error%n short block write error, disk full?%n checksum error%n duplicate block%n sequence error%n1%2nDefine which function key): %sF%dShift-%2nEnter the string to be sent: Strings sent by function keys are:%2nF%u%4x'%s'%n%40xShift-F%u%50x'%s'%n%rYesNo Please enter 'Y' or 'N'%n'%s' is not a decimal number.%n%d is not in the range %d to %d. Cancelled%n%n} Kt.. UWVRQSP. .& [X;tӼH!YrpH!rj6g Y6 I!u; t<9 =!r?غ€.3ɸB!N ?!P>!YNu:6; u 62 6 66 tD6 .& X[YZ^_]. N3f =t=t=t = tɎѼ!rδM!.l Ȏش !3 u%3w w >s ts >k u q] !$_r t>s u >r u !%!., .L!s  I!* P!l >k u3k .& .& .( X@Q!.* P!.s .k .>k t0H!qsIH!r.k . .g Q.c Ȏм3u =t.!>s u%I; u ;i t2 M/; u ;i t7! /u \2 ,c g .a P u!S$u:[v 3X3ۋo :t>!C:t>!.>!CSPQ!ۡ.0 X[WQP݋D.& XY_R&ZAĀt ut v >. 狽t  !>2 tzr ! s ts >. t>. uw >s ts ċϺVPSPQ!0 ۣX[ú-e Wu=>e uER  !úPSRVP$<0r<9w,0؋д!Xt^Z[XE9 =!s=uغ3ɸB!r3c ?!>!r3t Vc *3ҭú"%!#%!$%!"*3?CRVbrz3Write protecBad uniNot readBad commandDatBad call formaSeeNon-DOS disSector not founNo papeWrite faulRead faulDisreadwrit e5writin drive A device $ COMMAN allocation filerrorCannotemor batcInserAbort, Retry, Ignore?0File3table bad0Invalid1.COM091.COM disk indrive Adefault driv0and strike any key when ready0Terminate8 job (Y/N)?EXEC failureE5in EXE4Program too big to fit in m70Bad or missing Command Interprete0No free4handle0M73e06load1, system halte06start1, exiting2or4name,_:/%PIPE1.$$$_:/%PIPE2.$$$ \l-/dPATH=COMSPEC=/COMMAND.COM    g -Qc , t £ 7! /u g\ \!5!  !%!\e @<@t }   : uC2C< t< t: u4I) !42D![[Q3۴>!CڴE!E!E!>!YVX £ D ^Y>I< t < tVQgEcuFI=!r ش>!Y^- !g>r >u>r t#P! ثثm.%!, o  $ ( 9 6>tW_s6 uJ!>u H!i g -Y a >u_H!rF3 3>uu !Auu u=!rش>!,3 I!3 )c >s u !7> /ts uȎмv/6,6+6+ t 6+ >q t ,;!>x t >w u k q Ȏ+, t,,n t~r$ !6,n tgr w t3w t& O N 3 t>s t6s +3ɬA< uI+3+ !+2++VW,01 < t <%u&E=,W_s, t< t <=t%^< t <%t< u,0r< wW3 3ɋI&5_tf< ta~%6,t#3 I!3 w w g% !Gr+n <:ug < u` 3 uR <%uZ< u+&+9 n t +Kt]+,)!<t, ,,< t F+ ,,, tuO,>s t"3 :,uF < tF 8u  VBAPW&*, 2񞬢,uЀ>,t , ,-t,CO,M9u,,EX,E!u,,BA,T uK,0,!Ðh-! t,;!,q b,֎ t2۪ t <;t&E;N\OSVR2Ҁ|:u@,W _s(*Z^[\;!\6,q r,I!ûH!H!& ,،+ú t,,&w &w &3 uH!&3 &3 h-3 3IO,&:Eti- ߹ +* J< t# &3 &?CC<t< t I235 7 >s us J=tEt, h-@:i- ,I!,&k &q \Rb, K-t.,%>s t>s ð,q ,u%Ӡ,:,tx6,3&|6\!=tf&^R A! A!3w n Zú()o,x !A 3ɴ! !*n 6y >s us #n 6y <|uw =!rذG+3ɀ< up<|t< t8A<|u&E I6+N6y  Q3ɸs us k,3ɾ+< t<"u<"ut G<"u<>u2<>u&N < u &O hWO < tDt?:,t9<w t{ &>y +[< u+&>w À>,/t-t \h-׹ !v(Pi"PX u -tU[r&t?] 6-\)!U!PXU!uo,p--u{-t'- tv,P Xб$-$-P-3؋ וOJ,' 3,PZրt"̀0*ъª''ú) tb< t!s >-t' ]-t뛋6-l)!>m )t\!PkX%u< u=!%r؎,36,?!=S@![r ;tI;t)D!€u,>q t ,;!2Ã5 7 Sf 6.?![r f <u(3 I!3 >s us n ìtN< t<=t <,t<;t< þ>\t FF;u < t&"U3G ?h-!U!P'\@<@u,A X   t ''p- , 3~c]'j,0!P2  Ĺ.X2  Ĺs3,0r&=u > 8&G t0<$t &G) tE:t?uWW_ú)= ><| 2䣹-6---6--;QV-[+Yˋ)Iu-Y+À< t 7?<=uþ t< Î,& 3 &=uð=2r u & !%!6,I!L!=!rظD!€u >!()2D!S3۴>!C[E!E!E!>!6,o P˻D!€t4t/)5!=w# 3ʶ3ȷ3ҷþ)2!á, ,&u5< tF=: uK-u;!sWu9!sI (")< t, ,&u -u:!s&(& !ÿ,@<@u,&,:G!rù< t< t.Ī< t2w >s us a> tOh-! > t ! uh-y &> @<@t &>x t:u&E  ?t< u־ +3ɬ<%u& :$uFV< tA^A< uI6+ n t&E$+&E ,(>s us 3Ɏ,y 2&x &w u&> & <%um&& < t$=INt=inuV<(uN<)u,< tB<)t<*t < u&w &>s u&s &> u y |:ux )!X(,R< t* G3u&%G:t :GGu۬< t"u,V3ɬ< t tA<=t< t<=u< t_t| t< tuu2h-)!!,t t΁(++  2۬< tt ,0Æ,&l 2:s뢎,3 t33ɋIFF =t56,< u<t&5Î,3 t3҉5 7 ~] uA 6h-<:t!< u<:t3 u=(]6h-QbY &:u, &:uGK< w< t@< u9..>!3 3Ҹ=!r6.؋5 7 B!Ëڊ,@r,un n à<r N =,n q)(zW3r u!2!Ê u2!ں\) W) uQ) ".r u!!Ê uT!غf)˾] w u *Y[XZÀ>& t& =!%r ذG>O t6>N tO =!r 33ɋظB!O 3ɴ#.t 6.6$.#.36.+.ǀt#u,)!-,>(.3,,,6$.6.tP3,,...,.,#..-+.-h-(-H,".-+3.rGǀt.t ., .,ǀu,V..+ƿ-ǣ--A>-,^믠.,.), t<v-<u ,A:F-,FF~u>-:uN-Fu~=u'}:uFNY&,=ttT!,2u .!3+.u .,u >,t.V..+ƿ+.ǣ(.'.A>*.^ ]6,3uﺘ&m>,u[+.bB%V..+ƿ+.ǣ(.'.A>*.^S>,u 3,,,6.,&.6(.À>.u36.+.:ǀtu\)!+.:t@,@\6tT2, t -h-2.>(.i->,u*.t +.pQ>,u r,>,t #.t u,D*.u Ph-!X\! ,+.=!r؉.W!..D! .t >.t*)M.,,+u@>.ue,,?!rUQ>.u>.tы>,,u,A+ы,,;,r >.u돀>.t>,t.>!À>,u,t6,;,u t3,,..2,r=tcvuԀ>.tW...>.t1,! Q*! ֊YW!>!,,Ë.-A!,,PX:,.>,t<u>.u>,J&t[.=>.u<3ɺ-!4&r>.,ظD!!.€t2,$ u . .tz tD2 !.! u..>.uu>.un&,.Ë.3ɇ,.>.uU3,@!%r+t!.t!. u >.u?It<)  ,>,t.>!-A!,3҇ѸB!>,t@!$ zP$.X$... À>-u ,-2". u6-(-)!-:t@.,@(--&*.% t:u>.t#.24" .,.>.u$. u t,3,uO>,i->,t-)->-!€uAFt;V:t@@Ճ~uv|:uFFN^uFô;!r&N3IO,F:EtFN<F~tFv<t <.t|:tFN2ۆ;!r+~F ?.Īı2QP+.-,|:u,AȀ}:uGG,A:u tDMP"Xu<.u .u XYæu|tRQSP,ӻ˴@!X[YZPS$P P$P3SQWII@!r ;u_Y[X,%&>w t &w )3...W3ɬu< t< t. t:uπ< u:,u<:u>..>..uP,A:X>..<.u ...t?*&.rR uu<>....i%t(< t$:,t:t<:uD z)52N_N.sF< t#WQ8u Y__êA.VWQPS&>t[XY_^ø3&=Ut =r&]2& G2 u׋Ft-뚻H!H!SP"%.,!ڎZU!ں!& ,[ӉJBځr3۱ڎҋ3P.6-.6- Batch file missing $ Insert disk with batch file and press any key when ready $Bad command or file name $Duplicate file name or File not found $Insufficient disk space $Out of environment space $File creation error $File cannot be copied onto itself $Content of destination lost before copy $ File(s) copied $ File(s) $ bytes free $Invalid drive specification $Strike a key when ready . . . $Invalid parameter $SunMonTueWedThuFriSat Invalid date$Current date is $ Enter new date: $ Invalid time$Current time is $ Enter new time: $Are you sure (Y/N)? $ $IBM Personal Computer DOS Version $ Volume in drive $ is $ has no label$Invalid directory $Unable to create directory $Invalid path, not directory, or directory not empty $Must specify ON or OFF $ Directory of $No Path $PATH=PROMPT=Invalid drive in search path $Invalid device $Label not found $Syntax error $ FOR cannot be nested $Intermediate file error during pipe $Cannot do binary reads from a device $off $on $BREAK is $VERIFY is $ECHO is $Invalid path or file name $Invalid number of parameters $Error writing to device $ D^TPNVsGLB"_ $EH QNOT ERRORLEVEL;EXISTDIR RENAME REN ERASEP DELP TYPE REMCOPYPAUSE2DATEKTIMEVERjVOL CDCHDIRMDMKDIRRD!RMDIR!BREAKVERIFYSET"PROMPT PATHEXITCTTY ECHOlGOTOSHIFTiIFcFOR{CLSf3!3Ҹ3!Q!6 0.!д![ã\TD\<v<t.N.P.R.g=!r.SظD!€t.e.Ru`.6N u.,.a tE32t uW߃H!Ys.aQ.;Ywl33Sh?!rN=u>tugh=MZt=ZMtl+pWRt+>N&&EU P.Sh>!XPH!Xr;wҀ>gurr;w+rtr;v؉cH!re>gt c+W-U;w*W;v/>gt%+cW;w+WʌʁY;sFpRX ȋSB!Wr)WSˋS3Q{?!}Y;[u >WuUv_x]|Y[3ɋSB!snRh  .S?!Zr޹h.6Uu&Ǝ؋ƉJg.Rt .6N.AH! t.cH!.e..;w+;wفsñP.S3ɋѸB!.SY.3Qf?!h^;u.Ru".-.[.YN.6]._.S%>!'.RtY.e.a tH؉.eH؉RU!.Z.6a&,.6c&6.6NVt Q\3Y^Vt l<󤫫^t.:>v2.:v2tttt& & 3؏R.!Z.Rt&.6].>N&]NN&u.Y&]&Edx.6Y._.&]VŽڋS [S.[P.a tH؉.e tH؉Xt2 t D6 PR.3!ZXPT<~}67Al7F% j>ntF0PUF0= uHF0= u F 0= tF0Pa&^00 PN PE/ P: P1|sr s.6\>_u P[XI ]UF= v 1PF 10R6\6C\]Ut"K>FK> ^+؋ù3]UW0=u>tP]UW(NPCu!yN7x Pj7,/]XX 3]UW0=uP6]U>tI]Á~ =t =tk =t W = tH u !rҴM!. L.) t .) t0.) tr w.)  uP !Xw t! usw I!w . 3 9 t &) 8 uP3.* t.. Xú > t> u  > ul .n . p . L!  I!j P! > u3 .f .f .h X@Q!.j P!. . .> t=H!  ;s @yHôH!r. . . +. Ȏм-3 =t.!> us; tv b; tQ7! /u\ v = + . PSظD!s %[X3ۋ :t>!C:t>!.>!CSPQ!4.t .X[ SPQ!t 4X[ú juu 6 D$Dø ! !Ey =!s=u غ@3ɸB!rjG ?!P>!Xr;tt :3ҭЃú"%  !<!!ú* r !r$_: u: uWQP݋D.& XY_RZAĀt uhtp> UVRQSY![YZ^]>a c 2s e tue >r v=/ >r 狽0>e t.xt  !>v t>r uQ6a WZ _YG ! t{ ! : ti: ta: u) t> t2 bl L!*  t > t >r t>r u > t ċ7Ϻ 꺈P !XTbku /Write protect$Bad unit$Not ready$Bad command $Data$Bad call format$Seek$Non-DOS disk$Sector not found$No paper$Write fault$Read fault$General Failure$Sharing Violation$Lock Violation$Invalid Disk Change$FCB unavailable$Sharing buffer exceeded$Please Insert disk $reading$writing$ error $ drive A $ device $Abort, Retry, Ignore? $ File allocation table bad,$ Invalid COMMAND.COM $Insert disk with $ in drive and strike any key when ready $ Terminate batch job (Y/N)? $EXEC failure $Error in EXE file $Program too big to fit in memory $ No free file handles$Bad Command or file name $Access denied $ Memory allocation error $ Cannot load COMMAND, system halted$ Cannot start COMMAND, exiting $ Top level process aborted, cannot continue. $,_:/_______.____:/_______.___, < \ld-/-IYNraiPATH=COMSPEC=/COMMAND.COM-0!= r= v !&9t l n p       <>: yH+£ , t%  £ 7! :3u4>%u&! \ t&: @>%u& 2 HI:5t< t: t1I uP:7u:8u6  ,!42D![[Q3۴>!CڴE!E!E!>!Ya% £ 5D^Y>&I:5t < tVQ&EuFI&=!r ش>!Y^"=Au>&ڀ> t.Pێ! ث<ثثW.%!l     y 6&>%t(Wj_s 6& &> &  u&> & && @&&  J!>%u:H! 6 3 @ jHNO. >tH!rhw  33 > u !9   =!rش>!>7=Au8w I!w  4 > u_) P > tS˸@[#!XR38 t:t:4Zr.A( 3QVW<G&:Eu_^Yt Q"Y&=uW W Y+à02:1r:2w, ÃVD ^ The IBM Personal Computer DOS Version 3.10 (C)Copyright International Business Machines Corp 1981, 1985 (C)Copyright Microsoft Corp 1981, 1985 Licensed Material - Program Property of IBMSpecified COMMAND search directory bad aSpecified COMMAND search directory bad access denied Access denied Incorrect DOS version $/DEV/CON/COMMAND.COM:\AUTOEXEC.BATE1COMSPEC==az/\ pdcA!.= =t.!.=3> u[м&H6=6;6< t 6; > t <;!>+ t >* u_ ȎP&H8!X+=S[ t=v%== tr * u!6=* t trf t6N=   w tN> t6 <3ɬA< uI<* ]!]!; !;2;<<ts +4.@u>Ct߃>@tؾ<>)!@:u*:@=u?J= G*>V<t < t:=uN3ɬ< Oш^>@>=6@ u\)!=>@>=6@ ul)!=>@>=>@#>C>=>= u9=> tRVWQPS&>t[XY_^ø3&=Ut =r&]2& G2 u׋Ft?뚻H!H!SP"%.=1!ڎZU!ں!& ,[ӉJBځr3۱ڎҋ3P.6?.6?OrÁ4t.=t 3?,y,ʸ ! !<؎w 66+<:YZt'w t.w B!.FH3w uAs,<%t2< u<&< tӺ<s< t<%t< t,0r6< w2w &wtw I< tAs2{W>0i< u&E>_MOf<%u=&E>QY_r(O3w u < u=I!ûH!H!& =،+S[ t=v%==N & $P u X&  BP.=&w tI!3&w &. XP uXSQw tVw &&Ȏ؋FHuHH:@?! hH3ۉFHHHC;hHrFH<u=nM > u Y[Xi8=#G*< t9 G7u&%G:t :GGu۬< tu=#GV3ɬ< ttA<=t< t<=u < t_tN< t< tu;\u2.u>!#G@7N!r2=t tS΁(<< = { 2۬< t#t ,0Æ=& 2:s듎=w uÎؿu =t5< u<tۉ5w t tÎ=w t3w H] uA .>r<:t#< u r <:tw uPX8r].>QY &:u, &:uGj.>>}< w< tW< uP.@r>!w =!r.@ظB!.FHËں4,@z.=> u ؎!>EtGG;Iڸ8OGu7.:8Du A:8Du+ʃ>EtGuO!Q3ɸN!YO!rE u7K>Eu <tu233ۿ<D6Kw FF<%u84uFVK OA^I< u.<.= t&E|?<3Q&&E PPT7O=&> u3 r<%u ur%;:uά t::uÃG oDr::ut:&:unOFr;:uWw:8tr;:tG|r  %;:uͬ uirPSQRWVUf& ]^_ZY[Xr<&6 IO&G&>I&D&E&&K& &> u& ú8 B;C} ڸ@!7=8> u  P.=& tI!& & Xø@33;Cs? wuGt&6s utG Gou܋A뻉6=R2tڋ?}:u ,`\?] 󪡸=>=>t===>!\: [tN!r>@t={;!ssw;tI2Ɇ ;! s=D uD tL;!Ls!::lu +΃tg7Guh4| <..u |u=\)!<t=S>>?7a#[t>=t| g70 U[U!PXu=> >t>t6#>x?>z?3"> t\=P X%Ћñ$2Pdrd> 7HˀT3=|?3"=u ==>u>t>y3o"U!'=u=:=t56=6?@"6\!=u㣇??5!"= 3R=|?3"Zú5!38ú^9 t-6< t&RVh41t< u< ^ZVs>?t^g7 h4Y 8]t;u:8Dt^9< t=9ts >?t뿋6>< ^9tI:68Dt?l)! 8mt/W53t&\!%Gu.=?!3PX=u}u +I.%GS@![r ;tI;uûD!€uM&\\< t&\<:u< t5.U3G ?󪺚>!U!nh0!P2䣋?X2䣍?7 sr&=u r>Z:&G t2::tG&G9 t:t?uWW_ú9= :::WR?!7Z_ô!:2Ҿ>=A:=>|?G!3s5R>|?3AÊ\@<@u=P>G!s>X:=ypt*Ob<;t< t<;tEt3&=u 7t>+ч󤺓3D!€tLtG)5!¸ 5!;w5<v <tô 3ʶ3Ȼ3ҷþ92!%NN<:u=!rظD!€u >!D8 )2D!S3۴>!C[E!E!E!>!= Pˎ=&l &&n & &p & =I!L& !}Vk^uSaVOXt3V< t<=uÀ< u^ti8:S[t6V߾ 8u@^V< tI^>@tz=y ߴ!|:u ,A&> & @& Nt< t2@O&> Î= 3<t> u378V%r+^þ78r{-=& 3QVWpG&:Eu_^YtQVY&=uWAW?Y+À< t8I<=uþ tw< Î=& 3&=t=2::r::w, .8HQS:ك;r(PQSS[CJ!=HYXs4&[YPH&X=> t<;!2á= =6u3< tF<:uV^< u@?u;!sg73r 9!s7fþs< t֬qt < uDDVV^< t^93ru:!s7 ÿ<@<@u=&=:G!rR9ZìtN< t<=t<,t<;t< t< ù< t< t:Ī< t2æu|tP QWE|?3>E r_YX=4&>* t8P/8&=tNDt$;t,tNP:8DXt D<:tu;!sÊu2ۆ\;!r\F6?\)!Ó3:=uF< tFb:u  Ѻ5 t93ɾ> G:>u>=GGGu=t = =3ɬ< tA=u u6xW2=<_==>?R>Zs?<>?t t =|,C=I!=& & \R< K?tѼ-.=+43Ɏ=<<"u< u<"ut G<"u::u88u& 4< u  & W < thtc:=t]::u< u  N= dWN=Ȋ|t:&:u?&>* u&& &* < t <|t::u:+߃t&8EuO2_%G t/&>* tN &>L * þ2>6>??6>>=QVk>[+Yˋ+Iu?>þ t< ìu<;uNRPSQ.=>* u  u LY[XZ.>N=tN==!r ذGq=At=t4h4=t{4> t=> t =P![r 33ɋظB!=t 3ɴ t> ð= R.=, A!< A!Z2+ úi8(PR87ZX=Au =+ !.:< , 2&/ &? 3ɴZ!rش>!< Z!rش>!6L > u 0& 6L <|t .::t =!scذG<3ɀ< uA.:8t<|t< t?A<|t.::u&E I. u .=Ȏغ&H8! << llˋًËʲdĒ&H tHt"9+"%' Wà1HÊLÊ t  B=þ< tIL6}O`6t8\!o6Hx~6t6X < !3<< t&H t*Ht@Zr*r%Br r@ro< uj+! ub%r\brW#rRXrMrCIr>krҊc]rl)Nt< tSd[>rۊĴú96& uE2<󤾛EF 6F3@ s t ?s^_ZY[XSQRWVf>C@}OCC@GOw6F76@+w6Fw >FD}+>F ^_ZY[PSQWt>FtF@ o .CCF_Y[XPó [ÓSQRVWU@t<F!$F>F>F@=t.@+A.+ʃ;O?^_ZY[XSQRWVUSH!rDD3@C3@I|$@+&@+&W@+&W ]^_ZY[ù ] 3?<7 W>*!%23 _Ë6ٹ 3~?@?===@?=???@@??<@=Y@@@[@@==@@@=@=??\@?@>>W>@H?=??:@?3\@@ǀt@t .= .=r3םr.ǀu=V@\@+ƿ?ǣ??A>?=^릀>@u>=u >@u5@=ࢵ@^9= t<v?<u"=::F?=FF}~u:8?uN?Fa~=ug7:8EuFND6=utT!=2 .!3:\@u .=u >=t@V@\@+ƿ@ǣ??A>@^z`n56=6~?؀>=u_@v?3h4vV@\@+ƿ@ǣ??A>@^>=u 3===6@@u|36@:\@rǀtu\)!<u@:t@ ,`\tD2= t >>2@>?>k>=u@t@|?3!>=u r=>=t w?t u_=렀>?t 6@6??36@:\@ǀt2u>)!>>>?->=t@W3===6?6@tE@u P>!X\! =@=!s9=Au4Ë؉Y@W!@@D! [@t >@t8xY@==+uh>@ue==?!rUQ>[@u>@tы>==u=A+ы==;=r >@u돀>[@t>=tY@>!À>=u="t4=;=u t3==@@=r=t uփ>@t}?@@>@t1,! Q*! ֊Y~*W!B3ҋ! МD!R>!Zu €u==Ë?=캟?A!à=PX:=@>=tD(u>[@u>=5t^@=>@u<3ɺ?!4?=ظD!?€t2=$ u @ @tz tD2 ?! u@@>@uu>[@u05=@Ë?3ɇ=@>@uZ3=@!4r+t?t? u >@uItz9=B>=t?~>!?A!=23҇ѸB!>=t@!$ zP$@X$@@@ À>?u )!<tE|?:t@@ ,`W>?&@% t:u>@t?24" @=ࢵ@>@u$@ u t=3=uO>=>>=t>X>>?!€uEFt?V:t@ `Ճ~uv:8\uFFNbuF ;!r#3IO=F:EtFNEF~tFv<t(:8t :8\tFN2ۆ:\t;!sh~F :Īı2QP@?=:8Du*:Ȱ:8Eu GG*::u#ntDMP"Xu::u ::u XY3>@@@W3ɬu<   t< t@ t#>?u~:uπ< u:=u:8u@<>@@>@@>?uuP=:: X>@@::u @@@u%>@t?*&@r u!>@tuO>@@@@>?ut2< t.:=t(:t$<:u>?u_FV=9CN_N?F< u @+DWQ:@u  Y__êA@ P.;.;RUQSPWV;n>v3<%t t^_X[Y]Z.;<%t.::tH.::t.::tB.::t;<0r?<9w;<0u.>;u0.&;P.; Z20.;.;.;$.::t.::t.::t.::t&>W.;l.; c7V .; t .>;u'V t^.>;t .; t^3V tB^+vg3.>;tSV.6;.; ^[@IP3XP XtS[ .>;u r.3QY ~ .;QYê;tù;+tS.;;@!r;t.=4&* t8[V>2^3.;.;.; .;0123456789ABCDEF%S33>%S 3v?%9ld3x?z?%S3|? 3 Batch file missing 3 Insert disk with batch file and press any key when ready 3Bad command or file name 4Duplicate file name or File not found -4File not found W4Path not found j4Access denied }4Insufficient disk space 4Out of environment space 4File creation error 4File cannot be copied onto itself 4Content of destination lost before copy 5Invalid filename or file not found 25%9d File(s) copied Y5~?%9d File(s) r5?%9ld bytes free 5??Invalid drive specification 5Current drive is no longer valid5Strike a key when ready . . . 5Invalid parameter 5SunMonTueWedThuFriSat Invalid date*6Current date is ;6 Enter new date N6(mm-dd-yy): b6(dd-mm-yy): q6(yy-mm-dd): 6 Invalid time 6Current time is 6 Enter new time: 6Are you sure (Y/N)?6 6IBM Personal Computer DOS Version %1d.%02d 6??%C7? Volume in drive %c %s%7??is has no labelInvalid directory S7Unable to create directory i7Invalid path, not directory, or directory not empty 7Must specify ON or OFF 7 Directory of %S 7?No Path7PATH=PROMPT=COMSPEC=Invalid drive in search path 8Invalid device 38Label not found F8Syntax error Z8 FOR cannot be nested k8Insufficient memory 8Intermediate file error during pipe 8Cannot do binary reads from a device 8BREAK is 8VERIFY is 8ECHO is 9off 9on 9Invalid path or file name !9Invalid number of parameters ?9Error writing to device `9 |9 9BD.&EGHLNPQTV7_$NOT ERRORLEVELEXISTDIR RENAMERENERASEhDELhTYPE8REMCOPYa&PAUSE[DATETIMEVER.VOLCDCHDIRMDMKDIRRDbRMDIRbBREAKd%VERIFY%SETPROMPTPATHHEXITCTTY"ECHO!%GOTOSHIFTIFqFOR CLSA|<>$())INDO*-+LlazDCSX.?.,:.pyn.COM.EXE.BATVBAPW   The2 3PE EXE`\4AUTOEXECBATNe 8COPYRIGHT 1986, SOFTWARE 2000, INC. (VERSION 01/07/86) ؎м/@r~8t48t.v8t5l8t;b8t*X8t.90r0 0r\tK.!u5t.Ȉdz!t.!Kt<t0AKt! t @- 1 !?r< t3r< t)r<=u r,Ar<r<=u r,Ar<àtȢC.J.L.YZt 0.t.L.J..N.X.:^w.\^ȈÉӊJt .T.R.;Vtu.\Éӊ.X.V:u ,`@.V.XÈ.Xt.X.\.J.R.TÈ.XȈÈ@߾_ u&\0#&$, !ߎ_!T%L&D'$^u ^&\&\Ȉ´>1ێۈێG1ێÈ&&_ Invalid drive specified $ END START 8COPYRIGHT 1985, SOFTWARE 2000, INC. (VERSION 01/07/85) ABCEHIJLMNOPQSTUVWXY[\^_`acdefghijklmnoqsuvwx{|~v ]UvPv ]Uvv y v<tv vv xPv vv ]UR~ZuvVtR]vXFP FPX vVgPFP FPvV R]Uv >.SP v~tv<uxPv @ v v 5 ]UFHFF@F<uvN;FFr0=:t0=/t 0=\u׋F@]Uv0=/Ft!=\t0=.t<t D0=:t33@]Ë܎&,w&Gu؎3Ê$Ft:tw&Gu؋wO&GFu؎Ë܋WOGB_!؋sMZ'4 ZfAjAAUD4FFF;F}FA6vF6V~uv4FPD~}PFPDFPCu-vP5@PP>tPFPsNFPoCu":PFP>tPFPBNFPu t n# PFP6*#P3FP36P2P<)]UF fFF t>u TP2 v; F.P4HFF-uFP_P=u F+u*FPhPj=uoP)2 FFFPXFFFP1 P1 P{1vV P1FP*P1qNP1~} P$1FEPq1FPPv$PP1v| tF;| P0FP1v  t(FfFPv5P0 PP6F4tt.P06F4tJ, P 08PP;u PM0 vV!v t&FfP/P5F u  P/ FP%P/P{F u 0P/ FP!UvEI tFf06F4D!F*6V4D!F*tF6F4DT6F4DTAPvV%6F4D!F 6V4D!F*uF6^4+DT6^4+DTLP^vVFPvK1F  Pt!WP.F/tH t><v. t^ZF]P-=zxwvutsrqpomljihfedcba/? -+p  \jD,lZT{aaJJ))&&-u +u u uK]Uv, PP66*nP, PP66*sP,]UfububP,)PP7tfPU,]U PPFP:*P/,6F4P,6F4DP, P+6F4t& Ps+ PP6F4tt)KPI+6F4D!P1+:P'+]U6F4PxP;6F4DPxPBFxP&xPA~-tP+@PFPc'FP%FP@vu]ÍP*&Pp7FFPDP*FD P*F1P*]øP&*:ANY z g ~Yu~NuOvVFPPc$ t]Í6F4DPFPEFP$FP?FPxPDu*P)]vvFPxPF Pc)F]UvVFPGP# t]Í64PvZ;uTPv)]øFF;|)6F4D!*t 6F4P:Pt96F4DP:PD:P#:P>FPzP396F4DPzPCzP#zP>vvzP:P t]ø#6V4D!6^4+DT6^4+DTF P']UqPvn FFu&sP'v'P']øF~}vvvVFދF uPvFFuP' PPv'Pj'#P3FFYu FNu:FAu$v,!v#!P']øP&롊FNu$P&v v ]ÍP&v v5PvFFu/P&v&P&vy ]ø|P2FFuPX&]Í,PF& PPvc&5P+& PPvH&:P&F|Pvv4F~!" t9"vvv4>P%v3]vvv-FvvvuF|PvvFrvZF~}vFvvFv&~}F uLP %WPv^FFu&YP$v$zP$]øF|PvvF~~'vvv,F|PvvFvx~|#F;Ft~Pd$vF2]v62~}P9$vK3]ÍP$]UF P#P# P0FFTu FUuEFAuP#]ÊF } FFP:#P#닊FTu P}# Pp#!Pe#P/FFYu FNuEFAuEP+#]ÊF } FFP"iP"닊FYu P" P" Pj"FF;|6F4D!*u FTu&6F4D!*uFUt{6F4PFP26F4DPFP8=FPFYtP" PPFP:"P"P.FFYu FNu FAu*F } FFPP!P!~? t AF-YFP! PPFP!Pf!FAu PQ![FYu"FYu P0! P#!FYuFP*0P! P F++v tMI]UDPX-FFYu FNu P4 ϊFNuP ]Í6F4PFP06F4DPFP>;FPP1 FPB/0P 6F4-FFF;"6F4>F5Fո]Uv40u]Ë6@FFPP*uF@t6\-]Í6V6P RPF~t'>| 6P!PF6,]UF~ },6v*u~ }?6vFF͸ F~ },6v*u~ }?6vFF͋]UAPP|-6vo-]U "P*FF6vF6A@vF:vFvvDFF~ }6AvvFF߸.vF~ }6AvvFF߸vFV F~~7FVRPRP2XZRP6Av3[Yʉ^NN‹FVvDTRPFVRP'XZvDT6[6Z‹vD6Y6X‹vD vD!]UFF;}6F4*Fߋ]U\PaPygPnqPcvPXFPbLR,+-   FVFVFF;}Y6F4DTFVFVRP6F4DTRP+&XZFVFVF랍yP PP6|P PPvvPo PPvvxPQRPRP%XZFV PP664P  PPvvP]UPP+PfPPPP7PrPPzzu Pg PZ5PO]U\P=P2P'P P PM P]Uv P P P P P]Uvv;| P7v]UBFF;|)6F4D!#t 6F4PFP)6F4DPFP"4FP*6V4D!6F4DT6F4DT@ P PPFPN P PP6F4ttT Pu PP66|X PUF P]UBa P-@PFPqvu]ÍFP(u-vP$PP#t| PFP2FP'u":PFP"t~ PFP2FP (FFu]vf%FPv'v t P]U P/@P:Pr:u]Í P:P1ul]ø:P:P"t:PzP'+6F4PzP&:PzP1zP^zPs,6F4PFP&6F4DPFPM1FPzPFP!t= P,FP" PzP  P]Í PFP PzP P6F4DPzPm  t P]ø]U Pw@PzPzP&zP;+zu]ÍzPzP  t" PzP P( P@PP:PP*u]ÍPPt  t"K PP P$zz;|6z4DP:P$P:PzPP:P.||t4P:PPf P:Po PPv PPa ~~Au P]Ê~Yt P6z4PFP#:PFP[.FP"PP#PPFP t  P ( PP6z4DPA#  Pzg]UJvVFP P  uvPHvvVvAPRPFVRPXZFV PhFP^ PS PPvv\ P5 PPvv> P]U@ P@PFPFFP'vu]ÍFP;P u P]ÍB PFPY Pv:u64PvZ;u v:t]ø]Ë]UP&FFP^v4DPv4DP+FWv4~=EU;Tu;DsF*v4~=EU;T|u;DvFFv4~=E;DsFTv4~=E;DvF:v4~=E;DsF v4~=E;DvFFv4DPv4DP*Fv4D Pv4D P*F~tFFFFB\ PP} PFedsn6$#r#!##PFZ;uF]ûF]Ë]U"PP6P"]UB Pa@PFP vu]ÍFPv-uvtFvvFvP P't'F tv  v]Í P P P P P P]Uj Pp@PFP FP! FP7$vu]ÍFPFP t P]ÍFPFPSFFFFFF;}3V‰FvvFv]Fċv]U5 P F+u ; P > Pv FFF;|6F4D!*u F-uv P F6F4D!*t F+uv P F~uFM P U P F\] P ]UF-t ` P  u P @PrPrP@rPU"ru]ÍrPrP t P8 ]øFFVFVFF;|56F4D!*uFP6F4DPrPUFP6F4DP^&FF u ~uF-t~uv,߃6F4DT6F4DT*6V4D! PރF6F4DTFVFV6F4DTFVFVF~u  P b P  PPv P  PPvv Pw  PPvv PY  P ]UF P: F  +u  P%  P @PFP^FPFPvu]ÍPFP6FFu P FP P P9FFYu FNu P ϊFNu5Pc vT]ÍCPH v9FPPHPFPFFu'JP FP fP]øFF;|6F4D!*u F-u 6F4D!*tYF+uO6F4DPFPFPDFPoPFPvPjPvF]v<]Uvu]F~}6FvvFݸ.v F~ }6vvvFv 6]U*Pv t?Pv t]vFFu]vPYF~t8wPva tWPvN tvPF~tv]øvDF]UF3ҋvD!T#]UvP6V!FF'6V6V!P]UvPs6V!FF(6V6V!PLu]Ë]Ë]UvPv]Uv Pv%vvu]ø:PvumPv vVuvvvvbuvPP~t]ø]UFFFFvtv tvvFF׸v]UoFFFFFF FFF;F}FFFFF0PPv-PvFP vFPvP-P0PPv9]UF?FF F0PPv:P0PPv]UPP]UP P]Uvv]UvFRP]UFVFVFFFV%usFV؃FV-vFFF~ |6FTRPvvt XZFVFVutF t?FV0vF6FTRPvv, XZFVFFsF t 0vFvF]UF PvvFRP ]UFPvvFPFFFFFFF;F }F vFFvFFPv]UFPvFRP]UF PvFPvvc FP]U FVFVFFFF~}u6FTRPvv XZF~tF t=6vvF6FTRPvv XZFVFFF t 0vFvF]UFPvv-FPFFFFFF;F }F vFFvFFPv]UF PvFPvv FPl]U t'F u PPTFPPD t'F u PP%FPP]UFFvtvPzF]UvvFF;F}FPBF]UFvv P PP~ PPqFvv tvvvVF׸vV]UPPPP]UP0P Fu]ËF]Ë]U(tW6FڋFFvVvV!PF܉FFމFFځFFڃuvT]PPi FvPU FڍvVvV!PRFFF܉FFމFFځFFFFFFF;F~IvFFPFF tFFFFFF~uFFvظP FnRPFRPXZvT]Uvh Pv^ Z;tv]ËFFFFFFvt.v?u vv vvFFFǸv]UFPFPPP +-7h7[7 PA6F4PFP 6F4DPFPiFP0PFPFFu'PBFP8P-]ÍPPFF+uPvVv"uFFFP+ FFvX  n8e8e8c8c8~u)FF-u%P-Pt tJF~t=~t6~ u~u} t^WF~ u~u'v5P ]U\8PFPAPNP +-u9Y9L9 PP6F4PFP 6F4DPFPxFP?\PFPFFu'^PQFPGsP<]ÍP*PFVF+uPvVv+uRPvvFXZF~uHFVut7PF~}vvP.F PRPvvXZudu_FVut#F-uPA]P3 PPP P~u0PPvv\!PFF0PPFRP4 PWFF~ }~u .vv FvvFV tJF~t=~t6~ u~u tkdF~ u~  u+vFF~} vv$PFލ(PF~}vvPlF+P]U^NVƀCt]U8FFȋvFȊFFN t+vȊ uvȊ uvȈF˸vȈ.FΉF̉FʋFFȸFvFȊFFN uvȊ tyvȊu FȃFFȍvЋVF~|3P PPVvȊ tFNFbvЋVFCFȋv̊>u F̍EFȋF tFGvЉFPvP]Uv]UIP PFFvtvPPFߍTP PP]P2 PPPSQRVUWFVv~u y ؃ y ރS 3SN;w r;w+@N^Yt tu t؃FV_]^ZY[XUPRF fF FfF FfFV ZX]Uv t'FvF;u NF]̸]U tCvVFFVFFFFFvVvV t]øFvF t]vF tv]øPFPvcvPFvvF t]Ë]UvF tPvvP PP8F]UFa|FzPZFˆFF]UF t(x t"PV) ! t 9nvnX tL!6,±$'@'Nuú !P.،&;=v+=߁;sǾ;s+;;r;9v9ߋ+=v+Y׋3UQW0! u2[t [X+J! +ۋPÿA +3PUFFv;tP PPFFv4v tF;FwFFFF܋F;Fu믋v4~5Fv;Ft4FVvT;u!vDvDvDv4~5 FFFFF t2FVvT;uvDvDvDv4~5VvT;uFv]UfV!]U t7FFAFvV vVvV  t]vF t]vPFvXF t]Ë]UFFv t1vArvZw vЈF‹F]UߎNj~33I-+]UPSQWȎ~F& A&F_Y[X]UߎNj~33Iыv~tF]UVv:u3vPF~A}~P~VЉVPHAFPFPlFvFFFFv tv\tFv t\FFFvFPTvF\uF tNNɋFVC;sFFmFV;sNv t FV;uvPFP4&P$ F tvFPvD%P[F@v P PvDP vVPvDP; tvVPvD P  tF]v]Uv4vv tGvFPF~.u%~!}]ËF tNFvF묋Fv]UFN t*vFvvFFvF̋]UX~s]øFvFv؉FN uvFFFFv؋FFFF;FrF;Fs.FPFf^VFPFf^Vv փ}FʋF;Fw.FPFf^VFPFf^Vv փ}NʋF;Fs+vFPFNf^VFPFFf^VSFPFf^VFPFf^Vv փ~%vFPFf^VFPFf^VjF;FvNF;Fv Verify the copy (Y/N/A) ->Yes No ABORT copy to drive -> Can't copy a file to itself to drive -> Can't copy a file to itself rError opening input file '' rOutput file exits. Delete (Y/N) --> ABORT <== Aborting copying No - copy omitted Yes wError opening output file '' Error allocating space Copying -> : Copy aborted Verifyingr Error opening file for verify ''  Verify error I/O Error occurred Done Erase Tagged or Untagged files --> ABORT <== Aborting erase function  <== Illegal response! Tagged Untagged Query for delete --> ABORT <== Aborting erase function  <== Illegal response! Yes No Delete file (Y/N/A) -->  <== Illegal response! File -- ABORT <== Aborting erase function Yes No DeletedNo -- deletion aborted YES - Deleting file-done Too many files. Terminating search. CWEEP version 1.30 files, using bytes (K) -- bytes free (K) sp/cr Advance to next file [L] Log new drive/filename [A] Re-tag '#' marked files [M] Mass copy tagged files [B] Back up one file [P] Protected mass copy [C] Copy file to drive [R] Rename a file [D] Delete a file [S] Sort directory [E] Erase (un)tagged files [T] Tag a file [F] Free space on a drive  [U] Untag a file [H] Hexidecimal display [V] View file on screen [I] Print size/time for file [W] Wildcard file tag [J] Jump to a named entry [X] Exit program [?] Print this message [?] Print this message [Z] Change subdirectory [-?], [+?] List other help messages Commands when prefixed by a '-' [C] Copy file to a new name [H] Hex dump to screen with page pauses [O] Output a list of tagged files to a disk file [Q] List tagged files  [V] View file to screen with page pauses [W] Tag files not matching wildcard Commands when prefixed by a '+' [H] Hex dump to screen and printer [O] Output a list of untagged files to a disk file [Q] List untagged files [V] View file to screen and printer Tagging file - ( total) Log in drive and files -> :*.*Rename to or * -> *Error renaming '' to '' File '' renamed to '' Error in processing new name Rename files matching wildcard -> Illegal file name given: Rename files to -> Illegal file name given: Rename '' to '' (Y/N/A) -> ABORT <== Aborting renaming Yes Error in renaming Done No Free space on drive -> Free space on drive '' is bytes (K) Change directory -> Illegal CHDIR command; no change made Subdirectory changed: Error in sort order in compare '' Sort order -> ndse Choices are: [N]ame [E]xtension [S]ize or [D]ate. Prefix with '-' for inverted order Jump to -> Illeg  al file name string List untagged files [More] Wildcard matching ->Wildcard not matching -> Illegal file name string Tagging No files tagged files tagged, using bytes (K) Output untagged to -> rOutput file '' exists. Delete (Y/N) --> No - omitted Yes wError opening output file '' :JanFebMarAprMayJunJulAugSepOctNovDecView with paging with printerrError opening file '' for output Use or to abort, any other key to pause/continue [More] Hex dump with paging with printerrError opening file '' for output Use or to abort, any other key to pause/continue =[More] Addr 0- 1- 2- 3- 4- 5- 6- 7- 8- 9- A- B- C- D- E- F- <<>> : = con: TOO MANY ARGS$wac ABORT:-$ -- use regular abort for other info!! $ALLOC$ $ NO CORE$FREE$ :qsort failure :\ʚ;@B'd 0123456789ABCDEFCONCONAUXAUXPRN..mb 11 .he TurboDOS/PC Diskless Download ROM Configuration .fo Copyright 1985 (C) Intercontinental Micro Systems, Inc. The following information is a guide for configuration of your system to use the Intercontinental Micro Systems diskless download ROM. The diskless download ROM allows you to configure a PC or PC- compatible system so that DOS is loaded from the TurboDOS file server instead of a local drive attached to the PC. This procedure is dependent on the versions of DOS that exist, so the standard IBM PC-DOS is used here for the purpose of discussion. OVERVIEW: -------- The diskless download ROM is used in the ICM LAN-PC controller for the purpose of downloading DOS from a ICM TurboLAN file server. This allows the PC to be free of local storage drives and become a lower cost "PC workstation" in the TurboLAN network. The ROM is located on the LAN-PC controller in the provided ROM socket. This ROM socket should be configured for a 2k (2716) type EPROM, refer to the LAN-PC hardware documentation for the proper configurations on the board. The diskless download ROM requires that the LAN-PC be configured for the IBM PC default memory and I/O addresses. LAN memory segment: E000 hex LAN I/O address: 200 hex The diskless download ROM links itself into the bootstrap interrupt vector (INT-19) during initialization. This will require compatibles to execute an INT-19 instruction to begin the bootstrap procedure as in the IBM PC. DOS is loaded through the use of a psuedo file "PCIMAGE.DSK" located on your file server and a simulation of the PC's disk I/O interrupt vector (INT-13). Once the image file is opened, the first sector is loaded at the normal boot sector location and control transfer to it. The bootstrap continues from this point as if it were loading from a local floppy disk. A Utility program "BOOTFILE.COM" is provided to create the psuedo file. A special version of the TurboDOS/PC driver must be configured that defines all drives to be remote. It is recomended that all 16 drives be mapped remote on your file server allowing changes in the file server to be immediatly recognized by your diskless workstation. Once executed from your psuedo file, TurboDOS/PC gives your workstation access to remote drives, printers, and queues, thus completing the download procedure. .cp 6 PSUEDO FILE CREATION: -------------------- Creation of the psuedo file requires a PC (with at least one local floppy disk drive) be supported on your TurboLAN network. 1. Prepare a floppy disk for bootstrap operations (preferably a fresh disk with the use of the formatter supplied with your system. Copy your configuration file "CONFIG.SYS" along with any additional drivers needed for your PC. Copy the cold start components of your TurboDOS/PC system, usually "TURBOPC.COM" and "TURBOPC.DRV". An "AUTOEXEC.BAT" file can be used also but this imposses curtain limitations on the downloading dev  ice in your network (see below). 2. Use the utility program "BOOTFILE.COM" to transfer the image of the boot disk into the psuedo file on your file server "PCIMAGE.DSK". For example: BOOTFILE A: E:PCIMAGE.DSK This could transfer the image of the local PC-DOS boot disk in drive A to the psuedo image file on remote drive E. The psuedo image file must be located in user area 0 on the file server. This most often is the root directory of remote drives. .cp 6 DESTINATION CIRCUIT/NODE CONFIGURATION: -------------------------------------- The circuit and node ID for the file server is configured with the use of the 8-position switch located on the LAN controller. Positions 1-2 of this switch denote the circuit number (one of 4) and positions 3-8 denote the node number (one of 63, node 0 is invalid). .cp 6 DOWNLOAD ROM PROCEDURE: ---------------------- The following steps outline the diskless download procedure. 1. The diskless download ROM is given control during the ROM BIOS initialization phase, where it will alter the bootstrap interrupt vector (INT-19) in order to gain control later, and return control to the ROM BIOS. 2. When the ROM BIOS has completed its initialization phase, it executes the bootstrap interrupt, where the diskless download ROM regains control. Once at this point, the download ROM displays its sign-on message as follows: TurboDOS/PC Network Download ROM Copyright 1985, Intercontinental Micro Systems, Inc. 3. The download ROM will now initialize the LAN-PC controller and read its own node ID out of its memory buffer. The sense switch is also read to determine the circuit and node ID of the file server. If errors are determined during initialization, the download ROM displays the following error message: LAN-PC Controller not present 4. Network requests are formed and sent to the file server to attemp an open of the psuedo file. Open file requests are attemped on devices A through P (user area 0) of the file server before the download ROM gives up and displays the following message: Can't open download file 5. Once the psuedo file is opened, the download ROM alters the disk I/O vector (INT-13) to point to its own simulation of disk I/O. The disk I/O vector is used from here on to read sectors within the psuedo file. Sector 2 (first FAT sector) is then read into memory and the format of the psuedo image file is determined (i.e. single or double sided, 8 or 9 sector disk). This allows any of these formats to be used when the local DOS boot disk is prepared. If an error occurs when reading this sector, the download ROM displays the following message: Can't read FAT sector 6. Sector 1 (DOS boot sector) is then read into the normal memory location 0000:7C00 and control is transfered to it. On errors, the download ROM will display the following message: Can't read boot sector 7. Loading of the DOS now proceeds in the normal fashion except that all physical disk I/O operations are translated to random record reads of the psuedo file and made over the network. Errors that occur over the network are reported by the following messages: Network send error Network receive error Diskless download errors are all considered fatal by nature. After reporting errors on the console, the download ROM displays the following message:  Download aborted, processor halted The PC must be reset to perform any retries. The CTRL-ALT-DEL sequence will accomplish this on most PC's. .cp 6 DOWNLOAD ROM CREATION: --------------------- The diskless download ROM has been configured for standard IBM PC operation. Most PC clones and compatibles should operate with this configuration without the need for alterations. If changes must be made to the standard configuration, the following steps may be used to produce the ROM. The object code for the diskless download ROM is distributed in the file "TPCLOD.O". A "GEN" and "PAR" file exist for to link the object file and provide examples of the patchable options. Refer to "TPCLOD.PAR" for current information on patch options. The following is the list of utilities and the steps required to produce the ROM native code. TLINK.CMD - Object linker MONITOR.COM - S/W 2000 Z80 monitor (other equivalent) CHECKSUM.CMD - ROM checksum utility   TZ80.CMD - Z80 emulator (if Z80 machine unavailable) 1. Link the relocatable object file: TLINK TPCLOD.ROM * TPCLOD 2. Strip off the .CMD header (first 128 bytes of file): MONITOR - or (TZ80 MONITOR) for 8086 processors *LTPCLOD.ROM 100-97F *STPCLOD.ROM 180-97F 180-97F 3. Add ROM checksum byte to end of file: CHECKSUM TPCLOD.ROM .cp 6 EFFECTS OF DISKLESS DOWNLOADING ------------------------------- The following section explains certain characteristics of diskless ROM downloading that you may encounter when configuring your system. An "AUTOEXEC.BAT" file can be created and placed into the psuedo file to execute the startup sequence desired with your PC, but it should be realized that when TURBOPC.COM is executed, device A will usually be re-defined as a TurboDOS remote drive, where the continuation of the file cannot be found. If drive A (remote) exists, and is ready for operation, the batch procedure will terminate normally and the drive prompt will appear. However, if drive A is not ready, DOS will fall into a continuous loop trying to access drive A to finish the batch job. An "AUTOEXEC.BAT" file will work best if drive A (remote) is the drive containing the psuedo file "PCIMAGE.DSK" which downloaded your PC. In fact, if an identical copy of this batch file exists on drive A (remote) under the user area defined as the root (usually user area 0), then the batch job will continue normally even after TURBOPC.COM executes and terminates. A situation will arise when DOS 3.xx and some versions of 2.1x are used. These versions require execution of TURBOPC3.COM directly after execution of TURBOPC.COM. If a batch file is used with this case, DOS becomes disabled after TURBOPC.COM executes and terminates because program loads from remote drives will require TURBOPC3.COM. This ambiguity can only be solved by configuring your TURBOPC driver and retaining drive A as local (the psuedo file). TURBOPC3.COM is then executed from the psuedo file. The supplied LOCAL.COM utility should be executed last during startup, to avoid network conflicts that arise when the psuedo file is referenced later. The "AUTOEXEC.BAT" file can be used throughout startup but CANNOT execute the LOCAL.COM utility. This must be done manually. e to end of file: CHECKSUM TPCLOD.ROM .cp 6 EFFECTS OF DISKLESS DOWNLOADING --------------; TurboDOS/PC diskless download ROM. ; Specifies the file(s) used to create ROM object ; TPCLOD ; Basic module ; The2 3PE EXE`\4AUTOEXECBATNe ; TurboDOS/PC diskless download ROM. (IBM-PC and compatibles) ; Specifies the patch points for custom ROM generation. ; ; The following patches control the physical addressing of the ; LAN controller. (shown is standard IBM-PC addressing) ; BUFSEG = (0xE000) ; LAN controller buffer segment address IOBASE = (0x0200) ; LAN controller base I/O address ; ; The following flag byte controls the patching of vector ; INT-19 (bootstrap). When set, INT-19 is patched to allow the ; download ROM to gain control when the bootstrap is executed. ; When cleared, INT-19 is NOT patched, allowing local disk bootstrap ; to proceed. ; Note: INT-18 (ROM BASIC) is always patched to allow the download ; ROM to gain control if the bootstrap fails. ; I19FLG = 0xFF ; ; The following patch controls the psuedo image download filename ; that is referenced on your TurboDOS file server. ; Note: Drives A-P are scanned once by the download ROM and ; user area 0 (system) is always used. ; FILNAM = "PCIMAGE ","DSK" ; 8-  byte name + 3-byte type ; CtXPSQR$´!ZY[XPQFLODUiTurboDOS/PC Network Download ROM Copyright 1985, Intercontinental Micro Systems, Inc. PCIMAGE DSKPR1`b.>ct dfZX˸ ؎мs$LAN-PC Controller not present087 0) d! ?  t.<sSCan't open download file1&L&N&L &N1Ҏ»|s$Can't read FAT sector  &И.1Ҏ»|s\Can't read boot sector|ttut 0UWVRQSPP X..0H<W8 0!h ?  /_u@<t XX0[YZ^_]R_rBr<<t < t(    û#/6)Network send errorNetwork receive error0X* Download aborted, processor halted .Ct S1[.aHu._&&1ێۈێG1ێÈ&&_ Invalid drive specified $COPYRIGHT 1986, SOFTWARE 2000, INC. (VERSION 03/11/86) * K   I x 9k:TURBOPC DRV TurboDOS/PC 1.08 ($) Copyright 1986, Software 2000, Inc. $Already installed $Insufficient memory $ not present $ load error $Ȏ؎м(N;c °!;u Xuo%$бã"+sP!\(؎]< t)< t(!6Yuz'!PQ!YXuep>o+2&G>&OʹX Z! $P$S$G GGGZ' ( #) .ÊC tôX...6.6.>MtSt&Yt.&ܷہs.>u[..PȎM 6>. &Ȏм(P>u >u>6>. &6666 Mϡ6>. &6666 M..Sط3؉W[Sط3؋W[ô'd +sڄut0SRд!Z[ÌVWUF~ &]_^VWUF~ F &]_^VWUF~ &]_^VWUF~ F &]_^VWUF~ ^ vN]_^VWUv6\LTt| l tDDt^/V.6\LTD| l DDD]_^Ü.ô !VWUNV  ]_^Î&M63PL!ˡ&ã&VWUF]_^VWU&F~@~F=~@t&~}t~}*t v ֋~EF0FP~t!PPtPFP;FuFFPFPFP)]_^VWU@~E@]_^VWU>oE *ȋ>oE *~E*;} ~E>v>oD:E s v?>oE *>oE *Ƌ~+]_^VWUv u PuPv +]_^VWUv uX ~*Pn+]_^VWUv\ u vL +]_^VWUv6 u v& +]_^VWU(v  u~>;Et>HPvtt9oo>FF~ }F* @*%=?u~ u ~*P~*P}%P @PFP#F%PFP2@P#8#2@PF*P%F*=t5F PF*@>P @P#a ~*P t+]_^VWUv  uvv+]_^VWUv  uvv+]_^VWUv  uD\~>;Et>HP~uAFFPF*PPv+]_^VWU(v*  uoo>FF~ }F* @*%=?u~ uL ~*P~*P%P @PFP8"F%PFP2@P""~!2@PF*PB$F*=t5F PF*@>P @P! ~*PM t+]_^VWU>*~+]_^VWU~E@~E@]_^VWUv  uvv +]_^VWUv  uvv +]_^VWUv  u~*P~ P @P2@P O F,F2@FFPFPFP# ua2@PP">@u@FF+RP~  +R@T@RP,-@/@v +~*P+]_^VWU v  u1~~}tF u"PiF u~*P~E&@F,@*䙉FV6@6@v@+RP@+ҹFVRP6,RPvr F;Fte~t!>@uEF+F+6@V~u+FN t>@t+P@@P6@ظ~*PF@+6@~E~E+-@/@va +]_^VWU vz u~F u"P F u~*P9~E&@F,@*䙉FV6@6@v@+RP@+ҹFVRP*RPv/ F;Ft#~t >@u~*P~E0U2@@F@+6@~E~E+-@/@vJ+]_^VWUv~=uu~u ~u$F~u>NF*P=uAFF~ }~F*E @P~u=?uـ~ u~~+]_^VWU ~F uPF t^v,@*䙉FV6@6@6@@+RP@+ҹFVRPj)RPv F;@tY~u@>@u4@+FFFN t>@t+P@@P6@ظ~*P]_^VWU~3F u%PF u~*Pv,@*䙉FV6@6@6@@+RP@+ҹFVRPv(RPv F;@t#~t >@u~*PD~E0U2@@]_^VWU>@u@v]_^VWU~=t ,@,@*=~ ,@@v]_^VWU-@/@؋ʋã@-@/@+ɋâ,@]_^VWU~ t`> @u >*@ @@@~ E0U2@@ @FF~ }F*ƅ"@v~~*P*]_^VWUaF u+ v^]_^VWU~}u>*P~EP~u~EP~u>~*P~>;Et>HP~ugFF> @u >*@ @FPF*Pvg F=u@F~>;EtQPFFP6@ FF~}+PFFP6@F*PFFP6@vFP >*@PFFP6@FF~ }:F*؋vF*>*%3@*PFFP6@x뽊F*PFFP6@_FF~}+PFFP6@<S@U@FuR2@P#P uiS@U@S@U@~犅>F tF*+Ǚ)S@U@PS@PPv6@ +~*P]_^VWUV=u+]_^VWUj%P @P2@P_F,F2@FFPFPFP t2@PP u~4@*ǀuq;@*ǀudFF~ }EF*F*@*%F*=?uF* @*%F*PC@벸2@PP}]_^VWUF~@~F=~@tj~}t~}*u>*F~E*;uFF~ }/F* @*%PF*~E*%;tȀ~ u~~@u+"F;~@tvKv~@PbF]_^VWUv.>*P tvq  u+]_^VWU~E>6>~uF*=u>6>~ueF~u>NF*]_^VWU%P6>~u @P)P >@t>@@r&/@]_^VWU$P @PP6>~uG >@t >@@s0@*P>$P~u]_^VWU v2~@@~@F@FF~@sv6@~FEFFPF>>o} u >*FFFP>oFE >oEv?>oEx?>oE?)>oE *F t1=P~v-P F@P=P>o} tN>PFAP>oE *F>o} ~-PF@P>P>oE*F t1>P~v-PpF@Pc)>PX>oE*F t1,>P>~v-P/F@P"?>P]_^VWUr?*>@o@o~*N~E*/vV2@*=?t2@*A@*@F>oF:E w>oE *ȋ6oD *F*+;~2@P~E*P=~v:P~v?*=t>v?t>x?u>o}t6o~D:EuY~E*P't~Et?4t?~E@$~}ur?*)~Er? ~E@~,@~E@~~-=/w:<~~E~E*~E*@F>oF:E v$>oE *ȋ6oD *F*+;v~}u~}t~}u.~E=u#x?*~Ev?*~E?*~n'~}t~}} ~Ex?~}t~}} ~Ev?~}tB~E*@F>oF:E v*>oE *ȋ6oD *F*+; F*H?~~v?*=t>v?t>x?utv~E2@2@*F>oF:E vv>oE *ȋ6oD *F*+;~%S~>v?u_>x?tX+P!JF@@PFPFPv~)=*w <~ u=u+]_^VWU~E>$P6>~u2@PDP 2@*=?t>2@ut?*@2@t?*A@]_^VWU~}!}F!F$v3@PP>@P~u: ]_^VWU>?tv?*=t==*=9~-=0==*=9~=0==*=9~=0Ÿ P|=PY@P>x?t x?*@`@?*@X@d@>o>?*PO߃>*?X@PP t'ooz?X@PP=tB@x@ @  ?> @ @Fz?> @uv?*=u 6 @]_^VWU?*=ujv?*=uNX@PPi uF>x?t?FFX@?* Fx?*HFFPFPFP" P?]_^VWU?*=u>v?u> @t 6 @p]_^VWU?*>> @tQooz?> @s> @ @ƅz?X@PP tX@PP?P @]_^VWUooz?F FFx?*HFFPFPFP: @]_^VWUB>Pb PFd>PK ~Iu +x?*v? ~Au‹]_^VWUF tvv,P  t ~E+F]_^VWU P @P2@Pg  ~ ~}t ~}NuFF t~ug2@*HA@2@?soo>2@PF*P=F*=t3F t1F*瀽>uF*瀽?u~ $$F uF*>tF돊F*]_^VWU~=t>~ >t~ (~ >t~ ~ >u~ ]_^VWUFu~F tt~ uMv+P,Pc u9vP~E u#~Eu4~E u+vP uvP-P uF ~E+]_^VWUF tn>*@~EFF~ }&F*vF* @*%P! DѠ>*~E)~E*~E4~E5~E6E8F]_^VWU~}*t+<>*F~E)>v_vPFF>~EF*]_^VWU P @P2@P  F,F2@FFPFPFP  uG2@PP  u54@*ǀu$;@*ǀu2@PP  u+]_^VWUF~u~F V ;U2wr);E0r$v ~F V ;U2vr;E0r~F+F V ;U2wr@;E0v;v~F+F V ;U2wr;E0v~E0U2+F V ؋ʋÉFF@ t@؉FF;FvFF~E)>^ N +ɋÉF tnF V %RPv u+FFF;FvFFvFF:PtP6@v F@F+F V F)FFF~r`vEFo~rJ@oF V ~E%U'v!P ua@F V nF믃~t@F V %RPv? t(vF:PP6@v F@FFF]_^VWUF~u~F V ;U2w s;E0wv~F V ;U2w s;E0wvAF~E*HFFPFPFP F*=upfF*OǙFV^Nы~FVE0U2##FVFVF V ;Vwr;;Fv6FV~E6U8~E5vFV~E0U2돋F@ t@؉FF;FvFF~E)>^ N +ɋÉF uF V %RPv+FFF;FvFFv6@vFF:PPKރ ~E5F@F+F V F)FFF~F V ;U2wr;E0vF V ~E0U2~sv~r~Fo@oF V ~E%U'v"P  t@F V nF~F V ;U2wr;E0vF V ~E0U2vvx~trF V %RPvjv6@vF:PP5݃ ~E5F@F+F V FF~F V ;U2wr;E0vF V ~E0U2F]_^VWU~E6U8;V u;F tPvtdܣoF:oF V ~E6U8F V ~E%U'v!P uFF~s ~~E:+]_^VWU~}5uK~E5ۣoF:o~E6U8~E%U'v"P^ u v]_^VWU~E0U2>>~ۣoo>F0FFFPFPFP,]_^VWU~ E*F~ E*F Pv F~ FE*F*]_^VWU+~ E*~ EF FFF F~ u+F~ E*F~ E*FPFPFPF~ FE*~u-~ t'~,u~ E$U&~ E0U2 ~ E0E2F*]_^VWUFF~@~F=~@t~}t~}*uFFف~~@u)FF tvvgv~@P~F]_^VWU6oD *FF;v1>oE *ȋ6oD *F+;wNFPу+]_^VWU>>>*= }%P>*= @PC=uҸ+]_^VWUS٣oo>~E)>F1FFFPFPFP u&~>>;U2wr;E0v>>~E0U2]_^VWU+@@*>@FF~ }$F*F*3@*%P3@Ӌ]_^VWU~u~~5~ED]_^VWUvoE *;Fv6oF&<| uFFPFPFP]_^VWUFF~ }F*h>*;Fu~ uF*i>4o+>oE *F~ *+Ƣo2>oE *~ E*+Ƣooo*.<w ~ E6oo*.<| E+oFFF FFPFPFP]_^VWU~F*>ot/oo*狅 o+o4ooE *~ *+Ƣooo*.<w ~ 6oo*.<| g~EF6oD*F*@;~~ EF~tc~t]>oF:Ev>oF*H.<]6oF*.<|E;Gt6oF*H.<|*@~ EoF*.<w~E4ooF:Es=F*I6oF*.<|*;uϋ6oF*.<|E;.ou6oF:Du+F*@~ EF*~ EF6oD*F*@;~yoF*.<w~ E>oE *Av <*+o~ 6oo*.<| *@~ 6oo*.<| EG4ooE +oh~EFF*>oE ~ +o~EzF*K6oF*%.<| ,6oF*%.<|6oF*%.<|E+o$H=v<<CC;ug4oPv <=u6oD *>+>oE *Av <*+o6oo*.<| E+o4o(`v <=u6oD *>+>oE *Av <*+o6oo*.<| E+o~1uh4ooE0o.o+3o*2o*-o~=u *% 4o*tO~ F$Pvvm~=?t6oo*.<| *@~F$~F6oD4o*tP6o6ovgPσ FF-*o*o*oPP7Ѓ ur*o*oP+P!Ѓ u\4o*uݠ*o*= uР*o*=uA=o*-o5oP6.o 5o.oF+o.oF+o*o 4o|F6o~F~~F~ ~F~ F4o* t#PF@PF@P"F%4o*@tPvWP6o6o΃ 5o*]_^VWUFFo*F*;sF*F; ou+o*oF o]_^VWUFF>oF:E s?oF*.<w ~ :EuՋ6oF*.<| E;Fu~ FE>oF:E u>P~ *>>>Pt =wj=>P[>oE *~ E*AP=~ =tW>P*~ uI>P~ u3~ E=t >Pv ~ EDP>P~ =t >P>PPF>PF*+,~ =un=CC;tg]_^VWU*o*oPP!̓ u]_^Ë܋_܍_VWUV F++ ;wr w;?r+?w@]_^܋_܍_VWUF'FgF '֋Nj]_^OOOOOOOO)))))))))OOOO)O))))OOOOO))OOOOOOO*<3cccccccc33cccccccc333c3ccccccc3  676N6c7652c7c7c7c7c7c7c7c7333c7c7c7c7c7c7c7333c73333c7c7g34c7w55c7c7c7c7c7c7c753c7666666:::AIR;t;p;-PRINT- 000=========CON PRN AUX NUL LPT1 LPT2 LPT3 COM1 COM2 Local drives: A Remote drives: Remote printers: A Remote queues: A  Spooler error (Ignore, Abort) e((hhh8(!h"8#($(*(+( ReadWriteNot ready error, Drive: , Track: , Sector: - (Retry, Ignore, Abort) ]_^VWUCOPYRIGHT 1986, SOFTWARE 2000, INC. (VERSION 03/11/86) * K   I x 9k:bMt "\""r##$~&'N''R(a(()*_,,,^..TURBOPC DRV TurboDOS/PC 1.08 ($) Copyright 1986, Software 2000, Inc. $Already installed $Insufficient memory $ not present $ load error $Ȏ؎м(N;c °!  ;u Xu%$бã"+sP!\(؎]< t)< t(!6Yuz'!PQ!YXuep(`+2&G>&OʹX Z! $P$S$G GG=5Z' ( #) .ÊC tôX...6.6.>MtSt&Yt.&ܷہs.>u[..PȎM 6>. &Ȏм(P>u6 >u>6>. &6666 Mϡ6>. &6666 M..Sط3؉W[Sط3؋W[ô'd +sڄut0SRд!Z[ÌVWUF~ &]_^VWUF~ F &]_^VWUF~ &]_^VWUF~ F &]_^VWUF~ ^ vN]_^VWUv6\LTt| l tDDt^/V.6\LTD| l DDD]_^Ü.ô !VWUNV  ]_^Î&M63PL!ˡ&ã&VWUF]_^VWU&1F&f~F=&ft&~}t~}*t v=֋~EF0FP~t!PP\1PFP;Fu8FFPFPFPI]_^VWUe~Ee]_^VWU>E *ȋ>E *~E*;} ~Edv>D:E s v?>E *>E *Ƌ~+]_^VWUv u Pk9Pv +]_^VWUv uX ~*Pn+]_^VWUv\ u vL +]_^VWUv6 u v& +]_^VWU(v  u~d;EtdHPvtt9dFF~ }F*e*%=?u~ u ~*P~*P}%PePFPDF%PFPePD.DePF*PFF*=t5F PF*@dPePDa ~*P t+]_^VWUv  uvv+]_^VWUv  uvv+]_^VWUv  uD\~d;EtdHP~uAFFPF*P|8Pv+]_^VWU(v*  udFF~ }F*e*%=?u~ uL ~*P~*P%PePFP.CF%PFPePCtBePF*P8EF*=t5F PF*@dPePB ~*PM t+]_^VWU젖d*~+]_^VWU~Ee~Ee]_^VWUv  uvv +]_^VWUv  uvv +]_^VWUv  u~*P~ PePePAEAF,FeFFPFPFPD uaePPC>eueFF+RP~+eeRPMeev +~*P+]_^VWU v  u1~~}tF u"P_4F u~*P~E&eFe*䙉FV6e6eve+RPe+ҹFVRP,MRPvh7 F;Fte~t!>euEF+F+6eV~u+FN t>et+PeeP6eظ~*PFe+6e~E~E+eeva +]_^VWU vz u~F u"P3F u~*P9~E&eFe*䙉FV6e6eve+RPe+ҹFVRPKRPv%8 F;Ft#~t >eu~*P~E0U2eeFe+6e~E~E+eevJ+]_^VWUv~=uu~u ~u$F~udNF*P==uAFF~ }~F*E @P~u=?uـ~ u~~+]_^VWU ~F uP1F t^ve*䙉FV6e6e6ee+RPe+ҹFVRP`JRPv4 F;etY~u@>eu4e+FFFN t>et+PeeP6eظ~*P]_^VWU~3F u%P0F u~*Pve*䙉FV6e6e6ee+RPe+ҹFVRPlIRPv5 F;et#~t >eu~*PD~E0U2ee]_^VWU>euev]_^VWU~=t ee*=~ eev]_^VWUee؋ʋãeee+ɋâe]_^VWU~ t`>eu d*@eee~ E0U2eeeFF~ }F*ƅev~~*P*]_^VWUaF u+ vT1]_^VWU~}ud*P~EP~u~EP~ud~*P~d;EtdHP~ugFF>eu d*@eFPF*Pv].F=ueF~d;EtQPFFP6e FF~}+PFFP6eF*PFFP6evFP.d*@PFFP6eFF~ }:F*؋vF*d*%e*PFFP6ex뽊F*PFFP6e_FF~}+PFFP6e<eeFuReP#P; uiee  ee~犅dF tF*+Ǚ)eePePPv6e +~*P]_^VWUL/=u+]_^VWUj%PePeP8U8F,FeFFPFPFP; tePP: u~e*ǀuqe*ǀudFF~ }EF*F*e*%F*=?uF*e*%F*P :e벸ePPs:]_^VWUF&f~F=&ftj~}t~}*u᠒d*F~E*;uFF~ }/F*e*%P9F*~E*%;tȀ~ u~&fu+"F;&ftvA7v&fPX7F]_^VWUv.d*P5 tvq6 u+]_^VWU~Ed6d~uF*=ud6d~ueF~udNF*]_^VWU%P6d~ueP)P >et>e@r&e]_^VWU$PePP6d~uG >et >e@se*Pd$P~u]_^VWUFF~}F*.0]6`]_^VWU ~}ud* ~E*HFF*P_4 uFF*FFPFPFP8F*=tqF~EF~EFF*FFPFPFP8F*=t6F*~EfF*ȊF*+~~P+]_^VWU v u>}uYF=uP=tEe*e P^PeP4+e*ed*F~uXF*d&dd*;t}F,FeFFPFPFP7 t d*FNePP6먋FdF,FeFFPFPFPy7 uePPs6F~tpFd PePeP4Fe=uJFd P^PeP3=u* P^PeP3Fe=u ~e~P3~M+]_^VWUvI u>}u:=tG *j`*+.0]`*d*;u6*d*;uq꣮dj`*@e P^PeP3eFePF*P5F*=tIF P^PF*@dP2=t P^PF*@dP2=tG *j`*+.0]`d=u-=t PePePN2eF,FeFFPFPFPO5 umePPI4 u[e*ǀtNj=uFe*䢘d P^PeP1H=u$ P^PeP1.=u ~e~P&~M+]_^VWUv< uT:=t0h`F6D *j`*+.0]`FF~*P=u F~~=tF~=u~=.u.F~=.uwFF;FvlN~*P]=uTF;FvF+F=?} ~F\~=t0~*P$=tF+F=?}~FvFȋ~*P=tUFO~>E *j`*+.0]d*䈅`~e~P~M+]_^VWUv uPv+]_^VWUv uP~*%=~*%p=@~ vF=uD=uX=t5.=u v&~*%p^*~*%^*ƈFF*P"F u~=t ~E u ~EtvP,~E`~E*~E,E.~t~E4~*%~E+F-*f+62]~l`F~~e~P~M+]_^VWU~uF u'~M*v&$v|ƅl`y~e+]_^VWU~upF ue~}+tC~u~u~u~u.u,v$ ~~+ҋ~E,U.~e~P>~M+]_^VWU~uF ue~}+tC~u~u~u~u.u,v& ~~+ҋ~E,U.~e~P~M+]_^VWUv uI=t(=u #F=t~u ~e~PJ~M+]_^VWU~uF u~*~E+҉FV~E+ҹa~E+҉FV~E+ҹFV~E,U.hv'+~E+҉FVv~E+ҹD0T2FV~E,U.&~Pm~M,=w4]~E,~~E.~E~e+]_^VWUvU uw~=~S&=uE:=t: PePeP[++e*e~=t⣮dePP_-F*=u~EF*dt~MF*dt~MF*dt~M ~EtF,FeFFPFPFP- uVePP, uD&e&e~Ete~E ueePPy, u ~e~P~M+]_^VWU~uNF u{~*[~E*H~EWv(v~E,U.;T2rw;D0r~.~&~P~M=w:]~e+]_^VWUvvF=u+ vv]_^VWUIv|l`*F~tQ~v4F&2]TfF&2]*fPv|ƅl`~EFF>FP~uv&]_^VWU~}ud* ~E*HFF*P& u>@P6D *F*+.0]`PP~u~u ~e+]_^VWU]_^VWUv u: =t =u~uv ~Pm~M+]_^VWUeFFFF~}FFP6e ߃Fv6e$߃Ft  ޣd P6e6eePP߃ ee P6eރdePPr)=tb P6e6eePPރ FF~ }F*etF*ƅe?ۡe P6eDރPv~PL߃~M+]_^VWUPl`PFP&FF~}+F*l`*F~t~vڊF*ƅl`F~EFvރPFPl`P5&FF~}QF*l`*F~t~vڋF&2]^fuF&2]Tf뵊F*E릸Pl`P$PPvt݃ PFP PPv[݃ +]_^VWU1vD uG# =u#7 =t PePFPX%+F*FF,FωFFFPFPFPS( tFPPJ' tFрtF؀t~EF~EF~E~E~E ~Ev FF~EF~E~tF*j`*@;tK= =t6T =u. PePFPx$FPP& u ~e!~P܃~M+]_^VWU~up  uE~*)+~E~E"~Pt܃~M t=uދ~e+]_^VWUD u8܋~~E ~E~E+]_^VWU"vE  uGh`F~=tFF-(`=8|F,FP)ۃvF*PF@@PF*PFPF*PFPF*P~E+PvF=uZF-(`FFF~s%~e*P~FFEP~u*ڃ+P~FEP~u ڃ~tR~Pۃ~M9٣d PePePW"eePPw$=t+]_^VWUv  u+Pv+]_^VWU~uE F u_F&f~F=&ft;~}t~}*t~E)dv~=uNj~E6E8븋~E+҉FV~E+ҹFVFV~E +҉FV~E+ҹFVFVFVFVFVfFV%+FVFVFVddFVddRأd~E)dF.~=tFFFFPFPFP# u~=u v~e~!~M+]_^VWUF F PFPv F%P]_^VWU~ vF7F0~ ]_^VWUv8F=u=u=t=u vYv ~uF tH~E*~E+~E,E.F-*f+62]~l` F~~e5~P؃~M+~P׃~M]_^VWUd*狅^F։F~EF~FFPփF~~eF%~ E]_^VWU FPv vfF=u vFP1eFFF~}+PFFP6eփF*PeP6eՃFtFF~ }&F*؋vF*d*%eeeeP#Pb  u_eeee~犅dF tF*+Ǚ)eePeP:PeP6eՃ ~P@փ~MceFPFPF@dPI~犅d*%= t1.PFFP6eԃPFPF dP+Pv6eԃFF~ }DvF*dFF*F*e?u F* F*%e본 PeP5P6e6eԃ d*Pe P6e+ԃv e P6eԃeFFFF~}FFP6eӃFFPv6eӃ~e~]_^VWUF N t1~F*%F*= tߊF*P~ P6e~Ӄŋ]_^VWUF-FeFPFPFP u8ePP u&eeeePP u+]_^VWU&e&eePP uePP u+]_^VWUFh`Fh`F~=t~*P=uFFFڋFF~*P=uF~=t ~}#t~=t_~}tV~}#uMF~FF*=#t7~t~0|%~9F*F*.J]-0F*=~F뷸ePFPF;h`u~*P=uF~e*= uF*]_^VWU h`F~*P=u >dF~=u~*Pm=uF~=.u]Fj`*@e~=.u"6*d*;uF P^6*d*;t P^PePePFPFF~ }F*e*%=?uJ+e*eF,FeFFPFPFPP uePPJe*ǀu+e*䢘d]_^VWUj`*@~ FF~ }F*~ E PF @Pv,v<=.u~PF  Pv ]_^VWU~ tEvEF* t3~.t-~*t ~ F FF N t~ F ?N 뵋]_^VWUv<FF*P=uF~t~F*]_^VWUFF~}F*l`uF*~P4Ѓ~M]_^VWU~uF u1~E*F-*f+62]~ l`F ~~e+]_^VWU?P~u~u(`PP΃ g`h`(`>h`=t>h`*P>h`h`h`(`)`*=:u(`*-Aj`h`d*j`j`*䢒dj`*P]_^VWU~s+~l`*F~t~vF&2]*f+]_^VWUG *F+&0]`d]_^VWUSFF~};F*l`*F~t~vڋF&2]TfF*ƅl`)]_^VWUPP6Pl`P2P̓ ]_^VWUPl`PPP Pf̓ ]_^VWUFQFPk̓F  ]_^VWU~\t~/u+]_^VWU v2&f(f&fF*fFF~@sv6(f~FEFFP̃F࢖d>} u d*FFFP̃>FE >Ee>E e>Eeaދ>E *F t1+_P~v-P F@P>_P>} tNA_PFAP>E *F>} ~-PF@PS_P>E*F t1V_P~v-PpF@Pci_PX>E*F t1l_P>~v-P/F@P"_P]_^VWUe*䢘dee~*N~E*/vVe*=?te*e*@F>F:E w>E *ȋ6D *F*+;~eP~E*P=~v:P~e*=t>et> eu>}t6~D:EuY~E*P't~Ee4e~Ee$~}ue*)~Ee ~Ee~,e~Ee~~-=/wL]~~E~E*~E*@F>F:E v$>E *ȋ6D *F*+;v~}u~}t~}u.~E=u# e*~Ee*~Ee*~n'~}t~}} ~E e~}t~}} ~Ee~}tB~E*@F>F:E v*>E *ȋ6D *F*+; F*He~~e*=t>et> eutv~Eee*F>F:E vv>E *ȋ6D *F*+;~%S~>eu_> etX+P!JF@@PFPFPv~)=*w ]~ u=u+]_^VWU~Ed$P6d~uePNPǃ e*=?t>eue*@ee*e]_^VWU~}!}F!F$vePPd@P~uDǃ ]_^VWU>ete*=t^^*=9~-^0^^*=9~^0^^*=9~^0Ÿ P^PfP> et e*@fe*@f f>de*Pwd*䢤efPP t'%ƣ"efPP=tB@ fee>eeF"e>eue*=u 6e]_^VWUe*=uje*=uNfPPi uF> et?FFfe* F e*HFFPFPFP" Pe]_^VWU젦e*=u>eu>et 6ep]_^VWU젤e*䢘d>etQģ"e>es>eeƅ"efPP tfPPePe]_^VWUģ"eF FF e*HFFPFPFP:e]_^VWU_Pb PF_PK ~Iu + e*e ~Au%‹]_^VWUF tvv,P  t ~E+F]_^VWU PePePg  ~ ~}t ~}NuFF t~uge*Hee?}ãdePF*P=F*=t3F t1F*瀽duF*瀽du~ $$F uF*dtF돊F*]_^VWU~=t>~ dt~ (~ dt~ ~ du~ ]_^VWUFu~F tt~ uMv+P,Pc u9vP~E u#~Eu4~E u+vP uvP-P uF ~E+]_^VWUF tnd*@~EFF~ }&F*vF*e*%P! DѠd*~E)~E*~E4~E5~E6E8F]_^VWU~}*t+E *ȋ6D *F+;wNFP+]_^VWUddd*= }%Pd*^ePC=uҸ+]_^VWU]d~E)dF1FFFPFPFP u&~dd;U2wr;E0vdd~E0U2]_^VWU+e*eFF~ }$F*F*e*%PeӋ]_^VWU~u~~5~ED]_^VWUvE *;Fv6F&^| uFFPFPFP]_^VWUFF~ }F*_*;Fu~ uF*_ܔ~ =?t5~ =u6D *d+>E *F~ *+Ƣ2>E *~ E*+Ƣ*.^w ~ E6*.^| EӔFFF FFPFPFP]_^VWU~F*>t/*狅Ӕܔ v v vu+eܔܔ >E *~ *+Ƣ*.^w ~ 6*.^| g~EF6D*F*@;~~ EF~tc~t]>F:Ev>F*H.^]6F*.^|E;Gt6F*H.^|*@~ EF*.^w~Eܔ 6F*.^|EӔv v v9F~ EF FF>F:Es=F*I6F*.^|*;uϋ6F*.^|E;֔u6F:Du+F*@~ EF*~ EF6D*F*@;~yF*.^w~ E>E *Av <*+~ 6*.^| *@~ 6*.^| EGܔ 6F*.^|W~ EF6D*F*@;~F*.^w~ Eܔ 6F*.^|Eܔ@ >E Ӕh~EFF*>E ~ Ӕ~EzF*K6F*%.^| ,6F*%.^|6F*%.^|EӔ$H=v^ ^CC;ugܔPv <=u6D *d+>E *Av <*+6*.^| EӔܔ(`v <=u6D *d+>E *Av <*+6*.^| EӔ~1uhܔ v v v =1w^]_^VWU>Eؔ֔+۔*ڔ*Ք~=u * u6Ӕ=uܔFޔvF~vF~ vF~ ~Fd*% ܔ*tO~ F$Pvvm~=?t6*.^| *@~F$~F6Dܔ*tP66vqPȮ FF-ҔҔҔPPA urҔҔP+P+ u\ܔ*uݠҔ*= u"Ҕ*=uA*ՔݔP6֔ ݔ֔FӔ֔FӔҔ ܔ|Fޔ~F~~F~ ~F~ Fܔ* t#PF@PF@P"F%ܔ*@tPvaP66谭 ݔ*]_^VWUFF*F*;sF*F;u+*F]_^VWUFF>F:E s?F*.^w ~ :EuՋ6F*.^| E;Fu~ FE>F:E u_P~ *___Pt =w|^_P[>E *~ E*AP=~ =tW_P*~ uI_P~ u3~ E=t `Pv ~ EDP `P~ =t `P`PPF%`PF*+,~ =u^CC;tg]_^VWUҔҔPP+ u]_^Ë܋_܍_VWUV F++ ;wr w;?r+?w@]_^܋_܍_VWUF'FgF '֋Nj]_^A$'$W$&&&&&&&& =E>E>E>E>E>E>E>E>==========E>==E>E>E>=E>>====E>E>E>E>E>==E>E>E>E>E>E>E> >2>)@Y@Y@Y@Y@Y@Y@Y@Y@)@)@w>Y@Y@Y@Y@Y@Y@Y@w>w>w>Y@)@)@w>w>>?)@?@Y@)@Y@Y@Y@Y@Y@Y@Y@)@w> W-WDWYXVVSYXYXYXYXYXYXYXYXTTTYXYXYXYXYXYXYXTTTYXTTTTYXYX]TUYXmVVYXYXYXYXYXYXYXVTYXWWWWWWw[|[[AIRz\j\f\. .. ??????????? ` -PRINT- 000^^^^^___"_CON PRN AUX NUL LP  T1 LPT2 LPT3 COM1 COM2 Local drives: A Remote drives: Remote printers: A Remote queues: A  Spooler error (Ignore, Abort) ((hhh8(!h"8#($(*(+( ReadWriteNot ready error, Drive: , Track: , Sector: - (Retry, Ignore, Abort) t8COPYRIGHT 1986, SOFTWARE 2000, INC. (VERSION 01/07/86) Ȏ؎м2!5!pr^!%!@'Kt..pUWVRQSPȎ؉&tvм2xz~3!0Ҹ3!Q!ÿ.t!´!6t\TD\<w<u...=s .xøD€u.6.uWu .,tR10t buWH!YrB.zH&.|@11 .E.x?s =r =MZt=ZMt1+uiH!9w>tr9w+r9vأôH!r~H&.@>u +-± xBr)SQ1ҋx?Y[9u >uš>t>1ɋxBir/Qx?SYr?GЎ& u@H!rSH![r߉~H&.@sQ11ɋxBYs_1Q?^9tu-N6x>t~ztH&H&RU!‰Z.z&,6&66Vt Q\1Y^Vt l<󤫫^t:>v:v6tLT& & 1؉.!t(>6&]NN&u.6&]&u"3!&~6VŽډ.6tdQPxt>]~tH&@I!ztH|&@I!X6tL3!v&tX[YZ^_]P~t H&zt H&X!P~t H&zt H|&X#TITLE "TURBODOS OPERATING SYSTEM TURBODOS/PC PRINT INTERFACE FOR IBM-PC" #SUBTTL "COPYRIGHT 1986, SOFTWARE 2000, INC." ; ; COPYRIGHT 1986, SOFTWARE 2000, INC. ; ; VERSION: 01/07/86 ; MODULE "PRINT" ;MODULE NAME ; LOC Code# ;LOCATE IN CODE SEGMENT ; BYTE "COPYRIGHT 1986, SOFTWARE 2000, INC." BYTE " (VERSION 01/07/86) " ;VERSION DATE ; ALIGN ;ALIGN TO WORD BOUNDARY ; I17DWD: WORD 0,0 ;INTERRUPT 0x17 TRANSFER DOUBLE WORD I1CDWD: WORD 0,0 ;INTERRUPT 0x1C TRANSFER DOUBLE WORD LOACNT: BYTE 0 ;LIST OUTPUT ACTIVITY COUNT ; I17ISR: PUSH DX ;SAVE REGISTERS PUSH CX PUSH BX PUSH AX MOV DX,=0xFFFF ;SET DX-REG=0FFFFH MOV CH,=0xFF ;SET CH-REG=0FFH MOV CL,=27 ;CL=SET/RETURN PRINT MODE FUNCTION MOV AX,=0xFF01 ;SET T-FCN FLAG INT 0x21 ;GET CURRENT PRINT MODE CMP BL,=2 ;CURRENT PRINT MODE=LOCAL? JZ __X2 ;IF SO, CONTINUE POP AX ;ELSE, RESTORE AX-REG TEST AH,AH ;FUNCTION NUMBER=0? JNZ __X1 ;IF NOT, CONTINUE PUSH AX ;ELSE, SAVE AX-REG MOV DL,AL ;OUTPUT CHARACTER TO DL-REG MOV CL,=5 ;CL=LIST OUTPUT FUNCTION MOV AX,=0xFF00 ;SET C-FCN FLAG INT 0x21 ;OUTPUT CHARACTER CS MOV LOACNT,=10 ;SET LIST OUTPUT ACTIVITY COUNT POP AX ;RESTORE AX-REG __X1: POP BX ;RESTORE REGISTERS POP CX POP DX MOV AH,=0x90 ;SET PRINTER STATUS=90H IRET ;DONE __X2: POP AX ;RESTORE REGISTERS POP BX POP CX POP DX CS JMPFI I17DWD ;CONTINUE ; I1CISR: CS CMP LOACNT,=0 ;LIST OUTPUT ACTIVITY COUNT=0? JZ __X ;IF SO, CONTINUE CS DEC LOACNT ;DECREMENT LIST ACTIVITY COUNT JNZ __X ;IF COUNT NOT EXHAUSTED, CONTINUE PUSH CX ;SAVE CX-REG MOV CL,=31 ;CL=FLUSH LIST BUFFER FUNCTION MOV AX,=0xFF01 ;SET T-FCN FLAG INT 0x21 ;FLUSH LIST BUFFER POP CX ;RESTORE CS-REG TEST AL,AL ;FLUSH LIST BUFFER SUCCESSFUL? JZ __X ;IF SO, CONTINUE CS INC LOACNT ;INCREMENT LIST ACTIVITY COUNT __X: CS JMPFI I1CDWD ;CONTINUE ; START: MOV AL,=0x1C ;GET INTERRUPT 0x1C (TIMER TICK) CALL GETINT ;GET INTERRUPT VECTOR ADDRESS MOV DI,BX ;INTERRUPT VECTOR OFFSET TO DI-REG MOV SI,&I1CISR ;  GET INTERRUPT 0x1C ADDRESS MOV CX,=16 ;GET COMPARE LENGTH CLD ;CLEAR DIRECTION FLAG REPE CMPS BYTE ;UTILITIY ALREADY INSTALLED? JZ __UAI ;IF SO, CONTINUE MOV AL,=0x17 ;GET INTERRUPT 0x17 (PRINTER) CALL GETINT ;GET INTERRUPT VECTOR ADDRESS MOV I17DWD,BX ;SAVE INTERRUPT VECTOR OFFSET MOV I17DWD+2,ES ;SAVE INTERRUPT VECTOR SEGMENT MOV DX,&I17ISR ;GET INTERRUPT SERVICE ADDRESS MOV AL,=0x17 ;GET INTERRUPT 0x17 CALL SETINT ;SET INTERRUPT VECTOR ADDRESS MOV AL,=0x1C ;GET INTERRUPT 0x1C (TIMER TICK) CALL GETINT ;GET INTERRUPT VECTOR ADDRESS MOV I1CDWD,BX ;SAVE INTERRUPT VECTOR OFFSET MOV I1CDWD+2,ES ;SAVE INTERRUPT VECTOR SEGMENT MOV DX,&I1CISR ;GET INTERRUPT SERVICE ADDRESS MOV AL,=0x1C ;GET INTERRUPT 0x1C CALL SETINT ;SET INTERRUPT VECTOR ADDRESS MOV DX,&START ;GET LAST BYTE ADDRESS INT 0x27 ;TERMINATE BUT STAY RESIDENT __UAI: INT 0x20 ;DONE ; GETINT: PUSH DS ;SAVE DS-REG XOR BX,BX ;GET INTERRUPT VECTOR PARAGRAPH MOV DS,BX ;INTERRUPT PARAGRAPH TO DS-REG MOV BL,AL ;INTERRUPT NUMBER TO BX-REG ADD BX,BX ;X2 ADD BX,BX ;X2=X4 MOV ES,2[BX] ;GET INTERRUPT VECTOR SEGMENT MOV BX,0[BX] ;GET INTERRUPT VECTOR OFFSET POP DS ;RESTORE DS-REG RET ;DONE ; SETINT: PUSH ES ;SAVE ES-REG XOR BX,BX ;GET INTERRUPT VECTOR PARAGRAPH MOV ES,BX ;INTERRUPT PARAGRAPH TO ES-REG MOV BL,AL ;INTERRUPT NUMBER TO BX-REG ADD BX,BX ;X2 ADD BX,BX ;X2=X4 ES MOV 0[BX],DX ;GET INTERRUPT VECTOR OFFSET ES MOV 2[BX],DS ;SET INTERRUPT VECTOR SEGMENT POP ES ;RESTORE ES-REG RET ;DONE ; END START ABCEHIJLMNOPQSTUVWXY[\^_`acdefghijklmnoqsuvwx{|~COPYRIGHT 1986, SOFTWARE 2000, INC. (VERSION 01/07/86) RQSP!tXuP±!.D X[YZX[YZ..<.>Dt.DuQ!Yt.D..@>߾t/,<>E.@B' 1ێۈێG1ێÈ&&_               !  !  "  "  #  #  $  $  %  %  &  &  '  '