;This is the bootstrap that loads at track 0 sector 1 ;it will be put into memory at 80H by the cold boot in the ROM based BIOS ;then it will be executed and read in the next 51 sectors. ;Note the ROM BIOS has already figured out density of disk & is stored ;as bit 6 @ 42H. (eg. for drive A: 40=dd 00=sd) ; MSIZE: EQU 60 ;<----------------------------- PROM: EQU 0F800H ;<----------------------------- LOADER: EQU PROM+39H ; CBASE: EQU (MSIZE-21)*1024 ;BIAS FOR CPM LARGER THAN 17K <------- ;NOTE I HAVE A 2K "BIOS" TO LEAVE ROOM FOR ;A VDM BOARD AT EC00H (YOU MAY WANT TO CHANGE ;THIS) CCP: EQU CBASE+3400H ;START OF CCP BDOS: EQU CCP+806H ;START OF BDOS BIOS: EQU CCP+1600H ;START OF BIOS ; CDISK: EQU 04H TADDR: EQU 40H UNIT: EQU 42H SCTR: EQU 43H NREC: EQU 45H CBFLAG: EQU 5AH ;0 FROM BIOS TO INDICATE WBOOT ; MONITOR:EQU 0F000H CO: EQU MONITOR+9H ; ORG 80H LD SP,80H LD A,0C3H ;SETUP JUMPS LD (0H),A LD HL,BIOS+3 ;SETUP JUMP TO WBOOT LD (1),HL LD (5),A LD HL,BDOS ;SETUP JUMP TO BDOS LD (6),HL LD A,02H LD (SCTR),A ;HAS ALREADY SELECTED DRIVE A: TRACK 0 LD A,(CBFLAG) ;IS IT A COLD BOOT OR WBOOT OR A JR Z,WBOOT LD A,51 ;TRANSFERR 51 SECTORS FOR COLD BOOT JR CBOOT WBOOT: LD A,45 ;NEED TRANSFERR ONLY 45 FOR WARM BOOT CBOOT: LD (NREC),A LD HL,CCP LD (TADDR),HL CALL LOADER ;TO BIOS TO LOAD IN "N" CONTIGOUS SECTORS JR NZ,ERROR LD A,(CBFLAG) ;IS IT A COLD BOOT OR WARM BOOT OR A JR Z,WBOOT1 ;IF ZERO THEN NOT A COLD BOOT LD HL,MSG1 ;SIGNON WITH CP/M & ITS SIZE CALL PRINT WBOOT1: LD A,(CDISK) ;RESTORE CURRENT DISK (OR A: FOR COLD BOOT) LD C,A JP CCP ; ERROR: LD HL,MSG2 CALL PRINT HALT ; ; PRINT: LD A,(HL) OR A RET Z LD C,A CALL CO INC HL JR PRINT ; MSG1: DB 0DH,07H,1CH,09H,09H,15H DB MSIZE/10 + '0',MSIZE MOD 10 +'0' DB 'K CP/M.' DB 11H,0AH,0DH,0H ; MSG2: DB 0DH,0AH,'LD ERROR',0H FINISH EQU $ END: