-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathreadme.txt
executable file
·439 lines (336 loc) · 17.5 KB
/
readme.txt
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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
'3e': Utility for handing files in a memory card formatted for a +3E
enhanced Spectrum. Version 0.5alpha.
(C)2009-2012 Miguel Angel Rodriguez Jodar (mcleod_ideafix). GPL Licensed.
For support, please check http://www.zxprojects.com
CHANGELOG
January, 14, 2012
- Added a small utility, hdf2hdf256 to assist converting 8-bit HDF files
into HDF256 format, so "3e" can handle it correctly. It's a single C file
you can comple with: gcc -O hdf2hdf256 hdf2hdf256.c . Windows executable
is included.
January, 8, 2012
- Fixed an inconsistency with return values for the backend mode. Now the
front-end won't treat as an error if the image file is not a HDF file, but
RAW.
- Changed the scheme for device file names for Windows. Instead of using
the \\.\letter: scheme, which is valid for memory cards with no
partitions, the "scan" command now returns the device file name of the
physical disk, which is \\.\PhysicalDriveN with N being 0,1,2,etc.
- Initial support for shared disks (disks with a standard IBM partition table
where the first one is a "unused/unkown" partition, where the PLUSIDEDOS
volume resides). USE WITH CAUTION. The partition type used for detecting
the presence of an IDEPLUSDOS disk inside a partition is type 0x7F, as
suggested by Garry Lancaster at:
http://www.worldofspectrum.org/zxplus3e/sharingdisks.html
- Initial support for halved size sector disks. It can now handle an HDF image
file with halved sectors. USE WITH CAUTION
August, 2, 2009.
- Fixed an issue with get_partition_table. When the number of partitions * 64
is not a integer multiple of 512, the read fails, if issued against a physical
device.
July, 30, 2009.
- Fixed an issue with full length names in get_file.
- PC filename is now always lowercase.
- NEW! Added "scan" support for Linux.
July, 27, 2009. v0.3alpha
- Fixed a subtle error when calculating file size for storing a file
and displaying the directory.
- NEW! Added support for transferring DSK images to a partition. Just
like it's currently being done with TAP files. See "USAGE". Standard
DSK files are supported (1 side, 1024 bytes per block, 40 tracks, all
the tracks the same size.)
July, 26, 2009. v0.2alpha
- Added more conditional compiling.
- Added -bare and -backend command line options to some commands
so output is suitable for post-processing, through scripts or
front-end applications.
- Added partition name support. Now, a file within the memory
card / disk file can be refered using the notation partname:filename
where partname is the name (not the number) of the partition the
file resides in.
- Added the "scan" command (only Windows at the moment). Scans through
all driver letters looking for disks with a PLUSIDEDOS partition table
and shows the results. Useful for front-end applications and users who
cannot figure which special file to work with.
July, 23, 2009.
- Added a little of conditional compiling to better
support Linux. Now should compile straightforward with:
gcc -o 3e 3e.c
- Compiles flawesly on Windows with MinGW32 (tested on C-Free 4)
Forget about the issue with tempnam... ;)
- Fixed an issue with big partition tables that led to a GPF.
- Better HDF image file support. Now I can detect whether halved size
sectors are being used or not, and calculate the correct offset to
the raw data (uses to be 128, but with HDF specification 1.1 this
changes. (thanks Velesoft for providing this information :)
July, 22, 2009.
Version 0.1 alpha. First publicy available version.
Works on Windows 7. Should work on previous versions (Vista & XP).
Should also work on Linux, but not yet tested.
USAGE
Usage: 3e image_file command [args...]
image_file can be a HDF image file, a RAW image file, or a physicall device.
For the later, you must known by advance the block device file for your device.
(Use the scan command to find out detected block device files).
On Linux, block devices are named /dev/sda, /dev/sdb, etc. Issue a 'dmesg'
command right after inserting your memory card to find out which special file
the kernel assigns to your device. You must have read/write permissions on that
file.
On Windows, block devices for installed drives can be accessed using this
notation (*): \\.\D: where D: is the drive letter Windows assigns to your card
upon inserting it. Don't forget to CANCEL any attempt to format your memory
card, as Windows thinks it needs formatting. Remember, DON'T format.
* Use the "scan" command to obtain the newer, recommended, device file name
for accessing the memory card from Windows.
Commands:
scan [-backend [-sep:N]]. Scans disks looking for PLUSIDEDOS partition tables.
showptable [-backend [-sep:N | -bare]. Shows PLUSIDEDOS partition table.
showpentry part [-backend]. Shows details about partition "part"
(only +3DOS filesystem supported.)
dir part [-backend -sep:N | -bare]. Shows directory for partition "part"
(only +3DOS filesystem supported.)
get part:file [dest_path] . Gets a file from a +3DOS filesystem and
copies it to the current directory on your PC.
dest_path is optional path for destination file. Must end with \
put file part:file . Writes a file from your PC to a file in
the selected partition.
putbin file part:file [start] . Writes a file from your PC to a file in
the selected partition, and adds a +3DOS header.
puttap tapfile part . Scans a TAP file and writes all files within it to the
specified partition with the correct +3DOS header for each one.
Headerless blocks are named after the original file name, and
adding 1,2,.. as extension.
putdsk dskfile part . Read the contents of a DSK image file (standard DSK)
and transfers all its files to the selected partition.
del part:file . Deletes a file in the selected partition.
The "part" argument may refer to a partition number (as numbered by the
showptable command) or a partition name. In this last case, the name is
case sensitive.
The -backend option of some commands performs formatted output suitable for
reading it from a front-end application. See FRONTEND.TXT for details.
The -bare option of some commands performs formatted output suitable
for processing it from a batch file or script.
Extra arguments in commands are ignored.
(C)2009 Miguel Angel Rodriguez Jodar (mcleod_ideafix) http://www.zxprojects.com
GPL Licensed.
Filenames to be used within the +3DOS filesystem are somewhat "sanitized" so
any extraneous character is changed to a '_'.
BUGS
The sep:N command option is not yet implemented (see FRONTEND.TXT).
Being alpha software, it's expected that a lot of bugs are floating around.
At this moment, it does not do any consistency check about the filesystem,
so any command that reads or writes to a corrupt filesystem is likely to fail
with some random error.
Support for HDF image files is very limited. The program uses an HDF file just
like a RAW image file or a physical device. It only takes into account that HDF
files has a 128 byte header, which is completly ignored.
Support for physical devices is left upon the operating system. There's no
special provision to assure that all disk access are made on a sector frontier,
nor there's any checks to ensure all disk operations read or write whole
sectors. In addition, support for these devices are limited to those that
allows LBA addressing, and has a sector size of 512.
There's no support for physical devices with uses only 8 bits when should use
16 (some cheap interfaces) nor there's support for the so-called HDF256.
EXAMPLES (Windows, see examples for Linux below)
- Find out what PLUSIDEDOS drives are available on the system:
C:\>3e scan
Detected PLUSIDEDOS partition table on \\.\M: . Size: 61 MB
- Shows the partition table on a memory card detected as drive M:
C:\>3e \\.\m: showptable
Disk geometry (C/H/S): 491/2/128
PARTITION TABLE
# Name Type C/H begin C/H end LBA Begin LBA End Size
------------------------------------------------------------------------------
0 PLUSIDEDOS System 0/ 0 0/ 0 0 127 0 MB
1 juegos +3DOS C: 0/ 1 128/ 0 128 32895 16 MB
2 utils +3DOS D: 128/ 1 256/ 0 32896 65663 16 MB
3 swap Swap 256/ 1 272/ 0 65664 69759 2 MB
4 chica +3DOS 272/ 1 280/ 0 69760 71807 1 MB
5 ---------------- FREE 280/ 1 490/ 1 71808 125695 26 MB
2 partition entries remain unassigned.
The drive letter next to +3DOS in some partitions means that the partition is
permanently mapped to that drive letter. This mapping can be controlled by the
command MOVE drive_letter IN partition, and MOVE drive_letter OUT (see +3E
manual).
- Shows details about partition #1 (named "juegos")
C:\>3e \\.\m: showpentry 1
Also this command can be issued as:
C:\>3e \\.\m: showpentry juegos
DETAILS FOR PARTITION: juegos
Type: +3DOS mapped to C:
First LBA address: 128
Last LBA address: 32895
Size (MBytes): 16 MB
Reserved bytes from begining of partition: 0
Block size: 8192 bytes
Directory entries: 512
Offset to data area (directory size): 4000h
Data size for this filesystem: 16711680 bytes.
XDBP parms:
SPT : 512 BSH : 6
BLM : 63 EXM : 3
DSM : 2039 DRM : 511
AL0 : 192 AL1 : 0
CKS : 32768 OFF : 0
PSH : 2 PHM : 3
Sideness : 0 Tracks per side : 255
Sectors per track : 128 First sector # : 0
Sector size : 512 GAP length R/W : 0
GAP length fmt : 0 Multitrack : 0
Freeze flag : 0
This information is usually not necessary to the end user. It is presented
for completeness and to aid debugging the program itself.
- List directory for partition "juegos" (partition #1)
C:\>3e \\.\m: dir 1
Also this command can be issued as:
C:\>3e \\.\m: dir juegos
Directory for juegos
Name Disksize Att Ver HdSize Type RSize Start Vars
---------------------------------------------------------------------------
ROM . 16512 1.0 16512 Bytes 16384 0 32860
CIRCULO .SCR 7040 1.0 7040 Bytes 6912 16384 32903
CHCODE . 2560 1.0 2458 Bytes 2330 49406 32768
EDL .Z80 131200 Headerless file.
CHAIN . 256 1.0 205 Program 77 1 77
CHAIN .SNA 49280 Headerless file.
EDL .SCR 7040 1.0 7040 Bytes 6912 16384 32768
Roughly speaking, there are two kind of files: +3DOS compilant files, with
header, and headerless files. The later ones are verbatim copies from the
original file on the PC. For example, .SNA and .Z80 files for the SPECTRUM
command must be naked binary files, without any header.
On the other way, +3DOS files have a header, the same way tape blocks have
headers: to identify the type of file, its length, start address, etc.
- Copy a file called EDL.SCR from the partition 1 of the memory card to the
current working directory on the PC.
C:\>3e \\.\m: get 1:edl.scr
Also, this command can be issued as:
C:\>3e \\.\m: get juegos:edl.scr
A file called "edl.scr" is created on C:\ containing both the header and
data for this file. The header, if any, is copied along with the file.
- Copy a file called EDL.SCR from the partition 1 of the memory card to the parent directory related to the current working directory:
C:\>3e \\.\m: get 1:edl.scr ..\
Also, this command can be issued as:
C:\>3e \\.\m: get juegos:edl.scr ..\
- Copy a file called "screen.bin" located on the root directory of the PC,
which is a screen dump, to the memory card, but with an added header to make
it work under +3DOS with the LOAD command. The +3DOS file name for this file
will be "screen" and it will be stored in partition "utils" (#2).
As it's a screen, we will provide the start address for this file to be 16384.
C:\>3e \\.\m: putbin screen.bin 2:screen 16384
Also, this command can be issued as:
C:\>3e \\.\m: putbin screen.bin utils:screen 16384
This file can be loaded from +3DOS with:
LOAD "d:screen" CODE
(provided that partition "utils" is mapped to drive D:)
If the start address is not provided for the putbin command, it is assumed
to be 0.
It's also possible to write a file to the memory card without adding a header.
Use the "put" command instead of "putbin".
- Delete a file named "screen" from partition #2
C:\>3e \\.\m: del 2:screen
Also, this command can be issued as:
C:\>3e \\.\m: del utils:screen
- Dump all the files on a TAP archive to the partition 4 of memory card
and list the directory of that partition.
C:>3e \\.\m: puttap "c:\SPECTRUM\Games\h\HORIZONT.TAP" 4
Also, this command can be issued as:
C:>3e \\.\m: puttap "c:\SPECTRUM\Games\h\HORIZONT.TAP" chica
(after a couple of seconds...)
C:>3e \\.\m: dir chica
Directory for chica
Name Disksize Att Ver HdSize Type RSize Start Vars
---------------------------------------------------------------------------
CARAA . 256 1.0 249 Program 121 10 121
ARCOIRIS. 33024 1.0 32993 Bytes 6912 16384 32865
LOGO . 33024 1.0 33007 Bytes 6912 16384 32879
HARDWARE. 4224 1.0 4188 Program 4060 9100 4060
. 33152 1.0 33095 Bytes 300 32256 32967
HWS . 33024 1.0 33000 Bytes 6912 16384 32872
LECCION1. 8064 1.0 7982 Program 7854 9100 7854
MCODE . 33024 1.0 32909 Bytes 299 32000 32781
LECCION2. 7552 1.0 7513 Program 7385 9100 7385
LECCION3. 7936 1.0 7859 Program 7731 9100 7731
LECCION4. 7808 1.0 7777 Program 7649 9100 7649
DICCIONA. 3072 1.0 2984 Program 2856 9980 2856
D . 33024 1.0 32936 Bytes 400 32256 32808
FILE . 33024 1.0 33001 Char array 5103 50690 32873
CARAB . 3072 1.0 2989 Program 2861 9100 2861
MURO . 4480 1.0 4370 Program 4317 300 4242
WALLG . 33152 1.0 33042 Bytes 168 65368 32914
C . 33152 1.0 33093 Bytes 300 32256 32965
CLASIFIC. 7680 1.0 7621 Program 7493 9050 7493
CHAR . 33024 1.0 32965 Bytes 168 65368 32837
EVOLUCIO. 6656 1.0 6541 Program 6413 9050 6413
BITS . 33024 1.0 32909 Bytes 32 65368 32781
LIFE . 4992 1.0 4914 Program 4786 9010 4786
P . 33152 1.0 33092 Bytes 300 32196 32964
DIBUJAR . 4992 1.0 4933 Program 4805 8000 4805
MONTECAR. 5504 1.0 5444 Program 5316 9110 5316
GENERADO. 5760 1.0 5703 Program 5575 9100 5575
ONDAS . 4480 1.0 4423 Program 4295 9100 4295
M . 33152 1.0 33095 Bytes 300 32256 32967
Take into account however, that the copy does not altere program contents. This
is important because the usual way to load "the next block" is LOAD "" , and
this will issue a "F Invalid file name" error. You will have to modify by hand
each LOAD sentence to include proper name on it.
- Transfer a DSK image file to a partition named "utils"
C:\>3e \\.\m: putdsk c:\Spectrum\disks\g\devpac3.dsk utils
(after doing this, a directory listing can be show for the "utils" partition to
reveal the new files)
C:\>3e \\.\m: dir utils
Directory for utils
Name Disksize Att Ver HdSize Type RSize Start Vars
---------------------------------------------------------------------------
GENP3 . 27264 1.0 10880 Bytes 10752 24700 0
GENP351 . 27776 1.0 11392 Bytes 11264 24700 0
GENS451 . 27904 1.0 11520 Bytes 11392 26000 32768
MONP3 . 25088 1.0 8704 Bytes 8576 24700 0
MONS4 . 6784 1.0 6784 Bytes 6656 40000 32984
Usefull shell scripts for using 3e with Linux
---------------------------------------------
The -bare option allows shell scripts to use '3e' in order to perform
complex tasks not available as standalone commands within '3e'. Here are
some examples:
- Retrieving all files from a partition, to a directory of the same name as
the partition:
getdir.sh
-------------------------------
#!/bin/sh
mkdir $2
for f in `3e $1 dir $2 -bare`
do
3e $1 get $2:$f $2/
done
-------------------------------
Usage: getdir.sh disk_file_name partition_to_retrieve
Example: getdir.sh /dev/sdh utils
- Retrieving all the files from all partitions, each partition on a directory
of the same name:
getall.sh
-------------------------------
#!/bin/sh
for p in `3e $1 showptable -bare`
do
mkdir $p
for f in `3e $1 dir $p -bare`
do
3e $1 get $p:$f $p/
done
done
-------------------------------
Usage: getall.sh disk_file_name
Example: getall.sh mydisk.hdf
You can use egrep on the dir command to allow for wildcards. For
example, get all .BIN files from the "games" partition on /dev/sdh to the
"backup" directory on your PC:
for f in `3e /dev/sdh dir games -bare | egrep "*.BIN"`
do
3e /dev/sdh get games:$f backup/
done
- Write all files from a directory full of SCR files (binary files with a ZX Spectrum
screen dump) to the "scr" partition on /dev/sdh, adding a header so you can
use LOAD "somefile.scr" SCREEN$ from +3 BASIC to load one of them.
for f in myscreens/*.scr
do
3e /dev/sdh putbin $f scr 16384
done