1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
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()
}
|