Hallo zusammen,
eine ganz doofe Frage:
ich habe einige kleine Assembler Programme, weiß aber nicht, wo sie nach dem Laden im Speicher liegen.
Wie kann ich herausfinden wie die Startadresse lautet?
Du bist in Begriff, Forum64 zu verlassen, um auf die folgende Adresse weitergeleitet zu werden:
Bitte beachte, dass wir für den Inhalt der Zielseite nicht verantwortlich sind und unsere Datenschutzbestimmungen dort keine Anwendung finden.
letzter Beitrag von olly am
Hallo zusammen,
eine ganz doofe Frage:
ich habe einige kleine Assembler Programme, weiß aber nicht, wo sie nach dem Laden im Speicher liegen.
Wie kann ich herausfinden wie die Startadresse lautet?
Probiere es mal damit, PRINT PEEK(196)*16^2 + PEEK(195)
direkt nach dem laden des Assembler Programms sollte sich da die Ladeadresse befinden.
Das muss aber nicht unbedingt die Einsprungadresse zum Program selbst sein.
MfG Claus
Davon abgesehen: damit ein Programm automatisch an die richtige Ladeadresse geladen werden kann, definieren die ersten beiden Bytes von jeder "PRG"-Datei die Ladeadresse. Auch Tools wie DirMaster benutzen diese Information, um den disassemblierten Code usw. gleich an der richtigen Adresse anzuzeigen.
Wenn man das immer und automatisch erfahren will, kann man sich mit einem Multifunktionsmodul wie der Action Replay Cartridge anfreunden. Das schreibt das nach dem Laden gleich dazu.
Wenn man das immer und automatisch erfahren will, kann man sich mit einem Multifunktionsmodul wie der Action Replay Cartridge anfreunden. Das schreibt das nach dem Laden gleich dazu.
Oder auch SpeedDOS+ ... und vermutlich etliche andere Speeder ....
direkt nach dem laden des Assembler Programms sollte sich da die Ladeadresse befinden.
Stimmt nicht. Wenn du ",8,1" lädst, landet es dort, wo es hin soll (was du aber ja nicht weißt). Und wenn du nur ",8" lädst, landet es am Basic-Start und dort wird seine Ladeadresse nicht verwendet. Es steht am Basic-Start nur der Verkettungslink auf die nächste Zeile. Die Ladeadresse findest du allerdings *nach* dem Laden auch in Adresse $c3/$c4 (195/196). Nicht aber bei ",8,1", somit ist das eigentlich auch keine nützliche Info...
Aver die bisher hier genannten Hinweise helfen dir da allesamt weiter (Speeder-Module, Dirmaster, die selbstgeschriebenen Progrämmchen).
Arndt
Das kommt davon, wenn man kein original 64er Kernal benutzt, sondern zb. Dolphin Dos,
da ist es so wie beschrieben.
Eben noch mal probiert, wenn ich ein Programm mit 8,1 lade, steht in 195,196 die Adresse an die das Assemblerprogramm geladen wurde
MfG Claus
Danke für die Tips! Das probiere ich mal aus.
Die gleiche Frage für den C128: was kann man da machen?
Da reihe ich mich mal ein, denke, meine Frage passt hier einigermaßen
Früher haben wir immer ein Musik File geladen.
Und dann mit kurzem Basic Programm abspielen lassen:
10 sys 4096
20 for a=1 to 6: Next a
30 sys 4099
40 goto 20
Funktionierte tadellos
Hab das vor längerer Zeit mal wieder probiert mit angestecktenm Ultimate 2.
Das Musik File lädt dann aber immer nach $0801...
Gibt es da eine Erklärung für
Irgendeine Einstellung, die man ändern muss?
Ist jetzt nicht ganz das Thema, aber ich erlaube mir mal auch eine Möglichkeit der Ermittlung der Endadresse in Assembler (der Fragesteller hat nicht explizit nach Basic oder Assembler gefragt aber das Ende einer Datei im Speicher gehört ja auch mit de Startadresse zum "wo im Speicher (Bereich) die Daten liegen") zu skizzieren, die ich mir mal ausgedacht habe, um die Endadresse nach dem Laden einer Datei zu ermitteln. Wobei der Fokus auf der Umwandlung in ASCII liegt um die Adresse dann weiter zu verwenden.
Mit ein paar Eingriffen könnte man auf die Art auch die Startadresse ermitteln.
Die Konvertierung von Hex nach ASCII lass ich mal unkommentiert wenn´s Recht ist.
Sehr fein, passt, danke!
Nur als kleinen Verbesserungsvorschlag: Bei der Routine converthex ist mir da zu viel Stack-Action ... wenn man das and #$0f nach hinten schiebt, spart man sich ein pha und pla ...
Sehr fein, passt, danke!
Nur als kleinen Verbesserungsvorschlag: Bei der Routine converthex ist mir da zu viel Stack-Action ... wenn man das and #$0f nach hinten schiebt, spart man sich ein pha und pla ...
Stimmt! Spart zwar nur zwei Bytes aber dafür in Summe 7 Taktzyklen. Danke für den Tip!
Wenn einem das Y-Register egal ist und die Rückgabeparameter Y/A (low/hi) verkraften kann, kann man die optimierte Routine von jeeks noch etwas optimieren indem man den JSR L1 nach vorne zieht, auf pha/pla und ein tax verzichtet:
TD1334
Prima, danke. Probier ich aus.