Beiträge von M. J. im Thema „farbinformationen besser speichern?“

    Leider befürchte ich, daß es ein kleines Problem mit dem Code gibt. Der Befehl BIT testet das höchste Bit (7) ab und übertragt den Inhalt ins N-Flag sowie das zweithöchste Bit (6), dessen Inhalt ins V-Flag kopiert wird. Dadurch kann man mit

    Code
    BIT	variable
    	BPL	bit_7_nicht_gesetzt
    	BMI	bit_7_gesetzt
    	BVC	bit_6_nicht_gesetzt
    	BVS	bit_6_gesetzt

    direkt testen, ob diese beiden Bits gesetzt sind oder nicht. In Deinem Fall willst Du aber das unterste Bit (0) testen. Zum Tests anderer Bits muß zuerst eine Maske in den Akkumulator geladen werden, die angibt, welche Bits getestet werden sollen, z. B.

    Code
    LDA	#%00000001
    	BIT	variable

    Der Prozessor führt dann beim BIT-Befehl eine UND-Operation durch mit dem Operanden, dessen Ergebnis dann im Z-Flag landet.
    Siehe hierzu auch: Bitte melde dich an, um diesen Link zu sehen.
    In Deinem Fall läßt sich das vielleicht so regeln:

    Code
    ;	vorher
    	LDA	print_line_offs      ;laenge holen
    	LSR		;	ungerade?
    	ROR		;	rotiere Bit ins höchste Bit
    	STA	print_line_flag	;speichern
    ;	dann
    	BIT	print_line_flag
    	BMI	+


    EDIT: In Deinem konkreten Fall läßt sich das Programm aber auch viel kürzer gestalten:

    Code
    LDA	print_line_offs      ;laenge holen
    	LSR		;	schiebe Bit 0 (gerade/ungerade) ins Carry-Flag
    	LDY	print_line_coloroffs ;color offset holen
    	LDA	(zpfd),y	;	color holen
    	BCS	+	;	Im Carry-Flag ist noch das Ergebnis enthalten für gerade/ungerade. ja dann low nibble speichern