Archiv der Kategorie: 68000

Interessante Offset/Array-Schreibweise oder die heutige Notation war immer inspiriert vom Davor oder doch nicht?

Im Coden auf alten Computern geht man ja auch rückwärts in der Geschichte der Programmierung und deren Kultur. Diese Sichtweise ist natürlich meist positivistisch „im Sinne von“: Das musste ja so kommen, auch wenn die Zukunft nie geschlossen ist. Aus dem Kommentar von Assembler „;“ wurde etwa der Abschluss eines Befehls in C (?). Und dann stösst man des öftern auf Schreib- und Notationstechniken, die dann sehr nahe dran ist an heutiger Notation. Und ja die Dinge sind dann oft näher zusammen – auch technisch – als es den Eindruck macht. Und schliesslich hat sich ja alles aus diesem entwickelt. Hier auch ein Fall – Arrays, Index und Objektorientierung.

Im vorliegenden Fall werden Bälle, Paddles und Bricks eine Breakouts in 68k Assembler verwaltet im Spiel Breakout einem SizeCodeProjekt im Rahmen von CHLudens. Das Ganze ist ein grosser Word-Array (2 Bytes). Die einzelnen Objekte sind als „Zeilen“ angeordnet. Quasi ein grosses Excel mit sich wiederholenden Zeilen.

Das heisst alle 12 Bytes kommt das nächste Objekt:

Variables: RAM-Adresse

Ball: 0+
Paddle: 12+
Brick 1: 24+

Ein Objekt ist aufgebaut mit (relativ):
0: x
2: y

Hier werden nun Koordinaten reingeschrieben. a4 beinhaltet die Adresse der Variablen:


Weiterlesen

68k Assembler in Perfektion

Assembler ist manchmal einfach wunderbar. Warum wunderbar? Es gibt Dinge, die man nicht erwartet, gerade beim 68000-Prozessor von Motorola. Eigentlich der (Private)Workstation-Prozessor genutzt in den ersten richtig leistungsstarken PCs wie dem Macintosh und danach in den 16/32Bit Homecomputern. Davor in vielen Arcades (Foodfight Atari 1983+) und danach in Consolen (Megadrive etc.) Seine Nachfolger 68030 waren für wichtige andere Meilensteine der Geschichte der Computerindustrie verantwortlich etwa die NExT.

Und hier ein kleines Müsterchen:

In der ersten Zeile wird ein Word (2Bytes) von einer Speicherstelle a4 (Adresse) in eine zweite verschoben a3 (Adresse). Mit move.w (a4)+ kann man verschieben und die Adresse ein Byte hochzählen. Leider ist nun ein Word 2 Bytes lang und so muss man nochmals hochzählen. Und siehe da der Prozessor kann das mit ++. Diese einfach Sache macht weiteres hinzfügen mit add.l #1,a4 und add.l #1,a3 unnötig.

Natürlich bleibt dadurch die Programmierung in Assembler weitere eine Konzentrationssache. Dennoch ist in dieser einen Zelle soviel klar lesbar.

Und es war zu schön, um wahr zu sein!

So perfekt ist dann der 680×0 dann doch nicht .-)

// ToDo: Woher kommt das i++ ? .-)

move.l: Verschieben oder Kopieren?

Der Move-Befehl ‚verschiebt‘ einen Wert von A nach B – so sagt es zumindest das Naming. Eigentlich verschiebt er den Wert nicht nur, sondern er kopiert ihn. Aber selbstverständlich wird er damit auch ‚verschoben‘. Es wäre auch eine gute Frage, falls er ihn ‚verschieben‘ würde, was an dessen Stelle wäre am alten Ort. Das wäre ja ein ‚echtes‘ Verschieben.