| ... | ... |
@@ -24,11 +24,12 @@ WITH REGARD TO THIS SOFTWARE. |
| 24 | 24 |
static FILE *f; |
| 25 | 25 |
static DIR *d; |
| 26 | 26 |
static char *current_filename = ""; |
| 27 |
+static struct dirent *de; |
|
| 28 |
+ |
|
| 27 | 29 |
static enum { IDLE,
|
| 28 | 30 |
FILE_READ, |
| 29 | 31 |
FILE_WRITE, |
| 30 | 32 |
DIR_READ } state; |
| 31 |
-static struct dirent *de; |
|
| 32 | 33 |
|
| 33 | 34 |
static void |
| 34 | 35 |
reset(void) |
| ... | ... |
@@ -80,7 +81,7 @@ file_read_dir(char *dest, Uint16 len) |
| 80 | 81 |
return p - dest; |
| 81 | 82 |
} |
| 82 | 83 |
|
| 83 |
-Uint16 |
|
| 84 |
+static Uint16 |
|
| 84 | 85 |
file_init(void *filename) |
| 85 | 86 |
{
|
| 86 | 87 |
reset(); |
| ... | ... |
@@ -88,7 +89,7 @@ file_init(void *filename) |
| 88 | 89 |
return 0; |
| 89 | 90 |
} |
| 90 | 91 |
|
| 91 |
-Uint16 |
|
| 92 |
+static Uint16 |
|
| 92 | 93 |
file_read(void *dest, Uint16 len) |
| 93 | 94 |
{
|
| 94 | 95 |
if(state != FILE_READ && state != DIR_READ) {
|
| ... | ... |
@@ -105,7 +106,7 @@ file_read(void *dest, Uint16 len) |
| 105 | 106 |
return 0; |
| 106 | 107 |
} |
| 107 | 108 |
|
| 108 |
-Uint16 |
|
| 109 |
+static Uint16 |
|
| 109 | 110 |
file_write(void *src, Uint16 len, Uint8 flags) |
| 110 | 111 |
{
|
| 111 | 112 |
Uint16 ret = 0; |
| ... | ... |
@@ -121,7 +122,7 @@ file_write(void *src, Uint16 len, Uint8 flags) |
| 121 | 122 |
return ret; |
| 122 | 123 |
} |
| 123 | 124 |
|
| 124 |
-Uint16 |
|
| 125 |
+static Uint16 |
|
| 125 | 126 |
file_stat(void *dest, Uint16 len) |
| 126 | 127 |
{
|
| 127 | 128 |
char *basename = strrchr(current_filename, '/'); |
| ... | ... |
@@ -132,8 +133,23 @@ file_stat(void *dest, Uint16 len) |
| 132 | 133 |
return get_entry(dest, len, current_filename, basename, 0); |
| 133 | 134 |
} |
| 134 | 135 |
|
| 135 |
-Uint16 |
|
| 136 |
+static Uint16 |
|
| 136 | 137 |
file_delete(void) |
| 137 | 138 |
{
|
| 138 | 139 |
return unlink(current_filename); |
| 139 | 140 |
} |
| 141 |
+ |
|
| 142 |
+/* API */ |
|
| 143 |
+ |
|
| 144 |
+void |
|
| 145 |
+file_deo(Device *d, Uint8 port) |
|
| 146 |
+{
|
|
| 147 |
+ switch(port) {
|
|
| 148 |
+ case 0x1: d->vector = peek16(d->dat, 0x0); break; |
|
| 149 |
+ case 0x9: poke16(d->dat, 0x2, file_init(&d->mem[peek16(d->dat, 0x8)])); break; |
|
| 150 |
+ case 0xd: poke16(d->dat, 0x2, file_read(&d->mem[peek16(d->dat, 0xc)], peek16(d->dat, 0xa))); break; |
|
| 151 |
+ case 0xf: poke16(d->dat, 0x2, file_write(&d->mem[peek16(d->dat, 0xe)], peek16(d->dat, 0xa), d->dat[0x7])); break; |
|
| 152 |
+ case 0x5: poke16(d->dat, 0x2, file_stat(&d->mem[peek16(d->dat, 0x4)], peek16(d->dat, 0xa))); break; |
|
| 153 |
+ case 0x6: poke16(d->dat, 0x2, file_delete()); break; |
|
| 154 |
+ } |
|
| 155 |
+} |
|
| 140 | 156 |
\ No newline at end of file |
| ... | ... |
@@ -10,8 +10,4 @@ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
| 10 | 10 |
WITH REGARD TO THIS SOFTWARE. |
| 11 | 11 |
*/ |
| 12 | 12 |
|
| 13 |
-Uint16 file_init(void *filename); |
|
| 14 |
-Uint16 file_read(void *dest, Uint16 len); |
|
| 15 |
-Uint16 file_write(void *src, Uint16 len, Uint8 flags); |
|
| 16 |
-Uint16 file_stat(void *dest, Uint16 len); |
|
| 17 |
-Uint16 file_delete(void); |
|
| 13 |
+void file_deo(Device *d, Uint8 port); |
|
| 18 | 14 |
\ No newline at end of file |
| ... | ... |
@@ -76,19 +76,6 @@ console_deo(Device *d, Uint8 port) |
| 76 | 76 |
write(port - 0x7, (char *)&d->dat[port], 1); |
| 77 | 77 |
} |
| 78 | 78 |
|
| 79 |
-static void |
|
| 80 |
-file_deo(Device *d, Uint8 port) |
|
| 81 |
-{
|
|
| 82 |
- switch(port) {
|
|
| 83 |
- case 0x1: d->vector = peek16(d->dat, 0x0); break; |
|
| 84 |
- case 0x9: poke16(d->dat, 0x2, file_init(&d->mem[peek16(d->dat, 0x8)])); break; |
|
| 85 |
- case 0xd: poke16(d->dat, 0x2, file_read(&d->mem[peek16(d->dat, 0xc)], peek16(d->dat, 0xa))); break; |
|
| 86 |
- case 0xf: poke16(d->dat, 0x2, file_write(&d->mem[peek16(d->dat, 0xe)], peek16(d->dat, 0xa), d->dat[0x7])); break; |
|
| 87 |
- case 0x5: poke16(d->dat, 0x2, file_stat(&d->mem[peek16(d->dat, 0x4)], peek16(d->dat, 0xa))); break; |
|
| 88 |
- case 0x6: poke16(d->dat, 0x2, file_delete()); break; |
|
| 89 |
- } |
|
| 90 |
-} |
|
| 91 |
- |
|
| 92 | 79 |
static Uint8 |
| 93 | 80 |
datetime_dei(Device *d, Uint8 port) |
| 94 | 81 |
{
|
| ... | ... |
@@ -291,27 +291,14 @@ screen_deo(Device *d, Uint8 port) |
| 291 | 291 |
Uint8 *addr = &d->mem[peek16(d->dat, 0xc)]; |
| 292 | 292 |
Uint8 twobpp = !!(d->dat[0xf] & 0x80); |
| 293 | 293 |
ppu_blit(&ppu, layer, x, y, addr, d->dat[0xf] & 0xf, d->dat[0xf] & 0x10, d->dat[0xf] & 0x20, twobpp); |
| 294 |
- if(d->dat[0x6] & 0x04) poke16(d->dat, 0xc, peek16(d->dat, 0xc) + 8 + twobpp*8); /* auto addr+8 / auto addr+16 */ |
|
| 295 |
- if(d->dat[0x6] & 0x01) poke16(d->dat, 0x8, x + 8); /* auto x+8 */ |
|
| 296 |
- if(d->dat[0x6] & 0x02) poke16(d->dat, 0xa, y + 8); /* auto y+8 */ |
|
| 294 |
+ if(d->dat[0x6] & 0x04) poke16(d->dat, 0xc, peek16(d->dat, 0xc) + 8 + twobpp * 8); /* auto addr+8 / auto addr+16 */ |
|
| 295 |
+ if(d->dat[0x6] & 0x01) poke16(d->dat, 0x8, x + 8); /* auto x+8 */ |
|
| 296 |
+ if(d->dat[0x6] & 0x02) poke16(d->dat, 0xa, y + 8); /* auto y+8 */ |
|
| 297 | 297 |
break; |
| 298 | 298 |
} |
| 299 | 299 |
} |
| 300 | 300 |
} |
| 301 | 301 |
|
| 302 |
-static void |
|
| 303 |
-file_deo(Device *d, Uint8 port) |
|
| 304 |
-{
|
|
| 305 |
- switch(port) {
|
|
| 306 |
- case 0x1: d->vector = peek16(d->dat, 0x0); break; |
|
| 307 |
- case 0x9: poke16(d->dat, 0x2, file_init(&d->mem[peek16(d->dat, 0x8)])); break; |
|
| 308 |
- case 0xd: poke16(d->dat, 0x2, file_read(&d->mem[peek16(d->dat, 0xc)], peek16(d->dat, 0xa))); break; |
|
| 309 |
- case 0xf: poke16(d->dat, 0x2, file_write(&d->mem[peek16(d->dat, 0xe)], peek16(d->dat, 0xa), d->dat[0x7])); break; |
|
| 310 |
- case 0x5: poke16(d->dat, 0x2, file_stat(&d->mem[peek16(d->dat, 0x4)], peek16(d->dat, 0xa))); break; |
|
| 311 |
- case 0x6: poke16(d->dat, 0x2, file_delete()); break; |
|
| 312 |
- } |
|
| 313 |
-} |
|
| 314 |
- |
|
| 315 | 302 |
static Uint8 |
| 316 | 303 |
audio_dei(Device *d, Uint8 port) |
| 317 | 304 |
{
|