Stackpointer auslesen !
Moderator: Rockford
- dl7ukk
- Beiträge: 538
- Registriert: 25.08.2021 23:03
- Has thanked: 73 times
- Been thanked: 103 times
- Kontaktdaten:
Stackpointer auslesen !
Guten Morgen,
wie kann ich den Stackpointer auslesen?
Im atari800 Emulator gibt es eine eigene Funktion, welche die letzten (Rück~) Sprungadressen anzeigt. Nur laufen dort nicht alle Programme, wie die von Schleife'88 zum Beispiel.
Aus der Adresse $318/ Stackpointer Hilfsadresse kann ich aber immer nur %00 auslesen. Im Profibuch und XL-Intern habe ich zum Stack keine weiteren Hinweise gefunden.
Danke
dl7ukk
wie kann ich den Stackpointer auslesen?
Im atari800 Emulator gibt es eine eigene Funktion, welche die letzten (Rück~) Sprungadressen anzeigt. Nur laufen dort nicht alle Programme, wie die von Schleife'88 zum Beispiel.
Aus der Adresse $318/ Stackpointer Hilfsadresse kann ich aber immer nur %00 auslesen. Im Profibuch und XL-Intern habe ich zum Stack keine weiteren Hinweise gefunden.
Danke
dl7ukk
- Dateianhänge
-
- TURBSTA2.png (1.18 KiB) 3690 mal betrachtet
- Olix
- Beiträge: 1093
- Registriert: 17.08.2021 07:06
- Has thanked: 132 times
- Been thanked: 475 times
- Kontaktdaten:
Re: Stackpointer auslesen !
In einem laufenden Programm kann mit dem Opcode TSX ($BA) der Wert des Stackpointers in das X Register geladen werden. Mit TXS kann man den Stackpointer neu setzen.
Im Altirra sollte man den Wert auch im Debugger auslesen können.
Im Altirra sollte man den Wert auch im Debugger auslesen können.
- Dr. Irata
- Beiträge: 946
- Registriert: 24.08.2021 14:40
- Has thanked: 113 times
- Been thanked: 275 times
- Kontaktdaten:
Re: Stackpointer auslesen !
Guten Morgen!
Interessant zu wissen ist vielleicht auch, dass der Stapel beim 6502 Prozessor ein Softwarestapel ist und somit zwar etwas flexibler erscheint, beim 6502 allerdings beschränkt ist. Der Zeiger auf den Stapel ist nämlich nur 8 Bit groß, ein 9. Bit liegt dabei ständig auf 1 - das bedeutet, daß die ganzen "Stapelwerte" in der Page 1 abgespeichert werden - also zwischen 256-511 ($100-1FF).
In diesen Speicherstellen könnte man also auch direkt auslesen und reinschreiben....
Gruß
Peter
Interessant zu wissen ist vielleicht auch, dass der Stapel beim 6502 Prozessor ein Softwarestapel ist und somit zwar etwas flexibler erscheint, beim 6502 allerdings beschränkt ist. Der Zeiger auf den Stapel ist nämlich nur 8 Bit groß, ein 9. Bit liegt dabei ständig auf 1 - das bedeutet, daß die ganzen "Stapelwerte" in der Page 1 abgespeichert werden - also zwischen 256-511 ($100-1FF).
In diesen Speicherstellen könnte man also auch direkt auslesen und reinschreiben....
Gruß
Peter
- dl7ukk
- Beiträge: 538
- Registriert: 25.08.2021 23:03
- Has thanked: 73 times
- Been thanked: 103 times
- Kontaktdaten:
Re: Stackpointer auslesen !
Danke Peter,
für Deinen Hinweis. Da aber der Stapel recht voll ist, habe ich das Problem die richtige/ aktuelle
Rücksprungadresse zu finden.
Dieses Schleife Programm ist ein ROM-Dump, 2K groß. Aufgeblasen auf 8K hängt es in der Cart-Emu vom Freezer 2020, im Start-Menü. Der XL hat sich NICHT! aufgehängt, aber das Menü kann ich nicht verlassen, genauer, es wird bei jeder Auswahl neu gestartet.
ABER
Die gleiche Datei in den Freezer per BIN-Load an B800 geladen, mit G B800 gestartet, läuft ohne Fehler.
dl7ukk
für Deinen Hinweis. Da aber der Stapel recht voll ist, habe ich das Problem die richtige/ aktuelle
Rücksprungadresse zu finden.
Dieses Schleife Programm ist ein ROM-Dump, 2K groß. Aufgeblasen auf 8K hängt es in der Cart-Emu vom Freezer 2020, im Start-Menü. Der XL hat sich NICHT! aufgehängt, aber das Menü kann ich nicht verlassen, genauer, es wird bei jeder Auswahl neu gestartet.
ABER
Die gleiche Datei in den Freezer per BIN-Load an B800 geladen, mit G B800 gestartet, läuft ohne Fehler.
dl7ukk
- Dr. Irata
- Beiträge: 946
- Registriert: 24.08.2021 14:40
- Has thanked: 113 times
- Been thanked: 275 times
- Kontaktdaten:
Re: Stackpointer auslesen !
... ja klar, der Stapel funktioniert ja nach dem Prinzip last in / first out... insofern ist das sicherlich besser, wenn man das koordiniert reinschiebt und rausholt.
Dennoch gut zu wissen, wo man die ganzen Stapeladressen finden kann und daß man limitiert ist, denn für die Stapeladressen hat man nur 256 Bytes!
Gruß
Peter
Dennoch gut zu wissen, wo man die ganzen Stapeladressen finden kann und daß man limitiert ist, denn für die Stapeladressen hat man nur 256 Bytes!
Gruß
Peter
-
- Beiträge: 141
- Registriert: 17.08.2021 11:03
- Wohnort: Salzburg, Austria
- Has thanked: 12 times
- Been thanked: 57 times
- Kontaktdaten:
Re: Stackpointer auslesen !
Die Daten am Stack zu interpretieren ist etwas tricky, mit ein wenig Übung aber machbar :-)
Erstmal muss man wissen, dass der Stack von "oben nach unten" befüllt wird und das S Register auf den nächsten freien Wert zeigt.
Das heisst S=$FF ist ein leerer Stack, bei S=$FC liegen 3 Werte am Stack (in $FD, $FE, $FF).
Bei einem JSR landet nicht die Rücksprung-Adresse sondern die Rücksprung-Adresse minus 1 am Stack, zuerst Hi dann Lo Wert.
Zusätzlich landen dort auch noch ggf mit PHA gesicherte Register.
Hier ein kleines Beispiel - im atari800 Emu, im Freezer geht's aber ähnlich:
Beim Anhalten sieht man gleich den Stack Pointer auf $FC und dass der Atari im Unterprogramm bei $100C in der Schleife hängt:
Der Stack sieht wie folgt aus:
Alles von $100 bis inkl $1FC ($FC=Stackpointer) kannst Du ignorieren, das sind alte Werte die vorher mal geschrieben wurden. Interessant wird's ab $FD:
Da ist zuerst mal das $42 - das ist der Akku den das Unterprogramm mit PHA gesichert hat.
$FE/$FF enthalten (LO/HI) die Rücksprungadresse minus 1 - $1007. Bei einem RTS würde der Atari also ab $1008 weitermachen - genau die Adresse hinter dem JSR in $1005.
so long,
Hias
Erstmal muss man wissen, dass der Stack von "oben nach unten" befüllt wird und das S Register auf den nächsten freien Wert zeigt.
Das heisst S=$FF ist ein leerer Stack, bei S=$FC liegen 3 Werte am Stack (in $FD, $FE, $FF).
Bei einem JSR landet nicht die Rücksprung-Adresse sondern die Rücksprung-Adresse minus 1 am Stack, zuerst Hi dann Lo Wert.
Zusätzlich landen dort auch noch ggf mit PHA gesicherte Register.
Hier ein kleines Beispiel - im atari800 Emu, im Freezer geht's aber ähnlich:
Code: Alles auswählen
1000: A2 FF LDX #$FF
1002: 9A TXS
1003: A9 42 LDA #$42
1005: 20 0B 10 JSR $100B
1008: 4C 08 10 JMP $1008
100B: 48 PHA
100C: 4C 0C 10 JMP $100C
Code: Alles auswählen
0 1 A=42 X=FF Y=FF S=FC P=--*----- PC=100C: 4C 0C 10 JMP $100C
Code: Alles auswählen
01F0: 00 00 85 C1 00 85 C1 FF FF 42 20 0C 10 42 07 10
Da ist zuerst mal das $42 - das ist der Akku den das Unterprogramm mit PHA gesichert hat.
$FE/$FF enthalten (LO/HI) die Rücksprungadresse minus 1 - $1007. Bei einem RTS würde der Atari also ab $1008 weitermachen - genau die Adresse hinter dem JSR in $1005.
so long,
Hias
- dl7ukk
- Beiträge: 538
- Registriert: 25.08.2021 23:03
- Has thanked: 73 times
- Been thanked: 103 times
- Kontaktdaten:
Re: Stackpointer auslesen !
Hallo,
ich hoffe es verstanden zu haben. Mal sehen ob ich es bis Morgen (sprich später) auch noch behalten habe ....
Meine Aussage hört sich vielleicht blöd für Programmierer an .. Sorry ..
Hier ein Beispiel aus dem Programm, welches mich quält.
01F4....................ignorieren wir
01F5.......$61.......keine Ahnung, wo die herkommt, (aber für mich hoffentlich uninteressant)
01F6/7...$B8B2..-1 von da kommt der Freezer
01F8/9...$B8C2..-1 sollte die Adresse sein, die vor der Sub-Routine war/ welche die Sub-Routine aufrief.
Danke &
einen schönen Sonntag
dl7ukk
ich hoffe es verstanden zu haben. Mal sehen ob ich es bis Morgen (sprich später) auch noch behalten habe ....
das war schon mal eine wichtige Info für mich. Das auch andere Werte gesichert werden wußte ich, aber nicht, daß diese Werte (sozusagen) automatisch mit gesichert werden. Eigentlich logisch, wenn man drüber nachdenkt.inkl $1FC ($FC=Stackpointer) kannst Du ignorieren,
Das steht auch im Profibuch, war mir aber nicht so klar. Dabei ist es nur eine Frage der Betrachtung. Woher vs Wohin.die Rücksprungadresse minus 1 - $1007
Meine Aussage hört sich vielleicht blöd für Programmierer an .. Sorry ..
Hier ein Beispiel aus dem Programm, welches mich quält.
Code: Alles auswählen
A X Y S NV-BDIZC PC
07 70 00 F4 01100001 B8B2
01F0 85 C1 00 70 80 61 B2 B8
01F8 C2 B8 2A B8 51 08 19 09.
B8A0 AD 1F D0 LDA $D01F ; 4
B8A3 C9 07 CMP #$07 ; 2
B8A5 D0 F9 BNE $B8A0 ; 2-4
B8A7 A9 80 LDA #$80 ; 2
B8A9 85 11 STA $11 ; 3
B8AB A5 11 LDA $11 ; 3
B8AD F0 07 BEQ $B8B6 ; 2-4
B8AF AD 1F D0 LDA $D01F ; 4
B8B2 C9 07 CMP #$07 ; 2
B8B4 F0 F5 BEQ $B8AB ; 2-4
B8B6 48 PHA ; 3
B8B7 A9 80 LDA #$80 ; 2
B8B9 85 11 STA $11 ; 3
B8BB 68 PLA ; 4
B8BC 60 RTS ; 6
01F5.......$61.......keine Ahnung, wo die herkommt, (aber für mich hoffentlich uninteressant)
01F6/7...$B8B2..-1 von da kommt der Freezer
01F8/9...$B8C2..-1 sollte die Adresse sein, die vor der Sub-Routine war/ welche die Sub-Routine aufrief.
Danke &
einen schönen Sonntag
dl7ukk
-
- Beiträge: 141
- Registriert: 17.08.2021 11:03
- Wohnort: Salzburg, Austria
- Has thanked: 12 times
- Been thanked: 57 times
- Kontaktdaten:
Re: Stackpointer auslesen !
Hallo Andreas,
beim Freezer musst Du noch ein kleines, wichtiges Detail zusätzlich beachten:
Der Freezer klinkt sich in den Interrupt ein und die Interrupt-Aktivierung im 6502 ist ein klein wenig anders als ein "JSR":
Wenn ein IRQ oder NMI auftritt führt der 6502 zuerst noch den aktuellen Befehl fertig aus, der Program Counter steht dann auf der Adresse des nächsten Befehls.
Dann schreibt der 6502 den Program Counter auf den Stack (zuerst HI, dann LO) und danach das Status/Flags Register P.
RTI holt sich dann diese 3 Werte vom Stack und setzt die Register entsprechend - mit diesem Befehl beendet sich auch die Freezer-Software und setzt die normale Programmausführung fort.
Auf den ersten Blick klingt das so wie PLP gefolgt von RTS aber der Unterschied ist, dass beim Interrupt die "richtige" Adresse des nächsten Befehls am Stack steht und nicht "Adresse minus 1" wie bei JSR.
In Deinem Beispiel ist also das $61 an $1F5 das Status-Register - der Freezer zeigt beim "R" Befehl die Status-Bits ausdekodiert an (V=$40, $20 hat keine Bedeutung, C=$01).
In $1F6/$1F7 steht die Adresse des nächsten Befehls ($B8B2) - das zeigt Freezer unter PC an.
$1F8/$1F9 danach sieht dann wie "Adresse minus 1" von einem JSR in $B8C0-$B8C2 aus - $B8C2 heisst ein RTS würde bei $B8C3 weitermachen.
Da das mit "Adresse" und "Adresse minus 1" recht verwirrend sein kann, kannst Du beim Freezer auch einfach folgendermassen vorgehen:
Ignoriere nicht nur den Wert am Stack-Pointer sondern auch die 3 Bytes danach - die Adresse des nächsten Befehls siehst Du ja unter "PC" beim "R" Befehl.
Bei den anderen Adressen am Stack musst Du jeweils 1 hinzuzählen die richtige Adresse zu erhalten bei der RTS weitermacht.
Noch ein Tip: die Adressen am Stack bedeuten nicht unbedingt, dass in Adresse-2 bis Adresse ein JSR steht (auch wenn das oft der Fall sein wird), es kann auch sein, dass das Programm die Adressen mit PHA in den Stack geschrieben hat.
Das ist ein beliebter Trick um Sprungtabellen am 6502 zu implementieren (der 6502 hat leider kein "JMP (adresse,X)" o.ä.) und wird zB auch in der CIO verwendet - deshalb liegen dort in den Tabellen diese seltsamen "Adresse minus 1" Werte.
Kurzum: mit den Daten am Stack bekommst Du nicht (immer) heraus von wo ein Unterprogramm aufgerufen wurde sondern nur bei welcher Adresse ein RTS/RTI weitermachen wird.
so long,
Hias
beim Freezer musst Du noch ein kleines, wichtiges Detail zusätzlich beachten:
Der Freezer klinkt sich in den Interrupt ein und die Interrupt-Aktivierung im 6502 ist ein klein wenig anders als ein "JSR":
Wenn ein IRQ oder NMI auftritt führt der 6502 zuerst noch den aktuellen Befehl fertig aus, der Program Counter steht dann auf der Adresse des nächsten Befehls.
Dann schreibt der 6502 den Program Counter auf den Stack (zuerst HI, dann LO) und danach das Status/Flags Register P.
RTI holt sich dann diese 3 Werte vom Stack und setzt die Register entsprechend - mit diesem Befehl beendet sich auch die Freezer-Software und setzt die normale Programmausführung fort.
Auf den ersten Blick klingt das so wie PLP gefolgt von RTS aber der Unterschied ist, dass beim Interrupt die "richtige" Adresse des nächsten Befehls am Stack steht und nicht "Adresse minus 1" wie bei JSR.
In Deinem Beispiel ist also das $61 an $1F5 das Status-Register - der Freezer zeigt beim "R" Befehl die Status-Bits ausdekodiert an (V=$40, $20 hat keine Bedeutung, C=$01).
In $1F6/$1F7 steht die Adresse des nächsten Befehls ($B8B2) - das zeigt Freezer unter PC an.
$1F8/$1F9 danach sieht dann wie "Adresse minus 1" von einem JSR in $B8C0-$B8C2 aus - $B8C2 heisst ein RTS würde bei $B8C3 weitermachen.
Da das mit "Adresse" und "Adresse minus 1" recht verwirrend sein kann, kannst Du beim Freezer auch einfach folgendermassen vorgehen:
Ignoriere nicht nur den Wert am Stack-Pointer sondern auch die 3 Bytes danach - die Adresse des nächsten Befehls siehst Du ja unter "PC" beim "R" Befehl.
Bei den anderen Adressen am Stack musst Du jeweils 1 hinzuzählen die richtige Adresse zu erhalten bei der RTS weitermacht.
Noch ein Tip: die Adressen am Stack bedeuten nicht unbedingt, dass in Adresse-2 bis Adresse ein JSR steht (auch wenn das oft der Fall sein wird), es kann auch sein, dass das Programm die Adressen mit PHA in den Stack geschrieben hat.
Das ist ein beliebter Trick um Sprungtabellen am 6502 zu implementieren (der 6502 hat leider kein "JMP (adresse,X)" o.ä.) und wird zB auch in der CIO verwendet - deshalb liegen dort in den Tabellen diese seltsamen "Adresse minus 1" Werte.
Kurzum: mit den Daten am Stack bekommst Du nicht (immer) heraus von wo ein Unterprogramm aufgerufen wurde sondern nur bei welcher Adresse ein RTS/RTI weitermachen wird.
so long,
Hias
- dl7ukk
- Beiträge: 538
- Registriert: 25.08.2021 23:03
- Has thanked: 73 times
- Been thanked: 103 times
- Kontaktdaten:
Re: Stackpointer auslesen !
Hallo Hias,
vielen Dank für die umfangreichen Infos. Die (Infos) wollen erst mal verarbeitet werden...
Ich habe inzwischen probiert die Abfrage der START-Taste zu manipulieren. Das klappt natürlich nur über Umwege. Ich habe $D01F mit $3000 (war frei) ersetzt. Das geht natürlich nicht im Freezer -weil echte ROM-Simulation-, aber der atari800 Emu ist so gutmütig. Das Programm will zwar immer noch nicht, ABER es arbeitet jetzt schon mal die ersten Zeilen nach dem (simulierten) Drücken der START-Taste ab. Irgendwie landet es wieder im Auswahl Menü. Ein kleinen Schritt bin ich weiter.
Jetzt hänge ich beim SET Befehl im Emu ... (Syntax)
Gruß
dl7ukk
vielen Dank für die umfangreichen Infos. Die (Infos) wollen erst mal verarbeitet werden...
Ich habe inzwischen probiert die Abfrage der START-Taste zu manipulieren. Das klappt natürlich nur über Umwege. Ich habe $D01F mit $3000 (war frei) ersetzt. Das geht natürlich nicht im Freezer -weil echte ROM-Simulation-, aber der atari800 Emu ist so gutmütig. Das Programm will zwar immer noch nicht, ABER es arbeitet jetzt schon mal die ersten Zeilen nach dem (simulierten) Drücken der START-Taste ab. Irgendwie landet es wieder im Auswahl Menü. Ein kleinen Schritt bin ich weiter.
Jetzt hänge ich beim SET Befehl im Emu ... (Syntax)
Gruß
dl7ukk
-
- Beiträge: 141
- Registriert: 17.08.2021 11:03
- Wohnort: Salzburg, Austria
- Has thanked: 12 times
- Been thanked: 57 times
- Kontaktdaten:
Re: Stackpointer auslesen !
Kleiner Tip: wenn Du die Modul-Daten ins CartEmu RAM schreibst kannst Du sie recht einfach mit dem Freezer ändern:
Mit "KW<1" kannst Du Schreibzugriffe erlauben und mit "KW<0" wieder zurück auf schreibgeschützt schalten (nicht vergessen, bevor Du den Freezer verlässt).
so long,
Hias
Mit "KW<1" kannst Du Schreibzugriffe erlauben und mit "KW<0" wieder zurück auf schreibgeschützt schalten (nicht vergessen, bevor Du den Freezer verlässt).
so long,
Hias
- dl7ukk
- Beiträge: 538
- Registriert: 25.08.2021 23:03
- Has thanked: 73 times
- Been thanked: 103 times
- Kontaktdaten:
Re: Stackpointer auslesen !
Sehr guter Tip,
Ich habe bisher die ""ROM"" nach (zB) $B000-$BFFF geladen und dort probiert.
Macht das einen Unterschied?
Mit dem Schleife89 "Turbo-Star1" Modul-Dump komme ich nicht weiter.
Als COM im Cart-Bereich geht es. Ich konnte den Weg der Abfrage (Consolen-Tasten) bis ins OS verfolgen.
Aber dort bleibt das Programm in einer BNE/BEQ Schleife. Verlasse ich aber die Console vom atari800 mit cont, dann springt das Programm sofort in die (ausgewählte) Funktion. Blöd nur im atari800 kann ich "Schleife88" nicht testen.
Es könnte auch noch Trig3/3fa liegen, aber damit hatte ich auch keinen Erfolg. Sie sind auf jeden Fall nicht gleich!!
so in etwa
WE leider vorbei
schönen Abend
dl7ukk
Ich habe bisher die ""ROM"" nach (zB) $B000-$BFFF geladen und dort probiert.
Macht das einen Unterschied?
Mit dem Schleife89 "Turbo-Star1" Modul-Dump komme ich nicht weiter.
Als COM im Cart-Bereich geht es. Ich konnte den Weg der Abfrage (Consolen-Tasten) bis ins OS verfolgen.
Aber dort bleibt das Programm in einer BNE/BEQ Schleife. Verlasse ich aber die Console vom atari800 mit cont, dann springt das Programm sofort in die (ausgewählte) Funktion. Blöd nur im atari800 kann ich "Schleife88" nicht testen.
Es könnte auch noch Trig3/3fa liegen, aber damit hatte ich auch keinen Erfolg. Sie sind auf jeden Fall nicht gleich!!
Code: Alles auswählen
von Startadresse per JMP auf freien RAM
Trig/3fa nach Freezer2005 Doku kopiert
die ersten 2 Befehle (wo jetzt JMP steht)
zurück auf Start +3
WE leider vorbei
schönen Abend
dl7ukk
-
- Beiträge: 602
- Registriert: 04.11.2021 15:52
- Has thanked: 53 times
- Been thanked: 122 times
- Kontaktdaten:
Stackpointer auslesen !
Hallo Andreas,
wenn Du den Dump in der Cart-Emu laufen läßt, hast Du daran gedacht, die Speicherstellen $BFFA-$BFFF korrekt zu setzen?
Also müßte eigentlich:
BFFA: 00 80
BFFC: 00
BFFD: 05 (nach Bedarf anpassen)
BFFE: (hier sollte eine Adresse stehen, die entweder auf eine Intialisierungsroutine im Modul oder ein RTS zeigt.)
wenn Du den Dump in der Cart-Emu laufen läßt, hast Du daran gedacht, die Speicherstellen $BFFA-$BFFF korrekt zu setzen?
Also müßte eigentlich:
BFFA: 00 80
BFFC: 00
BFFD: 05 (nach Bedarf anpassen)
BFFE: (hier sollte eine Adresse stehen, die entweder auf eine Intialisierungsroutine im Modul oder ein RTS zeigt.)
-
- Beiträge: 141
- Registriert: 17.08.2021 11:03
- Wohnort: Salzburg, Austria
- Has thanked: 12 times
- Been thanked: 57 times
- Kontaktdaten:
Re: Stackpointer auslesen !
Ah, wenn das ein abschaltbares Modul ist müsstest Du den Code noch entsprechend patchen, damit er auch mit der Turbo Freezer CartEmu das "ROM" abschaltet.
Welchen Modul-Typ hast Du da im atari800 genau ausgewählt?
Der 2011er Freezer emuliert ja auch TRIG3, der 2005er nicht - je nach Code hat beides Vor- und Nachteile :-)
so long,
Hias
Welchen Modul-Typ hast Du da im atari800 genau ausgewählt?
Der 2011er Freezer emuliert ja auch TRIG3, der 2005er nicht - je nach Code hat beides Vor- und Nachteile :-)
so long,
Hias
- dl7ukk
- Beiträge: 538
- Registriert: 25.08.2021 23:03
- Has thanked: 73 times
- Been thanked: 103 times
- Kontaktdaten:
Re: Stackpointer auslesen !
Hi,
@ Hias
Standard 8K Rom, wobei das ROM nur 2K groß ist und für Freezer und atari800 vervielfältigt wurde.
Ob das Modul abschaltbar ist, weiß ich nicht, würde mich aber wundern (1988). Ich habe auch keine Ahnung vom Abschalten.
Mit K<1 habe ich Trig3 auf 3FA "kopiert", besser auch auf NULL gesetzt Trig3= #00. Dann läuft das Teil gar nicht mehr.
@ Erhard
Ja, das schaue ich mir an.
BFF0: E8 BD 30 00 48 20 6D 08 60 60 00 B8 00 04 F8 BF
Einzig $BFFD kann ich so richtig einordnen. Da muß ich nochmal Profibuch (Danke Walter) nachlesen.
Danke und gute Nacht
dl7ukk
Falls Jemand reinsehen möchte ...
@ Hias
Standard 8K Rom, wobei das ROM nur 2K groß ist und für Freezer und atari800 vervielfältigt wurde.
Ob das Modul abschaltbar ist, weiß ich nicht, würde mich aber wundern (1988). Ich habe auch keine Ahnung vom Abschalten.
Mit K<1 habe ich Trig3 auf 3FA "kopiert", besser auch auf NULL gesetzt Trig3= #00. Dann läuft das Teil gar nicht mehr.
@ Erhard
Ja, das schaue ich mir an.
BFF0: E8 BD 30 00 48 20 6D 08 60 60 00 B8 00 04 F8 BF
Einzig $BFFD kann ich so richtig einordnen. Da muß ich nochmal Profibuch (Danke Walter) nachlesen.
Danke und gute Nacht
dl7ukk
Falls Jemand reinsehen möchte ...
- Dateianhänge
-
- SCHLEI01.ROM.zip
- (1.73 KiB) 41-mal heruntergeladen
-
- Beiträge: 141
- Registriert: 17.08.2021 11:03
- Wohnort: Salzburg, Austria
- Has thanked: 12 times
- Been thanked: 57 times
- Kontaktdaten:
Re: Stackpointer auslesen !
Dieser D500 Zugriff sieht so aus als würde er das Modul abschalten:
Wenn Du das "LDA $D500" in "STA $D591" änderst würd's zur Freezer 2011 CartEmu passen.
Das JMP $C2CA direkt danach sieht sehr hacky aus, springt miiten ins OS ROM und könnte Probleme mit den verschiedenen OS Versionen machen...
so long,
Hias
Code: Alles auswählen
BBF5 A9 00 LDA #$00
BBF7 8D 0E D4 STA $D40E
BBFA AD 00 D5 LDA $D500
BBFD 4C CA C2 JMP $C2CA
Das JMP $C2CA direkt danach sieht sehr hacky aus, springt miiten ins OS ROM und könnte Probleme mit den verschiedenen OS Versionen machen...
so long,
Hias
- dl7ukk
- Beiträge: 538
- Registriert: 25.08.2021 23:03
- Has thanked: 73 times
- Been thanked: 103 times
- Kontaktdaten:
Re: Stackpointer auslesen !
Hallo Hias,
Ich überlege ernsthaft ob es Sinn macht an dieser Stelle heute(!) weiter zu machen. Nicht daß ich gerne aufgebe, glaube aber das der Aufwand in keinen Verhält mehr zum Nutzen steht. Vielleicht später mal. Das Programm -von musealem Wert- läuft als File. Eine Zuordnung/ Funktionstest konnte dadurch erfolgen. In "produktiven" Einsatz wird es wohl ohnehin nie wieder kommen. Und noch wichtiger, ich habe keine Ahnung. Außerdem warten noch etliche Programme dieser Art auf Sichtung und Zuordnung. Natürlich werde ich jede Gelegenheit nutzen und jeden Tip probieren um den "Code zu knacken". Der Quelltext ist gedruckt und liegt unter dem Kopfkissen
Was ich noch nicht verstanden habe; ""LDA $D500" in "STA $D591""
Benötigt der Freezer diese Änderung auf Grund der Emulation des Moduls ? Beziehungsweise wäre diese Änderung für ein echtes Modul auch notwendig ? (Bug im Programm?)
Vielleicht sollte ich mal mit Bernd reden und mir das Erstellen von echten Modulen ansehen.
dl7ukk
Ja, es bringt was, ich habe es heute Nacht noch probiert. "Wenigsten" reagiert die Auswahl nun und löst einen Kaltstart aus..."LDA $D500" in "STA $D591"
Ich überlege ernsthaft ob es Sinn macht an dieser Stelle heute(!) weiter zu machen. Nicht daß ich gerne aufgebe, glaube aber das der Aufwand in keinen Verhält mehr zum Nutzen steht. Vielleicht später mal. Das Programm -von musealem Wert- läuft als File. Eine Zuordnung/ Funktionstest konnte dadurch erfolgen. In "produktiven" Einsatz wird es wohl ohnehin nie wieder kommen. Und noch wichtiger, ich habe keine Ahnung. Außerdem warten noch etliche Programme dieser Art auf Sichtung und Zuordnung. Natürlich werde ich jede Gelegenheit nutzen und jeden Tip probieren um den "Code zu knacken". Der Quelltext ist gedruckt und liegt unter dem Kopfkissen
Was ich noch nicht verstanden habe; ""LDA $D500" in "STA $D591""
Benötigt der Freezer diese Änderung auf Grund der Emulation des Moduls ? Beziehungsweise wäre diese Änderung für ein echtes Modul auch notwendig ? (Bug im Programm?)
Vielleicht sollte ich mal mit Bernd reden und mir das Erstellen von echten Modulen ansehen.
dl7ukk
- dl7ukk
- Beiträge: 538
- Registriert: 25.08.2021 23:03
- Has thanked: 73 times
- Been thanked: 103 times
- Kontaktdaten:
Re: Stackpointer auslesen !
Hi,
>> Verstand vs Sucht <<
Ich kann es nicht lassen. Zu meiner Entlastung möchte ich vorbringen, daß es in meinem Keller bei 20,3° wesentlich angenehmer ist bei jetzt schon 28,x ° draußen im Schatten.
.
Grund für mich auch die anderen Modul.Typen im atari800 zu prüfen. Und Bingo! Unter Phoenix 8K läuft das Modul, besser die Auswahl schon mal. Ohne jegliche Änderungen. Mehr kann ich im Emu nicht erreichen. Damit scheint die Modul-Datei in Ordnung zu sein (als File hatte ich die Funktionen erfolgreich geprüft) oder habe ich noch was übersehen??
Jetzt werde ich Infos zu Phoenix Modulen suchen und mich darüber informieren.
Danke
dl7ukk
>> Verstand vs Sucht <<
Ich kann es nicht lassen. Zu meiner Entlastung möchte ich vorbringen, daß es in meinem Keller bei 20,3° wesentlich angenehmer ist bei jetzt schon 28,x ° draußen im Schatten.
.
Welchen Modul-Typ hast Du da im atari800 genau ausgewählt?
Grund für mich auch die anderen Modul.Typen im atari800 zu prüfen. Und Bingo! Unter Phoenix 8K läuft das Modul, besser die Auswahl schon mal. Ohne jegliche Änderungen. Mehr kann ich im Emu nicht erreichen. Damit scheint die Modul-Datei in Ordnung zu sein (als File hatte ich die Funktionen erfolgreich geprüft) oder habe ich noch was übersehen??
Jetzt werde ich Infos zu Phoenix Modulen suchen und mich darüber informieren.
Danke
dl7ukk
-
- Beiträge: 141
- Registriert: 17.08.2021 11:03
- Wohnort: Salzburg, Austria
- Has thanked: 12 times
- Been thanked: 57 times
- Kontaktdaten:
Re: Stackpointer auslesen !
Eine gute Anlaufstelle für Infos zu den Modul-Typen ist das DOC/cart.txt vom atari800 Emulator:
https://github.com/atari800/atari800/bl ... C/cart.txt
Was für ein EPROM ist das denn genau in dem Modul? Wenn's ein 2732 (4k) EPROM ist könnte es auch gut ein Blizzard Modul sein.
Der Link im cart.txt dazu funktioniert leider nicht mehr, aber archive.org hat die Seite gesichert
http://web.archive.org/web/201006120251 ... 3/A18.html
Google Translate in Kombination mit Archive.org hat hier nicht geklappt (mit Copy&Paste des Texts müssts wohl gehen) aber zwischen den polnischen Wörtern erkenn ich da "XC12" und "Turbo".
Jedenfalls sind sowohl Phoenix 8k als auch Blizzard 4k einfache Carts die nach dem Einschalten aktiv sind und durch einen (Lese- oder Schreib-) Zugriff auf $D5xx abgeschaltet werden können.
Für die Carts macht's also nichts aus ob da ein "LDA $D500", "STA $D500" o.ä. im Code steht, aber bei der CartEmu im Freezer 2011 musst Du den Wert 0 nach $D591 schreiben um das Modul abzuschalten.
so long,
Hias
https://github.com/atari800/atari800/bl ... C/cart.txt
Was für ein EPROM ist das denn genau in dem Modul? Wenn's ein 2732 (4k) EPROM ist könnte es auch gut ein Blizzard Modul sein.
Der Link im cart.txt dazu funktioniert leider nicht mehr, aber archive.org hat die Seite gesichert
http://web.archive.org/web/201006120251 ... 3/A18.html
Google Translate in Kombination mit Archive.org hat hier nicht geklappt (mit Copy&Paste des Texts müssts wohl gehen) aber zwischen den polnischen Wörtern erkenn ich da "XC12" und "Turbo".
Jedenfalls sind sowohl Phoenix 8k als auch Blizzard 4k einfache Carts die nach dem Einschalten aktiv sind und durch einen (Lese- oder Schreib-) Zugriff auf $D5xx abgeschaltet werden können.
Für die Carts macht's also nichts aus ob da ein "LDA $D500", "STA $D500" o.ä. im Code steht, aber bei der CartEmu im Freezer 2011 musst Du den Wert 0 nach $D591 schreiben um das Modul abzuschalten.
so long,
Hias
- dl7ukk
- Beiträge: 538
- Registriert: 25.08.2021 23:03
- Has thanked: 73 times
- Been thanked: 103 times
- Kontaktdaten:
Re: Stackpointer auslesen !
Hallo Hias,
.
.
.
dl7ukk
.
Das ist eine sehr informative Aufstellung, Dankegithub.com/atari800/atari800/bl ... C/cart.txt
.
Hier geht es um das pol. System Blizzard. Mehr als das es Blizzard gibt, weiß ich auch nicht darüber. Nach dem, was die Schaltung vermuten läßt, arbeitetet es nicht mit dem PIA-Proceed Interrupt.web archive.org/web/201006120251 ... 3/A18.html
.
Auf diese Frage, kann ich keine wirkliche Antwort geben. Nach dem Foto (weiter oben) sieht es nach rus. 2K oder 4K EProms aus .. vergoldete Pins. Seit ich diese Eproms/ Modul das letzte Mal in der Hand hatte (2018/19) hat sich die Erde weiterbewegt. Ich muß nun warten, bis sie wieder vorbei kommen. Mit anderen Worten, keine Ahnung wo die Teile liegen.Was für ein EPROM ist das denn genau in dem Modul?
dl7ukk
-
- Beiträge: 141
- Registriert: 17.08.2021 11:03
- Wohnort: Salzburg, Austria
- Has thanked: 12 times
- Been thanked: 57 times
- Kontaktdaten:
Re: Stackpointer auslesen !
Mir ging's bei dem Blizzard-Modul eher um die Schaltung im Modul - einfaches Flip-Flop mit NAND plus das EPROM, von der Software da drin oder gar dem Kassetten-Turbo hab ich keine Ahnung :-)
Würde stark vermuten, dass das Schleife-Modul sehr ähnlich aufgebaut ist/war - Phoenix ist im Prinzip das gleiche nur mit 8k ROM und ich nehme an etliche andere abschaltbare (Selbstbau-)Module verwenden die gleiche Schaltung (oder zumindest das gleiche Prinzip).
so long,
Hias
Würde stark vermuten, dass das Schleife-Modul sehr ähnlich aufgebaut ist/war - Phoenix ist im Prinzip das gleiche nur mit 8k ROM und ich nehme an etliche andere abschaltbare (Selbstbau-)Module verwenden die gleiche Schaltung (oder zumindest das gleiche Prinzip).
so long,
Hias
-
- Beiträge: 398
- Registriert: 17.08.2021 17:22
- Has thanked: 86 times
- Been thanked: 153 times
- Kontaktdaten:
Re: Stackpointer auslesen !
Hallo Andreas,
vielleicht kann ich weiterhelfen und schön das Bild des Moduls zu sehen.
Wenn mich nicht alles täuscht, ist die Funktionsweise wie folgt:
Modul einstecken, den Schalter oben gedrückt halten und den Atari einschalten.
Kommt das Bild dann den Schalter loslassen, Option auswählen und mit Start das Programm aktivieren.
Ohne das Programm genauer zu Analysieren:
Die Software startet im Rom und wird ins Ram kopiert, das Menü wird angezeigt.
Beim Loslassen der Taste müsste der Atari in der Endlosschleife im Rom landen, jedoch wurde zuvor der Vertical Blank deaktiviert.
Die Option, Select und Start Tasten sind immer ereichbar und können abgefragt werden. Mit Start wird ein Warmstart ausgelöst und die
beschleuniger Software kann ihren Dienst antreten.
So ein Modul habe ich auch in meiner Sammlung, aber ohne die Schleife.
Zur Zeit mache ich Urlaub und kann nicht mehr helfen, ich hoffe es reicht.
Schöne Grüße von der kalten Insel Sylt,
Bernd
vielleicht kann ich weiterhelfen und schön das Bild des Moduls zu sehen.
Wenn mich nicht alles täuscht, ist die Funktionsweise wie folgt:
Modul einstecken, den Schalter oben gedrückt halten und den Atari einschalten.
Kommt das Bild dann den Schalter loslassen, Option auswählen und mit Start das Programm aktivieren.
Ohne das Programm genauer zu Analysieren:
Die Software startet im Rom und wird ins Ram kopiert, das Menü wird angezeigt.
Beim Loslassen der Taste müsste der Atari in der Endlosschleife im Rom landen, jedoch wurde zuvor der Vertical Blank deaktiviert.
Die Option, Select und Start Tasten sind immer ereichbar und können abgefragt werden. Mit Start wird ein Warmstart ausgelöst und die
beschleuniger Software kann ihren Dienst antreten.
So ein Modul habe ich auch in meiner Sammlung, aber ohne die Schleife.
Zur Zeit mache ich Urlaub und kann nicht mehr helfen, ich hoffe es reicht.
Schöne Grüße von der kalten Insel Sylt,
Bernd
- dl7ukk
- Beiträge: 538
- Registriert: 25.08.2021 23:03
- Has thanked: 73 times
- Been thanked: 103 times
- Kontaktdaten:
Re: Stackpointer auslesen !
Hallo Bernd,
ich war das erste und letzte Mal ca 1995 auf Sylt, der Insel der Reichen... 3 Wochen Reha in Westerland.
Wünsche Euch einen schönen Urlaub und den Rest machen wir auf der Fujiama.
Bis dahin viele Grüße
dl7ukk
ich war das erste und letzte Mal ca 1995 auf Sylt, der Insel der Reichen... 3 Wochen Reha in Westerland.
Wünsche Euch einen schönen Urlaub und den Rest machen wir auf der Fujiama.
Bis dahin viele Grüße
dl7ukk
- dl7ukk
- Beiträge: 538
- Registriert: 25.08.2021 23:03
- Has thanked: 73 times
- Been thanked: 103 times
- Kontaktdaten:
Re: Stackpointer auslesen !
Hallo Hias,
beim Aufräumen und Löschen der vielen Fehlversuche ist mir aufgefallen ....
Was aber wohl stimmt ist die Herkunft. Östlich von Berlin
Die Schaltung hatte ich gesehen, der FF muß doch für den Reset des Modul sein.
Ich sollte mehr schlafen!
dl7ukk
beim Aufräumen und Löschen der vielen Fehlversuche ist mir aufgefallen ....
Es ist natürlich ein 8K Eprom! Der Dump hat ja auch 8K ...Was für ein EPROM ist das denn genau in dem Modul?
Was aber wohl stimmt ist die Herkunft. Östlich von Berlin
Die Schaltung hatte ich gesehen, der FF muß doch für den Reset des Modul sein.
Ich sollte mehr schlafen!
dl7ukk
-
- Beiträge: 602
- Registriert: 04.11.2021 15:52
- Has thanked: 53 times
- Been thanked: 122 times
- Kontaktdaten:
Stackpointer auslesen !
Hi,
irgendwie ist mir da ein Tippfehler unterlaufen. Natürlich muß da die RUN-Adresse rein, müßte also wie von Dir gezeigt stimmen.
- dl7ukk
- Beiträge: 538
- Registriert: 25.08.2021 23:03
- Has thanked: 73 times
- Been thanked: 103 times
- Kontaktdaten:
Re: Stackpointer auslesen !
Hallo Erhard,
Dich läßt das Thema auch nicht los. Ich muß zu meiner Schande gestehen, daß ich Deine Angaben zu den letzten Bytes im Modul nicht gegengecheckt habe. ABER ich habe mir die paar Bytes zu den Modulen aus dem Profibuch kopiert und vergleiche meine Dateien/ Dump's damit.
Etwas völlig Anderes ist mir aber bei meinen "Spielereien" aufgefallen. Zum Testen der ROM-Datei habe ich diese mit einem COM-Header versehen. Na-Ja genau genommen war es Hias' Freezer.
Nun steht in der Datei vor den Daten FF FF LadeAdr - EndAdr, konkret
Diese Datei wird dann mit MyPicoDos nach $B800 geladen, wo auch ihr Platz (als Modul) wäre.
Was mich nun wundert, warum dieses Programm nach dem Laden ohne weiteres Zutun gestartet wird. Es gibt keine RUN Adresse. Gut, die RUN wäre $B800, aber einem Rechner muß man Alles sagen und das auch noch richtig! Ich habe bisher nirgends gefunden, daß Programme ohne RUN Adresse auch gestartet werden. Lieg es am "Modul-Bereich" ?
Ein völlig unwichtiges Detail, aber es ist Sommer ...
dl7ukk
Dich läßt das Thema auch nicht los. Ich muß zu meiner Schande gestehen, daß ich Deine Angaben zu den letzten Bytes im Modul nicht gegengecheckt habe. ABER ich habe mir die paar Bytes zu den Modulen aus dem Profibuch kopiert und vergleiche meine Dateien/ Dump's damit.
Etwas völlig Anderes ist mir aber bei meinen "Spielereien" aufgefallen. Zum Testen der ROM-Datei habe ich diese mit einem COM-Header versehen. Na-Ja genau genommen war es Hias' Freezer.
Nun steht in der Datei vor den Daten FF FF LadeAdr - EndAdr, konkret
Code: Alles auswählen
FF FF 00 B8 FF FB
Was mich nun wundert, warum dieses Programm nach dem Laden ohne weiteres Zutun gestartet wird. Es gibt keine RUN Adresse. Gut, die RUN wäre $B800, aber einem Rechner muß man Alles sagen und das auch noch richtig! Ich habe bisher nirgends gefunden, daß Programme ohne RUN Adresse auch gestartet werden. Lieg es am "Modul-Bereich" ?
Ein völlig unwichtiges Detail, aber es ist Sommer ...
dl7ukk
- Olix
- Beiträge: 1093
- Registriert: 17.08.2021 07:06
- Has thanked: 132 times
- Been thanked: 475 times
- Kontaktdaten:
Re: Stackpointer auslesen !
Das kann auch am Pico DOS liegen Ich habe helesen, dass es durchaus DOS Versionen gibt, welche bei fehlender Init oder Run Adresse, das Programm einfach an der Ladeadresse starten.
- pps
- Beiträge: 566
- Registriert: 18.06.2021 23:05
- Has thanked: 122 times
- Been thanked: 225 times
- Kontaktdaten:
Re: Stackpointer auslesen !
Manche DOS starten einfach selbst, wenn keine Startadresse da ist, ab der Ladeadresse.
-
- Beiträge: 141
- Registriert: 17.08.2021 11:03
- Wohnort: Salzburg, Austria
- Has thanked: 12 times
- Been thanked: 57 times
- Kontaktdaten:
Re: Stackpointer auslesen !
Ja, so ist es. Beim allerersten Block macht MyPicoDos folgendes (und viele andere DOSen auch bzw machen was ähnliches/äquivalentes):
BTW: In Deinem COM Header hat sich ein kleiner Bug eingeschlichen, das FB zum Schluss sollte wohl BF sein
Ich schieb's mal auf die Hitze, hier ist's auch heftig und ich werd mich glaubich gleich wieder vom heissen Garten in die kühle Wohnung verkriechen.
so long,
Hias
Code: Alles auswählen
JSR GETBYT
STA ADR
STA 736
JSR GETBYT
STA ADR+1
STA 737
Code: Alles auswählen
FF FF 00 B8 FF FB
Ich schieb's mal auf die Hitze, hier ist's auch heftig und ich werd mich glaubich gleich wieder vom heissen Garten in die kühle Wohnung verkriechen.
so long,
Hias
- dl7ukk
- Beiträge: 538
- Registriert: 25.08.2021 23:03
- Has thanked: 73 times
- Been thanked: 103 times
- Kontaktdaten:
Re: Stackpointer auslesen !
Hi,
Vielen Dank für die schnellen Antworten. Wieder was dazu gelernt.
.
.
Erwischt; Nein es liegt nicht am Wetter. Es ist der Kerl, der einfach nicht genau hinschaut, leider.
dl7ukk
Vielen Dank für die schnellen Antworten. Wieder was dazu gelernt.
.
.
.HiassofT hat geschrieben: ↑20.07.2022 17:50BTW: In Deinem COM Header hat sich ein kleiner Bug eingeschlichen, das FB zum Schluss sollte wohl BF seinCode: Alles auswählen
FF FF 00 B8 FF FB
Erwischt; Nein es liegt nicht am Wetter. Es ist der Kerl, der einfach nicht genau hinschaut, leider.
dl7ukk
-
- Beiträge: 602
- Registriert: 04.11.2021 15:52
- Has thanked: 53 times
- Been thanked: 122 times
- Kontaktdaten:
Stackpointer auslesen !
Zum Anschauen und Bearbeiten von Lade-, Init- und Run-Adressen bieten sich
- Superpacker von BeWeSoft für BeWe-/SpartaDOS
- Ataricom aus der Toolsuite von Hias
- Superpacker von BeWeSoft für BeWe-/SpartaDOS
- Ataricom aus der Toolsuite von Hias
Wer ist online?
Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast