; BASIC INPUT/OUTPUT SYSTEM DRIVERS ; FOR EXEC-81 ; ; SET UP DATA ; MEMSIZE: EQU 55 ;MEMORY SIZE RETRY: EQU 10 ;RETRY COUNT SIGNON: EQU 056H ;SIGNON MESSAGE IN BOOT CPMOF: EQU (MEMSIZE-16)*1024;BASE OFFSET CPMBAS EQU 0C700H ;ZDOS START BDOS EQU 0D106H ;BDOS ENTRY POINT ; ORG MEMSIZE*1024-512;BIOS START CPMLEN: EQU $-CPMBAS ;CPM LENGTH NSECT: EQU 15H ;REBOOT SECTOR COUNT ; ;EQUATES FOR EXECUTIVE ; DMAADD EQU 0DFDFH ;DMA ADDRESS DRVBYT EQU 0DFEFH TRACK EQU 0DFE4H SECTOR EQU 0DFE1H STARTER EQU 0C74DH M.DUMP EQU 0F3D0H SCTR EQU 0DFE3H TRK EQU 0DFE4H HOME EQU 0F7D0H READ EQU 0F7E1H WRITE EQU 0F7EEH OUTVDM EQU 0FA82H OUTPUT EQU 0FA9BH OTLINE EQU 0FCA5H INPUT EQU 0FAD2H STATUS EQU 0FC75H ; ; ; JUMP TABLE FOR FUNCTIONS ; START: JP BOOT ;COLD START ENTRY WBOOTE: JP WBOOT ;WARM BOOT ENTRY JP CONST ;CONSOLE STATUS JP CONIN ;CONSOLE INPUT CONOUT: JP CONOT ;CONSOLE OUTPUT JP LIST JP HOME ;HOME DISK JP SELDSK ;SELECT DISK JP SETTRK ;SET TRACK NUMBER JP SETSEC ;SET SECTOR NUMBER JP SETDMA ;SET DMA ADDRESS JP READ ;READ SECTOR JP WRITE ;WRITE SECTOR F.DMA LD HL,(DMAADD) ;GET DAM ADDRESS RET ; ; COLD BOOT ENTRY ; BOOT: LD SP,100H ;SET STACK POINTER LD HL,0 LD (TRKTBL),HL ;ZERO OUT TRACK ;REGISTERS LD (TRKTBL+2),HL LD HL,SIGNON CALL PRMSG ;PRINT SIGNON MESSAGE LD A,2 LD (NDISKS),A XOR A ;CLEAR A LD (CDISK),A ;START WITH DIRVE 1 INC A LD (CDSKA),A ;IN TWO PLACES ; ; SET UP CP/M ENTRIES ; GOCPM: LD A,0C3H ;GET JUMP INSTRUCTION LD (0),A ;STORE FOR WARM BOOT LD HL,WBOOTE ;WARM BOOT ENTRY LD (1),HL ;FINISH JP INSTRUCTION LD (5),A ;CP/M ENTRY JUMP LD HL,BDOS LD (6),HL ;FINISH JP INSTRUCTION LD HL,0080H ;DEFAULT BUFFER ADDRESS LD (DMAADD),HL ;SET IT LD C,H ;BOOT FROM DISK ZERO ;ZERO FROM H REG JP STARTER ; ; WARM BOOT ENTRY ; WBOOT: LD SP,100H ;SET STACK LD HL,CPMBAS LD (DMAADD),HL LD B,NSECT LD DE,2 LD (SECTOR),DE CALL M.DUMP LD HL,SIGNON CALL PRMSG JP GOCPM ; ; SELECT DISK ; SELDSK: LD HL,DRVBYT LD A,C ;DESIRED DRIVE TO A CP (HL) ;CHECK OLD RET Z ;DONE IF SAME ; SELDK1: LD (HL),C ;DRIVE NUMBER TO MEMORY INC HL ;BUMP ADDRESS INC C ;BUMP DRIVE LD (HL),C ;STORE IT TOO RET ;THAT'S ALL ; ; SET SECTOR ; SETSEC: LD A,C ;SECTOR TO A LD (SCTR),A RET ;THAT'S ALL ; ; SET TRACK ; SETTRK: LD A,C LD (TRACK),A RET ; ; SET DMA ADDRESS ; SETDMA: LD (DMAADD),BC ;STORE DMA ADDRESS RET ; ; ; PRINT MESSAGE ROUTINE ; PRMSG: LD A,(HL) ;GET CHARACTER OR A ;TEST FOR END RET Z ;RETURN IF DONE LD C,A ;DATA TO C CALL CONOUT INC HL ;BUMP ADDRESS JR PRMSG ;LOOP UNTIL DONE ; ;TRACK - SECTOR - DRIVE - DMA ;DISK INFOMATION STORAGE ; CDISK DB 0 CDSKA DB 0 ;CURRENT DRIVE FOR ;CONTROLLER NDISKS DB 0 ;NUMBER OF DISKS TRKTBL DB 0,0,0,0 ;TRACK TABLE ; ; TERMINAL I/O ROUTINES ; CONST: JP STATUS ; ; CONSOLE INPUT ; CONIN: JP INPUT ; ; CONSOLE OUTPUT ; CONOT: JP OUTPUT ; ; LIST DEVICE OUTPUT LIST: IN A,50H AND 80H JR Z,LIST LD A,C OUT 51H,A CP 03 JR Z,LL2 CP 0DH RET NZ LD C,03 JR LIST LL2 IN A,50H AND 40H JR Z,LL2 IN A,51H AND 7FH CP 06 RET Z JR LL2 ; END  LD C,03 JR LIST LL2 IN A,50H AND 40H JR Z,LL2 IN A,51H AND 7FH CP 06 RET Z JR