lørdag 28. juli 2018

Pi1541 Programvare og konfigurasjon

Har brukt de siste månedene, i alle fall litt av den ledige tiden de siste månedene, på å fikle med min Pi1541. Den er en utvidelse som plugges på Raspberry Pi 3B eller 3B+ for å gi den muligheten til å late som om den er en 1541-diskettstasjon sett fra en Commodore 64. Selve maskinvaren har jeg skrevet en del om allerede, selve programvaren har Steve White stått for og til å være så tidlig i utviklingsløpet så har den allerede støtte for det aller meste man kunne komme til å trenge.

For å komme i gang trenger man et SD-kort som skal plugges inn i Raspberry Pi-en, dette må være formatert med filsystemet FAT32 - noe som vil si at så lenge man ikke eksplisitt har gjort noen forsøk på å endre på kortet ut av pakken så skal det fungere helt fint. Størrelsen er opp til en selv, men dette er ikke spesielt kravstore systemer og vil tro det billigste du får fatt i (mest trolig 16 GB) likevel vil kunne holde på så og si alt noensinne produsert for datamaskinen. Deretter følges følgende steg:

  • Last ned siste versjon av firmware til Raspberry Pi fra produsenten, kopier filene bootcode.bin, fixup.dat og start.elf fra boot-katalogen til roten av SD-kortet.
  • Last ned Pi1541.zip fra hjemmesiden, pakk ut alle filene til roten av SD-kortet.
  • Neste steg er selve firmwaren til en 1541-diskettstasjon, den enkleste måten å få tak i en kopi av denne er å gå til nedlastingssiden for Commodore 64-emulatoren VICE, last ned en installerbar kopi eventuelt bare kildekoden øverst på siden (.tar.gz-filer kan enkelt åpnes ved bruk av 7zip). Uansett, kopier filen dos1541 fra katalogen data\DRIVES til roten av SD-kortet.
Alt skal nå være ferdig oppsatt for bruk, stapp det du eventuelt trenger av programvare-filer (d64-format) i katalogen 1541 for å ha disse tilgjengelig under bruk. Likevel så er det mye man kan konfigurere slik at man får oppsettet akkurat slik man ønsker å ha det, disse endrer du ved å redigere på filen options.txt som nå ligger på SD-kortet. Uansett så har du nå oversikten over hvordan man oppgraderer de ulike delene, men husk at det kan være en god ide å lese gjennom konfigurasjonen som følger med de nye versjonene ettersom ting kan ha endret betydning eller format.

Oppsett av display slik de modulene jeg har solgt til en håndfull heldige personer er litt mer komplisert og krever en del teknisk informasjon om selve modulenes adresser - disse står ofte også på selve kortene og i tillegg må man ha oversikt over hvilken kontroller som står på LCD-modulen. Legger ut oppdaterte versjoner av filene jeg bruker på min dropbox, så skal det være enklere å håndtere disse uten å studere alle finurlige detaljer.


Som man kan se av bildene over så har jeg prøvd ut to ulike skjermer, begge er basert kontrolleren SSD1306 og er svært lik utover orienteringen - det som skiller seg er antallet linjer med kun 2 for det minste. I praksis så er det fint med den ekstra oversikten man får ved å bla i lange lister med 4 linjer tilgjengelig, men det minste er langt raskere i bruk siden det er mindre som må tegnes opp. Den første konfigureres som ssd1306_128x64 mens det minste er ssd1306_128x32.

Den detaljen som sikkert kommer til å påvirke en mest under bruk er nok deviceID, som standard benyttes 8 - det er den samme 8 man kjenner igjen fra kommandoen load "$",8. Bruk av noen andre innstillinger var og er kun relevant med de som har mer enn en diskettstasjon, generelt sett fordi så mye av programvare/spill er hardkodet til å se etter filene sine på enhet 8 - med andre ord så vil man sjeldent kunne laste inn noe fra andre enheter!

Det var vel det, ikke så veldig mye om praktisk bruk denne gang - kanskje neste gang jeg får ånden over meg til å feste noe til papiret (skjerm?)...

onsdag 25. juli 2018

Pi1541 Emulering av diskettstasjon

Man har nostalgi for det meste fra barndommen vår, men når man omsider blir gammel så har man ikke lenger hverken tålmodigheten eller tid nok til å laste inn ting fra kassett. Derfor så har utallige frivillige folk med langt mer innsikt i elektronikk enn det jeg kunne håpe på å en gang akkumulere, satt hodene sine sammen for å lage løsninger som laster inn alt fra SD-kort (eller tilsvarende) på noen få øyeblikk.

Commodore 64/128 fikk dermed sin SD2IEC etter noen år, denne er ment å emulere en 1541-diskettstasjon og kombinert med enten JiffyDOS eller noe slikt som Final Cartridge 3 så er innlastingstiden håndterbar. Bakdelen er at den ikke fungerer, i alle fall på alt for mye det jeg prøvde å laste inn via den - hvorfor? Årsaken ligger i at den originale diskettstasjonen er en tilnærmet komplett Commodore 64 i seg selv, mange spill og programmer laster opp egen programvare som skal kjøre på den og en SD2IEC er ikke stand til å gjøre noe med den koden - den gjør bare de grunnleggende tingene, resten forstår den seg enten ikke på eller så gjetter den bare på hva datamaskinen vil at den skal gjøre!

Løsningen på dette er en enhet som er i stand til å emulere diskettstasjonen i seg selv, den første av disse er den FPGA-baserte 1541 Ultimate II som med en med en ventetid på rundt 6 måneder og en prislapp på rundt 2500 kr etter import ble uaktuelt for min del. Kanskje hvis jeg kun fokuserte på Commodore-maskiner, men som du kan se av oversikten så har jeg ikke helt klart å begrense med til en produsent. Den andre løsningen er programvare som kjører på en Raspberry Pi 3B eller 3B+, Pi1541 av Steven White og det eneste man trenger i tillegg er en måte å få koblet til kablene.

Option B, fra https://cbm-pi1541.firebaseapp.com/

I utgangspunktet så lister nedsiden opp to alternative modeller, A og B, som rimelig enkelt kan snekres sammen på kjøkkenbenken med et lite utvalg komponenter av typen. A er det første utkastet som ble lagt ut, men denne har en del elektriske forenklinger som gjør at denne ikke er i stand til å fungere sammen med en annen fysisk diskettstasjon. Hvorfor det da? Fordi dette er 5v TTL-basert logikk og under bruk så er det mye strøm som passerer mellom dem, den vil fungere en stund og så kommer noen av komponentene på Pi-siden av ting til å begynne å smelte. B-modellen, den jeg dermed vurderte som det eneste fornuftige alternativet løser dette ved å bruke en 7406 chip - denne har som hensikt å tåle denne belastningen, selve designet skal være hentet rett ut av skjemategningen til den originale diskettstasjonen.

Personlig så liker jeg ikke å lodde sammen ting på perf-board, kretskort for prototyping, når jeg ser for meg bruk av det man skal lage i etterkant så ender de opp med å bli litt for skjøre i bruk så da foretrekker jeg heller å bare tegne dem opp i KiCad eller annen egnet programvare og så ta tingene derfra. Se til høyre for den elektriske skjemategningen jeg endte opp med, for det meste identisk med B-modellen bare at jeg la til en ekstra DIN-kontakt for å kunne koble på flere enheter på IEC-bussen uten bruk av splitter-kabel. Vel, det og så tenkte jeg at før eller siden så måtte noen finne på å legge til et LCD-display så da designet jeg inn denne tilkoblet I2C-bussen på Pi-en.

Uansett, med litt ukonsentrert tegning, form og farge så fikk jeg til slutt det som skulle kunne bli til et kretskort. Tok noen snarveier underveis ved å ta utgangspunkt i en mal for Raspberry Pi-moduler, såkalte Pi-hats, så da slapp jeg å selv fundere ut plasseringen av skruhullene og matche pluggene opp mot selve Raspberry Pi 3B-kortet. Kretskort først som sist med andre ord! Ja, man må til Kina for å få disse tingene gjort innenfor private budsjetter og så må man bare smøre seg med tålmodighet!



I skrivende øyeblikk så er det nå et par måneder siden bestilling, mesteparten av tiden brukt på å skru sammen kortene og leke seg med dem. Kun avbrutt av et par uker ferie i syden, sånn som må til for å overleve vinter/sommer her nord! Tilbake til dagens tema, kortene endte opp med å se ganske bra ut og i mellomtiden har den programvaren også fått lagt til støtte for I2C display basert på SSD1306-kontrolleren - den typen jeg allerede har liggende en liten haug av, awesome!

Strengt tatt så la jeg inn plass på kretskortet for varianten av størrelsen 128x32 mens den som til nå støttes er 128x64, så ikke full klaff på første forsøk - likevel så er sikkert støtten rett rundt hjørnet, i mellomtiden så fant jeg ut at den litt større varianten også fungerer fint selv om orienteringen ikke stemmer helt overens med knappene - måtte bare droppe DIP-socketen for 7406 chippen og legge inn ekstra avstand på pinnene til displayet for å gå klar av brikken.

Siden jeg endte opp med langt flere moduler enn jeg selv skal kunne makte å bruke på et og samme tidspunkt og allerede har en bøtte med reservedeler, så tenkte jeg at resten fint kunne selges via finn.no slik at andre også kunne få ta del i det siste og råeste innenfor Commodore-teknologi! Ikke alle som trenger display eller to IEC-utganger så endte opp med å lage en begrenset utgave og en komplett utgave av kortet slik at det ble en litt billigere variant å velge mellom. Ser ut til at alle jeg har solgt er av den komplette varianten, men sikkert fint å ha noe å velge mellom.


En ting jeg ikke hadde kalkulert med når jeg vurderte å legge noen av disse ut for salg var kvaliteten på delene som man får tak i, det er ingen problemer når man skal lage en av noe ettersom man alltid får langt mer enn man trenger - prøver man derimot å lage 10 av dem siden det var den mengden kort jeg har, så vil man finne feil.

I2C level converteren jeg brukte var den samme som på hjemmesiden, men fant ut at et par av dem hadde svakheter og måtte byttes ut med mye banning til grunn - kunne greit nok testes først ved å sette multimeteret på 200k Ohm og så sjekke at man fikk rundt 136K mellom hver av de fire kanalene. 7406-modulen var litt verre siden komponent-testeren jeg har ikke har hørt om denne brikken, bakdelen med å holde på med 40 år gammel teknologi - denne måtte testes på et av kortene og de som ikke fungerte enten førte til at Commodore-maskinen låste seg ved lesing eller så rapporterte den Device not present. Kastet rundt 8 av 10 brikker av varianten SN7406N, men av de dyrere jeg fikk fatt på stemplet 7406PC så fungerte alle av dem uten problemer - enten så var det første settet av dem grillet under transport (ingen anti-statisk pose, noe som er vanlig fra ebay dessverre) eller så var de bare langt skjørere og rett og slett ikke håndterer den rå kraften som er å finne i C64-maskinen!

Nok om maskinvare-siden av ting, det er programvaren som er den spennende delen av alt dette...