.xlist ;-------------------------------- ; AUTHOR Marcus G. Calescibetta ; DATE October 15, 1983 ; VERSION 2.2 ;-------------------------------- false equ 0 true equ not false ;;--------------- ;; DRIVE EQUATES ;;--------------- nodrive equ 00fh f548 equ 01f0h f596 equ 01f1h f8 equ 01f2h dma55 equ 0200h st503 equ 0101h st506 equ 0102h tm601s equ 0103h tm602s equ 0104h tm603s equ 0105h tm603se equ 0206h tm501 equ 0107h tm502 equ 0208h tm503 equ 0209h sa602 equ 010ah sa604 equ 010bh sa606 equ 010ch sa1002 equ 010dh sa1004 equ 010eh q2010 equ 010fh q2020 equ 0210h q2030 equ 0311h q2040 equ 0412h m4010 equ 0113h m4020 equ 0214h dma5 equ 0115h maxhst defl 0 maxusg defl 0 frst8 defl 0ffffh frst548 defl 0ffffh frst596 defl 0ffffh ;;------------------------------------ ;; MACRO - DISK PARAMETER DEFINITIONS ;;------------------------------------ dskdef macro drvstr .lall ;------------------ ; SYSTEM DRIVE MAP ;------------------ .xall hpdno defl 0 fpdno defl 0 dno defl 0 ;; logical drv no. of our drvs cnt defl 0 ;; cnt of how many entrys made drvmap: irp drvtyp, if drvtyp lt 16 xdmap %drvtyp ;; enter previous drv into dmap cnt defl cnt+1 else if drvtyp eq nodrive xxdmap ;; enter no drv entry into dmap cnt defl cnt+1 else if (drvtyp eq f8) or (drvtyp eq f548) or (drvtyp eq f596) dmap %dno,drvtyp,%fpdno fpdno defl fpdno+1 dno defl dno+1 cnt defl cnt+1 else repô (drvtyð shò 8© ;» enteò logicaì drvó intï dmap dmap %dno,drvtyp,%hpdno dno defl dno+1 cnt defl cnt+1 endm hpdno defl hpdno+1 endif endif endif endm rept (010h-cnt) ;; fill in rest of drive map xxdmap endm dno defl 0 hpdno defl 0 fpdno defl 0 irp drvtyp, ;;-------------------------------- ;; 5.25" 48-TPI FLOPPY DISK DRIVE ;;-------------------------------- if drvtyp eq f548 dph %dno,drvtyp if frst548 eq 0ffffh fdpb548: ;;----------------------------------------------------- ;; XEROX 820, KAYPRO II SINGLE DENSITY FORMAT ;;----------------------------------------------------- ;; ;; dpb 10,18,3,7,0,82,31,8,3,1024 ;; ;;----------------------------------------------------- ;; OSBORNE SINGLE DENSITY FORMAT ;;----------------------------------------------------- ;; ;; dpb 10,20,4,15,1,45,63,16,3,2048 ;; ;;----------------------------------------------------- dpb 10,20,4,15,1,45,63,16,3,2048 dpb 11,32,4,15,0,77,63,32,1,2048 dpb 12,64,4,15,0,155,127,32,1,2048 fddb548: ;;----------------------------------------------------- ;; XEROX 820, KAYPRO II SINGLE DENSITY FORMAT ;;----------------------------------------------------- ;; ;; ddb 10,%fpdno,0,0,1024,128,64,1 ;; ;;----------------------------------------------------- ;; OSBORNE SINGLE DENSITY FORMAT ;;----------------------------------------------------- ;; ;; ddb 10,%fpdno,0,0,2048,256,64,1 ;; ;;----------------------------------------------------- ddb 10,%fpdno,0,0,2048,256,64,1 ddb 11,%fpdno,0,0,2048,1024,4,1 ddb 12,%fpdno,0,0,2048,1024,4,2 tran548: ;;----------------------------------------------------- ;; XEROX 820, KAYPRO II SINGLE DENSITY FORMAT ;;----------------------------------------------------- ;; ;; db 1,6,11,16,3,8,13,18,5 ;; db 10,15,2,7,12,17,4,9,14 ;; ds 8,0ffh ;; ;;----------------------------------------------------- ;; OSBORNE SINGLE DENSITY FORMAT ;;----------------------------------------------------- ;; ;; db 2,3,6,7,10,11,14,15,18,19 ;; db 4,5,8,9,12,13,16,17,20,21 ;; ds 6,0ffh ;; ;;----------------------------------------------------- db 2,3,6,7,10,11,14,15,18,19 db 4,5,8,9,12,13,16,17,20,21 ds 6,0ffh frst548 defl 0 endif alvcsv %dno,155,32 dno defl dno+1 endif ;;-------------------------------- ;; 5.25" 96-TPI FLOPPY DISK DRIVE ;;-------------------------------- if drvtyp eq f596 dph %dno,drvtyp if frst596 eq 0ffffh fdpb596: dpb 20,18,3,7,0,82,63,16,3,1024 dpb 21,32,4,15,0,150,63,32,1,2048 dpb 22,64,4,15,0,300,127,32,1,2048 fddb596: ddb 20,%fpdno,0,0,1024,128,32,1 ddb 21,%fpdno,0,0,2048,1024,4,1 ddb 22,%fpdno,0,0,2048,1024,4,2 tran596: 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 frst596 defl 0 endif alvcsv %dno,300,32 dno defl dno+1 endif ;;---------------------- ;; 8" FLOPPY DISK DRIVE ;;---------------------- if drvtyp eq f8 dph %dno,drvtyp if frst8 eq 0ffffh fdpb8: dpb 30,26,3,7,0,242,63,16,2,1024 dpb 31,64,4,15,0,303,127,32,1,2048 dpb 32,128,4,15,0,607,255,32,1,2048 fddb8: ddb 30,%fpdno,0,0,1024,128,32,1 ddb 31,%fpdno,0,0,2048,1024,8,1 ddb 32,%fpdno,0,0,2048,1024,8,2 tran8: 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 frst8 defl 0 endif alvcsv %dno,607,32 dno defl dno+1 endif ;;-------------------------------- ;; DMA MICRO MAGNUM 5/5 HARD DISK ;;-------------------------------- if drvtyp eq dma55 dph %dno dph %dno+1 dpb %dno+0,128,5,31,1,1219,511,0,1,4096 dpb %dno+1,128,5,31,1,1219,511,0,1,4096 ddb %dno+0,%hpdno,2,15,4096,256,32,2 ddb %dno+1,%hpdno,0,15,4096,256,32,2 alvcsv %dno+0,1219,0 alvcsv %dno+1,1219,0 dno defl dno+2 endif ;;------------------------------ ;; DMA MICRO MAGNUM 5 HARD DISK ;;------------------------------ if drvtyp eq dma5 dph %dno dpb %dno+0,128,5,31,1,1219,511,0,1,4096 ddb %dno+0,%hpdno,0,15,4096,256,32,2 alvcsv %dno+0,1219,0 dno defl dno+1 endif ;;------------------ ;; ST 503 HARD DISK ;;------------------ if drvtyp eq st503 dph %dno dpb %dno+0,128,5,31,1,607,511,0,1,4096 ddb %dno+0,%hpdno,0,0,4096,512,16,2 alvcsv %dno+0,607,0 dno defl dno+1 endif ;;------------------ ;; ST 506 HARD DISK ;;------------------ if drvtyp eq st506 dph %dno dpb %dno+0,256,5,31,1,1215,511,0,1,4096 ddb %dno+0,%hpdno,0,0,4096,512,16,4 alvcsv %dno+0,1215,0 dno defl dno+1 endif ;;------------------- ;; TM 601S HARD DISK ;;------------------- if drvtyp eq tm601S dph %dno dpb %dno+0,128,5,31,1,607,511,0,1,4096 ddb %dno+0,%hpdno,0,0,4096,512,16,2 alvcsv %dno+0,607,0 dno defl dno+1 endif ;;------------------- ;; TM 602S HARD DISK ;;------------------- if drvtyp eq tm602S dph %dno dpb %dno+0,256,5,31,1,1215,511,0,1,4096 ddb %dno+0,%hpdno,0,0,4096,512,16,4 alvcsv %dno+0,1215,0 dno defl dno+1 endif ;;------------------- ;; TM 603S HARD DISK ;;------------------- if drvtyp eq tm603S dph %dno dpb %dno+0,384,5,31,1,1823,1023,0,1,4096 ddb %dno+0,%hpdno,0,0,4096,512,16,6 alvcsv %dno+0,1823,0 dno defl dno+1 endif ;;-------------------- ;; TM 603SE HARD DISK ;;-------------------- if drvtyp eq tm603SE dph %dno dph %dno+1 dpb %dno+0,384,5,31,1,2047,1023,0,1,4096 dpb %dno+1,384,5,31,1,699,511,0,172,4096 ddb %dno+0,%hpdno,0,0,4096,512,16,6 ddb %dno+1,%hpdno,0,0,4096,512,16,6 alvcsv %dno+0,2047,0 alvcsv %dno+1,699,0 dno defl dno+2 endif ;;------------------ ;; TM 501 HARD DISK ;;------------------ if drvtyp eq tm501 dph %dno dpb %dno+0,128,5,31,1,1219,511,0,1,4096 ddb %dno+0,%hpdno,0,3,4096,512,16,2 alvcsv %dno+0,1219,0 dno defl dno+1 endif ;;------------------ ;; TM 502 HARD DISK ;;------------------ if drvtyp eq tm502 dph %dno dph %dno+1 dpb %dno+0,256,5,31,1,2047,1023,0,1,4096 dpb %dno+1,256,5,31,1,391,511,0,257,4096 ddb %dno+0,%hpdno,0,3,4096,512,16,4 ddb %dno+1,%hpdno,0,3,4096,512,16,4 alvcsv %dno+0,2047,0 alvcsv %dno+1,391,0 dno defl dno+2 endif ;;------------------ ;; TM 503 HARD DISK ;;------------------ if drvtyp eq tm503 dph %dno dph %dno+1 dpb %dno+0,384,5,31,1,2047,1023,0,1,4096 dpb %dno+1,384,5,31,1,1611,1023,0,172,4096 ddb %dno+0,%hpdno,0,3,4096,512,16,6 ddb %dno+1,%hpdno,0,3,4096,512,16,6 alvcsv %dno+0,2047,0 alvcsv %dno+1,1611,0 dno defl dno+2 endif ;;------------------ ;; SA 602 HARD DISK ;;------------------ if drvtyp eq sa602 dph %dno dpb %dno+0,128,5,31,1,635,511,0,1,4096 ddb %dno+0,%hpdno,0,3,4096,512,16,2 alvcsv %dno+0,635,0 dno defl dno+1 endif ;;------------------ ;; SA 604 HARD DISK ;;------------------ if drvtyp eq sa604 dph %dno dpb %dno+0,256,5,31,1,1271,511,0,1,4096 ddb %dno+0,%hpdno,0,3,4096,512,16,4 alvcsv %dno+0,1271,0 dno defl dno+1 endif ;;------------------ ;; SA 606 HARD DISK ;;------------------ if drvtyp eq sa606 dph %dno dpb %dno+0,384,5,31,1,1907,1023,0,1,4096 ddb %dno+0,%hpdno,0,3,4096,512,16,6 alvcsv %dno+0,1907,0 dno defl dno+1 endif ;;------------------- ;; SA 1002 HARD DISK ;;------------------- if drvtyp eq sa1002 dph %dno dpb %dno+0,128,5,31,1,1019,511,0,1,4096 ddb %dno+0,%hpdno,0,0,4096,512,16,2 alvcsv %dno+0,1019,0 dno defl dno+1 endif ;;------------------- ;; SA 1004 HARD DISK ;;------------------- if drvtyp eq sa1004 dph %dno dpb %dno+0,256,5,31,1,2039,1023,0,1,4096 ddb %dno+0,%hpdno,0,0,4096,512,16,4 alvcsv %dno+0,2039,0 dno defl dno+1 endif ;;------------------------ ;; QUANTUM 2010 HARD DISK ;;------------------------ if drvtyp eq q2010 dph %dno dpb %dno+0,128,5,31,1,2043,1023,0,1,4096 ddb %dno+0,%hpdno,0,0,4096,512,16,2 alvcsv %dno+0,2043,0 dno defl dno+1 endif ;;------------------------ ;; QUANTUM 2020 HARD DISK ;;------------------------ if drvtyp eq q2020 dph %dno dph %dno+1 ;; ;; Partion drive by track offset (use Q2020 loader) ;; ;; dpb %dno+0,256,5,31,1,2047,1023,0,1,4096 ;; dpb %dno+1,256,5,31,1,2039,1023,0,257,4096 ;; ddb %dno+0,%hpdno,0,0,4096,512,16,4 ;; ddb %dno+1,%hpdno,0,0,4096,512,16,4 ;; alvcsv %dno+0,2047,0 ;; alvcsv %dno+1,2039,0 ;; ;; Partion drive by head offset (use Q2010 loader) ;; ;; dpb %dno+0,128,5,31,1,2043,1023,0,1,4096 ;; dpb %dno+1,128,5,31,1,2043,1023,0,1,4096 ;; ddb %dno+0,%hpdno,0,0,4096,512,16,4 ;; ddb %dno+1,%hpdno,2,0,4096,512,16,4 ;; alvcsv %dno+0,2043,0 ;; alvcsv %dno+1,2043,0 ;; dpb %dno+0,128,5,31,1,2043,1023,0,1,4096 dpb %dno+1,128,5,31,1,2043,1023,0,1,4096 ddb %dno+0,%hpdno,0,0,4096,512,16,4 ddb %dno+1,%hpdno,2,0,4096,512,16,4 alvcsv %dno+0,2043,0 alvcsv %dno+1,2043,0 dno defl dno+2 endif ;;------------------------ ;; QUANTUM 2030 HARD DISK ;;------------------------ if drvtyp eq q2030 dph %dno dph %dno+1 dph %dno+2 dpb %dno+0,384,5,31,1,2047,1023,0,1,4096 dpb %dno+1,384,5,31,1,2047,1023,0,172,4096 dpb %dno+2,384,5,31,1,2031,1023,0,343,4096 ddb %dno+0,%hpdno,0,0,4096,512,16,6 ddb %dno+1,%hpdno,0,0,4096,512,16,6 ddb %dno+2,%hpdno,0,0,4096,512,16,6 alvcsv %dno+0,2047,0 alvcsv %dno+1,2047,0 alvcsv %dno+2,2031,0 dno defl dno+3 endif ;;------------------------ ;; QUANTUM 2040 HARD DISK ;;------------------------ if drvtyp eq q2040 dph %dno dph %dno+1 dph %dno+2 dph %dno+3 dpb %dno+0,512,5,31,1,2047,1023,0,1,4096 dpb %dno+1,512,5,31,1,2047,1023,0,129,4096 dpb %dno+2,512,5,31,1,2047,1023,0,257,4096 dpb %dno+3,512,5,31,1,2031,1023,0,385,4096 ddb %dno+0,%hpdno,0,0,4096,512,16,8 ddb %dno+1,%hpdno,0,0,4096,512,16,8 ddb %dno+2,%hpdno,0,0,4096,512,16,8 ddb %dno+3,%hpdno,0,0,4096,512,16,8 alvcsv %dno+0,2047,0 alvcsv %dno+1,2047,0 alvcsv %dno+2,2047,0 alvcsv %dno+3,2031,0 dno defl dno+4 endif ;;--------------------------- ;; MINISCRIBE 4010 HARD DISK ;;--------------------------- if drvtyp eq m4010 dph %dno dpb %dno+0,128,5,31,1,1915,1023,0,1,4096 ddb %dno+0,%hpdno,0,0,4096,512,16,2 alvcsv %dno+0,1915,0 dno defl dno+1 endif ;;--------------------------- ;; MINISCRIBE 4020 HARD DISK ;;--------------------------- if drvtyp eq m4020 dph %dno dph %dno+1 dpb %dno+0,256,5,31,1,2047,1023,0,1,4096 dpb %dno+1,256,5,31,1,1783,1023,0,257,4096 ddb %dno+0,%hpdno,0,0,4096,512,16,4 ddb %dno+1,%hpdno,0,0,4096,512,16,4 alvcsv %dno+0,2047,0 alvcsv %dno+1,1783,0 dno defl dno+2 endif if (drvtyp eq f8) or (drvtyp eq f548) or (drvtyp eq f596) fpdno defl fpdno+1 else if drvtyp gt 15 hpdno defl hpdno+1 endif endif endm if frst8 eq 0ffffh fdpb8: ; no 8" floppy used but need label fddb8: ; no 8" floppy used but need label tran8: ; no 8" floppy used but need label endif if frst548 eq 0ffffh fdpb548: ; no 5"-48 tpi drv used but need label fddb548: ; no 5"-48 tpi drv used but need label tran548: ; no 5"-48 tpi drv used but need label endif if frst596 eq 0ffffh fdpb596: ; no 5"-96 tpi drv used but need label fddb596: ; no 5"-96 tpi drv used but need label tran596: ; no 5"=96 tpi drv used but need label endif hstbuf: ds maxhst ; maximum host buffer size usgblk: ds maxusg ; maximum # host sectors / block dirbuf: ds 128d ; cp/m directory buffer storage endm ;;------------------- ;; MACRO - DRIVE MAP ;;------------------- dmap macro dn,drvtyp,pdno if drvtyp eq f548 db 1,pdno ; 5" - 48 tpi floppy dw dph&dn,ddb&10 else if drvtyp eq f596 db 2,pdno ; 5" - 96 tpi floppy dw dph&dn,ddb&20 else if drvtyp eq f8 db 3,pdno ; 8" floppy dw dph&dn,ddb&30 else db 0,pdno ; hard disk dw dph&dn,ddb&dn endif endif endif endm xdmap macro dn db 010h,dn ; other bio's drive dw 0,0 endm xxdmap macro db 0ffh,0ffh ; no drive selected dw 0ffffh,0ffffh endm ;;--------------------------- ;; MACRO - DISK HEADER BLOCK ;;--------------------------- dph macro dn,dtyp .lall ;------------------- ; DISK HEADER BLOCK ;------------------- .xall dph&dn: dw 0000 ; translation vector dw 0000 ; scratch pad 1 dw 0000 ; scratch pad 2 dw 0000 ; scratch pad 3 dw dirbuf ; dirbuf addr ifb dw dpb&dn ; dpb addr for hrd dsk else dw 0 ; dpb addr for fpy filled in dynamicly endif dw csv&dn ; directory check vector dw alv&dn ; disk allocation vector endm ;;------------------------------ ;; MACRO - DISK PARAMETER BLOCK ;;------------------------------ dpb macro dn,spt,bsh,blm,exm,dsm,drm,cks,off,bsiz .lall ;---------------------- ; DISK PARAMETER BLOCK ;---------------------- .xall dpb&dn: dw spt ; cpm sectors per track db bsh ; block shift factor db blm ; block mask db exm ; extent mask dw dsm ; no. blocks on drive dw drm ; no. directory entrys rsvdir dn,drm,bsiz ;;reserved directory blocks dw cks ; no. directory entries to check dw off ; track offset endm ;;------------------------------- ;; MACRO - DISK DEBLOCKING BLOCK ;;------------------------------- ddb macro dn,pd,hdoff,srate,bsiz,hsiz,hsspt,hhd .lall ;----------------------- ; DISK DEBLOCKING BLOCK ;----------------------- .xall ddb&dn: dw hsiz ; host sec size ssiz hsiz ;;sdh register sector size db pd ; physical drive no. db hdoff ; head offset (for partioning by hds) db srate ; cmd register step rate db hsspt-1 ; host sec per trk - 1 (hst sec msk) db (bsiz/hsiz)-1 ; host sec per blk - 1 (blk sec msk) shff ((hsiz/128)*hsspt) ;;calc log2 cpm spt shff (bsiz/128) ;;calc log2 cpm spb db hhd-1 ; heads - 1 shff (hsiz/128) ;;calc log2 cpm sps db (hsiz/128)-1 ; cpm sps - 1 if hsiz gt maxhst maxhst defl hsiz endif if (bsiz/hsiz) gt maxusg maxusg defl (bsiz/hsiz) endif endm ;;-------------------------------------- ;; MACRO - COMPUTE ALV AND CSV BUF SIZE ;;-------------------------------------- alvcsv macro dn,dsm,cks .lall ;--------------------------------------- ; DRIVE ALLOCATION AND CHECK SUM VECTOR ;--------------------------------------- .xall alv&dn: ds (dsm/8)+1 ; drive block allocation vector csv&dn: ds cks ; drive directory check vector endm ;;-------------------------------------- ;; MACRO - COMPUTE NO. DIRECTORY BLOCKS ;;-------------------------------------- rsvdir macro dn,drm,bsiz x defl ((drm+1)/(bsiz/32)) y defl 080h done defl 0 al0&dn defl 0 al1&dn defl 0 rept 8 if x eq 0 db al0&dn ; directory block allocation 0 db al1&dn ; directory block allocation 1 done defl 0ffh exitm endif al0&dn defl al0&dn or y y defl y shr 1 x defl x-1 endm y defl 080h if done eq 0 rept 8 if x eq 0 db al0&dn ; directory block allocation 0 db al1&dn ; directory block allocation 1 done defl 0ffh exitm endif al1&dn defl al1&dn or y y defl y shr 1 x defl x-1 endm endif if done eq 0 db al0&dn ; directory block allocation 0 db al1&dn ; directory block allocation 1 endif endm ;;----------------------------------- ;; MACRO - COMPUTE DRIVE SECTOR SIZE ;;----------------------------------- ssiz macro secsiz if secsiz eq 128 db 060h ; sdh reg sec siz 060 = 128 bps else if secsiz eq 512 db 020h ; sdh reg sec siz 020 = 512 bps else if secsiz eq 256 db 000h ; sdh reg sec siz 000 = 256 bps else db 000h endif endif endif endm ;;------------------------------ ;; MACRO - COMPUTE SHIFT FACTOR ;;------------------------------ shff macro num @y defl num @x defl 0 rept 8 if @y eq 1 db @x ; log2 (num) exitm endif @y defl @y shr 1 @x defl @x + 1 endm endm .list