; TTCBIOS.ASM ; ; ; ; Original coding by: Thinker Toys ; Richmond, CA ; ; ; Patching to minimize size to fit ok for cp/m 2.2 ; by: Jack Burge ; 518A Fifth Street ; East Northport, LI NY 11731 ; ; (516) 261-7219 ; ; Patching to automatically determine `START` equate value ; inserted by: ; Henry B. Rothberg ; 1 Laticrete Park North ; Bethany, CT 06525 ; 1/12/82 ; ; From excellent coding done by: ; ; TKI (The Kendall Institute) ; ; Bruce Kendall ; 334-A Camille Court ; Mountain View, CA 94040 ; ; ; To use this and ttboot.asm see TTSDDJ.HLP ; ; To use, change the values at MSIZE & DELTA for ; your system size, then change the I/O routines ; below to match your system requirements. ; ;************************************************************* ; *** MSIZE EQU 56 ; Insert system size in KB here *** ; *** ;************************************************************* ; DELTA EQU 0000H ; Offset from standard CP/M ; ;************************************************************* ; BIAS EQU (MSIZE-20)*1024-DELTA ; Offset from 20K CP/M system ; CCP EQU 3400H+BIAS ; Base of CP/M ; OFFSET EQU 980H-CCP ; Offset used to read in ttcbios.hex ; with ddt.com during configuration ; ; TITLE 'CBIOS DRIVERS FOR E000H' ;CBIOS DRIVERS FOR CP/M ; CPM EQU CCP ; For ALL cp/m 2.2 systems ; ENTRY EQU CPM+806H CDISK EQU 4 ORIGIN EQU 0E000H ; For prom at E000H INPUT EQU ORIGIN+3 OUTPUT EQU ORIGIN+6 TKZERO EQU ORIGIN+9H TSEEK EQU ORIGIN+0CH SECTOR EQU ORIGIN+0FH DMA EQU ORIGIN+12H DISKR EQU ORIGIN+15H DISKW EQU ORIGIN+18H STACK EQU ORIGIN+26EH DRIVE EQU ORIGIN+273H DMAADR EQU ORIGIN+274H TRACK EQU ORIGIN+277H STATUS EQU ORIGIN+302H DELAY EQU ORIGIN+1F3H SCON EQU ORIGIN+270H IOBYTE EQU 3H INTIOBY EQU 0 RDYMSK EQU 80H WPTCT EQU 1 ; ; ORG CPM+1600H ; NSECTS EQU ($-CPM)/128 ; START JMP BOOT WBOOTE JMP WBOOT JMP CONST JMP CHRIN CPOUT JMP CONOUT JMP LIST JMP PUNCH JMP READER JMP HOME JMP SELDISK JMP SETTRK JMP SETSEC JMP DMA JMP READ JMP WRITE JMP LISTST JMP SECTRAN ; DISK PARAMETER HEADER FOR DISK 00 DPBASE DW TRANS,0000H DW 0000H,0000H DW DIRBF,DPBLK DW CHK00,ALL00 ; DISK PARAMETER HEADER FOR DISK 01 DW TRANS,0000H DW 0000H,0000H DW DIRBF,DPBLK DW CHK01,ALL01 ; DISK PARAMETER HEADER FOR DISK 02 DW TRANS,0000H DW 0000H,0000H DW DIRBF,DPBLK DW CHK02,ALL02 ; DISK PARAMETER HEADER FOR DISK 03 DW TRANS,0000H DW 0000H,0000H DW DIRBF,DPBLK DW CHK03,ALL03 ; SECTOR TRANSLATE VECTOR TRANS DB 1,7,13,19 DB 25,5,11,17 DB 23,3,9,15 DB 21,2,8,14 DB 20,26,6,12 DB 18,24,4,10 DB 16,22 ; DPBLK DW 26 DB 3 DB 7 DB 0 DW 242 DW 63 DB 192 DB 0 DW 16 DW 2 ; ; ; BOOT LXI SP,STACK CALL TINIT CALL QINIT LXI H,PROMPT CALL MESSG XRA A STA CDISK GOCPM LXI H,80H SHLD DMAADR MVI A,0C3H STA 0 LXI H,START+3 SHLD 1 STA 5 LXI H,ENTRY SHLD 6 LDA CDISK MOV C,A JMP CPM ; TINIT MVI A,INTIOBY STA IOBYTE LXI H,0 RET ; WBOOT LXI SP,STACK LXI B,0080H CALL DMA MVI A,88H STA DRIVE CALL ORIGIN+2AH LXI H,GOCPM SHLD 0092H MVI A,2DH STA 00CFH MVI A,(CPM+1600H)/100H STA 00FAH JMP 0080H ; HOME CALL SELDSK CALL TKZERO RET ; ; LISTST IN 04 ANI 40H MVI A,0 RZ CMA RET ; ; CONST IN 000 ANI 40H MVI A,00 RZ CMA RET ; ; STATUS5 DB 00 SETTRK PUSH B CALL SELDSK POP B JMP TSEEK ; ; CONIN LXI H,CITBLE CONIN1 LDA IOBYTE RAL SELDEV ANI 6H MVI D,0 MOV E,A DAD D MOV A,M INX H MOV H,M MOV L,A PCHL ; CONOUT IN 00H ANI 80H JZ CONOUT MOV A,C OUT 01H RET ; ; ; READER JMP CONIN ; ; PUNCH JMP CONOUT ; LIST IN 04H ANI 80H JZ LIST MOV A,C OUT 05H RET ; ; CITBLE DW CITTY DW CICRT DW READER DW CIUC1 COTBLE DW COTTY DW COCRT DW LIST DW COUC1 LTBLE DW LITTY DW COCRT DW LITTY DW COUL1 PTBLE DW COTTY DW COPTP DW COUP1 DW COUP2 RTBLE DW CITTY DW CIPTR DW CIUR1 DW CIUR2 COTTY EQU $ COCRT EQU $ COUC1 EQU $ COLPT EQU $ COUL1 EQU $ COPTP EQU $ COUP1 EQU $ COUP2 EQU $ ; CHROUT JMP CONOUT ; CITTY EQU $ CICRT EQU $ CIPTR EQU $ CIUC1 EQU $ CIUR1 EQU $ CIUR2 EQU $ LXI H,STATUS5 MOV A,M ORA A JZ CHRIN MVI M,0 RET ; CHRIN IN 00 ANI 40H JZ CHRIN IN 01 ANI 07FH RET ; ; SELDISK MOV A,C STA NEWDRV+1 MOV L,A MVI H,0 DAD H DAD H DAD H DAD H LXI D,DPBASE DAD D RET ; SELDSK LXI H,CDISKA NEWDRV MVI A,0 CMP M MOV M,A RZ MOV C,A ; SELDSK1 LDA DRIVE PUSH PSW ANI 0F7H LXI H,DTABLE PUSH H SLOOP CMP M JZ FOUND INX H INX H JMP SLOOP FOUND INX H LDA TRACK MOV M,A POP H MOV A,C ADD A ADD L MOV L,A JNC HISOK INR H HISOK POP PSW ANI 8 ORA M STA STATUS STA DRIVE INX H MOV A,M STA TRACK XRA A LXI D,STATUS CALL DELAY LDA CDISKA MOV L,A MVI H,0 DAD H DAD H DAD H DAD H LXI D,DPBASE DAD D RET ; DTABLE DB 80H DB 0 DB 1 DB 0 DB 20H DB 0 DB 2 DB 0 CDISKA DB 0 ; SETSEC MOV A,C STA SECTORA+1 RET ; SECTORA MVI C,0 JMP SECTOR ; READ CALL SELDSK CALL SECTORA MVI C,10 READ1 PUSH B CALL DISKR POP B ANA A RZ DCR C JNZ READ1 READY CMA RET ; WRITE CALL SELDSK CALL SECTORA MVI C,10 DSKW PUSH B CALL DISKW POP B ANA A RZ DCR C JNZ DSKW PROTCT LDA STATUS ANI WPTCT JZ READY LXI H,PTCTMSG MESSG MOV A,M ANA A RZ PUSH H MOV C,A CALL CHROUT POP H INX H JMP MESSG ; ; QINIT: RET ; MVI A,0CEH ; OUT 03 ; OUT 05 ; MVI A,25H ; OUT 03 ; OUT 05 ; RET ; LITTY: IN 05H ANI 01 JZ LITTY MOV A,C OUT 04H RET ; ; SECTRAN XCHG DAD B MOV L,M MVI H,0 RET ; PROMPT DS 0 DB 1AH,0DH,0AH DB 0DH,0AH DB '20K CP/M 2.2, ' DB 'Version ' DB '1.1 as of 1/11/82' DB 0DH,0AH DB 0 PTCTMSG DB 0DH,0AH DB 'PROTECT' DB 0DH,0AH DB 0 ; DIRBF DS 128 ALL00 DS 31 ALL01 DS 31 ALL02 DS 31 ALL03 DS 31 CHK00 DS 16 CHK01 DS 16 CHK02 DS 16 CHK03 DS 16 ; ; END