;CBIOS - Data Technology Corporation CP/M 2.2 CBIOS. ; ; +-----------------------+ ; | | ; | C B I O S | ; | | ; +-----------------------+ ; ; ; ; Version number: 2.2B ; Version date: October 27,1981 ; ; ; . Corrections to the I/O deblocking ; routines. ; . Restructuring of code. ; ; Update date: November 24, 1980 ; ; . Changed disk selection code to allow ; CP/M to reset a drive. ; ; Update date: November 30, 1980 ; ; . Added conditional assembly for IEEE 796 ; and 696 host adapters. ; ; December 4, 1980 ; . Finished adapting for IEEE 796 host adapter. ; January 6, 1981 ; . Added MRX101D driver modifications ; ; Update date: March 16, 1981 ; ; . Modified source files for ASM. ; ; Update date: March 27, 1981 ; ; . Cold boot entry receives logical unit ; number of host in A regiser. ; ; Update date: April 28, 1981 ; Modified for contoller timeout and maximum ; hard disk configuration. ; ; Update date: May 25, 1981 ; Modified table expansion conditional assembly ; statements to get around ASM problem. ; ; Update date: May 28, 1981 ; Modified table expansion for maximum of ; sixteen (16) logical disks. ; Update date: June 4, 1981 ; Modified code for new CONFIG parameters. ; Generate DPH, DSKMSK and DSKOFF tables ; during cold boot to allow arbitrary drive ; mix for four (4) logical units. Logical ; drives are assigned to CP/M disk names ; (A,...,P) in the order of assending logical ; unit number. ; ; ; The following code is supplied to customers who ; purchase a hard/floppy disk system from DTC. ; The intent of the following code is to illustrate ; how to create a CBIOS for the user supplied ; CP/M 2.2. The following CBIOS was developed and ; tested using the following hardware components. ; ; Data Technology Corporation's 696 host adapter. ; CompuPro IEEE 696 chassis and motherboards. ; CompuPro IEEE 696 Z-80 CPU board. ; CompuPro IEEE 696 RAM XX boards (3). ; CompuPro IEEE 696 Interfacer I (assigned port 0 thru 3). ; ; O R ; ; Data Technology Corporation's 796 host adapter. ; Intel SBC 80/30 Single board computer. ; Intel SBC 86/12 Memory board. VERS: EQU 22 CBIOSV: EQU 4 ;CBIOS revision level CR: EQU 0Dh LF: EQU 0Ah IF NOT (MSIZE / (64+2)) ;If absolute BIOS: EQU CBIOS ;START OF CP/M JUMP TABLE ENDIF IF MSIZE / (64+1) ;If PRL generation BIOS: EQU (MSIZE*K+BIOSIZ) / K ;Start of CP/M jump table ENDIF IOBYTE: EQU 3 ;Location of IOBYTE CDISK: EQU 4 ;Location of current disk DBUF: EQU 80h ; CP/M to host disk constants CPMSIB: EQU 1024/128 ;Standard sectors in block BLKSIZ: EQU 2048 ;CP/M allocation size HSTSIB: EQU BLKSIZ/128 ;Sectors in host block HSTSIZ: EQU 128*(MAXSEC+1) ;host buffer size HSTSPT: EQU 26 ;host disk sectors/TRK HSTBLK: EQU HSTSIZ/128 ;CP/M sects/host buff CPMSPT: EQU HSTBLK * HSTSPT ;CP/M sectors/track D2DSM: EQU ((77-2)*2*CPMSPT/HSTSIB)-1 ; BDOS constants on entry to write WRALL: EQU 0 ;write to allocated WRDIR: EQU 1 ;write to directory WRUAL: EQU 2 ;write to unallocated ; The following jump table defines the entry points ; into the CBIOS for use by CP/M and other external ; routines; therfore the order of these jump cannot ; be modified. The location of these jumps can only ; be modified by 400h locations, which is a restriction ; of MOVCPM. ORG BIOS JMP CBOOT ;Cold boot JMP WBOOT ;Warm boot JMP CONST ;Console status (input) JMP CONIN ;Console input JMP CONOUT ;Console output JMP LIST ;List output JMP PUNCH ;Punch output JMP READER ;Reader input JMP HOME ;Set track to zero JMP SELDSK ;Select disk unit JMP SETTRK ;Set track JMP SETSEC ;Set sector JMP SETDMA ;Set Disk Memory Address JMP READ ;Read from disk JMP WRITE ;Write onto disk JMP LISTST ;List status (output) JMP SECTRN ;Translate sector number ; ; THE FOLLOWING 8 ENTRIES ARE RESERVED FOR MP/M ; JMP SELMEMORY ;SELECT MEMORY JMP POLLDEVICE ;POLL DEVICE JMP STARTCLOCK ;START CLOCK JMP STOPCLOCK ;STOP CLOCK JMP EXITREGION ;EXIT REGION JMP MAXCONSOLE ;MAXIMUM CONSOLE NUMBER JMP SYSTEMINIT ;SYSTEM INITIALIZATION JMP IDLE ;IDLE ; ; The following 2 entries are non-standard CP/M ; and are optional. ; JMP SETNUM ;Set number of sectors to read JMP SETXAD ;Set extended address bank. ; ; ; Drive Type table (indexed by CP/M unit #) ; Format: DB DPB type ; DB Class 6, op code 0 type (or 0FFh) ; DTYPE: DS 2*NDSK ; ; ; ; ; Disk Parameter Header Blocks for disk drives ; The format of these blocks are as follows: ; 16 bits = -> translation table. ; 48 bits = Work area for CP/M. ; 16 bits = -> DIRBUF. ; 16 bits = -> Parameter block. ; 16 bits = -> check vector. ; 16 bits = -> allocation vector. DPH: ;Disk parameter header DS 16*NDSK ; ; ; ; ; Sector Translation Tables. ; Standard CP/M Distribution Format XLTS: DB 0,6,12,18,24,4,10,16,22,2,8,14,20 DB 1,7,13,19,25,5,11,17,23,3,9,15,21 ; ; ; ; ; Disk selection masks. ; A B C D E F G H DSKMSK: DS NDSK ; I J K L M N O P ; ; ; ; ; Disk offsets (indexed by type). DSKOFF: DS 3*NDSK ; Disk type definition blocks for each particular mode. ; The format of these areas are as follow: ; 8 bit = disk type code ; 16 bit = Sectors per track ; 8 bit = Block shift ; 8 bit = BS mask ; 8 bit = Extent mask ; 16 bit = Disk allocation blocks - 1. ; 16 bit = Directory size. ; 16 bit = Allocation for directory. ; 16 bit = check area size. ; 16 bit = offset to first track. DPB: DS 16*DPBLN