Compare commits

...

2 Commits

2 changed files with 10 additions and 7 deletions

View File

@ -3,14 +3,16 @@
#define BLK 0x200
typedef struct{FILE*f;W z,s;}Disk;
Disk ds[3]; B w; W a;
Disk ds[3]; B w; W a, b;
V disk_open(B i,IM C*n){FILE*f=xopen(n,"r+b");fseek(f,0,SEEK_END),ds[i].z=ftell(f),fseek(f,0,SEEK_SET),ds[i].s=0,ds[i].f=f;}
V disk_create(B i,IM C*n,W z){FILE*f=xopen(n,"w+b");fseek(f,1024*z-1,SEEK_SET),fputc(0,f),ds[i].z=z,fseek(ds[i].f=f,0,SEEK_SET),ds[i].s=0;}
V disk_close(B i){Disk d=ds[i];Q(d.f,d.z=0,fclose(d.f))}
V disk_open(B i,IM C*n){FILE*f=xopen(n,"r+b");fseek(f,0,SEEK_END),ds[i].z=ftell(f),rewind(f),ds[i].s=0,ds[i].f=f;}
V disk_create(B i,IM C*n,W z){FILE*f=xopen(n,"w+b");fseek(f,1024*z-1,SEEK_SET),fputc(0,f),ds[i].z=z,rewind(ds[i].f=f),ds[i].s=0;}
V disk_close(B i){Disk d=ds[i];Q(d.f,fclose(d.f),d.z=0,d.f=0)}
V disk_closeall(V){disk_close(1),disk_close(2),disk_close(3);}
DEV(disk_which,(w=x),(R w))
#define UA "disk %d unavailable",w
DEV(disk_which,(Q(3>x&&ds[x].f,w=x)OR w=-1),(R w))
DEV(disk_size,((V)x),(R ds[w].z))
DEV(disk_seek,(fseek(ds[w].f,BLK*(ds[w].s=x),SEEK_SET)),(R ds[w].s))
DEV(disk_read,(a=fread(mem+x,1,BLK,ds[w].f)),(R a))
DEV(disk_seek,(FILE*f;N(f=ds[w].f,die(UA))fseek(f,BLK*(ds[w].s=x),SEEK_SET)),(R ds[w].s))
DEV(disk_read,(FILE*f;N(f=ds[w].f,die(UA))a=fread(mem+x,1,BLK,f),printf("read %d\n",a)),(R a))
DEV(disk_write,(FILE*f;N(f=ds[w].f,die(UA))b=fwrite(mem+x,1,BLK,f),fflush(f),printf("writ %d\n",b)),(R b))

View File

@ -4,6 +4,7 @@ X(io_disk_which)
X(io_disk_size)
X(io_disk_seek)
X(io_disk_read)
X(io_disk_write)
X(io_display_pal)
X(io_display_pos)
X(io_display_blit)