Monatsarchiv: September 2012

Die Seele einer neuen Maschine

Für kalte Winterabende oder lange Zugfahrten…..

 

Die Seele einer neuen Maschine

Advertisements

Irgendwas plus „0“ ist immer noch irgendwas……

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:

Auszug, 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:

https://retrozock.com/2012/04/08/6502-fundgrube/

 


Die Null, im Vergleich

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:

  • Schlechtes Beispiel

    LDA X
    CMP #0
    BNE LABEL

  • Besser

    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:

  • LDA X
    CMP #0
    BEQ LABEL

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 🙂


Display List ….

…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:

  • Die DLI beginnt meist mit einer gewissen Anzahl Leerzeichen
    z.B.
    112,112,112
    Je „112“ werden 8 Leere Scan- Lines auf dem CRT generiert
  • Es folgt der sog. LMS- Befehl
    Teilt dem Antic Chip mit, wo der Bildschirminhalt steht.
    Besteht aus 3 Bytes,Byte 1:
    64+ Antic- Modus
    Beispiel: Textmodus 0 ergibt sich aus => 2 (Antic- Modus für „Basic Modus“ 0) + 64 (LMS) = 66.

    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

  • Byte 2+3:
    High und Low- Byte der Adresse des Bildspeichers.Durch das zielgerichtete ändern jener Adresse,  kann man den Bildschirm in jede beliebige Richtung scrollen (…grob, für’s feine werden noch ein bis zwei Kniffe notwendig)
  • „Jump“
    Setzt sich aus 3 Bytes zusammen:Byte 1: 65=“Jump“
    Byte 2+3: High und Low- Byte der Adresse des Beginns der DLIDiese Byte Folge zwingt den Antic die DLI wiederholt darzustellen

Das war’s. Wer mehr wissen möchte, schaut in der einschlägigen Fachliteratur nach.

Happy Coding!


Chessprogramming – 6502

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:

  • Ein Blockdiagram des 6502
  • Die Pin- Belegung des Chips
  • Eine Liste der bekanntesten Schachprogramme für 8- Bit Computer
  • Hinweise auf einschlägige Literatur

Viel Spass!