mirror of
https://github.com/romychs/SprinterJoy.git
synced 2025-04-18 18:12:42 +03:00
93 lines
2.4 KiB
Systemverilog
93 lines
2.4 KiB
Systemverilog
//
|
|
// Sprinter
|
|
// Интерфейс Sega-джойстиков для ISA шины
|
|
//
|
|
module SprinterJoy (
|
|
|
|
// Сигналы шины ISA
|
|
input wire clk14, // 14MHz ISA Clock
|
|
//input wire clk50, // 50MHz Oscillator Clock
|
|
|
|
input wire reset, // ISA RESET
|
|
input wire ior_n, // ISA -IOR
|
|
|
|
input wire [11:0] a, // ISA A0-A15
|
|
inout wire [7:0] d, // ISA D0-D7
|
|
|
|
input wire [5:0] sj1, // Sega Joystick 1
|
|
// 0 - UP
|
|
// 1 - DN
|
|
// 2 - LT
|
|
// 3 - RT
|
|
// 4 - B
|
|
// 5 - C
|
|
output wire sj1_sel, // Sega Joystick SEL sygnal
|
|
|
|
input wire [5:0] sj2, // Sega Joystick 2
|
|
output wire sj2_sel // Sega Joystick 2 SEL sygnal
|
|
|
|
);
|
|
|
|
|
|
reg [11:0] sj1_status;
|
|
reg [1:0] sj1_type;
|
|
|
|
reg [11:0] sj2_status;
|
|
reg [1:0] sj2_type;
|
|
|
|
//reg [5:0] sj_dbg;
|
|
|
|
reg [7:0] d_out; // выходные данные
|
|
|
|
assign d[7:0] = (port_r) ? d_out : 8'hzz;
|
|
|
|
reg sj_clk;
|
|
reg port_r;
|
|
|
|
|
|
ClockGenerator clockGenerator(
|
|
.clk(clk14),
|
|
.reset(reset),
|
|
.sj_clk(sj_clk)
|
|
);
|
|
|
|
SegaJoy segaJoy(
|
|
.clk(sj_clk),
|
|
.reset(reset),
|
|
.sel1(sj1_sel),
|
|
.sel2(sj2_sel),
|
|
.sj1(sj1),
|
|
.sj2(sj2),
|
|
.status1(sj1_status),
|
|
.status2(sj2_status),
|
|
.sj_type1(sj1_type),
|
|
.sj_type2(sj2_type)
|
|
);
|
|
|
|
|
|
always_ff @ (posedge clk14, posedge reset)
|
|
if (reset) begin
|
|
port_r <= 0;
|
|
|
|
end else begin
|
|
if (a[11:2] == 10'b0010010100) begin // Выбран порт 0x250..0x253
|
|
|
|
port_r <= !ior_n;
|
|
if (port_r) begin
|
|
case (a[1:0])
|
|
//2'b00: d_out <= 8'h5D; // Порт 250 - 'SD' = Sega Joy, для детекта карты
|
|
2'b00: d_out <= sj1_status[7:0]; // Порт 250 - Младший байт состояния кнопок
|
|
2'b01: d_out <= {sj1_type, 2'b00, sj1_status[11:8]}; // Порт 251 - Старший байт состояния кнопок (биты 7 и 6 - тип джойстика)
|
|
2'b10: d_out <= sj2_status[7:0]; // Порт 252 - Младший байт состояния кнопок
|
|
2'b11: d_out <= {sj2_type, 2'b00, sj2_status[11:8]}; // Порт 253 - Старший байт состояния кнопок (биты 7 и 6 - тип джойстика)
|
|
//default:
|
|
// d_out <= 8'h00;
|
|
endcase;
|
|
end;
|
|
end else begin
|
|
port_r <= 0;
|
|
end
|
|
end
|
|
|
|
endmodule
|