Schlagwort-Archive: 6502

Plot Routine, ein Geschwindigkeitsvergleich

Im Basic Grafik- Modus 7 des Atari 8- Bit soll an beliebiger Stelle ein Bildpunkt ein/ ausgeschaltet werden. Vergleichbar mit dem Plot- Befehl des Atari Basic.

Die Routine die das tut, soll in 6502- Assembler laufen. Farbe und X- sowie die Y Koordinate werden an das Programm übergeben. Aus den Koordinaten muss nun die Adresse des Bytes im Bildspeicher berechnet werden, in dem sich das gesuchte Bit – der Bildpunkt/ das Pixel – befindet. Schließlich wird das Bit und damit der Bildpunkt gesetzt.

In der Grafikstufe 7 besteht eine Zeile auf 160 Bildpunkten und belegt 40 Bytes. Aus der Y- Koordinate ergibt sich die Zeilenadresse indem man die mit der Anzahl der Bytes multipliziert. Je Größer Y, desto mehr Zeit vergeht, bis die Zeilenadresse berechnet ist. Film 1 zeigt die Variante der Routine, die für jeden Bildpunkt die Zeilenadresse immer wieder neu berechnet.


Film 1

Film 2 zeigt eine Variante bei der die Zeilenadressen einmal berechnet und dann in einer Tabelle abgelegt wurden. Das Ergebnis: Es geht schneller.


Film 2

Ganz ähnlich habe ich das im Rahmen eines Spiels verwirklicht. Auch hier wurde es vermeiden, dass Selbe zu wiederholen, sondern, zeitaufwendiges wurde nur einmal gemacht und die benötigten Ergebnisse in einer Tabelle abgelegt von wie die dann nur noch abgeholt werden müssen. Näheres dazu da: Rock, Determinismus in Assembler

Viel Spass!

Advertisements

Sweet 16

Sweet 16 ist eine Betriebssystem Routine im ROM des Apple II, eine Erweiterung des 6502 Befehlssatzes die dem 8- Bit Prozessor zu 16- Bit Funktionalität verhilft.

Näheres dazu hier im Blog:
Artikel zu „Sweet 16“ (Digi Barn Computer Museum)

Aber, Sweet 16 ist nicht nur eine geniale Betriebssystem Routine, Sweet 16 steht stellvertretend als Model dafür, wie sich der Befehlssatz des 6502- Prozessors erweitern lässt. Nebeneffekt – gewünscht oder nicht – der Source obfuskiert sich quasi von selbst.

Grundsätzlich lässt sich Sweet 16 auf dem Apple ][ folgendermaßen nutzen:

JSR SW16

20140406-210651.jpg
Sweet 16, Diassembliert

Der vollständige Source Code findet sich in:
Wozniak, Steve (1977): The Woz Wonderbook.  A compendium of notes, diagrams, articels, instructions and code that describes the Apple ][ Computer and how to program it.

Auf das JSR folgt der Sweet 16 Befehlssatz, der dann schrittweise von der Subroutine (SW16) interpretiert wird.

Genutzt wird die Funktion des 6502 Befehls Jump to Subroutine (JSR). Der Befehl springt die angegebene Adresse an, merk sich aber die Adresse des auf den Befehl JSR folgenden Bytes, indem er diese auf den Stack rettet. Zuerst das High- Byte, dann das Low Byte.

Man denk sich nun die so auf den Stack geschriebene Rückkehradresse sollte auf den nächsten Befehl zeigen. dem ist aber – wie obe beschrieben – nicht so. Dieser „Fehler“ wird korrigiert, indem das RTS die Rückkehradresse automatisch um eins erhöht. Vergleiche in: N.N. (1976) : MCS 6500 Microcomputer Family Programing Manual. Januar 1976. Norristown: MOS Technology Inc.

Um einen Fehler handelt es sich dabei eigendlich nicht. Die oben beschriebene Tatsache entspringt vielmehr der Festlegung, dass Adressen auf dem Stack immer auf die nächste freie Stelle im Speicher zeigen sollen (ebenfalls nachzulesen in der o.g. Quelle).


Undokumentierte Opcodes…..

…zumindest hat das MOS nicht getan. Wie gut das es eine funktionierende Community gibt.

Auf der folgenden Seite findet ihr außer dem DOP – dem doppelten NOP – noch weitere neckische Spielereien für die 6502 Architektur eurer Wahl. So richtig was für lange kalte Winterabende. Viel Spass wer’s noch nicht kannte.

http://www.ataripreservation.org/websites/freddy.offenga/illopc31.txt


Bubble Sort V2

Meine erste Lösung zum Bubble Sort Algorithmus in 6502 Assembler kann man sich hier im Blog anschauen: Bubble Sort. Ein Array von max. 255 8- Bit Integern wird aufsteigend sortiert.

Die aktuelle – auf das vorgenannte Programm aufbauende – Routine schafft es ein Array mit 255 Elementen zu sortieren. Die Maximale Länge je Element beträgt 255 Buchstaben/ Ziffern.

Wie das geht? Schaut mal da: Bubble Sort

Das Array darf entweder Zahlen oder Buchstaben enthalten oder eine Kombination aus beidem.


Bubble Sort

Ich glaube das hier  funktioniert….

Bubble Sort Routine. Sortiert eine Feld von max 255 8- Bit Integern, aufsteigend.

Bubble Sort Routine.
Sortiert eine Feld von max 255 8- Bit Integern, aufsteigend.


Zahlenspiele (in 6502 Assembler). Es geht weiter…

..der im Folgenden verlinkte Artikel aus der Compute! Ausgabe 34 vom März 1983, zeigt wie die Eingabe von Zahlen programmiert werden könnte:

Zum Artikel

Die bisherigen „Zahlenspiele“ und wie man das in 6502 Assembler machen könnte finden sich hier im Blog, einfach dem Link folgen:

Zahlenspiele mit Retrozock 

Unter dem Schlagwort „Zahlenspiele“ finden sich Artikel mit Beispielen die zeigen, wie in Assembler 8/ 16 Bit Integer auf dem Bildschirm ausgegeben werden können. Die Artikel entstanden bei meiner Arbeit an „Diamonds“ (Projekt Rock).

Es galt zu ergründen, wie ich die aktuelle Punktezahl, Level, Leben usw. auf dem Bildschirm ausgeben könne. Es gelang!

Viel Spass!


Pitfall

Nettes Spielchen, ob als Original oder als Remake. Kürzlich entdeckt: Eine Version im ASCII- Zeichen Format….

http://meatfighter.com/pitfall/

Interessant ist, dass der Source Code des Originals dort verlinkt ist (leider nicht der original Source, sondern die restaurierte, diassemblierte Variante).

Wer sich schon immer für interessiert hat, wie das Spielfeld generiert wurde, der findet auf der Seite eine Anleitung, wie das im Detail funktionierte.

Weiteres zum Thema Spiele Entwicklung für die 2600 Konsole findet sich hier im Blog:

https://retrozock.com/2012/01/12/atari-2600-wie-wirds-programmiert/

Viel Spass!