* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * MULTIDSK * * * * COPYRIGHT (C) 1984,85,86 - AMPRO COMPUTERS, INC. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;revision log: ; ; 4/24/86 Ver 2.4 ; Fixed problem with 96tpi. ; ; 4/08/86 Ver 2.3 ; Fixed display bug. Non-functional change. ; ; 5/22/85 Ver 2.2 ; Added support for 48tpi formats in a 96tpi ; drive. Added support for 8" 3740 with bios ; 3.0+ (assembly time option) ; ; 2/28/85 Ver 2.1 ; Removed warning message of 12/12/84, added ; translation of drive letters for bios 2.0+ ; ; 12/12/84 Ver 2.0 ; Added warning message for use with ; Hard disk bios. ; ; 5/13/84 Ver 1.4 ; Added nulls to line feeds for ; S-L-O-W terminals (VT100 etc.). ; ; 5/08/84 Unreleased Ver.1.3X ; Added Televideo, Sanyo, Pmc Type A. ; ; 3/09/84 Release Ver 1.2 ; Deleted IBM DS, TI DS. Added OSB 1, ; H/Z 89 SD, TRS80-3. Corrected menus ; This version requires Bios 3/5 ; or later. ; ; 2/17/84 Release Ver 1.1 ; Now allow drive A to be used as "E". ; Corrected bug in H9 (H89 DSXD) ; WS added a few lines of extra code! ; ; 2/3/84 Release version 1.0 ; ; ;MULTIDSK allows the "E" drive of the AMPRO series 100 computers ;to read and write several different 48 & 96 tpi disk formats. Multidsk ;changes the TYPE byte, DPB, Drive, and the SKEW table in the bios. A ;total of 37 bytes are allowed (1 TYPE byte, 15 for DPB, 1 for Drive ;selected 20 for SKEW table). Type byte is a single byte which defines ;the particulars of the foreign disk format. The DPB (disk parameter ;block) is the standard Digital Research dpb and can be learned by ;studying the CP/M 2 Alteration Guide as supplied by Digital Research. ;The drive select byte defines which drive will be used as the "E" drive ;(01=B, 02=C, and 03=D). The skew table defines the skew of the physical ;sectors not the logical sectors. ; ;definition of type byte: ; ; bit 7 density: 0=single; 1=double ; bit 6 double sided media if = 1 ; bit 5 double sided mode: ; 1 = continuous sector numbers (first ; sector on side one = last sector ; on side 0 + 1). ; both tracks are treated as a ; single track with twice as many ; sectors. ; 0 = same sectors on both sides ; (normal method) ; bit 4 reserved ; bits 3-2 00 = 1k allocation blocks ; 01 = 2k allocation blocks ; 10 = not used ; 11 = not used ; bits 1-0 00 = 128 byte sectors ; 01 = 256 byte sectors ; 10 = 512 byte sectors ; 11 = 1024 byte sectors ; ; CR: EQU 0DH ;carrige return LF: EQU 0AH ;line feed ESC: EQU 01BH ;escape CAPS: EQU 05FH ;upper case ETX: EQU 3 ;^c EIGHT$INCH: EQU 0 ; Set to 1 to show 8" entries bdos equ 5 ORG 0100H ;base of tpa ; BEGIN: LXI H,0 ;zero out h&l DAD SP ;add sp to hl SHLD OLDSP ;save it LXI SP,STACK ;set up new stack ; ;ckdrv loads the default drive and compares it ;against the e drive which isn't allowed. prints ;error message if true. ; CKDRV: LDA 4 ;get default drive CPI 4 ;is it drive "e"? JZ WRGDRV ;get ready to quit if it is lhld 01H mvi l,74h mov a,m ani 3fh ; mask off D-speed & D-step mov m,a ; ;eaddr gets the location of eparm in the bios. ; EADDR: LHLD 1 ;get warm boot vector MVI L,36H ;getedsk offset LXI D,BIORET ;point to bios return point PUSH D ;save d PCHL ;return with dpb addr ; ;bioret returns with the bios location of eparm ;and saves it for use later. ; BIORET: DCX H ;back up to type byte location SHLD ADDR ;save location ; Interrogate the command line for any characters lxi h,80h mov a,m inx h ora a jz sign mov b,a lxi d,cldrive mvi c,4 nextchr: mov a,m dcr b inx h jm sign cpi ' ' jz nextchr stax d inx d dcr c jz sign jmp nextchr cldrive db 0 clmenu db 0 cltype db 0 cl4896 db 0 ; ;print the signon message. ; SIGN: mvi a,0 ; clear bios version sta lb$vers call get$bios$vers ; get bios version mvi a,16 jnz new$sys lhld 1 mvi l,5ch mov a,m jmp plugem new$sys: push psw xra a lxi h,jplug1 mov m,a inx h mov m,a inx h mov m,a pop psw plugem: adi '@' sta plug1 inr a sta cplug1 lda lb$vers cpi 30 jp chk$eight mvi a,0c3H ; change nop's to jmp if less than bios 3.0 sta loop lxi h,loop2 shld loop+1 chk$eight: lda lb$vers cpi 30 if eight$inch ; If 8" is enabled, then blot out text only jp doit ; if bios is less than version 3.0. If 8" endif ; is not enabled, always blot out text. mvi a,0c3h ; change 'jz' to 'jmp' sta zplug3a mvi a,'$' ; add '$' to text sta zplug3b lxi h,zplug3c ; remove '4, ' from text mvi m,0 inx h mvi m,0 inx h mvi m,0 jmp doit DISPLAY$FDEV: lda lb$vers cpi 20 rm LXI D,D$FDEV$HDR ; Print header mvi c,9 call bdos mvi a,0 ; starting unit # D$NEXT$FDEV: sta unit call lb$get$ldte ; Get address of unit id MOV A,M ; Get unit id CPI 01 ; Floppy? JNZ D$BUMP$PTR ; No -- go to the next device inx h ; Get drive # mov a,m ; . ani 03h ; mask out excess bits MOV l,a ; update floppy device number mvi h,0 ; . dad h ; x2 xchg LXI H,FNAMES ; . dad d ; x2 dad d ; x4 dad d ; x6 lxi d,d$fname ; lxi b,6 ; db 0edh,0b0h ; . (LDIR) lda unit ; adi 'A' ; sta d$current ; LXI D,D$FDEV$LIN ; and output the line mvi c,9 call bdos D$BUMP$PTR: lda unit inr a ; Bump to next unit cpi 16 ; Done yet? jm D$NEXT$FDEV ; No -- go do the next one RET unit: db 0 D$FDEV$HDR: DB CR,LF,'FLOPPY DISK ASSIGNMENTS',CR,LF DB 'CP/M drive ' DB 'Floppy disk',CR,LF DB '------------------------',CR,LF,'$' D$FDEV$LIN: DB ' ' D$CURRENT: DB 'x ' D$EDISK: DB ' ' D$EBLANK: DB ' ' D$FNAME: DB ' ' DB CR,LF,'$' D$FDEV$HLEN EQU $-D$FDEV$LIN ; Line length FNAMES: DB 'First ' DB 'Second' DB 'Third ' DB 'Fourth' ; end of DISPLAY$FDEV GET$BIOS$VERS: ; Get bios version -- Brings the current BIOS jump tables (starting ; at warm boot) to a local area for ease of utility access. If ; this BIOS is version 2.1 or greater, the secondary jump table ; is brought in as well. ; ; Entry: none ; Exit: Z = bios < 2.1 (old bios) ; NZ = bios 2.1+ (fixed disk bios) ; All registers are modified ; LHLD 1 ; Get start of bios jump table LXI D,LB$BIOS$TBL ; Move bios to local storage lxi B,LB$LEN ; . (length of bios area) db 0edh,0b0h ; . (move routine) MVI A,0 ; Test CP/M version CALL LB$GETNXT ; Get next jump table STA LB$VERS ; Save bios version INX H ; See if HL is 0FFFFh MOV A,H ; . ORA L ; . RZ ; If so, then old version DCX H ; Fix HL as it has the table addr LXI D,LB$XTBL ; Move extra table to local storage lxi B,LB$XLEN ; . (length of extra table) db 0edh,0b0h ; . (move routine) MVI A,0FFH ; Set NZ to indicate bios ORA A ; ... version 2.1+ RET ; ... and return. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Data area . . . * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; Replicated BIOS for ease of use . . . LB$BIOS$TBL: LB$WBOOT DB 0,0,0 ; Warm boot LB$CONST DB 0,0,0 ; Console status LB$CONIN DB 0,0,0 ; Console input LB$CONOUT DB 0,0,0 ; Console output LB$LISTOUT DB 0,0,0 ; List output LB$PUNCH DB 0,0,0 ; Punch output LB$READER DB 0,0,0 ; Reader input LB$HOMDSK DB 0,0,0 ; Home disk (move to track 00) LB$SELDSK DB 0,0,0 ; Select disk drive LB$SETTRK DB 0,0,0 ; Select track number LB$SETSEC DB 0,0,0 ; Select sector number LB$SETDMA DB 0,0,0 ; Set DMA address LB$DSKREAD DB 0,0,0 ; Disk read LB$DSKWRITE DB 0,0,0 ; Disk write LB$LISTST DB 0,0,0 ; List status LB$SECTRN DB 0,0,0 ; Sector translate routine ; AMPRO-specific BIOS calls LB$GETNXT DB 0,0,0 ; Get bios ver & next tbl address LB$GETEDSK DB 0,0,0 ; Get pointer to E-disk storage LB$IOINIT DB 0,0,0 ; Set new I/O parameters LB$SCSIDRV DB 0,0,0 ; SCSI direct driver LB$LEN EQU $-LB$WBOOT ; Length of bios table LB$XTBL: LB$SWAP$DRV DB 0,0,0 ; Swap two logical drives LB$WINDRV DB 0,0,0 ; Set/get win drive parameters LB$PHYTAB DB 0,0,0 ; Set/get phytab access LB$GET$LDTE DB 0,0,0 ; Get physical table entry address LB$RESERVED DB 0,0,0 ; Reserved entry LB$XLEN EQU $-LB$XTBL ; Length of extra table LB$VERS DB 0 doit: lda cldrive ora a jnz getdrvc sign2c: LXI D,SIGNON ;point to sign on message CALL OUTPUT ; lda lb$vers cpi 20 cp display$fdev lxi d,sign2 call output ; ;getdrv checks which drive is selected as the "e" drive. ; GETDRV: CALL CONIN ;get drive selection getdrvc CPI ESC ;esc? JZ DONE ;endit CPI ETX ;^c? JZ DONE ; ANI CAPS ;force upper case cpi 'A' jc another cplug1 equ $+1 cpi 'E' jnc another sta drvsel+7 sta sgnoff+19 sui 'A' jplug1: jmp get$20e call lb$get$ldte mov a,m cpi 1 jnz another inx h mov a,m ani 3 get$20e sta drive jmp main another lda cldrive ora a jz getdrv xra a sta cldrive jmp sign2c MAIN: lda clmenu ora a jnz compc LXI D,MAINMU ;point to main menu CALL OUTPUT ;print the main menu lxi d,mainm2 call output ; ;comp checks which sub-menu is selected and prints it. ;^c allows exit to cp/m. ; COMP: CALL CONIN ; compc CPI ESC ;esc? JZ DONE ;end if so CPI ETX ;^c? JZ DONE ; ANI 7FH ;clean it up STA TYPE ; cpi '1' jz prtsub cpi '2' jz prtsub cpi '3' jz prtsub zplug3a: jz zplug3ax IF EIGHT$INCH cpi '4' jz prtsub ENDIF zplug3ax: lda clmenu ora a jz comp xra a sta clmenu jmp main ; PRTSUB: lda cltype ora a jnz ckmenu lda type LXI D,SS48 ;load d with sub-menu CPI '1' ;single sided 48 tpi? JZ PRTSUB2 ; LXI D,DS48 ; CPI '2' ;double sided 48 tpi? JZ PRTSUB2 ; LXI D,TPI96 ; CPI '3' ;96 tpi? JZ PRTSUB2 ; LXI D,IBM3740 cpi '4' jz ibm3740 prtsub2 CALL OUTPUT ;prints the submenu selected ; ;ckmenu determines which sub-menu has been selected ;and jumps to the appropriate comparison routine. ; CKMENU: LDA TYPE ;get sub menu CPI '1' ;ss48? JZ COMP1 ; CPI '2' ;ds48? JZ COMP2 ; CPI '3' ;96tpi? JZ COMP3 ; CPI '4' JZ IBM3740 JMP MAIN ;this should never happen! ; ;comp1 checks to see which single sided format has been ;selected. ^c allows exit to cp/m. ; COMP1: lda cltype ora a jnz comp1z CALL CONIN ; comp1z CPI ESC ;esc? JZ MAIN ;return to main menu CPI ETX ;^c? JZ DONE ;endit ANI CAPS ;force upper case CPI 'A' ;a? JZ ACT ;actrix CPI 'B' ;b? JZ DEC ;dec vt180 CPI 'C' ;c? JZ H10 ;heath/zenith 100 ssdd CPI 'D' ;d? JZ H12 ;heath/zenith 89 sssd CPI 'E' ;e? JZ H1 ;heath/zenith ssdd CPI 'F' ;f? JZ H4 ;heath/zenith ssxd CPI 'G' ;g? JZ H3 ;heath w/magnolia CPI 'H' ;h? JZ IBMSS ;ibm ssdd CPI 'I' ;i? JZ KAY2 ;kaypro ii CPI 'J' ;j? JZ LOBO ;lobo ssdd CPI 'K' ;k? JZ MOR ;morrow md2 CPI 'L' ;l? JZ NEC ;nec pc8001a CPI 'M' ;m? JZ OS1 ;osborne 1 sssd CPI 'N' ;n? JZ OSB ;osborne 2 ssdd CPI 'O' ;o? JZ TISS ;ti ssdd CPI 'P' ;p? JZ TRS80 ;trs80-1 CPI 'Q' ;q? JZ TRS3 ;trs80-3 CPI 'R' ;r? JZ TRS4 ;trs80-4 CPI 'S' ;s? JZ XERSD ;xerox 820-1 CPI 'T' ;t? JZ XERDD ;xerox 820-2 lda cltype ora a jz comp1 xra a sta cltype jmp prtsub ; ;comp2 checks to see which double sided 48 tpi format ;has been selected. ^c exits to cp/m. ; COMP2: lda cltype ora a jnz comp2z CALL CONIN ; comp2z CPI ESC ;esc? JZ MAIN ;return to main menu CPI ETX ;^c? JZ DONE ;endit ANI CAPS ;force upper case CPI 'A' ;a? JZ H11 ;heath/zenith 100 dsdd CPI 'B' ;b? JZ H2 ;heath/zenith 89 dsdd CPI 'C' ;c? JZ H5 ;heath/zenith dsxd CPI 'D' ;d? JZ KAY4 ;kaypro 4/10 CPI 'E' ;e? JZ LOBO1 ;lobo dsdd CPI 'F' ;f? JZ MOR1 ;morrow md3 CPI 'G' ;g? JZ PMC ;pmc type a CPI 'H' ;h? JZ SAN ;sanyo mbc1000/1100 CPI 'I' ;i? JZ TEL ;televideo 802/803 lda cltype ora a jz comp2 xra a sta cltype jmp prtsub ; ;comp3 checks to see which 96 tpi format has been selected. ;a ^c will allow you to exit directly ;to cp/m. ; COMP3: lda cltype ora a jnz comp3z CALL CONIN ; comp3z CPI ESC ;esc? JZ MAIN ;return to main menu CPI ETX ;^c? JZ DONE ;endit ANI CAPS ;force upper case CPI 'A' ;a? JZ DEC1 ;dec rainbow CPI 'B' ;b? JZ EGL ;eagle 2e-2 ss CPI 'C' ;c? JZ H6 ;h/z 89 ssdd CPI 'D' ;d? JZ H7 ;h/z 89 dsdd CPI 'E' ;e? JZ H8 ;h/z 89 ssxd CPI 'F' ;f? JZ H9 ;h/z 89 dsxd lda cltype ora a jz comp3 xra a sta cltype jmp prtsub ; ;conin gets a single character from the keyboard and ;puts it in the accumulator. ; CONIN: MVI A,9 ; bios call avoids echo to console LHLD 1 MOV L,A PCHL ; ;output sends the message pointed to by de to the screen. ; OUTPUT: MVI C,9 ;print string function CALL 5 ;bdos RET ; ; TYPE: DB '1' ;which sub menu selected ; DRIVE: DB 1 ;selected drive ; ADDR: DS 2 ;"e" drive parms addr ; ;the signon message... ; SIGNON: DB LF DB 0,0,0,0,0,0,0,0,0,0 DB LF DB 0,0,0,0,0,0,0,0,0,0 DB LF DB 0,0,0,0,0,0,0,0,0,0 DB LF DB 0,0,0,0,0,0,0,0,0,0 DB LF DB 0,0,0,0,0,0,0,0,0,0 DB LF DB 0,0,0,0,0,0,0,0,0,0 DB LF DB 0,0,0,0,0,0,0,0,0,0 DB LF DB 0,0,0,0,0,0,0,0,0,0 DB LF DB 0,0,0,0,0,0,0,0,0,0 DB LF DB 0,0,0,0,0,0,0,0,0,0 DB LF DB 0,0,0,0,0,0,0,0,0,0 DB LF DB 0,0,0,0,0,0,0,0,0,0 DB LF DB 0,0,0,0,0,0,0,0,0,0 DB LF DB ' AMPRO Disk Compatibility Utility - Version ' VERSION: DB '2.4',CR,LF DB ' Copyright (c) 1984,85,86 AMPRO Computers, Inc.' DB CR,LF DB 0,0,0,0,0,0,0,0,0,0 DB LF DB 0,0,0,0,0,0,0,0,0,0 DB LF DB 0,0,0,0,0,0,0,0,0,0 DB LF DB ' MULTIDSK prepares your AMPRO system to read, write, ' DB 'run programs,',CR,LF,' and access data on 5 1/4 inch ' DB 'diskettes formatted for many other',CR,LF,' computers.' DB CR,LF DB 0,0,0,0,0,0,0,0,0,0 DB LF DB 0,0,0,0,0,0,0,0,0,0 DB LF DB 0,0,0,0,0,0,0,0,0,0 DB '$' sign2: DB lf,' Which drive do you wish to use as the "E" drive? ' DB '(A - ' plug1: DB 'D) $' MAINMU: DB CR,LF DB 0,0,0,0,0,0,0,0,0,0 DB LF DB 0,0,0,0,0,0,0,0,0,0 DB LF DB 0,0,0,0,0,0,0,0,0,0 DB LF DB 0,0,0,0,0,0,0,0,0,0 DB LF DB 0,0,0,0,0,0,0,0,0,0 DB LF DB 0,0,0,0,0,0,0,0,0,0 DB LF DB ' MULTIDSK MAIN MENU',CR,LF DB ' -------- ---- ----',CR,LF,LF DB ' 1 - Single Sided 48 TPI Menu',CR,LF DB ' 2 - Double Sided 48 TPI Menu',CR,LF DB ' 3 - 96 TPI Menu',CR,LF zplug3b db 0 IF EIGHT$INCH DB ' 4 - SSSD IBM 3740 8" format',CR,LF ENDIF DB '$' mainm2: DB 0,0,0,0,0,0,0,0,0,0 DB LF DB 0,0,0,0,0,0,0,0,0,0 DB LF DB ' - Exit to CP/M',CR,LF DB 0,0,0,0,0,0,0,0,0,0 DB LF DB 0,0,0,0,0,0,0,0,0,0 DB LF DB 0,0,0,0,0,0,0,0,0,0 DB LF DB 0,0,0,0,0,0,0,0,0,0 DB LF DB 0,0,0,0,0,0,0,0,0,0 DB LF DB 0,0,0,0,0,0,0,0,0,0 DB LF DB 0,0,0,0,0,0,0,0,0,0 DB LF DRVSEL: DB CR,'Drive A Selected as the "E" Drive.',CR,LF DB 'Select 1, 2, 3, ' zplug3c db '4, ' DB 'or to Exit: $' ; ;the single sided 48 tpi menu... ; SS48: DB CR,LF,' ' DB 'These formats require a single or double sided 48 tpi ' DB 'drive.' DB CR,LF DB 0,0,0,0,0,0,0,0,0,0 DB LF DB 0,0,0,0,0,0,0,0,0,0 DB LF DB 0,0,0,0,0,0,0,0,0,0 DB LF DB ' SINGLE SIDED 48 TPI MENU' DB CR,LF DB ' ------ ----- -- --- ----',CR,LF DB 0,0,0,0,0,0,0,0,0,0 DB LF DB ' A - ACTRIX (ACCESS) ' DB ' K - MORROW MD2',CR,LF DB ' B - DEC VT180 ' DB ' L - NEC PC8001A',CR,LF DB ' C - HEATH/ZENITH 100 ' DB ' M - OSBORNE 1',CR,LF DB ' D - HEATH/ZENITH 89 SD ' DB ' N - OSBORNE 2',CR,LF DB ' E - HEATH/ZENITH 89 DD ' DB ' O - TI Pro (CP/M 86)',CR,LF DB ' F - HEATH/ZENITH 89 XD ' DB ' P - TRS80-1 w/OMIKRON',CR,LF DB ' G - HEATH w/MAGNOLIA ' DB ' Q - TRS80-3 w/MEM MERCHANT CP/M',CR,LF DB ' H - IBM (CP/M 86) ' DB ' R - TRS80-4 w/MONTEZUMA CP/M',CR,LF DB ' I - KAYPRO II ' DB ' S - XEROX 820-I',CR,LF DB ' J - LOBO MAX80 ' DB ' T - XEROX 820-II',CR,LF DB CR,LF DB 0,0,0,0,0,0,0,0,0 DB LF DB ' - Return to Main Menu',CR,LF DB 0,0,0,0,0,0,0,0,0 DB LF DB 0,0,0,0,0,0,0,0,0 DB LF DB 0,0,0,0,0,0,0,0,0 DB LF DB 'Select a format or to Main Menu: $' ; ;the double sided 48 tpi menu... ; DS48: DB CR,LF DB 0,0,0,0,0,0,0,0,0 DB LF,' ' DB 'These formats require a double sided 48 tpi drive.' DB CR,LF DB 0,0,0,0,0,0,0,0,0 DB LF DB 0,0,0,0,0,0,0,0,0 DB LF DB 0,0,0,0,0,0,0,0,0 DB LF DB 0,0,0,0,0,0,0,0,0 DB LF DB ' DOUBLE SIDED 48 TPI MENU' DB CR,LF DB ' ------ ----- -- --- ----',CR,LF DB LF DB ' ' DB 'A - HEATH/ZENITH 100',CR,LF DB ' ' DB 'B - HEATH/ZENITH 89 DD',CR,LF DB ' ' DB 'C - HEATH/ZENITH 89 XD',CR,LF DB ' ' DB 'D - KAYPRO 4/10',CR,LF DB ' ' DB 'E - LOBO MAX80',CR,LF DB ' ' DB 'F - MORROW MD3',CR,LF DB ' ' DB 'G - PMC-101 MicroMate (Type "A")',CR,LF DB ' ' DB 'H - SANYO MBC 1000/1100',CR,LF DB ' ' DB 'I - TELEVIDEO 802/803',CR DB LF,LF DB ' - Return to Main Menu',CR,LF DB 0,0,0,0,0,0,0,0,0,0 DB LF DB 0,0,0,0,0,0,0,0,0,0 DB LF DB 0,0,0,0,0,0,0,0,0,0 DB LF DB 0,0,0,0,0,0,0,0,0,0 DB LF DB 'Select a format or to Main Menu: $' ; ;the 96 tpi menu follows... ; TPI96: DB CR,LF DB 0,0,0,0,0,0,0,0,0,0 DB LF,' ' DB 'These formats require a 96 tpi drive.' DB CR,LF DB 0,0,0,0,0,0,0,0,0,0 DB LF DB 0,0,0,0,0,0,0,0,0,0 DB LF DB 0,0,0,0,0,0,0,0,0,0 DB LF DB 0,0,0,0,0,0,0,0,0,0 DB LF DB ' 96 TPI MENU' DB CR,LF DB ' -- --- ----',CR,LF DB LF DB ' ' DB 'A - DEC RAINBOW (CP/M)',CR,LF DB ' ' DB 'B - EAGLE IIE-2 SSDD',CR,LF DB ' ' DB 'C - HEATH/ZENITH 89 SSDD',CR,LF DB ' ' DB 'D - HEATH/ZENITH 89 DSDD',CR,LF DB ' ' DB 'E - HEATH/ZENITH 89 SSXD',CR,LF DB ' ' DB 'F - HEATH/ZENITH 89 DSXD',CR,LF DB 0,0,0,0,0,0,0,0,0,0 DB LF DB 0,0,0,0,0,0,0,0,0,0 DB LF DB ' - Return to Main Menu',CR,LF DB 0,0,0,0,0,0,0,0,0,0 DB LF DB 0,0,0,0,0,0,0,0,0,0 DB LF DB 0,0,0,0,0,0,0,0,0,0 DB LF DB 0,0,0,0,0,0,0,0,0,0 DB LF DB 0,0,0,0,0,0,0,0,0,0 DB LF DB 0,0,0,0,0,0,0,0,0,0 DB LF DB 'Select a format or to Main Menu: $' ; ;ending message... ; SGNOFF: DB CR,LF DB 0,0,0,0,0,0,0,0,0,0 DB LF,'Drive B is now a$' ENDIT: DB CR,LF,'drive when you call it "E".',CR,LF,'$' ; PRINT: CALL OUTPUT ;print it LXI D,ENDIT ;set up end routine PRINT1: CALL OUTPUT ; JMP 0 ;done ; ;wrgdrv loads the wrong drive error message, prints ;it and exits to cp/m. ; WRGDRV: LXI D,ERROR ;load error message CALL OUTPUT ;bdos DONE: LHLD OLDSP ;get stack back SPHL ;put it in sp RET ;return to zcpr3 ; ERROR: DB 7,CR,LF DB 0,0,0,0,0,0,0,0,0,0 DB LF,'Wrong drive selected.',CR,LF DB 'MULTIDSK can only be run from drive A, B, C, or D.' DB CR,LF DB 0,0,0,0,0,0,0,0,0,0 DB LF,'$' ; askd: lda cl4896 cpi 'Y' jz setdst cpi 'y' jz setdst cpi 'N' jz loop2 cpi 'n' jz loop2 push b push d push h lxi d,dsmsg call output pop h pop d pop b askd2x push b push d push h call conin pop h pop d pop b cpi esc jz done cpi etx jz done ani 05fh cpi 'Y' jz setdst cpi 'N' jz loop2 jmp askd2x setdst: push h lhld 1 mvi l,74h mov a,m ori 40h mov m,a pop h jmp loop2 dsmsg: DB CR,LF,'Is the E-drive a 96tpi drive (Y/N)? ','$' ; ;loop moves the type byte, dpb, drive,and ;skew table to the location in the bios pointed to ;by the hl registers. the bytes to be moved are pointed ;to by the de registers and b contains the number ;of bytes to be moved. ; LOOP: nop nop nop lda type cpi '1' jz askd cpi '2' jz askd LOOP2: LDAX D ;put 1st byte into a MOV M,A ;store it in bios INX D ;roll up d INX H ;roll up h DCR B ;decrement b JNZ LOOP2 ;loop until done LXI D,SGNOFF ; CALL OUTPUT ;print it RET ; ;the following tables contain the type byte, dpb, drive ;selected, and skew for the different formats ;which can be read/write. ; KAY2: LDA DRIVE ;get drive pointer back STA K2DPB+16 ;store it LHLD ADDR ;get bios pointer back MVI B,27 ;number of bytes to move (1+15+1+10) LXI D,K2DPB ;point to new dpb CALL LOOP ;put into memory LXI D,K2END ;point to end message JMP PRINT ; ; K2DPB: ;type byte DB 082H ;kaypro ii ssdd ;dpb DW 40 ;spt DB 3 ;block shift DB 7 ;block mask DB 0 ;extent mask DW 0C2H ;disk size-1 DW 63 ;# of directories-1 DB 0F0H ;allocation 0 DB 0 ;allocation 1 DW 16 ;dir check size DW 1 ;reserved tracks ;drive DB 1 ;drive selected ;skew table DB 0,1,2,3,4,5,6,7,8,9 ; K2END: DB ' KAYPRO II$' ; SAN: LDA DRIVE ;get drive pointer back STA SANDPB+16 ;store it LHLD ADDR ;get bios pointer back MVI B,33 ;number of bytes to move (1+15+1+16) LXI D,SANDPB ;point to new dpb CALL LOOP ;put into memory LXI D,SANEND ;point to end message JMP PRINT ; ; SANDPB: ;type byte DB 0C5H ;sanyo dsdd ;dpb DW 32 ;spt DB 4 ;block shift DB 15 ;block mask DB 1 ;extent mask DW 9BH ;disk size-1 DW 63 ;# of directories-1 DB 80H ;allocation 0 DB 0 ;allocation 1 DW 16 ;dir check size DW 2 ;reserved tracks ;drive DB 1 ;drive selected ;skew table DB 1,4,7,10,13,16,3,6,9,12,15,2,5,8,11,14 ; SANEND: DB ' SANYO MBC 1000/1100$' ; TEL: LDA DRIVE ;get drive pointer back STA TELDPB+16 ;store it LHLD ADDR ;get bios pointer back MVI B,35 ;number of bytes to move (1+15+1+18) LXI D,TELDPB ;point to new dpb CALL LOOP ;put into memory LXI D,TELEND ;point to end message JMP PRINT ; ; TELDPB: ;type byte DB 0C5H ;televideo dsdd ;dpb DW 36 ;spt DB 4 ;block shift DB 15 ;block mask DB 0 ;extent mask DW 0AAH ;disk size-1 DW 63 ;# of directories-1 DB 80H ;allocation 0 DB 0 ;allocation 1 DW 16 ;dir check size DW 4 ;reserved tracks ;drive DB 1 ;drive selected ;skew table DB 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18 ; TELEND: DB ' TELEVIDEO 802/803$' ; PMC: LDA DRIVE ;get drive pointer back STA PMCDPB+16 ;store it LHLD ADDR ;get bios pointer back MVI B,22 ;number of bytes to move (1+15+1+5) LXI D,PMCDPB ;point to new dpb CALL LOOP ;put into memory LXI D,PMCEND ;point to end message JMP PRINT ; ; PMCDPB: ;type byte DB 0C7H ;pmc type a dsdd ;dpb DW 40 ;spt DB 4 ;block shift DB 15 ;block mask DB 1 ;extent mask DW 194 ;disk size-1 DW 127 ;# of directories-1 DB 192 ;allocation 0 DB 0 ;allocation 1 DW 32 ;dir check size DW 2 ;reserved tracks ;drive DB 1 ;drive selected ;skew table DB 1,2,3,4,5 ; PMCEND: DB ' PMC-101 MicroMate (Type "A")$' ; DEC: LDA DRIVE ;get drive pointer back STA DECDPB+16 ;store it LHLD ADDR ;get bios pointer back MVI B,26 ;number of bytes to move (1+15+1+9) LXI D,DECDPB ;point to new dpb CALL LOOP ;put into memory LXI D,DECEND ;point to end message JMP PRINT ; DECDPB: ;type byte DB 082H ;dec vt180 ssdd ;dpb DW 36 ;spt DB 3 ;block shift DB 7 ;block mask DB 0 ;extent mask DW 0AAH ;disk size-1 DW 63 ;# of directories-1 DB 0C0H ;allocation 0 DB 0 ;allocation 1 DW 16 ;dir check size DW 2 ;reserved tracks ;drive DB 1 ;skew table DB 1,3,5,7,9,2,4,6,8 ; DECEND: DB ' DEC VT180$' ; ; DEC1: LDA DRIVE ;get drive pointer back STA DEC1DPB+16 ;store it LHLD ADDR ;get bios pointer back MVI B,27 ;number of bytes to move (1+15+1+10) LXI D,DEC1DPB ;point to new dpb CALL LOOP ;put into memory LXI D,DEC1END ;point to end message JMP PRINT ; DEC1DPB: ;type byte DB 086H ;dec rainbow ;dpb DW 40 ;spt DB 4 ;block shift DB 15 ;block mask DB 1 ;extent mask DW 0C2H ;disk size-1 DW 127 ;# of directories-1 DB 0C0H ;allocation 0 DB 0 ;allocation 1 DW 32 ;dir check size DW 2 ;reserved tracks ;drive DB 1 ;skew table DB 1,3,5,7,9,2,4,6,8,10 ; DEC1END: DB ' DEC RAINBOW SSDD 96tpi$' ; EGL: LDA DRIVE ;get drive pointer back STA EGLDPB+16 ;store it LHLD ADDR ;get bios pointer back MVI B,22 ;number of bytes to move (1+15+1+5) LXI D,EGLDPB ;point to new dpb CALL LOOP ;put into memory LXI D,EGLEND ;point to end message JMP PRINT ; EGLDPB: ;type byte DB 087H ;eagle 2e-2 ss ;dpb DW 40 ;spt DB 4 ;block shift DB 15 ;block mask DB 1 ;extent mask DW 0C2H ;disk size-1 DW 191 ;# of directories-1 DB 0E0H ;allocation 0 DB 0 ;allocation 1 DW 30H ;dir check size DW 2 ;reserved tracks ;drive DB 1 ;skew table DB 1,3,5,2,4 ; EGLEND: DB ' EAGLE IIE-2 SSDD 96tpi$' ; ACT: LDA DRIVE ;get drive pointer back STA ACTDPB+16 ;store it LHLD ADDR ;get bios pointer back MVI B,26 ;number of bytes to move (1+15+1+9) LXI D,ACTDPB ;point to new dpb CALL LOOP ;put into memory LXI D,ACTEND ;point to end message JMP PRINT ; ACTDPB: ;type byte DB 082H ;actrix (access) ;dpb DW 36 ;spt DB 3 ;block shift DB 7 ;block mask DB 0 ;extent mask DW 0AAH ;disk size-1 DW 63 ;# of directories-1 DB 0C0H ;allocation 0 DB 0 ;allocation 1 DW 16 ;dir check size DW 2 ;reserved tracks ;drive DB 1 ;skew table DB 1,4,7,2,5,8,3,6,9 ; ACTEND: DB 'n ACTRIX (ACCESS) SSDD$' ; ; KAY4: LDA DRIVE ;get drive pointer back STA K4DPB+16 ;store it LHLD ADDR ;get bios pointer back MVI B,27 ;number of bytes to move (1+15+1+10) LXI D,K4DPB ;point to new dpb CALL LOOP ;put into memory LXI D,K4END ;point to end message JMP PRINT ; ; K4DPB: ;type byte DB 0E6H ;kaypro 4/10 dsdd ;dpb DW 40 ;spt DB 4 ;block shift DB 15 ;block mask DB 1 ;extent mask DW (40*79)/16-1 ;disk size-1 DW 63 ;# of directories-1 DB 192 ;allocation 0 DB 0 ;allocation 1 DW 16 ;dir check size DW 1 ;reserved tracks ;drive DB 1 ;default b ;skew table DB 0,1,2,3,4,5,6,7,8,9 ; K4END: DB ' KAYPRO 4/10 DSDD$' ; ; H1: LDA DRIVE ;get drive pointer back STA H1DPB+16 ;store it LHLD ADDR ;get bios pointer back MVI B,33 ;number of bytes to move (1+15+1+16) LXI D,H1DPB ;point to new dpb CALL LOOP ;put into memory LXI D,H1END ;point to end message JMP PRINT ; ; H1DPB: ;type byte DB 081H ;heath/zenith ssdd ;dpb DW 32 ;spt DB 3 ;block shift DB 7 ;block mask DB 0 ;extent mask DW 097H ;disk size-1 DW 127 ;# of directories-1 DB 0F0H ;allocation 0 DB 0 ;allocation 1 DW 32 ;dir check size DW 2 ;reserved tracks ;drive DB 1 ;default to b ;skew table DB 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 ; H1END: DB ' HEATH/ZENITH 89 SSDD$' ; ; H2: LDA DRIVE ;get drive pointer back STA H2DPB+16 ;store it LHLD ADDR ;get bios pointer back MVI B,33 ;number of bytes to move (1+15+1+16) LXI D,H2DPB ;point to new dpb CALL LOOP ;put into memory LXI D,H2END ;point to end message JMP PRINT ; ; H2DPB: ;type byte DB 0C5H ;heath/zenith dsdd ;dpb DW 32 ;spt DB 4 ;block shift DB 15 ;block mask DB 0 ;extent mask DW 09BH ;disk size-1 DW 0FFH ;# of directories-1 DB 0F0H ;allocation 0 DB 0 ;allocation 1 DW 040H ;dir check size DW 2 ;reserved tracks ;drive DB 1 ; ;skew table DB 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 ; H2END: DB ' HEATH/ZENITH 89 DSDD$' ; ; H3: LDA DRIVE ;get drive pointer back STA H3DPB+16 ;store it LHLD ADDR ;get bios pointer back MVI B,26 ;number of bytes to move (1+15+1+9) LXI D,H3DPB ;point to new dpb CALL LOOP ;put into memory LXI D,H3END ;point to end message JMP PRINT ; ; H3DPB: ;type byte DB 086H ;heath w/magnolia ssdd ;dpb DW 36 ;spt DB 4 ;block shift DB 15 ;block mask DB 1 ;extent mask DW 052H ;disk size-1 DW 05FH ;# of directories-1 DB 0C0H ;allocation 0 DB 0 ;allocation 1 DW 018H ;dir check size DW 3 ;reserved tracks ;drive DB 1 ; ;skew table DB 1,2,3,4,5,6,7,8,9 ; H3END: DB ' HEATH w/MAGNOLIA SSDD$' ; ; H4: LDA DRIVE ;get drive pointer back STA H4DPB+16 ;store it LHLD ADDR ;get bios pointer back MVI B,22 ;number of bytes to move (1+15+1+5) LXI D,H4DPB ;point to new dpb CALL LOOP ;put into memory LXI D,H4END ;point to end message JMP PRINT ; ; H4DPB: ;type byte DB 083H ;heath ssxd ;dpb DW 40 ;spt DB 3 ;block shift DB 7 ;block mask DB 0 ;extent mask DW 0BDH ;disk size-1 DW 07FH ;# of directories-1 DB 0F0H ;allocation 0 DB 0 ;allocation 1 DW 020H ;dir check size DW 2 ;reserved tracks ;drive DB 1 ; ;skew table DB 1,2,3,4,5 ; H4END: DB ' HEATH/ZENITH SS EXTENDED DENSITY$' ; ; H5: LDA DRIVE ;get drive pointer back STA H5DPB+16 ;store it LHLD ADDR ;get bios pointer back MVI B,22 ;number of bytes to move (1+15+1+5) LXI D,H5DPB ;point to new dpb CALL LOOP ;put into memory LXI D,H5END ;point to end message JMP PRINT ; ; H5DPB: ;type byte DB 0C7H ;heath dsxd ;dpb DW 40 ;spt DB 4 ;block shift DB 15 ;block mask DB 0 ;extent mask DW 0C2H ;disk size-1 DW 255 ;# of directories-1 DB 0F0H ;allocation 0 DB 0 ;allocation 1 DW 64 ;dir check size DW 2 ;reserved tracks ;drive DB 1 ; ;skew table DB 1,2,3,4,5 ; H5END: DB ' HEATH/ZENITH DS EXTENDED DENSITY$' ; ; H6: LDA DRIVE ;get drive pointer back STA H6DPB+16 ;store it LHLD ADDR ;get bios pointer back MVI B,33 ;number of bytes to move (1+15+1+16) LXI D,H6DPB ;point to new dpb CALL LOOP ;put into memory LXI D,H6END ;point to end message JMP PRINT ; H6DPB: ;type byte DB 085H ;h/z 89 ssdd ;dpb DW 32 ;spt DB 4 ;block shift DB 15 ;block mask DB 1 ;extent mask DW 09BH ;disk size-1 DW 127 ;# of directories-1 DB 0C0H ;allocation 0 DB 0 ;allocation 1 DW 32 ;dir check size DW 2 ;reserved tracks ;drive DB 1 ;skew table DB 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 ; ; H6END: DB ' HEATH/ZENITH SSDD 96tpi$' ; H7: LDA DRIVE ;get drive pointer back STA H7DPB+16 ;store it LHLD ADDR ;get bios pointer back MVI B,33 ;number of bytes to move (1+15+1+16) LXI D,H7DPB ;point to new dpb CALL LOOP ;put into memory LXI D,H7END ;point to end message JMP PRINT ; H7DPB: ;type byte DB 0C5H ;h/z 89 dsdd ;dpb DW 32 ;spt DB 4 ;block shift DB 15 ;block mask DB 0 ;extent mask DW 013BH ;disk size-1 DW 255 ;# of directories-1 DB 0F0H ;allocation 0 DB 0 ;allocation 1 DW 64 ;dir check size DW 2 ;reserved tracks ;drive DB 1 ;skew table DB 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 ; H7END: DB ' HEATH/ZENITH DSDD 96tpi$' ; ; H8: LDA DRIVE ;get drive pointer back STA H8DPB+16 ;store it LHLD ADDR ;get bios pointer back MVI B,22 ;number of bytes to move (1+15+1+5) LXI D,H8DPB ;point to new dpb CALL LOOP ;put into memory LXI D,H8END ;point to end message JMP PRINT ; H8DPB: ;type byte DB 087H ;h/z 89 ssxd ;dpb DW 40 ;spt DB 4 ;block shift DB 15 ;block mask DB 1 ;extent mask DW 0C2H ;disk size-1 DW 127 ;# of directories-1 DB 0C0H ;allocation 0 DB 0 ;allocation 1 DW 32 ;dir check size DW 2 ;reserved tracks ;drive DB 1 ;skew table DB 1,2,3,4,5 ; H8END: DB ' HEATH/ZENITH SSXD 96tpi$' ; H9: LDA DRIVE ;get drive pointer back STA H9DPB+16 ;store it LHLD ADDR ;get bios pointer back MVI B,22 ;number of bytes to move (1+15+1+5) LXI D,H9DPB ;point to new dpb CALL LOOP ;put into memory LXI D,H9END ;point to end message JMP PRINT ; H9DPB: ;type byte DB 0C7H ;h/z 89 dsxd ;dpb DW 40 ;spt DB 4 ;block shift DB 15 ;block mask DB 0 ;extent mask DW 395 ;disk size-1 DW 255 ;# of directories-1 DB 0F0H ;allocation 0 DB 0 ;allocation 1 DW 64 ;dir check size DW 2 ;reserved tracks ;drive DB 1 ;skew table DB 1,2,3,4,5 ; H9END: DB ' HEATH/ZENITH DSXD 96tpi$' ; H10: LDA DRIVE ;get drive pointer back STA H10DPB+16 ;store it LHLD ADDR ;get bios pointer back MVI B,25 ;number of bytes to move (1+15+1+8) LXI D,H10DPB ;point to new dpb CALL LOOP ;put into memory LXI D,H10END ;point to end message JMP PRINT ; H10DPB: ;type byte DB 82H ;h/z 100 ssdd ;dpb DW 20H ;spt DB 3 ;block shift DB 7 ;block mask DB 0 ;extent mask DW 97H ;disk size-1 DW 127 ;# of directories-1 DB 0F0H ;allocation 0 DB 0 ;allocation 1 DW 32 ;dir check size DW 2 ;reserved tracks ;drive DB 1 ;skew table DB 1,2,3,4,5,6,7,8 ; H10END: DB ' HEATH/ZENITH 100 SSDD$' ; H11: LDA DRIVE ;get drive pointer back STA H11DPB+16 ;store it LHLD ADDR ;get bios pointer back MVI B,25 ;number of bytes to move (1+15+1+8) LXI D,H11DPB ;point to new dpb CALL LOOP ;put into memory LXI D,H11END ;point to end message JMP PRINT ; H11DPB: ;type byte DB 0C6H ;h/z 100 dsdd ;dpb DW 20H ;spt DB 4 ;block shift DB 15 ;block mask DB 1 ;extent mask DW 9BH ;disk size-1 DW 255 ;# of directories-1 DB 0F0H ;allocation 0 DB 0 ;allocation 1 DW 64 ;dir check size DW 2 ;reserved tracks ;drive DB 1 ;skew table DB 1,2,3,4,5,6,7,8 ; H11END: DB ' HEATH/ZENITH 100 DSDD$' ; H12: LDA DRIVE ;get drive pointer back STA H12DPB+16 ;store it LHLD ADDR ;get bios pointer back MVI B,27 ;number of bytes to move (1+15+1+10) LXI D,H12DPB ;point to new dpb CALL LOOP ;put into memory LXI D,H12END ;point to end message JMP PRINT ; H12DPB: ;type byte DB 01H ;h/z 89 sssd ;dpb DW 14H ;spt DB 3 ;block shift DB 7 ;block mask DB 0 ;extent mask DW 5BH ;disk size-1 DW 63 ;# of directories-1 DB 0C0H ;allocation 0 DB 0 ;allocation 1 DW 16 ;dir check size DW 3 ;reserved tracks ;drive DB 1 ;skew table DB 1,2,3,4,5,6,7,8,9,10 ; H12END: DB ' HEATH/ZENITH 89 SSSD$' ; ; NEC: LDA DRIVE ;get drive pointer back STA NECDPB+16 ;store it LHLD ADDR ;get bios pointer back MVI B,33 ;number of bytes to move (1+15+1+16) LXI D,NECDPB ;point to new dpb CALL LOOP ;put into memory LXI D,NECEND ;point to end message JMP PRINT ; ; NECDPB: ;type byte DB 081H ;nec pc8001a ;dpb DW 32 ;spt DB 3 ;block shift DB 7 ;block mask DB 0 ;extent mask DW 097H ;disk size-1 DW 03FH ;# of directories-1 DB 0C0H ;allocation 0 DB 0 ;allocation 1 DW 16 ;dir check size DW 2 ;reserved tracks ;drive DB 1 ; ;skew table DB 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 ; NECEND: DB ' NEC PC8001A$' ; ; IBMSS: LDA DRIVE ;get drive pointer back STA IBMDPB+16 ;store it LHLD ADDR ;get bios pointer back MVI B,25 ;number of bytes to move (1+15+1+8) LXI D,IBMDPB ;point to new dpb CALL LOOP ;put into memory LXI D,IBMEND ;point to end message JMP PRINT ; ; IBMDPB: ;type byte DB 082H ;ibm ssdd (cp/m 86) ;dpb DW 32 ;spt DB 3 ;block shift DB 7 ;block mask DB 0 ;extent mask DW 09BH ;disk size-1 DW 03FH ;# of directories-1 DB 0C0H ;allocation 0 DB 0 ;allocation 1 DW 16 ;dir check size DW 1 ;reserved tracks ;drive DB 1 ;skew table DB 1,2,3,4,5,6,7,8 ; IBMEND: DB 'n IBM SSDD (CP/M 86)$' ; ; TISS: LDA DRIVE ;get drive back STA T1DPB+16 ;store it LHLD ADDR ;get bios pointer back MVI B,25 ;number of bytes to move (1+15+1+8) LXI D,T1DPB ;point to new dpb CALL LOOP ;put into memory LXI D,T1END ;point to end message JMP PRINT ; ; T1DPB: ;type byte DB 082H ;ti pro ssdd (cp/m 86) ;dpb DW 32 ;spt DB 3 ;block shift DB 7 ;block mask DB 0 ;extent mask DW 09BH ;disk size-1 DW 03FH ;# of directories-1 DB 0C0H ;allocation 0 DB 0 ;allocation 1 DW 16 ;dir check size DW 1 ;reserved tracks ;drive DB 1 ; ;skew table DB 1,2,3,4,5,6,7,8 ; T1END: DB ' TI Pro SSDD (CP/M 86)$' ; ; XERDD: LDA DRIVE ;get drive back STA XDDDPB+16 ;store it LHLD ADDR ;get bios pointer back MVI B,35 ;number of bytes to move (1+15+1+18) LXI D,XDDDPB ;point to new dpb CALL LOOP ;put into memory LXI D,XDDEND ;point to end message JMP PRINT ; ; XDDDPB: ;type byte DB 081H ;xerox 820-ii ssdd ;dpb DW 34 ;spt DB 3 ;block shift DB 7 ;block mask DB 0 ;extent mask DW 09CH ;disk size-1 DW 03FH ;# of directories-1 DB 0C0H ;allocation 0 DB 0 ;allocation 1 DW 16 ;dir check size DW 3 ;reserved tracks ;drive DB 1 ; ;skew table DB 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18 ; XDDEND: DB ' XEROX 820-II SSDD$' ; ; XERSD: LDA DRIVE ;get drive back STA XSDDPB+16 ;store it LHLD ADDR ;get bios pointer back MVI B,35 ;number of bytes to move (1+15+1+18) LXI D,XSDDPB ;point to new dpb CALL LOOP ;put into memory LXI D,XSDEND ;point to end message JMP PRINT ; ; XSDDPB: ;type byte DB 0 ;xerox 820-i sssd ;dpb DW 18 ;spt DB 3 ;block shift DB 7 ;block mask DB 0 ;extent mask DW 052H ;disk size-1 DW 01FH ;# of directories-1 DB 080H ;allocation 0 DB 0 ;allocation 1 DW 8 ;dir check size DW 3 ;reserved tracks ;drive DB 1 ; ;skew table DB 1,6,11,16,3,8,13,18,5,10,15,2,7,12,17,4,9,14 ; XSDEND: DB ' XEROX 820-I SSSD$' ; ; TRS80: LDA DRIVE ;get drive back STA TRSDPB+16 ;store it LHLD ADDR ;get bios pointer back MVI B,35 ;number of bytes to move (1+15+1+18) LXI D,TRSDPB ;point to new dpb CALL LOOP ;put into memory LXI D,TRSEND ;point to end message JMP PRINT ; ; TRSDPB: ;type byte DB 0 ;trs-80 1 w/ omikron sssd ;dpb DW 18 ;spt DB 3 ;block shift DB 7 ;block mask DB 0 ;extent mask DW 052H ;disk size-1 DW 03FH ;# of directories-1 DB 0C0H ;allocation 0 DB 0 ;allocation 1 DW 16 ;dir check size DW 3 ;reserved tracks ;drive DB 1 ; ;skew table DB 1,5,9,13,17,3,7,11,15,2,6,10,14,18,4,8,12,16 ; TRSEND: DB ' TRS80-1 w/OMIKRON SSSD$' ; ; LOBO: LDA DRIVE ;get drive back STA LSSDPB+16 ;store it LHLD ADDR ;get bios pointer back MVI B,35 ;number of bytes to move (1+15+1+18) LXI D,LSSDPB ;point to new dpb CALL LOOP ;put into memory LXI D,LSSEND ;point to end message JMP PRINT ; ; LSSDPB: ;type byte DB 081H ;lobo max-80 ssdd ;dpb DW 36 ;spt DB 3 ;block shift DB 7 ;block mask DB 0 ;extent mask DW 0A5H ;disk size-1 DW 03FH ;# of directories-1 DB 0C0H ;allocation 0 DB 0 ;allocation 1 DW 16 ;dir check size DW 3 ;reserved tracks ;drive DB 1 ; ;skew table DB 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 ; LSSEND: DB ' LOBO MAX-80 SSDD$' ; ; LOBO1: LDA DRIVE ;get drive back STA LDSDPB+16 ;store it LHLD ADDR ;get bios pointer back MVI B,35 ;number of bytes to move (1+15+1+18) LXI D,LDSDPB ;point to new dpb CALL LOOP ;put into memory LXI D,LDSEND ;point to end message JMP PRINT ; ; LDSDPB: ;type byte DB 0C5H ;lobo max-80 dsdd ;dpb DW 36 ;spt DB 4 ;block shift DB 15 ;block mask DB 0 ;extent mask DW 0ACH ;disk size-1 DW 07FH ;# of directories-1 DB 0C0H ;allocation 0 DB 0 ;allocation 1 DW 32 ;dir check size DW 3 ;reserved tracks ;drive DB 1 ; ;skew table DB 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 ; LDSEND: DB ' LOBO MAX-80 DSDD$' ; ; MOR: LDA DRIVE ;get drive back STA MSSDPB+16 ;store it LHLD ADDR ;get bios pointer back MVI B,22 ;number of bytes to move (1+15+1+5) LXI D,MSSDPB ;point to new dpb CALL LOOP ;put into memory LXI D,MSSEND ;point to end message JMP PRINT ; ; MSSDPB: ;type byte DB 087H ;morrow md2 ssdd ;dpb DW 40 ;spt DB 4 ;block shift DB 15 ;block mask DB 1 ;extent mask DW 05EH ;disk size-1 DW 07FH ;# of directories-1 DB 0C0H ;allocation 0 DB 0 ;allocation 1 DW 32 ;dir check size DW 2 ;reserved tracks ;drive DB 1 ; ;skew table DB 1,4,2,5,3 ; MSSEND: DB ' MORROW MD2 SSDD$' ; ; MOR1: LDA DRIVE ;get drive back STA MDSDPB+16 ;store it LHLD ADDR ;get bios pointer back MVI B,22 ;number of bytes to move (1+15+1+5) LXI D,MDSDPB ;point to new dpb CALL LOOP ;put into memory LXI D,MDSEND ;point to end message JMP PRINT ; ; MDSDPB: ;type byte DB 0C7H ;morrow md3 dsdd ;dpb DW 40 ;spt DB 4 ;block shift DB 15 ;block mask DB 1 ;extent mask DW 0C2H ;disk size-1 DW 0BFH ;# of directories-1 DB 0E0H ;allocation 0 DB 0 ;allocation 1 DW 48 ;dir check size DW 2 ;reserved tracks ;drive DB 1 ; ;skew table DB 1,4,2,5,3 ; MDSEND: DB ' MORROW MD3 DSDD$' ; ; OSB: LDA DRIVE ;get drive back STA OSBDPB+16 ;store it LHLD ADDR ;get bios pointer back MVI B,22 ;number of bytes to move (1+15+1+5) LXI D,OSBDPB ;point to new dpb CALL LOOP ;put into memory LXI D,OSBEND ;point to end message JMP PRINT ; ; OSBDPB: ;type byte DB 083H ;osborne 2 ssdd ;dpb DW 40 ;spt DB 3 ;block shift DB 7 ;block mask DB 0 ;extent mask DW 0B8H ;disk size-1 DW 03FH ;# of directories-1 DB 0C0H ;allocation 0 DB 0 ;allocation 1 DW 16 ;dir check size DW 3 ;reserved tracks ;drive DB 1 ; ;skew table DB 1,2,3,4,5 ; OSBEND: DB 'n OSBORNE 2 SSDD$' ; OS1: LDA DRIVE ;get drive back STA OS1DPB+16 ;store it LHLD ADDR ;get bios pointer back MVI B,27 ;number of bytes to move (1+15+1+10) LXI D,OS1DPB ;point to new dpb CALL LOOP ;put into memory LXI D,OS1END ;point to end message JMP PRINT ; ; OS1DPB: ;type byte DB 05H ;osborne 1 sssd ;dpb DW 14H ;spt DB 4 ;block shift DB 15 ;block mask DB 1 ;extent mask DW 2DH ;disk size-1 DW 3FH ;# of directories-1 DB 80H ;allocation 0 DB 0 ;allocation 1 DW 16 ;dir check size DW 3 ;reserved tracks ;drive DB 1 ; ;skew table DB 1,3,5,7,9,2,4,6,8,10 ; OS1END: DB 'n OSBORNE 1 SSSD$' ; ; TRS3: LDA DRIVE ;get drive back STA T3DPB+16 ;store it LHLD ADDR ;get bios pointer back MVI B,27 ;number of bytes to move (1+15+1+10) LXI D,T3DPB ;point to new dpb CALL LOOP ;put into memory LXI D,T3END ;point to end message JMP PRINT ; ; T3DPB: ;type byte DB 86H ;trs80- w/memory merchant cp/m ssdd ;dpb DW 40 ;spt DB 4 ;block shift DB 15 ;block mask DB 1 ;extent mask DW 5EH ;disk size-1 DW 7FH ;# of directories-1 DB 0C0H ;allocation 0 DB 0 ;allocation 1 DW 32 ;dir check size DW 2 ;reserved tracks ;drive DB 1 ; ;skew table DB 1,2,3,4,5,6,7,8,9,10 ; T3END: DB ' TRS80-3 w/MEMORY MERCHANT CP/M SSDD$' ; TRS4: LDA DRIVE ;get drive back STA T4DPB+16 ;store it LHLD ADDR ;get bios pointer back MVI B,35 ;number of bytes to move (1+15+1+18) LXI D,T4DPB ;point to new dpb CALL LOOP ;put into memory LXI D,T4END ;point to end message JMP PRINT ; ; T4DPB: ;type byte DB 81H ;trs80-4 w/montezuma cp/m ssdd ;dpb DW 36 ;spt DB 4 ;block shift DB 15 ;block mask DB 1 ;extent mask DW 54H ;disk size-1 DW 7FH ;# of directories-1 DB 0C0H ;allocation 0 DB 0 ;allocation 1 DW 32 ;dir check size DW 2 ;reserved tracks ;drive DB 1 ; ;skew table DB 1,3,5,7,9,11,13,15,17,2,4,6,8,10,12,14,16,18 ; T4END: DB ' TRS80-4 w/MONTEZUMA CP/M SSDD$' IBM3740: lhld 1 ; set double speed bit mvi l,74h mov a,m ori 80h mov m,a LDA DRIVE ;get drive back STA IBM3740DPB+16 ;store it LHLD ADDR ;get bios pointer back MVI B,43 ;number of bytes to move (1+15+1+26) LXI D,IBM3740DPB ;point to new dpb CALL LOOP2 ;put into memory LXI D,IBM3740END ;point to end message JMP PRINT ; ; IBM3740DPB: ;type byte DB 00H ; IBM 3740 ;dpb DW 26 ;spt DB 3 ;block shift DB 7 ;block mask DB 0 ;extent mask DW 242 ;disk size-1 DW 63 ;# of directories-1 DB 192 ;allocation 0 DB 0 ;allocation 1 DW 16 ;dir check size DW 2 ;reserved tracks ;drive DB 1 ; ;skew table DB 1,7,13,19,25,5,11,17,23,3,9,15,21 DB 2,8,14,20,26,6,12,18,24,4,10,16,22 ; IBM3740END: DB ' SSSD IBM 3740 8"$' ; ; DS 64 ;32 level stack STACK: ; OLDSP: DS 2 ;room for old stack pointer ; ; ; END BEGIN