Also damit hier keine Mißverständnisse auftauchen: Natürlich wird erstmal alles in Assembler geschrieben, aber Assembler ist in erster Linie die für Menschen lesbare Version der Maschinensprache. Die ist zwar irgendwie kompliziert aber auch irgendwie total einfach - denn es sind ja nur sehr simple Anweisungen wie "schiebe mal eben diesen Wert in jenen Speicherbereich" oder "erhöhe den Wert in diesem Speicherbereich um 1" usw.
Und während man darin programmiert, wird dies entweder direkt in die jeweiligen Bits und Bytes übersetzt, oder man schreibt erstmal den ganzen Code in eine Datei und läßt diese später übersetzen. Damit kriegt man auch noch ein paar Vorteile, z.B. daß man Makros verwenden kann oder daß der Assembler (das ist in dem Fall dann der "Compiler") einem das Verwenden von Textlabels erlaubt, welche dann später in Adressen umgesetzt werden.
Ist alles im Grunde kein Hexenwerk, aber man muß stellenweise schon etwas anders denken und vor allem sehr diszipliniert vorgehen.
Hier mal ein kleines Beispiel, wie (lesbarer) Maschinencode für den C64 aussieht (hab das grad einfach irgendwie über Google gefunden):
Code: Alles auswählen
start:
jmp install
jmp deinstall
install: ; install the raster routine
jsr restore ; Disable the Restore key (disable NMI interrupts)
checkirq:
lda cinv ; check the original IRQ vector
ldx cinv+1 ; (to avoid multiple installation)
cmp #<irq1
bne irqinit
cpx #>irq1
beq skipinit
irqinit:
sei
sta oldirq ; store the old IRQ vector
stx oldirq+1
lda #<irq1
ldx #>irq1
sta cinv ; set the new interrupt vector
stx cinv+1
Du siehst, es gibt Textlabels (z.B. start: und install: ) und auch Kommentare (eingeleitet durch ; wie bei PureBasic auch). Der Rest ist der eigentliche Code, bestehend aus 3-buchstabigen Befehlen (lda, jsr, cmp usw.) und meist mit Parametern versehen. Jeder Befehl hat eine Nummer, und diese wird dann nach dem Assemblieren tatsächlich gespeichert (paßt in ein einziges Byte). Die Parameter ebenfalls: im obigen Beispiel werden da oft Textlabels verwendet, diese werden vom Assembler dann in die tatsächlichen Adressen umgewandelt.
So lief das damals... hätte man auf dem C64 schon in C programmieren können, dann wäre das eine große Erleichterung gewesen. Es gab auch irgendwann mal tatsächlich C-Compiler, aber das Problem war dann zum Teil auch, daß der erzeugte Maschinencode nicht gut genug optimiert war und die Programme somit langsamer waren als wenn man es direkt in Maschinencode geschrieben hätte. Und das macht sich besonders bei Spielen natürlich bemerkbar.