From 4cece77bff97e7c9d8f6a09d36732080d7c43a24 Mon Sep 17 00:00:00 2001 From: David Given Date: Thu, 13 Oct 2022 22:52:47 +0200 Subject: [PATCH 1/3] Remove stray cout printing. --- lib/fluxsource/scpfluxsource.cc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/fluxsource/scpfluxsource.cc b/lib/fluxsource/scpfluxsource.cc index 88b503600..944ed2251 100644 --- a/lib/fluxsource/scpfluxsource.cc +++ b/lib/fluxsource/scpfluxsource.cc @@ -6,6 +6,7 @@ #include "fluxsource/fluxsource.h" #include "scp.h" #include "proto.h" +#include "lib/logger.h" #include "fmt/format.h" #include @@ -49,9 +50,9 @@ class ScpFluxSource : public TrivialFluxSource if ((_header.cell_width != 0) && (_header.cell_width != 16)) Error() << "currently only 16-bit cells in SCP files are supported"; - std::cout << fmt::format("SCP tracks {}-{}, heads {}-{}\n", + Logger() << fmt::format("SCP: tracks {}-{}, heads {}-{}", trackno(_header.start_track), trackno(_header.end_track), startSide, endSide); - std::cout << fmt::format("SCP sample resolution: {} ns\n", _resolution); + Logger() << fmt::format("SCP sample resolution: {} ns\n", _resolution); } public: From f2c6487d4975b9516348d6ee0e08c8793bbd99b9 Mon Sep 17 00:00:00 2001 From: David Given Date: Thu, 13 Oct 2022 22:53:02 +0200 Subject: [PATCH 2/3] Add test-only TRS-80 formats. --- Makefile | 4 ++ scripts/encodedecodetest.sh | 2 + src/formats/build.mk | 2 + src/formats/trs80_175.textpb | 71 ++++++++++++++++++++++++++++++++++ src/formats/trs80_88.textpb | 74 ++++++++++++++++++++++++++++++++++++ 5 files changed, 153 insertions(+) create mode 100644 src/formats/trs80_175.textpb create mode 100644 src/formats/trs80_88.textpb diff --git a/Makefile b/Makefile index d42d1799b..c2946fa1d 100644 --- a/Makefile +++ b/Makefile @@ -196,6 +196,10 @@ $(call do-encodedecodetest,mac800,scripts/mac800_test.textpb) $(call do-encodedecodetest,n88basic) $(call do-encodedecodetest,rx50) $(call do-encodedecodetest,tids990) +$(call do-encodedecodetest,trs80_88,,--35) +$(call do-encodedecodetest,trs80_88,,--40) +$(call do-encodedecodetest,trs80_175,,--35) +$(call do-encodedecodetest,trs80_175,,--40) $(call do-encodedecodetest,victor9k_ss) $(call do-encodedecodetest,victor9k_ds) diff --git a/scripts/encodedecodetest.sh b/scripts/encodedecodetest.sh index c43e63928..d96a239f8 100755 --- a/scripts/encodedecodetest.sh +++ b/scripts/encodedecodetest.sh @@ -15,7 +15,9 @@ trap "rm -f $srcfile $fluxfile $destfile" EXIT dd if=/dev/urandom of=$srcfile bs=1048576 count=2 2>&1 +echo $fluxengine write $format -i $srcfile -d $fluxfile --drive.rotational_period_ms=200 "$@" $fluxengine write $format -i $srcfile -d $fluxfile --drive.rotational_period_ms=200 "$@" +echo $fluxengine read $format -s $fluxfile -o $destfile --drive.rotational_period_ms=200 "$@" $fluxengine read $format -s $fluxfile -o $destfile --drive.rotational_period_ms=200 "$@" if [ ! -s $destfile ]; then echo "Zero length output file!" >&2 diff --git a/src/formats/build.mk b/src/formats/build.mk index 5e1a27001..84748b713 100644 --- a/src/formats/build.mk +++ b/src/formats/build.mk @@ -63,6 +63,8 @@ FORMATS = \ rx50 \ shugart_drive \ tids990 \ + trs80_88 \ + trs80_175 \ victor9k_ds \ victor9k_ss \ zilogmcz \ diff --git a/src/formats/trs80_175.textpb b/src/formats/trs80_175.textpb new file mode 100644 index 000000000..ea34a0f03 --- /dev/null +++ b/src/formats/trs80_175.textpb @@ -0,0 +1,71 @@ +comment: 'TRS-80 175kB 5.25" 35-track 10-sector SSDD' + +image_reader { + filename: "trs80-175.img" + img {} +} + +image_writer { + filename: "trs80-175.img" + img {} +} + +layout { + tracks: 35 + sides: 1 + layoutdata { + sector_size: 512 + physical { + start_sector: 0 + count: 10 + } + } +} + +encoder { + ibm { + trackdata { + target_rotational_period_ms: 167 + target_clock_period_us: 3.333 + emit_iam: false + gap0: 80 + gap2: 22 + gap3: 34 + } + trackdata { + track: 17 + dam_byte: 0xf56e + } + } +} + +decoder { + ibm {} +} + +tpi: 48 + +option { + name: "35" + comment: "35-track variant (default)" + message: "using 35-track variant" + + config { + layout { + tracks: 35 + } + } +} + +option { + name: "40" + comment: "40-track variant" + message: "using 40-track variant" + + config { + layout { + tracks: 40 + } + } +} + diff --git a/src/formats/trs80_88.textpb b/src/formats/trs80_88.textpb new file mode 100644 index 000000000..dcb3ced9f --- /dev/null +++ b/src/formats/trs80_88.textpb @@ -0,0 +1,74 @@ +comment: 'TRS-80 88kB 5.25" 35-track 10-sector SSSD' + +image_reader { + filename: "trs80-88.img" + img {} +} + +image_writer { + filename: "trs80-88.img" + img {} +} + +layout { + tracks: 35 + sides: 1 + layoutdata { + sector_size: 256 + physical { + start_sector: 0 + count: 10 + } + } +} + +encoder { + ibm { + trackdata { + target_rotational_period_ms: 167 + target_clock_period_us: 3.333 + emit_iam: false + use_fm: true + gap0: 0x10 + gap2: 0x09 + gap3: 0x10 + idam_byte: 0xf57e + dam_byte: 0xf56f + gap_fill_byte: 0xffff + } + trackdata { + track: 17 + } + } +} + +decoder { + ibm {} +} + +tpi: 48 + +option { + name: "35" + comment: "35-track variant (default)" + message: "using 35-track variant" + + config { + layout { + tracks: 35 + } + } +} + +option { + name: "40" + comment: "40-track variant" + message: "using 40-track variant" + + config { + layout { + tracks: 40 + } + } +} + From 5c4a1eaf4d7c9c3591bcbbd27c4e2e603032010b Mon Sep 17 00:00:00 2001 From: David Given Date: Sun, 14 Dec 2025 13:17:55 +0100 Subject: [PATCH 3/3] Attempt to modernise the TRS-80 format. --- README.md | 1 + build.py | 4 + doc/disk-trs80.md | 31 ++++++ src/formats/build.py | 1 + src/formats/trs80.textpb | 177 +++++++++++++++++++++++++++++++++++ src/formats/trs80_175.textpb | 71 -------------- src/formats/trs80_88.textpb | 74 --------------- 7 files changed, 214 insertions(+), 145 deletions(-) create mode 100644 doc/disk-trs80.md create mode 100644 src/formats/trs80.textpb delete mode 100644 src/formats/trs80_175.textpb delete mode 100644 src/formats/trs80_88.textpb diff --git a/README.md b/README.md index 3f38972e1..f34486ac9 100644 --- a/README.md +++ b/README.md @@ -147,6 +147,7 @@ choices because they can store multiple types of file system. | [`ti99`](doc/disk-ti99.md) | TI-99: 90kB 35-track SSSD | 🦖 | | | | [`tids990`](doc/disk-tids990.md) | Texas Instruments DS990: 1126kB 8" DSSD | 🦖 | 🦖 | | | [`tiki`](doc/disk-tiki.md) | Tiki 100: CP/M | | | CPMFS | +| [`trs80`](doc/disk-trs80.md) | : TRS-80 88kB 5.25" 35-track 10-sector SSSD | | | | | [`victor9k`](doc/disk-victor9k.md) | Victor 9000 / Sirius One: 1224kB 5.25" DSDD GCR | 🦖 | 🦖 | | | [`zilogmcz`](doc/disk-zilogmcz.md) | Zilog MCZ: 320kB 8" 77-track SSSD hard-sectored | 🦖 | | ZDOS | {: .datatable } diff --git a/build.py b/build.py index bb6260497..5ea498e60 100644 --- a/build.py +++ b/build.py @@ -72,6 +72,10 @@ ("rx50", "", ""), ("tartu", "", "--390 --drivetype=40"), ("tartu", "", "--780"), + ("trs80", "", "--88 --drivetype=40"), + ("trs80", "", "--100 --drivetype=40"), + ("trs80", "", "--175 --drivetype=40"), + ("trs80", "", "--200 --drivetype=40"), ("tids990", "", ""), ("victor9k", "", "--612"), ("victor9k", "", "--1224"), diff --git a/doc/disk-trs80.md b/doc/disk-trs80.md new file mode 100644 index 000000000..ff26d4d63 --- /dev/null +++ b/doc/disk-trs80.md @@ -0,0 +1,31 @@ +trs80 +==== +## TRS-80 88kB 5.25" 35-track 10-sector SSSD + + +Insert documentation here. + +## Options + + - Format variants: + - `88`: 87.5kB SSSD 35-track + - `100`: 100kB SSSD 40-track + - `175`: 175kB SSDD 35-track + - `200`: 200kB SSDD 40-track + +## Examples + +To read: + + - `fluxengine read -c trs80 --88 -s drive:0 -o trs80.img` + - `fluxengine read -c trs80 --100 -s drive:0 -o trs80.img` + - `fluxengine read -c trs80 --175 -s drive:0 -o trs80.img` + - `fluxengine read -c trs80 --200 -s drive:0 -o trs80.img` + +To write: + + - `fluxengine write -c trs80 --88 -d drive:0 -i trs80.img` + - `fluxengine write -c trs80 --100 -d drive:0 -i trs80.img` + - `fluxengine write -c trs80 --175 -d drive:0 -i trs80.img` + - `fluxengine write -c trs80 --200 -d drive:0 -i trs80.img` + diff --git a/src/formats/build.py b/src/formats/build.py index 99f0591e2..73f6862af 100644 --- a/src/formats/build.py +++ b/src/formats/build.py @@ -37,6 +37,7 @@ "ti99", "tids990", "tiki", + "trs80", "victor9k", "zilogmcz", ] diff --git a/src/formats/trs80.textpb b/src/formats/trs80.textpb new file mode 100644 index 000000000..276e133a0 --- /dev/null +++ b/src/formats/trs80.textpb @@ -0,0 +1,177 @@ +comment: 'TRS-80 88kB 5.25" 35-track 10-sector SSSD' + +documentation: +<<< +Insert documentation here. +>>> + +image_reader { + filename: "trs80.img" + img {} +} + +image_writer { + filename: "trs80.img" + img {} +} + +encoder { + ibm {} +} + +decoder { + ibm {} +} + +layout { + format_type: FORMATTYPE_40TRACK +} + +option_group { + comment: "$formats" + + option { + name: "88" + comment: "87.5kB SSSD 35-track" + + config { + layout { + tracks: 35 + sides: 1 + layoutdata { + sector_size: 256 + physical { + start_sector: 0 + count: 10 + } + } + } + + encoder { + ibm { + trackdata { + target_rotational_period_ms: 167 + target_clock_period_us: 3.333 + emit_iam: false + use_fm: true + gap0: 0x10 + gap2: 0x09 + gap3: 0x10 + idam_byte: 0xf57e + dam_byte: 0xf56f + gap_fill_byte: 0xffff + } + } + } + } + } + + option { + name: "100" + comment: "100kB SSSD 40-track" + + config { + layout { + tracks: 40 + sides: 1 + layoutdata { + sector_size: 256 + physical { + start_sector: 0 + count: 10 + } + } + } + + encoder { + ibm { + trackdata { + target_rotational_period_ms: 167 + target_clock_period_us: 3.333 + emit_iam: false + use_fm: true + gap0: 0x10 + gap2: 0x09 + gap3: 0x10 + idam_byte: 0xf57e + dam_byte: 0xf56f + gap_fill_byte: 0xffff + } + } + } + } + } + + option { + name: "175" + comment: "175kB SSDD 35-track" + + config { + layout { + tracks: 35 + sides: 1 + layoutdata { + sector_size: 512 + physical { + start_sector: 0 + count: 10 + } + } + } + + encoder { + ibm { + trackdata { + target_rotational_period_ms: 167 + target_clock_period_us: 3.333 + emit_iam: false + gap0: 80 + gap2: 22 + gap3: 34 + } + trackdata { + track: 17 + dam_byte: 0xf56e + } + } + } + } + } + + option { + name: "200" + comment: "200kB SSDD 40-track" + + config { + layout { + tracks: 40 + sides: 1 + layoutdata { + sector_size: 512 + physical { + start_sector: 0 + count: 10 + } + } + } + + encoder { + ibm { + trackdata { + target_rotational_period_ms: 167 + target_clock_period_us: 3.333 + emit_iam: false + gap0: 80 + gap2: 22 + gap3: 34 + } + trackdata { + track: 17 + dam_byte: 0xf56e + } + } + } + } + } +} + diff --git a/src/formats/trs80_175.textpb b/src/formats/trs80_175.textpb deleted file mode 100644 index ea34a0f03..000000000 --- a/src/formats/trs80_175.textpb +++ /dev/null @@ -1,71 +0,0 @@ -comment: 'TRS-80 175kB 5.25" 35-track 10-sector SSDD' - -image_reader { - filename: "trs80-175.img" - img {} -} - -image_writer { - filename: "trs80-175.img" - img {} -} - -layout { - tracks: 35 - sides: 1 - layoutdata { - sector_size: 512 - physical { - start_sector: 0 - count: 10 - } - } -} - -encoder { - ibm { - trackdata { - target_rotational_period_ms: 167 - target_clock_period_us: 3.333 - emit_iam: false - gap0: 80 - gap2: 22 - gap3: 34 - } - trackdata { - track: 17 - dam_byte: 0xf56e - } - } -} - -decoder { - ibm {} -} - -tpi: 48 - -option { - name: "35" - comment: "35-track variant (default)" - message: "using 35-track variant" - - config { - layout { - tracks: 35 - } - } -} - -option { - name: "40" - comment: "40-track variant" - message: "using 40-track variant" - - config { - layout { - tracks: 40 - } - } -} - diff --git a/src/formats/trs80_88.textpb b/src/formats/trs80_88.textpb deleted file mode 100644 index dcb3ced9f..000000000 --- a/src/formats/trs80_88.textpb +++ /dev/null @@ -1,74 +0,0 @@ -comment: 'TRS-80 88kB 5.25" 35-track 10-sector SSSD' - -image_reader { - filename: "trs80-88.img" - img {} -} - -image_writer { - filename: "trs80-88.img" - img {} -} - -layout { - tracks: 35 - sides: 1 - layoutdata { - sector_size: 256 - physical { - start_sector: 0 - count: 10 - } - } -} - -encoder { - ibm { - trackdata { - target_rotational_period_ms: 167 - target_clock_period_us: 3.333 - emit_iam: false - use_fm: true - gap0: 0x10 - gap2: 0x09 - gap3: 0x10 - idam_byte: 0xf57e - dam_byte: 0xf56f - gap_fill_byte: 0xffff - } - trackdata { - track: 17 - } - } -} - -decoder { - ibm {} -} - -tpi: 48 - -option { - name: "35" - comment: "35-track variant (default)" - message: "using 35-track variant" - - config { - layout { - tracks: 35 - } - } -} - -option { - name: "40" - comment: "40-track variant" - message: "using 40-track variant" - - config { - layout { - tracks: 40 - } - } -} -