CP/M auf dem ESP8266

  • https://hackaday.io/project/20552-cpm-8266
    https://github.com/SmallRoomLabs/cpm8266
    https://github.com/SmallRoomLa…266/blob/master/README.md
    https://gojimmypi.blogspot.com…-emulator-for-cpm-on.html



  • Die simulierten Floppy Drives werden wohl in einem Datenbereich im seriellen Flash-Speicher des ESP8266 Moduls liegen. In diesen Modulen ist der Programmspeicher extern, Programmcode wird zur Abarbeitung jedoch blockweise in den internen RAM kopiert, soweit ich weiß. Teile des Flashspeichers, die keinen Programmcode enthalten, können als beschreibbarer Datenträger benutzt werden - die Arduino Bibliotheken für ESP8266 z.B. legen darin ein Dateisystem an. Größere ESP8266 Module (z.B. ESP-12) können mehrere MB Flashspeicher verbaut haben.

  • Da mich ein Bekannter nach dem RunCPM auf dem TTGO VGA32 nochmal auf das CP/M auf dem esp8266 aufmerksam machte, habe ich heute nochmal auf die github-Seite gesehen ;)


    Dort gibt es neben der LANGEN Compilier-Anleitung auch ein Release-File v0.4 ;) welches ein fertig Flash-File enthaelt

    (dazu auch ein readme mit Commandline fuer das esptool (Win/Linux)


    Damit war das flashen meines WeMos D1 ESP8266 ein Kinderspiel.


    Auf Laufwerk B: war schon MBASIC, dem habe ich per Zwischenablage eine ASCII-gespeicherte Version von FRACTAL.BAS eingefloesst fuer den Speed-Vergleich mit anderen MBASIC/Z80/CPM-Systemen :)


    Ich hoffte auch mit XMODEM von Laufwerk M: ein XMODEM-Receive hin zu bekommen, nachdem ich dem XMODEM.CFG die Parameter /Z2 und /X0 (fuer CON:) beibrachte (und die fuer SIO-B auskommentierte).

    Aber mit TeraTerm ist nach 3 MODEM-Bloecken leider Schluss.


    Allerdings wusste ich vorher nicht, dass die 15 Laufwerke nicht nur lesbar sondern auch beschreibbar sind :)


    Der Speed ist fuer eine ESP8266 echt nicht schlecht und die Laufwerke im Flash sind teilweise echt schneller als andere Emulationen.


  • Ich hoffte auch mit XMODEM von Laufwerk M: ein XMODEM-Receive hin zu bekommen, nachdem ich dem XMODEM.CFG die Parameter /Z2 und /X0 (fuer CON:) beibrachte (und die fuer SIO-B auskommentierte).

    Aber mit TeraTerm ist nach 3 MODEM-Bloecken leider Schluss.

    Es lag am "alten" XMODEM v2.4 im Laufwerk M: :(

    Das "Hehne-Ei-Problem" war nun wie bekomme ich die aktuelle v2.7 von XMODEM.COM auf den ESP8266?


    Das ganze Binary neu kompilieren wollte ich erst nicht, klappte aber auch auf meinem Pi-Computer nicht, weil er bash >= 3.1
    (oder doch <= ?) suchte und mein Pi-Computer schon bei v5.0.3 ist fuer die bash


    Also anderen Weg suchen. Ich suchte was einfaches um Binarys in ACI zu encoden und fand das alte UUENCODE.
    Also die v2.7 von XMODEM.COM UUENCODED und dazu ein UUDECODER in MBASIC.

    Der Transfer musste noch geklaert werden, aber dies klappte nach ein paar Versuchen.



    Ich habe den Weg als READ_ME beschrieben und mit ein paar Files/Informationen und Instruktionen als Paket verpackt.
    Die Anleitung jetzt hier schon mal zum lesen, den Rest findet Ihr im angehaengten .ZIP Paket :)


  • Das UUDECODE in Basic ist eine praktische Sache, kann man immer mal brauchen.

    Hast Du vielleicht dazu passend auch noch ein Basic-UUENCODE?

    In BASIC leider nicht :(
    Aber wenn Du das XMODEM am laufen hast reichen evtl. folgende Files von oldcomputers-ddns.org?:
    UUENCODE.COM
    UUENCODE.HEX

    UUENCODE.PAS


    Alternativ auch von retroarchive.org oder gleich die ganze Walnut Creek CP/M CD von 11/1994 (immer eine gute Wahl)


    Vor dem BASIC-UUDECODE hatte ich versucht die Pascal-Version zu uebertrage per "Send File" aber im Editor von Turbo Pascal kam dies nicht gescheit an (Formatierung kaputt) und lief nach dem compilieren auch nicht :(


    [EDIT] Der Forum-Editor hat es etwas gut gemeint mit dem Link zur Pascal UUENCODE-Variante :(
    Ich bekomms es nicht sauber weg.

  • Interessant finde ich halt das UUENCODE/DECODE als kleinsten gemeinsamen Nenner für nahezu alle Systeme.

    Das war mir als ein gangbarer Weg aus grauer Ur-/Vorzeit eingefallen ;)

    Zitat


    UUencode war das erste verbreitete Programm, das es ermöglichte, Binärdateien (also z. B. Bilder oder Programme) so umzuwandeln, dass sie nur noch aus „druckbaren ASCII-Zeichen“ bestehen und dadurch problemlos per E-Mail verschickt werden konnten, in denen nur ASCII-Zeichen erlaubt sind.


    Aufgrund der 7Bit-Uebertragung bzw. Darstellung auf der Console (musste ich von RunCPM lernen mit CONSOLE7.COM und CONSOLE8.COM) waere ein weiterer Kandidat wohl KERMIT da der wohl auch mit 7Bit arbeitet

    Zitat

    Kermit benutzt zum Überspielen von Dateien das Kermit-Protokoll. Ähnlich wie bei UUencode werden in diesem in der Grundeinstellung alle zu übertragenden Zeichen als 7-Bit ASCII-Zeichen kodiert. Dabei werden sowohl die Steuerzeichen (die ersten 32 Zeichen des ASCII-Kodes) als auch alle Zeichen, die außerhalb des Zeichensatzes stehen, mit einer entsprechenden Kennung markiert. Dies ist aber konfigurierbar, so dass auf entsprechenden Leitungen auch 8-Bit-Zeichen übertragen werden können.

  • Nach der einer Webseite von ht_deko zur Erstellung von cpm8266 mit WSL kann man mit dem esptool auch die 15 Floppy-Images backupen und restoren :) (zum uebersetzen der Seite am besten den Goggle Chrome nutzen)


    Dabei muss man wohl min. esptool 2.7/2.8 haben oder besser gleich was neues 3.0, denn die Version 2.51 die von debian als Paket mitgebracht wird unterstuetzt noch kein read_flash & write_flash (fuer bestimmte Bereiche des Flash)


    Installiert habe ich es nur bekommen (bei meinen "kleinen Rechnern" auf einem 32bit x86 debian buster

    (auf einem nanoPi unter armbian buster versagte die Installation mit einem Fehler) per:


    Code
    apt install python-pip
    pip install setuptools
    pip install esptool


    Zum Backup hatte ich das Script der WSL-Seite fuer Linux "angepasst:



    und zum Restore sieht es dann so aus:



    Zusaetzlich schoen ist daran, dass man einzelne Laufwerke backupen/restoren kann ist dass man die Disk-Images auch mit den CPMTool GUI bearbeiten kann.

    Dazu habe ich neben den Defs fuerd den Z80-MBC2 noch eine fuer die cpm8266-Disk-Images eingefuegt ;)