forked from MirrorRepos/RomWBW
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