54 lines
1.5 KiB
Zig
54 lines
1.5 KiB
Zig
const std = @import("std");
|
|
const cpu = @import("cpu.zig");
|
|
const Display = @import("display.zig").Display;
|
|
const c = @cImport(@cInclude("SDL.h"));
|
|
|
|
const WIDTH = 64;
|
|
const HEIGHT = 32;
|
|
|
|
|
|
pub fn main() anyerror!void {
|
|
_ = c.SDL_Init(c.SDL_INIT_VIDEO);
|
|
defer c.SDL_Quit();
|
|
|
|
const window = c.SDL_CreateWindow("CHIP-8", c.SDL_WINDOWPOS_CENTERED, c.SDL_WINDOWPOS_CENTERED, WIDTH, HEIGHT, c.SDL_WINDOW_OPENGL);
|
|
defer c.SDL_DestroyWindow(window);
|
|
|
|
const renderer = c.SDL_CreateRenderer(window, -1, c.SDL_RENDERER_ACCELERATED);
|
|
defer c.SDL_DestroyRenderer(renderer);
|
|
|
|
const texture = c.SDL_CreateTexture(renderer, c.SDL_PIXELFORMAT_RGBA8888, c.SDL_TEXTUREACCESS_STATIC, WIDTH, HEIGHT);
|
|
defer c.SDL_DestroyTexture(texture);
|
|
|
|
|
|
var zig8 = cpu.Cpu {
|
|
.i = 0x00,
|
|
.pc = 0x200,
|
|
.sp = 0x00,
|
|
.v = [_]u8{0x00} ** 16,
|
|
.stack = [_]u16{0x00} ** 16,
|
|
.memory = [_]u8{0x0000} ** 0x1000,
|
|
.disp = Display.new(),
|
|
};
|
|
|
|
try cpu.load_rom_path(&zig8, "./bin/IBM Logo.ch8");
|
|
|
|
const size = WIDTH * HEIGHT * @sizeOf(u32);
|
|
var pixels: [size]u8 = [_]u8 {0xFF} ** size;
|
|
|
|
|
|
emuloop: while(true) {
|
|
var event: c.SDL_Event = undefined;
|
|
|
|
while(c.SDL_PollEvent(&event) != 0) {
|
|
switch(event.type) {
|
|
c.SDL_QUIT => break :emuloop,
|
|
else => {}
|
|
}
|
|
}
|
|
|
|
var c_ptr = @ptrCast(*const c_void, &pixels);
|
|
|
|
_ = c.SDL_UpdateTexture(texture, null, c_ptr, WIDTH * @sizeOf(u32));
|
|
}
|
|
} |