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