CP/M en Apple II op een bordje dat door de brievenbus past

[ 87 keer bekeken / views ]
Tegen het einde van mijn vakantie begon een idee vorm te krijgen. Zou ik met een ESP32-S3 een KIM-1-emulator kunnen bouwen die dichter bij mijn eerste computer komt?

Here you find an English version of this post

Wie mijn website al wat langer volgt, kent misschien mijn posts over de KIM-Uno en de microKIM. Aan allebei heb ik het nodige gesleuteld. Bij de KIM-Uno zat dat vooral in de firmware, onder meer in de aansturing van de zevensegmentendisplays. Voor de microKIM bouwde ik onder andere een geheugenuitbreiding en een digitale vervanger voor de cassetterecorder. Met een moderne ESP32-S3 leek het me leuk om opnieuw te kijken hoe dicht ik bij het gedrag van die oorspronkelijke KIM-1 kon komen.

Maar als ik toch met een ESP32-S3 aan de slag ging, zou ik daar dan ook CP/M op kunnen draaien? En hoe zit het met een Apple II? Voor ik het wist, zat ik te bedenken hoe ik vanaf één bordje verschillende retrocomputers zou kunnen opstarten.

Ik bestelde nog tijdens mijn vakantie een LOLIN S3 Pro met een microSD-kaartslot. Toen ik thuiskwam, lag het bordje al in de brievenbus. Ik kon meteen aan de slag.

Wat is de ESP32S3 Retro? 

De ESP32-S3 Retro computer is een apparaat waarop de software staat voor verschillende CPU’s, Operating Systemen, geheugen en diskette stations. Veel andere emulatoren maken gebruik van een VGA uitgang waar een vintage monitor op aangesloten kan worden (maar dan wel weer met een ‘modern’ PS/2 toetsenbord). Ik heb geen VGA monitor en hoewel ik de look en feel van de retro computers wil herbeleven zit ik niet te wachten op een groot en primitief beeldscherm. Deze retro computer is getuned voor uitvoer naar een vt100/ansi terminal. Om dit te gebruiken moet je op je PC software draaien die een vt100/ansi terminal emuleert. Goede kandidaten zijn minicom en Tabby die voor zowel Windows, Linux als MacOS beschikbaar zijn. Maar er bestaan vast nog wel meer van dit soort programma’s.

Nadat via een seriele poort verbinding is gemaakt met de esp32s3-retro computer verschijnt er een keuze menu waarin gekozen kan worden voor:

Opties 1 t/m 5 spreken voor zich. Zij starten een emulator op. Optie 6 is speciaal en wordt verderop in deze post beschreven.

De KIM-1 emulator heeft het niet gehaald. Bij de KIM-1 is vooral de aansturing van het HEX-toetsenbord en de 7-segment display’s een belangrijk onderdeel van deze single board computer. Ik wilde uiteindelijk een retro computer maken zonder dat ik draadjes hoef te solderen. Gewoon Lean & Clean. De KIM-1 past hier niet in.

De hardware

De LOLIN S3 Pro, de microSD-kaart, de USB-aansluiting en de behuizing. Ik heb voor dit bordje gekozen omdat het microSD card-slot binnen de PCB valt.

Ik verwacht dat de microSD card (aanbevolen 16GB of 32GB) zo ruim bemeten is dat het vrijwel nooit nodig zal zijn deze uit het bordje te halen. Voor de behuizing betekend deze opstelling dat er geen rekening hoeft te worden gehouden voor een uitsparing voor de microSD card. Vaak steken deze ook behoorlijk uit wat het geheel weer onnodig kwetsbaar maakt.

De retrocomputers en hun software

Algemeen

Maak in de hoofdmap van de microSD-kaart de map retro aan. Daarin komen layout.txt en de mappen images en backups. Maak in beide mappen de vijf onderstaande submappen aan.
Let op: alles in kleine letters (Lower Case).

     /retro/
       layout.txt
       images/
         cpm80/
         cpm86/
         ucsd/
         apple2/
         swtpc/
       backups/
         cpm80/
         cpm86/
         ucsd/
         apple2/
         swtpc/

Het bestand /retro/layout.txt moet exact deze twee regels bevatten.

ESP32-S3-RETRO
layout=1

Voor alle emulatoren heb ik een paar programma’s geschreven die op iedere emulator dezelfde functie hebben. De twee belangrijkste zijn SYSVIEW en BENCHxyz. Het eerste programma laat informatie zien over de implementatie van die specifieke emulator.

BENCHxyz geeft een idee van de snelheid van de emulator ten opzichte van het operating system op de originele hardware.

  • De INTEGER test laat de processor veel berekeningen met gehele getallen uitvoeren. De test meet hoe snel de emulator dat rekenwerk afhandelt.
  • De SIEVE zoekt priemgetallen met de zeef van Eratosthenes. Het programma streept veelvouden weg in een tabel. Daarmee test het vooral hoe snel de emulator door lussen loopt en waarden in het geheugen leest en wijzigt.

CP/M-80 (2.2)

Keuze 1 in het systeem menu start de CP/M-80 emulator:

Het programma SYSVIEW laat deze informatie zien:

CP/M-86

Keuze 2 in het system menu start de CP/M-86 emulator:

Het BECH86 programma geeft deze cijfers:

Volgens deze Benchmark is de CP/M-86 emulator met de INTEGER test ongeveer even snel als een CP/M-computer die op 7,5 MHz draait. De SIEVE test draait ongeveer even snel als een CP/M-computer die op 14 MHz geklokt is.

UCSD (Apple) Pascal

Keuze 3 in het system menu start de UCSD (Apple) Pascal emulator:

SYSVIEW laat de volgende informatie zien:

Apple IIe

Keuze 4 in het systeem menu start de Apple IIe emulator:

Het programma BENCH2ASM (dit is een binary, er is ook een BENCH2BAS aanwezig) wordt gestart met de opdracht

BRUN BENCH2ASM

en laat de volgende meting-waarden zien:

Hieruit blijkt dat de 6502 emulator de INTEGER test op een kloksnelheid van ongeveer 3 MHz uitvoert en de SIEVE test op een kloksnelheid van ongeveer 2,5 MHz. Gemiddeld draait deze emulator op een kloksnelheid van 2,9 MHz.

SWTPC 6800

Deze emulator is nog niet geïmplementeerd.

Hoe de firmware in elkaar zit

De ESP32-S3 draait één firmware met een gemeenschappelijk opstartmenu en drie emulatorkernen. Het menu biedt vier werkende omgevingen, omdat Apple II en UCSD Pascal dezelfde 6502-kern delen.

MenukeuzeWat de firmware start
CP/M-80Een Z80-emulator met CP/M 2.2
CP/M-86Een 8086-emulator met CP/M-86
Apple IIDe Apple II-emulator met zijn eigen schijfconfiguratie
UCSD PascalDezelfde Apple II-emulator, maar met een schijfconfiguratie die Apple Pascal opstart

Bij het aanzetten of resetten initialiseert de firmware de USB-console en de drive-led. Ze koppelt ze de opslag aan en controleert ze of de benodigde systeembestanden aanwezig zijn. Daarna verschijnt het menu in de vt100/ansi terminal. Kies je een omgeving, dan initialiseert de firmware die emulator en draagt ze de uitvoering eraan over.

De emulatorkern bootst een Z80, 8086 of 6502 na en voert de machine-instructies van die processor uit. De ESP32-S3-firmware koppelt de geëmuleerde computer aan de fysieke hardware, zoals de USB-aansluiting en de microSD-kaart. Zo loopt de tekstinvoer en -uitvoer via dezelfde USB-console en gebruikt de firmware diskimage-bestanden als virtuele schijven. Binnen de emulator gebruik je schijven zoals je gewend bent in CP/M of op een Apple II. CP/M gebruikt bijvoorbeeld A:. Wanneer het geëmuleerde systeem gegevens leest of schrijft, voert de firmware die bewerking uit in het diskimage dat aan die drive is gekoppeld.

System/Boot disk

Elke emulator heeft een eigen opstartschijf. Die staat als diskimage op LittleFS, in het interne flashgeheugen van de ESP32-S3. Daar staat ook de standaard schijfconfiguratie, met verwijzingen naar de overige virtuele drives. Daardoor start de emulator altijd vanaf zijn eigen opstartschijf, ook als er geen microSD-kaart is geplaatst of als er via drives.cfg geen extra schijven zijn gekoppeld. Met drives.cfg bepaal je welke extra diskimages beschikbaar zijn nadat het systeem is opgestart.

Retro Disk Manager

File Transfer is een aparte menukeuze. Daarmee start je de webserver met de Disk Image Manager op.

Ga in je browser naar het getoonde IP adres (in dit geval 192.168.12.44). Je kunt nu met je browser complete diskimages overzetten of, bij ondersteunde formaten, bestanden in een diskimage beheren. De diskimages kunnen zowel in het LittleFS staan (system/boot disks) of op de microSD-kaart.

In de repository heb ik veel software voor de verschillende operating systemen opgenomen. Mocht de software die jij wilt gebruiken er niet tussen zitten, dan kun je bijna alles op archive websites vinden. Vaak niet als losse programma’s maar als onderdeel van een diskimage. De meeste formaten diskimages kun je met de Retro Disk Manager inlezen en dan kun je de software waar je naar op zoek bent eenvoudig uit de diskimages halen en in een werk-diskimage van jouw installatie wegschrijven.

Zelf aan de slag

Wat je nodig hebt, waar je de firmware en documentatie vindt en hoe je het project voor het eerst opstart kun je vinden in de GitHub-repository. Er staat heel veel documentatie in de repository maar dat komt omdat het een complex project is.
Ik heb voor de hardware een LOLIN Wemos S3 gebruikt maar ieder bordje met een ESP32-S3 is geschikt (mits genoeg (PS)RAM). Als je niet met draadjes aan de weer wil is een bordje met een microSD card adaptor noodzakelijk. De RGB led is een leuke, maar niet noodzakelijke optie.

Je kunt je ESP32-S3 bordje zonder VScode en esp32-idf flashen vanaf mijn flasher website. Je mist dan wel alle extra software die ik heb verzameld, maar die kun je ook zelf downloaden zoals hiervoor geschreven.

This entry was posted in Aandewiel, Computer, emulator, ESP32, Firmware and tagged , , , , , , , , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *

The maximum upload file size: 4 MB. You can upload: image, other. Links to YouTube, Facebook, Twitter and other services inserted in the comment text will be automatically embedded. Drop file here

This site uses Akismet to reduce spam. Learn how your comment data is processed.