Beiträge von root42 im Thema „Assembler ist DOCH Hexenwerk“

    Naja der Bildschirmspeicher ist ja auch wieder unterteilt in Zeile,Spalte. Das wäre ja nur eine andere Herangehensweise als die Cursor Position, oder ?

    Das Video guck ich mir nachher mal an :)

    Naja es kommt darauf an was du programmierst. Wenn du nur Text hast, dann bist du mit der Printanweisung sehr gut bedient.

    Hast du hingegen Grafikelement, dann bist du mit dem Bildschirmspeicher besser dran, obwohl man auch mit der Printanweisung Grafikelemente platzieren kann.

    Ich glaube er will an Position X,Y einen Buchstaben plotten. Und X,Y soll beliebig auf dem 320x200 Raster sein. Das geht IIRC nicht, oder? Da muss man händisch jedes Pixel plotten? Bzw. je nachdem was das Endresultat sein soll würde man ganz andere Herangehensweisen nehmen...

    Also da verlasse ich endgültig mir bekannte Gewässer, auf dem PC kann ich dir das alles erklären, aber ja, das war mein Verständnis, dass der C64 entweder im Textmodus ist, und da am fixen 8x8 Raster Zeichen ausgeben kann, oder aber im Grafikmodus, wobei einzelne Pixel setzen da aber auch nicht super trivial ist... Man möge mich bitte korrigieren, wenn hier jemand mit mehr Ahnung ist!

    Danke schonmal für die Ausführungen, Programm läuft erstmal soweit :thumbup:

    Nächste Frage die direkt aufkam :

    Gibt es beim C64 auch einen eigenen Grafik Cursor und wenn ja, kann ich diesen benutzen um ein Zeichen zu "print"en ? Also nicht über Zeile,Spalte sondern direkt über die Pixel-Position ?

    Geht das überhaupt? Man kann doch wenn ich mich recht entsinne entweder Text ODER Grafik machen (abseits von raster interrupt-tricks)? Wenn du einen der Pixel-Modi verwendest, musst du vermutlich die Zeichen selber plotten... Ich glaube so wie bei GWBASIC auf dem PC geht das auf dem C64 nicht...

    root42

    Ok, dann nochmal für ASM Dummies (wie mich) : Warum $FFF0 ?

    Auf der Wiki Seite steht :

    Code
    springt nach 58634 ($E50A)

    Also wozu der Umweg über $FFF0 ?

    Das überlasse ich Krill... :biggrin: Mein Verständnis ist, dass die Sprungtabelle die "Offizielle" API des Kernal ist, und garantiert immer so aussieht. Wo die genauen Adressen der Routinen sind, könnte von ROM zu ROM THEORETISCH unterschiedlich sein -- aber ist es vermutlich nicht. Ob das aber z.B. auf einem SX64 genauso wie auf einem C64 ist, weiss ich nicht. Oder auf einem C128 im C64 Modus...

    Also hier ist der Disassemblierte Code aus dem Bitte melde dich an, um diesen Link zu sehen.:

    Code
    Loc_e50a                 BCS Loc_e513
    $E50C                    STX $D6
    $E50E                    STY $D3
    $E510                    JSR Loc_e56c
    Loc_e513                 LDX $D6
    $E515                    LDY $D3
    $E517                    RTS

    $E50A hat also erstmal eine Branch-Anweisung (Branch on carry set - take branch when C flag is set). Ich bin ja gar kein 6502 Experte, aber vermutlich geht da was bei dir schief. Vermutlich ist bei dir das C gesetzt, sollte aber gelöscht sein. Denn dann fällt man ja nach $E50C durch und das funktioniert ja für dich. Von dem was ich da sehe schaltet man mit dem C Flag also das setzen (STY) oder lesen (LDY) der Cursorposition um. Kann das sein?

    EDIT: Krill war schneller und hat auch mehr Ahnung als ich. :)