…und wie man das auf dem Atari 8- Bit richtig macht. Einfach? Da braucht man doch nicht drüber nachdenken, Startadresse angeben und los geht’s? Was aber wenn ich die Startadresse gar nicht kenne?
Das kann zum Beispiel dann passieren, wenn ich weiss, dass ein bestimmtes Programm irgendwo auf einer Diskette liegt, ich aber nicht weiss wo nun der ausführbare Code und wo nur Datenmüll gespeichert wurde.
Tja, also doch, ein paar Gedanken sind angebracht. Folgendes Beispiel zeigt wo die Probleme anfangen:
Die Byte Folge
A9 A9 8D D0 D4
Übersetz, beginnend ab Byte 1 ergibt:
LDA #$A9
STA $D0D4
Übersetzt aber ab Byte 2:
LDA #$8D
???
BNE *…..
Wir wissen:
Der Boot Sektor einer Atari Diskette beginnt immer mit 6 Bytes, die dem Betriebssystem sagen, was zu tun ist (näheres dazu hier im Blog). Das könnte z.B. so ausschauen : 00 03 05 06 06 07. Auf die „07“ folgt ausführbarer Code. Dem Diassembler sollte man also mitteilen, dass der ausführbare Code ab Byte 7 beginnt, sonst macht das Ergebnis u.U. keine Sinn.
12. August 2012 at 1:21 pm
… und wenn der Code dann noch mit illegal Opcodes obfuscated wurde …
13. August 2012 at 6:19 pm
Danke für den Hinweis…. Jetzt sollte es passen. Gut aufgepasst 😉
23. September 2012 at 5:47 pm
„Danken“ wir John von Neumann, der es für praktisch hielt, Programm- und Datencode im selben Speicher abzulesen!
30. September 2012 at 10:27 am
Na, da ist es ja ganz praktisch, dass der PC des 6502 nie auf Datenmüll, sondern immer auf den nächsten ausführbaren Befehl zeigt…..