Hallo Besucher, der Thread wurde 555 mal aufgerufen und enthält 1 Antwort

letzter Beitrag von Paradroid am

ASM aus "wir bleiben zuhause"-Thread

  • Nachdem ich mit dem C64-Emulator einen Wieder-Einstieg in die BASIC-V2-Programmierung fand (siehe hier), reizte es mich, das gleiche Ergebnis auch in Assembler zu erreichen.


    "Damals" waren für mich Hypra-Ass und SMON siamesische Zwillinge, die beständig die verschiedenen C64 bevölkerten. Dieser Tage habe ich mich erst einmal wieder mit Hypra-Ass anfreunden müssen, was aber relativ zügig gelang. Auch das Beschäftigen mit den verschiedenen Mnemonics ging - dank inzwischen umfangreichster und leicht verfügbarer Informationen - problemlos über die Bühne. Lediglich das fehlende Scrolling in Listings sowie die noch fehlende Ausdruckmöglichkeit für Listings bereit einige Unannehmlichkeiten; schon bei nur gut 300 Zeilen Quelltext gerate ich ins Schleudern. Da hilft dann nur das manuelle Aufmalen verschiedener Zeilenbereiche (Hypra-Ass ist zeilenorientiert, als quasi wie ein BASIC-Programm). Wünschenswert wäre hier das einfache Importieren von Textdateien als Quellcode, was innerhalb eines emulierenden Systems, dem Gigabytes an RAM und Taktfrequenzen jenseits menschlicher Vorstellungskraft zur Verfügung stehen, sicherlich keine Hürde darstellen sollte; bisherige Nachforschungen dazu lieferten jedoch noch keine wirklich überzeugenden Ergebnisse. Aber was nicht ist, ...


    All dies vorausgeschickt sei mir die nicht wirklich optimale Qualität des Quelltextes verziehen. Doch mir ging es hier vorrangig, darum, mich wieder mit 6502-/6510-Assembler für den C64 zu beschäftigen und ein Vorhaben umzusetzen. Zumindest ist mir dies gelungen - mit relativ wenigen Abstürzen :) Aufgrund der Einfachheit der selbst gestellten Aufgabe darf man auch keine Besonderheiten erwarten. Wichtiger war mir, dass das Programm fertig wird und absturzfrei läuft. Ein kleiner Schritt für einen ... na, lassen wir das.


    Wem Hypra-Ass nicht oder nicht mehr geläufig ist (es gab ja schon bald komfortablere Nachfolger), hier ein Screenshot, der zeigt, wie sich das Programm nach dem Starten meldet.



    Mit dem Aufruf von SYS 49152 (eine der zwei Adressen, die auch nach Jahrzehnten "hängengeblieben" ist; die zweite ist die eierlegende Wollmilchsau $FFD2 :) ) wird das erzeugte AssemblerProgramm gestartet. Ich habe dazu im obigen Screen den Cursor in die vierte Zeile von unten positioniert, um das Scrollen nach der Ready-Meldung zu vermeiden. Cursorpositionierung per ASM war hier für mich noch nicht vorgesehen; vielleicht in einem späteren Projekt.



    Wer sich den Quelltext mal ansehen will, für den habe ich zur besseren Übersicht noch eine Auflistung der einzelnen Bereiche:

    LOTTOASM:

    120 : Sprung zum Start

    140 : Ueberschrift (als ASCII-Text im Label TXD)

    150 : Ziehungszahlen (als Bytes im Label ZZS)

    160 - 230: PETSCII-Byte-Codes der Kaestchen-Grafiken, je 1 Label

    240 - 350: SubRoutine CLRSCRN (Bildschirm mit Leerzeichen fuellen)

    360 - 1310: SubRoutine LAYOUT (zeichnet die Kaestchen)

    1320 - 1400: SubRoutinen ABSTAND1 und ABSTAND2 (mehrere INY)

    1410 - 1640: SubRoutine ZIFFERN (Zahlen in den Kaestchen, ohne Markierung)

    1650 - 2230: word-Adressen der Zahlenausgabepositionen (HI-Ziffer)

    2240 - 2340: SubRoutine SET (setzt Zeichen im Akku an 1 Spalte in 7 Zeilen)

    2350 - 2490: HauptRoutine START (HG-,Rahmen-,SchriftFarben,Aufruf der SubRoutinen)

    2500 - 2960: SubRoutine BINOUT (49 Zahlen in die Kaestchen schreiben)

    2970 - 3060: SubRoutine HEADOUT (Ausgabe der Ueberschrift)

    3070 - 3220: SubRoutine COLORIT (laedt zu faerbende Ziehungszahlen)

    3230 - 3450: SubRoutine EINEZZ (farbliche Markierung einer Ziehungszahl)

    3460 - 3570: SubRoutine COLORBG (Bildschirm-Hintergrundfarbe setzen)


    Man erkennt vermutlich leicht, dass das Programm "gewachsen" ist, statt eine Umsetzung eines fertigen Plans zu sein :)

    Dass die Routine zur Einfärbung des Bildschirmhintergrundes erst am Schluss kommt, kag daran, dass ich zuvor nach dem Start von Hypra-Ass mit /cr0 und /ch0 sowie POKE 646,5 und Bildschirm löschen bereits einen schwarzen Bildschirm mit grüner Schrift hatte. Erst nach dem ersten Test mit neu initialisierten C64, laden und starten der Programme fiel mir auf, dass der Bildschrmspeicher noch keine Zuweisung der gewünschten Schriftfarbe hatte. So musste ich diese Routine noch nachträglich einbauen, die nun im Zusammenhang mit dem Bildschirm löschen aufgerufen wird.


    Insgesamt ist noch einiges an Potenzial zur Optimierung des Quelltextes vorhanden, doch es war ja auch erst einmal ein erstes Wieder-Heran-Tasten.