Waage aus dem Sozialkaufhaus - welche CPU? - zum Mitermitteln/Mitmachen!

  • Der Stackpointer muss im RAM liegen.

    Nee, muss er nicht.

    Ich geb zu, eine aussergewoehnliche Vorgehensweise.

    Ich hatte das mal bei meinem Nanocomputer (https://funkenzupfer.de/cms/?NBZ80-S_Nanocomputer). Da waren auch Unterprogrammruecksprungadressen im ROM. Vor dem Unterprogrammaufruf wurde meist der Stackpointer entsprechend gesetzt.

    Ich hab mich auch lange gefragt was das soll.

    Aber ehrlich, was nutzt ein Stackpointer solange ich nicht weiss ob das Memory ok ist? Solange sollte ich das RAM nicht benutzten.

    ;------------------------------------
    ;----- ENABLE NMI INTERRUPTS
    (aus: IBM BIOS Source Listing)

  • Damit ich das richtig verstehe. Der Stackpointer wird dann auf die Adresse gesetzt zu der die routine zurück springen soll? Wenn das VOR dem Unterprogrammaufruf gemacht wird dann wird der Stackpointer doch um die Adresse decrementiert?

    Nach dem Unterprogramm aufruf macht das doch mehr Sinn ?

    In dem Programm wird der Stack jedoch benötigt und es gibt keine weiteren STS oder LDS.

    Der Schaltplan würde natürlich enorm helfen.

    --robert

  • Damit ich das richtig verstehe. Der Stackpointer wird dann auf die Adresse gesetzt zu der die routine zurück springen soll? Wenn das VOR dem Unterprogrammaufruf gemacht wird dann wird der Stackpointer doch um die Adresse decrementiert?

    Richtig. Der CALL ist mit eingerechnet und es wird die Ruecksprungadresse ins EPROM "geschrieben".


    Ein bischen Code?


    Bei ENTRY geht's los.

    SP=FB32

    CALL PioInit dekrementiert den SP=FB30 und schreibt FC08 nach FB30.

    PioInit enthaelt keine Tricksereien, deshalb gekuerzt.

    RET liest die Ruecksprungadresse FC08 aus FB30 und inkrementiert SP=FB32.


    JP FAA8 startet Memory Test.

    Hier werden die Werte 0FFF und 0055 als Parameter vom Stack gelesen und wieder "geschrieben".


    Vollstaendiger disassemblierter EPROM-Code anbei.