Mein RC2014 (Ethernet, CF-Kartenbootloader, etc.)

  • Moin,


    nachdem Toast_r gerade nach ein paar mehr Infos zu meinem RC2014 gefragt hat, werf ich hier mal ein paar Fotos und Infos hin:

    Ich glaub zwar, der RC2014 braucht fast keine Vorstellung, aber es ist ein Bausatz aus UK, gedacht um einen Z80-Rechner mit einem Bus auf einer einfachen Streifenrasterbackplane (mit 0.1"/2.54mm Stiftleisten) aufzubauen.


    Mein Ziel beim Bauen war einfach mehr über Computerarchitektur zu lernen, deswegen hab ich auch kein CP/M, etc. verwendet, sondern meine Software selbst geschrieben.

    CP/M läuft mittlerweile auch auf der Kiste, find ich aber fast schon langweilig :)


    Hardware

    CPU-Karte

    Einfach nur die fertige normale Z80-Karte, ohne zusätzliche Magie

    RAM-Karte (alt)

    Die RAM-Karte, mit der ich die meisten meiner Experimente gemacht habe, war diese 64KByte RAM Karte, mit wählbarer Startadresse fürs Memory-Decoding. Mein ROM war dann in den unteren 8 bzw. 16KByte.

    RS232 / ACIA

    Für serielle Kommunikation hat das Teil eine Karte mit einem 6850 ACIA

    CF-Karte

    Massenspeicher wird erledigt von der CF-Karte, welche die CF-Karten einfach direkt in den Speicher mappt, sind dann im 8bit ATA Modus prima nutzbar.

    Soundkarte

    Ed Brinley hat eine hübsche AY-3-8910A / YM2149 Soundkarte für den Rechner gebaut.



    Jetzt zu den spannenden Karten (meinen Eigenbauten :D) :

    Flash-ROM-Karte:

    Weil die fertige ROM-Karte mit einem UV-EEPROM geliefert wurde und ich keinen UV-Löscher hatte, hab ich auf Lochraster eine Flash-ROM-Karte zusammengebastelt. Von den Flash-ROMs hab ich hunderte (weil früher als PXE-Boot-ROMs auf Netzwerkkarten im Einsatz gewesen).


    Die Karte wurde dann nochmal als PCB gefertigt, einfach um ein wenig zuverlässiger zu sein: https://github.com/Manawyrm/RC2014-MX29F001


    Auf der Karte lassen sich über Jumper 16 verschiedene ROMs auswählen, so kann man dann zwischen MS BASIC, meinem CF-Kartenbootloader und anderen Sachen hin- und herschalten. Im Zuge der Entwicklung hat die Karte irgendwann auch noch einen 16k Modus nachgerüstet bekommen.

    GPIO-Karte und VGA/PS/2 Terminal:

    Damit auch mal was blinkt, hatte ich diese GPIO-Karte aus 74er Logik zusammengetüddelt. Die wurde dann auch verwendet, um per Software-SPI mit einem MicroVGA Terminal zu sprechen. Das ist nicht sonderlich zeitgemäß (weil da ein großer CPLD und PIC drauf sitzt), aber so hatte ich zumindest mal ein ordentliches Terminal um mit der Kiste zu interagieren.

    Ethernet:

    Meine NE2000-kompatible Ethernet-Karte auf Realtek RTL8019-Basis für den Rechner: https://github.com/Manawyrm/RC…net/blob/master/README.md

    Parallelport:

    Mit dem 82C55 hatte ich auch eine Parallelport Karte gebaut (um z.B. mal eine Hardcopy per Nadeldrucker zu machen), das kam aber so eine nervige Pandemie, Umzüge, neuer Beruf dazwischen und dann geriet diese Karte in Vergessenheit. Ich glaube ich hatte sie rudimentär getestet, finde aber gerade nicht mal Fotos.

    https://github.com/Manawyrm/RC2014-LPT

    Software / Experimente

    Bootstrapping / CF-Uploader

    Aller Anfang ist schwer... Ich war relativ früh dran, da gab es noch keine C-Toolchain, keinen seriellen Bootloader, etc. Heutzutage gibts das für den RC2014 auch alles in Ordentlich und schön programmiert zum Download. Also selbst gemacht: https://github.com/Manawyrm/RC2014-CFHexLoader


    Lässt sich wahlweise als ROM oder von CF-Karte laden und kann dann direkt per Serielle eine Intel .hex Datei mit neuer Software annehmen und legt diese auf der FAT32 Partition der CF-Karte ab.


    Video: https://www.youtube.com/watch?v=Ivyo9Olz1mc

    CF-Bootloader

    Um komfortabel mit der Kiste zu arbeiten, fehlt noch irgendwas um Programme von der CF-Karte auszuführen, das macht mein CF-Bootloader:

    https://github.com/Manawyrm/RC2014-CFBootloader

    Im Video lädt der Bootloader kleine selbstständige Programme, die den YM2149 Soundchip mit Musik versorgen.


    Video: https://www.youtube.com/watch?v=4O0K6_yLfPY

    Webserver

    So eine Ethernet-Karte ohne Webserver oder andere Software ist ja nun ziemlich langweilig, also hab ich uIP auf den Z80 portiert. Der Webserver kann auch Dateien von der CF-Karte lesen und ausliefern. Die Portierung war leider ziemlich anstrengend, dabei sind tatsächlich mehrere Compilerbugs in SDCC/z88dk aufgefallen. Unter anderem lieferte bei -O3 die Prüfsummenberechnung plötzlich andere Ergebnisse und das Protothreads-Konzept von uIP sorgte für invaliden Assembler-Code (zugegebenermaßen sind switch-case Statements, die über mehrere Funktionen hinweggehen auch ziemlich crazy). Lies sich aber alles irgendwie hinfummeln:


    https://github.com/Manawyrm/RC2014-Ethernet-Firmware

    einfacher MIDI-Synthesizer

    Um den YM2149 Soundchip mal zu händisch bespaßen, hab ich diesen MIDI-Synthesizer geschrieben:

    https://github.com/Manawyrm/RC…ISynth/blob/master/main.c


    Der nimmt normale MIDI-Kommandos auf der 68B50 ACIA/UART an und könnte theoretisch auch von einem Klavier bespaßt werden (es mangelt nur an der nötigen Fingerfertigkeit ;) ).


    https://twitter.com/Manawyrm/status/1295473975536037888

    R2R-DAC .wav Player

    Die Leistung des Z80s reicht gerade so aus, um ohne einen DMA-Controller 11kHz 8bit PCM Samples von der CF-Karte zu lesen und halbwegs akkurat auf die GPIO Pins zu schieben. Die Verzerrung kommt hauptsächlich von der großen Menge an Jitter zwischen den Samples und dem fehlenden Filter hinter dem DAC, dieser Aufbau sorgt am Ausgang für Frequenzinhalte weit über der Samplingfrequenz durch Stairstepping.


    https://twitter.com/Manawyrm/status/1295473975536037888


    RS232 Terminalanwendung

    Wenn wir schon ein VGA/PS/2-Terminal und eine RS232 Schnittstelle haben, können wir uns damit natürlich auch mal in eine BBS einloggen.


    https://www.youtube.com/watch?v=wfVdQtWodTA ... ANSI Steuerzeichensupport wär ganz praktisch gewesen :P

    Zusammenfassend

    Ich hab ne ganze Menge über Computer gelernt und dabei eine Menge Spaß am Gerät gehabt.

    Mikrocomputerbusse, TCP/IP-Details, C-Compiler und Linkerdetails, NE2000-Internals, ATA-Internals, etc. etc.


    Ein richtig nutzbarer Computer ist am Ende bisher nicht entstanden. Ich habe zwar auch einen ganz rudimentären Texteditor angefangen, aber da fehlt mir dann doch etwas das Durchhaltevermögen um das Teil praktisch fertigzuschreiben.

    Programme starten, MS BASIC nutzen, Webserver sein, Musik abspielen etc. kann das Teil aber, reicht mir :)


    Viele Grüße,
    Tobias