****************************************************************
*
*              Pick'n Pile GS
*              --------------
*
* Version      :        Master
* Conversion   :        Atreid Concept SA
****************************************************************

         list off
         absaddr on
         instime on
         gen off
         symbol off
         keep Shell

         mcopy Sh.Macros


True           gequ $8000
False          gequ $0000
GSOS           gequ $e100b0



Shell          START Main

               phk
               plb
               tdc
               sta MyZp
               tcs
               sta MyStack
               lda #Decoy1Rout-1000
               sta Decoy1+1

               jsr InitStuff            ;preparation du jeu
               bcs AllDone

               jsr PlayWithIt           ;on va jouer

AllDone        anop                     ;on s'en va
               ldx #0
               lda #0
AllDoneClear   anop
               sta >$e12000,x
               sta >$012000,x
               inx
               inx
               cpx #32000
               bne AllDoneClear

               phd

               PushLong #MyVBL
               _DelHeartBeat

               ldx #0
FreeMemory     anop
               lda Handle1,x
               sta Temp
               lda Handle1+2,x
               sta Temp+2
               phx

               PushLong Temp
               _DisposeHandle

               plx
               inx
               inx
               inx
               inx
               cpx #31*4                ;dispose de 31 handles
               bne FreeMemory

               _SoundShutDown

               PushLong SoundZPhdl
               _DisposeHandle

               _IMShutDown

               _MTShutDown

               PushWord MyID
               _MMShutDown

               _TLShutDown

               PushLong #QuitParams
               PushWord #$2029
               jsl GSOS

               brk $F0





phplay1        str '1. 1 PLAYER'
phplay2        str '1. 2 PLAYERS'
phlevelhard    str '2. LEVEL HARD'
phleveleasy    str '2. LEVEL EASY'
phjoy          str '3. JOYSTICK'
phmouse        str '3. MOUSE KEYS'
phtictac1      str '4. TICTAC ON'
phtictac2      str '4. TICTAC OFF'
phgameover     str 'GAME OVER'
phextralife    str 'EXTRA LIFE'
phbest         str 'ENTER YOUR NAME'
phtolate       str 'SORRY TOO LATE !'
phplayer1      str 'PLAYER 1'
phplayer2      str 'PLAYER 2'
phready        str 'READY !'
phPause        str 'PAUSE'
name1          str ']]]]]]]]]]'
name2          str ']]]]]]]]]]'
phnumber1      str 'RANK  :'
phlevel1       str 'LEVEL :'
phname1        str 'NAME  :'
phscore        str 'SCORE :'
phhi           str 'BEST SCORES'

vbest          anop
               dc i2'10'
               str 'NICOLAS   '
               dc i4'100000'
               dc i2'8'
               str 'MICHEL    '
               dc i4'70000'
               dc i2'6'
               str 'VERONIQUE '
               dc i4'50000'
               dc i2'4'
               str 'SYLVIE    '
               dc i4'20000'
               dc i2'2'
               str 'SERGE     '
               dc i4'10000'
               ds 20
vbestend       anop

ErrStringMem   dc h'7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f',h'0d'
               dc h'7f7f',c' Memory Error ! ',h'7f7f',h'0d'
               dc h'7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f',h'0'
ErrStringDOS   dc h'7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f',h'0d'
               dc h'7f7f',c' Disk Error ! ',h'7f7f',h'0d'
               dc h'7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f',h'0'
ErrStringKey   dc c' Press a key. ',h'0'
ErrStringQuit  dc c' Leaving the game: ',h'0'

PassString     dc h'1f',c'Enter the password for...',h'1f0d0d'
               dc c'   Row   : ',h'1e',c'  '
PassStringX    dc c'1 ',h'1e0d'
               dc c'   Line  : ',h'1e',c' '
PassStringY    dc c'01 ',h'1e0d0d'
               dc c'      >>>',h'0'

CopyRights     dc h'1e',c'***** Pick n Pile *****',h'1e0d'
               dc c'   (c) UBI Soft 1990',h'0d0d'
               dc h'1f',c'     Atreid Concept    ',h'1f00'

CopyRights2    dc c'* Coordination',h'0d'
               dc c'     N. Gaume',h'0d'
               dc c'* Programmation',h'0d'
               dc c'     P. Lacquehay',h'0d'
               dc c'* Music',h'0d'
               dc c'     J. Dore',h'0d'
               dc c'* Additional pgr',h'0d'
               dc c'     E. Lacquehay',h'0d'
               dc c'     H. Aalbert',h'0d'
               dc c'* Additional graph',h'0d'
               dc c'     N. Bergeret',h'00'




QuitParams     dc i2'2'
               ds 4
               ds 2

MyID           ds 2
ZpHandle       ds 4

MyZP           ENTRY
               ds 2
MyStack        ds 2

SoundZPadr     ds 4
SoundZPhdl     ds 4
Handle1        ds 4
Handle2        ds 4
Handle3        ds 4
Handle4        ds 4
Handle5        ds 4
Handle6        ds 4
Handle7        ds 4
Handle8        ds 4
Handle9        ds 4
Handle10       ds 4
HandleSon01    ds 4
HandleSon02    ds 4
HandleSon03    ds 4
HandleSon04    ds 4
HandleSon05    ds 4
HandleSon06    ds 4
HandleSon07    ds 4
HandleSon08    ds 4
HandleSon09    ds 4
HandleSon10    ds 4
HandleSon11    ds 4
HandleSon12    ds 4
HandleSon13    ds 4
HandleSon14    ds 4
HandleBest     ds 4
HandlePres     ds 4
HandleMenu     ds 4
HandleCar      ds 4
HandleShadow   ds 4
HandleScreen   ds 4
HandleMotifs   ds 4
HandleConvers  ds 4

CarPtr         ds 4
MotifsPtr      ds 4

Temp           ds 4
Temp2          ds 4
Temp3          ds 4
Temp4          ds 4

Chrono         ds 4

***************************************
Serie          dc c'.mgb.'
CheatMode      ds 2
CheatStr1      str 'UTYAM'
***************************************

LoadTable      anop
               dc i2'Motif1'
               dc i2'Handle1'
               dc i2'Motif2'
               dc i2'Handle2'
               dc i2'Motif3'
               dc i2'Handle3'
               dc i2'Motif4'
               dc i2'Handle4'
               dc i2'Motif5'
               dc i2'Handle5'
               dc i2'Motif6'
               dc i2'Handle6'
               dc i2'Motif7'
               dc i2'Handle7'
               dc i2'Motif8'
               dc i2'Handle8'
               dc i2'Motif9'
               dc i2'Handle9'
               dc i2'Motif10'
               dc i2'Handle10'

               dc i2'Best'
               dc i2'HandleBest'
               dc i2'Presents'
               dc i2'HandlePres'
               dc i2'Menu'
               dc i2'HandleMenu'
               dc i2'Car'
               dc i2'HandleCar'

               dc i2'CaisseSPL'
               dc i2'HandleSon01'
               dc i2'Rire5SPL'
               dc i2'HandleSon02'
               dc i2'Rire6SPL'
               dc i2'HandleSon03'
               dc i2'Rire4SPL'
               dc i2'HandleSon04'
               dc i2'Rire3SPL'
               dc i2'HandleSon05'
               dc i2'StrangeSPL'
               dc i2'HandleSon06'
               dc i2'TictacSPL'
               dc i2'HandleSon07'
               dc i2'Rire1SPL'
               dc i2'HandleSon08'
               dc i2'Rire2SPL'
               dc i2'HandleSon09'
               dc i2'BangSPL'
               dc i2'HandleSon10'
               dc i2'MortSPL'
               dc i2'HandleSon11'
               dc i2'PingSPL'
               dc i2'HandleSon12'
               dc i2'TombeSPL'
               dc i2'HandleSon13'
               dc i2'MusicBoxSPL'
               dc i2'HandleSon14'
               dc i2'-1'
               dc i2'-1'

***************************************
Motif1         str '1/PNP.Datas/Ball8.SHR'
Motif2         str '1/PNP.Datas/Ball2.SHR'
Motif3         str '1/PNP.Datas/Ball3.SHR'
Motif4         str '1/PNP.Datas/Ball4.SHR'
Motif5         str '1/PNP.Datas/Ball5.SHR'
Motif6         str '1/PNP.Datas/Ball6.SHR'
Motif7         str '1/PNP.Datas/Ball7.SHR'
Motif8         str '1/PNP.Datas/Ball1.SHR'
Motif9         str '1/PNP.Datas/Ball9.SHR'
Motif10        str '1/PNP.Datas/Ball10.SHR'

Best           str '1/PNP.Datas/Best1.SHR'
Presents       str '1/PNP.Datas/Present2.SHR'
Menu           str '1/PNP.Datas/Menu1.SHR'
Car            str '1/PNP.Datas/Car.SHR'
Convers        str '1/PNP.Datas/Convers.SHR'

TictacSPL      str '1/PNP.Datas/Tictac.SPL'
BangSPL        str '1/PNP.Datas/Bang.SPL'
MortSPL        str '1/PNP.Datas/Mort.SPL'
StrangeSPL     str '1/PNP.Datas/Strange.SPL'
Rire1SPL       str '1/PNP.Datas/Rire1.SPL'
Rire2SPL       str '1/PNP.Datas/Rire2.SPL'
Rire3SPL       str '1/PNP.Datas/Rire3.SPL'
Rire4SPL       str '1/PNP.Datas/Rire4.SPL'
Rire5SPL       str '1/PNP.Datas/Rire5.SPL'
Rire6SPL       str '1/PNP.Datas/Rire6.SPL'
CaisseSPL      str '1/PNP.Datas/Caisse.SPL'
PingSPL        str '1/PNP.Datas/Ping.SPL'
TombeSPL       str '1/PNP.Datas/Tombe.SPL'
MusicBoxSPL    str '1/PNP.Datas/MusicBox.SPL'
***************************************
LoadSoundTable anop
               dc i4'CaisseBLC'
               dc i4'Rire5BLC'
               dc i4'Rire6BLC'
               dc i4'Rire4BLC'
               dc i4'Rire3BLC'
               dc i4'StrangeBLC'
               dc i4'TictacBLC'
               dc i4'Rire1BLC'
               dc i4'Rire2BLC'
               dc i4'BangBLC'
               dc i4'MortBLC'
               dc i4'PingBLC'
               dc i4'TombeBLC'
               dc i4'0'

TictacBLC      ds 8                     ;blocs info son du Game System
BangBLC        ds 8
MortBLC        ds 8
StrangeBLC     ds 8
Rire1BLC       ds 8
Rire2BLC       ds 8
Rire3BLC       ds 8
Rire4BLC       ds 8
Rire5BLC       ds 8
Rire6BLC       ds 8
CaisseBLC      ds 8
PingBLC        ds 8
TombeBLC       ds 8
MusicBoxBLC    ds 8
***************************************

FileNameOut    dc i2'256'
FileNameIn     ds 256
PathNameOut    dc i2'512'
PathNameIn     ds 512

OpenPar        dc i2'2'
RefNum         ds 2
               dc i4'PathNameIn'

EOFPar         dc i2'2'
               ds 2
EOF            ds 4

WritePar       dc i2'4'
               ds 2
Source         ds 4
ByteCount      ds 4
               ds 4

ClosePar       dc i2'1'
               ds 2





InitStuff      _TLStartup

               PushWord #0
               _MMStartup

               pla
               sta MyID

               _MTStartUp

               _IMStartUp

               PushLong #0              ;une ZP pour le Sound Manager
               PushLong #$100
               PushWord MyID
               PushWord #%1100000000000101
               PushLong #0
               _NewHandle
               jsr MemoryErr
               phd                      ;on dereference le handle
               tsc
               tcd
               ldy #0
               lda [3],y
               sta SoundZPadr
               pld
               PullLong SoundZPhdl

               PushWord SoundZPadr
               _SoundStartUp

               PushWord #$2             ;VBL
               _IntSource

               PushWord #$c             ;scan line
               _IntSource

               lda Decoy1+1
               clc
               adc #1000
               sta Decoy1+1

               PushLong #MyVBL
               _SetHeartBeat

               PushLong #0              ;8 megas pour vider la memoire...
               PushLong #$8fffff
               PushWord MyID
               PushWord #%1100000000000000
               PushLong #0
               _NewHandle

               _DisposeHandle           ;S'il n'y a pas d'erreur, on vide

               _CompactMem

               PushLong #0              ;32ko pour les fonts
               PushLong #$8000
               PushWord MyID
               PushWord #%1100000000011000
               PushLong #0
               _NewHandle
               jsr MemoryErr
               phd                      ;on dereference le handle
               tsc
               tcd
               ldy #0
               lda [3],y
               sta CarPtr
               ldy #2
               lda [3],y
               sta CarPtr+2
               pld
               PullLong HandleScreen

               PushLong #0              ;32ko pour les pages de motifs
               PushLong #$8000
               PushWord MyID
               PushWord #%1100000000011000
               PushLong #0
               _NewHandle
               jsr MemoryErr
               phd                      ;on dereference le handle
               tsc
               tcd
               ldy #0
               lda [3],y
               sta MotifsPtr
               ldy #2
               lda [3],y
               sta MotifsPtr+2
               pld
               PullLong HandleMotifs

               PushLong #0              ;demande 32ko pour shadowing
               PushLong #32768          ;du bank 01
               PushWord MyID
               PushWord #%1100000000000011
               PushLong #$012000
               _NewHandle
               jsr MemoryErr

               PullLong HandleShadow

               lda #1
               jsr Shadow               ;shadow on

               sep #$20
               longa off
               ldx #0
               lda #0                   ;on efface les 2 ecrans
Clr2Screens    sta >$012000,x
               inx
               cpx #32768
               bne Clr2Screens

               lda #$c1
               sta >$e0C029             ;SHR on
               rep #$30
               longa on

               lda #Convers             ;image de credits converter!
               jsr LoadFile
               lda Temp
               sta HandleConvers
               lda Temp+2
               sta HandleConvers+2

               lda #0
               jsr Shadow               ;shadow off

               lda HandleConvers
               sta Temp
               lda HandleConvers+2
               sta Temp+2
               lda #$2000
               sta Temp2
               lda #$0001
               sta Temp2+2
               jsr Decompacte

               lda #1
               jsr Fade                 ;fade in

               PushLong HandleConvers
               _DisposeHandle

               jsr LoadHiScore

               ldx #20850               ;160*130 + 100/2
               lda #$4444               ;thermometre...
               sta >$e12000,x
               sta >$e12000+160,x
               sta >$e12000+320,x
               sta >$e12000+480,x
               sta >$e12000+640,x
               jsl >InitSmith           ;SoundSmith
               jsl >LoadMusic2          ;SoundSmith

               ldx #20852               ;160*130 + 100/2 + 2
               lda #$4444               ;thermometre...
               sta >$e12000,x
               sta >$e12000+160,x
               sta >$e12000+320,x
               sta >$e12000+480,x
               sta >$e12000+640,x
               jsl >LoadMusic4          ;SoundSmith

               ldy #0
               ldx #20854               ;160*130 + 100/2 + 4
LoadGameFiles  anop
               lda LoadTable,y
               cmp #-1
               beq LGFdone

               lda #$4444               ;thermometre...
               sta >$e12000,x
               sta >$e12000+160,x
               sta >$e12000+320,x
               sta >$e12000+480,x
               sta >$e12000+640,x
               inx
               inx

               lda LoadTable,y
               phx
               phy
               jsr LoadFile
               ply
               plx
               iny
               iny
               lda LoadTable,y
               iny
               iny
               sta LGFCopy1+1
               inc a
               inc a
               sta LGFCopy2+1
               lda Temp
LGFCopy1       sta LGFCopy1
               lda Temp+2
LGFCopy2       sta LGFCopy2
               bra LoadGameFiles
LGFdone        anop

               stz Temp
               lda #0
               tax
               txy
FillAdr        anop                     ; on rempli le tableau des offsets
               sta adrmotifs,x          ; des motifs
               inx
               inx
               clc
               adc #8
               iny
               cpy #20
               bne FillAdr
               clc
               adc #15*160
               inc Temp
               ldy Temp
               cpy #10
               beq FillAdr2
               ldy #0
               bra FillAdr
FillAdr2       anop

               ldx #0                   ;on construit une routine pour
               txy                      ;faire la copie de l'image
               stz Temp                 ;source vers l'ecran
CstCopyLoop    anop
               lda #$bf                 ; LDA >$bbnnnn,x
               sta doCopy,x
               lda MotifsPtr+1          ; bb
               sta doCopy+2,x
               lda MotifsPtr            ; nnnn
               clc
               adc Temp
               sta doCopy+1,x
               inx
               inx
               inx
               inx
               lda #$99                 ; STA nnnn,y
               sta doCopy,x
               lda #$3900               ; nnnn
               clc
               adc Temp
               sta doCopy+1,x
               inx
               inx
               inx
               inc Temp
               inc Temp
               iny
               cpy #4
               bne CstCopyLoop
               ldy #0
               lda Temp
               clc
               adc #160-8
               sta Temp
               cmp #2560
               bne CstCopyLoop

               lda #0
               jsr Fade                 ;fade out

               lda HandleCar
               sta Temp
               lda HandleCar+2
               sta Temp+2
               lda CarPtr
               sta Temp2
               lda CarPtr+2
               sta Temp2+2
               jsr Decompacte           ;decompacte les caracteres

               lda CarPtr
               sta Temp2
               lda CarPtr+2
               sta Temp2+2
               jsr GSInit               ;initialisation du Game System

               lda #7696                ;position (2;3): x*8 + y*160*16
               clc
               adc CarPtr
               sta GSTemp1
               lda CarPtr+2
               sta GSTemp1+2
               lda #CursorData
               sta GSTemp2
               lda #^CursorData
               sta GSTemp2+2
               jsr Linear16

               lda #CursorData
               ldy #$e1e1
               ldx #CursorRout
               jsr CursorCSet16         ;construction routine curseur

               lda #7688                ;position (1;3): x*8 + y*160*16
               clc
               adc CarPtr
               sta GSTemp1
               lda CarPtr+2
               sta GSTemp1+2
               lda #CursorData
               sta GSTemp2
               lda #^CursorData
               sta GSTemp2+2
               jsr Linear16

               lda #CursorData
               ldy #$0101
               ldx #CursorRout2
               jsr CursorCSet16         ;construction routine curseur

               lda #CursorTSB
               sta GSTemp1
               lda #^CursorTSB
               sta GSTemp1+2
               jsr TransTSB16

               ldx #0
               lda #$ffff
Clear01        anop
               sta >$012000,x
               inx
               inx
               cpx #32000
               bne Clear01

               lda #1
               jsr fade                 ;fade in

Protection     anop
               jsr Random
               and #$f
               cmp #10
               bge Protection

               sta Temp
               sta CodeX
               stz Temp+2
               lda #ScoreStr
               sta Temp2
               lda #^ScoreStr
               sta Temp2+2
               lda #2
               jsr HexStr

               lda ScoreStr+2
               and #$ff
               clc
               adc #$11
               sta Temp
               lda #5
               sta AffSpeed
               lda PassStringX
               and #$ff00
               ora Temp
               sta PassStringX

PassLine       anop
               jsr Random
               and #$3f
               cmp #60
               bge PassLine

               sta Temp
               sta CodeY
               stz Temp+2
               lda #ScoreStr
               sta Temp2
               lda #^ScoreStr
               sta Temp2+2
               lda #2
               jsr HexStr

               lda ScoreStr+1
               sta PassStringY

               lda #46
               sta GSTemp1
               lda #79
               sta GSTemp1+2
               lda #228
               sta GSTemp2
               lda #60
               sta GSTemp2+2
               lda #$4444
               sta GSTemp3
               jsr PaintRect

               lda #50
               sta GSTemp1
               lda #82
               sta GSTemp1+2
               lda #220
               sta GSTemp2
               lda #54
               sta GSTemp2+2
               stz GSTemp3
               jsr PaintRect

               lda #PassString
               ldx #60
               ldy #85
               jsr ErrTexte8

               sep #$30
               longa off
               longi off
               sta >$e0c010             ;echantillonnage clavier
               ldx #0
PassEnter      anop
               lda >$e0c000             ;lecture touche appuyee
               bpl PassEnter
               and #$7f
               sta >$e0c010             ;echantillonnage clavier
               cmp #$20                 ;espace
               blt PassEnterSpe
               cmp #$7f                 ;delete
               beq PassEnterSpe
               cpx #5
               bge PassEnter
               jsr CapsTest
               sta ScoreStr,x
               stz ScoreStr+1,x
               inx
               jsr PassEnterAff
               bra PassEnter

CodeX          ds 2
CodeY          ds 2

PassEnterSpe   anop
               cmp #$7f                 ;delete?
               beq PassEnterDel
               cmp #$08                 ;fleche gauche?
               beq PassEnterDel
               cmp #$0d                 ;enter?
               beq PassEnterok
               bra PassEnter

KeyCode        dc h'4010'

PassEnterDel   anop
               cpx #0
               beq PassEnter
               dex
               lda #$20
               sta ScoreStr,x
               stz ScoreStr+1,x
               jsr PassEnterAff
               bra PassEnter

CodeCalc       anop
               longa on
               longi on
               lda #50
               sta Bille1
               sta Bille2
               sta Bille3
               stz Temp2
               ldx CodeY
               beq CodeCalc20
               lda #0

CodeCalc10     anop
               clc
               adc #60
               dex
               bne CodeCalc10
               sta Temp2

CodeCalc20     anop
               lda KeyCode
               clc
               adc #$0907
               sta keyCode
               ldx CodeX
               beq CodeCalc40
               lda #0

CodeCalc30     anop
               clc
               adc #6
               dex
               bne CodeCalc30
               clc
               adc Temp2
               sta Temp2

CodeCalc40     anop
               longa off
               longi off
               rts


CapsTest       anop
               cmp #$61
               blt CapsTDone
               cmp #$7b
               bge CapsTDone
               sec
               sbc #$20
CapsTDone      anop
               rts


PassEnterAff   anop
               phx
               rep #$30
               longa on
               longi on
               lda #ScoreStr
               ldx #140
               ldy #125
               jsr ErrTexte8
               sep #$30
               longa off
               longi off
               plx
               rts

PassEnterOk    anop
               stx Temp
               rep #$30
               longa on
               longi on


               sep #$20
               longa off

               lda Temp                 ;nb caracteres code
               beq PasCheat1
               cmp CheatStr1
               bne PasCheat1
               ldx #0
PassTest1      anop
               lda ScoreStr,x
               cmp CheatStr1+1,x
               bne PasCheat1
               inx
               cpx Temp
               bne PassTest1
               lda #1
               sta CheatMode
               rep #$30
               longa on
               brl Protection

PasCheat1      anop

               rep #$30
               longa on

Decoy1         jsr CodeCalc
               ldx Temp2
               lda Codes,x
               inc Temp3
               eor KeyCode
               cmp ScoreStr
               bne PasCodeOk
               lda Codes+2,x
               inc Temp3
               eor KeyCode
               cmp ScoreStr+2
               bne PasCodeOk
               lda Codes+3,x
               inc Temp3
               eor KeyCode
               cmp ScoreStr+3
               bne PasCodeOk

Decoy2Rout     anop
               lda ShowValue
               clc
               lsr a
               lsr a
               lsr a
               lsr a
               lsr a
               lsr a
               sta ShowValue

               lda #0
               jsr fade                 ;fade out

               clc
               rts

PasCodeOk      anop
               lda #ErrStringQuit
               ldx #84
               ldy #172
               jsr ErrTexte8

               lda #ErrStringKey
               ldx #104
               ldy #180
               jsr ErrTexte8

               jsr WaitUser

               lda MyStack
               tcs
               jmp AllDone




MemoryErr      anop
               bcs MemoryErrOk
               rts

MemoryErrOk    anop
               lda #70
               sta GSTemp1
               lda #120
               sta GSTemp1+2
               lda #180
               sta GSTemp2
               lda #75
               sta GSTemp2+2
               stz GSTemp3
               jsr PaintRect

               lda #ErrStringMem
               ldx #80
               ldy #130
               jsr ErrTexte8

GeneralErr     anop
               lda #ErrStringQuit
               ldx #84
               ldy #172
               jsr ErrTexte8

               lda #ErrStringKey
               ldx #104
               ldy #180
               jsr ErrTexte8

               jsr WaitUser

               lda MyStack
               tcs
               jmp AllDone

ProDOSErrJSL   ENTRY
               bcs ProDOSErrOk2
               rtl

ProDOSErrOk2   anop
               phk
               plb
               bra ProDOSErrOk

ProDOSErr      anop
               bcs ProDOSErrOk
               rts

ProDOSErrOk    anop
               lda #70
               sta GSTemp1
               lda #120
               sta GSTemp1+2
               lda #180
               sta GSTemp2
               lda #75
               sta GSTemp2+2
               stz GSTemp3
               jsr PaintRect

               lda #ErrStringDOS
               ldx #88
               ldy #130
               jsr ErrTexte8
               bra GeneralErr




LoadFile       anop
               sta LF1+1                ;a = adresse str fichier a charger
               sta LF2+1
LF1            lda LF1                  ;charge nb caracteres str
               and #$ff                 ;sur 8 bits
               tax
               sta PathNameIn
LF2            lda LF2,x
               sta PathNameIn+1,x
               dex
               bne LF2

               PushLong #OpenPar
               PushWord #$2010
               jsl GSOS
               jsr ProDOSErr

               lda RefNum
               sta EOFPar+2
               sta WritePar+2
               sta ClosePar+2

               PushLong #EOFPar
               PushWord #$2019
               jsl GSOS
               jsr ProDOSErr

               lda EOF
               sta ByteCount
               lda EOF+2
               sta ByteCount+2

               PushLong #0              ;demande de memoire pour
               PushLong EOF             ;le fichier a charger
               PushWord MyID
               PushWord #%1100000000011000
               PushLong #0
               _NewHandle
               jsr MemoryErr

               phd                      ;on dereference le handle
               tsc
               tcd

               ldy #0
               lda [3],y
               sta Source
               ldy #2
               lda [3],y
               sta Source+2

               pld
               PullLong Temp            ;on sauve le handle

               PushLong #WritePar       ;on lit le fichier
               PushWord #$2012          ;Read
               jsl GSOS
               jsr ProDOSErr

               PushLong #ClosePar
               PushWord #$2014
               jsl GSOS
               jsr ProDOSErr

               rts



******************************************************
* VBL Handler
* incremente des compteurs pour les valeurs aleatoires
*

MyVBL          anop
               ds 4                     ;link
TaskCount      dc i2'1'                 ;count
               dc h'5aa5'               ;signature

               phb
               phk
               plb
               rep #$30

               inc VBLCounter0
               inc VBLCounter1
               inc VBLCounter3
               inc VBLCounter2
               bne MyVBl2
               inc VBLCounter2+2
MyVBL2         anop

               lda #1
               sta TaskCount
               sep #$30
               plb
               rtl


VBLCounter0    ds 2
VBLCounter1    ds 2
VBLCounter2    ds 4
VBLCounter3    ds 2



               copy Game.Src

PasCodeRout    anop
               lda #0
               rts

               copy Codes.Src
               copy GameSys.Src

Decoy1Rout     jsr CodeCalc
               ldx Temp2
               lda Codes,x
               eor #$0
               eor #$5555
               cmp ScoreStr
               bne PasCodeOkD
               lda #640
               sta ShowValue
               lda Codes+2,x
               eor #$0
               eor #$5555
               cmp ScoreStr+2
               bne PasCodeOkD
               lda Codes+3,x
               eor #$0
               eor #$5555
               cmp ScoreStr+3
               bne PasCodeOkD
               lda PasCodeRout
               sta PasCodeOk
               lda PasCodeRout+2
               sta PasCodeOk+2
               plx
               PushWord #Decoy2Rout-1
               phx
               rts
pasCodeOkD     jmp pasCodeOk

               copy Datas.Src

               END

               copy Music.Src