... | ... |
@@ -3,7 +3,7 @@ |
3 | 3 |
TARG=bin/uxncli bin/uxnasm bin/uxnemu bin/chr2img |
4 | 4 |
USM=`{walk -f projects/ | grep '\.tal$' | grep -v blank.tal} |
5 | 5 |
ROM=${USM:%.tal=%.rom} |
6 |
-CFLAGS=$CFLAGS -I/sys/include/npe -I/sys/include/npe/SDL2 |
|
6 |
+CFLAGS=$CFLAGS -D__plan9__ -I/sys/include/npe -I/sys/include/npe/SDL2 |
|
7 | 7 |
HFILES=\ |
8 | 8 |
/sys/include/npe/stdio.h\ |
9 | 9 |
src/devices/apu.h\ |
... | ... |
@@ -1,11 +1,46 @@ |
1 |
-/* note: this is for Plan 9 only */ |
|
1 |
+#ifdef __plan9__ |
|
2 | 2 |
#include <u.h> |
3 | 3 |
#include <libc.h> |
4 | 4 |
#include <draw.h> |
5 | 5 |
#include <memdraw.h> |
6 |
+#else |
|
7 |
+#include <stdio.h> |
|
8 |
+#include <stdint.h> |
|
9 |
+#include <string.h> |
|
10 |
+#include <unistd.h> |
|
11 |
+#include <stdlib.h> |
|
12 |
+typedef uint8_t u8int; |
|
13 |
+typedef uint32_t u32int; |
|
14 |
+#define nil NULL |
|
15 |
+typedef struct { |
|
16 |
+}Memimage; |
|
17 |
+typedef struct { |
|
18 |
+ u32int *base; |
|
19 |
+ u8int *bdata; |
|
20 |
+}Memdata; |
|
21 |
+static char *argv0; |
|
22 |
+#define fprint(x, arg...) fprintf(stderr, arg) |
|
23 |
+#define exits(s) exit(s == NULL ? 0 : 1) |
|
24 |
+#define sysfatal(s) do{ fprintf(stderr, "error\n"); exit(1); }while(0) |
|
25 |
+#define ARGBEGIN \ |
|
26 |
+ for(((argv0=*argv)),argv++,argc--; \ |
|
27 |
+ argv[0] && argv[0][0]=='-' && argv[0][1]; \ |
|
28 |
+ argc--, argv++){ \ |
|
29 |
+ char *_args, _argc, *_argt; \ |
|
30 |
+ _args = &argv[0][1]; \ |
|
31 |
+ if(_args[0]=='-' && _args[1]==0){ \ |
|
32 |
+ argc--; argv++; break; \ |
|
33 |
+ } \ |
|
34 |
+ _argc = 0; \ |
|
35 |
+ while(*_args && (_argc = *_args++)) \ |
|
36 |
+ switch(_argc) |
|
37 |
+#define ARGEND }; |
|
38 |
+#define EARGF(x)\ |
|
39 |
+ (_argt=_args, _args="",\ |
|
40 |
+ (*_argt? _argt: argv[1]? (argc--, *++argv): ((x), abort(), (char*)0))) |
|
41 |
+#endif |
|
6 | 42 |
|
7 | 43 |
static int hor = 44, ver = 26, bpp = 1; |
8 |
-static int SZ; |
|
9 | 44 |
|
10 | 45 |
#define xy2n(x, y) ((y & 7) + (x/8 + y/8 * hor)*bpp*8) |
11 | 46 |
|
... | ... |
@@ -22,7 +57,7 @@ readall(int f, int *isz) |
22 | 57 |
bufsz *= 2; |
23 | 58 |
s = realloc(s, bufsz); |
24 | 59 |
} |
25 |
- if((n = readn(f, s+sz, bufsz-sz)) < 1) |
|
60 |
+ if((n = read(f, s+sz, bufsz-sz)) < 1) |
|
26 | 61 |
break; |
27 | 62 |
} |
28 | 63 |
if(n < 0 || sz < 1){ |
... | ... |
@@ -40,12 +75,52 @@ getcoli(int x, int y, u8int *p) |
40 | 75 |
int ch1, ch2, r; |
41 | 76 |
|
42 | 77 |
r = xy2n(x, y); |
43 |
- ch1 = (p[r+0] >> (7 - x & 7)) & 1; |
|
44 |
- ch2 = bpp < 2 ? 0 : (p[r+8] >> (7 - x & 7)) & 1; |
|
78 |
+ ch1 = (p[r+0] >> (7 - (x & 7))) & 1; |
|
79 |
+ ch2 = bpp < 2 ? 0 : (p[r+8] >> (7 - (x & 7))) & 1; |
|
45 | 80 |
|
46 | 81 |
return ch2<<1 | ch1; |
47 | 82 |
} |
48 | 83 |
|
84 |
+static int |
|
85 |
+writebmp(int w, int h, u32int *p) |
|
86 |
+{ |
|
87 |
+ u8int hd[14+40+4*4] = { |
|
88 |
+ 'B', 'M', |
|
89 |
+ 0, 0, 0, 0, /* file size */ |
|
90 |
+ 0, 0, |
|
91 |
+ 0, 0, |
|
92 |
+ 14+40+4*4, 0, 0, 0, /* pixel data offset */ |
|
93 |
+ 40+4*4, 0, 0, 0, /* BITMAPINFOHEADER */ |
|
94 |
+ w, w>>8, 0, 0, /* width */ |
|
95 |
+ h, h>>8, 0, 0, /* height */ |
|
96 |
+ 1, 0, /* color planes */ |
|
97 |
+ 32, 0, /* bpp = rgba */ |
|
98 |
+ 3, 0, 0, 0, /* no compression */ |
|
99 |
+ 0, 0, 0, 0, /* dummy raw size */ |
|
100 |
+ 0, 0, 0, 0, /* dummy hor ppm */ |
|
101 |
+ 0, 0, 0, 0, /* dummy ver ppm */ |
|
102 |
+ 0, 0, 0, 0, /* dummy num of colors */ |
|
103 |
+ 0, 0, 0, 0, /* dummy important colors */ |
|
104 |
+ 0, 0, 0, 0xff, |
|
105 |
+ 0, 0, 0xff, 0, |
|
106 |
+ 0, 0xff, 0, 0, |
|
107 |
+ 0xff, 0, 0, 0, |
|
108 |
+ }; |
|
109 |
+ int sz; |
|
110 |
+ |
|
111 |
+ sz = 14+40+4*4 + 4*w*h; |
|
112 |
+ hd[2] = sz; |
|
113 |
+ hd[3] = sz>>8; |
|
114 |
+ hd[4] = sz>>16; |
|
115 |
+ hd[5] = sz>>24; |
|
116 |
+ |
|
117 |
+ write(1, hd, sizeof(hd)); |
|
118 |
+ while(h-- >= 0) |
|
119 |
+ write(1, p+w*h, 4*w); |
|
120 |
+ |
|
121 |
+ return 0; |
|
122 |
+} |
|
123 |
+ |
|
49 | 124 |
static void |
50 | 125 |
usage(void) |
51 | 126 |
{ |
... | ... |
@@ -53,16 +128,16 @@ usage(void) |
53 | 128 |
exits("usage"); |
54 | 129 |
} |
55 | 130 |
|
56 |
-void |
|
131 |
+int |
|
57 | 132 |
main(int argc, char **argv) |
58 | 133 |
{ |
59 | 134 |
int sz, esz, h, w, x, y; |
60 | 135 |
Memimage *m; |
61 | 136 |
Memdata d; |
62 | 137 |
u8int *p; |
63 |
- ulong col[2][4] = { |
|
64 |
- {DWhite, DBlack, 0, 0}, |
|
65 |
- {DTransparent, DWhite, 0x72dec2ff, 0x666666ff}, |
|
138 |
+ u32int col[2][4] = { |
|
139 |
+ {0xffffffff, 0x000000ff, 0x000000ff, 0x000000ff}, |
|
140 |
+ {0xffffff00, 0xffffffff, 0x72dec2ff, 0x666666ff}, |
|
66 | 141 |
}; |
67 | 142 |
|
68 | 143 |
ARGBEGIN{ |
... | ... |
@@ -75,10 +150,10 @@ main(int argc, char **argv) |
75 | 150 |
case 'w': |
76 | 151 |
hor = atoi(EARGF(usage())); |
77 | 152 |
break; |
153 |
+ default: |
|
154 |
+ usage(); |
|
78 | 155 |
}ARGEND |
79 | 156 |
|
80 |
- memimageinit(); |
|
81 |
- |
|
82 | 157 |
if((p = readall(0, &sz)) == nil) |
83 | 158 |
sysfatal("%r"); |
84 | 159 |
|
... | ... |
@@ -92,17 +167,24 @@ main(int argc, char **argv) |
92 | 167 |
memset(&d, 0, sizeof(d)); |
93 | 168 |
if((d.base = malloc(4*w*h)) == nil) |
94 | 169 |
sysfatal("memory"); |
95 |
- d.bdata = (uchar*)d.base; |
|
170 |
+ d.bdata = (u8int*)d.base; |
|
96 | 171 |
|
97 | 172 |
for(y = 0; y < h; y++){ |
98 | 173 |
for(x = 0; x < w; x++) |
99 | 174 |
d.base[y*w + x] = col[bpp-1][getcoli(x, y, p)]; |
100 | 175 |
} |
101 | 176 |
|
177 |
+#ifdef __plan9__ |
|
178 |
+ memimageinit(); |
|
102 | 179 |
if((m = allocmemimaged(Rect(0, 0, w, h), RGBA32, &d)) == nil) |
103 | 180 |
sysfatal("%r"); |
104 | 181 |
if(writememimage(1, m) != 0) |
105 | 182 |
sysfatal("%r"); |
183 |
+#else |
|
184 |
+ (void)m; |
|
185 |
+ writebmp(w, h, d.base); |
|
186 |
+#endif |
|
106 | 187 |
|
107 | 188 |
exits(nil); |
189 |
+ return 0; |
|
108 | 190 |
} |