yayacemu/yayacemu.sv

66 lines
2.1 KiB
Systemverilog
Raw Normal View History

2024-01-31 01:54:35 +00:00
module yayacemu (
2024-01-31 17:04:55 +00:00
input wire clk_in
2024-01-31 01:54:35 +00:00
);
wire [31:0] vram [0:2047];
bit [7:0] memory [0:4095];
wire [7:0] registers [0:15];
2024-01-31 17:04:55 +00:00
logic [3:0] stack_pointer;
wire [15:0] stack [0:15];
2024-01-31 18:05:04 +00:00
logic [7:0] delay_timer;
logic [7:0] sound_timer;
2024-01-31 19:09:58 +00:00
bit keyboard [15:0];
2024-01-31 18:05:04 +00:00
int cycle_counter;
2024-01-31 19:09:58 +00:00
bit halt;
int watch_key;
2024-01-31 17:04:55 +00:00
logic [15:0] index_reg;
2024-01-31 19:53:10 +00:00
bit [7:0] rand_num;
2024-01-31 01:54:35 +00:00
logic rom_ready;
2024-01-31 17:04:55 +00:00
logic [15:0] program_counter;
2024-01-31 01:54:35 +00:00
2024-01-31 20:50:26 +00:00
bit [7:0] fontset [79:0];
2024-01-31 19:53:10 +00:00
randomizer randy(clk_in, program_counter, keyboard, cycle_counter, rand_num);
2024-01-31 19:09:58 +00:00
keyboard kb(clk_in, keyboard);
2024-01-31 01:54:35 +00:00
rom_loader rl (memory, rom_ready);
cpu cpu (memory, clk_in, keyboard, rand_num, vram, stack, index_reg, stack_pointer, registers, delay_timer, sound_timer, cycle_counter, program_counter, halt, watch_key);
beeper beeper(sound_timer);
gpu gpu (vram);
2024-01-31 01:54:35 +00:00
2024-01-31 19:09:58 +00:00
int i;
2024-01-31 01:54:35 +00:00
initial begin
2024-01-31 20:50:26 +00:00
fontset = {
8'hF0, 8'h90, 8'h90, 8'h90, 8'hF0, // 0
8'h20, 8'h60, 8'h20, 8'h20, 8'h70, // 1
8'hF0, 8'h10, 8'hF0, 8'h80, 8'hF0, // 2
8'hF0, 8'h10, 8'hF0, 8'h10, 8'hF0, // 3
8'h90, 8'h90, 8'hF0, 8'h10, 8'h10, // 4
8'hF0, 8'h80, 8'hF0, 8'h10, 8'hF0, // 5
8'hF0, 8'h80, 8'hF0, 8'h90, 8'hF0, // 6
8'hF0, 8'h10, 8'h20, 8'h40, 8'h40, // 7
8'hF0, 8'h90, 8'hF0, 8'h90, 8'hF0, // 8
8'hF0, 8'h90, 8'hF0, 8'h10, 8'hF0, // 9
8'hF0, 8'h90, 8'hF0, 8'h90, 8'h90, // A
8'hE0, 8'h90, 8'hE0, 8'h90, 8'hE0, // B
8'hF0, 8'h80, 8'h80, 8'h80, 8'hF0, // C
8'hE0, 8'h90, 8'h90, 8'h90, 8'hE0, // D
8'hF0, 8'h80, 8'hF0, 8'h80, 8'hF0, // E
8'hF0, 8'h80, 8'hF0, 8'h80, 8'h80 // F
};
2024-01-31 19:09:58 +00:00
watch_key = 255;
halt = 0;
2024-01-31 20:50:26 +00:00
for(i = 0; i < 80; i++) begin
memory[i] = fontset[i];
end
2024-01-31 19:09:58 +00:00
for(i = 0; i < 15; i++) begin
keyboard[i] = 0;
end
2024-01-31 18:05:04 +00:00
sound_timer = 0;
delay_timer = 0;
cycle_counter = 0;
2024-01-31 17:04:55 +00:00
program_counter = 'h200;
stack_pointer = 4'b0000;
2024-01-31 01:54:35 +00:00
end
endmodule