Für kalte Winterabende oder lange Zugfahrten…..
ja, die Zahlentheoretiker mögen da vielleicht noch diskutieren, aber, der 6502- Coder weiss es besser.
Ich liebe lange Zugfahrten. Auf den Weg in meine alte Heimat aus Studienzeiten, Augsburg, habe mir mal das „MOS Microcomputer Programming Manual“ – voller Titel „MCS 6500 Microcomputer Family Programming Manual“, Ausgabe vom Januar 1976 – vorgenommen und (für mich) erstaunliches erfahren. Schaut mal da:
CLC
LDA LOW
ADC #20
STA LOW
LDA HIGH
ADC #0
STA HIGH
Einfach, effektiv, neckisch und elegant zugleich: Das „ADC #0“.
Immer bedenken: „ADC“ addiert das gewünschte inklusive des Carry- Flag zum Inhalt des Akkumulators. Damit dürfte das Snipplet oben verstanden sein, oder?
Frage: wer benutzt dafür noch ein BCS?
Übrigens: Beispiele für die Anwendung dieser Technik finden sich, wenn man sich mal den Code alter Software anschaut. Hier z.B. ein Auszug aus dem Source des Atari Macro Assemblers:
Unterstellt man die Konvergenz der Masse der Lösungen zum Optimum eines Codes zu einem bestimmten Algorithmus, dann ergeben sich bestimmte Muster, welche hilfreich beim Auffinden bestimmter Programmteile sein können. Digitale Arcäologie pur! Als Beispiel dazu mag der Zugriff auf die Diskette des Atari 8- Bit dienen. Man suche nach den Verwendeten Speicheradressen (also „DSKUNIT“ oder dergleichen“) und könnte sich dann am besagten „ADC #0“ entlanghangeln um so die weitere Logig des Programmes zu entschlüsseln.
Die Eingangs genannte Dokumentation zum 6502 von MOS gibt es hier:
http://6502.org/documents/books/
Mehr Lesestoff hier im Blog:
http://retrozock.com/2012/04/08/6502-fundgrube/
Meditiere vor meinem 6502 Source zu „Rock“ – meiner ganz persöhnlichen „Boulder Dash“ Engine –
Interessant wieviel Code- Müll sich aus „unüberlegter“ Programmierung ergibt. Soviel zum Thema schmutziger Code. Schaut mal da:
Sprung mittels BNE ausführen, wenn der Inhalt der Speicherzelle X nicht Null ist:
LDA X
CMP #0
BNE LABEL
LDA X
BNE LABEL
„CMP #0“ braucht kein Mensch, wenn „BNE“ sowieso immer dann ausgeführt wird, wenn das Zero Flag nicht gesetzt ist. Wird der Akkumulator mit Null geladen, dann wird das Zero- Flag gesetzt. Wird der Akkumulator mit einem Wert ungleich 0 geladen, dann wird das Zero- Flag nicht gesetzt und es wird zu „LABEL“ verzweigt.
Das Beispiel oben, lässt sich 1:1 auf die Prüfung „ist gleich 0“ übertragen. Ganz nach dem Motto:
Das „CMP #0“ braucht hier auch niemand…… Armes „CMP #0“.
Denn: Wird der Akkumulator mit 0 geladen, dann wird das Zero- Flag gesetzt und BEQ wird ausgeführt, wenn genau das der Fall ist.
So, nun aber weiter, muss meinen Source aufräumen 🙂
…dem Atari Kenner auch als „Antic Programm“ bekannt. Der „Antic“ ist die „Grafikkarte“ des Atari. Die Display- List (DLI) enthält Bytes, die dem Chip mitteilen, wie der Bildschirm aufgebaut werden soll.
Das Mischen aller verfügbaren Grafikmodi läßt sich damit ebenso realisieren wie das beliebte Fein- Scrolling oder auch die gleichzeitige Darstellung aller möglichen Farben des Atari (Stichwort „Display List Interrupt“). Einmalig in der 8- Bit Welt (oder?).
Ein paar Notizen dazu:
Wichtig: Dieses Byte, stellt bereits die erste Zeile des gewünschten Grafikmodi dar!
Weiteres:
Addiert man die 16 =>Horizontales Fine Scrolling aktivieren
Addiert man die 32=>Vertikales Fine Scrolling
Das war’s. Wer mehr wissen möchte, schaut in der einschlägigen Fachliteratur nach.
Happy Coding!
Kaum aus dem Urlaub zurück und schon wieder beim Thema….
http://chessprogramming.wikispaces.com/6502
Kannte die Seite bisher noch nicht und muss mir das bei Gelegenheit noch genauer anschauen. Fest steht, die Seite enthält:
Viel Spass!