-
Notifications
You must be signed in to change notification settings - Fork 3
/
TODO
138 lines (100 loc) · 3.61 KB
/
TODO
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
TO BE DONE in LibDSK 1.5.x:
- [Apple] Improve resource fork / MacBinary support in DC42 driver.
- [QRST5] Reverse decompression of QRST5 file.
- [Apple] Handle at least basic support of 400k and 800k MFS / HFS filesystems
FUTURE LibDSK 1.9.x:
- Redefine DSK_GEOMETRY (breaking change):
typedef struct dsk_zone
{
dsk_pcyl_t dz_cylfrom; /* Cylinder / head ranges */
dsk_pcyl_t dz_cylto; /* Zone applies if */
dsk_phead_t dz_headfrom; /* cyl / head fall within */
dsk_phead_t dz_headto; /* the range */
dsk_psect_t dz_sectors;
dsk_psect_t dz_secbase;
size_t dz_secsize;
dsk_rate_t dz_datarate;
dsk_gap_t dz_rwgap;
dsk_gap_t dz_fmtgap;
dsk_recmode_t dz_recmode;
dsk_flags_t dz_flags; /* Formerly part of recmode */
int dz_nomulti;
int dz_noskip;
} DSK_ZONE;
typedef struct struct dsk_geometry
{
dsk_sides_t dg_sidedness;
dsk_pcyl_t dg_cylinders;
dsk_phead_t dg_heads;
int dg_zonecount;
DSK_ZONE dg_zone[1];
} DSK_GEOMETRY;
will need:
dsk_geometry_alloc(int zones);
dsk_geometry_clone()
Serialisation format for GEO2 block in LDBS
new ini file format:
[Type]
Description = foo
Sidedness = Alt
Cylinders = 40
Heads = 2
Zones = 2
Sectors[0] = 8 # Sectors[0]= abbreviates to Sectors=
Sectors[1] = 9
etc.
- [CopyQM] Use real CopyQM on real hardware to image some DOS-format
floppies so I can see the BPB.
- [CPCEMU] Debug the new LDBS-style driver:
* Need to try on a few more test cases. extextdsk tests all seem
to pass; would be nice to try some old-style DSKs too.
- The cpcemu driver contains a chunk of code to deal with multitrack reads
and writes. Write some test cases to exercise it, and check that the LDBS
common driver behaves the same way.
- Partition support.
It looks as if the way to do it is to have a filter driver.
Something like
dsk_err_t dsk_part_open(DSK_PDRIVER *guest,
DSK_PDRIVER host,
DSK_GEOMETRY *dg,
int npartition);
This requires:
- Reference-counting on the host. Either fail dsk_close()
if its refcount is > 1, or let it succeed silently.
Once dsk_part_open() is in place, we can also allow partitions to
be passed as filenames:
partition:n,filename
which will have a dsk_open that:
* passes filename to inner dsk_open
* do a dsk_getgeom
* pass the resulting parameters to dsk_part_open
Also: False partition (ie, add a partition table to an image)
dsk_err_t dsk_false_partition(DSK_PDRIVER *guest,
DSK_PDRIVER host,
DSK_GEOMETRY *dg,
unsigned char type);
with matching open-by-filename:
falsepart:n,filename
The alternative to a filter driver is dsk_option_set with a variable
of PARTITION, but that has certain problems (eg: you can't have
multiple partitions open at one time)
[nb: What sort of partition table do the likes of +3e use, because
that's going to give all sorts more fun]
* Weak-sector support is new and may be buggy.
* Write more functions for dsktool.
* The INT25/INT26 driver doesn't seem to work in a DJGPP compile; it fails
with error 0x701F.
* The INT25/INT26 driver keeps spitting out diagnostic messages.
* dskid doesn't work on a DFS .DSK file. Why? Because get_id doesn't fail?
* Support for DMK file format.
* Java support for the Reporter classes is buggy [seems to work now 11-5-2003]
* Plugin architecture:
dsk_register_driver
dsk_register_compression
dsk_register_remote
* Support remoting libdsk...
>> May need to write a PCW backend that dances on the controller
rather than using decorum and the XBIOS.
>> May need to write a Win16 version of serslave.
>> May need to write a Win16 RPC client.
* CopyQM: Compare to real BBC Master 512 disks 2-4.