From ed53030de2b61df992f26597e4b877fe5fdb4427 Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Sun, 10 Dec 2023 17:28:04 -0800 Subject: [PATCH] Extend IDE Reset Delay & Support Duodyne FDC - The post-reset delay of both the IDE and PPIDE drivers has been extended. The SD-IDE adapters need more time to initialize before being ready to behave as proper IDE devices. - Added support for the FDC section of the Duodyne Disk-IO board. --- Source/Apps/FDU/fdu.asm | 45 +++++++++++++++++++++++++++------------- Source/Apps/FDU/fdu.doc | 29 +++++++++++++++++--------- Source/HBIOS/cfg_duo.asm | 4 ++-- Source/HBIOS/fd.asm | 22 +++++++++++++++----- Source/HBIOS/ide.asm | 4 ++-- Source/HBIOS/ppide.asm | 4 ++-- Source/HBIOS/std.asm | 3 ++- Source/ver.inc | 2 +- Source/ver.lib | 2 +- 9 files changed, 77 insertions(+), 38 deletions(-) diff --git a/Source/Apps/FDU/fdu.asm b/Source/Apps/FDU/fdu.asm index 4a68735e..82e89aac 100644 --- a/Source/Apps/FDU/fdu.asm +++ b/Source/Apps/FDU/fdu.asm @@ -48,7 +48,8 @@ ; 2020-04-29: v5.5 ADDED SUPPORT FOR ETCHED PIXELS FDC ; 2020-12-12: v5.6 UPDATED SMALLZ80 TO NEW I/O ADDRESSES ; 2021-03-24: v5.7 ADDED SOME SINGLE-SIDED FORMATS -; 2021-07-26: v5.8 ADDED SUPPORT MBC FDC +; 2021-07-26: v5.8 ADDED SUPPORT FOR NHYODYNE (MBC) FDC +; 2023-12-10: v5.9 ADDED SUPPORT FOR DUODYNE (DUO) FDC ; ;_______________________________________________________________________________ ; @@ -85,6 +86,7 @@ FDC_SMZ80 .EQU 8 FDC_DYNO .EQU 9 FDC_EPFDC .EQU 10 FDC_MBC .EQU 11 +FDC_DUO .EQU 12 ; ; FDC MODE ; @@ -219,8 +221,8 @@ INIT5: XOR A RET -STR_BANNER .DB "Floppy Disk Utility (FDU) v5.8, 26-Jul-2021$" -STR_BANNER2 .DB "Copyright (C) 2021, Wayne Warthen, GNU GPL v3","$" +STR_BANNER .DB "Floppy Disk Utility (FDU) v5.9, 10-Dec-2023$" +STR_BANNER2 .DB "Copyright (C) 2023, Wayne Warthen, GNU GPL v3","$" STR_HBIOS .DB " [HBIOS]$" STR_UBIOS .DB " [UBIOS]$" ; @@ -292,6 +294,7 @@ FDCTBL: ; LABEL CONFIG DATA .DW STR_DYNO, CFG_DYNO .DW STR_EPFDC, CFG_EPFDC .DW STR_MBC, CFG_MBC + .DW STR_DUO, CFG_DUO FDCCNT .EQU ($-FDCTBL)/4 ; FD CONTROLLER COUNT ; ; FDC LABEL STRINGS @@ -307,7 +310,8 @@ STR_RCWDC .TEXT "RC-WDC$" STR_SMZ80 .TEXT "SMZ80$" STR_DYNO .TEXT "DYNO$" STR_EPFDC .TEXT "EPFDC$" -STR_MBC .TEXT "MBC$" +STR_MBC .TEXT "NHYODYNE$" +STR_DUO .TEXT "DUODYNE$" ; ; FDC CONFIGURATION BLOCKS ; @@ -448,7 +452,18 @@ CFG_MBC: .DB 035H ; CONFIGURATION CONTROL REGISTER .DB 036H ; DACK (WHEN READ) .DB 037H ; TERMINAL COUNT (W/ DACK) - .DB 0FFH ; NOT USED BY ZETA SBC V2 + .DB 0FFH ; NOT USED + .DB _PCAT ; MODE= +; +CFG_DUO: + .DB 080H ; FDC MAIN STATUS REGISTER + .DB 081H ; FDC DATA PORT + .DB 0FFH ; DATA INPUT REGISTER + .DB 086H ; DIGITAL OUTPUT REGISTER (WHEN WRITTEN) + .DB 085H ; CONFIGURATION CONTROL REGISTER + .DB 086H ; DACK (WHEN READ) + .DB 087H ; TERMINAL COUNT (W/ DACK) + .DB 0FFH ; NOT USED .DB _PCAT ; MODE= ; FDCID .DB 0 ; FDC IDENTIFIER (0 INDEXED) @@ -470,7 +485,8 @@ FSS_MENU: .TEXT " (I) SmallZ80 Expansion\r\n" .TEXT " (J) Dyno-Card FDC, D1030\r\n" .TEXT " (K) RCBus EPFDC\r\n" - .TEXT " (L) Multi-Board Computer FDC\r\n" + .TEXT " (L) Nhyodyne FDC\r\n" + .TEXT " (M) Duodyne FDC\r\n" .TEXT " (X) Exit\r\n" .TEXT "=== OPTION ===> $\r\n" ; @@ -1561,6 +1577,7 @@ MD_MAP: .DB %00000001 ; DYNO POLL .DB %00000001 ; EPFDC POLL .DB %00000001 ; MBC POLL + .DB %00000001 ; DUO POLL ; ; MEDIA DESCRIPTION BLOCK ; @@ -2021,7 +2038,7 @@ FM_DRAW0B: ; ZETA, DIO3 LD A,(FST_DOR) AND 00000010B JR FM_DRAW1 -FM_DRAW0C: ; DIDE, N8, ZETA2, RCWDC, SMZ80, DYNO, EPFDC, MBC +FM_DRAW0C: ; DIDE, N8, ZETA2, RCWDC, SMZ80, DYNO, EPFDC, MBC, DUO LD A,(FST_DOR) AND 11110000B JR FM_DRAW1 @@ -2174,7 +2191,7 @@ FM_MOTOR0B: ; ZETA, DIO3 LD A,(FST_DOR) AND 00000010B JR FM_MOTOR1 -FM_MOTOR0C: ; DIDE, N8, ZETA2, RCWDC, SMZ80, DYNO, EPFDC, MBC +FM_MOTOR0C: ; DIDE, N8, ZETA2, RCWDC, SMZ80, DYNO, EPFDC, MBC, DUO LD A,(FST_DOR) AND 11110000B JR FM_MOTOR1 @@ -2913,7 +2930,7 @@ FC_INIT1: ; DIO FC_INIT2: ; ZETA, DIO3 LD A,(FCD_DORB) JR FC_INIT5 -FC_INIT3: ; DIDE, N8, ZETA2, RCWDC, SMZ80, DYNO, EPFDC, MBC +FC_INIT3: ; DIDE, N8, ZETA2, RCWDC, SMZ80, DYNO, EPFDC, MBC, DUO LD A,(FCD_DORC) JR FC_INIT5 FC_INIT4: ; WDSMC @@ -2957,7 +2974,7 @@ FC_RESETFDC1: ; ZETA, DIO3, RCSMC POP AF OUT (C),A JR FC_RESETFDC3 -FC_RESETFDC2: ; DIDE, N8, ZETA2, RCWDC, SMZ80, DYNO, EPFDC, MBC +FC_RESETFDC2: ; DIDE, N8, ZETA2, RCWDC, SMZ80, DYNO, EPFDC, MBC, DUO LD A,0 OUT (C),A LD A,(FST_DOR) @@ -2984,7 +3001,7 @@ FC_PULSETC: ;RES 0,A ;OUT (C),A ;JR FC_PULSETC2 -;FC_PULSETC1: ; DIDE, N8, ZETA2, RCWDC, SMZ80, DYNO, EPFDC, MBC +;FC_PULSETC1: ; DIDE, N8, ZETA2, RCWDC, SMZ80, DYNO, EPFDC, MBC, DUO ;LD C,(IY+CFG_TC) ;IN A,(C) ;JR FC_PULSETC2 @@ -3016,7 +3033,7 @@ FC_MOTORON2: ; ZETA, DIO3 LD HL,FST_DOR ; POINT TO FDC_DOR SET 1,(HL) JR FC_MOTORON5 -FC_MOTORON3: ; DIDE, N8, ZETA2, RCWDC, SMZ80, DYNO, EPFDC, MBC +FC_MOTORON3: ; DIDE, N8, ZETA2, RCWDC, SMZ80, DYNO, EPFDC, MBC, DUO LD HL,FST_DOR ; POINT TO FDC_DOR LD A,(HL) ; START WITH CURRENT DOR AND 11111100B ; GET RID OF ANY ACTIVE DS BITS @@ -3080,7 +3097,7 @@ FC_MOTOROFF2: ; ZETA, DIO3 LD HL,FST_DOR ; POINT TO FDC_DOR RES 1,(HL) JR FC_MOTOROFF5 -FC_MOTOROFF3: ; DIDE, N8, ZETA2, RCWDC, SMZ80, DYNO, EPFDC, MBC +FC_MOTOROFF3: ; DIDE, N8, ZETA2, RCWDC, SMZ80, DYNO, EPFDC, MBC, DUO LD HL,FST_DOR ; POINT TO FDC_DOR LD A,DORC_INIT LD (HL),A @@ -3950,7 +3967,7 @@ DORB_BR500 .EQU 10100000B ; 500KBPS ; DORB_INIT .EQU DORB_BR250 ; -; *** DIDE/N8/ZETA2/RCWDC/SMZ80/DYNO/EPFDC/MBC *** +; *** DIDE/N8/ZETA2/RCWDC/SMZ80/DYNO/EPFDC/MBC/DUO *** ; DORC_INIT .EQU 00001100B ; SOFT RESET INACTIVE, DMA ENABLED ; diff --git a/Source/Apps/FDU/fdu.doc b/Source/Apps/FDU/fdu.doc index 8ee61e1e..e80b9a8f 100644 --- a/Source/Apps/FDU/fdu.doc +++ b/Source/Apps/FDU/fdu.doc @@ -1,14 +1,15 @@ ================================================================ -Floppy Disk Utility (FDU) v5.3 for RetroBrew Computers -Disk IO / Zeta / Dual-IDE / N8 / RCBus / SmallZ80 / Dyno +Floppy Disk Utility (FDU) v5.9 for RetroBrew Computers +Disk IO / Zeta / Dual-IDE / N8 / RCBus / SmallZ80 / Dyno / Nhyodyne / Duodyne ================================================================ -Updated January 5, 2020 +Updated December 12, 2023 by Wayne Warthen (wwarthen@gmail.com) Application to test the hardware functionality of the Floppy Disk Controller (FDC) on the ECB DISK I/O, DISK I/O V3, ZETA -SBC, Dual IDE w/ Floppy, or N8 board. +SBC, Dual IDE w/ Floppy, N8, RCBus, SmallZ80, Dyno, Nhyodyne, +Duodyne systems. The intent is to provide a testbed that allows direct testing of all possible media types and modes of access. The @@ -77,9 +78,10 @@ supported: - RCBus - SmallZ80 - Dyno - - MBC + - Nhyodyne (MBC) + - Duodyne (DUO) -You must be using either a RomWBW or UBA based OS version. +You must be using either a RomWBW or UNA based OS version. You must have one of the following floppy disk controllers: @@ -93,7 +95,8 @@ You must have one of the following floppy disk controllers: - RCBus Scott Baker WDC-based Floppy Module - SmallZ80 FDC - Dyno FDC - - MBC FDC + - Nhyodyne (MBC) FDC + - Duodyne (DUO) FDC Finally, you will need a floppy drive connected via an appropriate cable: @@ -165,8 +168,11 @@ hardwired I/O ranges are assumed in the code. Dyno does not have any relevant jumper settings. The hardwired I/O ranges are assumed in the code. -The MBC FDC is expected to be strapped to use neither INT nor NMI. It -is also not expected to use DMA. +The Nhyodyne (MBC) FDC is expected to be strapped to use neither INT +nor NMI. It is also not expected to use DMA. + +The Duodyne (DUO) FDC is expected to be strapped to use neither INT +nor NMI. It is also not expected to use DMA. Modes of Operation ------------------ @@ -533,4 +539,7 @@ WW 3/24/2021: v5.7 - Added support for a few single-sided formats WW 7/26/2021: v5.8 - - Added support for MBC FDC + - Added support for Nhyodyne (MBC) FDC + +WW 12/10/2023: v5.9 + - Added support for Duodyne (DUO) FDC diff --git a/Source/HBIOS/cfg_duo.asm b/Source/HBIOS/cfg_duo.asm index c73532df..861e42bd 100644 --- a/Source/HBIOS/cfg_duo.asm +++ b/Source/HBIOS/cfg_duo.asm @@ -178,8 +178,8 @@ MDTRACE .EQU 1 ; MD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) MDFFENABLE .EQU FALSE ; MD: ENABLE FLASH FILE SYSTEM ; ; -FDENABLE .EQU FALSE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) -FDMODE .EQU FDMODE_MBC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] +FDENABLE .EQU TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +FDMODE .EQU FDMODE_DUO ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] FDCNT .EQU 2 ; FD: NUMBER OF FLOPPY DRIVES ON THE INTERFACE (1-2) FDTRACE .EQU 1 ; FD: TRACE LEVEL (0=NO,1=FATAL,2=ERRORS,3=ALL) FDMAUTO .EQU TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS diff --git a/Source/HBIOS/fd.asm b/Source/HBIOS/fd.asm index 8512dd71..fc52bf77 100644 --- a/Source/HBIOS/fd.asm +++ b/Source/HBIOS/fd.asm @@ -84,6 +84,14 @@ FDC_DCR .EQU $35 ; CONFIGURATION CONTROL REGISTER FDC_TC .EQU $37 ; TERMINAL COUNT (W/ DACK) #DEFINE FDMODE_STR "MBC" #ENDIF +#IF (FDMODE == FDMODE_DUO) +FDC_MSR .EQU $80 ; 8272 MAIN STATUS REGISTER +FDC_DATA .EQU $81 ; 8272 DATA PORT +FDC_DOR .EQU $86 ; DIGITAL OUTPUT REGISTER +FDC_DCR .EQU $85 ; CONFIGURATION CONTROL REGISTER +FDC_TC .EQU $87 ; TERMINAL COUNT (W/ DACK) + #DEFINE FDMODE_STR "DUO" +#ENDIF ; ; ; DISK OPERATIONS @@ -515,7 +523,7 @@ DOR_INIT .EQU 11100000B ; INITIAL DEFAULT LATCH VALUE ; ; *** DIDE/N8/ZETA V2 *** ; -#IF ((FDMODE == FDMODE_DIDE) | (FDMODE == FDMODE_N8) | (FDMODE == FDMODE_ZETA2) | (FDMODE == FDMODE_RCWDC) | (FDMODE == FDMODE_DYNO) | (FDMODE == FDMODE_EPFDC) | (FDMODE == FDMODE_MBC)) +#IF ((FDMODE == FDMODE_DIDE) | (FDMODE == FDMODE_N8) | (FDMODE == FDMODE_ZETA2) | (FDMODE == FDMODE_RCWDC) | (FDMODE == FDMODE_DYNO) | (FDMODE == FDMODE_EPFDC) | (FDMODE == FDMODE_MBC) | (FDMODE == FDMODE_DUO)) DOR_INIT .EQU 00001100B ; SOFT RESET INACTIVE, DMA ENABLED DOR_BR250 .EQU DOR_INIT DOR_BR500 .EQU DOR_INIT @@ -812,6 +820,10 @@ FD_INIT: #IF (FDMODE == FDMODE_MBC) PRTS("MBC$") #ENDIF +; +#IF (FDMODE == FDMODE_DUO) + PRTS("DUO$") +#ENDIF ; PRTS(" IO=0x$") LD A,FDC_MSR @@ -1455,7 +1467,7 @@ FC_SETDOR: ; ; SET FST_DCR ; -#IF ((FDMODE == FDMODE_DIDE) | (FDMODE == FDMODE_N8) | (FDMODE == FDMODE_ZETA2) | (FDMODE == FDMODE_RCWDC) | (FDMODE == FDMODE_DYNO) | (FDMODE == FDMODE_EPFDC) | (FDMODE == FDMODE_MBC)) +#IF ((FDMODE == FDMODE_DIDE) | (FDMODE == FDMODE_N8) | (FDMODE == FDMODE_ZETA2) | (FDMODE == FDMODE_RCWDC) | (FDMODE == FDMODE_DYNO) | (FDMODE == FDMODE_EPFDC) | (FDMODE == FDMODE_MBC) | (FDMODE == FDMODE_DUO)) ; FC_SETDCR LD (FST_DCR),A @@ -1487,7 +1499,7 @@ FC_RESETFDC: #IF ((FDMODE == FDMODE_ZETA) | (FDMODE == FDMODE_DIO3) | (FDMODE == FDMODE_RCSMC)) RES 7,A #ENDIF -#IF ((FDMODE == FDMODE_DIDE) | (FDMODE == FDMODE_N8) | (FDMODE == FDMODE_ZETA2) | (FDMODE == FDMODE_RCWDC) | (FDMODE == FDMODE_DYNO) | (FDMODE == FDMODE_EPFDC) | (FDMODE == FDMODE_MBC)) +#IF ((FDMODE == FDMODE_DIDE) | (FDMODE == FDMODE_N8) | (FDMODE == FDMODE_ZETA2) | (FDMODE == FDMODE_RCWDC) | (FDMODE == FDMODE_DYNO) | (FDMODE == FDMODE_EPFDC) | (FDMODE == FDMODE_MBC) | (FDMODE == FDMODE_DUO)) LD A,0 #ENDIF CALL FC_SETDOR @@ -1504,7 +1516,7 @@ FC_RESETFDC: FC_PULSETC: ; PULSING TC NO LONGER REQUIRED BECAUSE WE ONLY READ A SINGLE SECTOR ; -;#IF ((FDMODE == FDMODE_DIDE) | (FDMODE == FDMODE_N8) | (FDMODE == FDMODE_ZETA2) | (FDMODE == FDMODE_RCWDC) | (FDMODE == FDMODE_DYNO) | (FDMODE == FDMODE_EPFDC) | (FDMODE == FDMODE_MBC)) +;#IF ((FDMODE == FDMODE_DIDE) | (FDMODE == FDMODE_N8) | (FDMODE == FDMODE_ZETA2) | (FDMODE == FDMODE_RCWDC) | (FDMODE == FDMODE_DYNO) | (FDMODE == FDMODE_EPFDC) | (FDMODE == FDMODE_MBC) | (FDMODE == FDMODE_DUO)) ; IN A,(FDC_TC) ;#ELSE ; LD A,(FST_DOR) @@ -1561,7 +1573,7 @@ FC_MOTORON1: CP C ; COMPARE TO NEW MOTOR BITS RET Z ; SKIP DELAY, MOTOR WAS ALREADY ON #ENDIF -#IF ((FDMODE == FDMODE_DIDE) | (FDMODE == FDMODE_N8) | (FDMODE == FDMODE_ZETA2) | (FDMODE == FDMODE_RCWDC) | (FDMODE == FDMODE_DYNO) | (FDMODE == FDMODE_EPFDC) | (FDMODE == FDMODE_MBC)) +#IF ((FDMODE == FDMODE_DIDE) | (FDMODE == FDMODE_N8) | (FDMODE == FDMODE_ZETA2) | (FDMODE == FDMODE_RCWDC) | (FDMODE == FDMODE_DYNO) | (FDMODE == FDMODE_EPFDC) | (FDMODE == FDMODE_MBC) | (FDMODE == FDMODE_DUO)) ; SETUP DCR FOR DIDE HARDWARE LD A,(FCD_DCR) ; GET NEW DCR VALUE CALL FC_SETDCR ; AND IMPLEMENT IT diff --git a/Source/HBIOS/ide.asm b/Source/HBIOS/ide.asm index a086456a..aae7173e 100644 --- a/Source/HBIOS/ide.asm +++ b/Source/HBIOS/ide.asm @@ -1391,8 +1391,8 @@ IDE_RESET: ; IMMEDIATELY. A SMALL WAIT IS PERFORMED HERE TO GIVE SUCH DEVICES ; A BETTER CHANCE TO SUCCEED LATER. ; -;;; CALL LDELAY ; DELAY FOR SLAVE INIT - LD DE,150000 / 16 ; +; LD DE,150000 / 16 ; + LD DE,300000 / 16 ; CALL VDELAY ; SMALL DELAY ; JR IDE_RESET3 ; SKIP SOFT RESET diff --git a/Source/HBIOS/ppide.asm b/Source/HBIOS/ppide.asm index 8b027bfd..d70ede57 100644 --- a/Source/HBIOS/ppide.asm +++ b/Source/HBIOS/ppide.asm @@ -1373,8 +1373,8 @@ PPIDE_RESET: ; IMMEDIATELY. A SMALL WAIT IS PERFORMED HERE TO GIVE SUCH DEVICES ; A BETTER CHANCE TO SUCCEED LATER. ; -;;; CALL LDELAY ; DELAY FOR SLAVE INIT - LD DE,150000 / 16 ; +; LD DE,150000 / 16 ; + LD DE,300000 / 16 ; CALL VDELAY ; SMALL DELAY ; JR PPIDE_RESET3 ; SKIP SOFT RESET diff --git a/Source/HBIOS/std.asm b/Source/HBIOS/std.asm index bf7a372a..8ec8b51c 100644 --- a/Source/HBIOS/std.asm +++ b/Source/HBIOS/std.asm @@ -161,7 +161,8 @@ FDMODE_RCSMC .EQU 7 ; RCBUS SMC 9266 @ $40 (SCOTT BAKER) FDMODE_RCWDC .EQU 8 ; RCBUS WDC 37C65 @ $40 (SCOTT BAKER) FDMODE_DYNO .EQU 9 ; DYNO WDC 37C65 @ $84 FDMODE_EPFDC .EQU 10 ; RCBUS ETCHED PIXELS FDC -FDMODE_MBC .EQU 11 ; MULTI-BOARD COMPUTER FDC +FDMODE_MBC .EQU 11 ; NHYODYNE (MBC) FDC +FDMODE_DUO .EQU 12 ; DUODUYNE (DUO) FDC ; ; IDE MODE SELECTIONS ; diff --git a/Source/ver.inc b/Source/ver.inc index 359793f7..0a610dd3 100644 --- a/Source/ver.inc +++ b/Source/ver.inc @@ -2,7 +2,7 @@ #DEFINE RMN 4 #DEFINE RUP 0 #DEFINE RTP 0 -#DEFINE BIOSVER "3.4.0-dev.31" +#DEFINE BIOSVER "3.4.0-dev.32" #define rmj RMJ #define rmn RMN #define rup RUP diff --git a/Source/ver.lib b/Source/ver.lib index 8c059b4e..f7c49ddc 100644 --- a/Source/ver.lib +++ b/Source/ver.lib @@ -3,5 +3,5 @@ rmn equ 4 rup equ 0 rtp equ 0 biosver macro - db "3.4.0-dev.31" + db "3.4.0-dev.32" endm