mirror of
https://github.com/davidgiven/fluxengine.git
synced 2025-10-31 11:17:01 -07:00
Merge pull request #410 from pauldevine/victor9k
Victor9k Double Sided Support
This commit is contained in:
@@ -127,7 +127,7 @@ at least, check the CRC so what data's there is probably good.
|
|||||||
| [Micropolis](doc/disk-micropolis.md) | 🦄 | | Micropolis 100tpi drives |
|
| [Micropolis](doc/disk-micropolis.md) | 🦄 | | Micropolis 100tpi drives |
|
||||||
| [Northstar](doc/disk-northstar.md) | 🦖 | 🦖 | 5.25" hard sectors |
|
| [Northstar](doc/disk-northstar.md) | 🦖 | 🦖 | 5.25" hard sectors |
|
||||||
| [TI DS990 FD1000](doc/disk-tids990.md) | 🦄 | 🦄 | 8" |
|
| [TI DS990 FD1000](doc/disk-tids990.md) | 🦄 | 🦄 | 8" |
|
||||||
| [Victor 9000](doc/disk-victor9k.md) | 🦖 | | 8" |
|
| [Victor 9000](doc/disk-victor9k.md) | 🦖 | | 5.25" GCR encoded |
|
||||||
| [Zilog MCZ](doc/disk-zilogmcz.md) | 🦖 | | 8" _and_ hard sectors |
|
| [Zilog MCZ](doc/disk-zilogmcz.md) | 🦖 | | 8" _and_ hard sectors |
|
||||||
{: .datatable }
|
{: .datatable }
|
||||||
|
|
||||||
|
|||||||
@@ -16,8 +16,8 @@ the speed zone allocation on head 1 differ from head 0...
|
|||||||
| 1 | 4-15 | 0-7 | 18 | 224.5 |
|
| 1 | 4-15 | 0-7 | 18 | 224.5 |
|
||||||
| 2 | 16-26 | 8-18 | 17 | 212.2 |
|
| 2 | 16-26 | 8-18 | 17 | 212.2 |
|
||||||
| 3 | 27-37 | 19-29 | 16 | 199.9 |
|
| 3 | 27-37 | 19-29 | 16 | 199.9 |
|
||||||
| 4 | 38-48 | 30-40 | 15 | 187.6 |
|
| 4 | 38-47\* | 30-39\* | 15 | 187.6 |
|
||||||
| 5 | 49-59 | 41-51 | 14 | 175.3 |
|
| 5 | 48-59 | 40-51 | 14 | 175.3 |
|
||||||
| 6 | 60-70 | 52-62 | 13 | 163.0 |
|
| 6 | 60-70 | 52-62 | 13 | 163.0 |
|
||||||
| 7 | 71-79 | 63-74 | 12 | 149.6 |
|
| 7 | 71-79 | 63-74 | 12 | 149.6 |
|
||||||
| 8 | | 75-79 | 11 | 144.0 |
|
| 8 | | 75-79 | 11 | 144.0 |
|
||||||
@@ -26,8 +26,13 @@ the speed zone allocation on head 1 differ from head 0...
|
|||||||
FluxEngine, the disk always spins at 360 rpm, which corresponds to a rotational
|
FluxEngine, the disk always spins at 360 rpm, which corresponds to a rotational
|
||||||
period of 166 ms.)
|
period of 166 ms.)
|
||||||
|
|
||||||
FluxEngine can read and write the single-sided variant of these. (Double-sided
|
\*The Victor 9000 Hardware Reference Manual has a bug in the documentation
|
||||||
will be trivial to do, it's just not done yet.)
|
and lists Zone 4 as ending with track 48 on head 0 and track 40 on head 1.
|
||||||
|
The above table matches observed data on various disks and the assembly
|
||||||
|
code in the boot loader, which ends Zone 4 with track 47 on head 0
|
||||||
|
and track 39 on Head 1.
|
||||||
|
|
||||||
|
FluxEngine can read and write both the single-sided and double-sided variants.
|
||||||
|
|
||||||
Reading discs
|
Reading discs
|
||||||
-------------
|
-------------
|
||||||
@@ -35,10 +40,14 @@ Reading discs
|
|||||||
Just do:
|
Just do:
|
||||||
|
|
||||||
```
|
```
|
||||||
fluxengine read victor9k-ss
|
fluxengine read <format>
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
You should end up with an `victor9k.img` which is 627200 bytes long.
|
...where `<format>` can be `victor9k_ss` or `victor9k_ds`.
|
||||||
|
|
||||||
|
For `victor9k_ss` you should end up with an `victor9k.img` which is 627200 bytes long.
|
||||||
|
For `victor9k_ds` you should end up with an `victor9k.img` which is 1224192 bytes long.
|
||||||
|
|
||||||
**Big warning!** The image is triangular, where each track occupies a different
|
**Big warning!** The image is triangular, where each track occupies a different
|
||||||
amount of space. Victor disk images are complicated due to the way the tracks
|
amount of space. Victor disk images are complicated due to the way the tracks
|
||||||
@@ -50,7 +59,7 @@ Writing discs
|
|||||||
Just do:
|
Just do:
|
||||||
|
|
||||||
```
|
```
|
||||||
fluxengine read victor9k-ss -i victor9k.img
|
fluxengine read victor9k_ss -i victor9k.img
|
||||||
```
|
```
|
||||||
|
|
||||||
**Big warning!** This uses the same triangular disk image that reading uses.
|
**Big warning!** This uses the same triangular disk image that reading uses.
|
||||||
|
|||||||
@@ -528,6 +528,7 @@ FORMATS="\
|
|||||||
northstar87 \
|
northstar87 \
|
||||||
tids990 \
|
tids990 \
|
||||||
victor9k_ss \
|
victor9k_ss \
|
||||||
|
victor9k_ds \
|
||||||
zilogmcz \
|
zilogmcz \
|
||||||
"
|
"
|
||||||
|
|
||||||
@@ -639,6 +640,7 @@ encodedecodetest mac800 scripts/mac800_test.textpb
|
|||||||
encodedecodetest n88basic
|
encodedecodetest n88basic
|
||||||
encodedecodetest tids990
|
encodedecodetest tids990
|
||||||
encodedecodetest victor9k_ss
|
encodedecodetest victor9k_ss
|
||||||
|
encodedecodetest victor9k_ds
|
||||||
|
|
||||||
# vim: sw=4 ts=4 et
|
# vim: sw=4 ts=4 et
|
||||||
|
|
||||||
|
|||||||
459
src/formats/victor9k_ds.textpb
Normal file
459
src/formats/victor9k_ds.textpb
Normal file
@@ -0,0 +1,459 @@
|
|||||||
|
comment: 'Victor 9000 / Sirius One 1224kB DSHD GCR variable sector)'
|
||||||
|
|
||||||
|
image_reader {
|
||||||
|
filename: "victor9k_ds.img"
|
||||||
|
img {
|
||||||
|
tracks: 80
|
||||||
|
sides: 2
|
||||||
|
trackdata {
|
||||||
|
sector_size: 512
|
||||||
|
sector_range {
|
||||||
|
start_sector: 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trackdata {
|
||||||
|
side: 0
|
||||||
|
track: 0
|
||||||
|
up_to_track: 3
|
||||||
|
sector_range {
|
||||||
|
sector_count: 19
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trackdata {
|
||||||
|
side: 0
|
||||||
|
track: 4
|
||||||
|
up_to_track: 15
|
||||||
|
sector_range {
|
||||||
|
sector_count: 18
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trackdata {
|
||||||
|
side: 0
|
||||||
|
track: 16
|
||||||
|
up_to_track: 26
|
||||||
|
sector_range {
|
||||||
|
sector_count: 17
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trackdata {
|
||||||
|
side: 0
|
||||||
|
track: 27
|
||||||
|
up_to_track: 37
|
||||||
|
sector_range {
|
||||||
|
sector_count: 16
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trackdata {
|
||||||
|
side: 0
|
||||||
|
track: 38
|
||||||
|
up_to_track: 47
|
||||||
|
sector_range {
|
||||||
|
sector_count: 15
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trackdata {
|
||||||
|
side: 0
|
||||||
|
track: 48
|
||||||
|
up_to_track: 59
|
||||||
|
sector_range {
|
||||||
|
sector_count: 14
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trackdata {
|
||||||
|
side: 0
|
||||||
|
track: 60
|
||||||
|
up_to_track: 70
|
||||||
|
sector_range {
|
||||||
|
sector_count: 13
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trackdata {
|
||||||
|
side: 0
|
||||||
|
track: 71
|
||||||
|
up_to_track: 79
|
||||||
|
sector_range {
|
||||||
|
sector_count: 12
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trackdata {
|
||||||
|
side: 1
|
||||||
|
track: 0
|
||||||
|
up_to_track: 7
|
||||||
|
sector_range {
|
||||||
|
sector_count: 18
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trackdata {
|
||||||
|
side: 1
|
||||||
|
track: 8
|
||||||
|
up_to_track: 18
|
||||||
|
sector_range {
|
||||||
|
sector_count: 17
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trackdata {
|
||||||
|
side: 1
|
||||||
|
track: 19
|
||||||
|
up_to_track: 29
|
||||||
|
sector_range {
|
||||||
|
sector_count: 16
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trackdata {
|
||||||
|
side: 1
|
||||||
|
track: 30
|
||||||
|
up_to_track: 39
|
||||||
|
sector_range {
|
||||||
|
sector_count: 15
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trackdata {
|
||||||
|
side: 1
|
||||||
|
track: 40
|
||||||
|
up_to_track: 51
|
||||||
|
sector_range {
|
||||||
|
sector_count: 14
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trackdata {
|
||||||
|
side: 1
|
||||||
|
track: 52
|
||||||
|
up_to_track: 62
|
||||||
|
sector_range {
|
||||||
|
sector_count: 13
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trackdata {
|
||||||
|
side: 1
|
||||||
|
track: 63
|
||||||
|
up_to_track: 74
|
||||||
|
sector_range {
|
||||||
|
sector_count: 12
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trackdata {
|
||||||
|
side: 1
|
||||||
|
track: 75
|
||||||
|
up_to_track: 79
|
||||||
|
sector_range {
|
||||||
|
sector_count: 11
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
image_writer {
|
||||||
|
filename: "victor9k_ds.img"
|
||||||
|
img {
|
||||||
|
tracks: 80
|
||||||
|
sides: 2
|
||||||
|
trackdata {
|
||||||
|
sector_size: 512
|
||||||
|
sector_range {
|
||||||
|
start_sector: 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trackdata {
|
||||||
|
side: 0
|
||||||
|
track: 0
|
||||||
|
up_to_track: 3
|
||||||
|
sector_range {
|
||||||
|
sector_count: 19
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trackdata {
|
||||||
|
side: 0
|
||||||
|
track: 4
|
||||||
|
up_to_track: 15
|
||||||
|
sector_range {
|
||||||
|
sector_count: 18
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trackdata {
|
||||||
|
side: 0
|
||||||
|
track: 16
|
||||||
|
up_to_track: 26
|
||||||
|
sector_range {
|
||||||
|
sector_count: 17
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trackdata {
|
||||||
|
side: 0
|
||||||
|
track: 27
|
||||||
|
up_to_track: 37
|
||||||
|
sector_range {
|
||||||
|
sector_count: 16
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trackdata {
|
||||||
|
side: 0
|
||||||
|
track: 38
|
||||||
|
up_to_track: 47
|
||||||
|
sector_range {
|
||||||
|
sector_count: 15
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trackdata {
|
||||||
|
side: 0
|
||||||
|
track: 48
|
||||||
|
up_to_track: 59
|
||||||
|
sector_range {
|
||||||
|
sector_count: 14
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trackdata {
|
||||||
|
side: 0
|
||||||
|
track: 60
|
||||||
|
up_to_track: 70
|
||||||
|
sector_range {
|
||||||
|
sector_count: 13
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trackdata {
|
||||||
|
side: 0
|
||||||
|
track: 71
|
||||||
|
up_to_track: 79
|
||||||
|
sector_range {
|
||||||
|
sector_count: 12
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trackdata {
|
||||||
|
side: 1
|
||||||
|
track: 0
|
||||||
|
up_to_track: 7
|
||||||
|
sector_range {
|
||||||
|
sector_count: 18
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trackdata {
|
||||||
|
side: 1
|
||||||
|
track: 8
|
||||||
|
up_to_track: 18
|
||||||
|
sector_range {
|
||||||
|
sector_count: 17
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trackdata {
|
||||||
|
side: 1
|
||||||
|
track: 19
|
||||||
|
up_to_track: 29
|
||||||
|
sector_range {
|
||||||
|
sector_count: 16
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trackdata {
|
||||||
|
side: 1
|
||||||
|
track: 30
|
||||||
|
up_to_track: 39
|
||||||
|
sector_range {
|
||||||
|
sector_count: 15
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trackdata {
|
||||||
|
side: 1
|
||||||
|
track: 40
|
||||||
|
up_to_track: 51
|
||||||
|
sector_range {
|
||||||
|
sector_count: 14
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trackdata {
|
||||||
|
side: 1
|
||||||
|
track: 52
|
||||||
|
up_to_track: 62
|
||||||
|
sector_range {
|
||||||
|
sector_count: 13
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trackdata {
|
||||||
|
side: 1
|
||||||
|
track: 63
|
||||||
|
up_to_track: 74
|
||||||
|
sector_range {
|
||||||
|
sector_count: 12
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trackdata {
|
||||||
|
side: 1
|
||||||
|
track: 75
|
||||||
|
up_to_track: 79
|
||||||
|
sector_range {
|
||||||
|
sector_count: 11
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
encoder {
|
||||||
|
victor9k {
|
||||||
|
trackdata {
|
||||||
|
original_data_rate_khz: 500
|
||||||
|
post_index_gap_us: 1000.0
|
||||||
|
pre_header_sync_bits: 120
|
||||||
|
post_header_gap_bits: 48
|
||||||
|
pre_data_sync_bits: 40
|
||||||
|
post_data_gap_bits: 200
|
||||||
|
}
|
||||||
|
trackdata {
|
||||||
|
head: 0
|
||||||
|
min_cylinder: 0
|
||||||
|
max_cylinder: 3
|
||||||
|
original_period_ms: 237.9
|
||||||
|
sector_range {
|
||||||
|
start_sector: 0
|
||||||
|
sector_count: 19
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trackdata {
|
||||||
|
head: 0
|
||||||
|
min_cylinder: 4
|
||||||
|
max_cylinder: 15
|
||||||
|
original_period_ms: 224.5
|
||||||
|
sector_range {
|
||||||
|
sector_count: 18
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trackdata {
|
||||||
|
head: 0
|
||||||
|
min_cylinder: 16
|
||||||
|
max_cylinder: 26
|
||||||
|
original_period_ms: 212.2
|
||||||
|
sector_range {
|
||||||
|
sector_count: 17
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trackdata {
|
||||||
|
head: 0
|
||||||
|
min_cylinder: 27
|
||||||
|
max_cylinder: 37
|
||||||
|
original_period_ms: 199.9
|
||||||
|
sector_range {
|
||||||
|
sector_count: 16
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trackdata {
|
||||||
|
head: 0
|
||||||
|
min_cylinder: 38
|
||||||
|
max_cylinder: 47
|
||||||
|
original_period_ms: 187.6
|
||||||
|
sector_range {
|
||||||
|
sector_count: 15
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trackdata {
|
||||||
|
head: 0
|
||||||
|
min_cylinder: 48
|
||||||
|
max_cylinder: 59
|
||||||
|
original_period_ms: 175.3
|
||||||
|
sector_range {
|
||||||
|
sector_count: 14
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trackdata {
|
||||||
|
head: 0
|
||||||
|
min_cylinder: 60
|
||||||
|
max_cylinder: 70
|
||||||
|
original_period_ms: 163.0
|
||||||
|
sector_range {
|
||||||
|
sector_count: 13
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trackdata {
|
||||||
|
head: 0
|
||||||
|
min_cylinder: 71
|
||||||
|
max_cylinder: 79
|
||||||
|
original_period_ms: 149.6
|
||||||
|
sector_range {
|
||||||
|
sector_count: 12
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trackdata {
|
||||||
|
head: 1
|
||||||
|
min_cylinder: 0
|
||||||
|
max_cylinder: 7
|
||||||
|
original_period_ms: 224.5
|
||||||
|
sector_range {
|
||||||
|
start_sector: 0
|
||||||
|
sector_count: 18
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trackdata {
|
||||||
|
head: 1
|
||||||
|
min_cylinder: 8
|
||||||
|
max_cylinder: 18
|
||||||
|
original_period_ms: 212.2
|
||||||
|
sector_range {
|
||||||
|
sector_count: 17
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trackdata {
|
||||||
|
head: 1
|
||||||
|
min_cylinder: 19
|
||||||
|
max_cylinder: 29
|
||||||
|
original_period_ms: 199.9
|
||||||
|
sector_range {
|
||||||
|
sector_count: 16
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trackdata {
|
||||||
|
head: 1
|
||||||
|
min_cylinder: 30
|
||||||
|
max_cylinder: 39
|
||||||
|
original_period_ms: 187.6
|
||||||
|
sector_range {
|
||||||
|
sector_count: 15
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trackdata {
|
||||||
|
head: 1
|
||||||
|
min_cylinder: 40
|
||||||
|
max_cylinder: 51
|
||||||
|
original_period_ms: 175.3
|
||||||
|
sector_range {
|
||||||
|
sector_count: 14
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trackdata {
|
||||||
|
head: 1
|
||||||
|
min_cylinder: 52
|
||||||
|
max_cylinder: 62
|
||||||
|
original_period_ms: 163.0
|
||||||
|
sector_range {
|
||||||
|
sector_count: 13
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trackdata {
|
||||||
|
head: 1
|
||||||
|
min_cylinder: 63
|
||||||
|
max_cylinder: 74
|
||||||
|
original_period_ms: 149.6
|
||||||
|
sector_range {
|
||||||
|
sector_count: 12
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trackdata {
|
||||||
|
head: 1
|
||||||
|
min_cylinder: 75
|
||||||
|
max_cylinder: 79
|
||||||
|
original_period_ms: 144.0
|
||||||
|
sector_range {
|
||||||
|
sector_count: 11
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
decoder {
|
||||||
|
victor9k {}
|
||||||
|
}
|
||||||
|
|
||||||
|
cylinders {
|
||||||
|
start: 0
|
||||||
|
end: 79
|
||||||
|
}
|
||||||
|
|
||||||
|
heads {
|
||||||
|
start: 0
|
||||||
|
end: 1
|
||||||
|
}
|
||||||
|
|
||||||
@@ -41,13 +41,13 @@ image_reader {
|
|||||||
}
|
}
|
||||||
trackdata {
|
trackdata {
|
||||||
track: 38
|
track: 38
|
||||||
up_to_track: 48
|
up_to_track: 47
|
||||||
sector_range {
|
sector_range {
|
||||||
sector_count: 15
|
sector_count: 15
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
trackdata {
|
trackdata {
|
||||||
track: 49
|
track: 48
|
||||||
up_to_track: 59
|
up_to_track: 59
|
||||||
sector_range {
|
sector_range {
|
||||||
sector_count: 14
|
sector_count: 14
|
||||||
@@ -111,13 +111,13 @@ image_writer {
|
|||||||
}
|
}
|
||||||
trackdata {
|
trackdata {
|
||||||
track: 38
|
track: 38
|
||||||
up_to_track: 48
|
up_to_track: 47
|
||||||
sector_range {
|
sector_range {
|
||||||
sector_count: 15
|
sector_count: 15
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
trackdata {
|
trackdata {
|
||||||
track: 49
|
track: 48
|
||||||
up_to_track: 59
|
up_to_track: 59
|
||||||
sector_range {
|
sector_range {
|
||||||
sector_count: 14
|
sector_count: 14
|
||||||
@@ -190,7 +190,7 @@ encoder {
|
|||||||
trackdata {
|
trackdata {
|
||||||
head: 0
|
head: 0
|
||||||
min_cylinder: 38
|
min_cylinder: 38
|
||||||
max_cylinder: 48
|
max_cylinder: 47
|
||||||
original_period_ms: 187.6
|
original_period_ms: 187.6
|
||||||
sector_range {
|
sector_range {
|
||||||
sector_count: 15
|
sector_count: 15
|
||||||
@@ -198,7 +198,7 @@ encoder {
|
|||||||
}
|
}
|
||||||
trackdata {
|
trackdata {
|
||||||
head: 0
|
head: 0
|
||||||
min_cylinder: 49
|
min_cylinder: 48
|
||||||
max_cylinder: 59
|
max_cylinder: 59
|
||||||
original_period_ms: 175.3
|
original_period_ms: 175.3
|
||||||
sector_range {
|
sector_range {
|
||||||
|
|||||||
Reference in New Issue
Block a user