Lerne Assembler mit dem C64 Monitor SMON: Assemblieren, Disassemblieren, Laden und Speichern

Поделиться
HTML-код
  • Опубликовано: 4 авг 2024
  • НаукаНаука

Комментарии • 69

  • @WittichWolf
    @WittichWolf 6 месяцев назад +1

    Schöne Einführung in Assembler. Hatte mich vorher nie mit Assembler/Maschinensprache beschäftigt. Dein Video ist meine allererste ernstzunehmende Berührung mit der Thematik. Gut und einfach erklärt, werde mich damit in Zukunft mehr beschäftigen, um deutlich schnellere Programme als Basicprogramme auf dem C64 zu schreiben. Danke für dein Video👍👍👍

  • @frankbraungardt2515
    @frankbraungardt2515 Год назад +2

    Super erklärt. Hab meinen C64c erst wieder ausgepackt & endlich aufgemotzt - so wie ich es "damals" aus Geldgebermangel nicht hinbekommen hab. Dein Video ist sowohl Auffrischung als auch Neues lernen sowie neu lernen - einiges hat die Zeit in meinem Kopf nicht so gut überstanden wie auf den Disketten. Danke für die tollen IT Stunden!

    • @C64
      @C64  Год назад

      Oh ja, das mit dem im Kopf nicht so gut überstanden kenne ich... Ich hangel mich von Woche zu Woche... 😅

  • @hugoegon8148
    @hugoegon8148 Год назад +1

    Mir ist gerade ein SMON-Modul in die Hände gefallen, das habe ich gleich mal ausprobiert. Vielen Dank für den tollen Einstieg. 👍 Ich hatte mir deinen Assemblerkurs schonmal angesehen, aber jetzt werde ich ihn nochmal richtig mitmachen. Das ist deutlich besser. 😊

    • @C64
      @C64  Год назад

      Da wünsche ich Dir auf jeden Fall viel Spaß und Erfolg. 🙂

  • @maxmuster7003
    @maxmuster7003 3 года назад +6

    Hervorragend gut gemacht. Alles sehr gut erklärt.

  • @fiddlersgreen11
    @fiddlersgreen11 Год назад +1

    Hervorragende Diktion !

  • @cyberghot6902
    @cyberghot6902 2 года назад +2

    Ich habe eine gute zeit mit C64 Basic Programmen

  • @MFGBerlin
    @MFGBerlin 3 года назад +4

    Wirklich toll gemacht.

  • @neleabels
    @neleabels Год назад

    Klasse gemacht! Besonders gut gefällt mir, dass du deinen eigenen Lernprozess in den Videos zeigst. Ich sitze an meinem eigenen Vice-Emulator bzw. dem C64Maxi und probiere mit. :)

    • @C64
      @C64  Год назад +1

      Schön das es Dir gefällt. Ich hab tatsächlich zum Zeitpunkt der Aufnahme gerade mit Assembler begonnen... Leider ist das schon länger her und ich hab viel wieder vergessen. Aber ich kann ja das Video schauen. 😂😅

  • @michaelsommer3343
    @michaelsommer3343 3 года назад +2

    Weltklasse, Vielen Dank. Wäre schön wenn da echt noch mehr kommt. Kleine Spiele, oder Sprites Bewegungen usw. Abo hast du👍🏻

    • @cannyfocus
      @cannyfocus 3 года назад

      Genau, das wird (meiner schon immer Meinung nach) das eigentlich schwierige dann für Ottonormalleute - die ganze / eine Spiellogik u. mehr in Assembler hinzubekommen. Deswegen sind manche v.a. "billig gemachte" Spiele und Spieleengines wie dieses Revenge Of The Tomato Ballerspielchen aus der RGCD auch so simpel und "digital" und repetitive.
      Aber bis hierhin auch schonmal alles sehr gut gemacht, gut zuzuhören, alles gut erklärt. So lerne ich endlich 'mal die Bedienung und Befehle von Smon besser kennen.
      Auch wenn ich das vom im Nordic Power Modul integrierten Maschinensprache Monitor samt meinem org. manual dazu.. schon so ganz ähnlich kenne.

    • @C64
      @C64  3 года назад +1

      Hallo Michael, vielen Dank für Dein Abo. 😊
      Bis ich kleinere Spiele etc. machen kann ist es wahrscheinlich noch ein weiterer Weg. Ich lerne Assembler ja gerade selbst erst. Aber ich bin da schon recht zuversichtlich. 😉
      Wahrscheinlich werde ich mit Hybriden aus Basic und Maschinensprache anfangen, also im Basic Code mit SYS Unterprogramme aufrufen, die dann Zeitkritische aufgaben erledigen. Mal sehen... Als nächstes wird wohl bald ein Video mit Memory Monitoring folgen, also den Speicher auslesen, bearbeiten und Programme darin verschieben und kopieren mit SMON. Die Assembler Befehle kommen dann später in dem Kurs der 64er...

    • @C64
      @C64  3 года назад +1

      Hallo Cannyfocus, ich denke auch das es eine Herausforderung wird die in Logischen Programmiersprachen sonst "recht simplen" Abläufe in Assembler zu implementieren, aber ich glaube... es könnte Spaß machen. 😅🙈
      RGCD kannte ich bis eben garnicht... Asche auf mein Haupt, das werd ich mir erstmal ansehen. 😮

    • @cannyfocus
      @cannyfocus 3 года назад

      @@C64Die 16k Kompetition der RGCD ist's halt 'nur': www.c64-wiki.de/wiki/RGCD. 2016 war aber leider die vorerst letzte echte "competition".
      Da sind alle Releases, quasi so noch etwas übersichtlicher als sich selbiges aus der csdb zu ersehen, nach Jahr aufgelistet.

  • @fiddlersgreen11
    @fiddlersgreen11 Год назад

    Wirklich sehr gut gemacht, dieses Video! Vielen Dank.

    • @C64
      @C64  Год назад

      Danke für das Lob! 😉

  • @frankmaking3323
    @frankmaking3323 2 года назад +1

    Danke für die gute Erklärung! Habe den 64er-Kurs vor mir liegen und bin doch manchmal über einige Sachen gestolpert. Ist schon das ein oder andere Mal sehr merkwürdig geschrieben. Aber in Kombi mit deinen Erläuterungen bin ich endlich schlauer geworden (= Dr. Brain) und habe zum ersten Mal verstanden was ich mich schon vor 40 Jahren gefragt habe :-)

    • @C64
      @C64  2 года назад

      Hallo Frank, ich musste mir das auch alles erstmal anlesen. 😅 Diese Kurse aus der 64er sind schon stellenweise etwas anstrengend finde ich. Mit diesen ganzen "Agenten"-Vergleichen und so... ist eben in den 80ern geschrieben und dementsprechende Vergleiche werden angestellt. Das zu der Zeit kaum Fachbegriffe benutzt werden (weil es sie noch nicht gab, oder niemand sie verstanden hätte) macht es nicht leichter die Artikel aus der Zeit zu lesen... 🙂

  • @MiccaPhone
    @MiccaPhone 3 года назад

    Super erklärt, danke!

    • @C64
      @C64  3 года назад +1

      Schön das es Dir gefallen hat. 😊

  • @FUNKLABOR_DL1LEP
    @FUNKLABOR_DL1LEP 8 месяцев назад

    mnemonics heissen übrigens die Assembler Kurzbefehle wie zb 'LDA'. Klasse Serie! werde die Tage auch wieder meinen C64 'anwerfen'.. erstmal smon testen, aber vermutlich werde ich dann zügig das actioncardridge nutzen :-)

    • @C64
      @C64  8 месяцев назад

      Das Action Replay hab ich auch, aber den Monitor den noch nie getestet... 😅

    • @FUNKLABOR_DL1LEP
      @FUNKLABOR_DL1LEP 8 месяцев назад

      @@C64 Der kann im Prinzip das Selbe wie der Smon, aber muss natürlich nicht ständig in den Speicher geladen werden und man hat dann in der Badic Eingabeaufforderung grundsätzlich die Disktools auf den YfTasten, das bietet schon Vorteile..

  • @timtaler2435
    @timtaler2435 Год назад

    Dankeschön!

  • @marcostechtv
    @marcostechtv 3 года назад

    Wirklich tolles Video 🔥 🔥 Am Besten, man nimmt sich noch einen Binär-Calculator zur Seite 😁😎👍🏻

    • @C64
      @C64  3 года назад +1

      Naja, man kann ja alles auch mit SMON umrechnen... 😅

    • @MiccaPhone
      @MiccaPhone 3 года назад +2

      Die App "RealCalc" auf Android, und in den settings "Radix Modes" einschalten. Sehr unkompliziert und praktisch.
      PS: und bei "long click shift" auch einen Haken machen - das erspart die Shift-Taste.

    • @C64
      @C64  3 года назад +2

      @@MiccaPhone Guter Tip, gleich mal installieren... 🧐
      Im Windowstaschenrechner klappt die Umrechnung auch gut im "Programmierer" Modus. 😅

  • @LeondeOwlet
    @LeondeOwlet 2 года назад +1

    Danke!

    • @C64
      @C64  2 года назад

      Awwww, vielen herzlichen Dank für Deinen Support! 🥰

  • @fliplefrog8843
    @fliplefrog8843 3 года назад

    Ich find es totaaal cool, dass hier 8bit Systeme am C64 in Basic und Assembler vorgestellt werden!
    Und ich will auch nicht, dass Du damit aufhörst!
    Einzig der Channelname impliziert vollkommenes Wissen. Und das sehe ich hier nicht! Eher wildes rumprobieren.
    Es ist aber cool, dass Du versuchst, den Küken zu zeigen, wie man Hardware-nahe programmiert, und was der C64 noch leisten kann. (Ohne irgend nen klicki-bunti Frontend von Windows)

  • @sengir3937
    @sengir3937 3 года назад +2

    Das kannst du dir gleich für den weiteren Kurs merken, dass man die Endadresse meistens auf das Byte danach setzt, weil dies die Abbruchbedingung ist.

    • @C64
      @C64  3 года назад +1

      Ok, ich habs ja jetzt auf die "harte" Tour gelernt... ^^

  • @maxmuster7003
    @maxmuster7003 3 года назад +1

    Ich vermisse es so, dass man mit dem Cursor zu einer Zeile wandert und dort einen Befehl ausführen kann, der dort schon vorhanden ist und der beim Drücken von Eingabetaste übernommen und ausgeführt werden kann. In DOS am x86-PC kann ich mit dem Cursor auch in jede Zeile springen, doch was dort bereits geschrieben steht wird einfach ignoriert und ist für den Eingabe-Interpreter nicht vorhanden. So muss man neu tippen, oder wie in DOSBOX mit den Coursor-Tasten (die nicht den Cursor bewegen) nach oben scrollen um die vorher eingetippten Befehlszeilen erneut zu bekommen, scrollt auf der Stelle alle Namen durch. Das geht dann auch noch, wenn dort ASCII- Reste stehen und dazwischen unser neuer Befehl. Sieht dann entsprechend unsauber aus.

    • @C64
      @C64  3 года назад +2

      Es hat aber auch nicht immer Vorteile... Hab mir schon oft ganze Zeilen in Basic dadurch zerschossen... 😅
      Aber hast recht: Es ist natürlich die coolste Art ein Eingabeinterface zu designen. 😉

  • @gerhardh.6239
    @gerhardh.6239 2 года назад +2

    woher kriege ich smon fuer den c64 emulator?

    • @C64
      @C64  2 года назад +1

      Hallo Gerhard, auf der C64-Wiki Seite über SMON ganz unten ist ein Link zu einer Downloadseite: www.c64-wiki.de/wiki/SMON 🙂

  • @Excess-qn7qh
    @Excess-qn7qh Год назад +1

    moin und danke für die coolen videos !!
    ich habe folgende frage .. ich verwende den ccs64 und habe probleme beim speichern ( 27:43 )
    nachdem ich gespeichert habe und den smon verlasse, bekomme ich mit LOAD"$",8 die fehlermeldung ?OUT OF MEMORY EROOR
    ich habe den emulator neu gestartet und ein diskimage mit hilfe von Dirmaster erstellt und geladen
    woran kann das liegen ?

    • @C64
      @C64  Год назад +1

      Hallo Excess 1972, das liegt sicher daran, das Du nach dem Laden von SMON die Pointer nicht mit dem NEW Befehl resettet hast. Wie das alles zusammenhängt kann ich nicht genau sagen, aber nach dem Laden von einem Maschinensprachprogramm mit ,8,1 kommt es zu einem OUT OF MEMORY ERROR, sobald ein BASIC Befehl, in dem Fall LOAD, ausgeführt werden soll. Der Befehl NEW resettet alle Pointer, löscht aber nicht das Maschinenprogramm.
      Also einfach nach dem Laden von SMON einmal NEW eingeben und abschicken, danach sollte das Laden kein Problem mehr sein. 🙂

    • @Excess-qn7qh
      @Excess-qn7qh Год назад +1

      @@C64 perfekt, das war es. danke für die schnelle hilfe !!

  • @maxmuster7003
    @maxmuster7003 3 года назад

    Argumente/Parameter werden auch als Operanden bezeichnet. Mit Wertangabe ist es dann ein immediate operand.

  • @maxmuster7003
    @maxmuster7003 3 года назад

    In 0400 Bildschirm-Speicher und in D800 Farbspeicher
    In Y-Register FF Startwert
    Geschrieben wird nach Adresse+Y
    dann wird Y verringert und gesprungen solange Y noch nicht Null ist,
    sonst Ende der Schleife
    und geschrieben wird der "Wert" im Akku-Register, der mit dem Inhalt vom X-Register zwischen den beiden Schreib-Befehlen ausgetauscht und am Schleifen-Anfang neu geladen wird siehe Sprungadresse

    • @C64
      @C64  3 года назад

      Danke für die Aufschlüsselung. :-)

    • @maxmuster7003
      @maxmuster7003 3 года назад

      @@C64 Ich habe doch noch nicht alles vergessen. So können Bild- und Farb-Speicher beide gleichzeitig mit Y adressiert werden. Hier wird mit der höchsten Adresse angefangen und dann byte weise verringert. Anders herum würde es auch gehen, den Wert in Y erhöhen.

  • @maxmuster7003
    @maxmuster7003 3 года назад +1

    16 Bit Werte im Speicher sind bei CPUs mit "little endian" erst das low byte und dann das high byte. Ganz im Gegensatz zu big endian, dort ist es genau umgekehrt.

    • @C64
      @C64  3 года назад

      Also ist es Prozessortypabhängig, in welcher Reihenfolge die beiden Bytes im Speicher abgelegt werden?

    • @maxmuster7003
      @maxmuster7003 3 года назад

      @@C64 Ja genau. de.m.wikipedia.org/wiki/Byte-Reihenfolge
      Bei 32 bit und 64 bit Werten im Speicher mit little endian ist es genauso. Erst low word 16 bit, dann high word 16 bit, oder erst low double word 32 bit, dann high double word 32 bit immer angefangen mit dem low byte vom low word vom low double word.

  • @mikewollmann
    @mikewollmann 3 года назад

    das überschreiben geht nur mit save "@0:programmname",8 ich denke das wird wohl in smon genau so gehn (habs nicht geteste), gibt auch dokumentation dazu im c64-wiki :)
    kannsts jedoch gern mal probiern mit s"@0:test" 7000 7005

    • @C64
      @C64  3 года назад

      Ja, das Überschreiben geht einfach mit "@:name"... Habe es eben nochmal getestet.
      Der Fehler saß wohl mal wieder 30 cm vor der Tastatur... 😉

    • @MiccaPhone
      @MiccaPhone 3 года назад

      Irgendwo im forum hab ich gelesen dass save"@0:name",8 corrupted ist und manchmal die Daten korrumpiert.
      Keine ahnung was da dran ist und obs vllt. Nur ältere c64 (oder 1541) betrifft...(?)

  • @fiddlersgreen11
    @fiddlersgreen11 2 года назад

    Ich kriege den SMON einfach nicht zum Laufen. Fehlermeldung beim Start des Basic-Loaders "Fehler in Block 7"; bin die Data-Zeilen alle durchgegangen.......
    Please help !

    • @C64
      @C64  2 года назад

      Hallo Sven, bekommst Du SMON nicht zum laufen, oder einen Basic Loader? "Fehler in Block 7" klingt nicht nach einer Fehlermeldung die der C64 so schmeißen würde. Versuch am besten mal diese Version von SMON: www.cbmhardware.de/dlmanager/index.php?id=162
      Das ist das Image das auch im C64 Wiki verlinkt ist und die ich im Video benutze... 🙂

    • @fiddlersgreen11
      @fiddlersgreen11 2 года назад

      @@C64 Es ist der Basic-Loader, den ich eingetippt habe. Angeregt durch deine Videos möchte ich mich bißchen mit Assembler beschäftigen.

    • @C64
      @C64  2 года назад

      @@fiddlersgreen11 Aber welcher Basicloader? 🤔

    • @fiddlersgreen11
      @fiddlersgreen11 2 года назад

      @@C64 Sorry, ich meinte das Programm SMON Teil 1 von N.Mann & D Weineck aus der 64er Ausgabe 11/November 1984

    • @fiddlersgreen11
      @fiddlersgreen11 Год назад +1

      @@C64 Hi ! Läuft jetzt alles super !

  • @maxmuster7003
    @maxmuster7003 3 года назад

    Beim Dissamblieren sollte man bestenfalls nicht mitten innerhalb eines Befehls z.B. bei 7001 anfangen, wenn in 7000 kein Ein-Byte-Befehl enthalten ist und dort wie im Beispiel ein zwei Byte langer Befehl steht und der nächste Befehl in 7002 beginnt.

    • @C64
      @C64  3 года назад

      Ich hab's noch nicht getestet, aber wenn man beim Disassemblieren bei einem Parameter anfängt, also im Beispiel $7001, wird dann überhaupt etwas gültiges angezeigt, bzw. ist SMON so schlau dann in der Speicherstelle davor einen gültigen Befehlscode zu suchen? 🤔

    • @maxmuster7003
      @maxmuster7003 3 года назад

      @@C64 Das kommt ganz darauf an, ob der Operand des 2 Byte Befehls von 7000 in 7001 einen Wert hat, der ein Opcode ergibt, oder nicht. Ist es ein Opcode wird der dazu gehörende Befehl angezeigt, wenn nicht kommen nur Sternchen, oder bei Debug in DOS Fragezeichen. So kann ein Operand fälschlich als Opcode angezeigt werden, der auch entsprechend ausgeführt werden würde, wenn man dorthin bei der Programmausführung springt, oder dort startet. Bei Intel 80386 können die Befehle bis zu 15 Bytes lang sein. Da kann man schnell mal etwas falsch anzeigen lassen, wenn man wahllos durch den Speicher dissambliert. Der richtige Startpunkt hat somit eine wichtige Bedeutung.

    • @maxmuster7003
      @maxmuster7003 3 года назад +1

      @@C64 Beim x86 macht es Sinn auf Daten- und Code-Ausrichtung(alignment) zu achten. Das bedeutet 16 bit Werte an einer durch 16 teilbaren Adresse stehen zu haben, weil die CPU den Speicher nicht Byteweise läd, sondern in Blöcken. Bei Werten die in zwei verschiedenen Blöcken liegen hat die CPU entsprechend mehr zu laden, auch Bytes die oberhalb und unterhalb unseres 16 bit Wertes stehen und gar nicht benutzt werden, wenn die Adresse nicht durch 16 teilbar ist z.B. bei 000f. Bei 0010 wäre es durch 16 teilbar.
      Das selbe gilt für den Code der unterschiedlich viele Bytes je Befehl haben kann. So macht es Sinn eine Ziel-Adresse für einen Sprung-Befehl zu haben die durch 16 teilbar ist, auch wenn dabei eine Lücke im Code entsteht die übersprungen wird.
      vereinfachtes Beispiel....
      Anfang:
      Befehl
      Befehl
      bedingter jump nach VORNE wie z.B. BNE/BEQ Adresse
      bedingungsloser jump zum Anfang
      Adresse: 000E leer byte
      Adresse: 000f leer byte
      VORNE:
      Adresse: 0010 nächster Befehl
      Damit wird der Code schneller ausgeführt, wenn nicht nach 000e, sondern nach 0010 gesprungen wird. Für Routinen die nicht so zeitkritisch sind hat das jedoch nur wenig Bedeutung, wenn man danach eh nur auf einen Tastendruck wartet.
      Das macht zweifellos das Dissamblieren des Codes schwieriger. So muss dann in mehreren Schritten dissambliert werden, damit der richtige Code auch angezeigt wird.

    • @maxmuster7003
      @maxmuster7003 3 года назад +1

      Beim Makro-Assembler MASM gibt es einen org-Befehl womit die aktuelle Adresse($) verändert werden und eine Ausrichtung erzeugt werden kann. So braucht man sich nicht weiter darum zu kümmern welche Adressen es sind, wenn wir nur mit Adress-Marken/Labels arbeiten, egal welche Adresse dabei ensteht.
      START:
      Befehl
      Befehl
      bedingter Sprung nach VORNE
      bedingungsloser Sprung zum START
      org START + ((($-START)/16)*16)+16 ; Code-Ausrichtung
      VORNE:
      Befehl

    • @MiccaPhone
      @MiccaPhone 3 года назад +1

      @@C64 lustig wäre es, zwei unterschiedliche programme im (fast) gleichen speicher zu haben - um 1 byte verschoben. Je nachdem ob ich z.B. sys7000 oder sys7001 mache, wird derselbe inhalt einmal als op code und einmal als daten-parameter interpretiert, und umgekehrt.... Ob man damit was praktisch sinnvolles machen kann weiß ich nicht, aber für didaktische demo-zwecke ließe sich bestimmt etwas kurioses erzeugen... :)

  • @MichaOXS
    @MichaOXS 3 года назад

    Das hast du doch alles schon mal im ersten Video erklärt.

    • @C64
      @C64  3 года назад +1

      Hallo Micha, nicht alles. In diesem Video geht es um die Bedienung von SMON, im ersten Video um eine Einführung in Assembler. Das sich da natürlich ein paar Inhalte überschneiden ist klar. Aber ich hätte sie hier auch nicht einfach weglassen dürfen...