"Programmieren" lernen

  • Sodale,


    Mit dem ein oder anderen Raubzug bei Ebay sammeln sich bei mir immer mehr Bücher an mit dem Ziel irgendwann mal in die "unteren" Schichten vorzudringen.

    Auf die Idee bin ich bei der Arduino Programmierung gekommen, es gibt zwar eine Million eigentlich gute Videos bei Youtube aber die Frage nach dem "WARUM?" wird mir persönlich immer etwas vernachlässigt....dafür bekommt man selbst bei dem kompliziertesten Sachverhalten jedes mal aufs neue erklärt warum die LED ein kurzes und ein langes Beinchen hat...Wow!


    Ja, nu wird der Arduino mit C+ oder wie ich es nenne: " C{[]{"§$&"§&"§$%/"$%(§%$)($§"[][{}{[]}{[}{[]+" gefüttert aber da gibt es ja auch noch BASCOM....


    Lange Rede kurzer Sinn, ich würde gerne mal in die Maschinensprache / Assembler hineinschnuppern...welches der Bücher wäre dafür wohl geeignet?

    Und was ich beim Durchblättern wohl übersehen habe, WIE erkläre ich dem PET / KIM-Clone nun in welcher "Sprache" ich das vor habe....beim C16 ist es einfach das Assembler Menü aufzurufen aber den will ich mir nicht auch noch mal zulegen.....


    Bin ich eigentlich auf dem Holzweg oder sind die "guten" Absichten erkennbar?





    Zur Benützung des KIM fand ich dieses Video toll, aber leider ist es irgendwie beim ersten Teil geblieben:

    https://www.youtube.com/watch?v=QYEI_c-iI30


    Demnächst hinzu kommt noch dieses Buch, das scheint mir sehr Praxisorientiert zu sein:

    https://www.ebay.de/itm/1978-B…47289a:g:4RMAAOSwYLRbnGkW

  • Da man sich vermutlich keines der beiden Keyboards antun will, wird es wohl am einfachsten sein, nach einem CrossAssembler zu gucken und dann nur das fertige Programm auf die reale Maschine zu spielen. Testen kann man vorher vermutlich auch gut in einem Emulator.


    Als Einstiegsbücher sehen die schon ganz gut aus. Es sind aber vornehmlich anscheinend allgemeine 6502 Bücher. Das Rodney Zaks ist ganz gut und schön strukturiert. Aber: Bei solchen Sachen fehlt oft der Bezug zur Maschine und daher ist vermutlich das Programmers Manual oben rechts das Beste von allen. Insbesondere willst Du auch noch was zum OS wissen, dafür wird es auch PET Bücher geben. Gerade für wichtige Adressen etc und Register und Memory Maps kommst Du mit den Prozessor Handbüchern nicht weiter.


    Für eigentliche Lernen würde ich nach alten Zeitschriften und dort nach Assemblerkursen suchen. Das kann dann durchaus auch was für andere Commodore sein, da lernt man gleich was übers "Umstricken" (also VC20, C64, C16).


    Wichtig ist auch, daß man sich was vornimmt, was man gern hinbekommen möchte und dann versucht umzusetzen, können auch erstmal Kleinigkeiten sein, ala Bildschirmlöschen oder Sinusscrolltext basteln. Besonders gut sind, wenn man dann ein Gefühl für die Basics hat, Codes von anderen Leuten, die man sich anschaut. Es gibt auch auf den Demoservern immer mal wieder Anleitungen für bestimmte Probleme (Division o.ä.), was meist auch sehr lehrreich sein kann.

  • Da man sich vermutlich keines der beiden Keyboards antun will, wird es wohl am einfachsten sein, nach einem CrossAssembler zu gucken und dann nur das fertige Programm auf die reale Maschine zu spielen. Testen kann man vorher vermutlich auch gut in einem Emulator.

    Ich denke, da gibt es zwei Ansätze.


    Einmal den hardwarenahen - von Hand assemblieren (auf Papier) und die Hex-Codes eintippen. Das hat den Vorteil, dass man erstmal den Unterschied zwischen Assembler und Maschinensprache versteht und sich nicht mit den Eigenarten eines Crossassemblers plagen muss.

    Das hat auch einen sehr hohen Nostalgiefaktor. 8-)


    Oder eben den von dir empohlen Einstieg in Assembler mit einem Crossassembler auf dem PC, der einem ggf. ein fertig ladbares und lauffähiges Programm erzeugt oder gleich automatisch in Vice lädt und ausführt.


    Als ich damals 1977 als Schüler mit 6502-Assembler angefangen habe, gab es nur den ersten Weg. Ich hatte als Literatur lediglich Kopien der originalen MOS-Handbücher. Assembliert habe ich von Hand auf Papier, dann die Hex-Werte als Dezimalzahlen in Basic-Datazeilen gepackt und per Programm in den Speicher geschrieben (der erst PET hatte noch keinen Maschinensprache-Monitor).

    Der Disassembler war in Basic selbstgeschrieben (naja, eigentlich von einem Freund :tüdeldü:).


    Also wenn man verstehen will, wie ein Prozessor bis aufs letzte Bit runter funktioniert und nicht möglichst schnell, große Programme schreiben will, würde ich den ersten Weg empfehlen.

    Parallel dazu braucht man auch noch ein paar mathematische Grundlagen: Zahlensysteme (Umrechnung von dezimal, hex, binär) und Boolsche Algebra (And, Or, Xor, ...). Dazu gibt es aber bestimmt jede Menge Youtube-Erklär-Videos. ;)


    Zusätzlich empfehle ich, fremde Programm anzuschauen und zu lernen, wie andere das machen. Sonst gewöhnt man sich Sachen an, die "unschön" oder uneffektiv sind.

  • Also wo ich noch mitgehen würde - ja, es ist überaus sinnvoll solche Assemblersachen erstmal per Hand auf Papier zu schreiben ! Immer ! Der Lerneffekt ist dabei immens und außerdem denkt man dabei ganz anders darüber nach.


    Aber die Sachen dann als Hexcodes einzutippen - das will man nun doch wirklich nicht ... :=O
    Ich sage ja nicht, daß man das nicht mal machen sollte, aber eben nur damit man das Feeling mal hatte und diese KIM Tastatur bietet das ja auch geradezu an (sieht auch nicht zu krampfig aus in dem Video, da automatische Adressweiterschaltung). Ist auch ein schönes Demo für Messen oder zum Beeindrucken, aber nichts, um damit dann wirklich selbst Routinen zu basteln. Aber OK, jeder wie er mag. ;)


    Habe mal geschaut wegen Kursen. Die 64er Klassiker beginnen in Ausgabe 1/86 mit dem Kurs "Von Basic zu Assembler" und der Folgekurs dann in 4/87 "Assemblergestütze Basic Programmierung". Die Hefte gibts bei 64er-online.de zur Ansicht (Achtung große Downloads).

  • Ich stehe vor dem selben Problem, zu Lesen hab ich mir auch ein bisschen was besorgt.




    Erik Bartmann wird , denke ich keine Videos oder PDFś mehr machen da das Thema zu wenige interessiert. Man müste halt mal bei Ihm nachfragen.


    Ich habe auch versucht den Cross-Assembler Ophis zum Laufen zu kriegen aber bekomme nur Fehlermeldung.

    Mit TASM genau dasselbe, obwohl ich die Beispiele aus dem PDF von Wichit Sirichote genommen habe.


    Hier noch drei Links zu 64er Sonderheften über Assembler, einfach auf Vollbild gehen und dann kann man es herunterladen.


    https://archive.org/stream/64er_sonderheft_1985_08#page/n0


    https://archive.org/details/64er_sonderheft_21


    https://archive.org/details/64er_sonderheft_71


    Gute Seite hat viele Bücher über Programmieren, leider nur in Englisch.


    Grüße Jürgen

  • Hallo.


    Ich hänge mich auch mal in diesen Thread rein. Ich habe damals in meiner Anfangszeit, als der C64 noch mein Hauptrechner war mich viel mit Basic beschäftigt und ab und zu auch mal im Maschinensprachemonitor irgendetwas nach Anleitung abgeändert. Seit 2004 betreibe ich "retrocomputing" als Hobby, allerdings mal mehr und mal weniger intensiv. Manchmal stehen die Geräte ein paar Monate rum. Ich bastele gerne an Hardware rum. Kaufe mir hier und da mal ein neues Gerät und erfreue mich daran. Bei Assembler war mir schon immer klar, dass man das nicht zwischendurch auf die Schnelle lernen kann und das es länger dauert, an irgendwelche Resultate ran zu kommen. Man braucht also Zeit und man muss wirklich Lust dazu haben. Nun, in meinem Leben hat sich in letzter Zeit einiges geändert. Ich habe einen neuen Arbeitgeber und habe nach 20 Jahren open end Arbeitszeiten im Beruf endlich was geregeltes von 6 - punkt 14 Uhr. Ein Traum !!


    Dem zu Folge hab ich jetzt endlich Zeit für Familie und Hobby :-)


    Ich hatte mir vor Jahren schon das Buch "Assembler ist keine Alchemie" gekauft und natürlich gelesen. Ich verstand nur Bahnhof und konnte mir überhaupt nicht vorstellen, wie man mit Assembler vernünftige Software programmieren kann. Schließlich schieben die da ja nur Zahlen hin und her :-)

    In einem Thread hatte ich gelesen, dass dieses Buch ja nur eine Zusammenfassung aus dem 64er Assembler-Kurs ist und der originale Kurs in der 64er besser sei. Also hatte ich mir die Zeitschrift auch besorgt. Und schonwieder kopieren die da nur Zahlen hin und her..... wie soll das gehen ?! :-)


    Jetzt, nach Jahren, hatte ich das Buch wieder gelesen mit dem selben Resultat. Darauf hin hatte ich mich für eine andere Lektüre entschieden names "6502 Assembler". Ich hatte angefangen das Buch zu lesen, es liest sich sehr gut, allerdings wurde immer wieder auf ein anderes Buch verwiesen namens "Einführung in die Mikrocomputertechnik" von 1978. Dieses hatte ich dann im Internet für 8 Euro gekauft in neuwertigem Zustand. Das "6502 Assembler"-Buch hab ich erstmal auf die Seite gelegt.


    Wenn du heute ein Computer-Einsteigerbuch kaufst, steht da drin : das ist der Computer, das ist die Maus, das ist der Bildschirm und das ist die Tastatur. Wenn du ein solches Einsteigerbuch von 1978 kaufst, richtet sich das an ein ganz anderes Klientel. Denn, wer sich 1978 einen Rechner für teuer Geld gegönnt hat, hat in der Regel "ernsthaft" damit gearbeitet. Programmierer, Computertechniker etc.

    Dem zu Folge ist das Buch auch ganz anders und wesentlich genauer geschrieben. Dennoch ist es in der Wortwahl nicht zu kompliziert verfasst und auch noch im Jahre 2018 für Einsteiger bestens geeignet.


    Ich habe das Buch jetzt zu 3/4 gelesen und ich muss zugeben, ich dachte, ich hätte vorher Ahnung gehabt.. :-) Vieles im Bezug auf Assembler hört sich jetzt für mich viel plausibeler an als vorher. Also wenn man nicht annähernd zu 100% weiß, wie ein Rechner funktioniert, wie ein Speicher aufgebaut ist, wie was wann und wo in welche Register bzw in den Akku geschrieben werden muss und wann es an welche Speicherstelle kopiert werden kann und darf, was ein Stapelregister, ein Programmcounter etc überhaupt sind und warum sie überhaupt existieren, braucht man mit Assembler erst gar nicht an zu fangen.


    Wie dem auch sei, die Tage hatte ich mein erstes Programm geschrieben direkt am C64 in Turbo-Assembler. Bewusst ohne Laptop als "Spickzettel". Ich hatte nur den C64, das C64 Handbuch, eine Memory-Map ausgedruckt und einen Taschenrechner um von Dezimal in Hexadezimal um zu rechnen. Das Programm ist nichts weltbewegendes, aber es funktioniert und war für mich persönlich schon ein großer Schritt. Ich hatte den Hintergrund und die Rahmenfarbe geändert und in der Mitte des Bildschirms eine Zeile Schrift ausgegeben und dann den Hintergrund flackern lassen.


    Ein paar Fragen dazu hätte ich schon noch, aber das schreibe ich in einem anderen Thread. Ich wollte hier nur mal schreiben, wie und mit welchen Hilfsmitteln ich angefangen habe, jetzt Assembler zu lernen.


    BTW., Ich habe das Programm ohne Schrift auch von Hand assembliert. Und ja, die habe die Bytes nach dem STA opcode geswapt.. :-) Und ich weiss auch warum das so ist... :-)



    Gruss Jan

  • Das Buch ist die deutsche Übersetzung von „an introduction to microcomputers“ von adam osbourne. Das englische original ist von 1976. diese deutsche übersetzung ist vom tewi verlag münchen und kam 1978 auf den markt.


    Gruss Jan

  • Danke Jan1980 ich suche schon seit Jahren nach diesem einen “Buch” ! Mir geht es eigentlich genauso wie dir. Wie kann man da Programmieren wenn man nur zwei zahlen addiert. Ich hab schon sehr viele Bücher angefangen zu lesen und bin dann ausgestiegen... Vielleicht sollten wir eine Assembler Selbsthilfegruppe gründen :)

    Aktuell im Museum: Mac 128k, Mac Plus 1 MB, Mac Plus 4 MB, Mac SE/30, Apple 2+ und viele mehr...

  • Ich hab' mir mal die deutsche Ausgabe des Buchs von Adam Osbourne bei Amazon bestellt, knapp 3 Euro war jetzt nicht so teuer.

    Ob ich aber dazu schnell komme, mal den Buchinhalt abzuscannen, glaube ich nicht...

    "Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind."


    ... und schaut auch mal bei meinem Blog vorbei ...

  • Ich denke mal, in Anbetracht dessen, dass es das Buch original noch gebraucht gibt, und das zu einem günstigen Betrag, lohnt sich das einscannen nicht. Wer sich dafür interessiert, wird auch gerne zahlen für das original Buch.

    Es hat auch einen ganz anderen Nostalgiefaktor, wenn man zum einen Assembler am originalen Rechner arbeitet bzw lernt und zu dem vor diesem noch in Büchern nachschlägt... :-)



    Gruss Jan

  • Mir geht es eigentlich genauso wie dir. Wie kann man da Programmieren wenn man nur zwei zahlen addiert. Ich hab schon sehr viele Bücher angefangen zu lesen und bin dann ausgestiegen... Vielleicht sollten wir eine Assembler Selbsthilfegruppe gründen


    Na ja, es gibt schon mehr als Additionen in so einem Mikroprozessor. Sprünge, bedingte Sprünge, Logikfunktionen, Shifter, Lade/Speicherbefehle, Erhöhen/Erniedrigen (OK ist letztlich auch nur Addition), Stackbefehle, Flags, Adressierungsarten und dann je nach Maschine noch die wirklich lustigen Sachen, wie Interrupts und Grafik etc.


    Vielleicht, wenn sich genügend Interessenten finden, kann man da ja einen kleinen Online-Kurs bauen, indem man erstmal gewünschte Themen sammelt in einem Thread und jemand erklärt dann je eines davon in einem anderen, und alles Falsche wird dann noch nachträglich korrigiert. Problematisch dabei wäre eher, daß man dabei sinnvollerweise eine Prozessorarchitektur festlegen müßte, an der man das mit Beispielen auch zeigen und ausprobieren kann. 6502 würde sich da z.B. ganz gut anbieten, weil er so schön basic ist.

  • Wenn jemand sich tatsächlich die Arbeit machen würde, einen Assembler-Kurs abzuhalten, wäre ich auch gerne dabei.

    Ich habe zwar mehrfach versucht, da mit Büchern alleine einzusteigen, aber dabei bin ich auch immer wieder auf halbem Wege steckengeblieben.

    Ein gewissen Grundwissen ist also vorhanden, für die praktische Anwendung reicht das aber bei weitem nicht.

  • Meine Sammlung besteht zum Großteil aus CBMs und anderen Commodore Rechnern, daher sehr gerne 6502.

    Nachdem ich in letzter Zeit aber das eine oder andere über die Vorzüge der Z80-Familie gehört habe, und CP/M ja auch nicht uninteressant ist, bin ich da auch nicht abgeneigt.

    Und, obwohl die PC-Architektur total verkorkst, und Segmentitis eine üble Krankheit ist, kommt man um x86 ja auf Dauer auch nicht herum.

  • Mit diesem Buch habe ich damals 6502-Assembler für meinen Commodore 3032 gelernt. Leider ist dabei daraus schon ein ziemliches Kartenspiel geworden und etliche Seitenblöcke sind lose...


     

    Sammle Computer und Taschenrechner bis ca. 1990 und CPUs, Speicher und Speichermedien aller Art und suche einen Wang 2200, eine mc-modular-AT AT-CPU-Karte mit ISA-Bus-Platine, einen Commodore-Farbmonitor 1701 oder 1702 und ein TI Notebook TM 3000 von ca. 1991.

  • 6502 bzw 6510 wäre perfekt ! Ich denke, wenn man Assembler auf einem Prozessor kann bzw das Grundprinzip verstanden hat, dann fällt es nachher auch nicht mehr so extrem schwer, einen anderen Assembler im Bezug auf einen anderen Prozessor zu erlernen.


    Ich denke mal, der 6510 wird auf Grund des C64 am meisten hier vertreten sein ?!



    Gruss Jan

  • Also, es gibt sogar eine 6502 Assembler App fürs Handy, kann das mal bitte jemand anschauen? Wirkt auf mich wie die Eierlegende Wollmilchsau. Eine Mischung aus Buch, Beispielen, Programmierung und Ausprobieren


    https://play.google.com/store/…edlee90.learn6502assembly

  • Hätte jetzt eher Z80 gesagt, aber da scheint man ja im Verein eher in der Minderheit zu sein...


    Wenn aber jemand lieber mit einem Z80 was erklärt, dann sollte das ja auch kein Problem sein. Manche Sachen lassen sich ja sowieso nur mit einer CPU sinnvoll erklären, die das entsprechende Feature hat.


    Zur Markierung der CPU kann man die ja einfach oben fett in den Beitrag reinschreiben, z.B. =6502= , =Z80= , =ARM= . Halt ein Ausdruck, den man dann immer zur Kennzeichnung benutzt und schön mit der Suche finden kann.

    Für viele Sachen braucht man sowieso erstmal nur eine allgemeine Erklärung und danach können dann Beispiele evtl. nachkommen, wenn sich jemand findet, der eines parat hat.


    Richtig sinnvoll wird das ganze natürlich, wenn Leute anfangen ihre hier gezeigten Bücher zu lesen und das bereits selbst Gelernte aufschreiben.

  • Hätte jetzt eher Z80 gesagt, aber da scheint man ja im Verein eher in der Minderheit zu sein...

    Da muss ich dem Peter natürlich in alter Z-Tradition beipflichten!


    Mir ist aber durchaus bewusst, dass wir damit hier auf verlorenem Posten stehen. :P


    Um daraus aber keinen Glaubenskrieg zu machen könnte man sich ja auf einen ganz anderen Typ einigen. Der von Toast_r schon erwähnte x86 wäre natürlich eine Option, oder der wegen seines sauberen Befehlssatzes gerühmte 68000. Oder man macht es ganz modern und programmiert Atmels 8 Bitter :P

  • Also wenn ich den 6502 mit dem x86 vergleiche, dann ist der x86 eine ganz andere Hausnummer. Hab über den x86 ebenfalls ein Buch da. Hab das auch in mehreren Threads gelesen.


    Das Problem ist, mit dem Prozessor alleine ist es nicht getan. Man sollte sich auf ein ganzes System einigen. Alleine schon wegen der spezifischen Speicherbelegung. Deswegen denke ich, der C64 wäre am besten.


    Einen bestimmten Wert in eine bestimmte Speicherstelle kopieren, bringt ein bestimmtes Resultat.


    Zb


    Am C64 ändert die Bildschirmrahmenfarbe folgender Befehl im Basic. In schwarz.


    Poke 53280,0


    In Assembler sieht das so aus


    LDA #$00

    STA $d020


    Der Wert null wird im Speicher an die Adresse hex $d020 gesetzt.


    Beim vc20, atari etc funktioniert das nicht. Trotz gleichem Prozessor ist die Speicherbelegung anders.


    Deswegen würde es nichts bringen, wenn wir mit 10 Leuten an 8 verschiedenen Systemen Assembler lernen. Das Chaos wäre VORPROGRAMMIERT... 😊



    Gruss Jan