mirror of https://github.com/wwarthen/RomWBW.git
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.pdfpull/418/head
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