
***********************************
* LISTING 2:
*
*          BIT-MAP-GRAPHIK
*        IN MASCHINENSPRACHE
* 
*  UMSETZUNG DES BASIC LISTINGS 1 
* ASSEMBLER ATMAS-II - PETER FINZEL
***********************************

* IOCB-STRUKTUR

ICCOM    EQU $342
ICSTA    EQU $343
ICBAL    EQU $344
ICBAH    EQU $345
ICBLL    EQU $348
ICBLH    EQU $349
ICAX1    EQU $34A
ICAX2    EQU $34B

CIOV     EQU $E456         CIO-VEKTOR

*  CIO-BEFEHLE

COPEN    EQU 3
CCLSE    EQU 12
CPBIN    EQU 11            HIER: PLOT
CDRAW    EQU $11           DRAWTO
CFILL    EQU $12           XIO 16

* ATARI GRAPHIK-VARIABLE

ATACHR   EQU $2FB          FARBE F. DRAW
FILLDAT  EQU $2FD          FARBE FUER FILL
ROWCRS   EQU $54           CURSOR-
COLCRS   EQU $55           POSITION
RTCLK    EQU $12           FRAME-ZAEHLER
VCOUNT   EQU $D40B         RASTER-ZEILE
WSYNC    EQU $D40A         SYNCHRONISIERUNG
COLPF0   EQU $D016         FARBREGITTER

* KONSTANTE DES DEMO-PROGRAMMES

MX       EQU 79            MITTELPUNKT X
MY       EQU 47            MITTELPUNKT Y
SCHRITT  EQU 5             SCHRITTWEITE

         ORG $A800         STARTADRESSE DES PROGRAMMES

***********************************
*             MANDALA
*
* DEMO-PROGRAMM ZEICHNET EINEN
*
*         HYPERBEL-KOERPER
*
***********************************
*
* GRAPHICS 7+16
*
START    LDA #7+16         GRAPHICS 7
         JSR GRAPHICS      OHNE TEXTFENSTER

*
* COLOR 3:PLOT 126,95
*
         LDA #3
         STA ATACHR        COLOR 3
         LDX #126          RECHTECK AUDFUELLEN
         LDY #95           IN DAS DIE
         JSR PLOT          FIGUR GEZEICHNET WIRD

*
* DRAWTO 126,0:DRAWTO 32,0
*
         LDX #126
         LDY #0
         JSR DRAW
         LDX #32
         LDY #0
         JSR DRAW

*
* POKE 765,3:POSITION 32,95:XIO 18,#6,0,0,"S:"
* (WIRD DURCH FILL ETWAS ELEGANTER)
*
         LDA ATACHR        FARBE WIE DRAW
         LDX #32
         LDY #95
         JSR FILL

*
* COLOR 1:FOR LAUF=MY TO ...
*
         LDA #1            COLOR 1
         STA ATACHR        
         LDA #MY           SCHLEIFE
         STA LAUF          VORBEREITEN

*
* PLOT MX-LAUF,MY
*
FORNXT   LDA #MX           BEGINN DER
         SEC               SCHLEIFE
         SBC LAUF
         TAX
         LDY #MY
         JSR PLOT

*
* DRAWTO MX,LAUF
*
         LDX #MX
         LDY LAUF
         JSR DRAW

*
* DRAWTO MX+LAUF,MY
*
         LDY #MY
         LDA #MX
         CLC
         ADC LAUF
         TAX
         JSR DRAW

*
* DRAWTO MX,MY+MY-LAUF
*
         LDA #MY
         ASL               ;STATT MY+MY
         SEC
         SBC LAUF
         TAY
         LDX #MX
         JSR DRAW

*
* DRAWTO MX-LAUF,MY
*
         LDA #MX
         SEC
         SBC LAUF
         TAX
         LDY #MY
         JSR DRAW

*
* ... TO 0 STEP -SCHRITT:NEXT LAUF
*     BEENDEN FOR-NEXT SCHLEIFE
*
         LDA LAUF          LAUFVARIABLE
         SEC
         SBC #SCHRITT      SCHRITT
         STA LAUF          ABZIEHEN
         BCS FORNXT        NOCH NICHT FERTIG->

*
* ZUR ABRUNDUNG DER GRAPHIK NOCH EINEN
* REGENBOGEN IM HINTERGRUND
* (IM BASIC PROGRAMM NICHT ENTHALTEN)
*
REGBOG   LDA VCOUNT        RASTERZEILE
         CLC               PLUS
         ADC RTCLK+2       FRAMEZHLER
         STA WSYNC         IN
         STA COLPF0+4      FARBREGISTER
         JMP REGBOG

LAUF     DFB 0             LAUFVARIABLE


* AB HIER DIE GRAFIK-UNTERPROGRAMME
*
***********************************
* GRAPHICS-BEFEHL
*
* AUFRUF: JSR GRAPHICS
* PARAMETER:
* <A>     0 BIS 15 (XLS)
*         0 BIS 11 (400/800)
***********************************

GRAPHICS PHA
         LDX #$60
         LDA #CCLSE        ZUERST KANAL 6
         STA ICCOM,X       SCHLIESSEN
         JSR CIOV
         PLA
         STA ICAX2,X       STUFE ANWAEHLEN
         AND #$F0
         EOR #$10
         ORA #$0C
         STA ICAX1,X
         LDA #COPEN        BEFEHL ZUM OEFFNEN
         STA ICCOM,X       DES SCREENS
         LDA #SDEVICE
         STA ICBAL,X
         LDA #SDEVICE/256
         STA ICBAH,X
         JSR CIOV
         RTS

SDEVICE  ASC "S:" DISPLAY-HANDLER

***********************************
* POSITIONIERUNG DES CURSORS
*
* AUFRUF: JSR POSITION
* PARAMETER: 
* <X>,<Y> JE NACH GRAPHIKMODUS
***********************************

POSITION STX COLCRS        PARAMETER IN
         STY ROWCRS        DATABASE DES
         LDA #0            DISPLAY-HANDLERS
         STA COLCRS+1      EINTRAGEN (ACHTUNG:
         RTS               X NUR BIS 255)

***********************************
* GRAPHIK-PUNKTE SETZEN
*
* AUFRUF: JSR PLOT
* PARAMETER: 
* <X>,<Y> JE NACH GRAPHIKMODUS
***********************************

PLOT     JSR POSITION
         LDX #$60          KANAL 6
         LDA #CPBIN        PLOT GEHT WIE
         STA ICCOM,X       PUT CHAR
         LDA #0            NUR EIN
         STA ICBLL,X       DATUM
         STA ICBLH,X
         LDA ATACHR        AKTUELLE FARBE
         JSR CIOV
         RTS

***********************************
* GRAPHIK-LINIEN ZEICHNEN
*
* AUFRUF: JSR DRAW
* PARAMETER: 
* <X>,<Y> JE NACH GRAPHIKMODUS
***********************************

DRAW     JSR POSITION
         LDX #$60          KANAL 6
         LDA #CDRAW        DRAW-BEFEHL
         STA ICCOM,X       IN IOCB
         JSR CIOV
         RTS

***********************************
* FILL ZUM FUELLEN VON FLAECHEN
*
* AUFRUF: JSR FILL
* PARAMETER: <A> FARBE 
* <X>,<Y> JE NACH GRAPHIKMODUS
***********************************

FILL     STA FILLDAT       FARBE FUER FILL
         JSR POSITION
         LDX #$60          SCREEN-IOCB
         LDA #CFILL        FILL BEFEHL
         STA ICCOM,X
         JSR CIOV
         RTS

