Assembler-Debugger gesucht

  • Hallo,


    Ich schreib gerade ein kleines Programm, mit dem man durch Druck auf p/P oder o/O den Bildinhalt nach links oder rechts schieben kann. Dazu werden Subroutinen aufgerufen, in denen der bildschirmspeicherinhalt links oder rechts rotiert wird.


    Irgend einen doofen Fehler habe ich aber gemacht, denn das Programm hängt nach dem ersten Tastendruck und tut nicht, was es soll:



    Kann mir jemand weiterhelfen?

    »It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration.« (Edsger W. Dijkstra)


    Homespage| Computerarchäologie | Blog | Forschung

    2 Mal editiert, zuletzt von Microprofessor ()

  • Das stürzt ab, weil HL recht schnell an die Adresse #0000 gelangt und dort die Bits munter weiterrotiert werden, was an dieser Stelle sehr schlecht ist.
    Statt


    RL (HL)
    INC H
    JR NZ,L1
    INC L
    JR NZ,L1


    sollte es


    RL (HL)
    INC L
    JR NZ,L1
    INC H
    JR NZ,L1


    heißen.
    Aber dann wird es nach dem zweiten Scrolling abstützen, weil HL dann auf 0 steht und in Deiner Schleife nicht wieder auf #C000 gesetzt wird.


    Das Scrolling wird so auch nur nach rechts funktionieren, wenn Du auf diese Weise nach links scrollen willst, mußt Du den Bildschirmspeicher rückwärts von #FFFF bis #C000 durchgehen, damit jeweils das links rausfallende Bit im vorhergehenden Byte landet.


    CU,
    Prodatron

  • Oh, danke. Doofer Fehler!

    »It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration.« (Edsger W. Dijkstra)


    Homespage| Computerarchäologie | Blog | Forschung

  • Jetzt, wo es prinzipiell funktioniert, sehe ich: Das Linksscrollen mit RL funktioniert nicht so, wie ich mir das dachte. Da muss ich noch mal ran ...

    »It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration.« (Edsger W. Dijkstra)


    Homespage| Computerarchäologie | Blog | Forschung

  • Das Scrolling wird so auch nur nach rechts funktionieren, wenn Du auf diese Weise nach links scrollen willst, mußt Du den Bildschirmspeicher rückwärts von #FFFF bis #C000 durchgehen, damit jeweils das links rausfallende Bit im vorhergehenden Byte landet.


    Sag ich ja ;)

  • Ja, wer lesen kann, ist klar im Vorteil. :D


    So einfach scheint das aber auch nicht zu sein:


    Code
    .links
    	LD HL,&FFFF
    	L1:
    	RL (HL)
    	DEC H
    	JR NZ,L1
    	DEC L
    	JR NZ,L1
    ret


    ... macht's jedenfalls nicht.

    »It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration.« (Edsger W. Dijkstra)


    Homespage| Computerarchäologie | Blog | Forschung

  • Zum Debugger: Schau dir mal WinApe an, der hat einen integrierten Debugger (und Assembler). Ich persönlich nehme sogar noch lieber den Debugger von WinCPC von Flynn. Der gefällt mir noch etwas besser. Damit kannst du dann sowas gut nachstellen.


    Noch ein kleiner Tipp: wenn du in deinem Assemblercode ein "db &ed, &ff" einfügst, springt WinApe automatisch in den Debugger. Damit wird nämlich ein Breakpoint signalisiert :).

  • Ich meinte natürlich eher einen menschlichen Debugger. :D

    »It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration.« (Edsger W. Dijkstra)


    Homespage| Computerarchäologie | Blog | Forschung

  • Du hast halt wieder H und L vertauscht ;)
    Das reicht allerdings auch nicht. Du mußt außerdem dafür sorgen, daß H nur bis #C0 runtergezählt wird.
    Sähe dann so aus:


    Code
    .links
    	LD HL,&FFFF
    	L1:
    	RL (HL)
    	DEC L
    	JR NZ,L1
    	DEC H
    	BIT 6,H
    	JR NZ,L1
    ret


    Folgendes wäre übrigens schneller (pro Byte nur 5 statt 8 Mikrosekunden):



    Nur mal um das Prinzip zu zeigen, wie man solche Schleifen beschleunigt :)


    CU,
    Prodatron

  • DANKE!!!


    Es soll aus Demonstrationsgründen langsam sein.

    »It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration.« (Edsger W. Dijkstra)


    Homespage| Computerarchäologie | Blog | Forschung