Robotrontechnik-Forum

Registrieren || Einloggen || Hilfe/FAQ || Suche || Mitglieder || Home || Statistik || Kalender || Admins Willkommen Gast! RSS

Robotrontechnik-Forum » Technische Diskussionen » Z80 return from empty space » Themenansicht

Autor Thread - Seiten: -1-
000
17.12.2022, 17:10 Uhr
kaiOr

Avatar von kaiOr

Hallo,

ich habe mal eine seltsame Frage.
Kann ein U880-Programm alle Spuren verwischen und gleichzeitig an eine neue Wunschadresse springen?
Hier und da braucht man ja eine Hilfsroutine (Segmente jonglieren, Entpacker...). Davon bleiben dann immer irgendwelche Fragmente im RAM (oder gar Bildspeicher) zurück oder man müsste an neuer Stelle nacharbeiten. Die neue Stelle gehört aber vielleicht garnicht zum eigenen Programm/Wirkbereich.

Negativ-Beispiel:

Quellcode:
BGN
.
.
.
   LD HL, SPRUNGADR
   PUSH HL
   LD HL, BGN
   LD DE, BGN+1
   LD BC, 0FFFFh
   LD (HL),0
   LDIR
   RET


LDIR (EDh B0h) wird nach jedem gelöschten Byte erneut aufgerufen. Irgendwann wird auch EDh zu 00h (NOP), B0h (OR A,B) wird ausgeführt und bleibt zusammen mit C9h (RET) als Karteileiche über.

Halb-Positiv-Beispiel:

Quellcode:
BGN
    .
    .
    .
    DI
    LD SP, FIN+1
    LD HL, BGN
    LD DE, BGN+1
    LD BC, MDL-BGN
    LD (HL),0
MDL    LDIR
FIN    PUSH BC


RAM blitzeblank, leider kein gezielter Absprung, es muss sinnvoller Code folgen.
Spanne ich zusätzlich einen Interruptgeber vor bleibt FBh (EI) als Karteileiche über.

Weitere Ideen?

Gruß,
Kai

Dieser Beitrag wurde am 17.12.2022 um 17:17 Uhr von kaiOr editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
001
17.12.2022, 18:04 Uhr
Ordoban




Zitat:
kaiOr schrieb
Weitere Ideen?


Eventuell das LDIR auf den Stack pushen und dort ausführen. Am Ende den Stackpointer bereinigen. Dann ist zwar noch Code im Stack-Speicher, der sollte aber relativ zügig überschrieben werden.
--
Gruß
Stefan
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
002
17.12.2022, 18:21 Uhr
Rüdiger
Administrator
Avatar von Rüdiger


Zitat:
kaiOr schrieb
Kann ein U880-Programm alle Spuren verwischen und gleichzeitig an eine neue Wunschadresse springen?



Wenn es ein Speichertestprogramm ist, könnte es nach dem "Umzug" die alte Stelle überbügelt haben.
--
Kernel panic: Out of swap space.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
003
17.12.2022, 18:40 Uhr
kaiOr

Avatar von kaiOr

Könnte, ist es aber nicht.


Zitat:
Ordoban schrieb
Eventuell das LDIR auf den Stack pushen und dort ausführen.

Danke, schöne Idee, einfach den Stackbereich mit Maschinencode füllen.

MfG
Kai
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
004
18.12.2022, 10:42 Uhr
maleuma



Irgend etwas wird immer übrig bleiben, entweder im RAM oder auf dem Stack.
Ich gehe einmal davon aus, dass die "Wunschadresse" für den Absprung in einen ROM-Bereich geht. Denn andere macht es ja keinen Sinn
Meine einzige Idee wäre dann, im ROM das Löschen des übrig gebliebenen Codes vorzunehmen - falls das in Frage kommt.
Idealerweise ist im ROM die Bytefolge ED B0 C9 (LDIR, RET) vorhanden, dann könntest Du es auch so machen:

Quellcode:
   LD HL, SPRUNGADR
   PUSH HL
   LD HL, BGN
   LD DE, BGN+1
   LD BC, 0FFFFh
   LD (HL),0
   JP ROM


--
Mario.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
005
19.12.2022, 16:17 Uhr
kaiOr

Avatar von kaiOr

Danke Mario, das wäre auch ne Idee, nur etwas abhängig vom ROM und dessen Version.

Noch kurz die Stack-Variante:

Quellcode:
BGN
.
.
.
    DI
    LD HL, XXXXh    ;ENDSPRG
    PUSH HL
    LD HL, 0C9FBh    ;EI&RET
    PUSH HL
    LD HL, 0B0EDh    ;LDIR
    PUSH HL
    LD (ZW+1), SP    ;ZWSPRUNG
    LD HL, 4    ;SP KORREKTUR
    ADD HL, SP
    LD SP, HL
    LD HL, BGN
    LD DE, BGN+1
    LD BC, ZW+2-BGN
    LD (HL),0
ZW    JP 0

Sauberkeit erzeugt ganz schön Overhead.

MfG

Dieser Beitrag wurde am 19.12.2022 um 16:17 Uhr von kaiOr editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
Seiten: -1-     [ Technische Diskussionen ]  



Robotrontechnik-Forum

powered by ThWboard 3 Beta 2.84-php5
© by Paul Baecher & Felix Gonschorek