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