pdp11/40 Emulation auf dem Raspberry Pi Pico

  • Bei mir hat alles geklappt, funktioniert :thumbup:

    Allerdings:

    Leider wird die serielle Verbindung UART TX , UART RX , z.B Pin 1 und 2 leider

    nicht benützt, bzw ist nicht implementiert.

    Ich wollte das PICO in ein VT100 einbauen und da gibt es halt kein USB.

    Werde mal den Entwickler kontaktieren, aber erst im Januar 2023 wenn ich

    wieder zurück bin.

  • Allerdings:

    Leider wird die serielle Verbindung UART TX , UART RX , z.B Pin 1 und 2 leider

    nicht benützt, bzw ist nicht implementiert.

    Der erste Ansatzpunkt (zum weitersuchen?) den ich jetzt gefunden habe in der CMakeLists.txt
    (muss man also neu compilieren):

    Code
    # enable usb output, disable uart output
    pico_enable_stdio_usb(Pico_1140 1)
    pico_enable_stdio_uart(Pico_1140 0)

    D.h. mann muss noch rausfinden, wie man die Pins/den Port und die Baudrate definiert - dem Rest vom Source wird es wohl egal sein, wo er die Daten rein/raus bekommt?


    [EDIT]

    hier gehts wohl "weiter": https://raspberrypi.github.io/…p__pico__stdio__uart.html

    und hier https://www.electronicshub.org…-pico-serial-programming/und hier https://github.com/raspberrypi/pico-sdk/issues/1025


    ODER


    Code
    stdout_uart_init()
    void stdout_uart_init ( void )
    
    
    Explicitly initialize stdout only (no stdin) over UART and add it to the current set of stdout drivers.
    This method sets up PICO_DEFAULT_UART_TX_PIN for UART output (if defined) , and configures the baud rate as PICO_DEFAULT_UART_BAUD_RATE

    bzw. aus den pico-examples - die man mit/neben dem pico-sdk installiert:

    ( /pico/pico-examples/hello_world/serial )


    hier beim letzen Code dann den Bereich stdio_init_all durch den Bereich stdio_uart_init_full erstzen?

    4 Mal editiert, zuletzt von guidol ()

  • Bei mir hat es jetzt auch funktioniert! Es lag an der SD-Karte. Mit einer anderen SD-Karte hat es funktioniert. Die Disk-Images musste ich auch noch mal auf die Karte kopieren, die waren wohl nicht vollständig runtergeladen. An ein Unix ohne vi muss ich mich aber erst gewöhnen... ;)


  • Bei mir hat es jetzt auch funktioniert! Es lag an der SD-Karte. Mit einer anderen SD-Karte hat es funktioniert. Die Disk-Images musste ich auch noch mal auf die Karte kopieren, die waren wohl nicht vollständig runtergeladen. An ein Unix ohne vi muss ich mich aber erst gewöhnen... ;)

    Freut mich zu hoeren, dass es geklappt hat :)

    Wenn man RT-11 als OS nimmt, dann gibt es den KED Editor.

    Fuer den ersten KED Einstieg war ich froh um einen Blog-Post von "Big Dan" vom 22.11.2022


    Fuer RT-11 Images schau mal in den Issue-1 Thread auf Github (am besten ganz am Ende)

    Und hier eine Version noch fuer den Pico in unserer SPI-Config, die nur noch .dsk/.DSK Files anzeigt und damit .-Dateien und Verzeichnisse nicht mehr die Anzeige "zerlegen" öassen ;)

  • Die Version v5.07SB von RT-11, die ich auf dem Pico 1140 getestet habe, macht im Gegensatz zur Nutzung auf dem original simh Probleme :(


    Editiert man mit dem KED ein File haengt dieser "zufaellige" Zeichen in zufaellger Anzahl an.


    Wobei zufaellige Zeichen manchmal garnicht zufaellig sind, da diese dann aussehen wie Code aus dem RT-11.

    Als wurde ein bestimmer Speicherbereich mit ins File uebernommen (Memory-Leak?), dass simh nicht hat.

  • Ian Schofield hat einen Bugfix fuer die Nutzung des KED-Editors unter RT-11 v5.07SB erstellt.

    Dieser arbeitet fein unter RT-11 v5.07SB und RT-11 v5.04F


    Unter RT-11 v4.00C ist mir aufgefallen, dass der KED dort (jetzt?) kein PROTECTED File editieren kan bzw. KED kein neues File erstellen mag.



    Anbei meine kompilierte Version vom 06.12.2022 fuer den Pico (nicht PicoW).


  • Eigentlich wollte ich gestern Abend mal das Apfelmännchenprogramm in C auf der PDP-Emulation laufen lassen. Aber ich muss zugeben, dass ich gescheitert bin. :(

    Es sollte unter UNIX V6 laufen. Erste Hürde: der Editor. Ein vi, mit dem ich mich einigermaßen auskenne, gibt es nicht, also muss ich wohl ed benutzen. ed stammt noch aus der Zeit, als es Printerterminals gab. Das sind Terminals, die eine Drucker, statt einen Bildschirm als Ausgabemedium haben. Daraus folgt, das ed zeilenorientiert ist, damit es auch mit einem Drucker funktioniert. Da Drucker aber Krach machen und Papier (ver-)brauchen, ist ed äußerst sparsam mit Hilfstextexten und Fehlermeldungen. Aber nach etwas ausprobieren kam ich soweit zurecht, dass ich kleinere Programme eintippen konnte. Allerdings frage ich mich, wie man bei Sourcecodesfiles mit mehr als 20 den Überblick behält.

    Die zweite Hürde, an der ich dann schließlich gescheitert bin, ist die Programmiersprache C. Ein C-Compiler ist vorhanden und ein "Hello World!" lies sich auch problemlos übersetzen. Beim Apfelmännchenprogramm gab es dann aber Probleme. Schleifen mit float gehen nicht, mit double gehts auch nicht. Zum Glück gibt es noch die Webseite von Dennis Ritchie (https://www.bell-labs.com/usr/dmr/www/). Hier gibt es noch ein "C Reference Manual" und auch ein C Tutorial aus der Zeit, als UNIX V6 aktuell war, was so Mitte der 70er Jahre war. Schleifen mit int und den int-Wert einer double-Variable zuweisen lies sich dann zwar kompilieren, aber bei der Ausführung stürzt das Programm ab - mit niedlichen, kleinen core-Files mit nur 4k Größe. ;)

    Ich habe keine Ahnung, an was es genau liegt. Vielleicht kann der Compiler (noch) nicht richtig mit floats und doubles umgehen oder vielleicht liegt es auch an der Emulation. Vielleich sollte ich mal simh installieren und es dort probieren.

  • Eigentlich wollte ich gestern Abend mal das Apfelmännchenprogramm in C auf der PDP-Emulation laufen lassen. Aber ich muss zugeben, dass ich gescheitert bin. :(

    Es sollte unter UNIX V6 laufen. Erste Hürde: der Editor.;)

    Ich habe keine Ahnung, an was es genau liegt. Vielleicht kann der Compiler (noch) nicht richtig mit floats und doubles umgehen oder vielleicht liegt es auch an der Emulation. Vielleich sollte ich mal simh installieren und es dort probieren.

    Tja- ich musste beim BASIC - wie man oben beim STAR lesen konnte - feststellen, dass BASIC-11 schon weiter als CP/Ms MBASIC ist, aber noch lange nicht auf dem Stand eines GW-BASIC.

    Dies brachte auch einige programmtechnische Umwege ;)


    Bei BASIC-11 kann man beim Editor etwas schummeln ;) Man schreibt es auf dem PC und laesst es per Zwischenablage reinlaufen. Im Gegensatz zum manchem Z80-SBC scheint der Tastaturbuffer gut zu sein und verschluckt sich nicht (beim RC2014/RC2040 oder Z80-MBC2 musste man in TeraTerm einige Gedenk-ms einlegen lassen),


    Umgekehrt kann man das Listing per Zwischenablage auf den PC bekommen und da die Syntax von GW-BASIC (fuer meine kleinen Programme) erkannt wurde, konnte ich die in GW-BASIC neu nummerieren lassen und dann per Zwischenablage neu reinlaufen lassen :)


    Beim rauskopieren ist die Terminal-History von puTTY/kiTTY natuerlich hilfreich, wenn das Listing groesser als eine Bildschirmseite ist.


    Ein BASIC so "potent" wie GW-BASIC waer auf so einem System natuerlich mir noch lieber.

    Das Picomite-BASIC ist da gut, hat aber kein OS drunter fuer was anderes.


    So beibt die Suche nach was groesserem als DOS mit GW-BASIC, wobei fuer mich BASIC nicht so aussehen sollte, als wollte es Turbo Pascal oder C sein.


    Aber es feut mich erstmal, dass Du Dich auf das System ueberhaupt (mit dem Pico) einlaesst und es probierst.


    Fuer manches (z.B. die .DSK Files bearbeiten) nutze ich auch simh, wobei ich erst heute Nacht ein wenig mehr mit dem Console-Setting fuer telnet gespeilt habe, nachdem ich mir die BlinkenBone-Version der PDP11/40 angesehen habe.

    Bis jetzt passiert mir aber zu wenig bei den Lichter als dass ich es braeuchte - so schoen so ein Panel auch ist.


    Durch die telnet-Option von simh kann man als Terminal puTTY/kiTTY nutzen und hat fuer den KED die Sondertasten (Gold), was ein der Eingabeaufforderung als Ersatz fuer F1-Num7(=Gold-Key) in F1-ESC-O-w uebergeht :(

    Auch die Darstellung ist in puTTY/kiTTY besser anpassbar.

  • Ian Schofield hat am 20.12.2022 eine neue Version raus gebracht, die von z.B. einem RT11-V4 RK05 .dsk-File bootet, dann aber per neuem RL02-Treiber aus dem RT11-V4 per BOOT DL0: ein RT11-V5 aus einem RL02 .dsk File booten kann.


    Der Vorteil ist, dass ein RL02 Image etwa 4x so viel Platz hat (also von ca 2.4MB auf 10MB)


    Auf seiner Seite hat er als Image ein RT11-V5.03 (5.3) als rt11V.dsk


    Nach dem ich dies gesehen hatte und die neue Version fuer seine Kabel-Config compiliert hatte (mit meiner Ausgabe auf dem Bildschirm), habe ich es aber geschafft eine frische automatische Installation von RT11-V5.07 (5.7) auf einem RL02 .dsk-File laufen zu lassen (musste erstmal die .ini verstehen auf folgender Seite).


    Die .ini / das -UF2-Binary und das V5.07-RL02-Image (muss entzippt und umbenannt werden in rt11V.dsk um es innerhalb von RT11-V4 booten zu koennen) hange ich hier an ;)


  • Um das Prinzip des Stage-Boot zu automatisieren habe ich eine Kopie meines RT11SJ-V4.00C
    konfiguriert als PreBoot-Stage (11= preboot.dsk)


    In dieser habe ich das AUTEXEC.BAT-Äquivalent - die STARTS.COM (das S nach START wegend er SJ-Version)
    so bearbeitet, dass diese per BOOT DL0: am Ende dann automatisch das RT11FB-V5.07 bootet ;)
    DL0: ist eine HDD im RL02-Format.


    Die STARTS.COM hat dann anstatt ein echo OFF bei DOS ein SET TT:QUIET
    um nicht die ganze Befehle mit am Schirm auszugeben.

    Klappt gut und sieht ordentlich aus ;)



  • pdp11gy
    Da mir es keine Ruhe gelassen hat (oder nur zur Uebung/sinnvoller Beschaeftigung) habe ich heute mal eine serielle Version zusammen-gehackt (gehackt,weil ich m ich nicht wirklich im Pico-SDK-Slang auskenne).

    Im grossen und ganzen habe ich 4 Dateien relativ leicht anpassen muessen - siehe - das waren haeuptsaechlich

    - die Umsetzung der Befehle von USB-CDC-seriell auf UART-serial

    (kl11.cxx und getline.cxx)

    - konfigurieren und init der seriellen Schnittstelle

    (Pico_1140.cxx)

    und

    - umschalten von USB auf seriell UART
    (CMakeLists.txt)


    Das Compilat laeuft soweit. Im Gegensatz wartet leider die serielle Schnittstelle (Pin0-TX/Pin1-RX bei 115.200 Baud) im Gegensatz zu USB noch nicht auf den Connect bevor Daten ausgegeben werden (es gibt den bool-Wert "ist-connected"nur bei CDC (wie bei der Arduino-IDE leider auch))


    Angeschlossen habe ich testweise ein ESP32S2-Wifi-seriell2Telnet-Modem angeschlossen und kann nun per Telnet auf die Pico-pdp11/40 zugreifen (.UF2-binary fuer Ians SPI-Pinout im Anhang) :)


  • Tolle Sache und Danke für Deine Bemühungen.

    Ich kann es erst in der zweiten Januar Woche ausprobieren.

    pdp11gy
    Du musst bei seriell erst das Terminal anmachen und dann den Pico ;)
    Gestern gabs per Commit auf Ian Github ein Update zum Memory-Mapping


    Zitat

    Minor changes to memory mapping.

    These trivial changes allow for a 'better' emulation of the KT11-D memory manager. The errors were identified using the VM: device under RT11. This now works correctly despite the dire warnings in 'Introduction to RT11'.


    Deshalb ein Update des .UF2-binary fuer USB und seriell ;)

  • Danke, nur noch eine Frage/Hinweis. Wie ist es mit der baud Rate? Ein original VT100 läuft nicht mit 115200 baud.

    Bis Du "wieder da" bist, kann ich Dir auch eine Version mit 4800 oder 9600 Baud kompilieren ;)

    Leider ist das nach dem kompilieren nicht mehr aenderbar, sondern fest im Source :(


    Da ich kein XON/XOFF gesehen habe, koennte ich ansonsten hoechstens noch probieren 2 Stopp-Bits zu nehmen um dem VT-100 Zeit zu geben (wg SoftScrolling)

  • 9600 wäre ideal. Vielleicht kannst Du einen Pin auf H oder L abfragen und auf 115200 und 9600 beim boot umschalten?

    wie geschrieben beherrsche ich das Pico-SDK nicht wirklich - ich kann nur etwas Code anpassen.

    Zusaetzlicher ist meist ausserhalb meines Wissens, wenn ich nicht von woanders copy&paste machen kann ;)

  • So :) hier fuer pdp11gy eine serielle .UF2-binary-Version mit 9600 Baud


    Ich musste dafuer noch etwas die UART-Init-Reihenfolge umstellen.

    D.h. nach dem

    stdio_init_all();

    was wohl trotz Baudrate-Vorgabe standardmaessig 115.200Baud initialisiert

    gebe ich noch einen full_init fuer die serielle Schnittstelle hinzu

    stdio_uart_init_full(UART_ID, BAUD_RATE, UART_TX_PIN, UART_RX_PIN);


    Um nicht in 3 Dateien die Baudrate anpassen zu muessen, habe ich eine set_uart.h erstellt,

    die per include in die getline.cxx, kl11.cxx und die Pico_1140.cxx eingebunden wird

    #include "set_uart.h"


    Code
    // We do set UART number and speed
    #define UART_ID uart0
    #define BAUD_RATE 9600
    
    // We are using pins 0 and 1, but see the GPIO function select table in the
    // datasheet for information on which other pins can be used.
    #define UART_TX_PIN 0
    #define UART_RX_PIN 1


    Getestet habe ich die 9600 Baud Version auch wieder mit dem serial2Telnet-Adapter, den man ja auch von 115.200 auf 9600 Baud runter-konfigurieren kann :)


    So viel langsamer sieht er Bildschirmaufbau garnicht aus - haette ich nicht erwartet.

    Aber RunCPM ist da viel flotter in der Bildschirmausgabe ;)

  • Ian Schofield hat zum Jahres-Start direkt ein groesseres Update "rausgehauen" ;)
    Dies bootet nun auch direkt RL02 Images (auch wenn man beim Start auch neben dem RL02 File nach einem RK05 gefragt wird).


    Ich habe die Optik wieder angepasst und eine USB und seriell (9600 Baud) Version erstellt.


    Kleine Aenderung meinerseits:
    Die Auswahlanzeige fuer die Files zeigt nun nicht mehr die .DSK Dateien, sondern *.R*


    Das habe ich gemacht, weil meine Disk-Images nun *.RK05 und *.RL02 heissen.
    Wer also auf einmal keine Disk-Images mehr angezeigt bekommt, sollte seine umbenennen.

    Bis knapp 2.5MB sind es eher RK05-Images und RL02-Images haben eher 8MB-10MB


  • Nachdem ich erfolgreich den serial2Telnet-Adapter (ESP8266/ESP32) mit dem Pico_1140 getestet hatte, habe ich zusaetzlich nochmal den Gegentest - fuer pdp11gy - mit der seriellen 9600 Baud Version am LilyGo TTGO VGA32 FabGL-Terminal erfolgreich durchgefuehrt ;)



  • Oder eine bessere Frage, gibt es eine Tastenkombination, die zur Simh-Prompt zurückkehrt, wo Sie das boot Disk auswählen können? Wie in SIMH auf dem Computer ^E ?

  • Kann man im Design einen Reset-Schalter implementieren, damit man den USB nicht vom Rechner trennen muss?

    spoofy Ja ein Reset-Schalter ist sehr leicht zu implementieren - einfach einen Reset-Button zwischen Pin 28 und 30.
    Ich hab einen steckbaren direkt auf dem Breadboard - normale haben 4 Pins, aber es gibt die auch passend mit nur 2 Pins mittig.




    Ctrl-E gibt es leider nicht bei dieser Umsetzung von SimH, da das ganze komfortable Interface aus Speichergruenden ausfaellt im Pico.


    Aber ich bin zufrieden mit dem Reset-Taster. Einfach druecken und schon hat man wieder das Startmenu ;)

  • Hmmm, ja, richtig, aber dann habe ich anderen Problem.
    Ich nutze Putty unter mein Linux, und wenn ich mache Pico reset, dann seriell Port auf Linux geht weg und Putty danach auch.
    Ich kann nutze Minicom oder etwas anderes, aber mit Putty alles läuft am best.

  • Ich nutze Putty unter mein Linux, und wenn ich mache Pico reset, dann seriell Port auf Linux geht weg und Putty danach auch.

    Das passiert bei Nutzung des USB-Port. Mit puTTY (oder kiTTY) unter Windows bleibt das Fenster inaktiv bestehen (ich weiss nicht ob es dazu eine Einstellung gibt). D.h. man kann nach dem Reset das Fenster per Tastendruck wieder aktivieren, wenn es den selben virtuellen COM-Port nutzt.


    Alternativ muesstest Du dann eine Version der Emulation nehmen, die den seriellen Port auf Pin 0/1 nutztund einen TTL-seriellen Adapter nutzen.

    Wenn Du den Pico resetest, bleibt durch den Adapter der COM-Port (bzw. unter Linux /dev/ttyUSB0) ja bestehen, da der Adpater nicht mit resetet wird durch den Reset des Pico.

  • Ist das schon im git? Oder hast du Quellcode für den seriell Konsole Version, weil ich habe einige Veränderungen in meine Version und muss selbst kompilieren.

    Im Moment arbeite ich mit SecureCRT, eine gute terminal Emulation, aber es kostet $100 nach dem Test period :( .