commit 0500e2d
Devine Lu Linvega
·
2026-01-08 23:13:36 +0000 UTC
parent b72cfa7
Fixed issue with fileb, added static flags
1 files changed,
+58,
-70
+58,
-70
1@@ -32,9 +32,7 @@ static Window emu_win;
2 static XImage *emu_img;
3 static int emu_x11;
4 static int emu_timer;
5-
6 static Uint8 *ram, dev[0x100], ptr[2], stk[2][0x100];
7-
8 static Uint8 emu_dei(const Uint8 port);
9 static void emu_deo(const Uint8 port, const Uint8 value);
10
11@@ -186,38 +184,29 @@ system_deo_expansion(void)
12 {
13 const Uint16 exp = PEEK2(dev + 2);
14 Uint8 *aptr = ram + exp;
15- Uint16 length = PEEK2(aptr + 1), limit;
16+ Uint16 length = PEEK2(aptr + 1);
17 unsigned int bank = PEEK2(aptr + 3) * 0x10000;
18 unsigned int addr = PEEK2(aptr + 5);
19 if(ram[exp] == 0x0) {
20 unsigned int dst_value = ram[exp + 7];
21 if(bank < BANKS_CAP)
22 memset(ram + bank + addr, dst_value, length);
23- } else if(ram[exp] == 0x1) {
24- unsigned int dst_bank = PEEK2(aptr + 7) * 0x10000;
25- unsigned int dst_addr = PEEK2(aptr + 9);
26- Uint16 a = addr, c = dst_addr;
27- if(bank < BANKS_CAP && dst_bank < BANKS_CAP)
28- for(limit = a + length; a != limit; c++, a++)
29- ram[dst_bank + c] = ram[bank + a];
30- } else if(ram[exp] == 0x2) {
31+ } else if(ram[exp] == 1 || ram[exp] == 2) {
32 unsigned int dst_bank = PEEK2(aptr + 7) * 0x10000;
33 unsigned int dst_addr = PEEK2(aptr + 9);
34- Uint16 a = addr + length - 1, c = dst_addr + length - 1;
35 if(bank < BANKS_CAP && dst_bank < BANKS_CAP)
36- for(limit = addr - 1; a != limit; a--, c--)
37- ram[dst_bank + c] = ram[bank + a];
38+ memmove(ram + dst_bank + dst_addr, ram + bank + addr, length);
39 } else
40 fprintf(stderr, "Unknown command: %s\n", &ram[exp]);
41 }
42
43 /* clang-format off */
44
45-Uint8 system_dei_wst(void) { return ptr[0]; }
46-Uint8 system_dei_rst(void) { return ptr[1]; }
47-void system_deo_wst(void) { ptr[0] = dev[4]; }
48-void system_deo_rst(void) { ptr[0] = dev[4]; }
49-void system_deo_print(void) { system_print("WST", 0), system_print("RST", 1); }
50+static Uint8 system_dei_wst(void) { return ptr[0]; }
51+static Uint8 system_dei_rst(void) { return ptr[1]; }
52+static void system_deo_wst(void) { ptr[0] = dev[4]; }
53+static void system_deo_rst(void) { ptr[0] = dev[4]; }
54+static void system_deo_print(void) { system_print("WST", 0), system_print("RST", 1); }
55
56 /* clang-format on */
57
58@@ -418,13 +407,13 @@ console_close(void)
59
60 /* clang-format off */
61
62-Uint8 console_dei_childlive(void) { check_child(); return dev[CMD_LIVE]; }
63-Uint8 console_dei_childexit(void) { check_child(); return dev[CMD_EXIT]; }
64-void console_deo_vector(void) { console_vector = PEEK2(&dev[0x10]); }
65-void console_deo_stdout(void) { fputc(dev[0x18], stdout), fflush(stdout); }
66-void console_deo_stderr(void) { fputc(dev[0x19], stderr), fflush(stderr); }
67-void console_deo_hb(void) { fprintf(stderr, "%02x", dev[0x1a]); }
68-void console_deo_lb(void) { fprintf(stderr, "%02x", dev[0x1b]); }
69+static Uint8 console_dei_childlive(void) { check_child(); return dev[CMD_LIVE]; }
70+static Uint8 console_dei_childexit(void) { check_child(); return dev[CMD_EXIT]; }
71+static void console_deo_vector(void) { console_vector = PEEK2(&dev[0x10]); }
72+static void console_deo_stdout(void) { fputc(dev[0x18], stdout), fflush(stdout); }
73+static void console_deo_stderr(void) { fputc(dev[0x19], stderr), fflush(stderr); }
74+static void console_deo_hb(void) { fprintf(stderr, "%02x", dev[0x1a]); }
75+static void console_deo_lb(void) { fprintf(stderr, "%02x", dev[0x1b]); }
76
77 /* clang-format on */
78
79@@ -432,13 +421,12 @@ void console_deo_lb(void) { fprintf(stderr, "%02x", dev[0x1b]); }
80 @|Screen ------------------------------------------------------------ */
81
82 static int screen_zoom = 1;
83-
84-static Uint8 *screen_layers;
85 static int screen_width, screen_height, screen_wmar2, screen_hmar2;
86 static int screen_reqsize, screen_reqdraw;
87 static int screen_x1, screen_y1, screen_x2, screen_y2;
88 static int screen_vector, *screen_pixels, screen_palette[16];
89 static int rX, rY, rA, rMX, rMY, rMA, rML, rDX, rDY;
90+static Uint8 *screen_layers;
91
92 static const Uint8 blending[16][2][4] = {
93 {{0, 0, 1, 2}, {0, 0, 4, 8}},
94@@ -650,19 +638,19 @@ screen_deo_sprite(void)
95
96 /* clang-format off */
97
98-Uint8 screen_dei_rxhb(void) { return rX >> 8; }
99-Uint8 screen_dei_rxlb(void) { return rX; }
100-Uint8 screen_dei_ryhb(void) { return rY >> 8; }
101-Uint8 screen_dei_rylb(void) { return rY; }
102-Uint8 screen_dei_rahb(void) { return rA >> 8; }
103-Uint8 screen_dei_ralb(void) { return rA; }
104-void screen_deo_vector(void) { screen_vector = PEEK2(&dev[0x20]); }
105-void screen_deo_width(void) { screen_resize(PEEK2(&dev[0x22]) & 0xfff, screen_height & 0xfff); }
106-void screen_deo_height(void) { screen_resize(screen_width & 0xfff, PEEK2(&dev[0x24]) & 0xfff); }
107-void screen_deo_auto(void) { rMX = dev[0x26] & 0x1, rMY = dev[0x26] & 0x2, rMA = dev[0x26] & 0x4, rML = dev[0x26] >> 4, rDX = rMX << 3, rDY = rMY << 2; }
108-void screen_deo_x(void) { rX = (dev[0x28] << 8) | dev[0x29], rX = TWOS(rX); }
109-void screen_deo_y(void) { rY = (dev[0x2a] << 8) | dev[0x2b], rY = TWOS(rY); }
110-void screen_deo_addr(void) { rA = (dev[0x2c] << 8) | dev[0x2d]; }
111+static Uint8 screen_dei_rxhb(void) { return rX >> 8; }
112+static Uint8 screen_dei_rxlb(void) { return rX; }
113+static Uint8 screen_dei_ryhb(void) { return rY >> 8; }
114+static Uint8 screen_dei_rylb(void) { return rY; }
115+static Uint8 screen_dei_rahb(void) { return rA >> 8; }
116+static Uint8 screen_dei_ralb(void) { return rA; }
117+static void screen_deo_vector(void) { screen_vector = PEEK2(&dev[0x20]); }
118+static void screen_deo_width(void) { screen_resize(PEEK2(&dev[0x22]) & 0xfff, screen_height & 0xfff); }
119+static void screen_deo_height(void) { screen_resize(screen_width & 0xfff, PEEK2(&dev[0x24]) & 0xfff); }
120+static void screen_deo_auto(void) { rMX = dev[0x26] & 0x1, rMY = dev[0x26] & 0x2, rMA = dev[0x26] & 0x4, rML = dev[0x26] >> 4, rDX = rMX << 3, rDY = rMY << 2; }
121+static void screen_deo_x(void) { rX = (dev[0x28] << 8) | dev[0x29], rX = TWOS(rX); }
122+static void screen_deo_y(void) { rY = (dev[0x2a] << 8) | dev[0x2b], rY = TWOS(rY); }
123+static void screen_deo_addr(void) { rA = (dev[0x2c] << 8) | dev[0x2d]; }
124
125 /* clang-format on */
126
127@@ -990,18 +978,18 @@ file_success(unsigned int port, unsigned int value)
128
129 /* clang-format off */
130
131-void filea_deo_vector(void) { rL1 = PEEK2(&dev[0xaa]); }
132-void filea_deo_stat(void) { file_success(0xa2, file_stat(0, PEEK2(&dev[0xa4]), rL1)); }
133-void filea_deo_delete(void) { file_success(0xa2, file_delete(0)); }
134-void filea_deo_name(void) { file_success(0xa2, file_init(0, PEEK2(&dev[0xa8]))); }
135-void filea_deo_read(void) { file_success(0xa2, file_read(0, PEEK2(&dev[0xac]), rL1)); }
136-void filea_deo_write(void) { file_success(0xa2, file_write(0, PEEK2(&dev[0xae]), rL1, dev[0xa7])); }
137-void fileb_deo_vector(void) { rL2 = PEEK2(&dev[0xba]); }
138-void fileb_deo_stat(void) { file_success(0xb2, file_stat(1, PEEK2(&dev[0xb4]), rL2)); }
139-void fileb_deo_delete(void) { file_success(0xb2, file_delete(1)); }
140-void fileb_deo_name(void) { file_success(0xb2, file_init(1, PEEK2(&dev[0xb8]))); }
141-void fileb_deo_read(void) { file_success(0xb2, file_read(1, PEEK2(&dev[0xbc]), rL2)); }
142-void fileb_deo_write(void) { file_success(0xb2, file_write(1, PEEK2(&dev[0xbe]), rL2, dev[0xb7])); }
143+static void filea_deo_vector(void) { rL1 = PEEK2(&dev[0xaa]); }
144+static void filea_deo_stat(void) { file_success(0xa2, file_stat(0, PEEK2(&dev[0xa4]), rL1)); }
145+static void filea_deo_delete(void) { file_success(0xa2, file_delete(0)); }
146+static void filea_deo_name(void) { file_success(0xa2, file_init(0, PEEK2(&dev[0xa8]))); }
147+static void filea_deo_read(void) { file_success(0xa2, file_read(0, PEEK2(&dev[0xac]), rL1)); }
148+static void filea_deo_write(void) { file_success(0xa2, file_write(0, PEEK2(&dev[0xae]), rL1, dev[0xa7])); }
149+static void fileb_deo_vector(void) { rL2 = PEEK2(&dev[0xba]); }
150+static void fileb_deo_stat(void) { file_success(0xb2, file_stat(1, PEEK2(&dev[0xb4]), rL2)); }
151+static void fileb_deo_delete(void) { file_success(0xb2, file_delete(1)); }
152+static void fileb_deo_name(void) { file_success(0xb2, file_init(1, PEEK2(&dev[0xb8]))); }
153+static void fileb_deo_read(void) { file_success(0xb2, file_read(1, PEEK2(&dev[0xbc]), rL2)); }
154+static void fileb_deo_write(void) { file_success(0xb2, file_write(1, PEEK2(&dev[0xbe]), rL2, dev[0xb7])); }
155
156 /* clang-format on */
157
158@@ -1024,17 +1012,17 @@ datetime_update(void)
159
160 /* clang-format off */
161
162-Uint8 datetime_dei_yhb(void) { datetime_update(); return (datetime_t->tm_year + 1900) >> 8; }
163-Uint8 datetime_dei_ylb(void) { datetime_update(); return (datetime_t->tm_year + 1900); }
164-Uint8 datetime_dei_mon(void) { datetime_update(); return datetime_t->tm_mon; }
165-Uint8 datetime_dei_day(void) { datetime_update(); return datetime_t->tm_mday; }
166-Uint8 datetime_dei_hou(void) { datetime_update(); return datetime_t->tm_hour; }
167-Uint8 datetime_dei_min(void) { datetime_update(); return datetime_t->tm_min; }
168-Uint8 datetime_dei_sec(void) { datetime_update(); return datetime_t->tm_sec; }
169-Uint8 datetime_dei_wday(void) { datetime_update(); return datetime_t->tm_wday; }
170-Uint8 datetime_dei_ydayhb(void) { datetime_update(); return datetime_t->tm_yday >> 8; }
171-Uint8 datetime_dei_ydaylb(void) { datetime_update(); return datetime_t->tm_yday; }
172-Uint8 datetime_dei_dst(void) { datetime_update(); return datetime_t->tm_isdst; }
173+static Uint8 datetime_dei_yhb(void) { datetime_update(); return (datetime_t->tm_year + 1900) >> 8; }
174+static Uint8 datetime_dei_ylb(void) { datetime_update(); return (datetime_t->tm_year + 1900); }
175+static Uint8 datetime_dei_mon(void) { datetime_update(); return datetime_t->tm_mon; }
176+static Uint8 datetime_dei_day(void) { datetime_update(); return datetime_t->tm_mday; }
177+static Uint8 datetime_dei_hou(void) { datetime_update(); return datetime_t->tm_hour; }
178+static Uint8 datetime_dei_min(void) { datetime_update(); return datetime_t->tm_min; }
179+static Uint8 datetime_dei_sec(void) { datetime_update(); return datetime_t->tm_sec; }
180+static Uint8 datetime_dei_wday(void) { datetime_update(); return datetime_t->tm_wday; }
181+static Uint8 datetime_dei_ydayhb(void) { datetime_update(); return datetime_t->tm_yday >> 8; }
182+static Uint8 datetime_dei_ydaylb(void) { datetime_update(); return datetime_t->tm_yday; }
183+static Uint8 datetime_dei_dst(void) { datetime_update(); return datetime_t->tm_isdst; }
184
185 /* clang-format on */
186
187@@ -1102,12 +1090,12 @@ static const deo_handler deo_handlers[256] = {
188 [0xa9] = filea_deo_name,
189 [0xad] = filea_deo_read,
190 [0xaf] = filea_deo_write,
191- [0xbb] = filea_deo_vector,
192- [0xb5] = filea_deo_stat,
193- [0xb6] = filea_deo_delete,
194- [0xb9] = filea_deo_name,
195- [0xbd] = filea_deo_read,
196- [0xbf] = filea_deo_write};
197+ [0xbb] = fileb_deo_vector,
198+ [0xb5] = fileb_deo_stat,
199+ [0xb6] = fileb_deo_delete,
200+ [0xb9] = fileb_deo_name,
201+ [0xbd] = fileb_deo_read,
202+ [0xbf] = fileb_deo_write};
203
204 #define CONINBUFSIZE 256
205