CP/M RMAC ASSEM 1.1 #001 << MYBIOS FOR GSR BOARD VERSION OF 21 APR 84 RHP>> TITLE '<< MYBIOS FOR GSR BOARD VERSION OF 21 APR 84 RHP>>' ; ***************************************** ; * THE GSR MONITOR, VERSION III.8 * ; * UFDC-1 FLOPPY DISK CONTROLLER * ; * PROVIDES MULTIPLE FORMAT CAPABILITY * ; * IBM COMPATIBLE FORMATS * ; * 8" OR 5 1/4" DISK * ; * SINGLE OR DOUBLE DENSITY * ; * SINGLE OR DOUBLE SIDE * ; * 128, 256, 512, OR 1024 BYTE SECTORS * ; * 1K, 2K, OR 4K ALLOCATION BLOCK SIZE * ; * VARIABLE SECTOR SKEW * ; * REQUIRES 2.2 CPM * ; * CONFIGURED FOR 60K OF RAM * ; * 2.2 CPM BIOS CONTAINED IN ROM AND * ; * DISK PARAMETERS ARE OBTAINED FROM * ; * TABLES ON DISK * ; * PRINT DRIVER FOR CENTRONIX PARALLEL * ; * INTERFACE AND CONSOLE DRIVER FOR * ; * 9600 BAUD TERMINAL ARE IN BIOS * ; ***************************************** ; ; ; ADDED BIOS VECTORS AND EXTRA DRIVERS ; TO PROVIDE COMPATIBILITY WITH MP/M II.0. ; MOVED ALL JUMP VECTORS TO THE START ; OF THE MONITOR FOR EASY ACCES TO MONITOR ; ROUTINES FROM USER PROGRAMS. ; THE ADDED BIOS DRIVERS ; PROVIDE MEMORY MANAGEMENT FOR A FULLY ; LOADED CT256K RAM BOARD RUNNING ; UNDER MP/M. FIVE 48K MEMORY BANKS ; ARE AVAILABLE ALONG WITH 16K OF ; COMMON MEMORY WHEN RUNNING MP/M. ; THE MONITOR WILL NOW TRY TO AUTO-BOOT ; AT RESET AND POWER-ON. IF A DISK IS ; NOT PRESENT IN DRIVE A WITH A READABLE ; 2.2 CPM IMAGE, THE SYSTEM WILL BRANCH ; TO THE MONITOR. ; ALL DIAGNOSTICS ARE REMOVED FROM THE ; STANDARD MONITOR. ; A SEPERATE VERSION OF THE MONITOR WILL ; CONTAIN DIGNOSTIC ROUTINES. ; A ROUTINE HAS BEEN ADDED THAT WILL ALLOW ; THE MONITOR TO RUN FROM A PHANTOMED ; EPROM. THIS ADDITION IS COMPATIBLE WITH ; SYSTEMS THAT DO NOT HAVE A PHANTOM OPTION ; AVAILABLE. THE ADDITIONAL ROUTINE WILL ; TRANSFER A COPY OF THE MONITOR CODE ; TO MEMORY PRIOR TO JUMPING TO THE CODE ; AND INVOKING THE PHANTOM OPTION. ; THE PHANTOM EPROM OPTION ON THE ; COMPUTIME/GSR Z80 CPU BOARD IS ENABLED ; BY CUTTING THE TRACE BETWEEN JUMPER ; PADS Q AND R. ; ADDED A DEFAULT DISK PARAMETER TABLE CP/M RMAC ASSEM 1.1 #002 << MYBIOS FOR GSR BOARD VERSION OF 21 APR 84 RHP>> ; THAT IS INVOKED AT COLD START TIME IF ; THE DISK IN DRIVE A DOES NOT CONTAIN ; A VALID PARAMETER TABLE ON SECTOR 1 ; OF TRACK 0. THE DEFAULT TABLE IS FOR ; AN 8" SINGLE DENSITY, SINGLE SIDE DISK. ; A USER DISK PARAMETER TABLE HAS BEEN ; ADDED TO ALLOW READING DISKS THAT DO ; NOT HAVE PARAMETER TABLES ON SECTOR 1 ; OF TRACK 0. A USER FLAG MUST BE ACTIVATED ; BY STORING 0FFH AT ADRESS 0F480H AND ; THEN THE USER TABLE (AT ADDRESS 0F080H) ; MUST BE LOADED. A BDOS ; CALL (CALL TO ADDRESS 0005H) WITH THE ; C REGISTER = 0EH AND THE E REGISTER ; = THE SELECTED DISK (0 = DRIVE A, 1 = ; DRIVE B, 2 = DRIVE C, AND 3 = DRIVE D) ; WILL CAUSE THE SELECTED ; DISK TO BE LOGGED ON, AND THE USER TABLE ; WILL BE TRANSFERRED TO THAT DRIVES ; DISK PARAMETER BLOCK. ; THE SAME USER TABLE MAY BE TRANSFERRED TO ; MULTIPLE DRIVE TABLES BY SETTING THE USER ; FLAG (AT ADDRESS 0F480H) TO 0FFH AND ; REPEATING THE BDOS CALL. NOTE THAT THE ; BDOS CALL WILL RESET THE USER FLAG EACH ; TIME BUT WILL NOT DISTURB THE CONTENTS ; OF THE USER TABLES. ; MACLIB Z80 ; ; MEMORY USED BY MONITOR ; F800 = BASE EQU 0F800H ;MONITOR BASE ADDRESS. F7FF = STACK EQU BASE-1 ;MONITOR STACK ; ; CONSTANTS FOR MONITOR ; 000D = CR EQU 0DH ;ASCII CARRIAGE RET 000A = LF EQU 0AH ;ASCII LINE FEED ; ; I/O PORTS ON CPU BOARD ; 0001 = INOUT EQU 01H 0003 = CONDTA EQU 03H 0002 = CONCTL EQU 02H 0002 = CONSTS EQU 02H ; ; ; DISK DEFINES ; 0016 = VERS EQU 22 ;CP/M VERSION NUMBER 003C = MSIZE EQU 60 ;CP/M MEMORY SIZE A000 = BIAS EQU (MSIZE-20)*1024 D400 = CCP EQU 3400H+BIAS ;BASE OF CCP DC06 = BDOS EQU CCP+806H ;BASE OF BDOS EA00 = BIOS EQU CCP+1600H ;BASE OF BIOS CP/M RMAC ASSEM 1.1 #003 << MYBIOS FOR GSR BOARD VERSION OF 21 APR 84 RHP>> 0000 = WRALL EQU 0 ;WRT TO ALOC BLK 0001 = WRDIR EQU 1 ;WRT TO DIRECTORY 0002 = WRUAL EQU 2 ;WRT TO UNALOC BLK EA03 = WBOOTE EQU BIOS+3 ;WARM BOOT ENTRY ; ; ;DISK I/O PORTS ; 009C = DSTAT EQU 9CH ;DISK STATUS PORT 009C = DCMMD EQU DSTAT ;DISK COMMAND PORT 009D = DTRCK EQU DSTAT+1 ;DISK TRACK PORT 009E = DSCTR EQU DSTAT+2 ;DISK SECTOR PORT 009F = DDATA EQU DSTAT+3 ;DISK DATA PORT 009B = DFLAG EQU 9BH ;STATUS REGISTER 1 009B = DCNTL EQU DFLAG ;CONTROL REGISTER 1 ; ; ;MEMORY USED BY CPM ; 0004 = CURDSK EQU 4 ;CURRENT DISK DRIVE 0080 = TBUF EQU 80H ;DEFAULT CPM BUFFER ; ; ; PROGRAM CODE BEGINS: ; F800 ORG BASE ; ; ;MONITOR BIOS JUMP VECTORS ; ; F800 C31BF9 BIOSCD: JMP BOOT ;COLD BOOT F803 C33BF9 JMP WBOOT ;WARM BOOT F806 C3CDF8 JMP CSTS ;CONSOLE STATUS F809 C3E9F8 JMP CI ;CONSOLE INPUT F80C C3B6F8 JMP CO ;CONSOLE OUTPUT F80F C3F4F8 JMP PRINT ;LIST DEVICE F812 C3B6F8 JMP CO ;PUNCH DEVICE F815 C3E9F8 JMP CI ;READER DEVICE F818 C3A6FB JMP HOME ;MOVE HEAD TO TRK 0 F81B C380FA JMP SELDSK ;SELECT DISK F81E C36FFB JMP SETTRK ;SET TRACK NUMBER F821 C374FB JMP SETSEC ;SET SECTOR NUMBER F824 C3A1FB JMP SETDMA ;SET DMA ADDRESS F827 C3AFFB JMP HREAD ;READ DISK F82A C3BBFB JMP HWRITE ;WRITE DISK F82D C308F9 JMP PSTS ;LIST STATUS F830 C379FB JMP SECTRN ;SECTOR TRANSLATE ; ; THE FOLLOWING VECTORS ARE USED BY MP/M ; F833 C34BF8 JMP SELMEM ;MEMORY BANK SELECT F836 C34CF8 JMP POLDEV ;DEVICE POLLING ROUTINE F839 C36BF8 JMP STRTCK ;START SYSTEM CLOCK F83C C36BF8 JMP STOPCK ;STOP SYSTEM CLOCK F83F C36BF8 JMP EXITRG ;EXIT REGION ROUTINE CP/M RMAC ASSEM 1.1 #004 << MYBIOS FOR GSR BOARD VERSION OF 21 APR 84 RHP>> F842 C369F8 JMP MAXCON ;MAX CONSOLE ROUTINE F845 C36BF8 JMP SYSINT ;SYSTEM INITIALIZE F848 000000 DB 0,0,0 ;USE MP/M IDLE PROC 004B = BCDL EQU $-BIOSCD ; ; MP/M BIOS ROUTINES ; F84B C9 SELMEM: RET ; F84C 79 POLDEV: MOV A,C F84D FE02 CPI 2 ;BAD DEVICE #? JRC DEVOK ;GOOD DEVICE # F84F+3802 DB 38H,DEVOK-$-1 F851 3E02 MVI A,2 ;BAD DEVICE # F853 CD5EF8 DEVOK: CALL TBLJMP ;JUMP TO POLL ROUTINE F856 08F9 DEVTBL: DW PSTS ;POLL PRINTER F858 CDF8 DW CSTS ;POLL CONSOLE F85A 5CF8 DW RTNEMP ;BAD DEVICE # F85C AF RTNEMP: XRA A F85D C9 RET F85E 87 TBLJMP: ADD A ;DOUBLE TABLE INDEX F85F E1 POP H ;RET ADR = TBL ADR F860 5F MOV E,A ;ADD INDEX F861 1600 MVI D,0 F863 19 DAD D F864 5E MOV E,M ;GET ADR OF ROUTINE F865 23 INX H F866 56 MOV D,M F867 EB XCHG F868 E9 PCHL ;JUMP TO ROUTINE ; F869 3E01 MAXCON: MVI A,1 ;# OF CONSOLES IS 1 STRTCK: STOPCK: EXITRG: SYSINT: F86B C9 RET ; ; MONITOR SIGN-ON MESSAGE ; F86C 0D0A MSG: DB CR,LF F86E 4753522043 DB 'GSR COMPUTER BOARD FOR RH PETERS' 0022 = MSGL EQU $-MSG ; ; MEMORY PARITY ERROR MESSAGE ; F88E 0D0A MSG1: DB CR,LF F890 5041522045 DB 'PAR ERR' 0009 = MSG1L EQU $-MSG1 ; F897 31FFF7 START: LXI SP,STACK ;RESTORE STACK F89A CDC5F8 CALL CRLF F89D CDE9F8 CALL CI ;WAIT FOR INPUT F8A0 C33BF9 JMP WBOOT ;TRY BOOTING AGAIN ; CP/M RMAC ASSEM 1.1 #005 << MYBIOS FOR GSR BOARD VERSION OF 21 APR 84 RHP>> ;MESSAGE OUTPUT ROUTINE. ; F8A3 216CF8 MESG: LXI H,MSG F8A6 4E MESG1: MOV C,M ;GET A CHARACTER F8A7 23 INX H ;MOVE POINTER F8A8 CDB6F8 CALL CO ;OUTPUT IT DJNZ MESG1 ;KEEP GOING TILL B=0 F8AB+10F9 DB 10H,MESG1-$-1 F8AD C9 RET ; ; ;CRLF BEFORE HLBLK ROUTINE ; F8AE CDC5F8 CRLFHL: CALL CRLF ; ;PRINT THE CURRENT VALUE OF H&L, ;AND A SPACE. ; F8B1 CDD6F8 HLBLK: CALL DISPHL ; ;PRINT A SPACE ON THE CONSOLE ; F8B4 0E20 SPACE: MVI C,' ' ; ;THIS IS THE MAIN CONSOLE ;OUTPUT ROUTINE. ; F8B6 79 CO: MOV A,C F8B7 CD03F8 CALL 0F803H F8BA C9 RET ; ; CONVERT HEX TO ASCII ; F8BB E60F HTA: ANI 0FH ;LOW NIBBLE ONLY F8BD C690 ADI 90H F8BF 27 DAA F8C0 CE40 ACI 40H F8C2 27 DAA F8C3 4F MOV C,A F8C4 C9 RET ; ; ; CONSOLE CARRIAGE RETURN & ; LINE FEED ROUTINE. ; F8C5 E5 CRLF: PUSH H ;SAVE HL F8C6 0602 MVI B,2 ;CRLF LENGTH F8C8 CDA3F8 CALL MESG ;SEND CRLF F8CB E1 POP H F8CC C9 RET ; ;CONSOLE STATUS TEST ROUTINE. ; F8CD DB02 CSTS: IN CONCTL F8CF E602 ANI 02H F8D1 3EFF MVI A,0FFH CP/M RMAC ASSEM 1.1 #006 << MYBIOS FOR GSR BOARD VERSION OF 21 APR 84 RHP>> F8D3 C0 RNZ F8D4 2F CMA F8D5 C9 RET ; ; ;PRINT H&L ON CONSOLE ; F8D6 7C DISPHL: MOV A,H F8D7 CDDBF8 CALL DISPB F8DA 7D MOV A,L F8DB F5 DISPB: PUSH PSW F8DC 0F RRC F8DD 0F RRC F8DE 0F RRC F8DF 0F RRC F8E0 CDE4F8 CALL HTA2 F8E3 F1 POP PSW F8E4 CDBBF8 HTA2: CALL HTA JR CO F8E7+18CD DB 18H,CO-$-1 ; ;MAIN CONSOLE INPUT ROUTINE ; F8E9 CDCDF8 CI: CALL CSTS ;TEST FOR INPUT F8EC B7 ORA A JRZ CI F8ED+28FA DB 28H,CI-$-1 F8EF DB03 IN CONDTA F8F1 E67F ANI 7FH F8F3 C9 RET ; ; ;PRINTER OUTPUT ROUTINE ; F8F4 DB01 PRINT: IN INOUT F8F6 E601 ANI 1 JRNZ PRINT F8F8+20FA DB 20H,PRINT-$-1 F8FA 79 MOV A,C F8FB F680 ORI 80H F8FD D301 OUT INOUT F8FF E67F ANI 7FH F901 D301 OUT INOUT F903 F680 ORI 80H F905 D301 OUT INOUT F907 C9 RET ; ; PRINTER STATUS ROUTINE ; F908 DB01 PSTS: IN INOUT F90A E601 ANI 1 F90C 3EFF MVI A,0FFH F90E C8 RZ F90F 2F CMA F910 C9 RET ; CP/M RMAC ASSEM 1.1 #007 << MYBIOS FOR GSR BOARD VERSION OF 21 APR 84 RHP>> ; ;GET READY TO MOVE BIOS VECTORS ; F911 2100F1 BIOSMV: LXI H,DIRBF F914 1100EA BIOSM1: LXI D,BIOS F917 014B00 BIOSM2: LXI B,BCDL F91A C9 RET ; ; ;BOOT CPM AND RUN ; F91B 31FFF7 BOOT: LXI SP,STACK ;SET UP STACK F91E 3E80 MVI A,80H ;SET UP PRINTER F920 D301 OUT INOUT F922 AF XRA A F923 3287F4 STA SECTOR F926 328DF4 STA PARFLG F929 3E37 MVI A,37H ;ENABLE XMT & REC F92B 32A2F4 STA RFLAG F92E 0622 HELLO: MVI B,MSGL ;SAY HELLO F930 CDA3F8 CALL MESG F933 2100F8 BBOOT: LXI H,BIOSCD ;SET UP BIOS VECTORS F936 CD14F9 CALL BIOSM1 LDIR F939+EDB0 DB 0EDH,0B0H F93B 31FFF7 WBOOT: LXI SP,STACK ;RESTORE STACK F93E 212BFA LXI H,TPLT ;MOVE DOWN JMP VECTORS F941 110000 LXI D,0 F944 010800 LXI B,8 LDIR F947+EDB0 DB 0EDH,0B0H F949 2180EA LXI H,BEGDAT ;CLEAR SCRATCH RAM F94C 1181EA LXI D,BEGDAT+1 F94F 01710A LXI B,DATSIZ F952 3600 MVI M,0 LDIR F954+EDB0 DB 0EDH,0B0H F956 CD11F9 CALL BIOSMV ;SAVE BIOS VECTORS F959 EB XCHG LDIR F95A+EDB0 DB 0EDH,0B0H F95C 21EAFD LXI H,EPBASE ;SET UP CPM TABLES F95F 11ABF4 LXI D,DPBASE F962 014000 LXI B,EPLGTH LDIR F965+EDB0 DB 0EDH,0B0H F967 2100D4 LXI H,CCP ;SET DMA ADR F96A 228BF4 SHLD DMAAD F96D 3E02 MVI A,2 ;SECTOR = 2 F96F 3287F4 STA SECTOR F972 32A0F4 STA LUNIT F975 AF XRA A F976 CDA4FA CALL LOGDS2 ;LOG ON DRIVE A F979 C297F8 JNZ START ;LOG ON ERROR LIXD CTBLP ;GET TBL POINTER F97C+DD2A DB 0DDH,2AH CP/M RMAC ASSEM 1.1 #008 << MYBIOS FOR GSR BOARD VERSION OF 21 APR 84 RHP>> F97E+A6F4 DW CTBLP F980 3E31 MVI A,49 ;NO OF SECS F982 32A3F4 STA BTSEC F985 1601 MVI D,1 ;# OF 128 BYTE SECS F987 3E19 MVI A,25 ;8" SECS ON TRK 0 F989 32AAF4 STA SECCNT F98C DB9B IN DFLAG F98E E604 ANI 4 ;8" OR 5 1/4" ? JRZ WBOOT8 ;8" F990+2805 DB 28H,WBOOT8-$-1 F992 3E11 MVI A,17 F994 32AAF4 STA SECCNT F997 3AA3F4 WBOOT8: LDA BTSEC ;SUBTRACT SECTORS F99A 92 SUB D F99B 32A3F4 STA BTSEC F99E 060A MVI B,10 F9A0 C5 BRWAGN: PUSH B F9A1 CDBAFD CALL TST128 ;ADJUST SECTOR ADR F9A4 D39E OUT DSCTR F9A6 CDC3FD CALL SETUP F9A9 D5 PUSH D ;SAVE FOR RETRY F9AA 2A8BF4 LHLD DMAAD ;GET DMA ADR F9AD 3A87F4 BOOTRD: LDA SECTOR ;TEST FOR SIDE 1 F9B0 E680 ANI 80H F9B2 3E88 MVI A,88H ;READ COMMAND JRZ BTRW3 ;SIDE 0 F9B4+2802 DB 28H,BTRW3-$-1 F9B6 3E8A MVI A,8AH ;SELECT SIDE 1 F9B8 3289F4 BTRW3: STA CMND F9BB D39C OUT DCMMD F9BD 019F80 BTRW1: LXI B,(128*256)+DDATA INIR F9C0+EDB2 DB 0EDH,0B2H F9C2 15 DCR D ;LOOP CONTROL JRNZ BTRW1 F9C3+20F8 DB 20H,BTRW1-$-1 F9C5 D1 POP D ;RESTORE LENGTH F9C6 CD59FD CALL EOJ F9C9 E69C ANI 9CH F9CB C1 POP B JRZ WBOOTA ;DONE, NO ERRORS F9CC+2808 DB 28H,WBOOTA-$-1 DJNZ BRWAGN ;RETRY F9CE+10D0 DB 10H,BRWAGN-$-1 F9D0 CD45FA DERROR: CALL DERR1 ;DISPLAY ERROR F9D3 C397F8 JMP START F9D6 228BF4 WBOOTA: SHLD DMAAD ;UPDATE DMAAD F9D9 3A87F4 LDA SECTOR ;SECTOR + 1 F9DC 3C INR A F9DD 3287F4 STA SECTOR F9E0 3AA3F4 LDA BTSEC ;ALL SECS DONE? F9E3 B7 ORA A F9E4 CA19FA JZ GOCPM ;DONE F9E7 3AAAF4 LDA SECCNT ;TEST FOR END OF TRK F9EA 3D DCR A F9EB 32AAF4 STA SECCNT CP/M RMAC ASSEM 1.1 #009 << MYBIOS FOR GSR BOARD VERSION OF 21 APR 84 RHP>> JRNZ WBOOT8 ;NOT END OF TRK F9EE+20A7 DB 20H,WBOOT8-$-1 LDX L,15 ;BYTES PER SEC F9F0+DD6E0F DB 0DDH,L*8+46H,15 LDX H,16 F9F3+DD6610 DB 0DDH,H*8+46H,16 F9F6 29 DAD H ;ADJUST VALUE F9F7 54 MOV D,H ;# 128 BYTE SECS BIT 1,(IX+18) ;TEST FOR DOUBLE SIDE F9F8+CB5E DB 0CBH,1*8+(IX+18)+40H JRZ WBOOTB ;SINGLE SIDE F9FA+2806 DB 28H,WBOOTB-$-1 BIT 5,(IX+18) ;CYLINDER MODE? F9FC+CB7E DB 0CBH,5*8+(IX+18)+40H F9FE 3E81 MVI A,81H ;SIDE 1 SELECT JRZ WBOOT9 ;CYLINDER MODE FA00+280B DB 28H,WBOOT9-$-1 FA02 0658 WBOOTB: MVI B,58H ;STEP IN 1 TRACK FA04 CD4BFD CALL EOJA FA07 2186F4 LXI H,TRACK ;TRK + 1 FA0A 34 INR M FA0B 3E01 MVI A,1 ;SECTOR = 1 FA0D 3287F4 WBOOT9: STA SECTOR LDX A,19 ;SECS PER TRK FA10+DD7E13 DB 0DDH,A*8+46H,19 FA13 32AAF4 STA SECCNT FA16 C397F9 JMP WBOOT8 ;DO NEXT TRK FA19 CD11F9 GOCPM: CALL BIOSMV ;RESTORE BIOS VECTORS LDIR FA1C+EDB0 DB 0EDH,0B0H FA1E 218000 LXI H,TBUF ;DEFAULT CPM BUFFER FA21 22A4F4 SHLD SEKDMA ;SET DMA ADDRESS FA24 3A0400 LDA CURDSK ;LOG-ON DSK FA27 4F MOV C,A ;SEND TO CPM FA28 C300D4 JMP CCP ;GO TO CP/M ; ;JUMPS AT START OF MEMORY AND IOBYTE ; FA2B C303EA TPLT: JMP WBOOTE FA2E BD IOBYT: DB 0BDH FA2F 00 DB 0 FA30 C306DC JMP BDOS ; ; DERRM: FA33 44534B5452DB 'DSKTRKSCTSTSCMDDMA' ; ; ;DISPLAYS ALL DISK PARAMETERS ; FA45 C5 DERR1: PUSH B ;SAVE REGISTERS FA46 D5 PUSH D FA47 E5 PUSH H FA48 2133FA LXI H,DERRM ;POINT TO NAMES FA4B 1185F4 LXI D,DISKNO ;POINT TO PARAMETERS FA4E CDC5F8 CALL CRLF ;DISPLAY CRLF CP/M RMAC ASSEM 1.1 #010 << MYBIOS FOR GSR BOARD VERSION OF 21 APR 84 RHP>> FA51 0E05 MVI C,5 ;SET TALLY FA53 0603 DERR2: MVI B,3 FA55 C5 PUSH B ;SAVE BC FA56 CDA6F8 CALL MESG1 ;DISPLAY NAME FA59 CDB4F8 CALL SPACE ;DISPLAY SPACE FA5C E5 PUSH H ;SAVE HL FA5D 1A LDAX D ;GET DATA FA5E 13 INX D ;STEP TO NEXT FA5F CDDBF8 CALL DISPB ;DISPLAY DATA FA62 CDB4F8 CALL SPACE ;DISPLAY SPACE FA65 E1 POP H ;GET HL FA66 C1 POP B ;GET BC FA67 0D DCR C ;TALLY - 1 JRNZ DERR2 ;CONTINUE FA68+20E9 DB 20H,DERR2-$-1 FA6A 0603 MVI B,3 ;DISPLAY NAME FA6C CDA6F8 CALL MESG1 FA6F CDB4F8 CALL SPACE ;DISPLAY SPACE FA72 2A8BF4 LHLD DMAAD ;LAST PARAMETER FA75 CDD6F8 CALL DISPHL ;DISPLAY IT FA78 E1 POP H ;RESTORE REGISTERS FA79 D1 POP D FA7A C1 POP B FA7B 3A88F4 LDA STATUS FA7E B7 ORA A FA7F C9 RET ; ; ; ;SELECT DISK GIVEN BY REGISTER C ; FA80 210000 SELDSK: LXI H,0 ;ERROR RETURN CODE FA83 79 MOV A,C FA84 3297F4 STA SEKDSK ;STORE DSK NO. FA87 FE04 CPI 4 ;MUST BE 0,1,2,OR 3 FA89 D0 RNC ;INVALID DSK NO. FA8A E5 PUSH IX ;LOG ON DISK FA8B E5 PUSH H FA8C CDA4FA CALL LOGDS2 FA8F E1 POP H FA90 C0 RNZ ;ERROR RETURN FA91 E1 POP IX FA92 3A97F4 LDA SEKDSK ;GET DISK NO. FA95 6F MOV L,A FA96 60 MOV H,B FA97 29 DAD H ;*2 FA98 29 DAD H ;*4 FA99 29 DAD H ;*8 FA9A 29 DAD H ;*16 FA9B EB XCHG FA9C 21ABF4 LXI H,DPBASE FA9F 19 DAD D ;HL=DPBASE+(DISKNO*16) FAA0 C9 RET ; FAA1 3A85F4 LOGDSK: LDA DISKNO FAA4 4F LOGDS2: MOV C,A ;SAVE DSK NO IN C CP/M RMAC ASSEM 1.1 #011 << MYBIOS FOR GSR BOARD VERSION OF 21 APR 84 RHP>> FAA5 3C INR A LXIX DP0 ;BUILD TBL ADR IN X FAA6+DD21 DB 0DDH,21H FAA8+80EE DW DP0 FAAA 118000 LXI D,128 FAAD 3D DABLD1: DCR A JRZ DABLD2 FAAE+2804 DB 28H,DABLD2-$-1 DADX D FAB0+DD19 DB 0DDH,D*8+09H JR DABLD1 FAB2+18F9 DB 18H,DABLD1-$-1 DABLD2: SIXD CTBLP FAB4+DD22 DB 0DDH,22H FAB6+A6F4 DW CTBLP FAB8 3EC0 MVI A,0C0H FABA B1 ORA C FABB 328EF4 STA HSELCD ;STORE SELECT CODE FABE 2181F4 LXI H,DSKSEL ;SEE IF NEW DISK FAC1 0600 MVI B,0 FAC3 09 DAD B FAC4 3A80F4 LDA SELFLG ;LOAD USER TABLE? FAC7 FE00 CPI 0 JRZ DABLD3 ;USE DISK TABLES FAC9+280B DB 28H,DABLD3-$-1 FACB AF XRA A ;RESET FLAG FACC 3280F4 STA SELFLG FACF 2F CMA ;MARK DISK AS USED FAD0 77 MOV M,A FAD1 2180F0 LXI H,UTABLE ;LOAD USER TABLE JR VALID2 FAD4+1853 DB 18H,VALID2-$-1 FAD6 7E DABLD3: MOV A,M FAD7 B7 ORA A JRNZ DBPARM ;NOT NEW DISK FAD8+2056 DB 20H,DBPARM-$-1 FADA 2F CMA FADB 77 MOV M,A ;MARK AS USED FADC 3A8EF4 LDA HSELCD ;GET SEL CODE FADF D39B OUT DCNTL ;SEL DRIVE FAE1 CD49FD CALL EOJB ;RESTORE DRIVE FAE4 E680 ANI 80H ;TEST FOR NOT READY FAE6 C245FA JNZ DERR1 ;NOT RDY ERROR FAE9 060A MVI B,10 ;RETRY COUNT FAEB C5 NTAGN: PUSH B FAEC 3E01 MVI A,1 ;SELECT SEC 1 FAEE D39E OUT DSCTR FAF0 57 MOV D,A ;SEC SIZE=128 FAF1 2AA6F4 LHLD CTBLP FAF4 3A8EF4 LDA HSELCD ;GET SELECT CODE FAF7 D39B OUT DCNTL FAF9 3E8C MVI A,8CH ;READ OP FAFB CD25FD CALL RDAT ;READ TABLES FAFE C1 POP B ;RETRY COUNT FAFF B7 ORA A ;TEST FOR ERRORS JRZ VALID ;DONE, NO ERRORS CP/M RMAC ASSEM 1.1 #012 << MYBIOS FOR GSR BOARD VERSION OF 21 APR 84 RHP>> FB00+2805 DB 28H,VALID-$-1 DJNZ NTAGN ;RETRY FB02+10E7 DB 10H,NTAGN-$-1 FB04 C345FA JMP DERR1 ;DISP PARAMETERS VALID: LDX L,15 ;BYTES PER SECTOR FB07+DD6E0F DB 0DDH,L*8+46H,15 LDX H,16 FB0A+DD6610 DB 0DDH,H*8+46H,16 FB0D E5 PUSH H ;COPY TO DE FB0E D1 POP D LDX B,19 ;PHYSICAL SEC/TRK FB0F+DD4613 DB 0DDH,B*8+46H,19 FB12 05 DCR B FB13 19 VALID1: DAD D ;BYTES/SEC X SEC/TRK DJNZ VALID1 FB14+10FD DB 10H,VALID1-$-1 FB16 29 DAD H ;DIVIDE BY 128 BIT 1,(IX+18) ;DOUBLE SIDE ? FB17+CB5E DB 0CBH,1*8+(IX+18)+40H JRZ VALID3 ;SINGLE SIDE FB19+2805 DB 28H,VALID3-$-1 BIT 5,(IX+18) ;CYLINDER MODE ? FB1B+CB7E DB 0CBH,5*8+(IX+18)+40H JRNZ VALID3 ;CYLINDER MODE FB1D+2001 DB 20H,VALID3-$-1 FB1F 29 DAD H ;DBL SIDE, TIMES 2 FB20 7C VALID3: MOV A,H FB21 F40400 CP (IX+0) ;EQUAL SEC/TRK ? JRZ DBPARM ;VALID TABLE FB24+280A DB 28H,DBPARM-$-1 FB26 212AFE LXI H,DEFLT ;LOAD DEFAULT TABLE FB29 E5 VALID2: PUSH IX FB2A D1 POP D FB2B 018000 LXI B,128 LDIR FB2E+EDB0 DB 0EDH,0B0H DBPARM: LDX L,15 ;GET BYTES/SEC FB30+DD6E0F DB 0DDH,L*8+46H,15 LDX H,16 FB33+DD6610 DB 0DDH,H*8+46H,16 FB36 29 DAD H FB37 7C MOV A,H FB38 328FF4 STA HSTBLK ;CPM SEC/PHY SEC FB3B 3D DCR A FB3C 3291F4 STA SECMSK ;SECTOR MASK LDX B,2 ;GET BLK SHIFT FACTOR FB3F+DD4602 DB 0DDH,B*8+46H,2 FB42 3E01 MVI A,1 ;CPM ALOC SIZE/128 FB44 07 BLKCAL: RLC DJNZ BLKCAL FB45+10FD DB 10H,BLKCAL-$-1 FB47 3290F4 STA BLKCNT FB4A 3A85F4 LDA DISKNO ;GET DISK NO FB4D 21A0F4 LXI H,LUNIT ;POINT TO LAST UNIT FB50 BE CMP M ;SEE IF SAME FB51 77 MOV M,A ;SAVE THIS UNIT CP/M RMAC ASSEM 1.1 #013 << MYBIOS FOR GSR BOARD VERSION OF 21 APR 84 RHP>> FB52 C8 RZ FB53 CDC3FD CALL SETUP FB56 21EBF4 LXI H,IDSV FB59 1601 MVI D,1 FB5B 3EC4 MVI A,0C4H ;READ ADR COMMAND FB5D D39C OUT DCMMD FB5F 3289F4 STA CMND FB62 019F06 LXI B,(6*256)+DDATA FB65 CD2DFD CALL READ2 FB68 3AEBF4 IDRD1: LDA IDSV FB6B D39D OUT DTRCK ;SET THE TRACK FB6D AF XRA A ;RET, NO ERRORS FB6E C9 RET ; ; ;SET TRACK GIVEN BY REGISTER C ; FB6F 79 SETTRK: MOV A,C FB70 3298F4 STA SEKTRK FB73 C9 RET ; ; ;SET SECTOR GIVEN BY REGISTER C ; FB74 79 SETSEC: MOV A,C FB75 3299F4 STA SEKSEC FB78 C9 RET ; ; ;TRANSLATE THE SECTOR GIVEN BY BC USING THE ;TRANSLATE TABLE GIVEN BY DE ; FB79 E5 SECTRN: PUSH IX ;SAVE X FB7A 21ECFF LXI H,0FFECH ;TBL POINTER-20 FB7D 19 DAD D FB7E E5 PUSH H ;POINTER TO X FB7F E1 POP IX FB80 AF XRA A BIT 1,(IX+18) ;TEST FOR DBL SIDE FB81+CB5E DB 0CBH,1*8+(IX+18)+40H JRZ SECTR1 ;SINGLE SIDE FB83+2814 DB 28H,SECTR1-$-1 BIT 5,(IX+18) ;CYLINDER MODE? FB85+CB7E DB 0CBH,5*8+(IX+18)+40H JRNZ SECTR1 ;NON-CYLINDER MODE FB87+2010 DB 20H,SECTR1-$-1 LDX L,0 ;GET CPM SEC/TRK FB89+DD6E00 DB 0DDH,L*8+46H,0 FB8C 67 MOV H,A SRLR L ;DIVIDE BY 2 FB8D+CB3D DB 0CBH, 38H + L FB8F 2D DCR L ;SUBTRACT 1 DSBC B ;SEC ON SD 0 OR 1? FB90+ED42 DB 0EDH,B*8+42H JRNC SECTR1 ;SECTOR ON SIDE 0 FB92+3005 DB 30H,SECTR1-$-1 CP/M RMAC ASSEM 1.1 #014 << MYBIOS FOR GSR BOARD VERSION OF 21 APR 84 RHP>> FB94 7D MOV A,L ;BUILD ADR FOR SD 1 FB95 2F CMA FB96 4F MOV C,A FB97 3E80 MVI A,80H ;SIDE SELECT = SD 1 FB99 EB SECTR1: XCHG ;HL=TRANS TBL FB9A 09 DAD B ;ADD SEC INDEX FB9B B6 ORA M ;OR SIDE SELECT FB9C 6F MOV L,A ;HL = TRANS(SECTOR) FB9D 2600 MVI H,0 FB9F E1 POP IX ;RESTORE X FBA0 C9 RET ; ; ;SET DMA ADDRESS GIVEN BY REGISTERS B AND C ; SETDMA: SBCD SEKDMA ;SAVE THE ADDRESS FBA1+ED43 DB 0EDH,43H FBA3+A4F4 DW SEKDMA FBA5 C9 RET ; ; ;MOVE TO THE TRACK 00 POSITION OF CURRENT DRIVE ; FBA6 3A9CF4 HOME: LDA HSTWRT ;TEST FOR WRITE PEND FBA9 B7 ORA A FBAA C0 RNZ FBAB 329DF4 STA HSTACT ;CLEAR HSTACT FLAG FBAE C9 RET ; ; ;DEBLOCKING ROUTINES ; FBAF 3E01 HREAD: MVI A,1 ;SET READOP=READ FBB1 329FF4 STA READOP FBB4 3C INR A FBB5 3292F4 STA WRTYPE ;TREAT AS UNALOC FBB8 C319FC JMP ALLOC FBBB AF HWRITE: XRA A ;SET READOP=WRITE FBBC 329FF4 STA READOP FBBF 79 MOV A,C ;SAVE WRITE TYPE FBC0 3292F4 STA WRTYPE FBC3 FE02 CPI WRUAL ;UNALOC WRITE? JRNZ CHKUNA ;NOT UNALOC WRT FBC5+2018 DB 20H,CHKUNA-$-1 FBC7 2A97F4 LHLD SEKDSK ;UNADSK=SEKDSK FBCA 2294F4 SHLD UNADSK ;UNATRK=SEKTRK FBCD 3A90F4 LDA BLKCNT ;RECORDS/CPM BLOCK FBD0 3293F4 STA UNACNT FBD3 3A99F4 LDA SEKSEC ;UNASEC=SEKSEC FBD6 3296F4 STA UNASEC FBD9 2AA6F4 LHLD CTBLP ;SAVE TBL ADR FBDC 22A8F4 SHLD UTBLP FBDF 3A93F4 CHKUNA: LDA UNACNT ;ANY UNALOC REMAIN? FBE2 B7 ORA A JRZ ALLOC ;NONE REMAIN FBE3+2834 DB 28H,ALLOC-$-1 CP/M RMAC ASSEM 1.1 #015 << MYBIOS FOR GSR BOARD VERSION OF 21 APR 84 RHP>> FBE5 3D DCR A ;UNACNT-1 FBE6 3293F4 STA UNACNT FBE9 2A94F4 LHLD UNADSK ;SEK = UNA? FBEC 3A99F4 LDA SEKSEC FBEF 4F MOV C,A FBF0 3A96F4 LDA UNASEC FBF3 CDF3FC CALL CMP3 JRNZ ALLOC ;NOT EQUAL FBF6+2021 DB 20H,ALLOC-$-1 FBF8 2AA8F4 LHLD UTBLP ;GET TBL ADR FBFB 4E MOV C,M ;CPM SEC/TRK FBFC 0600 MVI B,0 FBFE 111400 LXI D,20 ;SEC TRANSL TBL FC01 19 DAD D FC02 3A96F4 LDA UNASEC ;SEARCH FOR UNASEC CCIR ;END OF TRK? FC05+EDB1 DB 0EDH,0B1H FC07 E212FC JPO NOOVF ;NOT END FC0A 2195F4 LXI H,UNATRK ;UNATRK + 1 FC0D 34 INR M FC0E 3E01 MVI A,1 ;UNASEC = 1 JR OVF FC10+1801 DB 18H,OVF-$-1 FC12 7E NOOVF: MOV A,M ;GET NEXT SECTOR FC13 3296F4 OVF: STA UNASEC ;STORE NEXT UNASEC FC16 AF XRA A ;RESET RSFLAG JR ALLOC2 FC17+1805 DB 18H,ALLOC2-$-1 FC19 AF ALLOC: XRA A ;SET UNACNT=0 FC1A 3293F4 STA UNACNT FC1D 3C INR A ;SET RSFLAG FC1E 329EF4 ALLOC2: STA RSFLAG ;NEED PREREAD FC21 2180EA LXI H,DBUF ;SET DMA ADR FC24 228BF4 SHLD DMAAD FC27 E5 RWOPER: PUSH IX FC28 3A97F4 LDA SEKDSK ;LOG ON SEKDSK FC2B CDA4FA CALL LOGDS2 BIT 5,(IX+18) ;CYLINDER MODE? FC2E+CB7E DB 0CBH,5*8+(IX+18)+40H JRZ CYLN ;YES FC30+2816 DB 28H,CYLN-$-1 FC32 3A98F4 LDA SEKTRK FC35 F41500 CP (IX+17) ;TRK > TRKS PER SIDE? JRC CYLN ;NOT GREATER FC38+380E DB 38H,CYLN-$-1 SUBX 17 ;ADJUST TRACK FC3A+DD9611 DB 0DDH,96H,17 FC3D 3298F4 STA SEKTRK ;SAVE IT FC40 3A99F4 LDA SEKSEC ;SELECT SIDE 1 FC43 F680 ORI 80H FC45 3299F4 STA SEKSEC FC48 3A99F4 CYLN: LDA SEKSEC ;COMPUTE PHY SEC ADR FC4B 4F MOV C,A FC4C E680 ANI 80H ;GET SIDE SELECT FC4E 329BF4 STA SIDSEL ;SAVE IT FC51 79 MOV A,C ;MASK OFF SIDE SEL CP/M RMAC ASSEM 1.1 #016 << MYBIOS FOR GSR BOARD VERSION OF 21 APR 84 RHP>> FC52 E67F ANI 7FH FC54 4F MOV C,A FC55 3A8FF4 LDA HSTBLK FC58 0D DCR C FC59 1F PSEC1: RAR JRC SECDN FC5A+3804 DB 38H,SECDN-$-1 SRLR C FC5C+CB39 DB 0CBH, 38H + C JR PSEC1 FC5E+18F9 DB 18H,PSEC1-$-1 FC60 0C SECDN: INR C FC61 3A9BF4 LDA SIDSEL ;GET SIDE SELECT FC64 B1 ORA C ;OR IT WITH SECTOR FC65 329AF4 STA SEKHST ;SAVE IT FC68 219DF4 LXI H,HSTACT ;TEST & SET HSTACT FLG FC6B 7E MOV A,M FC6C 3601 MVI M,1 ;SET FLAG FC6E B7 ORA A ;TEST FLAG JRZ FILHST ;NOT SET FC6F+2816 DB 28H,FILHST-$-1 FC71 2A85F4 LHLD DISKNO ;SEEK=HOST? FC74 3A9AF4 LDA SEKHST FC77 4F MOV C,A FC78 3A87F4 LDA SECTOR FC7B CDF3FC CALL CMP3 JRZ MATCH ;SAME FC7E+2823 DB 28H,MATCH-$-1 FC80 3A9CF4 LDA HSTWRT ;HOST WRITTEN? FC83 B7 ORA A FC84 C401FD CNZ DWRITE ;WRITE HOST BUF FC87 2A97F4 FILHST: LHLD SEKDSK ;GET SET TO FILL BUF FC8A 2285F4 SHLD DISKNO FC8D 3A9AF4 LDA SEKHST ;PHYSICAL SEC ADR BIT 2,(IX+18) ;1ST SEC = 0? FC90+CB66 DB 0CBH,2*8+(IX+18)+40H JRZ FLHST2 ;1ST SEC = 1 FC92+2801 DB 28H,FLHST2-$-1 FC94 3D DCR A ;1ST SEC = 0 FC95 3287F4 FLHST2: STA SECTOR FC98 3A9EF4 LDA RSFLAG ;RSFLAG SET? FC9B B7 ORA A FC9C C4FDFC CNZ DREAD ;YES DO READ FC9F AF XRA A FCA0 329CF4 STA HSTWRT ;NO PENDING WRT FCA3 3A99F4 MATCH: LDA SEKSEC ;MASK BUF SEL BITS FCA6 3D DCR A FCA7 6F MOV L,A FCA8 3A91F4 LDA SECMSK FCAB A5 ANA L FCAC 67 MOV H,A ;BUF SEL BITS X 128 FCAD 2E00 MVI L,0 SRLR H FCAF+CB3C DB 0CBH, 38H + H RARR L FCB1+CB1D DB 0CBH, 18H + L CP/M RMAC ASSEM 1.1 #017 << MYBIOS FOR GSR BOARD VERSION OF 21 APR 84 RHP>> FCB3 1180EA LXI D,DBUF ;ADD BUFFER INDEX FCB6 19 DAD D LDED SEKDMA ;GET SEEK DMA ADR FCB7+ED5B DB 0EDH,5BH FCB9+A4F4 DW SEKDMA FCBB 018000 LXI B,128 ;SIZE OF MOVE FCBE 3A9FF4 LDA READOP ;READOP=1? FCC1 B7 ORA A JRNZ RWMOVE ;YES MOVE READ DATA FCC2+2006 DB 20H,RWMOVE-$-1 FCC4 3E01 MVI A,1 FCC6 329CF4 STA HSTWRT ;SET HOST WRITTEN FCC9 EB XCHG ;MOVE WRITE DATA RWMOVE: BIT 4,(IX+18) ;INVERTED DATA? FCCA+CB76 DB 0CBH,4*8+(IX+18)+40H JRZ NOINV ;NON-INVERTED DATA FCCC+280A DB 28H,NOINV-$-1 FCCE 41 MOV B,C ;MOVE LENGTH TO B FCCF 7E INVRT: MOV A,M ;GET DATA FCD0 2F CMA ;INVERT DATA FCD1 12 STAX D ;MOVE TO DESTINATION FCD2 23 INX H ;INCREMENT ADDRESSES FCD3 13 INX D DJNZ INVRT ;DO 128 BYTES FCD4+10F9 DB 10H,INVRT-$-1 JR INVDN ;DONE FCD6+1802 DB 18H,INVDN-$-1 NOINV: LDIR ;MOVE NON-INVERTED DATA FCD8+EDB0 DB 0EDH,0B0H FCDA 3A92F4 INVDN: LDA WRTYPE ;WRITE TO DIRECTORY? FCDD FE01 CPI WRDIR FCDF 3AA1F4 LDA ERFLAG ;GET ERROR FLAG JRNZ RWD ;NOT DIR WRT FCE2+200D DB 20H,RWD-$-1 FCE4 B7 ORA A ;ERRORS? JRNZ RWD ;DONE IF ERRORS FCE5+200A DB 20H,RWD-$-1 FCE7 AF XRA A FCE8 329CF4 STA HSTWRT ;RESET HSTWRT FLAG FCEB CD01FD CALL DWRITE ;WRITE TO DIRECTORY FCEE 3AA1F4 LDA ERFLAG ;GET ERROR FLAG FCF1 E1 RWD: POP IX FCF2 C9 RET ;DONE CMP3: LDED SEKDSK ;GET SEKDSK & SEKTRK FCF3+ED5B DB 0EDH,5BH FCF5+97F4 DW SEKDSK FCF7 B7 ORA A DSBC D ;COMPARE HL & DE FCF8+ED52 DB 0EDH,D*8+42H FCFA C0 RNZ ;RETURN NOT EQUAL FCFB B9 CMP C ;COMPARE A & C FCFC C9 RET ;DONE ; ; ;DISK READ AND WRITE ROUTINES ; CP/M RMAC ASSEM 1.1 #018 << MYBIOS FOR GSR BOARD VERSION OF 21 APR 84 RHP>> FCFD 3E01 DREAD: MVI A,1 ;SET READ FLAG JR STRFLG FCFF+1801 DB 18H,STRFLG-$-1 FD01 AF DWRITE: XRA A ;SET WRITE FLAG FD02 328AF4 STRFLG: STA RWFLG ;SAVE IT FOR LATER USE FD05 060A DORDWT: MVI B,10 ;NUMBER OF RETRIES FD07 C5 AGN: PUSH B ;SAVE BC FD08 CD6AFD CALL SEEK ;SEEK THE TRACK FD0B CC1DFD CZ RDWR ;NO ERROR FD0E 32A1F4 STA ERFLAG ;STORE ERROR FLAG FD11 C1 READ3: POP B ;GET ERROR RETRY COUNT FD12 C8 RZ ;RETURN IF NO ERRORS FD13 3EFF MVI A,0FFH ;CAUSE IDRD ON RETRY FD15 32A0F4 STA LUNIT DJNZ AGN ;DO A RETRY FD18+10ED DB 10H,AGN-$-1 FD1A C345FA JMP DERR1 ;DISP PARAMETERS ; FD1D 5F RDWR: MOV E,A ;SAVE COMMAND FD1E 3A8AF4 LDA RWFLG FD21 B7 ORA A FD22 7B MOV A,E ;REGET THE COMMAND JRZ WRDAT ;WRITE IF ZERO FD23+2813 DB 28H,WRDAT-$-1 FD25 D39C RDAT: OUT DCMMD ;DISK COMMAND PORT FD27 3289F4 STA CMND FD2A 019F80 READ1: LXI B,(128*256)+DDATA READ2: INIR FD2D+EDB2 DB 0EDH,0B2H FD2F 15 DCR D ;LOOP CONTROL JRNZ READ1 FD30+20F8 DB 20H,READ1-$-1 FD32 CD59FD CALL EOJ FD35 E69C ANI 9CH ;ISOLATE READ ERROR BITS FD37 C9 RET ; FD38 F620 WRDAT: ORI 20H ;ADD WRITE COMMAND FD3A D39C OUT DCMMD ;DISK COMMAND PORT FD3C 3289F4 STA CMND FD3F 019F80 WRT1: LXI B,(128*256)+DDATA OUTIR FD42+EDB3 DB 0EDH,0B3H FD44 15 DCR D ;LOOP CONTROL JRNZ WRT1 FD45+20F8 DB 20H,WRT1-$-1 JR EOJ FD47+1810 DB 18H,EOJ-$-1 FD49 0608 EOJB: MVI B,8 ;BASIS OF RESTORE COMMAND FD4B DB9B EOJA: IN DFLAG ;STEP RATE BITS FD4D E603 ANI 3 FD4F B0 ORA B ;ADD ON THE COMMAND FD50 3289F4 STA CMND FD53 D39C OUT DCMMD ;DO THE COMMAND FD55 0680 MVI B,128 ;DELAY SKDLY: DJNZ SKDLY FD57+10FE DB 10H,SKDLY-$-1 CP/M RMAC ASSEM 1.1 #019 << MYBIOS FOR GSR BOARD VERSION OF 21 APR 84 RHP>> FD59 DB9C EOJ: IN DSTAT ;TEST FOR INTRQ FD5B E601 ANI 1 JRNZ EOJ ;WAIT FOR INTRQ FD5D+20FA DB 20H,EOJ-$-1 FD5F CDE2FD CALL DWAIT ;DISABLE WAITS FD62 DB9C EOJ1: IN DSTAT ;GET THE DISK STATUS FD64 3288F4 STA STATUS FD67 E6FC ANI 0FCH FD69 C9 RET ; FD6A CDA1FA SEEK: CALL LOGDSK ;LOG ON DISKNO FD6D C0 RNZ ;ERROR RETURN FD6E CDBAFD CALL TST128 ;ADJUST SECTOR ADR FD71 D39E OUT DSCTR ;DISK SECTOR PORT FD73 DB9D SEEK2: IN DTRCK ;DISK TRACK PORT FD75 4F MOV C,A ;SAVE IT FD76 3A86F4 LDA TRACK ;GET DESIRED TRACK FD79 B9 CMP C JRZ RDWRT ;NO SEEK NEEDED FD7A+280A DB 28H,RDWRT-$-1 FD7C D39F OUT DDATA ;SET THE TRACK FD7E 0618 MVI B,18H ;SEEK COMMAND FD80 CD4BFD CALL EOJA ;DO THE SEEK FD83 E680 ANI 80H ;ERROR MASK FD85 C0 RNZ ;SEEK ERROR FD86 CDC3FD RDWRT: CALL SETUP ;GET READY FD89 DB9B IN DFLAG FD8B E610 ANI 10H ;HEAD LOADED? FD8D 3E04 MVI A,4 JRZ RDWRT1 ;JUMP IF NOT FD8F+2801 DB 28H,RDWRT1-$-1 FD91 AF XRA A ;RESET HEAD LD FLAG FD92 C688 RDWRT1: ADI 88H ;READ COMMAND FD94 4F MOV C,A ;SAVE IT FD95 3A86F4 LDA TRACK ;TEST FOR TRK 0 FD98 B7 ORA A JRNZ RDWRT4 ;NOT TRACK 0 FD99+2009 DB 20H,RDWRT4-$-1 FD9B 3A87F4 LDA SECTOR ;TEST FOR SIDE 1 BIT 7,A FD9E+CB7F DB 0CBH,7*8+A+40H FDA0 1601 MVI D,1 JRZ RDWRT2 ;TRK 0, SIDE 0 = SD FDA2+2808 DB 28H,RDWRT2-$-1 RDWRT4: LDX L,15 ;GET SECTOR SIZE FDA4+DD6E0F DB 0DDH,L*8+46H,15 LDX H,16 FDA7+DD6610 DB 0DDH,H*8+46H,16 FDAA 29 DAD H FDAB 54 MOV D,H FDAC 2A8BF4 RDWRT2: LHLD DMAAD ;GET DMA ADDRESS FDAF 3A87F4 RDWRT3: LDA SECTOR ;TEST FOR SIDE 1 FDB2 E680 ANI 80H FDB4 79 MOV A,C ;REGET COMMAND FDB5 C8 RZ ;SIDE 0 FDB6 F602 ORI 2 ;SELECT SIDE 1 CP/M RMAC ASSEM 1.1 #020 << MYBIOS FOR GSR BOARD VERSION OF 21 APR 84 RHP>> FDB8 BF CMP A ;CLEAR THE FLAGS FDB9 C9 RET FDBA 3A87F4 TST128: LDA SECTOR BIT 3,(IX+18) ;SD 1 < 128? FDBD+CB6E DB 0CBH,3*8+(IX+18)+40H FDBF C8 RZ ;SD 1 > 128 FDC0 E67F ANI 7FH ;SD 1 < 128 FDC2 C9 RET ; ; ;SELECTS DRIVE ; FDC3 2187F4 SETUP: LXI H,SECTOR ;POINT TO SECTOR FDC6 DB9B IN DFLAG FDC8 E640 ANI 40H ;TEST FOR TRK 0 FDCA 3A8EF4 LDA HSELCD ;GET SEL CODE JRNZ SETUP2 ;NOT TRK 0 FDCD+2004 DB 20H,SETUP2-$-1 BIT 7,M ;TEST FOR SIDE 1 FDCF+CB7E DB 0CBH,7*8+M+40H JRZ SETUP3 ;TRK 0, SIDE 0 IS SD FDD1+280C DB 28H,SETUP3-$-1 SETUP2: BIT 7,(IX+18) ;TEST FOR DD/SD FDD3+CB8E DB 0CBH,7*8+(IX+18)+40H JRZ SETUP4 ;THIS DSK IS SD FDD5+2802 DB 28H,SETUP4-$-1 RES 6,A ;SET DD FDD7+CBB7 DB 0CBH,6*8+A+80H SETUP4: BIT 7,M ;TEST FOR SIDE 1 FDD9+CB7E DB 0CBH,7*8+M+40H JRZ SETUP3 ;SIDE 0 FDDB+2802 DB 28H,SETUP3-$-1 SETB 5,A ;SELECT SIDE 1 FDDD+CBEF DB 0CBH,5*8+A+0C0H FDDF D39B SETUP3: OUT DCNTL FDE1 C9 RET ; ; ;DISABLE WAIT STATES ; FDE2 3A8EF4 DWAIT: LDA HSELCD ;RESET AUTO-WAIT FDE5 E67F ANI 7FH FDE7 D39B OUT DCNTL FDE9 C9 RET ; ; ; EPBASE: ;DISK PARAMETER HEADER FOR DISK 00 FDEA 94EE0000 DW TD0,0 FDEE 00000000 DW 0,0 FDF2 00F180EE DW DIRBF,DP0 FDF6 80F380F1 DW CHK00,ALL00 ;DISK PARAMETER HEADER FOR DISK 01 FDFA 14EF0000 DW TD1,0 FDFE 00000000 DW 0,0 CP/M RMAC ASSEM 1.1 #021 << MYBIOS FOR GSR BOARD VERSION OF 21 APR 84 RHP>> FE02 00F100EF DW DIRBF,DP1 FE06 C0F300F2 DW CHK01,ALL01 ;DISK PARAMETER HEADER FOR DISK 02 FE0A 94EF0000 DW TD2,0 FE0E 00000000 DW 0,0 FE12 00F180EF DW DIRBF,DP2 FE16 00F480F2 DW CHK02,ALL02 ;DISK PARAMETER HEADER FOR DISK 03 FE1A 14F00000 DW TD3,0 FE1E 00000000 DW 0,0 FE22 00F100F0 DW DIRBF,DP3 FE26 40F400F3 DW CHK03,ALL03 0040 = EPLGTH EQU $-EPBASE ; ; ; THE FOLLOWING TABLE IS THE DEFAULT ; DISK PARAMETER TABLE. IT WILL CONTAIN ; AN 8" SINGLE SIDE SINGLE DENSITY TABLE ; AT COLD START TIME, (RESET OR POWER ON). ; ANY TIME A VALID TABLE IS NOT FOUND ON ; A DISK BEING LOGGED-IN, THIS TABLE ; WILL BE LOADED INSTEAD. ; FE2A 1A00 DEFLT: DW 26 ;SECTORS PER TRACK FE2C 03 DB 3 ;BLOCK SHIFT FACTOR FE2D 07 DB 7 ;BLOCK MASK FE2E 00 DB 0 ;EXTENT MASK FE2F F200 DW 242 ;BLOCKS PER DISKETTE FE31 3F00 DW 63 ;# DIRECTORY ENTRIES FE33 C0 DB 0C0H ;ALLOC 0 FE34 00 DB 0 ;ALLOC 1 FE35 1000 DW 16 ;DIR CHECK VECTOR SIZE FE37 0200 DW 2 ;SYSTEM TRACK OFFSET FE39 8000 DW 128 ;BYTES PER SECTOR FE3B 4D DB 77 ;TRACKS PER DISK ; CONTROL BYTE FE3C 01 DB 00000001B ; BIT 0 = 8"/5" ; BIT 1 = DS/SS ; BIT 2 = SEC 0/SEC 1 ; BIT 3 = SD 1 < 128 ; BIT 4 = INV DATA ; BIT 5 = NON-CYLINDER ; BIT 6 = UNDEFINED ; BIT 7 = DD/SD FE3D 1A DB 26 ;PHYSICAL SEC/TRK ; ; SECTOR TRANSLATE TABLE ; FE3E 01070D1319T8S4: DB 1,7,13,19,25 FE43 050B1117 DB 5,11,17,23 FE47 03090F15 DB 3,9,15,21 FE4B 02080E141A DB 2,8,14,20,26 FE50 060C1218 DB 6,12,18,24 FE54 040A1016 DB 4,10,16,22 CP/M RMAC ASSEM 1.1 #022 << MYBIOS FOR GSR BOARD VERSION OF 21 APR 84 RHP>> ; ; ;SCRATCH RAM AREA FOR BDOS USE ; EA80 = BEGDAT EQU BIOS+128;BEGINNING OF DATA AREA EA80 ORG BEGDAT EA80 DBUF: DS 1024 ;DEBLOCK BUFFER EE80 DP0: DS 20 ;DISK PARMETER TABLES EE94 TD0: DS 108 EF00 DP1: DS 20 EF14 TD1: DS 108 EF80 DP2: DS 20 EF94 TD2: DS 108 F000 DP3: DS 20 F014 TD3: DS 108 F080 UTABLE: DS 128 ;USER DISK PARAMETER TABLE F100 DIRBF: DS 128 ;SCRATCH DIRECTORY AREA F180 ALL00: DS 128 ;ALLOCATION VECTOR 0 F200 ALL01: DS 128 ;ALLOCATION VECTOR 1 F280 ALL02: DS 128 ;ALLOCATION VECTOR 2 F300 ALL03: DS 128 ;ALLOCATION VECTOR 3 F380 CHK00: DS 64 ;CHECK VECTOR 0 F3C0 CHK01: DS 64 ;CHECK VECTOR 1 F400 CHK02: DS 64 ;CHECK VECTOR 2 F440 CHK03: DS 64 ;CHECK VECTOR 3 F480 SELFLG: DS 1 ;USER TABLE FLAG F481 DSKSEL: DS 4 ;DISK ACCESS TABLE F485 DISKNO: DS 1 ;DISK PARAMATERS F486 TRACK: DS 1 F487 SECTOR: DS 1 F488 STATUS: DS 1 F489 CMND: DS 1 F48A RWFLG: DS 1 F48B DMAAD: DS 2 F48D PARFLG: DS 1 ;PAR ERROR FLAG F48E HSELCD: DS 1 ;HOST SELECT CODE F48F HSTBLK: DS 1 ;CPM SEC/PHY SEC F490 BLKCNT: DS 1 ;REC/CPMBLK F491 SECMSK: DS 1 ;SECTOR MASK F492 WRTYPE: DS 1 ;WRITE TYPE F493 UNACNT: DS 1 ;UNALOC REC COUNT F494 UNADSK: DS 1 ;LAST UNALOC DISK F495 UNATRK: DS 1 ;LAST UNALOC TRACK F496 UNASEC: DS 1 ;LAST UNALOC SECTOR F497 SEKDSK: DS 1 ;SEEK DISK F498 SEKTRK: DS 1 ;SEEK TRACK F499 SEKSEC: DS 1 ;SEEK SECTOR F49A SEKHST: DS 1 ;PHYSICAL SEC ADR F49B SIDSEL: DS 1 ;SIDE SELECT STORAGE F49C HSTWRT: DS 1 ;HOST WRITTEN FLAG F49D HSTACT: DS 1 ;HOST ACTIVE FLAG F49E RSFLAG: DS 1 ;READ SECTOR FLAG F49F READOP: DS 1 ;1=READ, 0=WRITE F4A0 LUNIT: DS 1 ;LAST SELECTED DRIVE F4A1 ERFLAG: DS 1 ;ERROR FLAG F4A2 RFLAG: DS 1 ;CPM READ FLAG CP/M RMAC ASSEM 1.1 #023 << MYBIOS FOR GSR BOARD VERSION OF 21 APR 84 RHP>> F4A3 BTSEC: DS 1 ;NO OF BOOT SECS F4A4 SEKDMA: DS 2 ;SEEK DMA ADDRESS F4A6 CTBLP: DS 2 ;CURRENT TBL ADR F4A8 UTBLP: DS 2 ;UNALOC TBL ADR F4AA SECCNT: DS 1 ;SECS/TRK FOR BOOT F4AB DPBASE: DS EPLGTH ;CPM DISK PARAMETER HEADERS F4EB IDSV: DS 6 0A71 = DATSIZ EQU $-BEGDAT ;SIZE OF SCRATCH RAM ; ; ;END OF PROGRAM ; ; ; F4F1 END