;********************************************************** ;* Bios Jump Table * ;* This is where CP/M calls whenever it needs to do any * ;* input/output operation. User program may also needs * ;* these entry points, but note that the location of * ;* this vector changes with different memory size. * ;********************************************************** BIOS: JP BOOT JP WBOOT JP CONST JP CONIN JP CONOUT JP LIST JP PUNCH JP READER JP HOME JP SELDSK JP SETTRK JP SETSEC JP SETDMA JP READ JP WRITE JP LISTST JP SECTRN JP UNUSED JP UNUSED JP UNUSED JP UNUSED JP UNUSED ; INITIIAL VALUE OF IOBYTE IODEF: DEFB 00010101B ; VALUE OF INITIAL IOBYTE DEFS 11 ; RESERVED FOR NEW CP/M MSECNT: DEFB 0 ; LSB DEFB 0 ; MSB 16-BIT COUNTER INCREMENT EVERY 10 MS ; ; SYSTEM INTERRUPT VECTORS ; INTVEC: DMAI0: DEFW RETURN ; DMA INTERRUPT ON READY DMAI1: DEFW RETURN ; DMA INTERRUPT ON MATCH DMAI2: DEFW RETURN ; DMA INTERRUPT ON END OF BLOCK DMAI3: DEFW RETURN ; DMA INTERRUPT ON MATCH & END OF BLOCK CTCI0: DEFW RETURN ; CTC CH #0 INTERRUPT (TIMER) CTCI1: DEFW RETURN ; CTC CH #1 INTERRUPT (TIMER) CTCI2: DEFW RETURN ; CTC CH #2 INTERRUPT (TIMER/FDC) CTCI3: DEFW TCOUNT ; CTC CH #3 INTERRUPT (TIMER/WDC) SIOI00: DEFW RETURN ; SIO #0 CH B TXMT BUFF EMPTY(INT TERMINAL) SIOI01: DEFW RETURN ; CH B EXT/STAT CHANGE SIOI02: DEFW RETURN ; CH B RECEIVE CHAR AVAIL SIOI03: DEFW RETURN ; CH B SPECIAL RECEIVE COND SIOI04: DEFW RETURN ; CH A TXMT BUFF EMPTY(RS-422) SIOI05: DEFW RETURN ; CH A EXT/STAT CHANGE SIOI06: DEFW RETURN ; CH A RECEIVE CHAR AVAIL SIOI07: DEFW RETURN ; CH A SPECIAL RECEIVE COND SIOI10: DEFW RETURN ; SIO #1 CH B TXMT BUFF EMPTY(RS-232 PORT2) SIOI11: DEFW RETURN ; CH B EXT/STAT CHANGE SIOI12: DEFW RETURN ; CH B RECEIVE CHAR AVAIL SIOI13: DEFW RETURN ; CH B SPECIAL RECEIVE COND SIOI14: DEFW RETURN ; CH A TXMT BUFF EMPTY(RS-232 PORT2) SIOI15: DEFW RETURN ; CH A EXT/STAT CHANGE SIOI16: DEFW RETURN ; CH A RECEIVE CHAR AVAIL SIOI17: DEFW RETURN ; CH A SPECIAL RECEIVE COND ;PIOI01: DEFW RETURN ; PIO PORT #A INTERRUPT ;PIOI02: DEFW RETURN ; PIO PORT #B INTERRUPT ; NOT IMPLEMENTED INTERRUPTS RETURN: RETI ; AUX JUMP TABLE WTSERV: DEFB 0 JP UNUSED JP UNUSED JP UNUSED JP UNUSED JP UNUSED JP UNUSED JP TOD ; GET/SET TIME AND DATE JP INTADD ; GET INTERRUPT TABLE ADDRESS IN DE ; NOT USED JUMP VECTORS UNUSED: RET ; JUST RETURN ; COPYRIGHT STATEMENT DEFM '(C) 1981, TELEVIDEO SYSTEMS INC.' ; VERSION AND REVISION NUMBER VER: DEFB 2 REV: DEFB 1 ; COME HERE FROM COLDSTART LOADER BOOT: DI OUT (PROMSW),A ; SHUT PROM OFF (DEBUG) LD SP,CPMBUF+80H ; INITIALIZE STACK POINTER LD A,(IODEF) ; INITIALIZE IOBYTE LD (IOBYTE),A XOR A ; MAKE LOGGED DRIVE 0 LD (DRIVE),A ; SAVE IT FOR LATER LD (LOGDRV),A ; SYSTEM INTERRUPT VECTOR MODE 2 LD HL,INTVEC LD A,H LD I,A IM 2 CALL HDWINI ; INITIALIZE SYSTEM HARDWARE EI LD HL,SIGNON ; PRINT SIGNON MESSAGE CALL PRTMSG JP GOCPM ; DO MORE INITIALIZATION ; WE JUMP TO HERE WHENEVER THE USER WANTS ; TO RESTART THE SYSTEM, I. E., REREAD CP/M ; WITHOUT MODIFYING THE BIOS WBOOT: LD SP,CPMBUF+80H ; INITIALIZE STACK POINTER XOR A ; PREVENT BUFFER FLUSH LD (HSTACT),A ; CONDITION ON WRITE ERROR WBOO10: CALL RESDSK ; RESET DISK SUBSYSTEM ; INITIALIZE THE TRANSFER PARAMETERS WBOO11: LD C,0 ; SELECT DRIVE ZERO CALL SELDSK ; FROM WHICH TO BOOT LD HL,CPMBAS ; INITIAL DMA ADDRESS LD DE,0002H ; D=INITIAL TRACK, E=INITIAL SECTOR LD B,BDOSLN/RECLEN ; LENGTH OF TRANSFER, IN SECTORS WBOO20: PUSH BC ; SAVE REGISTERS PUSH HL PUSH DE LD C,L ; MOVE TRANSFER ADDRESS TO BC LD B,H CALL SETDMA ; SET DATA TRANSFER ADDRESS LD C,D CALL SETTRK ; SET TRACK REGISTER TO D LD C,E CALL SETSEC ; SET SECTOR REGISTER TO E CALL READ ; READ A SECTOR JR Z,WBOO30 ; READ SUCCESSFUL POP DE ; ELSE RETORE REGISTERS POP HL POP BC LD HL,BOOMSG ; PRINT BOOT ERROR MESSAGE CALL PRTMSG CALL CONIN ; WAIT FOR INPUT FROM OPERATOR CALL CRLF JR WBOO11 WBOO30: POP DE ; ADJUST TRACK AND SECTOR INC E ; BUMP SECTOR NO. LD A,E CP SPT0 ; END OF CURRENT TRACK? JR C,WBOO40 ; NO. LD E,0 ; CYCLE THE SECTOR NO. INC D ; AND INCREMENT THE TRACK WBOO40: POP HL ; RECALL THE TRANSFER ADDRESS LD BC,RECLEN ; ADD IN A SECTOR ADD HL,BC POP BC ; RESTORE SECTOR COUNT DJNZ WBOO20 ; GO READ NEXT SECTOR. ; CODE SHARED BY BOTH WARM AND COLD STARTS GOCPM: LD BC,CPMBUF ; INITIALIZE DMA ADDRESS CALL SETDMA LD A,JP ; INITIALIZE LOW MEMORY LD (0000H),A LD HL,BIOS+3 ; WARM BOOT JUMP ENTRY LD (0001H),HL ; STORE IT LD (0005H),A LD HL,BDOS ; BDOS ENTRY POINT LD (0006H),HL ; STORE IT LD HL,WTSERV LD (1BH),HL ; PROVIDE ENTRY FOR TIME AND DATE XOR A ; CLEAR SERIAL PRINTER BUFFER COUNT LD (UL1CNT),A ; ON COLD OR WARM START LD (UNACNT),A ; UNALLOCATED SECTOR COUNT LD (HSTACT),A ; BUFFER INACTIVE LD A,(LOGDRV) ; PASS LOGGED DRIVE NO. CP MAXDRV+1 ; CHECK IF LOG DRIVE IS LEGAL JR C,GOCPM1 ; JUMP IF LEGAL XOR A ; IF NOT, SELECT DRIVE A: GOCPM1: LD C,A ; IN REG-C JP CPMBAS ; TO CCP ; END OF 802FBOOT.MAC