commit 3b1da29

Devine Lu Linvega  ·  2026-01-07 18:22:41 +0000 UTC
parent bd6b2e9
Connected file devices
1 files changed,  +26, -21
+26, -21
 1@@ -1040,15 +1040,25 @@ void screen_deo_y(void) { rY = (dev[0x2a] << 8) | dev[0x2b], rY = TWOS(rY); }
 2 void screen_deo_addr(void) { rA = (dev[0x2c] << 8) | dev[0x2d]; }
 3 void screen_deo_pixel(void) { screen_draw_pixel(); }
 4 void screen_deo_sprite(void) { screen_draw_sprite(); }
 5-
 6 void controller_deo_vector(void) { controller_vector = PEEK2(&dev[0x80]); }
 7 void mouse_deo_vector(void) { mouse_vector = PEEK2(&dev[0x90]); }
 8-
 9+void filea_deo_vector(void) { rL1 = PEEK2(&dev[0xaa]); }
10+void filea_deo_stat(void) { file_success(0xa2, file_stat(0, PEEK2(&dev[0xa4]), rL1)); }
11+void filea_deo_delete(void) { file_success(0xa2, file_delete(0)); }
12+void filea_deo_name(void) { file_success(0xa2, file_init(0, PEEK2(&dev[0xa8]))); }
13+void filea_deo_read(void) { file_success(0xa2, file_read(0, PEEK2(&dev[0xac]), rL1)); }
14+void filea_deo_write(void) { file_success(0xa2, file_write(0, PEEK2(&dev[0xae]), rL1, dev[0xa7])); }
15+void fileb_deo_vector(void) { rL1 = PEEK2(&dev[0xba]); }
16+void fileb_deo_stat(void) { file_success(0xb2, file_stat(0, PEEK2(&dev[0xb4]), rL1)); }
17+void fileb_deo_delete(void) { file_success(0xb2, file_delete(0)); }
18+void fileb_deo_name(void) { file_success(0xb2, file_init(0, PEEK2(&dev[0xb8]))); }
19+void fileb_deo_read(void) { file_success(0xb2, file_read(0, PEEK2(&dev[0xbc]), rL1)); }
20+void fileb_deo_write(void) { file_success(0xb2, file_write(0, PEEK2(&dev[0xbe]), rL1, dev[0xb7])); }
21 
22 /* clang-format on */
23 
24 void
25-init_devices(void)
26+emu_connect(void)
27 {
28 	/* DEI */
29 	dei_handlers[0x04] = system_dei_wst;
30@@ -1103,6 +1113,18 @@ init_devices(void)
31 	deo_handlers[0x2f] = screen_deo_sprite;
32 	deo_handlers[0x81] = controller_deo_vector;
33 	deo_handlers[0x91] = mouse_deo_vector;
34+	deo_handlers[0xab] = filea_deo_vector;
35+	deo_handlers[0xa5] = filea_deo_stat;
36+	deo_handlers[0xa6] = filea_deo_delete;
37+	deo_handlers[0xa9] = filea_deo_name;
38+	deo_handlers[0xad] = filea_deo_read;
39+	deo_handlers[0xaf] = filea_deo_write;
40+	deo_handlers[0xbb] = filea_deo_vector;
41+	deo_handlers[0xb5] = filea_deo_stat;
42+	deo_handlers[0xb6] = filea_deo_delete;
43+	deo_handlers[0xb9] = filea_deo_name;
44+	deo_handlers[0xbd] = filea_deo_read;
45+	deo_handlers[0xbf] = filea_deo_write;
46 }
47 
48 Uint8
49@@ -1121,23 +1143,6 @@ emu_deo(const Uint8 port, const Uint8 value)
50 		deo_handlers[port]();
51 		return;
52 	}
53-
54-	switch(port) {
55-	/* File 1 */
56-	case 0xab: rL1 = PEEK2(&dev[0xaa]); return;
57-	case 0xa5: file_success(0xa2, file_stat(0, PEEK2(&dev[0xa4]), rL1)); return;
58-	case 0xa6: file_success(0xa2, file_delete(0)); return;
59-	case 0xa9: file_success(0xa2, file_init(0, PEEK2(&dev[0xa8]))); return;
60-	case 0xad: file_success(0xa2, file_read(0, PEEK2(&dev[0xac]), rL1)); return;
61-	case 0xaf: file_success(0xa2, file_write(0, PEEK2(&dev[0xae]), rL1, dev[0xa7])); return;
62-	/* File 2 */
63-	case 0xbb: rL2 = PEEK2(&dev[0xba]); return;
64-	case 0xb5: file_success(0xb2, file_stat(1, PEEK2(&dev[0xb4]), rL2)); return;
65-	case 0xb6: file_success(0xb2, file_delete(1)); return;
66-	case 0xb9: file_success(0xb2, file_init(1, PEEK2(&dev[0xb8]))); return;
67-	case 0xbd: file_success(0xb2, file_read(1, PEEK2(&dev[0xbc]), rL2)); return;
68-	case 0xbf: file_success(0xb2, file_write(1, PEEK2(&dev[0xbe]), rL2, dev[0xb7])); return;
69-	}
70 }
71 
72 void
73@@ -1328,7 +1333,7 @@ int
74 main(int argc, char **argv)
75 {
76 	int i = 1;
77-	init_devices();
78+	emu_connect();
79 	if(argc == 2 && argv[1][0] == '-' && argv[1][1] == 'v')
80 		return !fprintf(stdout, "%s - Varvara Emulator, 7 Jan 2026.\n", argv[0]);
81 	else if(argc == 1)