mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 22:43:15 -06:00
Reintegrate wbw -> trunk
This commit is contained in:
@@ -1582,7 +1582,7 @@ DPB_FD120:
|
||||
.DW 2 ; OFF: RESERVED TRACKS = 2 TRKS * (512 B/SEC * 60 SEC/TRK) = 15K
|
||||
;__________________________________________________________________________________________________
|
||||
;
|
||||
; IBM 1.11MB 8" FLOPPY DRIVE, 74 TRKS, 15 SECS/TRK, 512 BYTES/SEC
|
||||
; IBM 1.11MB 8" FLOPPY DRIVE, 77 TRKS, 15 SECS/TRK, 512 BYTES/SEC
|
||||
; BLOCKSIZE (BLS) = 2K, DIRECTORY ENTRIES = 256
|
||||
;
|
||||
.DB (2048 / 128) ; RECORDS PER BLOCK (BLS / 128)
|
||||
@@ -1591,7 +1591,7 @@ DPB_FD111:
|
||||
.DB 4 ; BSH: BLOCK SHIFT FACTOR
|
||||
.DB 15 ; BLM: BLOCK MASK
|
||||
.DB 0 ; EXM: EXTENT MASK
|
||||
.DW 546 ; DSM: TOTAL STORAGE IN BLOCKS - 1 BLK = ((1,110K - 15K OFF) / 2K BLS) - 1 = 546
|
||||
.DW 569 ; DSM: TOTAL STORAGE IN BLOCKS - 1 BLK = ((1,155K - 15K OFF) / 2K BLS) - 1 = 569
|
||||
.DW 255 ; DRM: DIR ENTRIES - 1 = 256 - 1 = 255
|
||||
.DB 11110000B ; AL0: DIR BLK BIT MAP, FIRST BYTE
|
||||
.DB 00000000B ; AL1: DIR BLK BIT MAP, SECOND BYTE
|
||||
|
||||
158
Source/fd.asm
158
Source/fd.asm
@@ -128,6 +128,34 @@ CMD_DRVSTAT .EQU 00000100B ; CMD,HDS/DS --> ST3
|
||||
CMD_SEEK .EQU 00001111B ; CMD,HDS/DS --> <EMPTY>
|
||||
CMD_VERSION .EQU 00010000B ; CMD --> ST0
|
||||
;
|
||||
;
|
||||
; Specify Command:
|
||||
; +-----+-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
; |Byte | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|
||||
; +-----+-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
; | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
|
||||
; | 1 | ----- STEP RATE ----- | -- HEAD UNLOAD TIME - |
|
||||
; | 2 | ------------ HEAD LOAD TIME ----------- | NDM |
|
||||
; +-----+-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
;
|
||||
;
|
||||
; Step Rate (milliseconds): Head Unload Time (milliseconds): Head Load Time (milliseconds):
|
||||
; +------+------+------+------+------+ +------+------+------+------+------+ +------+------+------+------+------+
|
||||
; | | BITRATE | | | BITRATE | | | BITRATE |
|
||||
; | VAL | 1.0M | 500K | 300K | 250K | | VAL | 1.0M | 500K | 300K | 250K | | VAL | 1.0M | 500K | 300K | 250K |
|
||||
; +------+------+------+------+------+ +------+------+------+------+------+ +------+------+------+------+------+
|
||||
; | 0 | 8.0 | 16.0 | 26.7 | 32.0 | | 0 | 128 | 256 | 426 | 512 | | 0 | 128 | 256 | 426 | 512 |
|
||||
; | 1 | 7.5 | 15.0 | 25.0 | 30.0 | | 1 | 8 | 16 | 26.7 | 32 | | 1 | 1 | 2 | 3.3 | 4 |
|
||||
; | 2 | 7.0 | 14.0 | 23.3 | 28.0 | | 2 | 16 | 32 | 53.3 | 64 | | 2 | 2 | 4 | 6.7 | 8 |
|
||||
; | ... | ... | ... | ... | ... | | ... | ... | ... | ... | ... | | ... | ... | ... | ... | ... |
|
||||
; | 14 | 1.0 | 2.0 | 3.3 | 4.0 | | 14 | 112 | 224 | 373 | 448 | | 126 | 126 | 252 | 420 | 504 |
|
||||
; | 15 | 0.5 | 1.0 | 1.7 | 2.0 | | 15 | 120 | 240 | 400 | 480 | | 127 | 127 | 254 | 423 | 508 |
|
||||
; +------+------+------+------+------+ +------+------+------+------+------+ +------+------+------+------+------+
|
||||
;
|
||||
; IBM PS/2 CALLS FOR:
|
||||
; STEP RATE: 3ms (6ms FOR ALL 41mm OR 720K DRIVES)
|
||||
; HEAD LOAD TIME: 15ms
|
||||
;
|
||||
; STATIC CONFIGURATION, NEVER CHANGES (PRIVATE)
|
||||
;
|
||||
FCD_MT .EQU 000H ; MULTI-TRACK, WE DON'T USE, SET TO 0
|
||||
@@ -145,8 +173,8 @@ FCD_PC720 .DB 050H ; NUMBER OF CYLINDERS
|
||||
.DW 200H ; SECTOR SIZE IN BYTES
|
||||
.DB 02AH ; GAP LENGTH (R/W)
|
||||
.DB 050H ; GAP LENGTH (FORMAT)
|
||||
.DB 0DFH ; SRT/HUT: STEP RATE, IBM PS/2 CALLS FOR 3ms, 0DH = 3ms SRT, HEAD UNLOAD TIME
|
||||
.DB 005H ; HLT/ND: HEAD LOAD TIME, IBM PS/2 CALLS FOR 15ms 08H = 16ms HUT
|
||||
.DB (13 << 4) | 0 ; SRT = 6ms, HUT = 512ms
|
||||
.DB (4 << 1) | 1 ; HLT = 16ms, ND = YES
|
||||
.DB DOR_BR250 ; DOR
|
||||
.DB DCR_BR250 ; DCR
|
||||
.IF (($ - FCD_PC720) != FCD_LEN)
|
||||
@@ -161,8 +189,8 @@ FCD_PC144 .DB 050H ; NUMBER OF CYLINDERS
|
||||
.DW 200H ; SECTOR SIZE IN BYTES
|
||||
.DB 01BH ; GAP LENGTH (R/W)
|
||||
.DB 06CH ; GAP LENGTH (FORMAT)
|
||||
.DB 0DFH ; SRT/HUT: STEP RATE, IBM PS/2 CALLS FOR 3ms, 0DH = 3ms SRT, HEAD UNLOAD TIME
|
||||
.DB 009H ; HLT/ND: HEAD LOAD TIME, IBM PS/2 CALLS FOR 15ms 08H = 16ms HUT
|
||||
.DB (13 << 4) | 0 ; SRT = 3ms, HUT = 256ms
|
||||
.DB (8 << 1) | 1 ; HLT = 16ms, ND = YES
|
||||
.DB DOR_BR500 ; DOR
|
||||
.DB DCR_BR500 ; DCR
|
||||
.IF (($ - FCD_PC144) != FCD_LEN)
|
||||
@@ -177,8 +205,8 @@ FCD_PC360 .DB 028H ; NUMBER OF CYLINDERS
|
||||
.DW 200H ; SECTOR SIZE IN BYTES
|
||||
.DB 02AH ; GAP LENGTH (R/W)
|
||||
.DB 050H ; GAP LENGTH (FORMAT)
|
||||
.DB 0DFH ; SRT/HUT: STEP RATE, IBM PS/2 CALLS FOR 3ms, 0DH = 3ms SRT, HEAD UNLOAD TIME
|
||||
.DB 005H ; HLT/ND: HEAD LOAD TIME, IBM PS/2 CALLS FOR 15ms 08H = 16ms HUT
|
||||
.DB (13 << 4) | 0 ; SRT = 6ms, HUT = 512ms
|
||||
.DB (4 << 1) | 1 ; HLT = 16ms, ND = YES
|
||||
.DB DOR_BR250 ; DOR
|
||||
.DB DCR_BR250 ; DCR
|
||||
.IF (($ - FCD_PC360) != FCD_LEN)
|
||||
@@ -193,15 +221,15 @@ FCD_PC120 .DB 050H ; NUMBER OF CYLINDERS
|
||||
.DW 200H ; SECTOR SIZE IN BYTES
|
||||
.DB 01BH ; GAP LENGTH (R/W)
|
||||
.DB 054H ; GAP LENGTH (FORMAT)
|
||||
.DB 0DFH ; SRT/HUT: STEP RATE, IBM PS/2 CALLS FOR 3ms, 0DH = 3ms SRT, HEAD UNLOAD TIME
|
||||
.DB 009H ; HLT/ND: HEAD LOAD TIME, IBM PS/2 CALLS FOR 15ms 08H = 16ms HUT
|
||||
.DB (10 << 4) | 0 ; SRT = 6ms, HUT = 256ms
|
||||
.DB (8 << 1) | 1 ; HLT = 16ms, ND = YES
|
||||
.DB DOR_BR500 ; DOR
|
||||
.DB DCR_BR500 ; DCR
|
||||
.IF (($ - FCD_PC120) != FCD_LEN)
|
||||
.ECHO "*** FCD_PC120 SIZE ERROR!!! ***\n"
|
||||
.ENDIF
|
||||
;
|
||||
FCD_PC111 .DB 04AH ; NUMBER OF CYLINDERS
|
||||
FCD_PC111 .DB 04DH ; NUMBER OF CYLINDERS
|
||||
.DB 002H ; NUMBER OF HEADS
|
||||
.DB 00FH ; NUMBER OF SECTORS
|
||||
.DB 001H ; START OF TRACK (ID OF FIRST SECTOR, USUALLY 1)
|
||||
@@ -209,8 +237,8 @@ FCD_PC111 .DB 04AH ; NUMBER OF CYLINDERS
|
||||
.DW 200H ; SECTOR SIZE IN BYTES
|
||||
.DB 01BH ; GAP LENGTH (R/W)
|
||||
.DB 054H ; GAP LENGTH (FORMAT)
|
||||
.DB 0DFH ; SRT/HUT: STEP RATE, IBM PS/2 CALLS FOR 3ms, 0DH = 3ms SRT, HEAD UNLOAD TIME
|
||||
.DB 009H ; HLT/ND: HEAD LOAD TIME, IBM PS/2 CALLS FOR 15ms 08H = 16ms HUT
|
||||
.DB (13 << 4) | 0 ; SRT = 3ms, HUT = 256ms
|
||||
.DB (25 << 1) | 1 ; HLT = 50ms, ND = YES
|
||||
.DB DOR_BR500 ; DOR
|
||||
.DB DCR_BR500 ; DCR
|
||||
.IF (($ - FCD_PC111) != FCD_LEN)
|
||||
@@ -285,23 +313,23 @@ DCR_BR500 .EQU 00H ; 500KBPS
|
||||
;
|
||||
; FDC COMMAND STRINGS
|
||||
;
|
||||
FCS_NOP: .TEXT "NOP$"
|
||||
FCS_READ: .TEXT "READ$"
|
||||
FCS_READDEL: .TEXT "READDEL$"
|
||||
FCS_WRITE: .TEXT "WRITE$"
|
||||
FCS_WRITEDEL: .TEXT "WRITEDEL$"
|
||||
FCS_READTRK: .TEXT "READTRK$"
|
||||
FCS_READID: .TEXT "READID$"
|
||||
FCS_FMTTRK: .TEXT "FMTTRK$"
|
||||
FCS_SCANEQ: .TEXT "SCANEQ$"
|
||||
FCS_SCANLOEQ: .TEXT "SCANLOEQ$"
|
||||
FCS_SCANHIEQ: .TEXT "SCANHIEQ$"
|
||||
FCS_RECAL: .TEXT "RECAL$"
|
||||
FCS_SENSEINT: .TEXT "SENSEINT$"
|
||||
FCS_SPECIFY: .TEXT "SPECIFY$"
|
||||
FCS_DRVSTAT: .TEXT "DRVSTAT$"
|
||||
FCS_SEEK: .TEXT "SEEK$"
|
||||
FCS_VERSION: .TEXT "VER$"
|
||||
FCS_NOP .DB "NOP$"
|
||||
FCS_READ .DB "READ$"
|
||||
FCS_READDEL .DB "READDEL$"
|
||||
FCS_WRITE .DB "WRITE$"
|
||||
FCS_WRITEDEL .DB "WRITEDEL$"
|
||||
FCS_READTRK .DB "READTRK$"
|
||||
FCS_READID .DB "READID$"
|
||||
FCS_FMTTRK .DB "FMTTRK$"
|
||||
FCS_SCANEQ .DB "SCANEQ$"
|
||||
FCS_SCANLOEQ .DB "SCANLOEQ$"
|
||||
FCS_SCANHIEQ .DB "SCANHIEQ$"
|
||||
FCS_RECAL .DB "RECAL$"
|
||||
FCS_SENSEINT .DB "SENSEINT$"
|
||||
FCS_SPECIFY .DB "SPECIFY$"
|
||||
FCS_DRVSTAT .DB "DRVSTAT$"
|
||||
FCS_SEEK .DB "SEEK$"
|
||||
FCS_VERSION .DB "VER$"
|
||||
;
|
||||
; FDC COMMAND TABLE
|
||||
;
|
||||
@@ -938,6 +966,27 @@ FC_SETDOR
|
||||
#ENDIF
|
||||
RET
|
||||
;
|
||||
; SET FST_DCR
|
||||
;
|
||||
#IF ((FDMODE == FDMODE_DIDE) | (FDMODE == FDMODE_N8))
|
||||
;
|
||||
FC_SETDCR
|
||||
LD (FST_DCR),A
|
||||
OUT (FDC_DCR),A
|
||||
#IF (FDTRACE >= 3)
|
||||
CALL NEWLINE
|
||||
LD DE,FDSTR_DCR
|
||||
CALL WRITESTR
|
||||
LD DE,FDSTR_ARROW
|
||||
CALL WRITESTR
|
||||
CALL PC_SPACE
|
||||
LD A,(FST_DCR)
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
RET
|
||||
;
|
||||
#ENDIF
|
||||
;
|
||||
; RESET FDC BY PULSING BIT 7 OF LATCH LOW
|
||||
;
|
||||
FC_RESETFDC:
|
||||
@@ -1004,38 +1053,38 @@ FC_MOTORON:
|
||||
#ENDIF
|
||||
#IF ((FDMODE == FDMODE_DIDE) | (FDMODE == FDMODE_N8))
|
||||
; SETUP DCR FOR DIDE HARDWARE
|
||||
LD A,(FCD_DCR)
|
||||
OUT (FDC_DCR),A
|
||||
LD A,(FCD_DCR) ; GET NEW DCR VALUE
|
||||
CALL FC_SETDCR ; AND IMPLEMENT IT
|
||||
|
||||
LD HL,FST_DOR ; POINT TO FDC_DOR
|
||||
LD A,(HL) ; START WITH CURRENT DOR
|
||||
LD HL,FST_DOR ; POINT TO FDC_DOR
|
||||
LD A,(HL) ; START WITH CURRENT DOR
|
||||
PUSH AF
|
||||
AND 11111100B ; GET RID OF ANY ACTIVE DS BITS
|
||||
LD C,A ; SAVE IT FOR NOW
|
||||
LD A,(FCD_DS) ; NOW GET CURRENT DS
|
||||
LD B,A ; PUT IN B FOR LATER
|
||||
OR C ; COMBINE WITH SAVED DOR
|
||||
LD C,A ; RE-SAVE IT
|
||||
INC B ; SET UP B AS LOOP COUNTER (DS + 1)
|
||||
LD A,00001000B ; STARTING BIT PATTERN FOR MOTOR
|
||||
AND 11111100B ; GET RID OF ANY ACTIVE DS BITS
|
||||
LD C,A ; SAVE IT FOR NOW
|
||||
LD A,(FCD_DS) ; NOW GET CURRENT DS
|
||||
LD B,A ; PUT IN B FOR LATER
|
||||
OR C ; COMBINE WITH SAVED DOR
|
||||
LD C,A ; RE-SAVE IT
|
||||
INC B ; SET UP B AS LOOP COUNTER (DS + 1)
|
||||
LD A,00001000B ; STARTING BIT PATTERN FOR MOTOR
|
||||
FC_MOTORON1:
|
||||
RLA ; SHIFT LEFT
|
||||
DJNZ FC_MOTORON1 ; DS TIMES
|
||||
OR C ; COMBINE WITH SAVED
|
||||
LD (HL),A ; COMMIT THE NEW VALUE TO FST_DOR
|
||||
CALL FC_SETDOR ; OUTPUT TO CONTROLLER
|
||||
RLA ; SHIFT LEFT
|
||||
DJNZ FC_MOTORON1 ; DS TIMES
|
||||
OR C ; COMBINE WITH SAVED
|
||||
LD (HL),A ; COMMIT THE NEW VALUE TO FST_DOR
|
||||
CALL FC_SETDOR ; OUTPUT TO CONTROLLER
|
||||
|
||||
LD C,A
|
||||
POP AF
|
||||
CP C
|
||||
RET Z ; MOTOR WAS PREVIOUSLY ON
|
||||
RET Z ; MOTOR WAS PREVIOUSLY ON
|
||||
#ENDIF
|
||||
|
||||
#IF (FDTRACE >= 3)
|
||||
LD DE,FDSTR_MOTDELAY
|
||||
CALL WRITESTR
|
||||
#ENDIF
|
||||
CALL LDELAY ; DELAY FOR MOTOR SPINUP IF NOT PREVIOUSLY ON
|
||||
CALL LDELAY ; DELAY FOR MOTOR SPINUP IF NOT PREVIOUSLY ON
|
||||
RET
|
||||
;
|
||||
; SET FST_DOR FOR MOTOR CONTROL OFF
|
||||
@@ -1046,7 +1095,7 @@ FC_MOTOROFF:
|
||||
CALL NZ,FD_FDCRESET
|
||||
|
||||
LD A,DOR_INIT
|
||||
CALL FC_SETDOR ; OUTPUT TO CONTROLLER
|
||||
CALL FC_SETDOR ; OUTPUT TO CONTROLLER
|
||||
|
||||
#IF (FDTRACE >= 3)
|
||||
LD DE,FDSTR_MOTOFF
|
||||
@@ -1104,7 +1153,7 @@ FOP_CMD4: ; START OF STATUS LOOP, WAIT FOR FDC TO BE READY FOR BYTE
|
||||
CP 0C0H ; HMMMM... RQM=1 & DIO=1, FDC WANTS TO SEND US DATA, UNEXPECTED
|
||||
JR Z,FOP_RES ; GO IMMEDIATELY TO RESULTS???
|
||||
DJNZ FOP_CMD4 ; LOOP TILL COUNTER EXHAUSTED
|
||||
JR FOP_TOSNDCMD ; COUNTER EXHAUSTED, TIMEOUT / EXIT
|
||||
JP FOP_TOSNDCMD ; COUNTER EXHAUSTED, TIMEOUT / EXIT
|
||||
|
||||
FOP_CMD6: ; SEND NEXT BYTE
|
||||
LD A,(HL) ; POINT TO NEXT BYTE TO SEND
|
||||
@@ -1131,6 +1180,10 @@ FOP_X1:
|
||||
;
|
||||
; RESULTS PHASE
|
||||
;
|
||||
; 1) CHECK FST_RC AND BAIL OUT IF SET???
|
||||
; 2) COMPARE MSR CHECKING TO FXR_NULL (WHICH IS RIGHT?)
|
||||
; 3) WHEN DUMPING FRB, USE THE RECORDED LENGTH???
|
||||
;
|
||||
FOP_RES:
|
||||
LD HL,FRB ; POINT TO RECEIVE BUFFER
|
||||
|
||||
@@ -1292,8 +1345,11 @@ FXR_NOP:
|
||||
;
|
||||
; NULL EXECUTION, NO DATA TO READ/WRITE (USED BY READID)
|
||||
;
|
||||
; DO NOTHING, BUT WAIT FOR FDC READY. LOOP NEEDS TO ALLOW FOR
|
||||
; 2 FULL ROTATIONS OF THE DISK WHICH IS 400ms AT 300RPM
|
||||
;
|
||||
FXR_NULL:
|
||||
LD BC,1000H ; BC IS LOOP COUNTER, 4096 ITERATIONS
|
||||
LD BC,$4000 ; LOOP COUNTER, $4000 * 25us = 410ms
|
||||
FXR_NULL1:
|
||||
CALL DELAY
|
||||
IN A,(FDC_MSR) ; GET MSR
|
||||
@@ -1552,6 +1608,7 @@ FDSTR_MOTON .TEXT "\r\nMOTOR ON$"
|
||||
FDSTR_MOTOFF .TEXT "\r\nMOTOR OFF$"
|
||||
FDSTR_MOTDELAY .TEXT "\r\nMOTOR DELAY$"
|
||||
FDSTR_DOR .TEXT "DOR$"
|
||||
FDSTR_DCR .TEXT "DCR$"
|
||||
FDSTR_RESETFDC .TEXT "\r\nRESET FDC$"
|
||||
FDSTR_SELECT .TEXT "\r\nSELECT: $"
|
||||
#ENDIF ; (FDTRACE >= 3)
|
||||
@@ -1582,6 +1639,7 @@ FCP_BUFSIZ .EQU $-FCP_BUF
|
||||
;
|
||||
FST_RC .DB 00H
|
||||
FST_DOR .DB 00H
|
||||
FST_DCR .DB 00H
|
||||
;
|
||||
; FDC RESULTS BUFFER
|
||||
;
|
||||
|
||||
@@ -56,7 +56,7 @@ CKS_FD120 .EQU 64 ; CKS: DIR ENT / 4 = 256 / 4 = 64
|
||||
ALS_FD120 .EQU 74 ; ALS: BLKS / 8 = 592 / 8 = 74 (ROUNDED UP)
|
||||
;
|
||||
CKS_FD111 .EQU 64 ; CKS: DIR ENT / 4 = 256 / 4 = 64
|
||||
ALS_FD111 .EQU 69 ; ALS: BLKS / 8 = 592 / 8 = 74 (ROUNDED UP)
|
||||
ALS_FD111 .EQU 72 ; ALS: BLKS / 8 = 570 / 8 = 72 (ROUNDED UP)
|
||||
;
|
||||
#IF (FDMAUTO)
|
||||
; ASSUME WORST CASE SIZES
|
||||
|
||||
@@ -22,7 +22,7 @@ KBD_DATA .EQU KBD_IOBASE + $02
|
||||
;
|
||||
; TIMING CONSTANTS
|
||||
;
|
||||
KBD_WAITTO .EQU 150
|
||||
KBD_WAITTO .EQU 0 ; 0 IS MAX WAIT (256)
|
||||
;
|
||||
; STATUS BITS (FOR KBD_STATUS)
|
||||
;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#DEFINE RMJ 2
|
||||
#DEFINE RMN 5
|
||||
#DEFINE RUP 0
|
||||
#DEFINE RTP 14
|
||||
#DEFINE RTP 15
|
||||
#DEFINE BIOSVER "2.5"
|
||||
#DEFINE BIOSBLD "Prerelease Build 14"
|
||||
#DEFINE BIOSBLD "Build 15"
|
||||
#DEFINE REVISION 412
|
||||
|
||||
Reference in New Issue
Block a user