forked from MirrorRepos/RomWBW
Browse Source
# Conflicts: # Doc/ChangeLog.txt # Doc/RomWBW Applications.pdf # Doc/RomWBW Disk Catalog.pdf # Doc/RomWBW Errata.pdf # Doc/RomWBW System Guide.pdf # Doc/RomWBW User Guide.pdfwork
47 changed files with 1191 additions and 54 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,359 @@ |
|||
; |
|||
;================================================================================================== |
|||
; 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) |
|||
FVENABLE .EQU FALSE ; FV: ENABLE FPGA VGA VIDEO DRIVER (FV.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,497 @@ |
|||
;====================================================================== |
|||
; VIDEO DRIVER FOR FPGA VGA |
|||
; http://s100computers.com/My%20System%20Pages/FPGA%20Z80%20SBC/FPGA%20Z80%20SBC.htm |
|||
; |
|||
; WRITTEN BY: WAYNE WARTHEN -- 9/2/2024 |
|||
;====================================================================== |
|||
; |
|||
; FPGA VGA EXPOSES A FRAME BUFFER STARTING AT $E000. |
|||
; PORT $08 CONTROLS ACCESS TO THE FRAME BUFFER. |
|||
; - WHEN $01, FRAME BUFFER APPEARS AT $E000 IN CPU ADDRESS SPACE |
|||
; - WHEN $00, FRAME BUFFER IS INACCESSIBLE BY CPU |
|||
; PORT $C0: SET/GET CURSOR COL |
|||
; PORT $C1: SET/GET CURSOR ROW |
|||
; PORT $C2: CONTROLS VGA OUTPUT |
|||
; BIT 0: BLUE |
|||
; BIT 1: GREEN |
|||
; BIT 2: RED |
|||
; BIT 3: UNUSED? |
|||
; BIT 4: CURSOR MODE |
|||
; BIT 5: CURSOR BLINK |
|||
; BIT 6: CURSOR ENABLE |
|||
; BIT 7: VGA SIGNAL OUTPUT ENABLE |
|||
; PORT $08: BUFFER SELECT, 1=SELECTED |
|||
; |
|||
; TODO: |
|||
; |
|||
;====================================================================== |
|||
; FPGA VGA DRIVER - CONSTANTS |
|||
;====================================================================== |
|||
; |
|||
FV_FBUF .EQU $E000 ; ADDRESS OF FRAME BUFFER |
|||
FV_BASE .EQU $C0 ; BASE I/O ADDRESS |
|||
FV_CCOL .EQU FV_BASE+0 ; CUR COL PORT |
|||
FV_CROW .EQU FV_BASE+1 ; CUR ROW PORT |
|||
FV_CTL .EQU FV_BASE+2 ; VGA CONTROL PORT |
|||
; |
|||
FV_BUFCTL .EQU $08 |
|||
; |
|||
FV_KBDDATA .EQU $03 |
|||
FV_KBDST .EQU $02 |
|||
; |
|||
FV_ROWS .EQU 40 |
|||
FV_COLS .EQU 80 |
|||
; |
|||
TERMENABLE .SET TRUE ; INCLUDE TERMINAL PSEUDODEVICE DRIVER |
|||
;;;KBDENABLE .SET TRUE ; INCLUDE KBD KEYBOARD SUPPORT |
|||
; |
|||
DEVECHO "FV: IO=" |
|||
DEVECHO FV_BASE |
|||
DEVECHO ", KBD MODE=FV" |
|||
DEVECHO ", KBD IO=" |
|||
DEVECHO FV_KBDDATA |
|||
DEVECHO "\n" |
|||
; |
|||
;====================================================================== |
|||
; FPGA VGA DRIVER - INITIALIZATION |
|||
;====================================================================== |
|||
; |
|||
FV_INIT: |
|||
LD IY,FV_IDAT ; POINTER TO INSTANCE DATA |
|||
; |
|||
CALL NEWLINE ; FORMATTING |
|||
PRTS("FV: IO=0x$") |
|||
LD A,FV_BASE |
|||
CALL PRTHEXBYTE |
|||
CALL FV_PROBE ; CHECK FOR HW PRESENCE |
|||
JR Z,FV_INIT1 ; CONTINUE IF HW PRESENT |
|||
; |
|||
; HARDWARE NOT PRESENT |
|||
PRTS(" NOT PRESENT$") |
|||
OR $FF ; SIGNAL FAILURE |
|||
RET |
|||
; |
|||
FV_INIT1: |
|||
; RECORD DRIVER ACTIVE |
|||
OR $FF |
|||
LD (FV_ACTIVE),A |
|||
; DISPLAY CONSOLE DIMENSIONS |
|||
LD A,FV_COLS |
|||
CALL PC_SPACE |
|||
CALL PRTDECB |
|||
LD A,'X' |
|||
CALL COUT |
|||
LD A,FV_ROWS |
|||
CALL PRTDECB |
|||
PRTS(" TEXT$") |
|||
|
|||
; HARDWARE INITIALIZATION |
|||
CALL FV_CRTINIT ; SETUP THE FPGA VGA CHIP REGISTERS |
|||
CALL FV_VDAINI ; INITIALIZE |
|||
;CALL KBD_INIT ; INITIALIZE KEYBOARD DRIVER |
|||
|
|||
; ADD OURSELVES TO VDA DISPATCH TABLE |
|||
LD BC,FV_FNTBL ; BC := FUNCTION TABLE ADDRESS |
|||
LD DE,FV_IDAT ; DE := FPGA VGA INSTANCE DATA PTR |
|||
CALL VDA_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED |
|||
|
|||
; INITIALIZE EMULATION |
|||
LD C,A ; C := ASSIGNED VIDEO DEVICE NUM |
|||
LD DE,FV_FNTBL ; DE := FUNCTION TABLE ADDRESS |
|||
LD HL,FV_IDAT ; HL := FPGA VGA INSTANCE DATA PTR |
|||
CALL TERM_ATTACH ; DO IT |
|||
|
|||
XOR A ; SIGNAL SUCCESS |
|||
RET |
|||
; |
|||
;====================================================================== |
|||
; FPGA VGA DRIVER - VIDEO DISPLAY ADAPTER (VDA) FUNCTIONS |
|||
;====================================================================== |
|||
; |
|||
FV_FNTBL: |
|||
.DW FV_VDAINI |
|||
.DW FV_VDAQRY |
|||
.DW FV_VDARES |
|||
.DW FV_VDADEV |
|||
.DW FV_VDASCS |
|||
.DW FV_VDASCP |
|||
.DW FV_VDASAT |
|||
.DW FV_VDASCO |
|||
.DW FV_VDAWRC |
|||
.DW FV_VDAFIL |
|||
.DW FV_VDACPY |
|||
.DW FV_VDASCR |
|||
.DW FV_STAT |
|||
.DW FV_FLUSH |
|||
.DW FV_READ |
|||
.DW FV_VDARDC |
|||
#IF (($ - FV_FNTBL) != (VDA_FNCNT * 2)) |
|||
.ECHO "*** INVALID FV FUNCTION TABLE ***\n" |
|||
!!!!! |
|||
#ENDIF |
|||
|
|||
FV_VDAINI: |
|||
; RESET VDA |
|||
CALL FV_VDARES ; RESET VDA |
|||
LD HL,0 ; ZERO |
|||
LD (FV_POS),HL ; ... TO POSITION |
|||
LD A,' ' ; BLANK THE SCREEN |
|||
LD DE,FV_ROWS*FV_COLS ; FILL ENTIRE BUFFER |
|||
CALL FV_FILL ; DO IT |
|||
LD DE,0 ; ROW = 0, COL = 0 |
|||
CALL FV_XY ; SEND CURSOR TO TOP LEFT |
|||
CALL FV_SHOWCUR ; NOW SHOW THE CURSOR |
|||
XOR A ; SIGNAL SUCCESS |
|||
RET |
|||
|
|||
FV_VDAQRY: |
|||
LD C,$00 ; MODE ZERO IS ALL WE KNOW |
|||
LD D,FV_ROWS ; ROWS |
|||
LD E,FV_COLS ; COLS |
|||
LD HL,0 ; EXTRACTION OF CURRENT BITMAP DATA NOT SUPPORTED |
|||
XOR A ; SIGNAL SUCCESS |
|||
RET |
|||
|
|||
FV_VDARES: |
|||
CALL FV_CRTINIT |
|||
XOR A ; SIGNAL SUCCESS |
|||
RET |
|||
|
|||
FV_VDADEV: |
|||
LD D,VDADEV_FV ; D := DEVICE TYPE |
|||
LD E,0 ; E := PHYSICAL UNIT IS ALWAYS ZERO |
|||
LD H,0 ; H := 0, DRIVER HAS NO MODES |
|||
LD L,FV_BASE ; L := BASE I/O ADDRESS |
|||
XOR A ; SIGNAL SUCCESS |
|||
RET |
|||
|
|||
FV_VDASCS: |
|||
SYSCHKERR(ERR_NOTIMPL) ; NOT IMPLEMENTED (YET) |
|||
RET |
|||
|
|||
FV_VDASCP: |
|||
CALL FV_XY ; SET CURSOR POSITION |
|||
XOR A ; SIGNAL SUCCESS |
|||
RET |
|||
|
|||
FV_VDASAT: |
|||
; ATTRIBUTES NOT SUPPORTED BY HARDWARE |
|||
XOR A |
|||
RET |
|||
|
|||
FV_VDASCO: |
|||
; CHARACTER COLOR NOT SUPPORT BY HARDWARE |
|||
XOR A ; SIGNAL SUCCESS |
|||
RET ; DONE |
|||
|
|||
FV_VDAWRC: |
|||
LD A,E ; CHARACTER TO WRITE GOES IN A |
|||
CALL FV_PUTCHAR ; PUT IT ON THE SCREEN |
|||
XOR A ; SIGNAL SUCCESS |
|||
RET |
|||
|
|||
FV_VDAFIL: |
|||
LD A,E ; FILL CHARACTER GOES IN A |
|||
EX DE,HL ; FILL LENGTH GOES IN DE |
|||
CALL FV_FILL ; DO THE FILL |
|||
XOR A ; SIGNAL SUCCESS |
|||
RET |
|||
|
|||
FV_VDACPY: |
|||
; LENGTH IN HL, SOURCE ROW/COL IN DE, DEST IS FV_POS |
|||
; BLKCPY USES: HL=SOURCE, DE=DEST, BC=COUNT |
|||
PUSH HL ; SAVE LENGTH |
|||
CALL FV_XY2IDX ; ROW/COL IN DE -> SOURCE ADR IN HL |
|||
POP BC ; RECOVER LENGTH IN BC |
|||
LD DE,(FV_POS) ; PUT DEST IN DE |
|||
JP FV_BLKCPY ; DO A BLOCK COPY |
|||
|
|||
FV_VDASCR: |
|||
LD A,E ; LOAD E INTO A |
|||
OR A ; SET FLAGS |
|||
RET Z ; IF ZERO, WE ARE DONE |
|||
PUSH DE ; SAVE E |
|||
JP M,FV_VDASCR1 ; E IS NEGATIVE, REVERSE SCROLL |
|||
CALL FV_SCROLL ; SCROLL FORWARD ONE LINE |
|||
POP DE ; RECOVER E |
|||
DEC E ; DECREMENT IT |
|||
JR FV_VDASCR ; LOOP |
|||
FV_VDASCR1: |
|||
CALL FV_RSCROLL ; SCROLL REVERSE ONE LINE |
|||
POP DE ; RECOVER E |
|||
INC E ; INCREMENT IT |
|||
JR FV_VDASCR ; LOOP |
|||
|
|||
FV_STAT: |
|||
IN A,(FV_KBDST) ; GET STATUS |
|||
AND $01 ; ISOLATE DATA WAITING BIT |
|||
JP Z,CIO_IDLE ; NO DATA, EXIT VIA IDLE PROCESS |
|||
RET |
|||
|
|||
FV_FLUSH: |
|||
XOR A ; SIGNAL SUCCESS |
|||
RET |
|||
|
|||
FV_READ: |
|||
CALL FV_STAT ; GET STATUS |
|||
JR Z,FV_READ ; LOOP TILL DATA READY |
|||
IN A,(FV_KBDDATA) ; GET BYTE |
|||
LD E,A ; PUT IN E FOR RETURN |
|||
XOR A ; SIGNAL SUCCESS |
|||
RET ; DONE |
|||
|
|||
;---------------------------------------------------------------------- |
|||
; READ VALUE AT CURRENT VDU BUFFER POSITION |
|||
; RETURN E = CHARACTER, B = COLOUR, C = ATTRIBUTES |
|||
;---------------------------------------------------------------------- |
|||
|
|||
FV_VDARDC: |
|||
CALL FV_GETCHAR ; GET THE CHARACTER AT CUR CUR POS |
|||
LD E,A ; PUT IN E |
|||
LD BC,0 ; COLOR AND ATTR NOT SUPPORTED |
|||
XOR A ; SIGNAL SUCCESS |
|||
RET |
|||
; |
|||
;====================================================================== |
|||
; FPGA VGA DRIVER - PRIVATE DRIVER FUNCTIONS |
|||
;====================================================================== |
|||
; |
|||
; |
|||
;---------------------------------------------------------------------- |
|||
; PROBE FOR FPGA VGA HARDWARE |
|||
;---------------------------------------------------------------------- |
|||
; |
|||
; ON RETURN, ZF SET INDICATES HARDWARE FOUND |
|||
; |
|||
FV_PROBE: |
|||
XOR A ; ASSUME H/W EXISTS |
|||
RET |
|||
; |
|||
;---------------------------------------------------------------------- |
|||
; CRTC DISPLAY CONTROLLER CHIP INITIALIZATION |
|||
;---------------------------------------------------------------------- |
|||
; |
|||
FV_CRTINIT: |
|||
LD A,%11001111 ; WHITE ON BLACK, CURSOR ON, ENABLE OUTPUT |
|||
OUT (FV_CTL),A ; WRITE TO CONTROL PORT |
|||
XOR A ; ZERO ACCUM |
|||
RET ; DONE |
|||
; |
|||
;---------------------------------------------------------------------- |
|||
; SET CURSOR POSITION TO ROW IN D AND COLUMN IN E |
|||
;---------------------------------------------------------------------- |
|||
; |
|||
FV_XY: |
|||
CALL FV_HIDECUR ; HIDE THE CURSOR |
|||
PUSH DE ; SAVE NEW POSITION FOR NOW |
|||
CALL FV_XY2IDX ; CONVERT ROW/COL TO BUF IDX |
|||
LD (FV_POS),HL ; SAVE THE RESULT (DISPLAY POSITION) |
|||
POP DE ; RECOVER INCOMING ROW/COL |
|||
LD A,D ; GET ROW |
|||
OUT (FV_CROW),A ; SET ROW REGISTER |
|||
LD A,E ; GET COL |
|||
INC A ; 1..79,0 (WHY???) |
|||
CP 80 ; COL 80? |
|||
JR NZ, FV_XY1 ; SKIP IF NOT |
|||
XOR A ; ELSE MAKE IT ZERO! |
|||
FV_XY1: |
|||
OUT (FV_CCOL),A ; SET COL REGISTER |
|||
JP FV_SHOWCUR ; SHOW THE CURSOR AND EXIT |
|||
; |
|||
;---------------------------------------------------------------------- |
|||
; CONVERT XY COORDINATES IN DE INTO LINEAR INDEX IN HL |
|||
; D=ROW, E=COL |
|||
;---------------------------------------------------------------------- |
|||
; |
|||
FV_XY2IDX: |
|||
LD A,E ; SAVE COLUMN NUMBER IN A |
|||
LD H,D ; SET H TO ROW NUMBER |
|||
LD E,FV_COLS ; SET E TO ROW LENGTH |
|||
CALL MULT8 ; MULTIPLY TO GET ROW OFFSET, H * E = HL, E=0, B=0 |
|||
LD E,A ; GET COLUMN BACK |
|||
ADD HL,DE ; ADD IT IN |
|||
RET ; RETURN |
|||
; |
|||
;---------------------------------------------------------------------- |
|||
; SHOW OR HIDE CURSOR |
|||
;---------------------------------------------------------------------- |
|||
; |
|||
FV_SHOWCUR: |
|||
LD A,%11001111 ; CONTROL PORT VALUE |
|||
;;;LD A,%11111111 ; CONTROL PORT VALUE |
|||
OUT (FV_CTL),A ; SET REGISTER |
|||
XOR A ; SIGNAL SUCCESS |
|||
RET ; DONE |
|||
; |
|||
FV_HIDECUR: |
|||
LD A,%11001111 ; CONTROL PORT VALUE |
|||
;;;LD A,%11111111 ; CONTROL PORT VALUE |
|||
OUT (FV_CTL),A ; SET REGISTER |
|||
XOR A ; SIGNAL SUCCESS |
|||
RET ; DONE |
|||
; |
|||
;---------------------------------------------------------------------- |
|||
; (DE)SELECT FRAME BUFFER |
|||
;---------------------------------------------------------------------- |
|||
; |
|||
FV_BUFSEL: |
|||
PUSH AF |
|||
LD A,$01 |
|||
OUT (FV_BUFCTL),A |
|||
POP AF |
|||
RET |
|||
; |
|||
FV_BUFDESEL: |
|||
PUSH AF |
|||
XOR A |
|||
OUT (FV_BUFCTL),A |
|||
POP AF |
|||
RET |
|||
; |
|||
;---------------------------------------------------------------------- |
|||
; WRITE VALUE IN A TO CURRENT VDU BUFFER POSITION, ADVANCE CURSOR |
|||
;---------------------------------------------------------------------- |
|||
; |
|||
FV_PUTCHAR: |
|||
; WRITE CHAR AT CURRENT CURSOR POSITION. |
|||
PUSH AF ; SAVE INCOMING CHAR |
|||
CALL FV_HIDECUR ; HIDE CURSOR |
|||
CALL FV_BUFSEL ; SELECT FRAME BUFFER |
|||
POP AF |
|||
LD HL,(FV_POS) ; GET CUR BUF POSITION |
|||
LD DE,FV_FBUF ; START OF FRAME BUF |
|||
ADD HL,DE ; ADD IT IN |
|||
LD (HL),A ; PUT THE CHAR |
|||
; |
|||
; SET NEW POSITION |
|||
LD HL,(FV_POS) ; GET POSITION |
|||
INC HL ; BUMP POSITION |
|||
LD (FV_POS),HL ; SAVE NEW POSITION |
|||
; |
|||
; PUT CUROR IN PLACE |
|||
LD DE,FV_COLS ; COLS PER LINE |
|||
CALL DIV16 ; BC=ROW, HL=COL |
|||
LD D,C |
|||
LD E,L |
|||
CALL FV_XY |
|||
CALL FV_BUFDESEL ; DESELECT FRAME BUFFER |
|||
JP FV_SHOWCUR ; SHOW IT AND RETURN |
|||
; |
|||
;---------------------------------------------------------------------- |
|||
; GET CHAR VALUE TO A FROM CURRENT VDU BUFFER POSITION |
|||
;---------------------------------------------------------------------- |
|||
; |
|||
FV_GETCHAR: |
|||
XOR A |
|||
RET |
|||
; |
|||
;---------------------------------------------------------------------- |
|||
; FILL AREA IN BUFFER WITH SPECIFIED CHARACTER AND CURRENT COLOR/ATTRIBUTE |
|||
; STARTING AT THE CURRENT FRAME BUFFER POSITION |
|||
; A: FILL CHARACTER |
|||
; DE: NUMBER OF CHARACTERS TO FILL |
|||
;---------------------------------------------------------------------- |
|||
; |
|||
FV_FILL: |
|||
PUSH AF ; SAVE INCOMING FILL CHAR |
|||
CALL FV_HIDECUR ; HIDE CURSOR |
|||
CALL FV_BUFSEL ; SELECT BUFFER |
|||
LD HL,(FV_POS) ; CUR POS TO HL |
|||
LD BC,FV_FBUF ; ADR OF FRAME |
|||
ADD HL,BC ; ADD IT IN |
|||
POP AF |
|||
LD C,A ; FILL CHAR TO C |
|||
FV_FILL1: |
|||
LD A,D ; CHECK FILL |
|||
OR E ; ... COUNTER |
|||
JR Z,FV_FILL2 ; DONE IF ZERO |
|||
LD (HL),C ; FILL ONE CHAR |
|||
INC HL ; BUMP BUF PTR |
|||
DEC DE ; DEC FILL COUNTER |
|||
JR FV_FILL1 ; LOOP |
|||
; |
|||
FV_FILL2: |
|||
CALL FV_BUFDESEL ; DESELECT BUFFER |
|||
JP FV_SHOWCUR ; EXIT VIA SHOW CURSOR |
|||
; |
|||
;---------------------------------------------------------------------- |
|||
; SCROLL ENTIRE SCREEN FORWARD BY ONE LINE (CURSOR POSITION UNCHANGED) |
|||
;---------------------------------------------------------------------- |
|||
; |
|||
FV_SCROLL: |
|||
CALL FV_BUFSEL ; SELECT FRAME BUFFER |
|||
; |
|||
; COPY "UP" ONE LINE |
|||
LD HL,FV_FBUF + FV_COLS ; FROM SECOND LINE |
|||
LD DE,FV_FBUF ; TO FIRST LINE |
|||
LD BC,+(FV_ROWS - 1) * FV_COLS ; ALL BUT ONE LINE |
|||
LDIR ; DO IT |
|||
; |
|||
; FILL LAST LINE OF SCREEN |
|||
LD HL,FV_FBUF + ((FV_ROWS - 1) * FV_COLS) ; LAST LINE |
|||
LD A,' ' ; FILL CHAR |
|||
LD (HL),A ; COPY 1 CHAR |
|||
LD DE,FV_FBUF + ((FV_ROWS - 1) * FV_COLS) + 1 ; SECOND POS IN LAST LINE |
|||
LD BC,FV_COLS - 1 ; COLS PER LINE - 1 |
|||
LDIR ; FILL IT |
|||
; |
|||
CALL FV_BUFDESEL ; DESELECT FRAME BUFFER |
|||
RET ; DONE |
|||
; |
|||
;---------------------------------------------------------------------- |
|||
; REVERSE SCROLL ENTIRE SCREEN BY ONE LINE (CURSOR POSITION UNCHANGED) |
|||
;---------------------------------------------------------------------- |
|||
; |
|||
FV_RSCROLL: |
|||
CALL FV_BUFSEL ; SELECT FRAME BUFFER |
|||
; |
|||
; COPY "DOWN" ONE LINE |
|||
LD HL,FV_FBUF + (FV_COLS * (FV_ROWS - 1)) - 1 ; FROM END OF SECOND TO LAST LINE |
|||
LD DE,FV_FBUF + (FV_COLS * FV_ROWS) - 1 ; TO END OF LAST LINE |
|||
LD BC,+(FV_ROWS - 1) * FV_COLS ; ALL BUT ONE LINE |
|||
LDDR ; DO IT IN REVERSE |
|||
; |
|||
; FILL FIRST LINE OF SCREEN |
|||
LD HL,FV_FBUF ; FIRST LINE |
|||
LD A,' ' ; FILL CHAR |
|||
LD (HL),A ; COPY 1 CHAR |
|||
LD DE,FV_FBUF + 1 ; SECOND POS IN FIRST LINE |
|||
LD BC,FV_COLS - 1 ; COLS PER LINE - 1 |
|||
LDIR ; FILL IT |
|||
; |
|||
CALL FV_BUFDESEL ; DESELECT FRAME BUFFER |
|||
RET ; DONE |
|||
; |
|||
;---------------------------------------------------------------------- |
|||
; BLOCK COPY BC BYTES FROM HL TO DE |
|||
;---------------------------------------------------------------------- |
|||
; |
|||
FV_BLKCPY: |
|||
|
|||
CALL FV_BUFSEL ; SELECT FRAME BUFFER |
|||
PUSH BC ; SAVE LENGTH |
|||
LD BC,FV_FBUF ; FRAME BUFFER ADR |
|||
ADD HL,BC ; ADD TO SOURCE |
|||
EX DE,HL ; EXCHANGE |
|||
ADD HL,BC ; ADD TO DEST |
|||
EX DE,HL ; EXCHANGE |
|||
POP BC ; RECOVER LENGTH |
|||
LDIR ; LDIR DOES THE COPY |
|||
CALL FV_BUFDESEL ; DESELECT FRAME BUFFER |
|||
RET ; DONE |
|||
; |
|||
;================================================================================================== |
|||
; FPGA VGA DRIVER - DATA |
|||
;================================================================================================== |
|||
; |
|||
FV_POS .DW 0 ; CURRENT DISPLAY POSITION |
|||
FV_ACTIVE .DB FALSE ; FLAG FOR DRIVER ACTIVE |
|||
; |
|||
;================================================================================================== |
|||
; VGA DRIVER - INSTANCE DATA |
|||
;================================================================================================== |
|||
; |
|||
FV_IDAT: |
|||
.DB KBDMODE_FV ; FPGA VGA KEYBOARD CONTROLLER |
|||
.DB FV_KBDST |
|||
.DB FV_KBDDATA |
|||
Loading…
Reference in new issue