Indentation formatting fix.

This commit is contained in:
2026-05-22 07:37:32 +02:00
parent b3ed78097c
commit 4b77405ba4
3 changed files with 85 additions and 87 deletions
+41 -41
View File
@@ -5,54 +5,54 @@ import "core:log"
// System struct, init, constants, fontset // System struct, init, constants, fontset
System :: struct { System :: struct {
// 4kb ram // 4kb ram
memory: [4096]u8, memory: [4096]u8,
// 16 general purpose 8bit registers 0 -> F // 16 general purpose 8bit registers 0 -> F
v: [16]u8, v: [16]u8,
// Call stack, up to 16, 2 byte addresses. // Call stack, up to 16, 2 byte addresses.
stack: [16]u16, stack: [16]u16,
// Stack pointer // Stack pointer
sp: u8, sp: u8,
// index register // index register
i: u16, i: u16,
// PC program counter // PC program counter
pc: u16, pc: u16,
// 64x32-pixel monochrome display // 64x32-pixel monochrome display
display: [32][64]u8, display: [32][64]u8,
keypad: [16]bool, keypad: [16]bool,
delay_timer: u8, delay_timer: u8,
sound_timer: u8, sound_timer: u8,
} }
FONT_SET := [80]u8 { FONT_SET := [80]u8 {
0xF0, 0x90, 0x90, 0x90, 0xF0, // 0 0xF0, 0x90, 0x90, 0x90, 0xF0, // 0
0x20, 0x60, 0x20, 0x20, 0x70, // 1 0x20, 0x60, 0x20, 0x20, 0x70, // 1
0xF0, 0x10, 0xF0, 0x80, 0xF0, // 2 0xF0, 0x10, 0xF0, 0x80, 0xF0, // 2
0xF0, 0x10, 0xF0, 0x10, 0xF0, // 3 0xF0, 0x10, 0xF0, 0x10, 0xF0, // 3
0x90, 0x90, 0xF0, 0x10, 0x10, // 4 0x90, 0x90, 0xF0, 0x10, 0x10, // 4
0xF0, 0x80, 0xF0, 0x10, 0xF0, // 5 0xF0, 0x80, 0xF0, 0x10, 0xF0, // 5
0xF0, 0x80, 0xF0, 0x90, 0xF0, // 6 0xF0, 0x80, 0xF0, 0x90, 0xF0, // 6
0xF0, 0x10, 0x20, 0x40, 0x40, // 7 0xF0, 0x10, 0x20, 0x40, 0x40, // 7
0xF0, 0x90, 0xF0, 0x90, 0xF0, // 8 0xF0, 0x90, 0xF0, 0x90, 0xF0, // 8
0xF0, 0x90, 0xF0, 0x10, 0xF0, // 9 0xF0, 0x90, 0xF0, 0x10, 0xF0, // 9
0xF0, 0x90, 0xF0, 0x90, 0x90, // A 0xF0, 0x90, 0xF0, 0x90, 0x90, // A
0xE0, 0x90, 0xE0, 0x90, 0xE0, // B 0xE0, 0x90, 0xE0, 0x90, 0xE0, // B
0xF0, 0x80, 0x80, 0x80, 0xF0, // C 0xF0, 0x80, 0x80, 0x80, 0xF0, // C
0xE0, 0x90, 0x90, 0x90, 0xE0, // D 0xE0, 0x90, 0x90, 0x90, 0xE0, // D
0xF0, 0x80, 0xF0, 0x80, 0xF0, // E 0xF0, 0x80, 0xF0, 0x80, 0xF0, // E
0xF0, 0x80, 0xF0, 0x80, 0x80 // F 0xF0, 0x80, 0xF0, 0x80, 0x80 // F
} }
init :: proc() -> System { init :: proc() -> System {
log.info("Booting chip 8 cpu") log.info("Booting chip 8 cpu")
// Structs are zero initialized so timers, sp etc are good. // Structs are zero initialized so timers, sp etc are good.
s := System { pc = 0x200 } s := System { pc = 0x200 }
// load fonts into the memory // load fonts into the memory
for v, i in FONT_SET { for v, i in FONT_SET {
s.memory[i] = v s.memory[i] = v
} }
return s return s
} }
+12 -14
View File
@@ -6,22 +6,20 @@ import "core:log"
import "core:os" import "core:os"
load_rom :: proc(s: ^System, file_path: string) -> os.Error { load_rom :: proc(s: ^System, file_path: string) -> os.Error {
log.info("Loading rom from file") log.info("Loading rom from file")
data, read_err := os.read_entire_file(file_path, context.allocator) data, read_err := os.read_entire_file(file_path, context.allocator)
if read_err != os.ERROR_NONE { if read_err != os.ERROR_NONE {
log.errorf("failed to read rom %v", read_err) log.errorf("failed to read rom %v", read_err)
return read_err return read_err
} }
defer delete(data) defer delete(data)
for byte,i in data { for byte,i in data {
s.memory[0x200 + i] = byte s.memory[0x200 + i] = byte
} }
log.infof("First few bytes: %X %X %X %X", s.memory[0x200], s.memory[0x201], s.memory[0x202], s.memory[0x203]) log.infof("First few bytes: %X %X %X %X", s.memory[0x200], s.memory[0x201], s.memory[0x202], s.memory[0x203])
return nil return nil
} }
+32 -32
View File
@@ -8,44 +8,44 @@ import chip "machine"
DEV :: #config(DEV, false) DEV :: #config(DEV, false)
main :: proc() { main :: proc() {
context.logger = log.create_console_logger() context.logger = log.create_console_logger()
defer log.destroy_console_logger(context.logger) defer log.destroy_console_logger(context.logger)
when DEV { when DEV {
track: mem.Tracking_Allocator track: mem.Tracking_Allocator
mem.tracking_allocator_init(&track, context.allocator) mem.tracking_allocator_init(&track, context.allocator)
defer mem.tracking_allocator_destroy(&track) defer mem.tracking_allocator_destroy(&track)
context.allocator = mem.tracking_allocator(&track) context.allocator = mem.tracking_allocator(&track)
} }
// Init the Chip 8 "cpu" // Init the Chip 8 "cpu"
system := chip.init() system := chip.init()
// load rom, hardcoded for now, will eventually be cli or gui // load rom, hardcoded for now, will eventually be cli or gui
// err := chip.load_rom(&system, "./2-ibm-logo.ch8") // err := chip.load_rom(&system, "./2-ibm-logo.ch8")
err := chip.load_rom(&system, "./1-chip8-logo.ch8") err := chip.load_rom(&system, "./1-chip8-logo.ch8")
if err != nil { if err != nil {
panic("failed to load rom!") panic("failed to load rom!")
} }
// start the cycle // start the cycle
chip.run_system(&system) chip.run_system(&system)
when DEV { when DEV {
if len(track.allocation_map) > 0 { if len(track.allocation_map) > 0 {
log.errorf("\nMEMORY LEAKS: %v allocation(s)", len(track.allocation_map)) log.errorf("\nMEMORY LEAKS: %v allocation(s)", len(track.allocation_map))
for _, entry in track.allocation_map { for _, entry in track.allocation_map {
log.errorf(" %v bytes @ %v", entry.size, entry.location) log.errorf(" %v bytes @ %v", entry.size, entry.location)
} }
} }
if len(track.bad_free_array) > 0 { if len(track.bad_free_array) > 0 {
log.errorf("\nBAD FREES: %v", len(track.bad_free_array)) log.errorf("\nBAD FREES: %v", len(track.bad_free_array))
for entry in track.bad_free_array { for entry in track.bad_free_array {
log.errorf(" %v @ %v", entry.memory, entry.location) log.errorf(" %v @ %v", entry.memory, entry.location)
} }
} }
} }
} }