HEY GUY'S!
NACH LANGER ZEIT MELDE ICH MICH MIT
MEINEM ASS-KURS ZURÜCK. WIE LETZTES MAL
VERSPROCHEN, KOMMEN HEUTE DIE FLAGS
DRAN.
WENN IHR SCHON MAL MIT EINEM MONITOR
(ZB. MIT DEM VON DER FC3) GEARBEITET
HAB, IST EUCH BESTIMMT SCHON DIESE REIHE
AUFGEFALLEN:
NV-BDIZC
DIE BUCHSTABEN HABEN FOLGENDE BEDEUTUNG.
N - NEGATIV FLAG
V - OVERFLOW FLAG
B - BREAK FLAG
D - DEZIMAL FLAG
I - INTERRUPT FLAG
Z - ZERO FLAG
C - CARRY FLAG
KOMMEN WIR NUN ZU DER BEDEUTUNG DER
EINZELNEN FLAG'S:
DAS NEGATIV FLAG:
-------------------
DAS NEGATIV (ODER AUCH VORZEICHEN) FLAG
GIBT AN OB EIN BYTE POSITIV ODER NEGATIV
IST.
UND ZWAR SIND ALLE BYTES VON #$00 - #$7F
POSITIV UND ALLE BYTES VON #$80 - #$FF
SIND NEGATIV.
WENN WIR UNS DIE ZAHLEN NÄHER ANSEHEN
STELLEN WIR FEST, DAß BEI DEN NAGATIVEN
ZAHLEN BIT 7 GESETZT IST. UND DIESES BIT
KÖNNEN WIR MIT BMI/BPL ABFRAGEN (BEIDE
RELATIVE ADRESSIERUNG).
MIT BMI (BRANCH IF MINUS) KANN MAN BEI
NEGATIVEN ZAHLEN VERZWEIGEN, ZB:
*=$1000
MARKE
LDA #$FF
BMI MARKE1
RTS
MARKE1
INC MARKE+1
JMP MARKE
NUN, WISST IHR WAS DIESES LISTING MACHT?
NEIN? GANZ EINFACH, BEIM ERSTEN
DURCHLAUF STELLT DAS BMI IN ZEILE 2 FEST
DAS DIE ZAEHL NEGATIV IST (BIT 7
GESETZT). DARAUF HIN VERZWEIGT
DAS PROGRAMM ZUR LABEL "MARKE1". ICH
WIRD MITTELS DES INC-BEFEHLS (DARAUF
GEHE ICH NÄCHSTE AUSGABE EIN) DER
INHALT VON ACCU ERHÖHT (MARKE+1 IST DAS
BYTE MIT DEM INHALT DAS IN DEN INHALT
GELADEN WIRD). NACHDEM DAS GETAN IST,
SPRINGT DAS PROGRAMM WIEDER ZUM BEGINN
(MARKE). HIER WIRD NUN DER ACCU MIT NULL
GELADEN, UND DA DIESE ZAHL POSITIV IST
WIRD DAS PROGRAMM BEENDET.
KOMMEN WIR NUN ZUM BPL BEFEHL. DIESER
HEIßT BRANCH IF PLUS. ÜBERSETZT HEIßT
DAS NATÜRLICH: VERZWEIGE WENN NEGATIV-
FLAG GELÖSCHT IST. VERSUCHT EINFACH MAL
DAS KLEINE PROGRAMM DA OBEN, NACH BPL
UMZUSCHREIBEN (IST GARNICHT SO SCHWER).
EIN KLEINER TIP NOCH: DAS GEGENTEIL VON
INC IST DEC (AUCH DAZU NÄCHSTES MAL
MEHR).
DAS OVERFLOW FLAG
===================
NUN, DIESES FLAG HABE ICH PERSÖNLICH
NOCH NIE GEBRAUCHT (NAJA, AUßER BEI DER
FLOPPY PROGRAMMIERUNG). DIESES FLAG
ZEIGT AN OB EIN ÜBERLAUF STATT GEFUNDEN
HAT. GEBRAUCHT WIRD Z.B. BEI DEM BIT
BEFEHL. (WENN BEIM ZUVERGLEICHENDEN BYTE
BIT6 GESETZT IST, WIRD AUCH DAS OVERFLOW
FLAG GESETZT (SIEHE UNTEN). MIT BVS/BVC
KANN MAN ENTSPRECHEND VERZWEIGEN. AUSGE-
SCHRIEBEN HEIßT BVS: BRANCH IF OVERFLOW
SET (RELATIV) UND BVC HEIßT: BRACH IF
OVERFLOW CLEAR. KOMMEN WIR NUN ZU DEM
BEISPIEL:
INHALT $1000 : #$BF INHALT $1000 : #$FF
LDA #$00 LDA #$00
BIT $1000 BIT $1000
HIER IST DAS OVER- HIER IST DAS OVER-
FLAG GELOESCHT FLAG GESETZT
DAS BREAK FLAG
================
DIESES FLAG ZEIGT AN OB EINE
UNTERBRECHUNG VORLIEGT (Z.B. DURCH EIN
BRK (IMPLIZIT)). FALLS DER PROZESSOR AUF
SO EIN BEFEHL TRIFFT VERZWEIGT ES IN
EINE ROUTINE (UND ZWAR ÜBER DEN VEKTOR
$0316/$0317; SO KANN MAN HIER AUCH IN
EINE EIGNE ROUTINE VERZWEIGEN). DER BRK
BEFEHL IST ALSO DER BEFEHL ZUM SETZEN
DES BREAK FLAG.
DAS DEZIMAL FLAG
==================
DIESES FLAG SIGNALISIERT, OB DER BCD
MODUS AKTIV IST. BCD STEHT FÜR: BINÄR
CODIERTE DEZIMALZAHL, DAS IST EINE
ABGEWANDELTE FORM DES BINÄR SYSTEMS.
HIER WERDEN NUR DIE ZAHLEN 0-9
VERWENDET. DAS FLAG KANN MIT SED GESETZT
WERDEN (BCD MODUS AKTIV). DIESER BEFEHL
IST AUCH WIEDER IMPLIZIT. CLD IST GENAU
DAS GEGENTEIL UND LÖSCHT DAS FLAG (AUCH
WIEDER IMPLIZIT).
DAS INTERRUPT FLAG
====================
OHNE DIESES FLAG LÄUFT AUF'M COMPUTER
NICHTS. ES SIGNALISIERT NÄHMLICH AUF DER
IRQ ZUGELASSEN IST ODER NICHT. DAS FLAG
WIRD MIT SEI (IMPLIZIT- SET INTERRUPT)
GESETZT UND MIT CLI (IMPLIZIT- CLEAR
INTERRUPT) GELÖSCHT. MIT DIESEN BEIDEN
BEFEHLEN ARBEITEN FAST ALLE PROGRAMME.
WILL MAN SEINEN COMPI AUFHÄNGEN GIBT MAN
EINFACH FOLGENDES EIN:
SEI
LOOP
JMP LOOP
DAS ZERO FLAG
===============
DIESES FLAG WIRD HÄUFIG FÜR
VERGLEICHSOPERATIONEN EINGESETZT (Z.B.
BEI SCHLEIFEN. DAS FLAG WIRD MIT BNE/BEQ
ABGEFRAGT (BEIDE RELATIV). DEN EINEN
BEFEHL HABEN WIR JA SCHON KENNEN
GELERNT. UND ZWAR BNE. DAS GEGENTEIL IST
BEQ (BRANCH IF EQUAL TO ZERO). MIT
DIESEN BEIDEN BEFEHLEN KANN MAN
WUNDERBAR EINE TASTATURABFRAGE
REALISIEREN:
*=$1000
TASTATUR
JSR $FFE4
BEQ TASTATUR
CMP #$20
BNE TASTATUR
RTS
NUN, DIE ROUTINE $FFE4 (GET-ROUTINE)
HABEN WIR JA SCHON KENNEN GELERNT. UND
WIE DAMALS GESAGT, GIBT DIE ROUTINE
EINE NULL (#$00) ZURÜCK, WENN KEINE
TASTE GEDRÜCKT WURDE. VIELLEICHT WUNDERT
IHR EUCH DAS DA GAR KEIN CMP #$00
STEHT, ABER DEN BEFEHL BRAUCHENN WIR
NICHT MIT EINGEBEN, DENN DER BEQ BEFEHL
VERGLEICHT SCHON VON SICH AUS MIT #$00.
WURDE ALSO KEINE TASTE GEDRÜCKT, WIRD
WIEDER ZUR TASTATURABFRAGE VERZWEIGT.
WIRD EINE TASTE GEDRÜCKT VERGLEICHEN WIR
MIT CMP #$20, OB DIE SPACE TASTE
GEDRÜCKT WURDE. CMP HEIßT: COMPARE WITH
ACCU UND HEIßT NATÜRLICH: VERGLEICHE MIT
ACCU. WURDE DIE SPACE TASTE NICHT
GEDRÜCKT (#$20 - #$20 =#$00) WIRD AUCH
WIEDER ZUR TASTATURABFRAGE VERZWEIGT,
FALLS DIE SPACE TASTE GEDRÜCKT WURDE,
WIRD DAS PROGRAMM VERLASSEN. SOVIEL ZUM
ZERO-FLAG
DAS CARRY FLAG
================
DAS CARRY FLAG GEHÖRT MIT ZU DEN
WICHTIGSTEN FLAG'S. MAN IHM KANN MAN ZUM
BLEISTIFTT: RECHENOPERATIONEN
DURCHFÜHREN ODER ROTIER ROTINEN
PROGRAMMEIERN. WIR WOLLEN UNS HIER ABER
NUR DIE RECHENOPERATIONEN ANSEHEN. DOCH
ZUERST WIEDER DIE BEFEHLE: MIT BCC/BCS
KANN MAN VERZWEIGEN UND MIT CLC/SEC
WIRD DAS FLAG GESETZT ODER GELÖSCHT.
DOCH DER REIHE NACH. KOMMEN WIR ZUERST
ZU DER ADDITION:
*=$1000
CLC
LDA #$00
ADC #$00
STA IRGENTWO
RTS
ALSO, MIT CLC LÖSCHEN WIR DAS CARRY
FLAG (CLEAR CARRY - IMPLIZIT), DANN
LADEN WIR DEN ACCU MIT #$00 UND DANN
WIRD MIT ADC NOCHMAL #$00 DAZUADDIERT.
ADC STEHT FÜR: ADD WITH CARRY. WIE WIR
ERKENNEN HEIßT ES HIER: ADDIERE MIT
CARRY. JETZT IST DAS ERGEBNIS NULL.
TAUSCHEN WIR ABER DAS CLC GEGEN DAS SEC
(SET CARRY - IMPLIZIT) AUS BEKOMMEN WIR,
NATÜRLICH EINE 1. WIR MERKEN UNS ALSO,
WENN WIR ADDIEREN GRUNDSÄTZLICH DAS
CARRY FLAG LÖSCHEN (AUßER WIR RECHNEN
MIT ÜBERTRAG). BEI DER SUBTRAKTION IST
ES FAST GENAUSO, NUR DAS HIER DAS CLC
GEGEN EIN SEC UND DER ADC BEFEHL GEGEN
DEN SBC BEFEHL AUSGETAUSCHT WIRD, ALSO
SO:
*=$1000
SEC
LDA #$30
SBC #$10
STA IRGENTWO
RTS
SBC SETHT HIER FÜR SUBSTRACT WITH CARRY.
BEI SUBTRAKTIONEN ALSO IMMER DAS CARRY
FLAG SETZEN. VON DEN ADC/SBC BEFEHLEN
GIBT ES NATÜRLICH NOCH ANDER
ADRESSIERUNGEN AUßER DIESER HIER (WAS
WOHL...).
VERSUCHT DOCH EINFACH MAL SELBER EIN
KLEINES PROG ZU SCHREIBEN DAS DIE BCC/
BCS BEFEHLE NUTZT.
SO, DAS SOLLS EIGENTLICH FÜR HEUT
GEWESEN SEIN.
CUL8R, CHECKY/PSYCHIC/ERROR 2000
Copyright 1997 X-Dome, Michael Steil