zxuno-git/cores/Spectrum/control_enable_options.v

87 lines
2.5 KiB
Verilog

`timescale 1ns / 1ps
`default_nettype none
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date: 00:24:56 05/08/2016
// Design Name:
// Module Name: control_enable_options
// Project Name:
// Target Devices:
// Tool versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
module control_enable_options(
input wire clk,
input wire rst_n,
input wire [7:0] zxuno_addr,
input wire zxuno_regrd,
input wire zxuno_regwr,
input wire [7:0] din,
output reg [7:0] dout,
output reg oe_n,
output wire disable_ay,
output wire disable_turboay,
output wire disable_7ffd,
output wire disable_1ffd,
output wire disable_romsel7f,
output wire disable_romsel1f,
output wire enable_timexmmu,
output wire disable_spisd,
output wire disable_timexscr,
output wire disable_ulaplus,
output wire disable_radas
);
parameter DEVOPTIONS = 8'h0E;
parameter DEVOPTS2 = 8'h0F;
reg [7:0] devoptions = 8'h00; // initial value
reg [7:0] devopts2 = 8'h00; // initial value
assign disable_ay = devoptions[0];
assign disable_turboay = devoptions[1];
assign disable_7ffd = devoptions[2];
assign disable_1ffd = devoptions[3];
assign disable_romsel7f = devoptions[4];
assign disable_romsel1f = devoptions[5];
assign enable_timexmmu = devoptions[6];
assign disable_spisd = devoptions[7];
assign disable_timexscr = devopts2[0];
assign disable_ulaplus = devopts2[1];
assign disable_radas = devopts2[2];
always @(posedge clk) begin
if (rst_n == 1'b0) begin
devoptions <= 8'h00; // or after a hardware reset (not implemented yet)
devopts2 <= 8'h00;
end
else if (zxuno_addr == DEVOPTIONS && zxuno_regwr == 1'b1)
devoptions <= din;
else if (zxuno_addr == DEVOPTS2 && zxuno_regwr == 1'b1)
devopts2 <= din;
end
always @* begin
oe_n = 1'b1;
dout = 8'hFF;
if (zxuno_regrd == 1'b1)
if (zxuno_addr == DEVOPTIONS) begin
oe_n = 1'b0;
dout = devoptions;
end
else if (zxuno_addr == DEVOPTS2) begin
oe_n = 1'b0;
dout = devopts2;
end
end
endmodule