Stackpointer auslesen !

Moderator: Rockford

Antworten
Benutzeravatar
dl7ukk
Beiträge: 538
Registriert: 25.08.2021 23:03
Has thanked: 73 times
Been thanked: 103 times
Kontaktdaten:

Stackpointer auslesen !

Beitrag von dl7ukk »

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
Dateianhänge
TURBSTA2.png
TURBSTA2.png (1.18 KiB) 3704 mal betrachtet

Benutzeravatar
Olix
Beiträge: 1097
Registriert: 17.08.2021 07:06
Has thanked: 132 times
Been thanked: 477 times
Kontaktdaten:

Re: Stackpointer auslesen !

Beitrag von Olix »

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.

Benutzeravatar
dl7ukk
Beiträge: 538
Registriert: 25.08.2021 23:03
Has thanked: 73 times
Been thanked: 103 times
Kontaktdaten:

Re: Stackpointer auslesen !

Beitrag von dl7ukk »

Danke,

also Teil des StatusRegisters. :D

Der Tag ist gerettet.


dl7ukk

Benutzeravatar
Dr. Irata
Beiträge: 946
Registriert: 24.08.2021 14:40
Has thanked: 113 times
Been thanked: 275 times
Kontaktdaten:

Re: Stackpointer auslesen !

Beitrag von Dr. Irata »

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

Benutzeravatar
dl7ukk
Beiträge: 538
Registriert: 25.08.2021 23:03
Has thanked: 73 times
Been thanked: 103 times
Kontaktdaten:

Re: Stackpointer auslesen !

Beitrag von dl7ukk »

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

Benutzeravatar
Dr. Irata
Beiträge: 946
Registriert: 24.08.2021 14:40
Has thanked: 113 times
Been thanked: 275 times
Kontaktdaten:

Re: Stackpointer auslesen !

Beitrag von Dr. Irata »

... 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

Online
HiassofT
Beiträge: 141
Registriert: 17.08.2021 11:03
Wohnort: Salzburg, Austria
Has thanked: 12 times
Been thanked: 57 times
Kontaktdaten:

Re: Stackpointer auslesen !

Beitrag von HiassofT »

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:

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
Beim Anhalten sieht man gleich den Stack Pointer auf $FC und dass der Atari im Unterprogramm bei $100C in der Schleife hängt:

Code: Alles auswählen

0   1 A=42 X=FF Y=FF S=FC P=--*----- PC=100C: 4C 0C 10  JMP $100C
Der Stack sieht wie folgt aus:

Code: Alles auswählen

01F0: 00 00 85 C1 00 85 C1 FF FF 42 20 0C 10 42 07 10
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

Benutzeravatar
dl7ukk
Beiträge: 538
Registriert: 25.08.2021 23:03
Has thanked: 73 times
Been thanked: 103 times
Kontaktdaten:

Re: Stackpointer auslesen !

Beitrag von dl7ukk »

Hallo,

ich hoffe es verstanden zu haben. Mal sehen ob ich es bis Morgen (sprich später) auch noch behalten habe ....
inkl $1FC ($FC=Stackpointer) kannst Du ignorieren,
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.
die Rücksprungadresse minus 1 - $1007
Das steht auch im Profibuch, war mir aber nicht so klar. Dabei ist es nur eine Frage der Betrachtung. Woher vs Wohin.
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
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

Online
HiassofT
Beiträge: 141
Registriert: 17.08.2021 11:03
Wohnort: Salzburg, Austria
Has thanked: 12 times
Been thanked: 57 times
Kontaktdaten:

Re: Stackpointer auslesen !

Beitrag von HiassofT »

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

Benutzeravatar
dl7ukk
Beiträge: 538
Registriert: 25.08.2021 23:03
Has thanked: 73 times
Been thanked: 103 times
Kontaktdaten:

Re: Stackpointer auslesen !

Beitrag von dl7ukk »

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

Online
HiassofT
Beiträge: 141
Registriert: 17.08.2021 11:03
Wohnort: Salzburg, Austria
Has thanked: 12 times
Been thanked: 57 times
Kontaktdaten:

Re: Stackpointer auslesen !

Beitrag von HiassofT »

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

Benutzeravatar
dl7ukk
Beiträge: 538
Registriert: 25.08.2021 23:03
Has thanked: 73 times
Been thanked: 103 times
Kontaktdaten:

Re: Stackpointer auslesen !

Beitrag von dl7ukk »

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!!

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
so in etwa


WE leider vorbei
schönen Abend

dl7ukk

Erhard
Beiträge: 603
Registriert: 04.11.2021 15:52
Has thanked: 53 times
Been thanked: 122 times
Kontaktdaten:

Stackpointer auslesen !

Beitrag von Erhard »

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.)

Online
HiassofT
Beiträge: 141
Registriert: 17.08.2021 11:03
Wohnort: Salzburg, Austria
Has thanked: 12 times
Been thanked: 57 times
Kontaktdaten:

Re: Stackpointer auslesen !

Beitrag von HiassofT »

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

Benutzeravatar
dl7ukk
Beiträge: 538
Registriert: 25.08.2021 23:03
Has thanked: 73 times
Been thanked: 103 times
Kontaktdaten:

Re: Stackpointer auslesen !

Beitrag von dl7ukk »

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 ...
Dateianhänge
SCHLEI01.ROM.zip
(1.73 KiB) 41-mal heruntergeladen

Online
HiassofT
Beiträge: 141
Registriert: 17.08.2021 11:03
Wohnort: Salzburg, Austria
Has thanked: 12 times
Been thanked: 57 times
Kontaktdaten:

Re: Stackpointer auslesen !

Beitrag von HiassofT »

Dieser D500 Zugriff sieht so aus als würde er das Modul abschalten:

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
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

Benutzeravatar
dl7ukk
Beiträge: 538
Registriert: 25.08.2021 23:03
Has thanked: 73 times
Been thanked: 103 times
Kontaktdaten:

Re: Stackpointer auslesen !

Beitrag von dl7ukk »

Hallo Hias,

"LDA $D500" in "STA $D591"
Ja, es bringt was, ich habe es heute Nacht noch probiert. "Wenigsten" reagiert die Auswahl nun und löst einen Kaltstart aus...

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 :D

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
Dateianhänge
photo_2022-07-18_09-06-36.jpg

Benutzeravatar
dl7ukk
Beiträge: 538
Registriert: 25.08.2021 23:03
Has thanked: 73 times
Been thanked: 103 times
Kontaktdaten:

Re: Stackpointer auslesen !

Beitrag von dl7ukk »

Hi,

>> Verstand vs Sucht << :mrgreen:

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

Online
HiassofT
Beiträge: 141
Registriert: 17.08.2021 11:03
Wohnort: Salzburg, Austria
Has thanked: 12 times
Been thanked: 57 times
Kontaktdaten:

Re: Stackpointer auslesen !

Beitrag von HiassofT »

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

Benutzeravatar
dl7ukk
Beiträge: 538
Registriert: 25.08.2021 23:03
Has thanked: 73 times
Been thanked: 103 times
Kontaktdaten:

Re: Stackpointer auslesen !

Beitrag von dl7ukk »

Hallo Hias,
.
github.com/atari800/atari800/bl ... C/cart.txt
Das ist eine sehr informative Aufstellung, Danke
.
web archive.org/web/201006120251 ... 3/A18.html
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.
.
Was für ein EPROM ist das denn genau in dem Modul?
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.


dl7ukk

Online
HiassofT
Beiträge: 141
Registriert: 17.08.2021 11:03
Wohnort: Salzburg, Austria
Has thanked: 12 times
Been thanked: 57 times
Kontaktdaten:

Re: Stackpointer auslesen !

Beitrag von HiassofT »

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

Bernd
Beiträge: 398
Registriert: 17.08.2021 17:22
Has thanked: 86 times
Been thanked: 153 times
Kontaktdaten:

Re: Stackpointer auslesen !

Beitrag von Bernd »

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

Benutzeravatar
dl7ukk
Beiträge: 538
Registriert: 25.08.2021 23:03
Has thanked: 73 times
Been thanked: 103 times
Kontaktdaten:

Re: Stackpointer auslesen !

Beitrag von dl7ukk »

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

Benutzeravatar
dl7ukk
Beiträge: 538
Registriert: 25.08.2021 23:03
Has thanked: 73 times
Been thanked: 103 times
Kontaktdaten:

Re: Stackpointer auslesen !

Beitrag von dl7ukk »

Hallo Hias,

beim Aufräumen und Löschen der vielen Fehlversuche ist mir aufgefallen ....
Was für ein EPROM ist das denn genau in dem Modul?
Es ist natürlich ein 8K Eprom! Der Dump hat ja auch 8K ...
Was aber wohl stimmt ist die Herkunft. Östlich von Berlin :D

Die Schaltung hatte ich gesehen, der FF muß doch für den Reset des Modul sein.

Ich sollte mehr schlafen!


dl7ukk

Erhard
Beiträge: 603
Registriert: 04.11.2021 15:52
Has thanked: 53 times
Been thanked: 122 times
Kontaktdaten:

Stackpointer auslesen !

Beitrag von Erhard »

Hi,

Erhard hat geschrieben:
17.07.2022 21:35
BFFA: 00 80
irgendwie ist mir da ein Tippfehler unterlaufen. Natürlich muß da die RUN-Adresse rein, müßte also wie von Dir gezeigt stimmen.

dl7ukk hat geschrieben:
17.07.2022 23:05
BFF0: E8 BD 30 00 48 20 6D 08 60 60 00 B8 00 04 F8 BF

Benutzeravatar
dl7ukk
Beiträge: 538
Registriert: 25.08.2021 23:03
Has thanked: 73 times
Been thanked: 103 times
Kontaktdaten:

Re: Stackpointer auslesen !

Beitrag von dl7ukk »

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

Code: Alles auswählen

FF FF 00 B8 FF FB
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 ... :mrgreen:


dl7ukk

Benutzeravatar
Olix
Beiträge: 1097
Registriert: 17.08.2021 07:06
Has thanked: 132 times
Been thanked: 477 times
Kontaktdaten:

Re: Stackpointer auslesen !

Beitrag von Olix »

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.

Benutzeravatar
pps
Beiträge: 566
Registriert: 18.06.2021 23:05
Has thanked: 122 times
Been thanked: 225 times
Kontaktdaten:

Re: Stackpointer auslesen !

Beitrag von pps »

Manche DOS starten einfach selbst, wenn keine Startadresse da ist, ab der Ladeadresse.
PP´s of STARSOFTBerlin__________github|meine Webseite|Demozoo

Online
HiassofT
Beiträge: 141
Registriert: 17.08.2021 11:03
Wohnort: Salzburg, Austria
Has thanked: 12 times
Been thanked: 57 times
Kontaktdaten:

Re: Stackpointer auslesen !

Beitrag von HiassofT »

Ja, so ist es. Beim allerersten Block macht MyPicoDos folgendes (und viele andere DOSen auch bzw machen was ähnliches/äquivalentes):

Code: Alles auswählen

        JSR GETBYT
        STA ADR
        STA 736
        JSR GETBYT
        STA ADR+1
        STA 737
BTW: In Deinem COM Header hat sich ein kleiner Bug eingeschlichen, das FB zum Schluss sollte wohl BF sein

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

Benutzeravatar
dl7ukk
Beiträge: 538
Registriert: 25.08.2021 23:03
Has thanked: 73 times
Been thanked: 103 times
Kontaktdaten:

Re: Stackpointer auslesen !

Beitrag von dl7ukk »

Hi,

Vielen Dank für die schnellen Antworten. Wieder was dazu gelernt. :D
.
.
HiassofT hat geschrieben:
20.07.2022 17:50
BTW: In Deinem COM Header hat sich ein kleiner Bug eingeschlichen, das FB zum Schluss sollte wohl BF sein

Code: 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. :oops:


dl7ukk

Erhard
Beiträge: 603
Registriert: 04.11.2021 15:52
Has thanked: 53 times
Been thanked: 122 times
Kontaktdaten:

Stackpointer auslesen !

Beitrag von Erhard »

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

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast