
         LST   OFF
         ORG   $9000

*********************************
*                               *
*    INTERPRETEUR D'IMAGES      *
*  LAURENT RUEIL & ALDO RESET   *
*  (C) 1983  CLEAN CRACK BAND   *
*                               *
*********************************

* Le fichier d'origine est SHOW.S
* sur la disquette "compresseur
* graphique et Zoom Graphix"
* de Laurent Rueil.

* Modification pour utilisation
* avec l'intro de Muryaden 1.
* (C) 1989 BYTLEJUICE
*
* Commentaires source CCB
* car il n'y en avait aucun!
* (C) 2014 DECKARD

* Page 0

VAL      EQU   $05        ; valeur @ {crire sur {cran graphique
NB_VAL   EQU   $06        , nbr de fois {criture VAL
GBASL    EQU   $26        ; pointeur {cran calcul{e par HPOSN
GBASH    EQU   $27
PTR_DATA EQU   $3C        ; pointeur datas @ afficher
HPAG     EQU   $E6        ; $20=page 1 / $40 = page 2
COL_DEB  EQU   $FC        ; byte colonne d{but
COL_CUR  EQU   $02        ; byte colonne courante
COL_FIN  EQU   $FE        ; byte colonne fin
LIG_DEB1 EQU   $FD        ; byte ligne d{but
LIG_DEB2 EQU   $04        ; LIG_DEB1+1
LIG_FIN  EQU   $FF        ; byte ligne fin

*-------------------------------

UNPACK

* LDA #<$6000
* STA $3C
* LDA #>$6000
* STA $3D

         NOP              ; on ne pointe pas sur une adresse fixe
         NOP              ; contrairement @ la d{mo CCB
         NOP
         NOP
         NOP
         NOP
         NOP
         NOP

         LDA   HPAG
H900A    CMP   #$20       ; CMP_PAG #$20 ou #$40
         BEQ   H9010      ; page d{sir{e

H900E    LDA   #$20       ; LDA_PAG
H9010    STA   HPAG       ; HGR1 ou HGR2

*-------------------------------

* Il doit y avoir 2 lignes minimum @ traiter.
*
* Format d'un pattern
*
* colonne d{but [0,39]
* ligne d{but [0,191]
* colonne fin [0,39]
* ligne fin [0,191]
* datas:
*        cas r{p{tition d{sir{e
*           0 = indicateur de r{p{tition
*           octet nb de r{p{tition de la valeur
*           valeur @ {crire
*        cas pas de r{p{tition
*           valeur @ {crire

*-------------------------------

* 1er octet = abscisse d{but

         LDY   #0
         LDA   (PTR_DATA),Y
         STA   COL_DEB    ; colonne d{but
         STA   COL_CUR    ; colonne courante

         INC   PTR_DATA   ; octet data suivant
         BNE   H9020

         INC   PTR_DATA+1

* 2nd octet = numero ligne d{but

H9020    LDA   (PTR_DATA),Y
         STA   LIG_DEB1   ; 1}re ligne
         TAX
         INX
         STX   LIG_DEB2   ; 1}re ligne+1. On commencera par celle l@
         LDA   ADR_HGRL,X ; construit l'adresse {cran
         STA   GBASL
         LDA   ADR_HGRH,X
         ORA   HPAG
         STA   GBASH

         INC   PTR_DATA   ; octet data suivant
         BNE   H903A

         INC   PTR_DATA+1

* 3}me octet = abscisse fin

H903A    LDA   (PTR_DATA),Y
         CLC
         ADC   #1
         STA   COL_FIN

         INC   PTR_DATA   ; octet data suivant
         BNE   H9047

         INC   PTR_DATA+1

* 4}me octet 3 = ligne de fin

H9047    LDA   (PTR_DATA),Y
         CLC
         ADC   #1
         STA   LIG_FIN

         INC   PTR_DATA   ; octet data suivant
         BNE   H9054

         INC   PTR_DATA+1

*-------------------------------
* Traitement des datas
*-------------------------------

H9054    STY   NB_VAL     ; Y=0 (default=ne boucle pas sur VAL)

NEXT_VAL LDA   (PTR_DATA),Y
         BNE   TRAITE_VAL ; pas de r{p{tition (keep default)

* >>> R{p{tition d'un meme octet

         INC   PTR_DATA   ; octet data suivant
         BNE   H9060

         INC   PTR_DATA+1

H9060    LDA   (PTR_DATA),Y ; nbr de r{p{titions
         STA   NB_VAL

         INC   PTR_DATA
         BNE   H906A

         INC   PTR_DATA+1

H906A    LDA   (PTR_DATA),Y ; valeur @ r{p{ter
         STA   VAL

* Traitement d'une valeur r{p{t{e

H906E    LDA   VAL        ; valeur @ r{p{ter
         DEC   NB_VAL     ; une fois de moins

* >>> Traitement d'une valeur
* acc = valeur

TRAITE_VAL LDY COL_CUR    ; abscisse
         STA   (GBASL),Y
         INX              ; positionne 2 lignes plus bas
         INX
         CPX   LIG_FIN
         BCC   H9092      ; < : il reste encore des lignes @ {crire

                          ; les lignes step 2 ont {t{ trait{es pour cette
                          ; colonne
         INC   COL_CUR    ; abscisse+1
         LDY   COL_CUR    ; il reste encore des colonnes @ traiter?
         CPY   COL_FIN
         BCC   H9090      ; oui

         DEC   LIG_DEB2   ; revient la ligne de d{but indiqu{e en datas
         LDY   LIG_DEB2   ; est-ce qu'on a fait les 2 passages?
         CPY   LIG_DEB1
         BNE   H90AA      ; oui, c'est fini

                          ; nouveau passage s@ partir de LIG_DEB1
         LDY   COL_DEB    ; re init colonne
         STY   COL_CUR

H9090    LDX   LIG_DEB2   ; repart de LIG_DEB1 ou LIG_DEB1+1 (selon cas)

H9092    LDA   ADR_HGRL,X ; adresse {cran pour ligne courante
         STA   GBASL
         LDA   ADR_HGRH,X
         ORA   HPAG
         STA   GBASH

         LDY   NB_VAL     ; est-ce qu'il faut encore {crire VAL?
         BNE   H906E      ; oui

         INC   PTR_DATA   ; positionne sur data suivante
         BNE   NEXT_VAL

         INC   PTR_DATA+1
         BNE   NEXT_VAL   ; always

H90AA    RTS

*-------------------------------
* Not used
*-------------------------------

         HEX   00FFFF0000FFFF0000FFFF0000FFFF00
         HEX   00FFFF0000FFFF0000FFFF0000FFFF00
         HEX   00FFFF0000FFFF0000FFFF0000FFFF00
         HEX   00FFFF0000FFFF0000FFFF0000FFFF00
         HEX   00FFFF0000FFFF0000FFFF0000FFFF00
         HEX   00FFFF0000FFFF0000FFFF0000FFFF00
         HEX   00FFFF0000FFFF0000FFFF0000FFFF00
         HEX   00FFFF0000FFFF0000FFFF0000FFFF00
         HEX   00FFFF0000FFFF0000FFFF0000FFFF00
         HEX   00FFFF0000FFFF0000FFFF0000FFFF00
         HEX   00FFFF0000FFFF0000FFFF0000FFFF00
         HEX   00FFFF0000FFFF0000FFFF0000FFFF00
         HEX   00FFFF0000FFFF0000FFFF0000FFFF00
         HEX   00FFFF0000FFFF0000FFFF0000FFFF00
         HEX   00FFFF0000FFFF0000FFFF0000FFFF00
         HEX   00FFFF0000FFFF0000FFFF0000FFFF00
         HEX   00FFFF0000FFFF0000FFFF0000FFFF00
         HEX   00FFFF0000FFFF0000FFFF0000FFFF00
         HEX   00FFFF0000FFFF0000FFFF0000FFFF00
         HEX   00FFFF0000FFFF0000FFFF0000FFFF00
         HEX   00FFFF0000FFFF0000FFFF0000FFFF00
         HEX   00FFFF0000

*-------------------------------
* Adresses {cran
*-------------------------------

ADR_HGRH HEX   0004080C1014181C0004080C1014181C
         HEX   0105090D1115191D0105090D1115191D
         HEX   02060A0E12161A1E02060A0E12161A1E
         HEX   03070B0F13171B1F03070B0F13171B1F
         HEX   0004080C1014181C0004080C1014181C
         HEX   0105090D1115191D0105090D1115191D
         HEX   02060A0E12161A1E02060A0E12161A1E
         HEX   03070B0F13171B1F03070B0F13171B1F
         HEX   0004080C1014181C0004080C1014181C
         HEX   0105090D1115191D0105090D1115191D
         HEX   02060A0E12161A1E02060A0E12161A1E
         HEX   03070B0F13171B1F03070B0F13171B1F

ADR_HGRL HEX   00000000000000008080808080808080
         HEX   00000000000000008080808080808080
         HEX   00000000000000008080808080808080
         HEX   00000000000000008080808080808080
         HEX   2828282828282828A8A8A8A8A8A8A8A8
         HEX   2828282828282828A8A8A8A8A8A8A8A8
         HEX   2828282828282828A8A8A8A8A8A8A8A8
         HEX   2828282828282828A8A8A8A8A8A8A8A8
         HEX   5050505050505050D0D0D0D0D0D0D0D0
         HEX   5050505050505050D0D0D0D0D0D0D0D0
         HEX   5050505050505050D0D0D0D0D0D0D0D0
         HEX   5050505050505050D0D0D0D0D0D0D0D0


*-------------------------------
* Not used
*-------------------------------

         HEX   8DB09320B493A9018DAB93209893A5FE
         HEX   8D9993A9408DAB93A000A201BDC09285
         HEX   26BD009205E68527B12649019126E8E0
         HEX   BF90E960A200BDC0928526BD009205E6
         HEX   8527A000B126497F9126C8C02890F560
         HEX   FFFF0000FFFF0000FFFF0000FFFF0000
         HEX   FFFF0000FFFF0000FFFF0000FFFF0000
         HEX   FFFF0000FFFF0000FFFF0000FFFF0000
         HEX   A90085FC85FDA92785FEA9BF85FFA5E6
         HEX   C940F004A92085E6AD00C0102F2C10C0
         HEX   A203DD5594F005CA10F83005F6FC4C4C
         HEX   94A203DD5994F012CA10F8C98DD00DA2
         HEX   03B5FC9D0060CA10F860D6FC205D9420
         HEX   5D944C1894D3DACBCDC1D7CAC9A5FD8D
         HEX   B5941869018D9B94A5FC8DC3948D9994
         HEX   A5FE1869018DCC9420B494A5FF8DB594
         HEX   8DB09420B494A9018DAB94209894A5FE
         HEX   8D9994A9408DAB94A000A201BDC09285
         HEX   26BD009205E68527B12649019126E8E0
         HEX   BF90E960A200BDC0928526BD009205E6
         HEX   8527A000B126497F9126C8C02890F560
         HEX   F46000004900877C0000005400845000
         HEX   000054800E5B0A0000458001FF950000
         HEX   528001FE950000448001FD950000434F
         HEX   00000000000000000000000000000000
         HEX   00000000000000000000000000000000
         HEX   00000000000000000000000000000000
         HEX   00000000000000000000000000000000
         HEX   00000000000000000000000000000000
         HEX   00000000000000000000000000000000
         HEX   00000000000000000000000000000000
         HEX   00000000000000000000000000000000
         HEX   00000000000000000000000000000000
         HEX   00000000000000000000000000000000
         HEX   00000000000000000000000000000000
         HEX   00000000000000000000000000000000
         HEX   00000000000000000000000000000000
         HEX   00000000000000000000000000000000
         HEX   00000000000000000000000000000000
         HEX   000000000000000000000000000000C5

         SAV   B9000.95FF
