You are not logged in.

Endurion

Sir Bugalot

  • "Endurion" started this thread

Posts: 2,276

Date of registration: Aug 17th 2005

Location: weitweg

  • Send private message

member since 90 month member since 90 month member since 90 month member since 90 month member since 90 month

1

Sunday, April 8th 2012, 8:48am

Nachladen mit Kernal-Routinen, Reset?

Mal eine Frage an die Erfahreneren hier:

Ich habe ein Programm, das in mehrere Teile aufgeteilt ist. Alle Teile starten im Standard-Bereich $0801. Zum Nachladen von z.Bsp. Teil 2 von Teil 1 aus habe ich mir eine kleine Lade-Routine geschrieben, die vor dem Nachladen in $02a7 und folgende geschrieben wird.

Die wird aufgerufen, und im Erfolgsfall wird dann das nachgeladene Programm bei $080a angesprungen.

Da haut es mich aber immer raus (lande im Basic). Ich habe vorher den Stack-Pointer auf $f6 gesetzt (scheint nach einem frischen Start den Wert zu haben). Das Programm selbst ist geladen, lässt sich Listen (nur eine Sys-Zeile), und mit RUN startet das dann auch sauber. Nur eben nicht vom Code aus.

Worauf muß man denn nach dem Nachladen sonst noch achten? $01 ist auf $37 gestellt, die VIC-Bank ist verdreht, aber das sollte doch keinen Einfluß haben.

hoogo

Eimergesicht mit Wurst

  • "hoogo" is male

Posts: 1,347

Date of registration: Jan 22nd 2005

Location: Mülheim/Ruhr

  • Send private message

member since 90 month member since 90 month member since 90 month member since 90 month member since 90 month

2

Sunday, April 8th 2012, 9:37am

080a? Nicht 080b oder 080d?
Vollmond war gestern!

Endurion

Sir Bugalot

  • "Endurion" started this thread

Posts: 2,276

Date of registration: Aug 17th 2005

Location: weitweg

  • Send private message

member since 90 month member since 90 month member since 90 month member since 90 month member since 90 month

3

Sunday, April 8th 2012, 1:04pm

Nee, ist wirklich 080a. Hab beim sonst üblichen Basic-Start ein paar Nullen zuviel reingepackt, aber das dürfte doch nichts ausmachen, wenn man drüberspringt.

Aber außer der I/O-Config und eventuellen Interrupt-Routinen gibt es doch sonst nicht viel zu beachten? Den häßlichen-Stack-Hack mache ich nur, da ich beim Aufruf der Laderoutine in ein paar Unterroutinen bin.

Henning

Trainee

Posts: 74

Date of registration: Sep 8th 2011

  • Send private message

member since 18 member since

4

Sunday, April 8th 2012, 1:23pm

Das Problem hatte ich auch schonmal, nach laden eines ml programs mit basic starter. Ich habe es dann so gemacht:

Source code

1
2
3
run:	jsr $a659       // ende von BASIC NEW (setzt "nächste anweisung" auf basic start), und dann folgt CLR, 
                            // setzt den Stackpointer zurück, sodass der stack nur noch die letzte rücksprung-adresse enthält
        jmp $a7ae     // Basic Interpeterschleife, nach vorherigem Aufruf äquivalent zu RUN


Vielleicht reichte es auch, wenn du den Stack wie in der CLR methode zurücksetzt (da wird SP auf $fa gesetzt) und dann nach 080a springst (?)
echo '#!/bin/rm' > vanity && chmod +x vanity && ./vanity

hoogo

Eimergesicht mit Wurst

  • "hoogo" is male

Posts: 1,347

Date of registration: Jan 22nd 2005

Location: Mülheim/Ruhr

  • Send private message

member since 90 month member since 90 month member since 90 month member since 90 month member since 90 month

5

Sunday, April 8th 2012, 5:51pm

Nee, ist wirklich 080a. Hab beim sonst üblichen Basic-Start ein paar Nullen zuviel reingepackt, aber das dürfte doch nichts ausmachen, wenn man drüberspringt.
Aber als Basic geladen lässt es sich listen? Da kann ich mir nun gar nichts drunter vorstellen...
Dump mal von beiden Versionen (Basic geladen und selber geladen) $0800-$0810 und vergleiche.
Vollmond war gestern!

Endurion

Sir Bugalot

  • "Endurion" started this thread

Posts: 2,276

Date of registration: Aug 17th 2005

Location: weitweg

  • Send private message

member since 90 month member since 90 month member since 90 month member since 90 month member since 90 month

6

Sunday, April 8th 2012, 6:31pm

Sieht beides gleich aus, da muß ich irgendwo anders noch einen Bock geschossen haben.

Die Laderoutine liegt im Bereich $02a7 bis $02e0. Dem Wiki nach ist da nichts Wichtiges. Das dürfte doch keine Probleme verursachen.



Nachtrag, mit $080d hattest du natürlich recht. Ich springe ja den Exomizer-Start an, nicht meinen eigenen. Jetzt zerreißt es ihn irgendwo bei $A5xx, das kriege ich auch noch raus. Danke schon mal!

Endurion

Sir Bugalot

  • "Endurion" started this thread

Posts: 2,276

Date of registration: Aug 17th 2005

Location: weitweg

  • Send private message

member since 90 month member since 90 month member since 90 month member since 90 month member since 90 month

7

Sunday, April 8th 2012, 7:04pm

Ah! Habs gefunden!

Offenbar war $01 nicht so gesetzt, wie vom Entpacker erwartet. Jetzt klappt alles, vielen Dank an alle Beteiligten!

Similar threads