diff options
author | Bad Diode <bd@badd10de.dev> | 2021-05-21 18:17:45 +0200 |
---|---|---|
committer | Bad Diode <bd@badd10de.dev> | 2021-05-21 18:17:45 +0200 |
commit | 0cfa96f83d6c44b318cc0da0ec98e8e3bc97f7f9 (patch) | |
tree | 301ef7d1f928e399a6951850a0c39299316fe303 /src | |
parent | 872faecf9660cc2469aa5586f81639f7986b6b8f (diff) | |
download | uxngba-0cfa96f83d6c44b318cc0da0ec98e8e3bc97f7f9.tar.gz uxngba-0cfa96f83d6c44b318cc0da0ec98e8e3bc97f7f9.zip |
Add file_talk function
Diffstat (limited to 'src')
-rw-r--r-- | src/main.c | 53 |
1 files changed, 27 insertions, 26 deletions
@@ -102,6 +102,29 @@ datetime_talk(Device *d, Uint8 b0, Uint8 w) { | |||
102 | } | 102 | } |
103 | 103 | ||
104 | void | 104 | void |
105 | file_talk(Device *d, Uint8 b0, Uint8 w) { | ||
106 | Uint8 read = b0 == 0xd; | ||
107 | txt_printf("FILE TALK\n"); // DEBUG: Remove when done | ||
108 | if(w && (read || b0 == 0xf)) { | ||
109 | char *name = (char *)&d->mem[mempeek16(d->dat, 0x8)]; | ||
110 | Uint16 result = 0, length = mempeek16(d->dat, 0xa); | ||
111 | Uint16 offset = mempeek16(d->dat, 0x4); | ||
112 | Uint16 addr = mempeek16(d->dat, b0 - 1); | ||
113 | int file_idx = fs_open_file(name); | ||
114 | if (file_idx >= 0) { | ||
115 | if (read) { | ||
116 | txt_printf("READING\n"); // DEBUG: Remove when done | ||
117 | result = fs_read(&d->mem[addr], length, file_idx, offset); | ||
118 | } else { | ||
119 | txt_printf("WRITING\n"); // DEBUG: Remove when done | ||
120 | result = fs_write(&d->mem[addr], length, file_idx, offset, offset > 0); | ||
121 | } | ||
122 | } | ||
123 | mempoke16(d->dat, 0x2, result); | ||
124 | } | ||
125 | } | ||
126 | |||
127 | void | ||
105 | init_uxn(Uxn *u) { | 128 | init_uxn(Uxn *u) { |
106 | // Initialize PPU. | 129 | // Initialize PPU. |
107 | initppu(&ppu, 30, 20, 0); | 130 | initppu(&ppu, 30, 20, 0); |
@@ -120,7 +143,7 @@ init_uxn(Uxn *u) { | |||
120 | portuxn(u, 0x7, "---", nil_talk); | 143 | portuxn(u, 0x7, "---", nil_talk); |
121 | devctrl = portuxn(u, 0x8, "controller", nil_talk); | 144 | devctrl = portuxn(u, 0x8, "controller", nil_talk); |
122 | devmouse = portuxn(u, 0x9, "mouse", nil_talk); | 145 | devmouse = portuxn(u, 0x9, "mouse", nil_talk); |
123 | portuxn(u, 0xa, "---", nil_talk); | 146 | portuxn(u, 0xa, "file", file_talk); |
124 | portuxn(u, 0xb, "datetime", datetime_talk); | 147 | portuxn(u, 0xb, "datetime", datetime_talk); |
125 | portuxn(u, 0xc, "---", nil_talk); | 148 | portuxn(u, 0xc, "---", nil_talk); |
126 | portuxn(u, 0xd, "---", nil_talk); | 149 | portuxn(u, 0xd, "---", nil_talk); |
@@ -248,6 +271,9 @@ EWRAM_BSS | |||
248 | static Uint8 umem[65536]; | 271 | static Uint8 umem[65536]; |
249 | 272 | ||
250 | int main(void) { | 273 | int main(void) { |
274 | // Initialize filesystem. | ||
275 | fs_init(); | ||
276 | |||
251 | // Register interrupts. | 277 | // Register interrupts. |
252 | irq_init(); | 278 | irq_init(); |
253 | irs_set(IRQ_VBLANK, irs_stub); | 279 | irs_set(IRQ_VBLANK, irs_stub); |
@@ -267,31 +293,6 @@ int main(void) { | |||
267 | }, &ppu.fg); | 293 | }, &ppu.fg); |
268 | txt_position(0,0); | 294 | txt_position(0,0); |
269 | 295 | ||
270 | fs_init(); | ||
271 | |||
272 | // DEBUG:... | ||
273 | int file_idx; | ||
274 | char tmp_buffer[KB(1)] = {0}; | ||
275 | if ((file_idx = fs_open_file("HELLO_FILE")) >= 0) { | ||
276 | fs_write("HEY", 3, file_idx, 0, false); | ||
277 | fs_write("THERE", 3, file_idx, 1, true); | ||
278 | txt_printf("file name: %s\n", filesystem.files[file_idx].name); | ||
279 | txt_printf("file size: %d\n", filesystem.files[file_idx].size); | ||
280 | if (fs_read(&tmp_buffer, filesystem.files[file_idx].size, file_idx, 0) > 0) { | ||
281 | txt_printf("READ: %s\n", tmp_buffer); | ||
282 | } | ||
283 | } | ||
284 | if ((file_idx = fs_open_file("HELLO_FOLKS")) >= 0) { | ||
285 | fs_write("AAAAAA", 6, file_idx, 0, false); | ||
286 | fs_write("XXX", 3, file_idx, 1, true); | ||
287 | txt_printf("file name: %s\n", filesystem.files[file_idx].name); | ||
288 | txt_printf("file size: %d\n", filesystem.files[file_idx].size); | ||
289 | if (fs_read(&tmp_buffer, filesystem.files[file_idx].size - 1, file_idx, 1) > 0) { | ||
290 | txt_printf("READ: %s\n", tmp_buffer); | ||
291 | } | ||
292 | } | ||
293 | txt_printf("num files: %d\n", filesystem.num_files); | ||
294 | |||
295 | // Main loop. | 296 | // Main loop. |
296 | int frame_counter = 0; | 297 | int frame_counter = 0; |
297 | evaluxn(&u, 0x0100); | 298 | evaluxn(&u, 0x0100); |