mirror of https://github.com/zxdos/zxuno.git
193 lines
6.1 KiB
Systemverilog
193 lines
6.1 KiB
Systemverilog
// This file is part of the ZXUNO Spectrum core.
|
|
// Creation date is 18:39:21 2020-02-09 by Miguel Angel Rodriguez Jodar
|
|
// (c)2014-2020 ZXUNO association.
|
|
// ZXUNO official repository: http://svn.zxuno.com/svn/zxuno
|
|
// Username: guest Password: zxuno
|
|
// Github repository for this core: https://github.com/mcleod-ideafix/zxuno_spectrum_core
|
|
//
|
|
// ZXUNO Spectrum core is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// (at your option) any later version.
|
|
//
|
|
// ZXUNO Spectrum core is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with the ZXUNO Spectrum core. If not, see <https://www.gnu.org/licenses/>.
|
|
//
|
|
// Any distributed copy of this file must keep this notice intact.
|
|
|
|
|
|
// Build options (comment out to disable a specific option)
|
|
|
|
`define LOAD_ROM_FROM_FLASH_OPTION
|
|
// The following two defines are taken into account only if LOAD_ROM_FROM_FLASH_OPTION is not defined
|
|
`define DEFAULT_SYSTEM_ROM "128en.hex"
|
|
`define DEFAULT_DIVMMC_ROM "esxdos088.hex"
|
|
`define MIDI_SYNTH_OPTION
|
|
`define UART_ESP8266_OPTION
|
|
`define F11_ESP8266_FEATURE
|
|
`define PZX_PLAYER_OPTION
|
|
`define VGA_OUTPUT_OPTION
|
|
`define CPU_TURBO_OPTION
|
|
`define DIVMMC_SUPPORT
|
|
`define ZXUNO_DMA_SUPPORT
|
|
`define ULA_TIMEX_SUPPORT
|
|
|
|
// Radastan mode needs ULAplus support enabled
|
|
`define ULAPLUS_SUPPORT
|
|
`define ULA_RADASTAN_SUPPORT
|
|
`define ULA_SNOW_SUPPORT
|
|
`define RASTER_INTERRUPT_SUPPORT
|
|
`define TURBOSUND_SUPPORT
|
|
`define SPECDRUM_COVOX_SUPPORT
|
|
`define MULTIBOOT_SUPPORT
|
|
//`define PENTAGON_512K_SUPPORT
|
|
`define JOYSPLITTER_SUPPORT
|
|
|
|
// FPGA color clock generation needs AD724 control support enabled
|
|
//`define AD724_CONTROL_SUPPORT
|
|
//`define FPGA_GENERATES_COLOR_CLOCK_OPTION
|
|
`define MONOCHROMERGB
|
|
//`define SAA1099
|
|
`define INITIAL_KB_RESET
|
|
// ZXUNO core ID string. Must be padded with zero bytes to the right (16 bytes total)
|
|
localparam COREID_STRING = {"EXP27-030422", 8'h00, 8'h00, 8'h00, 8'h00};
|
|
|
|
// Power-on/FPGA PROG video configuration
|
|
localparam
|
|
VSYNC_OPTION = 1'b0, // 0=Sinclair simple vertical sync, 1=proper PAL vsync
|
|
FREQ_OPTION = 3'b000, // 0 to 7 (50 to almost 60 Hz)
|
|
SCANLINES_OPTION = 1'b0, // 0=no scanlines, 1=scanlines
|
|
VIDEO_OPTION = 1'b1; // 0=RGB, 1=VGA
|
|
localparam INITIAL_VIDEO_VALUE = {2'b00, VSYNC_OPTION, FREQ_OPTION, SCANLINES_OPTION, VIDEO_OPTION};
|
|
|
|
// ZXUNO address/data I/O ports for indirect access to ZXUNO registers
|
|
localparam
|
|
IOADDR = 16'hFC3B,
|
|
IODATA = 16'hFD3B;
|
|
|
|
// ULAplus I/O ports
|
|
localparam
|
|
ULAPLUSADDR = 16'hBF3B,
|
|
ULAPLUSDATA = 16'hFF3B;
|
|
|
|
// TIMEX I/O ports
|
|
localparam
|
|
TIMEXPORT = 8'hFF,
|
|
TIMEXMMU = 8'hF4;
|
|
|
|
// ZXUNO registers for master configuration and memory handling
|
|
localparam
|
|
MASTERCONF = 8'h00,
|
|
MASTERMAPPER = 8'h01;
|
|
|
|
// ZXUNO registers for SPI devices (flash)
|
|
localparam
|
|
SPIPORT = 8'h02, // registro de lectura/escritura SPI
|
|
CSPIN = 8'h03; // bit 0: estado/control de la seƱal FLASH_CS
|
|
|
|
// ZXUNO registers for PS/2 keyboard handling
|
|
localparam
|
|
SCANCODE = 8'h04,
|
|
KBSTATUS = 8'h05,
|
|
KEYMAP = 8'h07;
|
|
|
|
// ZXUNO registers for joystick configuration
|
|
localparam
|
|
JOYCONFADDR = 8'h06;
|
|
|
|
// ZXUNO register to enable Antonio's special NMI
|
|
localparam NMIEVENT = 8'h08;
|
|
|
|
// ZXUNO registers for PS/2 mouse handling
|
|
localparam MOUSEDATA = 8'h09,
|
|
MOUSESTATUS = 8'h0A;
|
|
|
|
// I/O ports for Kempston and Fuller joystick interfaces
|
|
localparam
|
|
KEMPSTONADDR1 = 8'h1F,
|
|
KEMPSTONADDR2 = 8'hDF,
|
|
FULLERADDR = 8'h7F;
|
|
|
|
// I/O ports for SD card (ZXMMC and DIVMMC)
|
|
localparam
|
|
SDCS = 8'h1F, //
|
|
SDSPI = 8'h3F, // Puertos de la ZXMMC
|
|
DIVCS = 8'he7, //
|
|
DIVSPI = 8'heb; // Puertos del DIVMMC
|
|
|
|
// ZXUNO register for scandoubler/CPU speed options
|
|
localparam SCANDBLCTRL = 8'h0B;
|
|
|
|
// I/O port for CPU speed option (Prism compatible)
|
|
localparam PRISMSPEEDCTRL = 16'h8e3b; // PRISM speed control: bits D3-D0. Bits D7-D4 must be 0000
|
|
|
|
// ZXUNO registers for raster interrupt
|
|
localparam RASTERLINE = 8'h0C,
|
|
RASTERCTRL = 8'h0D;
|
|
|
|
// ZXUNO registers for enabling/disabling integrated addons
|
|
localparam
|
|
DEVOPTIONS = 8'h0E,
|
|
DEVOPTS2 = 8'h0F;
|
|
|
|
// ZXUNO register for memory capacity reporting
|
|
localparam MEMREPORT = 8'h10;
|
|
|
|
// ZXUNO registers for Radastan mode control and options
|
|
localparam
|
|
RADASCTRL = 8'h40,
|
|
RADASOFFSET = 8'h41,
|
|
RADASPADDING = 8'h42,
|
|
RADASPALBANK = 8'h43;
|
|
|
|
// ZXUNO registers for screen location (composite & RGB) fine adjust
|
|
localparam
|
|
HOFFS48K = 8'h80,
|
|
VOFFS48K = 8'h81,
|
|
HOFFS128K = 8'h82,
|
|
VOFFS128K = 8'h83,
|
|
HOFFSPEN = 8'h84,
|
|
VOFFSPEN = 8'h85;
|
|
|
|
// ZXUNO registers for DMA
|
|
localparam
|
|
DMACTRL = 8'hA0,
|
|
DMASRC = 8'hA1,
|
|
DMADST = 8'hA2,
|
|
DMAPRE = 8'hA3,
|
|
DMALEN = 8'hA4,
|
|
DMAPROB = 8'hA5,
|
|
DMASTAT = 8'hA6;
|
|
|
|
// ZXUNO registers for UART (wifi module) handling
|
|
localparam UARTDATA = 8'hC6,
|
|
UARTSTAT = 8'hC7;
|
|
|
|
// ZXUNO registers for PZX/real tape handling
|
|
localparam SRAMADDR = 8'hF0,
|
|
SRAMADDRINC = 8'hF1,
|
|
SRAMDATA = 8'hF2,
|
|
VDECKCTRL = 8'hF3;
|
|
|
|
// ZXUNO register for AD724 control (NTSC/PAL option)
|
|
localparam CTRLAD724 = 8'hFB;
|
|
|
|
// ZXUNO registers for multiboot handling
|
|
localparam ADDR_COREADDR = 8'hFC,
|
|
ADDR_COREBOOT = 8'hFD;
|
|
|
|
// ZXUNO register for never resetted scratch register (test for initial hardware reset)
|
|
localparam SCRATCH = 8'hFE;
|
|
|
|
// ZXUNO register for reading core ID string
|
|
localparam
|
|
IDSTRING = 8'hFF;
|
|
|
|
// I/O port for audio mixer
|
|
localparam AUDIOMIXER = 8'hF7; // Andrew Owen
|