ZeroPage Addresse gesucht

Moderator: Rockford

Antworten
Benutzeravatar
Olix
Beiträge: 990
Registriert: 17.08.2021 07:06
Has thanked: 117 times
Been thanked: 407 times
Kontaktdaten:

ZeroPage Addresse gesucht

Beitrag von Olix »

Hallo,

ich fange gerade an mich in die Programmierung des Ataris in Maschinensprache einzuwursteln.
Für den Anfang möchte ich eine kleine Hilfsroutine schreiben, die ich von einem Turbo Basic Programm aus aufrufe.

Ich möchte in dem kleinen Programm die Indirekt-Indizierte Adressierung nutzen. Dazu benötige ich aber ein Adresspaar innerhalb der Zeropage.

Kann mir jemand ein Zeropage-Adressenpaar nennen, das ich von Turbo-Basic aus nutzen kann, ohne dass irgendwelche bösen Dinge passieren, weil ich aus versehen eine wichtige Systemadresse überschrieben habe.

Oliver

Benutzeravatar
Dr. Irata
Beiträge: 937
Registriert: 24.08.2021 14:40
Has thanked: 110 times
Been thanked: 268 times
Kontaktdaten:

Re: ZeroPage Addresse gesucht

Beitrag von Dr. Irata »

Hallo Oli,
nimm 203-209
Gruß
Peter

Benutzeravatar
Dr. Irata
Beiträge: 937
Registriert: 24.08.2021 14:40
Has thanked: 110 times
Been thanked: 268 times
Kontaktdaten:

Re: ZeroPage Addresse gesucht

Beitrag von Dr. Irata »

… du brauchst das Atari Profibuch

Benutzeravatar
Olix
Beiträge: 990
Registriert: 17.08.2021 07:06
Has thanked: 117 times
Been thanked: 407 times
Kontaktdaten:

Re: ZeroPage Addresse gesucht

Beitrag von Olix »

Atari Prifibuch habe ich. Original und auch in der tollen ABBUC Neuauflage von 2011. Ich ging nur davon aus, dass die Speichermap für das OS und das Originalbasic gilt und war mir nicht sicher ob vielleich das Turbobasic noch andere Zeropage Adressen belegt hat, die man nicht nutzen sollte.

Benutzeravatar
Dr. Irata
Beiträge: 937
Registriert: 24.08.2021 14:40
Has thanked: 110 times
Been thanked: 268 times
Kontaktdaten:

Re: ZeroPage Addresse gesucht

Beitrag von Dr. Irata »

Ah ok...
Da ich rein in Assembler programmiere und das Basic abgeschaltet ist, habe ich ganz viele Adressen in ZeroPage zur Verfügung ;-)

Benutzeravatar
pps
Beiträge: 530
Registriert: 18.06.2021 23:05
Has thanked: 115 times
Been thanked: 206 times
Kontaktdaten:

Re: ZeroPage Addresse gesucht

Beitrag von pps »

Turbobasic ist so programmiert, dass es möglichst kompatibel zum Originalen Atari bleibt. Darum sind auch nach Möglichkeit keine zusätzlichen Adressen blockiert worden.
PP´s of STARSOFTBerlin__________github|meine Webseite|Demozoo

Benutzeravatar
LarsImNetz
Beiträge: 152
Registriert: 24.08.2021 18:27
Has thanked: 109 times
Been thanked: 81 times
Kontaktdaten:

Re: ZeroPage Addresse gesucht

Beitrag von LarsImNetz »

Moin,

um es noch etwas besser zu machen, willst Du die Routine per A=USR(xyz, a, b) von Basic aus verwenden? Dann könntest Du auch die Adressen ab 212 bis 255 verwenden, diese sind nämlich nur für die internen Floating-Point-Routinen reserviert. Das einzige ist, das deine Routine am Anfang die Adressen selbst immer neu setzen muss. Beim Verlassen Deiner Routine darfst Du beliebigen "Schrott" drin stehen lassen. Ok, in der Variablen A landet das, was du in 212, 213 hinterlässt. Die Parameter hier "a,b" werden in Basic auf dem Stack als 16Bit Zahl abgelegt. Da kommst Du per PLA ran. Das erste Byte solltest Du bei Assembler-Routinen die von Basic gestartet werden immer per PLA abholen, da steht drin, wie viele Bytes noch auf dem Stack von Basic abgelegt wurden. Falls Deine Routine kein PLA macht, gibt es einen Fehler im Basic, aber keinen Absturz. Das liegt daran, das Basic sich per TSX den Stack-Pointer merkt und diesen am Ende Deiner Routine kontrolliert und falls er nicht stimmt, dann meckert.

Die Adressen 203-209 sind wirklich frei und werden von Basic nicht verwendet, hilfreich z.B. für VBI-Routinen, die in Basic weiter laufen sollen.

JM2C
Lars

Erhard
Beiträge: 558
Registriert: 04.11.2021 15:52
Has thanked: 52 times
Been thanked: 111 times
Kontaktdaten:

ZeroPage Addresse gesucht

Beitrag von Erhard »

Beim Benutzten von USR mußt Du aufpassen, daß Du den Prozessorstapel aufräumst.
Alle per USR übergebenen Werte werden auf den Stapel gelegt nebst einem Wert für die Anzahl der Werte, die auf den Stapel gelegt wurden.
Selbst wenn keine Werte übergeben werden mußt Du also mindestens ein PLA ausführen.

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast