diff options
Diffstat (limited to 'main.myr')
| -rw-r--r-- | main.myr | 72 |
1 files changed, 58 insertions, 14 deletions
@@ -1,29 +1,73 @@ 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 - var pixels : uint8[64 * 32] sdl.init(sdl.INIT_VIDEO) - win = sdl.mkwin(("chip\0" : byte#), sdl.WIN_POS_UNSPEC, sdl.WIN_POS_UNSPEC, 640, 480, sdl.WIN_OPENGL) + 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 i - for i = 0; i < 64 * 32; i++; - if std.rand(0, 2) == 1 - pixels[i] = 255 - else - pixels[i] = 0 - ;; - ;; + 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) - sdl.update(tex, (pixels[:] : void#), 64) + loadprg(&mem, "/home/jakob/Airplane.ch8") + + sdl.update(tex, (gfx[:] : void#), 64) sdl.copy(r, tex) sdl.present(r) - - sdl.delay(10000) - + sdl.freerenderer(r) sdl.freewin(win) sdl.quit() |