Hello, Guest the thread was called9.6k times and contains 112 replays

last post from M. J. at the

Zu dumm für Assembler? Was Hänschen nicht gelernt..

  • Überflieger sind die Leute, die in ein paar Stunden irgendwelche wilden Demos zusammencoden.

    So einen hatten wir im Wohnheim. Der kam aus Bottrop, hatte beim Proggen und gleichzeitigem Chatten über IRC und ICQ immer die (aktivierte) Blubb auf dem Schreibtisch stehen. Dann hämmerte er bei lauter Raggae-Musik den 8086-Code fürs neueste DOS-Demo in den PC, legte immer so den Kopf in den Nacken, um unter seiner Baseball-Kappe überhaupt was zu sehen, grinste breit bis zu den Ohren, und wenn dann einer sagte, das sei total krass, was er da macht, grinste er noch breiter, lachte und meinte "ach was, das ist total einfach, das kann jeder!". :rauch:

  • Ca. 1-2 Jahre später bekam ich dann vom Data Becker Verlag ein Assembler- Buch in die Hände. Da wurden die Assembler und Basic Befehle gegenüber gestellt, und da ist dann sofort der Groschen gefallen. Man zeigte kleine Programme in Basic und dazu den entsprechenden Assemblercode und erwähnte, dass Rechenoperationen immer nur über den Akku zu laufen haben.

    Das kenne ich. Hat bei mir genauso angefangen, allerdings auf einer anderen Plattform: es war der SHARP Pocket Computer PC-1401 mit der CPU SC61860 (aka ESR-H). Da hatten einer der Schulkollegen ein paar Unterlagen für Maschinensprache auftreiben können, mit denen ich aber nicht viel anfangen konnte. Später kam dann von Data Becker "Das große Sharp Pocket-Computer Buch" heraus und da waren ähnliche Vergleiche drin. Damit klappte dann der Einstieg in den Assembler.

    Anfangs war's holprig, bis einem klar wird, wieviel mächtiger die bis jetzt verwendeten Basic-Befehle sind. Zuerst ist dann das "Aha, das ist ja viel mehr Programmieraufwand"-Erlebnis da, bis man aufhört, "in Basic zu denken". Ab dann hat's angefangen, wirklich Spaß zu machen.


    Welches Buch war das von Data Becker, mit dem Du den Einstieg in Assembler geschafft hast?

  • So habd ich das auch mit 14 gemacht. Basic habe ich z.B. nie gelernt. Hab mich gleich an Assambler gewagt!

    Siehe Avatar das Intro war von mir. Wenn ich mir aber heute meine alten Listings anschaue muss ich schon stark grübeln wie ich das gemacht habe!

  • Ca. 1-2 Jahre später bekam ich dann vom Data Becker Verlag ein Assembler- Buch in die Hände. Da wurden die Assembler und Basic Befehle gegenüber gestellt, und da ist dann sofort der Groschen gefallen. Man zeigte kleine Programme in Basic und dazu den entsprechenden Assemblercode und erwähnte, dass Rechenoperationen immer nur über den Akku zu laufen haben.

    Das kenne ich. Hat bei mir genauso angefangen, allerdings auf einer anderen Plattform: es war der SHARP Pocket Computer PC-1401 mit der CPU SC61860 (aka ESR-H). Da hatten einer der Schulkollegen ein paar Unterlagen für Maschinensprache auftreiben können, mit denen ich aber nicht viel anfangen konnte. Später kam dann von Data Becker "Das große Sharp Pocket-Computer Buch" heraus und da waren ähnliche Vergleiche drin. Damit klappte dann der Einstieg in den Assembler.

    Anfangs war's holprig, bis einem klar wird, wieviel mächtiger die bis jetzt verwendeten Basic-Befehle sind. Zuerst ist dann das "Aha, das ist ja viel mehr Programmieraufwand"-Erlebnis da, bis man aufhört, "in Basic zu denken". Ab dann hat's angefangen, wirklich Spaß zu machen.


    Welches Buch war das von Data Becker, mit dem Du den Einstieg in Assembler geschafft hast?

    Hmm. :gruebel, es könnte jenes gewesen sein:

    https://www.c64-wiki.de/wiki/D…che_Buch_zum_Commodore_64


    Findest du auch in Forums Wolke ;)


    Edit: Auf der Seite 63 findest du das Beispiel, bei dem bei mir damals der Groschen (heute Cent) fiel.

    Arcade & Pinballs: F14 Tomcat, TOTAN, Visual Pinball, MAME Arcade Cab, Münzschieber Glückskarussel
    Musikproduktion: Korg Kronos 61 (2nd 256GB SSD 4GB), Korg M50 61, Akai MPD32, Alesis IO4, KORG Nanopad 2
    Retro: In liebevolle Hände abgegeben.
    Heimkino: Epson TW6000, Xbox 360 Kinect mit Amazon Prime, Nintendo Wii


    "Weise eine kluge Person auf einen Fehler hin und sie wird sich bedanken. Weise eine dumme Person darauf hin und sie wird dich beleidigen"


    Wenn man den Leuten erzählen würde, dass das Gehirn eine App ist, fangen sie vielleicht an, es zu gebrauchen.

    Edited 2 times, last by rogie67 ().

  • Ich habe jetzt auch relativ frisch Assembler gelernt. Mit dem C64 beschäftige ich mich wieder seit 15 Jahren mal mehr und mal weniger. Damals war ich hier im Forum als 8-Bit-User sehr aktiv. Ich hab mir damals das Buch "Assembler ist keine Alchemie" gekauft, was ja unterm Strich nichts anderes ist, als die Sonderausgabe aus der 64er als Buch gebündelt. Damals hab ich das alles nicht verstanden. Ich habe früher in verschiedenen Basic-Sprachen gearbeitet. c64-basic, c128-basic, gfa-basic und qbasic. Also war eine gewisse Vorkenntnis an der Programmiererei da, aber Assembler hab ich einfach nicht geschnallt. Ich musste immer weiter und weiter ausholen. Obwohl ich mich schon so lange mit Rechnern beschäftige, musste ich ehrlich gesagt feststellen, dass es da wissenstechnisch viele Lücken gab. zB. wie funktioniert der Prozessor innen, was ist IRQ, was ist NMI usw..

    Daraufhin habe ich mir das Buch "Einführung in die Microcomputertechnik" gekauft und natürlich gelesen. Das Buch ist von 1978 und widmet sich den Grundfunktionen eines Rechners, Zahlensystemen, Speicherarten, Adressierungen derselben und geht insbesondere auf die Prozessoren 6502, 6800 und 8080 ein. Danach habe ich dann das Buch "6502 Programmieren in Assembler" von Lance Leventhal gelesen. Parallel dazu hat Thoralf Asmussen im Forum VZEKC einen schönen Assembler-Kurs geschrieben, welchen ich natürlich auch laß.

    Soweit, so gut. Zahlensysteme, die Mnemonics, Schleifen bauen etc. waren nun zumindest drin. Mittlerweile nutze ich Crossassembler am PC, aber am Anfang und für kleinere Sachen nutze ich TASM am C64, manchmal auch den SMON. Jetzt ging es daran, das erlernte um zu setzen. Nun saß ich da ne Stunde vor dem TASM und wusste nicht was ich machen soll. Aus dem Internet habe ich dann ein Hello World Programm abgeschrieben und das analysiert. Dann habe ich das Programm mit einem flackernden Bildschirm versehen, dann habe ich die Schrift grob durchscrollen lassen. Unterm Strich musste ich feststellen, Assembler lernen ist wie Klavier spielen, Bücher zu lesen alleine nützt da nichts, man muss es einfach machen und so seine Erfahrung sammeln ! Aus dem Internet und hier aus dem Forum hab ich mir dann einige Listings ausgedruckt und analysiert, was mir auch sehr viel gebracht hat. Wichtig ist auch, sich kleine Ziele zu setzen und wirklich step by step vor zu gehen.

    In den abgetippten Listings kamen jetzt natürlich geheimnisvolle Adressen zum Vorschein. Daraufhin habe ich mich mit den Kernal-Routinen beschäftigt und mit den Adressen von VIC, CIA. Irgendwann saß ich dann abends hier vorm Forum und hab mir wieder ein paar Listings angeschaut und ich konnte sie lesen !!! WTF, ich konnte das Assembler Listing plötzlich lesen und deuten ohne mich durch irgendwelche Bücher zu quälen.


    Ich bin jetzt trotz alledem noch ziemlich am Anfang. Zumindest kann ich Sprites mit dem Joystick über den Bildschirm wandern lassen, Kollisionen abfragen, Laufschriften machen etc. . Alles learning by doing. Kleine Ziele setzen und die dann umwandeln.


    Ich habe ab demnächst noch ein anderes Projekt am Start. Dazu brauche ich zwingend 8080 Assembler. Diesen hab ich jetzt binnen 4 Wochen gelernt.


    Vor weniger als einem Jahr bin ich die Sache in aller Gemüts Ruhe angegangen und es hat funktioniert. Ich denke, jeder braucht da seine eigene Vorgehensweise. Das war jetzt meine kleine Assembler Lerngeschichte.



    Gruß Jan

  • Aber würde man die BASIC-Rechnung 1-zu-1 in Maschinensprache übersetzen (also als Gleitkommarechnung), dann wäre das nicht so extrem viel schneller, weil dann "nur" der Interpreter-Overhead wegfällt.

    Man kann das auch andersherum betrachten: Der BASIC-Interpreter zwingt dich zur Verwendung von (langsamen) Fliesskommazahlen, wenn du in Assembler programmierst kannst du dir selbst aussuchen wie gerechnet wird und die für das aktuelle Problem effizienteste Methode wählen.

  • Heutzutage gibt es doch auch schicke Lernprogramme. Z.B. Human Resource Machine von den Machern von World of Goo. Für alle ab vielleicht 10 Jahren geeignet, fängt ganz vorne an und ist noch witzig gemacht. Wenn man selbst irgendwo mit dem C64 einsteigt, nimmt man sich halt schnell zu viel vor, weil man gar nicht weiß, was eigentlich kompliziert ist (Assembler lernt man nicht, wenn man sich mit Input und Output rumschlagen muss, was beim C64 aber nicht anders geht). Human Resource Machine dagegen spielt man erstmal in ein paar Stunden durch und weiß dann grundsätzlich, wie Assembler funktioniert (wenn auch nicht die 6510-Variante, aber Details).


    Wenn man's dann heftiger haben will, holt man sich TIS-100 oder Shenzen I/O und irgendwo auf dem Weg den C64. :)

  • Wie multipliziert, teilt, cos/sin man eigentlich unter ASM ? Kernalrountinen benutzen bestimmt.. .

    Aber so einfach herumrechnen mit seinem Zeugs wie in Basic geht das ja sicher nicht vonstatten :). Allein dieser leidige Fakt wäre nicht so mein Stil und Fall dann.

    Anderes: Selbst eine Tastatureingabe (so'n Input?) zieht da ja schon einen Rattenschwanz an nötigem coding mit sich.


    Naja - aber es stimmt schon: In ASM erstmal mit kleinsten Ideen anfangen (Speicherbereiche umkopieren, oder 'mal einen Soundeffekt coden), dann erst kann u.U. nach und nach noch irgnedwann mind. geringfügig mehr kommen.

  • Heutzutage gibt es doch auch schicke Lernprogramme. Z.B. Human Resource Machine von den Machern von World of Goo.

    Wahhh - wie geil ist das denn. Das kannte ich noch gar nicht. Gekauft bei gog.com für €12.49. Danke :!:


    Und Daumen hoch für TIS-100 und Shenzen I/O :thumbup:

    Wenn man die beiden Spiele durch hat, kann man sich seinen Arcade Automaten aus 74xx Chips zusammen löten und über eine Hex-Tastatur programmieren :)

    Das sind wirklich schöne Assembler / Elektronik Lernspiele. Es stellt sich mir nur die Frage, ob es nicht einfacher ist, gleich Assembler auf dem C64 zu lernen?


    Es gibt auch recht gut gemachte Video Assembler Kurse: 64bites

    Ob es einem das Preiswert (sic!) ist oder ob man damit besser lernt als auch Büchern muss jeder selbst raus finden.

    Die Serie wurde auch irgendwann mal hier im Forum diskutiert -> Suchfunktion -> "64bites"

  • Moin,


    wie viele von Euch habe ich meine Gehversuche in Assembler im zarten Jünglingsalter hinter mich gebracht. Kann mich noch erinnern, dass nach einigen Gehversuchen der 64er Kurs "Assembler ist keine Alchimie" den Durchbruch brachte. Vieles war dann nur noch Trial and Error, allerdings habe ich in jungen Jahren auch mehr Geduld mitgebracht. Ein richtiges Ass bin ich nie gewesen, hat allerdings gereicht für ein paar Demos und Intros (manche finden sich auch bei CSDb), doch wenn ich heute sehe, was da alles aus der kleinen Kiste geklopft wird, dann bin ich Lichtjahre davon entfernt.


    Mittlerweile ist das Interesse wieder da und ich beschäftige mich in der Freizeit wieder damit. Allerdings fällt mir der Einstieg sehr schwer und mir geht es da nicht besser als anderen hier. Assembler, so musste ich für mich feststellen, ist leider nicht wie Rad fahren. Vieles ist einfach weg und muss es mir wieder anlesen und dann umsetzen.


    Jetzt habe ich drei Wochen Urlaub und da kann ich mich wieder intensiver mit der Kiste beschäftigen, meinen Sohn will ich da gleich abholen, das Gehirn ist noch frisch und vielleicht kann er mir dann zeigen wo es langgeht :o ;)

  • Wie multipliziert, teilt, cos/sin man eigentlich unter ASM ? Kernalrountinen benutzen bestimmt.. .

    Aber so einfach herumrechnen mit seinem Zeugs wie in Basic geht das ja sicher nicht vonstatten :). Allein dieser leidige Fakt wäre nicht so mein Stil und Fall dann.

    Es kommt drauf an. In vielen Fällen (also z.B. bei Spielen oder Demos) werden die Werte, die man benötigt, einfach schon im Vorfeld ausgerechnet und in einer Tabelle abgelegt. Man greift dann nur noch mit einem Index drauf zu anstatt tatsächlich die entsprechende Berechnung durchzuführen. Ansonsten wird halt oft auch mit Faktoren wie 2, 4, 8 usw. gerechnet, da sich das ganz einfach per Bit-Shifting lösen lässt. Also wenn Du z.B. wissen willst, in welchem 8x8-Charblock sich Dein Sprite befindet, dann macht man einfach 3x rechts-shift auf die X- und die Y-Position. Will man hingegen mit "ungeraden" Werten rechnen, z.B. wenn die 40-Zeichen-Breite für irgendwas benötigt wird, dann macht man sich eher eine Tabelle von 25 Werten die den 25 Bildschirmzeilen entsprechen und legt dort seine Werte ab (z.B. 0, 40, 80, 120 usw. oder auch die Anfangsadresse der Zeile, je nachdem was man damit vor hat).

  • Es kommt drauf an. In vielen Fällen (also z.B. bei Spielen oder Demos) werden die Werte, die man benötigt, einfach schon im Vorfeld ausgerechnet und in einer Tabelle abgelegt. Man greift dann nur noch mit einem Index drauf zu anstatt tatsächlich die entsprechende Berechnung durchzuführen. Ansonsten wird halt oft auch mit Faktoren wie 2, 4, 8 usw. gerechnet, da sich das ganz einfach per Bit-Shifting lösen lässt. Also wenn Du z.B. wissen willst, in welchem 8x8-Charblock sich Dein Sprite befindet, dann macht man einfach 3x rechts-shift auf die X- und die Y-Position. Will man hingegen mit "ungeraden" Werten rechnen, z.B. wenn die 40-Zeichen-Breite für irgendwas benötigt wird, dann macht man sich eher eine Tabelle von 25 Werten die den 25 Bildschirmzeilen entsprechen und legt dort seine Werte ab (z.B. 0, 40, 80, 120 usw. oder auch die Anfangsadresse der Zeile, je nachdem was man damit vor hat).

    Das kann ich nur zu 100% unterschreiben.

    Und zusätzlich noch: Mit Fliesskomma rumrechnen ist in 95% der Fälle nicht der richtige Ansatz. Fast alles was schnell und numerisch stabil ist wird in Assembler mit Fixpunkt Zahlen berechnet. Also je nach dem Zahlenbereich und der Genauigkeit die man abdecken will, rechnet man z.B. in 8.8 oder 16.8 oder so, d.h. 8 bits vor dem Komma und 8 bits hinter dem Komma. Dadurch braucht man dann quasi nur ganzzahlige Matheoperationen.

  • Zum schnellen Rechnen mit Kommazahlen kann ich da folgendes sagen:

    Ich habe im Studium bei der Vorlesung für FPGA Programmierung folgende Methode kennengelernt:


    Die Zahl 1 wird um 10 Bits nach links verschoben und wird somit 1024, ebenso auch alle anderen Zahlen. Nun kann z.B zwei solche Zahlen mulitplizieren oder auch addieren. Man muss dann im Ergebnis berücksichtigen, diese Verschiebungen wieder rückgängig zu machen. So kann man sich in vielen Fällen das "taktintensive" Rechnen mit Fliesskommazahlen sparen.


    Das Ist wohlgemerkt schon über 25 Jahre her. Inzwischen dürfte das wohl durch die moderne Hardware überflüssig sein, aber hier im Forum reden wir ja über "alte" Hardware (und alte Säcke :D:D:D).


    Wenn man z.B immer etwas mit konstanten Werten muliplizieren muss, so kann sich auch auf folgende Überlegung stürzen:


    C = a*b

    b = a1+a2

    => C = a * (8 + 32) = a*8 + a*32


    Nehmen wir mal an, b muss 40 sein, dann kann man


    40 = 8 +32


    ansetzen, weil


    8 = 2^3 und


    32 = 2^5


    2^n lässt durch Verschiebebefehle realisieren.


    => C = a << 3 + a <<5


    Das kann man z.B. so machen (hier eine Muliplikaiton mit 40):

    Code
    1. LDA #1
    2. CLC
    3. ASL A
    4. ASL A
    5. ASL A
    6. STA MEM ; Speicher
    7. ASL A
    8. ASL A
    9. ADC MEM

    Arcade & Pinballs: F14 Tomcat, TOTAN, Visual Pinball, MAME Arcade Cab, Münzschieber Glückskarussel
    Musikproduktion: Korg Kronos 61 (2nd 256GB SSD 4GB), Korg M50 61, Akai MPD32, Alesis IO4, KORG Nanopad 2
    Retro: In liebevolle Hände abgegeben.
    Heimkino: Epson TW6000, Xbox 360 Kinect mit Amazon Prime, Nintendo Wii


    "Weise eine kluge Person auf einen Fehler hin und sie wird sich bedanken. Weise eine dumme Person darauf hin und sie wird dich beleidigen"


    Wenn man den Leuten erzählen würde, dass das Gehirn eine App ist, fangen sie vielleicht an, es zu gebrauchen.

    Edited 2 times, last by rogie67 ().

  • Die Zahl 1 wird um 10 Bits nach links verschoben und wird somit 1024, ebenso auch alle anderen Zahlen.

    Das nennt sich dann Festkommaarithmetik. :) Habe ich auch schon verwendet, weil man damit halt mit Kommazahlen arbeiten kann aber trotzdem schnelle Operationen verwenden kann. Auf heutiger Hardwar ist das kein Problem weil die mit Fliesskomma genauso schnell umgehen wie mit natürlichen Zahlen. Hat aber natürlich auch die Einschränkung dass man den Zahlenraum verkleinert und die Genauigkeit eine andere ist.

  • Das nennt sich dann Festkommaarithmetik. :) Habe ich auch schon verwendet, weil man damit halt mit Kommazahlen arbeiten kann aber trotzdem schnelle Operationen verwenden kann. Auf heutiger Hardwar ist das kein Problem weil die mit Fliesskomma genauso schnell umgehen wie mit natürlichen Zahlen. Hat aber natürlich auch die Einschränkung dass man den Zahlenraum verkleinert und die Genauigkeit eine andere ist.

    Ah, danke mir ist halt der Name dafür entfallen :D:D:D

    Arcade & Pinballs: F14 Tomcat, TOTAN, Visual Pinball, MAME Arcade Cab, Münzschieber Glückskarussel
    Musikproduktion: Korg Kronos 61 (2nd 256GB SSD 4GB), Korg M50 61, Akai MPD32, Alesis IO4, KORG Nanopad 2
    Retro: In liebevolle Hände abgegeben.
    Heimkino: Epson TW6000, Xbox 360 Kinect mit Amazon Prime, Nintendo Wii


    "Weise eine kluge Person auf einen Fehler hin und sie wird sich bedanken. Weise eine dumme Person darauf hin und sie wird dich beleidigen"


    Wenn man den Leuten erzählen würde, dass das Gehirn eine App ist, fangen sie vielleicht an, es zu gebrauchen.