6502 Lean Code durch sparsame Flags

Man ruft ein Sub. Das Sub soll signalisieren ob einen Bedingung erfüllt ist oder nicht. 

Nun ja, wir lassen das Sub einfach ein Flag entsprechend der zu prüfenden Bedingung setzten. Der Aufrufende Programmteil prüft nun diese Flag und reagiert entsprechend. Könnte so aussehen:

JSR CHECK
LDA FLAG
CMP #ISOK
BNE NOTOK
ALLES KLAR. DO WHATEVER….

NOTOK:
DO WAHTEVER…..

CHECK:
LDA BEDINGUNG
CMP #ERFÜLLT
BNE NICHTERFÜLLT
LDA #ISOK
STA FLAG
RTS

NICHTERFÜLLT
LDA #NOTOK
STA FLAG
RTS

Umständlich!

Wir verschwenden ein ganzes Byte für das Flag und wir müssen LDA / STA und LDA / CMP ausführen. Noch mehr verschwendeter Platz! Nun bietet unser 6502 eine Menge Register. Warum nicht das Carry- Flag als „Flag“ nutzen. Dafür ist es schließlich gedacht.

Das Bespiel oben könnte dann so aussehen:

JSR CHECK
BCS ISOK
DO WHATEVER…. (Not Ok!)

ISOK:
ALLES KLAR, DO WHATEVER!

CHECK:
LDA BEDINGUNG
CMP #ERFÜLLT
BNE  NICHTERFÜLLT
SEC  (Bedingung ist erfüllt)
RTS

NICHTERFÜLLT:
CLC
RTS

Recht elegant…….

Advertisements

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s

%d Bloggern gefällt das: