Arduino Projekten

Thu 23-May-19
01:34:36




ZoomFloppy

Datum: Sat 28 July 2018
Samenvatting: ZoomFloppy is een print om een oude Commodore Diskdrive (of Printer) aan te kunnen sluiten op een PC.


Met alle Commodore 64 projecten die ik hier al heb gedaan EN met het oog op de C64-mini is de volgende gedachte ontstaan: Wat doe je als je nog een bak met Cbm64 floppy diskettes (met een disk-drive) heb, maar geen werkende Commodore 64 om gegevens over te zetten? Dan ga je op zoek naar iets anders.

Zoeken op Internet geeft een aantal mogelijke oplossingen. Van een eenvoudige kabel, tot een complete tussen print.

Cbm Diskettes.

Al vroeg had Commodore een disk-systeem voor de toenmalige home-computers. Dat was een losse dik-drive, met een eigen CPU-systeem aan bord, die je met een kabel aan de toenmalige computer kon aansluiten. Bij de eerste Cbm-computers, de Pet gebeurde dit nog via een parallele kabel, maar met de komst van de Vic-20 is er een seriele variant ontwikkeld. Verder had men een doorlus systeem ontwikkeld, zodat er meerdere disk-drives, of een combinatie van disk-drive en printer op 1 connector van de computer kon worden aangesloten.

Dit seriele systeem bestond ook uit de toekenning van apparaat-nummers aan de apparaten. Zo waren de volgende nummers toegekend aan de apparaten.
 0 : Het Keyboard.
 1 : De Data-sette, de cassette-eenheid die gebruik maakte van standaard muziek cassettes.
 2 : Een seriele-eenheid op de User-poort, waarmee een RS-232 verbinding gelegd kon worden (met bijvoorbeeld een modem).
 3 : Het beeldscherm.
 4, 5 : Een printer.
 8, 9, 10 ,11: Een diskdrive.

Dit idee maakte dat er 2 printers en 4 disk-drives konden worden aangesloten op 1 seriele CBM-poort. Ook kon uitvoer gemakkelijk naar een ander apparaat worden omgeleid, zoals bij het uitprinten van een programma-listing. Zaken die ik later ook in MsDos en Unix tegenkwam onder het hoofdstuk "Piping".

De toenmalige disk-drive droeg het type-nummer 1541. Dit was een enkel-zijdige drive, of te wel diskettes konden slechts aan 1 kant (tegelijk) worden beschreven. Echter met een perforator-truuk kon je de diskettes ook omdraaien en zo twee keer zoveel data (gegevens en programmas) op een diskette kwijt.

Maar met het op de markt komen van de Cbm-128 werd er een dubbel-zijdige disk-drive ontwikkeld, de 1571. Daarnaast kreeg deze drive ook een krachtigere operating-systeem aan bord (de zogenaamde DOS). Ik had echter een commodore 64, zodat de extra kracht (standaard) niet door mijn machine gebruikt werd. Zelf heb ik niet veel gebruik gemaakt van de dubbel-zijdige mogelijkheid - Ik kwam maar 3 diskettes tegen.

Velen hebben pogingen gedaan om de communicatie tussen de disk-drive en de C-64 op te voeren met software (de zogenaamde turbo-loaders) en ook pogingen met extra kabels (via de User-poort van de C-64) werden met succes gedaan.

Na veel jaren de programmatuur op cassettes opgeslagen te hebben, had ik eingelijk genoeg geld om de 1571 disk-drive te kunnen kopen. Toen was dat Hfl.600,00, als jonge man van tegen de 20 was dat toen een berg geld. Maar de opslag ging nu EN sneller EN comfortabeler (ik hoefde geen cassettes meer terug te spoelen). En al die jaren heb ik de disk-drive altijd standaard aangesloten gehad en gebruikt. Het enige dat sneuvelde was het deur-hendeltje, wat toen vervangen werd met een potentiometer knop en een lange M3-schroef (zie foto's).

Ik had toen ook al een matrix printer, eerst een Commodore MPS803 ((8-dots EN met ketting-papiermechanisme), later werd dit een Star NX1000-X (speciaal aangepast voor Commodore) vanwege de NLQ (Near Letter Quality) mogelijkheid. Met de aanschaf van mijn eerste PC kwam de CBM-apparatuur steeds meer in de vergetelheid, maar wel altijd opgeslagen in de oorspronkelijke verpakkingen.

En anno nu is de behoefte ontstaan om in ieder geval alle diskette-inhoud over te zetten naar de Hard-Disk ... in afwachting tot ik het materiaal wellicht weer kan gebruken ... zoals op een opnieuw uitgebrachte C-64 (al of niet mini).

Van eenvoudige kabel (X1541) tot hybride kabel.

Wat men toen had verzonnen, was een eenvoudige kabel om de disk-drive aan te kunnen sluiten op een parallel-port van een PC en MsDos programmatuur om de disk-drive te kunnen gebruiken. In de begin jaren stak de parallel-port (Centronics-poort) eenvoudig in elkaar, het enige dat men toen nodig had waren geschikte pinnen op deze port om 4 signalen in te kunnen lezen, of uit te sturen.

De (seriele-)connector van de C-64 kende namelijk de volgende 4 signalen:

 RESET : Alle rand-apparatuur wordt ge-reset (= opnieuw ge-initialiseerd - zeg maar opnieuw aangezet).
 ATN : Met dit Attention-signaal vraagt de C-64 om de aandacht van een specifiek apparaat op de seriele bus.
 DATA : Hierover worden alle gegevens verstuurd.
 CLOCK : De Clock-signaal regelt de synchronisatie van de DATA.
 GND of GROUND: De gemeenschappelijke min van de bus. Niet echt een signaal-pin, maar wel nodig om het systeem te laten werken.

De eerste tussen-kabel noemde men X1541 (X van Exchange = uitwisselen). Het zag er eenvoudig uit en er waren geen extra componenten nodig, behalve twee connectoren en een stuk (4 aderige-)kabel.

Later werden de parallel-poorten ingewikkelder om door de PC direkt aan te sturen. Er kwamen oplossingen voor de kabel, waarbij al gauw extra diodes en transistoren nodig waren. Deze kabels kregen namen als XE-1541 (extended), XM1541 (multitask) en XA1541 (active).

Ook kwamen er tussen kabels met parallele data-overdracht tussen de disk-drive en de PC. Deze kregen namen als XH1541 / XH1571 (Hybrid), of XP1541/ XP1571 (Parallel).

Om een parallel-kabel te kunnen gebruken moest de disk-drive zelf worden gemodificeerd. Dat is dat er een vrije I/O-poort in de drive moest worden opgezocht (die was aanwezig op 1 van de CIA's of VIA's) en dat er op de PC de data via een Game-Poort (een 15-polige D-connector, gebruikt voor JoySticks) ingelezen werd.

Tegenwoordig, met alle USB-apparatuur, hebben de PC's geen enkele parallel-poort meer. En als er al een USB-Parrallel omzetter aanwezig is, zijn de pinnen van de parallel-poort niet direct aan te sturen door de PC.

Ik heb de ontwikkeling van de kabels toendertijd niet gevolgd, zodat ik nu alles alsnog moest uitzoeken. Ik heb een oude laptop gezocht (met Windows XP). Ik heb de XE-kabel gemaakt en toen maar uitproberen. Het zoeken naar goede drivers was ook al een speurtocht op zicht, vooral omdat het ook voor Windows XP moest zijn. Uiteindelijk is deze poging op niets uitgelopen.

Toendertijd was er nog geen Internet, alle informatie kwam via kennisen en vrienden die net iets meer connecties hadden. Later waren sommige BBS-sen (Bulletin Board Systems) goede informatie bronnen, te vergelijken met losse servers die niet met elkaar in verbinding stonden. Met elke BBS moest je met een Modem apart verbinding leggen en daar op zoek gaan naar informatie.

De ZoomFloppy.

Anderen liepen ook tegen dit soort problemen aan en er werden tussen printen ontwikkeld en gebouwd. Nu begon ik pas net met dit project en ik kwam uit bij het amerikaanse projekt van de ZoomFloppy. Volgens de site (vrijelijk vertaald):

Archiveer je Commodore Floppies naar je PC zonder de problemen van een externe parallel-poort, Interupt instelling, speciale adapters of bossen kabels of de alfabet-soep van disk-drive kabel adapters.

ZoomFloppy vervangt alle X*-1541 kabels met een eenvoudige USB-gebaseerde hardware apparaat, dat gegarandeerd werkt op de hedendaagse maschines die de hedendaagse multi-tasking Operating Systems gebruiken.

Plug het eenvoudig in in een vrije USB-poort, sluit je CBM-drive aan met een seriele kabel en verplaats je gegevens NAAR en VAN je software verzameing.

  1. Sluit elke CBM seriele apparaat aan op je PC, inclusief printers.
  2. Werkt met Windows, Mac OS X en Linux.
  3. Open Source oplossing, geen verkopers insluiting.
  4. Actieve ontwikkeling gemeenschap.
  5. Voeding via de USB-poort.
  6. Parallelle Hardware ondersteuning (soort van User-poort idee).

De ZoomFloppy is gebouwd rond een Atmel Mega 32U2 IC. Een programma in dit IC regelt alle communicatie tussen de USB-Poort en alle Commodore-poorten. De benodigde kabels zijn 1) een standaard USB-Kabel en 2) de standaard Seriele kabel die geleverd was bij de disk-drive zelf.

En de ZoomFloppy wordt nog steeds gebouwd. De prijs voor een gebouwde print is maar $35,00. Er kwamen nog vervoers-kosten bij van $15,00. Totaal (omgerekend naar Euries) maar Eu42,00. Op zich vond ik dat nog meevallen. En dan begint het wachten. Bij de aflevering bleek er nog Eu20,00 extra kosten bij te komen. Dit is bijna Eu7,00 BTW (= 21%) en Eu13,00 administratie-kosten voor het afhandelen van deze belasting. Dit laatste viel buiten de verwachting, maar de print was al hier in Nederland. Dus dan betaal je wel.

ZoomSoftware.

Ook nu was het zoeken naar de juiste software en ik kwam tenslotte uit bij de programmatuur van OpenCbm - inclusief ondersteuning en drivers van de ZoomFloppy.

Poging 1 was geen succes, maar na het goed doorspitten en de documentatie EN het juist opvolgen van de erin beschreven stappen, had ik toch succes. Na nog een veiligheids-akkefietje met de Windows Powershell (het moeten toevoegen van ".\" bij het starten van programma's in de huidige directory) kreeg ik eindelijk verbinding met mijn 1571-diskdrive.

Mijn eerste commando was om een lege diskette te formateren en de drive maakte het gewoonlijke tikkende geluid, wat erop wees dat het de lees-kop track voor track af liep gaan om alle sporen te formateren.

Het volgende commando was om de demo-diskette van de drive in te lezen, c.q. een image van de disk te maken - aka te rippen. Ook dit ging goed. Op het scherm verscheen ook keurig welke track de ZoomFloppy aan het lezen was en het eind resultaat was dat alles zonder fouten ingelezen was.

Met een hexadecimaal editor bekeek ik op de PC de inhoud van deze image. Al spoedig kwam ik bij adres $01 65 00 de bekende structuur van de directory-inhoud van de schijf tegen (vroegah had je ook disk-editors voor de C-64 en was ik ook al nieuwsgierig naar hoe men dingen opsloeg op schijf). De namen in deze directory kwamen overeen met wat ik toendertijd uitgeprint had - ik had in de diskette hoesjes een papiertje zitten met een overzicht van de namen in de directory, dat scheelde toen een hoop werk bij het zoeken van de juiste disk.

Het rippen van alle diskettes.

Na het rippen van de test/ demo diskette was het tijd om de andere diskettes te rippen.

De eerste diskettes gingen goed - deze hebben bijna 30 jaar opslag goed overleefd. Maar bij enkele diskettes kostte het toch meer tijd om de data goed in te lezen, hoewel dat bij enkele diskettes niet helemaal lukte. Ook dit werd keurig weergegeven op het scherm.

Was er een fout bij een eerste of laatste track, dan zag ik hier op zich niet zo'n probleem. De meeste diskettes waren nooit helemaal gevuld ... PLUS ik had al 30 jaar niets gedaan met de disks, dus een programma meer of minder vond ik wel acceptabel.

Maar hoe dichter de fouten in de buurt kwamen van Track 18, hoe problematischer ik het vond. In tegenstelling tot MsDos en Windows, bij Commodore bevindt zich op Track 18 de BAM (Block Allocation Map) (vergelijkbaar met de FAT (File Allocation Table) bij de PC) en de directory (ingang van alle gegevens). Commodore vond het veiliger om deze gegevens in het midden van de disk te leggen (dit is NIET het centrum).

Een enkele disk gaf zoveel fouten, dat ik het rippen heb onderbroken - een risico die ik nu incalculeer.

De data overdracht.

De snelheid van het rippen vond ik acceptabel, het duurde bijna 2 minuten om een complete diskette-zijde te rippen - dit is inclusief het wisselen van de diskette en het "opnieuw intikken" van de overdracht commando in de PowerShell. Het rip-proces duurde ongeveer 1 minuut. Dit komt neer op (maar) 4kByte per seconde is, getallen die we tegenwoordig op de PC onacceptabel vinden, maar in die tijd was dit gewoon snel - zeker in tegensteling tot de cassette opslag.

Of ik ook nog gegevens op cassette heb? Die nog geript moeten worden? Die heb ik toendertijd allemaal al overgezet op diskettes.

Commodore DOS.

Het aansturen van een disk-drive gebeurde bij een PC altijd al door het moederbord zelf. MsDos, wat staat voor MicroSoft Disc operating System, heeft zelf alle benodigde disk-commando's om de diskettes af te handelen. Wil je bijvoorbeeld een diskette formateren, dan is de PC bezet en tijdelijk niet te gebruiken voor andere doel-eindes ... Zo was dat vroeger bij MsDos.

Bij Commodore bevatte de disk-drives al van het begin zijn eigen computer-systeem, gebaseerd op de 6502 processor, die alle diskette zaken afhandelde. Ook dit werd Dos genoemd, de afkorting van Disc Operating Systeem. Dit kan wel verwarring veroorzaken met MsDos.

Zowel de Vic-20 als de C-64 konden omgaan met de DOS versie 2.0, de 1571 disk-drive had DOS versie 3.0 - wat ook ondersteund werd door de C-128. Ik noem hier in het kort de meest benodigde Dos-versie 2.0 commando's, hogere versies heb ik nooit gehad.

Zoals eerder is beschreven, had elke diskdrive een apparaat-nummer, standaard was dit nummer 8. Daarnaast beschikte elke disk-drive een aantal software-kanalen. Normaal programma's laden (Load) en bewaren (Save) ging via kanaal 0, of 1. Speciale diskette-commando's gingen allemaal via kanaal 15 - het zogenaamde commando-kanaal, zoals formateren, wissen, hernamen, etc. Dat kwam neer op het sturen van een string (een teken-reeks), naar het kanaal, bestaande uit een letter, een drive-nummer (bij de 1571 was dit altijd een 0 (NUL) - er waren apparaten met twee diskdrive) en als laatste de eventuele parameter(s) van dat commando. In lijstformaat:

 Initialiseren van de drive: "I0" (Hoofdletter "I" en cijfer NUL)- INITialize drive NUL - Het herkennen en detecteren van de ingevoerde media.
 Formateren van een disk : "N0:diskette_naam,id" - NEW drive NUL with name DISK-NAAM en een ID (bestaande uit twee tekens) - Formateren zegt genoeg.
 Copieren van bestand : "C0:nieuw_bestand=oud_bestand" - COPY drive NUL ... - Copieren zegt genoeg.
 Hernamen van bestand : "R0:nieuwe_naam=oude_naam" - RENAME drive NUL ... - Hernamen zegt genoeg.
 Wissen van bestand : "S0:bestands_naam" - SCRATCH drive NUL ... - Wissen zegt genoeg.
 Valideren van een disk : "V0" - VALIDATE drive NUL - Het opnieuw berekenen van de BAM. Alle ruimte die echt niet wordt gebruikt, wordt weer vrijgegeven.

Uiteraard was de disk-drive in staat om gegevens-bestanden (zoals DataBases) aan te maken, of, zoals Commodore het noemde, SEQuential Data File, RELative Data Files of Random Data Files. In lijstformaat:

 D: DEL- Deleted - Gewist.
 P: PRG- Program - Programma.
 S: SEQ- Sequentieel - Gegevens op volgorde.
 U: USR- User - Gebruikers-indeling (Database).
 R: REL- Relative.

En ook was het mogelijk om elk plekje op de disk direct te benaderen, de Direct Access (zoals Commodore het noemde). Daarbij was het opgeven van een track-nummer en sector-nummer voldoende - termen die we ook bij MsDos kennen en dezelfde betekenis hebben.

Precies alle basis-handelingen, die je van een disk-drive verwachtte, was aanwezig en werd beschreven in de handleiding van de drive. En alles was gewoon te doen in standaard C-64 Basic. Dit hielp wel mee om een goed begrip te krijgen over de werking ervan (als in: Wat bedoelen ze nou?). Meestal kwam dit neer op gewoon uitproberen en kijken naar de resultaten.

Bij de hier gebruikte "OpenCbm"-software zijn deze commando's rechtstreeks op te geven en naar de disk-drive toe te sturen.

ZoomFloppy en Arduino?

Wat heeft dit projekt te maken met de Arduino? De ZoomFloppy is gebouwd rond een Atmel Mega 32U2. En Atmel is dezelfde firma die het hart van de Arduino ontwikkeld heeft.

Dat maakt het voor mij dat dit een geldig projekt is in het rijtje van de Arduino.


Linken:

Linken:

  • De kabels zijn beschreven op de site: http://sta.c64.org/xcables.html (Datum: 1992 t/m 2000)

  • De ZoomFloppy is te bestellen op: http://store.go4retro.com/zoomfloppy/ (Datum: juli 2018) 
  • Afbeeldingen

    zoomfloppy_01-floppen.jpg
    1/11: zoomfloppy_01-floppen.jpg.
    zoomfloppy_02-diskdrive.jpg
    2/11: zoomfloppy_02-diskdrive.jpg.
    zoomfloppy_03-demodisk.jpg
    3/11: zoomfloppy_03-demodisk.jpg.
    zoomfloppy_04-xe-kabel.jpg
    4/11: zoomfloppy_04-xe-kabel.jpg.
    zoomfloppy_05.jpg
    5/11: zoomfloppy_05.jpg.
    zoomfloppy_06.jpg
    6/11: zoomfloppy_06.jpg.
    zoomfloppy_07-eerste_status.jpg
    7/11: zoomfloppy_07-eerste_status.jpg.
    zoomfloppy_08-alles_okee.jpg
    8/11: zoomfloppy_08-alles_okee.jpg.
    zoomfloppy_09-1571-test_demo.jpg
    9/11: zoomfloppy_09-1571-test_demo.jpg.
    zoomfloppy_10-error_track01.jpg
    10/11: zoomfloppy_10-error_track01.jpg.
    zoomfloppy_11-error_aborted.jpg
    11/11: zoomfloppy_11-error_aborted.jpg.