Kleine Hilfestellung für einen Neuling...?

  • Hallo zusammen,


    mein erstes Posting hier, und gleich eine kleine bitte um Hilfe. :winke:


    Kurz vorab - ganz tolles Forum, hab' mich nach Jahren Abstinenz vom Brotkasten endlich getraut, mal was in Assembler zu versuchen... dank dieses Forums!!! O.k., zugegeben, zwar nur im CCS64, aber immerhin...


    Also, ich hab' 'ne kleine Routine für ein Intro gefunden, hab' schon tapfer damit experimentiert, funzt auch alles.


    Jetzt folgendes...


    Pro IRQ-Durchlauf will ich ein paar modifizierte Zeichen (ab $2E00) in den verwendeten Charset (ab $2000) kopieren, um so ein kleines ASCII-Logo zu animieren.


    Meine kleine Routine sollte also für fünf Zeichen die entsprechenden acht Bytes in den Charset kopiert, mittels einer Zählertabelle sollten dann die nächsten fünf Animationsphasen in den Charset kopiert werden, usw.


    Meine Tabelle sollte dabei die für alle modifizierten Zeichen gleichen Offset-Werte beinhalten, die ich einfach auf die Basisadressen, ab denen die modifizierten Chars liegen, draufaddiert werden.


    So weit so gut, zumindest funktioniert die Routine soweit, dass er immer wieder das erste modifizierte Zeichen in den Charset kopiert... hab's auch im Monitor überprüft, wenn ich die Bytes in meinen modifizierten Zeichen ändere, werden die sofort in den Charset übertragen. Nur scheint mein geplantes Auslesen der Tabelle für die Offset-Werte nicht zu funktionieren. :nixwiss:


    Wahrscheinlich seh' ich nur den Wald vor lauter Bäumen nicht, mag mal einer drüberschauen? :rotwerd:


    Ich hoffe, ich hab's soweit ausreichend kommentiert.


    Gruß und Danke,
    Mnemonic

  • -Es müsste imho eher CPX#08 sein, aber das ist nicht die Ursache.
    -Ich glaube, da ist ein Denkfehler: LDA MODBASE1+TEMPADR,X heisst nicht, daß das Programm die Speicherstelle Modbase nimmt, den Inhalt von TEMPADR draufaddiert, das ganze als Adresse nimmt und dann noch mal X draufaddiert. So eine Adressierungsart Abs,ZP,X gibt's nicht! Es ist der Assembler, der die Addition auswertet, und beim Assemblieren rechnet er einmal MODBASE1+TEMPADR aus und trägt das ein.
    Ausserdem ist ein STA TEMPADR auch nicht so gut: So wie's da steht heisst das nämlich nicht, daß TEMPADR eine freie Speicherstelle innerhalb deines Programms ist, die den Wert 0 hat. Es heisst, daß überall statt TEMPADR die Speicherstelle 0 eingesetzt wird, und die hat eine Sonderfunktion. Schieb die besser woanders hin.


    Für den Zweck müsste es so gehen: Hinter das Ldx#00 ein Ldy Tempadr, alle lda,x in lda,y umwandeln ind hinter das INX noch ein INY.

  • Oha, hab' ich mir schon fast gedacht, dass ich da 'nen üblen Denkfehler hatte.


    So lange beschäftige ich mioch halt noch net damit... :platsch:


    Auf alle Fälle vielen Dank, ich probier das mal aus!


    Ach so, das mit dem CPX #$07 hab' ich so gemacht weil ich davon ausging, dass das erste Byte der zu kopierenden Zeichen ja auf meiner Basisadresse+0 liegt, und der dann ab da zählen muss, um den ganzen Char zu kopieren, z.B. von Basisadresse 2E00 bis 2E07.


    Deshalb ja dann auch in meiner Offsettabelle als nächsten Wert $08, damit der dann im nächsten Schritt bei z.B. $2E08 anfängt.


    Gruß und Danke,
    Mnemonic

  • Hmmm... und noch ne kleine Anmerkung.


    Der: JSR ANIMMAIN am Ende sollte wohl ein JMP sein, oder?
    Allerding wäre es sinnvoller (und kürzer) wenn du anstelle des
    BEQ SETBACK ein BNE ANIMMAIN machen würdest und den SETBACK-Code (ohne den JMP) direkt nach dem BNE ANIMMAIN platzieren würdest.

  • Danke für Eure Tips, werd' mir alles am Wochende nochmal in Ruhe anschauen.


    Hab' schon befürchtet, dass mein Ansatz insgesamt für den Allerwertesten ist, aber dem scheint dann Gott sei Dank doch net so zu sein... :juhu:


    Gruß,
    Mnemonic