use std use sdl const winwidth = 960 const winheight = 480 const scrwidth = 64 const scrheight = 32 const scrsz = scrwidth * scrheight const memsz = 4096 const stksz = 16 const regsz = 16 const clrscr = {b, n var i for i = 0; i < n; i++; b#[i] = 0 ;; } const loadprg = {b, fname var fd, i, buf match std.open(fname, std.Oread) | `std.Ok(n): fd = n | `std.Err(errno): std.die(std.fmt("could not open {}\n", fname)) ;; buf = std.slalloc(0xfff - 0x200) match std.read(fd, buf) | `std.Ok(n): for i = 0; i < 0xfff - 0x200; i++; b#[i + 0x200] = (buf[i] : uint8) ;; | `std.Err(n): std.die(std.fmt("could not read {}\n", fname)) ;; } const main = { var win, r, tex sdl.init(sdl.INIT_VIDEO) win = sdl.mkwin(("chip\0" : byte#), sdl.WIN_POS_UNSPEC, sdl.WIN_POS_UNSPEC, winwidth, winheight, sdl.WIN_OPENGL) r = sdl.mkrenderer(win, -1, sdl.RENDERER_ACCEL) tex = sdl.mktexture(r, sdl.PIXFMT_RGB332, sdl.TEXACCESS_STREAM, 64, 32) var gfx : uint8[scrsz] var mem : uint8[memsz] var reg : uint8[regsz] var stk : uint16[stksz] var I : uint16 var pc : uint16 var sp : uint16 var delay : uint8 var sound : uint8 clrscr(&gfx, scrsz) loadprg(&mem, "/home/jakob/Airplane.ch8") sdl.update(tex, (gfx[:] : void#), 64) sdl.copy(r, tex) sdl.present(r) sdl.freerenderer(r) sdl.freewin(win) sdl.quit() }