Browse Source

Update Centronics driver for Nhyodyne

pull/287/head
Dan Werner 4 years ago
parent
commit
5b9e9ba6bf
  1. 56
      Source/HBIOS/Config/MBC_ddw.asm
  2. 35
      Source/HBIOS/cen.asm

56
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_<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 "Multi Board Computer"
#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON <CR> 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]

35
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

Loading…
Cancel
Save