Inhoudsopgave:

Pocket ZX (Handheld ZX-spectrum): 10 stappen
Pocket ZX (Handheld ZX-spectrum): 10 stappen

Video: Pocket ZX (Handheld ZX-spectrum): 10 stappen

Video: Pocket ZX (Handheld ZX-spectrum): 10 stappen
Video: Pocket PICOZX (Zx Spectrum 128k) Handheld - Tape loading emulation 2024, Juli-
Anonim
Pocket ZX (handheld ZX-spectrum)
Pocket ZX (handheld ZX-spectrum)
Pocket ZX (Handheld ZX-spectrum)
Pocket ZX (Handheld ZX-spectrum)
Pocket ZX (handheld ZX-spectrum)
Pocket ZX (handheld ZX-spectrum)

Ik ben een kind van de jaren 80 en heb goede herinneringen aan de 8-bit computers uit die tijd. Mijn eerste computer - een die een speciaal plekje in mijn hart heeft - was een Sinclair ZX Spectrum 48K. Nadat ik onlangs een aantal gemeenschappen op het web had ontdekt die gericht waren op oudere computers, besloot ik dat ik wat van die nostalgie voor mezelf opnieuw wilde beleven en installeerde ik de Fuse-emulator op mijn MacBook. Dit was een tijdje leuk, maar ik wilde echt een speciaal apparaat - bij voorkeur iets kleins, draagbaars en op zichzelf staands om in mijn levensstijl te passen. De keuze in dit stadium was om ofwel het pad van de geweldige Ben Heck te volgen en de originele ZX-hardware te verkleinen tot iets draagbaars, of om vals te spelen en emulatie te gebruiken op een kleine computer met één bord. ik ga vals spelen:)

Dus, wat wil ik van mijn draagbare ZX Spectrum?

  • Goedkoop: ik heb veel te veel projecten om grote sommen geld uit te geven aan een beetje leuke nostalgie.
  • Draagbaar: het moet iets zijn waarmee ik kan spelen op de bank of op een luie middag in de tuin.
  • Toetsenbord: Ik wil niet alleen games spelen, ik wil het ook programmeren. Om de volledige ervaring te krijgen, moet het die prachtige sleutelwoordsleutels hebben.
  • Joystick: Ik was nooit bezig met het spelen van platformgames met een toetsenbord. Natuurlijk, avonturenspellen, maar ik wil niet alleen avonturenspellen spelen, dus ik heb een joystick nodig.
  • Instant: Ik had een hekel aan het laden van tapes in de jaren '80 en ik kan me niet voorstellen dat ik er in de tussenliggende jaren meer van ben gaan houden.

Met dit alles in gedachten heb ik een blokschema opgesteld om me te helpen de verschillende componenten te begrijpen. Dus laten we gaan bouwen.

Stap 1: USB-toetsenbord en joystick

USB-toetsenbord en joystick
USB-toetsenbord en joystick
USB-toetsenbord en joystick
USB-toetsenbord en joystick
USB-toetsenbord en joystick
USB-toetsenbord en joystick

Het juiste toetsenbord krijgen is de sleutel tot het vastleggen van de look en feel van de originele ZX Spectrum. We bouwen misschien een handheld geëmuleerd apparaat dat niets gemeen heeft met de originele Spectrum internals, maar met een zorgvuldig ontwerp zou het mogelijk moeten zijn om iets te creëren dat doet denken aan de computerervaring van de jaren 80.

Beginnend met wat protoboards en een grote stapel tactiele schakelaars, experimenteerde ik met een paar ideeën en koos ik voor de verspringende lay-out die op de foto's wordt getoond. De protoboards die we gebruiken zijn standaard 7x9cm (26x31 holes) die online verkrijgbaar zijn bij veel retailers. De schakelaars zijn op het oppervlak gemonteerde versies die zachter aanvoelen en minder luidruchtig zijn dan hun meer gebruikelijke tegenhangers met doorlopende gaten, maar beide zouden moeten werken omdat hun lichaamsafmetingen bijna identiek zijn.

De joystickbesturing ging vervolgens naar de resterende ruimte direct boven het toetsenbord. Ik besloot om een 5-weg tactiele navigatieschakelaar aan de linkerkant en een grote vuurknop aan de rechterkant te gebruiken. De joystick zal ook dienst doen als controller voor het menusysteem van de emulator en als muis voor interactie met het onderliggende Linux-systeem, dus ik heb ook een kleine secundaire knop toegevoegd.

De microcontroller voor het toetsenbord is een Arduino Pro Micro. Dit is een klein bord dat kan worden geprogrammeerd als een USB human interface device (HID) zoals een toetsenbord, muis of joystick.

Nadat de schakelaars op hun plaats waren gesoldeerd, moet de matrix worden gebouwd die de rijen en kolommen met schakelaars met de microcontroller verbindt. Met deze matrix kunnen we alle 40 toetsen plus de 7 joystickknoppen verbinden met de 18 I/O-pinnen van de Pro Micro. Het Spectrum-toetsenbord hoeft niet meerdere toetsaanslagen aan te kunnen, behalve de Caps Shift- en Symbol Shift-toetsen, dus we gaan die op speciale pinnen plaatsen, dan hoeven we ons geen zorgen te maken over het gebruik van diodes om fantoomtoetsen te voorkomen. drukt. Ik heb een schema bijgevoegd om te laten zien hoe het toetsenbord, inclusief de matrix, is aangesloten. Eerst wordt elke kolom verbonden met een stuk enkeladerige draad en vervolgens worden de rijen verbonden met een enkeladerige draad die zorgvuldig is gevormd om de kolommen over te steken zonder kortsluiting. Dit kan een beetje lastig zijn, omdat je de rijdraden hoog genoeg moet hebben om contact met de kolommen te vermijden, maar laag genoeg om ruimte te laten voor alle bedrading die we nodig hebben tijdens de eindmontage. Ten slotte worden de rijen en kolommen verbonden met de Arduino-pinnen met draden van oude IDE-kabels.

Zoals hierboven vermeld, gaat de joystickcontroller ook functioneren als een cursorcontroller en een muis, dus we moeten kunnen schakelen tussen modi. De standaardmodus is de cursormodus, een combinatie van Caps Shift + de Fire-knop zal overschakelen naar de joystick-modus en de combinatie van de Symbol Shift + Fire-knop zal overschakelen naar de muismodus. Om te laten zien in welke modus het zich bevindt, zijn er een paar 3 mm LED's in het midden van het joystickpaneel. Een Power-LED is ook handig en een goede manier om dit met de Pi te voorzien, is door een LED aan te sluiten op de UART TX-pin van de Pi, omdat die constant gegevens verzendt terwijl het apparaat aan staat.

Om te voorkomen dat de losse draden tijdens gebruik gaan rafelen of de matrixdraden kortsluiten, is alles rijkelijk bedekt met hete lijm - lelijk maar effectief!

De laatste stap om het toetsenbord te laten werken, is om de Arduino te programmeren met de ZX_Spectrum_Keyboard-code uit mijn repository. Als dat klaar is, kun je de soldeerbout neerleggen, het toetsenbord op een gewone computer aansluiten en het gebruiken met een Spectrum-emulator zoals Fuse of Spectaculator. Maar we stoppen hier niet, dus laten we verder gaan…

Stap 2: LCD-scherm

LCD scherm
LCD scherm

De originele Spectrum heeft een schermresolutie van 256x192 pixels. Om (ongeveer) deze verhouding te behouden en zwarte balken aan beide kanten te vermijden, heb ik een Waveshare 3,2 320x240 TFT LCD-aanraakscherm geselecteerd dat is ontworpen voor de Raspberry Pi. Het zal niet rechtstreeks worden aangesloten op de GPIO-header van de Pi, zodat we het kunnen verwijderen de plastic rand van de connector en trim de pinnen Ik heb een 7x9cm protoboard bijgesneden tot 2,1x9cm (de exacte grootte doet er niet toe zolang de twee resterende hoekgaten uitgelijnd zijn met de bovenste toetsenbordgaten en er genoeg ruimte is om de GPIO-headerpinnen te solderen) en de pinnen op hun plaats gesoldeerd, wat ons een gemakkelijke manier geeft om het scherm boven het toetsenbord te monteren.

We hoeven alleen de SPI-, stroom- en touchscreen-I/O-pinnen op de Pi aan te sluiten - het kan behoorlijk lastig zijn om op te sporen welke pinnen echt nodig zijn, maar de informatie is beschikbaar als je goed genoeg kijkt. Het Waveshare-scherm gebruikt 10 pinnen: 4, 6, 9, 13, 15, 19, 21, 23, 24 en 26. Als je dit met een ander scherm maakt, moet je natuurlijk eerst de juiste pinnen verifiëren je soldeerbout pakken.

Er is geen speciale softwareconfiguratie nodig - installeer gewoon de driversoftware van de fabrikant en hij is klaar voor gebruik.

Stap 3: Draadloos (Bluetooth)

Het Raspberry Pi Zero-bord heeft geen draadloze mogelijkheden, slechts één bruikbare USB-poort en er zal niet genoeg ruimte zijn in de behuizing voor een USB-hub, dus ik moest een beetje inventief zijn om een soort draadloze mogelijkheid toe te voegen voor mijn build. Als u dit met de Zero W bouwt, kunt u deze stap overslaan.

Er is een leuke functie van de Raspberry Pi waarmee we een handige draadloze mogelijkheid kunnen toevoegen. Door een goedkope HC-05 Bluetooth seriële module aan de UART-pinnen van de Pi te bevestigen en de systeemconfiguratie aan te passen, is het mogelijk om draadloze toegang te krijgen tot de opdrachtregelterminal met seriële-over-Bluetooth. We kunnen dan gemeenschappelijke tools gebruiken om bestanden naar het apparaat te sturen en het bestandssysteem te beheren.

Stap 4: Voeding

Stroom
Stroom
Stroom
Stroom

Ik koos mijn batterij aan het einde van de ontwikkeling, dus ik moest een cel kiezen die in de beschikbare ruimte zou passen. Degene die ik koos was een 2000mAH 25C 1S Lipo (afmetingen: 81x34x9mm) verkocht als vervanging voor de Walkera Syma X5 drone. Het zou goed zijn om de batterij ter plaatse op te laden met een gewone USB-aansluiting en het apparaat te kunnen gebruiken terwijl het wordt opgeladen. We willen niet echt spelen met complexe stroomregelingscircuits, dus we gaan een kant-en-klare module gebruiken die USB-opladen biedt en ook een verhoogde 5V-uitgang om de Pi rechtstreeks van stroom te voorzien. Om ervoor te zorgen dat het apparaat volledig kan worden uitgeschakeld, zit er een schuifschakelaar tussen de uitgang van deze module en de Pi die ervoor zorgt dat de batterij nog steeds kan worden opgeladen, zelfs als het apparaat is uitgeschakeld. De Pi moet correct worden afgesloten om problemen met gegevenscorruptie te voorkomen. In plaats van in te loggen via Bluetooth-serieel, kunnen we een tactiele schakelaar verbinden met pin 5 (GPIO3) van de Pi en een klein script schrijven dat dit bekijkt en een afsluiting initieert wanneer erop wordt gedrukt. De stroom- en draadloze componenten zijn gesoldeerd aan een ander 7x9cm protoboard dat direct onder het toetsenbord zal zitten.

Stap 5: Alles met elkaar verbinden

Alles met elkaar verbinden
Alles met elkaar verbinden
Alles met elkaar verbinden
Alles met elkaar verbinden
Alles met elkaar verbinden
Alles met elkaar verbinden

Met alle verschillende onderdelen gebouwd, kunnen we de internals monteren. Het grootste probleem dat ik tijdens de montage tegenkwam, was dat de USB-poort van mijn Arduino Pro Micro brak, waardoor ik draden rechtstreeks op de soldeerpads moest solderen in plaats van een USB-kabel te gebruiken. Dit is een berucht zwak punt op de Pro Micro-borden, dus het is waarschijnlijk de moeite waard om er vóór de montage een flinke klodder hete lijm op aan te brengen om dit te voorkomen. Ervan uitgaande dat dit specifieke ongeluk je niet overkomt, heb je een keuze: je kunt een superdunne micro-USB naar micro-USB-kabel maken om je toetsenbord op de Pi aan te sluiten of je kunt een of beide uiteinden rechtstreeks op de borden solderen. Omdat ik de Arduino-kant moest solderen, heb ik ook de Pi-kant rechtstreeks op de testpunten aan de achterkant van het bord gesoldeerd. Er zijn voor- en nadelen aan elke optie, dus het is aan jou wat je voorkeur heeft.

We houden de planken bij elkaar met M3 nylon afstandhouders. We hebben 2x 9 mm afstandhouders nodig om de onderste gaten tussen het toetsenbord en het voedingsbord te verbinden. De bovenste gaten houden ook het scherm vast, dus we willen afstanden van 2,5 mm tussen het toetsenbord en het scherm en afstanden van 4,5 mm tussen het scherm en het voedingsbord. De zijfoto laat zien hoe dit eruit ziet. De afstandhouders zullen een beetje zorgvuldig moeten worden bijgesneden om alles parallel te krijgen - het kan een beetje strak passen met alle toetsenborddraden, maar het zou samen moeten gaan. Zoals te zien is op de foto's, kan het apparaat worden ingeschakeld en na montage worden gebruikt, zonder dat een echte behuizing nodig is. We zullen binnenkort een behuizing afdrukken, maar voordat we daar aan toe zijn, moeten we het besturingssysteem installeren en configureren.

Stap 6: Software

Met de interne onderdelen gemonteerd, kunnen we doorgaan met de installatie en configuratie van de software. De Raspberry Pi zal draaien op een standaard Raspbian installatie. De enige extra software die geïnstalleerd moet worden, afgezien van de TFT scherm drivers, is de Fuse applicatie. We gebruiken de SDL-versie om de juiste functionaliteit op volledig scherm te krijgen, die kan worden geïnstalleerd met:

sudo apt-get install fuse-emulator-sdl

Kopieer het 'shutdown'-script van mijn coderepository naar /home/pi/ om het indrukken van onze afsluitknop af te handelen

Om een seriële console via Bluetooth te krijgen, voegt u de volgende regel toe aan /boot/config:

enable_uart=1

We willen dat ons afsluitscript en de Fuse-emulator bij het opstarten worden uitgevoerd, dus voeg deze regels toe aan /etc/xdg/lxsession/LXDE-pi/autostart:

@fuse-sdl --no-sound --kempston --no-auto-load

Start de Pi opnieuw op nadat u deze wijzigingen hebt aangebracht en u zou klaar moeten zijn.

Stap 7: Behuizing en eindmontage

Behuizing en eindmontage
Behuizing en eindmontage
Behuizing en eindmontage
Behuizing en eindmontage
Behuizing en eindmontage
Behuizing en eindmontage

De behuizing is gemodelleerd in Fusion 360 (hoe dat te doen valt buiten het bestek van deze instructable). Er zijn 5 delen: de achterkant van de behuizing, de voorkant van het scherm, de voorkant van het toetsenbord, de aan / uit-knop en de klep van het bedieningspaneel. Het deksel van het bedieningspaneel moet worden afgedrukt in een flexibel filament (ik heb flexibel PLA gebruikt, maar een zachter materiaal zoals NinjaFlex is misschien beter); al het andere moet worden afgedrukt in een hard plastic (ik gebruikte Filamentum black PLA).

Om de aan/uit-knop wat weerstand te geven en om te voorkomen dat hij gaat rammelen, plakt u wat 3 mm zelfklevend schuim op de achterkant en drukt u vervolgens een gat van 4 mm uit zodat deze goed over de verticale tac-schakelaar op de voedingsprintplaat past. Het kan zijn dat u een rand iets moet bijsnijden, zoals te zien is op de foto's, om te voorkomen dat het voedingsbord blijft haken. Ik vond het ook handig om een klein beetje lijm te gebruiken om de knop op de aan / uit-schakelaar te houden.

We moeten een paar nylon afstandhouders in de bovenste bevestigingen op het voorpaneel van het scherm lijmen, zodat de bovenste delen van de behuizing stevig kunnen worden vastgemaakt. Eenmaal gedroogd, trim de afstandhouders gelijk.

Om de planken te passen, moeten we eerst de montagepalen maken. Verwijder de koppen van enkele M3-nylon schroeven en lijm de onderdelen met schroefdraad in de onderste gaten van elk van de frontpanelen. Als deze zijn opgedroogd, kunnen de 2 frontpanelen aan elkaar worden gelijmd en kan het toetsenbord worden vastgezet met behulp van de afstandhouders van 9 mm en 2,5 mm. Vervolgens, met dit op zijn plaats, kan het scherm op de bovenste palen worden geplaatst en kunnen de afstandhouders van 4,5 mm worden toegevoegd. Ten slotte kan het voedingsbord op zijn plaats worden geplaatst en kunnen de draden zo worden geplaatst dat de achterkant kan worden gemonteerd.

De batterij moet op zijn plaats worden geplakt met wat dubbelzijdig plakband of schuimfolie en op de stroomconnector worden aangesloten. Nu kunnen de twee helften bij elkaar worden gebracht en kunnen enkele korte verzonken M3-machineschroeven worden gebruikt om alles op zijn plaats te bevestigen.

Draai het ten slotte om en lijm het deksel van het bedieningspaneel op het toetsenbordpaneel. Ik deed dit met een tweecomponenten epoxylijm voor een sterke hechting.

Stap 8: Toetsenbordoverlay

Toetsenbordoverlay
Toetsenbordoverlay
Toetsenbordoverlay
Toetsenbordoverlay
Toetsenbordoverlay
Toetsenbordoverlay

We zijn bijna klaar. Het enige dat ontbreekt, zijn enkele belangrijke markeringen en een overlay, zodat we weten hoe we bij al die prachtige zoekwoorden kunnen komen.

De primaire letters en cijfers staan op de eigenlijke schakelaartoppen. Ik vond een paar hele kleine 2,5 mm lettertransfers die perfect passen op de bladen met een diameter van 4 mm. Ze zijn een beetje lastig aan te brengen omdat de toppen bewegen als je erover wrijft, maar je krijgt nogal wat letters in een pakket, dus het is prima om wat fouten te maken. Uiteindelijk heb ik er een paar aangeraakt met een fijne permanente marker, hoewel ik achteraf gezien had moeten proberen ze in warm water te weken en ze op hun plaats te schuiven (als je ooit een modelkit hebt gebouwd, ben je bekend met dit proces). Om de letters tijdens het gebruik te beschermen, dep ik wat transparante nagellak op elke toets.

Om te voorkomen dat de zilveren lichamen van de schakelaars door de openingen in de overlay zichtbaar zijn, heb ik ze ingekleurd met een permanente marker - dit is te zien in de onderste rij van een van de foto's.

Ik ontwierp de afgedrukte overlays in het open source grafische programma GIMP en drukte ze vervolgens af op mat papier van fotokwaliteit. In het ideale geval zijn de overlays zo dun mogelijk - ik kon de achterkant van het Epson-papier dat ik gebruikte heel gemakkelijk losmaken, hoewel dit niet bij alle merken het geval zal zijn. Om de afdruk te beschermen, heb ik het papier bedekt met een doorzichtig, zelfklevend vinylvel en dubbelzijdig plakband op de achterkant aangebracht om het op de behuizing te plakken. Voordat we de overlays naar beneden plakken, moeten we echter de gaten uitprikken. Ik gebruikte een goedkope leren perforator van 4 mm en kreeg de beste resultaten door de ponsen te slijpen en direct tegen een stuk aluminiumplaat van 3 mm te snijden. Dan moeten de overlays gewoon worden uitgelijnd en vastgezet.

Stap 9: Conclusie

En we zijn klaar! Dit was een vrij groot project dat een scala aan vaardigheden vereiste, waaronder basiselektronica, solderen, 3D-modellering, programmeren en zelfs een beetje grafische lay-out. Het is uiteindelijk zeer de moeite waard geweest en het voltooide apparaat is erg leuk om mee te spelen, maar hoe presteert het in vergelijking met mijn oorspronkelijke criteria?

Goedkoop: de totale kosten van alles, inclusief de huidige verkoopprijzen van artikelen die ik al bezat en de briefpapierartikelen zoals dubbelzijdig plakband die veel langer meegaan dan dit project, bedragen ongeveer £ 80, wat het een betaalbaar project maakt.

Draagbaar: het is zeker draagbaar. Dit apparaat past comfortabel in een zak en is volledig op zichzelf staand, zodat het overal kan worden gebruikt. Als ik het opnieuw zou bouwen, zou ik een platte 4-weg joypad-achtige controller maken in plaats van de navigatiestick te gebruiken omdat deze boven de lijn van het apparaat uitsteekt, waardoor het kwetsbaar is voor beschadiging. Ik zou ook graag willen zien of er een niet-aanraakscherm van vergelijkbare grootte en verhouding beschikbaar is met een meer krasbestendige hoes, omdat ik de touchscreen-interface niet nodig heb en het resistieve oppervlak bijzonder gevoelig is voor beschadiging.

Toetsenbord en joystick: ik ben erg blij met hoe deze zijn gelukt. Hoewel het niet het doodse gevoel van het origineel heeft, doet het gebruik van het toetsenbord verrassend denken aan de oude ZX Spectrum - de lay-out, overlay en de implementatie van trefwoorden werken goed samen om dit te bereiken. Het USB-toetsenbord kan ook op zichzelf worden gebruikt met een computer waarop de Fuse-emulator wordt uitgevoerd om dezelfde ervaring te bieden.

Direct: met behulp van de Bluetooth seriële module is het relatief eenvoudig om tape-archieven van een andere computer naar het apparaat over te brengen zonder de Fuse-interface te hoeven verlaten, en het zou mogelijk moeten zijn om het proces verder te stroomlijnen door een script aan de clientzijde te schrijven om een bestand te verzenden naar het apparaat. Ik zou liever de standaard Bluetooth "verzenden naar apparaat" bestandsoverdrachtfunctie gebruiken die in de meeste besturingssystemen is ingebouwd, of een goed systeem voor het delen van bestanden zoals Samba. Die zullen echter alleen beschikbaar zijn met het Pi Zero W-bord en dat heb ik niet gebruikt voor deze build.

Naast de hierboven genoemde items, zou ik, als ik dit project opnieuw zou beginnen, vroeg in het project een dunnere batterij met een grotere capaciteit kiezen en eromheen ontwerpen in plaats van aan het einde van het project een batterij van het juiste formaat te moeten selecteren. het project. Ik zou ook een Pi Zero W gebruiken in plaats van een Bluetooth seriële module om de opties voor het verzenden van bestanden naar het apparaat uit te breiden. Een andere voor de hand liggende verbetering zou een soort indicatie van de batterijstatus van de hardware zijn, aangezien er momenteel geen manier is om te zien hoeveel lading er nog over is. Ik zou ook overwegen om een op Ramdisk gebaseerd besturingssysteem zoals Alpine Linux te gebruiken dat toleranter zou zijn voor harde shutdowns en een enkele aan / uit-schakelaar zou moeten toestaan zonder de noodzaak van een aparte afsluitknop - veel meer zoals de originele ZX Spectrum, alleen haal de stekker uit het stopcontact als u klaar bent.

Het zou interessant kunnen zijn om een aangepaste PCB voor dit apparaat te ontwerpen, waardoor we mogelijk de voedingscomponenten op de achterkant van het toetsenbord kunnen plaatsen in plaats van een apart bord te hebben. Dit zou de diepte van het voltooide apparaat aanzienlijk kunnen verminderen. Het zou ook de montage van het apparaat vergemakkelijken en het potentieel bieden van een soort zelfmontagekit. Als er genoeg interesse is in dit project, zou ik een versie 2 kunnen maken die deze problemen aanpakt.

Stap 10: Bronnen

De volgende middelen zijn nodig om dit project te bouwen:

3D-afdrukbare case-bestanden (Thingiverse):

Code (Github):

Aanbevolen: