diff --git a/InputTest.sv b/InputTest.sv
index 8a2f351..323f44a 100644
--- a/InputTest.sv
+++ b/InputTest.sv
@@ -32,12 +32,14 @@ module emu
output [7:0] VGA_B,
output VGA_HS,
output VGA_VS,
+ output VGA_DE, // = ~(VBlank | HBlank)
output VGA_F1,
output [1:0] VGA_SL,
output VGA_SCALER, // Force VGA scaler
input [11:0] HDMI_WIDTH,
input [11:0] HDMI_HEIGHT,
+ output HDMI_FREEZE,
`ifdef MISTER_FB
// Use framebuffer in DDRAM (USE_FB=1 in qsf)
@@ -164,9 +166,9 @@ assign {SD_SCK, SD_MOSI, SD_CS} = 'Z;
assign {SDRAM_DQ, SDRAM_A, SDRAM_BA, SDRAM_CLK, SDRAM_CKE, SDRAM_DQML, SDRAM_DQMH, SDRAM_nWE, SDRAM_nCAS, SDRAM_nRAS, SDRAM_nCS} = 'Z;
assign {DDRAM_CLK, DDRAM_BURSTCNT, DDRAM_ADDR, DDRAM_DIN, DDRAM_BE, DDRAM_RD, DDRAM_WE} = '0;
-assign VGA_SL = 0;
assign VGA_F1 = 0;
assign VGA_SCALER = 0;
+assign HDMI_FREEZE = 0;
assign AUDIO_S = 0;
assign AUDIO_L = 0;
@@ -184,8 +186,6 @@ wire [1:0] ar = status[9:8];
assign VIDEO_ARX = (!ar) ? 12'd4 : (ar - 1'd1);
assign VIDEO_ARY = (!ar) ? 12'd3 : 12'd0;
-assign LED_USER = copy_in_progress;
-
`include "build_id.v"
localparam CONF_STR = {
"InputTest;;",
@@ -197,56 +197,118 @@ localparam CONF_STR = {
"V,v",`BUILD_DATE
};
-
-
//
// HPS is the module that communicates between the linux and fpga
//
wire [31:0] status;
+wire [1:0] buttons;
+wire forced_scandoubler;
+wire direct_video;
-hps_io #(.STRLEN(($size(CONF_STR)>>3)) , .PS2DIV(1000), .WIDE(0)) hps_io
+wire ioctl_download;
+wire ioctl_upload;
+wire ioctl_wr;
+wire [24:0] ioctl_addr;
+wire [7:0] ioctl_dout;
+wire [7:0] ioctl_din;
+wire [7:0] ioctl_index;
+wire ioctl_wait;
+
+wire [15:0] joystick_0, joystick_1;
+
+wire [21:0] gamma_bus;
+
+hps_io #(.CONF_STR(CONF_STR)) hps_io
(
.clk_sys(clk_sys),
.HPS_BUS(HPS_BUS),
- .status(status),
-
- .conf_str(CONF_STR)
-
+ .buttons(buttons),
+ .status(status),
+ .status_menumask({direct_video}),
+
+ .forced_scandoubler(forced_scandoubler),
+ .direct_video(direct_video),
+
+ .ioctl_download(ioctl_download),
+ .ioctl_upload(ioctl_upload),
+ .ioctl_wr(ioctl_wr),
+ .ioctl_addr(ioctl_addr),
+ .ioctl_dout(ioctl_dout),
+ .ioctl_din(ioctl_din),
+ .ioctl_index(ioctl_index),
+ .ioctl_wait(ioctl_wait),
+
+ .joystick_0(joystick_0),
+ .joystick_1(joystick_1)
);
-///////////////////
-// PLL - clocks are the most important part of a system
-///////////////////////////////////////////////////
-wire clk_sys, locked;
+
+
+//////////////////// CLOCKS ///////////////////
+
+wire clk_sys;
+reg ce_pix;
pll pll
(
.refclk(CLK_50M),
.rst(0),
- .outclk_0(clk_sys), // 25.116279 Mhz - for the vga pixel clock
- .locked(locked)
+ .outclk_0(clk_sys)
+);
+
+
+/////////////////// CLOCK DIVIDER ////////////////////
+
+always @(posedge clk_sys) begin
+ reg div;
+ div <= div + 1'd1;
+ ce_pix <= !div;
+end
+
+
+/////////////////// VIDEO ////////////////////
+wire hblank, vblank;
+wire hs, vs;
+
+wire [7:0] r;
+wire [7:0] g;
+wire [7:0] b;
+wire [23:0] rgb = {r,g,b};
+arcade_video #(224,24) arcade_video
+(
+ .*,
+ .clk_video(clk_sys),
+ .RGB_in(rgb),
+ .HBlank(hblank),
+ .VBlank(vblank),
+ .HSync(hs),
+ .VSync(vs),
+ .fx(status[5:3])
);
///////////////////////////////////////////////////
-assign CLK_VIDEO = clk_sys;
-assign CE_PIXEL = 1;
-
-///////////////////////////////////////////////////
-wire [3:0] r, g, b;
-wire vs,hs;
-wire ce_pix;
-wire hblank, vblank;
+wire rom_download = ioctl_download && (ioctl_index < 8'd2);
+wire reset = (RESET | status[0] | buttons[1] | rom_download);
+assign LED_USER = rom_download;
soc soc(
- .clk_sys(clk_sys), // wrong
- .pixel_clock(clk_sys), // wrong
- .VGA_HS(VGA_HS),
- .VGA_VS(VGA_VS),
- .VGA_R(VGA_R),
- .VGA_G(VGA_G),
- .VGA_B(VGA_B)
+ .clk_sys(clk_sys),
+ .ce_pix(ce_pix),
+ .reset(reset | ioctl_download),
+ .VGA_HS(hs),
+ .VGA_VS(vs),
+ .VGA_R(r),
+ .VGA_G(g),
+ .VGA_B(b),
+ .VGA_HB(hblank),
+ .VGA_VB(vblank),
+ .dn_addr(ioctl_addr[13:0]),
+ .dn_data(ioctl_dout),
+ .dn_wr(ioctl_wr),
+ .dn_index(ioctl_index),
+ .inputs1(joystick_0[7:0]),
+ .inputs2(joystick_1[7:0])
);
-
endmodule
diff --git a/MiSTer.pf b/MiSTer.pf
new file mode 100644
index 0000000..1420b55
Binary files /dev/null and b/MiSTer.pf differ
diff --git a/README.MD b/README.MD
index 6b35f4c..b667f72 100644
--- a/README.MD
+++ b/README.MD
@@ -1,14 +1,19 @@
+# InputTest_MiSTer
+
+## Overview
-# Memory Map
+
+
+
+## Memory Map
Start|End|Length|Name
---|---|---|---
0x0000|0x3FFF|0x4000|Program ROM
-0x4000|0x43FF|0x0400|Char ROM
-
+0x4000|0x47FF|0x0800|Char ROM
0x6000|0x6000|0x0001|System inputs (video timings etc)
-0x6001|0x6001|0x0001|Control inputs
-
-0x8000|0xBFFF|0x4000|Work RAM
-0xC000|0xC3FF|0xDFFF|Char RAM
+0x7000|0x70BF|0x00C0|Joystick inputs
+0x8000|0x87FF|0x0800|Char RAM
+0x8800|0x8FFF|0x0800|Colour RAM
+0xC000|0xFFFF|0x4000|Work RAM
diff --git a/build.sh b/build.sh
index 2d92d42..ad36c63 100644
--- a/build.sh
+++ b/build.sh
@@ -1,5 +1,6 @@
cd src
-make
+make clean
+make all
cd ..
cd verilator
./verilate.sh
diff --git a/files.qip b/files.qip
index a99204a..69cbb3f 100644
--- a/files.qip
+++ b/files.qip
@@ -1,5 +1,4 @@
set_global_assignment -name SYSTEMVERILOG_FILE InputTest.sv
-set_global_assignment -name QIP_FILE rtl/T80/t80.qip
set_global_assignment -name QIP_FILE rtl/tv80/TV80.qip
set_global_assignment -name CDF_FILE jtag.cdf
set_global_assignment -name QIP_FILE sys/sys.qip
diff --git a/src/font.bin b/font.bin
similarity index 100%
rename from src/font.bin
rename to font.bin
diff --git a/src/font.fnt b/font.fnt
similarity index 100%
rename from src/font.fnt
rename to font.fnt
diff --git a/font.pf b/font.pf
new file mode 100644
index 0000000..19e6019
Binary files /dev/null and b/font.pf differ
diff --git a/ram4k.qip b/ram4k.qip
deleted file mode 100644
index 9148265..0000000
--- a/ram4k.qip
+++ /dev/null
@@ -1,4 +0,0 @@
-set_global_assignment -name IP_TOOL_NAME "RAM: 1-PORT"
-set_global_assignment -name IP_TOOL_VERSION "17.0"
-set_global_assignment -name IP_GENERATED_DEVICE_FAMILY "{Cyclone V}"
-set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) "ram4k.v"]
diff --git a/ram4k.v b/ram4k.v
deleted file mode 100644
index fcd0143..0000000
--- a/ram4k.v
+++ /dev/null
@@ -1,173 +0,0 @@
-// megafunction wizard: %RAM: 1-PORT%
-// GENERATION: STANDARD
-// VERSION: WM1.0
-// MODULE: altsyncram
-
-// ============================================================
-// File Name: ram4k.v
-// Megafunction Name(s):
-// altsyncram
-//
-// Simulation Library Files(s):
-// altera_mf
-// ============================================================
-// ************************************************************
-// THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE!
-//
-// 17.0.2 Build 602 07/19/2017 SJ Lite Edition
-// ************************************************************
-
-
-//Copyright (C) 2017 Intel Corporation. All rights reserved.
-//Your use of Intel Corporation's design tools, logic functions
-//and other software and tools, and its AMPP partner logic
-//functions, and any output files from any of the foregoing
-//(including device programming or simulation files), and any
-//associated documentation or information are expressly subject
-//to the terms and conditions of the Intel Program License
-//Subscription Agreement, the Intel Quartus Prime License Agreement,
-//the Intel MegaCore Function License Agreement, or other
-//applicable license agreement, including, without limitation,
-//that your use is for the sole purpose of programming logic
-//devices manufactured by Intel and sold by Intel or its
-//authorized distributors. Please refer to the applicable
-//agreement for further details.
-
-
-// synopsys translate_off
-`timescale 1 ps / 1 ps
-// synopsys translate_on
-module ram4k (
- address,
- clock,
- data,
- wren,
- q);
-
- input [11:0] address;
- input clock;
- input [7:0] data;
- input wren;
- output [7:0] q;
-`ifndef ALTERA_RESERVED_QIS
-// synopsys translate_off
-`endif
- tri1 clock;
-`ifndef ALTERA_RESERVED_QIS
-// synopsys translate_on
-`endif
-
- wire [7:0] sub_wire0;
- wire [7:0] q = sub_wire0[7:0];
-
- altsyncram altsyncram_component (
- .address_a (address),
- .clock0 (clock),
- .data_a (data),
- .wren_a (wren),
- .q_a (sub_wire0),
- .aclr0 (1'b0),
- .aclr1 (1'b0),
- .address_b (1'b1),
- .addressstall_a (1'b0),
- .addressstall_b (1'b0),
- .byteena_a (1'b1),
- .byteena_b (1'b1),
- .clock1 (1'b1),
- .clocken0 (1'b1),
- .clocken1 (1'b1),
- .clocken2 (1'b1),
- .clocken3 (1'b1),
- .data_b (1'b1),
- .eccstatus (),
- .q_b (),
- .rden_a (1'b1),
- .rden_b (1'b1),
- .wren_b (1'b0));
- defparam
- altsyncram_component.clock_enable_input_a = "BYPASS",
- altsyncram_component.clock_enable_output_a = "BYPASS",
- altsyncram_component.intended_device_family = "Cyclone V",
- altsyncram_component.lpm_hint = "ENABLE_RUNTIME_MOD=NO",
- altsyncram_component.lpm_type = "altsyncram",
- altsyncram_component.numwords_a = 4096,
- altsyncram_component.operation_mode = "SINGLE_PORT",
- altsyncram_component.outdata_aclr_a = "NONE",
- altsyncram_component.outdata_reg_a = "UNREGISTERED",
- altsyncram_component.power_up_uninitialized = "FALSE",
- altsyncram_component.read_during_write_mode_port_a = "NEW_DATA_NO_NBE_READ",
- altsyncram_component.widthad_a = 12,
- altsyncram_component.width_a = 8,
- altsyncram_component.width_byteena_a = 1;
-
-
-endmodule
-
-// ============================================================
-// CNX file retrieval info
-// ============================================================
-// Retrieval info: PRIVATE: ADDRESSSTALL_A NUMERIC "0"
-// Retrieval info: PRIVATE: AclrAddr NUMERIC "0"
-// Retrieval info: PRIVATE: AclrByte NUMERIC "0"
-// Retrieval info: PRIVATE: AclrData NUMERIC "0"
-// Retrieval info: PRIVATE: AclrOutput NUMERIC "0"
-// Retrieval info: PRIVATE: BYTE_ENABLE NUMERIC "0"
-// Retrieval info: PRIVATE: BYTE_SIZE NUMERIC "8"
-// Retrieval info: PRIVATE: BlankMemory NUMERIC "1"
-// Retrieval info: PRIVATE: CLOCK_ENABLE_INPUT_A NUMERIC "0"
-// Retrieval info: PRIVATE: CLOCK_ENABLE_OUTPUT_A NUMERIC "0"
-// Retrieval info: PRIVATE: Clken NUMERIC "0"
-// Retrieval info: PRIVATE: DataBusSeparated NUMERIC "1"
-// Retrieval info: PRIVATE: IMPLEMENT_IN_LES NUMERIC "0"
-// Retrieval info: PRIVATE: INIT_FILE_LAYOUT STRING "PORT_A"
-// Retrieval info: PRIVATE: INIT_TO_SIM_X NUMERIC "0"
-// Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone V"
-// Retrieval info: PRIVATE: JTAG_ENABLED NUMERIC "0"
-// Retrieval info: PRIVATE: JTAG_ID STRING "NONE"
-// Retrieval info: PRIVATE: MAXIMUM_DEPTH NUMERIC "0"
-// Retrieval info: PRIVATE: MIFfilename STRING ""
-// Retrieval info: PRIVATE: NUMWORDS_A NUMERIC "4096"
-// Retrieval info: PRIVATE: RAM_BLOCK_TYPE NUMERIC "0"
-// Retrieval info: PRIVATE: READ_DURING_WRITE_MODE_PORT_A NUMERIC "3"
-// Retrieval info: PRIVATE: RegAddr NUMERIC "1"
-// Retrieval info: PRIVATE: RegData NUMERIC "1"
-// Retrieval info: PRIVATE: RegOutput NUMERIC "0"
-// Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0"
-// Retrieval info: PRIVATE: SingleClock NUMERIC "1"
-// Retrieval info: PRIVATE: UseDQRAM NUMERIC "1"
-// Retrieval info: PRIVATE: WRCONTROL_ACLR_A NUMERIC "0"
-// Retrieval info: PRIVATE: WidthAddr NUMERIC "12"
-// Retrieval info: PRIVATE: WidthData NUMERIC "8"
-// Retrieval info: PRIVATE: rden NUMERIC "0"
-// Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all
-// Retrieval info: CONSTANT: CLOCK_ENABLE_INPUT_A STRING "BYPASS"
-// Retrieval info: CONSTANT: CLOCK_ENABLE_OUTPUT_A STRING "BYPASS"
-// Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone V"
-// Retrieval info: CONSTANT: LPM_HINT STRING "ENABLE_RUNTIME_MOD=NO"
-// Retrieval info: CONSTANT: LPM_TYPE STRING "altsyncram"
-// Retrieval info: CONSTANT: NUMWORDS_A NUMERIC "4096"
-// Retrieval info: CONSTANT: OPERATION_MODE STRING "SINGLE_PORT"
-// Retrieval info: CONSTANT: OUTDATA_ACLR_A STRING "NONE"
-// Retrieval info: CONSTANT: OUTDATA_REG_A STRING "UNREGISTERED"
-// Retrieval info: CONSTANT: POWER_UP_UNINITIALIZED STRING "FALSE"
-// Retrieval info: CONSTANT: READ_DURING_WRITE_MODE_PORT_A STRING "NEW_DATA_NO_NBE_READ"
-// Retrieval info: CONSTANT: WIDTHAD_A NUMERIC "12"
-// Retrieval info: CONSTANT: WIDTH_A NUMERIC "8"
-// Retrieval info: CONSTANT: WIDTH_BYTEENA_A NUMERIC "1"
-// Retrieval info: USED_PORT: address 0 0 12 0 INPUT NODEFVAL "address[11..0]"
-// Retrieval info: USED_PORT: clock 0 0 0 0 INPUT VCC "clock"
-// Retrieval info: USED_PORT: data 0 0 8 0 INPUT NODEFVAL "data[7..0]"
-// Retrieval info: USED_PORT: q 0 0 8 0 OUTPUT NODEFVAL "q[7..0]"
-// Retrieval info: USED_PORT: wren 0 0 0 0 INPUT NODEFVAL "wren"
-// Retrieval info: CONNECT: @address_a 0 0 12 0 address 0 0 12 0
-// Retrieval info: CONNECT: @clock0 0 0 0 0 clock 0 0 0 0
-// Retrieval info: CONNECT: @data_a 0 0 8 0 data 0 0 8 0
-// Retrieval info: CONNECT: @wren_a 0 0 0 0 wren 0 0 0 0
-// Retrieval info: CONNECT: q 0 0 8 0 @q_a 0 0 8 0
-// Retrieval info: GEN_FILE: TYPE_NORMAL ram4k.v TRUE
-// Retrieval info: GEN_FILE: TYPE_NORMAL ram4k.inc FALSE
-// Retrieval info: GEN_FILE: TYPE_NORMAL ram4k.cmp FALSE
-// Retrieval info: GEN_FILE: TYPE_NORMAL ram4k.bsf FALSE
-// Retrieval info: GEN_FILE: TYPE_NORMAL ram4k_inst.v FALSE
-// Retrieval info: GEN_FILE: TYPE_NORMAL ram4k_bb.v FALSE
-// Retrieval info: LIB_FILE: altera_mf
diff --git a/release/InputTest.mra b/release/InputTest.mra
new file mode 100644
index 0000000..61abc32
--- /dev/null
+++ b/release/InputTest.mra
@@ -0,0 +1,22 @@
+
+ Input Test
+
+
+
+ 0225
+ InputTest
+
+
+
+
+C3 00 01 00 00 00 00 00 FB ED 4D FB 00 00 00 00 FB ED 4D 00 00 00 00 00 FB ED 4D 00 00 00 00 00 FB ED 4D 00 00 00 00 00 FB ED 4D 00 00 00 00 00 FB ED 4D 00 00 00 00 00 FB ED 4D 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 31 00 00 CD EC 04 CD E9 03 C3 04 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3E 02 CF C9 3E 00 CF 76 18 FD 01 00 00 21 00 C0 79 96 78 23 9E D0 21 00 80 09 36 00 03 18 EE 40 20 DD E5 DD 21 00 00 DD 39 F5 21 1F 02 4E 06 00 C5 DD 6E 09 DD 66 0A E5 CD C3 04 F1 F1 4D 44 DD 6E 07 DD 66 08 09 EB DD 6E 04 DD 66 05 E5 CD DD 04 F1 4D 06 00 78 91 30 20 21 00 80 19 E3 DD 7E 04 80 6F DD 7E 05 CE 00 67 7E E1 E5 77 21 00 88 19 DD 7E 06 77 13 04 18 DC DD F9 DD E1 C9 DD E5 DD 21 00 00 DD 39 21 1F 02 4E 06 00 C5 DD 6E 08 DD 66 09 E5 CD C3 04 F1 F1 4D 44 DD 6E 06 DD 66 07 09 4D 44 21 00 80 09 DD 7E 04 77 21 00 88 09 DD 7E 05 77 DD E1 C9 DD E5 DD 21 00 00 DD 39 21 00 00 E5 2E 00 E5 DD 56 04 1E 80 D5 CD 7E 02 21 06 00 39 F9 21 00 00 E5 2E 27 E5 DD 56 04 1E 82 D5 CD 7E 02 21 06 00 39 F9 21 1D 00 E5 2E 00 E5 DD 56 04 1E 85 D5 CD 7E 02 21 06 00 39 F9 21 1D 00 E5 2E 27 E5 DD 56 04 1E 84 D5 CD 7E 02 21 06 00 39 F9 0E 01 79 D6 27 30 30 59 16 00 C5 D5 21 00 00 E5 D5 DD 56 04 1E 81 D5 CD 7E 02 21 06 00 39 F9 D1 21 1D 00 E5 D5 DD 56 04 1E 81 D5 CD 7E 02 21 06 00 39 F9 C1 0C 18 CB 0E 01 79 D6 1D 30 2E 59 16 00 C5 D5 D5 21 00 00 E5 DD 56 04 1E 83 D5 CD 7E 02 21 06 00 39 F9 21 27 00 E5 DD 56 04 1E 83 D5 CD 7E 02 21 06 00 39 F9 C1 0C 18 CD DD E1 C9 CD 0A 02 3E 07 F5 33 CD B7 02 33 21 03 00 E5 2E 09 E5 3E FF F5 33 21 D3 03 E5 CD 21 02 21 07 00 39 F9 21 04 00 E5 2E 02 E5 3E F0 F5 33 21 DB 03 E5 CD 21 02 21 07 00 39 F9 21 05 00 E5 2E 02 E5 3E E0 F5 33 21 E2 03 E5 CD 21 02 21 07 00 39 F9 C9 55 20 44 20 4C 20 52 00 4A 4F 59 20 31 29 00 4A 4F 59 20 32 29 00 DD E5 DD 21 00 00 DD 39 F5 3B 21 20 02 5E 21 1F 02 66 2E 00 55 06 08 29 30 01 19 10 FA 22 00 C0 CD 82 03 DD 36 FD AB 3A 00 60 E6 80 32 02 C0 3A 00 60 E6 40 FD 21 04 C0 FD 77 00 FD 7E 00 B7 28 6A 3A 05 C0 B7 20 64 DD 34 FD 21 01 00 E5 2E 06 E5 DD 7E FD F5 33 21 A3 04 E5 CD 21 02 21 07 00 39 F9 DD 36 FF 01 DD 36 FE 00 DD 7E FE D6 07 30 3A DD 6E FE 26 00 29 01 09 00 09 EB 3A 01 60 DD A6 FF B7 28 05 01 BF 04 18 03 01 C1 04 21 04 00 E5 D5 3E FF F5 33 C5 CD 21 02 21 07 00 39 F9 DD 7E FF 87 DD 77 FF DD 34 FE 18 BF 3A 02 C0 32 03 C0 3A 04 C0 32 05 C0 C3 10 04 2D 2D 2D 20 4D 69 53 54 65 72 20 49 6E 70 75 74 20 54 65 73 74 65 72 20 2D 2D 2D 00 31 00 30 00 F1 C1 D1 D5 C5 F5 AF 6F B0 06 10 20 04 06 08 79 29 CB 11 17 30 01 19 10 F7 C9 C1 E1 E5 C5 AF 47 4F ED B1 21 FF FF ED 42 C9 01 00 00 78 B1 28 08 11 06 C0 21 EC 04 ED B0 C9
+
+
+
+
+00 00 00 00 00 00 00 00 FF 00 FF 00 FF 00 FF 00 00 FF 00 FF 00 FF 00 00 00 00 FF 00 FF 00 00 00 FE E6 AA C6 AA E6 FE 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 05 05 0D 0D 19 79 71 A0 A0 A0 B0 B0 98 9E 8E 03 0F 3F FF 3F 0F 03 00 C0 F0 FC FF FC F0 C0 00 00 00 18 3C 7E 18 18 00 00 00 18 18 7E 3C 18 00 00 00 FC FC FC 00 00 00 00 00 3F 3F 3F 00 00 00 00 00 60 78 7E 78 60 00 00 38 44 44 FE FE FE 00 00 06 09 09 FC FC FC 00 00 FE C6 C6 C6 FE 00 00 00 FE FE FE FE FE 00 00 00 00 18 18 00 00 00 00 38 38 10 FE 44 EE EE 00 7E 81 3C 42 18 24 00 18 06 0C 18 3E 7C 18 30 60 38 FE 82 82 FE FE FE 00 00 00 00 00 00 00 00 00 30 30 30 30 00 30 30 00 CC 44 88 00 00 00 00 00 68 68 FC 68 FC 68 68 00 00 08 7C D0 78 2C F8 40 00 64 A8 D0 2C 54 98 00 00 30 58 30 5A CC 76 00 30 10 20 00 00 00 00 00 0C 18 30 30 30 18 0C 00 C0 60 30 30 30 60 C0 00 00 48 30 FC 30 48 00 00 00 30 30 FC 30 30 00 00 00 00 00 00 00 30 10 20 00 00 00 FC 00 00 00 00 00 00 00 00 00 30 30 00 04 0C 18 30 60 C0 80 00 78 CC DC DC DC CC 78 00 70 30 30 30 30 30 30 00 F8 0C 0C 78 C0 C0 FC 00 F8 0C 0C 78 0C 0C F8 00 38 78 D8 D8 FC 18 18 00 FC C0 C0 F8 0C 0C F8 00 7C C0 C0 F8 CC CC 78 00 FC 0C 18 30 30 30 30 00 78 CC CC 78 CC CC 78 00 78 CC CC 7C 0C 0C F8 00 00 00 30 30 00 30 30 00 00 00 30 30 00 30 10 20 18 30 60 C0 60 30 18 00 00 00 78 00 78 00 00 00 60 30 18 0C 18 30 60 00 78 CC CC 18 30 00 30 00 78 CC DC DC D8 C0 7C 00 78 CC CC FC CC CC CC 00 F8 CC CC F8 CC CC F8 00 7C C0 C0 C0 C0 C0 7C 00 F8 CC CC CC CC CC F8 00 7C C0 C0 F0 C0 C0 7C 00 7C C0 C0 F0 C0 C0 C0 00 7C CC C0 DC CC CC 7C 00 CC CC CC FC CC CC CC 00 30 30 30 30 30 30 30 00 0C 0C 0C 0C 0C CC F8 00 CC CC D8 F0 D8 CC CC 00 C0 C0 C0 C0 C0 C0 7C 00 C6 EE FE D6 C6 C6 C6 00 CC CC EC FC DC CC CC 00 7C CC CC CC CC CC F8 00 F8 CC CC F8 C0 C0 C0 00 7C CC CC CC DC DC F8 18 F8 CC CC F8 CC CC CC 00 7C C0 C0 78 0C 0C F8 00 FC 30 30 30 30 30 30 00 CC CC CC CC CC CC 7C 00 CC CC CC CC CC 78 30 00 C6 C6 C6 D6 FE EE C6 00 CC CC 78 30 78 CC CC 00 CC CC CC 78 30 30 30 00 FC 0C 18 30 60 C0 FC 00 3C 30 30 30 30 30 3C 00 80 C0 60 30 18 0C 04 00 F0 30 30 30 30 30 F0 00 10 38 6C C6 00 00 00 00 00 00 00 00 00 00 00 FE 30 20 10 00 00 00 00 00 00 00 7C CC CC CC 7C 00 C0 C0 F8 CC CC CC 78 00 00 00 7C C0 C0 C0 7C 00 0C 0C 7C CC CC CC 78 00 00 00 78 CC FC C0 7C 00 1C 30 30 78 30 30 30 00 00 00 78 CC CC 7C 0C F8 C0 C0 F8 CC CC CC CC 00 30 00 30 30 30 30 30 00 30 00 30 30 30 30 30 E0 C0 C0 CC CC F8 CC CC 00 30 30 30 30 30 30 38 00 00 00 EC FE D6 C6 C6 00 00 00 F8 CC CC CC CC 00 00 00 78 CC CC CC 78 00 00 00 78 CC CC CC F8 C0 00 00 78 CC CC CC 7C 0C 00 00 DC E0 C0 C0 C0 00 00 00 7C C0 78 0C F8 00 30 30 78 30 30 30 1C 00 00 00 CC CC CC CC 7C 00 00 00 CC CC CC 78 30 00 00 00 C6 C6 D6 FE 6C 00 00 00 CC CC 30 CC CC 00 00 00 CC CC CC 7C 0C F8 00 00 FC 0C 30 C0 FC 00 1C 30 30 E0 30 30 1C 00 30 30 30 00 30 30 30 00 E0 30 30 1C 30 30 E0 00 72 9C 00 00 00 00 00 00 FE FE FE FE FE FE FE 00 00 00 00 15 00 10 00 10 00 00 00 55 00 00 00 00 00 00 00 50 00 10 00 10 00 10 00 10 00 10 00 10 00 10 00 50 00 00 00 00 00 10 00 15 00 00 00 00 00 00 00 1F 10 10 10 10 00 00 00 FF 00 00 00 00 00 00 00 F0 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 F0 00 00 00 00 10 10 10 1F 00 00 00 00 FE 82 82 82 82 82 FE 00 12 34 F0 F6 F0 34 12 00 FE 82 82 82 82 FE FE 00 FE 82 82 82 FE FE FE 00 FE 82 82 FE FE FE FE 00 FE 82 FE FE FE FE FE 00 7C C6 44 C6 44 C6 7C 00 7C C6 44 CE 5C DE 7C 00 7C C6 44 FE 7C FE 7C 00 7C FE 7C FE 7C FE 7C 00 06 06 0C 0C D8 78 30 00
+
+
+
+ 202106162102
+
\ No newline at end of file
diff --git a/rtl/pll.qip b/rtl/pll.qip
index ee2ae77..72c6b1f 100644
--- a/rtl/pll.qip
+++ b/rtl/pll.qip
@@ -41,11 +41,11 @@ set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAM
set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX2ZyYWNfbXVsdGlwbHlfZmFjdG9y::MQ==::RnJhY3Rpb25hbCBNdWx0aXBseSBGYWN0b3IgKEsp"
set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3Jfbg==::MQ==::RGl2aWRlIEZhY3RvciAoTi1Db3VudGVyKQ=="
set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjA=::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy"
-set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kw::MjUuMTE2Mjc5::RGVzaXJlZCBGcmVxdWVuY3k="
+set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kw::NC41::RGVzaXJlZCBGcmVxdWVuY3k="
set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzA=::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ=="
-set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3Iw::MTA4::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg=="
+set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3Iw::Mjc=::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg=="
set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjA=::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ=="
-set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMA==::MjE1::QWN0dWFsIERpdmlkZSBGYWN0b3I="
+set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMA==::MzAw::QWN0dWFsIERpdmlkZSBGYWN0b3I="
set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5MA==::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ=="
set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMA==::cHM=::UGhhc2UgU2hpZnQgdW5pdHM="
set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0MA==::MA==::UGhhc2UgU2hpZnQ="
@@ -256,7 +256,7 @@ set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAM
set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzE3::MC4w::UGhhc2UgU2hpZnQ="
set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDE3::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0"
set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUxNw==::NTA=::RHV0eSBDeWNsZQ=="
-set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTA=::MjUuMTE2Mjc5IE1Ieg==::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTA="
+set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTA=::NC41MDAwMDAgTUh6::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTA="
set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQw::MCBwcw==::cGhhc2Vfc2hpZnQw"
set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTA=::NTA=::ZHV0eV9jeWNsZTA="
set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE=::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE="
@@ -318,7 +318,7 @@ set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAM
set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "cGxsX3R5cGU=::R2VuZXJhbA==::UExMIFRZUEU="
set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "cGxsX3N1YnR5cGU=::R2VuZXJhbA==::UExMIFNVQlRZUEU="
set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BhcmFtZXRlcl9saXN0::TS1Db3VudGVyIEhpIERpdmlkZSxNLUNvdW50ZXIgTG93IERpdmlkZSxOLUNvdW50ZXIgSGkgRGl2aWRlLE4tQ291bnRlciBMb3cgRGl2aWRlLE0tQ291bnRlciBCeXBhc3MgRW5hYmxlLE4tQ291bnRlciBCeXBhc3MgRW5hYmxlLE0tQ291bnRlciBPZGQgRGl2aWRlIEVuYWJsZSxOLUNvdW50ZXIgT2RkIERpdmlkZSBFbmFibGUsQy1Db3VudGVyLTAgSGkgRGl2aWRlLEMtQ291bnRlci0wIExvdyBEaXZpZGUsQy1Db3VudGVyLTAgQ29hcnNlIFBoYXNlIFNoaWZ0LEMtQ291bnRlci0wIFZDTyBQaGFzZSBUYXAsQy1Db3VudGVyLTAgSW5wdXQgU291cmNlLEMtQ291bnRlci0wIEJ5cGFzcyBFbmFibGUsQy1Db3VudGVyLTAgT2RkIERpdmlkZSBFbmFibGUsVkNPIFBvc3QgRGl2aWRlIENvdW50ZXIgRW5hYmxlLENoYXJnZSBQdW1wIGN1cnJlbnQgKHVBKSxMb29wIEZpbHRlciBCYW5kd2lkdGggUmVzaXN0b3IgKE9obXMpICxQTEwgT3V0cHV0IFZDTyBGcmVxdWVuY3ksSy1GcmFjdGlvbmFsIERpdmlzaW9uIFZhbHVlIChEU00pLEZlZWRiYWNrIENsb2NrIFR5cGUsRmVlZGJhY2sgQ2xvY2sgTVVYIDEsRmVlZGJhY2sgQ2xvY2sgTVVYIDIsTSBDb3VudGVyIFNvdXJjZSBNVVgsUExMIEF1dG8gUmVzZXQ=::UGFyYW1ldGVyIE5hbWVz"
-set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BhcmFtZXRlcl92YWx1ZXM=::NTQsNTQsMywyLGZhbHNlLGZhbHNlLGZhbHNlLHRydWUsMjIsMjEsMSwwLHBoX211eF9jbGssZmFsc2UsdHJ1ZSwxLDIwLDEwMDAwLDEwODAuMCBNSHosMSxub25lLGdsYixtX2NudCxwaF9tdXhfY2xrLHRydWU=::UGFyYW1ldGVyIFZhbHVlcw=="
+set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BhcmFtZXRlcl92YWx1ZXM=::MTQsMTMsMiwyLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsMzgsMzcsMSwwLHBoX211eF9jbGssZmFsc2UsdHJ1ZSwyLDIwLDYwMDAsMzM3LjUgTUh6LDEsbm9uZSxnbGIsbV9jbnQscGhfbXV4X2Nsayx0cnVl::UGFyYW1ldGVyIFZhbHVlcw=="
set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX21pZl9nZW5lcmF0ZQ==::ZmFsc2U=::R2VuZXJhdGUgTUlGIGZpbGU="
set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX2VuYWJsZV9taWZfZHBz::ZmFsc2U=::RW5hYmxlIER5bmFtaWMgUGhhc2UgU2hpZnQgZm9yIE1JRiBzdHJlYW1pbmc="
set_global_assignment -entity "pll_0002" -library "pll" -name IP_COMPONENT_PARAMETER "Z3VpX2Rwc19jbnRy::QzA=::RFBTIENvdW50ZXIgU2VsZWN0aW9u"
diff --git a/rtl/pll.v b/rtl/pll.v
index 69f8b1b..99a6b6e 100644
--- a/rtl/pll.v
+++ b/rtl/pll.v
@@ -66,7 +66,7 @@ endmodule
// Retrieval info:
// Retrieval info:
// Retrieval info:
-// Retrieval info:
+// Retrieval info:
// Retrieval info:
// Retrieval info:
// Retrieval info:
diff --git a/rtl/pll/pll_0002.v b/rtl/pll/pll_0002.v
index 7333659..fb60770 100644
--- a/rtl/pll/pll_0002.v
+++ b/rtl/pll/pll_0002.v
@@ -19,7 +19,7 @@ module pll_0002(
.reference_clock_frequency("50.0 MHz"),
.operation_mode("direct"),
.number_of_clocks(1),
- .output_clock_frequency0("25.116279 MHz"),
+ .output_clock_frequency0("4.500000 MHz"),
.phase_shift0("0 ps"),
.duty_cycle0(50),
.output_clock_frequency1("0 MHz"),
diff --git a/rtl/soc.v b/rtl/soc.v
index 9b57765..6588382 100644
--- a/rtl/soc.v
+++ b/rtl/soc.v
@@ -1,13 +1,16 @@
`timescale 1ns / 1ps
module soc (
input clk_sys,
- input clk_pix,
+ input ce_pix,
input reset,
input [13:0] dn_addr,
input dn_wr,
input [7:0] dn_data,
input [7:0] dn_index,
- input [7:0] inputs,
+
+ // 6 joysticks, 32 buttons each
+ input [191:0] joystick,
+
output VGA_HS,
output VGA_VS,
output [7:0] VGA_R,
@@ -17,6 +20,10 @@ module soc (
output VGA_VB
);
+localparam [8:0] VGA_WIDTH = 9'd320;
+localparam [8:0] VGA_HEIGHT = 9'd240;
+localparam [7:0] COLS = 8'd40;
+
wire _hb;
wire _vb;
assign VGA_HB = ~_hb;
@@ -29,12 +36,12 @@ wire vinit;
// Display timing module from JTFRAME
jtframe_vtimer #(
- .HB_START(9'd320),
- .VB_START(9'd240)
+ .HB_START(VGA_WIDTH),
+ .VB_START(VGA_HEIGHT)
) vtimer
(
.clk(clk_sys),
- .pxl_cen(clk_pix),
+ .pxl_cen(ce_pix),
.V(vcnt),
.H(hcnt),
.Hinit(hinit),
@@ -45,22 +52,21 @@ jtframe_vtimer #(
.VS(VGA_VS)
);
-// DEBUG OUTPUT
-assign VGA_R = hcnt[7:0];
-assign VGA_G = vcnt[7:0];
-assign VGA_B = voff;
-
-// reg [7:0] hoff;
-reg [7:0] voff;
-
-always @(posedge clk_sys)
-begin
- if(vinit == 1'b1) voff <= voff + 8'b1;
-// //if(hinit == 1'b1) hoff <= hoff + 8'b1;
-// $display("%d %d", vrender, vrender1);
-end
-
+// Character map
+wire [3:0] chpos_x = 4'd9 - hcnt[2:0];
+wire [2:0] chpos_y = vcnt[2:0];
+wire [5:0] chram_x = hcnt[8:3];
+wire [5:0] chram_y = vcnt[8:3];
+wire [11:0] chram_addr = {chram_y, chram_x};
+wire [11:0] colram_addr = chram_addr;
+wire [11:0] chrom_addr = {1'b0, chram_data_out[7:0], chpos_y};
+wire [5:0] chraindex = 6'd33;
+wire chpixel = chrom_data_out[chpos_x[2:0]];
+// RGB output
+assign VGA_R = chpixel ? {{2{colram_data_out[2:0]}},2'b0} : 8'b0;
+assign VGA_G = chpixel ? {{2{colram_data_out[5:3]}},2'b0} : 8'b0;
+assign VGA_B = chpixel ? {{3{colram_data_out[7:6]}},2'b0} : 8'b0;
// CPU control signals
wire [15:0] cpu_addr;
@@ -96,30 +102,56 @@ wire [7:0] pgrom_data_out;
wire [7:0] chrom_data_out;
wire [7:0] wkram_data_out;
wire [7:0] chram_data_out;
+wire [7:0] colram_data_out;
-// RAM bank data outs
-wire [10:0] chrom_addr;
+// Hardware inputs
+wire [7:0] in0_data_out = {VGA_HS, VGA_VS, 6'b101000};
+
+wire [7:0] joystick_bit = cpu_addr[7:0];
+//wire [7:0] joystick_low_bit = joystick_high_bit - 8'd8;
+//[8*(0) +: 8]
+wire [7:0] joystick_data_out = joystick[joystick_bit +: 8];
// CPU address decodes
wire pgrom_cs = cpu_addr[15:14] == 2'b00;
-wire chrom_cs = cpu_addr[15:14] == 2'b00;
-wire wkram_cs = cpu_addr[15] == 1'b1;
-wire chram_cs = cpu_addr[15] == 1'b1;
-wire in0_cs = cpu_addr == 16'h4000;
-wire in1_cs = cpu_addr == 16'h4001;
+wire chrom_cs = cpu_addr[15:12] == 4'b0100;
+wire chram_cs = cpu_addr[15:11] == 5'b10000;
+wire colram_cs = cpu_addr[15:11] == 5'b10001;
+wire wkram_cs = cpu_addr[15:14] == 2'b11;
+wire in0_cs = cpu_addr == 16'h6000;
+wire joystick_cs = cpu_addr[15:11] == 5'b01110;
+
+always @(posedge clk_sys) begin
+
+ if(joystick_cs) $display("%b %b", joystick_bit, joystick_data_out);
+// if(pgrom_cs) $display("%x pgrom o %x", cpu_addr, pgrom_data_out);
+// if(wkram_cs) $display("%x wkram i %x o %x w %b", cpu_addr, cpu_dout, wkram_data_out, wkram_wr);
+// if(chram_cs) $display("%x chram i %x o %x w %b", cpu_addr, cpu_dout, chram_data_out, chram_wr);
+// if(colram_cs) $display("%x colram i %x o %x w %b", cpu_addr, cpu_dout, colram_data_out, colram_wr);
+// if(in0_cs) $display("%x in0 i %x o %x", cpu_addr, cpu_dout, in0_data_out);
+// if(in1_cs) $display("%x in1 i %x o %x", cpu_addr, cpu_dout, inputs);
+// if(!pgrom_cs && !wkram_cs && !chram_cs && !in0_cs && !in1_cs) $display("%x ??? i %x", cpu_addr, cpu_dout);
+end
// CPU data mux
assign cpu_din = pgrom_cs ? pgrom_data_out :
wkram_cs ? wkram_data_out :
- wkram_cs ? wkram_data_out :
- in0_cs ? {VGA_HS, VGA_VS, 6'b101000} :
- in1_cs ? inputs :
+ chram_cs ? chram_data_out :
+ colram_cs ? colram_data_out :
+ in0_cs ? in0_data_out :
+ joystick_cs ? joystick_data_out :
+ // in2_cs ? inputs2 :
8'b00000000;
// Rom upload write enables
wire pgrom_wr = dn_wr && dn_index == 8'b0;
wire chrom_wr = dn_wr && dn_index == 8'b1;
+// Ram write enables
+wire wkram_wr = !cpu_wr_n && wkram_cs;
+wire chram_wr = !cpu_wr_n && chram_cs;
+wire colram_wr = !cpu_wr_n && colram_cs;
+
// MEMORY
// ------
@@ -140,11 +172,11 @@ dpram #(14,8) pgrom
.q_b()
);
-// Char ROM - 0x4000 - 0x43FF (0x0400 / 1024 bytes)
+// Char ROM - 0x4000 - 0x47FF (0x0400 / 2048 bytes)
dpram #(11,8) chrom
(
.clock_a(clk_sys),
- .address_a(chrom_addr),
+ .address_a(chrom_addr[10:0]),
.wren_a(1'b0),
.data_a(),
.q_a(chrom_data_out),
@@ -156,31 +188,47 @@ dpram #(11,8) chrom
.q_b()
);
-// Work RAM - 0x8000 - 0xBFFF (0x4000 / 16384 bytes)
+
+// Char RAM - 0x8000 - 0x87FF (0x0800 / 2048 bytes)
+dpram #(11,8) chram
+(
+ .clock_a(clk_sys),
+ .address_a(cpu_addr[10:0]),
+ .wren_a(chram_wr),
+ .data_a(cpu_dout),
+ .q_a(),
+
+ .clock_b(clk_sys),
+ .address_b(chram_addr[10:0]),
+ .wren_b(1'b0),
+ .data_b(),
+ .q_b(chram_data_out)
+);
+
+// Char color RAM - 0x8800 - 0x8FFF (0x0800 / 2048 bytes)
+dpram #(11,8) colram
+(
+ .clock_a(clk_sys),
+ .address_a(cpu_addr[10:0]),
+ .wren_a(colram_wr),
+ .data_a(cpu_dout),
+ .q_a(),
+
+ .clock_b(clk_sys),
+ .address_b(colram_addr[10:0]),
+ .wren_b(1'b0),
+ .data_b(),
+ .q_b(colram_data_out)
+);
+
+// Work RAM - 0xC000 - 0xFFFF (0x4000 / 16384 bytes)
spram #(14,8) wkram
(
.clock(clk_sys),
.address(cpu_addr[13:0]),
- .wren(!cpu_wr_n && wkram_cs),
+ .wren(wkram_wr),
.data(cpu_dout),
.q(wkram_data_out)
);
-// Char RAM - 0xC000 - 0xDFFF (0x2000 / 8192 bytes)
-dpram #(13,8) chram
-(
- .clock_a(clk_sys),
- .address_a(cpu_addr[12:0]),
- .wren_a(!cpu_wr_n && chram_cs),
- .data_a(cpu_dout),
- .q_a(chram_data_out),
-
- .clock_b(clk_sys),
- .address_b(),
- .wren_b(1'b0),
- .data_b(),
- .q_b()
-);
-
-
endmodule
diff --git a/src/Makefile b/src/Makefile
index fbf30bd..3f498f7 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -1,15 +1,17 @@
SDCC=sdcc
CPU=z80
CODE=boot_rom
-OBJ=boot_rom.rel font.rel
+OBJ=boot_rom.rel
+DATALOC=0xC000
+#DATALOC=0x8000
all: $(CODE).bin
%.rel: %.c
- $(SDCC) -m$(CPU) -c $<
+ $(SDCC) -m$(CPU) -c --data-loc $(DATALOC) $<
%.ihx: $(OBJ)
- $(SDCC) -m$(CPU) $(OBJ)
+ $(SDCC) -m$(CPU) --data-loc $(DATALOC) $(OBJ)
%.hex: %.ihx
mv $< $@
diff --git a/src/boot_rom.asm b/src/boot_rom.asm
index a17389e..d29264e 100644
--- a/src/boot_rom.asm
+++ b/src/boot_rom.asm
@@ -9,26 +9,25 @@
; Public variables in this module
;--------------------------------------------------------
.globl _main
- .globl _draw_line
- .globl _cls
- .globl _put_pixel
- .globl _abs
- .globl _puts
- .globl _color
- .globl _cur_y
- .globl _cur_x
- .globl _y
- .globl _input1_cache
- .globl _input0_cache
+ .globl _page_inputs
+ .globl _page_border
+ .globl _write_char
+ .globl _write_string
+ .globl _clear_chars
+ .globl _strlen
+ .globl _asc_1
+ .globl _asc_0
.globl _vsync_last
.globl _vsync
.globl _hsync_last
.globl _hsync
- .globl _input1
+ .globl _chram_size
+ .globl _colram
+ .globl _chram
+ .globl _joystick
.globl _input0
- .globl _VGA_HEIGHT
- .globl _VGA_WIDTH
- .globl _putchar
+ .globl _chram_rows
+ .globl _chram_cols
;--------------------------------------------------------
; special function registers
;--------------------------------------------------------
@@ -37,7 +36,11 @@
;--------------------------------------------------------
.area _DATA
_input0 = 0x6000
-_input1 = 0x6001
+_joystick = 0x7000
+_chram = 0x8000
+_colram = 0x8800
+_chram_size::
+ .ds 2
_hsync::
.ds 1
_hsync_last::
@@ -46,21 +49,13 @@ _vsync::
.ds 1
_vsync_last::
.ds 1
-_input0_cache::
- .ds 1
-_input1_cache::
- .ds 1
;--------------------------------------------------------
; ram data
;--------------------------------------------------------
.area _INITIALIZED
-_y::
+_asc_0::
.ds 1
-_cur_x::
- .ds 1
-_cur_y::
- .ds 1
-_color::
+_asc_1::
.ds 1
;--------------------------------------------------------
; absolute external ram data
@@ -82,559 +77,521 @@ _color::
; code
;--------------------------------------------------------
.area _CODE
-;boot_rom.c:25: int putchar(int c) {
+;boot_rom.c:21: void clear_chars()
; ---------------------------------
-; Function putchar
+; Function clear_chars
; ---------------------------------
-_putchar::
+_clear_chars::
+;boot_rom.c:23: for (unsigned int p = 0; p < chram_size; p++)
+ ld bc, #0x0000
+00103$:
+ ld hl, #_chram_size
+ ld a, c
+ sub a, (hl)
+ ld a, b
+ inc hl
+ sbc a, (hl)
+ ret NC
+;boot_rom.c:25: chram[p] = 0;
+ ld hl, #_chram+0
+ add hl, bc
+ ld (hl), #0x00
+;boot_rom.c:23: for (unsigned int p = 0; p < chram_size; p++)
+ inc bc
+;boot_rom.c:27: }
+ jr 00103$
+_chram_cols:
+ .db #0x40 ; 64
+_chram_rows:
+ .db #0x20 ; 32
+;boot_rom.c:29: void write_string(const char *string, char color, unsigned int x, unsigned int y)
+; ---------------------------------
+; Function write_string
+; ---------------------------------
+_write_string::
push ix
ld ix,#0
add ix,sp
- ld hl, #-7
- add hl, sp
- ld sp, hl
-;boot_rom.c:27: unsigned char *dptr = (unsigned char*)(160*(8*cur_y) + 8*cur_x);
- ld hl,#_cur_y + 0
+ push af
+;boot_rom.c:31: unsigned int p = (y * chram_cols) + x;
+ ld hl,#_chram_cols + 0
ld c, (hl)
ld b, #0x00
- ld l, c
- ld h, b
- add hl, hl
- add hl, hl
- add hl, bc
- add hl, hl
- add hl, hl
- add hl, hl
- add hl, hl
- add hl, hl
- add hl, hl
- add hl, hl
- add hl, hl
- ex de, hl
- ld iy, #_cur_x
- ld l, 0 (iy)
- ld h, #0x00
- add hl, hl
- add hl, hl
- add hl, hl
- add hl, de
- ld -5 (ix), l
- ld -4 (ix), h
-;boot_rom.c:30: if(c < 32) {
- ld a, 4 (ix)
- sub a, #0x20
- ld a, 5 (ix)
- rla
- ccf
- rra
- sbc a, #0x80
- jr NC,00108$
-;boot_rom.c:31: if(c == '\r')
- ld a, 4 (ix)
- sub a, #0x0d
- or a, 5 (ix)
- jr NZ,00102$
-;boot_rom.c:32: cur_x=0;
- ld 0 (iy), #0x00
-00102$:
-;boot_rom.c:34: if(c == '\n') {
- ld a, 4 (ix)
- sub a, #0x0a
- or a, 5 (ix)
- jp NZ,00122$
-;boot_rom.c:35: cur_y++;
- ld iy, #_cur_y
- inc 0 (iy)
-;boot_rom.c:36: cur_x=0;
- ld iy, #_cur_x
- ld 0 (iy), #0x00
-;boot_rom.c:38: if(cur_y >= 12)
- ld iy, #_cur_y
- ld a, 0 (iy)
- sub a, #0x0c
- jp C,00122$
-;boot_rom.c:39: cur_y = 0;
- ld 0 (iy), #0x00
-;boot_rom.c:41: return;
- jp 00122$
-00108$:
-;boot_rom.c:44: if(c < 0) return;
- bit 7, 5 (ix)
- jp NZ,00122$
-;boot_rom.c:46: p = font+8*(unsigned char)(c-32);
- ld bc, #_font+0
- ld a, 4 (ix)
- add a, #0xe0
- ld l, a
- ld h, #0x00
- add hl, hl
- add hl, hl
- add hl, hl
- add hl, bc
- ld c, l
- ld b, h
-;boot_rom.c:47: for(i=0;i<8;i++) {
- ld -2 (ix), #0x00
-00120$:
-;boot_rom.c:48: unsigned char l = *p++;
- ld a, (bc)
- ld -1 (ix), a
- inc bc
-;boot_rom.c:49: for(j=0;j<8;j++) {
- ld -3 (ix), #0x08
- ld e, -5 (ix)
- ld d, -4 (ix)
-00119$:
-;boot_rom.c:50: *dptr++ = (l & 0x80)?color:0x00;
- inc sp
- inc sp
- push de
- inc de
- bit 7, -1 (ix)
- jr Z,00124$
- ld iy, #_color
- ld l, 0 (iy)
- jr 00125$
-00124$:
- ld hl, #0x0000
-00125$:
- ld a, l
- pop hl
- push hl
- ld (hl), a
-;boot_rom.c:51: l <<= 1;
- ld a, -1 (ix)
- add a, a
- ld -1 (ix), a
- dec -3 (ix)
- ld a, -3 (ix)
-;boot_rom.c:49: for(j=0;j<8;j++) {
- or a, a
- jr NZ,00119$
-;boot_rom.c:53: dptr += (160-8);
- ld hl, #0x0098
- add hl, de
- ld -5 (ix), l
- ld -4 (ix), h
-;boot_rom.c:47: for(i=0;i<8;i++) {
- inc -2 (ix)
- ld a, -2 (ix)
- sub a, #0x08
- jr C,00120$
-;boot_rom.c:56: cur_x++;
- ld iy, #_cur_x
- inc 0 (iy)
-;boot_rom.c:57: if(cur_x >= 20) {
- ld a, 0 (iy)
- sub a, #0x14
- jr C,00122$
-;boot_rom.c:58: cur_x = 0;
- ld 0 (iy), #0x00
-;boot_rom.c:59: cur_y++;
- ld iy, #_cur_y
- inc 0 (iy)
-;boot_rom.c:61: if(cur_y >= 12)
- ld a, 0 (iy)
- sub a, #0x0c
- jr C,00122$
-;boot_rom.c:62: cur_y = 0;
- ld 0 (iy), #0x00
-00122$:
-;boot_rom.c:64: }
- ld sp, ix
- pop ix
- ret
-_VGA_WIDTH:
- .dw #0x00a0
-_VGA_HEIGHT:
- .dw #0x0064
-;boot_rom.c:67: void put_pixel(unsigned int x, unsigned int y, unsigned char color) {
-; ---------------------------------
-; Function put_pixel
-; ---------------------------------
-_put_pixel::
-;boot_rom.c:68: *((unsigned int*)(VGA_WIDTH*y+x)) = color;
- ld hl, (_VGA_WIDTH)
- ld iy, #4
- add iy, sp
- ld c, 0 (iy)
- ld b, 1 (iy)
push bc
+ ld l, 9 (ix)
+ ld h, 10 (ix)
push hl
call __mulint
pop af
pop af
ld c, l
ld b, h
- ld a, c
- ld hl, #2
- add hl, sp
- add a, (hl)
- ld c, a
- ld a, b
- inc hl
- adc a, (hl)
- ld l, c
- ld h, a
- ld iy, #6
- add iy, sp
- ld c, 0 (iy)
+ ld l, 7 (ix)
+ ld h, 8 (ix)
+ add hl, bc
+ ex de,hl
+;boot_rom.c:32: unsigned char l = strlen(string);
+ ld l, 4 (ix)
+ ld h, 5 (ix)
+ push hl
+ call _strlen
+ pop af
+ ld c, l
+;boot_rom.c:33: for (char c = 0; c < l; c++)
ld b, #0x00
- ld (hl), c
- inc hl
- ld (hl), b
-;boot_rom.c:69: }
+00103$:
+ ld a, b
+ sub a, c
+ jr NC,00105$
+;boot_rom.c:35: chram[p] = string[c];
+ ld hl, #_chram
+ add hl, de
+ ex (sp), hl
+ ld a, 4 (ix)
+ add a, b
+ ld l, a
+ ld a, 5 (ix)
+ adc a, #0x00
+ ld h, a
+ ld a, (hl)
+ pop hl
+ push hl
+ ld (hl), a
+;boot_rom.c:36: colram[p] = color;
+ ld hl, #_colram
+ add hl, de
+ ld a, 6 (ix)
+ ld (hl), a
+;boot_rom.c:37: p++;
+ inc de
+;boot_rom.c:33: for (char c = 0; c < l; c++)
+ inc b
+ jr 00103$
+00105$:
+;boot_rom.c:39: }
+ ld sp, ix
+ pop ix
ret
-;boot_rom.c:71: void cls(unsigned char color) {
+;boot_rom.c:41: void write_char(unsigned char c, char color, unsigned int x, unsigned int y)
; ---------------------------------
-; Function cls
+; Function write_char
; ---------------------------------
-_cls::
+_write_char::
push ix
ld ix,#0
add ix,sp
- dec sp
-;boot_rom.c:73: unsigned int *p = (unsigned int*)0;
- ld de, #0x0000
-;boot_rom.c:74: for(i=0;i= longest-shortest) {
- ld a, e
- sub a, -14 (ix)
- ld a, d
- sbc a, -13 (ix)
- jr C,00105$
-;boot_rom.c:105: numerator += shortest ;
-;boot_rom.c:106: numerator -= longest ;
- ld a, -16 (ix)
- ld d, -15 (ix)
- sub a, -10 (ix)
- ld e, a
- ld a, d
- sbc a, -9 (ix)
- ld d, a
-;boot_rom.c:107: x += dx1;
- ld a, -6 (ix)
- ld -18 (ix), a
- ld a, -5 (ix)
- ld -17 (ix), a
- ld a, 4 (ix)
- add a, -18 (ix)
- ld 4 (ix), a
- ld a, 5 (ix)
- adc a, -17 (ix)
- ld 5 (ix), a
-;boot_rom.c:108: y += dy1;
- ld a, -8 (ix)
- ld -18 (ix), a
- ld a, -7 (ix)
- ld -17 (ix), a
- ld a, 6 (ix)
- add a, -18 (ix)
- ld 6 (ix), a
- ld a, 7 (ix)
- adc a, -17 (ix)
- ld 7 (ix), a
- jr 00109$
-00105$:
-;boot_rom.c:110: numerator += shortest ;
- ld e, -16 (ix)
- ld d, -15 (ix)
-;boot_rom.c:111: x += dx2;
- inc sp
- inc sp
+;boot_rom.c:54: for (char x = 1; x < 39; x++)
+ inc c
+ jr 00104$
+00101$:
+;boot_rom.c:59: for (char y = 1; y < 29; y++)
+ ld c, #0x01
+00107$:
+ ld a, c
+ sub a, #0x1d
+ jr NC,00109$
+;boot_rom.c:61: write_char(131, color, 0, y);
+ ld e, c
+ ld d, #0x00
push bc
- ld a, 4 (ix)
- add a, -18 (ix)
- ld 4 (ix), a
- ld a, 5 (ix)
- adc a, -17 (ix)
- ld 5 (ix), a
-;boot_rom.c:112: y += dy2;
- ld a, -12 (ix)
- ld -18 (ix), a
- ld a, -11 (ix)
- ld -17 (ix), a
- ld a, 6 (ix)
- add a, -18 (ix)
- ld 6 (ix), a
- ld a, 7 (ix)
- adc a, -17 (ix)
- ld 7 (ix), a
+ push de
+ push de
+ ld hl, #0x0000
+ push hl
+ ld d, 4 (ix)
+ ld e,#0x83
+ push de
+ call _write_char
+ ld hl, #6
+ add hl, sp
+ ld sp, hl
+ ld hl, #0x0027
+ push hl
+ ld d, 4 (ix)
+ ld e,#0x83
+ push de
+ call _write_char
+ ld hl, #6
+ add hl, sp
+ ld sp, hl
+ pop bc
+;boot_rom.c:59: for (char y = 1; y < 29; y++)
+ inc c
+ jr 00107$
00109$:
-;boot_rom.c:102: for(i=0;i<=longest;i++) {
- inc -4 (ix)
- jr NZ,00142$
- inc -3 (ix)
-00142$:
- ld a, -10 (ix)
- sub a, -4 (ix)
- ld a, -9 (ix)
- sbc a, -3 (ix)
- jp NC, 00108$
-;boot_rom.c:115: }
- ld sp, ix
+;boot_rom.c:64: }
pop ix
ret
-;boot_rom.c:119: void main() {
+;boot_rom.c:66: void page_inputs()
+; ---------------------------------
+; Function page_inputs
+; ---------------------------------
+_page_inputs::
+;boot_rom.c:68: clear_chars();
+ call _clear_chars
+;boot_rom.c:69: page_border(0b00000111);
+ ld a, #0x07
+ push af
+ inc sp
+ call _page_border
+ inc sp
+;boot_rom.c:70: write_string("UDLR", 0xFF, 9, 3);
+ ld hl, #0x0003
+ push hl
+ ld l, #0x09
+ push hl
+ ld a, #0xff
+ push af
+ inc sp
+ ld hl, #___str_0
+ push hl
+ call _write_string
+ ld hl, #7
+ add hl, sp
+ ld sp, hl
+;boot_rom.c:71: write_string("JOY 1)", 0xF0, 2, 4);
+ ld hl, #0x0004
+ push hl
+ ld l, #0x02
+ push hl
+ ld a, #0xf0
+ push af
+ inc sp
+ ld hl, #___str_1
+ push hl
+ call _write_string
+ ld hl, #7
+ add hl, sp
+ ld sp, hl
+;boot_rom.c:72: write_string("JOY 2)", 0xE0, 2, 5);
+ ld hl, #0x0005
+ push hl
+ ld l, #0x02
+ push hl
+ ld a, #0xe0
+ push af
+ inc sp
+ ld hl, #___str_2
+ push hl
+ call _write_string
+ ld hl, #7
+ add hl, sp
+ ld sp, hl
+;boot_rom.c:73: }
+ ret
+___str_0:
+ .ascii "UDLR"
+ .db 0x00
+___str_1:
+ .ascii "JOY 1)"
+ .db 0x00
+___str_2:
+ .ascii "JOY 2)"
+ .db 0x00
+;boot_rom.c:78: void main()
; ---------------------------------
; Function main
; ---------------------------------
_main::
-;boot_rom.c:120: while(1) {
+ push ix
+ ld ix,#0
+ add ix,sp
+ ld hl, #-7
+ add hl, sp
+ ld sp, hl
+;boot_rom.c:80: chram_size = chram_cols * chram_rows;
+ ld hl,#_chram_rows + 0
+ ld e, (hl)
+ ld hl,#_chram_cols + 0
+ ld h, (hl)
+ ld l, #0x00
+ ld d, l
+ ld b, #0x08
+00176$:
+ add hl, hl
+ jr NC,00177$
+ add hl, de
+00177$:
+ djnz 00176$
+ ld (_chram_size), hl
+;boot_rom.c:82: page_inputs();
+ call _page_inputs
+;boot_rom.c:84: while (1)
+ ld b, #0xab
00108$:
-;boot_rom.c:123: input0_cache = input0;
+;boot_rom.c:86: hsync = input0 & 0x80;
ld a,(#_input0 + 0)
- ld iy, #_input0_cache
- ld 0 (iy), a
-;boot_rom.c:124: hsync = input0_cache & 0x80;
- ld c, 0 (iy)
- ld a, c
and a, #0x80
ld (#_hsync + 0),a
-;boot_rom.c:125: vsync = input0_cache & 0x40;
- ld a, c
+;boot_rom.c:87: vsync = input0 & 0x40;
+ ld a,(#_input0 + 0)
and a, #0x40
- ld (#_vsync + 0),a
-;boot_rom.c:127: if(hsync && !hsync_last){
- ld a,(#_hsync + 0)
+ ld iy, #_vsync
+ ld 0 (iy), a
+;boot_rom.c:92: if (vsync && !vsync_last)
+ ld a, 0 (iy)
or a, a
- jr Z,00102$
- ld a,(#_hsync_last + 0)
- or a, a
- jr NZ,00102$
-;boot_rom.c:128: y++;
- ld hl, #_y+0
- inc (hl)
-00102$:
-;boot_rom.c:130: if(vsync && !vsync_last){
- ld a,(#_vsync + 0)
- or a, a
- jr Z,00105$
+ jp Z, 00105$
ld a,(#_vsync_last + 0)
or a, a
- jr NZ,00105$
-;boot_rom.c:131: y=0;
- ld hl,#_y + 0
- ld (hl), #0x00
-;boot_rom.c:133: cur_x = 0;
- ld hl,#_cur_x + 0
- ld (hl), #0x00
-;boot_rom.c:134: cur_y = 0;
- ld hl,#_cur_y + 0
- ld (hl), #0x00
-;boot_rom.c:135: color++;
- ld iy, #_color
- inc 0 (iy)
-;boot_rom.c:136: cls(~color);
- ld a, 0 (iy)
- cpl
- ld b, a
+ jp NZ, 00105$
+;boot_rom.c:94: color++;
+ inc b
+;boot_rom.c:95: write_string("--- MiSTer Input Tester ---", color, 6, 1);
+ push bc
+ ld hl, #0x0001
+ push hl
+ ld l, #0x06
+ push hl
push bc
inc sp
- call _cls
- inc sp
-;boot_rom.c:137: puts(" << Z80 SoC >>\n");
- ld hl, #___str_0
+ ld hl, #___str_3
push hl
- call _puts
- pop af
-;boot_rom.c:140: input1_cache = input1;
- ld a,(#_input1 + 0)
- ld (#_input1_cache + 0),a
+ call _write_string
+ ld hl, #7
+ add hl, sp
+ ld sp, hl
+ pop bc
+;boot_rom.c:97: for (char b = 0; b < 2; b++)
+ ld c, #0x00
+00117$:
+ ld a, c
+ sub a, #0x02
+ jp NC, 00105$
+;boot_rom.c:99: char m = 0b00000001;
+ ld e, #0x01
+;boot_rom.c:100: for (char i = 0; i < 8; i++)
+ ld -2 (ix), #0x00
+00114$:
+ ld a, -2 (ix)
+ sub a, #0x08
+ jp NC, 00118$
+;boot_rom.c:102: char x = 9 + i + (b * 10);
+ ld a, -2 (ix)
+ add a, #0x09
+ ld d, a
+ ld a, c
+ push de
+ ld e, a
+ add a, a
+ add a, a
+ add a, e
+ add a, a
+ pop de
+ add a, d
+ ld -3 (ix), a
+;boot_rom.c:103: for (char j = 0; j < 3; j++)
+ ld -1 (ix), #0x00
+00111$:
+ ld a, -1 (ix)
+ sub a, #0x03
+ jr NC,00101$
+;boot_rom.c:105: write_char((joystick[b + (j * 32)] & m) ? asc_1 : asc_0, 0xFF, x, 4 + j);
+ ld a, -1 (ix)
+ ld l, #0x00
+ add a, #0x04
+ ld -7 (ix), a
+ ld a, l
+ adc a, #0x00
+ ld -6 (ix), a
+ ld a, -3 (ix)
+ ld -5 (ix), a
+ ld -4 (ix), #0x00
+ ld a, -1 (ix)
+ rrca
+ rrca
+ rrca
+ and a, #0xe0
+ ld d, c
+ add a, d
+ ld l, a
+ rla
+ sbc a, a
+ ld d, a
+ ld a, #<(_joystick)
+ add a, l
+ ld l, a
+ ld a, #>(_joystick)
+ adc a, d
+ ld h, a
+ ld a, (hl)
+ and a,e
+ jr Z,00121$
+ ld hl,#_asc_1 + 0
+ ld d, (hl)
+ jr 00122$
+00121$:
+ ld hl,#_asc_0 + 0
+ ld d, (hl)
+00122$:
+ push bc
+ push de
+ ld l, -7 (ix)
+ ld h, -6 (ix)
+ push hl
+ ld l, -5 (ix)
+ ld h, -4 (ix)
+ push hl
+ ld a, #0xff
+ push af
+ inc sp
+ push de
+ inc sp
+ call _write_char
+ ld hl, #6
+ add hl, sp
+ ld sp, hl
+ pop de
+ pop bc
+;boot_rom.c:103: for (char j = 0; j < 3; j++)
+ inc -1 (ix)
+ jr 00111$
+00101$:
+;boot_rom.c:107: m <<= 1;
+ sla e
+;boot_rom.c:100: for (char i = 0; i < 8; i++)
+ inc -2 (ix)
+ jp 00114$
+00118$:
+;boot_rom.c:97: for (char b = 0; b < 2; b++)
+ inc c
+ jp 00117$
00105$:
-;boot_rom.c:143: hsync_last = hsync;
+;boot_rom.c:111: hsync_last = hsync;
ld a,(#_hsync + 0)
ld (#_hsync_last + 0),a
-;boot_rom.c:144: vsync_last = vsync;
+;boot_rom.c:112: vsync_last = vsync;
ld a,(#_vsync + 0)
ld (#_vsync_last + 0),a
-;boot_rom.c:146: }
- jr 00108$
-___str_0:
- .ascii " << Z80 SoC >>"
- .db 0x0a
+;boot_rom.c:114: }
+ jp 00108$
+___str_3:
+ .ascii "--- MiSTer Input Tester ---"
.db 0x00
.area _CODE
.area _INITIALIZER
-__xinit__y:
- .db #0x00 ; 0
-__xinit__cur_x:
- .db #0x00 ; 0
-__xinit__cur_y:
- .db #0x00 ; 0
-__xinit__color:
- .db #0x66 ; 102 'f'
+__xinit__asc_0:
+ .db #0x30 ; 48 '0'
+__xinit__asc_1:
+ .db #0x31 ; 49 '1'
.area _CABS (ABS)
diff --git a/src/boot_rom.bin b/src/boot_rom.bin
index 245cde0..cdfbdf2 100644
Binary files a/src/boot_rom.bin and b/src/boot_rom.bin differ
diff --git a/src/boot_rom.c b/src/boot_rom.c
index aa2ebf2..f7d41c2 100644
--- a/src/boot_rom.c
+++ b/src/boot_rom.c
@@ -1,146 +1,114 @@
-
#include
+#include
#include
-#include // for abs()
-extern unsigned char font[];
+// Memory maps
+unsigned char __at(0x6000) input0;
+unsigned char __at(0x7000) joystick[24];
+unsigned char __at(0x8000) chram[2048];
+unsigned char __at(0x8800) colram[2048];
-const unsigned int VGA_WIDTH = 160;
-const unsigned int VGA_HEIGHT = 100;
+// Character map
+const unsigned char chram_cols = 64;
+const unsigned char chram_rows = 32;
+unsigned int chram_size;
-unsigned char __at (0x6000) input0;
-unsigned char __at (0x6001) input1;
-
-unsigned char y = 0;
unsigned char hsync;
unsigned char hsync_last;
unsigned char vsync;
unsigned char vsync_last;
-unsigned char input0_cache;
-unsigned char input1_cache;
-unsigned char color;
-unsigned char cur_x=0, cur_y=0;
-
-int putchar(int c) {
- unsigned char *p;
- unsigned char *dptr = (unsigned char*)(160*(8*cur_y) + 8*cur_x);
- char i, j;
-
- if(c < 32) {
- if(c == '\r')
- cur_x=0;
-
- if(c == '\n') {
- cur_y++;
- cur_x=0;
-
- if(cur_y >= 12)
- cur_y = 0;
- }
- return;
- }
-
- if(c < 0) return;
-
- p = font+8*(unsigned char)(c-32);
- for(i=0;i<8;i++) {
- unsigned char l = *p++;
- for(j=0;j<8;j++) {
- *dptr++ = (l & 0x80)?color:0x00;
- l <<= 1;
- }
- dptr += (160-8);
- }
-
- cur_x++;
- if(cur_x >= 20) {
- cur_x = 0;
- cur_y++;
-
- if(cur_y >= 12)
- cur_y = 0;
- }
+void clear_chars()
+{
+ for (unsigned int p = 0; p < chram_size; p++)
+ {
+ chram[p] = 0;
+ }
}
-// draw a pixel
-void put_pixel(unsigned int x, unsigned int y, unsigned char color) {
- *((unsigned int*)(VGA_WIDTH*y+x)) = color;
+void write_string(const char *string, char color, unsigned int x, unsigned int y)
+{
+ unsigned int p = (y * chram_cols) + x;
+ unsigned char l = strlen(string);
+ for (char c = 0; c < l; c++)
+ {
+ chram[p] = string[c];
+ colram[p] = color;
+ p++;
+ }
}
-void cls(unsigned char color) {
- unsigned char i;
- unsigned int *p = (unsigned int*)0;
- for(i=0;i= longest-shortest) {
- numerator += shortest ;
- numerator -= longest ;
- x += dx1;
- y += dy1;
- } else {
- numerator += shortest ;
- x += dx2;
- y += dy2;
- }
- }
+void page_border(char color)
+{
+ write_char(128, color, 0, 0);
+ write_char(130, color, 39, 0);
+ write_char(133, color, 0, 29);
+ write_char(132, color, 39, 29);
+ for (char x = 1; x < 39; x++)
+ {
+ write_char(129, color, x, 0);
+ write_char(129, color, x, 29);
+ }
+ for (char y = 1; y < 29; y++)
+ {
+ write_char(131, color, 0, y);
+ write_char(131, color, 39, y);
+ }
}
-char color = 0x66;
+void page_inputs()
+{
+ clear_chars();
+ page_border(0b00000111);
+ write_string("UDLR", 0xFF, 9, 3);
+ write_string("JOY 1)", 0xF0, 2, 4);
+ write_string("JOY 2)", 0xE0, 2, 5);
+}
-void main() {
- while(1) {
+char asc_0 = 48;
+char asc_1 = 49;
- // get inputs
- input0_cache = input0;
- hsync = input0_cache & 0x80;
- vsync = input0_cache & 0x40;
+void main()
+{
+ chram_size = chram_cols * chram_rows;
+ char color = 0xAB;
+ page_inputs();
- if(hsync && !hsync_last){
- y++;
- }
- if(vsync && !vsync_last){
- y=0;
+ while (1)
+ {
+ hsync = input0 & 0x80;
+ vsync = input0 & 0x40;
- cur_x = 0;
- cur_y = 0;
+ // if(hsync && !hsync_last){
+ // }
+
+ if (vsync && !vsync_last)
+ {
color++;
- cls(~color);
- puts(" << Z80 SoC >>\n");
-
- // process inputs
- input1_cache = input1;
+ write_string("--- MiSTer Input Tester ---", color, 6, 1);
+ for (char b = 0; b < 2; b++)
+ {
+ char m = 0b00000001;
+ for (char i = 0; i < 8; i++)
+ {
+ char x = 9 + i + (b * 10);
+ for (char j = 0; j < 3; j++)
+ {
+ write_char((joystick[b + (j * 32)] & m) ? asc_1 : asc_0, 0xFF, x, 4 + j);
+ }
+ m <<= 1;
+ }
+ }
}
hsync_last = hsync;
vsync_last = vsync;
}
-}
+}
\ No newline at end of file
diff --git a/src/boot_rom.lk b/src/boot_rom.lk
index d43ec60..147949e 100644
--- a/src/boot_rom.lk
+++ b/src/boot_rom.lk
@@ -1,12 +1,11 @@
-mjwx
-i boot_rom.ihx
-b _CODE = 0x0200
--b _DATA = 0x8000
+-b _DATA = 0xc000
-k /usr/bin/../share/sdcc/lib/z80
-k /usr/share/sdcc/lib/z80
-l z80
/usr/bin/../share/sdcc/lib/z80/crt0.rel
boot_rom.rel
-font.rel
-e
diff --git a/src/boot_rom.lst b/src/boot_rom.lst
index 52ccf4f..9f8ecde 100644
--- a/src/boot_rom.lst
+++ b/src/boot_rom.lst
@@ -9,634 +9,593 @@
9 ; Public variables in this module
10 ;--------------------------------------------------------
11 .globl _main
- 12 .globl _draw_line
- 13 .globl _cls
- 14 .globl _put_pixel
- 15 .globl _abs
- 16 .globl _puts
- 17 .globl _color
- 18 .globl _cur_y
- 19 .globl _cur_x
- 20 .globl _y
- 21 .globl _input1_cache
- 22 .globl _input0_cache
- 23 .globl _vsync_last
- 24 .globl _vsync
- 25 .globl _hsync_last
- 26 .globl _hsync
- 27 .globl _input1
+ 12 .globl _page_inputs
+ 13 .globl _page_border
+ 14 .globl _write_char
+ 15 .globl _write_string
+ 16 .globl _clear_chars
+ 17 .globl _strlen
+ 18 .globl _asc_1
+ 19 .globl _asc_0
+ 20 .globl _vsync_last
+ 21 .globl _vsync
+ 22 .globl _hsync_last
+ 23 .globl _hsync
+ 24 .globl _chram_size
+ 25 .globl _colram
+ 26 .globl _chram
+ 27 .globl _joystick
28 .globl _input0
- 29 .globl _VGA_HEIGHT
- 30 .globl _VGA_WIDTH
- 31 .globl _putchar
- 32 ;--------------------------------------------------------
- 33 ; special function registers
+ 29 .globl _chram_rows
+ 30 .globl _chram_cols
+ 31 ;--------------------------------------------------------
+ 32 ; special function registers
+ 33 ;--------------------------------------------------------
34 ;--------------------------------------------------------
- 35 ;--------------------------------------------------------
- 36 ; ram data
- 37 ;--------------------------------------------------------
- 38 .area _DATA
- 6000 39 _input0 = 0x6000
- 6001 40 _input1 = 0x6001
- 0000 41 _hsync::
- 0000 42 .ds 1
- 0001 43 _hsync_last::
- 0001 44 .ds 1
- 0002 45 _vsync::
- 0002 46 .ds 1
- 0003 47 _vsync_last::
- 0003 48 .ds 1
- 0004 49 _input0_cache::
- 0004 50 .ds 1
- 0005 51 _input1_cache::
- 0005 52 .ds 1
- 53 ;--------------------------------------------------------
- 54 ; ram data
- 55 ;--------------------------------------------------------
- 56 .area _INITIALIZED
- 0000 57 _y::
- 0000 58 .ds 1
- 0001 59 _cur_x::
- 0001 60 .ds 1
- 0002 61 _cur_y::
- 0002 62 .ds 1
- 0003 63 _color::
- 0003 64 .ds 1
- 65 ;--------------------------------------------------------
- 66 ; absolute external ram data
- 67 ;--------------------------------------------------------
- 68 .area _DABS (ABS)
- 69 ;--------------------------------------------------------
- 70 ; global & static initialisations
+ 35 ; ram data
+ 36 ;--------------------------------------------------------
+ 37 .area _DATA
+ 6000 38 _input0 = 0x6000
+ 7000 39 _joystick = 0x7000
+ 8000 40 _chram = 0x8000
+ 8800 41 _colram = 0x8800
+ 0000 42 _chram_size::
+ 0000 43 .ds 2
+ 0002 44 _hsync::
+ 0002 45 .ds 1
+ 0003 46 _hsync_last::
+ 0003 47 .ds 1
+ 0004 48 _vsync::
+ 0004 49 .ds 1
+ 0005 50 _vsync_last::
+ 0005 51 .ds 1
+ 52 ;--------------------------------------------------------
+ 53 ; ram data
+ 54 ;--------------------------------------------------------
+ 55 .area _INITIALIZED
+ 0000 56 _asc_0::
+ 0000 57 .ds 1
+ 0001 58 _asc_1::
+ 0001 59 .ds 1
+ 60 ;--------------------------------------------------------
+ 61 ; absolute external ram data
+ 62 ;--------------------------------------------------------
+ 63 .area _DABS (ABS)
+ 64 ;--------------------------------------------------------
+ 65 ; global & static initialisations
+ 66 ;--------------------------------------------------------
+ 67 .area _HOME
+ 68 .area _GSINIT
+ 69 .area _GSFINAL
+ 70 .area _GSINIT
71 ;--------------------------------------------------------
- 72 .area _HOME
- 73 .area _GSINIT
- 74 .area _GSFINAL
- 75 .area _GSINIT
+ 72 ; Home
+ 73 ;--------------------------------------------------------
+ 74 .area _HOME
+ 75 .area _HOME
76 ;--------------------------------------------------------
- 77 ; Home
+ 77 ; code
78 ;--------------------------------------------------------
- 79 .area _HOME
- 80 .area _HOME
- 81 ;--------------------------------------------------------
- 82 ; code
- 83 ;--------------------------------------------------------
- 84 .area _CODE
- 85 ;boot_rom.c:25: int putchar(int c) {
- 86 ; ---------------------------------
- 87 ; Function putchar
- 88 ; ---------------------------------
- 0000 89 _putchar::
- 0000 DD E5 [15] 90 push ix
- 0002 DD 21 00 00 [14] 91 ld ix,#0
- 0006 DD 39 [15] 92 add ix,sp
- 0008 21 F9 FF [10] 93 ld hl, #-7
- 000B 39 [11] 94 add hl, sp
- 000C F9 [ 6] 95 ld sp, hl
- 96 ;boot_rom.c:27: unsigned char *dptr = (unsigned char*)(160*(8*cur_y) + 8*cur_x);
- 000D 21r02r00 [10] 97 ld hl,#_cur_y + 0
- 0010 4E [ 7] 98 ld c, (hl)
- 0011 06 00 [ 7] 99 ld b, #0x00
- 0013 69 [ 4] 100 ld l, c
- 0014 60 [ 4] 101 ld h, b
- 0015 29 [11] 102 add hl, hl
- 0016 29 [11] 103 add hl, hl
- 0017 09 [11] 104 add hl, bc
- 0018 29 [11] 105 add hl, hl
- 0019 29 [11] 106 add hl, hl
- 001A 29 [11] 107 add hl, hl
- 001B 29 [11] 108 add hl, hl
- 001C 29 [11] 109 add hl, hl
- 001D 29 [11] 110 add hl, hl
- 001E 29 [11] 111 add hl, hl
- 001F 29 [11] 112 add hl, hl
- 0020 EB [ 4] 113 ex de, hl
- 0021 FD 21r01r00 [14] 114 ld iy, #_cur_x
- 0025 FD 6E 00 [19] 115 ld l, 0 (iy)
- 0028 26 00 [ 7] 116 ld h, #0x00
- 002A 29 [11] 117 add hl, hl
- 002B 29 [11] 118 add hl, hl
- 002C 29 [11] 119 add hl, hl
- 002D 19 [11] 120 add hl, de
- 002E DD 75 FB [19] 121 ld -5 (ix), l
- 0031 DD 74 FC [19] 122 ld -4 (ix), h
- 123 ;boot_rom.c:30: if(c < 32) {
- 0034 DD 7E 04 [19] 124 ld a, 4 (ix)
- 0037 D6 20 [ 7] 125 sub a, #0x20
- 0039 DD 7E 05 [19] 126 ld a, 5 (ix)
- 003C 17 [ 4] 127 rla
- 003D 3F [ 4] 128 ccf
- 003E 1F [ 4] 129 rra
- 003F DE 80 [ 7] 130 sbc a, #0x80
- 0041 30 3B [12] 131 jr NC,00108$
- 132 ;boot_rom.c:31: if(c == '\r')
- 0043 DD 7E 04 [19] 133 ld a, 4 (ix)
- 0046 D6 0D [ 7] 134 sub a, #0x0d
- 0048 DD B6 05 [19] 135 or a, 5 (ix)
- 004B 20 04 [12] 136 jr NZ,00102$
- 137 ;boot_rom.c:32: cur_x=0;
- 004D FD 36 00 00 [19] 138 ld 0 (iy), #0x00
- 0051 139 00102$:
- 140 ;boot_rom.c:34: if(c == '\n') {
- 0051 DD 7E 04 [19] 141 ld a, 4 (ix)
- 0054 D6 0A [ 7] 142 sub a, #0x0a
- 0056 DD B6 05 [19] 143 or a, 5 (ix)
- 0059 C2r0Br01 [10] 144 jp NZ,00122$
- 145 ;boot_rom.c:35: cur_y++;
- 005C FD 21r02r00 [14] 146 ld iy, #_cur_y
- 0060 FD 34 00 [23] 147 inc 0 (iy)
- 148 ;boot_rom.c:36: cur_x=0;
- 0063 FD 21r01r00 [14] 149 ld iy, #_cur_x
- 0067 FD 36 00 00 [19] 150 ld 0 (iy), #0x00
- 151 ;boot_rom.c:38: if(cur_y >= 12)
- 006B FD 21r02r00 [14] 152 ld iy, #_cur_y
- 006F FD 7E 00 [19] 153 ld a, 0 (iy)
- 0072 D6 0C [ 7] 154 sub a, #0x0c
- 0074 DAr0Br01 [10] 155 jp C,00122$
- 156 ;boot_rom.c:39: cur_y = 0;
- 0077 FD 36 00 00 [19] 157 ld 0 (iy), #0x00
- 158 ;boot_rom.c:41: return;
- 007B C3r0Br01 [10] 159 jp 00122$
- 007E 160 00108$:
- 161 ;boot_rom.c:44: if(c < 0) return;
- 007E DD CB 05 7E [20] 162 bit 7, 5 (ix)
- 0082 C2r0Br01 [10] 163 jp NZ,00122$
- 164 ;boot_rom.c:46: p = font+8*(unsigned char)(c-32);
- 0085 01r00r00 [10] 165 ld bc, #_font+0
- 0088 DD 7E 04 [19] 166 ld a, 4 (ix)
- 008B C6 E0 [ 7] 167 add a, #0xe0
- 008D 6F [ 4] 168 ld l, a
- 008E 26 00 [ 7] 169 ld h, #0x00
- 0090 29 [11] 170 add hl, hl
- 0091 29 [11] 171 add hl, hl
- 0092 29 [11] 172 add hl, hl
- 0093 09 [11] 173 add hl, bc
- 0094 4D [ 4] 174 ld c, l
- 0095 44 [ 4] 175 ld b, h
- 176 ;boot_rom.c:47: for(i=0;i<8;i++) {
- 0096 DD 36 FE 00 [19] 177 ld -2 (ix), #0x00
- 009A 178 00120$:
- 179 ;boot_rom.c:48: unsigned char l = *p++;
- 009A 0A [ 7] 180 ld a, (bc)
- 009B DD 77 FF [19] 181 ld -1 (ix), a
- 009E 03 [ 6] 182 inc bc
- 183 ;boot_rom.c:49: for(j=0;j<8;j++) {
- 009F DD 36 FD 08 [19] 184 ld -3 (ix), #0x08
- 00A3 DD 5E FB [19] 185 ld e, -5 (ix)
- 00A6 DD 56 FC [19] 186 ld d, -4 (ix)
- 00A9 187 00119$:
- 188 ;boot_rom.c:50: *dptr++ = (l & 0x80)?color:0x00;
- 00A9 33 [ 6] 189 inc sp
- 00AA 33 [ 6] 190 inc sp
- 00AB D5 [11] 191 push de
- 00AC 13 [ 6] 192 inc de
- 00AD DD CB FF 7E [20] 193 bit 7, -1 (ix)
- 00B1 28 09 [12] 194 jr Z,00124$
- 00B3 FD 21r03r00 [14] 195 ld iy, #_color
- 00B7 FD 6E 00 [19] 196 ld l, 0 (iy)
- 00BA 18 03 [12] 197 jr 00125$
- 00BC 198 00124$:
- 00BC 21 00 00 [10] 199 ld hl, #0x0000
- 00BF 200 00125$:
- 00BF 7D [ 4] 201 ld a, l
- 00C0 E1 [10] 202 pop hl
- 00C1 E5 [11] 203 push hl
- 00C2 77 [ 7] 204 ld (hl), a
- 205 ;boot_rom.c:51: l <<= 1;
- 00C3 DD 7E FF [19] 206 ld a, -1 (ix)
- 00C6 87 [ 4] 207 add a, a
- 00C7 DD 77 FF [19] 208 ld -1 (ix), a
- 00CA DD 35 FD [23] 209 dec -3 (ix)
- 00CD DD 7E FD [19] 210 ld a, -3 (ix)
- 211 ;boot_rom.c:49: for(j=0;j<8;j++) {
- 00D0 B7 [ 4] 212 or a, a
- 00D1 20 D6 [12] 213 jr NZ,00119$
- 214 ;boot_rom.c:53: dptr += (160-8);
- 00D3 21 98 00 [10] 215 ld hl, #0x0098
- 00D6 19 [11] 216 add hl, de
- 00D7 DD 75 FB [19] 217 ld -5 (ix), l
- 00DA DD 74 FC [19] 218 ld -4 (ix), h
- 219 ;boot_rom.c:47: for(i=0;i<8;i++) {
- 00DD DD 34 FE [23] 220 inc -2 (ix)
- 00E0 DD 7E FE [19] 221 ld a, -2 (ix)
- 00E3 D6 08 [ 7] 222 sub a, #0x08
- 00E5 38 B3 [12] 223 jr C,00120$
- 224 ;boot_rom.c:56: cur_x++;
- 00E7 FD 21r01r00 [14] 225 ld iy, #_cur_x
- 00EB FD 34 00 [23] 226 inc 0 (iy)
- 227 ;boot_rom.c:57: if(cur_x >= 20) {
- 00EE FD 7E 00 [19] 228 ld a, 0 (iy)
- 00F1 D6 14 [ 7] 229 sub a, #0x14
- 00F3 38 16 [12] 230 jr C,00122$
- 231 ;boot_rom.c:58: cur_x = 0;
- 00F5 FD 36 00 00 [19] 232 ld 0 (iy), #0x00
- 233 ;boot_rom.c:59: cur_y++;
- 00F9 FD 21r02r00 [14] 234 ld iy, #_cur_y
- 00FD FD 34 00 [23] 235 inc 0 (iy)
- 236 ;boot_rom.c:61: if(cur_y >= 12)
- 0100 FD 7E 00 [19] 237 ld a, 0 (iy)
- 0103 D6 0C [ 7] 238 sub a, #0x0c
- 0105 38 04 [12] 239 jr C,00122$
- 240 ;boot_rom.c:62: cur_y = 0;
- 0107 FD 36 00 00 [19] 241 ld 0 (iy), #0x00
- 010B 242 00122$:
- 243 ;boot_rom.c:64: }
- 010B DD F9 [10] 244 ld sp, ix
- 010D DD E1 [14] 245 pop ix
- 010F C9 [10] 246 ret
- 0110 247 _VGA_WIDTH:
- 0110 A0 00 248 .dw #0x00a0
- 0112 249 _VGA_HEIGHT:
- 0112 64 00 250 .dw #0x0064
- 251 ;boot_rom.c:67: void put_pixel(unsigned int x, unsigned int y, unsigned char color) {
- 252 ; ---------------------------------
- 253 ; Function put_pixel
- 254 ; ---------------------------------
- 0114 255 _put_pixel::
- 256 ;boot_rom.c:68: *((unsigned int*)(VGA_WIDTH*y+x)) = color;
- 0114 2Ar10r01 [16] 257 ld hl, (_VGA_WIDTH)
- 0117 FD 21 04 00 [14] 258 ld iy, #4
- 011B FD 39 [15] 259 add iy, sp
- 011D FD 4E 00 [19] 260 ld c, 0 (iy)
- 0120 FD 46 01 [19] 261 ld b, 1 (iy)
- 0123 C5 [11] 262 push bc
- 0124 E5 [11] 263 push hl
- 0125 CDr00r00 [17] 264 call __mulint
- 0128 F1 [10] 265 pop af
- 0129 F1 [10] 266 pop af
- 012A 4D [ 4] 267 ld c, l
- 012B 44 [ 4] 268 ld b, h
- 012C 79 [ 4] 269 ld a, c
- 012D 21 02 00 [10] 270 ld hl, #2
- 0130 39 [11] 271 add hl, sp
- 0131 86 [ 7] 272 add a, (hl)
- 0132 4F [ 4] 273 ld c, a
- 0133 78 [ 4] 274 ld a, b
- 0134 23 [ 6] 275 inc hl
- 0135 8E [ 7] 276 adc a, (hl)
- 0136 69 [ 4] 277 ld l, c
- 0137 67 [ 4] 278 ld h, a
- 0138 FD 21 06 00 [14] 279 ld iy, #6
- 013C FD 39 [15] 280 add iy, sp
- 013E FD 4E 00 [19] 281 ld c, 0 (iy)
- 0141 06 00 [ 7] 282 ld b, #0x00
- 0143 71 [ 7] 283 ld (hl), c
- 0144 23 [ 6] 284 inc hl
- 0145 70 [ 7] 285 ld (hl), b
- 286 ;boot_rom.c:69: }
- 0146 C9 [10] 287 ret
- 288 ;boot_rom.c:71: void cls(unsigned char color) {
- 289 ; ---------------------------------
- 290 ; Function cls
- 291 ; ---------------------------------
- 0147 292 _cls::
- 0147 DD E5 [15] 293 push ix
- 0149 DD 21 00 00 [14] 294 ld ix,#0
- 014D DD 39 [15] 295 add ix,sp
- 014F 3B [ 6] 296 dec sp
- 297 ;boot_rom.c:73: unsigned int *p = (unsigned int*)0;
- 0150 11 00 00 [10] 298 ld de, #0x0000
- 299 ;boot_rom.c:74: for(i=0;i= longest-shortest) {
- 0298 7B [ 4] 474 ld a, e
- 0299 DD 96 F2 [19] 475 sub a, -14 (ix)
- 029C 7A [ 4] 476 ld a, d
- 029D DD 9E F3 [19] 477 sbc a, -13 (ix)
- 02A0 38 4D [12] 478 jr C,00105$
- 479 ;boot_rom.c:105: numerator += shortest ;
- 480 ;boot_rom.c:106: numerator -= longest ;
- 02A2 DD 7E F0 [19] 481 ld a, -16 (ix)
- 02A5 DD 56 F1 [19] 482 ld d, -15 (ix)
- 02A8 DD 96 F6 [19] 483 sub a, -10 (ix)
- 02AB 5F [ 4] 484 ld e, a
- 02AC 7A [ 4] 485 ld a, d
- 02AD DD 9E F7 [19] 486 sbc a, -9 (ix)
- 02B0 57 [ 4] 487 ld d, a
- 488 ;boot_rom.c:107: x += dx1;
- 02B1 DD 7E FA [19] 489 ld a, -6 (ix)
- 02B4 DD 77 EE [19] 490 ld -18 (ix), a
- 02B7 DD 7E FB [19] 491 ld a, -5 (ix)
- 02BA DD 77 EF [19] 492 ld -17 (ix), a
- 02BD DD 7E 04 [19] 493 ld a, 4 (ix)
- 02C0 DD 86 EE [19] 494 add a, -18 (ix)
- 02C3 DD 77 04 [19] 495 ld 4 (ix), a
- 02C6 DD 7E 05 [19] 496 ld a, 5 (ix)
- 02C9 DD 8E EF [19] 497 adc a, -17 (ix)
- 02CC DD 77 05 [19] 498 ld 5 (ix), a
- 499 ;boot_rom.c:108: y += dy1;
- 02CF DD 7E F8 [19] 500 ld a, -8 (ix)
- 02D2 DD 77 EE [19] 501 ld -18 (ix), a
- 02D5 DD 7E F9 [19] 502 ld a, -7 (ix)
- 02D8 DD 77 EF [19] 503 ld -17 (ix), a
- 02DB DD 7E 06 [19] 504 ld a, 6 (ix)
- 02DE DD 86 EE [19] 505 add a, -18 (ix)
- 02E1 DD 77 06 [19] 506 ld 6 (ix), a
- 02E4 DD 7E 07 [19] 507 ld a, 7 (ix)
- 02E7 DD 8E EF [19] 508 adc a, -17 (ix)
- 02EA DD 77 07 [19] 509 ld 7 (ix), a
- 02ED 18 39 [12] 510 jr 00109$
- 02EF 511 00105$:
- 512 ;boot_rom.c:110: numerator += shortest ;
- 02EF DD 5E F0 [19] 513 ld e, -16 (ix)
- 02F2 DD 56 F1 [19] 514 ld d, -15 (ix)
- 515 ;boot_rom.c:111: x += dx2;
- 02F5 33 [ 6] 516 inc sp
- 02F6 33 [ 6] 517 inc sp
- 02F7 C5 [11] 518 push bc
- 02F8 DD 7E 04 [19] 519 ld a, 4 (ix)
- 02FB DD 86 EE [19] 520 add a, -18 (ix)
- 02FE DD 77 04 [19] 521 ld 4 (ix), a
- 0301 DD 7E 05 [19] 522 ld a, 5 (ix)
- 0304 DD 8E EF [19] 523 adc a, -17 (ix)
- 0307 DD 77 05 [19] 524 ld 5 (ix), a
- 525 ;boot_rom.c:112: y += dy2;
- 030A DD 7E F4 [19] 526 ld a, -12 (ix)
- 030D DD 77 EE [19] 527 ld -18 (ix), a
- 0310 DD 7E F5 [19] 528 ld a, -11 (ix)
- 0313 DD 77 EF [19] 529 ld -17 (ix), a
- 0316 DD 7E 06 [19] 530 ld a, 6 (ix)
- 0319 DD 86 EE [19] 531 add a, -18 (ix)
- 031C DD 77 06 [19] 532 ld 6 (ix), a
- 031F DD 7E 07 [19] 533 ld a, 7 (ix)
- 0322 DD 8E EF [19] 534 adc a, -17 (ix)
- 0325 DD 77 07 [19] 535 ld 7 (ix), a
- 0328 536 00109$:
- 537 ;boot_rom.c:102: for(i=0;i<=longest;i++) {
- 0328 DD 34 FC [23] 538 inc -4 (ix)
- 032B 20 03 [12] 539 jr NZ,00142$
- 032D DD 34 FD [23] 540 inc -3 (ix)
- 0330 541 00142$:
- 0330 DD 7E F6 [19] 542 ld a, -10 (ix)
- 0333 DD 96 FC [19] 543 sub a, -4 (ix)
- 0336 DD 7E F7 [19] 544 ld a, -9 (ix)
- 0339 DD 9E FD [19] 545 sbc a, -3 (ix)
- 033C D2r6Dr02 [10] 546 jp NC, 00108$
- 547 ;boot_rom.c:115: }
- 033F DD F9 [10] 548 ld sp, ix
- 0341 DD E1 [14] 549 pop ix
- 0343 C9 [10] 550 ret
- 551 ;boot_rom.c:119: void main() {
- 552 ; ---------------------------------
- 553 ; Function main
- 554 ; ---------------------------------
- 0344 555 _main::
- 556 ;boot_rom.c:120: while(1) {
- 0344 557 00108$:
- 558 ;boot_rom.c:123: input0_cache = input0;
- 0344 3A 00 60 [13] 559 ld a,(#_input0 + 0)
- 0347 FD 21r04r00 [14] 560 ld iy, #_input0_cache
- 034B FD 77 00 [19] 561 ld 0 (iy), a
- 562 ;boot_rom.c:124: hsync = input0_cache & 0x80;
- 034E FD 4E 00 [19] 563 ld c, 0 (iy)
- 0351 79 [ 4] 564 ld a, c
- 0352 E6 80 [ 7] 565 and a, #0x80
- 0354 32r00r00 [13] 566 ld (#_hsync + 0),a
- 567 ;boot_rom.c:125: vsync = input0_cache & 0x40;
- 0357 79 [ 4] 568 ld a, c
- 0358 E6 40 [ 7] 569 and a, #0x40
- 035A 32r02r00 [13] 570 ld (#_vsync + 0),a
- 571 ;boot_rom.c:127: if(hsync && !hsync_last){
- 035D 3Ar00r00 [13] 572 ld a,(#_hsync + 0)
- 0360 B7 [ 4] 573 or a, a
- 0361 28 0A [12] 574 jr Z,00102$
- 0363 3Ar01r00 [13] 575 ld a,(#_hsync_last + 0)
- 0366 B7 [ 4] 576 or a, a
- 0367 20 04 [12] 577 jr NZ,00102$
- 578 ;boot_rom.c:128: y++;
- 0369 21r00r00 [10] 579 ld hl, #_y+0
- 036C 34 [11] 580 inc (hl)
- 036D 581 00102$:
- 582 ;boot_rom.c:130: if(vsync && !vsync_last){
- 036D 3Ar02r00 [13] 583 ld a,(#_vsync + 0)
- 0370 B7 [ 4] 584 or a, a
- 0371 28 35 [12] 585 jr Z,00105$
- 0373 3Ar03r00 [13] 586 ld a,(#_vsync_last + 0)
- 0376 B7 [ 4] 587 or a, a
- 0377 20 2F [12] 588 jr NZ,00105$
- 589 ;boot_rom.c:131: y=0;
- 0379 21r00r00 [10] 590 ld hl,#_y + 0
- 037C 36 00 [10] 591 ld (hl), #0x00
- 592 ;boot_rom.c:133: cur_x = 0;
- 037E 21r01r00 [10] 593 ld hl,#_cur_x + 0
- 0381 36 00 [10] 594 ld (hl), #0x00
- 595 ;boot_rom.c:134: cur_y = 0;
- 0383 21r02r00 [10] 596 ld hl,#_cur_y + 0
- 0386 36 00 [10] 597 ld (hl), #0x00
- 598 ;boot_rom.c:135: color++;
- 0388 FD 21r03r00 [14] 599 ld iy, #_color
- 038C FD 34 00 [23] 600 inc 0 (iy)
- 601 ;boot_rom.c:136: cls(~color);
- 038F FD 7E 00 [19] 602 ld a, 0 (iy)
- 0392 2F [ 4] 603 cpl
- 0393 47 [ 4] 604 ld b, a
- 0394 C5 [11] 605 push bc
- 0395 33 [ 6] 606 inc sp
- 0396 CDr47r01 [17] 607 call _cls
- 0399 33 [ 6] 608 inc sp
- 609 ;boot_rom.c:137: puts(" << Z80 SoC >>\n");
- 039A 21rB6r03 [10] 610 ld hl, #___str_0
- 039D E5 [11] 611 push hl
- 039E CDr00r00 [17] 612 call _puts
- 03A1 F1 [10] 613 pop af
- 614 ;boot_rom.c:140: input1_cache = input1;
- 03A2 3A 01 60 [13] 615 ld a,(#_input1 + 0)
- 03A5 32r05r00 [13] 616 ld (#_input1_cache + 0),a
- 03A8 617 00105$:
- 618 ;boot_rom.c:143: hsync_last = hsync;
- 03A8 3Ar00r00 [13] 619 ld a,(#_hsync + 0)
- 03AB 32r01r00 [13] 620 ld (#_hsync_last + 0),a
- 621 ;boot_rom.c:144: vsync_last = vsync;
- 03AE 3Ar02r00 [13] 622 ld a,(#_vsync + 0)
- 03B1 32r03r00 [13] 623 ld (#_vsync_last + 0),a
- 624 ;boot_rom.c:146: }
- 03B4 18 8E [12] 625 jr 00108$
- 03B6 626 ___str_0:
- 03B6 20 3C 3C 20 5A 38 627 .ascii " << Z80 SoC >>"
- 30 20 53 6F 43 20
- 3E 3E
- 03C4 0A 628 .db 0x0a
- 03C5 00 629 .db 0x00
- 630 .area _CODE
- 631 .area _INITIALIZER
- 0000 632 __xinit__y:
- 0000 00 633 .db #0x00 ; 0
- 0001 634 __xinit__cur_x:
- 0001 00 635 .db #0x00 ; 0
- 0002 636 __xinit__cur_y:
- 0002 00 637 .db #0x00 ; 0
- 0003 638 __xinit__color:
- 0003 66 639 .db #0x66 ; 102 'f'
- 640 .area _CABS (ABS)
+ 79 .area _CODE
+ 80 ;boot_rom.c:21: void clear_chars()
+ 81 ; ---------------------------------
+ 82 ; Function clear_chars
+ 83 ; ---------------------------------
+ 0000 84 _clear_chars::
+ 85 ;boot_rom.c:23: for (unsigned int p = 0; p < chram_size; p++)
+ 0000 01 00 00 [10] 86 ld bc, #0x0000
+ 0003 87 00103$:
+ 0003 21r00r00 [10] 88 ld hl, #_chram_size
+ 0006 79 [ 4] 89 ld a, c
+ 0007 96 [ 7] 90 sub a, (hl)
+ 0008 78 [ 4] 91 ld a, b
+ 0009 23 [ 6] 92 inc hl
+ 000A 9E [ 7] 93 sbc a, (hl)
+ 000B D0 [11] 94 ret NC
+ 95 ;boot_rom.c:25: chram[p] = 0;
+ 000C 21 00 80 [10] 96 ld hl, #_chram+0
+ 000F 09 [11] 97 add hl, bc
+ 0010 36 00 [10] 98 ld (hl), #0x00
+ 99 ;boot_rom.c:23: for (unsigned int p = 0; p < chram_size; p++)
+ 0012 03 [ 6] 100 inc bc
+ 101 ;boot_rom.c:27: }
+ 0013 18 EE [12] 102 jr 00103$
+ 0015 103 _chram_cols:
+ 0015 40 104 .db #0x40 ; 64
+ 0016 105 _chram_rows:
+ 0016 20 106 .db #0x20 ; 32
+ 107 ;boot_rom.c:29: void write_string(const char *string, char color, unsigned int x, unsigned int y)
+ 108 ; ---------------------------------
+ 109 ; Function write_string
+ 110 ; ---------------------------------
+ 0017 111 _write_string::
+ 0017 DD E5 [15] 112 push ix
+ 0019 DD 21 00 00 [14] 113 ld ix,#0
+ 001D DD 39 [15] 114 add ix,sp
+ 001F F5 [11] 115 push af
+ 116 ;boot_rom.c:31: unsigned int p = (y * chram_cols) + x;
+ 0020 21r15r00 [10] 117 ld hl,#_chram_cols + 0
+ 0023 4E [ 7] 118 ld c, (hl)
+ 0024 06 00 [ 7] 119 ld b, #0x00
+ 0026 C5 [11] 120 push bc
+ 0027 DD 6E 09 [19] 121 ld l, 9 (ix)
+ 002A DD 66 0A [19] 122 ld h, 10 (ix)
+ 002D E5 [11] 123 push hl
+ 002E CDr00r00 [17] 124 call __mulint
+ 0031 F1 [10] 125 pop af
+ 0032 F1 [10] 126 pop af
+ 0033 4D [ 4] 127 ld c, l
+ 0034 44 [ 4] 128 ld b, h
+ 0035 DD 6E 07 [19] 129 ld l, 7 (ix)
+ 0038 DD 66 08 [19] 130 ld h, 8 (ix)
+ 003B 09 [11] 131 add hl, bc
+ 003C EB [ 4] 132 ex de,hl
+ 133 ;boot_rom.c:32: unsigned char l = strlen(string);
+ 003D DD 6E 04 [19] 134 ld l, 4 (ix)
+ 0040 DD 66 05 [19] 135 ld h, 5 (ix)
+ 0043 E5 [11] 136 push hl
+ 0044 CDr00r00 [17] 137 call _strlen
+ 0047 F1 [10] 138 pop af
+ 0048 4D [ 4] 139 ld c, l
+ 140 ;boot_rom.c:33: for (char c = 0; c < l; c++)
+ 0049 06 00 [ 7] 141 ld b, #0x00
+ 004B 142 00103$:
+ 004B 78 [ 4] 143 ld a, b
+ 004C 91 [ 4] 144 sub a, c
+ 004D 30 20 [12] 145 jr NC,00105$
+ 146 ;boot_rom.c:35: chram[p] = string[c];
+ 004F 21 00 80 [10] 147 ld hl, #_chram
+ 0052 19 [11] 148 add hl, de
+ 0053 E3 [19] 149 ex (sp), hl
+ 0054 DD 7E 04 [19] 150 ld a, 4 (ix)
+ 0057 80 [ 4] 151 add a, b
+ 0058 6F [ 4] 152 ld l, a
+ 0059 DD 7E 05 [19] 153 ld a, 5 (ix)
+ 005C CE 00 [ 7] 154 adc a, #0x00
+ 005E 67 [ 4] 155 ld h, a
+ 005F 7E [ 7] 156 ld a, (hl)
+ 0060 E1 [10] 157 pop hl
+ 0061 E5 [11] 158 push hl
+ 0062 77 [ 7] 159 ld (hl), a
+ 160 ;boot_rom.c:36: colram[p] = color;
+ 0063 21 00 88 [10] 161 ld hl, #_colram
+ 0066 19 [11] 162 add hl, de
+ 0067 DD 7E 06 [19] 163 ld a, 6 (ix)
+ 006A 77 [ 7] 164 ld (hl), a
+ 165 ;boot_rom.c:37: p++;
+ 006B 13 [ 6] 166 inc de
+ 167 ;boot_rom.c:33: for (char c = 0; c < l; c++)
+ 006C 04 [ 4] 168 inc b
+ 006D 18 DC [12] 169 jr 00103$
+ 006F 170 00105$:
+ 171 ;boot_rom.c:39: }
+ 006F DD F9 [10] 172 ld sp, ix
+ 0071 DD E1 [14] 173 pop ix
+ 0073 C9 [10] 174 ret
+ 175 ;boot_rom.c:41: void write_char(unsigned char c, char color, unsigned int x, unsigned int y)
+ 176 ; ---------------------------------
+ 177 ; Function write_char
+ 178 ; ---------------------------------
+ 0074 179 _write_char::
+ 0074 DD E5 [15] 180 push ix
+ 0076 DD 21 00 00 [14] 181 ld ix,#0
+ 007A DD 39 [15] 182 add ix,sp
+ 183 ;boot_rom.c:43: unsigned int p = (y * chram_cols) + x;
+ 007C 21r15r00 [10] 184 ld hl,#_chram_cols + 0
+ 007F 4E [ 7] 185 ld c, (hl)
+ 0080 06 00 [ 7] 186 ld b, #0x00
+ 0082 C5 [11] 187 push bc
+ 0083 DD 6E 08 [19] 188 ld l, 8 (ix)
+ 0086 DD 66 09 [19] 189 ld h, 9 (ix)
+ 0089 E5 [11] 190 push hl
+ 008A CDr00r00 [17] 191 call __mulint
+ 008D F1 [10] 192 pop af
+ 008E F1 [10] 193 pop af
+ 008F 4D [ 4] 194 ld c, l
+ 0090 44 [ 4] 195 ld b, h
+ 0091 DD 6E 06 [19] 196 ld l, 6 (ix)
+ 0094 DD 66 07 [19] 197 ld h, 7 (ix)
+ 0097 09 [11] 198 add hl, bc
+ 0098 4D [ 4] 199 ld c, l
+ 0099 44 [ 4] 200 ld b, h
+ 201 ;boot_rom.c:44: chram[p] = c;
+ 009A 21 00 80 [10] 202 ld hl, #_chram+0
+ 009D 09 [11] 203 add hl, bc
+ 009E DD 7E 04 [19] 204 ld a, 4 (ix)
+ 00A1 77 [ 7] 205 ld (hl), a
+ 206 ;boot_rom.c:45: colram[p] = color;
+ 00A2 21 00 88 [10] 207 ld hl, #_colram+0
+ 00A5 09 [11] 208 add hl, bc
+ 00A6 DD 7E 05 [19] 209 ld a, 5 (ix)
+ 00A9 77 [ 7] 210 ld (hl), a
+ 211 ;boot_rom.c:46: }
+ 00AA DD E1 [14] 212 pop ix
+ 00AC C9 [10] 213 ret
+ 214 ;boot_rom.c:48: void page_border(char color)
+ 215 ; ---------------------------------
+ 216 ; Function page_border
+ 217 ; ---------------------------------
+ 00AD 218 _page_border::
+ 00AD DD E5 [15] 219 push ix
+ 00AF DD 21 00 00 [14] 220 ld ix,#0
+ 00B3 DD 39 [15] 221 add ix,sp
+ 222 ;boot_rom.c:50: write_char(128, color, 0, 0);
+ 00B5 21 00 00 [10] 223 ld hl, #0x0000
+ 00B8 E5 [11] 224 push hl
+ 00B9 2E 00 [ 7] 225 ld l, #0x00
+ 00BB E5 [11] 226 push hl
+ 00BC DD 56 04 [19] 227 ld d, 4 (ix)
+ 00BF 1E 80 [ 7] 228 ld e,#0x80
+ 00C1 D5 [11] 229 push de
+ 00C2 CDr74r00 [17] 230 call _write_char
+ 00C5 21 06 00 [10] 231 ld hl, #6
+ 00C8 39 [11] 232 add hl, sp
+ 00C9 F9 [ 6] 233 ld sp, hl
+ 234 ;boot_rom.c:51: write_char(130, color, 39, 0);
+ 00CA 21 00 00 [10] 235 ld hl, #0x0000
+ 00CD E5 [11] 236 push hl
+ 00CE 2E 27 [ 7] 237 ld l, #0x27
+ 00D0 E5 [11] 238 push hl
+ 00D1 DD 56 04 [19] 239 ld d, 4 (ix)
+ 00D4 1E 82 [ 7] 240 ld e,#0x82
+ 00D6 D5 [11] 241 push de
+ 00D7 CDr74r00 [17] 242 call _write_char
+ 00DA 21 06 00 [10] 243 ld hl, #6
+ 00DD 39 [11] 244 add hl, sp
+ 00DE F9 [ 6] 245 ld sp, hl
+ 246 ;boot_rom.c:52: write_char(133, color, 0, 29);
+ 00DF 21 1D 00 [10] 247 ld hl, #0x001d
+ 00E2 E5 [11] 248 push hl
+ 00E3 2E 00 [ 7] 249 ld l, #0x00
+ 00E5 E5 [11] 250 push hl
+ 00E6 DD 56 04 [19] 251 ld d, 4 (ix)
+ 00E9 1E 85 [ 7] 252 ld e,#0x85
+ 00EB D5 [11] 253 push de
+ 00EC CDr74r00 [17] 254 call _write_char
+ 00EF 21 06 00 [10] 255 ld hl, #6
+ 00F2 39 [11] 256 add hl, sp
+ 00F3 F9 [ 6] 257 ld sp, hl
+ 258 ;boot_rom.c:53: write_char(132, color, 39, 29);
+ 00F4 21 1D 00 [10] 259 ld hl, #0x001d
+ 00F7 E5 [11] 260 push hl
+ 00F8 2E 27 [ 7] 261 ld l, #0x27
+ 00FA E5 [11] 262 push hl
+ 00FB DD 56 04 [19] 263 ld d, 4 (ix)
+ 00FE 1E 84 [ 7] 264 ld e,#0x84
+ 0100 D5 [11] 265 push de
+ 0101 CDr74r00 [17] 266 call _write_char
+ 0104 21 06 00 [10] 267 ld hl, #6
+ 0107 39 [11] 268 add hl, sp
+ 0108 F9 [ 6] 269 ld sp, hl
+ 270 ;boot_rom.c:54: for (char x = 1; x < 39; x++)
+ 0109 0E 01 [ 7] 271 ld c, #0x01
+ 010B 272 00104$:
+ 010B 79 [ 4] 273 ld a, c
+ 010C D6 27 [ 7] 274 sub a, #0x27
+ 010E 30 30 [12] 275 jr NC,00101$
+ 276 ;boot_rom.c:56: write_char(129, color, x, 0);
+ 0110 59 [ 4] 277 ld e, c
+ 0111 16 00 [ 7] 278 ld d, #0x00
+ 0113 C5 [11] 279 push bc
+ 0114 D5 [11] 280 push de
+ 0115 21 00 00 [10] 281 ld hl, #0x0000
+ 0118 E5 [11] 282 push hl
+ 0119 D5 [11] 283 push de
+ 011A DD 56 04 [19] 284 ld d, 4 (ix)
+ 011D 1E 81 [ 7] 285 ld e,#0x81
+ 011F D5 [11] 286 push de
+ 0120 CDr74r00 [17] 287 call _write_char
+ 0123 21 06 00 [10] 288 ld hl, #6
+ 0126 39 [11] 289 add hl, sp
+ 0127 F9 [ 6] 290 ld sp, hl
+ 0128 D1 [10] 291 pop de
+ 0129 21 1D 00 [10] 292 ld hl, #0x001d
+ 012C E5 [11] 293 push hl
+ 012D D5 [11] 294 push de
+ 012E DD 56 04 [19] 295 ld d, 4 (ix)
+ 0131 1E 81 [ 7] 296 ld e,#0x81
+ 0133 D5 [11] 297 push de
+ 0134 CDr74r00 [17] 298 call _write_char
+ 0137 21 06 00 [10] 299 ld hl, #6
+ 013A 39 [11] 300 add hl, sp
+ 013B F9 [ 6] 301 ld sp, hl
+ 013C C1 [10] 302 pop bc
+ 303 ;boot_rom.c:54: for (char x = 1; x < 39; x++)
+ 013D 0C [ 4] 304 inc c
+ 013E 18 CB [12] 305 jr 00104$
+ 0140 306 00101$:
+ 307 ;boot_rom.c:59: for (char y = 1; y < 29; y++)
+ 0140 0E 01 [ 7] 308 ld c, #0x01
+ 0142 309 00107$:
+ 0142 79 [ 4] 310 ld a, c
+ 0143 D6 1D [ 7] 311 sub a, #0x1d
+ 0145 30 2E [12] 312 jr NC,00109$
+ 313 ;boot_rom.c:61: write_char(131, color, 0, y);
+ 0147 59 [ 4] 314 ld e, c
+ 0148 16 00 [ 7] 315 ld d, #0x00
+ 014A C5 [11] 316 push bc
+ 014B D5 [11] 317 push de
+ 014C D5 [11] 318 push de
+ 014D 21 00 00 [10] 319 ld hl, #0x0000
+ 0150 E5 [11] 320 push hl
+ 0151 DD 56 04 [19] 321 ld d, 4 (ix)
+ 0154 1E 83 [ 7] 322 ld e,#0x83
+ 0156 D5 [11] 323 push de
+ 0157 CDr74r00 [17] 324 call _write_char
+ 015A 21 06 00 [10] 325 ld hl, #6
+ 015D 39 [11] 326 add hl, sp
+ 015E F9 [ 6] 327 ld sp, hl
+ 015F 21 27 00 [10] 328 ld hl, #0x0027
+ 0162 E5 [11] 329 push hl
+ 0163 DD 56 04 [19] 330 ld d, 4 (ix)
+ 0166 1E 83 [ 7] 331 ld e,#0x83
+ 0168 D5 [11] 332 push de
+ 0169 CDr74r00 [17] 333 call _write_char
+ 016C 21 06 00 [10] 334 ld hl, #6
+ 016F 39 [11] 335 add hl, sp
+ 0170 F9 [ 6] 336 ld sp, hl
+ 0171 C1 [10] 337 pop bc
+ 338 ;boot_rom.c:59: for (char y = 1; y < 29; y++)
+ 0172 0C [ 4] 339 inc c
+ 0173 18 CD [12] 340 jr 00107$
+ 0175 341 00109$:
+ 342 ;boot_rom.c:64: }
+ 0175 DD E1 [14] 343 pop ix
+ 0177 C9 [10] 344 ret
+ 345 ;boot_rom.c:66: void page_inputs()
+ 346 ; ---------------------------------
+ 347 ; Function page_inputs
+ 348 ; ---------------------------------
+ 0178 349 _page_inputs::
+ 350 ;boot_rom.c:68: clear_chars();
+ 0178 CDr00r00 [17] 351 call _clear_chars
+ 352 ;boot_rom.c:69: page_border(0b00000111);
+ 017B 3E 07 [ 7] 353 ld a, #0x07
+ 017D F5 [11] 354 push af
+ 017E 33 [ 6] 355 inc sp
+ 017F CDrADr00 [17] 356 call _page_border
+ 0182 33 [ 6] 357 inc sp
+ 358 ;boot_rom.c:70: write_string("UDLR", 0xFF, 9, 3);
+ 0183 21 03 00 [10] 359 ld hl, #0x0003
+ 0186 E5 [11] 360 push hl
+ 0187 2E 09 [ 7] 361 ld l, #0x09
+ 0189 E5 [11] 362 push hl
+ 018A 3E FF [ 7] 363 ld a, #0xff
+ 018C F5 [11] 364 push af
+ 018D 33 [ 6] 365 inc sp
+ 018E 21rC9r01 [10] 366 ld hl, #___str_0
+ 0191 E5 [11] 367 push hl
+ 0192 CDr17r00 [17] 368 call _write_string
+ 0195 21 07 00 [10] 369 ld hl, #7
+ 0198 39 [11] 370 add hl, sp
+ 0199 F9 [ 6] 371 ld sp, hl
+ 372 ;boot_rom.c:71: write_string("JOY 1)", 0xF0, 2, 4);
+ 019A 21 04 00 [10] 373 ld hl, #0x0004
+ 019D E5 [11] 374 push hl
+ 019E 2E 02 [ 7] 375 ld l, #0x02
+ 01A0 E5 [11] 376 push hl
+ 01A1 3E F0 [ 7] 377 ld a, #0xf0
+ 01A3 F5 [11] 378 push af
+ 01A4 33 [ 6] 379 inc sp
+ 01A5 21rCEr01 [10] 380 ld hl, #___str_1
+ 01A8 E5 [11] 381 push hl
+ 01A9 CDr17r00 [17] 382 call _write_string
+ 01AC 21 07 00 [10] 383 ld hl, #7
+ 01AF 39 [11] 384 add hl, sp
+ 01B0 F9 [ 6] 385 ld sp, hl
+ 386 ;boot_rom.c:72: write_string("JOY 2)", 0xE0, 2, 5);
+ 01B1 21 05 00 [10] 387 ld hl, #0x0005
+ 01B4 E5 [11] 388 push hl
+ 01B5 2E 02 [ 7] 389 ld l, #0x02
+ 01B7 E5 [11] 390 push hl
+ 01B8 3E E0 [ 7] 391 ld a, #0xe0
+ 01BA F5 [11] 392 push af
+ 01BB 33 [ 6] 393 inc sp
+ 01BC 21rD5r01 [10] 394 ld hl, #___str_2
+ 01BF E5 [11] 395 push hl
+ 01C0 CDr17r00 [17] 396 call _write_string
+ 01C3 21 07 00 [10] 397 ld hl, #7
+ 01C6 39 [11] 398 add hl, sp
+ 01C7 F9 [ 6] 399 ld sp, hl
+ 400 ;boot_rom.c:73: }
+ 01C8 C9 [10] 401 ret
+ 01C9 402 ___str_0:
+ 01C9 55 44 4C 52 403 .ascii "UDLR"
+ 01CD 00 404 .db 0x00
+ 01CE 405 ___str_1:
+ 01CE 4A 4F 59 20 31 29 406 .ascii "JOY 1)"
+ 01D4 00 407 .db 0x00
+ 01D5 408 ___str_2:
+ 01D5 4A 4F 59 20 32 29 409 .ascii "JOY 2)"
+ 01DB 00 410 .db 0x00
+ 411 ;boot_rom.c:78: void main()
+ 412 ; ---------------------------------
+ 413 ; Function main
+ 414 ; ---------------------------------
+ 01DC 415 _main::
+ 01DC DD E5 [15] 416 push ix
+ 01DE DD 21 00 00 [14] 417 ld ix,#0
+ 01E2 DD 39 [15] 418 add ix,sp
+ 01E4 21 F9 FF [10] 419 ld hl, #-7
+ 01E7 39 [11] 420 add hl, sp
+ 01E8 F9 [ 6] 421 ld sp, hl
+ 422 ;boot_rom.c:80: chram_size = chram_cols * chram_rows;
+ 01E9 21r16r00 [10] 423 ld hl,#_chram_rows + 0
+ 01EC 5E [ 7] 424 ld e, (hl)
+ 01ED 21r15r00 [10] 425 ld hl,#_chram_cols + 0
+ 01F0 66 [ 7] 426 ld h, (hl)
+ 01F1 2E 00 [ 7] 427 ld l, #0x00
+ 01F3 55 [ 4] 428 ld d, l
+ 01F4 06 08 [ 7] 429 ld b, #0x08
+ 01F6 430 00176$:
+ 01F6 29 [11] 431 add hl, hl
+ 01F7 30 01 [12] 432 jr NC,00177$
+ 01F9 19 [11] 433 add hl, de
+ 01FA 434 00177$:
+ 01FA 10 FA [13] 435 djnz 00176$
+ 01FC 22r00r00 [16] 436 ld (_chram_size), hl
+ 437 ;boot_rom.c:82: page_inputs();
+ 01FF CDr78r01 [17] 438 call _page_inputs
+ 439 ;boot_rom.c:84: while (1)
+ 0202 06 AB [ 7] 440 ld b, #0xab
+ 0204 441 00108$:
+ 442 ;boot_rom.c:86: hsync = input0 & 0x80;
+ 0204 3A 00 60 [13] 443 ld a,(#_input0 + 0)
+ 0207 E6 80 [ 7] 444 and a, #0x80
+ 0209 32r02r00 [13] 445 ld (#_hsync + 0),a
+ 446 ;boot_rom.c:87: vsync = input0 & 0x40;
+ 020C 3A 00 60 [13] 447 ld a,(#_input0 + 0)
+ 020F E6 40 [ 7] 448 and a, #0x40
+ 0211 FD 21r04r00 [14] 449 ld iy, #_vsync
+ 0215 FD 77 00 [19] 450 ld 0 (iy), a
+ 451 ;boot_rom.c:92: if (vsync && !vsync_last)
+ 0218 FD 7E 00 [19] 452 ld a, 0 (iy)
+ 021B B7 [ 4] 453 or a, a
+ 021C CArE0r02 [10] 454 jp Z, 00105$
+ 021F 3Ar05r00 [13] 455 ld a,(#_vsync_last + 0)
+ 0222 B7 [ 4] 456 or a, a
+ 0223 C2rE0r02 [10] 457 jp NZ, 00105$
+ 458 ;boot_rom.c:94: color++;
+ 0226 04 [ 4] 459 inc b
+ 460 ;boot_rom.c:95: write_string("--- MiSTer Input Tester ---", color, 6, 1);
+ 0227 C5 [11] 461 push bc
+ 0228 21 01 00 [10] 462 ld hl, #0x0001
+ 022B E5 [11] 463 push hl
+ 022C 2E 06 [ 7] 464 ld l, #0x06
+ 022E E5 [11] 465 push hl
+ 022F C5 [11] 466 push bc
+ 0230 33 [ 6] 467 inc sp
+ 0231 21rEFr02 [10] 468 ld hl, #___str_3
+ 0234 E5 [11] 469 push hl
+ 0235 CDr17r00 [17] 470 call _write_string
+ 0238 21 07 00 [10] 471 ld hl, #7
+ 023B 39 [11] 472 add hl, sp
+ 023C F9 [ 6] 473 ld sp, hl
+ 023D C1 [10] 474 pop bc
+ 475 ;boot_rom.c:97: for (char b = 0; b < 2; b++)
+ 023E 0E 00 [ 7] 476 ld c, #0x00
+ 0240 477 00117$:
+ 0240 79 [ 4] 478 ld a, c
+ 0241 D6 02 [ 7] 479 sub a, #0x02
+ 0243 D2rE0r02 [10] 480 jp NC, 00105$
+ 481 ;boot_rom.c:99: char m = 0b00000001;
+ 0246 1E 01 [ 7] 482 ld e, #0x01
+ 483 ;boot_rom.c:100: for (char i = 0; i < 8; i++)
+ 0248 DD 36 FE 00 [19] 484 ld -2 (ix), #0x00
+ 024C 485 00114$:
+ 024C DD 7E FE [19] 486 ld a, -2 (ix)
+ 024F D6 08 [ 7] 487 sub a, #0x08
+ 0251 D2rDCr02 [10] 488 jp NC, 00118$
+ 489 ;boot_rom.c:102: char x = 9 + i + (b * 10);
+ 0254 DD 7E FE [19] 490 ld a, -2 (ix)
+ 0257 C6 09 [ 7] 491 add a, #0x09
+ 0259 57 [ 4] 492 ld d, a
+ 025A 79 [ 4] 493 ld a, c
+ 025B D5 [11] 494 push de
+ 025C 5F [ 4] 495 ld e, a
+ 025D 87 [ 4] 496 add a, a
+ 025E 87 [ 4] 497 add a, a
+ 025F 83 [ 4] 498 add a, e
+ 0260 87 [ 4] 499 add a, a
+ 0261 D1 [10] 500 pop de
+ 0262 82 [ 4] 501 add a, d
+ 0263 DD 77 FD [19] 502 ld -3 (ix), a
+ 503 ;boot_rom.c:103: for (char j = 0; j < 3; j++)
+ 0266 DD 36 FF 00 [19] 504 ld -1 (ix), #0x00
+ 026A 505 00111$:
+ 026A DD 7E FF [19] 506 ld a, -1 (ix)
+ 026D D6 03 [ 7] 507 sub a, #0x03
+ 026F 30 63 [12] 508 jr NC,00101$
+ 509 ;boot_rom.c:105: write_char((joystick[b + (j * 32)] & m) ? asc_1 : asc_0, 0xFF, x, 4 + j);
+ 0271 DD 7E FF [19] 510 ld a, -1 (ix)
+ 0274 2E 00 [ 7] 511 ld l, #0x00
+ 0276 C6 04 [ 7] 512 add a, #0x04
+ 0278 DD 77 F9 [19] 513 ld -7 (ix), a
+ 027B 7D [ 4] 514 ld a, l
+ 027C CE 00 [ 7] 515 adc a, #0x00
+ 027E DD 77 FA [19] 516 ld -6 (ix), a
+ 0281 DD 7E FD [19] 517 ld a, -3 (ix)
+ 0284 DD 77 FB [19] 518 ld -5 (ix), a
+ 0287 DD 36 FC 00 [19] 519 ld -4 (ix), #0x00
+ 028B DD 7E FF [19] 520 ld a, -1 (ix)
+ 028E 0F [ 4] 521 rrca
+ 028F 0F [ 4] 522 rrca
+ 0290 0F [ 4] 523 rrca
+ 0291 E6 E0 [ 7] 524 and a, #0xe0
+ 0293 51 [ 4] 525 ld d, c
+ 0294 82 [ 4] 526 add a, d
+ 0295 6F [ 4] 527 ld l, a
+ 0296 17 [ 4] 528 rla
+ 0297 9F [ 4] 529 sbc a, a
+ 0298 57 [ 4] 530 ld d, a
+ 0299 3E 00 [ 7] 531 ld a, #<(_joystick)
+ 029B 85 [ 4] 532 add a, l
+ 029C 6F [ 4] 533 ld l, a
+ 029D 3E 70 [ 7] 534 ld a, #>(_joystick)
+ 029F 8A [ 4] 535 adc a, d
+ 02A0 67 [ 4] 536 ld h, a
+ 02A1 7E [ 7] 537 ld a, (hl)
+ 02A2 A3 [ 4] 538 and a,e
+ 02A3 28 06 [12] 539 jr Z,00121$
+ 02A5 21r01r00 [10] 540 ld hl,#_asc_1 + 0
+ 02A8 56 [ 7] 541 ld d, (hl)
+ 02A9 18 04 [12] 542 jr 00122$
+ 02AB 543 00121$:
+ 02AB 21r00r00 [10] 544 ld hl,#_asc_0 + 0
+ 02AE 56 [ 7] 545 ld d, (hl)
+ 02AF 546 00122$:
+ 02AF C5 [11] 547 push bc
+ 02B0 D5 [11] 548 push de
+ 02B1 DD 6E F9 [19] 549 ld l, -7 (ix)
+ 02B4 DD 66 FA [19] 550 ld h, -6 (ix)
+ 02B7 E5 [11] 551 push hl
+ 02B8 DD 6E FB [19] 552 ld l, -5 (ix)
+ 02BB DD 66 FC [19] 553 ld h, -4 (ix)
+ 02BE E5 [11] 554 push hl
+ 02BF 3E FF [ 7] 555 ld a, #0xff
+ 02C1 F5 [11] 556 push af
+ 02C2 33 [ 6] 557 inc sp
+ 02C3 D5 [11] 558 push de
+ 02C4 33 [ 6] 559 inc sp
+ 02C5 CDr74r00 [17] 560 call _write_char
+ 02C8 21 06 00 [10] 561 ld hl, #6
+ 02CB 39 [11] 562 add hl, sp
+ 02CC F9 [ 6] 563 ld sp, hl
+ 02CD D1 [10] 564 pop de
+ 02CE C1 [10] 565 pop bc
+ 566 ;boot_rom.c:103: for (char j = 0; j < 3; j++)
+ 02CF DD 34 FF [23] 567 inc -1 (ix)
+ 02D2 18 96 [12] 568 jr 00111$
+ 02D4 569 00101$:
+ 570 ;boot_rom.c:107: m <<= 1;
+ 02D4 CB 23 [ 8] 571 sla e
+ 572 ;boot_rom.c:100: for (char i = 0; i < 8; i++)
+ 02D6 DD 34 FE [23] 573 inc -2 (ix)
+ 02D9 C3r4Cr02 [10] 574 jp 00114$
+ 02DC 575 00118$:
+ 576 ;boot_rom.c:97: for (char b = 0; b < 2; b++)
+ 02DC 0C [ 4] 577 inc c
+ 02DD C3r40r02 [10] 578 jp 00117$
+ 02E0 579 00105$:
+ 580 ;boot_rom.c:111: hsync_last = hsync;
+ 02E0 3Ar02r00 [13] 581 ld a,(#_hsync + 0)
+ 02E3 32r03r00 [13] 582 ld (#_hsync_last + 0),a
+ 583 ;boot_rom.c:112: vsync_last = vsync;
+ 02E6 3Ar04r00 [13] 584 ld a,(#_vsync + 0)
+ 02E9 32r05r00 [13] 585 ld (#_vsync_last + 0),a
+ 586 ;boot_rom.c:114: }
+ 02EC C3r04r02 [10] 587 jp 00108$
+ 02EF 588 ___str_3:
+ 02EF 2D 2D 2D 20 4D 69 589 .ascii "--- MiSTer Input Tester ---"
+ 53 54 65 72 20 49
+ 6E 70 75 74 20 54
+ 65 73 74 65 72 20
+ 2D 2D 2D
+ 030A 00 590 .db 0x00
+ 591 .area _CODE
+ 592 .area _INITIALIZER
+ 0000 593 __xinit__asc_0:
+ 0000 30 594 .db #0x30 ; 48 '0'
+ 0001 595 __xinit__asc_1:
+ 0001 31 596 .db #0x31 ; 49 '1'
+ 597 .area _CABS (ABS)
diff --git a/src/boot_rom.map b/src/boot_rom.map
index cb147f1..e6519e7 100644
--- a/src/boot_rom.map
+++ b/src/boot_rom.map
@@ -7,7 +7,7 @@ Area Addr Size Decimal Bytes (A
Value Global Global Defined In Module
----- -------------------------------- ------------------------
- 00000000 .__.ABS. puts
+ 00000000 .__.ABS.
00000000 l__BSEG
00000000 l__BSS
00000000 l__CABS
@@ -28,6 +28,8 @@ Area Addr Size Decimal Bytes (A
00000000 s__HEADER7
00000000 s__HEADER8
00000001 l__GSFINAL
+ 00000002 l__INITIALIZED
+ 00000002 l__INITIALIZER
00000003 l__HEADER0
00000003 l__HEADER2
00000003 l__HEADER3
@@ -40,44 +42,43 @@ Area Addr Size Decimal Bytes (A
0000000C l__HEADER8
0000000F l__GSINIT
00000200 s__CODE
- 00000304 l__INITIALIZED
- 00000304 l__INITIALIZER
- 00000447 l__CODE
- 00000647 s__HOME
- 00000647 s__INITIALIZER
- 0000094B s__GSINIT
- 0000095A s__GSFINAL
+ 0000033E l__CODE
+ 0000053E s__HOME
+ 0000053E s__INITIALIZER
+ 00000540 s__GSINIT
+ 0000054F s__GSFINAL
00006000 _input0 boot_rom
- 00006001 _input1 boot_rom
- 00008000 s__DATA
- 00008006 s__INITIALIZED
- 0000830A s__BSEG
- 0000830A s__BSS
- 0000830A s__HEAP
+ 00007000 _joystick boot_rom
+ 00008000 _chram boot_rom
+ 00008800 _colram boot_rom
+ 0000C000 s__DATA
+ 0000C006 s__INITIALIZED
+ 0000C008 s__BSEG
+ 0000C008 s__BSS
+ 0000C008 s__HEAP
ASxxxx Linker V03.00 + NoICE + sdld, page 2.
Hexadecimal [32-Bits]
Area Addr Size Decimal Bytes (Attributes)
-------------------------------- ---- ---- ------- ----- ------------
-_CODE 00000200 00000447 = 1095. bytes (REL,CON)
+_CODE 00000200 0000033E = 830. bytes (REL,CON)
Value Global Global Defined In Module
----- -------------------------------- ------------------------
00000200 __clock crt0
00000204 _exit crt0
- 0000020A _putchar boot_rom
- 0000031A _VGA_WIDTH boot_rom
- 0000031C _VGA_HEIGHT boot_rom
- 0000031E _put_pixel boot_rom
- 00000351 _cls boot_rom
- 00000397 _draw_line boot_rom
- 0000054E _main boot_rom
- 000005D0 _abs
- 000005DC __mulint
- 000005E2 __mul16
- 000005F6 _memset _memset
- 00000621 _puts puts
+ 0000020A _clear_chars boot_rom
+ 0000021F _chram_cols boot_rom
+ 00000220 _chram_rows boot_rom
+ 00000221 _write_string boot_rom
+ 0000027E _write_char boot_rom
+ 000002B7 _page_border boot_rom
+ 00000382 _page_inputs boot_rom
+ 000003E6 _main boot_rom
+ 00000515 __mulint
+ 0000051B __mul16
+ 0000052F _strlen
ASxxxx Linker V03.00 + NoICE + sdld, page 3.
Hexadecimal [32-Bits]
@@ -165,7 +166,7 @@ Hexadecimal [32-Bits]
Area Addr Size Decimal Bytes (Attributes)
-------------------------------- ---- ---- ------- ----- ------------
-_INITIALIZER 00000647 00000304 = 772. bytes (REL,CON)
+_INITIALIZER 0000053E 00000002 = 2. bytes (REL,CON)
Value Global Global Defined In Module
----- -------------------------------- ------------------------
@@ -174,18 +175,18 @@ Hexadecimal [32-Bits]
Area Addr Size Decimal Bytes (Attributes)
-------------------------------- ---- ---- ------- ----- ------------
-_GSINIT 0000094B 0000000F = 15. bytes (REL,CON)
+_GSINIT 00000540 0000000F = 15. bytes (REL,CON)
Value Global Global Defined In Module
----- -------------------------------- ------------------------
- 0000094B gsinit crt0
+ 00000540 gsinit crt0
ASxxxx Linker V03.00 + NoICE + sdld, page 14.
Hexadecimal [32-Bits]
Area Addr Size Decimal Bytes (Attributes)
-------------------------------- ---- ---- ------- ----- ------------
-_GSFINAL 0000095A 00000001 = 1. bytes (REL,CON)
+_GSFINAL 0000054F 00000001 = 1. bytes (REL,CON)
Value Global Global Defined In Module
----- -------------------------------- ------------------------
@@ -194,30 +195,27 @@ Hexadecimal [32-Bits]
Area Addr Size Decimal Bytes (Attributes)
-------------------------------- ---- ---- ------- ----- ------------
-_DATA 00008000 00000006 = 6. bytes (REL,CON)
+_DATA 0000C000 00000006 = 6. bytes (REL,CON)
Value Global Global Defined In Module
----- -------------------------------- ------------------------
- 00008000 _hsync boot_rom
- 00008001 _hsync_last boot_rom
- 00008002 _vsync boot_rom
- 00008003 _vsync_last boot_rom
- 00008004 _input0_cache boot_rom
- 00008005 _input1_cache boot_rom
+ 0000C000 _chram_size boot_rom
+ 0000C002 _hsync boot_rom
+ 0000C003 _hsync_last boot_rom
+ 0000C004 _vsync boot_rom
+ 0000C005 _vsync_last boot_rom
+
ASxxxx Linker V03.00 + NoICE + sdld, page 16.
Hexadecimal [32-Bits]
Area Addr Size Decimal Bytes (Attributes)
-------------------------------- ---- ---- ------- ----- ------------
-_INITIALIZED 00008006 00000304 = 772. bytes (REL,CON)
+_INITIALIZED 0000C006 00000002 = 2. bytes (REL,CON)
Value Global Global Defined In Module
----- -------------------------------- ------------------------
- 00008006 _y boot_rom
- 00008007 _cur_x boot_rom
- 00008008 _cur_y boot_rom
- 00008009 _color boot_rom
- 0000800A _font font
+ 0000C006 _asc_0 boot_rom
+ 0000C007 _asc_1 boot_rom
ASxxxx Linker V03.00 + NoICE + sdld, page 17.
@@ -225,21 +223,18 @@ Files Linked [ module(s) ]
/usr/bin/../share/sdcc/lib/z80/crt0.rel [ crt0 ]
boot_rom.rel [ boot_rom ]
-font.rel [ font ]
Libraries Linked [ object file ]
-/usr/bin/../share/sdcc/lib/z80/z80.lib [ abs.rel ]
/usr/bin/../share/sdcc/lib/z80/z80.lib [ mul.rel ]
-/usr/bin/../share/sdcc/lib/z80/z80.lib [ _memset.rel ]
-/usr/bin/../share/sdcc/lib/z80/z80.lib [ puts.rel ]
+/usr/bin/../share/sdcc/lib/z80/z80.lib [ strlen.rel ]
ASxxxx Linker V03.00 + NoICE + sdld, page 18.
User Base Address Definitions
_CODE = 0x0200
-_DATA = 0x8000
+_DATA = 0xc000
\ No newline at end of file
diff --git a/src/boot_rom.noi b/src/boot_rom.noi
index f0383fd..3fc95f0 100644
--- a/src/boot_rom.noi
+++ b/src/boot_rom.noi
@@ -19,6 +19,8 @@ DEF s__HEADER6 0x0
DEF s__HEADER7 0x0
DEF s__HEADER8 0x0
DEF l__GSFINAL 0x1
+DEF l__INITIALIZED 0x2
+DEF l__INITIALIZER 0x2
DEF l__HEADER0 0x3
DEF l__HEADER2 0x3
DEF l__HEADER3 0x3
@@ -31,44 +33,39 @@ DEF l__DATA 0x6
DEF l__HEADER8 0xC
DEF l__GSINIT 0xF
DEF s__CODE 0x200
-DEF l__INITIALIZED 0x304
-DEF l__INITIALIZER 0x304
-DEF l__CODE 0x447
-DEF s__HOME 0x647
-DEF s__INITIALIZER 0x647
-DEF s__GSINIT 0x94B
-DEF s__GSFINAL 0x95A
+DEF l__CODE 0x33E
+DEF s__HOME 0x53E
+DEF s__INITIALIZER 0x53E
+DEF s__GSINIT 0x540
+DEF s__GSFINAL 0x54F
DEF _input0 0x6000
-DEF _input1 0x6001
-DEF s__DATA 0x8000
-DEF s__INITIALIZED 0x8006
-DEF s__BSEG 0x830A
-DEF s__BSS 0x830A
-DEF s__HEAP 0x830A
+DEF _joystick 0x7000
+DEF _chram 0x8000
+DEF _colram 0x8800
+DEF s__DATA 0xC000
+DEF s__INITIALIZED 0xC006
+DEF s__BSEG 0xC008
+DEF s__BSS 0xC008
+DEF s__HEAP 0xC008
DEF __clock 0x200
DEF _exit 0x204
-DEF _putchar 0x20A
-DEF _VGA_WIDTH 0x31A
-DEF _VGA_HEIGHT 0x31C
-DEF _put_pixel 0x31E
-DEF _cls 0x351
-DEF _draw_line 0x397
-DEF _main 0x54E
-DEF _abs 0x5D0
-DEF __mulint 0x5DC
-DEF __mul16 0x5E2
-DEF _memset 0x5F6
-DEF _puts 0x621
-DEF gsinit 0x94B
-DEF _hsync 0x8000
-DEF _hsync_last 0x8001
-DEF _vsync 0x8002
-DEF _vsync_last 0x8003
-DEF _input0_cache 0x8004
-DEF _input1_cache 0x8005
-DEF _y 0x8006
-DEF _cur_x 0x8007
-DEF _cur_y 0x8008
-DEF _color 0x8009
-DEF _font 0x800A
+DEF _clear_chars 0x20A
+DEF _chram_cols 0x21F
+DEF _chram_rows 0x220
+DEF _write_string 0x221
+DEF _write_char 0x27E
+DEF _page_border 0x2B7
+DEF _page_inputs 0x382
+DEF _main 0x3E6
+DEF __mulint 0x515
+DEF __mul16 0x51B
+DEF _strlen 0x52F
+DEF gsinit 0x540
+DEF _chram_size 0xC000
+DEF _hsync 0xC002
+DEF _hsync_last 0xC003
+DEF _vsync 0xC004
+DEF _vsync_last 0xC005
+DEF _asc_0 0xC006
+DEF _asc_1 0xC007
LOAD boot_rom.ihx
diff --git a/src/boot_rom.sym b/src/boot_rom.sym
index 8eba22f..0409b8a 100644
--- a/src/boot_rom.sym
+++ b/src/boot_rom.sym
@@ -7,48 +7,47 @@ Symbol Table
.__.ABS. = 0000 G
.__.CPU. = 0000 L
.__.H$L. = 0000 L
- 0 _VGA_HEIGHT 0112 GR
- 0 _VGA_WIDTH 0110 GR
- 0 ___str_0 03B6 R
+ 0 ___str_0 01C9 R
+ 0 ___str_1 01CE R
+ 0 ___str_2 01D5 R
+ 0 ___str_3 02EF R
__mulint **** GX
- 7 __xinit__color 0003 R
- 7 __xinit__cur_x 0001 R
- 7 __xinit__cur_y 0002 R
- 7 __xinit__y 0000 R
- _abs **** GX
- 0 _cls 0147 GR
- 2 _color 0003 GR
- 2 _cur_x 0001 GR
- 2 _cur_y 0002 GR
- 0 _draw_line 018D GR
- _font **** GX
- 1 _hsync 0000 GR
- 1 _hsync_last 0001 GR
+ 7 __xinit__asc_0 0000 R
+ 7 __xinit__asc_1 0001 R
+ 2 _asc_0 0000 GR
+ 2 _asc_1 0001 GR
+ _chram = 8000 G
+ 0 _chram_cols 0015 GR
+ 0 _chram_rows 0016 GR
+ 1 _chram_size 0000 GR
+ 0 _clear_chars 0000 GR
+ _colram = 8800 G
+ 1 _hsync 0002 GR
+ 1 _hsync_last 0003 GR
_input0 = 6000 G
- 1 _input0_cache 0004 GR
- _input1 = 6001 G
- 1 _input1_cache 0005 GR
- 0 _main 0344 GR
- _memset **** GX
- 0 _put_pixel 0114 GR
- 0 _putchar 0000 GR
- _puts **** GX
- 1 _vsync 0002 GR
- 1 _vsync_last 0003 GR
- 2 _y 0000 GR
+ _joystick = 7000 G
+ 0 _main 01DC GR
+ 0 _page_border 00AD GR
+ 0 _page_inputs 0178 GR
+ _strlen **** GX
+ 1 _vsync 0004 GR
+ 1 _vsync_last 0005 GR
+ 0 _write_char 0074 GR
+ 0 _write_string 0017 GR
+
ASxxxx Assembler V02.00 + NoICE + SDCC mods (Zilog Z80 / Hitachi HD64180 / ZX-Next), page 2.
Hexadecimal [16-Bits]
Area Table
- 0 _CODE size 3C6 flags 0
+ 0 _CODE size 30B flags 0
1 _DATA size 6 flags 0
- 2 _INITIALIZED size 4 flags 0
+ 2 _INITIALIZED size 2 flags 0
3 _DABS size 0 flags 8
4 _HOME size 0 flags 0
5 _GSINIT size 0 flags 0
6 _GSFINAL size 0 flags 0
- 7 _INITIALIZER size 4 flags 0
+ 7 _INITIALIZER size 2 flags 0
8 _CABS size 0 flags 8
diff --git a/src/font.asm b/src/font.asm
deleted file mode 100644
index 2305599..0000000
--- a/src/font.asm
+++ /dev/null
@@ -1,816 +0,0 @@
-;--------------------------------------------------------
-; File Created by SDCC : free open source ANSI-C Compiler
-; Version 3.8.0 #10562 (Linux)
-;--------------------------------------------------------
- .module font
- .optsdcc -mz80
-
-;--------------------------------------------------------
-; Public variables in this module
-;--------------------------------------------------------
- .globl _font
-;--------------------------------------------------------
-; special function registers
-;--------------------------------------------------------
-;--------------------------------------------------------
-; ram data
-;--------------------------------------------------------
- .area _DATA
-;--------------------------------------------------------
-; ram data
-;--------------------------------------------------------
- .area _INITIALIZED
-_font::
- .ds 768
-;--------------------------------------------------------
-; absolute external ram data
-;--------------------------------------------------------
- .area _DABS (ABS)
-;--------------------------------------------------------
-; global & static initialisations
-;--------------------------------------------------------
- .area _HOME
- .area _GSINIT
- .area _GSFINAL
- .area _GSINIT
-;--------------------------------------------------------
-; Home
-;--------------------------------------------------------
- .area _HOME
- .area _HOME
-;--------------------------------------------------------
-; code
-;--------------------------------------------------------
- .area _CODE
- .area _CODE
- .area _INITIALIZER
-__xinit__font:
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x30 ; 48 '0'
- .db #0x78 ; 120 'x'
- .db #0x78 ; 120 'x'
- .db #0x78 ; 120 'x'
- .db #0x30 ; 48 '0'
- .db #0x00 ; 0
- .db #0x30 ; 48 '0'
- .db #0x00 ; 0
- .db #0xcc ; 204
- .db #0x66 ; 102 'f'
- .db #0x33 ; 51 '3'
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x36 ; 54 '6'
- .db #0x7f ; 127
- .db #0x36 ; 54 '6'
- .db #0x36 ; 54 '6'
- .db #0x7f ; 127
- .db #0x36 ; 54 '6'
- .db #0x00 ; 0
- .db #0x7c ; 124
- .db #0xd6 ; 214
- .db #0xd0 ; 208
- .db #0x7c ; 124
- .db #0x16 ; 22
- .db #0xd6 ; 214
- .db #0x7c ; 124
- .db #0x10 ; 16
- .db #0xe3 ; 227
- .db #0xa6 ; 166
- .db #0xec ; 236
- .db #0x18 ; 24
- .db #0x37 ; 55 '7'
- .db #0x65 ; 101 'e'
- .db #0xc7 ; 199
- .db #0x00 ; 0
- .db #0x38 ; 56 '8'
- .db #0x4c ; 76 'L'
- .db #0x38 ; 56 '8'
- .db #0x45 ; 69 'E'
- .db #0xc6 ; 198
- .db #0xce ; 206
- .db #0x7a ; 122 'z'
- .db #0x01 ; 1
- .db #0x06 ; 6
- .db #0x0c ; 12
- .db #0x18 ; 24
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x0c ; 12
- .db #0x18 ; 24
- .db #0x18 ; 24
- .db #0x18 ; 24
- .db #0x18 ; 24
- .db #0x18 ; 24
- .db #0x18 ; 24
- .db #0x0c ; 12
- .db #0x60 ; 96
- .db #0x30 ; 48 '0'
- .db #0x30 ; 48 '0'
- .db #0x30 ; 48 '0'
- .db #0x30 ; 48 '0'
- .db #0x30 ; 48 '0'
- .db #0x30 ; 48 '0'
- .db #0x60 ; 96
- .db #0x10 ; 16
- .db #0x54 ; 84 'T'
- .db #0x38 ; 56 '8'
- .db #0xfe ; 254
- .db #0x38 ; 56 '8'
- .db #0x54 ; 84 'T'
- .db #0x10 ; 16
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x18 ; 24
- .db #0x18 ; 24
- .db #0x7e ; 126
- .db #0x18 ; 24
- .db #0x18 ; 24
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x18 ; 24
- .db #0x30 ; 48 '0'
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x7e ; 126
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x30 ; 48 '0'
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x03 ; 3
- .db #0x06 ; 6
- .db #0x0c ; 12
- .db #0x18 ; 24
- .db #0x30 ; 48 '0'
- .db #0x60 ; 96
- .db #0x00 ; 0
- .db #0x7c ; 124
- .db #0xce ; 206
- .db #0xde ; 222
- .db #0xfe ; 254
- .db #0xee ; 238
- .db #0xce ; 206
- .db #0x7c ; 124
- .db #0x00 ; 0
- .db #0x1c ; 28
- .db #0x3c ; 60
- .db #0x1c ; 28
- .db #0x1c ; 28
- .db #0x1c ; 28
- .db #0x1c ; 28
- .db #0x1c ; 28
- .db #0x00 ; 0
- .db #0x7c ; 124
- .db #0xce ; 206
- .db #0x0e ; 14
- .db #0x1c ; 28
- .db #0x38 ; 56 '8'
- .db #0x70 ; 112 'p'
- .db #0xfe ; 254
- .db #0x00 ; 0
- .db #0x7c ; 124
- .db #0xce ; 206
- .db #0x0e ; 14
- .db #0x3c ; 60
- .db #0x0e ; 14
- .db #0xce ; 206
- .db #0x7c ; 124
- .db #0x00 ; 0
- .db #0xce ; 206
- .db #0xce ; 206
- .db #0xce ; 206
- .db #0xce ; 206
- .db #0xfe ; 254
- .db #0x0e ; 14
- .db #0x0e ; 14
- .db #0x00 ; 0
- .db #0xfe ; 254
- .db #0xe0 ; 224
- .db #0xe0 ; 224
- .db #0xfc ; 252
- .db #0x0e ; 14
- .db #0x0e ; 14
- .db #0xfc ; 252
- .db #0x00 ; 0
- .db #0x7c ; 124
- .db #0xe6 ; 230
- .db #0xe0 ; 224
- .db #0xfc ; 252
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0x7c ; 124
- .db #0x00 ; 0
- .db #0xfe ; 254
- .db #0x06 ; 6
- .db #0x0e ; 14
- .db #0x1c ; 28
- .db #0x38 ; 56 '8'
- .db #0x38 ; 56 '8'
- .db #0x38 ; 56 '8'
- .db #0x00 ; 0
- .db #0x7c ; 124
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0x7c ; 124
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0x7c ; 124
- .db #0x00 ; 0
- .db #0x7c ; 124
- .db #0xce ; 206
- .db #0xce ; 206
- .db #0x7e ; 126
- .db #0x0e ; 14
- .db #0x0e ; 14
- .db #0xfc ; 252
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x30 ; 48 '0'
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x30 ; 48 '0'
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x30 ; 48 '0'
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x30 ; 48 '0'
- .db #0x60 ; 96
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x18 ; 24
- .db #0x30 ; 48 '0'
- .db #0x60 ; 96
- .db #0x30 ; 48 '0'
- .db #0x18 ; 24
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x7e ; 126
- .db #0x00 ; 0
- .db #0x7e ; 126
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x30 ; 48 '0'
- .db #0x18 ; 24
- .db #0x0c ; 12
- .db #0x18 ; 24
- .db #0x30 ; 48 '0'
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x7c ; 124
- .db #0xc6 ; 198
- .db #0x0e ; 14
- .db #0x1c ; 28
- .db #0x38 ; 56 '8'
- .db #0x00 ; 0
- .db #0x38 ; 56 '8'
- .db #0x00 ; 0
- .db #0x7c ; 124
- .db #0xc6 ; 198
- .db #0xde ; 222
- .db #0xde ; 222
- .db #0xdc ; 220
- .db #0xc0 ; 192
- .db #0x7c ; 124
- .db #0x00 ; 0
- .db #0x7c ; 124
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0xfe ; 254
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0x00 ; 0
- .db #0xfc ; 252
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0xfc ; 252
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0xfc ; 252
- .db #0x00 ; 0
- .db #0x7c ; 124
- .db #0xe6 ; 230
- .db #0xe0 ; 224
- .db #0xe0 ; 224
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0x7c ; 124
- .db #0x00 ; 0
- .db #0xfc ; 252
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0xfc ; 252
- .db #0x00 ; 0
- .db #0xfe ; 254
- .db #0xe0 ; 224
- .db #0xe0 ; 224
- .db #0xfe ; 254
- .db #0xe0 ; 224
- .db #0xe0 ; 224
- .db #0xfe ; 254
- .db #0x00 ; 0
- .db #0xfe ; 254
- .db #0xe0 ; 224
- .db #0xe0 ; 224
- .db #0xfe ; 254
- .db #0xe0 ; 224
- .db #0xe0 ; 224
- .db #0xe0 ; 224
- .db #0x00 ; 0
- .db #0x7c ; 124
- .db #0xe6 ; 230
- .db #0xe0 ; 224
- .db #0xee ; 238
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0x7c ; 124
- .db #0x00 ; 0
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0xfe ; 254
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0x00 ; 0
- .db #0x38 ; 56 '8'
- .db #0x38 ; 56 '8'
- .db #0x38 ; 56 '8'
- .db #0x38 ; 56 '8'
- .db #0x38 ; 56 '8'
- .db #0x38 ; 56 '8'
- .db #0x38 ; 56 '8'
- .db #0x00 ; 0
- .db #0x0e ; 14
- .db #0x0e ; 14
- .db #0x0e ; 14
- .db #0x0e ; 14
- .db #0xce ; 206
- .db #0xce ; 206
- .db #0x7c ; 124
- .db #0x00 ; 0
- .db #0xe6 ; 230
- .db #0xec ; 236
- .db #0xf8 ; 248
- .db #0xf0 ; 240
- .db #0xf8 ; 248
- .db #0xec ; 236
- .db #0xe6 ; 230
- .db #0x00 ; 0
- .db #0xe0 ; 224
- .db #0xe0 ; 224
- .db #0xe0 ; 224
- .db #0xe0 ; 224
- .db #0xe0 ; 224
- .db #0xe0 ; 224
- .db #0xfe ; 254
- .db #0x00 ; 0
- .db #0xc6 ; 198
- .db #0xee ; 238
- .db #0xfe ; 254
- .db #0xd6 ; 214
- .db #0xc6 ; 198
- .db #0xc6 ; 198
- .db #0xc6 ; 198
- .db #0x00 ; 0
- .db #0xc6 ; 198
- .db #0xe6 ; 230
- .db #0xf6 ; 246
- .db #0xfe ; 254
- .db #0xee ; 238
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0x00 ; 0
- .db #0x7c ; 124
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0x7c ; 124
- .db #0x00 ; 0
- .db #0xfc ; 252
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0xfc ; 252
- .db #0xe0 ; 224
- .db #0xe0 ; 224
- .db #0xe0 ; 224
- .db #0x00 ; 0
- .db #0x7c ; 124
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0xea ; 234
- .db #0x74 ; 116 't'
- .db #0x02 ; 2
- .db #0xfc ; 252
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0xfc ; 252
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0x00 ; 0
- .db #0x7c ; 124
- .db #0xe6 ; 230
- .db #0xe0 ; 224
- .db #0x7c ; 124
- .db #0x0e ; 14
- .db #0xce ; 206
- .db #0x7c ; 124
- .db #0x00 ; 0
- .db #0xfe ; 254
- .db #0x38 ; 56 '8'
- .db #0x38 ; 56 '8'
- .db #0x38 ; 56 '8'
- .db #0x38 ; 56 '8'
- .db #0x38 ; 56 '8'
- .db #0x38 ; 56 '8'
- .db #0x00 ; 0
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0x7c ; 124
- .db #0x00 ; 0
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0x7c ; 124
- .db #0x38 ; 56 '8'
- .db #0x00 ; 0
- .db #0xc6 ; 198
- .db #0xc6 ; 198
- .db #0xc6 ; 198
- .db #0xd6 ; 214
- .db #0xd6 ; 214
- .db #0xfe ; 254
- .db #0xfc ; 252
- .db #0x00 ; 0
- .db #0xe3 ; 227
- .db #0x76 ; 118 'v'
- .db #0x3c ; 60
- .db #0x18 ; 24
- .db #0x3c ; 60
- .db #0x6e ; 110 'n'
- .db #0xc7 ; 199
- .db #0x00 ; 0
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0x7c ; 124
- .db #0x38 ; 56 '8'
- .db #0x38 ; 56 '8'
- .db #0x38 ; 56 '8'
- .db #0x38 ; 56 '8'
- .db #0x00 ; 0
- .db #0xfe ; 254
- .db #0x0e ; 14
- .db #0x1c ; 28
- .db #0x38 ; 56 '8'
- .db #0x70 ; 112 'p'
- .db #0xe0 ; 224
- .db #0xfe ; 254
- .db #0x00 ; 0
- .db #0x1c ; 28
- .db #0x18 ; 24
- .db #0x18 ; 24
- .db #0x18 ; 24
- .db #0x18 ; 24
- .db #0x18 ; 24
- .db #0x18 ; 24
- .db #0x1c ; 28
- .db #0x00 ; 0
- .db #0x60 ; 96
- .db #0x30 ; 48 '0'
- .db #0x18 ; 24
- .db #0x0c ; 12
- .db #0x06 ; 6
- .db #0x03 ; 3
- .db #0x00 ; 0
- .db #0x70 ; 112 'p'
- .db #0x30 ; 48 '0'
- .db #0x30 ; 48 '0'
- .db #0x30 ; 48 '0'
- .db #0x30 ; 48 '0'
- .db #0x30 ; 48 '0'
- .db #0x30 ; 48 '0'
- .db #0x70 ; 112 'p'
- .db #0x18 ; 24
- .db #0x3c ; 60
- .db #0x66 ; 102 'f'
- .db #0xc3 ; 195
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0xff ; 255
- .db #0x30 ; 48 '0'
- .db #0x18 ; 24
- .db #0x0c ; 12
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x7c ; 124
- .db #0x0e ; 14
- .db #0x7e ; 126
- .db #0xce ; 206
- .db #0x7e ; 126
- .db #0x00 ; 0
- .db #0xc0 ; 192
- .db #0xc0 ; 192
- .db #0xfc ; 252
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0xfc ; 252
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x7c ; 124
- .db #0xe6 ; 230
- .db #0xe0 ; 224
- .db #0xe6 ; 230
- .db #0x7c ; 124
- .db #0x00 ; 0
- .db #0x06 ; 6
- .db #0x06 ; 6
- .db #0x7e ; 126
- .db #0xce ; 206
- .db #0xce ; 206
- .db #0xce ; 206
- .db #0x7e ; 126
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x7c ; 124
- .db #0xe6 ; 230
- .db #0xfe ; 254
- .db #0xe0 ; 224
- .db #0x7e ; 126
- .db #0x00 ; 0
- .db #0x3c ; 60
- .db #0x70 ; 112 'p'
- .db #0x70 ; 112 'p'
- .db #0xfc ; 252
- .db #0x70 ; 112 'p'
- .db #0x70 ; 112 'p'
- .db #0x70 ; 112 'p'
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x7c ; 124
- .db #0xce ; 206
- .db #0xce ; 206
- .db #0x7e ; 126
- .db #0x0e ; 14
- .db #0x7c ; 124
- .db #0xc0 ; 192
- .db #0xc0 ; 192
- .db #0xfc ; 252
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0x00 ; 0
- .db #0x18 ; 24
- .db #0x00 ; 0
- .db #0x18 ; 24
- .db #0x38 ; 56 '8'
- .db #0x38 ; 56 '8'
- .db #0x38 ; 56 '8'
- .db #0x38 ; 56 '8'
- .db #0x00 ; 0
- .db #0x0c ; 12
- .db #0x00 ; 0
- .db #0x0c ; 12
- .db #0x1c ; 28
- .db #0x1c ; 28
- .db #0x1c ; 28
- .db #0x1c ; 28
- .db #0xf8 ; 248
- .db #0xc0 ; 192
- .db #0xc0 ; 192
- .db #0xcc ; 204
- .db #0xd8 ; 216
- .db #0xf0 ; 240
- .db #0xd8 ; 216
- .db #0xcc ; 204
- .db #0x00 ; 0
- .db #0x18 ; 24
- .db #0x18 ; 24
- .db #0x38 ; 56 '8'
- .db #0x38 ; 56 '8'
- .db #0x38 ; 56 '8'
- .db #0x38 ; 56 '8'
- .db #0x38 ; 56 '8'
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0xfc ; 252
- .db #0xd6 ; 214
- .db #0xd6 ; 214
- .db #0xd6 ; 214
- .db #0xd6 ; 214
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0xfc ; 252
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x7c ; 124
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0x7c ; 124
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0xfc ; 252
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0xfc ; 252
- .db #0xe0 ; 224
- .db #0xe0 ; 224
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x7e ; 126
- .db #0xce ; 206
- .db #0xce ; 206
- .db #0x7e ; 126
- .db #0x0e ; 14
- .db #0x0e ; 14
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0xfc ; 252
- .db #0xe6 ; 230
- .db #0xe0 ; 224
- .db #0xe0 ; 224
- .db #0xe0 ; 224
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x7e ; 126
- .db #0xe0 ; 224
- .db #0x7c ; 124
- .db #0x0e ; 14
- .db #0xfc ; 252
- .db #0x00 ; 0
- .db #0x18 ; 24
- .db #0x18 ; 24
- .db #0x7e ; 126
- .db #0x38 ; 56 '8'
- .db #0x38 ; 56 '8'
- .db #0x38 ; 56 '8'
- .db #0x38 ; 56 '8'
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0x7e ; 126
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0xe6 ; 230
- .db #0x6c ; 108 'l'
- .db #0x38 ; 56 '8'
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0xd6 ; 214
- .db #0xd6 ; 214
- .db #0xd6 ; 214
- .db #0xd6 ; 214
- .db #0xfc ; 252
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0xe6 ; 230
- .db #0x7c ; 124
- .db #0x38 ; 56 '8'
- .db #0x7c ; 124
- .db #0xce ; 206
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0xce ; 206
- .db #0xce ; 206
- .db #0xce ; 206
- .db #0x7e ; 126
- .db #0x0e ; 14
- .db #0xfc ; 252
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0xfe ; 254
- .db #0x1c ; 28
- .db #0x38 ; 56 '8'
- .db #0x70 ; 112 'p'
- .db #0xfe ; 254
- .db #0x00 ; 0
- .db #0x0c ; 12
- .db #0x18 ; 24
- .db #0x18 ; 24
- .db #0x30 ; 48 '0'
- .db #0x18 ; 24
- .db #0x18 ; 24
- .db #0x0c ; 12
- .db #0x00 ; 0
- .db #0x18 ; 24
- .db #0x18 ; 24
- .db #0x18 ; 24
- .db #0x18 ; 24
- .db #0x18 ; 24
- .db #0x18 ; 24
- .db #0x18 ; 24
- .db #0x18 ; 24
- .db #0x60 ; 96
- .db #0x30 ; 48 '0'
- .db #0x30 ; 48 '0'
- .db #0x18 ; 24
- .db #0x30 ; 48 '0'
- .db #0x30 ; 48 '0'
- .db #0x60 ; 96
- .db #0x00 ; 0
- .db #0x70 ; 112 'p'
- .db #0xdb ; 219
- .db #0x0e ; 14
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x00 ; 0
- .db #0x10 ; 16
- .db #0x28 ; 40
- .db #0x44 ; 68 'D'
- .db #0xfe ; 254
- .db #0x00 ; 0
- .db #0x00 ; 0
- .area _CABS (ABS)
diff --git a/src/font.c b/src/font.c
deleted file mode 100644
index b1c001b..0000000
--- a/src/font.c
+++ /dev/null
@@ -1,101 +0,0 @@
-/* Autogenerated file, DO NOT EDIT !!! */
-
-unsigned char font[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x30, 0x78, 0x78, 0x78, 0x30, 0x00, 0x30, 0x00,
- 0xCC, 0x66, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x36, 0x7F, 0x36, 0x36, 0x7F, 0x36, 0x00,
- 0x7C, 0xD6, 0xD0, 0x7C, 0x16, 0xD6, 0x7C, 0x10,
- 0xE3, 0xA6, 0xEC, 0x18, 0x37, 0x65, 0xC7, 0x00,
- 0x38, 0x4C, 0x38, 0x45, 0xC6, 0xCE, 0x7A, 0x01,
- 0x06, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x0C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0C,
- 0x60, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x60,
- 0x10, 0x54, 0x38, 0xFE, 0x38, 0x54, 0x10, 0x00,
- 0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x30,
- 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00,
- 0x00, 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x00,
- 0x7C, 0xCE, 0xDE, 0xFE, 0xEE, 0xCE, 0x7C, 0x00,
- 0x1C, 0x3C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x00,
- 0x7C, 0xCE, 0x0E, 0x1C, 0x38, 0x70, 0xFE, 0x00,
- 0x7C, 0xCE, 0x0E, 0x3C, 0x0E, 0xCE, 0x7C, 0x00,
- 0xCE, 0xCE, 0xCE, 0xCE, 0xFE, 0x0E, 0x0E, 0x00,
- 0xFE, 0xE0, 0xE0, 0xFC, 0x0E, 0x0E, 0xFC, 0x00,
- 0x7C, 0xE6, 0xE0, 0xFC, 0xE6, 0xE6, 0x7C, 0x00,
- 0xFE, 0x06, 0x0E, 0x1C, 0x38, 0x38, 0x38, 0x00,
- 0x7C, 0xE6, 0xE6, 0x7C, 0xE6, 0xE6, 0x7C, 0x00,
- 0x7C, 0xCE, 0xCE, 0x7E, 0x0E, 0x0E, 0xFC, 0x00,
- 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00,
- 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x60, 0x00,
- 0x00, 0x18, 0x30, 0x60, 0x30, 0x18, 0x00, 0x00,
- 0x00, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x00, 0x00,
- 0x00, 0x30, 0x18, 0x0C, 0x18, 0x30, 0x00, 0x00,
- 0x7C, 0xC6, 0x0E, 0x1C, 0x38, 0x00, 0x38, 0x00,
- 0x7C, 0xC6, 0xDE, 0xDE, 0xDC, 0xC0, 0x7C, 0x00,
- 0x7C, 0xE6, 0xE6, 0xE6, 0xFE, 0xE6, 0xE6, 0x00,
- 0xFC, 0xE6, 0xE6, 0xFC, 0xE6, 0xE6, 0xFC, 0x00,
- 0x7C, 0xE6, 0xE0, 0xE0, 0xE6, 0xE6, 0x7C, 0x00,
- 0xFC, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xFC, 0x00,
- 0xFE, 0xE0, 0xE0, 0xFE, 0xE0, 0xE0, 0xFE, 0x00,
- 0xFE, 0xE0, 0xE0, 0xFE, 0xE0, 0xE0, 0xE0, 0x00,
- 0x7C, 0xE6, 0xE0, 0xEE, 0xE6, 0xE6, 0x7C, 0x00,
- 0xE6, 0xE6, 0xE6, 0xFE, 0xE6, 0xE6, 0xE6, 0x00,
- 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x00,
- 0x0E, 0x0E, 0x0E, 0x0E, 0xCE, 0xCE, 0x7C, 0x00,
- 0xE6, 0xEC, 0xF8, 0xF0, 0xF8, 0xEC, 0xE6, 0x00,
- 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xFE, 0x00,
- 0xC6, 0xEE, 0xFE, 0xD6, 0xC6, 0xC6, 0xC6, 0x00,
- 0xC6, 0xE6, 0xF6, 0xFE, 0xEE, 0xE6, 0xE6, 0x00,
- 0x7C, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0x7C, 0x00,
- 0xFC, 0xE6, 0xE6, 0xFC, 0xE0, 0xE0, 0xE0, 0x00,
- 0x7C, 0xE6, 0xE6, 0xE6, 0xE6, 0xEA, 0x74, 0x02,
- 0xFC, 0xE6, 0xE6, 0xFC, 0xE6, 0xE6, 0xE6, 0x00,
- 0x7C, 0xE6, 0xE0, 0x7C, 0x0E, 0xCE, 0x7C, 0x00,
- 0xFE, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x00,
- 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0x7C, 0x00,
- 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0x7C, 0x38, 0x00,
- 0xC6, 0xC6, 0xC6, 0xD6, 0xD6, 0xFE, 0xFC, 0x00,
- 0xE3, 0x76, 0x3C, 0x18, 0x3C, 0x6E, 0xC7, 0x00,
- 0xE6, 0xE6, 0x7C, 0x38, 0x38, 0x38, 0x38, 0x00,
- 0xFE, 0x0E, 0x1C, 0x38, 0x70, 0xE0, 0xFE, 0x00,
- 0x1C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1C,
- 0x00, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x00,
- 0x70, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x70,
- 0x18, 0x3C, 0x66, 0xC3, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
- 0x30, 0x18, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x7C, 0x0E, 0x7E, 0xCE, 0x7E, 0x00,
- 0xC0, 0xC0, 0xFC, 0xE6, 0xE6, 0xE6, 0xFC, 0x00,
- 0x00, 0x00, 0x7C, 0xE6, 0xE0, 0xE6, 0x7C, 0x00,
- 0x06, 0x06, 0x7E, 0xCE, 0xCE, 0xCE, 0x7E, 0x00,
- 0x00, 0x00, 0x7C, 0xE6, 0xFE, 0xE0, 0x7E, 0x00,
- 0x3C, 0x70, 0x70, 0xFC, 0x70, 0x70, 0x70, 0x00,
- 0x00, 0x00, 0x7C, 0xCE, 0xCE, 0x7E, 0x0E, 0x7C,
- 0xC0, 0xC0, 0xFC, 0xE6, 0xE6, 0xE6, 0xE6, 0x00,
- 0x18, 0x00, 0x18, 0x38, 0x38, 0x38, 0x38, 0x00,
- 0x0C, 0x00, 0x0C, 0x1C, 0x1C, 0x1C, 0x1C, 0xF8,
- 0xC0, 0xC0, 0xCC, 0xD8, 0xF0, 0xD8, 0xCC, 0x00,
- 0x18, 0x18, 0x38, 0x38, 0x38, 0x38, 0x38, 0x00,
- 0x00, 0x00, 0xFC, 0xD6, 0xD6, 0xD6, 0xD6, 0x00,
- 0x00, 0x00, 0xFC, 0xE6, 0xE6, 0xE6, 0xE6, 0x00,
- 0x00, 0x00, 0x7C, 0xE6, 0xE6, 0xE6, 0x7C, 0x00,
- 0x00, 0x00, 0xFC, 0xE6, 0xE6, 0xFC, 0xE0, 0xE0,
- 0x00, 0x00, 0x7E, 0xCE, 0xCE, 0x7E, 0x0E, 0x0E,
- 0x00, 0x00, 0xFC, 0xE6, 0xE0, 0xE0, 0xE0, 0x00,
- 0x00, 0x00, 0x7E, 0xE0, 0x7C, 0x0E, 0xFC, 0x00,
- 0x18, 0x18, 0x7E, 0x38, 0x38, 0x38, 0x38, 0x00,
- 0x00, 0x00, 0xE6, 0xE6, 0xE6, 0xE6, 0x7E, 0x00,
- 0x00, 0x00, 0xE6, 0xE6, 0xE6, 0x6C, 0x38, 0x00,
- 0x00, 0x00, 0xD6, 0xD6, 0xD6, 0xD6, 0xFC, 0x00,
- 0x00, 0x00, 0xE6, 0x7C, 0x38, 0x7C, 0xCE, 0x00,
- 0x00, 0x00, 0xCE, 0xCE, 0xCE, 0x7E, 0x0E, 0xFC,
- 0x00, 0x00, 0xFE, 0x1C, 0x38, 0x70, 0xFE, 0x00,
- 0x0C, 0x18, 0x18, 0x30, 0x18, 0x18, 0x0C, 0x00,
- 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
- 0x60, 0x30, 0x30, 0x18, 0x30, 0x30, 0x60, 0x00,
- 0x70, 0xDB, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x10, 0x28, 0x44, 0xFE, 0x00, 0x00,
-
-};
diff --git a/src/font.lst b/src/font.lst
deleted file mode 100644
index 5d71db9..0000000
--- a/src/font.lst
+++ /dev/null
@@ -1,816 +0,0 @@
- 1 ;--------------------------------------------------------
- 2 ; File Created by SDCC : free open source ANSI-C Compiler
- 3 ; Version 3.8.0 #10562 (Linux)
- 4 ;--------------------------------------------------------
- 5 .module font
- 6 .optsdcc -mz80
- 7
- 8 ;--------------------------------------------------------
- 9 ; Public variables in this module
- 10 ;--------------------------------------------------------
- 11 .globl _font
- 12 ;--------------------------------------------------------
- 13 ; special function registers
- 14 ;--------------------------------------------------------
- 15 ;--------------------------------------------------------
- 16 ; ram data
- 17 ;--------------------------------------------------------
- 18 .area _DATA
- 19 ;--------------------------------------------------------
- 20 ; ram data
- 21 ;--------------------------------------------------------
- 22 .area _INITIALIZED
- 0000 23 _font::
- 0000 24 .ds 768
- 25 ;--------------------------------------------------------
- 26 ; absolute external ram data
- 27 ;--------------------------------------------------------
- 28 .area _DABS (ABS)
- 29 ;--------------------------------------------------------
- 30 ; global & static initialisations
- 31 ;--------------------------------------------------------
- 32 .area _HOME
- 33 .area _GSINIT
- 34 .area _GSFINAL
- 35 .area _GSINIT
- 36 ;--------------------------------------------------------
- 37 ; Home
- 38 ;--------------------------------------------------------
- 39 .area _HOME
- 40 .area _HOME
- 41 ;--------------------------------------------------------
- 42 ; code
- 43 ;--------------------------------------------------------
- 44 .area _CODE
- 45 .area _CODE
- 46 .area _INITIALIZER
- 0000 47 __xinit__font:
- 0000 00 48 .db #0x00 ; 0
- 0001 00 49 .db #0x00 ; 0
- 0002 00 50 .db #0x00 ; 0
- 0003 00 51 .db #0x00 ; 0
- 0004 00 52 .db #0x00 ; 0
- 0005 00 53 .db #0x00 ; 0
- 0006 00 54 .db #0x00 ; 0
- 0007 00 55 .db #0x00 ; 0
- 0008 30 56 .db #0x30 ; 48 '0'
- 0009 78 57 .db #0x78 ; 120 'x'
- 000A 78 58 .db #0x78 ; 120 'x'
- 000B 78 59 .db #0x78 ; 120 'x'
- 000C 30 60 .db #0x30 ; 48 '0'
- 000D 00 61 .db #0x00 ; 0
- 000E 30 62 .db #0x30 ; 48 '0'
- 000F 00 63 .db #0x00 ; 0
- 0010 CC 64 .db #0xcc ; 204
- 0011 66 65 .db #0x66 ; 102 'f'
- 0012 33 66 .db #0x33 ; 51 '3'
- 0013 00 67 .db #0x00 ; 0
- 0014 00 68 .db #0x00 ; 0
- 0015 00 69 .db #0x00 ; 0
- 0016 00 70 .db #0x00 ; 0
- 0017 00 71 .db #0x00 ; 0
- 0018 00 72 .db #0x00 ; 0
- 0019 36 73 .db #0x36 ; 54 '6'
- 001A 7F 74 .db #0x7f ; 127
- 001B 36 75 .db #0x36 ; 54 '6'
- 001C 36 76 .db #0x36 ; 54 '6'
- 001D 7F 77 .db #0x7f ; 127
- 001E 36 78 .db #0x36 ; 54 '6'
- 001F 00 79 .db #0x00 ; 0
- 0020 7C 80 .db #0x7c ; 124
- 0021 D6 81 .db #0xd6 ; 214
- 0022 D0 82 .db #0xd0 ; 208
- 0023 7C 83 .db #0x7c ; 124
- 0024 16 84 .db #0x16 ; 22
- 0025 D6 85 .db #0xd6 ; 214
- 0026 7C 86 .db #0x7c ; 124
- 0027 10 87 .db #0x10 ; 16
- 0028 E3 88 .db #0xe3 ; 227
- 0029 A6 89 .db #0xa6 ; 166
- 002A EC 90 .db #0xec ; 236
- 002B 18 91 .db #0x18 ; 24
- 002C 37 92 .db #0x37 ; 55 '7'
- 002D 65 93 .db #0x65 ; 101 'e'
- 002E C7 94 .db #0xc7 ; 199
- 002F 00 95 .db #0x00 ; 0
- 0030 38 96 .db #0x38 ; 56 '8'
- 0031 4C 97 .db #0x4c ; 76 'L'
- 0032 38 98 .db #0x38 ; 56 '8'
- 0033 45 99 .db #0x45 ; 69 'E'
- 0034 C6 100 .db #0xc6 ; 198
- 0035 CE 101 .db #0xce ; 206
- 0036 7A 102 .db #0x7a ; 122 'z'
- 0037 01 103 .db #0x01 ; 1
- 0038 06 104 .db #0x06 ; 6
- 0039 0C 105 .db #0x0c ; 12
- 003A 18 106 .db #0x18 ; 24
- 003B 00 107 .db #0x00 ; 0
- 003C 00 108 .db #0x00 ; 0
- 003D 00 109 .db #0x00 ; 0
- 003E 00 110 .db #0x00 ; 0
- 003F 00 111 .db #0x00 ; 0
- 0040 0C 112 .db #0x0c ; 12
- 0041 18 113 .db #0x18 ; 24
- 0042 18 114 .db #0x18 ; 24
- 0043 18 115 .db #0x18 ; 24
- 0044 18 116 .db #0x18 ; 24
- 0045 18 117 .db #0x18 ; 24
- 0046 18 118 .db #0x18 ; 24
- 0047 0C 119 .db #0x0c ; 12
- 0048 60 120 .db #0x60 ; 96
- 0049 30 121 .db #0x30 ; 48 '0'
- 004A 30 122 .db #0x30 ; 48 '0'
- 004B 30 123 .db #0x30 ; 48 '0'
- 004C 30 124 .db #0x30 ; 48 '0'
- 004D 30 125 .db #0x30 ; 48 '0'
- 004E 30 126 .db #0x30 ; 48 '0'
- 004F 60 127 .db #0x60 ; 96
- 0050 10 128 .db #0x10 ; 16
- 0051 54 129 .db #0x54 ; 84 'T'
- 0052 38 130 .db #0x38 ; 56 '8'
- 0053 FE 131 .db #0xfe ; 254
- 0054 38 132 .db #0x38 ; 56 '8'
- 0055 54 133 .db #0x54 ; 84 'T'
- 0056 10 134 .db #0x10 ; 16
- 0057 00 135 .db #0x00 ; 0
- 0058 00 136 .db #0x00 ; 0
- 0059 18 137 .db #0x18 ; 24
- 005A 18 138 .db #0x18 ; 24
- 005B 7E 139 .db #0x7e ; 126
- 005C 18 140 .db #0x18 ; 24
- 005D 18 141 .db #0x18 ; 24
- 005E 00 142 .db #0x00 ; 0
- 005F 00 143 .db #0x00 ; 0
- 0060 00 144 .db #0x00 ; 0
- 0061 00 145 .db #0x00 ; 0
- 0062 00 146 .db #0x00 ; 0
- 0063 00 147 .db #0x00 ; 0
- 0064 00 148 .db #0x00 ; 0
- 0065 00 149 .db #0x00 ; 0
- 0066 18 150 .db #0x18 ; 24
- 0067 30 151 .db #0x30 ; 48 '0'
- 0068 00 152 .db #0x00 ; 0
- 0069 00 153 .db #0x00 ; 0
- 006A 00 154 .db #0x00 ; 0
- 006B 7E 155 .db #0x7e ; 126
- 006C 00 156 .db #0x00 ; 0
- 006D 00 157 .db #0x00 ; 0
- 006E 00 158 .db #0x00 ; 0
- 006F 00 159 .db #0x00 ; 0
- 0070 00 160 .db #0x00 ; 0
- 0071 00 161 .db #0x00 ; 0
- 0072 00 162 .db #0x00 ; 0
- 0073 00 163 .db #0x00 ; 0
- 0074 00 164 .db #0x00 ; 0
- 0075 00 165 .db #0x00 ; 0
- 0076 30 166 .db #0x30 ; 48 '0'
- 0077 00 167 .db #0x00 ; 0
- 0078 00 168 .db #0x00 ; 0
- 0079 03 169 .db #0x03 ; 3
- 007A 06 170 .db #0x06 ; 6
- 007B 0C 171 .db #0x0c ; 12
- 007C 18 172 .db #0x18 ; 24
- 007D 30 173 .db #0x30 ; 48 '0'
- 007E 60 174 .db #0x60 ; 96
- 007F 00 175 .db #0x00 ; 0
- 0080 7C 176 .db #0x7c ; 124
- 0081 CE 177 .db #0xce ; 206
- 0082 DE 178 .db #0xde ; 222
- 0083 FE 179 .db #0xfe ; 254
- 0084 EE 180 .db #0xee ; 238
- 0085 CE 181 .db #0xce ; 206
- 0086 7C 182 .db #0x7c ; 124
- 0087 00 183 .db #0x00 ; 0
- 0088 1C 184 .db #0x1c ; 28
- 0089 3C 185 .db #0x3c ; 60
- 008A 1C 186 .db #0x1c ; 28
- 008B 1C 187 .db #0x1c ; 28
- 008C 1C 188 .db #0x1c ; 28
- 008D 1C 189 .db #0x1c ; 28
- 008E 1C 190 .db #0x1c ; 28
- 008F 00 191 .db #0x00 ; 0
- 0090 7C 192 .db #0x7c ; 124
- 0091 CE 193 .db #0xce ; 206
- 0092 0E 194 .db #0x0e ; 14
- 0093 1C 195 .db #0x1c ; 28
- 0094 38 196 .db #0x38 ; 56 '8'
- 0095 70 197 .db #0x70 ; 112 'p'
- 0096 FE 198 .db #0xfe ; 254
- 0097 00 199 .db #0x00 ; 0
- 0098 7C 200 .db #0x7c ; 124
- 0099 CE 201 .db #0xce ; 206
- 009A 0E 202 .db #0x0e ; 14
- 009B 3C 203 .db #0x3c ; 60
- 009C 0E 204 .db #0x0e ; 14
- 009D CE 205 .db #0xce ; 206
- 009E 7C 206 .db #0x7c ; 124
- 009F 00 207 .db #0x00 ; 0
- 00A0 CE 208 .db #0xce ; 206
- 00A1 CE 209 .db #0xce ; 206
- 00A2 CE 210 .db #0xce ; 206
- 00A3 CE 211 .db #0xce ; 206
- 00A4 FE 212 .db #0xfe ; 254
- 00A5 0E 213 .db #0x0e ; 14
- 00A6 0E 214 .db #0x0e ; 14
- 00A7 00 215 .db #0x00 ; 0
- 00A8 FE 216 .db #0xfe ; 254
- 00A9 E0 217 .db #0xe0 ; 224
- 00AA E0 218 .db #0xe0 ; 224
- 00AB FC 219 .db #0xfc ; 252
- 00AC 0E 220 .db #0x0e ; 14
- 00AD 0E 221 .db #0x0e ; 14
- 00AE FC 222 .db #0xfc ; 252
- 00AF 00 223 .db #0x00 ; 0
- 00B0 7C 224 .db #0x7c ; 124
- 00B1 E6 225 .db #0xe6 ; 230
- 00B2 E0 226 .db #0xe0 ; 224
- 00B3 FC 227 .db #0xfc ; 252
- 00B4 E6 228 .db #0xe6 ; 230
- 00B5 E6 229 .db #0xe6 ; 230
- 00B6 7C 230 .db #0x7c ; 124
- 00B7 00 231 .db #0x00 ; 0
- 00B8 FE 232 .db #0xfe ; 254
- 00B9 06 233 .db #0x06 ; 6
- 00BA 0E 234 .db #0x0e ; 14
- 00BB 1C 235 .db #0x1c ; 28
- 00BC 38 236 .db #0x38 ; 56 '8'
- 00BD 38 237 .db #0x38 ; 56 '8'
- 00BE 38 238 .db #0x38 ; 56 '8'
- 00BF 00 239 .db #0x00 ; 0
- 00C0 7C 240 .db #0x7c ; 124
- 00C1 E6 241 .db #0xe6 ; 230
- 00C2 E6 242 .db #0xe6 ; 230
- 00C3 7C 243 .db #0x7c ; 124
- 00C4 E6 244 .db #0xe6 ; 230
- 00C5 E6 245 .db #0xe6 ; 230
- 00C6 7C 246 .db #0x7c ; 124
- 00C7 00 247 .db #0x00 ; 0
- 00C8 7C 248 .db #0x7c ; 124
- 00C9 CE 249 .db #0xce ; 206
- 00CA CE 250 .db #0xce ; 206
- 00CB 7E 251 .db #0x7e ; 126
- 00CC 0E 252 .db #0x0e ; 14
- 00CD 0E 253 .db #0x0e ; 14
- 00CE FC 254 .db #0xfc ; 252
- 00CF 00 255 .db #0x00 ; 0
- 00D0 00 256 .db #0x00 ; 0
- 00D1 30 257 .db #0x30 ; 48 '0'
- 00D2 00 258 .db #0x00 ; 0
- 00D3 00 259 .db #0x00 ; 0
- 00D4 00 260 .db #0x00 ; 0
- 00D5 30 261 .db #0x30 ; 48 '0'
- 00D6 00 262 .db #0x00 ; 0
- 00D7 00 263 .db #0x00 ; 0
- 00D8 00 264 .db #0x00 ; 0
- 00D9 30 265 .db #0x30 ; 48 '0'
- 00DA 00 266 .db #0x00 ; 0
- 00DB 00 267 .db #0x00 ; 0
- 00DC 00 268 .db #0x00 ; 0
- 00DD 30 269 .db #0x30 ; 48 '0'
- 00DE 60 270 .db #0x60 ; 96
- 00DF 00 271 .db #0x00 ; 0
- 00E0 00 272 .db #0x00 ; 0
- 00E1 18 273 .db #0x18 ; 24
- 00E2 30 274 .db #0x30 ; 48 '0'
- 00E3 60 275 .db #0x60 ; 96
- 00E4 30 276 .db #0x30 ; 48 '0'
- 00E5 18 277 .db #0x18 ; 24
- 00E6 00 278 .db #0x00 ; 0
- 00E7 00 279 .db #0x00 ; 0
- 00E8 00 280 .db #0x00 ; 0
- 00E9 00 281 .db #0x00 ; 0
- 00EA 7E 282 .db #0x7e ; 126
- 00EB 00 283 .db #0x00 ; 0
- 00EC 7E 284 .db #0x7e ; 126
- 00ED 00 285 .db #0x00 ; 0
- 00EE 00 286 .db #0x00 ; 0
- 00EF 00 287 .db #0x00 ; 0
- 00F0 00 288 .db #0x00 ; 0
- 00F1 30 289 .db #0x30 ; 48 '0'
- 00F2 18 290 .db #0x18 ; 24
- 00F3 0C 291 .db #0x0c ; 12
- 00F4 18 292 .db #0x18 ; 24
- 00F5 30 293 .db #0x30 ; 48 '0'
- 00F6 00 294 .db #0x00 ; 0
- 00F7 00 295 .db #0x00 ; 0
- 00F8 7C 296 .db #0x7c ; 124
- 00F9 C6 297 .db #0xc6 ; 198
- 00FA 0E 298 .db #0x0e ; 14
- 00FB 1C 299 .db #0x1c ; 28
- 00FC 38 300 .db #0x38 ; 56 '8'
- 00FD 00 301 .db #0x00 ; 0
- 00FE 38 302 .db #0x38 ; 56 '8'
- 00FF 00 303 .db #0x00 ; 0
- 0100 7C 304 .db #0x7c ; 124
- 0101 C6 305 .db #0xc6 ; 198
- 0102 DE 306 .db #0xde ; 222
- 0103 DE 307 .db #0xde ; 222
- 0104 DC 308 .db #0xdc ; 220
- 0105 C0 309 .db #0xc0 ; 192
- 0106 7C 310 .db #0x7c ; 124
- 0107 00 311 .db #0x00 ; 0
- 0108 7C 312 .db #0x7c ; 124
- 0109 E6 313 .db #0xe6 ; 230
- 010A E6 314 .db #0xe6 ; 230
- 010B E6 315 .db #0xe6 ; 230
- 010C FE 316 .db #0xfe ; 254
- 010D E6 317 .db #0xe6 ; 230
- 010E E6 318 .db #0xe6 ; 230
- 010F 00 319 .db #0x00 ; 0
- 0110 FC 320 .db #0xfc ; 252
- 0111 E6 321 .db #0xe6 ; 230
- 0112 E6 322 .db #0xe6 ; 230
- 0113 FC 323 .db #0xfc ; 252
- 0114 E6 324 .db #0xe6 ; 230
- 0115 E6 325 .db #0xe6 ; 230
- 0116 FC 326 .db #0xfc ; 252
- 0117 00 327 .db #0x00 ; 0
- 0118 7C 328 .db #0x7c ; 124
- 0119 E6 329 .db #0xe6 ; 230
- 011A E0 330 .db #0xe0 ; 224
- 011B E0 331 .db #0xe0 ; 224
- 011C E6 332 .db #0xe6 ; 230
- 011D E6 333 .db #0xe6 ; 230
- 011E 7C 334 .db #0x7c ; 124
- 011F 00 335 .db #0x00 ; 0
- 0120 FC 336 .db #0xfc ; 252
- 0121 E6 337 .db #0xe6 ; 230
- 0122 E6 338 .db #0xe6 ; 230
- 0123 E6 339 .db #0xe6 ; 230
- 0124 E6 340 .db #0xe6 ; 230
- 0125 E6 341 .db #0xe6 ; 230
- 0126 FC 342 .db #0xfc ; 252
- 0127 00 343 .db #0x00 ; 0
- 0128 FE 344 .db #0xfe ; 254
- 0129 E0 345 .db #0xe0 ; 224
- 012A E0 346 .db #0xe0 ; 224
- 012B FE 347 .db #0xfe ; 254
- 012C E0 348 .db #0xe0 ; 224
- 012D E0 349 .db #0xe0 ; 224
- 012E FE 350 .db #0xfe ; 254
- 012F 00 351 .db #0x00 ; 0
- 0130 FE 352 .db #0xfe ; 254
- 0131 E0 353 .db #0xe0 ; 224
- 0132 E0 354 .db #0xe0 ; 224
- 0133 FE 355 .db #0xfe ; 254
- 0134 E0 356 .db #0xe0 ; 224
- 0135 E0 357 .db #0xe0 ; 224
- 0136 E0 358 .db #0xe0 ; 224
- 0137 00 359 .db #0x00 ; 0
- 0138 7C 360 .db #0x7c ; 124
- 0139 E6 361 .db #0xe6 ; 230
- 013A E0 362 .db #0xe0 ; 224
- 013B EE 363 .db #0xee ; 238
- 013C E6 364 .db #0xe6 ; 230
- 013D E6 365 .db #0xe6 ; 230
- 013E 7C 366 .db #0x7c ; 124
- 013F 00 367 .db #0x00 ; 0
- 0140 E6 368 .db #0xe6 ; 230
- 0141 E6 369 .db #0xe6 ; 230
- 0142 E6 370 .db #0xe6 ; 230
- 0143 FE 371 .db #0xfe ; 254
- 0144 E6 372 .db #0xe6 ; 230
- 0145 E6 373 .db #0xe6 ; 230
- 0146 E6 374 .db #0xe6 ; 230
- 0147 00 375 .db #0x00 ; 0
- 0148 38 376 .db #0x38 ; 56 '8'
- 0149 38 377 .db #0x38 ; 56 '8'
- 014A 38 378 .db #0x38 ; 56 '8'
- 014B 38 379 .db #0x38 ; 56 '8'
- 014C 38 380 .db #0x38 ; 56 '8'
- 014D 38 381 .db #0x38 ; 56 '8'
- 014E 38 382 .db #0x38 ; 56 '8'
- 014F 00 383 .db #0x00 ; 0
- 0150 0E 384 .db #0x0e ; 14
- 0151 0E 385 .db #0x0e ; 14
- 0152 0E 386 .db #0x0e ; 14
- 0153 0E 387 .db #0x0e ; 14
- 0154 CE 388 .db #0xce ; 206
- 0155 CE 389 .db #0xce ; 206
- 0156 7C 390 .db #0x7c ; 124
- 0157 00 391 .db #0x00 ; 0
- 0158 E6 392 .db #0xe6 ; 230
- 0159 EC 393 .db #0xec ; 236
- 015A F8 394 .db #0xf8 ; 248
- 015B F0 395 .db #0xf0 ; 240
- 015C F8 396 .db #0xf8 ; 248
- 015D EC 397 .db #0xec ; 236
- 015E E6 398 .db #0xe6 ; 230
- 015F 00 399 .db #0x00 ; 0
- 0160 E0 400 .db #0xe0 ; 224
- 0161 E0 401 .db #0xe0 ; 224
- 0162 E0 402 .db #0xe0 ; 224
- 0163 E0 403 .db #0xe0 ; 224
- 0164 E0 404 .db #0xe0 ; 224
- 0165 E0 405 .db #0xe0 ; 224
- 0166 FE 406 .db #0xfe ; 254
- 0167 00 407 .db #0x00 ; 0
- 0168 C6 408 .db #0xc6 ; 198
- 0169 EE 409 .db #0xee ; 238
- 016A FE 410 .db #0xfe ; 254
- 016B D6 411 .db #0xd6 ; 214
- 016C C6 412 .db #0xc6 ; 198
- 016D C6 413 .db #0xc6 ; 198
- 016E C6 414 .db #0xc6 ; 198
- 016F 00 415 .db #0x00 ; 0
- 0170 C6 416 .db #0xc6 ; 198
- 0171 E6 417 .db #0xe6 ; 230
- 0172 F6 418 .db #0xf6 ; 246
- 0173 FE 419 .db #0xfe ; 254
- 0174 EE 420 .db #0xee ; 238
- 0175 E6 421 .db #0xe6 ; 230
- 0176 E6 422 .db #0xe6 ; 230
- 0177 00 423 .db #0x00 ; 0
- 0178 7C 424 .db #0x7c ; 124
- 0179 E6 425 .db #0xe6 ; 230
- 017A E6 426 .db #0xe6 ; 230
- 017B E6 427 .db #0xe6 ; 230
- 017C E6 428 .db #0xe6 ; 230
- 017D E6 429 .db #0xe6 ; 230
- 017E 7C 430 .db #0x7c ; 124
- 017F 00 431 .db #0x00 ; 0
- 0180 FC 432 .db #0xfc ; 252
- 0181 E6 433 .db #0xe6 ; 230
- 0182 E6 434 .db #0xe6 ; 230
- 0183 FC 435 .db #0xfc ; 252
- 0184 E0 436 .db #0xe0 ; 224
- 0185 E0 437 .db #0xe0 ; 224
- 0186 E0 438 .db #0xe0 ; 224
- 0187 00 439 .db #0x00 ; 0
- 0188 7C 440 .db #0x7c ; 124
- 0189 E6 441 .db #0xe6 ; 230
- 018A E6 442 .db #0xe6 ; 230
- 018B E6 443 .db #0xe6 ; 230
- 018C E6 444 .db #0xe6 ; 230
- 018D EA 445 .db #0xea ; 234
- 018E 74 446 .db #0x74 ; 116 't'
- 018F 02 447 .db #0x02 ; 2
- 0190 FC 448 .db #0xfc ; 252
- 0191 E6 449 .db #0xe6 ; 230
- 0192 E6 450 .db #0xe6 ; 230
- 0193 FC 451 .db #0xfc ; 252
- 0194 E6 452 .db #0xe6 ; 230
- 0195 E6 453 .db #0xe6 ; 230
- 0196 E6 454 .db #0xe6 ; 230
- 0197 00 455 .db #0x00 ; 0
- 0198 7C 456 .db #0x7c ; 124
- 0199 E6 457 .db #0xe6 ; 230
- 019A E0 458 .db #0xe0 ; 224
- 019B 7C 459 .db #0x7c ; 124
- 019C 0E 460 .db #0x0e ; 14
- 019D CE 461 .db #0xce ; 206
- 019E 7C 462 .db #0x7c ; 124
- 019F 00 463 .db #0x00 ; 0
- 01A0 FE 464 .db #0xfe ; 254
- 01A1 38 465 .db #0x38 ; 56 '8'
- 01A2 38 466 .db #0x38 ; 56 '8'
- 01A3 38 467 .db #0x38 ; 56 '8'
- 01A4 38 468 .db #0x38 ; 56 '8'
- 01A5 38 469 .db #0x38 ; 56 '8'
- 01A6 38 470 .db #0x38 ; 56 '8'
- 01A7 00 471 .db #0x00 ; 0
- 01A8 E6 472 .db #0xe6 ; 230
- 01A9 E6 473 .db #0xe6 ; 230
- 01AA E6 474 .db #0xe6 ; 230
- 01AB E6 475 .db #0xe6 ; 230
- 01AC E6 476 .db #0xe6 ; 230
- 01AD E6 477 .db #0xe6 ; 230
- 01AE 7C 478 .db #0x7c ; 124
- 01AF 00 479 .db #0x00 ; 0
- 01B0 E6 480 .db #0xe6 ; 230
- 01B1 E6 481 .db #0xe6 ; 230
- 01B2 E6 482 .db #0xe6 ; 230
- 01B3 E6 483 .db #0xe6 ; 230
- 01B4 E6 484 .db #0xe6 ; 230
- 01B5 7C 485 .db #0x7c ; 124
- 01B6 38 486 .db #0x38 ; 56 '8'
- 01B7 00 487 .db #0x00 ; 0
- 01B8 C6 488 .db #0xc6 ; 198
- 01B9 C6 489 .db #0xc6 ; 198
- 01BA C6 490 .db #0xc6 ; 198
- 01BB D6 491 .db #0xd6 ; 214
- 01BC D6 492 .db #0xd6 ; 214
- 01BD FE 493 .db #0xfe ; 254
- 01BE FC 494 .db #0xfc ; 252
- 01BF 00 495 .db #0x00 ; 0
- 01C0 E3 496 .db #0xe3 ; 227
- 01C1 76 497 .db #0x76 ; 118 'v'
- 01C2 3C 498 .db #0x3c ; 60
- 01C3 18 499 .db #0x18 ; 24
- 01C4 3C 500 .db #0x3c ; 60
- 01C5 6E 501 .db #0x6e ; 110 'n'
- 01C6 C7 502 .db #0xc7 ; 199
- 01C7 00 503 .db #0x00 ; 0
- 01C8 E6 504 .db #0xe6 ; 230
- 01C9 E6 505 .db #0xe6 ; 230
- 01CA 7C 506 .db #0x7c ; 124
- 01CB 38 507 .db #0x38 ; 56 '8'
- 01CC 38 508 .db #0x38 ; 56 '8'
- 01CD 38 509 .db #0x38 ; 56 '8'
- 01CE 38 510 .db #0x38 ; 56 '8'
- 01CF 00 511 .db #0x00 ; 0
- 01D0 FE 512 .db #0xfe ; 254
- 01D1 0E 513 .db #0x0e ; 14
- 01D2 1C 514 .db #0x1c ; 28
- 01D3 38 515 .db #0x38 ; 56 '8'
- 01D4 70 516 .db #0x70 ; 112 'p'
- 01D5 E0 517 .db #0xe0 ; 224
- 01D6 FE 518 .db #0xfe ; 254
- 01D7 00 519 .db #0x00 ; 0
- 01D8 1C 520 .db #0x1c ; 28
- 01D9 18 521 .db #0x18 ; 24
- 01DA 18 522 .db #0x18 ; 24
- 01DB 18 523 .db #0x18 ; 24
- 01DC 18 524 .db #0x18 ; 24
- 01DD 18 525 .db #0x18 ; 24
- 01DE 18 526 .db #0x18 ; 24
- 01DF 1C 527 .db #0x1c ; 28
- 01E0 00 528 .db #0x00 ; 0
- 01E1 60 529 .db #0x60 ; 96
- 01E2 30 530 .db #0x30 ; 48 '0'
- 01E3 18 531 .db #0x18 ; 24
- 01E4 0C 532 .db #0x0c ; 12
- 01E5 06 533 .db #0x06 ; 6
- 01E6 03 534 .db #0x03 ; 3
- 01E7 00 535 .db #0x00 ; 0
- 01E8 70 536 .db #0x70 ; 112 'p'
- 01E9 30 537 .db #0x30 ; 48 '0'
- 01EA 30 538 .db #0x30 ; 48 '0'
- 01EB 30 539 .db #0x30 ; 48 '0'
- 01EC 30 540 .db #0x30 ; 48 '0'
- 01ED 30 541 .db #0x30 ; 48 '0'
- 01EE 30 542 .db #0x30 ; 48 '0'
- 01EF 70 543 .db #0x70 ; 112 'p'
- 01F0 18 544 .db #0x18 ; 24
- 01F1 3C 545 .db #0x3c ; 60
- 01F2 66 546 .db #0x66 ; 102 'f'
- 01F3 C3 547 .db #0xc3 ; 195
- 01F4 00 548 .db #0x00 ; 0
- 01F5 00 549 .db #0x00 ; 0
- 01F6 00 550 .db #0x00 ; 0
- 01F7 00 551 .db #0x00 ; 0
- 01F8 00 552 .db #0x00 ; 0
- 01F9 00 553 .db #0x00 ; 0
- 01FA 00 554 .db #0x00 ; 0
- 01FB 00 555 .db #0x00 ; 0
- 01FC 00 556 .db #0x00 ; 0
- 01FD 00 557 .db #0x00 ; 0
- 01FE 00 558 .db #0x00 ; 0
- 01FF FF 559 .db #0xff ; 255
- 0200 30 560 .db #0x30 ; 48 '0'
- 0201 18 561 .db #0x18 ; 24
- 0202 0C 562 .db #0x0c ; 12
- 0203 00 563 .db #0x00 ; 0
- 0204 00 564 .db #0x00 ; 0
- 0205 00 565 .db #0x00 ; 0
- 0206 00 566 .db #0x00 ; 0
- 0207 00 567 .db #0x00 ; 0
- 0208 00 568 .db #0x00 ; 0
- 0209 00 569 .db #0x00 ; 0
- 020A 7C 570 .db #0x7c ; 124
- 020B 0E 571 .db #0x0e ; 14
- 020C 7E 572 .db #0x7e ; 126
- 020D CE 573 .db #0xce ; 206
- 020E 7E 574 .db #0x7e ; 126
- 020F 00 575 .db #0x00 ; 0
- 0210 C0 576 .db #0xc0 ; 192
- 0211 C0 577 .db #0xc0 ; 192
- 0212 FC 578 .db #0xfc ; 252
- 0213 E6 579 .db #0xe6 ; 230
- 0214 E6 580 .db #0xe6 ; 230
- 0215 E6 581 .db #0xe6 ; 230
- 0216 FC 582 .db #0xfc ; 252
- 0217 00 583 .db #0x00 ; 0
- 0218 00 584 .db #0x00 ; 0
- 0219 00 585 .db #0x00 ; 0
- 021A 7C 586 .db #0x7c ; 124
- 021B E6 587 .db #0xe6 ; 230
- 021C E0 588 .db #0xe0 ; 224
- 021D E6 589 .db #0xe6 ; 230
- 021E 7C 590 .db #0x7c ; 124
- 021F 00 591 .db #0x00 ; 0
- 0220 06 592 .db #0x06 ; 6
- 0221 06 593 .db #0x06 ; 6
- 0222 7E 594 .db #0x7e ; 126
- 0223 CE 595 .db #0xce ; 206
- 0224 CE 596 .db #0xce ; 206
- 0225 CE 597 .db #0xce ; 206
- 0226 7E 598 .db #0x7e ; 126
- 0227 00 599 .db #0x00 ; 0
- 0228 00 600 .db #0x00 ; 0
- 0229 00 601 .db #0x00 ; 0
- 022A 7C 602 .db #0x7c ; 124
- 022B E6 603 .db #0xe6 ; 230
- 022C FE 604 .db #0xfe ; 254
- 022D E0 605 .db #0xe0 ; 224
- 022E 7E 606 .db #0x7e ; 126
- 022F 00 607 .db #0x00 ; 0
- 0230 3C 608 .db #0x3c ; 60
- 0231 70 609 .db #0x70 ; 112 'p'
- 0232 70 610 .db #0x70 ; 112 'p'
- 0233 FC 611 .db #0xfc ; 252
- 0234 70 612 .db #0x70 ; 112 'p'
- 0235 70 613 .db #0x70 ; 112 'p'
- 0236 70 614 .db #0x70 ; 112 'p'
- 0237 00 615 .db #0x00 ; 0
- 0238 00 616 .db #0x00 ; 0
- 0239 00 617 .db #0x00 ; 0
- 023A 7C 618 .db #0x7c ; 124
- 023B CE 619 .db #0xce ; 206
- 023C CE 620 .db #0xce ; 206
- 023D 7E 621 .db #0x7e ; 126
- 023E 0E 622 .db #0x0e ; 14
- 023F 7C 623 .db #0x7c ; 124
- 0240 C0 624 .db #0xc0 ; 192
- 0241 C0 625 .db #0xc0 ; 192
- 0242 FC 626 .db #0xfc ; 252
- 0243 E6 627 .db #0xe6 ; 230
- 0244 E6 628 .db #0xe6 ; 230
- 0245 E6 629 .db #0xe6 ; 230
- 0246 E6 630 .db #0xe6 ; 230
- 0247 00 631 .db #0x00 ; 0
- 0248 18 632 .db #0x18 ; 24
- 0249 00 633 .db #0x00 ; 0
- 024A 18 634 .db #0x18 ; 24
- 024B 38 635 .db #0x38 ; 56 '8'
- 024C 38 636 .db #0x38 ; 56 '8'
- 024D 38 637 .db #0x38 ; 56 '8'
- 024E 38 638 .db #0x38 ; 56 '8'
- 024F 00 639 .db #0x00 ; 0
- 0250 0C 640 .db #0x0c ; 12
- 0251 00 641 .db #0x00 ; 0
- 0252 0C 642 .db #0x0c ; 12
- 0253 1C 643 .db #0x1c ; 28
- 0254 1C 644 .db #0x1c ; 28
- 0255 1C 645 .db #0x1c ; 28
- 0256 1C 646 .db #0x1c ; 28
- 0257 F8 647 .db #0xf8 ; 248
- 0258 C0 648 .db #0xc0 ; 192
- 0259 C0 649 .db #0xc0 ; 192
- 025A CC 650 .db #0xcc ; 204
- 025B D8 651 .db #0xd8 ; 216
- 025C F0 652 .db #0xf0 ; 240
- 025D D8 653 .db #0xd8 ; 216
- 025E CC 654 .db #0xcc ; 204
- 025F 00 655 .db #0x00 ; 0
- 0260 18 656 .db #0x18 ; 24
- 0261 18 657 .db #0x18 ; 24
- 0262 38 658 .db #0x38 ; 56 '8'
- 0263 38 659 .db #0x38 ; 56 '8'
- 0264 38 660 .db #0x38 ; 56 '8'
- 0265 38 661 .db #0x38 ; 56 '8'
- 0266 38 662 .db #0x38 ; 56 '8'
- 0267 00 663 .db #0x00 ; 0
- 0268 00 664 .db #0x00 ; 0
- 0269 00 665 .db #0x00 ; 0
- 026A FC 666 .db #0xfc ; 252
- 026B D6 667 .db #0xd6 ; 214
- 026C D6 668 .db #0xd6 ; 214
- 026D D6 669 .db #0xd6 ; 214
- 026E D6 670 .db #0xd6 ; 214
- 026F 00 671 .db #0x00 ; 0
- 0270 00 672 .db #0x00 ; 0
- 0271 00 673 .db #0x00 ; 0
- 0272 FC 674 .db #0xfc ; 252
- 0273 E6 675 .db #0xe6 ; 230
- 0274 E6 676 .db #0xe6 ; 230
- 0275 E6 677 .db #0xe6 ; 230
- 0276 E6 678 .db #0xe6 ; 230
- 0277 00 679 .db #0x00 ; 0
- 0278 00 680 .db #0x00 ; 0
- 0279 00 681 .db #0x00 ; 0
- 027A 7C 682 .db #0x7c ; 124
- 027B E6 683 .db #0xe6 ; 230
- 027C E6 684 .db #0xe6 ; 230
- 027D E6 685 .db #0xe6 ; 230
- 027E 7C 686 .db #0x7c ; 124
- 027F 00 687 .db #0x00 ; 0
- 0280 00 688 .db #0x00 ; 0
- 0281 00 689 .db #0x00 ; 0
- 0282 FC 690 .db #0xfc ; 252
- 0283 E6 691 .db #0xe6 ; 230
- 0284 E6 692 .db #0xe6 ; 230
- 0285 FC 693 .db #0xfc ; 252
- 0286 E0 694 .db #0xe0 ; 224
- 0287 E0 695 .db #0xe0 ; 224
- 0288 00 696 .db #0x00 ; 0
- 0289 00 697 .db #0x00 ; 0
- 028A 7E 698 .db #0x7e ; 126
- 028B CE 699 .db #0xce ; 206
- 028C CE 700 .db #0xce ; 206
- 028D 7E 701 .db #0x7e ; 126
- 028E 0E 702 .db #0x0e ; 14
- 028F 0E 703 .db #0x0e ; 14
- 0290 00 704 .db #0x00 ; 0
- 0291 00 705 .db #0x00 ; 0
- 0292 FC 706 .db #0xfc ; 252
- 0293 E6 707 .db #0xe6 ; 230
- 0294 E0 708 .db #0xe0 ; 224
- 0295 E0 709 .db #0xe0 ; 224
- 0296 E0 710 .db #0xe0 ; 224
- 0297 00 711 .db #0x00 ; 0
- 0298 00 712 .db #0x00 ; 0
- 0299 00 713 .db #0x00 ; 0
- 029A 7E 714 .db #0x7e ; 126
- 029B E0 715 .db #0xe0 ; 224
- 029C 7C 716 .db #0x7c ; 124
- 029D 0E 717 .db #0x0e ; 14
- 029E FC 718 .db #0xfc ; 252
- 029F 00 719 .db #0x00 ; 0
- 02A0 18 720 .db #0x18 ; 24
- 02A1 18 721 .db #0x18 ; 24
- 02A2 7E 722 .db #0x7e ; 126
- 02A3 38 723 .db #0x38 ; 56 '8'
- 02A4 38 724 .db #0x38 ; 56 '8'
- 02A5 38 725 .db #0x38 ; 56 '8'
- 02A6 38 726 .db #0x38 ; 56 '8'
- 02A7 00 727 .db #0x00 ; 0
- 02A8 00 728 .db #0x00 ; 0
- 02A9 00 729 .db #0x00 ; 0
- 02AA E6 730 .db #0xe6 ; 230
- 02AB E6 731 .db #0xe6 ; 230
- 02AC E6 732 .db #0xe6 ; 230
- 02AD E6 733 .db #0xe6 ; 230
- 02AE 7E 734 .db #0x7e ; 126
- 02AF 00 735 .db #0x00 ; 0
- 02B0 00 736 .db #0x00 ; 0
- 02B1 00 737 .db #0x00 ; 0
- 02B2 E6 738 .db #0xe6 ; 230
- 02B3 E6 739 .db #0xe6 ; 230
- 02B4 E6 740 .db #0xe6 ; 230
- 02B5 6C 741 .db #0x6c ; 108 'l'
- 02B6 38 742 .db #0x38 ; 56 '8'
- 02B7 00 743 .db #0x00 ; 0
- 02B8 00 744 .db #0x00 ; 0
- 02B9 00 745 .db #0x00 ; 0
- 02BA D6 746 .db #0xd6 ; 214
- 02BB D6 747 .db #0xd6 ; 214
- 02BC D6 748 .db #0xd6 ; 214
- 02BD D6 749 .db #0xd6 ; 214
- 02BE FC 750 .db #0xfc ; 252
- 02BF 00 751 .db #0x00 ; 0
- 02C0 00 752 .db #0x00 ; 0
- 02C1 00 753 .db #0x00 ; 0
- 02C2 E6 754 .db #0xe6 ; 230
- 02C3 7C 755 .db #0x7c ; 124
- 02C4 38 756 .db #0x38 ; 56 '8'
- 02C5 7C 757 .db #0x7c ; 124
- 02C6 CE 758 .db #0xce ; 206
- 02C7 00 759 .db #0x00 ; 0
- 02C8 00 760 .db #0x00 ; 0
- 02C9 00 761 .db #0x00 ; 0
- 02CA CE 762 .db #0xce ; 206
- 02CB CE 763 .db #0xce ; 206
- 02CC CE 764 .db #0xce ; 206
- 02CD 7E 765 .db #0x7e ; 126
- 02CE 0E 766 .db #0x0e ; 14
- 02CF FC 767 .db #0xfc ; 252
- 02D0 00 768 .db #0x00 ; 0
- 02D1 00 769 .db #0x00 ; 0
- 02D2 FE 770 .db #0xfe ; 254
- 02D3 1C 771 .db #0x1c ; 28
- 02D4 38 772 .db #0x38 ; 56 '8'
- 02D5 70 773 .db #0x70 ; 112 'p'
- 02D6 FE 774 .db #0xfe ; 254
- 02D7 00 775 .db #0x00 ; 0
- 02D8 0C 776 .db #0x0c ; 12
- 02D9 18 777 .db #0x18 ; 24
- 02DA 18 778 .db #0x18 ; 24
- 02DB 30 779 .db #0x30 ; 48 '0'
- 02DC 18 780 .db #0x18 ; 24
- 02DD 18 781 .db #0x18 ; 24
- 02DE 0C 782 .db #0x0c ; 12
- 02DF 00 783 .db #0x00 ; 0
- 02E0 18 784 .db #0x18 ; 24
- 02E1 18 785 .db #0x18 ; 24
- 02E2 18 786 .db #0x18 ; 24
- 02E3 18 787 .db #0x18 ; 24
- 02E4 18 788 .db #0x18 ; 24
- 02E5 18 789 .db #0x18 ; 24
- 02E6 18 790 .db #0x18 ; 24
- 02E7 18 791 .db #0x18 ; 24
- 02E8 60 792 .db #0x60 ; 96
- 02E9 30 793 .db #0x30 ; 48 '0'
- 02EA 30 794 .db #0x30 ; 48 '0'
- 02EB 18 795 .db #0x18 ; 24
- 02EC 30 796 .db #0x30 ; 48 '0'
- 02ED 30 797 .db #0x30 ; 48 '0'
- 02EE 60 798 .db #0x60 ; 96
- 02EF 00 799 .db #0x00 ; 0
- 02F0 70 800 .db #0x70 ; 112 'p'
- 02F1 DB 801 .db #0xdb ; 219
- 02F2 0E 802 .db #0x0e ; 14
- 02F3 00 803 .db #0x00 ; 0
- 02F4 00 804 .db #0x00 ; 0
- 02F5 00 805 .db #0x00 ; 0
- 02F6 00 806 .db #0x00 ; 0
- 02F7 00 807 .db #0x00 ; 0
- 02F8 00 808 .db #0x00 ; 0
- 02F9 00 809 .db #0x00 ; 0
- 02FA 10 810 .db #0x10 ; 16
- 02FB 28 811 .db #0x28 ; 40
- 02FC 44 812 .db #0x44 ; 68 'D'
- 02FD FE 813 .db #0xfe ; 254
- 02FE 00 814 .db #0x00 ; 0
- 02FF 00 815 .db #0x00 ; 0
- 816 .area _CABS (ABS)
diff --git a/src/font.sym b/src/font.sym
deleted file mode 100644
index f3880c4..0000000
--- a/src/font.sym
+++ /dev/null
@@ -1,27 +0,0 @@
-ASxxxx Assembler V02.00 + NoICE + SDCC mods (Zilog Z80 / Hitachi HD64180 / ZX-Next), page 1.
-Hexadecimal [16-Bits]
-
-Symbol Table
-
- .__.$$$. = 2710 L
- .__.ABS. = 0000 G
- .__.CPU. = 0000 L
- .__.H$L. = 0000 L
- 7 __xinit__font 0000 R
- 2 _font 0000 GR
-
-ASxxxx Assembler V02.00 + NoICE + SDCC mods (Zilog Z80 / Hitachi HD64180 / ZX-Next), page 2.
-Hexadecimal [16-Bits]
-
-Area Table
-
- 0 _CODE size 0 flags 0
- 1 _DATA size 0 flags 0
- 2 _INITIALIZED size 300 flags 0
- 3 _DABS size 0 flags 8
- 4 _HOME size 0 flags 0
- 5 _GSINIT size 0 flags 0
- 6 _GSFINAL size 0 flags 0
- 7 _INITIALIZER size 300 flags 0
- 8 _CABS size 0 flags 8
-
diff --git a/sys/ascal.vhd b/sys/ascal.vhd
index a65ccc1..188d280 100644
--- a/sys/ascal.vhd
+++ b/sys/ascal.vhd
@@ -382,8 +382,9 @@ ARCHITECTURE rtl OF ascal IS
SIGNAL avl_o_vs_sync,avl_o_vs : std_logic;
SIGNAL avl_fb_ena : std_logic;
- FUNCTION buf_next(a,b : natural RANGE 0 TO 2) RETURN natural IS
+ FUNCTION buf_next(a,b : natural RANGE 0 TO 2; freeze : std_logic := '0') RETURN natural IS
BEGIN
+ IF (freeze='1') THEN RETURN a; END IF;
IF (a=0 AND b=1) OR (a=1 AND b=0) THEN RETURN 2; END IF;
IF (a=1 AND b=2) OR (a=2 AND b=1) THEN RETURN 0; END IF;
RETURN 1;
@@ -400,6 +401,7 @@ ARCHITECTURE rtl OF ascal IS
----------------------------------------------------------
-- Output
SIGNAL o_run : std_logic;
+ SIGNAL o_freeze : std_logic;
SIGNAL o_mode,o_hmode,o_vmode : unsigned(4 DOWNTO 0);
SIGNAL o_format : unsigned(5 DOWNTO 0);
SIGNAL o_fb_pal_dr : unsigned(23 DOWNTO 0);
@@ -1730,22 +1732,23 @@ BEGIN
-- Triple buffering.
-- For intelaced video, half frames are updated independently
-- Input : Toggle buffer at end of input frame
+ o_freeze <= freeze;
o_inter <=i_inter; --
o_iendframe0<=i_endframe0; --
o_iendframe02<=o_iendframe0;
IF o_iendframe0='1' AND o_iendframe02='0' THEN
- o_ibuf0<=buf_next(o_ibuf0,o_obuf0);
+ o_ibuf0<=buf_next(o_ibuf0,o_obuf0,o_freeze);
o_bufup0<='1';
END IF;
o_iendframe1<=i_endframe1; --
o_iendframe12<=o_iendframe1;
IF o_iendframe1='1' AND o_iendframe12='0' THEN
- o_ibuf1<=buf_next(o_ibuf1,o_obuf1);
+ o_ibuf1<=buf_next(o_ibuf1,o_obuf1,o_freeze);
o_bufup1<='1';
END IF;
-- Output : Change framebuffer, and image properties, at VS falling edge
IF o_vsv(1)='1' AND o_vsv(0)='0' AND o_bufup1='1' THEN
- o_obuf1<=buf_next(o_obuf1,o_ibuf1);
+ o_obuf1<=buf_next(o_obuf1,o_ibuf1,o_freeze);
o_bufup1<='0';
o_ihsize<=i_hrsize; --
o_ivsize<=i_vrsize; --
@@ -1773,7 +1776,7 @@ BEGIN
END IF;
IF o_vsv(1)='1' AND o_vsv(0)='0' AND o_bufup0='1' THEN
- o_obuf0<=buf_next(o_obuf0,o_ibuf0);
+ o_obuf0<=buf_next(o_obuf0,o_ibuf0,o_freeze);
o_bufup0<='0';
END IF;
diff --git a/sys/hps_io.v b/sys/hps_io.sv
similarity index 96%
rename from sys/hps_io.v
rename to sys/hps_io.sv
index f784a8a..79e427b 100644
--- a/sys/hps_io.v
+++ b/sys/hps_io.sv
@@ -25,14 +25,11 @@
//
// WIDE=1 for 16 bit file I/O
// VDNUM 1-4
-module hps_io #(parameter STRLEN=0, PS2DIV=0, WIDE=0, VDNUM=1, PS2WE=0)
+module hps_io #(parameter CONF_STR, CONF_STR_BRAM=1, PS2DIV=0, WIDE=0, VDNUM=1, PS2WE=0)
(
input clk_sys,
inout [45:0] HPS_BUS,
- // parameter STRLEN and the actual length of conf_str have to match
- input [(8*STRLEN)-1:0] conf_str,
-
// buttons up to 32
output reg [31:0] joystick_0,
output reg [31:0] joystick_1,
@@ -156,8 +153,6 @@ module hps_io #(parameter STRLEN=0, PS2DIV=0, WIDE=0, VDNUM=1, PS2WE=0)
assign EXT_BUS[31:16] = HPS_BUS[31:16];
assign EXT_BUS[35:33] = HPS_BUS[35:33];
-localparam MAX_W = $clog2((32 > (STRLEN+2)) ? 32 : (STRLEN+2))-1;
-
localparam DW = (WIDE) ? 15 : 7;
localparam AW = (WIDE) ? 7 : 8;
localparam VD = VDNUM-1;
@@ -221,6 +216,19 @@ video_calc video_calc
/////////////////////////////////////////////////////////
+localparam STRLEN = $size(CONF_STR)>>3;
+localparam MAX_W = $clog2((32 > (STRLEN+2)) ? 32 : (STRLEN+2))-1;
+
+wire [7:0] conf_byte;
+generate
+ if(CONF_STR_BRAM) begin
+ confstr_rom #(CONF_STR, STRLEN) confstr_rom(.*, .conf_addr(byte_cnt - 1'd1));
+ end
+ else begin
+ assign conf_byte = CONF_STR[{(STRLEN - byte_cnt),3'b000} +:8];
+ end
+endgenerate
+
assign gamma_bus[20:0] = {clk_sys, gamma_en, gamma_wr, gamma_wr_addr, gamma_value};
reg gamma_en;
reg gamma_wr;
@@ -347,7 +355,7 @@ always@(posedge clk_sys) begin : uio_block
end
// reading config string, returning a byte from string
- 'h14: if(byte_cnt <= STRLEN) io_dout[7:0] <= conf_str[{(STRLEN - byte_cnt),3'b000} +:8];
+ 'h14: if(byte_cnt <= STRLEN) io_dout[7:0] <= conf_byte;
// reading sd card status
'h16: if(!byte_cnt[MAX_W:3]) begin
@@ -925,3 +933,16 @@ always @(posedge clk_100) begin
end
endmodule
+
+module confstr_rom #(parameter CONF_STR, STRLEN)
+(
+ input clk_sys,
+ input [$clog2(STRLEN+1)-1:0] conf_addr,
+ output reg [7:0] conf_byte
+);
+
+wire [7:0] rom[STRLEN];
+initial for(int i = 0; i < STRLEN; i++) rom[i] = CONF_STR[((STRLEN-i)*8)-1 -:8];
+always @ (posedge clk_sys) conf_byte <= rom[conf_addr];
+
+endmodule
diff --git a/sys/osd.v b/sys/osd.v
index a4fbdde..782fc81 100644
--- a/sys/osd.v
+++ b/sys/osd.v
@@ -72,7 +72,7 @@ always@(posedge clk_sys) begin
// command 0x40: OSDCMDENABLE, OSDCMDDISABLE
if(io_din[7:4] == 4) begin
if(!io_din[0]) {osd_status,highres} <= 0;
- else {osd_status,info} <= {~io_din[2],io_din[2]};
+ else {osd_status,info} <= {~io_din[2] & ~io_din[3],io_din[2]};
bcnt <= 0;
end
// command 0x20: OSDCMDWRITE
diff --git a/sys/sys.qip b/sys/sys.qip
index eeae907..2854eaf 100644
--- a/sys/sys.qip
+++ b/sys/sys.qip
@@ -11,6 +11,7 @@ set_global_assignment -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) v
set_global_assignment -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) gamma_corr.sv ]
set_global_assignment -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) video_mixer.sv ]
set_global_assignment -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) video_freak.sv ]
+set_global_assignment -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) video_freezer.sv ]
set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) arcade_video.v ]
set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) osd.v ]
set_global_assignment -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) vga_out.sv ]
@@ -29,4 +30,4 @@ set_global_assignment -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) f
set_global_assignment -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) ddr_svc.sv ]
set_global_assignment -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) sysmem.sv ]
set_global_assignment -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) sd_card.sv ]
-set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) hps_io.v ]
+set_global_assignment -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) hps_io.sv ]
diff --git a/sys/sys_top.v b/sys/sys_top.v
index 98e6671..dbf8a8a 100644
--- a/sys/sys_top.v
+++ b/sys/sys_top.v
@@ -292,7 +292,8 @@ reg cfg_custom_t = 0;
reg [5:0] cfg_custom_p1;
reg [31:0] cfg_custom_p2;
-reg [4:0] vol_att = 0;
+reg [4:0] vol_att;
+initial vol_att = 5'b11111;
reg [6:0] coef_addr;
reg [8:0] coef_data;
@@ -618,6 +619,7 @@ wire vbuf_write;
wire [23:0] hdmi_data;
wire hdmi_vs, hdmi_hs, hdmi_de, hdmi_vbl;
+wire freeze;
`ifndef MISTER_DEBUG_NOHDMI
wire clk_hdmi = hdmi_clk_out;
@@ -639,7 +641,7 @@ ascal
(
.reset_na (~reset_req),
.run (1),
- .freeze (0),
+ .freeze (freeze),
.i_clk (clk_ihdmi),
.i_ce (ce_hpix),
@@ -1522,6 +1524,7 @@ emu emu
.HDMI_WIDTH(direct_video ? 12'd0 : hdmi_width),
.HDMI_HEIGHT(direct_video ? 12'd0 : hdmi_height),
+ .HDMI_FREEZE(freeze),
.CLK_VIDEO(clk_vid),
.CE_PIXEL(ce_pix),
diff --git a/sys/video_freezer.sv b/sys/video_freezer.sv
new file mode 100644
index 0000000..cfbdf22
--- /dev/null
+++ b/sys/video_freezer.sv
@@ -0,0 +1,143 @@
+//
+// video freeze with sync
+// (C) Alexey Melnikov
+//
+//
+// This program 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 2 of the License, or (at your option)
+// any later version.
+//
+// This program 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 this program; if not, write to the Free Software Foundation, Inc.,
+// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+
+module video_freezer
+(
+ input clk,
+
+ output sync,
+ input freeze,
+
+ input hs_in,
+ input vs_in,
+ input hbl_in,
+ input vbl_in,
+
+ output hs_out,
+ output vs_out,
+ output hbl_out,
+ output vbl_out
+);
+
+sync_lock #(33) vs_lock
+(
+ .clk(clk),
+ .sync_in(vs_in),
+ .sync_out(vs_out),
+ .de_in(vbl_in),
+ .de_out(vbl_out),
+ .freeze(freeze)
+);
+
+wire sync_pt;
+sync_lock #(21) hs_lock
+(
+ .clk(clk),
+ .sync_in(hs_in),
+ .sync_out(hs_out),
+ .de_in(hbl_in),
+ .de_out(hbl_out),
+ .freeze(freeze),
+ .sync_pt(sync_pt)
+);
+
+reg sync_o;
+always @(posedge clk) begin
+ reg old_hs, old_vs;
+ reg vs_sync;
+
+ old_vs <= vs_out;
+
+ if(~old_vs & vs_out) vs_sync <= 1;
+ if(sync_pt & vs_sync) begin
+ vs_sync <= 0;
+ sync_o <= ~sync_o;
+ end
+end
+
+assign sync = sync_o;
+
+endmodule
+
+
+module sync_lock #(parameter WIDTH)
+(
+ input clk,
+
+ input sync_in,
+ input de_in,
+
+ output sync_out,
+ output de_out,
+
+ input freeze,
+ output sync_pt,
+ output valid
+);
+
+reg [WIDTH-1:0] f_len, s_len, de_start, de_end;
+reg sync_valid;
+
+reg old_sync;
+always @(posedge clk) old_sync <= sync_in;
+
+always @(posedge clk) begin
+ reg [WIDTH-1:0] cnti;
+ reg f_valid;
+ reg old_de;
+
+ cnti <= cnti + 1'd1;
+ if(~old_sync & sync_in) begin
+ if(sync_valid) f_len <= cnti;
+ f_valid <= 1;
+ sync_valid <= f_valid;
+ cnti <= 0;
+ end
+
+ if(old_sync & ~sync_in & sync_valid) s_len <= cnti;
+
+ old_de <= de_in;
+ if(~old_de & de_in & sync_valid) de_start <= cnti;
+ if(old_de & ~de_in & sync_valid) de_end <= cnti;
+
+ if(freeze) {f_valid, sync_valid} <= 0;
+end
+
+reg sync_o, de_o, sync_o_pre;
+always @(posedge clk) begin
+ reg [WIDTH-1:0] cnto;
+
+ cnto <= cnto + 1'd1;
+ if(old_sync & ~sync_in & sync_valid) cnto <= s_len + 2'd2;
+ if(cnto == f_len) cnto <= 0;
+
+ sync_o_pre <= (cnto == (s_len>>1)); // middle in sync
+ if(cnto == f_len) sync_o <= 1;
+ if(cnto == s_len) sync_o <= 0;
+ if(cnto == de_start) de_o <= 1;
+ if(cnto == de_end) de_o <= 0;
+end
+
+assign sync_out = freeze ? sync_o : sync_in;
+assign valid = sync_valid;
+assign sync_pt = sync_o_pre;
+assign de_out = freeze ? de_o : de_in;
+
+endmodule
diff --git a/sys/video_mixer.sv b/sys/video_mixer.sv
index 03372b1..fd0b08f 100644
--- a/sys/video_mixer.sv
+++ b/sys/video_mixer.sv
@@ -10,10 +10,7 @@
`timescale 1ns / 1ps
//
-// LINE_LENGTH: Length of display line in pixels
-// Usually it's length from HSync to HSync.
-// May be less if line_start is used.
-//
+// LINE_LENGTH: Length of display line in pixels when HBlank = 0;
// HALF_DEPTH: If =1 then color dept is 4 bits per component
//
// altera message_off 10720
@@ -47,6 +44,12 @@ module video_mixer
input HBlank,
input VBlank,
+ // Freeze engine
+ // HDMI: displays last frame
+ // VGA: black screen with HSync and VSync
+ input HDMI_FREEZE,
+ output freeze_sync,
+
// video output signals
output reg [7:0] VGA_R,
output reg [7:0] VGA_G,
@@ -60,19 +63,43 @@ localparam DWIDTH = HALF_DEPTH ? 3 : 7;
localparam DWIDTH_SD = GAMMA ? 7 : DWIDTH;
localparam HALF_DEPTH_SD = GAMMA ? 0 : HALF_DEPTH;
+wire frz_hs, frz_vs;
+wire frz_hbl, frz_vbl;
+video_freezer freezer
+(
+ .clk(CLK_VIDEO),
+ .freeze(HDMI_FREEZE),
+ .hs_in(HSync),
+ .vs_in(VSync),
+ .hbl_in(HBlank),
+ .vbl_in(VBlank),
+ .sync(freeze_sync),
+ .hs_out(frz_hs),
+ .vs_out(frz_vs),
+ .hbl_out(frz_hbl),
+ .vbl_out(frz_vbl)
+);
+
+reg frz;
+always @(posedge CLK_VIDEO) begin
+ reg frz1;
+
+ frz1 <= HDMI_FREEZE;
+ frz <= frz1;
+end
+
generate
if(GAMMA && HALF_DEPTH) begin
- wire [7:0] R_in = {R,R};
- wire [7:0] G_in = {G,G};
- wire [7:0] B_in = {B,B};
+ wire [7:0] R_in = frz ? 8'd0 : {R,R};
+ wire [7:0] G_in = frz ? 8'd0 : {G,G};
+ wire [7:0] B_in = frz ? 8'd0 : {B,B};
end else begin
- wire [DWIDTH:0] R_in = R;
- wire [DWIDTH:0] G_in = G;
- wire [DWIDTH:0] B_in = B;
+ wire [DWIDTH:0] R_in = frz ? 1'd0 : R;
+ wire [DWIDTH:0] G_in = frz ? 1'd0 : G;
+ wire [DWIDTH:0] B_in = frz ? 1'd0 : B;
end
endgenerate
-
wire hs_g, vs_g;
wire hb_g, vb_g;
wire [DWIDTH_SD:0] R_gamma, G_gamma, B_gamma;
@@ -90,10 +117,10 @@ generate
.gamma_wr_addr(gamma_bus[17:8]),
.gamma_value(gamma_bus[7:0]),
- .HSync(HSync),
- .VSync(VSync),
- .HBlank(HBlank),
- .VBlank(VBlank),
+ .HSync(frz_hs),
+ .VSync(frz_vs),
+ .HBlank(frz_hbl),
+ .VBlank(frz_vbl),
.RGB_in({R_in,G_in,B_in}),
.HSync_out(hs_g),
@@ -105,7 +132,7 @@ generate
end else begin
assign gamma_bus[21] = 0;
assign {R_gamma,G_gamma,B_gamma} = {R_in,G_in,B_in};
- assign {hs_g, vs_g, hb_g, vb_g} = {HSync, VSync, HBlank, VBlank};
+ assign {hs_g, vs_g, hb_g, vb_g} = {frz_hs, frz_vs, frz_hbl, frz_vbl};
end
endgenerate
diff --git a/verilator/imgui.ini b/verilator/imgui.ini
index ec21158..923d2c5 100644
--- a/verilator/imgui.ini
+++ b/verilator/imgui.ini
@@ -4,7 +4,7 @@ Size=400,400
Collapsed=0
[Window][Debug Log]
-Pos=19,8
+Pos=6,18
Size=520,600
Collapsed=0
@@ -29,8 +29,8 @@ Size=560,393
Collapsed=0
[Window][CPU Registers]
-Pos=738,825
-Size=269,180
+Pos=1308,461
+Size=269,188
Collapsed=0
[Window][PGROM Editor]
@@ -43,3 +43,18 @@ Pos=19,866
Size=553,169
Collapsed=0
+[Window][WKRAM Editor]
+Pos=1037,656
+Size=540,370
+Collapsed=0
+
+[Window][CHRAM Editor]
+Pos=501,656
+Size=535,370
+Collapsed=0
+
+[Window][COLRAM Editor]
+Pos=-208,137
+Size=738,454
+Collapsed=0
+
diff --git a/verilator/sim.v b/verilator/sim.v
index fe7168b..423f8b1 100644
--- a/verilator/sim.v
+++ b/verilator/sim.v
@@ -7,55 +7,62 @@
`define USE_VGA
//`define USE_CGA
-module top(VGA_R,VGA_B,VGA_G,VGA_HS,VGA_VS,VGA_HB,VGA_VB,reset,clk_sys,clk_vid,inputs,ioctl_download,ioctl_addr,ioctl_dout,ioctl_index,ioctl_wait,ioctl_wr);
+module top(
- input clk_sys/*verilator public_flat*/;
- input clk_vid/*verilator public_flat*/;
- input reset/*verilator public_flat*/;
- input [11:0] inputs/*verilator public_flat*/;
+ input clk_sys/*verilator public_flat*/,
+ input clk_vid/*verilator public_flat*/,
+ input reset/*verilator public_flat*/,
+
+ // 6 joysticks, 32 buttons each
+ input [31:0] joystick_0,
+ input [31:0] joystick_1,
+ input [31:0] joystick_2,
+ input [31:0] joystick_3,
+ input [31:0] joystick_4,
+ input [31:0] joystick_5,
+
+ // analog -127..+127, Y: [15:8], X: [7:0]
+ // input [15:0] joystick_analog_0;
+ // input [15:0] joystick_analog_1;
+ // input [15:0] joystick_analog_2;
+ // input [15:0] joystick_analog_3;
+ // input [15:0] joystick_analog_4;
+ // input [15:0] joystick_analog_5;
- output [7:0] VGA_R/*verilator public_flat*/;
- output [7:0] VGA_G/*verilator public_flat*/;
- output [7:0] VGA_B/*verilator public_flat*/;
-
- output VGA_HS;
- output VGA_VS;
-
- output VGA_HB;
- output VGA_VB;
-
- input ioctl_download;
- input ioctl_wr;
- input [24:0] ioctl_addr;
- input [7:0] ioctl_dout;
- input [7:0] ioctl_index;
- output reg ioctl_wait=1'b0;
-
- wire btn_start = inputs[6];
- wire btn_coin = inputs[8];
- wire m_bomb = inputs[5];
- wire m_fire = inputs[4];
- wire m_right = inputs[0];
- wire m_left = inputs[1];
- wire m_down = inputs[2];
- wire m_up = inputs[3];
+ output [7:0] VGA_R/*verilator public_flat*/,
+ output [7:0] VGA_G/*verilator public_flat*/,
+ output [7:0] VGA_B/*verilator public_flat*/,
+
+ output VGA_HS,
+ output VGA_VS,
+ output VGA_HB,
+ output VGA_VB,
+
+ input ioctl_download,
+ input ioctl_wr,
+ input [24:0] ioctl_addr,
+ input [7:0] ioctl_dout,
+ input [7:0] ioctl_index,
+ output reg ioctl_wait=1'b0
+);
soc soc(
- .clk_sys(clk_sys),
- .clk_pix(clk_sys),
- .reset(reset | ioctl_download),
- .VGA_HS(VGA_HS),
- .VGA_VS(VGA_VS),
- .VGA_R(VGA_R),
- .VGA_G(VGA_G),
- .VGA_B(VGA_B),
- .VGA_HB(VGA_HB),
- .VGA_VB(VGA_VB),
- .dn_addr(ioctl_addr[13:0]),
- .dn_data(ioctl_dout),
- .dn_wr(ioctl_wr),
- .dn_index(ioctl_index),
- .inputs({btn_coin, btn_start, m_bomb, m_fire, m_right, m_left, m_down, m_up})
+ .clk_sys(clk_sys),
+ .ce_pix(clk_sys),
+ .reset(reset | ioctl_download),
+ .VGA_HS(VGA_HS),
+ .VGA_VS(VGA_VS),
+ .VGA_R(VGA_R),
+ .VGA_G(VGA_G),
+ .VGA_B(VGA_B),
+ .VGA_HB(VGA_HB),
+ .VGA_VB(VGA_VB),
+ .dn_addr(ioctl_addr[13:0]),
+ .dn_data(ioctl_dout),
+ .dn_wr(ioctl_wr),
+ .dn_index(ioctl_index),
+
+ .joystick({joystick_5,joystick_4,joystick_3,joystick_2,joystick_1,joystick_0})
);
endmodule
diff --git a/verilator/sim/sim_clock.cpp b/verilator/sim/sim_clock.cpp
index b2d142d..455f571 100644
--- a/verilator/sim/sim_clock.cpp
+++ b/verilator/sim/sim_clock.cpp
@@ -1,9 +1,6 @@
#include "sim_clock.h"
#include
-//bool clk, old;
-//int ratio, count;
-
SimClock::SimClock(int r) {
ratio = r;
count = 0;
@@ -11,15 +8,17 @@ SimClock::SimClock(int r) {
old = false;
}
+
SimClock::~SimClock() {
}
void SimClock::Tick() {
old = clk;
count++;
- if (count >= ratio) {
- clk = !clk; count = 0;
+ if (count > ratio) {
+ count = 0;
}
+ clk = (count == 0);
}
void SimClock::Reset() {
@@ -27,3 +26,7 @@ void SimClock::Reset() {
clk = false;
old = false;
}
+
+bool SimClock::IsRising() {
+ return clk && !old;
+}
diff --git a/verilator/sim/sim_clock.h b/verilator/sim/sim_clock.h
index aa365b0..05062d4 100644
--- a/verilator/sim/sim_clock.h
+++ b/verilator/sim/sim_clock.h
@@ -10,6 +10,7 @@ public:
~SimClock();
void Tick();
void Reset();
+ bool IsRising();
private:
int ratio, count;
diff --git a/verilator/sim_main.cpp b/verilator/sim_main.cpp
index 4d2dfb8..b511b9d 100644
--- a/verilator/sim_main.cpp
+++ b/verilator/sim_main.cpp
@@ -50,8 +50,8 @@ const int input_pause = 11;
// Video
// -----
-#define VGA_WIDTH 400
-#define VGA_HEIGHT 300
+#define VGA_WIDTH 320
+#define VGA_HEIGHT 240
#define VGA_ROTATE 0 // 90 degrees anti-clockwise
SimVideo video(VGA_WIDTH, VGA_HEIGHT, VGA_ROTATE);
@@ -59,7 +59,7 @@ SimVideo video(VGA_WIDTH, VGA_HEIGHT, VGA_ROTATE);
// ------------------
int initialReset = 48;
bool run_enable = 1;
-int batchSize = 2500000 / 1000;
+int batchSize = 150000;
bool single_step = 0;
bool multi_step = 0;
int multi_step_amount = 1024;
@@ -74,8 +74,8 @@ double sc_time_stamp() { // Called by $time in Verilog.
}
int clockSpeed = 24; // This is not used, just a reminder for the dividers below
-SimClock clk_sys(2); // 12mhz
-SimClock clk_pix(2); // 6mhz
+SimClock clk_sys(1); // 12mhz
+SimClock clk_pix(1); // 6mhz
void resetSim() {
main_time = 0;
@@ -95,14 +95,14 @@ int verilate() {
// Clock dividers
clk_sys.Tick();
- clk_pix.Tick();
+ clk_pix.Tick();
// Set system clock in core
top->clk_sys = clk_sys.clk;
top->clk_vid = clk_pix.clk;
// Output pixels on rising edge of pixel clock
- if (clk_pix.clk && !clk_pix.old) {
+ if (clk_pix.IsRising()) {
uint32_t colour = 0xFF000000 | top->VGA_B << 16 | top->VGA_G << 8 | top->VGA_R;
video.Clock(top->VGA_HB, top->VGA_VB, top->VGA_HS, top->VGA_VS, colour);
}
@@ -177,7 +177,7 @@ int main(int argc, char** argv, char** env) {
if (video.Initialise(windowTitle) == 1) { return 1; }
bus.QueueDownload("../src/boot_rom.bin", 0);
- bus.QueueDownload("../src/font.bin", 1);
+ bus.QueueDownload("../MiSTer.pf", 1);
#ifdef WIN32
@@ -243,51 +243,37 @@ int main(int argc, char** argv, char** env) {
ImGui::Image(video.texture_id, ImVec2(video.output_width * m, video.output_height * m));
ImGui::End();
- ImGui::Begin("PGROM Editor");
- mem_edit_1.DrawContents(top->top__DOT__soc__DOT__pgrom__DOT__mem, 4096, 0);
- ImGui::End();
- ImGui::Begin("CHROM Editor");
- mem_edit_1.DrawContents(top->top__DOT__soc__DOT__chrom__DOT__mem, 1024, 0);
- ImGui::End();
- //ImGui::Begin("RAM Editor");
- // mem_edit_2.DrawContents(top->top__DOT__soc__DOT__ram__DOT__mem, 4096, 0);
- // ImGui::End();
- //ImGui::Begin("VRAM Editor");
- //mem_edit_3.DrawContents(top->top__DOT__soc__DOT__video__DOT__vmem, 320*200, 0);
- //ImGui::End();
+ //ImGui::Begin("PGROM Editor");
+ //mem_edit_1.DrawContents(top->top__DOT__soc__DOT__pgrom__DOT__mem, 16384, 0);
+ //ImGui::End();
+ //ImGui::Begin("CHROM Editor");
+ //mem_edit_1.DrawContents(top->top__DOT__soc__DOT__chrom__DOT__mem, 1024, 0);
+ //ImGui::End();
+ //ImGui::Begin("WKRAM Editor");
+ //mem_edit_2.DrawContents(top->top__DOT__soc__DOT__wkram__DOT__mem, 16384, 0);
+ //ImGui::End();
+ //ImGui::Begin("CHRAM Editor");
+ //mem_edit_3.DrawContents(top->top__DOT__soc__DOT__chram__DOT__mem, 2048, 0);
+ //ImGui::End();
+ //ImGui::Begin("COLRAM Editor");
+ //mem_edit_3.DrawContents(top->top__DOT__soc__DOT__colram__DOT__mem, 2048, 0);
+ //ImGui::End();
ImGui::Begin("CPU Registers");
ImGui::Spacing();
ImGui::Text("PC 0x%04X", top->top__DOT__soc__DOT__T80x__DOT__i_tv80_core__DOT__PC);
ImGui::Text("ACC 0x%04X", top->top__DOT__soc__DOT__T80x__DOT__i_tv80_core__DOT__ACC);
- ImGui::Text("Main Registers");
- /*
- ImGui::Text("B 0x%02X", top->top__DOT__soc__DOT__T80x__DOT__i_tv80_core__DOT__i_reg__DOT__B);
- ImGui::Text("C 0x%02X", top->top__DOT__soc__DOT__T80x__DOT__i_tv80_core__DOT__i_reg__DOT__C);
- ImGui::Text("D 0x%02X", top->top__DOT__soc__DOT__T80x__DOT__i_tv80_core__DOT__i_reg__DOT__D);
- ImGui::Text("E 0x%02X", top->top__DOT__soc__DOT__T80x__DOT__i_tv80_core__DOT__i_reg__DOT__E);
- ImGui::Text("H 0x%02X", top->top__DOT__soc__DOT__T80x__DOT__i_tv80_core__DOT__i_reg__DOT__H);
- ImGui::Text("L 0x%02X", top->top__DOT__soc__DOT__T80x__DOT__i_tv80_core__DOT__i_reg__DOT__L);
- */
- //ImGui::Spacing();
- //ImGui::Separator();
- //ImGui::Text("16 bit Registers");
-/*
- ImGui::Text("IX 0x%04X", top->top__DOT__soc__DOT__T80x__DOT__i_tv80_core__DOT__i_reg__DOT__IX);
- ImGui::Text("IY 0x%04X", top->top__DOT__soc__DOT__T80x__DOT__i_tv80_core__DOT__i_reg__DOT__IY);
- ImGui::Text("SP 0x%04X", top->top__DOT__soc__DOT__T80x__DOT__i_tv80_core__DOT__SP);
-*/
-
ImGui::End();
video.UpdateTexture();
// Pass inputs to sim
- top->inputs = 0;
+ top->joystick_0 = 0;
for (int i = 0; i < input.inputCount; i++)
{
- if (input.inputs[i]) { top->inputs |= (1 << i); }
+ if (input.inputs[i]) { top->joystick_0 |= (1 << i); }
}
+ top->joystick_1 = top->joystick_0;
// Run simulation
if (run_enable) {
diff --git a/verilator/verilate.sh b/verilator/verilate.sh
index 6dc94df..4e83959 100644
--- a/verilator/verilate.sh
+++ b/verilator/verilate.sh
@@ -1,5 +1,5 @@
#verilator -cc -exe --public --compiler msvc --converge-limit 2000 -Wno-WIDTH -Wno-IMPLICIT -Wno-MODDUP -Wno-UNSIGNED -Wno-CASEINCOMPLETE -Wno-CASEX -Wno-SYMRSVDWORD -Wno-COMBDLY -Wno-INITIALDLY -Wno-BLKANDNBLK -Wno-UNOPTFLAT -Wno-SELRANGE -Wno-CMPCONST -Wno-CASEOVERLAP -Wno-PINMISSING --top-module top sim.v \
-verilator -cc -exe --public --compiler msvc +define+SIMULATION=1 +define+SIMULATION_VTIMER=1 --converge-limit 2000 --top-module top sim.v \
+verilator -cc -exe --public --compiler msvc +define+SIMULATION=1 --converge-limit 2000 --top-module top sim.v \
../rtl/dpram.v \
../rtl/spram.v \
../rtl/JTFRAME/jtframe_vtimer.v \