diff --git a/Source/HBIOS/Config/MBC_ddw.asm b/Source/HBIOS/Config/MBC_ddw.asm new file mode 100644 index 00000000..9a628d19 --- /dev/null +++ b/Source/HBIOS/Config/MBC_ddw.asm @@ -0,0 +1,56 @@ +; +;================================================================================================== +; MBC CONFIGURATION +;================================================================================================== +; +; THE COMPLETE SET OF DEFAULT CONFIGURATION SETTINGS FOR THIS PLATFORM ARE FOUND IN THE +; CFG_.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 _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 "Multi Board Computer" +#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT +; +#include "cfg_mbc.asm" +; +CPUOSC .EQU 4000000 ; CPU OSC FREQ IN MHZ +; +BATCOND .SET FALSE +; +PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +; +DSKYENABLE .SET TRUE ; ENABLES DSKY +DSKYMODE .SET DSKYMODE_NG ; DSKY VERTSION: DSKYMODE_[V1|NG] +DSKYOSC .SET 100000 +; +FDENABLE .EQU TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) + +;DIAGLVL .EQU DL_VERBOSE + +DMAENABLE .EQU TRUE ; DMA: ENABLE DMA DRIVER (DMA.ASM) +DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS +DMAMODE .EQU DMAMODE_MBC ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC) + +CVDUMODE .EQU CVDUMODE_MBC ; CVDU: CVDU MODE: CVDUMODE_[NONE|ECB|MBC] +CVDUMON .EQU CVDUMON_CGA ; CVDU: CVDU MONITOR SETUP: CVDUMON_[NONE|CGA|EGA] + +INTMODE .SET 2 +CTCENABLE .SET TRUE ; ENABLE ZILOG CTC SUPPORT + +AY38910ENABLE .EQU TRUE ; AY: AY-3-8910 / YM2149 SOUND DRIVER +AY_CLK .EQU CPUOSC / 2 ; DEFAULT TO CPUOSC / 4 +AYMODE .EQU AYMODE_MBC ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC] \ No newline at end of file diff --git a/Source/HBIOS/cen.asm b/Source/HBIOS/cen.asm index 834fa8c6..8c4a5c9a 100644 --- a/Source/HBIOS/cen.asm +++ b/Source/HBIOS/cen.asm @@ -45,15 +45,15 @@ CEN_PREINIT: XOR A ; ZERO TO ACCUM LD (CEN_DEV),A ; CURRENT DEVICE NUMBER LD IY,CEN_CFG ; POINT TO START OF CFG TABLE -CEN_PREINIT0: +CEN_PREINIT0: PUSH BC ; SAVE LOOP CONTROL CALL CEN_INITUNIT ; HAND OFF TO UNIT INIT CODE POP BC ; RESTORE LOOP CONTROL -; +; LD A,(IY+1) ; GET THE CEN TYPE DETECTED OR A ; SET FLAGS JR Z,CEN_PREINIT2 ; SKIP IT IF NOTHING FOUND -; +; PUSH BC ; SAVE LOOP CONTROL PUSH IY ; CFG ENTRY ADDRESS POP DE ; ... TO DE @@ -95,7 +95,7 @@ CEN_INITUNIT: CEN_INIT: LD B,CEN_CFGCNT ; COUNT OF POSSIBLE CEN UNITS LD IY,CEN_CFG ; POINT TO START OF CFG TABLE -CEN_INIT1: +CEN_INIT1: PUSH BC ; SAVE LOOP CONTROL LD A,(IY+1) ; GET CEN TYPE OR A ; SET FLAGS @@ -137,6 +137,18 @@ CEN_OUT: CALL CEN_OST ; READY TO SEND? JR Z,CEN_OUT ; LOOP IF NOT ; *** ADD CODE TO OUTPUT BYTE *** + LD A,(IY+3) + LD C,A ; PORT 0 (DATA) + OUT (C),E ; OUTPUT DATA TO PORT + call DELAY ; ignore anything back after a reset + ld A,%00001101 ; select & strobe, LEDS OFF + INC C ; PUT CONTROL PORT IN C + INC C + OUT (C),A ; OUTPUT DATA TO PORT + call DELAY ; ignore anything back after a reset + ld A,%00001100 ; select, LEDS OFF + OUT (C),A ; OUTPUT DATA TO PORT + XOR A ; SIGNAL SUCCESS RET ; @@ -150,8 +162,11 @@ CEN_IST: ; OUTPUT STATUS ; CEN_OST: - ; *** ADD CODE TO CHECK FOR OUTPUT READY *** - OR A ; SET FLAGS + LD A,(IY+3) + LD C,A ; PORT 0 (DATA) + INC C ; SELECT STATUS PORT + IN A,(C) ; GET STATUS INFO + AND %10000000 ; ONLY INTERESTED IN BUSY FLAG RET ; DONE ; ; INITIALIZE DEVICE @@ -166,14 +181,16 @@ CEN_INITDEV: ; PREINIT ABOVE. PREINIT IS NOT ALLOWED TO ENABLE INTS! ; CEN_INITDEVX: - ; *** NOT SURE THIS IS RIGHT *** LD A,(IY+3) LD C,A ; PORT 0 (DATA) XOR A ; CLEAR ACCUM OUT (C),A ; SEND IT INC C ; BUMP TO INC C ; ... PORT 2 - LD A,%11000000 ; RESET, LEDS OFF + LD A,%00001000 ; SELECT AND ASSERT RESET, LEDS OFF + OUT (C),A ; SEND IT + CALL LDELAY ; HALF SECOND DELAY + LD A,%00001100 ; SELECT AND DEASSERT RESET, LEDS OFF OUT (C),A ; SEND IT XOR A ; SIGNAL SUCCESS RET ; RETURN @@ -207,7 +224,7 @@ CEN_DETECT: JR Z,CEN_DETECT1 ; FOUND IT, RECORD IT LD A,CEN_NONE ; NOTHING FOUND RET ; DONE -; +; CEN_DETECT1: ; CEN FOUND, RECORD IT LD A,CEN_MBC ; RETURN CHIP TYPE