Het artikel beschrijft het proces van het creëren van een emulatie van een QIC-117 tape-drive voor de emulator 86Box. Het doel is om digitaal behoud mogelijk te maken door virtuele tape-images te kunnen lezen met originele back-upsoftware uit het DOS- en vroege Windows-tijdperk.
De belangrijkste technische uitdaging was dat de standaard QIC-117-specificatie onvoldoende was, omdat veel software fabrikant-specifieke diagnostische commando's gebruikt. Met behulp van de AI Claude heeft de auteur de ROM-chip van een Colorado-drive gereverse-engineered. Door middel van ROM-dumps en door AI geschreven Python-disassemblers konden de specifieke commando's in kaart worden gebracht en geïmplementeerd.
Daarnaast is er ondersteuning toegevoegd voor de parallelle poort (via het Backpack-protocol), waardoor ook de Iomega Ditto-drive geëmuleerd kan worden. De auteur heeft een repository beschikbaar gesteld met analyse-documentatie, disassemblers en vooraf geformatteerde tape-images.
Claude × retrocomputing: het emuleren van een QIC-117 tape-drive
TL;DR: De 86Box-emulator maakt het nu mogelijk om een QIC-117 tape-drive te emuleren die is aangesloten op de floppy-controller of op een parallelle poort. Hiermee kunnen "back-ups" worden gemaakt naar virtuele tape-images met behulp van daadwerkelijke back-upsoftware uit het DOS- en vroege Windows-tijdperk.
De passie voor emulatie en tape-media
Ik ben altijd al nogal geobsedeerd door emulators. Ik heb een uitgebreide collectie opstartbare schijfimages die vrijwel elke versie van DOS, Windows, Mac System-versies, Amiga OS, diverse Unix-systemen en andere meer obscure besturingssystemen bevatten, allemaal klaar om met één klik op een icoon te worden uitgevoerd.
Een van mijn favoriete emulators voor DOS en vroege Windows-systemen is 86Box, een evolutie van de geweldige PCEm-emulator. 86Box is een zeer "low-level" emulator die daadwerkelijk de BIOS ROM van verschillende chipsets uitvoert en een plethora aan apparaten en randapparatuur zeer getrouw emuleert. Bovendien is 86Box verfrissend toegankelijk voor ontwikkeling en uitbreiding.
Al een tijdje had ik het idee om twee van mijn obsessies te combineren: emulatie en tape-media. Zou het niet geweldig zijn als we een tape-drive zouden kunnen emuleren, met een virtuele tape-cartridge die leest vanuit een virtueel tape-imagebestand? Voor zover ik weet, zijn er momenteel geen emulators beschikbaar die een QIC tape-drive emuleren (specifiek QIC-80 en latere varianten zoals QIC-3020).
Digitaal behoud en het QIC-117 protocol
Ik houd me regelmatig bezig met het herstellen van gegevens van QIC-tapes. Als iemand die geeft om digitaal behoud, zorg ik er altijd voor dat ik een volledig binair image van de tape verkrijg, zodat het mogelijk is om het image op een andere tape te reproduceren, precies zoals de oorspronkelijke back-upsoftware het geschreven zou hebben. (Terzijde: een echt "correcte" preservering van een tape zou zijn om de daadwerkelijke flux-overgangen op te slaan in plaats van de binaire bytes op een hoger niveau, maar dat is een onderwerp voor een toekomstig bericht.)
Met de binaire tape-images in handen zou het geweldig zijn om "de cirkel rond te maken" door de oorspronkelijke back-upsoftware, draaiend in een emulator, deze tapes te laten lezen door deze te laten geloven dat hij communiceert met een echte tape-drive. Gelukkig leven we in een tijd waarin de achterstand van één persoon de topprioriteit van zijn AI-agent kan worden.
Deze QIC tape-drives, zoals de Colorado 250, Travan, enzovoort, communiceren via de floppy-controller met behulp van een speciaal protocol genaamd QIC-117. De volledige specificatie van dit protocol is gemakkelijk online te vinden. Je zou dus denken dat het voldoende is als onze geëmuleerde drive de volledige QIC-117-specificatie implementeert.
De uitdaging van fabrikant-specifieke commando's
Helaas is dat niet helemaal het geval. Naast alle standaard QIC-117-functies staat de specificatie fabrikant-specifieke "diagnostische" commando's toe, wat de specificatie in feite openstelt voor volledig willekeurig gedrag naar wens van de fabrikant. En inderdaad, fabrikanten maken veelvuldig gebruik van deze diagnostische commando's, vooral in de detectiefase wanneer de host-driver wil bepalen welk type drive is aangesloten.
Met alleen de basis-QIC-117-specificatie geïmplementeerd — wat Claude Opus 5 in slechts drie of vier prompts wist te voltooien — was er slechts één back-uputility voor MS-DOS die bereid was de drive te detecteren en ervan te lezen, namelijk HP Colorado Backup 7 (QBACKUP). Dit was eigenlijk de eerste utility die ik probeerde, wat me aanvankelijk valse hoop gaf, omdat ik daarna besefte dat verschillende utilities wildst verschillende manieren gebruiken om deze drives te detecteren, en QBACKUP toevallig de minste fabrikant-specifieke trucjes gebruikte.
Toen ik tools probeerde zoals Microsoft Backup voor Windows 95, merkte ik dat deze de drive in de diagnostische modus zette en probeerde fabrikant-specifieke commando's uit te voeren. Aangezien ik een Colorado-drive emuleerde (de QIC-117-specificatie vereist dat de drive antwoordt met een "vendor code" uit een vooraf gedefinieerde lijst van bekende leveranciers), probeerde MS Backup duidelijk Colorado-specifieke handelingen uit te voeren die nergens gedocumenteerd zijn.
Reverse engineering met Claude
Er waren twee manieren om te ontdekken wat de diagnostische functies doen: we zouden een echte Colorado-drive kunnen aansluiten en proberen het verkeer over een echte floppy-controller te monitoren, of...
We zouden de ROM-chip van de drive kunnen lossolderen, een disassembly van de ROM kunnen uitvoeren en een volledig begrip krijgen van alle commando's die de drive ondersteunt, inclusief alle diagnostische bits!
Gewapend met niets meer dan een dump van de ROM en een foto van de printplaat, zei ik tegen Claude: "kijk eens wat je hiermee kunt doen". De AI disassembleerde gehoorzaam de ROM en legde precies uit welke custom commando's de drive ondersteunt en hoe de drive precies afwijkt van de specificatie voor bepaalde standaardcommando's.
In de repository waar ik de resulterende analyse van de ROM-disassembly van de Colorado-drive (en een paar andere gerelateerde drives uit mijn collectie) heb geplaatst, zijn de volgende zaken te vinden:
- Een FINDINGS.md document: Een extreem gedetailleerde uitsplitsing van alle commando's die door de drive worden ondersteund. Dit bevat ook interessante mogelijkheden voor toekomstig werk, zoals het in staat stellen van de drive om tapes te lezen die voorheen als onleesbaar werden beschouwd, en het mogelijk maken voor een custom controller (zoals een Greaseweazle) om de drive aan te sturen en de ruwe flux-overgangen te lezen voor echt correct digitaal behoud.
- Disassemblers (geschreven in Python): Voor de Intel 8051-processor, de hoofd-IC die de drive aanstuurt. Er is ook een disassembler voor de Zilog Z8-processor, gebruikt door een paar van de andere drives. Beide disassemblers werden door de LLM moeiteloos geschreven als vereiste voor het werk.
Dit vulde alle ontbrekende stukjes in die nodig waren om de geëmuleerde QIC-117 drive te voltooien, die nu bruikbaar is in 86Box.
Ondersteuning voor parallelle poorten en Iomega Ditto
Voor de volledigheid heb ik ook ondersteuning geïmplementeerd voor een versie van deze drives via de parallelle poort (LPT-poort met EPP), die een Iomega Ditto-drive emuleert. Deze drive is intern eigenlijk een QIC-117-drive, maar bevat een extra chip die communicatie via de parallelle poort mogelijk maakt via een protocol genaamd Backpack, ontwikkeld door MicroSolutions.
Vooral de Iomega Ditto 2GB-drive is een van mijn favoriete drives voor het lezen van QIC-cartridges vanwege de uitstekende achterwaartse compatibiliteit met oudere cartridges. Hij kan niet alleen de Ditto-cartridges van de eerste partij lezen, maar ook andere tapes met een kleinere capaciteit, zoals Travan en QIC-3020, tot aan QIC-2080. Al deze varianten worden nu ondersteund als geëmuleerde cartridges in 86Box bij het configureren van de geëmuleerde Ditto-drive op de parallelle poort.
Een klein detail is dat Ditto-cartridges altijd vooraf geformatteerd werden geleverd, en er is geen manier voor de eindgebruiker om een volledig leeg tape-image te formatteren. Daarom heb ik een repository gemaakt met vooraf geformatteerde tape-images die je kunt downloaden en gebruiken. De repository bevat ook een Python-script waarmee je een tape-image kunt genereren met de gewenste capaciteit en een aangepast label. Veel plezier!
Claude × retrocomputing: het emuleren van een QIC-117 tape-drive
TL;DR: De 86Box-emulator maakt het nu mogelijk om een QIC-117 tape-drive te emuleren die is aangesloten op de floppy-controller of op een parallelle poort. Hiermee kunnen "back-ups" worden gemaakt naar virtuele tape-images met behulp van daadwerkelijke back-upsoftware uit het DOS- en vroege Windows-tijdperk.
De passie voor emulatie en tape-media
Ik ben altijd al nogal geobsedeerd door emulators. Ik heb een uitgebreide collectie opstartbare schijfimages die vrijwel elke versie van DOS, Windows, Mac System-versies, Amiga OS, diverse Unix-systemen en andere meer obscure besturingssystemen bevatten, allemaal klaar om met één klik op een icoon te worden uitgevoerd.
Een van mijn favoriete emulators voor DOS en vroege Windows-systemen is 86Box, een evolutie van de geweldige PCEm-emulator. 86Box is een zeer "low-level" emulator die daadwerkelijk de BIOS ROM van verschillende chipsets uitvoert en een plethora aan apparaten en randapparatuur zeer getrouw emuleert. Bovendien is 86Box verfrissend toegankelijk voor ontwikkeling en uitbreiding.
Al een tijdje had ik het idee om twee van mijn obsessies te combineren: emulatie en tape-media. Zou het niet geweldig zijn als we een tape-drive zouden kunnen emuleren, met een virtuele tape-cartridge die leest vanuit een virtueel tape-imagebestand? Voor zover ik weet, zijn er momenteel geen emulators beschikbaar die een QIC tape-drive emuleren (specifiek QIC-80 en latere varianten zoals QIC-3020).
Digitaal behoud en het QIC-117 protocol
Ik houd me regelmatig bezig met het herstellen van gegevens van QIC-tapes. Als iemand die geeft om digitaal behoud, zorg ik er altijd voor dat ik een volledig binair image van de tape verkrijg, zodat het mogelijk is om het image op een andere tape te reproduceren, precies zoals de oorspronkelijke back-upsoftware het geschreven zou hebben. (Terzijde: een echt "correcte" preservering van een tape zou zijn om de daadwerkelijke flux-overgangen op te slaan in plaats van de binaire bytes op een hoger niveau, maar dat is een onderwerp voor een toekomstig bericht.)
Met de binaire tape-images in handen zou het geweldig zijn om "de cirkel rond te maken" door de oorspronkelijke back-upsoftware, draaiend in een emulator, deze tapes te laten lezen door deze te laten geloven dat hij communiceert met een echte tape-drive. Gelukkig leven we in een tijd waarin de achterstand van één persoon de topprioriteit van zijn AI-agent kan worden.
Deze QIC tape-drives, zoals de Colorado 250, Travan, enzovoort, communiceren via de floppy-controller met behulp van een speciaal protocol genaamd QIC-117. De volledige specificatie van dit protocol is gemakkelijk online te vinden. Je zou dus denken dat het voldoende is als onze geëmuleerde drive de volledige QIC-117-specificatie implementeert.
De uitdaging van fabrikant-specifieke commando's
Helaas is dat niet helemaal het geval. Naast alle standaard QIC-117-functies staat de specificatie fabrikant-specifieke "diagnostische" commando's toe, wat de specificatie in feite openstelt voor volledig willekeurig gedrag naar wens van de fabrikant. En inderdaad, fabrikanten maken veelvuldig gebruik van deze diagnostische commando's, vooral in de detectiefase wanneer de host-driver wil bepalen welk type drive is aangesloten.
Met alleen de basis-QIC-117-specificatie geïmplementeerd — wat Claude Opus 5 in slechts drie of vier prompts wist te voltooien — was er slechts één back-uputility voor MS-DOS die bereid was de drive te detecteren en ervan te lezen, namelijk HP Colorado Backup 7 (QBACKUP). Dit was eigenlijk de eerste utility die ik probeerde, wat me aanvankelijk valse hoop gaf, omdat ik daarna besefte dat verschillende utilities wildst verschillende manieren gebruiken om deze drives te detecteren, en QBACKUP toevallig de minste fabrikant-specifieke trucjes gebruikte.
Toen ik tools probeerde zoals Microsoft Backup voor Windows 95, merkte ik dat deze de drive in de diagnostische modus zette en probeerde fabrikant-specifieke commando's uit te voeren. Aangezien ik een Colorado-drive emuleerde (de QIC-117-specificatie vereist dat de drive antwoordt met een "vendor code" uit een vooraf gedefinieerde lijst van bekende leveranciers), probeerde MS Backup duidelijk Colorado-specifieke handelingen uit te voeren die nergens gedocumenteerd zijn.
Reverse engineering met Claude
Er waren twee manieren om te ontdekken wat de diagnostische functies doen: we zouden een echte Colorado-drive kunnen aansluiten en proberen het verkeer over een echte floppy-controller te monitoren, of...
We zouden de ROM-chip van de drive kunnen lossolderen, een disassembly van de ROM kunnen uitvoeren en een volledig begrip krijgen van alle commando's die de drive ondersteunt, inclusief alle diagnostische bits!
Gewapend met niets meer dan een dump van de ROM en een foto van de printplaat, zei ik tegen Claude: "kijk eens wat je hiermee kunt doen". De AI disassembleerde gehoorzaam de ROM en legde precies uit welke custom commando's de drive ondersteunt en hoe de drive precies afwijkt van de specificatie voor bepaalde standaardcommando's.
In de repository waar ik de resulterende analyse van de ROM-disassembly van de Colorado-drive (en een paar andere gerelateerde drives uit mijn collectie) heb geplaatst, zijn de volgende zaken te vinden:
- Een FINDINGS.md document: Een extreem gedetailleerde uitsplitsing van alle commando's die door de drive worden ondersteund. Dit bevat ook interessante mogelijkheden voor toekomstig werk, zoals het in staat stellen van de drive om tapes te lezen die voorheen als onleesbaar werden beschouwd, en het mogelijk maken voor een custom controller (zoals een Greaseweazle) om de drive aan te sturen en de ruwe flux-overgangen te lezen voor echt correct digitaal behoud.
- Disassemblers (geschreven in Python): Voor de Intel 8051-processor, de hoofd-IC die de drive aanstuurt. Er is ook een disassembler voor de Zilog Z8-processor, gebruikt door een paar van de andere drives. Beide disassemblers werden door de LLM moeiteloos geschreven als vereiste voor het werk.
Dit vulde alle ontbrekende stukjes in die nodig waren om de geëmuleerde QIC-117 drive te voltooien, die nu bruikbaar is in 86Box.
Ondersteuning voor parallelle poorten en Iomega Ditto
Voor de volledigheid heb ik ook ondersteuning geïmplementeerd voor een versie van deze drives via de parallelle poort (LPT-poort met EPP), die een Iomega Ditto-drive emuleert. Deze drive is intern eigenlijk een QIC-117-drive, maar bevat een extra chip die communicatie via de parallelle poort mogelijk maakt via een protocol genaamd Backpack, ontwikkeld door MicroSolutions.
Vooral de Iomega Ditto 2GB-drive is een van mijn favoriete drives voor het lezen van QIC-cartridges vanwege de uitstekende achterwaartse compatibiliteit met oudere cartridges. Hij kan niet alleen de Ditto-cartridges van de eerste partij lezen, maar ook andere tapes met een kleinere capaciteit, zoals Travan en QIC-3020, tot aan QIC-2080. Al deze varianten worden nu ondersteund als geëmuleerde cartridges in 86Box bij het configureren van de geëmuleerde Ditto-drive op de parallelle poort.
Een klein detail is dat Ditto-cartridges altijd vooraf geformatteerd werden geleverd, en er is geen manier voor de eindgebruiker om een volledig leeg tape-image te formatteren. Daarom heb ik een repository gemaakt met vooraf geformatteerde tape-images die je kunt downloaden en gebruiken. De repository bevat ook een Python-script waarmee je een tape-image kunt genereren met de gewenste capaciteit en een aangepast label. Veel plezier!