Hallo Besucher, der Thread wurde 1,8k mal aufgerufen und enthält 13 Antworten

letzter Beitrag von spacer am

Nach dem Poke ASM-programm starten funktioniert nicht.

  • Hallo, guten tag.
    Ich habe hier einen ASM-Code der als Basic startet. der auch funktioniert.


    Bevor das ASM-Programm startet muss dieses eingegeben werden:
    poke 44,34:poke 34*256,0:new


    Nach dem Poke startet ich das ASM-programm. Springt aber sofort wieder raus.


    Danke.
    Gruss


  • Vier Hausaufgaben:


    1. Mach dir klar, wie die SYS-Zeile funktioniert,
    2. Zieh das Buch "VC-20 intern" heran,
    3. Finde heraus, was die Zeile "POKE 44,34:POKE 34*256,0:NEW" macht,
    4. Finde heraus, was die SYS-Zeile macht, nachdem:
    -- der Rechner frisch eingeschaltet,
    -- obige Zeile eingegeben wurde, und
    -- dein Programm erst dann geladen und mit RUN gestartet wurde.


    Bonuspunkte gibt es, wenn Du darlegen kannst, warum das Vorgehen auf echter Hardware unter Umständen dazu führt, daß dir der Rechner komplett abschmiert und Du nur *denkst*, daß es richtig funktioniert hat, weil die Endlosschleife zumindest bis zum Drücken von STOP+RESTORE nicht von dem Absturz unterschieden werden kann.


    Fleißpunkte mit Goldsternchen gibt es, wenn Du den off-by-one-Fehler in den STA-Anweisungen findest und die vier Schleifen zu einer zusammengefaßt bekommst, wobei der Akku nicht ständig mit 0 geladen werden soll.

  • Ich hab noch *nie* mit einem VIC20 gearbeitet... und hab auch noch nie mit dem ACME gearbeitet. Es hat auch ein paar Minuten gedauert um zu verstehen das Dein Code ACME-bassiert ist und nicht cc65 (wie sonst so oft zitiert). Und ein paar Minuten mehr um zu verstehen wie ich den VIC20 unter VICE starte...


    Grundlage eines neuen Threads ist das man alle Informationen bereitstellt, damit andere das Problem nachstellen können. Aus Deinem zitierten Code erkennen nur ACME-Coder welchen Assembler Du verwendet hast. Ich wollte helfen und musste erstmal verstehen wie ich das PRG erstelle um Deinen Fehler zu reproduzieren... Nicht gerade hilfreich...


    Nachdem Du auch die Hausaufgaben von @Mike nicht gelöst hast... und ich durch andere Hobbies eigentlich gerade keine Lust zu irgendetwas hab... da dachte ich mir das ist doch mal eine schöne Aufgabe für den Sonntag :D


    Was @Mike schreibt (die SYS-Zeile) versteht man erst wenn man weiß Du Du eine 8K-Erweiterung verwendest. Nicht jeder hat eine Glaskugel zur Hand um Deine Gedanken zu lesen... Erst damit funktioniert der POKE und auch der NEW-Befehl. Die exakte Konfiguration ist *WICHTIG*!!!


    Dein Programm wird nicht direkt beendet, es stürzt einfach nur ab. Mit dem *=BASIC-Befehl bei einer 8K-RAM-Erweiterung und dem (unnützen) POKE-Befehl versteht man auch warum... Den Ast absägen auf dem man sitzt... (loop1) :whistling:
    Dezimal-Zahlen sind sch... gerade das Beispiel zeigt warum. In Hex wäre einem das sofort aufgefallen... Programm beginnt bei $1201 mit 8K-Erweiterung ($1001 ohne) und dann löscht mann Speicher ab 4352ff... WOW 8o


    Die Routine zum löschen des Speicherbereichs von 1100-13FD (nicht 13FF!!!) ist wohl Copy&Paste... Wie @Mike schreibt geht das besser... Tipp: Wenn man das X-Register (LDX...) kennt sollte einem das Y-Register nicht unbekannt sein...


    Einfach nur Code-Schnipsel aus anderen Threads zusammenwürfeln (siehe hier... der BASIC-Loader) geht nicht... man sollte schon verstehen was man da zusammenwürfelt. Ähnliches hast Du auch in diesem GEOS-Thread versucht:Code zusammenwürfeln und dann denken das alles funktioniert... aber eben nicht weiter gedacht...


    Konkrete Fragen erfordern konkrete Vorgaben. So unpräzise Deine Frage war... so unpräzise ist meine Antwort. Aber damit bekommst Du das Programm zum laufen, was auch immer es machen soll... Noch so ein Punkt... :?:

  • Ich würde das in etwa so machen. habe aber vom vic20 nicht wirklich ahnung. :)


  • Och man, ich musste das einfach mal machen.

    Kein Problem :Peace


    Aber Du löscht einen Bereich von 4x 256 Bytes und nicht 4x 255 Bytes. Keine Ahnung was spacer wollte, aber das ist schon mal anders... evtl. war das ja so gewollt, mangels Informationen werden wir das wohl nie erfahren :D

  • Der VIC20 ist ein bisschen anders gestrickt wie der C64 wenn es um Grafik geht.


    Daran habe ich auch zu knabbern.

    Das Beispiel hat nix mit VIC20 vs C64 zu tun... Das sind grundsätzliche Probleme... 1000++ Bytes an irgendeine Speicheradresse schreiben mit einem BASIC-Header als Vorspann und einem Programm das seinen eigenen Code überschreibt. Also noch mehr Tipps geht echt nicht...