88 lines
6.8 KiB
Markdown
88 lines
6.8 KiB
Markdown
# Atari 8 Bit Assembler Programmierung und Spieleentwicklung
|
||
|
||
## Einleitung
|
||
|
||
### Warum ein Buch für Atari 8 Bit?
|
||
|
||
Mein erster Computer war ein Atari 800 XL, den ich mit 12 Jahren von meinen Eltern zu Weihnachten geschenkt bekommen habe. Zu diesem Computer habe ich also eine sehr emotionale Beziehung, da dieser für meine ganze weitere Laufbahn verantwortlich war und auch noch ist.
|
||
Deswegen habe ich mich entschieden, bevor ich alles vergesse, meine Erfahrungen mit der Programmierung dieses Gerätes aufzuschreiben, damit vielleicht auch später noch Software für diese doch schon sehr alten Geräte geschrieben werden kann.
|
||
In diesem Buch geht es hauptsächlich um die Programmierung in Assembler. Wichtige Themen, wie z.B. Spieldesign, stehen etwas im Hintergrund. Das liegt daran, dass es damals viel engere technische Grenzen gibt, von dem, was so ein Computer leisten kann. Heutige PCs oder Macs haben eine Milliardenfach höhere Leistung, als diese alten Homecomputer und es ich wichtig, die Grenzen zu kennen um bewerten zu können, wie realistisch ist eine Spiele Idee auf diesen alten Geräten. Es gibt wirklich gute Spiele auf den Ataris, die auch heute noch Spaß machen. Diese Spiele leben natürlich von einem guten Design, aber auch von einer sehr guten Kenntnis der Möglichkeiten. In diesem Buch geht es Hauptsächlich um die Möglichkeiten, die das System bietet, damit Ihr dann auch Eure Ideen dagegen bewerten und ggf. auch anpassen könnt. Das muss nicht zwingend ein Nachteil sein. Aufgrund der Limitierungen ist es gut möglich, innovative Ideen nach vorne zu bringen.
|
||
|
||
Außerdem bringt die Implementierung in Assembler direkt auf der Maschine viel Spaß. Es wird wirklich direkt auf der Hardware, auf dem Prozessor, der Grafikeinheit und der anderen Chips programmiert. So etwas macht zumindest mir viel Spaß und kann auf vielen anderen Geräten heute so nicht mehr gemacht werden (zum Glück werden viele sagen :) ).
|
||
|
||
### Was setze ich voraus
|
||
|
||
Wenn Ihr dieses Buch lest, setzte ich ein grundlegendes Verständnis für Programmierung voraus. Also Erfahrungen z.B. mit Java, C++ oder C oder auch Typescript, oder etwas anderem. Also Zahlenformate oder grundsätzliche Programmtechniken, wie Schleifen, etc. streife ich nur sehr rudimentär.
|
||
|
||
### Was ist ein Atari 8 Bit Computer?
|
||
|
||
Ein Atari 8 Bit Computer besteht im Wesentlichen aus folgenden Komponenten:
|
||
|
||
Die CPU ist ein MOS 6502 Prozessor. Dieser Prozessor kann einen Speicher von 64 KB (ja, echt, 64 Kilo Byte; heutzutage sind die meisten jpeg-Bilder größer) adressieren. Er verfügt über sechs Register, von denen drei frei zur Programmierung genutzt werden können. Diese Register können jeweils ein Byte an Daten aufnehmen (Ein Byte = 8 Bit). Damit lassen sich positive Zahlen von 0-255 darstellen. Im Prinzip kann dieser Prozessor Daten Byte-weise aus dem Arbeitsspeicher lesen, diese in den Registern manipulieren (logische Operationen; + und -), auf bestimmte Ergebnisse der Manipulation reagieren und Daten aus den Registern wieder zurück in den Arbeitsspeicher schreiben.
|
||
|
||
Dann gibt es da noch den Antic Chip. Einen der ersten dedizierten Grafikprozessoren, welcher über eine eigene Programmiersprache verfügt, der sogenannten Display List. Zusammen mit dem GTIA Chip wird die Grafik des Systems erzeugt. Der Antic teilt sich zusammen mit der CPQ den Arbeitsspeicher. Das hat den Vorteil dass die CPQ schnell den Kontent der Bildschirmspeichers manipulieren kann. Der Nachteil ist, dass sich beide Prozessoren die Adress- und Datenbusse teilen und sich somit über die Zugriffe auf den Speicher abstimmen müssen.
|
||
|
||
Für Sound und für IO steht noch der Pokey zur Verfügung.
|
||
|
||
Es gab eine ganze Reihe von 8-Bit Computern bei Atari, die sich im Wesentlichen nur durch den verfügbaren RAM-Speicher unterschieden. Ok, die Optik hat sich auch über die Zeit verändert.
|
||
|
||
- ATARI 400 / 800: Dieses waren die ersten Computer von Atari. Der Atari 400 hatte 16K RAM eingebaut und eine Folientatstatur. Der Atari 800 hatte 48 KB RAM und eine "richtige" Tastatur.
|
||
- ATARI 1200 XL: Diesen gab es nur ganz kurz. Dieser Computer hatte 64 KB RAM und eine normale Tastatur. Die Gehäuseform wurde gegenüber den Vorgängern geändert.
|
||
- ATARI 600 XL / 800 XL: Diese beiden Computer hatten die Optik des 1200 XL übernommen und lösten diesen auch ab. Der 600 XL wurde mit 16 KB ausgeliefert und der 800 XL mit 64 KB RAM (das war auch mein erster Computer :) ).
|
||
- ATARI 65XE (oder auch 800 XE) / 130 XE: Diese beiden Computer lösten die XL Reihe ab. Von der Optik glichen sie den ATARI-ST Modellen der Zeit. Der 65 XE hatte 64 KB RAM und der 130 XE hatte 128 KB RAM.
|
||
|
||
Ansonsten verfügen alle Modelle über eine maximale Auflösung (ohne Tricks) von 320x192 Pixel, über 4 Soundkanäle, 4 Sprites (Player) und 4 Missiles (die zu einem Player bei Bedarf zusammen gesetzt werden können).
|
||
|
||
## Grundlagen des Atari 8 Bit Systems:
|
||
|
||
### Genereller Aufbau:
|
||
|
||
```plantuml
|
||
@startuml
|
||
nwdiag {
|
||
network Prozessor-Bus {
|
||
color = "black"
|
||
|
||
// define group
|
||
group Systems {
|
||
6502 []
|
||
ANTIC []
|
||
GTIA []
|
||
POKEY []
|
||
PIA []
|
||
RAM;
|
||
ROM;
|
||
}
|
||
}
|
||
network Serialer-Bus {
|
||
color = "black"
|
||
POKEY []
|
||
// define network using defined nodes
|
||
group db {
|
||
Diskettenlaufwerk;
|
||
Tape;
|
||
Printer;
|
||
}
|
||
}
|
||
}
|
||
@endumlblack
|
||
```
|
||
|
||
#### 6502 CPU
|
||
|
||
Kern des Systems ist der 6502 Prozessor, welcher mit 1,7 MHZ getaktet wird. Sie arbeitet mit 8 Bit Breite und kann einen 16 Bit Adressbus ansteuern, also maximal 64 KB adressieren.
|
||
|
||
Der 6502 verfügt über sechs 8 Bit breite Register. Das heißt, die Register können Zahlen zwischen 0 und 255 aufnehmen.
|
||
|
||
- Den Accumulator: Dieses Register dient in der Regel zum Laden, Speichern und Manipulieren von Daten. Eingeschränkt können das auch die anderen Register.
|
||
|
||
- Das X- und das Y-Index-Register: Diese dienen häufig um Schleifen zu programmieren und Speicher.
|
||
|
||
- Der Program-Counter: Dieser steuert den Ablauf der Programme und wird in der Regel nicht direkt manipuliert.
|
||
|
||
- Das Statusregister: In diesem Register kann der Status des Prozessors ausgelesen werden. es beinhaltet 8 Flags (binäre Zustände), die zur Steuerung des Programmes genutzt. werden können. Diese Zustände verändern sich, je nach durchgeführter Operation und deren Ergebnis. Z.B. kann eine Subtraktion dazu führen, dass das Ergebnis "0" ist. Dieser Zustand kann in dem Register abgefragt werden (N oder Null-Flag). Oder z.B. kann eine Addition zu einem Ergebnis führen, welches über den Wert von 255 hinaus geht und somit nicht mehr im Akkumulator komplett abgebildet werden kann. In diesem Fall wird das sogenannte Überlaufbit (Carry Bit oder C) in dem Status gesetzt.
|
||
|
||
Ein Blockbild des Prozessors ist hier zu finden: <[6502Chip.gif (897×925)](https://www.chessprogramming.org/images/c/c7/6502Chip.gif)>
|
||
|
||

|