| ... | ... |
@@ -8,8 +8,9 @@ |
| 8 | 8 |
;size { width 2 height 2 }
|
| 9 | 9 |
|
| 10 | 10 |
|0100 ;System { vector 2 pad 6 r 2 g 2 b 2 }
|
| 11 |
+|0110 ;Console { vector 2 pad 6 char 1 byte 1 short 2 string 2 }
|
|
| 11 | 12 |
|0120 ;Screen { vector 2 width 2 height 2 pad 2 x 2 y 2 addr 2 color 1 }
|
| 12 |
-|0170 ;File { vector 2 pad 6 name 2 length 2 load 2 save 2 }
|
|
| 13 |
+|0170 ;File { vector 2 result 2 offset 2 pad 2 name 2 length 2 load 2 save 2 }
|
|
| 13 | 14 |
|
| 14 | 15 |
( program ) |
| 15 | 16 |
|
| ... | ... |
@@ -27,6 +28,7 @@ |
| 27 | 28 |
#0010 #0010 #0020 #0010 #25 ,dvd_icn ,draw-icn JSR2 |
| 28 | 29 |
|
| 29 | 30 |
( load ) ,filepath =File.name #4000 =File.length ,img =File.load |
| 31 |
+ ~File.result =Console.short |
|
| 30 | 32 |
|
| 31 | 33 |
BRK |
| 32 | 34 |
|
| ... | ... |
@@ -219,23 +219,25 @@ file_poke(Uxn *u, Uint16 ptr, Uint8 b0, Uint8 b1) |
| 219 | 219 |
Uint8 *m = u->ram.dat; |
| 220 | 220 |
char *name = (char *)&m[(m[ptr + 8] << 8) + m[ptr + 8 + 1]]; |
| 221 | 221 |
Uint16 length = mempeek16(u, ptr + 8 + 2); |
| 222 |
- Uint16 offset = mempeek16(u, ptr + 2); |
|
| 222 |
+ Uint16 offset = mempeek16(u, ptr + 4); |
|
| 223 | 223 |
if(b0 == 0x0d) {
|
| 224 | 224 |
Uint16 addr = (m[ptr + 8 + 4] << 8) + b1; |
| 225 | 225 |
FILE *f = fopen(name, "r"); |
| 226 |
- if(f && fseek(f, offset, SEEK_SET) != -1 && fread(&m[addr], length, 1, f)) {
|
|
| 226 |
+ if(f && fseek(f, offset, SEEK_SET) != -1 && (length = fread(&m[addr], 1, length, f))) {
|
|
| 227 | 227 |
fclose(f); |
| 228 | 228 |
printf("Loaded %d bytes, at %04x from %s\n", length, addr, name);
|
| 229 |
- evaluxn(u, mempeek16(u, devfile->addr)); |
|
| 230 |
- } |
|
| 229 |
+ } else |
|
| 230 |
+ length = 0; |
|
| 231 |
+ mempoke16(u, ptr + 2, length); |
|
| 231 | 232 |
} else if(b0 == 0x0f) {
|
| 232 | 233 |
Uint16 addr = (m[ptr + 8 + 6] << 8) + b1; |
| 233 | 234 |
FILE *f = fopen(name, (m[ptr + 2] & 0x1) ? "a" : "w"); |
| 234 |
- if(f && fseek(f, offset, SEEK_SET) != -1 && fwrite(&m[addr], length, 1, f)) {
|
|
| 235 |
+ if(f && fseek(f, offset, SEEK_SET) != -1 && (length = fwrite(&m[addr], 1, length, f))) {
|
|
| 235 | 236 |
fclose(f); |
| 236 | 237 |
printf("Saved %d bytes, at %04x from %s\n", length, addr, name);
|
| 237 |
- evaluxn(u, mempeek16(u, devfile->addr)); |
|
| 238 |
- } |
|
| 238 |
+ } else |
|
| 239 |
+ length = 0; |
|
| 240 |
+ mempoke16(u, ptr + 2, length); |
|
| 239 | 241 |
} |
| 240 | 242 |
return b1; |
| 241 | 243 |
} |