mirror of https://github.com/wwarthen/RomWBW.git
13 changed files with 1026 additions and 72 deletions
@ -0,0 +1,72 @@ |
|||||
|
; |
||||
|
;================================================================================================== |
||||
|
; STD Z180 STANDARD CONFIGURATION |
||||
|
;================================================================================================== |
||||
|
; |
||||
|
; THE COMPLETE SET OF DEFAULT CONFIGURATION SETTINGS FOR THIS PLATFORM ARE FOUND IN THE |
||||
|
; CFG_<PLT>.ASM INCLUDED FILE WHICH IS FOUND IN THE PARENT DIRECTORY. THIS FILE CONTAINS |
||||
|
; COMMON CONFIGURATION SETTINGS THAT OVERRIDE THE DEFAULTS. IT IS INTENDED THAT YOU MAKE |
||||
|
; YOUR CUSTOMIZATIONS IN THIS FILE AND JUST INHERIT ALL OTHER SETTINGS FROM THE DEFAULTS. |
||||
|
; EVEN BETTER, YOU CAN MAKE A COPY OF THIS FILE WITH A NAME LIKE <PLT>_XXX.ASM AND SPECIFY |
||||
|
; YOUR FILE IN THE BUILD PROCESS. |
||||
|
; |
||||
|
; THE SETTINGS BELOW ARE THE SETTINGS THAT ARE MOST COMMONLY MODIFIED FOR THIS PLATFORM. |
||||
|
; MANY OF THEM ARE EQUAL TO THE SETTINGS IN THE INCLUDED FILE, SO THEY DON'T REALLY DO |
||||
|
; ANYTHING AS IS. THEY ARE LISTED HERE TO MAKE IT EASY FOR YOU TO ADJUST THE MOST COMMON |
||||
|
; SETTINGS. |
||||
|
; |
||||
|
; N.B., SINCE THE SETTINGS BELOW ARE REDEFINING VALUES ALREADY SET IN THE INCLUDED FILE, |
||||
|
; TASM INSISTS THAT YOU USE THE .SET OPERATOR AND NOT THE .EQU OPERATOR BELOW. ATTEMPTING |
||||
|
; TO REDEFINE A VALUE WITH .EQU BELOW WILL CAUSE TASM ERRORS! |
||||
|
; |
||||
|
; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO |
||||
|
; DIRECTORIES ABOVE THIS ONE). |
||||
|
; |
||||
|
#DEFINE PLATFORM_NAME "GM STD BUS Z180", " [", CONFIG, "]" |
||||
|
; |
||||
|
#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON <CR> OR AUTO BOOT |
||||
|
; |
||||
|
#include "cfg_GMZ180.asm" |
||||
|
; |
||||
|
CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ |
||||
|
CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP |
||||
|
; |
||||
|
Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 |
||||
|
Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3) |
||||
|
Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) |
||||
|
; |
||||
|
LEDENABLE .SET FALSE ; ENABLE STATUS LED (SINGLE LED) |
||||
|
LEDMODE .SET LEDMODE_STD ; LEDMODE_[STD|SC|RTC|NABU] |
||||
|
; |
||||
|
FPLED_ENABLE .SET FALSE ; FP: ENABLES FRONT PANEL LEDS |
||||
|
FPLED_IO .SET $00 ; FP: PORT ADDRESS FOR FP LEDS |
||||
|
; |
||||
|
DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) |
||||
|
INTRTCENABLE .SET TRUE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) |
||||
|
; |
||||
|
UARTENABLE .SET FALSE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) |
||||
|
ASCIENABLE .SET TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) |
||||
|
ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) |
||||
|
SIOENABLE .SET FALSE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) |
||||
|
; |
||||
|
TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) |
||||
|
TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) |
||||
|
TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] |
||||
|
MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) |
||||
|
EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) |
||||
|
VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD |
||||
|
; |
||||
|
AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER |
||||
|
AYMODE .SET AYMODE_RCZ180 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC] |
||||
|
SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER |
||||
|
; |
||||
|
FDENABLE .SET FALSE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) |
||||
|
FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPWDC] |
||||
|
; |
||||
|
IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) |
||||
|
PPIDEENABLE .SET FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) |
||||
|
SDENABLE .SET TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) |
||||
|
SDMODE .SET SDMODE_GM ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR] |
||||
|
SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD & SC ONLY |
||||
|
; |
||||
|
PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) |
||||
@ -0,0 +1,358 @@ |
|||||
|
; |
||||
|
;================================================================================================== |
||||
|
; ROMWBW 3.X CONFIGURATION DEFAULTS FOR GENESIS MODULES STD BUS BASED Z180 VARIANTS |
||||
|
;================================================================================================== |
||||
|
; |
||||
|
; THIS FILE CONTAINS THE FULL SET OF DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM |
||||
|
; INDICATED ABOVE. THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. INSTEAD, YOU SHOULD |
||||
|
; OVERRIDE ANY SETTINGS YOU WANT USING A CONFIGURATION FILE IN THE CONFIG DIRECTORY |
||||
|
; UNDER THIS DIRECTORY. |
||||
|
; |
||||
|
; THIS FILE CAN BE CONSIDERED A REFERENCE THAT LISTS ALL POSSIBLE CONFIGURATION SETTINGS |
||||
|
; FOR THE PLATFORM. |
||||
|
; |
||||
|
#DEFINE PLATFORM_NAME "GM STD BUS Z180", " [", CONFIG, "]" |
||||
|
; |
||||
|
#INCLUDE "hbios.inc" |
||||
|
; |
||||
|
PLATFORM .EQU PLT_GMZ180 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|GMZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH|MON] |
||||
|
CPUFAM .EQU CPU_Z180 ; CPU FAMILY: CPU_[Z80|Z180|Z280] |
||||
|
BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] |
||||
|
BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE |
||||
|
HBIOS_MUTEX .EQU FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) |
||||
|
USELZSA2 .EQU TRUE ; ENABLE FONT COMPRESSION |
||||
|
TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) |
||||
|
; |
||||
|
BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE |
||||
|
BOOT_DELAY .EQU 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT |
||||
|
AUTOCON .EQU TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT |
||||
|
; |
||||
|
CPUSPDCAP .EQU SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO |
||||
|
CPUSPDDEF .EQU SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW |
||||
|
CPUOSC .EQU 18432000 ; CPU OSC FREQ IN MHZ |
||||
|
INTMODE .EQU 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) |
||||
|
DEFSERCFG .EQU SER_115200_8N1 | SER_RTS ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM) |
||||
|
; |
||||
|
RAMSIZE .EQU 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) |
||||
|
ROMSIZE .EQU 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) |
||||
|
APP_BNKS .EQU $FF ; BANKS TO RESERVE FOR APP USE ($FF FOR AUTO SIZING) |
||||
|
MEMMGR .EQU MM_Z180 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] |
||||
|
RAMBIAS .EQU ROMSIZE ; OFFSET OF START OF RAM IN PHYSICAL ADDRESS SPACE |
||||
|
MPGSEL_0 .EQU $78 ; Z2 MEM MGR BANK 0 PAGE SELECT REG (WRITE ONLY) |
||||
|
MPGSEL_1 .EQU $79 ; Z2 MEM MGR BANK 1 PAGE SELECT REG (WRITE ONLY) |
||||
|
MPGSEL_2 .EQU $7A ; Z2 MEM MGR BANK 2 PAGE SELECT REG (WRITE ONLY) |
||||
|
MPGSEL_3 .EQU $7B ; Z2 MEM MGR BANK 3 PAGE SELECT REG (WRITE ONLY) |
||||
|
MPGENA .EQU $7C ; Z2 MEM MGR PAGING ENABLE REGISTER (BIT 0, WRITE ONLY) |
||||
|
; |
||||
|
Z180_BASE .EQU $C0 ; Z180: I/O BASE ADDRESS FOR INTERNAL REGISTERS |
||||
|
Z180_CLKDIV .EQU 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 |
||||
|
Z180_MEMWAIT .EQU 0 ; Z180: MEMORY WAIT STATES (0-3) |
||||
|
Z180_IOWAIT .EQU 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) |
||||
|
Z180_TIMER .EQU TRUE ; Z180: ENABLE Z180 SYSTEM PERIODIC TIMER |
||||
|
; |
||||
|
RTCIO .EQU $84 ; RTC LATCH REGISTER ADR |
||||
|
; |
||||
|
KIOENABLE .EQU FALSE ; ENABLE ZILOG KIO SUPPORT |
||||
|
KIOBASE .EQU $80 ; KIO BASE I/O ADDRESS |
||||
|
; |
||||
|
CTCENABLE .EQU FALSE ; ENABLE ZILOG CTC SUPPORT |
||||
|
CTCDEBUG .EQU FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT |
||||
|
CTCBASE .EQU $88 ; CTC BASE I/O ADDRESS |
||||
|
CTCTIMER .EQU FALSE ; ENABLE CTC PERIODIC TIMER |
||||
|
; |
||||
|
PCFENABLE .EQU FALSE ; ENABLE PCF8584 I2C CONTROLLER |
||||
|
PCFBASE .EQU $F0 ; PCF8584 BASE I/O ADDRESS |
||||
|
; |
||||
|
EIPCENABLE .EQU FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION |
||||
|
; |
||||
|
SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES |
||||
|
; |
||||
|
WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] |
||||
|
; |
||||
|
FPLED_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL LEDS |
||||
|
FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS |
||||
|
FPLED_INV .EQU FALSE ; FP: LED BITS ARE INVERTED |
||||
|
FPLED_DSKACT .EQU FALSE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS |
||||
|
FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES |
||||
|
FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES |
||||
|
FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED |
||||
|
; |
||||
|
DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING |
||||
|
; |
||||
|
LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED) |
||||
|
LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|SC|RTC|NABU] |
||||
|
LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS |
||||
|
LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED |
||||
|
; |
||||
|
DSKYENABLE .EQU FALSE ; ENABLES DSKY FUNCTIONALITY |
||||
|
DSKYDSKACT .EQU FALSE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY |
||||
|
ICMENABLE .EQU FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) |
||||
|
ICMPPIBASE .EQU $60 ; BASE I/O ADDRESS OF ICM PPI |
||||
|
PKDENABLE .EQU FALSE ; ENABLES DSKY NG PKD DRIVER (8259) |
||||
|
PKDPPIBASE .EQU $60 ; BASE I/O ADDRESS OF PKD PPI |
||||
|
PKDOSC .EQU 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) |
||||
|
H8PENABLE .EQU FALSE ; ENABLES HEATH H8 FRONT PANEL |
||||
|
LCDENABLE .EQU FALSE ; ENABLE LCD DISPLAY |
||||
|
LCDBASE .EQU $DA ; BASE I/O ADDRESS OF LCD CONTROLLER |
||||
|
LCDDSKACT .EQU TRUE ; ENABLES DISK ACTIVITY ON LCD DISPLAY |
||||
|
; |
||||
|
BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE |
||||
|
SECCON .EQU $FF ; SECONDARY CONSOLE DEVICE |
||||
|
CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP |
||||
|
VDAEMU .EQU EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] |
||||
|
VDAEMU_SERKBD .EQU $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD |
||||
|
ANSITRACE .EQU 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) |
||||
|
PPKTRACE .EQU 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) |
||||
|
KBDTRACE .EQU 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) |
||||
|
PPKKBLOUT .EQU KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE] |
||||
|
KBDKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] |
||||
|
MKYKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] |
||||
|
; |
||||
|
DSRTCENABLE .EQU TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) |
||||
|
DSRTCMODE .EQU DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTC_[STD|MFPIC|K80W] |
||||
|
DSRTCCHG .EQU TRUE ; DSRTC: FORCE BATTERY CHARGE ON (USE WITH CAUTION!!!) |
||||
|
; |
||||
|
DS1501RTCENABLE .EQU FALSE ; DS1501RTC: ENABLE DS-1501 CLOCK DRIVER (DS1501RTC.ASM) |
||||
|
DS1501RTC_BASE .EQU $50 ; DS1501RTC: I/O BASE ADDRESS |
||||
|
; |
||||
|
BQRTCENABLE .EQU FALSE ; BQRTC: ENABLE BQ4845 CLOCK DRIVER (BQRTC.ASM) |
||||
|
BQRTC_BASE .EQU $50 ; BQRTC: I/O BASE ADDRESS |
||||
|
; |
||||
|
INTRTCENABLE .EQU FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) |
||||
|
; |
||||
|
RP5RTCENABLE .EQU FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) |
||||
|
; |
||||
|
HTIMENABLE .EQU FALSE ; ENABLE SIMH TIMER SUPPORT |
||||
|
SIMRTCENABLE .EQU FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM) |
||||
|
; |
||||
|
DS7RTCENABLE .EQU FALSE ; DS7RTC: ENABLE DS-1307 I2C CLOCK DRIVER (DS7RTC.ASM) |
||||
|
DS7RTCMODE .EQU DS7RTCMODE_PCF ; DS7RTC: OPERATING MODE: DS7RTC_[PCF] |
||||
|
; |
||||
|
DS5RTCENABLE .EQU FALSE ; DS5RTC: ENABLE DS-1305 SPI CLOCK DRIVER (DS5RTC.ASM) |
||||
|
; |
||||
|
SSERENABLE .EQU FALSE ; SSER: ENABLE SIMPLE SERIAL DRIVER (SSER.ASM) |
||||
|
SSERCFG .EQU SER_9600_8N1 ; SSER: SERIAL LINE CONFIG |
||||
|
SSERSTATUS .EQU $FF ; SSER: STATUS PORT |
||||
|
SSERDATA .EQU $FF ; SSER: DATA PORT |
||||
|
SSERIRDY .EQU %00000001 ; SSER: INPUT READY BIT MASK |
||||
|
SSERIINV .EQU FALSE ; SSER: INPUT READY BIT INVERTED |
||||
|
SSERORDY .EQU %00000010 ; SSER: OUTPUT READY BIT MASK |
||||
|
SSEROINV .EQU FALSE ; SSER: OUTPUT READY BIT INVERTED |
||||
|
; |
||||
|
DUARTENABLE .EQU FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) |
||||
|
DUARTCNT .EQU 1 ; DUART: NUMBER OF CHIPS TO DETECT (1-2) |
||||
|
DUART0BASE .EQU $A0 ; DUART 0: BASE ADDRESS OF CHIP |
||||
|
DUART0ACFG .EQU DEFSERCFG ; DUART 0A: SERIAL LINE CONFIG |
||||
|
DUART0BCFG .EQU DEFSERCFG ; DUART 0B: SERIAL LINE CONFIG |
||||
|
DUART1BASE .EQU $40 ; DUART 1: BASE ADDRESS OF CHIP |
||||
|
DUART1ACFG .EQU DEFSERCFG ; DUART 1A: SERIAL LINE CONFIG |
||||
|
DUART1BCFG .EQU DEFSERCFG ; DUART 1B: SERIAL LINE CONFIG |
||||
|
; |
||||
|
UARTENABLE .EQU TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) |
||||
|
UARTCNT .EQU 1 ; UART: NUMBER OF CHIPS TO DETECT (1-8) |
||||
|
UARTOSC .EQU 1843200 ; UART: OSC FREQUENCY IN MHZ |
||||
|
UARTINTS .EQU FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 |
||||
|
UART4UART .EQU FALSE ; UART: SUPPORT 4UART ECB BOARD |
||||
|
UART4UARTBASE .EQU $C0 ; UART: BASE IO ADDRESS OF 4UART ECB BOARD |
||||
|
UART0BASE .EQU $80 ; UART 0: REGISTERS BASE ADR |
||||
|
UART0CFG .EQU DEFSERCFG ; UART 0: SERIAL LINE CONFIG |
||||
|
UART1BASE .EQU $88 ; UART 1: REGISTERS BASE ADR |
||||
|
UART1CFG .EQU DEFSERCFG ; UART 1: SERIAL LINE CONFIG |
||||
|
UART2BASE .EQU $A0 ; UART 2: REGISTERS BASE ADR |
||||
|
UART2CFG .EQU DEFSERCFG ; UART 2: SERIAL LINE CONFIG |
||||
|
UART3BASE .EQU $A8 ; UART 3: REGISTERS BASE ADR |
||||
|
UART3CFG .EQU DEFSERCFG ; UART 3: SERIAL LINE CONFIG |
||||
|
UART4BASE .EQU $FF ; UART 4: REGISTERS BASE ADR |
||||
|
UART4CFG .EQU DEFSERCFG ; UART 4: SERIAL LINE CONFIG |
||||
|
UART5BASE .EQU $FF ; UART 5: REGISTERS BASE ADR |
||||
|
UART5CFG .EQU DEFSERCFG ; UART 5: SERIAL LINE CONFIG |
||||
|
UART6BASE .EQU $FF ; UART 6: REGISTERS BASE ADR |
||||
|
UART6CFG .EQU DEFSERCFG ; UART 6: SERIAL LINE CONFIG |
||||
|
UART7BASE .EQU $FF ; UART 7: REGISTERS BASE ADR |
||||
|
UART7CFG .EQU DEFSERCFG ; UART 7: SERIAL LINE CONFIG |
||||
|
; |
||||
|
ASCIENABLE .EQU TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) |
||||
|
ASCIINTS .EQU TRUE ; ASCI: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 |
||||
|
ASCISWAP .EQU FALSE ; ASCI: SWAP CHANNELS |
||||
|
ASCIBOOT .EQU 0 ; ASCI: REBOOT ON RCV CHAR (0=DISABLED) |
||||
|
ASCI0CFG .EQU DEFSERCFG ; ASCI 0: SERIAL LINE CONFIG |
||||
|
ASCI1CFG .EQU DEFSERCFG ; ASCI 1: SERIAL LINE CONFIG |
||||
|
; |
||||
|
Z2UENABLE .EQU FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) |
||||
|
; |
||||
|
ACIAENABLE .EQU FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) |
||||
|
; |
||||
|
SIOENABLE .EQU TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) |
||||
|
SIODEBUG .EQU FALSE ; SIO: ENABLE DEBUG OUTPUT |
||||
|
SIOBOOT .EQU 0 ; SIO: REBOOT ON RCV CHAR (0=DISABLED) |
||||
|
SIOCNT .EQU 2 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP |
||||
|
SIOINTS .EQU TRUE ; SIO: INCLUDE SIO INTERRUPT SUPPORT UNDER IM1/2/3 |
||||
|
SIO0MODE .EQU SIOMODE_RC ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] |
||||
|
SIO0BASE .EQU $80 ; SIO 0: REGISTERS BASE ADR |
||||
|
SIO0ACLK .EQU 7372800 ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 |
||||
|
SIO0ACFG .EQU SER_115200_8N1 ; SIO 0A: SERIAL LINE CONFIG |
||||
|
SIO0ACTCC .EQU -1 ; SIO 0A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE |
||||
|
SIO0BCLK .EQU 7372800 ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 |
||||
|
SIO0BCFG .EQU SER_115200_8N1 ; SIO 0B: SERIAL LINE CONFIG |
||||
|
SIO0BCTCC .EQU -1 ; SIO 0B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE |
||||
|
SIO1MODE .EQU SIOMODE_RC ; SIO 1: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] |
||||
|
SIO1BASE .EQU $84 ; SIO 1: REGISTERS BASE ADR |
||||
|
SIO1ACLK .EQU 7372800 ; SIO 1A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 |
||||
|
SIO1ACFG .EQU SER_115200_8N1 ; SIO 1A: SERIAL LINE CONFIG |
||||
|
SIO1ACTCC .EQU -1 ; SIO 1A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE |
||||
|
SIO1BCLK .EQU 7372800 ; SIO 1B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 |
||||
|
SIO1BCFG .EQU SER_115200_8N1 ; SIO 1B: SERIAL LINE CONFIG |
||||
|
SIO1BCTCC .EQU -1 ; SIO 1B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE |
||||
|
; |
||||
|
XIOCFG .EQU DEFSERCFG ; XIO: SERIAL LINE CONFIG |
||||
|
; |
||||
|
VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) |
||||
|
CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) |
||||
|
GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) |
||||
|
TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) |
||||
|
TMSMODE .EQU TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MSX|MSXKBD|MSXMKY|MBC|COLECO|DUO|NABU] |
||||
|
TMS80COLS .EQU FALSE ; TMS: ENABLE 80 COLUMN SCREEN, REQUIRES V9958 |
||||
|
TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) |
||||
|
VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) |
||||
|
VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) |
||||
|
SCONENABLE .EQU FALSE ; SCON: ENABLE S100 CONSOLE DRIVER (SCON.ASM) |
||||
|
EFENABLE .EQU FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) |
||||
|
; |
||||
|
MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) |
||||
|
MDROM .EQU TRUE ; MD: ENABLE ROM DISK |
||||
|
MDRAM .EQU TRUE ; MD: ENABLE RAM DISK |
||||
|
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_RCWDC ; 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 |
||||
|
FD0TYPE .EQU FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] |
||||
|
FD1TYPE .EQU FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] |
||||
|
; |
||||
|
RFENABLE .EQU FALSE ; RF: ENABLE RAM FLOPPY DRIVER |
||||
|
; |
||||
|
IDEENABLE .EQU TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) |
||||
|
IDETRACE .EQU 1 ; IDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) |
||||
|
IDECNT .EQU 1 ; IDE: NUMBER OF IDE INTERFACES TO DETECT (1-3), 2 DRIVES EACH |
||||
|
IDE0MODE .EQU IDEMODE_GIDE ; IDE 0: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] |
||||
|
IDE0BASE .EQU $20 ; IDE 0: IO BASE ADDRESS |
||||
|
IDE0DATLO .EQU $20 ; IDE 0: DATA LO PORT FOR 16-BIT I/O |
||||
|
IDE0DATHI .EQU $28 ; IDE 0: DATA HI PORT FOR 16-BIT I/O |
||||
|
IDE0A8BIT .EQU TRUE ; IDE 0A (MASTER): 8 BIT XFER |
||||
|
IDE0B8BIT .EQU TRUE ; IDE 0B (MASTER): 8 BIT XFER |
||||
|
IDE1MODE .EQU IDEMODE_NONE ; IDE 1: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] |
||||
|
IDE1BASE .EQU $00 ; IDE 1: IO BASE ADDRESS |
||||
|
IDE1DATLO .EQU $00 ; IDE 1: DATA LO PORT FOR 16-BIT I/O |
||||
|
IDE1DATHI .EQU $00 ; IDE 1: DATA HI PORT FOR 16-BIT I/O |
||||
|
IDE1A8BIT .EQU TRUE ; IDE 1A (MASTER): 8 BIT XFER |
||||
|
IDE1B8BIT .EQU TRUE ; IDE 1B (MASTER): 8 BIT XFER |
||||
|
IDE2MODE .EQU IDEMODE_NONE ; IDE 2: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] |
||||
|
IDE2BASE .EQU $00 ; IDE 2: IO BASE ADDRESS |
||||
|
IDE2DATLO .EQU $00 ; IDE 2: DATA LO PORT FOR 16-BIT I/O |
||||
|
IDE2DATHI .EQU $00 ; IDE 2: DATA HI PORT FOR 16-BIT I/O |
||||
|
IDE2A8BIT .EQU TRUE ; IDE 2A (MASTER): 8 BIT XFER |
||||
|
IDE2B8BIT .EQU TRUE ; IDE 2B (MASTER): 8 BIT XFER |
||||
|
; |
||||
|
PPIDEENABLE .EQU FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) |
||||
|
PPIDETRACE .EQU 1 ; PPIDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) |
||||
|
PPIDECNT .EQU 1 ; PPIDE: NUMBER OF PPI CHIPS TO DETECT (1-3), 2 DRIVES PER CHIP |
||||
|
PPIDE0BASE .EQU $20 ; PPIDE 0: PPI REGISTERS BASE ADR |
||||
|
PPIDE0A8BIT .EQU FALSE ; PPIDE 0A (MASTER): 8 BIT XFER |
||||
|
PPIDE0B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER |
||||
|
PPIDE1BASE .EQU $00 ; PPIDE 1: PPI REGISTERS BASE ADR |
||||
|
PPIDE1A8BIT .EQU FALSE ; PPIDE 1A (MASTER): 8 BIT XFER |
||||
|
PPIDE1B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER |
||||
|
PPIDE2BASE .EQU $00 ; PPIDE 2: PPI REGISTERS BASE ADR |
||||
|
PPIDE2A8BIT .EQU FALSE ; PPIDE 2A (MASTER): 8 BIT XFER |
||||
|
PPIDE2B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER |
||||
|
; |
||||
|
SDENABLE .EQU TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) |
||||
|
SDMODE .EQU SDMODE_GM ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR|PIO|Z80R|EPITX|FZ80|GM] |
||||
|
SDPPIBASE .EQU $60 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE |
||||
|
SDCNT .EQU 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY |
||||
|
SDTRACE .EQU 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) |
||||
|
SDCSIOFAST .EQU FALSE ; SD: ENABLE TABLE-DRIVEN BIT INVERTER IN CSIO MODE |
||||
|
SDMTSWAP .EQU FALSE ; SD: SWAP THE LOGICAL ORDER OF THE SPI PORTS OF THE MT011 |
||||
|
; |
||||
|
CHENABLE .EQU FALSE ; CH: ENABLE CH375/376 USB SUPPORT |
||||
|
CHTRACE .EQU 1 ; CH: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) |
||||
|
CHUSBTRACE .EQU 1 ; CHUSB: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) |
||||
|
CHSDTRACE .EQU 1 ; CHSD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) |
||||
|
CHCNT .EQU 2 ; CH: NUMBER OF BOARDS TO DETECT (1-2) |
||||
|
CH0BASE .EQU $3E ; CH 0: BASE I/O ADDRESS |
||||
|
CH0USBENABLE .EQU TRUE ; CH 0: ENABLE USB DISK |
||||
|
CH0SDENABLE .EQU FALSE ; CH 0: ENABLE SD DISK |
||||
|
CH1BASE .EQU $3C ; CH 1: BASE I/O ADDRESS |
||||
|
CH1USBENABLE .EQU TRUE ; CH 1: ENABLE USB DISK |
||||
|
CH1SDENABLE .EQU FALSE ; CH 1: ENABLE SD DISK |
||||
|
; |
||||
|
PRPENABLE .EQU FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) |
||||
|
PRPSDENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER SD CARD SUPPORT |
||||
|
PRPSDTRACE .EQU 1 ; PRP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) |
||||
|
PRPCONENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT |
||||
|
; |
||||
|
PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) |
||||
|
; |
||||
|
ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) |
||||
|
; |
||||
|
HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) |
||||
|
; |
||||
|
PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) |
||||
|
PIOCNT .EQU 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP |
||||
|
PIO0BASE .EQU $B8 ; PIO 0: REGISTERS BASE ADR |
||||
|
PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR |
||||
|
; |
||||
|
LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) |
||||
|
LPTMODE .EQU LPTMODE_MG014 ; LPT: DRIVER MODE: LPTMODE_[NONE|SPP|MG014] |
||||
|
LPTCNT .EQU 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2) |
||||
|
LPTTRACE .EQU 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) |
||||
|
LPT0BASE .EQU $18 ; LPT 0: REGISTERS BASE ADR |
||||
|
LPT1BASE .EQU $00 ; LPT 1: REGISTERS BASE ADR |
||||
|
; |
||||
|
PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM) |
||||
|
PPACNT .EQU 1 ; PPA: NUMBER OF PPA DEVICES (1-2) |
||||
|
PPATRACE .EQU 1 ; PPA: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) |
||||
|
PPAMODE .EQU PPAMODE_MG014 ; PPA: DRIVER MODE: PPAMODE_[NONE|SPP|MG014] |
||||
|
PPA0BASE .EQU LPT0BASE ; PPA 0: BASE I/O ADDRESS OF PPI FOR PPA |
||||
|
PPA1BASE .EQU LPT1BASE ; PPA 1: BASE I/O ADDRESS OF PPI FOR PPA |
||||
|
; |
||||
|
IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) |
||||
|
IMMCNT .EQU 1 ; IMM: NUMBER OF IMM DEVICES (1-2) |
||||
|
IMMTRACE .EQU 1 ; IMM: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) |
||||
|
IMMMODE .EQU IMMMODE_MG014 ; IMM: DRIVER MODE: IMMMODE_[NONE|SPP|MG014] |
||||
|
IMM0BASE .EQU LPT0BASE ; IMM 0: BASE I/O ADDRESS OF PPI FOR IMM |
||||
|
IMM1BASE .EQU LPT1BASE ; IMM 1: BASE I/O ADDRESS OF PPI FOR IMM |
||||
|
; |
||||
|
SYQENABLE .EQU FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM) |
||||
|
SYQCNT .EQU 1 ; SYQ: NUMBER OF SYQ DEVICES (1-2) |
||||
|
SYQTRACE .EQU 1 ; SYQ: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) |
||||
|
SYQMODE .EQU IMMMODE_MG014 ; SYQ: DRIVER MODE: SYQMODE_[NONE|SPP|MG014] |
||||
|
SYQ0BASE .EQU LPT0BASE ; SYQ 0: BASE I/O ADDRESS OF PPI FOR SYQ |
||||
|
SYQ1BASE .EQU LPT1BASE ; SYQ 1: BASE I/O ADDRESS OF PPI FOR SYQ |
||||
|
; |
||||
|
PIO_4P .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD |
||||
|
PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) |
||||
|
PIO_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP |
||||
|
; |
||||
|
UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) |
||||
|
; |
||||
|
SN76489ENABLE .EQU FALSE ; SN: ENABLE SN76489 SOUND DRIVER |
||||
|
AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER |
||||
|
SN7CLK .EQU 3579545 ; SN: PSG CLOCK FREQ, ASSUME MSX STD |
||||
|
SNMODE .EQU SNMODE_RC ; SN: DRIVER MODE: SNMODE_[NONE|RC|VGM] |
||||
|
; |
||||
|
AY38910ENABLE .EQU FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER |
||||
|
AY_CLK .EQU 1789772 ; AY: PSG CLOCK FREQ, ASSUME MSX STD |
||||
|
AYMODE .EQU AYMODE_RCZ180 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] |
||||
|
; |
||||
|
SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) |
||||
|
; |
||||
|
DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) |
||||
|
DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS |
||||
|
DMAMODE .EQU DMAMODE_Z180 ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO) |
||||
|
; |
||||
|
YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER |
||||
|
VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC) |
||||
@ -0,0 +1,449 @@ |
|||||
|
; |
||||
|
;================================================================================================== |
||||
|
; HDSK DISK DRIVER |
||||
|
;================================================================================================== |
||||
|
; |
||||
|
; IO PORT ADDRESSES |
||||
|
; |
||||
|
HDSK_IO .EQU $FD |
||||
|
; |
||||
|
HDSK_CMDNONE .EQU 0 |
||||
|
HDSK_CMDRESET .EQU 1 |
||||
|
HDSK_CMDREAD .EQU 2 |
||||
|
HDSK_CMDWRITE .EQU 3 |
||||
|
HDSK_CMDPARAM .EQU 4 |
||||
|
; |
||||
|
; HDSK DEVICE CONFIGURATION |
||||
|
; |
||||
|
HDSK_DEVCNT .EQU 2 ; NUMBER OF HDSK DEVICES SUPPORTED |
||||
|
HDSK_CFGSIZ .EQU 6 ; SIZE OF CFG TBL ENTRIES |
||||
|
; |
||||
|
HDSK_DEV .EQU 0 ; OFFSET OF DEVICE NUMBER (BYTE) |
||||
|
HDSK_STAT .EQU 1 ; OFFSET OF STATUS (BYTE) |
||||
|
HDSK_LBA .EQU 2 ; OFFSET OF LBA (DWORD) |
||||
|
; |
||||
|
DEVECHO "HDSK: IO=" |
||||
|
DEVECHO HDSK_IO |
||||
|
DEVECHO ", DEVICE COUNT=" |
||||
|
DEVECHO HDSK_DEVCNT |
||||
|
DEVECHO "\n" |
||||
|
; |
||||
|
HDSK_CFGTBL: |
||||
|
; DEVICE 0 |
||||
|
.DB 0 ; DRIVER DEVICE NUMBER |
||||
|
.DB 0 ; DEVICE STATUS |
||||
|
.DW 0,0 ; CURRENT LBA |
||||
|
#IF (HDSK_DEVCNT >= 2) |
||||
|
; DEVICE 1 |
||||
|
.DB 1 ; DEVICE NUMBER |
||||
|
.DB 0 ; DEVICE STATUS |
||||
|
.DW 0,0 ; CURRENT LBA |
||||
|
#ENDIF |
||||
|
; |
||||
|
#IF ($ - HDSK_CFGTBL) != (HDSK_DEVCNT * HDSK_CFGSIZ) |
||||
|
.ECHO "*** INVALID HDSK CONFIG TABLE ***\n" |
||||
|
#ENDIF |
||||
|
; |
||||
|
.DB $FF ; END MARKER |
||||
|
; |
||||
|
; STATUS |
||||
|
; |
||||
|
HDSK_STOK .EQU 0 ; OK |
||||
|
HDSK_STNOTRDY .EQU -1 ; NOT READY |
||||
|
; |
||||
|
; |
||||
|
; |
||||
|
HDSK_INIT: |
||||
|
CALL NEWLINE ; FORMATTING |
||||
|
PRTS("HDSK:$") |
||||
|
PRTS(" DEVICES=$") |
||||
|
LD A,HDSK_DEVCNT |
||||
|
CALL PRTDECB |
||||
|
; |
||||
|
; SETUP THE DISPATCH TABLE ENTRIES |
||||
|
; |
||||
|
XOR A ; ZERO ACCUM |
||||
|
LD (HDSK_CURDEV),A ; INIT CURRENT DEVICE NUM |
||||
|
LD IY,HDSK_CFGTBL ; START OF DEV CFG TABLE |
||||
|
HDSK_INIT0: |
||||
|
CALL HDSK_PROBE ; HARDWARE PROBE |
||||
|
JR NZ,HDSK_INIT1 ; SKIP DEVICE IF NOT PRESENT |
||||
|
LD BC,HDSK_FNTBL ; BC := DRIVER FUNC TABLE ADDRESS |
||||
|
PUSH IY ; CFG ENTRY POINTER |
||||
|
POP DE ; ... TO DE |
||||
|
CALL DIO_ADDENT ; ADD ENTRY TO GLOBAL DISK TABLE |
||||
|
CALL HDSK_INITDEV ; PERFORM DEVICE INITIALIZATION |
||||
|
HDSK_INIT1: |
||||
|
LD BC,HDSK_CFGSIZ ; SIZE OF CFG ENTRY |
||||
|
ADD IY,BC ; BUMP IY TO NEXT ENTRY |
||||
|
LD HL,HDSK_CURDEV ; POINT TO CURRENT DEVICE |
||||
|
INC (HL) ; AND INCREMENT IT |
||||
|
LD A,(IY) ; GET FIRST BYTE OF ENTRY |
||||
|
INC A ; TEST FOR END OF TABLE ($FF) |
||||
|
JR NZ,HDSK_INIT0 ; IF NOT, LOOP |
||||
|
; |
||||
|
XOR A ; INIT SUCCEEDED |
||||
|
RET ; RETURN |
||||
|
; |
||||
|
; PROBE FOR DEVICE EXISTENCE |
||||
|
; |
||||
|
HDSK_PROBE: |
||||
|
XOR A ; SIGNAL SUCCESS |
||||
|
RET ; AND DONE |
||||
|
; |
||||
|
; INITIALIZE DEVICE |
||||
|
; |
||||
|
HDSK_INITDEV: |
||||
|
LD (IY+HDSK_STAT),HDSK_STNOTRDY ; STATUS := NOT READY |
||||
|
XOR A ; CLEAR ACCUM |
||||
|
LD (IY+HDSK_LBA+0),A ; ZERO LBA |
||||
|
LD (IY+HDSK_LBA+1),A ; ... |
||||
|
LD (IY+HDSK_LBA+2),A ; ... |
||||
|
LD (IY+HDSK_LBA+3),A ; ... |
||||
|
XOR A ; SIGNAL SUCCESS (REDUNDANT) |
||||
|
RET ; AND DONE |
||||
|
; |
||||
|
; DRIVER FUNCTION TABLE |
||||
|
; |
||||
|
HDSK_FNTBL: |
||||
|
.DW HDSK_STATUS |
||||
|
.DW HDSK_RESET |
||||
|
.DW HDSK_SEEK |
||||
|
.DW HDSK_READ |
||||
|
.DW HDSK_WRITE |
||||
|
.DW HDSK_VERIFY |
||||
|
.DW HDSK_FORMAT |
||||
|
.DW HDSK_DEVICE |
||||
|
.DW HDSK_MEDIA |
||||
|
.DW HDSK_DEFMED |
||||
|
.DW HDSK_CAP |
||||
|
.DW HDSK_GEOM |
||||
|
#IF (($ - HDSK_FNTBL) != (DIO_FNCNT * 2)) |
||||
|
.ECHO "*** INVALID HDSK FUNCTION TABLE ***\n" |
||||
|
#ENDIF |
||||
|
; |
||||
|
; |
||||
|
; |
||||
|
HDSK_VERIFY: |
||||
|
HDSK_FORMAT: |
||||
|
HDSK_DEFMED: |
||||
|
SYSCHKERR(ERR_NOTIMPL) ; INVALID SUB-FUNCTION |
||||
|
RET |
||||
|
; |
||||
|
; |
||||
|
; |
||||
|
HDSK_STATUS: |
||||
|
LD A,(IY+HDSK_STAT) ; LOAD STATUS |
||||
|
OR A ; SET FLAGS |
||||
|
RET |
||||
|
; |
||||
|
; |
||||
|
; |
||||
|
HDSK_RESET: |
||||
|
JP HDSK_DSKRESET |
||||
|
; |
||||
|
; GET DISK CAPACITY |
||||
|
; RETURN DE:HL=BLOCK COUNT, BC=BLOCK SIZE |
||||
|
; ASSUME 1GB MEDIA SIZE, SO 1GB / 512B |
||||
|
; IS $200000 SECTORS |
||||
|
; |
||||
|
HDSK_CAP: |
||||
|
LD DE,$20 ; BLOCK COUNT MSW |
||||
|
LD HL,0 ; BLOCK COUNT LSW |
||||
|
LD BC,512 ; 512 BYTE SECTOR |
||||
|
XOR A ; SIGNAL SUCCESS |
||||
|
RET |
||||
|
; |
||||
|
; |
||||
|
; |
||||
|
HDSK_GEOM: |
||||
|
; FOR LBA, WE SIMULATE CHS ACCESS USING 16 HEADS AND 16 SECTORS |
||||
|
; RETURN HS:CC -> DE:HL, SET HIGH BIT OF D TO INDICATE LBA CAPABLE |
||||
|
CALL HDSK_CAP ; GET TOTAL BLOCKS IN DE:HL, BLOCK SIZE TO BC |
||||
|
LD L,H ; DIVIDE BY 256 FOR # TRACKS |
||||
|
LD H,E ; ... HIGH BYTE DISCARDED, RESULT IN HL |
||||
|
LD D,$80 | 16 ; HEADS / CYL = 16, SET LBA BIT |
||||
|
LD E,16 ; SECTORS / TRACK = 16 |
||||
|
XOR A ; SIGNAL SUCCESS |
||||
|
RET |
||||
|
; |
||||
|
; |
||||
|
; |
||||
|
HDSK_DEVICE: |
||||
|
LD D,DIODEV_HDSK ; D := DEVICE TYPE |
||||
|
LD E,(IY+HDSK_DEV) ; E := PHYSICAL DEVICE NUMBER |
||||
|
LD C,%00110000 ; C := ATTRIBUTES, NON-REMOVABLE HARD DISK |
||||
|
LD H,0 ; H := 0, DRIVER HAS NO MODES |
||||
|
LD L,HDSK_IO ; L := BASE I/O ADDRESS |
||||
|
XOR A ; SIGNAL SUCCESS |
||||
|
RET |
||||
|
; |
||||
|
; |
||||
|
; |
||||
|
HDSK_MEDIA: |
||||
|
LD E,MID_HD ; HARD DISK MEDIA |
||||
|
LD D,0 ; D:0=0 MEANS NO MEDIA CHANGE |
||||
|
XOR A ; SIGNAL SUCCESS |
||||
|
RET |
||||
|
; |
||||
|
; |
||||
|
; |
||||
|
HDSK_SEEK: |
||||
|
BIT 7,D ; CHECK FOR LBA FLAG |
||||
|
CALL Z,HB_CHS2LBA ; CLEAR MEANS CHS, CONVERT TO LBA |
||||
|
RES 7,D ; CLEAR FLAG REGARDLESS (DOES NO HARM IF ALREADY LBA) |
||||
|
LD (IY+HDSK_LBA+0),L ; SAVE NEW LBA |
||||
|
LD (IY+HDSK_LBA+1),H ; ... |
||||
|
LD (IY+HDSK_LBA+2),E ; ... |
||||
|
LD (IY+HDSK_LBA+3),D ; ... |
||||
|
XOR A ; SIGNAL SUCCESS |
||||
|
RET ; AND RETURN |
||||
|
; |
||||
|
; |
||||
|
; |
||||
|
HDSK_READ: |
||||
|
CALL HB_DSKREAD ; HOOK HBIOS DISK READ SUPERVISOR |
||||
|
LD A,HDSK_CMDREAD |
||||
|
JR HDSK_RW |
||||
|
; |
||||
|
; |
||||
|
; |
||||
|
HDSK_WRITE: |
||||
|
CALL HB_DSKWRITE ; HOOK HBIOS DISK WRITE SUPERVISOR |
||||
|
LD A,HDSK_CMDWRITE |
||||
|
JR HDSK_RW |
||||
|
; |
||||
|
; |
||||
|
; |
||||
|
HDSK_RW: |
||||
|
LD (HDSK_CMD),A ; SET COMMAND BYTE |
||||
|
LD (HDSK_DMA),HL ; SAVE INITIAL DMA |
||||
|
LD A,E ; SECTOR COUNT TO A |
||||
|
OR A ; SET FLAGS |
||||
|
RET Z ; ZERO SECTOR I/O, RETURN W/ E=0 & A=0 |
||||
|
LD B,A ; INIT SECTOR DOWNCOUNTER |
||||
|
LD C,0 ; INIT SECTOR READ/WRITE COUNT |
||||
|
LD A,(IY+HDSK_DEV) ; GET DEVICE NUMBER |
||||
|
LD (HDSK_DRV),A ; ... AND SET FIELD IN HDSK PARM BLOCK |
||||
|
|
||||
|
; RESET HDSK INTERFACE IF NEEDED |
||||
|
LD A,(IY+HDSK_STAT) ; GET CURRENT STATUS |
||||
|
OR A ; SET FLAGS |
||||
|
PUSH BC ; SAVE COUNTERS |
||||
|
CALL NZ,HDSK_DSKRESET ; RESET IF NOT READY |
||||
|
POP BC ; RESTORE COUNTERS |
||||
|
JR NZ,HDSK_RW6 ; ABORT ON FAILURE |
||||
|
|
||||
|
HDSK_RW0: |
||||
|
PUSH BC ; SAVE COUNTERS |
||||
|
XOR A ; A = 0 |
||||
|
LD (HDSK_RC),A ; CLEAR RETURN CODE |
||||
|
; |
||||
|
#IF (DSKYENABLE) |
||||
|
#IF (DSKYDSKACT) |
||||
|
LD A,HDSK_LBA |
||||
|
CALL LDHLIYA |
||||
|
CALL HB_DSKACT ; SHOW ACTIVITY |
||||
|
#ENDIF |
||||
|
#ENDIF |
||||
|
; |
||||
|
; CONVERT LBA HHHH:LLLL (4 BYTES) |
||||
|
; TO HDSK TRACK/SECTOR TTTT:SS (3 BYTES) |
||||
|
; SAVING TO HDSK PARM BLOCK |
||||
|
; (IY+HDSK_LBA+0) ==> (HDSK_SEC) |
||||
|
LD A,(IY+HDSK_LBA+0) |
||||
|
LD (HDSK_SEC),A |
||||
|
; (IY+HDSK_LBA+1) ==> (HDSK_TRK+0) |
||||
|
LD A,(IY+HDSK_LBA+1) |
||||
|
LD (HDSK_TRK+0),A |
||||
|
; (IY+HDSK_LBA+2) ==> (HDSK_TRK+1) |
||||
|
LD A,(IY+HDSK_LBA+2) |
||||
|
LD (HDSK_TRK+1),A |
||||
|
|
||||
|
; EXECUTE COMMAND |
||||
|
LD B,7 ; SIZE OF PARAMETER BLOCK |
||||
|
LD HL,HDSK_PARMBLK ; ADDRESS OF PARAMETER BLOCK |
||||
|
LD C,$FD ; HDSK CMD PORT |
||||
|
OTIR ; SEND IT |
||||
|
|
||||
|
; GET RESULT |
||||
|
IN A,(C) ; GET RESULT CODE |
||||
|
LD (HDSK_RC),A ; SAVE IT |
||||
|
OR A ; SET FLAGS |
||||
|
|
||||
|
#IF (HDSKTRACE > 0) |
||||
|
PUSH AF ; SAVE RETURN CODE |
||||
|
#IF (HDSKTRACE == 1) |
||||
|
CALL NZ,HDSK_PRT ; DIAGNOSE ERRORS ONLY |
||||
|
#ENDIF |
||||
|
#IF (HDSKTRACE >= 2) |
||||
|
CALL HDSK_PRT ; DISPLAY ALL READ/WRITE RESULTS |
||||
|
#ENDIF |
||||
|
POP AF ; RESTORE RETURN CODE |
||||
|
#ENDIF |
||||
|
|
||||
|
JR NZ,HDSK_RW5 ; BAIL OUT ON ERROR |
||||
|
|
||||
|
; INCREMENT LBA |
||||
|
LD A,HDSK_LBA ; LBA OFFSET IN CFG ENTRY |
||||
|
CALL LDHLIYA ; HL := IY + A, REG A TRASHED |
||||
|
CALL INC32HL ; INCREMENT THE VALUE |
||||
|
|
||||
|
; INCREMENT DMA |
||||
|
LD HL,HDSK_DMA+1 ; POINT TO MSB OF DMA |
||||
|
INC (HL) ; BUMP DMA BY |
||||
|
INC (HL) ; ... 512 BYTES |
||||
|
|
||||
|
XOR A ; A := 0 SIGNALS SUCCESS |
||||
|
|
||||
|
HDSK_RW5: |
||||
|
POP BC ; RECOVER COUNTERS |
||||
|
JR NZ,HDSK_RW6 ; IF ERROR, GET OUT |
||||
|
|
||||
|
INC C ; RECORD SECTOR COMPLETED |
||||
|
DJNZ HDSK_RW0 ; LOOP AS NEEDED |
||||
|
|
||||
|
HDSK_RW6: |
||||
|
; RETURN WITH SECTORS READ IN E AND UPDATED DMA ADDRESS IN HL |
||||
|
LD E,C ; SECTOR READ COUNT TO E |
||||
|
LD HL,(HDSK_DMA) ; CURRENT DMA TO HL |
||||
|
OR A ; SET FLAGS BASED ON RETURN CODE |
||||
|
RET Z ; RETURN IF SUCCESS |
||||
|
LD A,ERR_IO ; SIGNAL IO ERROR |
||||
|
OR A ; SET FLAGS |
||||
|
RET ; AND DONE |
||||
|
; |
||||
|
; |
||||
|
; |
||||
|
HDSK_DSKRESET: |
||||
|
; |
||||
|
#IF (HDSKTRACE >= 2) |
||||
|
CALL NEWLINE |
||||
|
LD DE,HDSKSTR_PREFIX |
||||
|
CALL WRITESTR |
||||
|
CALL PC_SPACE |
||||
|
LD DE,HDSKSTR_RESET |
||||
|
CALL WRITESTR |
||||
|
#ENDIF |
||||
|
; |
||||
|
LD B,32 |
||||
|
LD A,HDSK_CMDRESET |
||||
|
HDSK_DSKRESET1: |
||||
|
OUT ($FD),A |
||||
|
DJNZ HDSK_DSKRESET1 |
||||
|
|
||||
|
XOR A ; STATUS = OK |
||||
|
LD (IY+HDSK_STAT),A ; SAVE IT |
||||
|
|
||||
|
RET |
||||
|
; |
||||
|
; |
||||
|
; |
||||
|
HDSK_PRT: |
||||
|
CALL NEWLINE |
||||
|
|
||||
|
LD DE,HDSKSTR_PREFIX |
||||
|
CALL WRITESTR |
||||
|
|
||||
|
CALL PC_SPACE |
||||
|
LD DE,HDSKSTR_CMD |
||||
|
CALL WRITESTR |
||||
|
LD A,(HDSK_CMD) |
||||
|
CALL PRTHEXBYTE |
||||
|
|
||||
|
CALL PC_SPACE |
||||
|
CALL PC_LBKT |
||||
|
LD A,(HDSK_CMD) |
||||
|
LD DE,HDSKSTR_NONE |
||||
|
CP HDSK_CMDNONE |
||||
|
JP Z,HDSK_PRTCMD |
||||
|
LD DE,HDSKSTR_RESET |
||||
|
CP HDSK_CMDRESET |
||||
|
JP Z,HDSK_PRTCMD |
||||
|
LD DE,HDSKSTR_READ |
||||
|
CP HDSK_CMDREAD |
||||
|
JP Z,HDSK_PRTCMD |
||||
|
LD DE,HDSKSTR_WRITE |
||||
|
CP HDSK_CMDWRITE |
||||
|
JP Z,HDSK_PRTCMD |
||||
|
LD DE,HDSKSTR_PARAM |
||||
|
CP HDSK_CMDPARAM |
||||
|
JP Z,HDSK_PRTCMD |
||||
|
LD DE,HDSKSTR_UNKCMD |
||||
|
HDSK_PRTCMD: |
||||
|
CALL WRITESTR |
||||
|
CALL PC_RBKT |
||||
|
|
||||
|
LD A,(HDSK_CMD) |
||||
|
CP HDSK_CMDREAD |
||||
|
JR Z,HDSK_PRTRW |
||||
|
CP HDSK_CMDWRITE |
||||
|
JR Z,HDSK_PRTRW |
||||
|
RET |
||||
|
|
||||
|
HDSK_PRTRW: |
||||
|
CALL PC_SPACE |
||||
|
LD A,(HDSK_DRV) |
||||
|
CALL PRTHEXBYTE |
||||
|
CALL PC_SPACE |
||||
|
LD BC,(HDSK_TRK) |
||||
|
CALL PRTHEXWORD |
||||
|
CALL PC_SPACE |
||||
|
LD A,(HDSK_SEC) |
||||
|
CALL PRTHEXBYTE |
||||
|
CALL PC_SPACE |
||||
|
LD BC,(HDSK_DMA) |
||||
|
CALL PRTHEXWORD |
||||
|
|
||||
|
CALL PC_SPACE |
||||
|
LD DE,HDSKSTR_ARROW |
||||
|
CALL WRITESTR |
||||
|
|
||||
|
CALL PC_SPACE |
||||
|
LD DE,HDSKSTR_RC |
||||
|
CALL WRITESTR |
||||
|
LD A,(HDSK_RC) |
||||
|
CALL PRTHEXBYTE |
||||
|
|
||||
|
CALL PC_SPACE |
||||
|
CALL PC_LBKT |
||||
|
LD A,(HDSK_RC) |
||||
|
LD DE,HDSKSTR_STOK |
||||
|
CP HDSK_STOK |
||||
|
JP Z,HDSK_PRTRC |
||||
|
LD DE,HDSKSTR_STUNK |
||||
|
|
||||
|
HDSK_PRTRC: |
||||
|
CALL WRITESTR |
||||
|
CALL PC_RBKT |
||||
|
|
||||
|
RET |
||||
|
; |
||||
|
; |
||||
|
; |
||||
|
HDSKSTR_PREFIX .TEXT "HDSK:$" |
||||
|
HDSKSTR_CMD .TEXT "CMD=$" |
||||
|
HDSKSTR_RC .TEXT "RC=$" |
||||
|
HDSKSTR_ARROW .TEXT "-->$" |
||||
|
HDSKSTR_NONE .TEXT "NONE$" |
||||
|
HDSKSTR_RESET .TEXT "RESET$" |
||||
|
HDSKSTR_READ .TEXT "READ$" |
||||
|
HDSKSTR_WRITE .TEXT "WRITE$" |
||||
|
HDSKSTR_PARAM .TEXT "PARAM$" |
||||
|
HDSKSTR_UNKCMD .TEXT "UNKCMD$" |
||||
|
HDSKSTR_STOK .TEXT "OK$" |
||||
|
HDSKSTR_STUNK .TEXT "UNKNOWN ERROR$" |
||||
|
; |
||||
|
;================================================================================================== |
||||
|
; HDSK DISK DRIVER - DATA |
||||
|
;================================================================================================== |
||||
|
; |
||||
|
HDSK_RC .DB 0 ; CURRENT RETURN CODE |
||||
|
HDSK_CURDEV .DB 0 ; CURRENT DEVICE NUMBER |
||||
|
; |
||||
|
HDSK_PARMBLK: |
||||
|
HDSK_CMD .DB 0 ; COMMAND (HDSK_READ, HDSK_WRITE, ...) |
||||
|
HDSK_DRV .DB 0 ; 0..7, HDSK DRIVE NUMBER |
||||
|
HDSK_SEC .DB 0 ; 0..255 SECTOR |
||||
|
HDSK_TRK .DW 0 ; 0..2047 TRACK |
||||
|
HDSK_DMA .DW 0 ; ADDRESS FOR SECTOR DATA EXCHANGE |
||||
Loading…
Reference in new issue