Hello, Guest the thread was called653 times and contains 6 replays

last post from hannenz at the

Einstieg in ASM

  • hallo leute,
    hab mich heute den tag über mal ein wenig durch das forum gehangelt und habs nun mit hilfe der suchfunktion geschafft relaunch64 in verbindung mit acme und vice zum laufen zu bringen.
    hab auch gleich nen testlauf gestartet und ein ganz einfaches programm...


    Code
    1. CLC
    2. LDA#6
    3. ADC#3
    4. STA$C008


    ... geschrieben, über acme kompiliert und in vice ausgeführt. läuft auch 1a.


    nun stellt sich mir aber die frage, dass wenn ich schon emuliere, hab ich dann auch die möglichkeit mir (bei solch einfachen programmen) anzeigen zu lassen was (theoretisch) in den registern steht?
    weil so erhalte ich nur info über basic, dass es durchgelaufen ist.


    gruß newbie

  • Also bei solch einfachen Programmen würde ich einen Maschinensprachemonitor wie S-Mon verwenden und das Programm direkt am C64 / in Vice eingeben. Im Maschinensprachemonitor kannst Du dir die Register und den Speicherinhalt nach dem Programmlauf anzeigen lassen
    Hab's nicht mehr ganz im Kopf, aber die wichtigsten Befehle für den Monitor sind


    A <Speicheradresse> : Assemble (Direkteingabe Programm)
    . Eingabe beenden
    J <Speicheradresse> : Programm starten
    M <Speicheradresse> : Hexdump
    D <Speicheradresse> : Dissassemblieren


    Hat Vice nicht sogar einen Maschinensprachemonitor eingebaut?

    Menschen wurden geschaffen um geliebt zu werden. Dinge wurden erschaffen um benutzt zu werden.

    Der Grund, warum die Welt sich im Chaos befindet, ist weil stattdessen Dinge geliebt und Menschen benutzt werden.

  • mhhh... wenn ich aber nun LDA#6 ausführen lasse (über relaunch + acme + in vice starten) und dann in vice den monitor anwerfe hab ich in ac (wovon ich ausgehe, dass es der akku is) 00 stehn...

  • Dann step mal weiter bis zur nächsten Instruktion ("z" ist glaub ich step modus). Bis der 6510 den Operanden in den Akku transferiert hat ist der ProgramCounter wahrscheinlich schon bei der nächsten Instruktion.

  • das ist nicht das Problem... bis du den Monitor aktiviert hast, hat der Prozessor schon ein paar Millionen Instruktionen mehrr ausgeführt, da er nach deinem Programmende eben einfach weitermacht, sein Betriebssystem (und/oder BASIC) auszuführen. Kein Wunder, dass deine "6" nicht mehr im Akku steht.
    Ich weiss jetzt nicht, ob das beim VICE Monitor auch so geht, aber in einem "normalen" nativen monitor, solltest du als letzte Instruktion einfach ein BRK setzen, (nicht RTS), damit an dieser Stelle der Monitor wieder aufgerufen wird. Dann sollte auch die Registeranzeige korrekt funktionieren. Oder falls das nicht geht, codiere einfach eine Endlosschleife (JMP <aktuelle Adresse>) als letzte Instruktion und rufe den Monitor dann "von Hand" auf.


    EDIT: habs gerade ausprobiert und es geht mit dem VICE Monitor nicht(!). Ist eigentlich auch logisch, da der emulierte c64 ja einfach über den BRK Vektor springt, der einen BASIC-Warmstart vollzieht. (Bildschirm gelöscht + READY Prompt).
    Du müsstest dann einen Breakpoint auf die letzte Addresse + 1 deines Programms setzen:


    das ist aber sehr umständlich und du musst sobald sich dein Programm in der Länge verändert den alten breakpoint löschen und einen neuen setzen.
    Besorg dir doch einen nativen Monitor, den du ja trotzdem in VICE laufen lassen kannst...