Die Software

Es ist wohl nun doch etwas länger her, dass ich auf dem C64 irgendetwas programmiert habe, aber unterm Strich scheint wohl trotzdem etwas Vernünftiges bei herausgekommen zu sein 😉

Eine Prämiere gab es – ich habe das erste mal auf einem Emulator gecodet – was sich später aber eher als kontraproduktiv entpuppte. Dazu später mehr.

Hmmm…
Wer kann sich denn die ganzen Tasten merken, die einem mit dem Vice-Emulator und der PC-Tastatur zur Verfügung stehen ?
Es ist alles wie bei einem C64 da, oder doch nicht ? Oft irgendwie anders und nicht immer da wo man es in Erinnerung hat. Oder doch ?!
Ist ja auch egal, auf diese Fummelei hatte ich keine Lust und so ist endlich mal mein Keyrah zum Einsatz gekommen, den ich auf der 10. und letzten Willow-Party für meinen eingereichten Beitrag damals gewonnen hatte. Die Keyrah-Platine habe ich wie auf dem Bild zu sehen in ein C64 C Gehäuse verbaut. Das Ding ermöglicht es unter anderem die echte C64 Tastatur für den Emulator zu nutzen. Ein wirklich praktisches Gerät 🙂

Es ist schon was anderes so entspannt rumzulümmeln und zu programmieren…
Kein Vergleich zu früher 😛

Den Emulator habe ich so eingerichtet wie damals meinen „Arbeitsrechner“, also „C64“ und „Diskettenlaufwerk“ mit SpeedDos Plus und Parallelkabel „ausgestattet“.
NATÜRLICH habe ich auch wie damals den Assembler „SMON“ benutzt 😉
Da weiß ich wenigstens was ich mache und dass es funktioniert.
Sicher gibt es heute elegantere Tools – ich bin halt Retro und habe keine Lust und keine Zeit mich mit modernen Kram wie Crosscompiling oder ähnlichem zu beschäftigen 🙂

Hmmmm…..
Was sollte mein Programm denn überhaupt können ?
Nunja, natürlich sollte man in erster Linie die aktuelle Uhrzeit eingeben können. Mit den Daten wird die vom C64 nicht genutzte Echtzeituhr gefüttert und gestartet. Diese arbeitet mit der Netzfrequenz von 50Hz und ist damit genauso gut wie irgendwelche Backofenuhren, Wecker usw.
Die Daten der Echtzeituhr werden direkt an die Nixie Röhren weitergegeben.
Meine Software funktioniert komplett im Interrupt, das heißt während die Uhr läuft kann der C64 für etwas anderes genutzt werden. In diesem Fall habe ich folgendes Gadget eingebaut:
man kann über einen Tastendruck die Einschaltmeldung mit blinkenden Curser auf den Bildschirm bringen. Bei erneutem Tastendruck wird wieder die aktuelle Uhrzeit angezeigt.
Es ist sogar möglich kleine Basicprogramme zu schreiben während die Uhr im „Hintergrund“ weiterläuft. Dazu mal ein paar Videos:

Video 4
Video 5

Ursprünglich wollte ich einen DCF-Empfänger für eine noch genauere Uhrzeit verbauen – da ich das Projekt für die – wegen Corona leider abgesagte – DoReCo im Heinz Nixdorf Museum 2020 pünktlich fertig haben wollte, habe ich erstmal auf den „Funkuhr“ – Modus verzichtet.
Als ich das Projekt (bestehend aus 5 verschiedenen Uhren) fertig hatte kam mir zusätzlich noch die Idee eine „Wecker“ – Funktion einzubinden – schließlich befindet sich ja noch der Soundchip im Rechner 😉
Mal schauen ob ich die Software noch irgendwann erweitern werde…
Die Software steckt in Form eines Eprom auf der Nixie-Uhr Platine und wird nach dem einschalten des C64 in den Arbeitsspeicher ab der Adresse $8000 eingeblendet. Also quasi nichts anderes als ein normaler Modulstart.
Da für mein spezielles Gadget parallel zu dem Programmstart ein Basic-Start ausgeführt werden muss stand ich vor dem nächsten Problem. Irgendwie klappte es nicht wie ich es wollte.
Und wieder sind ein paar Tage ins Land gezogen…
Erst ein irgendwo im Netz entdeckter „Umweg“ brachte mich ans Ziel.
Man schreibt die Startadresse + Returnbefehl in den Tastaturpuffer und springt mit der Modulstartroutine zur kopierten, etwas abgewandelten ROM-Kaltstartroutine.
Siehe da: es funktioniert !
Hätte ich vorher nie mit gerechnet, dass an dieser Stelle ein Problem auftreten könnte – schließlich habe ich früher schon so einiges an Modulen gebaut.
Im Extremfall hätte ich halt auf das Gadget verzichten müssen, wollte ich aber eher ungern.

Hier mal ein paar Bilder von der Entwicklung der Anzeige auf dem Bildschirm.
Zuerst wollte ich einfach den normalen Zeichensatz vergrössert darstellen.
Gesagt, getan. Hab dann ziemlich schnell gemerkt, dass es so ja garnicht geht was ich vorhabe, da der Bildschirm nunmal nur 40 Zeichen nebeneinander darstellen kann 😉
Stunden, Minuten, Sekunden…
6 Zeichen * 8 Pixel = 48 Zeichen. Ohne Doppelpunkte und großartig Platz zwischen den Zeichen…
Toll !

Ok, es hätte ja auch mal einfach sein können…. egal.
Ich musste dann halt meinen eigenen Zeichensatz – zumindest für die Zahlen von 0-9 und einen Doppelpunkt – kreieren. 5×7 Pixel – perfekt 🙂

Hier ein paar Bilder von den Entwicklungsständen:
Im ersten Bild kann man schön sehen wieviel Rasterzeit der spätere Code in etwa frisst 😉 Glück gehabt – ich wusste, dass es nicht wenig sein wird – aber alles im grünen Bereich 🙂

und ein paar Videos:

Video 6
Video 7

Was mich dann noch mehrere Tage geärgert hat war die automatische Umschaltung der Echtzeituhr zwischen AM und PM.
Die Echtzeituhr im C64 ist keine 24 Std Uhr, sondern registriert in einem speziellen BIT ob es 0.00-11.59 Uhr oder 12.00 – 23.59Uhr ist.
Man muss dazu wissen dass im C64 von AM auf PM und umgekehrt nicht normal , bzw. logisch umgeschaltet wird, sondern irgendwie anders 😛
Ich habe vergessen was genau beachtet werden muss und warum – ich meine irgendwo was von einem Bug gelesen/gehört zu haben….
Ist ja auch egal – ich habe es später anders gelöst.
Es dauerte ein paar Tage bis sich herauskristallisierte, bzw. ich einen Tipp bekommen habe, dass meine verwendete WIN-Vice Version Probleme mit der Echtzeituhr hat und ich wohl eh keine Chance hätte etwas brauchbares mit dem AM/PM BIT zu erreichen. Supi 😉
Für den, den das ganze interessiert: Das letzte BIT vom ersten Byte – hier die 91 – sollte mir eigentlich zuverlässig anzeigen ob AM oder PM.
in diesem Fall PM 11 Uhr.


Mein Code machte irgendwie nicht was er sollte.
Mit einer aktuelleren WIN-Vice Version allerdings AUCH nicht, und auf einem echten C64 Rechner weiter zu programmieren hatte ich keine Lust. Was für ein Aufstand den ganzen Kram jedesmal auszugraben und aufzubauen…
Mir reichte es irgendwann. Schade um die verlorene Zeit.
Blödes AM/PM BIT !!
Ich habe dann einfach meine eigene AM/PM Umschaltroutine gecodet 🙂
Bisl kompliziert und vlt. hätte es auch einfacher funktioniert – egal.
Funktionieren muss es – und das tat es dann auch endlich.

Schreibe einen Kommentar