
***********************************
* 80-ZEICHEN MIT GRAPHICS 8       *
* AUFRUF AUS BASIC:               *
* A=USR(1536,ADR(A$),LEN(A$),ATT) *
* PETER FINZEL               1986 *
*                                 *
* ASSEMBLER: ATMAS-II             *
***********************************

* BETRIEBSSYSTEMADRESSEN:

OLDCOL   EQU $5B           X-POS. DES CURSORS
OLDADR   EQU $5E           CURSORADRESSE
CHBAS    EQU $02F4         PAGENR. DES ZEICHENSATZES

* BELEGUNG DER ZEROPAGE

         ORG $CB

BILD     EQU *             ZEIGER IN HI- RES BILDSCHIRM
XOFFSET  EQU *+2           ABSTAND IN BYTES VON OLDADR
ZSATZ    EQU *+3           ZEIGER IN ZEICHENSATZ
STRING   EQU *+5           ZEIGER IN TEXTSTRING
LAENGE   EQU *+7           LAENGE DES STRINGS
SINDEX   EQU *+8           INDEX IN STRING
SPALTE   EQU *+9           SCHREIBSPALTE
FLAG80   EQU *+10          8O-ZEICHEN AUSGABE
ATTBUT   EQU *+11          DOPPELT HOHE ZEICHEN
ZALT     EQU *+12          ZWISCHENSPEICHER
HILF     EQU *+13          HILFSREGISTER

****************************************
* 80-ZEICHEN IN GRAPHICS 8
* AUFRUF: X=USR(1536,ADRESSE,LAENGE,ATT)
* ATTRIBUT:   0: NORMAL, 40 ZEICHEN
*            64: DOPPELT HOCH, 40 ZEICHEN
*           128: NORMAL , 80 ZEICHEN
*           192: DOPPELT HOCH, 80 ZEICHEN
****************************************

         ORG $0600         PROGRAMM IN ZEROPAGE

         PLA               # DER ARGS
         PLA               STRINGADRESSE
         STA STRING+1
         PLA               LSB
         STA STRING
         PLA               MSB DER LAENGE
         PLA               LAENGE
         STA LAENGE        (MAX. 255 ZEICHEN)
         PLA
         PLA               ATTRIBUT
         STA ATTBUT        ABLEGEN

*
* VORBESETZUNGEN, SCHREIBSPALTE BERECHNEN
*
         LDA #0            INDEX IN STRING
         STA SINDEX        ZURUECKSETZEN
         STA XOFFSET
         STA FLAG80
         LDA OLDCOL+1      POSITION DES
         STA HILF          GRAPHIK-CURSORS
         LDA OLDCOL        DURCH VIERTEILEN
         ROR HILF          ERGIBT DIE SCHEIB-
         ROR               ;SPALTE
         ROR HILF
         ROR
         STA SPALTE

*
* SCHLEIFE ZUR AUSGABE BEGINNT
*

WEITER   LDA SPALTE        ZEILENENDE?
         CMP #80           DANN NICHTS MEHR
         BCS W80ENDE       AUSGEBEN! - >
         ROR               ;FLAG FUER UNGERADE
         ROR FLAG80        SPALTENZAHL (TRICK!)
         LDA OLDADR        CURSOR ADRESSE DES
         STA BILD          LETZTEN PLOT-PUNKTES
         LDA OLDADR+1      UEBERNEHMEN
         STA BILD+1
*
* ZEICHENCODE AUS STRING, ATASCII IN
* INTERNEN CODE UMRECHNEN
*
         LDY #0
         STY ZSATZ+1       VORBESETZUNG
         LDY SINDEX
         LDA (STRING),Y    ASCII-ZEICHEN IM AKKU
         AND #$7F          INVERSBIT MASKIEREN
         CMP #96           JETZT UMWANDLUNG I  BILDSCHIRMCODE
         BCS WENDE         CODE STIMMT - >
         CMP #32           IST GRAPHIKZEICHEN?
         BCS ALPHA         NEIN, IST ALPHAZEICHEN - >
         ORA #64           PLUS 64
         BNE WENDE         UMWANDLUNG FERTIG - >
ALPHA    SEC
         SBC #32           KORREKTUR BUCHSTABEN UND ZAHLEN

*
* ADRESSE DES BITMUSTERS IM ZEICHENSATZ
*

WENDE    ASL               ;BILDSCHIRMCODE MAL
         ASL               ;ACHT IST ZEIGER IN
         ROL ZSATZ+1       DEN ZEICHENSATZ
         ASL
         ROL ZSATZ+1
         STA ZSATZ         LSB IST FERTIG
         CLC
         LDA ZSATZ+1
         ADC CHBAS         BASISADRESSE DES
         STA ZSATZ+1       ZEICHENSATZES DAZU

*
* SCHLEIFE ZUR AUSGABE EINES ZEICHENS
*
         LDX #8            ACHT ZEILEN/ZEICHEN
ZEILE    LDY #0
         LDA (ZSATZ),Y     EINE ZEILE DES ZEICHENS
         BIT ATTBUT        40ER MODUS?
         BPL M2            JA - >
         JSR WNDEL80       IN 8OER UMWANDELN
M2       JSR DATOUT        AUSGEBEN
         BIT ATTBUT        DOPPELT HOCH?
         BVC M3            NEIN - >
         JSR DATOUT
M3       INC ZSATZ         NAECHSTES ZEICHENMUSTER
         DEX
         BNE ZEILE         NAECHST. ZEILE
         INC SPALTE        NAECHSTE SPALTE
         BIT ATTBUT        40-ZEICHEN-MODUS?
         BPL M4            JA - >
         BIT FLAG80        UNGERADE ADRESSE?
         BMI M5            JA, DANN INDEX WEITER
         BPL M6            NEIN, INDEX BLEIBT!
M4       INC SPALTE        FUER 40ER MODUS 2 SPALTEN
M5       INC XOFFSET       VIDEORAM WEITER
M6       INC SINDEX        ZEIGER IN STRING
         DEC LAENGE        NOCH ZEICHEN DA?
         BNE WEITER        JAWOHL - >
W80ENDE  RTS

*************************************
*  40ER ZEICHENSATZ IN 80ER UMRECHNEN
*************************************

WNDEL80  STA ZALT          40ER ZEICHENMUSTER
         LDA #0            NEUES MUSTER
         STA HILF          VORBESETZEN
         LDY #3            VIER BIT BEARBEITEN
SPALTE80 LDA BITTAB,Y      SPALTEN-MASKE
         BIT ZALT          BIT GESETZT?
         BEQ W80NIX        NEIN - >
         LDA U80TAB,Y      UMRECHENTABELLE
         ORA HILF
         STA HILF
W80NIX   DEY               SCHON ALLE SPALTEN?
         BPL SPALTE80      NEIN->
         LDA HILF          EBEN BERECHNETES MUSTER
         BIT FLAG80
         BMI UNGER         UNGERADE X-POSITION->
         ASL               ;SONST IN UNGERADE
         ASL               ;POSITION SHIFTEN
         ASL
         ASL
UNGER    RTS

*
* TABELLEN ZUR UMWANDLUNG IN 80ER Z-SATZ
*

BITTAB   DFB $01,$04,$10,$20
U80TAB   DFB $01,$02,$04,$08

*************************************
* BILD-DATEN IN SCREEN EINTRAGEN
* ZEIGER AUF NAECHSTE GRAPHIKZEILE
*************************************

DATOUT   PHA               AKKU MERKEN. . .
         LDY XOFFSET
         ORA (BILD),Y      MIT VORH. BILD VERKNUEPFEN
         STA (BILD),Y      UND EINTRAGEN
         CLC
         LDA BILD          NAECHSTE ZEILE IST
         ADC #40           40 BYTES WEITER
         STA BILD
         BCC DAT1          MSB NICHT VERGESSEN
         INC BILD+1
DAT1     PLA               AKKU RESTAURIEREN
         RTS

