diff --git a/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/Centipede.qpf b/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/Centiped.qpf
similarity index 97%
rename from Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/Centipede.qpf
rename to Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/Centiped.qpf
index bbd04726..81af7a3d 100644
--- a/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/Centipede.qpf
+++ b/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/Centiped.qpf
@@ -27,4 +27,4 @@ DATE = "14:59:16 November 16, 2017"
# Revisions
-PROJECT_REVISION = "Centipede"
\ No newline at end of file
+PROJECT_REVISION = "Centiped"
\ No newline at end of file
diff --git a/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/Centipede.qsf b/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/Centiped.qsf
similarity index 94%
rename from Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/Centipede.qsf
rename to Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/Centiped.qsf
index ed46cc58..41271f8d 100644
--- a/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/Centipede.qsf
+++ b/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/Centiped.qsf
@@ -145,21 +145,17 @@ set_global_assignment -name OUTPUT_IO_TIMING_FAR_END_VMEAS "HALF SIGNAL SWING" -
set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top
set_global_assignment -name PARTITION_FITTER_PRESERVATION_LEVEL PLACEMENT_AND_ROUTING -section_id Top
set_global_assignment -name PARTITION_COLOR 16764057 -section_id Top
+set_global_assignment -name ENABLE_SIGNALTAP OFF
+set_global_assignment -name USE_SIGNALTAP_FILE output_files/cent.stp
set_global_assignment -name SYSTEMVERILOG_FILE rtl/Centipede_MiST.sv
set_global_assignment -name VERILOG_FILE rtl/centipede.v
set_global_assignment -name VERILOG_FILE rtl/pf_ram.v
-set_global_assignment -name VHDL_FILE rtl/roms/F7.vhd
-set_global_assignment -name VHDL_FILE rtl/roms/HJ7.vhd
-set_global_assignment -name VHDL_FILE rtl/roms/PROG.vhd
-set_global_assignment -name VHDL_FILE rtl/roms/P4.vhd
set_global_assignment -name VHDL_FILE rtl/spram.vhd
set_global_assignment -name VHDL_FILE rtl/dpram.vhd
set_global_assignment -name VHDL_FILE rtl/pll.vhd
+set_global_assignment -name SYSTEMVERILOG_FILE rtl/POKEY.sv
+set_global_assignment -name SYSTEMVERILOG_FILE rtl/matoro.sv
set_global_assignment -name QIP_FILE ../../../common/mist/mist.qip
-set_global_assignment -name SYSTEMVERILOG_FILE ../../../common/Sound/Pokey/POKEY.sv
-set_global_assignment -name SYSTEMVERILOG_FILE ../../../common/Sound/Pokey/matoro.sv
set_global_assignment -name QIP_FILE ../../../common/CPU/T65/T65.qip
-set_global_assignment -name ENABLE_SIGNALTAP OFF
-set_global_assignment -name USE_SIGNALTAP_FILE output_files/cent.stp
set_global_assignment -name SIGNALTAP_FILE output_files/cent.stp
set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top
\ No newline at end of file
diff --git a/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/Centipede.sdc b/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/Centiped.sdc
similarity index 87%
rename from Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/Centipede.sdc
rename to Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/Centiped.sdc
index 1d0f7c84..69dc312a 100644
--- a/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/Centipede.sdc
+++ b/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/Centiped.sdc
@@ -72,12 +72,12 @@ create_clock -name {SPI_SCK} -period 41.666 -waveform { 20.8 41.666 } [get_port
# Set Input Delay
#**************************************************************
-set_input_delay -add_delay -clock_fall -clock [get_clocks {CLOCK_27}] 1.000 [get_ports {CLOCK_27}]
-set_input_delay -add_delay -clock_fall -clock [get_clocks {SPI_SCK}] 1.000 [get_ports {CONF_DATA0}]
-set_input_delay -add_delay -clock_fall -clock [get_clocks {SPI_SCK}] 1.000 [get_ports {SPI_DI}]
-set_input_delay -add_delay -clock_fall -clock [get_clocks {SPI_SCK}] 1.000 [get_ports {SPI_SCK}]
-set_input_delay -add_delay -clock_fall -clock [get_clocks {SPI_SCK}] 1.000 [get_ports {SPI_SS2}]
-set_input_delay -add_delay -clock_fall -clock [get_clocks {SPI_SCK}] 1.000 [get_ports {SPI_SS3}]
+set_input_delay -add_delay -clock [get_clocks {CLOCK_27}] 1.000 [get_ports {CLOCK_27}]
+set_input_delay -add_delay -clock [get_clocks {SPI_SCK}] 1.000 [get_ports {CONF_DATA0}]
+set_input_delay -add_delay -clock [get_clocks {SPI_SCK}] 1.000 [get_ports {SPI_DI}]
+set_input_delay -add_delay -clock [get_clocks {SPI_SCK}] 1.000 [get_ports {SPI_SCK}]
+set_input_delay -add_delay -clock [get_clocks {SPI_SCK}] 1.000 [get_ports {SPI_SS2}]
+set_input_delay -add_delay -clock [get_clocks {SPI_SCK}] 1.000 [get_ports {SPI_SS3}]
#**************************************************************
# Set Output Delay
diff --git a/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/README.txt b/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/README.txt
index 126df0b2..be27738e 100644
--- a/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/README.txt
+++ b/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/README.txt
@@ -1,15 +1,28 @@
Arcade: Centipede port to MiST by Gehstock
24 November 2018
---
---
- Only controls and OSD are rotated on Video output.
+Millipede added by Gyorgy Szombathelyi
- Keyboard inputs :
+April 2021
- ESC : Coin/Start Player
---
- SPACE : Fire or Fire Button
---
- ARROW KEYS : Movements
\ No newline at end of file
+--
+--
+-- Usage:
+-- - Create ROM and ARC files from the MRA files using the MRA utility.
+-- Example: mra -A -z /path/to/mame/roms Centipede.mra
+-- - Copy the ROM files to the root of the SD Card
+-- - Copy the RBF and ARC files to the same folder on the SD Card
+--
+-- MRA utility: https://github.com/sebdel/mra-tools-c/
+--
+
+-- Only controls and OSD are rotated on Video output.
+
+-- Keyboard inputs :
+
+-- ESC : Coin/Start Player
+--
+-- CTRL : Fire or Fire Button
+--
+-- ARROW KEYS : Movements
\ No newline at end of file
diff --git a/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/meta/Centipede (revision 4).mra b/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/meta/Centipede (revision 4).mra
new file mode 100644
index 00000000..90f3d924
--- /dev/null
+++ b/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/meta/Centipede (revision 4).mra
@@ -0,0 +1,38 @@
+
+ Centipede (revision 4)
+ 0220
+ centiped
+ 20200430141713
+ 1980
+ Atari
+ Maze / Bugs
+ Maze / Centipede
+ Maze / Spiders
+ centiped
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/meta/Centipede.mra b/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/meta/Centipede.mra
new file mode 100644
index 00000000..9b7a0dcc
--- /dev/null
+++ b/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/meta/Centipede.mra
@@ -0,0 +1,37 @@
+
+ Centipede (revision 3)
+ 0218
+ centiped3
+ 20200225084106
+ 1980
+ Atari
+ Maze / Bugs
+ Maze / Centipede
+ Maze / Spiders
+ centiped
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/meta/Millipede.mra b/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/meta/Millipede.mra
new file mode 100644
index 00000000..52decf04
--- /dev/null
+++ b/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/meta/Millipede.mra
@@ -0,0 +1,33 @@
+
+ Millipede
+ 0218
+ milliped
+ 20200225084106
+ 1980
+ Atari
+ Maze / Bugs
+ Maze / Centipede
+ Maze / Spiders
+ centiped
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/rtl/Centipede_MiST.sv b/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/rtl/Centipede_MiST.sv
index 8929dc6a..e4e2a64f 100644
--- a/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/rtl/Centipede_MiST.sv
+++ b/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/rtl/Centipede_MiST.sv
@@ -40,16 +40,13 @@ module Centipede_MiST
`include "rtl\build_id.v"
localparam CONF_STR = {
- "Centipede;;",
+ "CENTIPED;;",
"O2,Rotate Controls,Off,On;",
"O34,Scanlines,Off,25%,50%,75%;",
"O5,Blend,Off,On;",
"O7,Test,Off,On;",
- "O89,Language,English,German,French,Spanish;",
- "OAB,Lives,2,3,4,5;",
- "OCD,Bonus Life,10000,12000,15000,20000;",
- "OE,Difficulty,Hard,Easy;",
- "OF,Credit minimum,1,2;",
+ "DIP;",
+ "R64,Save highscores;",
"T0,Reset;",
"V,v1.50.",`BUILD_DATE
};
@@ -60,11 +57,13 @@ wire blend = status[5];
wire joyswap = status[6];
wire service = status[7];
+wire milliped = core_mod[0];
+
wire [15:0] dipsw;
assign dipsw[ 7:0] = status[15:8];
assign dipsw[15:8] = 8'h01;
-assign LED = 1;
+assign LED = ~(ioctl_downl | ioctl_upl);
assign AUDIO_R = AUDIO_L;
wire clk_24, clk_12, clk_100mhz;
@@ -76,29 +75,55 @@ pll pll(
.c2(clk_12),
.c4(clk_100mhz)
);
-
+
wire [31:0] status;
wire [1:0] buttons;
wire [1:0] switches;
wire [7:0] joystick_0;
wire [7:0] joystick_1;
wire scandoublerD;
+wire [7:0] core_mod;
wire ypbpr;
wire no_csync;
wire key_pressed;
wire [7:0] key_code;
wire key_strobe;
-wire [7:0] RGB;
+wire [7:0] RGB;
wire hs, vs, vb, hb;
-reg blankn;
+wire blankn = ~(hb | vb);
wire [3:0] audio;
-always @(posedge clk_12) blankn <= ~(hb | vb);
+wire ioctl_downl;
+wire ioctl_upl;
+wire [7:0] ioctl_index;
+wire ioctl_wr;
+wire [24:0] ioctl_addr;
+wire [7:0] ioctl_dout;
+wire [7:0] ioctl_din;
+
+data_io data_io(
+ .clk_sys ( clk_12 ),
+ .SPI_SCK ( SPI_SCK ),
+ .SPI_SS2 ( SPI_SS2 ),
+ .SPI_DI ( SPI_DI ),
+ .SPI_DO ( SPI_DO ),
+ .ioctl_download( ioctl_downl ),
+ .ioctl_upload ( ioctl_upl ),
+ .ioctl_index ( ioctl_index ),
+ .ioctl_wr ( ioctl_wr ),
+ .ioctl_addr ( ioctl_addr ),
+ .ioctl_dout ( ioctl_dout ),
+ .ioctl_din ( ioctl_din )
+);
+
+reg reset;
+always @(posedge clk_12) reset <= status[0] | buttons[1] | ioctl_downl;
centipede centipede(
.clk_100mhz(clk_100mhz),
.clk_12mhz(clk_12),
- .reset(status[0] | buttons[1]),
+ .reset(reset),
+ .milli(milliped),
.playerinput_i(~{ 1'b0, 1'b0, m_coin1, service, 1'b0, 1'b0, m_two_players, m_one_player, m_fireB, m_fireA }),
.trakball_i(),
.joystick_i(~{m_right , m_left, m_down, m_up, m_right , m_left, m_down, m_up}),
@@ -109,17 +134,26 @@ centipede centipede(
.vsync_o(vs),
.hblank_o(hb),
.vblank_o(vb),
- .audio_o(audio)
+ .audio_o(audio),
+ // ROM download
+ .dl_addr(ioctl_addr[14:0]),
+ .dl_data(ioctl_dout),
+ .dl_we(ioctl_wr && ioctl_index == 0),
+ // High score table save-load
+ .hsram_addr(ioctl_addr[5:0]),
+ .hsram_dout(ioctl_din),
+ .hsram_din(ioctl_dout),
+ .hsram_we(ioctl_wr && ioctl_index == 8'hff)
);
-
+
mist_video #(.COLOR_DEPTH(3), .SD_HCNT_WIDTH(10)) mist_video(
.clk_sys ( clk_24 ),
.SPI_SCK ( SPI_SCK ),
.SPI_SS3 ( SPI_SS3 ),
.SPI_DI ( SPI_DI ),
- .R (blankn ? RGB[2:0] : 0),
- .G (blankn ? RGB[5:3] : 0),
- .B (blankn ? RGB[7:6] : 0),
+ .R (blankn ? RGB[2:0] : 0),
+ .G (blankn ? RGB[5:3] : 0),
+ .B (blankn ? RGB[7:6] : 0),
.HSync ( hs ),
.VSync ( vs ),
.VGA_R ( VGA_R ),
@@ -127,14 +161,15 @@ mist_video #(.COLOR_DEPTH(3), .SD_HCNT_WIDTH(10)) mist_video(
.VGA_B ( VGA_B ),
.VGA_VS ( VGA_VS ),
.VGA_HS ( VGA_HS ),
+ .scanlines ( scanlines ),
.rotate ( { 1'b0, rotate } ),
.ce_divider ( 1'b1 ),
.blend ( blend ),
.scandoubler_disable(scandoublerD ),
.no_csync ( no_csync ),
.ypbpr ( ypbpr )
- );
-
+ );
+
user_io #(
.STRLEN(($size(CONF_STR)>>3)))
user_io(
@@ -146,17 +181,18 @@ user_io(
.SPI_MOSI (SPI_DI ),
.buttons (buttons ),
.switches (switches ),
- .scandoubler_disable (scandoublerD ),
+ .scandoubler_disable (scandoublerD ),
.ypbpr (ypbpr ),
.no_csync (no_csync ),
+ .core_mod (core_mod ),
.key_strobe (key_strobe ),
.key_pressed (key_pressed ),
.key_code (key_code ),
.joystick_0 (joystick_0 ),
.joystick_1 (joystick_1 ),
.status (status )
- );
-
+ );
+
dac #(
.C_bits(15))
dac (
@@ -165,7 +201,7 @@ dac (
.dac_i({2{audio,audio}}),
.dac_o(AUDIO_L)
);
-
+
wire m_up, m_down, m_left, m_right, m_fireA, m_fireB, m_fireC, m_fireD, m_fireE, m_fireF;
wire m_up2, m_down2, m_left2, m_right2, m_fire2A, m_fire2B, m_fire2C, m_fire2D, m_fire2E, m_fire2F;
wire m_tilt, m_coin1, m_coin2, m_coin3, m_coin4, m_one_player, m_two_players, m_three_players, m_four_players;
@@ -178,12 +214,12 @@ arcade_inputs inputs (
.joystick_0 ( joystick_0 ),
.joystick_1 ( joystick_1 ),
.rotate ( rotate ),
- .orientation ( 2'b01 ),
+ .orientation ( 2'b01 ),
.joyswap ( joyswap ),
- .oneplayer ( 1'b1 ),
+ .oneplayer ( 1'b1 ),
.controls ( {m_tilt, m_coin4, m_coin3, m_coin2, m_coin1, m_four_players, m_three_players, m_two_players, m_one_player} ),
.player1 ( {m_fireF, m_fireE, m_fireD, m_fireC, m_fireB, m_fireA, m_up, m_down, m_left, m_right} ),
.player2 ( {m_fire2F, m_fire2E, m_fire2D, m_fire2C, m_fire2B, m_fire2A, m_up2, m_down2, m_left2, m_right2} )
-);
+);
endmodule
diff --git a/common/Sound/Pokey/POKEY.sv b/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/rtl/POKEY.sv
similarity index 100%
rename from common/Sound/Pokey/POKEY.sv
rename to Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/rtl/POKEY.sv
diff --git a/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/rtl/centipede.v b/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/rtl/centipede.v
index 541a2069..67f79219 100644
--- a/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/rtl/centipede.v
+++ b/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/rtl/centipede.v
@@ -14,11 +14,17 @@
// The game code also relies on the pokey's random number generation working correctly and caused me to
// do some debugging of the pokey code I was using.
// Edit: Changed 2018 Gehstock
+//
+// György Szombathelyi 04/2021
+// - Made it synchronous (still left some combinatorial async resets for an exercise to the reader)
+// - Fixed the high score RAM
+// - Added Millipede
module centipede(
input clk_100mhz,
input clk_12mhz,
input reset,
+ input milli,
input [9:0] playerinput_i,
input [7:0] trakball_i,
input [7:0] joystick_i,
@@ -31,7 +37,16 @@ module centipede(
output vsync_o,
output hblank_o,
output vblank_o,
- output [3:0] audio_o
+ output [3:0] audio_o,
+
+ input [14:0] dl_addr,
+ input [7:0] dl_data,
+ input dl_we,
+
+ input [5:0] hsram_addr,
+ output [7:0] hsram_dout,
+ input [7:0] hsram_din,
+ input hsram_we
);
//
@@ -44,16 +59,16 @@ module centipede(
reg phi0a;
//
- wire rom_n;
- wire ram0_n;
- wire steerclr_n, watchdog_n, out0_n, irqres_n;
- wire pokey_n, pokey2_n, swrd_n, pf_n;
- wire coloram_n, ea_read_n, ea_ctrl_n, ea_addr_n;
- wire in0_n, in1_n;
+ reg rom_n;
+ reg ram0_n;
+ reg steerclr_n, watchdog_n, out0_n, irqres_n;
+ reg pokey_n, pokey2_n, swrd_n, pf_n;
+ reg coloram_n, ea_read_n, ea_ctrl_n, ea_addr_n;
+ reg in0_n, in1_n;
- wire pframrd_n;
- wire pfwr3_n, pfwr2_n, pfwr1_n, pfwr0_n;
- wire pfrd3_n, pfrd2_n, pfrd1_n, pfrd0_n;
+ reg pframrd_n;
+ reg pfwr3_n, pfwr2_n, pfwr1_n, pfwr0_n;
+ reg pfrd3_n, pfrd2_n, pfrd1_n, pfrd0_n;
wire [9:0] adecode;
wire pac_n;
@@ -92,13 +107,13 @@ module centipede(
wire s_4h_n_en;
wire s_256hd_n;
wire s_256h2d_n;
- wire vblankd_n;
+ wire vblankd_n;
wire s_6_12;
-
- reg s_256h2d;
- reg s_256hd;
- reg vblankd;
-
+
+ reg s_256h2d;
+ reg s_256hd;
+ reg vblankd;
+
wire pload_n;
wire write_n;
wire brw_n;
@@ -125,15 +140,15 @@ module centipede(
wire pf_addr_stamp;
wire [31:0] pfd;
- reg [29:16] pfd_hold;
- reg [29:16] pfd_hold2;
+ reg [31:16] pfd_hold;
+ reg [31:16] pfd_hold2;
reg [1:0] gry;
wire [1:0] y;
reg [1:0] mr;
wire [7:0] line_ram_addr;
- reg [1:0] line_ram[0:255];
+ reg [3:0] line_ram[0:255];
reg [7:0] line_ram_ctr;
wire line_ram_ctr_load;
wire line_ram_ctr_clr;
@@ -147,7 +162,7 @@ module centipede(
wire [7:0] pf_rom1_out, pf_rom0_out;
wire [7:0] pf_rom1_out_rev, pf_rom0_out_rev;
- reg [7:0] pic;
+ reg [7:0] pic, picD;
//
@@ -160,22 +175,14 @@ module centipede(
reg hs;
wire hs_set;
- wire hs_addr_clk;
- wire hs_ctrl_clk;
-
//
wire comp_sync;
- reg [3:0] rgbi;
- wire [3:0] coloram_out;
- wire [3:0] coloram_rgbi;
+ reg [7:0] rgbi;
+ wire [7:0] coloram_out;
+ wire [7:0] coloram_rgbi;
wire coloram_w_n;
reg coloren;
- wire [1:0] rama_sel;
- wire [1:0] rama_hi;
- wire [1:0] rama_lo;
- wire [3:0] rama;
-
wire [3:0] audio;
//
wire mob_n;
@@ -189,17 +196,19 @@ module centipede(
wire [7:0] switch_out;
wire flip;
+ wire cntrlsel;
wire coin_ctr_r_drive, coin_ctr_c_drive, coin_ctr_l_drive;
wire [7:0] playerin_out;
wire [7:0] pokey_out;
+ wire [7:0] pokey2_out;
reg [11:0] h_counter;
reg [7:0] v_counter;
wire v_counter_reset;
initial h_counter = 0;
- always @(posedge s_12mhz or posedge reset)
+ always @(posedge s_12mhz)
if (reset)
h_counter <= 0;
else
@@ -239,7 +248,7 @@ module centipede(
assign v_counter_reset = reset | ~vreset == 0;
- always @(posedge s_12mhz or posedge reset)
+ always @(posedge s_12mhz)
if (reset)
v_counter <= 0;
else if (s_256h_n_en)
@@ -254,77 +263,127 @@ module centipede(
assign s_4v = v_counter[2];
assign s_8v = v_counter[3];
assign s_16v = v_counter[4];
- assign s_16v_en = s_256h_n_en & v_counter[4:0] == 5'b01111;
+ assign s_16v_en = s_256h_n_en & v_counter[4:0] == 5'b01111;
assign s_32v = v_counter[5];
assign s_64v = v_counter[6];
assign s_128v = v_counter[7];
+ assign mob_n = ~((s_256h_n & s_256hd) | (s_256h2d_n & s_256hd)) | milli;
+
+ assign blank_clk = ~s_12mhz & (h_counter[3:0] == 4'b1111);
+
+ always @(posedge s_12mhz)
+ if (reset)
+ begin
+ s_256h2d <= 1'b0;
+ s_256hd <= 1'b0;
+ vblankd <= 1'b0;
+ end
+ else if (h_counter[3:0] == 4'b1111)
+ begin
+ s_256h2d <= s_256hd;
+ s_256hd <= s_256h;
+ vblankd <= vblank;
+ end
+
+ assign s_256h2d_n = ~s_256h2d;
+ assign s_256hd_n = ~s_256hd;
+ assign vblankd_n = ~vblankd;
assign vprom_addr = {vblank, s_128v, s_64v, s_32v, s_8v, s_4v, s_2v, s_1v};
-P4 P4(
- .clk(s_12mhz),
- .addr(vprom_addr),
- .data(vprom_out)
- );
+ dpram #(
+ .addr_width_g(8),
+ .data_width_g(4))
+ P4(
+ .clk_a_i(s_12mhz),
+ .clk_b_i(s_12mhz),
+ .we_i(1'b0),
+ .addr_a_i(vprom_addr),
+ .data_a_o(vprom_out),
+ .data_a_i(),
+ .addr_b_i(dl_addr[7:0]),
+ .data_b_o(),
+ .data_b_i(dl_data[3:0]),
+ .we_b_i(dl_we && dl_addr[14:8] == 7'b1010000)
+ );
-always @(posedge s_12mhz or posedge reset)
+ always @(posedge s_12mhz)
if (reset)
vprom_reg <= 0;
- else if (s_256h_n_en)
- vprom_reg <= vprom_out;
+ else if (s_256h_n_en)
+ vprom_reg <= vprom_out;
-assign vsync = vprom_reg[0];
-assign vreset = vprom_reg[2];
-assign hs_set = reset | ~s_256h_n;
+ assign vsync = vprom_reg[0];
+ assign vreset = vprom_reg[2];
+ assign hs_set = reset | ~s_256h_n;
-always @(posedge s_12mhz or posedge hs_set)
- if (hs_set)
- hs <= 1;
- else if (s_32h_en)
- hs <= s_64h;
+ always @(posedge s_12mhz or posedge hs_set)
+ if (hs_set)
+ hs <= 1;
+ else if (s_32h_en)
+ hs <= s_64h;
-assign hsync_reset = reset | hs;
+ assign hsync_reset = reset | hs;
-always @(posedge s_12mhz or posedge hsync_reset)
- if (hsync_reset)
- hsync <= 0;
- else if (s_8h_en)
- hsync <= s_32h;
+ always @(posedge s_12mhz or posedge hsync_reset)
+ if (hsync_reset)
+ hsync <= 0;
+ else if (s_8h_en)
+ hsync <= s_32h;
-always @(posedge s_12mhz)
- if (reset)
+ always @(posedge s_12mhz)
+ if (reset)
coloren <= 0;
else if (s_6mhz_en)
coloren <= s_256hd;
-assign s_6_12 = ~(s_6mhz & s_12mhz);
-reg xxx1;
+ assign s_6_12 = ~(s_6mhz & s_12mhz);
+ reg xxx1;
-always @(posedge s_12mhz)//s_6_12)
- if (reset)
- xxx1 <= 0;
- else if (s_6mhz_en)
- xxx1 <= coloren;
+ always @(posedge s_12mhz)//s_6_12)
+ if (reset)
+ xxx1 <= 0;
+ else if (s_6mhz_en)
+ xxx1 <= coloren;
-assign vblank = vprom_reg[3];
-assign hblank = ~(xxx1 | coloren);
+ reg hblank1_n;
+ always @(posedge s_12mhz)
+ if (reset)
+ hblank1_n <= 0;
+ else if (s_6mhz_n_en)
+ hblank1_n <= s_256hd;
-PROG PROG (
- .clk(s_12mhz),
- .addr(ab[12:0]),
- .data(rom_out[7:0])
- );
-
-spram #(
- .addr_width_g(10),
- .data_width_g(8))
-ram(
- .address(ab[9:0]),
- .clock(s_12mhz),
- .wren(~write_n & ~ram0_n),
- .data(db_out[7:0]),
- .q(ram_out[7:0])
- );
+
+ assign vblank = vprom_reg[3];
+ //assign hblank = ~(xxx1 | coloren);
+ assign hblank = ~hblank1_n;
+
+ dpram #(
+ .addr_width_g(14),
+ .data_width_g(8))
+ PROG(
+ .clk_a_i(s_12mhz),
+ .clk_b_i(s_12mhz),
+ .we_i(1'b0),
+ .addr_a_i(ab[13:0]),
+ .data_a_o(rom_out[7:0]),
+ .data_a_i(),
+ .addr_b_i(dl_addr[13:0]),
+ .data_b_o(),
+ .data_b_i(dl_data),
+ .we_b_i(dl_we && !dl_addr[14])
+ );
+
+ spram #(
+ .addr_width_g(10),
+ .data_width_g(8))
+ ram(
+ .address(ab[9:0]),
+ .clock(s_12mhz),
+ .wren(~write_n & ~ram0_n),
+ .data(db_out[7:0]),
+ .q(ram_out[7:0])
+ );
wire irq_n;
@@ -339,7 +398,7 @@ ram(
assign irq_n = irq;
- always @(posedge s_12mhz or posedge reset)
+ always @(posedge s_12mhz)
if (reset)
phi0a <= 1'b0;
else if (s_1h_en)
@@ -366,33 +425,30 @@ ram(
end
assign mpu_clk = s_6mhz;
- assign mpu_reset_n = ~mpu_reset;
-
-assign phi2 = ~phi0;
-T65 T65(
- .Mode("00"),
- .Res_n(mpu_reset_n),
- .Enable(phi0_en),
- .Clk(s_12mhz),
- .Rdy(1'b1),
- .Abort_n(1'b1),
- .IRQ_n(irq_n),
- .NMI_n(1'b1),
- .SO_n(1'b1),
- .R_W_n(rw_n),
- .A(ab),
- .DI(db_in[7:0]),
- .DO(db_out[7:0])
- );
+ assign mpu_reset_n = ~mpu_reset;
+ assign phi2 = ~phi0;
+ T65 T65(
+ .Mode("00"),
+ .Res_n(mpu_reset_n),
+ .Enable(phi0_en),
+ .Clk(s_12mhz),
+ .Rdy(1'b1),
+ .Abort_n(1'b1),
+ .IRQ_n(irq_n),
+ .NMI_n(1'b1),
+ .SO_n(1'b1),
+ .R_W_n(rw_n),
+ .A(ab),
+ .DI(db_in[7:0]),
+ .DO(db_out[7:0])
+ );
// Address Decoder
assign write_n = ~(phi2 & ~rw_n);
assign brw_n = ~rw_n;
- assign rom_n = brw_n | ~ab[13];
-
assign adecode =
(ab[13:10] == 4'b0000) ? 10'b1111111110 :
(ab[13:10] == 4'b0001) ? 10'b1111111101 :
@@ -406,74 +462,283 @@ T65 T65(
(ab[13:10] == 4'b1001) ? 10'b0111111111 :
10'b1111111111;
-// assign write2_n = ~(s_6mhz & ~write_n);
- reg write2_n;
- always @(posedge s_12mhz)
- if (reset)
- write2_n <= 0;
- else if (s_6mhz_en)
- write2_n <= write_n;
-
- assign steerclr_n = adecode[9] | write2_n;
- assign watchdog_n = adecode[8] | write2_n;
- assign out0_n = adecode[7] | write2_n;
- assign irqres_n = (adecode[6] | write2_n) & mpu_reset_n;
+ wire write2_n = ~(s_6mhz & ~write_n);
- assign coloram_n = (adecode[5] | ab[9])/* | pac_n*/;
+ // For millipede
+ wire mos_n = ab[14:12] != 3'b000;
+ wire io_n = ab[14:12] != 3'b010;
+ wire inputs_n = {io_n, ab[11:10]} != 3'b000;
+ wire outputs_n = {io_n, ab[11:10]} != 3'b001;
- assign pokey_n = adecode[4];
- assign pokey2_n = adecode[3];
+ always @(*) begin
+ if (milli) begin
+ rom_n = brw_n | ~ab[14];
- assign in0_n = adecode[3] | ab[1];
- assign in1_n = adecode[3] | ~ab[1];
+ steerclr_n = 1;//adecode[9] | write2_n;
+
+ in0_n = {inputs_n, ab[5:4]} != 3'b000;
+ in1_n = {inputs_n, ab[5:4]} != 3'b001;
+ ea_read_n = {inputs_n, ab[5:4]} != 3'b011;
- assign swrd_n = adecode[2];
- assign pf_n = adecode[1];
- assign ram0_n = adecode[0];
+ swrd_n = 1;//adecode[2];
+ pf_n = ab[14:12] != 3'b001; // _scram
+ ram0_n = {mos_n, ab[11:10]} != 3'b000;
+ pokey_n = {mos_n, ab[11:10]} != 3'b001;
+ pokey2_n = {mos_n, ab[11:10]} != 3'b010;
+
+ coloram_n = {outputs_n | write_n, ab[9:7]} != 4'b0001;
+ out0_n = {outputs_n | write_n, ab[9:7]} != 4'b0010;
+ irqres_n = {outputs_n | write_n, ab[9:7]} != 4'b0100 & mpu_reset_n;
+ watchdog_n = {outputs_n | write_n, ab[9:7]} != 4'b0101;
+ ea_ctrl_n = {outputs_n | write_n, ab[9:7]} != 4'b0110;
+ ea_addr_n = {outputs_n | write_n, ab[9:7]} != 4'b0111;
- assign {ea_read_n, ea_ctrl_n, ea_addr_n} =
- ({~ab[9]|adecode[5], ab[8:7]} == 3'b000) ? 3'b110 :
- ({~ab[9]|adecode[5], ab[8:7]} == 3'b001) ? 3'b101 :
- ({~ab[9]|adecode[5], ab[8:7]} == 3'b010) ? 3'b011 :
- 3'b111;
- assign pframrd_n = pf_n | brw_n;
+ pframrd_n = pf_n | brw_n;
- assign {pfwr3_n, pfwr2_n, pfwr1_n, pfwr0_n} =
+ {pfwr3_n, pfwr2_n, pfwr1_n, pfwr0_n} =
({pf_n, write_n, ab[5:4]} == 4'b0000) ? 4'b1110 :
({pf_n, write_n, ab[5:4]} == 4'b0001) ? 4'b1101 :
({pf_n, write_n, ab[5:4]} == 4'b0010) ? 4'b1011 :
({pf_n, write_n, ab[5:4]} == 4'b0011) ? 4'b0111 :
4'b1111;
- assign {pfrd3_n, pfrd2_n, pfrd1_n, pfrd0_n} =
+ {pfrd3_n, pfrd2_n, pfrd1_n, pfrd0_n} =
(ab[5:4] == 2'b00) ? 4'b1110 :
(ab[5:4] == 2'b01) ? 4'b1101 :
(ab[5:4] == 2'b10) ? 4'b1011 :
(ab[5:4] == 2'b11) ? 4'b0111 :
4'b1111;
+ end else begin
+ rom_n = brw_n | ~ab[13];
+
+ steerclr_n = adecode[9] | write2_n;
+ watchdog_n = adecode[8] | write2_n;
+ out0_n = adecode[7] | write2_n;
+ irqres_n = (adecode[6] | write2_n) & mpu_reset_n;
+
+ coloram_n = (adecode[5] | ab[9])/* | pac_n*/;
+
+ pokey_n = adecode[4];
+ pokey2_n = 1;// adecode[3];
+
+ in0_n = adecode[3] | ab[1];
+ in1_n = adecode[3] | ~ab[1];
+
+ swrd_n = adecode[2];
+ pf_n = adecode[1];
+ ram0_n = adecode[0];
+
+ {ea_read_n, ea_ctrl_n, ea_addr_n} =
+ ({~ab[9]|adecode[5], ab[8:7]} == 3'b000) ? 3'b110 :
+ ({~ab[9]|adecode[5], ab[8:7]} == 3'b001) ? 3'b101 :
+ ({~ab[9]|adecode[5], ab[8:7]} == 3'b010) ? 3'b011 :
+ 3'b111;
+ pframrd_n = pf_n | brw_n;
+
+ {pfwr3_n, pfwr2_n, pfwr1_n, pfwr0_n} =
+ ({pf_n, write_n, ab[5:4]} == 4'b0000) ? 4'b1110 :
+ ({pf_n, write_n, ab[5:4]} == 4'b0001) ? 4'b1101 :
+ ({pf_n, write_n, ab[5:4]} == 4'b0010) ? 4'b1011 :
+ ({pf_n, write_n, ab[5:4]} == 4'b0011) ? 4'b0111 :
+ 4'b1111;
+
+ {pfrd3_n, pfrd2_n, pfrd1_n, pfrd0_n} =
+ (ab[5:4] == 2'b00) ? 4'b1110 :
+ (ab[5:4] == 2'b01) ? 4'b1101 :
+ (ab[5:4] == 2'b10) ? 4'b1011 :
+ (ab[5:4] == 2'b11) ? 4'b0111 :
+ 4'b1111;
+ end
+ end
//
- assign mob_n = ~((s_256h_n & s_256hd) | (s_256h2d_n & s_256hd));
+ assign db_in =
+ ~rom_n ? rom_out :
+ ~ram0_n ? ram_out :
+ ~coloram_n ? coloram_out :
+ ~pframrd_n ? pf_out[7:0] :
+ ~ea_read_n ? hs_out :
+ ~in0_n ? playerin_out :
+ ~in1_n ? joystick_out :
+ ~swrd_n ? switch_out :
+ ~pokey_n ? pokey_out :
+ ~pokey2_n ? pokey2_out :
+ 8'b0;
+ //
+ // High Score Memory Circuitry
- assign blank_clk = ~s_12mhz & (h_counter[3:0] == 4'b1111);
+ wire hs_addr_en = ~ea_addr_n & ~write2_n;
+ wire hs_ctrl_en = ~ea_ctrl_n & ~write2_n;
- always @(posedge blank_clk or posedge reset)
+ always @(posedge s_12mhz) begin
+ if (hs_addr_en) begin
+ hs_addr <= ab[5:0];
+ hs_data <= db_out[7:0];
+ end
+ if (hs_ctrl_en) hs_ctrl <= db_out[3:0];
+ end
+
+ dpram #(
+ .addr_width_g(6),
+ .data_width_g(8))
+ hs_ram(
+ .clk_a_i(s_12mhz),
+ .clk_b_i(s_12mhz),
+ .we_i(hs_ctrl[1] & ~hs_ctrl[2]),
+ .addr_a_i(hs_addr),
+ .data_a_o(hs_out),
+ .data_a_i(hs_data),
+ .addr_b_i(hsram_addr),
+ .data_b_o(hsram_dout),
+ .data_b_i(hsram_din),
+ .we_b_i(hsram_we)
+ );
+
+ // Joystick Circuitry
+ wire js1_right, js1_left, js1_down, js1_up;
+ wire js2_right, js2_left, js2_down, js2_up;
+
+ assign js1_right = joystick_i[7];
+ assign js1_left = joystick_i[6];
+ assign js1_down = joystick_i[5];
+ assign js1_up = joystick_i[4];
+ assign js2_right = joystick_i[3];
+ assign js2_left = joystick_i[2];
+ assign js2_down = joystick_i[1];
+ assign js2_up = joystick_i[0];
+
+ wire [7:0] joystick_out_centi = ab[0] ?
+ { js1_right, js1_left, js1_down, js1_up, js2_right, js2_left, js2_down, js2_up } :
+ { dir2, 3'b0, trb };
+
+ wire [7:0] joystick_out_milli = {
+ ab[0] ? { self_test, 1'b0, cocktail, 1'b1 } : { coin_r, coin_l, coin_c, slam },
+ cntrlsel ? { js2_down, js2_up, js2_right, js2_left } : { js1_up, js1_down, js1_left, js1_right } };
+
+ assign joystick_out = milli ? joystick_out_milli : joystick_out_centi;
+
+ // Option Input Circuitry
+
+ assign switch_out = ab[0] ?
+ sw2_i :
+ sw1_i;
+
+ // Player Input Circuitry
+ wire coin_r, coin_c, coin_l, self_test;
+ wire cocktail, slam, start1, start2, fire2, fire1;
+
+ assign coin_r = coin_ctr_r_drive ? coin_ctr_r_drive : playerinput_i[9];
+ assign coin_c = coin_ctr_c_drive ? coin_ctr_c_drive : playerinput_i[8];
+ assign coin_l = coin_ctr_l_drive ? coin_ctr_l_drive : playerinput_i[7];
+ assign self_test = playerinput_i[6];
+ assign cocktail = playerinput_i[5];
+ assign slam = playerinput_i[4];
+ assign start2 = playerinput_i[3];
+ assign start1 = playerinput_i[2];
+ assign fire2 = playerinput_i[1];
+ assign fire1 = playerinput_i[0];
+
+ wire [7:0] playerin_out0;
+ wire [7:0] playerin_out1;
+
+ assign playerin_out1 = milli ?
+ { dir2, 1'b0, start2, fire2, sw1_i[7:4] } :
+ { coin_r, coin_c, coin_l, slam, fire2, fire1, start2, start1 };
+
+ assign playerin_out0 = milli ?
+ { dir1, vblank, start1, fire1, sw1_i[3:0] } :
+ { dir1, vblank, self_test, cocktail, tra };
+
+ assign playerin_out = ab[0] ? playerin_out1 : playerin_out0;
+
+ // Coin Counter Output
+ reg [7:0] cc_latch;
+
+ always @(posedge s_12mhz)
if (reset)
- begin
- s_256h2d <= 1'b0;
- s_256hd <= 1'b0;
- vblankd <= 1'b0;
- end
- else
- begin
- s_256h2d <= s_256hd;
- s_256hd <= s_256h;
- vblankd <= vblank;
- end
+ cc_latch <= 0;
+ else if (s_6mhz_en)
+ if (~out0_n)
+ cc_latch[ ab[2:0] ] <= db_out[7];
- assign s_256h2d_n = ~s_256h2d;
- assign s_256hd_n = ~s_256hd;
- assign vblankd_n = ~vblankd;
+ assign flip = milli ? cc_latch[6] : cc_latch[7];
+ assign cntrlsel = milli ? cc_latch[6] : 1'b0;
+ assign led_o[4] = milli ? 1'b0 : cc_latch[6];
+ assign led_o[3] = milli ? 1'b0 : cc_latch[5];
+ assign led_o[2] = cc_latch[4];
+ assign led_o[1] = cc_latch[3];
+ assign coin_ctr_r_drive = cc_latch[2];
+ assign coin_ctr_c_drive = cc_latch[1];
+ assign coin_ctr_l_drive = cc_latch[1];
+
+ // Mini-Trak Ball inputs
+ wire [3:0] tb_mux;
+ wire s_1_horiz_dir, s_1_horiz_ck, s_1_vert_dir, s_1_vert_ck;
+ wire s_2_horiz_dir, s_2_horiz_ck, s_2_vert_dir, s_2_vert_ck;
+ wire tb_h_dir, tb_h_ck, tb_v_dir, tb_v_ck;
+ reg tb_h_reg, tb_v_reg;
+ reg [3:0] tb_h_ctr, tb_v_ctr;
+ wire tb_h_ctr_clr, tb_v_ctr_clr;
+
+ assign s_1_horiz_dir = trakball_i[7];
+ assign s_2_horiz_dir = trakball_i[6];
+ assign s_1_horiz_ck = trakball_i[5];
+ assign s_2_horiz_ck = trakball_i[4];
+ assign s_1_vert_dir = trakball_i[3];
+ assign s_2_vert_dir = trakball_i[2];
+ assign s_1_vert_ck = trakball_i[1];
+ assign s_2_vert_ck = trakball_i[0];
+
+ assign tb_mux = flip ?
+ { s_1_horiz_dir, s_1_horiz_ck, s_1_vert_dir, s_1_vert_ck } :
+ { s_2_horiz_dir, s_2_horiz_ck, s_2_vert_dir, s_2_vert_ck };
+
+ assign tb_h_dir = tb_mux[3];
+ assign tb_h_ck = tb_mux[2];
+ assign tb_v_dir = tb_mux[1];
+ assign tb_v_ck = tb_mux[0];
+/*
+ // H
+ always @(posedge tb_h_ck or posedge reset)
+ if (reset)
+ tb_h_reg <= 0;
+ else
+ tb_h_reg <= tb_h_dir;
+
+ assign tb_h_ctr_clr = reset | ~steerclr_n;
+
+ always @(posedge tb_h_ck or posedge tb_h_ctr_clr)
+ if (tb_h_ctr_clr)
+ tb_h_ctr <= 0;
+ else
+ if (tb_h_reg)
+ tb_h_ctr <= tb_h_ctr + 4'd1;
+ else
+ tb_h_ctr <= tb_h_ctr - 4'd1;
+
+ // V
+ always @(posedge tb_v_ck or posedge reset)
+ if (reset)
+ tb_v_reg <= 0;
+ else
+ tb_v_reg <= tb_v_dir;
+
+ assign tb_v_ctr_clr = reset | ~steerclr_n;
+
+ always @(posedge tb_v_ck or posedge tb_v_ctr_clr)
+ if (tb_v_ctr_clr)
+ tb_v_ctr <= 0;
+ else
+ if (tb_v_reg)
+ tb_v_ctr <= tb_v_ctr + 4'd1;
+ else
+ tb_v_ctr <= tb_v_ctr - 4'd1;
+*/
+ assign tra = tb_h_ctr;
+ assign trb = tb_v_ctr;
+ assign dir1 = tb_h_reg;
+ assign dir2 = tb_v_reg;
+
// motion objects (vertical)
@@ -520,12 +785,15 @@ T65 T65(
// for debug only
assign match_true = (~match_n & s_256h_n) && pfd != 0;
+ wire pic7 = milli ? !s_256h & pic[7] : pic[7];
- assign mga = { match_mux[3] ^ (pic[7] & s_256h_n),
- match_mux[2] ^ pic[7],
- match_mux[1] ^ pic[7],
- match_mux[0] ^ pic[7] };
-
+ assign mga = { match_mux[3] ^ (pic7 & s_256h_n),
+ match_mux[2] ^ pic7,
+ match_mux[1] ^ pic7,
+ match_mux[0] ^ pic7 };
+
+ wire horrot = milli ? (!s_256h & pic[6]) : pic[6];
+ wire mga10 = s_256h ? pic[6] : pic[0];
//---
// motion objects (horizontal)
@@ -548,7 +816,7 @@ T65 T65(
else
/* posedge s_4h */
if (s_4h_en)
- pfd_hold <= pfd[29:16];
+ pfd_hold <= pfd[31:16];
// always @(posedge s_4h_n)
// if (reset)
@@ -562,7 +830,9 @@ T65 T65(
/* posedge s_4h_n */
if (s_4h_n_en)
pfd_hold2 <= pfd_hold;
-
+
+ reg [1:0] y_reg;
+
assign y[1] = // C7
(area == 2'b00) ? (s_256hd ? 1'b0 : gry[1]) :
(area == 2'b01) ? (s_256hd ? 1'b0 : pfd_hold2[25]) :
@@ -577,13 +847,16 @@ T65 T65(
(area == 2'b11) ? (s_256hd ? 1'b0 : pfd_hold2[28]) :
1'b0;
+ assign mocbx[0] = (area == 2'b00) ? (s_256hd ? 1'b0 : mocb[0]) : pfd_hold2[30];
+ assign mocbx[1] = (area == 2'b00) ? (s_256hd ? 1'b0 : mocb[1]) : pfd_hold2[31];
+
assign line_ram_ctr_load = ~(pload_n | s_256h);
assign line_ram_ctr_clr = ~(pload_n | ~(s_256h & s_256hd_n));
- always @(posedge s_6mhz) // A5-B5
+ always @(posedge s_12mhz) // A5-B5
if (reset)
line_ram_ctr <= 0;
- else /*if (s_6mhz_en)*/ begin
+ else if (s_6mhz_en) begin
if (line_ram_ctr_clr)
line_ram_ctr <= 0;
else if (line_ram_ctr_load)
@@ -595,25 +868,26 @@ T65 T65(
assign line_ram_addr = line_ram_ctr;
always @(posedge s_12mhz)
- if (~s_6mhz) line_ram[line_ram_addr] <= y;
+ if (~s_6mhz) line_ram[line_ram_addr] <= {mocbx, y};
- always @(posedge s_12mhz)
- if (reset)
+ always @(negedge s_12mhz)
+ if (reset) begin
mr <= 0;
- else
- mr <= line_ram[line_ram_addr];
+ mocb_o <= 0;
+ end else
+ {mocb_o, mr} <= line_ram[line_ram_addr];
+ reg [1:0] mocb, mocb_o;
+ wire [1:0] mocbx;
- always @(posedge s_6mhz_n)
- if (reset)
- gry <= 0;
- else
- if (~mob_n)
+ always @(posedge s_12mhz, negedge mob_n)
+ if (~mob_n)
gry <= 2'b00;
- else/* if (s_6mhz_n_en)*/
+ else if (s_6mhz_n_en) begin
gry <= mr;
-
+ mocb <= mocb_o;
+ end
// playfield multiplexer
// The playfield multiplexer receives playfield data from the pf memory
@@ -634,26 +908,48 @@ T65 T65(
// else
// pic <= pf[7:0];
always @(posedge s_12mhz)
- if (reset)
- pic <= 0;
- else if (s_4h_en)
- pic <= pf[7:0];
-
-F7 F7(
- .clk(s_12mhz),
- .addr(pf_rom0_addr),
- .data(pf_rom0_out)
- );
-
-HJ7 HJ7(
- .clk(s_12mhz),
- .addr(pf_rom1_addr),
- .data(pf_rom1_out)
- );
+ if (reset)
+ pic <= 0;
+ else if (s_4h_en)
+ pic <= pf[7:0];
+ else if (s_4h_n_en)
+ picD <= pic;
+
+ dpram #(
+ .addr_width_g(11),
+ .data_width_g(8))
+ F7(
+ .clk_a_i(s_12mhz),
+ .clk_b_i(s_12mhz),
+ .we_i(1'b0),
+ .addr_a_i(pf_rom0_addr),
+ .data_a_o(pf_rom0_out),
+ .data_a_i(),
+ .addr_b_i(dl_addr[10:0]),
+ .data_b_o(),
+ .data_b_i(dl_data),
+ .we_b_i(dl_we && dl_addr[14:11] == 4'b1000)
+ );
+
+ dpram #(
+ .addr_width_g(11),
+ .data_width_g(8))
+ HJ7(
+ .clk_a_i(s_12mhz),
+ .clk_b_i(s_12mhz),
+ .we_i(1'b0),
+ .addr_a_i(pf_rom1_addr),
+ .data_a_o(pf_rom1_out),
+ .data_a_i(),
+ .addr_b_i(dl_addr[10:0]),
+ .data_b_o(),
+ .data_b_i(dl_data),
+ .we_b_i(dl_we && dl_addr[14:11] == 4'b1001)
+ );
// a guess, based on millipede schematics
wire pf_romx_haddr;
- assign pf_romx_haddr = s_256h_n & pic[0];
+ assign pf_romx_haddr = milli ? mga10 : s_256h_n & pic[0];
assign pf_rom1_addr = { pf_romx_haddr, s_256h, pic[5:1], mga };
assign pf_rom0_addr = { pf_romx_haddr, s_256h, pic[5:1], mga };
assign pf_rom0_out_rev = { pf_rom0_out[0], pf_rom0_out[1], pf_rom0_out[2], pf_rom0_out[3],
@@ -662,8 +958,8 @@ HJ7 HJ7(
assign pf_rom1_out_rev = { pf_rom1_out[0], pf_rom1_out[1], pf_rom1_out[2], pf_rom1_out[3],
pf_rom1_out[4], pf_rom1_out[5], pf_rom1_out[6], pf_rom1_out[7] };
- assign pf_mux0 = match_n ? 8'b0 : (pic[6] ? pf_rom0_out_rev : pf_rom0_out);
- assign pf_mux1 = match_n ? 8'b0 : (pic[6] ? pf_rom1_out_rev : pf_rom1_out);
+ assign pf_mux0 = match_n ? 8'b0 : (horrot ? pf_rom0_out_rev : pf_rom0_out);
+ assign pf_mux1 = match_n ? 8'b0 : (horrot ? pf_rom1_out_rev : pf_rom1_out);
always @(posedge s_12mhz)
if (reset)
@@ -689,19 +985,6 @@ HJ7 HJ7(
else if (s_6mhz_n_en)
area <= { pf_shift1[7], pf_shift0[7] };
- //
- assign db_in =
- ~rom_n ? rom_out :
- ~ram0_n ? ram_out :
- ~coloram_n ? { 4'b0, coloram_out } :
- ~pframrd_n ? pf_out[7:0] :
- ~ea_read_n ? hs_out :
- ~in0_n ? playerin_out :
- ~in1_n ? joystick_out :
- ~swrd_n ? switch_out :
- ~pokey_n ? pokey_out :
- 8'b0;
-
// we ignore the cpu, as pf ram is now dp and cpu has it's own port
// assign pf_sel = mob_n ? { s_8v, s_128h } : 2'b00;
@@ -732,209 +1015,27 @@ HJ7 HJ7(
assign pfa = { pfa7654, pfa3210 };
wire pf_ce;
- reg pf_ce_d;
wire [3:0] pf_ce4_n;
assign pf_ce = ~(s_1h & s_2h & s_4h & s_6mhz);
- always @(posedge s_12mhz)
- if (reset)
- pf_ce_d <= 0;
- else
- pf_ce_d <= pf_ce;
-
-// assign pf_ce4_n = { pf_ce_d, pf_ce_d, pf_ce_d, pf_ce_d };
assign pf_ce4_n = 4'b0;
-
+
pf_ram pf_ram(
- .clk_a(s_12mhz),
- .clk_b(s_12mhz),
- .reset(reset),
- //
- .addr_a({ab[9:6], ab[3:0]}),
- .din_a(db_out[7:0]),
- .dout_a(pf_out),
- .ce_a({pfrd3_n, pfrd2_n, pfrd1_n, pfrd0_n}),
- .we_a({pfwr3_n, pfwr2_n, pfwr1_n, pfwr0_n}),
- //
- .addr_b(pfa),
- .dout_b(pfd),
- .ce_b(pf_ce4_n)
- );
-
- // High Score Memory Circuitry
+ .clk_a(s_12mhz),
+ .clk_b(s_12mhz),
+ .reset(reset),
+ //
+ .addr_a({ab[9:6], ab[3:0]}),
+ .din_a(db_out[7:0]),
+ .dout_a(pf_out),
+ .ce_a({pfrd3_n, pfrd2_n, pfrd1_n, pfrd0_n}),
+ .we_a({pfwr3_n, pfwr2_n, pfwr1_n, pfwr0_n}),
+ //
+ .addr_b(pfa),
+ .dout_b(pfd),
+ .ce_b(pf_ce4_n)
+ );
- assign hs_addr_clk = ~(~ea_addr_n & ~write2_n);
- assign hs_ctrl_clk = ~(~ea_ctrl_n & ~write2_n);
- always @(posedge hs_addr_clk)
- hs_addr <= ab[5:0];
-
- always @(posedge hs_ctrl_clk)
- hs_ctrl <= db_out[3:0];
-/*
-spram #(
- .addr_width_g(6),
- .data_width_g(8))
-hs_ram(
- .address(hs_addr),
- .clock(hs_ctrl[0] & ~hs_ctrl[3]),
- .wren(~hs_ctrl[1] & hs_ctrl[2]),
- .data(hs_data),
- .q(hs_out)
- ); */
-assign hs_out = 8'b0;
- always @(posedge hs_addr_clk)
- hs_data <= db_out[7:0];
-
- // Joystick Circuitry
- wire js1_right, js1_left, js1_down, js1_up;
- wire js2_right, js2_left, js2_down, js2_up;
-
- assign js1_right = joystick_i[7];
- assign js1_left = joystick_i[6];
- assign js1_down = joystick_i[5];
- assign js1_up = joystick_i[4];
- assign js2_right = joystick_i[3];
- assign js2_left = joystick_i[2];
- assign js2_down = joystick_i[1];
- assign js2_up = joystick_i[0];
-
- assign joystick_out = ab[0] ?
- { js1_right, js1_left, js1_down, js1_up, js2_right, js2_left, js2_down, js2_up } :
- { dir2, 3'b0, trb };
-
- // Option Input Circuitry
-
- assign switch_out = ab[0] ?
- sw2_i :
- sw1_i;
-
- // Player Input Circuitry
- wire coin_r, coin_c, coin_l, self_test;
- wire cocktail, slam, start1, start2, fire2, fire1;
-
- assign coin_r = coin_ctr_r_drive ? coin_ctr_r_drive : playerinput_i[9];
- assign coin_c = coin_ctr_c_drive ? coin_ctr_c_drive : playerinput_i[8];
- assign coin_l = coin_ctr_l_drive ? coin_ctr_l_drive : playerinput_i[7];
- assign self_test = playerinput_i[6];
- assign cocktail = playerinput_i[5];
- assign slam = playerinput_i[4];
- assign start1 = playerinput_i[3];
- assign start2 = playerinput_i[2];
- assign fire2 = playerinput_i[1];
- assign fire1 = playerinput_i[0];
-
- wire [7:0] playerin_out0;
- wire [7:0] playerin_out1;
-
- assign playerin_out1 = { coin_r, coin_c, coin_l, slam, fire2, fire1, start1, start2 };
- assign playerin_out0 = { dir1, vblank, self_test, cocktail, tra };
-
- assign playerin_out = ab[0] ? playerin_out1 : playerin_out0;
-
- // Coin Counter Output
- reg [7:0] cc_latch;
-
- always @(posedge s_12mhz or posedge reset)
- if (reset)
- cc_latch <= 0;
- else if (s_6mhz_en)
- if (~out0_n)
- cc_latch[ ab[2:0] ] <= db_out[7];
-
- assign flip = cc_latch[7];
- assign led_o[4] = cc_latch[6];
- assign led_o[3] = cc_latch[5];
- assign led_o[2] = cc_latch[4];
- assign led_o[1] = cc_latch[3];
- assign coin_ctr_r_drive = cc_latch[2];
- assign coin_ctr_c_drive = cc_latch[1];
- assign coin_ctr_l_drive = cc_latch[1];
-
- // Mini-Trak Ball inputs
- wire [3:0] tb_mux;
- wire s_1_horiz_dir, s_1_horiz_ck, s_1_vert_dir, s_1_vert_ck;
- wire s_2_horiz_dir, s_2_horiz_ck, s_2_vert_dir, s_2_vert_ck;
- wire tb_h_dir, tb_h_ck, tb_v_dir, tb_v_ck;
- reg tb_h_reg, tb_v_reg;
- reg [3:0] tb_h_ctr, tb_v_ctr;
- wire tb_h_ctr_clr, tb_v_ctr_clr;
-
- assign s_1_horiz_dir = trakball_i[7];
- assign s_2_horiz_dir = trakball_i[6];
- assign s_1_horiz_ck = trakball_i[5];
- assign s_2_horiz_ck = trakball_i[4];
- assign s_1_vert_dir = trakball_i[3];
- assign s_2_vert_dir = trakball_i[2];
- assign s_1_vert_ck = trakball_i[1];
- assign s_2_vert_ck = trakball_i[0];
-
- assign tb_mux = flip ?
- { s_1_horiz_dir, s_1_horiz_ck, s_1_vert_dir, s_1_vert_ck } :
- { s_2_horiz_dir, s_2_horiz_ck, s_2_vert_dir, s_2_vert_ck };
-
- assign tb_h_dir = tb_mux[3];
- assign tb_h_ck = tb_mux[2];
- assign tb_v_dir = tb_mux[1];
- assign tb_v_ck = tb_mux[0];
-
- // H
- always @(posedge tb_h_ck or posedge reset)
- if (reset)
- tb_h_reg <= 0;
- else
- tb_h_reg <= tb_h_dir;
-
- assign tb_h_ctr_clr = reset | ~steerclr_n;
-
- always @(posedge tb_h_ck or posedge tb_h_ctr_clr)
- if (tb_h_ctr_clr)
- tb_h_ctr <= 0;
- else
- if (tb_h_reg)
- tb_h_ctr <= tb_h_ctr + 4'd1;
- else
- tb_h_ctr <= tb_h_ctr - 4'd1;
-
- // V
- always @(posedge tb_v_ck or posedge reset)
- if (reset)
- tb_v_reg <= 0;
- else
- tb_v_reg <= tb_v_dir;
-
- assign tb_v_ctr_clr = reset | ~steerclr_n;
-
- always @(posedge tb_v_ck or posedge tb_v_ctr_clr)
- if (tb_v_ctr_clr)
- tb_v_ctr <= 0;
- else
- if (tb_v_reg)
- tb_v_ctr <= tb_v_ctr + 4'd1;
- else
- tb_v_ctr <= tb_v_ctr - 4'd1;
-
- assign tra = tb_h_ctr;
- assign trb = tb_v_ctr;
- assign dir1 = tb_h_reg;
- assign dir2 = tb_v_reg;
-
-
- // Audio output circuitry
-
-
-POKEY POKEY(
- .Din(db_out[7:0]),
- .Dout(pokey_out),
- .A(ab[3:0]),
- .P(8'b0),
- .phi2(phi2),
- .readHighWriteLow(rw_n),
- .cs0Bar(pokey_n),
- .audio(audio),
- .clk(clk_100mhz)
- );
-
-
// Video output circuitry
// The video output circuit receives motion object, playfield, address and data inputs
@@ -955,7 +1056,7 @@ POKEY POKEY(
wire gry0_or_1;
assign gry0_or_1 = gry[1] | gry[0];
- assign rama_sel = { coloram_n, gry0_or_1 };
+ //assign rama_sel = { coloram_n, gry0_or_1 };
// assign rama =
// (rama_sel == 2'b00) ? { ab[3:0] } :
@@ -964,42 +1065,50 @@ POKEY POKEY(
// (rama_sel == 2'b11) ? { {gry0_or_1, 1'b1}, gry[1:0] } :
// 4'b0;
- assign rama = gry0_or_1 ?
- { {gry0_or_1, 1'b1}, gry[1:0] } :
- { {gry0_or_1, 1'b1}, area[1:0] };
+ wire [3:0] rama_centi = gry0_or_1 ?
+ { {gry0_or_1, 1'b1}, gry[1:0] } :
+ { {gry0_or_1, 1'b1}, area[1:0] };
-
-dpram #(
- .addr_width_g(4),
- .data_width_g(4))
-color_ram(
- .clk_a_i(s_12mhz),
- .clk_b_i(s_12mhz),
- .we_i(~coloram_w_n),
- .addr_a_i(ab[3:0]),
- .data_a_o(coloram_out),
- .data_a_i(db_out[3:0]),
- .addr_b_i(rama),
- .data_b_o(coloram_rgbi)
- );
+ wire rama_hi_sel = (gry0_or_1 & s_256h & s_256h2d);
+ wire [4:0] rama_milli = {rama_hi_sel, rama_hi_sel ? {mocb, gry} : {picD[7:6], area}};
- assign rgb_o =
- rgbi == 4'b0000 ? 9'b111_111_111 :
- rgbi == 4'b0001 ? 9'b111_111_011 :
- rgbi == 4'b0010 ? 9'b111_011_111 :
- rgbi == 4'b0011 ? 9'b111_011_011 :
- rgbi == 4'b0100 ? 9'b011_111_111 :
- rgbi == 4'b0101 ? 9'b011_111_011 :
- rgbi == 4'b0110 ? 9'b011_011_111 :
- rgbi == 4'b0111 ? 9'b011_011_011 :
- rgbi == 4'b1000 ? 9'b111_111_111 :
- rgbi == 4'b1001 ? 9'b111_111_000 :
- rgbi == 4'b1010 ? 9'b111_000_111 :
- rgbi == 4'b1011 ? 9'b111_000_000 :
- rgbi == 4'b1100 ? 9'b000_111_111 :
- rgbi == 4'b1101 ? 9'b000_111_000 :
- rgbi == 4'b1110 ? 9'b000_000_111 :
- rgbi == 4'b1111 ? 9'b000_000_000 :
+ wire [4:0] rama = milli ? rama_milli : {1'b0, rama_centi};
+ wire [4:0] cram_a = milli ? ab[4:0] : {1'b0, ab[3:0]};
+
+ dpram #(
+ .addr_width_g(5),
+ .data_width_g(8))
+ color_ram(
+ .clk_a_i(s_12mhz),
+ .clk_b_i(s_12mhz),
+ .we_i(~coloram_w_n),
+ .addr_a_i(cram_a),
+ .data_a_o(coloram_out),
+ .data_a_i(milli ? db_out : {db_out[3:0], db_out[3:0]}),
+ .addr_b_i(rama),
+ .data_b_o(coloram_rgbi)
+ );
+
+ assign rgb_o = milli ? rgb_o_milli : rgb_o_centi;
+
+ wire [8:0] rgb_o_milli = ~{ rgbi[2:0], rgbi[4:3], 1'b1, rgbi[7:5] };
+ wire [8:0] rgb_o_centi =
+ rgbi[3:0] == 4'b0000 ? 9'b111_111_111 :
+ rgbi[3:0] == 4'b0001 ? 9'b111_111_011 :
+ rgbi[3:0] == 4'b0010 ? 9'b111_011_111 :
+ rgbi[3:0] == 4'b0011 ? 9'b111_011_011 :
+ rgbi[3:0] == 4'b0100 ? 9'b011_111_111 :
+ rgbi[3:0] == 4'b0101 ? 9'b011_111_011 :
+ rgbi[3:0] == 4'b0110 ? 9'b011_011_111 :
+ rgbi[3:0] == 4'b0111 ? 9'b011_011_011 :
+ rgbi[3:0] == 4'b1000 ? 9'b111_111_111 :
+ rgbi[3:0] == 4'b1001 ? 9'b111_111_000 :
+ rgbi[3:0] == 4'b1010 ? 9'b111_000_111 :
+ rgbi[3:0] == 4'b1011 ? 9'b111_000_000 :
+ rgbi[3:0] == 4'b1100 ? 9'b000_111_111 :
+ rgbi[3:0] == 4'b1101 ? 9'b000_111_000 :
+ rgbi[3:0] == 4'b1110 ? 9'b000_000_111 :
+ rgbi[3:0] == 4'b1111 ? 9'b000_000_000 :
9'd0;
@@ -1008,6 +1117,38 @@ color_ram(
assign vsync_o = vsync;
assign audio_o = audio;
assign hblank_o = hblank;
- assign vblank_o = vblank;
+ assign vblank_o = vblankd;
+
+ // Audio output circuitry
+
+ wire [3:0] pokey_audio;
+ POKEY POKEY(
+ .Din(db_out[7:0]),
+ .Dout(pokey_out),
+ .A(ab[3:0]),
+ .P(8'b0),
+ .phi2(phi2),
+ .readHighWriteLow(rw_n),
+ .cs0Bar(pokey_n),
+ .audio(pokey_audio),
+ .clk(clk_100mhz)
+ );
+
+ POKEY POKEY2(
+ .Din(db_out[7:0]),
+ .Dout(pokey2_out),
+ .A(ab[3:0]),
+ .P(8'b0),
+ .phi2(phi2),
+ .readHighWriteLow(rw_n),
+ .cs0Bar(pokey2_n),
+ .audio(pokey2_audio),
+ .clk(clk_100mhz)
+ );
+ wire [3:0] pokey2_audio;
+ wire [4:0] pokey_mux = pokey_audio + pokey2_audio;
+
+ assign audio = milli ? (pokey_mux[4] ? 4'hf : pokey_mux[3:0]) : pokey_audio;
+
endmodule
diff --git a/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/rtl/dpram.vhd b/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/rtl/dpram.vhd
index d867b5d2..e42e9194 100644
--- a/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/rtl/dpram.vhd
+++ b/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/rtl/dpram.vhd
@@ -18,7 +18,9 @@ entity dpram is
data_a_i : in std_logic_vector(data_width_g-1 downto 0);
data_a_o : out std_logic_vector(data_width_g-1 downto 0);
clk_b_i : in std_logic;
+ we_b_i : in std_logic := '0';
addr_b_i : in std_logic_vector(addr_width_g-1 downto 0);
+ data_b_i : in std_logic_vector(data_width_g-1 downto 0);
data_b_o : out std_logic_vector(data_width_g-1 downto 0)
);
end entity;
@@ -52,6 +54,9 @@ begin
begin
if rising_edge(clk_b_i) then
read_addr_v := unsigned(addr_b_i);
+ if we_b_i = '1' then
+ ram_q(to_integer(read_addr_v)) <= data_b_i;
+ end if;
data_b_o <= ram_q(to_integer(read_addr_v));
end if;
end process mem_b;
diff --git a/common/Sound/Pokey/matoro.sv b/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/rtl/matoro.sv
similarity index 100%
rename from common/Sound/Pokey/matoro.sv
rename to Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/rtl/matoro.sv
diff --git a/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/rtl/pf_ram.v b/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/rtl/pf_ram.v
index aac899ac..c774f7bb 100644
--- a/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/rtl/pf_ram.v
+++ b/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/rtl/pf_ram.v
@@ -27,12 +27,12 @@ dpram #(
.addr_width_g(8),
.data_width_g(8))
ram0(
- .clk_a_i(clk_a & ~ce_a[0]),
+ .clk_a_i(clk_a),
.we_i(~we_a[0]),
.addr_a_i(addr_a),
.data_a_i(din_a),
.data_a_o(d_a0),
- .clk_b_i(clk_b & ~ce_b[0]),
+ .clk_b_i(clk_b),
.addr_b_i(addr_b),
.data_b_o(d_b0)
);
@@ -41,12 +41,12 @@ dpram #(
.addr_width_g(8),
.data_width_g(8))
ram1(
- .clk_a_i(clk_a & ~ce_a[1]),
+ .clk_a_i(clk_a),
.we_i(~we_a[1]),
.addr_a_i(addr_a),
.data_a_i(din_a),
.data_a_o(d_a1),
- .clk_b_i(clk_b & ~ce_b[1]),
+ .clk_b_i(clk_b),
.addr_b_i(addr_b),
.data_b_o(d_b1)
);
@@ -55,12 +55,12 @@ dpram #(
.addr_width_g(8),
.data_width_g(8))
ram2(
- .clk_a_i(clk_a & ~ce_a[2]),
+ .clk_a_i(clk_a),
.we_i(~we_a[2]),
.addr_a_i(addr_a),
.data_a_i(din_a),
.data_a_o(d_a2),
- .clk_b_i(clk_b & ~ce_b[2]),
+ .clk_b_i(clk_b),
.addr_b_i(addr_b),
.data_b_o(d_b2)
);
@@ -69,12 +69,12 @@ dpram #(
.addr_width_g(8),
.data_width_g(8))
ram3(
- .clk_a_i(clk_a & ~ce_a[3]),
+ .clk_a_i(clk_a),
.we_i(~we_a[3]),
.addr_a_i(addr_a),
.data_a_i(din_a),
.data_a_o(d_a3),
- .clk_b_i(clk_b & ~ce_b[3]),
+ .clk_b_i(clk_b),
.addr_b_i(addr_b),
.data_b_o(d_b3)
);
diff --git a/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/rtl/roms/F7.vhd b/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/rtl/roms/F7.vhd
deleted file mode 100644
index 0af1e96f..00000000
--- a/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/rtl/roms/F7.vhd
+++ /dev/null
@@ -1,150 +0,0 @@
-library ieee;
-use ieee.std_logic_1164.all,ieee.numeric_std.all;
-
-entity F7 is
-port (
- clk : in std_logic;
- addr : in std_logic_vector(10 downto 0);
- data : out std_logic_vector(7 downto 0)
-);
-end entity;
-
-architecture prom of F7 is
- type rom is array(0 to 2047) of std_logic_vector(7 downto 0);
- signal rom_data: rom := (
- X"00",X"00",X"00",X"00",X"3C",X"18",X"18",X"FF",X"7E",X"3C",X"18",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"3C",X"18",X"18",X"7E",X"7E",X"BD",X"18",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"3C",X"18",X"18",X"FF",X"7E",X"3C",X"18",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"3C",X"99",X"18",X"7E",X"7E",X"3C",X"18",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"0A",X"4C",X"3E",X"3E",X"FE",X"7C",X"B8",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"0A",X"4C",X"3E",X"3E",X"FE",X"7C",X"B8",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"10",X"18",X"9C",X"FE",X"FE",X"9C",X"18",X"10",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"10",X"18",X"9C",X"FE",X"FE",X"9C",X"18",X"10",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"18",X"30",X"F2",X"FF",X"F2",X"30",X"18",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"44",X"22",X"11",X"22",X"44",X"68",X"A0",X"3C",X"A0",X"68",X"44",X"22",X"11",X"22",X"44",X"00",
- X"90",X"48",X"24",X"24",X"44",X"68",X"E0",X"3C",X"A0",X"68",X"44",X"24",X"24",X"48",X"90",X"00",
- X"90",X"48",X"24",X"24",X"44",X"68",X"A0",X"3C",X"A0",X"68",X"44",X"24",X"24",X"48",X"90",X"00",
- X"10",X"88",X"44",X"33",X"44",X"68",X"E0",X"3C",X"A0",X"68",X"44",X"33",X"44",X"88",X"10",X"00",
- X"00",X"00",X"00",X"18",X"18",X"98",X"7F",X"8F",X"7F",X"1E",X"7C",X"B8",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"18",X"18",X"18",X"6F",X"9F",X"2F",X"5E",X"BC",X"78",X"00",X"00",X"00",X"00",
- X"22",X"55",X"BE",X"74",X"02",X"61",X"C2",X"74",X"36",X"43",X"E0",X"40",X"36",X"7D",X"AE",X"44",
- X"14",X"94",X"42",X"F1",X"42",X"94",X"34",X"3C",X"3C",X"34",X"94",X"42",X"F1",X"42",X"94",X"14",
- X"00",X"24",X"4A",X"34",X"34",X"0C",X"3E",X"75",X"6D",X"2A",X"1C",X"34",X"34",X"4A",X"24",X"00",
- X"00",X"00",X"00",X"00",X"10",X"00",X"3C",X"1C",X"1C",X"1E",X"00",X"04",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"80",X"98",X"50",X"34",X"3C",X"3C",X"3C",X"3F",X"3E",X"3C",X"7C",X"BC",X"3C",X"7C",X"B8",X"98",
- X"00",X"86",X"FC",X"05",X"0F",X"0F",X"0F",X"7F",X"8F",X"8F",X"0F",X"1F",X"EF",X"8F",X"0E",X"06",
- X"01",X"06",X"0D",X"08",X"08",X"7C",X"FF",X"FC",X"F8",X"C8",X"CD",X"C6",X"C1",X"CC",X"E4",X"7C",
- X"01",X"06",X"0D",X"08",X"7C",X"FF",X"FC",X"C8",X"CD",X"C6",X"E1",X"60",X"30",X"18",X"44",X"3C",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"F8",X"88",X"F8",X"00",X"F8",X"88",X"F8",X"00",X"F8",X"A8",X"A8",X"00",X"00",
- X"00",X"00",X"00",X"F8",X"88",X"F8",X"00",X"F8",X"88",X"F8",X"00",X"E8",X"A8",X"F8",X"00",X"00",
- X"00",X"00",X"00",X"00",X"08",X"B1",X"42",X"81",X"02",X"00",X"29",X"50",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"59",X"96",X"01",X"83",X"82",X"84",X"EA",X"31",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"7C",X"FE",X"7F",X"3E",X"7F",X"FE",X"7C",X"7E",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"3C",X"42",X"81",X"81",X"81",X"81",X"42",X"3C",
- X"3C",X"42",X"81",X"81",X"81",X"81",X"42",X"3C",X"00",X"00",X"00",X"00",X"08",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"18",X"30",X"F2",X"FF",X"F2",X"30",X"18",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"0C",X"06",X"0F",X"03",X"0F",X"07",X"0E",X"0C",X"1C",X"0E",X"3F",X"0F",X"1F",X"0F",X"1E",X"0C",
- X"1C",X"0E",X"3F",X"7F",X"3F",X"3F",X"1E",X"1C",X"1C",X"1E",X"FF",X"FF",X"FF",X"FF",X"1E",X"1C",
- X"00",X"04",X"0E",X"02",X"0E",X"06",X"0C",X"00",X"00",X"0C",X"0E",X"0E",X"0E",X"0E",X"0C",X"00",
- X"00",X"0C",X"0E",X"6E",X"2E",X"0E",X"0C",X"00",X"00",X"0C",X"0E",X"6E",X"6E",X"0E",X"0C",X"00",
- X"00",X"00",X"00",X"00",X"3C",X"18",X"18",X"7E",X"FF",X"3C",X"18",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"3C",X"18",X"18",X"7E",X"FF",X"3C",X"18",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"3C",X"18",X"99",X"7E",X"7E",X"3C",X"18",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"3C",X"18",X"99",X"7E",X"7E",X"3C",X"18",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"08",X"4D",X"3E",X"3E",X"FE",X"7C",X"38",X"40",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"08",X"4D",X"3E",X"3E",X"FE",X"7C",X"38",X"40",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"04",X"18",X"9C",X"FE",X"FE",X"9C",X"18",X"04",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"40",X"18",X"9C",X"FE",X"FE",X"9C",X"18",X"40",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"44",X"22",X"22",X"22",X"44",X"68",X"A0",X"3C",X"E0",X"68",X"44",X"22",X"22",X"22",X"44",X"00",
- X"40",X"20",X"90",X"88",X"68",X"68",X"E0",X"3C",X"E0",X"68",X"68",X"88",X"90",X"20",X"40",X"00",
- X"44",X"22",X"22",X"22",X"44",X"68",X"A0",X"3C",X"E0",X"68",X"44",X"22",X"22",X"22",X"44",X"00",
- X"20",X"10",X"88",X"64",X"47",X"68",X"E0",X"3C",X"E0",X"68",X"47",X"64",X"88",X"10",X"20",X"00",
- X"00",X"00",X"00",X"18",X"18",X"D8",X"2F",X"9F",X"4F",X"3E",X"BC",X"78",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"18",X"18",X"18",X"7F",X"8F",X"3F",X"DE",X"3C",X"F8",X"00",X"00",X"00",X"00",
- X"34",X"42",X"E9",X"42",X"34",X"1C",X"36",X"43",X"E9",X"42",X"34",X"34",X"42",X"E9",X"42",X"34",
- X"28",X"66",X"DA",X"5D",X"BE",X"4C",X"7B",X"36",X"36",X"7B",X"4E",X"BE",X"1D",X"DA",X"66",X"14",
- X"00",X"00",X"08",X"10",X"1C",X"3E",X"31",X"74",X"2E",X"1C",X"7C",X"38",X"08",X"10",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"08",X"30",X"38",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"8C",X"68",X"1A",X"1E",X"1E",X"1E",X"1F",X"7E",X"9E",X"9E",X"1E",X"FE",X"9E",X"9C",X"8C",
- X"80",X"B0",X"A0",X"68",X"78",X"78",X"78",X"7E",X"7A",X"7A",X"FC",X"78",X"78",X"F8",X"F8",X"B0",
- X"01",X"06",X"0D",X"18",X"10",X"7C",X"FF",X"FC",X"D0",X"D8",X"CD",X"C6",X"E1",X"7C",X"04",X"0C",
- X"01",X"06",X"0D",X"08",X"7C",X"FF",X"FC",X"C8",X"CD",X"C6",X"C1",X"CC",X"D2",X"C4",X"CC",X"78",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"F8",X"88",X"F8",X"00",X"F8",X"88",X"F8",X"00",X"F8",X"A8",X"B8",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"14",X"E5",X"02",X"A2",X"85",X"20",X"63",X"04",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"36",X"DD",X"CF",X"67",X"46",X"FF",X"6E",X"A8",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"20",X"7E",X"FE",X"6C",X"3E",X"7C",X"78",X"A0",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00");
-begin
-process(clk)
-begin
- if rising_edge(clk) then
- data <= rom_data(to_integer(unsigned(addr)));
- end if;
-end process;
-end architecture;
diff --git a/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/rtl/roms/HJ7.vhd b/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/rtl/roms/HJ7.vhd
deleted file mode 100644
index 3223a70a..00000000
--- a/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/rtl/roms/HJ7.vhd
+++ /dev/null
@@ -1,150 +0,0 @@
-library ieee;
-use ieee.std_logic_1164.all,ieee.numeric_std.all;
-
-entity HJ7 is
-port (
- clk : in std_logic;
- addr : in std_logic_vector(10 downto 0);
- data : out std_logic_vector(7 downto 0)
-);
-end entity;
-
-architecture prom of HJ7 is
- type rom is array(0 to 2047) of std_logic_vector(7 downto 0);
- signal rom_data: rom := (
- X"00",X"00",X"00",X"00",X"3C",X"7E",X"7E",X"7E",X"7E",X"3C",X"18",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"3C",X"7E",X"7E",X"7E",X"7E",X"3C",X"18",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"3C",X"7E",X"7E",X"7E",X"7E",X"3C",X"18",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"3C",X"7E",X"7E",X"7E",X"7E",X"3C",X"18",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"38",X"7C",X"FE",X"FE",X"FE",X"7C",X"38",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"38",X"7C",X"FE",X"FE",X"FE",X"7C",X"38",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"78",X"FC",X"FE",X"FE",X"FC",X"78",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"78",X"FC",X"FE",X"FE",X"FC",X"78",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"0C",X"0C",X"00",X"0C",X"0C",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"70",X"F8",X"FC",X"F8",X"70",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"70",X"F8",X"FC",X"F8",X"70",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"70",X"F8",X"FC",X"F8",X"70",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"70",X"F8",X"FC",X"F8",X"70",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"04",X"86",X"70",X"80",X"70",X"00",X"40",X"80",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"04",X"06",X"60",X"90",X"20",X"40",X"80",X"40",X"00",X"00",X"00",X"00",
- X"22",X"77",X"EA",X"7C",X"3E",X"7F",X"BE",X"7C",X"3E",X"7F",X"BE",X"7C",X"1E",X"7F",X"EA",X"44",
- X"5C",X"EC",X"7E",X"FF",X"7E",X"EC",X"5E",X"3B",X"3B",X"5E",X"EC",X"7E",X"FF",X"7E",X"EC",X"5C",
- X"00",X"24",X"76",X"2C",X"3C",X"14",X"2E",X"5F",X"73",X"3E",X"04",X"3C",X"2C",X"76",X"24",X"00",
- X"00",X"00",X"00",X"00",X"18",X"08",X"2C",X"12",X"24",X"1A",X"01",X"0C",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"18",X"1C",X"1C",X"0C",X"3C",X"3C",X"18",X"2C",X"18",X"34",X"2C",X"1C",X"3C",X"38",X"18",
- X"00",X"06",X"07",X"07",X"0F",X"0F",X"0F",X"04",X"0D",X"0B",X"07",X"0F",X"0F",X"0F",X"0E",X"06",
- X"00",X"00",X"00",X"00",X"02",X"03",X"00",X"03",X"02",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"02",X"03",X"00",X"03",X"02",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"4A",X"00",X"42",X"01",X"80",X"02",X"89",X"52",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"9D",X"B4",X"49",X"A6",X"C2",X"A1",X"6A",X"45",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"FE",X"7F",X"E7",X"67",X"FE",X"7F",X"2A",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"F8",X"FC",X"26",X"22",X"26",X"FC",X"F8",X"00",
- X"FE",X"FE",X"92",X"92",X"92",X"FE",X"6C",X"00",X"38",X"7C",X"C6",X"82",X"82",X"C6",X"44",X"00",
- X"FE",X"FE",X"82",X"82",X"C6",X"7C",X"38",X"00",X"FE",X"FE",X"92",X"92",X"92",X"82",X"80",X"00",
- X"FE",X"FE",X"12",X"12",X"12",X"12",X"02",X"00",X"38",X"7C",X"C6",X"82",X"92",X"F2",X"F2",X"00",
- X"FE",X"FE",X"10",X"10",X"10",X"FE",X"FE",X"00",X"82",X"82",X"FE",X"FE",X"82",X"82",X"00",X"00",
- X"40",X"C0",X"80",X"80",X"80",X"FE",X"7E",X"00",X"FE",X"FE",X"30",X"78",X"EC",X"C6",X"82",X"00",
- X"FE",X"FE",X"80",X"80",X"80",X"80",X"80",X"00",X"FE",X"FE",X"1C",X"38",X"1C",X"FE",X"FE",X"00",
- X"FE",X"FE",X"1C",X"38",X"70",X"FE",X"FE",X"00",X"7C",X"FE",X"82",X"82",X"82",X"FE",X"7C",X"00",
- X"FE",X"FE",X"22",X"22",X"22",X"3E",X"1C",X"00",X"7C",X"FE",X"82",X"A2",X"E2",X"7E",X"BC",X"00",
- X"FE",X"FE",X"22",X"62",X"F2",X"DE",X"8C",X"00",X"4C",X"DE",X"92",X"92",X"96",X"F4",X"60",X"00",
- X"02",X"02",X"FE",X"FE",X"02",X"02",X"00",X"00",X"7E",X"FE",X"80",X"80",X"80",X"FE",X"7E",X"00",
- X"1E",X"3E",X"70",X"E0",X"70",X"3E",X"1E",X"00",X"FE",X"FE",X"70",X"38",X"70",X"FE",X"FE",X"00",
- X"C6",X"EE",X"7C",X"38",X"7C",X"EE",X"C6",X"00",X"0E",X"1E",X"F0",X"F0",X"1E",X"0E",X"00",X"00",
- X"C2",X"E2",X"F2",X"BA",X"9E",X"8E",X"86",X"00",X"3C",X"42",X"BD",X"C3",X"C3",X"A5",X"42",X"3C",
- X"3C",X"42",X"FD",X"93",X"93",X"8D",X"42",X"3C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"2E",X"10",X"08",X"94",X"CA",X"A8",X"90",X"00",X"18",X"3C",X"FE",X"FF",X"FE",X"3C",X"18",X"00",
- X"38",X"7C",X"C2",X"82",X"86",X"7C",X"38",X"00",X"80",X"84",X"FE",X"FE",X"80",X"80",X"00",X"00",
- X"C4",X"E6",X"F2",X"B2",X"BA",X"9E",X"8C",X"00",X"40",X"C2",X"92",X"9A",X"9E",X"F6",X"62",X"00",
- X"30",X"38",X"2C",X"26",X"FE",X"FE",X"20",X"00",X"4E",X"CE",X"8A",X"8A",X"8A",X"FA",X"70",X"00",
- X"78",X"FC",X"96",X"92",X"92",X"F2",X"60",X"00",X"06",X"06",X"E2",X"F2",X"1A",X"0E",X"06",X"00",
- X"6C",X"9E",X"9A",X"B2",X"B2",X"EC",X"60",X"00",X"0C",X"9E",X"92",X"92",X"D2",X"7E",X"3C",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",
- X"00",X"00",X"00",X"66",X"66",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"04",X"0E",X"02",X"0E",X"06",X"0C",X"00",X"00",X"0C",X"0E",X"0E",X"0E",X"0E",X"0C",X"00",
- X"00",X"0C",X"0E",X"6E",X"2E",X"0E",X"0C",X"00",X"00",X"0C",X"0E",X"6E",X"6E",X"0E",X"0C",X"00",
- X"0C",X"02",X"01",X"01",X"01",X"01",X"02",X"0C",X"1C",X"02",X"31",X"01",X"11",X"01",X"12",X"0C",
- X"1C",X"02",X"31",X"11",X"11",X"31",X"12",X"1C",X"1C",X"12",X"F1",X"91",X"91",X"F1",X"12",X"1C",
- X"00",X"00",X"00",X"00",X"3C",X"7E",X"7E",X"7E",X"7E",X"3C",X"18",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"3C",X"7E",X"7E",X"7E",X"7E",X"3C",X"18",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"3C",X"7E",X"7E",X"7E",X"7E",X"3C",X"18",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"3C",X"7E",X"7E",X"7E",X"7E",X"3C",X"18",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"38",X"7C",X"FE",X"FE",X"FE",X"7C",X"38",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"38",X"7C",X"FE",X"FE",X"FE",X"7C",X"38",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"78",X"FC",X"FE",X"FE",X"FC",X"78",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"78",X"FC",X"FE",X"FE",X"FC",X"78",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FC",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"70",X"F8",X"FC",X"F8",X"70",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"70",X"F8",X"FC",X"F8",X"70",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"70",X"F8",X"FC",X"F8",X"70",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"70",X"F8",X"FC",X"F8",X"70",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"04",X"C6",X"20",X"90",X"40",X"20",X"80",X"40",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"04",X"06",X"70",X"80",X"30",X"C0",X"00",X"C0",X"00",X"00",X"00",X"00",
- X"3C",X"7E",X"F7",X"7E",X"3C",X"1C",X"3E",X"7F",X"F7",X"7E",X"3C",X"3C",X"7E",X"F7",X"7E",X"3C",
- X"28",X"7E",X"FE",X"37",X"EA",X"74",X"5F",X"6E",X"6E",X"5F",X"74",X"EA",X"37",X"FE",X"7E",X"14",
- X"00",X"00",X"18",X"18",X"34",X"52",X"34",X"4A",X"52",X"2C",X"4A",X"2C",X"18",X"18",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"10",X"38",X"30",X"28",X"10",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"0C",X"0E",X"06",X"1E",X"1E",X"1E",X"08",X"0C",X"1A",X"16",X"0E",X"1E",X"1E",X"1C",X"0C",
- X"00",X"30",X"38",X"38",X"58",X"78",X"58",X"50",X"58",X"38",X"78",X"70",X"68",X"18",X"78",X"30",
- X"00",X"00",X"00",X"00",X"02",X"03",X"00",X"03",X"02",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"02",X"03",X"00",X"03",X"02",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"54",X"CB",X"50",X"A2",X"05",X"B2",X"4B",X"10",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"7E",X"7D",X"E6",X"63",X"67",X"FB",X"6E",X"2A",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"18",X"BC",X"7F",X"EF",X"7E",X"FD",X"14",X"A0",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
- X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00");
-begin
-process(clk)
-begin
- if rising_edge(clk) then
- data <= rom_data(to_integer(unsigned(addr)));
- end if;
-end process;
-end architecture;
diff --git a/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/rtl/roms/P4.vhd b/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/rtl/roms/P4.vhd
deleted file mode 100644
index 06353288..00000000
--- a/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/rtl/roms/P4.vhd
+++ /dev/null
@@ -1,38 +0,0 @@
-library ieee;
-use ieee.std_logic_1164.all,ieee.numeric_std.all;
-
-entity P4 is
-port (
- clk : in std_logic;
- addr : in std_logic_vector(7 downto 0);
- data : out std_logic_vector(3 downto 0)
-);
-end entity;
-
-architecture prom of P4 is
- type rom is array(0 to 255) of std_logic_vector(3 downto 0);
- signal rom_data: rom := (
- "0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000",
- "0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000",
- "0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000",
- "0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000",
- "0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000",
- "0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000",
- "0000","0000","0000","0000","0000","0000","0000","0000","0010","0010","0010","0010","0010","0010","0010","0010",
- "0010","0010","0010","0010","0010","0010","0010","0010","0010","0010","0010","0010","0010","0010","0010","1010",
- "1010","1010","1010","1010","1010","1110","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000",
- "0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000",
- "0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000",
- "0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000",
- "0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000",
- "0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000",
- "1010","1010","1010","1010","1010","1010","1010","1010","1010","1010","1010","1010","1010","1010","1010","1010",
- "1010","1010","1011","1011","1011","1010","1010","1010","1010","1010","1010","1010","1010","1010","1010","1010");
-begin
-process(clk)
-begin
- if rising_edge(clk) then
- data <= rom_data(to_integer(unsigned(addr)));
- end if;
-end process;
-end architecture;
diff --git a/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/rtl/roms/PROG.vhd b/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/rtl/roms/PROG.vhd
deleted file mode 100644
index 902078c2..00000000
--- a/Arcade_MiST/Atari Centipede Hardware/Centipede_MiST/rtl/roms/PROG.vhd
+++ /dev/null
@@ -1,534 +0,0 @@
-library ieee;
-use ieee.std_logic_1164.all,ieee.numeric_std.all;
-
-entity PROG is
-port (
- clk : in std_logic;
- addr : in std_logic_vector(12 downto 0);
- data : out std_logic_vector(7 downto 0)
-);
-end entity;
-
-architecture prom of PROG is
- type rom is array(0 to 8191) of std_logic_vector(7 downto 0);
- signal rom_data: rom := (
- X"4C",X"4B",X"3B",X"1B",X"31",X"39",X"38",X"30",X"20",X"41",X"54",X"41",X"52",X"C9",X"20",X"76",
- X"28",X"58",X"20",X"60",X"2D",X"46",X"8A",X"90",X"FC",X"8D",X"00",X"20",X"AD",X"00",X"0C",X"29",
- X"20",X"F0",X"FE",X"20",X"66",X"25",X"20",X"79",X"30",X"20",X"45",X"27",X"10",X"E7",X"20",X"07",
- X"3B",X"20",X"19",X"21",X"20",X"27",X"33",X"20",X"55",X"29",X"20",X"01",X"27",X"20",X"D2",X"2A",
- X"20",X"02",X"22",X"20",X"D7",X"2E",X"20",X"DD",X"2B",X"20",X"1C",X"2E",X"20",X"59",X"20",X"20",
- X"DA",X"23",X"20",X"F3",X"2C",X"4C",X"15",X"20",X"55",X"A5",X"43",X"29",X"AF",X"D0",X"08",X"A5",
- X"40",X"45",X"EF",X"C9",X"20",X"90",X"01",X"60",X"A5",X"70",X"45",X"F0",X"C9",X"F8",X"90",X"20",
- X"A6",X"88",X"B5",X"9A",X"C9",X"0C",X"B0",X"6B",X"B5",X"AB",X"C9",X"02",X"A0",X"05",X"90",X"02",
- X"A0",X"09",X"C9",X"12",X"90",X"05",X"4A",X"18",X"69",X"06",X"A8",X"98",X"D5",X"D7",X"90",X"53",
- X"A5",X"00",X"29",X"03",X"D0",X"0F",X"E6",X"40",X"A5",X"40",X"18",X"69",X"01",X"29",X"03",X"09",
- X"1C",X"45",X"EF",X"85",X"40",X"A5",X"60",X"85",X"8B",X"A5",X"70",X"A4",X"EF",X"F0",X"06",X"18",
- X"65",X"80",X"4C",X"B8",X"20",X"38",X"E5",X"80",X"85",X"70",X"45",X"F0",X"C9",X"04",X"90",X"24",
- X"A2",X"0C",X"20",X"9A",X"2C",X"90",X"1C",X"A5",X"00",X"29",X"03",X"D0",X"16",X"AD",X"0A",X"10",
- X"29",X"03",X"D0",X"0F",X"A9",X"04",X"45",X"F3",X"18",X"65",X"70",X"A0",X"00",X"20",X"2F",X"2C",
- X"20",X"AC",X"2B",X"60",X"20",X"E8",X"20",X"60",X"A9",X"1C",X"45",X"EF",X"85",X"40",X"A9",X"F8",
- X"45",X"F0",X"85",X"70",X"AD",X"0A",X"10",X"29",X"F8",X"F0",X"F9",X"C9",X"10",X"90",X"F5",X"38",
- X"E9",X"04",X"85",X"60",X"A0",X"03",X"A6",X"88",X"B5",X"AB",X"C9",X"06",X"B0",X"02",X"A0",X"02",
- X"84",X"80",X"A9",X"00",X"85",X"50",X"85",X"B8",X"60",X"A5",X"86",X"10",X"6F",X"20",X"95",X"21",
- X"A9",X"03",X"85",X"93",X"A9",X"20",X"85",X"94",X"A9",X"40",X"85",X"91",X"A9",X"05",X"85",X"92",
- X"20",X"74",X"38",X"A5",X"00",X"D0",X"05",X"A9",X"84",X"20",X"24",X"38",X"A5",X"00",X"AE",X"00",
- X"06",X"86",X"FF",X"29",X"80",X"D0",X"45",X"A5",X"43",X"29",X"AF",X"D0",X"30",X"A5",X"63",X"A0",
- X"01",X"C9",X"1C",X"90",X"08",X"A0",X"FF",X"C9",X"E4",X"B0",X"02",X"A4",X"53",X"98",X"84",X"53",
- X"18",X"20",X"EF",X"2A",X"A5",X"73",X"85",X"8D",X"A0",X"FF",X"C9",X"30",X"B0",X"08",X"A0",X"01",
- X"C9",X"09",X"90",X"02",X"A4",X"83",X"98",X"84",X"83",X"18",X"20",X"28",X"2B",X"20",X"64",X"2B",
- X"A2",X"13",X"A9",X"AB",X"5D",X"20",X"21",X"CA",X"10",X"FA",X"85",X"FE",X"60",X"02",X"BB",X"5A",
- X"30",X"5F",X"EE",X"7D",X"A8",X"20",X"B3",X"21",X"85",X"AE",X"B9",X"C0",X"21",X"85",X"B0",X"A9",
- X"06",X"20",X"24",X"38",X"A5",X"B0",X"20",X"AB",X"38",X"A5",X"AE",X"20",X"9E",X"38",X"A9",X"00",
- X"4C",X"9E",X"38",X"A5",X"FD",X"29",X"30",X"4A",X"4A",X"4A",X"A8",X"B9",X"BF",X"21",X"60",X"00",
- X"01",X"20",X"01",X"50",X"01",X"00",X"02",X"A6",X"88",X"A0",X"02",X"B5",X"AB",X"D0",X"0C",X"A5",
- X"FD",X"29",X"40",X"09",X"10",X"D5",X"A9",X"90",X"02",X"A0",X"01",X"84",X"81",X"AD",X"0A",X"10",
- X"29",X"04",X"F0",X"05",X"98",X"20",X"7C",X"38",X"A8",X"84",X"51",X"A9",X"60",X"45",X"F0",X"85",
- X"71",X"A9",X"FF",X"85",X"61",X"A9",X"F8",X"85",X"41",X"A9",X"60",X"85",X"A1",X"A9",X"00",X"85",
- X"B5",X"60",X"A5",X"43",X"29",X"AF",X"F0",X"01",X"60",X"A2",X"0D",X"A5",X"41",X"A8",X"29",X"20",
- X"F0",X"07",X"C0",X"F8",X"90",X"F2",X"4C",X"FA",X"22",X"A5",X"00",X"29",X"03",X"D0",X"10",X"E6",
- X"41",X"A5",X"41",X"45",X"F2",X"C9",X"1C",X"90",X"06",X"A9",X"14",X"45",X"F2",X"85",X"41",X"C6",
- X"A1",X"D0",X"35",X"AD",X"0A",X"10",X"29",X"80",X"F0",X"18",X"A5",X"51",X"F0",X"10",X"A4",X"61",
- X"C0",X"FB",X"B0",X"0E",X"C0",X"05",X"90",X"0A",X"85",X"BE",X"A9",X"00",X"F0",X"02",X"A5",X"BE",
- X"85",X"51",X"A5",X"FD",X"29",X"40",X"09",X"20",X"2D",X"0A",X"10",X"F0",X"07",X"A5",X"81",X"20",
- X"7C",X"38",X"85",X"81",X"A9",X"30",X"85",X"A1",X"A5",X"61",X"38",X"E5",X"51",X"85",X"61",X"85",
- X"8B",X"A5",X"71",X"A4",X"EF",X"F0",X"06",X"18",X"65",X"81",X"4C",X"80",X"22",X"38",X"E5",X"81",
- X"85",X"71",X"A0",X"00",X"20",X"2F",X"2C",X"F0",X"13",X"A0",X"00",X"B1",X"32",X"29",X"3F",X"C9",
- X"38",X"90",X"09",X"A9",X"00",X"91",X"32",X"20",X"95",X"2B",X"A2",X"0D",X"A5",X"61",X"C9",X"FF",
- X"B0",X"54",X"A5",X"71",X"45",X"F0",X"C9",X"09",X"B0",X"06",X"A5",X"81",X"10",X"3D",X"30",X"32",
- X"A6",X"88",X"B5",X"AB",X"F8",X"38",X"E9",X"06",X"D8",X"10",X"02",X"A9",X"00",X"4A",X"C9",X"06",
- X"90",X"02",X"A9",X"05",X"0A",X"0A",X"0A",X"85",X"8D",X"A9",X"60",X"45",X"F0",X"38",X"E5",X"8D",
- X"A6",X"EF",X"F0",X"06",X"C5",X"71",X"90",X"0A",X"B0",X"04",X"C5",X"71",X"B0",X"04",X"A5",X"81",
- X"30",X"09",X"A2",X"0D",X"20",X"6F",X"2C",X"90",X"07",X"A5",X"81",X"20",X"7C",X"38",X"85",X"81",
- X"A2",X"0D",X"20",X"9A",X"2C",X"60",X"20",X"C7",X"21",X"60",X"C6",X"A1",X"D0",X"11",X"AD",X"0A",
- X"10",X"29",X"2F",X"09",X"0F",X"85",X"A1",X"A9",X"14",X"85",X"B5",X"45",X"F2",X"85",X"41",X"60",
- X"B5",X"54",X"85",X"8B",X"A0",X"FF",X"B5",X"44",X"30",X"02",X"A0",X"01",X"B5",X"64",X"60",X"A6",
- X"88",X"B5",X"94",X"D0",X"20",X"B5",X"C2",X"09",X"80",X"95",X"C2",X"B5",X"9C",X"C9",X"03",X"90",
- X"14",X"D6",X"9A",X"D0",X"04",X"A9",X"0C",X"95",X"9A",X"A9",X"02",X"B4",X"AB",X"C0",X"04",X"B0",
- X"02",X"A9",X"01",X"95",X"9C",X"A9",X"03",X"85",X"34",X"B5",X"9C",X"85",X"74",X"A8",X"A5",X"00",
- X"29",X"02",X"D0",X"05",X"98",X"20",X"7C",X"38",X"A8",X"84",X"44",X"A9",X"F8",X"45",X"F0",X"85",
- X"64",X"A9",X"80",X"85",X"54",X"B5",X"9A",X"85",X"8B",X"C9",X"01",X"F0",X"35",X"A0",X"42",X"A2",
- X"01",X"94",X"34",X"A9",X"F8",X"45",X"F0",X"95",X"64",X"B5",X"73",X"95",X"74",X"B5",X"43",X"95",
- X"44",X"10",X"04",X"A9",X"08",X"D0",X"02",X"A9",X"F8",X"18",X"75",X"53",X"95",X"54",X"88",X"C0",
- X"3F",X"D0",X"02",X"A0",X"47",X"E8",X"E4",X"8B",X"90",X"D7",X"A6",X"88",X"B5",X"9A",X"C9",X"0C",
- X"F0",X"2D",X"A9",X"F8",X"45",X"F0",X"A6",X"8B",X"95",X"64",X"A9",X"00",X"95",X"34",X"A9",X"02",
- X"A4",X"F4",X"F0",X"01",X"98",X"95",X"74",X"2C",X"0A",X"10",X"10",X"03",X"20",X"7C",X"38",X"95",
- X"44",X"AD",X"0A",X"10",X"29",X"F8",X"95",X"54",X"B5",X"64",X"E8",X"E0",X"0C",X"90",X"D9",X"A9",
- X"0C",X"A6",X"88",X"95",X"94",X"A5",X"FE",X"85",X"97",X"60",X"A5",X"86",X"30",X"38",X"AD",X"01",
- X"08",X"29",X"1C",X"F0",X"31",X"A5",X"AB",X"05",X"AD",X"F0",X"1B",X"C6",X"A9",X"D0",X"27",X"A9",
- X"3C",X"85",X"A9",X"F8",X"A5",X"AB",X"38",X"E9",X"01",X"D8",X"85",X"AB",X"10",X"18",X"C6",X"AD",
- X"A9",X"59",X"85",X"AB",X"D0",X"10",X"A9",X"00",X"85",X"A5",X"20",X"BC",X"26",X"A5",X"43",X"29",
- X"AF",X"D0",X"03",X"20",X"C8",X"2C",X"A5",X"87",X"D0",X"01",X"60",X"A5",X"DB",X"D0",X"FB",X"C6",
- X"87",X"D0",X"F7",X"A5",X"D6",X"F0",X"0F",X"A9",X"80",X"20",X"24",X"38",X"A9",X"00",X"A8",X"91",
- X"91",X"85",X"D6",X"4C",X"36",X"29",X"A5",X"43",X"29",X"AF",X"D0",X"03",X"4C",X"41",X"25",X"20",
- X"36",X"29",X"A5",X"86",X"10",X"11",X"A5",X"01",X"10",X"0A",X"29",X"7F",X"85",X"01",X"20",X"FE",
- X"31",X"20",X"60",X"2D",X"4C",X"3B",X"25",X"A5",X"A5",X"05",X"A6",X"D0",X"46",X"C6",X"86",X"20",
- X"67",X"32",X"A5",X"EF",X"F0",X"18",X"A5",X"C2",X"10",X"14",X"A9",X"80",X"85",X"EE",X"20",X"45",
- X"25",X"20",X"36",X"29",X"20",X"FE",X"31",X"A5",X"C1",X"10",X"03",X"20",X"60",X"2D",X"20",X"C7",
- X"21",X"20",X"1F",X"23",X"20",X"E8",X"20",X"A9",X"01",X"85",X"00",X"A9",X"04",X"20",X"24",X"38",
- X"A6",X"89",X"A9",X"FF",X"9D",X"02",X"1C",X"20",X"4F",X"3A",X"A9",X"3D",X"85",X"F9",X"A9",X"00",
- X"85",X"FA",X"60",X"A6",X"89",X"CA",X"D0",X"03",X"4C",X"34",X"25",X"A6",X"88",X"B5",X"A4",X"D0",
- X"24",X"A5",X"A7",X"D0",X"1E",X"E6",X"A7",X"A9",X"80",X"85",X"87",X"A9",X"F9",X"85",X"43",X"85",
- X"42",X"A9",X"04",X"20",X"24",X"38",X"A9",X"00",X"20",X"24",X"38",X"A5",X"88",X"09",X"20",X"20",
- X"85",X"38",X"60",X"C6",X"A7",X"A5",X"88",X"49",X"03",X"AA",X"B5",X"A4",X"F0",X"56",X"86",X"88",
- X"A9",X"80",X"25",X"EE",X"05",X"88",X"85",X"EE",X"C9",X"82",X"D0",X"03",X"20",X"65",X"25",X"B5",
- X"A1",X"85",X"A0",X"A6",X"88",X"E0",X"01",X"D0",X"03",X"20",X"45",X"25",X"20",X"FE",X"31",X"A6",
- X"88",X"E0",X"02",X"D0",X"11",X"B5",X"A4",X"C5",X"A4",X"D0",X"0B",X"A5",X"AD",X"D0",X"07",X"A9",
- X"0C",X"95",X"94",X"20",X"C3",X"28",X"B5",X"C2",X"09",X"40",X"95",X"C2",X"A9",X"A0",X"85",X"87",
- X"A9",X"00",X"20",X"24",X"38",X"A5",X"88",X"09",X"20",X"20",X"85",X"38",X"A9",X"F9",X"85",X"43",
- X"85",X"42",X"85",X"D6",X"A6",X"88",X"D6",X"A4",X"20",X"BC",X"26",X"20",X"C7",X"21",X"20",X"E8",
- X"20",X"20",X"1F",X"23",X"60",X"A5",X"FE",X"85",X"BD",X"85",X"BF",X"8D",X"07",X"1C",X"8D",X"00",
- X"24",X"85",X"F5",X"85",X"F7",X"85",X"F6",X"85",X"F0",X"85",X"EF",X"85",X"F1",X"85",X"F2",X"85",
- X"F3",X"85",X"F4",X"85",X"F8",X"60",X"AD",X"01",X"08",X"29",X"E3",X"85",X"D3",X"29",X"03",X"85",
- X"8D",X"D0",X"04",X"A9",X"02",X"85",X"C8",X"A5",X"FD",X"29",X"0C",X"4A",X"4A",X"69",X"02",X"85",
- X"A4",X"A5",X"86",X"30",X"01",X"60",X"A5",X"8D",X"F0",X"03",X"20",X"24",X"38",X"A5",X"00",X"29",
- X"20",X"0A",X"0A",X"85",X"8D",X"A5",X"C8",X"05",X"C9",X"F0",X"10",X"A6",X"DC",X"10",X"29",X"C9",
- X"02",X"90",X"1E",X"A9",X"00",X"85",X"DC",X"A9",X"8A",X"D0",X"1A",X"A5",X"FD",X"29",X"80",X"85",
- X"DC",X"49",X"8A",X"20",X"24",X"38",X"A2",X"FF",X"8E",X"03",X"1C",X"A2",X"FF",X"8E",X"04",X"1C",
- X"60",X"A9",X"0A",X"05",X"8D",X"20",X"24",X"38",X"A9",X"09",X"20",X"24",X"38",X"A5",X"C8",X"C9",
- X"0A",X"90",X"0A",X"A9",X"21",X"20",X"85",X"38",X"A5",X"C8",X"38",X"E9",X"0A",X"09",X"20",X"20",
- X"85",X"38",X"A5",X"C9",X"F0",X"02",X"A9",X"1E",X"20",X"85",X"38",X"A6",X"C8",X"F0",X"CC",X"A5",
- X"DC",X"30",X"C8",X"A5",X"8D",X"8D",X"03",X"1C",X"AD",X"01",X"0C",X"A6",X"FF",X"4A",X"B0",X"BB",
- X"C6",X"C8",X"A9",X"FF",X"8D",X"03",X"1C",X"8D",X"04",X"1C",X"A9",X"00",X"85",X"FB",X"85",X"FC",
- X"85",X"9A",X"85",X"CB",X"85",X"CA",X"86",X"89",X"9D",X"02",X"1C",X"A6",X"A4",X"CA",X"86",X"A5",
- X"E6",X"86",X"20",X"A4",X"26",X"20",X"B3",X"21",X"85",X"AE",X"85",X"AF",X"B9",X"C0",X"21",X"85",
- X"B0",X"85",X"B1",X"AD",X"00",X"0C",X"29",X"10",X"F0",X"07",X"A9",X"80",X"85",X"EE",X"20",X"45",
- X"25",X"20",X"76",X"28",X"AD",X"01",X"08",X"29",X"1C",X"F0",X"0C",X"4A",X"4A",X"85",X"AD",X"A9",
- X"00",X"85",X"AB",X"A9",X"3C",X"85",X"A9",X"4C",X"BC",X"26",X"BD",X"7A",X"26",X"48",X"BD",X"7B",
- X"26",X"A8",X"BD",X"7C",X"26",X"AA",X"68",X"8E",X"0E",X"14",X"8E",X"06",X"14",X"8D",X"0F",X"14",
- X"8D",X"05",X"14",X"8C",X"0D",X"14",X"8C",X"07",X"14",X"60",X"0D",X"00",X"0E",X"02",X"04",X"01",
- X"0E",X"01",X"0C",X"04",X"01",X"0B",X"01",X"0C",X"0A",X"09",X"0B",X"04",X"0C",X"0D",X"0A",X"09",
- X"0C",X"0E",X"0A",X"0E",X"01",X"0B",X"01",X"04",X"01",X"00",X"06",X"0D",X"0E",X"0A",X"0E",X"0C",
- X"0B",X"00",X"0D",X"02",X"A9",X"FF",X"85",X"C1",X"85",X"C2",X"A2",X"08",X"B5",X"02",X"9D",X"78",
- X"01",X"B5",X"1A",X"9D",X"81",X"01",X"CA",X"10",X"F3",X"4C",X"4F",X"3A",X"A9",X"06",X"85",X"8B",
- X"A9",X"04",X"45",X"F7",X"29",X"06",X"85",X"92",X"A9",X"DF",X"45",X"F6",X"85",X"91",X"A6",X"A5",
- X"A9",X"1F",X"CA",X"10",X"02",X"A9",X"00",X"20",X"85",X"38",X"C6",X"8B",X"D0",X"F2",X"A9",X"06",
- X"45",X"F7",X"85",X"92",X"A9",X"5F",X"45",X"F6",X"85",X"91",X"A9",X"06",X"85",X"8B",X"38",X"E5",
- X"A6",X"AA",X"A9",X"00",X"CA",X"10",X"02",X"A9",X"1F",X"20",X"85",X"38",X"C6",X"8B",X"D0",X"F2",
- X"60",X"A2",X"0D",X"B4",X"34",X"C0",X"F9",X"90",X"18",X"C0",X"FA",X"90",X"04",X"D6",X"34",X"D0",
- X"10",X"E0",X"0D",X"D0",X"0C",X"A5",X"43",X"29",X"AF",X"D0",X"06",X"A5",X"D7",X"45",X"EF",X"85",
- X"41",X"CA",X"10",X"DF",X"A5",X"43",X"29",X"AF",X"F0",X"1A",X"A5",X"00",X"29",X"03",X"D0",X"14",
- X"A5",X"43",X"C9",X"28",X"B0",X"0E",X"E6",X"43",X"C9",X"27",X"D0",X"08",X"A9",X"00",X"85",X"DA",
- X"A9",X"04",X"85",X"DB",X"60",X"A5",X"C1",X"25",X"C2",X"10",X"01",X"60",X"A5",X"C2",X"30",X"18",
- X"A5",X"EE",X"10",X"14",X"A5",X"EF",X"D0",X"10",X"A9",X"82",X"85",X"EE",X"20",X"65",X"25",X"20",
- X"FE",X"31",X"20",X"27",X"33",X"20",X"36",X"29",X"A5",X"89",X"4A",X"F0",X"14",X"A9",X"00",X"20",
- X"24",X"38",X"A0",X"02",X"A6",X"C2",X"10",X"01",X"88",X"84",X"88",X"98",X"09",X"20",X"20",X"85",
- X"38",X"A9",X"08",X"20",X"24",X"38",X"A9",X"05",X"20",X"24",X"38",X"A9",X"89",X"45",X"F5",X"85",
- X"91",X"A9",X"05",X"45",X"F7",X"85",X"92",X"A6",X"88",X"B4",X"C0",X"84",X"8D",X"98",X"18",X"65",
- X"C0",X"85",X"8E",X"20",X"82",X"38",X"A4",X"8D",X"C8",X"20",X"82",X"38",X"A4",X"8D",X"C8",X"C8",
- X"20",X"82",X"38",X"AD",X"01",X"0C",X"A6",X"EF",X"F0",X"01",X"4A",X"4A",X"4A",X"4A",X"26",X"9A",
- X"A5",X"9A",X"29",X"1F",X"C9",X"18",X"D0",X"46",X"E6",X"C0",X"A5",X"C0",X"C9",X"03",X"90",X"32",
- X"A6",X"88",X"A9",X"FF",X"95",X"C0",X"A5",X"EF",X"F0",X"1D",X"A9",X"80",X"85",X"EE",X"20",X"45",
- X"25",X"20",X"FE",X"31",X"20",X"36",X"29",X"20",X"27",X"33",X"20",X"1F",X"23",X"20",X"C7",X"21",
- X"20",X"E8",X"20",X"A5",X"C1",X"30",X"32",X"A5",X"C1",X"25",X"C2",X"30",X"17",X"A2",X"00",X"86",
- X"C0",X"60",X"E6",X"8E",X"A6",X"8E",X"A9",X"F4",X"85",X"01",X"A9",X"01",X"95",X"1A",X"A5",X"01",
- X"F0",X"BE",X"D0",X"2E",X"A9",X"88",X"20",X"24",X"38",X"A9",X"85",X"20",X"24",X"38",X"A9",X"00",
- X"8D",X"89",X"05",X"8D",X"A9",X"05",X"8D",X"C9",X"05",X"20",X"A4",X"26",X"20",X"60",X"2D",X"A6",
- X"89",X"86",X"01",X"CA",X"F0",X"C7",X"A9",X"80",X"20",X"24",X"38",X"A9",X"00",X"A8",X"91",X"91",
- X"F0",X"BB",X"A5",X"00",X"29",X"07",X"D0",X"2B",X"A2",X"FF",X"A9",X"00",X"A4",X"B9",X"85",X"B9",
- X"10",X"07",X"A2",X"01",X"98",X"20",X"7C",X"38",X"A8",X"C0",X"04",X"90",X"16",X"8A",X"45",X"F4",
- X"A6",X"8E",X"18",X"75",X"1A",X"30",X"08",X"C9",X"1B",X"90",X"06",X"A9",X"00",X"F0",X"02",X"A9",
- X"1A",X"95",X"1A",X"A9",X"00",X"60",X"A9",X"20",X"8D",X"08",X"10",X"A9",X"0C",X"85",X"9B",X"85",
- X"9C",X"A5",X"FF",X"85",X"88",X"85",X"53",X"85",X"83",X"A9",X"02",X"85",X"9D",X"85",X"9E",X"A2",
- X"06",X"A9",X"00",X"8D",X"0F",X"10",X"95",X"B2",X"CA",X"10",X"FB",X"A2",X"05",X"95",X"A8",X"CA",
- X"10",X"FB",X"AD",X"0A",X"10",X"4D",X"0A",X"10",X"18",X"65",X"C8",X"85",X"C8",X"A9",X"03",X"8D",
- X"0F",X"10",X"20",X"1F",X"23",X"A9",X"C0",X"85",X"A0",X"85",X"A2",X"85",X"A3",X"20",X"C7",X"21",
- X"20",X"E8",X"20",X"A9",X"0F",X"8D",X"04",X"14",X"A6",X"88",X"A9",X"00",X"95",X"C2",X"AA",X"20",
- X"5A",X"26",X"A2",X"00",X"8A",X"9D",X"00",X"04",X"9D",X"00",X"05",X"9D",X"00",X"06",X"9D",X"00",
- X"07",X"E8",X"D0",X"F1",X"A6",X"88",X"95",X"D7",X"A2",X"1B",X"86",X"8B",X"A2",X"2D",X"AD",X"0A",
- X"10",X"29",X"E0",X"05",X"8B",X"85",X"8D",X"AD",X"0A",X"10",X"29",X"03",X"09",X"04",X"85",X"8E",
- X"86",X"8F",X"A0",X"00",X"A5",X"8D",X"29",X"1F",X"A6",X"EF",X"F0",X"06",X"C9",X"14",X"90",X"0E",
- X"B0",X"04",X"C9",X"0C",X"B0",X"08",X"B1",X"8D",X"D0",X"04",X"A6",X"88",X"F6",X"D7",X"A9",X"3F",
- X"45",X"EF",X"91",X"8D",X"A5",X"8B",X"38",X"E9",X"01",X"C9",X"02",X"B0",X"02",X"A9",X"1B",X"85",
- X"8B",X"A6",X"8F",X"CA",X"10",X"B8",X"A9",X"10",X"45",X"F2",X"85",X"43",X"A9",X"80",X"85",X"63",
- X"85",X"62",X"A9",X"08",X"45",X"F0",X"85",X"73",X"A9",X"0C",X"45",X"F1",X"85",X"72",X"A9",X"11",
- X"45",X"F2",X"85",X"42",X"60",X"A5",X"87",X"F0",X"01",X"60",X"A2",X"0B",X"A5",X"00",X"29",X"0F",
- X"D0",X"04",X"A9",X"07",X"85",X"B3",X"B5",X"34",X"10",X"03",X"4C",X"CB",X"2A",X"A5",X"00",X"29",
- X"01",X"D0",X"09",X"B5",X"34",X"18",X"69",X"01",X"29",X"F7",X"95",X"34",X"A0",X"01",X"B5",X"64",
- X"45",X"F0",X"C9",X"09",X"B0",X"0A",X"B5",X"34",X"C9",X"10",X"B0",X"02",X"84",X"97",X"B5",X"64",
- X"29",X"07",X"D0",X"73",X"98",X"A4",X"88",X"D9",X"94",X"00",X"D0",X"14",X"A9",X"02",X"B4",X"44",
- X"10",X"02",X"A9",X"FE",X"95",X"44",X"A9",X"02",X"B4",X"74",X"10",X"02",X"A9",X"FE",X"95",X"74",
- X"B5",X"34",X"29",X"40",X"F0",X"0F",X"B5",X"63",X"38",X"F5",X"64",X"20",X"7A",X"38",X"C9",X"08",
- X"B0",X"45",X"4C",X"96",X"2A",X"B5",X"34",X"29",X"20",X"D0",X"3C",X"B5",X"54",X"C9",X"F0",X"90",
- X"0A",X"B4",X"74",X"F0",X"0E",X"B4",X"44",X"10",X"2E",X"30",X"0F",X"C9",X"10",X"B0",X"0B",X"B4",
- X"74",X"D0",X"03",X"4C",X"AA",X"2A",X"B4",X"44",X"30",X"1D",X"20",X"10",X"23",X"20",X"2F",X"2C",
- X"F0",X"10",X"C9",X"38",X"90",X"11",X"C9",X"3C",X"B0",X"0D",X"B5",X"34",X"09",X"20",X"95",X"34",
- X"90",X"05",X"20",X"6F",X"2C",X"90",X"BB",X"B5",X"64",X"45",X"F0",X"B4",X"74",X"F0",X"D4",X"10",
- X"12",X"A4",X"EF",X"F0",X"08",X"45",X"F0",X"C9",X"C9",X"90",X"63",X"B0",X"68",X"C9",X"30",X"B0",
- X"5D",X"90",X"62",X"C9",X"09",X"B0",X"5E",X"B5",X"34",X"29",X"40",X"D0",X"51",X"B5",X"34",X"29",
- X"DF",X"95",X"34",X"E0",X"0B",X"F0",X"47",X"8A",X"A8",X"C8",X"B9",X"34",X"00",X"30",X"3F",X"29",
- X"40",X"F0",X"3B",X"C0",X"0B",X"F0",X"09",X"B9",X"35",X"00",X"30",X"04",X"29",X"40",X"D0",X"29",
- X"B9",X"64",X"00",X"45",X"F0",X"C9",X"09",X"B0",X"25",X"B9",X"34",X"00",X"29",X"07",X"99",X"34",
- X"00",X"B9",X"44",X"00",X"20",X"7C",X"38",X"99",X"44",X"00",X"B9",X"64",X"00",X"29",X"F8",X"99",
- X"64",X"00",X"A9",X"00",X"99",X"74",X"00",X"F0",X"05",X"C8",X"C0",X"0C",X"90",X"C5",X"B5",X"74",
- X"20",X"7C",X"38",X"95",X"74",X"B5",X"64",X"A4",X"EF",X"F0",X"06",X"18",X"75",X"74",X"4C",X"94",
- X"2A",X"38",X"F5",X"74",X"95",X"64",X"B5",X"44",X"18",X"75",X"54",X"95",X"54",X"20",X"9A",X"2C",
- X"90",X"2F",X"B5",X"64",X"29",X"07",X"C9",X"04",X"D0",X"21",X"B5",X"44",X"20",X"7C",X"38",X"95",
- X"44",X"B4",X"74",X"D0",X"16",X"09",X"00",X"30",X"03",X"20",X"7C",X"38",X"95",X"74",X"A9",X"04",
- X"B4",X"44",X"10",X"02",X"A9",X"FC",X"18",X"75",X"54",X"95",X"54",X"CA",X"30",X"03",X"4C",X"66",
- X"29",X"60",X"A5",X"86",X"10",X"01",X"60",X"A5",X"43",X"29",X"AF",X"D0",X"F9",X"A5",X"73",X"85",
- X"8D",X"A4",X"FE",X"A5",X"B9",X"84",X"B9",X"20",X"4F",X"32",X"65",X"84",X"85",X"84",X"98",X"65",
- X"63",X"AA",X"85",X"8B",X"A0",X"00",X"A5",X"73",X"20",X"2F",X"2C",X"D0",X"11",X"8A",X"C9",X"F4",
- X"90",X"04",X"A9",X"F4",X"D0",X"0A",X"C9",X"0B",X"B0",X"06",X"A9",X"0B",X"D0",X"02",X"A5",X"63",
- X"85",X"63",X"A4",X"86",X"10",X"01",X"60",X"A0",X"00",X"A5",X"BB",X"84",X"BB",X"20",X"7C",X"38",
- X"20",X"4F",X"32",X"65",X"85",X"85",X"85",X"98",X"65",X"73",X"AA",X"A4",X"63",X"84",X"8B",X"A0",
- X"00",X"20",X"2F",X"2C",X"D0",X"25",X"8A",X"C9",X"08",X"90",X"1C",X"C9",X"F1",X"B0",X"14",X"C9",
- X"80",X"90",X"08",X"C9",X"C8",X"B0",X"16",X"A9",X"C8",X"D0",X"12",X"C9",X"31",X"90",X"0E",X"A9",
- X"30",X"D0",X"0A",X"A9",X"F0",X"D0",X"06",X"A9",X"08",X"D0",X"02",X"A5",X"73",X"85",X"73",X"A4",
- X"86",X"10",X"01",X"60",X"A5",X"72",X"A6",X"EF",X"F0",X"07",X"38",X"E5",X"8D",X"B0",X"0E",X"90",
- X"05",X"38",X"E5",X"8D",X"90",X"07",X"20",X"7A",X"38",X"C9",X"05",X"B0",X"0D",X"A9",X"04",X"45",
- X"F0",X"18",X"65",X"73",X"85",X"72",X"A5",X"63",X"85",X"62",X"A5",X"43",X"29",X"AF",X"F0",X"04",
- X"A9",X"28",X"85",X"42",X"60",X"A5",X"32",X"29",X"1F",X"A6",X"EF",X"F0",X"06",X"C9",X"14",X"90",
- X"0A",X"B0",X"04",X"C9",X"0C",X"B0",X"04",X"A6",X"88",X"D6",X"D7",X"60",X"A0",X"00",X"B1",X"32",
- X"D0",X"2A",X"A5",X"32",X"29",X"1F",X"F0",X"24",X"C9",X"1F",X"F0",X"20",X"A6",X"EF",X"F0",X"0A",
- X"C9",X"1E",X"F0",X"18",X"C9",X"14",X"90",X"0E",X"B0",X"08",X"C9",X"01",X"F0",X"0E",X"C9",X"0C",
- X"B0",X"04",X"A6",X"88",X"F6",X"D7",X"A9",X"3F",X"45",X"EF",X"91",X"32",X"60",X"A5",X"97",X"F0",
- X"4D",X"A5",X"87",X"D0",X"49",X"A5",X"A0",X"F0",X"03",X"C6",X"A0",X"60",X"A6",X"88",X"A0",X"0B",
- X"B9",X"34",X"00",X"30",X"04",X"88",X"10",X"F8",X"60",X"A9",X"00",X"99",X"34",X"00",X"A9",X"40",
- X"45",X"F0",X"99",X"64",X"00",X"A9",X"FC",X"99",X"54",X"00",X"A9",X"02",X"99",X"74",X"00",X"B5",
- X"A1",X"C9",X"60",X"90",X"04",X"E9",X"08",X"95",X"A1",X"85",X"A0",X"AD",X"0A",X"10",X"29",X"02",
- X"D0",X"07",X"A9",X"04",X"99",X"54",X"00",X"A9",X"FE",X"99",X"44",X"00",X"F6",X"94",X"60",X"4A",
- X"4A",X"4A",X"69",X"00",X"85",X"32",X"A9",X"01",X"85",X"33",X"98",X"0A",X"0A",X"0A",X"18",X"65",
- X"8B",X"85",X"8B",X"A9",X"F7",X"38",X"E5",X"8B",X"B0",X"02",X"A9",X"00",X"29",X"F8",X"0A",X"26",
- X"33",X"0A",X"26",X"33",X"05",X"32",X"A4",X"33",X"C0",X"07",X"D0",X"08",X"C9",X"C0",X"90",X"04",
- X"29",X"1F",X"09",X"A0",X"85",X"32",X"A0",X"00",X"B1",X"32",X"F0",X"02",X"45",X"EF",X"60",X"86",
- X"8B",X"86",X"8C",X"E6",X"8C",X"A0",X"0C",X"B9",X"64",X"00",X"D5",X"64",X"D0",X"17",X"B9",X"34",
- X"00",X"C9",X"F4",X"B0",X"10",X"C4",X"8B",X"F0",X"0C",X"B5",X"54",X"38",X"F9",X"54",X"00",X"55",
- X"44",X"C9",X"F4",X"B0",X"04",X"88",X"10",X"DF",X"18",X"60",X"B5",X"54",X"38",X"E5",X"63",X"20",
- X"7A",X"38",X"E0",X"0D",X"D0",X"05",X"C9",X"0A",X"90",X"05",X"60",X"C9",X"07",X"B0",X"FB",X"85",
- X"8D",X"B5",X"64",X"38",X"E5",X"73",X"20",X"7A",X"38",X"C9",X"07",X"B0",X"ED",X"18",X"65",X"8D",
- X"E0",X"0D",X"F0",X"2A",X"C9",X"0C",X"B0",X"E2",X"A9",X"30",X"85",X"87",X"A9",X"20",X"85",X"43",
- X"A9",X"FF",X"95",X"34",X"A9",X"28",X"85",X"42",X"A5",X"86",X"30",X"04",X"A9",X"13",X"85",X"B7",
- X"A9",X"00",X"85",X"B2",X"85",X"B3",X"85",X"B4",X"85",X"B5",X"85",X"B8",X"18",X"60",X"C9",X"0E",
- X"4C",X"C6",X"2C",X"A0",X"00",X"A5",X"00",X"29",X"07",X"D0",X"14",X"A5",X"B7",X"D0",X"10",X"A5",
- X"DB",X"F0",X"0C",X"C9",X"07",X"D0",X"09",X"A5",X"DA",X"C9",X"C0",X"90",X"03",X"84",X"DB",X"60",
- X"B1",X"DA",X"29",X"3F",X"C9",X"38",X"90",X"40",X"C9",X"3F",X"B0",X"3C",X"A9",X"3F",X"45",X"EF",
- X"91",X"DA",X"A9",X"00",X"85",X"8B",X"A9",X"05",X"20",X"BA",X"2D",X"A9",X"FF",X"85",X"3F",X"A5",
- X"DB",X"85",X"8B",X"A5",X"DA",X"0A",X"26",X"8B",X"0A",X"26",X"8B",X"0A",X"26",X"8B",X"85",X"6F",
- X"A5",X"8B",X"29",X"1F",X"49",X"1F",X"0A",X"0A",X"0A",X"E9",X"03",X"85",X"5F",X"E6",X"DA",X"D0",
- X"02",X"E6",X"DB",X"A9",X"13",X"85",X"B2",X"60",X"E6",X"DA",X"D0",X"A3",X"E6",X"DB",X"D0",X"B0",
- X"A9",X"07",X"20",X"24",X"38",X"A0",X"00",X"A2",X"5C",X"86",X"91",X"A9",X"05",X"85",X"92",X"B9",
- X"04",X"00",X"84",X"8D",X"38",X"20",X"9E",X"38",X"A4",X"8D",X"B9",X"03",X"00",X"20",X"9E",X"38",
- X"A4",X"8D",X"B9",X"02",X"00",X"18",X"20",X"9E",X"38",X"A9",X"00",X"20",X"85",X"38",X"A4",X"8D",
- X"20",X"82",X"38",X"E6",X"8D",X"A4",X"8D",X"20",X"82",X"38",X"E6",X"8D",X"A4",X"8D",X"20",X"82",
- X"38",X"A5",X"91",X"29",X"1F",X"09",X"40",X"AA",X"CA",X"A4",X"8D",X"C8",X"C0",X"18",X"90",X"B9",
- X"60",X"C9",X"86",X"8D",X"A6",X"88",X"D6",X"94",X"A6",X"8D",X"A4",X"86",X"30",X"5D",X"86",X"8D",
- X"F8",X"A6",X"88",X"18",X"75",X"A7",X"95",X"A7",X"B5",X"A9",X"65",X"8B",X"95",X"A9",X"90",X"0D",
- X"B5",X"A1",X"E9",X"02",X"95",X"A1",X"B5",X"AB",X"18",X"69",X"01",X"95",X"AB",X"D8",X"A6",X"88",
- X"B5",X"A9",X"D5",X"AD",X"B5",X"AB",X"F5",X"AF",X"90",X"2F",X"20",X"B3",X"21",X"F8",X"18",X"75",
- X"AD",X"95",X"AD",X"B9",X"C0",X"21",X"75",X"AF",X"95",X"AF",X"D8",X"AD",X"01",X"08",X"29",X"1C",
- X"F0",X"06",X"A5",X"AD",X"05",X"AB",X"F0",X"11",X"B5",X"A4",X"C9",X"06",X"F0",X"0B",X"B0",X"FE",
- X"F6",X"A4",X"A9",X"11",X"85",X"B6",X"20",X"BC",X"26",X"A6",X"8D",X"60",X"A5",X"40",X"45",X"EF",
- X"C9",X"34",X"90",X"03",X"4C",X"A5",X"2E",X"C9",X"30",X"B0",X"5D",X"A5",X"70",X"45",X"F0",X"C9",
- X"F8",X"90",X"04",X"A5",X"00",X"F0",X"03",X"4C",X"D6",X"2E",X"A6",X"88",X"B5",X"9A",X"C9",X"0B",
- X"B0",X"F5",X"AD",X"0A",X"10",X"29",X"03",X"D0",X"EE",X"A9",X"14",X"85",X"B8",X"A9",X"30",X"45",
- X"EF",X"85",X"40",X"B5",X"AB",X"C9",X"02",X"90",X"12",X"AD",X"0A",X"10",X"29",X"03",X"F0",X"0B",
- X"A9",X"02",X"2C",X"0A",X"10",X"10",X"0D",X"A9",X"FE",X"D0",X"09",X"A9",X"01",X"2C",X"0A",X"10",
- X"10",X"02",X"A9",X"FF",X"85",X"50",X"A9",X"00",X"85",X"60",X"85",X"80",X"AD",X"0A",X"10",X"29",
- X"78",X"18",X"69",X"70",X"45",X"F0",X"85",X"70",X"A5",X"43",X"29",X"AF",X"D0",X"1D",X"A5",X"60",
- X"A4",X"EF",X"F0",X"06",X"38",X"E5",X"50",X"4C",X"9D",X"2E",X"18",X"65",X"50",X"85",X"60",X"85",
- X"8B",X"D0",X"0B",X"F0",X"06",X"45",X"EF",X"C9",X"FA",X"B0",X"2B",X"4C",X"E8",X"20",X"A5",X"00",
- X"29",X"03",X"D0",X"0D",X"A5",X"40",X"18",X"69",X"01",X"29",X"03",X"09",X"30",X"45",X"EF",X"85",
- X"40",X"A0",X"00",X"A5",X"70",X"20",X"2F",X"2C",X"C9",X"40",X"B0",X"0A",X"C9",X"3C",X"90",X"06",
- X"29",X"FB",X"45",X"EF",X"91",X"32",X"60",X"A5",X"72",X"A4",X"EF",X"F0",X"05",X"18",X"69",X"07",
- X"49",X"FF",X"C9",X"F3",X"B0",X"75",X"A9",X"04",X"45",X"F0",X"18",X"65",X"73",X"C5",X"72",X"D0",
- X"25",X"A5",X"43",X"29",X"AF",X"D0",X"18",X"AD",X"01",X"0C",X"A6",X"86",X"10",X"03",X"AD",X"0A",
- X"10",X"C0",X"C0",X"D0",X"06",X"29",X"08",X"F0",X"09",X"D0",X"04",X"29",X"04",X"F0",X"03",X"4C",
- X"5A",X"30",X"A9",X"0B",X"85",X"B4",X"A5",X"62",X"85",X"8B",X"A9",X"07",X"45",X"F4",X"A4",X"72",
- X"18",X"65",X"72",X"85",X"72",X"84",X"8D",X"A9",X"01",X"45",X"F3",X"18",X"65",X"8D",X"A0",X"00",
- X"20",X"2F",X"2C",X"F0",X"29",X"29",X"3F",X"C9",X"38",X"90",X"20",X"E9",X"01",X"C9",X"3B",X"F0",
- X"04",X"C9",X"37",X"D0",X"0D",X"A9",X"00",X"85",X"8B",X"A9",X"01",X"20",X"BA",X"2D",X"A0",X"00",
- X"A5",X"EF",X"45",X"EF",X"91",X"32",X"D0",X"03",X"20",X"95",X"2B",X"4C",X"57",X"30",X"A2",X"0D",
- X"B5",X"34",X"C9",X"76",X"90",X"08",X"C9",X"B9",X"90",X"69",X"C9",X"F8",X"B0",X"65",X"B5",X"64",
- X"45",X"F0",X"C9",X"F8",X"B0",X"5D",X"45",X"F0",X"38",X"E5",X"72",X"20",X"7A",X"38",X"A8",X"E0",
- X"0C",X"D0",X"16",X"B5",X"34",X"45",X"EF",X"C9",X"20",X"B0",X"0E",X"A5",X"80",X"45",X"F0",X"C9",
- X"04",X"90",X"06",X"C0",X"07",X"B0",X"3C",X"90",X"04",X"C0",X"05",X"B0",X"36",X"B5",X"54",X"38",
- X"E5",X"62",X"20",X"7A",X"38",X"A8",X"E0",X"0D",X"F0",X"25",X"E0",X"0C",X"90",X"60",X"B5",X"34",
- X"45",X"EF",X"C9",X"20",X"B0",X"10",X"C0",X"06",X"B0",X"19",X"A0",X"02",X"A9",X"04",X"C5",X"80",
- X"F0",X"0A",X"85",X"80",X"D0",X"95",X"C0",X"0A",X"B0",X"09",X"A0",X"10",X"4C",X"48",X"30",X"C0",
- X"0A",X"90",X"03",X"4C",X"42",X"30",X"A0",X"B6",X"84",X"D7",X"A0",X"03",X"A5",X"71",X"38",X"E5",
- X"73",X"20",X"7A",X"38",X"C9",X"40",X"B0",X"0C",X"E6",X"D7",X"A0",X"09",X"C9",X"16",X"90",X"04",
- X"E6",X"D7",X"A0",X"06",X"A9",X"80",X"85",X"9F",X"85",X"A1",X"A9",X"00",X"85",X"B5",X"A9",X"F0",
- X"C5",X"61",X"90",X"06",X"A9",X"10",X"C5",X"61",X"90",X"3E",X"85",X"61",X"D0",X"3A",X"C0",X"06",
- X"B0",X"30",X"A9",X"00",X"85",X"8B",X"A0",X"10",X"B5",X"34",X"29",X"40",X"D0",X"04",X"A0",X"00",
- X"E6",X"8B",X"98",X"20",X"B2",X"2D",X"E0",X"0B",X"F0",X"08",X"B5",X"35",X"30",X"04",X"29",X"BF",
- X"95",X"35",X"20",X"10",X"23",X"20",X"2F",X"2C",X"86",X"8D",X"20",X"AC",X"2B",X"A6",X"8D",X"4C",
- X"4F",X"30",X"CA",X"30",X"15",X"4C",X"60",X"2F",X"84",X"8B",X"A9",X"00",X"20",X"BA",X"2D",X"A9",
- X"13",X"85",X"B2",X"A9",X"FF",X"95",X"34",X"20",X"7D",X"2B",X"A6",X"88",X"B5",X"94",X"05",X"87",
- X"F0",X"10",X"A5",X"41",X"45",X"EF",X"C9",X"9C",X"90",X"07",X"C6",X"9F",X"D0",X"03",X"20",X"C7",
- X"21",X"60",X"F6",X"9C",X"A9",X"40",X"85",X"87",X"60",X"A6",X"86",X"10",X"0F",X"A2",X"00",X"8E",
- X"01",X"10",X"8E",X"03",X"10",X"8E",X"05",X"10",X"8E",X"07",X"10",X"60",X"A5",X"00",X"4A",X"90",
- X"19",X"A4",X"B5",X"98",X"F0",X"11",X"C6",X"B5",X"D0",X"04",X"A9",X"14",X"85",X"B5",X"B9",X"B0",
- X"31",X"8D",X"06",X"10",X"B9",X"C4",X"31",X"8D",X"07",X"10",X"A4",X"B4",X"98",X"F0",X"0A",X"C6",
- X"B4",X"B9",X"A5",X"31",X"8D",X"04",X"10",X"A9",X"64",X"8D",X"05",X"10",X"A5",X"AD",X"D0",X"14",
- X"A5",X"AB",X"C9",X"16",X"B0",X"0E",X"C9",X"14",X"90",X"0A",X"A5",X"00",X"29",X"04",X"F0",X"16",
- X"A9",X"10",X"D0",X"12",X"A4",X"B6",X"F0",X"28",X"A5",X"00",X"29",X"07",X"D0",X"73",X"C6",X"B6",
- X"88",X"F0",X"1D",X"B9",X"D8",X"31",X"8D",X"02",X"10",X"A9",X"A4",X"D0",X"61",X"A4",X"B8",X"88",
- X"D0",X"02",X"A0",X"14",X"84",X"B8",X"B9",X"E9",X"31",X"8D",X"02",X"10",X"A9",X"A4",X"D0",X"4E",
- X"A5",X"70",X"45",X"F0",X"C9",X"F8",X"B0",X"36",X"A5",X"43",X"29",X"AF",X"D0",X"30",X"A5",X"40",
- X"45",X"EF",X"C9",X"34",X"B0",X"28",X"C9",X"20",X"B0",X"D3",X"A5",X"70",X"45",X"F4",X"4A",X"49",
- X"FF",X"09",X"80",X"8D",X"02",X"10",X"A9",X"A4",X"D0",X"24",X"A4",X"B2",X"98",X"F0",X"0B",X"C6",
- X"B2",X"B9",X"71",X"31",X"8D",X"00",X"10",X"B9",X"84",X"31",X"8D",X"01",X"10",X"60",X"A4",X"B3",
- X"98",X"F0",X"0B",X"C6",X"B3",X"B9",X"97",X"31",X"8D",X"02",X"10",X"B9",X"9E",X"31",X"8D",X"03",
- X"10",X"A4",X"B7",X"F0",X"D5",X"A5",X"00",X"29",X"03",X"D0",X"16",X"C6",X"B7",X"88",X"F0",X"11",
- X"B9",X"71",X"31",X"8D",X"00",X"10",X"B9",X"84",X"31",X"F0",X"03",X"18",X"69",X"02",X"8D",X"01",
- X"10",X"60",X"00",X"00",X"00",X"00",X"F0",X"E0",X"D0",X"C0",X"B0",X"A0",X"90",X"80",X"70",X"60",
- X"50",X"40",X"30",X"20",X"10",X"00",X"00",X"00",X"00",X"81",X"81",X"81",X"82",X"82",X"82",X"82",
- X"83",X"83",X"83",X"83",X"84",X"84",X"84",X"84",X"70",X"00",X"00",X"A0",X"00",X"C0",X"E0",X"A1",
- X"00",X"00",X"A2",X"00",X"A2",X"A4",X"F0",X"E0",X"D0",X"C0",X"B0",X"A0",X"90",X"80",X"70",X"60",
- X"50",X"05",X"05",X"20",X"20",X"30",X"30",X"35",X"35",X"30",X"30",X"20",X"20",X"05",X"05",X"20",
- X"20",X"30",X"30",X"35",X"35",X"A1",X"00",X"A2",X"00",X"A3",X"00",X"A4",X"00",X"A3",X"00",X"A2",
- X"00",X"A1",X"00",X"A2",X"00",X"A3",X"00",X"A2",X"00",X"28",X"28",X"30",X"28",X"28",X"30",X"3C",
- X"51",X"50",X"50",X"60",X"50",X"50",X"60",X"74",X"A2",X"00",X"60",X"60",X"70",X"70",X"60",X"60",
- X"60",X"70",X"70",X"70",X"50",X"50",X"80",X"80",X"50",X"50",X"50",X"80",X"80",X"80",X"A0",X"00",
- X"84",X"32",X"A9",X"04",X"85",X"33",X"84",X"8D",X"A9",X"00",X"85",X"8B",X"84",X"8E",X"A2",X"08",
- X"B1",X"32",X"29",X"3F",X"C9",X"38",X"26",X"8B",X"C8",X"CA",X"D0",X"F4",X"A6",X"8D",X"BD",X"00",
- X"01",X"E6",X"8D",X"A8",X"A5",X"8B",X"9D",X"00",X"01",X"84",X"8B",X"A4",X"8E",X"A2",X"08",X"A9",
- X"00",X"26",X"8B",X"90",X"04",X"A9",X"3F",X"45",X"EF",X"91",X"32",X"C8",X"CA",X"D0",X"F0",X"98",
- X"D0",X"02",X"E6",X"33",X"C0",X"C0",X"D0",X"C0",X"A5",X"33",X"C9",X"07",X"D0",X"BA",X"60",X"C9",
- X"08",X"90",X"0C",X"C9",X"F8",X"B0",X"08",X"C9",X"80",X"A9",X"08",X"90",X"02",X"A9",X"F8",X"C9",
- X"80",X"6A",X"A8",X"A9",X"00",X"6A",X"60",X"A9",X"FF",X"A2",X"00",X"85",X"C1",X"85",X"C2",X"F8",
- X"A5",X"FB",X"18",X"6D",X"8E",X"01",X"8D",X"8E",X"01",X"A5",X"FC",X"6D",X"8F",X"01",X"8D",X"8F",
- X"01",X"AD",X"90",X"01",X"69",X"00",X"8D",X"90",X"01",X"AD",X"91",X"01",X"69",X"00",X"B0",X"1C",
- X"8D",X"91",X"01",X"AD",X"8B",X"01",X"18",X"65",X"89",X"8D",X"8B",X"01",X"AD",X"8C",X"01",X"69",
- X"00",X"8D",X"8C",X"01",X"AD",X"8D",X"01",X"69",X"00",X"8D",X"8D",X"01",X"D8",X"A0",X"00",X"B9",
- X"02",X"00",X"D5",X"A8",X"B9",X"03",X"00",X"F5",X"AA",X"B9",X"04",X"00",X"F5",X"AC",X"90",X"2E",
- X"C8",X"C8",X"C8",X"C0",X"18",X"90",X"E8",X"CA",X"10",X"E3",X"A5",X"C2",X"30",X"0E",X"C5",X"C1",
- X"90",X"0A",X"69",X"02",X"C9",X"18",X"90",X"02",X"A9",X"FF",X"85",X"C2",X"A9",X"00",X"85",X"C0",
- X"A5",X"C2",X"25",X"C1",X"10",X"07",X"A9",X"00",X"85",X"01",X"20",X"60",X"2D",X"60",X"86",X"8D",
- X"84",X"8E",X"94",X"C1",X"A2",X"17",X"B5",X"17",X"95",X"1A",X"BD",X"FF",X"FF",X"95",X"02",X"CA",
- X"E4",X"8E",X"D0",X"F2",X"A9",X"01",X"95",X"1A",X"A9",X"00",X"95",X"1B",X"95",X"1C",X"85",X"B9",
- X"A6",X"8D",X"B5",X"AC",X"99",X"04",X"00",X"B5",X"AA",X"99",X"03",X"00",X"B5",X"A8",X"99",X"02",
- X"00",X"A9",X"F0",X"85",X"01",X"D0",X"A0",X"A9",X"1F",X"45",X"F5",X"85",X"91",X"A9",X"04",X"45",
- X"F7",X"85",X"92",X"A5",X"AC",X"38",X"20",X"9E",X"38",X"A5",X"AA",X"20",X"9E",X"38",X"A5",X"A8",
- X"18",X"20",X"9E",X"38",X"AD",X"01",X"08",X"29",X"1C",X"F0",X"1D",X"A9",X"07",X"45",X"F7",X"85",
- X"92",X"A9",X"1F",X"45",X"F5",X"85",X"91",X"A5",X"AD",X"38",X"20",X"9E",X"38",X"A9",X"2E",X"20",
- X"85",X"38",X"A5",X"AB",X"18",X"20",X"9E",X"38",X"A9",X"9F",X"45",X"F5",X"85",X"91",X"A9",X"05",
- X"45",X"F7",X"85",X"92",X"A5",X"04",X"38",X"20",X"9E",X"38",X"A5",X"03",X"20",X"9E",X"38",X"A5",
- X"02",X"18",X"4C",X"9E",X"38",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",
- X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",
- X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"F5",X"A2",X"02",X"AD",
- X"01",X"0C",X"E0",X"01",X"F0",X"03",X"B0",X"02",X"0A",X"0A",X"0A",X"B5",X"CF",X"29",X"1F",X"B0",
- X"37",X"F0",X"10",X"C9",X"1B",X"B0",X"0A",X"A8",X"A5",X"D4",X"29",X"07",X"C9",X"07",X"98",X"90",
- X"02",X"E9",X"01",X"95",X"CF",X"AD",X"01",X"0C",X"29",X"10",X"D0",X"04",X"A9",X"F0",X"85",X"D2",
- X"A5",X"D2",X"F0",X"08",X"C6",X"D2",X"A9",X"00",X"95",X"CF",X"95",X"CC",X"18",X"B5",X"CC",X"F0",
- X"23",X"D6",X"CC",X"D0",X"1F",X"38",X"B0",X"1C",X"C9",X"1B",X"B0",X"09",X"B5",X"CF",X"69",X"20",
- X"90",X"D1",X"F0",X"01",X"18",X"A9",X"1F",X"B0",X"CA",X"95",X"CF",X"B5",X"CC",X"F0",X"01",X"38",
- X"A9",X"78",X"95",X"CC",X"90",X"2A",X"A9",X"00",X"E0",X"01",X"90",X"16",X"F0",X"0C",X"A5",X"D3",
- X"29",X"0C",X"4A",X"4A",X"F0",X"0C",X"69",X"02",X"D0",X"08",X"A5",X"D3",X"29",X"10",X"F0",X"02",
- X"A9",X"01",X"38",X"48",X"65",X"CA",X"85",X"CA",X"68",X"38",X"65",X"C9",X"85",X"C9",X"F6",X"C5",
- X"CA",X"30",X"03",X"4C",X"AF",X"33",X"A5",X"D3",X"4A",X"4A",X"4A",X"4A",X"4A",X"A8",X"A5",X"CA",
- X"38",X"F9",X"62",X"34",X"30",X"14",X"85",X"CA",X"E6",X"CB",X"C0",X"03",X"D0",X"0C",X"E6",X"CB",
- X"D0",X"08",X"7F",X"02",X"04",X"04",X"05",X"03",X"7F",X"7F",X"A5",X"D3",X"29",X"03",X"A8",X"F0",
- X"1A",X"4A",X"69",X"00",X"49",X"FF",X"38",X"65",X"C9",X"B0",X"08",X"65",X"CB",X"30",X"0E",X"85",
- X"CB",X"A9",X"00",X"C0",X"02",X"B0",X"02",X"E6",X"C8",X"E6",X"C8",X"85",X"C9",X"E6",X"D4",X"A5",
- X"D4",X"4A",X"B0",X"27",X"A0",X"00",X"A2",X"02",X"B5",X"C5",X"F0",X"09",X"C9",X"10",X"90",X"05",
- X"69",X"EF",X"C8",X"95",X"C5",X"CA",X"10",X"F0",X"98",X"D0",X"10",X"A2",X"02",X"B5",X"C5",X"F0",
- X"07",X"18",X"69",X"EF",X"95",X"C5",X"30",X"03",X"CA",X"10",X"F2",X"60",X"14",X"35",X"1F",X"35",
- X"2B",X"35",X"36",X"35",X"42",X"35",X"54",X"35",X"69",X"35",X"7E",X"35",X"92",X"35",X"A3",X"35",
- X"B7",X"35",X"CB",X"35",X"DE",X"35",X"F0",X"35",X"05",X"36",X"1A",X"36",X"2E",X"36",X"3B",X"36",
- X"48",X"36",X"59",X"36",X"6C",X"36",X"83",X"36",X"A3",X"36",X"BB",X"36",X"D2",X"36",X"E2",X"36",
- X"F1",X"36",X"02",X"37",X"11",X"37",X"20",X"37",X"35",X"37",X"48",X"37",X"53",X"37",X"62",X"37",
- X"7B",X"37",X"8E",X"37",X"9E",X"37",X"AA",X"37",X"B6",X"37",X"C2",X"37",X"CF",X"37",X"E3",X"37",
- X"FF",X"37",X"11",X"38",X"6E",X"05",X"51",X"06",X"50",X"4C",X"41",X"59",X"45",X"52",X"A0",X"6E",
- X"05",X"51",X"06",X"53",X"50",X"49",X"45",X"4C",X"45",X"52",X"A0",X"6E",X"05",X"51",X"06",X"4A",
- X"4F",X"55",X"45",X"55",X"52",X"A0",X"6E",X"05",X"51",X"06",X"4A",X"55",X"47",X"41",X"44",X"4F",
- X"52",X"A0",X"13",X"05",X"AC",X"06",X"31",X"20",X"43",X"4F",X"49",X"4E",X"20",X"32",X"20",X"50",
- X"4C",X"41",X"59",X"D3",X"F3",X"04",X"CC",X"06",X"31",X"20",X"4D",X"55",X"45",X"4E",X"5A",X"45",
- X"20",X"32",X"20",X"53",X"50",X"49",X"45",X"4C",X"C5",X"F3",X"04",X"CC",X"06",X"31",X"20",X"50",
- X"49",X"45",X"43",X"45",X"20",X"32",X"20",X"4A",X"4F",X"55",X"45",X"55",X"52",X"D3",X"F3",X"04",
- X"CC",X"06",X"31",X"20",X"46",X"49",X"43",X"48",X"41",X"20",X"32",X"20",X"4A",X"55",X"45",X"47",
- X"4F",X"D3",X"13",X"05",X"AC",X"06",X"31",X"20",X"43",X"4F",X"49",X"4E",X"20",X"31",X"20",X"50",
- X"4C",X"41",X"D9",X"F3",X"04",X"CC",X"06",X"31",X"20",X"4D",X"55",X"45",X"4E",X"5A",X"45",X"20",
- X"31",X"20",X"53",X"50",X"49",X"45",X"CC",X"F3",X"04",X"CC",X"06",X"31",X"20",X"50",X"49",X"45",
- X"43",X"45",X"20",X"31",X"20",X"4A",X"4F",X"55",X"45",X"55",X"D2",X"F3",X"04",X"CC",X"06",X"31",
- X"20",X"46",X"49",X"43",X"48",X"41",X"20",X"31",X"20",X"4A",X"55",X"45",X"47",X"CF",X"13",X"05",
- X"AC",X"06",X"32",X"20",X"43",X"4F",X"49",X"4E",X"53",X"20",X"31",X"20",X"50",X"4C",X"41",X"D9",
- X"F3",X"04",X"CC",X"06",X"32",X"20",X"4D",X"55",X"45",X"4E",X"5A",X"45",X"4E",X"20",X"31",X"20",
- X"53",X"50",X"49",X"45",X"CC",X"F3",X"04",X"CC",X"06",X"32",X"20",X"50",X"49",X"45",X"43",X"45",
- X"53",X"20",X"31",X"20",X"4A",X"4F",X"55",X"45",X"55",X"D2",X"F3",X"04",X"CC",X"06",X"32",X"20",
- X"46",X"49",X"43",X"48",X"41",X"53",X"20",X"31",X"20",X"4A",X"55",X"45",X"47",X"CF",X"6F",X"05",
- X"50",X"06",X"47",X"41",X"4D",X"45",X"20",X"4F",X"56",X"45",X"D2",X"6F",X"05",X"50",X"06",X"53",
- X"50",X"49",X"45",X"4C",X"45",X"4E",X"44",X"C5",X"0F",X"05",X"B0",X"06",X"46",X"49",X"4E",X"20",
- X"44",X"45",X"20",X"50",X"41",X"52",X"54",X"49",X"C5",X"EF",X"04",X"D0",X"06",X"4A",X"55",X"45",
- X"47",X"4F",X"20",X"54",X"45",X"52",X"4D",X"49",X"4E",X"41",X"44",X"CF",X"AB",X"04",X"14",X"07",
- X"45",X"4E",X"54",X"45",X"52",X"20",X"59",X"4F",X"55",X"52",X"20",X"49",X"4E",X"49",X"54",X"49",
- X"41",X"4C",X"D3",X"2B",X"04",X"94",X"07",X"47",X"45",X"42",X"45",X"4E",X"20",X"53",X"49",X"45",
- X"20",X"49",X"48",X"52",X"45",X"20",X"49",X"4E",X"49",X"54",X"49",X"41",X"4C",X"45",X"4E",X"20",
- X"45",X"49",X"CE",X"8B",X"04",X"34",X"07",X"45",X"4E",X"54",X"52",X"45",X"5A",X"20",X"56",X"4F",
- X"53",X"20",X"49",X"4E",X"49",X"54",X"49",X"41",X"4C",X"45",X"D3",X"8B",X"04",X"34",X"07",X"45",
- X"4E",X"54",X"52",X"45",X"20",X"53",X"55",X"53",X"20",X"49",X"4E",X"49",X"43",X"49",X"41",X"4C",
- X"45",X"D3",X"F1",X"04",X"CE",X"06",X"42",X"4F",X"4E",X"55",X"53",X"20",X"45",X"56",X"45",X"52",
- X"59",X"A0",X"F1",X"04",X"CE",X"06",X"42",X"4F",X"4E",X"55",X"53",X"20",X"4A",X"45",X"44",X"45",
- X"A0",X"D1",X"04",X"EE",X"06",X"42",X"4F",X"4E",X"55",X"53",X"20",X"43",X"48",X"41",X"51",X"55",
- X"45",X"A0",X"F1",X"04",X"CE",X"06",X"45",X"58",X"54",X"52",X"41",X"20",X"43",X"41",X"44",X"41",
- X"A0",X"5D",X"05",X"62",X"06",X"48",X"49",X"47",X"48",X"20",X"53",X"43",X"4F",X"52",X"45",X"D3",
- X"DD",X"04",X"E2",X"06",X"48",X"4F",X"45",X"43",X"48",X"53",X"54",X"45",X"52",X"47",X"45",X"42",
- X"4E",X"49",X"53",X"53",X"C5",X"1D",X"05",X"A2",X"06",X"4D",X"45",X"49",X"4C",X"4C",X"45",X"55",
- X"52",X"53",X"20",X"53",X"43",X"4F",X"52",X"C5",X"9D",X"05",X"22",X"06",X"52",X"45",X"43",X"4F",
- X"52",X"44",X"D3",X"2C",X"05",X"93",X"06",X"47",X"52",X"45",X"41",X"54",X"20",X"53",X"43",X"4F",
- X"52",X"C5",X"8C",X"04",X"33",X"07",X"47",X"52",X"4F",X"53",X"53",X"41",X"52",X"54",X"49",X"47",
- X"45",X"53",X"20",X"45",X"52",X"47",X"45",X"42",X"4E",X"49",X"D3",X"EC",X"04",X"D3",X"06",X"53",
- X"50",X"4C",X"45",X"4E",X"44",X"49",X"44",X"45",X"20",X"53",X"43",X"4F",X"52",X"C5",X"0C",X"05",
- X"B3",X"06",X"47",X"52",X"41",X"4E",X"20",X"50",X"55",X"4E",X"54",X"41",X"4A",X"C5",X"52",X"05",
- X"6D",X"06",X"43",X"52",X"45",X"44",X"49",X"54",X"53",X"A0",X"52",X"05",X"6D",X"06",X"4B",X"52",
- X"45",X"44",X"49",X"54",X"45",X"A0",X"52",X"05",X"6D",X"06",X"43",X"52",X"45",X"44",X"49",X"54",
- X"53",X"A0",X"52",X"05",X"6D",X"06",X"43",X"52",X"45",X"44",X"49",X"54",X"4F",X"53",X"A0",X"F0",
- X"04",X"CF",X"06",X"32",X"20",X"43",X"52",X"45",X"44",X"49",X"54",X"20",X"4D",X"49",X"4E",X"49",
- X"4D",X"55",X"CD",X"30",X"04",X"8F",X"07",X"47",X"45",X"4C",X"44",X"45",X"49",X"4E",X"57",X"55",
- X"52",X"46",X"20",X"46",X"55",X"52",X"20",X"32",X"20",X"53",X"50",X"49",X"45",X"4C",X"C5",X"F0",
- X"04",X"CF",X"06",X"32",X"20",X"4A",X"55",X"45",X"58",X"20",X"4D",X"49",X"4E",X"49",X"4D",X"55",
- X"CD",X"F0",X"04",X"CF",X"06",X"32",X"20",X"4A",X"55",X"45",X"47",X"41",X"53",X"20",X"4D",X"49",
- X"4E",X"49",X"4D",X"B0",X"0A",X"66",X"8C",X"A8",X"0A",X"85",X"8B",X"A5",X"FD",X"29",X"03",X"05",
- X"8B",X"0A",X"AA",X"BD",X"BC",X"34",X"85",X"93",X"BD",X"BD",X"34",X"85",X"94",X"A0",X"00",X"A6",
- X"EF",X"F0",X"02",X"A0",X"02",X"B1",X"93",X"85",X"91",X"C8",X"B1",X"93",X"85",X"92",X"A0",X"04",
- X"84",X"8B",X"A4",X"8B",X"B1",X"93",X"29",X"3F",X"C9",X"20",X"F0",X"04",X"A6",X"8C",X"10",X"02",
- X"A9",X"00",X"C9",X"30",X"90",X"02",X"29",X"2F",X"20",X"85",X"38",X"A4",X"8B",X"E6",X"8B",X"B1",
- X"93",X"10",X"DF",X"60",X"A0",X"00",X"84",X"8C",X"F0",X"D6",X"10",X"05",X"49",X"FF",X"18",X"69",
- X"01",X"60",X"B9",X"1A",X"00",X"A8",X"F0",X"02",X"45",X"EF",X"A0",X"00",X"91",X"91",X"A9",X"20",
- X"45",X"EF",X"18",X"65",X"91",X"85",X"91",X"A5",X"F3",X"65",X"92",X"85",X"92",X"60",X"48",X"08",
- X"4A",X"4A",X"4A",X"4A",X"28",X"20",X"AB",X"38",X"68",X"29",X"0F",X"90",X"04",X"29",X"0F",X"F0",
- X"03",X"18",X"09",X"20",X"08",X"C9",X"2A",X"90",X"02",X"E9",X"29",X"20",X"85",X"38",X"28",X"60",
- X"48",X"8A",X"48",X"98",X"48",X"D8",X"A5",X"D2",X"F0",X"0A",X"A9",X"10",X"8D",X"02",X"10",X"A9",
- X"AF",X"8D",X"03",X"10",X"2C",X"00",X"0C",X"70",X"03",X"4C",X"B4",X"39",X"E6",X"8A",X"E6",X"00",
- X"D0",X"11",X"E6",X"01",X"F8",X"A5",X"FB",X"18",X"69",X"01",X"85",X"FB",X"A5",X"FC",X"69",X"00",
- X"85",X"FC",X"D8",X"A5",X"8A",X"C9",X"08",X"B0",X"FE",X"A5",X"C8",X"C9",X"25",X"B0",X"FE",X"C9",
- X"13",X"90",X"04",X"A9",X"12",X"85",X"C8",X"AD",X"03",X"0C",X"A6",X"88",X"AC",X"B8",X"01",X"20",
- X"31",X"3A",X"8C",X"B8",X"01",X"48",X"98",X"18",X"65",X"B9",X"85",X"B9",X"68",X"AC",X"B9",X"01",
- X"20",X"31",X"3A",X"8C",X"B9",X"01",X"98",X"20",X"7C",X"38",X"18",X"65",X"BB",X"85",X"BB",X"B5",
- X"C2",X"30",X"08",X"C9",X"40",X"90",X"15",X"29",X"3F",X"10",X"0B",X"29",X"3F",X"18",X"69",X"03",
- X"C9",X"2A",X"90",X"02",X"A9",X"00",X"95",X"C2",X"AA",X"20",X"5A",X"26",X"A2",X"0F",X"B5",X"64",
- X"9D",X"E0",X"07",X"B5",X"54",X"A0",X"00",X"E0",X"0D",X"F0",X"07",X"B4",X"44",X"10",X"03",X"18",
- X"69",X"01",X"9D",X"D0",X"07",X"98",X"29",X"80",X"85",X"99",X"AD",X"00",X"0C",X"29",X"20",X"D0",
- X"05",X"B5",X"34",X"4C",X"9D",X"39",X"B5",X"34",X"E0",X"0C",X"B0",X"1F",X"29",X"3F",X"C9",X"30",
- X"B0",X"19",X"29",X"0F",X"85",X"98",X"B5",X"64",X"29",X"07",X"F0",X"0D",X"A8",X"A9",X"08",X"C0",
- X"06",X"B0",X"06",X"C0",X"03",X"90",X"02",X"A9",X"0C",X"45",X"98",X"45",X"99",X"9D",X"C0",X"07",
- X"B5",X"34",X"29",X"40",X"F0",X"06",X"E0",X"0C",X"B0",X"02",X"A9",X"0C",X"09",X"39",X"9D",X"F0",
- X"07",X"CA",X"10",X"9A",X"AD",X"00",X"0C",X"29",X"20",X"D0",X"1F",X"A5",X"D5",X"30",X"3B",X"E6",
- X"D5",X"2C",X"00",X"0C",X"50",X"04",X"A9",X"00",X"85",X"D5",X"A5",X"D5",X"0A",X"0A",X"A2",X"03",
- X"9D",X"04",X"14",X"69",X"01",X"CA",X"10",X"F8",X"30",X"20",X"20",X"AD",X"33",X"A2",X"02",X"B5",
- X"C5",X"9D",X"00",X"1C",X"CA",X"10",X"F8",X"A2",X"0A",X"A9",X"F4",X"5D",X"03",X"20",X"CA",X"10",
- X"FA",X"AA",X"F0",X"06",X"BA",X"A9",X"03",X"9D",X"04",X"01",X"A2",X"02",X"BD",X"00",X"0C",X"A8",
- X"38",X"F5",X"BD",X"94",X"BD",X"29",X"0F",X"C9",X"08",X"90",X"02",X"09",X"F0",X"A8",X"F0",X"14",
- X"55",X"BA",X"10",X"08",X"98",X"5D",X"00",X"0C",X"10",X"02",X"B4",X"BA",X"98",X"95",X"BA",X"18",
- X"75",X"B9",X"95",X"B9",X"CA",X"CA",X"10",X"D4",X"8D",X"00",X"18",X"68",X"A8",X"68",X"AA",X"68",
- X"40",X"0A",X"90",X"06",X"0A",X"90",X"0E",X"A0",X"00",X"60",X"C0",X"FA",X"F0",X"05",X"B0",X"02",
- X"A0",X"00",X"88",X"0A",X"60",X"C0",X"06",X"F0",X"05",X"90",X"02",X"A0",X"00",X"C8",X"60",X"A0",
- X"3C",X"A9",X"FF",X"59",X"78",X"01",X"88",X"10",X"FA",X"AC",X"B5",X"01",X"8D",X"B5",X"01",X"98",
- X"4D",X"B5",X"01",X"60",X"A2",X"2F",X"BD",X"B0",X"3A",X"95",X"02",X"CA",X"10",X"F8",X"20",X"4F",
- X"3A",X"D0",X"2B",X"A5",X"FD",X"29",X"7C",X"CD",X"8A",X"01",X"8D",X"8A",X"01",X"D0",X"1E",X"AD",
- X"7A",X"01",X"F0",X"1A",X"A2",X"08",X"BD",X"78",X"01",X"95",X"02",X"C9",X"9A",X"B0",X"0F",X"29",
- X"0F",X"C9",X"0A",X"B0",X"09",X"BD",X"81",X"01",X"95",X"1A",X"CA",X"10",X"E9",X"60",X"A9",X"00",
- X"A2",X"3E",X"9D",X"78",X"01",X"CA",X"10",X"FA",X"A5",X"FD",X"29",X"7C",X"8D",X"8A",X"01",X"60",
- X"43",X"65",X"01",X"32",X"54",X"01",X"20",X"43",X"01",X"10",X"32",X"01",X"10",X"30",X"01",X"05",
- X"28",X"01",X"01",X"22",X"01",X"02",X"21",X"01",X"05",X"0A",X"04",X"04",X"06",X"14",X"03",X"01",
- X"04",X"04",X"03",X"02",X"05",X"04",X"00",X"04",X"05",X"17",X"04",X"06",X"17",X"07",X"0A",X"12",
- X"A2",X"3F",X"20",X"EE",X"3A",X"9D",X"78",X"01",X"CA",X"10",X"F7",X"86",X"F9",X"60",X"9D",X"00",
- X"16",X"A0",X"08",X"8C",X"80",X"16",X"C8",X"8C",X"80",X"16",X"88",X"8C",X"80",X"16",X"A0",X"00",
- X"BD",X"00",X"17",X"8C",X"80",X"16",X"60",X"A5",X"00",X"29",X"03",X"D0",X"17",X"8D",X"80",X"16",
- X"A6",X"F9",X"30",X"10",X"46",X"FA",X"90",X"0D",X"A9",X"02",X"8D",X"80",X"16",X"A9",X"0A",X"8D",
- X"80",X"16",X"C6",X"F9",X"60",X"78",X"20",X"EE",X"3A",X"DD",X"78",X"01",X"D0",X"07",X"CA",X"10",
- X"F5",X"58",X"86",X"F9",X"60",X"58",X"86",X"F9",X"A9",X"06",X"8D",X"80",X"16",X"BD",X"78",X"01",
- X"9D",X"00",X"16",X"A9",X"0E",X"8D",X"80",X"16",X"E6",X"FA",X"60",X"D8",X"A2",X"FF",X"9A",X"E8",
- X"8A",X"95",X"00",X"9D",X"00",X"01",X"9D",X"00",X"04",X"9D",X"00",X"05",X"9D",X"00",X"06",X"9D",
- X"00",X"07",X"CA",X"D0",X"EC",X"8D",X"0F",X"10",X"8D",X"08",X"10",X"8D",X"00",X"24",X"8D",X"07",
- X"1C",X"AD",X"00",X"0C",X"29",X"20",X"F0",X"19",X"AD",X"00",X"08",X"85",X"FD",X"CA",X"86",X"86",
- X"86",X"C1",X"86",X"C2",X"A9",X"01",X"85",X"FF",X"20",X"E0",X"3A",X"20",X"64",X"3A",X"4C",X"0E",
- X"20",X"8E",X"04",X"14",X"8E",X"01",X"10",X"8E",X"03",X"10",X"8E",X"05",X"10",X"8E",X"07",X"10",
- X"E8",X"8E",X"05",X"14",X"8E",X"0D",X"14",X"E8",X"8E",X"06",X"14",X"8E",X"0E",X"14",X"E8",X"8E",
- X"07",X"14",X"8E",X"0F",X"14",X"A2",X"00",X"B5",X"00",X"D0",X"43",X"A9",X"11",X"95",X"00",X"A8",
- X"55",X"00",X"D0",X"3A",X"98",X"0A",X"90",X"F5",X"E8",X"D0",X"EC",X"8D",X"00",X"20",X"8A",X"85",
- X"8B",X"2A",X"85",X"8C",X"A0",X"00",X"A2",X"11",X"B1",X"8B",X"D0",X"28",X"8A",X"91",X"8B",X"51",
- X"8B",X"D0",X"21",X"8A",X"0A",X"AA",X"90",X"F4",X"C8",X"D0",X"EB",X"8D",X"00",X"20",X"E6",X"8C",
- X"A5",X"8C",X"C9",X"02",X"D0",X"02",X"A9",X"04",X"C9",X"08",X"90",X"D6",X"B0",X"5F",X"C9",X"10",
- X"A9",X"00",X"10",X"12",X"A6",X"8C",X"E0",X"04",X"90",X"F4",X"AA",X"98",X"29",X"30",X"4A",X"4A",
- X"4A",X"4A",X"69",X"01",X"E0",X"10",X"2A",X"A8",X"A9",X"40",X"8D",X"00",X"10",X"A2",X"03",X"8E",
- X"0F",X"10",X"A2",X"10",X"A9",X"AF",X"8D",X"01",X"10",X"2C",X"00",X"0C",X"50",X"FB",X"2C",X"00",
- X"0C",X"70",X"FB",X"8D",X"00",X"20",X"CA",X"D0",X"F0",X"8E",X"01",X"10",X"A2",X"10",X"2C",X"00",
- X"0C",X"50",X"FB",X"2C",X"00",X"0C",X"70",X"FB",X"8D",X"00",X"20",X"CA",X"D0",X"F0",X"88",X"10",
- X"D1",X"8D",X"00",X"20",X"AD",X"00",X"0C",X"29",X"20",X"F0",X"F6",X"D0",X"FE",X"AD",X"01",X"0C",
- X"29",X"10",X"F0",X"03",X"4C",X"DE",X"3C",X"AA",X"95",X"00",X"E8",X"D0",X"FB",X"A2",X"0F",X"A9",
- X"F8",X"95",X"64",X"CA",X"10",X"FB",X"A9",X"07",X"85",X"8C",X"A0",X"BF",X"A9",X"2D",X"A2",X"08",
- X"91",X"8B",X"88",X"CA",X"D0",X"FA",X"38",X"E9",X"01",X"C9",X"2A",X"B0",X"F1",X"C0",X"FF",X"D0",
- X"EB",X"C6",X"8C",X"A5",X"8C",X"C9",X"04",X"B0",X"E3",X"58",X"AD",X"00",X"0C",X"29",X"20",X"D0",
- X"F9",X"46",X"8A",X"8D",X"00",X"20",X"AD",X"01",X"0C",X"29",X"E0",X"49",X"E0",X"F0",X"EB",X"A9",
- X"1D",X"78",X"9D",X"00",X"04",X"9D",X"00",X"05",X"9D",X"00",X"06",X"E8",X"D0",X"F4",X"9D",X"00",
- X"07",X"E8",X"E0",X"C0",X"90",X"F8",X"A2",X"08",X"8E",X"05",X"14",X"A2",X"0F",X"8E",X"04",X"14",
- X"AD",X"00",X"0C",X"29",X"20",X"D0",X"F9",X"8D",X"00",X"20",X"46",X"8A",X"10",X"F2",X"A2",X"00",
- X"8A",X"9D",X"00",X"07",X"A9",X"00",X"95",X"00",X"9D",X"00",X"04",X"9D",X"00",X"05",X"9D",X"00",
- X"06",X"E8",X"D0",X"EC",X"CA",X"86",X"D5",X"86",X"E3",X"8D",X"03",X"1C",X"8D",X"04",X"1C",X"A2",
- X"0F",X"8A",X"09",X"80",X"95",X"54",X"95",X"64",X"CA",X"10",X"F6",X"AD",X"0A",X"10",X"4D",X"0A",
- X"10",X"85",X"E5",X"A9",X"03",X"8D",X"0F",X"10",X"A2",X"00",X"86",X"8B",X"A9",X"20",X"85",X"8C",
- X"A2",X"1F",X"A9",X"FF",X"A0",X"00",X"8E",X"00",X"20",X"51",X"8B",X"C8",X"D0",X"FB",X"A8",X"8A",
- X"29",X"07",X"C9",X"01",X"98",X"B0",X"03",X"48",X"A9",X"FF",X"E6",X"8C",X"CA",X"10",X"E5",X"A9",
- X"04",X"85",X"92",X"A2",X"03",X"8A",X"49",X"3F",X"85",X"91",X"68",X"F0",X"11",X"48",X"8A",X"09",
- X"20",X"20",X"85",X"38",X"A9",X"00",X"20",X"85",X"38",X"68",X"18",X"20",X"9E",X"38",X"CA",X"10",
- X"E4",X"20",X"E0",X"3A",X"A0",X"06",X"B9",X"8B",X"01",X"99",X"8E",X"00",X"88",X"10",X"F7",X"F8",
- X"AD",X"8B",X"01",X"0D",X"8C",X"01",X"0D",X"8D",X"01",X"F0",X"1F",X"C8",X"C8",X"F0",X"1B",X"A5",
- X"91",X"38",X"E5",X"8E",X"85",X"91",X"A5",X"92",X"E5",X"8F",X"85",X"92",X"A5",X"93",X"E5",X"90",
- X"85",X"93",X"A5",X"94",X"E9",X"00",X"85",X"94",X"10",X"E2",X"D8",X"84",X"8D",X"58",X"46",X"8A",
- X"90",X"FC",X"AD",X"00",X"0C",X"29",X"20",X"D0",X"FE",X"8D",X"00",X"20",X"AD",X"01",X"0C",X"4A",
- X"26",X"EA",X"A5",X"EA",X"29",X"03",X"C9",X"02",X"D0",X"24",X"A5",X"E6",X"AA",X"18",X"69",X"02",
- X"29",X"06",X"85",X"E6",X"A9",X"00",X"9D",X"01",X"10",X"A5",X"E7",X"18",X"69",X"01",X"29",X"0F",
- X"85",X"E7",X"A6",X"E8",X"E8",X"8A",X"29",X"0F",X"AA",X"8E",X"04",X"14",X"86",X"E8",X"AD",X"01",
- X"0C",X"4A",X"4A",X"26",X"EB",X"A5",X"EB",X"29",X"03",X"C9",X"02",X"D0",X"16",X"E6",X"E9",X"A5",
- X"E9",X"A0",X"01",X"18",X"69",X"01",X"29",X"0F",X"99",X"04",X"14",X"99",X"0C",X"14",X"C8",X"C0",
- X"04",X"90",X"F0",X"AD",X"01",X"0C",X"4A",X"4A",X"4A",X"26",X"EC",X"A5",X"EC",X"29",X"03",X"49",
- X"02",X"D0",X"07",X"A2",X"0F",X"F6",X"34",X"CA",X"10",X"FB",X"A9",X"05",X"85",X"92",X"A9",X"38",
- X"85",X"91",X"AD",X"00",X"08",X"29",X"0C",X"4A",X"4A",X"69",X"01",X"85",X"8B",X"A2",X"05",X"A9",
- X"1F",X"24",X"8B",X"10",X"02",X"A9",X"00",X"20",X"85",X"38",X"C6",X"8B",X"CA",X"D0",X"F0",X"A9",
- X"37",X"85",X"91",X"A9",X"21",X"20",X"85",X"38",X"A9",X"21",X"20",X"85",X"38",X"A9",X"21",X"20",
- X"85",X"38",X"A9",X"36",X"85",X"91",X"A9",X"00",X"A8",X"91",X"91",X"A0",X"40",X"91",X"91",X"AD",
- X"01",X"08",X"4A",X"4A",X"4A",X"4A",X"4A",X"F0",X"1B",X"AA",X"C9",X"06",X"B0",X"16",X"BD",X"D8",
- X"3F",X"20",X"85",X"38",X"A9",X"00",X"20",X"85",X"38",X"A9",X"21",X"E0",X"03",X"D0",X"02",X"A9",
- X"22",X"20",X"85",X"38",X"A9",X"3F",X"85",X"94",X"A9",X"EE",X"2C",X"00",X"08",X"50",X"02",X"A9",
- X"F2",X"85",X"93",X"A9",X"35",X"85",X"91",X"20",X"74",X"38",X"AD",X"01",X"0C",X"85",X"DF",X"AD",
- X"00",X"08",X"85",X"DD",X"AD",X"01",X"08",X"85",X"DE",X"AD",X"00",X"0C",X"29",X"8F",X"85",X"E0",
- X"AD",X"02",X"0C",X"29",X"8F",X"85",X"E1",X"AD",X"03",X"0C",X"85",X"E2",X"AD",X"0A",X"10",X"48",
- X"25",X"E3",X"85",X"E3",X"68",X"05",X"E4",X"85",X"E4",X"A2",X"00",X"AD",X"01",X"0C",X"38",X"2A",
- X"B0",X"01",X"E8",X"0A",X"D0",X"FA",X"8A",X"A4",X"E6",X"0A",X"0A",X"0A",X"99",X"00",X"10",X"8A",
- X"09",X"A0",X"99",X"01",X"10",X"A6",X"E7",X"A0",X"00",X"A5",X"B9",X"84",X"B9",X"18",X"75",X"54",
- X"95",X"54",X"B5",X"64",X"38",X"E5",X"BB",X"84",X"BB",X"95",X"64",X"A0",X"D0",X"A2",X"05",X"9A",
- X"A2",X"07",X"8A",X"BA",X"36",X"DD",X"AA",X"A9",X"21",X"B0",X"02",X"A9",X"20",X"C8",X"99",X"00",
- X"04",X"CA",X"10",X"EE",X"98",X"38",X"E9",X"28",X"A8",X"BA",X"CA",X"10",X"E2",X"A9",X"04",X"85",
- X"92",X"A9",X"3A",X"85",X"91",X"A5",X"E4",X"49",X"FF",X"05",X"E3",X"05",X"E5",X"F0",X"02",X"A9",
- X"25",X"20",X"85",X"38",X"20",X"07",X"3B",X"20",X"4F",X"3A",X"8C",X"B5",X"01",X"F0",X"16",X"48",
- X"A9",X"3B",X"85",X"91",X"A9",X"24",X"20",X"85",X"38",X"A9",X"00",X"20",X"85",X"38",X"68",X"20",
- X"9E",X"38",X"4C",X"D6",X"3F",X"A9",X"04",X"85",X"92",X"A9",X"E9",X"85",X"91",X"38",X"AD",X"8D",
- X"01",X"20",X"9E",X"38",X"AD",X"8C",X"01",X"20",X"9E",X"38",X"AD",X"8B",X"01",X"18",X"20",X"9E",
- X"38",X"A9",X"DE",X"85",X"93",X"A9",X"3F",X"85",X"94",X"20",X"74",X"38",X"A9",X"05",X"85",X"92",
- X"A9",X"08",X"85",X"91",X"A5",X"8D",X"4A",X"4A",X"4A",X"4A",X"F8",X"18",X"69",X"00",X"D8",X"38",
- X"20",X"9E",X"38",X"A9",X"2E",X"20",X"85",X"38",X"A5",X"8D",X"29",X"0F",X"F8",X"18",X"69",X"00",
- X"85",X"8E",X"65",X"8E",X"85",X"8E",X"65",X"8E",X"D8",X"C9",X"60",X"90",X"02",X"A9",X"59",X"18",
- X"20",X"9E",X"38",X"A9",X"E4",X"85",X"93",X"A9",X"3F",X"85",X"94",X"20",X"74",X"38",X"A5",X"EA",
- X"05",X"EB",X"05",X"EC",X"D0",X"10",X"AD",X"B5",X"01",X"49",X"FF",X"8D",X"B5",X"01",X"A9",X"3D",
- X"85",X"F9",X"A9",X"00",X"85",X"FA",X"4C",X"9E",X"3D",X"22",X"24",X"24",X"25",X"23",X"20",X"50",
- X"4C",X"41",X"59",X"D3",X"20",X"47",X"41",X"4D",X"45",X"20",X"54",X"49",X"4D",X"C5",X"48",X"41",
- X"52",X"C4",X"45",X"41",X"53",X"D9",X"4C",X"F6",X"3F",X"13",X"F6",X"3F",X"4B",X"3B",X"C0",X"38");
-begin
-process(clk)
-begin
- if rising_edge(clk) then
- data <= rom_data(to_integer(unsigned(addr)));
- end if;
-end process;
-end architecture;
diff --git a/Arcade_MiST/Atari Tetris/Tetris.qsf b/Arcade_MiST/Atari Tetris/Tetris.qsf
index 3c7abb8a..a40b2bf0 100644
--- a/Arcade_MiST/Atari Tetris/Tetris.qsf
+++ b/Arcade_MiST/Atari Tetris/Tetris.qsf
@@ -218,23 +218,12 @@ set_global_assignment -name USE_SIGNALTAP_FILE output_files/tet.stp
set_global_assignment -name SYSTEMVERILOG_FILE rtl/Tetris_MiST.sv
set_global_assignment -name VERILOG_FILE rtl/FPGA_ATetris.v
set_global_assignment -name VERILOG_FILE rtl/ATARI_SLAPSTIK1.v
-set_global_assignment -name VHDL_FILE rtl/Pokey/syncreset_enable_divider.vhd
-set_global_assignment -name VHDL_FILE rtl/Pokey/synchronizer.vhdl
-set_global_assignment -name VHDL_FILE rtl/Pokey/pokey_poly_17_9.vhdl
-set_global_assignment -name VHDL_FILE rtl/Pokey/pokey_poly_5.vhdl
-set_global_assignment -name VHDL_FILE rtl/Pokey/pokey_poly_4.vhdl
-set_global_assignment -name VHDL_FILE rtl/Pokey/pokey_noise_filter.vhdl
-set_global_assignment -name VHDL_FILE rtl/Pokey/pokey_keyboard_scanner.vhdl
-set_global_assignment -name VHDL_FILE rtl/Pokey/pokey_countdown_timer.vhdl
-set_global_assignment -name VHDL_FILE rtl/Pokey/pokey.vhdl
-set_global_assignment -name VHDL_FILE rtl/Pokey/latch_delay_line.vhdl
-set_global_assignment -name VHDL_FILE rtl/Pokey/delay_line.vhdl
-set_global_assignment -name VHDL_FILE rtl/Pokey/complete_address_decoder.vhdl
set_global_assignment -name VHDL_FILE rtl/dpram.vhd
set_global_assignment -name VERILOG_FILE rtl/hvgen.v
set_global_assignment -name SYSTEMVERILOG_FILE rtl/sdram.sv
set_global_assignment -name VHDL_FILE rtl/pll_mist.vhd
set_global_assignment -name VHDL_FILE rtl/spram.vhd
+set_global_assignment -name QIP_FILE ../../common/Sound/Pokey/Pokey.qip
set_global_assignment -name QIP_FILE ../../common/CPU/T65/T65.qip
set_global_assignment -name QIP_FILE ../../common/mist/mist.qip
set_global_assignment -name SIGNALTAP_FILE output_files/tet.stp
diff --git a/Arcade_MiST/Atari Tetris/rtl/FPGA_ATetris.v b/Arcade_MiST/Atari Tetris/rtl/FPGA_ATetris.v
index 16afec24..b7759450 100644
--- a/Arcade_MiST/Atari Tetris/rtl/FPGA_ATetris.v
+++ b/Arcade_MiST/Atari Tetris/rtl/FPGA_ATetris.v
@@ -24,7 +24,13 @@ module FPGA_ATetris
input [7:0] PRDT,
output [15:0] CRAD,
- input [15:0] CRDT
+ input [15:0] CRDT,
+
+ input NVRAM_CLK,
+ input [8:0] NVRAM_A,
+ input [7:0] NVRAM_D,
+ input NVRAM_WE,
+ output [7:0] NVRAM_Q
);
// INP = {`SELFT,`COIN2,`COIN1,`P2LF,`P2RG,`P2DW,`P2RO,`P1LF,`P1RG,`P1DW,`P1RO};
@@ -66,7 +72,7 @@ ATETRIS_ROMAXS romaxs(RST,MCLK,CPUCE,CPUAD,PRAD,PRDV);
// RAMs
wire [7:0] RMDT;
wire RMDV;
-ATETRIS_RAMS rams(MCLK,CPUAD,CPUWR,CPUDO,RMDT,RMDV);
+ATETRIS_RAMS rams(MCLK,CPUAD,CPUWR,CPUDO,RMDT,RMDV,NVRAM_CLK,NVRAM_A,NVRAM_D,NVRAM_WE,NVRAM_Q);
// Video
@@ -164,7 +170,13 @@ module ATETRIS_RAMS
input CPUWR,
input [7:0] CPUDO,
output [7:0] RMDT,
- output RMDV
+ output RMDV,
+
+ input NVRAM_CLK,
+ input [8:0] NVRAM_A,
+ input [7:0] NVRAM_D,
+ input NVRAM_WE,
+ output [7:0] NVRAM_Q
);
// WorkRAM
@@ -188,16 +200,24 @@ wire NVDV = (CPUAD[15:10]==6'b0010_01); // $24xx-$27xx
wire [7:0] NVDT;
//RAM_B #(9,255) nvram(DEVCL,CPUAD,NVDV,CPUWR,CPUDO,NVDT);
-spram#(
- .init_file("nvinit.hex"),
- .widthad_a(9),
- .width_a(8))
+dpram#(
+ .init_file("rtl/nvinit.mif"),
+ .data_width_g(8),
+ .addr_width_g(9))
nvram(
- .address(CPUAD),
- .clock(MCLK),
- .data(CPUDO),
- .wren(CPUWR & NVDV),
- .q(NVDT)
+ // CPU side
+ .clk_a_i(MCLK),
+ .en_a_i(1'b1),
+ .addr_a_i(CPUAD),
+ .data_a_i(CPUDO),
+ .we_i(CPUWR & NVDV),
+ .data_a_o(NVDT),
+ // IO Controller side
+ .clk_b_i(NVRAM_CLK),
+ .addr_b_i(NVRAM_A),
+ .data_b_o(NVRAM_Q),
+ .data_b_i(NVRAM_D),
+ .we_b_i(NVRAM_WE)
);
DSEL4x8 dsel(RMDV,RMDT,
@@ -253,7 +273,7 @@ reg [8:0] pVPT;
always @(posedge MCLK) begin
if (tWDTR) WDT <= 0;
else if (pVPT!=VP) begin
- if (VP==0) WDT <= (WDT==8) ? 14 : (WDT+1);
+ if (VP==0) WDT <= (WDT==8) ? 4'd14 : (WDT+1);
pVPT <= VP;
end
end
diff --git a/Arcade_MiST/Atari Tetris/rtl/Pokey/syncreset_enable_divider.vhd b/Arcade_MiST/Atari Tetris/rtl/Pokey/syncreset_enable_divider.vhd
deleted file mode 100644
index 998e8958..00000000
--- a/Arcade_MiST/Atari Tetris/rtl/Pokey/syncreset_enable_divider.vhd
+++ /dev/null
@@ -1,81 +0,0 @@
----------------------------------------------------------------------------
--- (c) 2013 mark watson
--- I am happy for anyone to use this for non-commercial use.
--- If my vhdl files are used commercially or otherwise sold,
--- please contact me for explicit permission at scrameta (gmail).
--- This applies for source and binary form and derived works.
----------------------------------------------------------------------------
-LIBRARY ieee;
-USE ieee.std_logic_1164.all;
-use ieee.numeric_std.all;
-
-ENTITY syncreset_enable_divider IS
-generic(COUNT : natural := 1; RESETCOUNT : natural := 0);
-PORT
-(
- CLK : IN STD_LOGIC;
- SYNCRESET : in std_logic;
- RESET_N : IN STD_LOGIC;
- ENABLE_IN : IN STD_LOGIC;
-
- ENABLE_OUT : OUT STD_LOGIC
-);
-END syncreset_enable_divider;
-
-ARCHITECTURE vhdl OF syncreset_enable_divider IS
- function log2c(n : integer) return integer is
- variable m,p : integer;
- begin
- m := 0;
- p := 1;
- while p'0');
- enabled_out_reg <= '0';
- elsif (clk'event and clk='1') then
- count_reg <= count_next;
- enabled_out_reg <= enabled_out_next;
- end if;
- end process;
-
- -- Maintain a count in order to calculate a clock circa 1.79 (in this case 25/14) -> 64KHz -> /28
- process(count_reg,enable_in,enabled_out_reg,syncreset)
- begin
- count_next <= count_reg;
- enabled_out_next <= enabled_out_reg;
-
- if (enable_in = '1') then
- count_next <= std_logic_vector(unsigned(count_reg) + 1);
- enabled_out_next <= '0';
-
- if (unsigned(count_reg) = to_unsigned(COUNT-1,WIDTH)) then
- count_next <= std_logic_vector(to_unsigned(0,WIDTH));
- enabled_out_next <= '1';
- end if;
- end if;
-
- if (syncreset='1') then
- count_next <= std_logic_vector(to_unsigned(resetcount,width));
- end if;
- end process;
-
- -- output
- enable_out <= enabled_out_reg and enable_in;
-
-END vhdl;
diff --git a/Arcade_MiST/Atari Tetris/rtl/Tetris_MiST.sv b/Arcade_MiST/Atari Tetris/rtl/Tetris_MiST.sv
index 0c359596..e16c40ca 100644
--- a/Arcade_MiST/Atari Tetris/rtl/Tetris_MiST.sv
+++ b/Arcade_MiST/Atari Tetris/rtl/Tetris_MiST.sv
@@ -32,11 +32,12 @@ module Tetris_MiST(
`include "rtl/build_id.v"
localparam CONF_STR = {
- "TETRIS;ROM;",
+ "TETRIS;;",
"O2,Service,Off,On;",
"O34,Scanlines,Off,25%,50%,75%;",
"O5,Blend,Off,On;",
"O6,Joystick Swap,Off,On;",
+ "R512,Save NVRAM;",
"T0,Reset;",
"V,v1.0.",`BUILD_DATE
};
@@ -46,7 +47,7 @@ wire joyswap = status[6];
wire rotate = 0;
wire blend = status[5];
-assign LED = ~ioctl_downl;
+assign LED = ~(ioctl_downl | ioctl_upl);
assign SDRAM_CLK = clk_sd;
assign SDRAM_CKE = 1;
assign AUDIO_R = AUDIO_L;
@@ -100,21 +101,26 @@ wire [15:0] rom_do;
wire [15:0] gfx_addr;
wire [15:0] gfx_do;
wire ioctl_downl;
+wire ioctl_upl;
wire [7:0] ioctl_index;
wire ioctl_wr;
wire [24:0] ioctl_addr;
wire [7:0] ioctl_dout;
+wire [7:0] ioctl_din;
data_io data_io(
- .clk_sys ( clk_sd ),
+ .clk_sys ( clk_sd ),
.SPI_SCK ( SPI_SCK ),
.SPI_SS2 ( SPI_SS2 ),
.SPI_DI ( SPI_DI ),
+ .SPI_DO ( SPI_DO ),
.ioctl_download( ioctl_downl ),
+ .ioctl_upload ( ioctl_upl ),
.ioctl_index ( ioctl_index ),
.ioctl_wr ( ioctl_wr ),
.ioctl_addr ( ioctl_addr ),
- .ioctl_dout ( ioctl_dout )
+ .ioctl_dout ( ioctl_dout ),
+ .ioctl_din ( ioctl_din )
);
reg port1_req, port2_req;
@@ -154,7 +160,7 @@ always @(posedge clk_sd) begin
ioctl_wr_last <= ioctl_wr;
if (ioctl_downl) begin
- if (~ioctl_wr_last && ioctl_wr) begin
+ if (~ioctl_wr_last && ioctl_wr && ioctl_index == 0) begin
port1_req <= ~port1_req;
port2_req <= ~port2_req;
end
@@ -196,7 +202,13 @@ FPGA_ATetris FPGA_ATetris(
.PRDT(rom_addr[0] ? rom_do[15:8] : rom_do[7:0]),
.CRAD(gfx_addr),
- .CRDT(gfx_do)
+ .CRDT(gfx_do),
+
+ .NVRAM_CLK(clk_sd),
+ .NVRAM_A(ioctl_addr[8:0]),
+ .NVRAM_D(ioctl_dout),
+ .NVRAM_Q(ioctl_din),
+ .NVRAM_WE(ioctl_wr && ioctl_index == 8'hff)
);
wire PCLK;
diff --git a/Arcade_MiST/Atari Tetris/rtl/dpram.vhd b/Arcade_MiST/Atari Tetris/rtl/dpram.vhd
index 9ab46487..a20c5c79 100644
--- a/Arcade_MiST/Atari Tetris/rtl/dpram.vhd
+++ b/Arcade_MiST/Atari Tetris/rtl/dpram.vhd
@@ -8,8 +8,9 @@ use ieee.std_logic_1164.all;
entity dpram is
generic (
- addr_width_g : integer := 8;
- data_width_g : integer := 8
+ addr_width_g : integer := 8;
+ data_width_g : integer := 8;
+ init_file : string := ""
);
port (
clk_a_i : in std_logic;
@@ -20,7 +21,9 @@ port (
data_a_o : out std_logic_vector(data_width_g-1 downto 0);
clk_b_i : in std_logic;
addr_b_i : in std_logic_vector(addr_width_g-1 downto 0);
- data_b_o : out std_logic_vector(data_width_g-1 downto 0)
+ data_b_o : out std_logic_vector(data_width_g-1 downto 0);
+ we_b_i : in std_logic := '0';
+ data_b_i : in std_logic_vector(data_width_g-1 downto 0) := (others => '0')
);
end dpram;
@@ -33,6 +36,8 @@ architecture rtl of dpram is
type ram_t is array (natural range 2**addr_width_g-1 downto 0) of std_logic_vector(data_width_g-1 downto 0);
signal ram_q : ram_t;
+ attribute ram_init_file : string;
+ attribute ram_init_file of ram_q : signal is init_file;
begin
@@ -51,7 +56,10 @@ begin
mem_b: process (clk_b_i)
begin
if rising_edge(clk_b_i) then
- data_b_o <= ram_q(to_integer(unsigned(addr_b_i)));
+ if we_b_i = '1' then
+ ram_q(to_integer(unsigned(addr_b_i))) <= data_b_i;
+ end if;
+ data_b_o <= ram_q(to_integer(unsigned(addr_b_i)));
end if;
end process mem_b;
diff --git a/Arcade_MiST/Atari Tetris/rtl/nvinit.mif b/Arcade_MiST/Atari Tetris/rtl/nvinit.mif
new file mode 100644
index 00000000..a5508835
--- /dev/null
+++ b/Arcade_MiST/Atari Tetris/rtl/nvinit.mif
@@ -0,0 +1,32 @@
+-- http://srecord.sourceforge.net/
+--
+-- Generated automatically by srec_cat -o --mif
+--
+DEPTH = 512;
+WIDTH = 8;
+ADDRESS_RADIX = HEX;
+DATA_RADIX = HEX;
+CONTENT BEGIN
+0000: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF;
+0018: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF;
+0030: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF;
+0048: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF;
+0060: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF;
+0078: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF;
+0090: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF;
+00A8: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF;
+00C0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF;
+00D8: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF;
+00F0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF;
+0108: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF;
+0120: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF;
+0138: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF;
+0150: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF;
+0168: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF;
+0180: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF;
+0198: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF;
+01B0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF;
+01C8: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF;
+01E0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF;
+01F8: FF FF FF FF FF FF FF FF;
+END;
diff --git a/common/Sound/Pokey MrX/complete_address_decoder.vhdl b/common/Sound/Pokey MrX/complete_address_decoder.vhdl
deleted file mode 100644
index e7a18b31..00000000
--- a/common/Sound/Pokey MrX/complete_address_decoder.vhdl
+++ /dev/null
@@ -1,52 +0,0 @@
----------------------------------------------------------------------------
--- (c) 2013 mark watson
--- I am happy for anyone to use this for non-commercial use.
--- If my vhdl files are used commercially or otherwise sold,
--- please contact me for explicit permission at scrameta (gmail).
--- This applies for source and binary form and derived works.
----------------------------------------------------------------------------
-LIBRARY ieee;
-USE ieee.std_logic_1164.all;
-use ieee.numeric_std.all;
-
-ENTITY complete_address_decoder IS
-generic (width : natural := 1);
-PORT
-(
- addr_in : in std_logic_vector(width-1 downto 0);
-
- addr_decoded : out std_logic_vector((2**width)-1 downto 0)
-);
-END complete_address_decoder;
-
---ARCHITECTURE vhdl OF complete_address_decoder IS
---BEGIN
--- comp_gen:
--- for i in 0 to ((2**width)-1) generate
--- addr_decoded(i) <= '1' when i=to_integer(unsigned(addr_in)) else '0';
--- end generate;
---end vhdl;
-
-architecture tree of complete_address_decoder is
- constant STAGE : natural:=width;
- type std_logic_2d is array (natural range <>,natural range <>) of std_logic;
- signal p: std_logic_2d(stage downto 0,2**stage-1 downto 0);
- signal a: std_logic_vector(width-1 downto 0) ;
-begin
- a<=addr_in;
- process(a,p)
- begin
- p(stage,0) <= '1';
-
- for s in stage downto 1 loop
- for r in 0 to (2**(stage-s)-1) loop
- p(s-1,2*r) <= (not a(s-1)) and p(s,r);
- p(s-1,2*r+1) <= a(s-1) and p(s,r);
- end loop;
- end loop;
-
- for i in 0 to (2**stage-1) loop
- addr_decoded(i) <= p(0,i);
- end loop;
- end process;
-end tree;
\ No newline at end of file
diff --git a/common/Sound/Pokey MrX/delay_line.vhdl b/common/Sound/Pokey MrX/delay_line.vhdl
deleted file mode 100644
index c67ada0d..00000000
--- a/common/Sound/Pokey MrX/delay_line.vhdl
+++ /dev/null
@@ -1,57 +0,0 @@
----------------------------------------------------------------------------
--- (c) 2013 mark watson
--- I am happy for anyone to use this for non-commercial use.
--- If my vhdl files are used commercially or otherwise sold,
--- please contact me for explicit permission at scrameta (gmail).
--- This applies for source and binary form and derived works.
----------------------------------------------------------------------------
-LIBRARY ieee;
-USE ieee.std_logic_1164.all;
-use ieee.numeric_std.all;
-
-ENTITY delay_line IS
-generic(COUNT : natural := 1);
-PORT
-(
- CLK : IN STD_LOGIC;
- SYNC_RESET : IN STD_LOGIC;
- DATA_IN : IN STD_LOGIC;
- ENABLE : IN STD_LOGIC; -- i.e. shift on this clock
- RESET_N : IN STD_LOGIC;
-
- DATA_OUT : OUT STD_LOGIC
-);
-END delay_line;
-
-ARCHITECTURE vhdl OF delay_line IS
- signal shift_reg : std_logic_vector(COUNT-1 downto 0);
- signal shift_next : std_logic_vector(COUNT-1 downto 0);
-BEGIN
- -- register
- process(clk,reset_n)
- begin
- if (reset_N = '0') then
- shift_reg <= (others=>'0');
- elsif (clk'event and clk='1') then
- shift_reg <= shift_next;
- end if;
- end process;
-
- -- shift on enable
- process(shift_reg,enable,data_in,sync_reset)
- begin
- shift_next <= shift_reg;
-
- if (enable = '1') then
- shift_next <= data_in&shift_reg(COUNT-1 downto 1);
- end if;
-
- if (sync_reset = '1') then
- shift_next <= (others=>'0');
- end if;
- end process;
-
- -- output
- data_out <= shift_reg(0) and enable;
-
-END vhdl;
diff --git a/common/Sound/Pokey MrX/latch_delay_line.vhdl b/common/Sound/Pokey MrX/latch_delay_line.vhdl
deleted file mode 100644
index 296a6c4a..00000000
--- a/common/Sound/Pokey MrX/latch_delay_line.vhdl
+++ /dev/null
@@ -1,66 +0,0 @@
----------------------------------------------------------------------------
--- (c) 2013 mark watson
--- I am happy for anyone to use this for non-commercial use.
--- If my vhdl files are used commercially or otherwise sold,
--- please contact me for explicit permission at scrameta (gmail).
--- This applies for source and binary form and derived works.
----------------------------------------------------------------------------
-LIBRARY ieee;
-USE ieee.std_logic_1164.all;
-use ieee.numeric_std.all;
-
-ENTITY latch_delay_line IS
-generic(COUNT : natural := 1);
-PORT
-(
- CLK : IN STD_LOGIC;
- SYNC_RESET : IN STD_LOGIC;
- DATA_IN : IN STD_LOGIC;
- ENABLE : IN STD_LOGIC; -- i.e. shift on this clock
- RESET_N : IN STD_LOGIC;
-
- DATA_OUT : OUT STD_LOGIC
-);
-END latch_delay_line;
-
-ARCHITECTURE vhdl OF latch_delay_line IS
- signal shift_reg : std_logic_vector(COUNT-1 downto 0);
- signal shift_next : std_logic_vector(COUNT-1 downto 0);
-
- signal data_in_reg : std_logic;
- signal data_in_next : std_logic;
-BEGIN
- -- register
- process(clk,reset_n)
- begin
- if (reset_N = '0') then
- shift_reg <= (others=>'0');
- data_in_reg <= '0';
- elsif (clk'event and clk='1') then
- shift_reg <= shift_next;
- data_in_reg <= data_in_next;
- end if;
- end process;
-
- -- shift on enable
- process(shift_reg,enable,data_in,data_in_reg,sync_reset)
- begin
- shift_next <= shift_reg;
-
- data_in_next <= data_in or data_in_reg;
-
- if (enable = '1') then
- shift_next <= (data_in or data_in_reg)&shift_reg(COUNT-1 downto 1);
- data_in_next <= '0';
- end if;
-
- if (sync_reset = '1') then
- shift_next <= (others=>'0');
- data_in_next <= '0';
- end if;
- end process;
-
- -- output
- data_out <= shift_reg(0) and enable;
-
-END vhdl;
diff --git a/common/Sound/Pokey MrX/pokey.vhdl b/common/Sound/Pokey MrX/pokey.vhdl
deleted file mode 100644
index 6628311d..00000000
--- a/common/Sound/Pokey MrX/pokey.vhdl
+++ /dev/null
@@ -1,1307 +0,0 @@
----------------------------------------------------------------------------
--- (c) 2013 mark watson
--- I am happy for anyone to use this for non-commercial use.
--- If my vhdl files are used commercially or otherwise sold,
--- please contact me for explicit permission at scrameta (gmail).
--- This applies for source and binary form and derived works.
----------------------------------------------------------------------------
-LIBRARY ieee;
-USE ieee.std_logic_1164.all;
-use ieee.numeric_std.all;
-
--- Problem - UART on the DE1 does not have all pins connected. Need to use...
-
-ENTITY pokey IS
-GENERIC
-(
- CUSTOM_KEYBOARD_SCAN : integer := 0 -- drive from hsync-like if 0, otherwise custom increment signal
-);
-PORT
-(
- CLK : IN STD_LOGIC;
- ENABLE_179 :in std_logic;
- ADDR : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
- DATA_IN : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
- WR_EN : IN STD_LOGIC;
-
- RESET_N : IN STD_LOGIC;
-
- -- keyboard interface
- keyboard_scan_enable : in std_logic := '0';
- keyboard_scan : out std_logic_vector(5 downto 0);
- keyboard_response : in std_logic_vector(1 downto 0);
-
- -- pots - go high as capacitor charges
- POT_IN : in std_logic_vector(7 downto 0);
-
- -- sio interface
- SIO_IN1 : IN std_logic;
- SIO_IN2 : IN std_logic;
- SIO_IN3 : IN std_logic;
-
- DATA_OUT : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
-
- CHANNEL_0_OUT : OUT STD_LOGIC_VECTOR(3 downto 0);
- CHANNEL_1_OUT : OUT STD_LOGIC_VECTOR(3 downto 0);
- CHANNEL_2_OUT : OUT STD_LOGIC_VECTOR(3 downto 0);
- CHANNEL_3_OUT : OUT STD_LOGIC_VECTOR(3 downto 0);
-
- IRQ_N_OUT : OUT std_logic;
-
- SIO_OUT1 : OUT std_logic;
- SIO_OUT2 : OUT std_logic;
- SIO_OUT3 : OUT std_logic;
-
- SIO_CLOCKIN_IN : IN std_logic := '1';
- SIO_CLOCKIN_OUT : OUT std_logic;
- SIO_CLOCKIN_OE : OUT std_logic;
- SIO_CLOCKOUT : OUT std_logic;
-
- POT_RESET : out std_logic
-);
-END pokey;
-
-ARCHITECTURE vhdl OF pokey IS
- component synchronizer IS
- PORT
- (
- CLK : IN STD_LOGIC;
- RAW : IN STD_LOGIC;
- SYNC : OUT STD_LOGIC
- );
- END component;
-
- component syncreset_enable_divider IS
- generic(COUNT : natural := 1; RESETCOUNT : natural := 0);
- PORT
- (
- CLK : IN STD_LOGIC;
- syncreset : in std_logic;
- reset_n : in std_logic;
- ENABLE_IN : IN STD_LOGIC;
-
- ENABLE_OUT : OUT STD_LOGIC
- );
- END component;
-
- component pokey_poly_17_9 IS
- PORT
- (
- CLK : IN STD_LOGIC;
- RESET_N : IN STD_LOGIC;
- ENABLE : IN STD_LOGIC;
- SELECT_9_17 : IN STD_LOGIC; -- 9 high, 17 low
- INIT : IN STD_LOGIC;
-
- BIT_OUT : OUT STD_LOGIC;
-
- RAND_OUT : OUT std_logic_vector(7 downto 0)
- );
- END component;
-
- component pokey_poly_5 IS
- PORT
- (
- CLK : IN STD_LOGIC;
- RESET_N : IN STD_LOGIC;
- ENABLE : IN STD_LOGIC;
- INIT : IN STD_LOGIC;
-
- BIT_OUT : OUT STD_LOGIC
- );
- END component;
-
- component pokey_poly_4 IS
- PORT
- (
- CLK : IN STD_LOGIC;
- RESET_N : IN STD_LOGIC;
- ENABLE : IN STD_LOGIC;
- INIT : IN STD_LOGIC;
-
- BIT_OUT : OUT STD_LOGIC
- );
- END component;
-
- component pokey_countdown_timer IS
- generic(UNDERFLOW_DELAY : natural := 3);
- PORT
- (
- CLK : IN STD_LOGIC;
- ENABLE : IN STD_LOGIC;
- ENABLE_UNDERFLOW : IN STD_LOGIC;
- RESET_N : IN STD_LOGIC;
-
- WR_EN : IN STD_LOGIC;
- DATA_IN : IN STD_LOGIC_VECTOR(7 downto 0);
-
- DATA_OUT : OUT STD_LOGIC
- );
- END component;
-
- component pokey_noise_filter IS
- PORT
- (
- CLK : IN STD_LOGIC;
- RESET_N : IN STD_LOGIC;
-
- NOISE_SELECT : IN STD_LOGIC_VECTOR(2 downto 0);
-
- PULSE_IN : IN STD_LOGIC;
-
- NOISE_4 : IN STD_LOGIC;
- NOISE_5 : IN STD_LOGIC;
- NOISE_LARGE : IN STD_LOGIC;
-
- SYNC_RESET : IN STD_LOGIC;
-
- PULSE_OUT : OUT STD_LOGIC
- );
- END component;
-
- COMPONENT complete_address_decoder IS
- generic (width : natural := 1);
- PORT
- (
- addr_in : in std_logic_vector(width-1 downto 0);
- addr_decoded : out std_logic_vector((2**width)-1 downto 0)
- );
- END component;
-
- component delay_line IS
- generic(COUNT : natural := 1);
- PORT
- (
- CLK : IN STD_LOGIC;
- SYNC_RESET : IN STD_LOGIC;
- DATA_IN : IN STD_LOGIC;
- ENABLE : IN STD_LOGIC;
- RESET_N : IN STD_LOGIC;
-
- DATA_OUT : OUT STD_LOGIC
- );
- END component;
-
- component latch_delay_line IS
- generic(COUNT : natural := 1);
- PORT
- (
- CLK : IN STD_LOGIC;
- SYNC_RESET : IN STD_LOGIC;
- DATA_IN : IN STD_LOGIC;
- ENABLE : IN STD_LOGIC;
- RESET_N : IN STD_LOGIC;
-
- DATA_OUT : OUT STD_LOGIC
- );
- END component;
-
- component pokey_keyboard_scanner is
- port
- (
- clk : in std_logic;
- reset_n : in std_logic;
-
- enable : in std_logic; -- typically hsync or equiv timing
- keyboard_response : in std_logic_vector(1 downto 0);
- debounce_disable : in std_logic;
- scan_enable : in std_logic;
-
- keyboard_scan : out std_logic_vector(5 downto 0);
-
- key_held : out std_logic;
- shift_held : out std_logic;
- keycode : out std_logic_vector(7 downto 0);
- other_key_irq : out std_logic;
- break_irq : out std_logic
- );
- end component;
-
- --signal enable_179 : std_logic;
- signal enable_64 : std_logic;
- signal enable_15 : std_logic;
-
- signal audf0_reg : std_logic_vector(7 downto 0);
- signal audc0_reg : std_logic_vector(7 downto 0);
- signal audf1_reg : std_logic_vector(7 downto 0);
- signal audc1_reg : std_logic_vector(7 downto 0);
- signal audf2_reg : std_logic_vector(7 downto 0);
- signal audc2_reg : std_logic_vector(7 downto 0);
- signal audf3_reg : std_logic_vector(7 downto 0);
- signal audc3_reg : std_logic_vector(7 downto 0);
- signal audctl_reg : std_logic_vector(7 downto 0);
- signal audf0_next : std_logic_vector(7 downto 0);
- signal audc0_next : std_logic_vector(7 downto 0);
- signal audf1_next : std_logic_vector(7 downto 0);
- signal audc1_next : std_logic_vector(7 downto 0);
- signal audf2_next : std_logic_vector(7 downto 0);
- signal audc2_next : std_logic_vector(7 downto 0);
- signal audf3_next : std_logic_vector(7 downto 0);
- signal audc3_next : std_logic_vector(7 downto 0);
- signal audctl_next : std_logic_vector(7 downto 0);
-
- signal audf0_pulse : std_logic;
- signal audf1_pulse : std_logic;
- signal audf2_pulse : std_logic;
- signal audf3_pulse : std_logic;
-
- signal audf0_reload : std_logic;
- signal audf1_reload : std_logic;
- signal audf2_reload : std_logic;
- signal audf3_reload : std_logic;
-
- signal stimer_write : std_logic;
- signal stimer_write_delayed : std_logic;
-
- signal audf0_pulse_noise : std_logic;
- signal audf1_pulse_noise : std_logic;
- signal audf2_pulse_noise : std_logic;
- signal audf3_pulse_noise : std_logic;
-
- signal audf0_enable : std_logic;
- signal audf1_enable : std_logic;
- signal audf2_enable : std_logic;
- signal audf3_enable : std_logic;
-
- signal chan0_output_next : std_logic;
- signal chan1_output_next : std_logic;
- signal chan2_output_next : std_logic;
- signal chan3_output_next : std_logic;
- signal chan0_output_reg : std_logic;
- signal chan1_output_reg : std_logic;
- signal chan2_output_reg : std_logic;
- signal chan3_output_reg : std_logic;
-
- signal chan0_output_del_next : std_logic;
- signal chan1_output_del_next : std_logic;
- signal chan0_output_del_reg : std_logic;
- signal chan1_output_del_reg : std_logic;
-
- signal highpass0_next : std_logic;
- signal highpass1_next : std_logic;
- signal highpass0_reg : std_logic;
- signal highpass1_reg : std_logic;
-
- signal volume_channel_0_next : std_logic_vector(3 downto 0);
- signal volume_channel_1_next : std_logic_vector(3 downto 0);
- signal volume_channel_2_next : std_logic_vector(3 downto 0);
- signal volume_channel_3_next : std_logic_vector(3 downto 0);
- signal volume_channel_0_reg : std_logic_vector(3 downto 0);
- signal volume_channel_1_reg : std_logic_vector(3 downto 0);
- signal volume_channel_2_reg : std_logic_vector(3 downto 0);
- signal volume_channel_3_reg : std_logic_vector(3 downto 0);
-
- signal addr_decoded : std_logic_vector(15 downto 0);
-
- signal noise_4 : std_logic;
- signal noise_5 : std_logic;
- signal noise_large : std_logic;
- signal noise_4_next : std_logic_vector(2 downto 0);
- signal noise_4_reg : std_logic_vector(2 downto 0);
- signal noise_5_next : std_logic_vector(2 downto 0);
- signal noise_5_reg : std_logic_vector(2 downto 0);
- signal noise_large_next : std_logic_vector(2 downto 0);
- signal noise_large_reg : std_logic_vector(2 downto 0);
-
- signal rand_out : std_logic_vector(7 downto 0); -- snoop part of the shift reg
-
- signal initmode : std_logic;
-
- signal irqen_next : std_logic_vector(7 downto 0);
- signal irqen_reg : std_logic_vector(7 downto 0);
-
- signal irqst_next : std_logic_vector(7 downto 0);
- signal irqst_reg : std_logic_vector(7 downto 0);
-
- signal irq_n_next : std_logic;
- signal irq_n_reg : std_logic; -- for output
-
- -- serial ports!
- signal serial_ip_ready_interrupt : std_logic;
- signal serial_ip_framing_next : std_logic;
- signal serial_ip_framing_reg : std_logic;
- signal serial_ip_overrun_next : std_logic;
- signal serial_ip_overrun_reg : std_logic;
- signal serial_op_needed_interrupt : std_logic;
-
- signal skctl_next : std_logic_vector(7 downto 0);
- signal skctl_reg : std_logic_vector(7 downto 0);
-
- signal serin_shift_next : std_logic_vector(9 downto 0);
- signal serin_shift_reg : std_logic_vector(9 downto 0);
- signal serin_next : std_logic_vector(7 downto 0);
- signal serin_reg : std_logic_vector(7 downto 0);
- signal serin_bitcount_next : std_logic_vector(3 downto 0);
- signal serin_bitcount_reg : std_logic_vector(3 downto 0);
-
- signal sio_in1_reg : std_logic;
- signal sio_in2_reg : std_logic;
- signal sio_in3_reg : std_logic;
- signal sio_in_next : std_logic;
- signal sio_in_reg : std_logic;
-
- signal sio_out_next : std_logic;
- signal sio_out_reg : std_logic;
- signal serial_out_next : std_logic;
- signal serial_out_reg : std_logic;
-
- signal serout_shift_next : std_logic_vector(9 downto 0);
- signal serout_shift_reg : std_logic_vector(9 downto 0);
-
- signal serout_holding_full_next : std_logic;
- signal serout_holding_full_reg : std_logic;
- signal serout_holding_next : std_logic_vector(7 downto 0);
- signal serout_holding_reg : std_logic_vector(7 downto 0);
- signal serout_holding_load : std_logic;
-
- signal serout_bitcount_next : std_logic_vector(3 downto 0);
- signal serout_bitcount_reg : std_logic_vector(3 downto 0);
-
- signal serout_active_next : std_logic;
- signal serout_active_reg : std_logic;
-
- signal serial_reset : std_logic;
- signal serout_sync_reset : std_logic;
- signal skrest_write : std_logic;
-
- signal serout_enable : std_logic;
- signal serout_enable_delayed : std_logic;
- signal serin_enable : std_logic;
-
- signal async_serial_reset : std_logic;
- signal waiting_for_start_bit : std_logic;
-
- signal serin_clock_next : std_logic;
- signal serin_clock_reg : std_logic;
- signal serin_clock_last_next : std_logic;
- signal serin_clock_last_reg : std_logic;
-
- signal serout_clock_next : std_logic;
- signal serout_clock_reg : std_logic;
- signal serout_clock_last_next : std_logic;
- signal serout_clock_last_reg : std_logic;
-
- signal twotone_reset : std_logic;
- signal twotone_reset_delayed : std_logic;
- signal twotone_next : std_logic;
- signal twotone_reg : std_logic;
-
- signal clock_next : std_logic;
- signal clock_reg : std_logic;
- signal clock_sync_next : std_logic;
- signal clock_sync_reg : std_logic;
- signal clock_input : std_logic;
-
- -- keyboard
- signal keyboard_overrun_next : std_logic;
- signal keyboard_overrun_reg : std_logic;
-
- signal shift_held : std_logic;
- signal break_irq : std_logic;
- signal key_held : std_logic;
- signal other_key_irq : std_logic;
-
- signal kbcode : std_logic_vector(7 downto 0);
-
- -- pots
- signal pot0_next : std_logic_vector(7 downto 0);
- signal pot0_reg : std_logic_vector(7 downto 0);
- signal pot1_next : std_logic_vector(7 downto 0);
- signal pot1_reg : std_logic_vector(7 downto 0);
- signal pot2_next : std_logic_vector(7 downto 0);
- signal pot2_reg : std_logic_vector(7 downto 0);
- signal pot3_next : std_logic_vector(7 downto 0);
- signal pot3_reg : std_logic_vector(7 downto 0);
- signal pot4_next : std_logic_vector(7 downto 0);
- signal pot4_reg : std_logic_vector(7 downto 0);
- signal pot5_next : std_logic_vector(7 downto 0);
- signal pot5_reg : std_logic_vector(7 downto 0);
- signal pot6_next : std_logic_vector(7 downto 0);
- signal pot6_reg : std_logic_vector(7 downto 0);
- signal pot7_next : std_logic_vector(7 downto 0);
- signal pot7_reg : std_logic_vector(7 downto 0);
-
- signal allpot_next : std_logic_vector(7 downto 0);
- signal allpot_reg : std_logic_vector(7 downto 0);
-
- signal pot_counter_next : std_logic_vector(7 downto 0);
- signal pot_counter_reg : std_logic_vector(7 downto 0);
-
- signal potgo_write : std_logic;
-
- signal pot_reset_next : std_logic;
- signal pot_reset_reg : std_logic;
-BEGIN
- -- register
- process(clk,reset_n)
- begin
- if (reset_n = '0') then
- -- FIXME - Pokey does not have RESET - instead this is caused by 'init' sequence
- audf0_reg <= X"00";
- audc0_reg <= X"00";
- audf1_reg <= X"00";
- audc1_reg <= X"00";
- audf2_reg <= X"00";
- audc2_reg <= X"00";
- audf3_reg <= X"00";
- audc3_reg <= X"00";
- audctl_reg <= X"00";
-
- irqen_reg <= X"00";
- irqst_reg <= X"FF";
- irq_n_reg <= '1';
-
- skctl_reg <= X"00";
-
- highpass0_reg <= '0';
- highpass1_reg <= '0';
-
- chan0_output_reg <= '0';
- chan1_output_reg <= '0';
- chan2_output_reg <= '0';
- chan3_output_reg <= '0';
-
- chan0_output_del_reg <= '0';
- chan1_output_del_reg <= '0';
-
- volume_channel_0_reg <= (others=>'0');
- volume_channel_1_reg <= (others=>'0');
- volume_channel_2_reg <= (others=>'0');
- volume_channel_3_reg <= (others=>'0');
-
- serin_reg <= (others=>'0');
- serin_shift_reg <= (others=>'0');
- serin_bitcount_reg <= (others=>'0');
- serout_shift_reg <= (others=>'0');
- serout_holding_reg <= (others=>'0');
- serout_holding_full_reg <= '0';
- serout_active_reg <= '0';
- sio_out_reg <= '1';
- serial_out_reg <= '1';
-
- serial_ip_framing_reg <= '0';
- serial_ip_overrun_reg <= '0';
-
- clock_reg <= '0';
- clock_sync_reg <= '0';
-
- keyboard_overrun_reg <= '0';
-
- serin_clock_reg <= '0';
- serin_clock_last_reg <= '0';
- serout_clock_reg <= '0';
- serout_clock_last_reg <= '0';
-
- twotone_reg <= '0';
-
- sio_in_reg <= '0';
-
- pot0_reg <= (others=>'0');
- pot1_reg <= (others=>'0');
- pot2_reg <= (others=>'0');
- pot3_reg <= (others=>'0');
- pot4_reg <= (others=>'0');
- pot5_reg <= (others=>'0');
- pot6_reg <= (others=>'0');
- pot7_reg <= (others=>'0');
-
- allpot_reg <= (others=>'1');
-
- pot_counter_reg <= (others=>'0');
-
- pot_reset_reg <= '1';
-
- noise_4_reg <= (others=>'0');
- noise_5_reg <= (others=>'0');
- noise_large_reg <= (others=>'0');
-
- elsif (clk'event and clk='1') then
- audf0_reg <= audf0_next;
- audc0_reg <= audc0_next;
- audf1_reg <= audf1_next;
- audc1_reg <= audc1_next;
- audf2_reg <= audf2_next;
- audc2_reg <= audc2_next;
- audf3_reg <= audf3_next;
- audc3_reg <= audc3_next;
- audctl_reg <= audctl_next;
-
- irqen_reg <= irqen_next;
- irqst_reg <= irqst_next;
- irq_n_reg <= irq_n_next;
-
- skctl_reg <= skctl_next;
-
- highpass0_reg <= highpass0_next;
- highpass1_reg <= highpass1_next;
-
- chan0_output_reg <= chan0_output_next;
- chan1_output_reg <= chan1_output_next;
- chan2_output_reg <= chan2_output_next;
- chan3_output_reg <= chan3_output_next;
-
- chan0_output_del_reg <= chan0_output_del_next;
- chan1_output_del_reg <= chan1_output_del_next;
-
- volume_channel_0_reg<= volume_channel_0_next;
- volume_channel_1_reg<= volume_channel_1_next;
- volume_channel_2_reg<= volume_channel_2_next;
- volume_channel_3_reg<= volume_channel_3_next;
-
- serin_reg <= serin_next;
- serin_shift_reg <= serin_shift_next;
- serin_bitcount_reg <= serin_bitcount_next;
- serout_shift_reg <= serout_shift_next;
- serout_bitcount_reg <= serout_bitcount_next;
-
- serout_holding_reg<=serout_holding_next;
- serout_holding_full_reg<=serout_holding_full_next;
- serout_active_reg <= serout_active_next;
-
- sio_out_reg <= sio_out_next;
- serial_out_reg <= serial_out_next;
-
- serial_ip_framing_reg <= serial_ip_framing_next;
- serial_ip_overrun_reg <= serial_ip_overrun_next;
-
- clock_reg <= clock_next;
- clock_sync_reg <= clock_sync_next;
-
- keyboard_overrun_reg <= keyboard_overrun_next;
-
- serin_clock_reg <= serin_clock_next;
- serin_clock_last_reg <= serin_clock_last_next;
- serout_clock_reg <= serout_clock_next;
- serout_clock_last_reg <= serout_clock_last_next;
-
- twotone_reg <= twotone_next;
-
- sio_in_reg <= sio_in_next;
-
- pot0_reg <= pot0_next;
- pot1_reg <= pot1_next;
- pot2_reg <= pot2_next;
- pot3_reg <= pot3_next;
- pot4_reg <= pot4_next;
- pot5_reg <= pot5_next;
- pot6_reg <= pot6_next;
- pot7_reg <= pot7_next;
-
- allpot_reg <= allpot_next;
-
- pot_counter_reg <= pot_counter_next;
-
- pot_reset_reg <= pot_reset_next;
-
- noise_4_reg <= noise_4_next;
- noise_5_reg <= noise_5_next;
- noise_large_reg <= noise_large_next;
- end if;
- end process;
-
- -- decode address
- decode_addr1 : complete_address_decoder
- generic map(width=>4)
- port map (addr_in=>addr, addr_decoded=>addr_decoded);
-
- -- clock selection
- process(enable_64,enable_15,enable_179,audctl_reg,audf0_pulse,audf2_pulse)
- begin
- audf0_enable <= enable_64;
- audf1_enable <= enable_64;
- audf2_enable <= enable_64;
- audf3_enable <= enable_64;
-
- if (audctl_reg(0) = '1') then
- audf0_enable <= enable_15;
- audf1_enable <= enable_15;
- audf2_enable <= enable_15;
- audf3_enable <= enable_15;
- end if;
-
- if (audctl_reg(6) = '1') then
- audf0_enable <= enable_179;
- end if;
-
- if (audctl_reg(5) = '1') then
- audf2_enable <= enable_179;
- end if;
-
- if(audctl_reg(4) = '1') then
- audf1_enable <= audf0_pulse;
- end if;
-
- if(audctl_reg(3) = '1') then
- audf3_enable <= audf2_pulse;
- end if;
- end process;
-
- -- Instantiate timers
- timer0 : pokey_countdown_timer
- generic map (UNDERFLOW_DELAY=>3)
- port map(clk=>clk,enable=>audf0_enable,enable_underflow=>enable_179,reset_n=>reset_n,wr_en=>audf0_reload,data_in=>audf0_next,DATA_OUT=>audf0_pulse);
- timer1 : pokey_countdown_timer
- generic map (UNDERFLOW_DELAY=>3)
- port map(clk=>clk,enable=>audf1_enable,enable_underflow=>enable_179,reset_n=>reset_n,wr_en=>audf1_reload,data_in=>audf1_next,DATA_OUT=>audf1_pulse);
- timer2 : pokey_countdown_timer
- generic map (UNDERFLOW_DELAY=>3)
- port map(clk=>clk,enable=>audf2_enable,enable_underflow=>enable_179,reset_n=>reset_n,wr_en=>audf2_reload,data_in=>audf2_next,DATA_OUT=>audf2_pulse);
- timer3 : pokey_countdown_timer
- generic map (UNDERFLOW_DELAY=>3)
- port map(clk=>clk,enable=>audf3_enable,enable_underflow=>enable_179,reset_n=>reset_n,wr_en=>audf3_reload,data_in=>audf3_next,DATA_OUT=>audf3_pulse);
-
- -- Timer reloading
- process (audctl_reg, audf0_pulse, audf1_pulse, audf2_pulse, audf3_pulse, stimer_write_delayed, async_serial_reset, twotone_reset_delayed)
- begin
- audf0_reload <= ((not(audctl_reg(4)) and audf0_pulse)) or (audctl_reg(4) and audf1_pulse) or stimer_write_delayed or twotone_reset_delayed;
- audf1_reload <= audf1_pulse or stimer_write_delayed or twotone_reset_delayed;
- audf2_reload <= ((not(audctl_reg(3)) and audf2_pulse)) or (audctl_reg(3) and audf3_pulse) or stimer_write_delayed or async_serial_reset;
- audf3_reload <= audf3_pulse or stimer_write_delayed or async_serial_reset;
- end process;
-
- twotone_del : latch_delay_line
- generic map (count=>2)
- port map (clk=>clk, sync_reset=>'0',data_in=>twotone_reset, enable=>enable_179, reset_n=>reset_n, data_out=>twotone_reset_delayed);
--- twotone_reset_delayed <= twotone_reset;
-
- -- Writes to registers
- process(data_in,wr_en,addr_decoded,audf0_reg,audc0_reg,audf1_reg,audc1_reg,audf2_reg,audc2_reg,audf3_reg,audc3_reg,audf0_enable,audf1_enable,audf2_enable,audf3_enable,audctl_reg, irqen_reg, skctl_reg, serout_holding_reg)
- begin
- audf0_next <= audf0_reg;
- audc0_next <= audc0_reg;
- audf1_next <= audf1_reg;
- audc1_next <= audc1_reg;
- audf2_next <= audf2_reg;
- audc2_next <= audc2_reg;
- audf3_next <= audf3_reg;
- audc3_next <= audc3_reg;
- audctl_next <= audctl_reg;
-
- irqen_next <= irqen_reg;
- skctl_next <= skctl_reg;
-
- stimer_write <= '0';
-
- serout_holding_load <= '0';
- serout_holding_next <= serout_holding_reg;
-
- serial_reset <= '0';
- skrest_write <= '0';
- potgo_write <= '0';
-
- if (wr_en = '1') then
- if(addr_decoded(0) = '1') then
- audf0_next <= data_in;
- end if;
-
- if(addr_decoded(1) = '1') then
- audc0_next <= data_in;
- end if;
-
- if(addr_decoded(2) = '1') then
- audf1_next <= data_in;
- end if;
-
- if(addr_decoded(3) = '1') then
- audc1_next <= data_in;
- end if;
-
- if(addr_decoded(4) = '1') then
- audf2_next <= data_in;
- end if;
-
- if(addr_decoded(5) = '1') then
- audc2_next <= data_in;
- end if;
-
- if(addr_decoded(6) = '1') then
- audf3_next <= data_in;
- end if;
-
- if(addr_decoded(7) = '1') then
- audc3_next <= data_in;
- end if;
-
- if(addr_decoded(8) = '1') then
- audctl_next <= data_in;
- end if;
-
- if (addr_decoded(9) = '1') then --STIMER
- stimer_write <= '1';
- end if;
-
- if (addr_decoded(10) = '1') then -- skrest - resets the serial input problems - overflow etc
- skrest_write <= '1';
- end if;
-
- if (addr_decoded(11) = '1') then -- POTGO - start POT scan
- potgo_write <= '1';
- end if;
-
- if (addr_decoded(13) = '1') then --SEROUT
- serout_holding_next <= data_in;
- serout_holding_load <= '1';
- end if;
-
- if (addr_decoded(14) = '1') then --IRQEN
- irqen_next <= data_in;
- end if;
-
- if (addr_decoded(15) = '1') then --SKCTL
- skctl_next <= data_in;
-
- if (data_in(6 downto 4)="000") then
- serial_reset <= '1';
- end if;
- end if;
-
- end if;
- end process;
-
- -- Read from registers
- process(addr_decoded,kbcode,RAND_OUT,IRQST_REG,key_held,shift_held,sio_in_reg,serin_reg,keyboard_overrun_reg, serial_ip_framing_reg, serial_ip_overrun_reg, waiting_for_start_bit, pot_in, pot0_reg, pot1_reg, pot2_reg, pot3_reg, pot4_reg, pot5_reg, pot6_reg, pot7_reg, allpot_reg)
- begin
- data_out <= X"FF";
-
- if(addr_decoded(0) = '1') then --POT0
- data_out <= pot0_reg;
- end if;
-
- if(addr_decoded(1) = '1') then --POT1
- data_out <= pot1_reg;
- end if;
-
- if(addr_decoded(2) = '1') then --POT2
- data_out <= pot2_reg;
- end if;
-
- if(addr_decoded(3) = '1') then --POT3
- data_out <= pot3_reg;
- end if;
-
- if(addr_decoded(4) = '1') then --POT4
- data_out <= pot4_reg;
- end if;
-
- if(addr_decoded(5) = '1') then --POT5
- data_out <= pot5_reg;
- end if;
-
- if(addr_decoded(6) = '1') then --POT6
- data_out <= pot6_reg;
- end if;
-
- if(addr_decoded(7) = '1') then --POT7
- data_out <= pot7_reg;
- end if;
-
- if(addr_decoded(8) = '1') then --ALLPOT
- data_out <= allpot_reg;
- end if;
-
- if(addr_decoded(9) = '1') then --KBCODE
- data_out <= kbcode;
- end if;
-
- if(addr_decoded(10) = '1') then -- RANDOM
- data_out <= RAND_OUT;
- end if;
-
- if (addr_decoded(13) = '1') then --SERIN
- data_out <= serin_reg;
- end if;
-
- if (addr_decoded(14) = '1') then --IRQST - bits set to low when irq
- data_out <= IRQST_REG;
- --break_irq_n & other_key_irq_n & serial_ip_irq_n & serial_op_irq_n & serial_trans_irq_n & timer3_irq_n & timer_1_irq_n & timer_0_irq_n
- end if;
-
- if (addr_decoded(15) = '1') then --SKSTAT
- data_out <= not(serial_ip_framing_reg)¬(keyboard_overrun_reg)¬(serial_ip_overrun_reg)&sio_in_reg¬(shift_held)¬(key_held)&waiting_for_start_bit&"1";
- end if;
-
- end process;
-
- -- Fire interrupts
- process (irqen_reg, irqst_reg, audf0_pulse, audf1_pulse, audf3_pulse, other_key_irq, serial_ip_ready_interrupt, serout_active_reg, serial_op_needed_interrupt, break_irq)
- begin
- -- clear interrupts
- irqst_next <= irqst_reg or not(irqen_reg);
-
- irq_n_next <= '0';
-
- if ((irqst_reg or "0000"¬(irqen_reg(3))&"000") = X"FF") then
- irq_n_next <= '1';
- end if;
-
- -- set interrupts
- if (audf0_pulse = '1') then
- irqst_next(0) <= not(irqen_reg(0));
- end if;
-
- if (audf1_pulse = '1') then
- irqst_next(1) <= not(irqen_reg(1));
- end if;
-
- if (audf3_pulse = '1') then
- irqst_next(2) <= not(irqen_reg(2));
- end if;
-
- if (other_key_irq = '1') then
- irqst_next(6) <= not(irqen_reg(6));
- end if;
-
- if (break_irq = '1') then
- irqst_next(7) <= not(irqen_reg(7));
- end if;
-
- if (serial_ip_ready_interrupt = '1') then
- irqst_next(5) <= not(irqen_reg(5));
- end if;
-
- irqst_next(3) <= serout_active_reg;
-
- if (serial_op_needed_interrupt = '1') then
- irqst_next(4) <= not(irqen_reg(4));
- end if;
-
- end process;
-
- -- Instantiate delay for stimer reload_request
- stimer_delay : latch_delay_line
- generic map (count=>3)
- port map (clk=>clk, sync_reset=>'0',data_in=>stimer_write, enable=>enable_179, reset_n=>reset_n, data_out=>stimer_write_delayed);
-
- --stimer_write_delayed <= stimer_write;
-
- -- Instantiate audio noise filters
- pokey_noise_filter0 : pokey_noise_filter
- port map(clk=>clk,reset_n=>reset_n,noise_select=>audc0_reg(7 downto 5),pulse_in=>audf0_pulse,pulse_out=>audf0_pulse_noise,noise_4=>noise_4,noise_5=>noise_5,noise_large=>noise_large, sync_reset=>stimer_write_delayed);
- pokey_noise_filter1 : pokey_noise_filter
- port map(clk=>clk,reset_n=>reset_n,noise_select=>audc1_reg(7 downto 5),pulse_in=>audf1_pulse,pulse_out=>audf1_pulse_noise,noise_4=>noise_4_reg(0),noise_5=>noise_5_reg(0),noise_large=>noise_large_reg(0), sync_reset=>stimer_write_delayed);
- pokey_noise_filter2 : pokey_noise_filter
- port map(clk=>clk,reset_n=>reset_n,noise_select=>audc2_reg(7 downto 5),pulse_in=>audf2_pulse,pulse_out=>audf2_pulse_noise,noise_4=>noise_4_reg(1),noise_5=>noise_5_reg(1),noise_large=>noise_large_reg(1), sync_reset=>stimer_write_delayed);
- pokey_noise_filter3 : pokey_noise_filter
- port map(clk=>clk,reset_n=>reset_n,noise_select=>audc3_reg(7 downto 5),pulse_in=>audf3_pulse,pulse_out=>audf3_pulse_noise,noise_4=>noise_4_reg(2),noise_5=>noise_5_reg(2),noise_large=>noise_large_reg(2), sync_reset=>stimer_write_delayed);
-
- -- Audio output stage
- -- (toggling now handled in the noise filter - the subtlety on when to toggle and when to sample is important)
- chan0_output_next <= audf0_pulse_noise;
- chan1_output_next <= audf1_pulse_noise;
- chan2_output_next <= audf2_pulse_noise;
- chan3_output_next <= audf3_pulse_noise;
-
- -- High pass filters
- process(audctl_reg,audf2_pulse,audf3_pulse,chan0_output_reg, chan1_output_reg, chan2_output_reg, chan3_output_reg, highpass0_reg, highpass1_reg)
- begin
- highpass0_next <= highpass0_reg;
- highpass1_next <= highpass1_reg;
-
- if (audctl_reg(2) = '1') then
- if (audf2_pulse = '1') then
- highpass0_next <= chan0_output_reg;
- end if;
- else
- highpass0_next <= '1';
- end if;
-
- if (audctl_reg(1) = '1') then
- if (audf3_pulse = '1') then
- highpass1_next <= chan1_output_reg;
- end if;
- else
- highpass1_next <= '1';
- end if;
-
- end process;
-
- process(chan0_output_reg,chan1_output_reg,chan0_output_del_reg,chan1_output_del_reg,enable_179)
- begin
- chan0_output_del_next <= chan0_output_del_reg;
- chan1_output_del_next <= chan1_output_del_reg;
-
- if (enable_179 = '1') then
- chan0_output_del_next <= chan0_output_reg;
- chan1_output_del_next <= chan1_output_reg;
- end if;
- end process;
-
- -- Instantiate key pokey clocks
- -- ~1.79MHz - from 25MHz/14
- -- ~64KHz - from 1.79MHz/28
- -- ~15KHz - from 1.79MHz/114
- --enable_179_div : enable_divider
- -- generic map (COUNT=>14)
- -- port map(clk=>clk,reset_n=>reset_n,enable_in=>'1',enable_out=>enable_179);
-
- -- resetcount 6/33
- enable_64_div : syncreset_enable_divider
- generic map (COUNT=>28,RESETCOUNT=>6) -- 28-22
- port map(clk=>clk,syncreset=>initmode,reset_n=>reset_n,enable_in=>enable_179,enable_out=>enable_64);
-
- enable_15_div : syncreset_enable_divider
- generic map (COUNT=>114,RESETCOUNT=>33) -- 114-81
- port map(clk=>clk,syncreset=>initmode,reset_n=>reset_n,enable_in=>enable_179,enable_out=>enable_15);
-
- -- Instantiate pokey noise circuits (lfsr)
- initmode <= skctl_next(1) nor skctl_next(0);
- poly_17_19_lfsr : pokey_poly_17_9
- port map(clk=>clk,reset_n=>reset_n,init=>initmode,enable=>enable_179,select_9_17=>audctl_reg(7),bit_out=>noise_large,rand_out=>rand_out);
-
- poly_5_lfsr : pokey_poly_5
- port map(clk=>clk,reset_n=>reset_n,init=>initmode,enable=>enable_179,bit_out=>noise_5);
-
- poly_4_lfsr : pokey_poly_4
- port map(clk=>clk,reset_n=>reset_n,init=>initmode,enable=>enable_179,bit_out=>noise_4);
-
- -- Delay between feeding noise between channels
- process(noise_large_reg, noise_5_reg, noise_4_reg, noise_large, noise_5, noise_4, enable_179)
- begin
- noise_large_next <= noise_large_reg;
- noise_5_next <= noise_5_reg;
- noise_4_next <= noise_4_reg;
-
- if (enable_179='1') then
- noise_large_next <= noise_large_reg(1 downto 0)&noise_large;
- noise_5_next <= noise_5_reg(1 downto 0)&noise_5;
- noise_4_next <= noise_4_reg(1 downto 0)&noise_4;
- end if;
- end process;
-
- --AUDIO_LEFT <= "000"&count_reg(15 downto 3);
- process(chan0_output_del_reg, chan1_output_del_reg, chan2_output_reg, chan3_output_reg, audc0_reg, audc1_reg, audc2_reg, audc3_reg, highpass0_reg, highpass1_reg)
- begin
- volume_channel_0_next <= "0000";
- volume_channel_1_next <= "0000";
- volume_channel_2_next <= "0000";
- volume_channel_3_next <= "0000";
-
- if (((chan0_output_del_reg xor highpass0_reg) or audc0_reg(4)) = '1') then
- volume_channel_0_next <= audc0_reg(3 downto 0);
- end if;
-
- if (((chan1_output_del_reg xor highpass1_reg) or audc1_reg(4)) = '1') then
- volume_channel_1_next <= audc1_reg(3 downto 0);
- end if;
-
- if ((chan2_output_reg or audc2_reg(4)) = '1') then
- volume_channel_2_next <= audc2_reg(3 downto 0);
- end if;
-
- if ((chan3_output_reg or audc3_reg(4)) = '1') then
- volume_channel_3_next <= audc3_reg(3 downto 0);
- end if;
-
- end process;
-
- -- serial port output
- -- urghhh (TODO: If timers are cleared with stimer_write, some clocks are still triggering. This workaround fixes the acid test. Investigate the proper fix)
- serout_sync_reset <= serial_reset or stimer_write_delayed;
- serout_clock_delay : delay_line
- generic map (count=>2)
- port map (clk=>clk, sync_reset=>serout_sync_reset,data_in=>serout_enable, enable=>enable_179, reset_n=>reset_n, data_out=>serout_enable_delayed);
-
-
- process(serout_enable_delayed, skctl_reg, serout_active_reg, serout_clock_last_reg,serout_clock_reg, serout_holding_load, serout_holding_reg, serout_holding_full_reg, serout_shift_reg, serout_bitcount_reg, serial_out_reg, twotone_reg, audf0_pulse, audf1_pulse, serial_reset)
- begin
- serout_clock_next <= serout_clock_reg;
- serout_clock_last_next <= serout_clock_reg;
-
- serout_shift_next <= serout_shift_reg;
- serout_bitcount_next <= serout_bitcount_reg;
- serout_holding_full_next <= serout_holding_full_reg;
- serout_active_next <= serout_active_reg;
-
- serial_out_next <= serial_out_reg; -- output from shift reg (if unchanged)
- sio_out_next <= serial_out_reg;
-
- -- two tone output
- twotone_next <= twotone_reg;
- twotone_reset <= '0';
-
- if ((audf1_pulse or (audf0_pulse and serial_out_reg)) = '1') then
- twotone_next <= not(twotone_reg);
- twotone_reset <= skctl_reg(3);
- end if;
-
- if (skctl_reg(3) = '1') then
- sio_out_next <= twotone_reg;
- end if;
-
- serial_op_needed_interrupt <= '0';
-
- -- generate clock from enable signals
- if (serout_enable_delayed = '1') then
- serout_clock_next <= not(serout_clock_reg);
- end if;
-
- -- output bits over sio
- if (serout_clock_last_reg = '0' and serout_clock_reg = '1') then
- serout_shift_next <= '0'&serout_shift_reg(9 downto 1); -- next
- serial_out_next <= serout_shift_reg(1) or not(serout_active_reg); -- i.e. next serout_shift_reg(0)
-
- -- reload
- if (serout_bitcount_reg = X"0") then
- if (serout_holding_full_reg='1') then -- unless, more to send in holding reg?
- serout_bitcount_next <= X"9"; -- 10 bits to send, 9 more after this
- serout_shift_next <= '1'&serout_holding_reg&'0';
- serial_out_next <= '0'; -- start bit (serout_shift_reg(0) after this cycle)
- serout_holding_full_next <= '0';
- serial_op_needed_interrupt <= '1'; -- more data please!
- serout_active_next <= '1';
- else
- serout_active_next <= '0';
- serial_out_next <= '1'; -- remove blip!
- end if;
- else
- serout_bitcount_next <= std_logic_vector(unsigned(serout_bitcount_reg)-1);
- end if;
- end if;
-
- -- force break
- if (skctl_reg(7) = '1') then
- serial_out_next <= '0';
- end if;
-
- -- register to load has been written too, update our state to reflect that it is full
- if (serout_holding_load = '1') then
- serout_holding_full_next <= '1';
- end if;
-
- if (serial_reset = '1') then
- twotone_next <= '0';
- serout_bitcount_next <= (others=>'0');
- serout_shift_next <= (others=>'0');
- serout_holding_full_next <= '0';
- serout_clock_next <= '0';
- serout_clock_last_next <= '0';
- serout_active_next <= '0';
- end if;
- end process;
-
- -- serial port input
- sio_in1_synchronizer : synchronizer
- port map (clk=>clk, raw=>sio_in1, sync=>sio_in1_reg);
- sio_in2_synchronizer : synchronizer
- port map (clk=>clk, raw=>sio_in2, sync=>sio_in2_reg);
- sio_in3_synchronizer : synchronizer
- port map (clk=>clk, raw=>sio_in3, sync=>sio_in3_reg);
- sio_in_next <= sio_in1_reg and sio_in2_reg and sio_in3_reg;
-
- waiting_for_start_bit <= '1' when serin_bitcount_reg = X"9" else '0';
- process(serin_enable,serin_clock_last_reg,serin_clock_reg, sio_in_reg, serin_reg,serin_shift_reg, serin_bitcount_reg, serial_ip_overrun_reg, serial_ip_framing_reg, skrest_write, irqst_reg, skctl_reg, waiting_for_start_bit, serial_reset)
- begin
- serin_clock_next <= serin_clock_reg;
- serin_clock_last_next <= serin_clock_reg;
-
- serin_shift_next <= serin_shift_reg;
- serin_bitcount_next <= serin_bitcount_reg;
- serin_next <= serin_reg;
-
- serial_ip_overrun_next <= serial_ip_overrun_reg;
- serial_ip_framing_next <= serial_ip_framing_reg;
- serial_ip_ready_interrupt <= '0';
-
- async_serial_reset <= '0';
-
- -- generate clock from enable signals
- if (serin_enable = '1') then
- serin_clock_next <= not(serin_clock_reg);
- end if;
-
- -- resync clock on receipt of start bit
- if ((skctl_reg(4) and sio_in_reg and waiting_for_start_bit)= '1') then
- async_serial_reset <= '1';
- serin_clock_next <= '1';
- end if;
-
- -- receive bits into shift reg
- if (serin_clock_last_reg='1' and serin_clock_reg='0') then -- failing edge
- if (((waiting_for_start_bit and not(sio_in_reg)) or not(waiting_for_start_bit))='1') then
- serin_shift_next <= sio_in_reg&serin_shift_reg(9 downto 1);
-
- if (serin_bitcount_reg = X"0") then -- full byte
- serin_next <= serin_shift_reg(9 downto 2); -- not shifted yet
-
- serin_bitcount_next <= X"9"; -- next... no disable for serial input, always happening.
-
- -- irq to alert new data avilable
- serial_ip_ready_interrupt <= '1';
-
- -- flag up overrun
- if (irqst_reg(5) = '0') then -- if interrupt bit not cleared yet...
- serial_ip_overrun_next <= '1';
- end if;
-
- -- flag up framing problem (stop bit is 1 - pull from sio since reg not yet shifted)
- if (sio_in_reg='0') then
- serial_ip_framing_next <= '1';
- end if;
- else
- serin_bitcount_next <= std_logic_vector(unsigned(serin_bitcount_reg)-1);
- end if;
- end if;
- end if;
-
- if (skrest_write = '1') then
- serial_ip_overrun_next <= '0';
- serial_ip_framing_next <= '0';
- end if;
-
- if (serial_reset = '1') then
- serin_clock_next <= '0';
- serin_bitcount_next <= X"9"; -- i.e. waiting for start bit
- serin_shift_next <= (others=>'0');
- end if;
- end process;
-
- -- serial clocks
- process(sio_clockin_in,skctl_reg,clock_reg,clock_sync_reg,audf1_pulse,audf2_pulse,audf3_pulse)
- begin
- clock_next <= sio_clockin_in;
- clock_sync_next <= clock_reg;
-
- serout_enable <= '0';
- serin_enable <= '0';
- clock_input <= '1'; -- when output, outputs channel 4
-
- case skctl_reg(6 downto 4) is
- when "000" =>
- serin_enable <= not(clock_sync_reg) and clock_reg;
- serout_enable <= not(clock_sync_reg) and clock_reg;
- when "001" =>
- serin_enable <= audf3_pulse;
- serout_enable <= not(clock_sync_reg) and clock_reg;
- when "010" =>
- serin_enable <= audf3_pulse;
- serout_enable <= audf3_pulse;
- clock_input <= '0';
- when "011" =>
- serin_enable <= audf3_pulse;
- serout_enable <= audf3_pulse;
- when "100" =>
- serin_enable <= not(clock_sync_reg) and clock_reg;
- serout_enable <= audf3_pulse;
- when "101" =>
- serin_enable <= audf3_pulse;
- serout_enable <= audf3_pulse;
- when "110" =>
- serin_enable <= audf3_pulse;
- serout_enable <= audf1_pulse;
- clock_input <= '0';
- when "111" =>
- serin_enable <= audf3_pulse;
- serout_enable <= audf1_pulse;
- when others =>
- -- nop
- end case;
- end process;
-
- -- keyboard overrun (i.e. second key pressed before interrupt cleared)
- process(other_key_irq,keyboard_overrun_reg,skrest_write,irqst_reg)
- begin
- keyboard_overrun_next <= keyboard_overrun_reg;
-
- if (other_key_irq='1' and irqst_reg(6)='0') then
- keyboard_overrun_next <= '1';
- end if;
-
- if (skrest_write = '1') then
- keyboard_overrun_next <= '0';
- end if;
- end process;
-
- -- keyboard scan
-gen_custom_scan : if custom_keyboard_scan=1 generate
- pokey_keyboard_scanner1 : pokey_keyboard_scanner
- port map (clk=>clk, reset_n=>reset_n, enable=>keyboard_scan_enable, keyboard_response=>keyboard_response, debounce_disable=>not(skctl_reg(0)), scan_enable=>skctl_reg(1), keyboard_scan=>keyboard_scan, key_held=>key_held, shift_held=>shift_held, keycode=>kbcode, other_key_irq=>other_key_irq, break_irq=>break_irq);
-end generate;
-
-gen_normal_scan : if custom_keyboard_scan=0 generate
- pokey_keyboard_scanner1 : pokey_keyboard_scanner
- port map (clk=>clk, reset_n=>reset_n, enable=>enable_15, keyboard_response=>keyboard_response, debounce_disable=>not(skctl_reg(0)), scan_enable=>skctl_reg(1), keyboard_scan=>keyboard_scan, key_held=>key_held, shift_held=>shift_held, keycode=>kbcode, other_key_irq=>other_key_irq, break_irq=>break_irq);
-end generate;
-
- -- POT scan
- process(potgo_write, pot_reset_reg, pot_counter_reg, pot_in, enable_15, enable_179, skctl_reg, pot0_reg, pot1_reg, pot2_reg, pot3_reg, pot4_reg, pot5_reg, pot6_reg, pot7_reg, allpot_reg)
- begin
- pot0_next <= pot0_reg;
- pot1_next <= pot1_reg;
- pot2_next <= pot2_reg;
- pot3_next <= pot3_reg;
- pot4_next <= pot4_reg;
- pot5_next <= pot5_reg;
- pot6_next <= pot6_reg;
- pot7_next <= pot7_reg;
-
- allpot_next <= allpot_reg;
-
- pot_reset_next <= pot_reset_reg;
-
- pot_counter_next <= pot_counter_reg;
-
- if (((enable_15 and not(skctl_reg(2))) or (enable_179 and skctl_reg(2))) = '1') then
- pot_counter_next <= std_logic_vector(unsigned(pot_counter_reg) + 1);
- if (pot_counter_reg = X"E4") then
- pot_reset_next <= '1'; -- turn on pot dump transistors
- allpot_next <= (others=>'0');
- end if;
-
- if (pot_reset_reg = '0') then
- if (pot_in(0) = '0') then -- pot now high, latch
- pot0_next <= pot_counter_reg;
- end if;
- if (pot_in(1) = '0') then -- pot now high, latch
- pot1_next <= pot_counter_reg;
- end if;
- if (pot_in(2) = '0') then -- pot now high, latch
- pot2_next <= pot_counter_reg;
- end if;
- if (pot_in(3) = '0') then -- pot now high, latch
- pot3_next <= pot_counter_reg;
- end if;
- if (pot_in(4) = '0') then -- pot now high, latch
- pot4_next <= pot_counter_reg;
- end if;
- if (pot_in(5) = '0') then -- pot now high, latch
- pot5_next <= pot_counter_reg;
- end if;
- if (pot_in(6) = '0') then -- pot now high, latch
- pot6_next <= pot_counter_reg;
- end if;
- if (pot_in(7) = '0') then -- pot now high, latch
- pot7_next <= pot_counter_reg;
- end if;
-
- allpot_next <= allpot_reg and not(pot_in);
- end if;
- end if;
-
- if (potgo_write = '1') then
- pot_counter_next <= (others=>'0');
- pot_reset_next <= '0'; -- turn off pot dump transistors, so they start to get charged
- allpot_next <= (others=>'1');
- end if;
- end process;
-
- -- Outputs
- irq_n_out <= irq_n_reg;
-
- CHANNEL_0_OUT <= volume_channel_0_reg;
- CHANNEL_1_OUT <= volume_channel_1_reg;
- CHANNEL_2_OUT <= volume_channel_2_reg;
- CHANNEL_3_OUT <= volume_channel_3_reg;
-
- sio_out1 <= sio_out_reg;
- sio_out2 <= sio_out_reg;
- sio_out3 <= sio_out_reg;
-
- sio_clockout <= serout_clock_reg;
- sio_clockin_oe <= not(clock_input);
- sio_clockin_out <= serin_clock_reg;
-
- pot_reset <= pot_reset_reg;
-
-END vhdl;
-
-
diff --git a/common/Sound/Pokey MrX/pokey_countdown_timer.vhdl b/common/Sound/Pokey MrX/pokey_countdown_timer.vhdl
deleted file mode 100644
index fd7c1dc3..00000000
--- a/common/Sound/Pokey MrX/pokey_countdown_timer.vhdl
+++ /dev/null
@@ -1,102 +0,0 @@
----------------------------------------------------------------------------
--- (c) 2013 mark watson
--- I am happy for anyone to use this for non-commercial use.
--- If my vhdl files are used commercially or otherwise sold,
--- please contact me for explicit permission at scrameta (gmail).
--- This applies for source and binary form and derived works.
----------------------------------------------------------------------------
-LIBRARY ieee;
-USE ieee.std_logic_1164.all;
-use ieee.numeric_std.all;
-
-ENTITY pokey_countdown_timer IS
-generic(UNDERFLOW_DELAY : natural := 3);
-PORT
-(
- CLK : IN STD_LOGIC;
- ENABLE : IN STD_LOGIC;
- ENABLE_UNDERFLOW : IN STD_LOGIC;
- RESET_N : IN STD_LOGIC;
-
- WR_EN : IN STD_LOGIC;
- DATA_IN : IN STD_LOGIC_VECTOR(7 downto 0);
-
- DATA_OUT : OUT STD_LOGIC
-);
-END pokey_countdown_timer;
-
-ARCHITECTURE vhdl OF pokey_countdown_timer IS
- component delay_line IS
- generic(COUNT : natural := 1);
- PORT
- (
- CLK : IN STD_LOGIC;
- SYNC_RESET : IN STD_LOGIC;
- DATA_IN : IN STD_LOGIC;
-
- ENABLE : IN STD_LOGIC;
- RESET_N : IN STD_LOGIC;
-
- DATA_OUT : OUT STD_LOGIC
- );
- END component;
-
- function To_Std_Logic(L: BOOLEAN) return std_ulogic is
- begin
- if L then
- return('1');
- else
- return('0');
- end if;
- end function To_Std_Logic;
-
- signal count_reg : std_logic_vector(7 downto 0);
- signal count_next: std_logic_vector(7 downto 0);
-
- signal underflow : std_logic;
-
- signal count_command : std_logic_vector(1 downto 0);
- signal underflow_command: std_logic_vector(1 downto 0);
-BEGIN
- -- Instantiate delay (provides output)
- underflow0_delay : delay_line
- generic map (COUNT=>UNDERFLOW_DELAY)
- port map(clk=>clk,sync_reset=>wr_en,data_in=>underflow,enable=>ENABLE_UNDERFLOW,reset_n=>reset_n,data_out=>data_out);
-
- -- register
- process(clk,reset_n)
- begin
- if (reset_N = '0') then
- count_reg <= (others=>'0');
- elsif (clk'event and clk='1') then
- count_reg <= count_next;
- end if;
- end process;
-
- -- count down on enable
- process(count_reg,enable,wr_en,count_command,data_in)
- begin
- count_command <= enable&wr_en;
- case count_command is
- when "10" =>
- count_next <= std_logic_vector(unsigned(count_reg) -1);
- when "01"|"11" =>
- count_next <= data_in;
- when others =>
- count_next <= count_reg;
- end case;
- end process;
-
- -- underflow
- process(count_reg,enable,underflow_command)
- begin
- underflow_command <= enable & To_Std_Logic(count_reg = X"00");
- case underflow_command is
- when "11" =>
- underflow <= '1';
- when others =>
- underflow <= '0';
- end case;
- end process;
-
-END vhdl;
diff --git a/common/Sound/Pokey MrX/pokey_keyboard_scanner.vhdl b/common/Sound/Pokey MrX/pokey_keyboard_scanner.vhdl
deleted file mode 100644
index 5ce97b13..00000000
--- a/common/Sound/Pokey MrX/pokey_keyboard_scanner.vhdl
+++ /dev/null
@@ -1,202 +0,0 @@
----------------------------------------------------------------------------
--- (c) 2013 mark watson
--- I am happy for anyone to use this for non-commercial use.
--- If my vhdl files are used commercially or otherwise sold,
--- please contact me for explicit permission at scrameta (gmail).
--- This applies for source and binary form and derived works.
----------------------------------------------------------------------------
-LIBRARY ieee;
-USE ieee.std_logic_1164.all;
-use ieee.numeric_std.all;
-
-entity pokey_keyboard_scanner is
-port
-(
- clk : in std_logic;
- reset_n : in std_logic;
-
- enable : in std_logic; -- typically hsync or equiv timing
- keyboard_response : in std_logic_vector(1 downto 0);
- debounce_disable : in std_logic;
- scan_enable : in std_logic;
-
- keyboard_scan : out std_logic_vector(5 downto 0);
-
- key_held : out std_logic;
- shift_held : out std_logic;
- keycode : out std_logic_vector(7 downto 0);
- other_key_irq : out std_logic;
- break_irq : out std_logic
-);
-end pokey_keyboard_scanner;
-
-architecture vhdl of pokey_keyboard_scanner is
- signal bincnt_next : std_logic_vector(5 downto 0);
- signal bincnt_reg : std_logic_vector(5 downto 0);
-
- signal break_pressed_next : std_logic;
- signal break_pressed_reg : std_logic;
-
- signal shift_pressed_next : std_logic;
- signal shift_pressed_reg : std_logic;
-
- signal control_pressed_next : std_logic;
- signal control_pressed_reg : std_logic;
-
- signal compare_latch_next : std_logic_vector(5 downto 0);
- signal compare_latch_reg : std_logic_vector(5 downto 0);
-
- signal keycode_latch_next : std_logic_vector(7 downto 0);
- signal keycode_latch_reg : std_logic_vector(7 downto 0);
-
- signal irq_next : std_logic;
- signal irq_reg : std_logic;
-
- signal break_irq_next : std_logic;
- signal break_irq_reg : std_logic;
-
- signal key_held_next : std_logic;
- signal key_held_reg : std_logic;
-
- signal my_key : std_logic;
-
- signal state_next : std_logic_vector(1 downto 0);
- signal state_reg : std_logic_vector(1 downto 0);
- constant state_wait_key : std_logic_vector(1 downto 0) := "00";
- constant state_key_bounce : std_logic_vector(1 downto 0) := "01";
- constant state_valid_key : std_logic_vector(1 downto 0) := "10";
- constant state_key_debounce : std_logic_vector(1 downto 0) := "11";
-begin
-
- -- register
- process(clk,reset_n)
- begin
- if (reset_n = '0') then
- bincnt_reg <= (others=>'0');
- break_pressed_reg <= '0';
- shift_pressed_reg <= '0';
- control_pressed_reg <= '0';
- compare_latch_reg <= (others=>'0');
- keycode_latch_reg <= (others=>'1');
- key_held_reg <= '0';
- state_reg <= state_wait_key;
- irq_reg <= '0';
- break_irq_reg <= '0';
- elsif (clk'event and clk = '1') then
- bincnt_reg <= bincnt_next;
- state_reg <= state_next;
- break_pressed_reg <= break_pressed_next;
- shift_pressed_reg <= shift_pressed_next;
- control_pressed_reg <= control_pressed_next;
- compare_latch_reg <= compare_latch_next;
- keycode_latch_reg <= keycode_latch_next;
- key_held_reg <= key_held_next;
- state_reg <= state_next;
- irq_reg <= irq_next;
- break_irq_reg <= break_irq_next;
- end if;
- end process;
-
- process (enable, keyboard_response, scan_enable, key_held_reg, my_key, state_reg,bincnt_reg, compare_latch_reg, break_pressed_next, break_pressed_reg, shift_pressed_reg, break_irq_reg, control_pressed_reg, keycode_latch_reg, debounce_disable)
- begin
- bincnt_next <= bincnt_reg;
- state_next <= state_reg;
- compare_latch_next <= compare_latch_reg;
- irq_next <= '0';
- break_irq_next <= '0';
- break_pressed_next <= break_pressed_reg;
- shift_pressed_next <= shift_pressed_reg;
- control_pressed_next <= control_pressed_reg;
- keycode_latch_next <= keycode_latch_reg;
- key_held_next <= key_held_reg;
-
- my_key <= '0';
- if (bincnt_reg = compare_latch_reg or debounce_disable='1') then
- my_key <= '1';
- end if;
-
- if (enable = '1' and scan_enable='1') then
- bincnt_next <= std_logic_vector(unsigned(bincnt_reg) + 1); -- check another key
-
- key_held_next<= '0';
-
- case state_reg is
- when state_wait_key =>
- if (keyboard_response(0) = '0') then -- detected key press
- if (debounce_disable = '1') then
- keycode_latch_next <= control_pressed_reg&shift_pressed_reg&bincnt_reg;
- irq_next <= '1';
- key_held_next<= '1';
- else
- state_next <= state_key_bounce;
- compare_latch_next <= bincnt_reg;
- end if;
- end if;
-
- when state_key_bounce =>
- if (keyboard_response(0) = '0') then -- detected key press
- if (my_key = '1') then -- same key
- keycode_latch_next <= control_pressed_reg&shift_pressed_reg&compare_latch_reg;
- irq_next <= '1';
- key_held_next<= '1';
- state_next <= state_valid_key;
- else -- different key (multiple keys pressed)
- state_next <= state_wait_key;
- end if;
- else -- key not pressed
- if (my_key = '1') then -- same key, no longer pressed
- state_next <= state_wait_key;
- end if;
- end if;
-
- when state_valid_key =>
- key_held_next<= '1';
- if (my_key = '1') then -- only response to my key
- if (keyboard_response(0) = '1') then -- no longer pressed
- state_next <= state_key_debounce;
- end if;
- end if;
-
- when state_key_debounce =>
- key_held_next<= '1';
- if (my_key = '1') then
- if (keyboard_response(0) = '1') then -- no longer pressed
- key_held_next<= '0';
- state_next <= state_wait_key;
- else
- state_next <= state_valid_key;
- end if;
- end if;
-
- when others=>
- state_next <= state_wait_key;
- end case;
-
- if (bincnt_reg(3 downto 0) = "0000") then
- case bincnt_reg(5 downto 4) is
- when "11" =>
- break_pressed_next <= not(keyboard_response(1)); --0x30
- when "01" =>
- shift_pressed_next <= not(keyboard_response(1)); --0x10
- when "00" =>
- control_pressed_next <= not(keyboard_response(1)); -- 0x00
- when others =>
- --
- end case;
- end if;
- end if;
-
- if (break_pressed_next='1' and break_pressed_reg='0') then
- break_irq_next <= '1';
- end if;
- end process;
-
- -- outputs
- keyboard_scan <= not(bincnt_reg);
-
- key_held <= key_held_reg;
- shift_held <= shift_pressed_reg;
- keycode <= keycode_latch_reg;
- other_key_irq <= irq_reg;
- break_irq <= break_irq_reg;
-end vhdl;
diff --git a/common/Sound/Pokey MrX/pokey_noise_filter.vhdl b/common/Sound/Pokey MrX/pokey_noise_filter.vhdl
deleted file mode 100644
index 9c00918c..00000000
--- a/common/Sound/Pokey MrX/pokey_noise_filter.vhdl
+++ /dev/null
@@ -1,79 +0,0 @@
----------------------------------------------------------------------------
--- (c) 2013 mark watson
--- I am happy for anyone to use this for non-commercial use.
--- If my vhdl files are used commercially or otherwise sold,
--- please contact me for explicit permission at scrameta (gmail).
--- This applies for source and binary form and derived works.
----------------------------------------------------------------------------
-LIBRARY ieee;
-USE ieee.std_logic_1164.all;
-use ieee.numeric_std.all;
-
-ENTITY pokey_noise_filter IS
-PORT
-(
- CLK : IN STD_LOGIC;
- RESET_N : IN STD_LOGIC;
-
- NOISE_SELECT : IN STD_LOGIC_VECTOR(2 downto 0);
-
- PULSE_IN : IN STD_LOGIC;
-
- NOISE_4 : IN STD_LOGIC;
- NOISE_5 : IN STD_LOGIC;
- NOISE_LARGE : IN STD_LOGIC;
-
- SYNC_RESET : IN STD_LOGIC;
-
- PULSE_OUT : OUT STD_LOGIC
-);
-END pokey_noise_filter;
-
-ARCHITECTURE vhdl OF pokey_noise_filter IS
--- signal pulse_noise_a : std_logic;
--- signal pulse_noise_b : std_logic;
-
- signal audclk : std_logic;
- signal out_next : std_logic;
- signal out_reg : std_logic;
-BEGIN
- process(clk,reset_n)
- begin
- if (reset_n='0') then
- out_reg <= '0';
- elsif (clk'event and clk='1') then
- out_reg <= out_next;
- end if;
- end process;
-
- pulse_out <= out_reg;
-
- process(pulse_in, noise_4, noise_5, noise_large, noise_select, audclk, out_reg, sync_reset)
- begin
- audclk <= pulse_in;
- out_next <= out_reg;
-
- if (NOISE_SELECT(2) = '0') then
- audclk <= pulse_in and noise_5;
- end if;
-
- if (audclk = '1') then
- if (NOISE_SELECT(0) = '1') then
- -- toggle
- out_next <= not(out_reg);
- else
- -- sample
- if (NOISE_SELECT(1) = '1') then
- out_next <= noise_4;
- else
- out_next <= noise_large;
- end if;
- end if;
- end if;
-
- if (sync_reset = '1') then
- out_next <= '0';
- end if;
-
- end process;
-end vhdl;
diff --git a/common/Sound/Pokey MrX/pokey_poly_17_9.vhdl b/common/Sound/Pokey MrX/pokey_poly_17_9.vhdl
deleted file mode 100644
index 964168ff..00000000
--- a/common/Sound/Pokey MrX/pokey_poly_17_9.vhdl
+++ /dev/null
@@ -1,77 +0,0 @@
----------------------------------------------------------------------------
--- (c) 2013 mark watson
--- I am happy for anyone to use this for non-commercial use.
--- If my vhdl files are used commercially or otherwise sold,
--- please contact me for explicit permission at scrameta (gmail).
--- This applies for source and binary form and derived works.
----------------------------------------------------------------------------
-LIBRARY ieee;
-USE ieee.std_logic_1164.all;
-use ieee.numeric_std.all;
-
-ENTITY pokey_poly_17_9 IS
-PORT
-(
- CLK : IN STD_LOGIC;
- RESET_N : IN STD_LOGIC;
- ENABLE : IN STD_LOGIC;
- SELECT_9_17 : IN STD_LOGIC; -- 9 high, 17 low
- INIT : IN STD_LOGIC;
-
- BIT_OUT : OUT STD_LOGIC;
-
- RAND_OUT : OUT std_logic_vector(7 downto 0)
-);
-END pokey_poly_17_9;
-
-ARCHITECTURE vhdl OF pokey_poly_17_9 IS
- signal shift_reg: std_logic_vector(16 downto 0);
- signal shift_next: std_logic_vector(16 downto 0);
-
- signal cycle_delay_reg : std_logic;
- signal cycle_delay_next : std_logic;
-
- signal select_9_17_del_reg : std_logic;
- signal select_9_17_del_next : std_logic;
-
- signal feedback : std_logic;
-BEGIN
- -- register
- process(clk,reset_n)
- begin
- if (reset_n = '0') then
- shift_reg <= "01010101010101010";
- cycle_delay_reg <= '0';
- select_9_17_del_reg <= '0';
- elsif (clk'event and clk='1') then
- shift_reg <= shift_next;
- cycle_delay_reg <= cycle_delay_next;
- select_9_17_del_reg <= select_9_17_del_next;
- end if;
- end process;
-
- -- next state (as pokey decap)
- feedback <= shift_reg(13) xnor shift_reg(8);
- process(enable,shift_reg,feedback,select_9_17,select_9_17_del_reg,init,cycle_delay_reg)
- begin
- shift_next <= shift_reg;
- cycle_delay_next <= cycle_delay_reg;
- select_9_17_del_next <= select_9_17_del_reg;
-
- if (enable = '1') then
- select_9_17_del_next <= select_9_17;
- shift_next(15 downto 8) <= shift_reg(16 downto 9);
- shift_next(7) <= feedback;
- shift_next(6 downto 0) <= shift_reg(7 downto 1);
-
- shift_next(16) <= ((feedback and select_9_17_del_reg) or (shift_reg(0) and not(select_9_17))) and not(init);
-
- cycle_delay_next <= shift_reg(9);
- end if;
- end process;
-
- -- output
- bit_out <= cycle_delay_reg; -- from pokey schematics
- RAND_OUT(7 downto 0) <= not(shift_reg(15 downto 8));
-
-END vhdl;
diff --git a/common/Sound/Pokey MrX/pokey_poly_4.vhdl b/common/Sound/Pokey MrX/pokey_poly_4.vhdl
deleted file mode 100644
index 76ff2b19..00000000
--- a/common/Sound/Pokey MrX/pokey_poly_4.vhdl
+++ /dev/null
@@ -1,50 +0,0 @@
----------------------------------------------------------------------------
--- (c) 2013 mark watson
--- I am happy for anyone to use this for non-commercial use.
--- If my vhdl files are used commercially or otherwise sold,
--- please contact me for explicit permission at scrameta (gmail).
--- This applies for source and binary form and derived works.
----------------------------------------------------------------------------
-LIBRARY ieee;
-USE ieee.std_logic_1164.all;
-use ieee.numeric_std.all;
-
-ENTITY pokey_poly_4 IS
-PORT
-(
- CLK : IN STD_LOGIC;
- RESET_N : IN STD_LOGIC;
- ENABLE : IN STD_LOGIC;
- INIT : IN STD_LOGIC;
-
- BIT_OUT : OUT STD_LOGIC
-);
-END pokey_poly_4;
-
-ARCHITECTURE vhdl OF pokey_poly_4 IS
- signal shift_reg: std_logic_vector(3 downto 0);
- signal shift_next: std_logic_vector(3 downto 0);
-BEGIN
- -- register
- process(clk, reset_n)
- begin
- if (reset_n = '0') then
- shift_reg <= "1010";
- elsif (clk'event and clk='1') then
- shift_reg <= shift_next;
- end if;
- end process;
-
- -- next state
- process(shift_reg,enable,init)
- begin
- shift_next <= shift_reg;
- if (enable = '1') then
- shift_next <= ((shift_reg(1) xnor shift_reg(0)) and not(init))&shift_reg(3 downto 1);
- end if;
- end process;
-
- -- output
- bit_out <= shift_reg(0);
-
-END vhdl;
diff --git a/common/Sound/Pokey MrX/pokey_poly_5.vhdl b/common/Sound/Pokey MrX/pokey_poly_5.vhdl
deleted file mode 100644
index e64b9324..00000000
--- a/common/Sound/Pokey MrX/pokey_poly_5.vhdl
+++ /dev/null
@@ -1,50 +0,0 @@
----------------------------------------------------------------------------
--- (c) 2013 mark watson
--- I am happy for anyone to use this for non-commercial use.
--- If my vhdl files are used commercially or otherwise sold,
--- please contact me for explicit permission at scrameta (gmail).
--- This applies for source and binary form and derived works.
----------------------------------------------------------------------------
-LIBRARY ieee;
-USE ieee.std_logic_1164.all;
-use ieee.numeric_std.all;
-
-ENTITY pokey_poly_5 IS
-PORT
-(
- CLK : IN STD_LOGIC;
- RESET_N : IN STD_LOGIC;
- ENABLE : IN STD_LOGIC;
- INIT : IN STD_LOGIC;
-
- BIT_OUT : OUT STD_LOGIC
-);
-END pokey_poly_5;
-
-ARCHITECTURE vhdl OF pokey_poly_5 IS
- signal shift_reg: std_logic_vector(4 downto 0);
- signal shift_next: std_logic_vector(4 downto 0);
-BEGIN
- -- register
- process(clk,reset_n)
- begin
- if (reset_n = '0') then
- shift_reg <= "01010";
- elsif (clk'event and clk='1') then
- shift_reg <= shift_next;
- end if;
- end process;
-
- -- next state
- process(shift_reg,enable,init)
- begin
- shift_next <= shift_reg;
- if (enable = '1') then
- shift_next <= ((shift_reg(2) xnor shift_reg(0)) and not(init))&shift_reg(4 downto 1);
- end if;
- end process;
-
- -- output
- bit_out <= shift_reg(0);
-
-END vhdl;
diff --git a/common/Sound/Pokey MrX/synchronizer.vhdl b/common/Sound/Pokey MrX/synchronizer.vhdl
deleted file mode 100644
index e84b5360..00000000
--- a/common/Sound/Pokey MrX/synchronizer.vhdl
+++ /dev/null
@@ -1,39 +0,0 @@
----------------------------------------------------------------------------
--- (c) 2013 mark watson
--- I am happy for anyone to use this for non-commercial use.
--- If my vhdl files are used commercially or otherwise sold,
--- please contact me for explicit permission at scrameta (gmail).
--- This applies for source and binary form and derived works.
----------------------------------------------------------------------------
-LIBRARY ieee;
-USE ieee.std_logic_1164.all;
-use ieee.numeric_std.all;
-
-ENTITY synchronizer IS
-PORT
-(
- CLK : IN STD_LOGIC;
- RAW : IN STD_LOGIC;
- SYNC : OUT STD_LOGIC
-);
-END synchronizer;
-
-ARCHITECTURE vhdl OF synchronizer IS
- signal ff_next : std_logic_vector(2 downto 0);
- signal ff_reg : std_logic_vector(2 downto 0);
-begin
- -- register
- process(clk)
- begin
- if (clk'event and clk='1') then
- ff_reg <= ff_next;
- end if;
- end process;
-
- ff_next <= RAW&ff_reg(2 downto 1);
-
- SYNC <= ff_reg(0);
-
-end vhdl;
-
-
diff --git a/common/Sound/Pokey MrX/Pokey.qip b/common/Sound/Pokey/Pokey.qip
similarity index 100%
rename from common/Sound/Pokey MrX/Pokey.qip
rename to common/Sound/Pokey/Pokey.qip
diff --git a/Arcade_MiST/Atari Tetris/rtl/Pokey/complete_address_decoder.vhdl b/common/Sound/Pokey/complete_address_decoder.vhdl
similarity index 100%
rename from Arcade_MiST/Atari Tetris/rtl/Pokey/complete_address_decoder.vhdl
rename to common/Sound/Pokey/complete_address_decoder.vhdl
diff --git a/Arcade_MiST/Atari Tetris/rtl/Pokey/delay_line.vhdl b/common/Sound/Pokey/delay_line.vhdl
similarity index 100%
rename from Arcade_MiST/Atari Tetris/rtl/Pokey/delay_line.vhdl
rename to common/Sound/Pokey/delay_line.vhdl
diff --git a/Arcade_MiST/Atari Tetris/rtl/Pokey/latch_delay_line.vhdl b/common/Sound/Pokey/latch_delay_line.vhdl
similarity index 100%
rename from Arcade_MiST/Atari Tetris/rtl/Pokey/latch_delay_line.vhdl
rename to common/Sound/Pokey/latch_delay_line.vhdl
diff --git a/Arcade_MiST/Atari Tetris/rtl/Pokey/pokey.vhdl b/common/Sound/Pokey/pokey.vhdl
similarity index 98%
rename from Arcade_MiST/Atari Tetris/rtl/Pokey/pokey.vhdl
rename to common/Sound/Pokey/pokey.vhdl
index 6628311d..fdbabfc6 100644
--- a/Arcade_MiST/Atari Tetris/rtl/Pokey/pokey.vhdl
+++ b/common/Sound/Pokey/pokey.vhdl
@@ -367,6 +367,7 @@ ARCHITECTURE vhdl OF pokey IS
signal serout_enable : std_logic;
signal serout_enable_delayed : std_logic;
signal serin_enable : std_logic;
+ signal serin_enable_delayed : std_logic;
signal async_serial_reset : std_logic;
signal waiting_for_start_bit : std_logic;
@@ -1000,6 +1001,10 @@ BEGIN
serout_clock_delay : delay_line
generic map (count=>2)
port map (clk=>clk, sync_reset=>serout_sync_reset,data_in=>serout_enable, enable=>enable_179, reset_n=>reset_n, data_out=>serout_enable_delayed);
+
+ serin_clock_delay : delay_line
+ generic map (count=>5)
+ port map (clk=>clk, sync_reset=>serout_sync_reset,data_in=>serin_enable, enable=>enable_179, reset_n=>reset_n, data_out=>serin_enable_delayed);
process(serout_enable_delayed, skctl_reg, serout_active_reg, serout_clock_last_reg,serout_clock_reg, serout_holding_load, serout_holding_reg, serout_holding_full_reg, serout_shift_reg, serout_bitcount_reg, serial_out_reg, twotone_reg, audf0_pulse, audf1_pulse, serial_reset)
@@ -1089,7 +1094,7 @@ BEGIN
sio_in_next <= sio_in1_reg and sio_in2_reg and sio_in3_reg;
waiting_for_start_bit <= '1' when serin_bitcount_reg = X"9" else '0';
- process(serin_enable,serin_clock_last_reg,serin_clock_reg, sio_in_reg, serin_reg,serin_shift_reg, serin_bitcount_reg, serial_ip_overrun_reg, serial_ip_framing_reg, skrest_write, irqst_reg, skctl_reg, waiting_for_start_bit, serial_reset)
+ process(serin_enable_delayed,serin_clock_last_reg,serin_clock_reg, sio_in_reg, serin_reg,serin_shift_reg, serin_bitcount_reg, serial_ip_overrun_reg, serial_ip_framing_reg, skrest_write, irqst_reg, skctl_reg, waiting_for_start_bit, serial_reset)
begin
serin_clock_next <= serin_clock_reg;
serin_clock_last_next <= serin_clock_reg;
@@ -1105,7 +1110,7 @@ BEGIN
async_serial_reset <= '0';
-- generate clock from enable signals
- if (serin_enable = '1') then
+ if (serin_enable_delayed = '1') then
serin_clock_next <= not(serin_clock_reg);
end if;
diff --git a/Arcade_MiST/Atari Tetris/rtl/Pokey/pokey_countdown_timer.vhdl b/common/Sound/Pokey/pokey_countdown_timer.vhdl
similarity index 100%
rename from Arcade_MiST/Atari Tetris/rtl/Pokey/pokey_countdown_timer.vhdl
rename to common/Sound/Pokey/pokey_countdown_timer.vhdl
diff --git a/Arcade_MiST/Atari Tetris/rtl/Pokey/pokey_keyboard_scanner.vhdl b/common/Sound/Pokey/pokey_keyboard_scanner.vhdl
similarity index 100%
rename from Arcade_MiST/Atari Tetris/rtl/Pokey/pokey_keyboard_scanner.vhdl
rename to common/Sound/Pokey/pokey_keyboard_scanner.vhdl
diff --git a/Arcade_MiST/Atari Tetris/rtl/Pokey/pokey_noise_filter.vhdl b/common/Sound/Pokey/pokey_noise_filter.vhdl
similarity index 100%
rename from Arcade_MiST/Atari Tetris/rtl/Pokey/pokey_noise_filter.vhdl
rename to common/Sound/Pokey/pokey_noise_filter.vhdl
diff --git a/Arcade_MiST/Atari Tetris/rtl/Pokey/pokey_poly_17_9.vhdl b/common/Sound/Pokey/pokey_poly_17_9.vhdl
similarity index 100%
rename from Arcade_MiST/Atari Tetris/rtl/Pokey/pokey_poly_17_9.vhdl
rename to common/Sound/Pokey/pokey_poly_17_9.vhdl
diff --git a/Arcade_MiST/Atari Tetris/rtl/Pokey/pokey_poly_4.vhdl b/common/Sound/Pokey/pokey_poly_4.vhdl
similarity index 100%
rename from Arcade_MiST/Atari Tetris/rtl/Pokey/pokey_poly_4.vhdl
rename to common/Sound/Pokey/pokey_poly_4.vhdl
diff --git a/Arcade_MiST/Atari Tetris/rtl/Pokey/pokey_poly_5.vhdl b/common/Sound/Pokey/pokey_poly_5.vhdl
similarity index 100%
rename from Arcade_MiST/Atari Tetris/rtl/Pokey/pokey_poly_5.vhdl
rename to common/Sound/Pokey/pokey_poly_5.vhdl
diff --git a/Arcade_MiST/Atari Tetris/rtl/Pokey/synchronizer.vhdl b/common/Sound/Pokey/synchronizer.vhdl
similarity index 100%
rename from Arcade_MiST/Atari Tetris/rtl/Pokey/synchronizer.vhdl
rename to common/Sound/Pokey/synchronizer.vhdl
diff --git a/common/Sound/Pokey MrX/syncreset_enable_divider.vhdl b/common/Sound/Pokey/syncreset_enable_divider.vhdl
similarity index 100%
rename from common/Sound/Pokey MrX/syncreset_enable_divider.vhdl
rename to common/Sound/Pokey/syncreset_enable_divider.vhdl
diff --git a/common/mist/arcade_inputs.v b/common/mist/arcade_inputs.v
index 9c28c93f..8d0fdebf 100644
--- a/common/mist/arcade_inputs.v
+++ b/common/mist/arcade_inputs.v
@@ -112,10 +112,10 @@ always @(posedge clk) begin
'h06: btn_two_players <= key_pressed; // F2
'h04: btn_three_players <= key_pressed; // F3
'h0C: btn_four_players <= key_pressed; // F4
- 'h12: btn_fireD <= key_pressed; // l-shift
- 'h14: btn_fireC <= key_pressed; // ctrl
+ 'h14: btn_fireA <= key_pressed; // ctrl
'h11: btn_fireB <= key_pressed; // alt
- 'h29: btn_fireA <= key_pressed; // Space
+ 'h29: btn_fireC <= key_pressed; // Space
+ 'h12: btn_fireD <= key_pressed; // l-shift
'h1A: btn_fireE <= key_pressed; // Z
'h22: btn_fireF <= key_pressed; // X
'h21: btn_fireG <= key_pressed; // C