VICE - Store-Breakpoints beim Start

Es gibt 11 Antworten in diesem Thema, welches 1.723 mal aufgerufen wurde. Der letzte Beitrag (5. Juli 2013 um 12:55) ist von Endurion.

  • Da hab ich mal wieder eine Frage an die C64-Experten:

    Ich baue gerade Unterstützung für die unterschiedlichen Breakpoint-Typen in C64 Studio ein, und falle auf ein lustiges Problem bei Store/Load-Breakpoints.

    Bisher ist es so geregelt, dass beim Aufruf von VICE alle Breakpoints in einer Monitor-Init-Datei übergeben werden. Das klappt auch einwandfrei. Das Problem ist, dass das Kernal beim Hochstarten einen RAM-Test ausführt, und daher quasi alle Load/Store-Breakpoints beim Anfahren schon mehrfach angesprungen werden. Das würde ich natürlich gerne unterbinden (obwohl das Verhalten an sich ja korrekt ist), sprich, die Breakpoints erst aktiv haben wollen, wenn der Kernal-Startup durch ist.

    Meine Idee: Einen Exec-Breakpoint an die entsprechende Stelle im Kernal setzen und erst, wenn dieser greift, die anderen Breakpoints anlegen.

    Meine Frage: Welche Stelle wäre denn da am besten geeignet?

    Idealerweise sowohl für "normales" Hochfahren als auch Cartridge-Modus. Wenn ich beide Varianten unterscheiden muss, tut's aber auch nicht weh.

    C64Studio: Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. --- C64Studio WIP: Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. --- Bitte melde dich an, um diesen Link zu sehen.

  • vmtl musst du sogar noch mehr fälle unterscheiden als nur die beiden... bei einem cbm80 cartridge macht der kernal ja fast nichts und springt relativ fix das cartridge an - da könntest du zb mit einem exec break 8000-9fff reingrätschen. für normalen c64 mmmh. $e394 ?

  • Kuhl, danke :)

    Das waren doch die beiden Fälle (Cart vs. normal). Gibt es noch mehr? Cart-Typ sollte doch egal sein, das geht doch immer an $8000?

    C64Studio: Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. --- C64Studio WIP: Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. --- Bitte melde dich an, um diesen Link zu sehen.

  • Zitat

    Cart-Typ sollte doch egal sein, das geht doch immer an $8000?


    nö, könnte ja ein ultimax oder basic-rom cartridge (16k, ohne cbm80 header) sein

  • Ah, das wusste ich nicht. Was macht der C64 denn da? Ohne CBM80 läuft er den normalen Kernal-Boot durch? (wieder $e394)

    Jajaja, ich geh ja schon selber guggen :)

    C64Studio: Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. --- C64Studio WIP: Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. --- Bitte melde dich an, um diesen Link zu sehen.

  • dann springt er über die vektoren bei $a000, $e394 ist schon dahinter :)

  • Ich hbae mir dafuer einen Kernel ohne RAMTest gepatcht. Leider gehen dann dir Device-Traps nicht mehr, da die Checksumen des Roms unbekannt sind. (Ja ich weis kann man patchen, doch so dringend war mir das nicht). Da ich aber meist mit Disk-Images und Full-Device-Emulation hantiert habe, hat mich das nicht gestört.So konnte ich mit Load/Store-Breakpoints gut arbeiten.

  • @Sauhund:

    Ich hab mal spaßhalber $E422 benutzt statt $e394, das klappt soweit auch mit dem nachträglichen Anlegen der Breakpoints nachdem der Hilfs-Breakpoint erreicht ist. Allerdings schlägt der VICE jetzt später an (aber nur, wenn ich ein .prg benutze)

    Sach mal, wie flanscht der VICE denn das Startprogramm in den Speicher? Macht der da ein Load RAM? ($F4A5)


    Edith sacht: Mit $E178 klappt es, das ist direkt nach dem Einladen. Ich weiß ja, ob ein Ladevorgang aufgerufen wird oder nicht. Meine Herren Gesangsverein.

    C64Studio: Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. --- C64Studio WIP: Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. --- Bitte melde dich an, um diesen Link zu sehen.

  • Zitat

    Sach mal, wie flanscht der VICE denn das Startprogramm in den Speicher? Macht der da ein Load RAM? ($F4A5)


    das kannst du einstellen, entweder per LOAD oder einfach durch in den speicher kopieren - für deine IDE ist vmtl letzteres die bessere idee.

  • ach du schande. Kann ich das beim Aufruf mitgeben, oder ist das eine VICE-Einstellung. Ich hätte da schon lieber den Kernal-Load, der lädt dann das RAM auch nicht unters ROM.

    C64Studio: Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. --- C64Studio WIP: Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. --- Bitte melde dich an, um diesen Link zu sehen.

  • Zitat

    Kann ich das beim Aufruf mitgeben, oder ist das eine VICE-Einstellung.


    -autostartprgmode 0 sollte für LOAD stehen (es gibt für jede einstellung auch eine kommandozeilenoption - falls nicht ist das ein bug :))

    Zitat

    Ich hätte da schon lieber den Kernal-Load, der lädt dann das RAM auch nicht unters ROM.


    wie debuggst du denn dann ein programm das zb von 0400-ffff geht? (natürlich lädt kernal load auch unter den kernal - nur nicht unter i/o)

  • Kuhle Sache!

    Das wird über den normalen Lader (BASIC) nach 400 kopiert und wenn der Code mit PSEUDOPC erstellt wurde, kann ich dann da durch.

    C64Studio: Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. --- C64Studio WIP: Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. --- Bitte melde dich an, um diesen Link zu sehen.