
*************  AFFICHE LE CADRE SI AU DESSUS D'UN LEMMINGS  ***********

CADRE LDAL $00C025 ; AFFICHAGE CADRE/CROIX
 AND #$0002
 BEQ CADRE00
 JMP CADRECROIX ; SHIFT ENFONCE, ON SAUTE LE TRAITEMENT
**
CADRE00 LDA #$6666 ; ON VERIFIE CHAQUE LEMMINGS EN JEU
 STA CADREDELTA
 STZ CADRENUMBER ; NB DE LEMMINGS DANS LE CADRE
 LDA DECORSLIDE
 ASL
 ASL
 ASL
 ASL  ; *16
 CLC
 ADC #$0040 ; DECALAGE BORDURES X
 STA CADRE0+1
 LDA POSX ; INIT
 CLC
CADRE0 ADC #$A0A0
 STA CADRE2+1 ; X0 CADRE
 CLC
 ADC #$000E
 STA CADRE3+1 ; X1 CADRE
 LDA POSY
 CLC
 ADC #$0040 ; DECALAGE BORDURES Y
 STA CADRE4+1 ; Y0 CADRE
 CLC
 ADC #$000E
 STA CADRE5+1 ; Y1 CADRE
**
 LDX #$0000 ; TOUS LES LEMMINGS
CADRE1 LDA ETATAB,X
 AND #$00FF
 BEQ CADRENXT

 LDA XTAB,X
CADRE2 CMP #$A0A0 ; X0 CADRE
 BMI CADRENXT
CADRE3 CMP #$A0A0 ; X1 CADRE
 BPL CADRENXT
 LDA YTAB,X
CADRE4 CMP #$A0A0 ; Y0 CADRE
 BMI CADRENXT
CADRE5 CMP #$A0A0 ; Y1 CADRE
 BPL CADRENXT
 JSR CADREOK ; LE LEMMING EST DANS LE CADRE

CADRENXT INX  ; LEMMING SUIVANT
 INX
 CPX #$00C8 ; 100 LEMMINGS
 BNE CADRE1
**
 LDA POSY ; ON FORCE LA CROIX
 CMP #$009A
 BPL CADRECROIX

 LDA CADREDELTA ; ANALYSE DU RESULTAT
 CMP #$6666
 BNE CADRECADRE ; IL Y AVAIT UN LEMMING EN DESSOUS
**
CADRECROIX LDA POINTEURTYPE ; ON VEUT LA CROIX
 DEC
 BNE CADRECROIX1
 RTS
CADRECROIX1 LDA #$0001 ; ON REMET LA CROIX
 JMP POINTEUR
**
CADRECADRE LDA POINTEURTYPE ; ON VEUT LE CADRE
 DEC
 DEC
 BNE CADRECADRE1
 RTS
CADRECADRE1 LDA #$0002 ; ON REMET LE CADRE
 JMP POINTEUR
**
CADREOK INC CADRENUMBER ; LE LEMMING EST DANS LE CADRE
 LDA XTAB,X
 SEC
 SBC CADRE0+1
 SEC
 SBC POSX
 ASL
 TAY
 LDA DELTACARRETAB,Y
 STA CADREOK1+1 ; (DELTA X)^2
 LDA YTAB,X
 SEC
 SBC #$0040 ; DECALAGE BORDURE
 SEC
 SBC POSY
 ASL
 TAY
 LDA DELTACARRETAB,Y ; (DELTA Y)^2
 CLC
CADREOK1 ADC #$A0A0 ; SOMME DES CARRES
 CMP CADREDELTA
 BMI CADREOK2
 RTS
CADREOK2 STA CADREDELTA ; LE NOUVEL ELU
 STX CADREWHICH
 RTS

CADREDELTA HEX 0000 ; DISTANCE
CADREWHICH HEX 0000 ; NUMERO DU LEMMING (*2)
CADRENUMBER HEX 0000 ; NB DE LEMMINGS DANS LE CADRE

DELTACARRETAB HEX 2400,1900,1000,0900,0400,0100,0000,0100,0400,0900,1000,1900,2400,3100

*************  CHOIX DU POINTEUR SOURIS  **********************

POINTEUR STA POINTEURTYPE  ; CHOISIT UN CURSEUR SOURIS
 ASL
 TAX
 JSR (POINTEURTAB,X) ; 0/1/2 : MAIN/CROIX/CADRE
 RTS

POINTEURTYPE HEX 0000
POINTEURTAB DA MOUSEMAIN,MOUSECROIX,MOUSECADRE

MOUSEMAIN LDA #PTIMP ; SOURIS MAIN : CURSEUR + LIMITES
 STA POINT1+1
 LDA #PTIMPMA
 STA POINT2+1
 LDA #PTPAI
 STA TRACEP+1
 LDA #PTPAIMA
 STA POINT3+1
 STZ SMIN
 STZ SMIN+2
 LDA #$0128
 STA SMAX
 LDA #$009D
 STA SMAX+2
 LDA #$000E
 STA POINT4+1
 LDA #$0188
 STA SNBCASE
 LDA #$000C
 STA SLARGE
 RTS
MOUSECROIX LDA #PTIMP1 ; SOURIS : CURSEUR + LIMITES
 STA POINT1+1
 LDA #PTIMPMA1
 STA POINT2+1
 LDA #PTPAI1
 STA TRACEP+1
 LDA #PTPAIMA1
 STA POINT3+1
 LDA #$0000
 STA SMIN
 LDA #$0000
 STA SMIN+2
 LDA #$0133
 STA SMAX
 LDA #$00BB
 STA SMAX+2
 LDA #$0008
 STA POINT4+1
 LDA #$0070
 STA SNBCASE
 LDA #$0006
 STA SLARGE
 RTS
MOUSECADRE LDA #PTIMP2 ; SOURIS CADRE : CURSEUR + LIMITES
 STA POINT1+1
 LDA #PTIMPMA2
 STA POINT2+1
 LDA #PTPAI2
 STA TRACEP+1
 LDA #PTPAIMA2
 STA POINT3+1
 LDA #$0000
 STA SMIN
 LDA #$0000
 STA SMIN+2
 LDA #$0133
 STA SMAX
 LDA #$00BB
 STA SMAX+2
 LDA #$0008
 STA POINT4+1
 LDA #$0070
 STA SNBCASE
 LDA #$0006
 STA SLARGE
 RTS

******************  AFFICHE LE NOM DE L'ETAT  ********************

NOMETAT LDA POINTEURTYPE ; AFFICHAGE EN BAS A GAUCHE
 CMP #$0002
 BEQ NOMETAT1
 JSR NOMCLEAN ; NETTOYAGE
NOMETAT0 RTS
**
NOMETAT1 LDX CADREWHICH ; LEMMINGS
 LDA ETATAB,X
 AND #$6000
 BEQ NOMETAT10
 CMP #$6000 ; ATHLETE
 BEQ NOMETAT11
 CMP #$4000
 BEQ NOMETAT12 ; PARACHUTE
 LDA #CLIMBETAB ; ESCALADE
 BRA NOMETAT13
NOMETAT11 LDA #ATHLETTAB ; ATHLETE
 BRA NOMETAT13
NOMETAT12 LDA #FLOATETAB ; PARACHUTE
 BRA NOMETAT13
NOMETAT10 LDA ETATAB,X ; ON CHERCHE DANS LA TABLE...
 AND #$00FF
 DEC
 ASL
 TAX
 LDA NOMETATAB,X
 CMP #VIDETAB
 BEQ NOMETAT40 ; VIDE
NOMETAT13 CMP NOMWHICH ; NOM DEJA AFFICHE
 BEQ NOMETAT41 ; ON AFFICHE AU MOINS LE NOMBRE
 STA NOMWHICH ; NOM AFFICHE
 TAX
 LDA\ $0002,X ; @ SPRITE
 STA NOMETAT3+1
 LDA\ $0000,X ; LARGEUR*4
 DEC
 ASL
 STA NOMETAT2+1
 JSR NOMETATCURS1 ; EFFACE CURSEUR ?
 LDY #$0010 ; 16 LIGNES
NOMETAT2 LDX #$A0A0
NOMETAT3 LDAL $050000,X
NOMETAT4 STAL $018400,X
 DEX
 DEX
 BPL NOMETAT3
 LDA NOMETAT3+1 ; LIGNE SUIVANTE
 CLC
 ADC #$00A0
 STA NOMETAT3+1
 LDA NOMETAT4+1
 CLC
 ADC #$00A0
 STA NOMETAT4+1
 DEY
 BNE NOMETAT2
 LDA #$8400 ; RE-INIT
 STA NOMETAT4+1
 BRA NOMETAT41
**
NOMETAT40 LDA #VIDETAB ; VIDE
 CMP NOMWHICH
 BNE NOMETAT42
 RTS
NOMETAT42 STA NOMWHICH ; ON NETTOY
 JSR NOMETATCURS1 ; EFFACE CURSEUR ?
 LDY #$0010
NOMETAT44 LDX #$002A
 LDA #$0000
NOMETAT45 STAL $018400,X
 DEX
 DEX
 BPL NOMETAT45
 LDA NOMETAT45+1
 CLC
 ADC #$00A0
 STA NOMETAT45+1
 DEY
 BNE NOMETAT44
 LDA #$8400
 STA NOMETAT45+1
 JSR NOMETATCURS2 ; REMET LE CURSEUR
 RTS
**
NOMETAT41 LDY #$0000 ; AFFICHAGE DU NOMBRE DANS LE CADRE
 LDX #$6424
NOMETAT01 LDA #$0000
 STAL $012000,X
 STAL $012002,X
 STAL $012004,X
 STAL $012006,X
 TXA
 CLC
 ADC #$00A0
 TAX
 INY
 CPY #$0010
 BNE NOMETAT01 ; EFFACEMENT PRELIMINAIRE
 LDA CADRENUMBER
 LDX #$0120
 LDY #$8420
 JSR AFFICHCHIBRUT
 LDA NOMWHICH ; COMBLE AVEC DU VIDE
 TAX
 LDA\ $0000,X ; LARGEUR*4
 CMP #$000E
 BEQ NOMETAT5 ; RIEN A EFFACER
 CMP #$000C
 BEQ NOMETAT6
 LDA #$0004 ; 0A
 STA NOMETAT8+1
 LDA #$8414
 STA NOMETAT9+1
 BRA NOMETAT7
NOMETAT6 LDA #$0002 ; 0C
 STA NOMETAT8+1
 LDA #$8418
 STA NOMETAT9+1
NOMETAT7 LDY #$0010
NOMETAT8 LDX #$0A0A
 LDA #$0000
NOMETAT9 STAL $012000,X
 DEX
 DEX
 BPL NOMETAT9
 LDA NOMETAT9+1
 CLC
 ADC #$00A0
 STA NOMETAT9+1
 DEY
 BNE NOMETAT8
NOMETAT5 JSR NOMETATCURS2 ; REMET LE CURSEUR
 RTS

NOMCLEAN LDA NOMWHICH ; 16 LIGNES
 BEQ NOMCLEAN3
 LDY #$0010
NOMCLEAN1 LDX #$002A ;
 LDA #$0000
NOMCLEAN2 STAL $018400,X
 DEX
 DEX
 BPL NOMCLEAN2
 LDA NOMCLEAN2+1 ; LIGNE SUIVANTE
 CLC
 ADC #$00A0
 STA NOMCLEAN2+1
 DEY
 BNE NOMCLEAN1
 LDA #$8400 ; RE-INIT
 STA NOMCLEAN2+1
 STZ NOMWHICH ; NOM AFFICHE
NOMCLEAN3 RTS

NOMWHICH HEX 0000 ; TYPE DU MESSAGE

NOMETATAB DA WALKERTAB,WALKERTAB,FALLERTAB,FLOATETAB,FLOATETAB
 DA CLIMBETAB,CLIMBETAB,BLOCKETAB,BOMBERTAB,BASHERTAB
 DA MINERTAB,DIGGERTAB,BUILDETAB,BUILDETAB,WALKERTAB
 DA VIDETAB,VIDETAB,VIDETAB,VIDETAB,VIDETAB
 DA VIDETAB

WALKERTAB HEX 0C00,4181 ; LARGUEUR*4,@ SPRITE
DIGGERTAB HEX 0C00,818C
FLOATETAB HEX 0E00,C1C4
BLOCKETAB HEX 0E00,DEC4
MINERTAB HEX 0A00,C197
CLIMBETAB HEX 0E00,01D0
BASHERTAB HEX 0C00,01A3
BOMBERTAB HEX 0C00,41AE
BUILDETAB HEX 0E00,FBC4
FALLERTAB HEX 0C00,81B9
ATHLETTAB HEX 0E00,1ED0
VIDETAB HEX 0000,0000 ; VIDE

NOMETATCURS1 LDA POSX ; ON EFFACE LE CURSEUR ?
 RTS
 CMP #$0060 ; 96
 BPL NOMETATCURS10
 LDA POSY
 CMP #$0092 ; 146
 BMI NOMETATCURS10
 CMP #$00B0 ; 176
 BPL NOMETATCURS10
 JSR DESS1 ; EFFACE LE CURSEUR
 INC CURSEURFLAG
 LDA #$0001
 JSR BORD6
NOMETATCURS10 RTS

NOMETATCURS2 LDA CURSEURFLAG ; REMET LE CURSEUR ?
 RTS
 BEQ NOMETATCURS20
 JSR SAUV
 JSR TRACE6
 STZ CURSEURFLAG
NOMETATCURS20 RTS

CURSEURFLAG HEX 0000

**********************

LINEARISE LDY #$004F ; 5 ECRANS -> 2*64Ko
LINEARISE1 LDX #$009E
LINEARISE10 LDAL $0C0000,X ;
LINEARISE100 STAL $0A0000,X
 DEX
 DEX
 BPL LINEARISE10
 LDA LINEARISE10+1 ; NEXT LINE ECRAN
 CLC
 ADC #$00A0
 STA LINEARISE10+1
 LDA LINEARISE100+1 ; NEXT LINE DECOR
 CLC
 ADC #$0320
 STA LINEARISE100+1
 DEY
 BPL LINEARISE1
 STZ LINEARISE10+1
 STZ LINEARISE100+1

 LDY #$004F
LINEARISE2 LDX #$009E
LINEARISE20 LDAL $0C3200,X ;
LINEARISE200 STAL $0B0000,X
 DEX
 DEX
 BPL LINEARISE20
 LDA LINEARISE20+1 ; NEXT LINE ECRAN
 CLC
 ADC #$00A0
 STA LINEARISE20+1
 LDA LINEARISE200+1 ; NEXT LINE DECOR
 CLC
 ADC #$0320
 STA LINEARISE200+1
 DEY
 BPL LINEARISE2
 LDA #$3200
 STA LINEARISE20+1
 STZ LINEARISE200+1
*****
 LDY #$004F
LINEARISE3 LDX #$009E
LINEARISE30 LDAL $0C8000,X ;
LINEARISE300 STAL $0A00A0,X
 DEX
 DEX
 BPL LINEARISE30
 LDA LINEARISE30+1 ; NEXT LINE ECRAN
 CLC
 ADC #$00A0
 STA LINEARISE30+1
 LDA LINEARISE300+1 ; NEXT LINE DECOR
 CLC
 ADC #$0320
 STA LINEARISE300+1
 DEY
 BPL LINEARISE3
 LDA #$8000
 STA LINEARISE30+1
 LDA #$00A0
 STA LINEARISE300+1

 LDY #$004F
LINEARISE4 LDX #$009E
LINEARISE40 LDAL $0CB200,X ;
LINEARISE400 STAL $0B00A0,X
 DEX
 DEX
 BPL LINEARISE40
 LDA LINEARISE40+1 ; NEXT LINE ECRAN
 CLC
 ADC #$00A0
 STA LINEARISE40+1
 LDA LINEARISE400+1 ; NEXT LINE DECOR
 CLC
 ADC #$0320
 STA LINEARISE400+1
 DEY
 BPL LINEARISE4
 LDA #$B200
 STA LINEARISE40+1
 LDA #$00A0
 STA LINEARISE400+1
*****
 LDY #$004F
LINEARISE5 LDX #$009E
LINEARISE50 LDAL $0D0000,X ;
LINEARISE500 STAL $0A0140,X
 DEX
 DEX
 BPL LINEARISE50
 LDA LINEARISE50+1 ; NEXT LINE ECRAN
 CLC
 ADC #$00A0
 STA LINEARISE50+1
 LDA LINEARISE500+1 ; NEXT LINE DECOR
 CLC
 ADC #$0320
 STA LINEARISE500+1
 DEY
 BPL LINEARISE5
 STZ LINEARISE50+1
 LDA #$0140
 STA LINEARISE500+1

 LDY #$004F
LINEARISE6 LDX #$009E
LINEARISE60 LDAL $0D3200,X ;
LINEARISE600 STAL $0B0140,X
 DEX
 DEX
 BPL LINEARISE60
 LDA LINEARISE60+1 ; NEXT LINE ECRAN
 CLC
 ADC #$00A0
 STA LINEARISE60+1
 LDA LINEARISE600+1 ; NEXT LINE DECOR
 CLC
 ADC #$0320
 STA LINEARISE600+1
 DEY
 BPL LINEARISE6
 LDA #$3200
 STA LINEARISE60+1
 LDA #$0140
 STA LINEARISE600+1
*****
 LDY #$004F
LINEARISE7 LDX #$009E
LINEARISE70 LDAL $0D8000,X ;
LINEARISE700 STAL $0A01E0,X
 DEX
 DEX
 BPL LINEARISE70
 LDA LINEARISE70+1 ; NEXT LINE ECRAN
 CLC
 ADC #$00A0
 STA LINEARISE70+1
 LDA LINEARISE700+1 ; NEXT LINE DECOR
 CLC
 ADC #$0320
 STA LINEARISE700+1
 DEY
 BPL LINEARISE7
 LDA #$8000
 STA LINEARISE70+1
 LDA #$01E0
 STA LINEARISE700+1

 LDY #$004F
LINEARISE8 LDX #$009E
LINEARISE80 LDAL $0DB200,X ;
LINEARISE800 STAL $0B01E0,X
 DEX
 DEX
 BPL LINEARISE80
 LDA LINEARISE80+1 ; NEXT LINE ECRAN
 CLC
 ADC #$00A0
 STA LINEARISE80+1
 LDA LINEARISE800+1 ; NEXT LINE DECOR
 CLC
 ADC #$0320
 STA LINEARISE800+1
 DEY
 BPL LINEARISE8
 LDA #$B200
 STA LINEARISE80+1
 LDA #$01E0
 STA LINEARISE800+1
*****
 LDY #$004F
LINEARISE9 LDX #$009E
LINEARISE90 LDAL $0E0000,X ;
LINEARISE900 STAL $0A0280,X
 DEX
 DEX
 BPL LINEARISE90
 LDA LINEARISE90+1 ; NEXT LINE ECRAN
 CLC
 ADC #$00A0
 STA LINEARISE90+1
 LDA LINEARISE900+1 ; NEXT LINE DECOR
 CLC
 ADC #$0320
 STA LINEARISE900+1
 DEY
 BPL LINEARISE9
 STZ LINEARISE90+1
 LDA #$0280
 STA LINEARISE900+1

 LDY #$004F
LINEARISEA LDX #$009E
LINEARISEA0 LDAL $0E3200,X ;
LINEARISEA00 STAL $0B0280,X
 DEX
 DEX
 BPL LINEARISEA0
 LDA LINEARISEA0+1 ; NEXT LINE ECRAN
 CLC
 ADC #$00A0
 STA LINEARISEA0+1
 LDA LINEARISEA00+1 ; NEXT LINE DECOR
 CLC
 ADC #$0320
 STA LINEARISEA00+1
 DEY
 BPL LINEARISEA
 LDA #$3200
 STA LINEARISEA0+1
 LDA #$0280
 STA LINEARISEA00+1
 RTS

**************

CLEANSLIDE LDX #$6F07 ; NETTOYAGE
 LDY #$0018
CLEANSLIDE1 LDAL $058000,X
 STAL $012000,X
INIT0514 LDAL $058D20,X
 STAL $012D20,X
 INX
 INX
 DEY
 BPL CLEANSLIDE1
 RTS

AFFICHSLIDE JSR CLEANSLIDE ; AFFICHAGE ECRAN
 LDA DECORSLIDE
 LSR
 CLC
 ADC #$6F07
 TAX
 LDY #$0004
 LDA #$8888
AFFICHSLIDE2 STAL $012000,X
 STAL $012D20,X
 INX
 INX
 DEY
 BPL AFFICHSLIDE2
 RTS

AFFICHSLIDE0 LDA DECORSLIDE ; AFFICHAGE 05/0000
 LSR
 CLC
 ADC #$6F07
 TAX
 LDY #$0004
 LDA #$8888
AFFICHSLIDE1 STAL $050000,X
INIT0515 STAL $050D20,X
 INX
 INX
 DEY
 BPL AFFICHSLIDE1
 RTS
**************

CLEANICONE LDA CURRENTICN
 ASL
 TAX
 LDA TABLEICN,X
 TAX
 PHX

 LDY #$0016 ; 22 LIGNES
CLEANICONE2 LDAL $058000,X
 STAL $012000,X
INIT0516 LDAL $058007,X
 STAL $012007,X
 TXA
 CLC
 ADC #$00A0
 TAX
 DEY
 BPL CLEANICONE2

 PLX
 LDY #$0003
CLEANICONE3 LDAL $058000,X
 STAL $012000,X
INIT0517 LDAL $058E60,X
 STAL $012E60,X
 INX
 INX
 DEY
 BPL CLEANICONE3
 RTS

AFFICHICONE STA CURRENTICN ; A:NUMERO DE L'ICONE
 ASL
 TAX
 LDA TABLEICN,X
 TAX
 PHX
 LDY #$0016 ; 22 LIGNES
AFFICHICONE2 LDAL $012000,X
 AND #$FFF0
 ORA #$0008 ; JAUNE
 STAL $012000,X
 LDAL $012007,X
 AND #$FFF0
 ORA #$0008
 STAL $012007,X
 TXA
 CLC
 ADC #$00A0
 TAX
 DEY
 BPL AFFICHICONE2
 PLX
 LDAL $012000,X
 AND #$00F0
 ORA #$8808
 STAL $012000,X
 LDAL $012E60,X
 AND #$00F0
 ORA #$8808
 STAL $012E60,X
 INX
 INX
 LDY #$0002
 LDA #$8888 ; JAUNE
AFFICHICONE3 STAL $012000,X
 STAL $012E60,X
 INX
 INX
 DEY
 BPL AFFICHICONE3
 RTS

TABLEICN HEX 106E,186E,206E,286E,306E,386E,406E,486E

**************

AFFICHJC STX AFFICHJC4+2 ; AFFICHE CHIFFRE DE L'ECRAN JEU
 STX AFFICHJC5+2
 STY AFFICHJC4+1 ; A : VALEUR, X,Y : ADRESSE
 INY
 INY
 STY AFFICHJC5+1
 CMP #$0000 ; ZERO
 BEQ AFFICHJC10
 LDY #$0000
AFFICHJC1 CMP #$000A ; DECOMPOSITION DE LA VALEUR
 BMI AFFICHJC2
 SEC
 SBC #$000A
 INY
 BRA AFFICHJC1
AFFICHJC10 LDY #$000A ; ZERO : ON EFFACE
 LDA #$000A
AFFICHJC2 PHY  ; DIZAINE
 ASL  ; UNITE
 ASL
 ASL
 ASL  ; *16
 TAX
 PLA  ; DIZAINE
 ASL
 ASL
 ASL
 ASL  ; *16
 TAY
 CLC
 ADC #$0010
 STA AFFICHJC6+1 ; LIMITE

AFFICHJC3 LDA JEUCHIF,Y ; AFFICHAGE DES 2 CHIFFRES SIMULTANEMENT
AFFICHJC4 STAL $012000
 LDA JEUCHIF,X
AFFICHJC5 STAL $012000
 LDA AFFICHJC4+1
 CLC
 ADC #$00A0
 STA AFFICHJC4+1
 INC
 INC
 STA AFFICHJC5+1
 INX
 INX
 INY
 INY
AFFICHJC6 CPY #$A0A0
 BNE AFFICHJC3
 RTS

JEUCHIDIZ HEX 0000 ; DIZAINE

JEUCHIF HEX 3BBB,3BBB,3B3B,3B3B,3B3B,3B3B,3BBB,3BBB ; 0
 HEX 33B3,3BB3,33B3,33B3,33B3,33B3,3BBB,3BBB ; 1
 HEX 3BBB,3BBB,333B,3BBB,3BBB,3B33,3BBB,3BBB ; 2
 HEX 3BBB,3BBB,333B,3BBB,3BBB,333B,3BBB,3BBB ; 3
 HEX 3B3B,3B3B,3B3B,3BBB,3BBB,333B,333B,333B ; 4
 HEX 3BBB,3BBB,3B33,3BBB,3BBB,333B,3BBB,3BBB ; 5
 HEX 3BBB,3BBB,3B33,3BBB,3BBB,3B3B,3BBB,3BBB ; 6
 HEX 3BBB,3BBB,333B,333B,33B3,33B3,33B3,33B3 ; 7
 HEX 3BBB,3BBB,3B3B,3BBB,3BBB,3B3B,3BBB,3BBB ; 8
 HEX 3BBB,3BBB,3B3B,3BBB,3BBB,333B,3BBB,3BBB ; 9
 HEX 3333,3333,3333,3333,3333,3333,3333,3333 ; VIDE
**************
CODEQUICK LDY CODEMESSAGE ; ACCESS RAPIDE
 CPY #$CFC3 ; 'CO'
 BNE CODEKBD0
 LDY CODEMESSAGE+2
 CPY #$C5C4 ; 'DE'
 BNE CODEKBD0
 LDY CODEMESSAGE+4
 CPY #$AD00 ; '- '
 BNE CODEKBD0
 SEC
 SBC #$00B0
 ASL
 TAY
 LDA CODELISTDIX,Y ; *10
 STA CODEQUICKLVL
CODEQUICK1 LDAL $00BFFF ; ON ATTEND LE DEUXIEME CHIFFRE
 BMI CODEQUICK2
 JSR CLIGNOTER ; SIMULE CLIGNOTEMENT
 BRA CODEQUICK1
CODEQUICK2 STAL $00C010
 XBA
 AND #$00FF
 CMP #$00B0 ; 0-9 (B0-B9)
 BMI CODEKBD2
 CMP #$00BA
 BPL CODEKBD2
 SEC
 SBC #$00B0
 CLC
 ADC CODEQUICKLVL
 STA CODEQUICKLVL
 CMP #$0002 ; LEVEL 0/1 : INCONNU
 BMI CODEKBD
CODEQUICK3 LDAL $00BFFF ; ON ATTEND LE RETURN
 BMI CODEQUICK4
 JSR CLIGNOTER ; SIMULE CLIGNOTEMENT
 BRA CODEQUICK3
CODEQUICK4 STAL $00C010
 XBA
 AND #$00FF
 CMP #$008D
 BNE CODEKBD2
 LDA CODEQUICKLVL ; OK, ON PASSE AU NIVEAU
 DEC
 DEC
 STA CODENUMERIC
 LDA #$0009
 JSR PLAYSOUND
 JMP CODEVERIF3

CODEQUICKLVL HEX 0000
CODEQUICK0 JMP CODEQUICK
CODEKBD0 JMP CODEKBD
**************

CODESAISIE LDA #$0100 ; BANC AFFICHAGE LETTRE
 STA AFFICHLETBRUT4+2
 STA AFFICHLETBRUT6+2
 LDX #$0000 ; DEBUT DU CODE

CODEKBD LDAL $00BFFF ; LECTURE DU CLAVIER
 BMI CODEKBD1
 JSR CLIGNOTER  ; ON FAIT CLIGNOTER -/_
 BRA CODEKBD
CODEKBD1 STAL $00C010
 XBA
 AND #$00FF
CODEKBD2 CMP #$00FF ; DEL
 BEQ CODEDEL
 CMP #$00B0 ; 0-9 (B0-B9)
 BMI CODEKBD
 CMP #$00BA
 BMI CODEQUICK0
 CMP #$00C1 ; A-Z (C1-DA)
 BMI CODEKBD
 CMP #$00DB
 BMI CODELET
 CMP #$00E0 ; a-z (E1-FA)
 BMI CODEKBD
 CMP #$00FB
 BPL CODEKBD
CODELETMIN SEC  ; MINUSCULE
 SBC #$0020 ; MINUSCULE->MAJUSCULE
CODELET STA CODEMESSAGE,X ; LETTRE ACCEPTEE
 JSR CLIGNOTER2 ; REMET UN '-'
 PHX
 JSR CODEAFFICH ; AFFICHE LA LETTRE
 PLX
 INX
 CPX #$000A
 BNE CODEKBD
 BRA CODEVERIF

CODEDEL JSR CLIGNOTER2 ; EFFACE UNE LETTRE
 CPX #$0000
 BEQ CODEKBD
 DEX
 LDA #$ADAD ; "--"
 STA CODEMESSAGE,X
 PHX
 TXA
 ASL
 TAX
 LDA TABLECODEADRE,X ; ADRESSE ECRAN
 LDX #$0080 ; CODE '-'
 JSR AFFICHLETBRUT ; AFFICHE '-'
 PLX
 BRA CODEKBD

CODEVERIF STZ CODENUMERIC ; VERIFIE LE CODE
 LDY #$0000
CODEVERIF1 LDX #$0000
CODEVERIF2 LDA CODELIST,Y
 BNE CODEVERIF20
CODEVERIF200 JMP CODEVERIFIN ; FIN...
CODEVERIF20 CMP CODEMESSAGE,X
 BEQ CODEVERIF21
 JMP CODEVERIFNXT ; PROCHAIN CODE
CODEVERIF21 INY
 INY
 INX
 INX
 CPX #$000A
 BNE CODEVERIF2
CODEVERIF3 LDA CODENUMERIC ; OK, CODE RECONNU
 CMP #$005C
 BPL CODEVERIF200 ; CODEVERIFIN
 CMP #$005B
 BNE CODEVERIF30 ; EMMANUELLE
 JSR WAITCODEERR ; ATTENTE TEMPO
 LDA #$0001
 STA EASTERFLAG
 LDA #$0006
 JMP PICT2
CODEVERIF30 LDA #MESCORR
 LDX #$0100 ; AFFICHAGE MESSAGE "Code level"
 LDY #$6628
 JSR AFFICHMES
 LDX #$0100 ; AFFICHE LE NUMERO DU NIVEAU
 LDY #$6664
 LDA CODENUMERIC
 INC
 INC
 CMP #$001F ; 31
 BMI CODEVERIF4
 SEC
 SBC #$001E ; 30
 CMP #$001F ; 31
 BMI CODEVERIF4
 SEC
 SBC #$001E ; 30
 CMP #$001F ; 31
 BMI CODEVERIF4
 SEC
 SBC #$001E ; 30
CODEVERIF4 JSR AFFICHCHIMASQ
 LDX #$0100 ; AFFICHE MESSAGE "Rating - ..."
 LDY #$8428
 LDA CODENUMERIC
 INC
 INC
 CMP #$001F ; <31 : FUN
 BMI CODEVERIF50
 CMP #$003D ; <61 : TRICKY
 BMI CODEVERIF51
 CMP #$005B ; <91 : TAXING
 BMI CODEVERIF52
 LDA #MESRAMA ; MAYHEM
 BRA CODEVERIF5
CODEVERIF52 LDA #MESRATA ; TAXING
 BRA CODEVERIF5
CODEVERIF51 LDA #MESRATR ; TRICKY
 BRA CODEVERIF5
CODEVERIF50 LDA #MESRAFU ; FUN
CODEVERIF5 JSR AFFICHMES
 JSR WAITCODESUC ; ATTENTE TEMPO
 LDA CODENUMERIC
 INC
 STA NUMEROLEVEL ; INDICE DU NIVEAU
 ASL
 TAX
 LDA CODELISTDIX,X
 STA NUMEROLVL
 JSR LOADLITTLE ; CHARGE L'IMAGE LITTLE SI BESOIN
 JSR INITABLE ; CHARGE TOUTES LES TABLES DU NIVEAU
 LDA #$0003 ; IMAGE PRESENTATION NIVEAU
 JMP PICT2

CODEVERIFNXT INC CODENUMERIC ; NEXT ONE
 LDA CODENUMERIC
 ASL
 TAX
 LDA CODELISTDIX,X ; *10
 TAY
 JMP CODEVERIF1

CODENUMERIC HEX 0000 ; NUMERO DU NIVEAU

CODEVERIFIN LDA #MESINCO ; AFFICHAGE MESSAGE "Incorrect Code"
 LDX #$0100
 LDY #$7030
 JSR AFFICHMES
 JSR WAITCODEERR ; ATTENTE TEMPO
 LDA #$0001 ; ECRAN MAIN
 JMP PICT2

CODEAFFICH LDA CODEMESSAGE,X  ; AFFICHE LA LETTRE (A-Z)
 AND #$00FF
 SEC
 SBC #$00B7 ; -C1+10
 ASL
 TAY  ; SVG
 TXA
 ASL
 TAX
 LDA TABLECODEADRE,X
 TYX  ; RECUP
 JSR AFFICHLETBRUT
 RTS

CLIGNOTER LDA CLIGFLAG ; ON AFFICHE ALTERNATIVEMENT -/_
 INC
 INC
 INC
 INC
 STA CLIGFLAG
 BNE CLIGNOTER3
 LDA CLIGFLAG2 ; 0:-, 1:/
 BEQ CLIGNOTER1
 STZ CLIGFLAG2 ; /
 PHX
 TXA
 ASL
 TAX
 LDA TABLECODEADRE,X ; ADRESSE ECRAN
 LDX #$008E ; CODE '_'
 JSR AFFICHLETBRUT ; AFFICHE '_'
 PLX
 RTS
CLIGNOTER1 INC CLIGFLAG2  ; -
CLIGNOTER2 PHX
 TXA
 ASL
 TAX
 LDA TABLECODEADRE,X ; ADRESSE ECRAN
 LDX #$0080 ; CODE '-'
 JSR AFFICHLETBRUT ; AFFICHE '-'
 PLX
CLIGNOTER3 RTS

CLIGFLAG HEX 0000
CLIGFLAG2 HEX 0000 ; -/_

CODEMESSAGE ASC "----------",00
TABLECODEADRE HEX 385C,3C5C,405C,445C,485C,4C5C,505C,545C,585C,5C5C

CODELISTDIX HEX 0000,0A00,1400,1E00,2800,3200,3C00,4600,5000,5A00
 HEX 6400,6E00,7800,8200,8C00,9600,A000,AA00,B400,BE00
 HEX C800,D200,DC00,E600,F000,FA00,0401,0E01,1801,2201
 HEX 2C01,3601,4001,4A01,5401,5E01,6801,7201,7C01,8601
 HEX 9001,9A01,A401,AE01,B801,C201,CC01,D601,E001,EA01
 HEX F401,FE01,0802,1202,1C02,2602,3002,3A02,4402,4E02
 HEX 5802,6202,6C02,7602,8002,8A02,9402,9E02,A802,B202
 HEX BC02,C602,D002,DA02,E402,EE02,F802,0203,0C03,1603
 HEX 2003,2A03,3403,3E03,4803,5203,5C03,6603,7003,7A03
 HEX 8403,8E03,9803,A203,BA04,AC03,B603,C003,CA03,D403

CODELIST DS 920 ; CODE DES NIVEAUX
 HEX 0000

*************************  EASTER EGGS  ************************

ECREASTER00 LDX #$001E ; FUCK
ECREASTER01 LDA PALETTEV,X
ECREASTER02 STAL $057E00,X ; PALETTES
 LDA FUCKPALETTE,X
ECREASTER03 STAL $057E20,X
 DEX
 DEX
 BPL ECREASTER01
 LDX #$0022 ; SCB FUCK
 LDA #$1111
ECREASTER04 STAL $057D3F,X
 DEX
 DEX
 BPL ECREASTER04
 LDA #$0023 ; AFFICHAGE SPRITE
 STA EASTERCOPY1+1 ; HAUTEUR
 LDA #$0014
 STA EASTERCOPY2+1 ; LARGEUR
 LDX #$E439
 LDY #$27A5
 LDA BANC04
 JSR EASTERCOPY
 LDA #FUCKTEXT ; AFFICHAGE TEXT
 LDX BANC05
 LDY #$5716
 JSR AFFICHMES
 JSR FADEIN ; AFFICHAGE PAGE
ECREASTER05 LDAL $00BFFF
 BPL ECREASTER05
 AND #$FF00
 CMP #$9800
 BEQ ECREASTER07
ECREASTER06 BRA ECREASTER06 ; ON BOUCLE :-)
ECREASTER07 STAL $00C010
 JSR SCLEANBOUT ; NETTOYAGE BOUTON + CLICK
 LDA #$0001
 JMP PICT2
**
ECREASTER10 LDX #$001E ; I LOVE YOU
ECREASTER11 LDA LOVEPALETTE,X
ECREASTER13 STAL $057E00,X
 DEX
 DEX
 BPL ECREASTER11
 LDA #$002E ; AFFICHAGE SPRITE
 STA EASTERCOPY1+1
 LDA #$0036
 STA EASTERCOPY2+1
 LDX #$D03B
 LDY #$25B5
 LDA BANC05
 JSR EASTERCOPY
 JMP ECREASTERFIN
**
ECREASTER20 LDX #$001E ; HO NO MORE LEMMINGS
ECREASTER21 LDA PALETTEB,X
ECREASTER22 STAL $057E00,X ; PALETTES
 LDA NOMOPALETTE,X
ECREASTER23 STAL $057E20,X
 DEX
 DEX
 BPL ECREASTER21
 LDX #$002D ; SCB NO MORE
 LDA #$1111
ECREASTER24 STAL $057D3B,X
 DEX
 DEX
 BPL ECREASTER24
 LDA #$002D ; AFFICHAGE SPRITE
 STA EASTERCOPY1+1 ; HAUTEUR
 LDA #$0018
 STA EASTERCOPY2+1 ; LARGEUR
 LDX #$4779
 LDY #$25C2
 LDA BANC07
 JSR EASTERCOPY
 LDA #NOMOTEXT ; AFFICHAGE TEXT
 LDX BANC05
 LDY #$5B64
 JSR AFFICHMES
 JMP ECREASTERFIN
**
ECREASTER30 LDX #$001E ; X LOGO
ECREASTER31 LDA PALETTEVC,X
ECREASTER32 STAL $057E00,X ; PALETTES
 LDA XLOGPALETTE,X
ECREASTER33 STAL $057E20,X
 DEX
 DEX
 BPL ECREASTER31
 LDX #$0044 ; SCB X LOGO
 LDA #$1111
ECREASTER34 STAL $057D2C,X
 DEX
 DEX
 BPL ECREASTER34
 LDA #$0043 ; AFFICHAGE SPRITE
 STA EASTERCOPY1+1 ; HAUTEUR
 LDA #$001E
 STA EASTERCOPY2+1 ; LARGEUR
 LDX #$C3FC
 LDY #$1C5F
 LDA BANC05
 JSR EASTERCOPY
 LDA #XLOGTEXT ; AFFICHAGE TEXT
 LDX BANC05
 LDY #$5DF4
 JSR AFFICHMES
 JMP ECREASTERFIN
**
ECREASTER40 LDX #$001E ; TINIES
ECREASTER41 LDA PALETTER,X
ECREASTER42 STAL $057E00,X ; PALETTES
 LDA TINIPALETTE,X
ECREASTER43 STAL $057E20,X
 DEX
 DEX
 BPL ECREASTER41
 LDX #$0018 ; SCB TINIES
 LDA #$1111
ECREASTER44 STAL $057D49,X
 DEX
 DEX
 BPL ECREASTER44
 LDA #$0017 ; AFFICHAGE SPRITE
 STA EASTERCOPY1+1 ; HAUTEUR
 LDA #$000A
 STA EASTERCOPY2+1 ; LARGEUR
 LDX #$2D40
 LDY #$2E89
 LDA BANC07
 JSR EASTERCOPY
 LDA #TINITEXT ; AFFICHAGE TEXT
 LDX BANC05
 LDY #$55C0
 JSR AFFICHMES
 JMP ECREASTERFIN
**
ECREASTER50 LDX #$001E ; LEMMINGS
ECREASTER51 LDA PALETTEV,X
ECREASTER52 STAL $057E00,X ; PALETTES
 LDA LEMMPALETTE,X
ECREASTER53 STAL $057E20,X
 DEX
 DEX
 BPL ECREASTER51
 LDX #$0042 ; SCB LEMMINGS
 LDA #$1111
ECREASTER54 STAL $057D29,X
 DEX
 DEX
 BPL ECREASTER54

 LDA EASTERFLAG ; ON AFFICHE LE BON
 SEC
 SBC #$0005
 ASL
 TAX
 ASL
 TAY
 LDA EALEMHAUTAB,X
 STA ECREASTER55+1
 LDA EALEMLARTAB,X
 STA ECREASTER56+1
 LDA EALEMSRCTAB,X
 STA ECREASTER57+1
 LDA EALEMDESTAB,X
 STA ECREASTER58+1
 LDA EALEMTEXTAB,Y
 STA ECREASTER59+1
 LDA EALEMSCRTAB,Y
 STA ECREASTER5A+1
 INY
 INY
 LDA EALEMTEXTAB,Y
 STA ECREASTER5B+1
 LDA EALEMSCRTAB,Y
 STA ECREASTER5C+1

ECREASTER55 LDA #$0017 ; AFFICHAGE SPRITE
 STA EASTERCOPY1+1 ; HAUTEUR
ECREASTER56 LDA #$000A
 STA EASTERCOPY2+1 ; LARGEUR
ECREASTER57 LDX #$2D40
ECREASTER58 LDY #$2E89
 LDA BANC07
 JSR EASTERCOPY
ECREASTER59 LDA #TINITEXT ; AFFICHAGE TEXT 1
 LDX BANC05
ECREASTER5A LDY #$55C0
 JSR AFFICHMES
ECREASTER5B LDA #TINITEXT ; AFFICHAGE TEXT 2
 LDX BANC05
ECREASTER5C LDY #$55C0
 JSR AFFICHMES
 JMP ECREASTERFIN

EALEMHAUTAB HEX 4100,4100,3F00,3F00 ; HAUTEUR
EALEMLARTAB HEX 2200,2200,2400,2400 ; LARGEUR
EALEMSRCTAB HEX 6580,45AA,23D5,4AD5 ; ADRESSE SOURCE SPRITE
EALEMDESTAB HEX 7E1A,7E1A,7D1A,7D1A ; ADRESSE DESTINATION SPRITE
EALEMTEXTAB DA LEM5TEXT,LEMEMPTY,LEM6TEXT,LEM6TEXT2 ; TEXTE
 DA LEM7TEXT,LEMEMPTY,LEM8TEXT,LEM8TEXT2
EALEMSCRTAB HEX B657,A064,AE57,C064,A857,A064,A657,BC64 ; ADRESSE ECRAN TEXT
**
ECREASTERFIN JSR FADEIN ; AFFICHAGE PAGE
 JSR SCLEANBOUT ; NETTOYAGE BOUTON + CLICK
 LDA #$0001
 JMP PICT2

EASTERFLAG HEX 0000 ; 0:FUCK,1:LOVE,2:NO MORE,3:X LOGO,4:TINIES,5/6/7/8 : LEMMINGS
FUCKPALETTE HEX 0000,8000,9F00,B000,E000,1101,5505,3006,AA0A,DD0D,000E,EE0E,360F,900F,C30F,FF0F
LOVEPALETTE HEX 0000,B000,000E,0008,5505,7C00,B008,700F,DD00,9909,FB06,7C0E,AA0E,E70F,DD0D,FF0F
NOMOPALETTE HEX 0000,0900,9009,000A,000F,770F,900F,990F,9000,9900,F009,F909,9909,9F09,F90F,FF0F
XLOGPALETTE HEX 0000,1000,1101,2101,2202,3202,3303,4404,5404,5505,6606,7707,8808,9909,AA0A,BB0B
LEMMPALETTE HEX 0000,0700,0902,1B04,6000,8000,980E,A90F,A50B,8309,FF0F,6107,A80A,DF08,9E00,FF0F
TINIPALETTE HEX 0000,D000,BD0B,6000,6906,9D04,4404,0D00,B60F,090F,FF0F,020B,6606,F00F,0000,600B
FUCKTEXT ASC "Is it clear ?",00
NOMOTEXT ASC "OH NO MORE LEMMINGS !!!",00
XLOGTEXT ASC "TRUST NO ONE...",00
TINITEXT ASC "OH NO... THEY'RE BACK !!!",00
LEM5TEXT ASC "CHEEEEEESE....",00
LEM6TEXT ASC "How many Lemmings",00
LEM6TEXT2 ASC "have you killed today ???",00
LEM7TEXT ASC "A flying Lemming ???",00
LEM8TEXT ASC "Don't waste your time",00
LEM8TEXT2 ASC "looking for Easter Eggs...",00
LEMEMPTY HEX 00

EASTERCOPY STA EASTERCOPY3+2 ; RECOPIE DU SPRITE DE 0x VERS 05
 STX EASTERCOPY3+1 ; SRC
 STY EASTERCOPY4+1 ; DEST
EASTERCOPY1 LDY #$A0A0 ; HAUTEUR
EASTERCOPY2 LDX #$A0A0 ; LARGEUR
EASTERCOPY3 LDAL $040000,X
EASTERCOPY4 STAL $050000,X
 DEX
 DEX
 BPL EASTERCOPY3
 LDA EASTERCOPY3+1
 CLC
 ADC #$00A0
 STA EASTERCOPY3+1
 LDA EASTERCOPY4+1
 CLC
 ADC #$00A0
 STA EASTERCOPY4+1
 DEY
 BPL EASTERCOPY2
 RTS

********************

MAPPAGE LDX #$0000 ; UTILISE LA TEXTURE VERTE SUR TOUT L'ECRAN
 LDY #$0027 ; 1 LIGNE
MAPPAGE1 LDAL $04BED0,X
INIT0518 STAL $050000,X
INIT0519 STAL $050050,X
INIT0520 STAL $053E80,X
INIT0521 STAL $053ED0,X
 INX
 INX
 DEY
 BPL MAPPAGE1
 LDA MAPPAGE+1
 CLC
 ADC #$00A0
 STA MAPPAGE+1
 CMP #$3E80 ; 100 LIGNES...
 BNE MAPPAGE
 STZ MAPPAGE+1 ; INIT
 RTS
******

AFFICHZIC LDX #$000E ; LARGEUR
 LDY #$0019 ; HAUTEUR
 LDA MUSICFLAG ; ZIC OR NOT ?
 BEQ AFFICHZIC1
 LDA #$D35E ; PAS ZIC
 STA AFFZONE2+1
 BRA AFFICHZIC2
AFFICHZIC1 LDA #$D34D ; ZIC
 STA AFFZONE2+1 ; @ SPRITE
AFFICHZIC2 LDA #$7908 ; @ ECRAN
 JMP AFFZONE

AFFICHSON LDX #$000E ; LARGEUR
 LDY #$0019 ; HAUTEUR
 LDA FLGSON ; SON OR NOT ?
 BEQ AFFICHSON1
 LDA #$C27E ; PAS SON
 STA AFFZONE2+1
 BRA AFFICHSON2
AFFICHSON1 LDA #$C26D ; SON
 STA AFFZONE2+1 ; @ SPRITE
AFFICHSON2 LDA #$7888 ; @ ECRAN
 JMP AFFZONE

AFFICHDIF LDX #$0010 ; LARGEUR
 LDY #$0019 ; HAUTEUR
 LDA FLGDIF ; DIFFICULTE
 BEQ AFFICHDIF2
 CMP #$0001
 BEQ AFFICHDIF1
 CMP #$0002
 BEQ AFFICHDIF4
 LDA #$E424 ; MAYHEM
 STA AFFZONE2+1
 BRA AFFICHDIF3
AFFICHDIF4 LDA #$D33A ; TAXING
 STA AFFZONE2+1
 BRA AFFICHDIF3
AFFICHDIF1 LDA #$C25A ; TRICKY
 STA AFFZONE2+1
 BRA AFFICHDIF3
AFFICHDIF2 LDA #$B17A ; FUN
 STA AFFZONE2+1 ; @ SPRITE
AFFICHDIF3 LDA #$79E3 ; @ ECRAN
 JMP AFFZONE

******

AFFZONE STX AFFZONE1+1 ; RECOPIE UN SPRITE SUR L'ECRAN
 STA AFFZONE3+1
 LDA AFFZONE3+2
 AND #$FF00
 CMP BANC05
 BNE AFFZONE1
 LDA AFFZONE3+1  ; ON VIRE #$2000
 SEC
 SBC #$2000
 STA AFFZONE3+1
AFFZONE1 LDX #$0000 ; NOMBRE DE *4-2
AFFZONE2 LDAL $042000,X ; ADRESSE ZONE SPRITE
AFFZONE3 STAL $012000,X ; ADRESSE ZONE ECRAN PROUT
 DEX
 DEX
 BPL AFFZONE2 ; RECOPIE 1 LIGNE
 LDA AFFZONE2+1
 CLC  ; LIGNE SUIVANTE SPRITE
 ADC #$00A0
 STA AFFZONE2+1
 LDA AFFZONE3+1
 CLC  ; LIGNE SUIVANTE ECRAN
 ADC #$00A0
 STA AFFZONE3+1
 DEY
 BPL AFFZONE1
 RTS

AFFLVL DEC ; RECOPIE UN SPRITE VERS DE 06 VERS 05
 ASL
 STA AFFLVL1+1
AFFLVL1 LDX #$0000 ; NOMBRE DE *4-2
AFFLVL2 LDAL $060000,X ; ADRESSE ZONE SPRITE
AFFLVL3 STAL $050000,X ; ADRESSE ZONE ECRAN PROUT
 DEX
 DEX
 BPL AFFLVL2 ; RECOPIE 1 LIGNE
 LDA AFFLVL2+1
 CLC  ; LIGNE SUIVANTE SPRITE
 ADC #$00A0
 STA AFFLVL2+1
 LDA AFFLVL3+1
 CLC  ; LIGNE SUIVANTE ECRAN
 ADC #$00A0
 STA AFFLVL3+1
 DEY
 BNE AFFLVL1
 RTS

CLNZONE STA CLNZONE2+1 ; EFFACE UNE ZONE
 STA CLNZONE3+1
 STX CLNZONE1+1
CLNZONE1 LDX #$0000 ; NOMBRE DE *4-2
CLNZONE2 LDAL $012000,X ; ADRESSE ZONE
CLNZONE3 STAL $012000,X ; ADRESSE ZONE
 DEX
 DEX
 BPL CLNZONE2 ; RECOPIE 1 LIGNE
 LDA CLNZONE2+1
 CLC  ; LIGNE SUIVANTE SPRITE
 ADC #$00A0
 STA CLNZONE2+1
 LDA CLNZONE3+1
 CLC  ; LIGNE SUIVANTE ECRAN
 ADC #$00A0
 STA CLNZONE3+1
 DEY
 BPL CLNZONE1
 RTS

********* FADE IN / FADE OUT / FADE UP / FADE DOWN

FADEIN LDX #$7DFE ; COPIE HAUT DE L'IMAGE
IN00 LDAL $050000,X
 STAL $012000,X
 DEX
 DEX
 BPL IN00
FADEIN1 LDX #$01FE
 LDA #$0000 ; NETTOYAGE PREALABLE DES PALETTES
IN0 STAL $019E00,X
 DEX
 DEX
 BPL IN0
 LDY #$000F ; L'IMAGE EST EN BANC 05/0000
IN1 LDX #$01FE ; ELLE VIENT D'ETRE DECOMPRESSEE
IN2 LDAL $019E00,X ; ON FAIT UN FADE SUR LES 16 PALETTES
 AND #$000F
 STA TEMP
IN3 LDAL $057E00,X
 AND #$000F
 CMP TEMP
 BEQ IN4
 LDAL $019E00,X ; COMPOSANTE BLEUE
 CLC
 ADC #$0001
 STAL $019E00,X
IN4 LDAL $019E00,X
 AND #$00F0
 STA TEMP
IN5 LDAL $057E00,X
 AND #$00F0
 CMP TEMP
 BEQ IN6
 LDAL $019E00,X ; COMPOSANTE VERTE
 CLC
 ADC #$0010
 STAL $019E00,X
IN6 LDAL $019E00,X
 AND #$0F00
 STA TEMP
IN7 LDAL $057E00,X
 AND #$0F00
 CMP TEMP
 BEQ IN8
 LDAL $019E00,X ; COMPOSANTE ROUGE
 CLC
 ADC #$0100
 STAL $019E00,X
IN8 DEX
 DEX
 BPL IN2
 JSR nextVBL
 DEY
 BPL IN1
 RTS
TEMP HEX 0000

FADEOUT LDY #$000F ; FADEOUT
OUT0 LDX #$01FE
OUT1 LDAL $019E00,X ; COMPOSANTE BLEUE
 AND #$000F
 BEQ OUT2
 LDAL $019E00,X
 SEC
 SBC #$0001
 STAL $019E00,X
OUT2 LDAL $019E00,X ; COMPOSANTE VERTE
 AND #$00F0
 BEQ OUT3
 LDAL $019E00,X
 SEC
 SBC #$0010
 STAL $019E00,X
OUT3 LDAL $019E00,X ; COMPOSANTE ROUGE
 AND #$0F00
 BEQ OUT4
 LDAL $019E00,X
 SEC
 SBC #$0100
 STAL $019E00,X
OUT4 DEX
 DEX
 BPL OUT1
 JSR nextVBL ; WAIT
 DEY
 BPL OUT0
 RTS

FADEDOWN LDX #$01FE
 LDA #$0FFF ; NETTOYAGE PREALABLE DES PALETTES
DOWN0 STAL $019E00,X
 DEX
 DEX
 BPL DOWN0
 LDX #$7DFE ; COPIE L'IMAGE
DOWN00 LDAL $050000,X
 STAL $012000,X
 DEX
 DEX
 BPL DOWN00
 LDY #$000F ; L'IMAGE EST EN BANC 05/0000
DOWN1 LDX #$01FE ; ELLE VIENT D'ETRE DECOMPRESSEE
DOWN2 LDAL $019E00,X ; ON FAIT UN FADE SUR LES 16 PALETTES
 AND #$000F
 STA TEMP
DOWN3 LDAL $057E00,X
 AND #$000F
 CMP TEMP
 BEQ DOWN4
 LDAL $019E00,X ; COMPOSANTE BLEUE
 SEC
 SBC #$0001
 STAL $019E00,X
DOWN4 LDAL $019E00,X
 AND #$00F0
 STA TEMP
DOWN5 LDAL $057E00,X
 AND #$00F0
 CMP TEMP
 BEQ DOWN6
 LDAL $019E00,X ; COMPOSANTE VERTE
 SEC
 SBC #$0010
 STAL $019E00,X
DOWN6 LDAL $019E00,X
 AND #$0F00
 STA TEMP
DOWN7 LDAL $057E00,X
 AND #$0F00
 CMP TEMP
 BEQ DOWN8
 LDAL $019E00,X ; COMPOSANTE ROUGE
 SEC
 SBC #$0100
 STAL $019E00,X
DOWN8 DEX
 DEX
 BPL DOWN2
 JSR nextVBL
 DEY
 BPL DOWN1
 RTS

FADEUP LDY #$000F ; FADEUP
UP0 LDX #$01FE
UP1 LDAL $019E00,X ; COMPOSANTE BLEUE
 AND #$000F
 CMP #$000F
 BEQ UP2
 LDAL $019E00,X
 CLC
 ADC #$0001
 STAL $019E00,X
UP2 LDAL $019E00,X ; COMPOSANTE VERTE
 AND #$00F0
 CMP #$00F0
 BEQ UP3
 LDAL $019E00,X
 CLC
 ADC #$0010
 STAL $019E00,X
UP3 LDAL $019E00,X ; COMPOSANTE ROUGE
 AND #$0F00
 CMP #$0F00
 BEQ UP4
 LDAL $019E00,X
 CLC
 ADC #$0100
 STAL $019E00,X
UP4 DEX
 DEX
 BPL UP1
 JSR nextVBL ; WAIT
 DEY
 BPL UP0
 RTS
*****

WAITFADE LDA #$4000 ; ATTENTE ENTRE CHAQUE ETAPE
WAITFADE1 NOP
 NOP
 DEC
 BNE WAITFADE1
 RTS

WAITCODESUC LDX #$0020 ; ATTENTE CODE OK
 BRA WAITCODE1
WAITCODEERR LDX #$0015 ; ATTENTE CODE FAUX
WAITCODE1 LDA #$FFFF
WAITCODE2 NOP
 DEC
 BNE WAITCODE2
 DEX
 BNE WAITCODE1
 RTS

nextVBL lda #75
 pha
]lp ldal $e0c02e
 and #$7f
 cmp 1,s
 blt ]lp
 cmp #100
 bge ]lp
 pla
waitVBL ldal $e0c018
 bpl waitVBL
 rts

*******************************************************************************
*********************  ANIMATION EN BAS DE L'ECRAN MAIN  **********************

 mx %00

startSCROLL PushLong #0 ; Get previous vector
 PushWord #$0a
 _GetVector
 pla
 sta oldVECTOR
 pla
 sta oldVECTOR+2

 ldal $019d64 ; Interrupt sur la premiere ligne
 ora #$40
 stal $019d64

 PushWord #$0a ; Set ScanLine Interrupt
 lda BANC03+1
 pha
 lda #taskSCROLL
 pha
 _SetVector

 PushWord #$0c ; Enable ScanLine Interrupt
 _IntSource
 rts

stopSCROLL PushWord #$0d
 _IntSource

 PushWord #$0a
 PushLong oldVECTOR
 _SetVector
 rts

oldVECTOR ds 4

*--- La routine de scroll

taskSCROLL phb
 phk
 plb

 clc
 xce
 rep #$30

 ldal $e0c032
 and #$ffdf
 stal $e0c032

 lda TIMESTOP ; SCROLLING ARRETE ?
 beq taskSCROLL1
 dec TIMESTOP
 bra taskSCROLL2

taskSCROLL1 jsr AFFICHTOURN
 jsr SCROLLING
 jsr PLACELET

taskSCROLL2 clc
 xce
 sep #$30
 plb
 rtl

TIMESTOP ds 2

 mx %00

*********

AFFICHTOURN LDA TOURNPAS ; AFFICHAGE TOURNEUR
 BEQ AFFICHTOURN0
 STZ TOURNPAS
 RTS

AFFICHTOURN0 LDA FLGTOURN
 ASL
 TAX
 LDA TABLETOURNG,X
 STA AFFTOURN2+1 ; GAUCHE
 LDA TABLETOURND,X
 STA AFFTOURN4+1 ; DROITE

 LDA #$9440 ; ADRESSE ECRAN GAUCHE
 STA AFFTOURN3+1
 LDA #$94D4 ; ADRESSE ECRAN DROITE
 STA AFFTOURN5+1

 LDY #$000D ; HAUTEUR
AFFTOURN1 LDX #$000A ; LARGEUR
AFFTOURN2 LDAL $048000,X ; ADRESSE ZONE SPRITE
AFFTOURN3 STAL $012000,X ; ADRESSE ZONE ECRAN PROUT
AFFTOURN4 LDAL $048000,X
AFFTOURN5 STAL $012000,X
 DEX
 DEX
 BPL AFFTOURN2 ; RECOPIE 1 LIGNE
 LDA AFFTOURN2+1
 CLC  ; LIGNE SUIVANTE SPRITE
 ADC #$00A0
 STA AFFTOURN2+1
 LDA AFFTOURN4+1
 CLC
 ADC #$00A0
 STA AFFTOURN4+1
 LDA AFFTOURN3+1
 CLC  ; LIGNE SUIVANTE ECRAN
 ADC #$00A0
 STA AFFTOURN3+1
 CLC
 ADC #$0094
 STA AFFTOURN5+1
 DEY
 BPL AFFTOURN1

 INC TOURNPAS ; 1 COUP SUR 2
 LDA FLGTOURN ; PROCHAIN PAS D'ANIMATION
 CMP #$000E
 BEQ AFFTOURN6
 INC FLGTOURN
 RTS
AFFTOURN6 STZ FLGTOURN
 RTS

TOURNPAS HEX 0000 ; PAS DE TOURNAGE, 1 COUP SUR DEUX
FLGTOURN HEX 0000 ; PAS D'ANIMATION (0->14)
TABLETOURNG HEX E081,A08A,6093,209C,E0A4,A0AD,60B6,20BF,E0C7,A0D0,60D9,20E2,E0EA,A0F3,64F4
TABLETOURND HEX ED81,AD8A,6D93,2D9C,EDA4,ADAD,6DB6,2DBF,EDC7,ADD0,6DD9,2DE2,EDEA,ADF3,DF98

******************

SCROLLING phd

 ldal $e0c068
 ora #%00000000_00110000
 stal $e0c068

 lda #$9300
SCROLLING1 tcd

]copy = $0c
 lup $44 ; 86 / 2
 lda ]copy+1
 sta ]copy
]copy = ]copy+2
 --^

 tdc
 clc
 adc #$00a0

 cmp #$9C60 ; 15 lignes plus bas
 beq SCROLLING2
 brl SCROLLING1

SCROLLING2 ldal $e0c068
 and #$ffcf
 stal $e0c068
 pld
 rts

*******************

PLACELET LDA PARTIELET ; PLACE UN BOUT DE LETTRE
 BNE AFFICHLET

 JSR AFFICHEYES

 LDX INDEXLET
 LDA MESSAGE,X
 AND #$00FF
 BNE PLACELET1
 STZ PARTIELET ; ON SE REMET AU DEBUT DU MESSAGE
 STZ INDEXLET
 BRA PLACELET
PLACELET1 STA PLACELET3+1
 LDY #$004A ; NB DE LETTRE DANS L'ALPHABET
PLACELET2 LDA ALPHABET,Y
 AND #$00FF
PLACELET3 CMP #$A0A0
 BEQ PLACELET4
 DEY
 BPL PLACELET2
 LDY #$0000 ; PAS TROUVE
PLACELET4 TYA  ; TROUVE
 ASL
 TAX
 LDA ADRESSELET,X
 CLC
 ADC #$8000 ; IMAGE SPRITE EN 04/8000
 STA ADRESS
 INC INDEXLET

AFFICHLET LDA ADRESS
 CLC
 ADC PARTIELET
 STA AFFICHLET2+1
 STZ AFFICHLET1+1

 LDY #$000F

AFFICHLET0 sep #$20  ; A:8 BIT, X Y:16 BIT

AFFICHLET1 LDX #$0000
AFFICHLET2 LDAL $04A0A0,X
 STAL $019393,X

 rep #$20

 LDA AFFICHLET1+1
 CLC
 ADC #$00A0
 STA AFFICHLET1+1
 DEY
 BPL AFFICHLET0

 LDA PARTIELET
 INC
 CMP #$0004
 BEQ PLACELET5
 STA PARTIELET
 RTS
PLACELET5 STZ PARTIELET
 LDX INDEXLET ; PAUSE ?
 LDA MESSAGE,X
 AND #$00FF
 CMP #$0001 ; PAUSE
 BNE PLACELET7
PLACELET6 LDA #$0100 ; PAUSE
 STA TIMESTOP
 INC INDEXLET
PLACELET7 RTS

INDEXLET HEX 0000 ; INDICE LE LA LETTRE DANS LE MESSAGE
PARTIELET HEX 0000 ; 0->3
ADRESS HEX 0000

MESSAGE ASC "      Lemmings By DMA Design      ",01
 ASC "   Copyright 1990 Psygnosis Ltd.  ",01
 ASC "                Apple IIgs version in 1996 by         "
 ASC "      Brutal Deluxe Software      ",01
 ASC "                 Atari ST version original Staff :   "
 ASC "      Code - Brian Watson & Dave Jones    "
 ASC "         Graphics - Scott Johnston        "
 ASC "          Animation - Gary Timmons        "
 ASC "     Music - Brian Johnston,Tim Wright                      "
 ASC "        Apple IIgs version Beta Tester Team :         "
 ASC " Babar St Cyr       Jawaid Bazyar       Tony Diaz      "
 ASC " Henrik Gudat       Joe Kohn       Nathan Mates      "
 ASC " Russell Nielson       NinjaForce       Auri Rahimzadeh      "
 ASC " Robert Rivkin       Mitchell Spector       Geoff Weiss            "
 ASC "        Welcome to LemminGS       ",01
 ASC "           92 incredible Levels        "
 ASC "      13 Pieces of toe tarring music              "
 ASC "   We take no responsibility for  ",01
 ASC "         1. Loss of Sleep           "
 ASC "         2. Loss of Hair            "
 ASC "         3. Loss of Sanity          "
 ASC "         4. Elevator Music (??)     "
 ASC "         Beware of Back seat players !!!          "
 ASC "   Good luck to solve the following levels             "
 ASC "Tricky 19 : Postcard from Lemmingland,              "
 ASC "Taxing 4 : Lend a helping hand,                   "
 ASC "Taxing 15 : What an AWESOME level,                 "
 ASC "Taxing 26 : Triple Trouble,                   "
 ASC "Taxing 30 : We all fall down (very easy when you know how...)              "
 ASC "and of course, the famous Level 92...  "
 ASC "(Truth is out there... don't forget)             "
 ASC "Other levels can be considered as easy... :-)         "
 ASC "Even Joe was able to complete more than 50 ones...       :-)                      "
 ASC " We would like to thank you for the purchase of "
 ASC "Convert 3200...           LemminGS requires about the same IIgs configuration "
 ASC "than Convert...        It's an accelerated-4 MB world...                           "
 ASC "   We would like now to say hello to friends of us "
 ASC "who have helped us in LemminGS realization                 "
 ASC "     Jean Christophe Leducq        for the Ultimate Ripper card"
 ASC " and for the time he has spent to have a look into the"
 ASC " Atari ST version, explaining me that I won't be able to"
 ASC " realize it on the IIgs...              "
 ASC "      Cyrille Fontaine        for the cheated ST version               "
 ASC "      Tym Mechain        for his work around the sounds of the Macintosh version            "
 ASC "      Cyril Barbecanne        for the 1040 ST, better than my old 520 ST !!!             "
 ASC "      Jean Marie Ulmann        for the time he has spent on the DOS PC version                 "
 ASC "      LemminGS Technical information          "
 ASC "      26.000 Assembly Lines of code under Merlin 16          "
 ASC "           8 Months of hard work (April 96 - Dec. 96)         "
 ASC "          4 Months of work to take the graphics from the ST version, sprite "
 ASC "per sprite...                 Hundreds of hours under DreamGraphix to check the"
 ASC " animation steps...                 "
 ASC "  Just a sentence :        "
 ASC "      Oh, No More Lemmings !!!    ",01
 ASC "             Don't ask us for another Lemmings"
 ASC " version adaptation...                 If you want to play to"
 ASC "     'Oh No More Lemmings',      'Lemmings 2',      'XMas Lemmings',      'Lemmings Paintball'      or "
 ASC "    '3D Lemmings'                    BUY A PC !!!!                    "
 ASC "            And now, as usually some private messages...              "
 ASC "      March 96, Olivier in vacation...          California for Ever....          I love San Francisco !!!        "
 ASC "  Hamburger, Pizzas and Mexican restaurant with Joe,            Thank you for all the Old Classic games          "
 ASC "  Perhaps next time for the chinese new year show...           "
 ASC "  Crazy night of free speach with Genie's people                     "
 ASC "  Pizzas everytime with Auri...           High speed race with WOZ's Mercedes in Los Gatos streets....           "
 ASC " Nice meeting with Auri and Dave to discover GUS on his PowerMac...          "
 ASC " Very beautiful girls in the Pizza restaurant...          Even if the Pepsi was Flat...     :-)               "
 ASC "      Summer 96,  NinjaForce comes back to France...           Quick ice scream party in Bordeaux streets         "
 ASC "      No merguez sandwiches this time....     :-)      (Thank you for the Photos)               "
 ASC "                   Such a long scrolling !!!            All this time spent to write it instead of looking"
 ASC " to the code to make it faster...          Such a shame !!!          "
 ASC "   and it continues...                        "
 ASC " Animation movies NOT to miss :        Nick Park's  Wallace & Gromit Trilogy "
 ASC "         'A Grand Day Out'             'The Wrong Trousers'              'A Close Shave'         "
 ASC "                Best Manga cartoons :          Cyber City Trilogy          Porco Rosso          Patlabor 1&2"
 ASC "        Macross Plus 1&2           Venus Wars          Wings of Honeamise           Street Fighter II"
 ASC "        Cobra           Ninja Scroll         and we are waiting for           Ghost In The Shell !!!"
 ASC "                                        "
 ASC " To end this wonderful scrolling, we would like to apologize for all the poor little"
 ASC " Lemmings killed during the coding phase...           We have planned to create a foundation"
 ASC " to collect money to build spaces where they could live peacefully....          "
 ASC " We really hope your support for such a project..."
 ASC "                                          ",00

ALPHABET ASC "0123456789"
 ASC "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
 ASC "abcdefghijklmnopqrstuvwxyz"
 ASC "?&-%!,. '_():"

ADRESSELET HEX FE17,0318,0818,0D18,1218,1718,1C18,2118,2618,2B18
 HEX FB0B,000C,050C,0A0C,0F0C,140C,190C,1E0C,230C,280C,2D0C,320C,370C,3C0C,410C,460C
 HEX 4B0C,500C,550C,5A0C,5F0C,640C,690C,6E0C,730C,780C
 HEX BB00,C000,C500,CA00,CF00,D400,D900,DE00,E300,E800,ED00,F200,F700,FC00,0101,0601
 HEX 0B01,1001,1501,1A01,1F01,2401,2901,2E01,3301,3801
 HEX DB17,E017,E517,EA17,EF17,F417,F917,4E18,5318,5818,3018,3518,3A18

*****************************************************************
********************  AFFCHAGE MESSAGE  *************************

AFFICHMES STX AFFICHLETBRUT4+2 ; ADRESSE BANC DESTINATION
 STX AFFICHLETBRUT6+2
 STX AFFICHLETMASQ2+2
 STX AFFICHLETMASQ5+2
 STX AFFICHLETMASQ6+2
 STX AFFICHLETMASQ9+2
 STY AFFICHMES5+1 ; ADRESSE ECRAN DESTINATION
 STA AFFICHMES1+1 ; ADRESSE MESSAGE

 LDX #$0000 ; INDEX DANS LE MESSAGE
AFFICHMES1 LDA $A0A0,X
 AND #$00FF
 BEQ AFFICHMESFIN ; 00: FIN DE MESSAGE, ON SORT
 STA AFFICHMES3+1
 INX
 PHX  ; SVG X

 LDY #$004A ; NB DE LETTRE DANS L'ALPHABET
AFFICHMES2 LDA ALPHABET,Y
 AND #$00FF
AFFICHMES3 CMP #$A0A0
 BEQ AFFICHMES4
 DEY
 BPL AFFICHMES2
 LDY #$0000 ; PAS TROUVE
AFFICHMES4 TYA  ; TROUVE
 ASL
 TAX  ; INDICE ADRESSE LETTRE
AFFICHMES5 LDA #$A0A0 ; ADRESSE ECRAN LETTRE
 JSR AFFICHLETSEL ; AFFICHAGE FOND NOIR
 LDA AFFICHMES5+1
 CLC
 ADC #$0004
 STA AFFICHMES5+1 ; ADRESSE ECRAN LETTRE SUIVANTE
 PLX  ; RECUPERE X: INDEX MESSAGE
 BRA AFFICHMES1
AFFICHMESFIN RTS

AFFICHLETSEL LDY FLAGMASQ ; SELECTION BRUT/MASQUE
 BEQ AFFICHLETBRUT ; 0: FOND NOIR
 BRA AFFICHLETMASQ ; 1: MASQUE

FLAGMASQ HEX 0000

********

AFFICHLETBRUT STA AFFICHLETBRUT4+1 ; ADRESSE ECRAN DESTINATION
 INC
 INC
 STA AFFICHLETBRUT6+1
 LDA ADRESSELET,X ; ADRESSE SPRITE LETTRE
 CLC
 ADC #$8000
 STA AFFICHLETBRUT3+1
 INC
 INC
 STA AFFICHLETBRUT5+1
 LDY #$000F ; NB DE LIGNES
AFFICHLETBRUT2 LDX #$0000
AFFICHLETBRUT3 LDAL $058000,X ; 1 LIGNE
AFFICHLETBRUT4 STAL $A0A0A0,X
AFFICHLETBRUT5 LDAL $058002,X
AFFICHLETBRUT6 STAL $A0A0A2,X
 LDA AFFICHLETBRUT2+1
 CLC
 ADC #$00A0
 STA AFFICHLETBRUT2+1
 DEY
 BPL AFFICHLETBRUT2
 STZ AFFICHLETBRUT2+1 ; INIT EN SORTIE
 RTS

AFFICHLETMASQ STA AFFICHLETMASQ2+1 ; ADRESSE ECRAN DESTINATION
 STA AFFICHLETMASQ5+1
 INC
 INC
 STA AFFICHLETMASQ6+1
 STA AFFICHLETMASQ9+1
 LDA ADRESSELET,X ; ADRESSE SPRITE LETTRE
 CLC
 ADC #$8000
 STA AFFICHLETMASQ4+1
 INC
 INC
 STA AFFICHLETMASQ8+1
 CLC
 ADC #$21C0 ; 54 LIGNES PLUS BAS
 STA AFFICHLETMASQ7+1
 DEC
 DEC
 STA AFFICHLETMASQ3+1 ; ADRESSE MASQUE LETTRE

 LDY #$000F ; NB DE LIGNES
AFFICHLETMASQ1 LDX #$0000
AFFICHLETMASQ2 LDAL $A0A0A0,X ; 1 LIGNE
AFFICHLETMASQ3 ANDL $058000,X ; MASQUE
AFFICHLETMASQ4 ORAL $058000,X ; SPRITE
AFFICHLETMASQ5 STAL $A0A0A0,X
AFFICHLETMASQ6 LDAL $A0A0A2,X
AFFICHLETMASQ7 ANDL $058002,X ; MASQUE
AFFICHLETMASQ8 ORAL $058002,X ; LETTRE
AFFICHLETMASQ9 STAL $A0A0A2,X
 LDA AFFICHLETMASQ1+1
 CLC
 ADC #$00A0
 STA AFFICHLETMASQ1+1
 DEY
 BPL AFFICHLETMASQ1
 STZ AFFICHLETMASQ1+1 ; INIT EN SORTIE
 RTS

AFFICHCHIBRUT STX AFFICHLETBRUT4+2 ; A : VALEUR
 STX AFFICHLETBRUT6+2 ; X : ADRESSE BANC
 STY AFFICHCHIBRUT1+1 ; Y : ADRESSE BASSE
 JSR CHIFFRE
 LDA CHIFCEN ; AFFICHAGE CENTAINE
 BEQ AFFICHCHIBRUT2
 ASL
 TAX
AFFICHCHIBRUT1 LDA #$A0A0
 JSR AFFICHLETBRUT
 LDA AFFICHCHIBRUT1+1
 CLC
 ADC #$0004
 STA AFFICHCHIBRUT1+1
 LDA CHIFDIZ ; AFFICHAGE DIZAINE SI CENTAINE
 ASL
 TAX
 LDA AFFICHCHIBRUT1+1
 JSR AFFICHLETBRUT
 BRA AFFICHCHIBRUT3
AFFICHCHIBRUT2 LDA CHIFDIZ ; AFFICHAGE DIZAINE SANS CENTAINE
 BEQ AFFICHCHIBRUT4
 ASL
 TAX
 LDA AFFICHCHIBRUT1+1
 JSR AFFICHLETBRUT
AFFICHCHIBRUT3 LDA AFFICHCHIBRUT1+1
 CLC
 ADC #$0004
 STA AFFICHCHIBRUT1+1
AFFICHCHIBRUT4 LDA CHIFUNI ; AFFICHAGE UNITE
 ASL
 TAX
 LDA AFFICHCHIBRUT1+1
 JSR AFFICHLETBRUT
 RTS

AFFICHCHIMASQ STX AFFICHLETMASQ2+2 ; A : VALEUR
 STX AFFICHLETMASQ5+2 ; X : ADRESSE BANC
 STX AFFICHLETMASQ6+2 ; Y : ADRESSE BASSE
 STX AFFICHLETMASQ9+2
 STY AFFICHCHIMASQ1+1
 JSR CHIFFRE
 LDA CHIFCEN ; AFFICHAGE CENTAINE
 BEQ AFFICHCHIMASQ2
 ASL
 TAX
AFFICHCHIMASQ1 LDA #$A0A0
 JSR AFFICHLETMASQ
 LDA AFFICHCHIMASQ1+1
 CLC
 ADC #$0004
 STA AFFICHCHIMASQ1+1
 LDA CHIFDIZ ; AFFICHAGE DIZAINE SI CENTAINE
 ASL
 TAX
 LDA AFFICHCHIMASQ1+1
 JSR AFFICHLETMASQ
 BRA AFFICHCHIMASQ3
AFFICHCHIMASQ2 LDA CHIFDIZ ; AFFICHAGE DIZAINE SANS CENTAINE
 BEQ AFFICHCHIMASQ4
 ASL
 TAX
 LDA AFFICHCHIMASQ1+1
 JSR AFFICHLETMASQ
AFFICHCHIMASQ3 LDA AFFICHCHIMASQ1+1
 CLC
 ADC #$0004
 STA AFFICHCHIMASQ1+1
AFFICHCHIMASQ4 LDA CHIFUNI ; AFFICHAGE UNITE
 ASL
 TAX
 LDA AFFICHCHIMASQ1+1
 JSR AFFICHLETMASQ
 RTS

CHIFFRE LDX #$0000 ; A : VALEUR A DISPATCHER
 LDY #$0000
CHIFFRE1 CMP #$0064
 BMI CHIFFRE2
 SEC
 SBC #$0064
 INY
 BRA CHIFFRE1
CHIFFRE2 CMP #$000A
 BMI CHIFFRE3
 SEC
 SBC #$000A
 INX
 BRA CHIFFRE2
CHIFFRE3 STY CHIFCEN
 STX CHIFDIZ
 STA CHIFUNI
 RTS

CHIFCEN HEX 0000 ; CENTAINE
CHIFDIZ HEX 0000 ; DIZAINE
CHIFUNI HEX 0000 ; UNITE

*****************************************************************
********************  PALETTES  *********************************

PALETTER HEX 0000,4200,2200,2000,2902,0400,990F,2202,0000,FF0F,BB0F,990D,440B,220B,0009,0004
PALETTEB HEX 0000,4200,2200,2000,2902,0400,990F,2202,0000,FF0F,DF0B,BD06,9D02,6D00,2900,0400
PALETTEVC HEX 0000,4200,2200,2000,2902,0400,990F,2202,0000,FF0F,DB0B,D606,B404,9202,6000,2000
PALETTEM HEX 0000,4200,2200,2000,2902,0400,990F,2202,0000,FF0F,DB0D,960B,640B,4209,2006,0002
PALETTEV HEX 0000,4200,2200,2000,2902,0400,990F,2202,0000,FF0F,DD0B,BB06,B904,9902,6600,2000
PALETTEMV HEX 0000,4200,2200,2000,2902,0400,990F,2202,0000,FF0F,BD0D,6B0B,4B09,2909,0606,0202

PALETTEVM HEX 0000,4F04,B000,DD0F,2902,0400,990F,2202,0000,FF0F,DB0B,D606,B404,9202,6000,2000
PALETTEJEU HEX 0000,2B04,9000,DD0D,000D,0004,220F,D000,D00F,660D,440B,0002,2206,2204,4409,0004

PALETTELVL1 HEX 0200,4F04,B000,DD0F,F00F,220F,9909,600D,600D,400B,2009,0006,4404,6606,9006,6202 ; VERT/MARRON
PALETTELVL2 HEX 0200,4F04,B000,DD0F,F00F,220F,9909,F60F,F60F,B40D,920B,400B,2009,0004,6606,4404 ; JAUNE/MARRON
PALETTELVL4 HEX 0200,4F04,B000,DD0F,F00F,220F,9909,DF0D,DF0D,DD0F,BF0B,BB0F,6D09,990F,440B,2209 ; VIOLET
PALETTELVL5 HEX 0200,4F04,B000,DD0F,F00F,220F,9909,FF0F,FF0F,DD0B,BB06,9B04,6902,4400,4404,0000 ; BLEU
PALETTELVL6 HEX 0200,4F04,B000,DD0F,F00F,220F,9909,6900,6900,0009,4404,2204,4406,6609,000D,4600 ; ROUGE
PALETTELVLV HEX 0000,4F04,B000,DD0F,F00F,220F,9909,600D,600D,6204,4002,4002,2000,4204,4204,2002 ; VERT HS
PALETTELVLR HEX 0000,4F04,B000,DD0F,F00F,220F,9909,600D,600D,460D,000B,0006,9409,6206,4004,2002 ; ROUGE HS
PALETTELVLM HEX 0000,4F04,B000,DD0F,F00F,220F,9909,600D,600D,9D02,4902,2602,660B,4206,2204,2202 ; MAUVE HS
******

KBD LDAL $00BFFF ; LECTURE DU CLAVIER
 BPL KBD
 STAL $00C010
 RTS
****
AFFICHOUT LDA AFFICHOUTFLAG ; NB DE LEMMINGS EN JEU
 BEQ AFFICHOUT2
 LDY #$0000
 LDX #$644C
AFFICHOUT1 LDA #$0000
 STAL $012000,X
 STAL $012002,X
 STAL $012004,X
 STAL $012006,X
 TXA
 CLC
 ADC #$00A0
 TAX
 INY
 CPY #$0010
 BNE AFFICHOUT1
 LDA NBJEU
 LDX #$0120
 LDY #$8448
 JSR AFFICHCHIBRUT
 STZ AFFICHOUTFLAG
AFFICHOUT2 RTS
AFFICHOUTFLAG HEX 0000 ; A 1 S'IL FAUT AFFICHER

AFFICHIN LDA AFFICHINFLAG ; % DES LEMMINGS RENTRE
 BEQ AFFICHIN4
 LDX #$0120
 LDY #$8468
 LDA #$0000
 JSR AFFICHCHIBRUT
 LDX #$0120
 LDA NBIN
 CMP #$000A
 BPL AFFICHIN2
 LDY #$846C ; UN CHIFFRE
 JSR AFFICHCHIBRUT
 RTS
AFFICHIN2 CMP #$0064 ; DEUX CHIFFRES
 BMI AFFICHIN3
 LDA #$0063 ; 99% MAX
AFFICHIN3 LDY #$8468
 JSR AFFICHCHIBRUT
 STZ AFFICHINFLAG
AFFICHIN4 RTS
AFFICHINFLAG HEX 0000

*****************  AFFICHAGE DES YEUX POUR L'ECARN MAIN  **************

AFFICHEYES LDA CURRENTEYES ; YEUX QUI CLIGNOTENT
 BNE AFFICHEYES1
 LDA COMPTEUREYES
 CMP #$0014
 BEQ AFFICHEYES01
 INC
 STA COMPTEUREYES
 RTS
AFFICHEYES01 STZ COMPTEUREYES
 LDA LASTEYES ; YEUX SUIVANTS
 CMP #$0007
 BEQ AFFICHEYES02
 INC  ; ON ANIME LE SUIVANT
 BRA AFFICHEYES03
AFFICHEYES02 LDA #$0001 ; ON ANIME LE PREMIER
AFFICHEYES03 STA LASTEYES
 STA CURRENTEYES
 DEC  ; ADRESSE ECRAN
 ASL
 TAY
 LDA EYESADRESSE,Y
 STA AFFICHEYES11+5
 INC
 INC
 STA AFFICHEYES12+5
 INC
 INC
 STA AFFICHEYES13+5
 INC
 INC
 STA AFFICHEYES14+5
 LDA EYESX0,Y ; COORDONNEES X0/Y0
 STA AFFICHEYES100+1
 CLC
 ADC #$0010
 STA AFFICHEYES101+1
 LDA EYESY0,Y
 STA AFFICHEYES102+1
 CLC
 ADC #$000C
 STA AFFICHEYES103+1
 RTS
**
AFFICHEYES1 LDA PASEYES ; ON AFFICHE L'OEIL
 ASL
 STA AFFICHEYES0+1
 LDA CURRENTEYES
 DEC
 ASL
 TAY
 LDA EYESTAB,Y
 CLC
AFFICHEYES0 ADC #$A0A0
 TAY
 LDA\ $0000,Y ; ADRESSE SPRITE
 BNE AFFICHEYES00 ; FIN DE TABLE
 JMP AFFICHEYES2
AFFICHEYES00 STA AFFICHEYES11+1
 INC
 INC
 STA AFFICHEYES12+1
 INC
 INC
 STA AFFICHEYES13+1
 INC
 INC
 STA AFFICHEYES14+1
 LDA POSX ; FAUT IL ENLEVER LE CURSEUR ?
 CLC
 ADC #$001C ; 28
AFFICHEYES100 CMP #$A0A0 ; X0
 BMI AFFICHEYES10
 LDA POSX
AFFICHEYES101 CMP #$A0A0 ; X1
 BPL AFFICHEYES10
 LDA POSY
 CLC
 ADC #$001C ; 28
AFFICHEYES102 CMP #$A0A0 ; Y0
 BMI AFFICHEYES10
 LDA POSY
AFFICHEYES103 CMP #$A0A0 ; Y1
 BPL AFFICHEYES10
 JSR DESS1 ; EFFACE LE CURSEUR
 INC CURSEYES
AFFICHEYES10 LDX #$0000 ; ADRESSE ECRAN
 LDY #$0000
AFFICHEYES11 LDAL $048000,X
 STAL $010000,X
AFFICHEYES12 LDAL $048000,X
 STAL $010002,X
AFFICHEYES13 LDAL $048000,X
 STAL $010004,X
AFFICHEYES14 LDAL $048000,X
 STAL $010006,X
 TXA
 CLC
 ADC #$00A0
 TAX
 INY
 CPY #$000C ; 12 LIGNES DE HAUT
 BNE AFFICHEYES11
 INC PASEYES ; PAS SUIVANT
AFFICHEYES15 LDA CURSEYES
 BEQ AFFICHEYES16
 JSR SAUV ; REMET LE CURSEUR
 JSR TRACE6
AFFICHEYES16 STZ CURSEYES
 RTS
**
AFFICHEYES2 STZ CURRENTEYES ; FIN DE CLIGEMENT
 STZ PASEYES
 RTS
**

COMPTEUREYES HEX 0000 ; COMPTEUR ENTRE DEUX CLIGNEMENTS
CURRENTEYES HEX 0000 ; NUMERO DES YEUX (0:AUCUN)
LASTEYES HEX 0000 ; ANCIEN EYES
PASEYES HEX 0000 ; NUMERO DE PAS
CURSEYES HEX 0000 ; CURSEUR A REMETTRE ?

EYESADRESSE HEX E83F,E03E,8C6F,2C6F,4C70,BC3A,0C70
EYESX0 HEX 1000,8000,5800,D800,9800,F800,1800 ; X0 EYES
EYESY0 HEX 3300,3100,7F00,7E00,8000,2A00,8000 ; Y0 EYES
EYESTAB DA EYES1,EYES2,EYES3,EYES4,EYES5,EYES6,EYES7
EYES1 HEX B9A2,C2A2,CBA2,D4A2,DDA2,E6A2,EFA2,F8A2,0000
EYES2 HEX E2AA,EBAA,F4AA,FDAA,06AB,0FAB,18AB,0000
EYES3 HEX 02B3,0BB3,14B3,1DB3,26B3,2FB3,38B3,0000
EYES4 HEX ECBA,F5BA,FEBA,07BB,1AE4,3AEC,5AF4,0000
EYES5 HEX CCB2,D5B2,DEB2,E7B2,F0B2,F9B2,D9AA,0000
EYES6 HEX 7AA2,83A2,8CA2,95A2,9EA2,A7A2,B0A2,0000
EYES7 HEX FAA9,03AA,0CAA,15AA,1EAA,27AA,30AA,0000

*******************  CREE LE PETIT NIVEAU EN BAS  *******************

CREELVLBAS LDA #$0A00 ; CREE L'OMBRE DU NIVEAU
 STA CREELVLBAS31+2
 STZ CREELVLBAS31+1 ; BANC 0A
 LDA #$6FA8
 STA CREELVLBAS34+1 ; ADRESSE ECRAN
 LDY #$0000
 JSR CREELVLBAS3 ; 1ere MOITIE
CREELVLBAS1 LDA #$0B00
 STA CREELVLBAS31+2
 STZ CREELVLBAS31+1 ; BANC 0B
 LDY #$0000
 JSR CREELVLBAS3 ; 2eme MOITIE
 RTS
****

CREELVLBAS3 PHY  ; 1 MOITIE
 STZ CREELVLBASOFF
 LDX #$002E ; 1 LIGNE
CREELVLBAS30 STZ CREELVLBASLIG,X ; NETTOYAGE
 DEX
 DEX
 BPL CREELVLBAS30
 LDX #$0000 ; REMPLISSAGE
CREELVLBAS31 LDAL $0A0000,X
 AND #$00F0
 BEQ CREELVLBAS32
 PHX
 LDA CREELVLBASOFF ; OFFSET
 LSR
 TAX
 LDA CREELVLBASOFF ; (0->96)
 AND #$0001 ; 0/1
 ASL
 TAY
 LDA CREELVLBASLIG,X
 ORA CREELVLBASM,Y ; MASQUE CORRESPONDANT
 STA CREELVLBASLIG,X
 PLX
CREELVLBAS32 INC CREELVLBASOFF
 TXA
 CLC
 ADC #$0008
 TAX
 CPX #$0300 ; 96 POINTS
 BNE CREELVLBAS31
 LDX #$002E ; RECOPIE LA LIGNE
CREELVLBAS33 LDA CREELVLBASLIG,X
CREELVLBAS34 STAL $050000,X ; ECRAN
 DEX
 DEX
 BPL CREELVLBAS33

 LDA CREELVLBAS31+1 ; LIGNE SUIVANTE
 CLC
 ADC #$1900
 STA CREELVLBAS31+1 ; SRC
 LDA CREELVLBAS34+1
 CLC
 ADC #$00A0
 STA CREELVLBAS34+1 ; DEST
 PLY
 INY
 CPY #$000A
 BEQ CREELVLBAS36
 JMP CREELVLBAS3
CREELVLBAS36 RTS

CREELVLBASLIG DS 48 ; 1 LIGNE
CREELVLBASM HEX 0020,0002
CREELVLBASOFF HEX 0000 ; OFFSET

*************************************************************************
