From ba8b564bab2bcf10e78b968713b64f8a85632956 Mon Sep 17 00:00:00 2001 From: Antoine Vignau <34219772+antoinevignau@users.noreply.github.com> Date: Sat, 29 Oct 2022 21:18:37 +0200 Subject: [PATCH] Adding Pick'n'Pile IIe (complete) & IIgs (corrupted) soruce code --- .DS_Store | Bin 8196 -> 8196 bytes picknpile/SOURCES.IIE/.DS_Store | Bin 0 -> 6148 bytes picknpile/SOURCES.IIE/DATAS.SRC | 1 + picknpile/SOURCES.IIE/EX.SRC | 1 + picknpile/SOURCES.IIE/GAMESYS.SRC | 1 + picknpile/SOURCES.IIE/MAINIIE.SRC | 1 + picknpile/SOURCES.IIE/MC.SRC | 1 + picknpile/SOURCES.IIE/PNP.MACROS | 1 + picknpile/SOURCES.IIE/VBEST.SRC | 1 + picknpile/SOURCES.IIGS/.DS_Store | Bin 0 -> 6148 bytes picknpile/SOURCES.IIGS/CODES.SRC | Bin 0 -> 5202 bytes picknpile/SOURCES.IIGS/DATAS.SRC | Bin 0 -> 14319 bytes picknpile/SOURCES.IIGS/EX.SRC | 1 + picknpile/SOURCES.IIGS/GAME.SRC | Bin 0 -> 63341 bytes picknpile/SOURCES.IIGS/GAMESYS.SRC | 1 + picknpile/SOURCES.IIGS/GSFONT.SRC | Bin 0 -> 16888 bytes picknpile/SOURCES.IIGS/HISCORES2 | 1 + picknpile/SOURCES.IIGS/MAIN.SRC | 1 + picknpile/SOURCES.IIGS/MC.SRC | 1 + picknpile/SOURCES.IIGS/MUSIC.SRC | 1 + picknpile/SOURCES.IIGS/SH.MACROS | 1 + swordofsodan/S1/CODE.S | 55 +++++++++++++++-------------- swordofsodan/SOS2018.2mg | Bin 2457664 -> 2457664 bytes 23 files changed, 43 insertions(+), 26 deletions(-) create mode 100644 picknpile/SOURCES.IIE/.DS_Store create mode 100644 picknpile/SOURCES.IIE/DATAS.SRC create mode 100644 picknpile/SOURCES.IIE/EX.SRC create mode 100644 picknpile/SOURCES.IIE/GAMESYS.SRC create mode 100644 picknpile/SOURCES.IIE/MAINIIE.SRC create mode 100644 picknpile/SOURCES.IIE/MC.SRC create mode 100644 picknpile/SOURCES.IIE/PNP.MACROS create mode 100644 picknpile/SOURCES.IIE/VBEST.SRC create mode 100644 picknpile/SOURCES.IIGS/.DS_Store create mode 100644 picknpile/SOURCES.IIGS/CODES.SRC create mode 100644 picknpile/SOURCES.IIGS/DATAS.SRC create mode 100644 picknpile/SOURCES.IIGS/EX.SRC create mode 100644 picknpile/SOURCES.IIGS/GAME.SRC create mode 100644 picknpile/SOURCES.IIGS/GAMESYS.SRC create mode 100644 picknpile/SOURCES.IIGS/GSFONT.SRC create mode 100644 picknpile/SOURCES.IIGS/HISCORES2 create mode 100644 picknpile/SOURCES.IIGS/MAIN.SRC create mode 100644 picknpile/SOURCES.IIGS/MC.SRC create mode 100644 picknpile/SOURCES.IIGS/MUSIC.SRC create mode 100644 picknpile/SOURCES.IIGS/SH.MACROS diff --git a/.DS_Store b/.DS_Store index 4bf97e7c6136ec5d31ebba5f2dfe19520bbcb78a..4fa27c34a4dfb9a3e60f37cdb2d3d9cf66583de6 100644 GIT binary patch delta 609 zcmZp1XmOa}&uFzVU^hRb)n*<6MwWU`h6096hGd3phCDDUhaoj5-7q*gKevDZ0kEjb z&3AE0%E?axD&nx%Vm{|)+Yv_~8>`9`oGN8dtuDwwwt8}ch}>i~k^S{N48;uP4EYR2 z3@Jb|4amy}vJx5cus9W`T9AWNN=uR%7_OVAD}()pM{Np{S}**HQ5}t6?dEGDI~g~# ROMGLQ94pc>ygasz5dh%_h>rjO delta 50 zcmZp1XmOa}&uF+YU^hRb;btBIMwZEjqLP!3iR|ATE4GSpV?zbwW_F2hESpQkCINY+ Fi~y=65l8?4 diff --git a/picknpile/SOURCES.IIE/.DS_Store b/picknpile/SOURCES.IIE/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0 0 : pas d'info souris anop ;a --> $80 anop ;==> Mx--> coor X My--> coor Y anop ; MBut--> bouton RMDone rts Mx ds 1 My ds 1 MBut ds 1 MBut2 ds 1 ************************************************************************ PaintRect anop ;GSTemp1 = coor. x / 7 anop ;GSTemp1+1= coor. y anop ;GSTemp2 = dep relatif x / 7 anop ;GSTemp2+1= dep relatif y anop ;GSTemp3 = couleur ldx #0 PR1 anop ldy GSTemp1+1 ;coor y lda Adrlo,y clc adc GSTemp1 ;coor x sta <$50 lda Adrhi,y clc adc PageHGR sta <$51 lda GSTemp3 ;couleur ldy #0 PR2 anop sta ($50),y iny cpy GSTemp2 ;dep x bne PR2 inc GSTemp1+1 inx cpx GSTemp2+1 ;dep y bne PR1 rts ************************************************************************ ClearHGR anop ;a=0 : hgr 1 a=1: hgr2 cmp #0 bne ClearHGR2 lda #$20 sta ClearHGRLoop+2 bne ClearHGR0 ClearHGR2 anop lda #$40 sta ClearHGRLoop+2 ClearHGR0 lda #0 tay ClearHGRLoop sta $2000 inc ClearHGRLoop+1 bne ClearHGRLoop inc ClearHGRLoop+2 iny cpy #32 bne ClearHGRLoop rts ************************************************************************ Swap anop ;a=0 : hgr 1 a=1: hgr2 cmp #0 bne SwapHgr2 lda #0 sta $c054 rts SwapHGR2 anop lda #0 sta $c055 rts ************************************************************************ WaitUser anop ;--> a= caractere tape anop ; 0 si clic ou fire lda #0 lda $c024 sta $c010 ;echantillonne clavier WULoop anop jsr Random ;amorce... lda $C000 ;teste touche bmi WUDone1 lda $C061 ;teste fire 0 bmi WUDone lda $C062 ;teste fire 1 bmi WUDone lda $C027 ;teste clic souris bpl WULoop and #%00000010 bne WULoop2 lda $C024 lda $C024 bmi WULoop bpl WUDone WULoop2 anop lda $C024 jmp WULoop WUDone anop lda #0 rts WUDone1 anop and #$7f beq WaitUser rts ************************************************************************ Sound anop ;a=note anop ;x=duree SoundLoop0 anop ldy $c030 ;speaker ldy $c030 ;speaker ldy $c030 ;speaker pha SoundLoop1 ldy #10 SoundLoop2 dey bne SoundLoop2 sec sbc #1 bne SoundLoop1 pla dex bne SoundLoop0 rts ************************************************************************ Texte16 anop ;x= coordonnee x / 7 anop ;y= coordonnee y anop ;GSTemp1= ptr str anop ;GSTemp2= ptr image source stx GSTemp7 ; x;y image dest pour Sprite16 sty GSTemp7+1 ; lda GSTemp1+1 sta T16length+2 sta T16Read+2 lda GSTemp1 sta T16length+1 clc adc #1 bcc T16anop1 inc T16Read+2 T16anop1 anop sta T16Read+1 T16length lda T16length beq T16End sta GSTemp4 ;longueur de la str ldx #0 T16Read lda T16Read,x cmp #128 bge T16Aff0 sta GSTemp5 ;caractere ldy #0 T16Trans anop lda T16Car,y ;utilisation de la table cmp GSTemp5 ;de correspondance... beq T16Aff iny cpy T16NbCar bne T16Trans beq T16Aff T16Aff0 anop and #$7f tay T16Aff anop stx StackX ;on sauve l'index de la string tya lda OffSetX,y sta GSTemp6 ;x de l'image source pour Sprite16 lda OffSetY,y sta GSTemp6+1 ;y de l'image source pour Sprite16 jsr Sprite16 lda GSTemp7 ;avancement du curseur clc adc #2 sta GSTemp7 ldx StackX inx cpx GSTemp4 bne T16Read T16End anop rts MSB OFF T16Car dc c'ABCDEFGHIJKLMNOPQRSTUVWXYZ' dc c'.:!?#0123456789 ' T16CarEnd anop T16NbCar dc i2'T16CarEnd-T16Car' ************************************************************************ Sprite16 anop ;GSTemp2= ptr image source anop ;GSTemp6= x;y image source anop ;GSTemp7= x;y image dest lda GSTemp6+1 ;sauvegarde pha lda GSTemp7+1 pha ldy #15 ;hauteur des shapes Sp16Loop anop ldx GSTemp6+1 ;y source lda adrlo,x clc adc GSTemp2 ;ptr source adc GSTemp6 ;x source sta <$50 lda adrhi,x adc GSTemp2+1 ;ptr source sta <$51 ldx GSTemp7+1 ;y dest lda adrlo,x clc adc GSTemp7 ;x dest sta <$52 lda adrhi,x adc PageHGR ;dest sta <$53 ldx #0 lda ($50,x) ;copie d'une ligne sta ($52,x) inc <$50 inc <$52 lda ($50,x) sta ($52,x) inc GSTemp6+1 inc GSTemp7+1 dey bne Sp16Loop pla ;restore sta GSTemp7+1 pla sta GSTemp6+1 rts ************************************************************************ Texte8 anop ;x= coordonnee x / 7 anop ;y= coordonnee y anop ;GSTemp1= ptr str anop ;GSTemp2= ptr image source stx GSTemp7 ; x;y image dest pour Sprite8 sty GSTemp7+1 ; lda GSTemp1+1 sta T8length+2 sta T8Read+2 lda GSTemp1 sta T8length+1 clc adc #1 bcc T8anop1 inc T16Read+2 T8anop1 anop sta T8Read+1 T8length lda T8length beq T8End sta GSTemp4 ;longueur de la str ldx #0 T8Read lda T8Read,x cmp #$80 blt T8Read2 ldy #$ff sty T8Mask T8Read2 anop sec sbc #32 ;on commence a espace tay stx StackX ;on sauve l'index de la string lda OffSetX8,y sta GSTemp6 ;x de l'image source pour Sprite8 lda OffSetY8,y sta GSTemp6+1 ;y de l'image source pour Sprite8 jsr Sprite8 ldy #0 sty T8Mask lda GSTemp7 ;avancement du curseur clc adc #1 sta GSTemp7 ldx StackX inx cpx GSTemp4 bne T8Read T8End anop rts ************************************************************************ Sprite8 anop ;GSTemp2= ptr image source anop ;GSTemp6= x;y image source anop ;GSTemp7= x;y image dest lda GSTemp6+1 ;sauvegarde pha lda GSTemp7+1 pha ldy #8 ;hauteur des shapes Sp8Loop anop ldx GSTemp6+1 ;y source lda adrlo,x clc adc GSTemp2 ;ptr source adc GSTemp6 ;x source sta <$50 lda adrhi,x adc GSTemp2+1 ;ptr source sta <$51 ldx GSTemp7+1 ;y dest lda adrlo,x clc adc GSTemp7 ;x dest sta <$52 lda adrhi,x adc PageHGR ;dest sta <$53 ldx #0 lda ($50,x) ;copie d'une ligne ora T8Mask sta ($52,x) inc GSTemp6+1 inc GSTemp7+1 dey bne Sp8Loop pla ;restore sta GSTemp7+1 pla sta GSTemp6+1 rts T8Mask dc h'00' ************************************************************************ Pause anop ;a= temps de pause (1/10 s) ldx #57 Pause1 anop ldy #255 Pause2 anop dey bne Pause2 pha pla pha ;delai... pla pha pla nop nop nop dex bne Pause1 ;Boucle Pause1= 100.000 cycles sec sbc #1 bne Pause rts ************************************************************************ Random anop ; -->a= rnd(255) lda RNDRoot clc adc #117 sta RNDRoot bcc Random2 inc RNDRoot+1 Random2 anop eor RNDRoot+1 eor RNDVal sta RNDVal rts RNDRoot dc i2'19251' RNDval dc i1'125' ************************************************************************ LoadFile anop ;GSTemp1= ptr string anop ;GSTemp2= taille en octets anop ;GSTemp3= buffer mem lda GSTemp1 sta PathName lda GSTemp1+1 sta PathName+1 lda GSTemp2 sta ReadSize lda GSTemp2+1 sta ReadSize+1 lda GSTemp3 sta BufferIO lda GSTemp3+1 sta BufferIO+1 jsr ProDOS dc h'c8' ;Open dc i2'OpenBloc' jsr ProDOSerr lda RefNum sta ReadBloc+1 sta CloseBloc+1 jsr ProDOS dc h'ca' ;Read dc i2'ReadBloc' jsr ProDOSerr jsr ProDOS dc h'cc' ;Close dc i2'CloseBloc' jsr ProDOSerr rts QuitBloc dc i1'4' dc i2'0' dc i2'0' dc i2'0' OpenBloc dc i1'3' PathName ds 2 dc i2'IOBuffer' RefNum ds 1 ReadBloc dc i1'4' ds 1 BufferIO ds 2 ReadSize ds 2 ds 2 CloseBloc dc i1'1' ds 1 adrlo dc h'00000000000000008080808080808080' dc h'00000000000000008080808080808080' dc h'00000000000000008080808080808080' dc h'00000000000000008080808080808080' dc h'2828282828282828A8A8A8A8A8A8A8A8' dc h'2828282828282828A8A8A8A8A8A8A8A8' dc h'2828282828282828A8A8A8A8A8A8A8A8' dc h'2828282828282828A8A8A8A8A8A8A8A8' dc h'5050505050505050D0D0D0D0D0D0D0D0' dc h'5050505050505050D0D0D0D0D0D0D0D0' dc h'5050505050505050D0D0D0D0D0D0D0D0' dc h'5050505050505050D0D0D0D0D0D0D0D0' adrhi dc h'0004080C1014181C0004080C1014181C' dc h'0105090D1115191D0105090D1115191D' dc h'02060A0E12161A1E02060A0E12161A1E' dc h'03070B0F13171B1F03070B0F13171B1F' dc h'0004080C1014181C0004080C1014181C' dc h'0105090D1115191D0105090D1115191D' dc h'02060A0E12161A1E02060A0E12161A1E' dc h'03070B0F13171B1F03070B0F13171B1F' dc h'0004080C1014181C0004080C1014181C' dc h'0105090D1115191D0105090D1115191D' dc h'02060A0E12161A1E02060A0E12161A1E' dc h'03070B0F13171B1F03070B0F13171B1F' OffSetX dc h'00020406080a0c0e10121416181a1c1e20222426' dc h'00020406080a0c0e10121416181a1c1e20222426' dc h'00020406080a0c0e10121416181a1c1e20222426' dc h'00020406080a0c0e10121416181a1c1e20222426' dc h'00020406080a0c0e10121416181a1c1e20222426' dc h'00020406080a0c0e10121416181a1c1e20222426' dc h'00020406080a0c0e10121416181a1c1e20222426' dc h'00020406080a0c0e10121416181a1c1e20222426' dc h'00020406080a0c0e10121416181a1c1e20222426' dc h'00020406080a0c0e10121416181a1c1e20222426' OffSetY dc h'0000000000000000000000000000000000000000' dc h'0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f' dc h'1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e' dc h'2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d' dc h'3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c' dc h'4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b' dc h'5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a' dc h'6969696969696969696969696969696969696969' dc h'7878787878787878787878787878787878787878' dc h'8787878787878787878787878787878787878787' OffSetX8 dc h'000102030405060708090a0b0c0d0e0f10111213' dc h'1415161718191a1b1c1d1e1f2021222324252627' dc h'000102030405060708090a0b0c0d0e0f10111213' dc h'1415161718191a1b1c1d1e1f2021222324252627' dc h'000102030405060708090a0b0c0d0e0f10111213' dc h'1415161718191a1b1c1d1e1f2021222324252627' OffSetY8 dc h'3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c' dc h'3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c' dc h'4444444444444444444444444444444444444444' dc h'4444444444444444444444444444444444444444' dc h'4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c' dc h'4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c' GSTemp1 ds 2 GSTemp2 ds 2 GSTemp3 ds 2 GSTemp4 ds 2 GSTemp5 ds 2 GSTemp6 ds 2 GSTemp7 ds 2 StackX ds 1 StackY ds 1 PageHGR dc h'40' \ No newline at end of file diff --git a/picknpile/SOURCES.IIE/MAINIIE.SRC b/picknpile/SOURCES.IIE/MAINIIE.SRC new file mode 100644 index 0000000..0dc41b8 --- /dev/null +++ b/picknpile/SOURCES.IIE/MAINIIE.SRC @@ -0,0 +1 @@ +*************************************************************** * * Pick'n Pile //e * --------------- * * Version : Beta * Conversion : Atreid Concept SA **************************************************************** list off gen off msb off symbol off 65816 off 65c02 off keep PnP.Sys mcopy PnP.Macros ProDOS gequ $BF00 ;acces au MLI IOBuffer gequ $Ba00 vbest gequ $800 Codes gequ $860 org $8000 PnP START PnP lda #0 sta <$50 sta <$52 lda #$20 sta <$51 lda #$80 sta <$53 ldx #0 PnPInstall anop lda ($50,x) sta ($52,x) lda <$50 clc adc #1 bcs Inc51inst sta <$50 beq Inc52inst bne Inc52inst Inc51inst anop sta <$50 inc <$51 Inc52Inst anop lda <$52 clc adc #1 bcs Inc53inst sta <$52 beq Inc54Inst bne Inc54Inst Inc53inst anop sta <$52 inc <$53 Inc54Inst anop lda <$53 cmp #$bf ;borne superieure de la mem bne PnpInstall jmp PnpInstalled PnpInstalled anop lda $c036 ;cyareg ***************** and #$7f ***************** sta $c036 ***************** tsx ;on sauve s !!! stx StackPtr jsr InitPnP lda #vbestFile ;ptr string sta GSTemp1 lda #>vbestFile sta GSTemp1+1 lda #$18 ;taille a lire sta GSTemp2 lda #$0c sta GSTemp2+1 lda #vbest ;buffer mem sta GSTemp3 lda #>vbest sta GSTemp3+1 jsr LoadFile lda #Car ;ptr string sta GSTemp1 lda #>Car sta GSTemp1+1 lda #0 ;taille a lire sta GSTemp2 lda #$20 sta GSTemp2+1 lda #0 ;buffer mem sta GSTemp3 lda #$60 sta GSTemp3+1 jsr LoadFile jsr EnterCode lda #Calib ;ptr string sta GSTemp1 lda #>Calib sta GSTemp1+1 lda #0 ;taille a lire sta GSTemp2 lda #$20 sta GSTemp2+1 lda #0 ;buffer mem sta GSTemp3 lda #$40 sta GSTemp3+1 jsr LoadFile lda #0 sta GSTemp2 lda #$60 sta GSTemp2+1 lda #CalibStr1 sta GSTemp1 lda #>CalibStr1 sta GSTemp1+1 ldx #10 ldy #73 jsr Texte8 lda #CalibStr2 sta GSTemp1 lda #>CalibStr2 sta GSTemp1+1 ldx #8 ldy #84 jsr Texte8 lda #KeyPick sta GSTemp1 lda #>KeyPick sta GSTemp1+1 ldx #25 ldy #167 jsr Texte8 lda #KeyFall sta GSTemp1 lda #>KeyFall sta GSTemp1+1 ldx #25 ldy #181 jsr Texte8 lda #0 sta Temp lda #30 sta Temp2 ;origine x de la croix sta $c010 ;echantillonnage clavier CalibLoop anop lda Temp beq CalibLoop2 ldx #0 lda Temp1 sta <$50 lda Temp1+1 sta <$51 lda ($50,x) ;XOR d'une ligne eor #$ff sta ($50,x) CalibLoop2 anop ldx #1 ;manette 1 jsr $fb1e ;lecture manette tya ;resultat dans a clc lsr a lsr a cmp #60 blt CalibY lda #59 CalibY anop and #%11111100 tax lda adrlo,x clc adc Temp2 ;x source sta <$50 sta Temp1 lda adrhi,x adc #$40 ;HGR2 sta <$51 sta Temp1+1 ldx #0 lda ($50,x) ;XOR d'une ligne eor #$ff sta ($50,x) lda #1 jsr Pause ;Attente... ldx #0 ;manette 0 jsr $fb1e ;lecture manette tya ;resultat dans a clc lsr a lsr a lsr a lsr a adc #23 ;decalage horiz cadre sta Temp2 jsr doKeyAff ldx CalibKey lda KeyUp,x eor #$80 sta KeyUp,x lda #1 sta Temp lda $c000 bpl CalibLoop and #$7f cmp #27 beq CalibEnd jsr doCalibKey sta $c010 ;echantillonnage clavier jmp CalibLoop doCalibKey anop cmp #$21 ;point exclamation blt doCalibKeyEnd cmp #$7b bge doCalibKeyEnd ldx CalibKey sta KeyUp,x inx inx stx CalibKey cpx #16 blt doCalibKeyEnd ldx #1 stx CalibKey doCalibKeyEnd anop rts CalibEnd anop ldx CalibKey lda KeyUp,x and #$7f sta KeyUp,x Programme anop jsr Presentation bcs PnpEnd jsr BouclePrin1 jmp Programme PnpEnd anop lda $c036 ;cyareg ***************** ora #$80 ***************** sta $c036 ***************** lda #0 ;hgr jsr ClearHGR jsr ProDOS dc h'65' ;Quit dc i2'QuitBloc' brk brk ;--------------------------------------------------------------------- doKeyAff anop lda #0 sta GSTemp2 lda #$60 sta GSTemp2+1 lda #KeyUp sta GSTemp1 lda #>KeyUp sta GSTemp1+1 ldx #30 ldy #111 jsr Texte8 lda #KeyLeft sta GSTemp1 lda #>KeyLeft sta GSTemp1+1 ldx #25 ldy #131 jsr Texte8 lda #KeyRight sta GSTemp1 lda #>KeyRight sta GSTemp1+1 ldx #35 ldy #131 jsr Texte8 lda #KeyDown sta GSTemp1 lda #>KeyDown sta GSTemp1+1 ldx #30 ldy #153 jsr Texte8 rts ;--------------------------------------------------------------------- InitPnp anop lda #1 ;hgr2 jsr ClearHGR lda #0 sta $c050 ;graph sta $c052 ;plein ecran sta $c055 ;page 2 sta $c057 ;hgr rts ;--------------------------------------------------------------------- BouclePrin1 anop lda #3 sta Vies sta Vies1 sta Vies2 lda #0 sta ELife sta ELife1 sta ELife2 sta Score sta Score+1 sta Score+2 sta Score+3 sta Score1 sta Score1+1 sta Score1+2 sta Score1+3 sta Score2 sta Score2+1 sta Score2+2 sta Score2+3 sta Player jsr ClrDiams sta $c010 ;echantillonnage clavier BouclePrin2 anop lda #0 sta FirstScore inc ScoreTemp jsr Nettoyage jsr InitLevel jsr Preparation BouclePrin anop lda Diams+19 cmp #5 beq pasBonus jsr BonusST pasBonus anop lda Time+1 cmp #$90 blt PasFin lda #0 sta Time sta Time+1 sta vpoum sta vpoum+1 sta OkClic jsr Afscore jsr Explosions ldx #5 ldy #96 lda #phtolate sta GSTemp1 lda #>phtolate sta GSTemp1+1 lda #0 sta GSTemp2 lda #$60 sta GSTemp2+1 jsr Texte16 lda #50 jsr Pause sed dec Vies cld jsr Gestion2Joueurs cmp #0 bne FinJeuGo lda #1 ;hgr2 jsr ClearHGR jmp BouclePrin2 FinJeuGo jmp FinJeu pasfin anop lda MBut2 bne PasFinFall lda $c062 ;option bpl BPFire0 pasFinFall anop lda #0 sta MBut2 inc doFall BPFire0 anop lda $c000 ;lecture clavier bpl BPPause and #$7f cmp #'p' beq BPPause1 cmp #'P' beq BPPause1 cmp #27 ;esc beq FinJeu bne BPPause BPPause1 anop jsr doPause BPPause anop ldy vmousejoy beq pasReadKeys jsr KeyMove pasReadKeys anop lda vmousejoy bne pasReadX ldx #0 jsr $FB1E sty JoyX pasReadX anop jsr GestionSouris jsr Afscore jsr Poum lda vmousejoy bne pasReadY ldx #1 jsr $FB1E sty JoyY pasReadY anop jsr DrawCursor jsr Affiche jsr DeplaceBloc jsr Alignement lda #0 sta doFall lda Reussit bne OkReussit jmp BouclePrin OkReussit anop jsr Afscore lda #0 sta Reussit sta okClic sta FirstScore inc ScoreTemp jsr Affiche jsr DecTime lda #20 jsr Pause lda #1 ;HGR2 jsr ClearHGR inc Level lda Level cmp #99 bne okReussit2 lda #1 sta Level okReussit2 anop jsr Gestion2Joueurs jmp BouclePrin2 FinJeu anop lda #0 sta okClic lda #9 sta GSTemp1 lda #70 sta GSTemp1+1 lda #22 sta GSTemp2 lda #46 sta GSTemp2+1 lda #%10101010 sta GSTemp3 lda #%11010101 sta GSTemp3+1 jsr PaintRect lda #10 sta GSTemp1 lda #73 sta GSTemp1+1 lda #20 sta GSTemp2 lda #40 sta GSTemp2+1 lda #0 sta GSTemp3 sta GSTemp3+1 jsr PaintRect ldx #11 ldy #76 lda #phgameover sta GSTemp1 lda #>phgameover sta GSTemp1+1 lda #0 sta GSTemp2 lda #$60 sta GSTemp2+1 jsr Texte16 lda Player bne FinPl2 ldx #12 ldy #95 lda #phPlayer1 sta GSTemp1 lda #>phPlayer1 sta GSTemp1+1 lda #0 sta GSTemp2 lda #$60 sta GSTemp2+1 jsr Texte16 jmp FinJeu2 FinPl2 anop ldx #12 ldy #95 lda #phPlayer2 sta GSTemp1 lda #>phPlayer2 sta GSTemp1+1 lda #0 sta GSTemp2 lda #$60 sta GSTemp2+1 jsr Texte16 FinJeu2 anop jsr Afscore lda #35 jsr Pause lda #1 ;hgr2 jsr ClearHGR rts ;-------------------------------------------------------------------------- EnterCode anop lda #0 ldx #0 clc EnterCode0 anop adc $0,x inx bne EnterCode0 EnterCode00 anop pha jsr Random pla beq EnterCode1 sec sbc #1 jmp EnterCode00 EnterCode1 anop jsr Random cmp #60 bge EnterCode1 sta CodeY tax lda HexDec,x pha and #$0f clc adc #$30 ;zero sta PassLine+8 pla and #$f0 clc lsr a lsr a lsr a lsr a clc adc #$30 ;zero sta PassLine+7 EnterCode2 anop jsr Random cmp #10 bge EnterCode2 sta CodeX clc adc #$41 ;caractere A sta PassRow+8 lda #8 sta GSTemp1 lda #70 sta GSTemp1+1 lda #25 sta GSTemp2 lda #64 sta GSTemp2+1 lda #%10101010 sta GSTemp3 sta GSTemp3+1 jsr PaintRect lda #9 sta GSTemp1 lda #76 sta GSTemp1+1 lda #23 sta GSTemp2 lda #52 sta GSTemp2+1 lda #0 sta GSTemp3 sta GSTemp3+1 jsr PaintRect lda #0 sta GSTemp2 lda #$60 sta GSTemp2+1 lda #PassText sta GSTemp1 lda #>PassText sta GSTemp1+1 ldx #10 ldy #83 jsr Texte8 lda #PassRow sta GSTemp1 lda #>PassRow sta GSTemp1+1 ldx #14 ldy #92 jsr Texte8 lda #PassLine sta GSTemp1 lda #>PassLine sta GSTemp1+1 ldx #14 ldy #101 jsr Texte8 lda #0 sta ScoreStr EnterCodeLoop anop jsr WaitUser cmp #$20 ;espace? blt SpecialCars cmp #$7f ;Delete? beq BackCode cmp #$7b bge EnterCodeLoop cmp #$61 blt CodeUpper sec sbc #$20 CodeUpper anop ldx ScoreStr cpx #5 bge EnterCodeLoop inx stx ScoreStr sta ScoreStr,x AffCode anop lda #0 sta GSTemp2 lda #$60 sta GSTemp2+1 lda #ScoreStr sta GSTemp1 lda #>ScoreStr sta GSTemp1+1 ldx #18 ldy #113 jsr Texte8 jmp EnterCodeLoop SpecialCars anop cmp #$0d ;return? beq EnterCodeEnd0 cmp #$08 ;fleche gauche? beq BackCode jmp EnterCodeLoop BackCode anop ldx ScoreStr beq EnterCodeLoop dex stx ScoreStr lda #18 sta GSTemp1 lda #113 sta GSTemp1+1 lda #5 sta GSTemp2 lda #7 sta GSTemp2+1 lda #0 sta GSTemp3 sta GSTemp3+1 jsr PaintRect jmp AffCode EnterCodeEnd0 anop lda ScoreStr cmp #5 bne PasCodeOk jsr CodeCalc lda Temp2 clc adc #vbest+96 sta <$50 lda Temp2+1 adc #>vbest sta <$51 ldx #0 lda ($50,x) cmp ScoreStr+1 bne pasCodeOk jsr Inc50 lda ($50,x) cmp ScoreStr+2 bne pasCodeOk jsr Inc50 lda ($50,x) cmp ScoreStr+3 bne pasCodeOk jsr Inc50 lda ($50,x) cmp ScoreStr+4 bne pasCodeOk jsr Inc50 lda ($50,x) cmp ScoreStr+5 bne pasCodeOk EnterCodeEnd anop rts PasCodeOk anop lda #1 ;HGR2 jsr ClearHGR lda #0 sta GSTemp2 lda #$60 sta GSTemp2+1 lda #WrongCode sta GSTemp1 lda #>WrongCode sta GSTemp1+1 ldx #2 ldy #100 jsr Texte8 jsr WaitUser ldx StackPtr txs jmp PnPEnd CodeCalc anop lda #0 sta Temp2 sta Temp2+1 ldx CodeY beq CodeCalc20 lda #0 CodeCalc10 anop clc adc #50 ;une ligne de codes... bcc CodeCalc100 inc Temp2+1 CodeCalc100 anop dex bne CodeCalc10 sta Temp2 CodeCalc20 anop ldx CodeX beq CodeCalc40 lda #0 CodeCalc30 anop clc adc #5 ;un code... dex bne CodeCalc30 clc adc Temp2 sta Temp2 lda #0 adc Temp2+1 sta Temp2+1 CodeCalc40 anop rts ;-------------------------------------------------------------------------- KeyMove anop cmp KeyUp+1 beq doKeyUp cmp KeyUp+3 beq doKeyUp cmp KeyLeft+1 beq doKeyLeft cmp KeyLeft+3 beq doKeyLeft cmp KeyRight+1 beq doKeyRight cmp KeyRight+3 beq doKeyRight cmp KeyDown+1 beq doKeyDown cmp KeyDown+3 beq doKeyDown cmp #' ' beq doKeyPick cmp #13 beq doKeyFall lda #128 sta JoyX sta JoyY lda #$ea ;nop sta doKeyPick rts doKeyUp anop lda #90 sta JoyY lda #128 sta JoyX lda #$ea ;nop sta doKeyPick rts doKeyDown anop lda #165 sta JoyY lda #128 sta JoyX lda #$ea ;nop sta doKeyPick rts doKeyRight anop lda #165 sta JoyX lda #128 sta JoyY lda #$ea ;nop sta doKeyPick rts doKeyLeft anop lda #90 sta JoyX lda #128 sta JoyY lda #$ea ;nop sta doKeyPick rts doKeyFall anop lda #128 sta JoyX sta JoyY sta MBut2 lda #$ea ;nop sta doKeyPick rts doKeyPick anop nop lda #128 sta JoyX sta JoyY sta MBut lda #$60 ;rts sta doKeyPick rts ;-------------------------------------------------------------------------- DecTime anop lda #20 DCLoop anop pha jsr Affiche pla sec sbc #1 bne DCLoop DCLoop2 anop sed lda Time sec sbc #10 sta Time bcs DCL20 lda Time+1 sec sbc #1 sta Time+1 bcc DCLoop3 DCL20 anop lda Score clc adc #10 sta Score lda #0 adc Score+1 sta Score+1 lda #0 adc Score+2 sta Score+2 lda #0 adc Score+3 sta Score+3 cld jsr AfScore lda #10 ldx #5 jsr Sound lda #5 ldx #10 jsr Sound jmp DCLoop2 DCLoop3 anop cld lda #0 sta Time sta Time+1 jsr AfScore jsr Affiche lda #20 jsr Pause rts ;-------------------------------------------------------------------------- BonusST anop jsr AfScore ldx #20 BSTloop anop txa pha lda Diams-1,x tay lda #5 sta Diams-1,x ;efface diam lda #0 sta DiamsTbl2-1,x sed lda ShScore,y ;valeur du diam clc lsr a ;multi 10 lsr a lsr a lsr a adc Score+1 sta Score+1 lda #0 adc Score+2 sta Score+2 lda #0 adc Score+3 sta Score+3 lda #0 adc Score+4 sta Score+4 cld lda #10 ldx #5 jsr Sound jsr Afscore lda #2 ldx #30 jsr Sound jsr Affiche pla tax dex bne BSTLoop rts ;-------------------------------------------------------------------------- Gestion2Joueurs anop lda Player bne GJpl2 ldx #0 GJpl1Loop anop lda Diams,x sta Diams1,x inx cpx #20 bne GJpl1Loop lda Score sta Score1 lda Score+1 sta Score1+1 lda Score+2 sta Score1+2 lda Score+3 sta Score1+3 lda Level sta Level1 lda ELife sta ELife1 lda Vies sta Vies1 beq Perdu2 lda NbPlayer beq paschange1 lda #1 sta Player paschange1 anop lda #0 rts paschange2 anop lda #-1 rts Perdu2 anop jsr BestScore lda NbPlayer beq paschange2 lda Vies2 beq paschange2 lda #1 sta Player jmp paschange1 GJpl2 anop ldx #0 GJpl2Loop anop lda Diams,x sta Diams2,x inx cpx #20 bne GJpl2Loop lda Score sta Score2 lda Score+1 sta Score2+1 lda Score+2 sta Score2+2 lda Score+3 sta Score2+3 lda Level sta Level2 lda ELife sta ELife2 lda Vies sta Vies2 beq Perdu3 lda Vies1 beq paschange1 lda #0 sta Player rts Perdu3 anop jsr BestScore lda Vies1 beq paschange2 lda #0 sta Player sta NbPlayer rts ;-------------------------------------------------------------------------- BestScore anop lda #0 sta NeedSave jsr CopyBest ldx #0 HiScoreLoop anop lda vbest+15,x cmp Score+3 blt HiScoreLoopOk bne NextHiScore lda vbest+14,x cmp Score+2 blt HiScoreLoopOk bne NextHiScore lda vbest+13,x cmp Score+1 blt HiScoreLoopOk bne NextHiScore lda Score cmp vbest+12,x blt NextHiScore HiScoreLoopOk anop txa tay stx Temp jmp OkHiScore NextHiScore anop txa clc adc #16 tax cmp #5*16 blt HiScoreLoop jmp HiScores OkHiScore anop ldx #(4*16)+1 OkHiScore2 anop dex lda vbest,x sta vbest+16,x cpx Temp bne OkHiScore2 lda Score sta vbest+12,y lda Score+1 sta vbest+13,y lda Score+2 sta vbest+14,y lda Score+3 sta vbest+15,y ldx Level lda HexDec,x sta vbest,y jsr EntreNom HiScores anop lda #0 sta FirstScore inc ScoreTemp jsr AfScore ldx #9 ldy #45 lda #phhi sta GSTemp1 lda #>phhi sta GSTemp1+1 lda #0 sta GSTemp2 lda #$60 sta GSTemp2+1 jsr Texte16 lda #80 sta HiVert ldx #0 ShowHi anop txa pha lda vbest,x and #$0f clc adc #$30 ;zero sta ScoreStr+2 lda vbest,x and #$f0 lsr a lsr a lsr a lsr a adc #$30 ;zero sta ScoreStr+1 lda #2 sta ScoreStr ldx #0 ldy HiVert lda #ScoreStr sta GSTemp1 lda #>ScoreStr sta GSTemp1+1 lda #0 sta GSTemp2 lda #$60 sta GSTemp2+1 jsr Texte16 ;Affiche le level... pla pha clc adc #1 adc #vbest sta GSTemp1 lda #>vbest sta GSTemp1+1 lda #0 sta GSTemp2 lda #$60 sta GSTemp2+1 ldx #5 ldy HiVert jsr Texte16 ;affiche le nom... pla pha tax lda #$30 ;zero sta ScoreStr+8 lda vbest+12,x and #$0f clc adc #$30 ;zero sta ScoreStr+7 lda vbest+12,x and #$f0 lsr a lsr a lsr a lsr a adc #$30 ;zero sta ScoreStr+6 lda vbest+13,x and #$0f adc #$30 ;zero sta ScoreStr+5 lda vbest+13,x and #$f0 lsr a lsr a lsr a lsr a adc #$30 ;zero sta ScoreStr+4 lda vbest+14,x and #$0f adc #$30 ;zero sta ScoreStr+3 lda vbest+14,x and #$f0 lsr a lsr a lsr a lsr a adc #$30 ;zero sta ScoreStr+2 lda vbest+15,x and #$0f adc #$30 ;zero sta ScoreStr+1 lda #8 sta ScoreStr ldx #24 ldy HiVert lda #ScoreStr sta GSTemp1 lda #>ScoreStr sta GSTemp1+1 lda #0 sta GSTemp2 lda #$60 sta GSTemp2+1 jsr Texte16 ;Affiche le score... lda HiVert clc adc #18 sta HiVert pla clc adc #16 tax cmp #5*16 beq pasShowHi jmp ShowHi pasShowHi anop jsr WaitUser lda NeedSave beq pasSaveHS jsr SaveHiScore pasSaveHS anop rts ;-------------------------------------------------------------------------- SaveHiScore anop jsr ProDOS dc h'c8' ;Open dc i2'OpenHS' bcs SaveHSErr lda RefNumHS sta WriteHS+1 sta CloseHS+1 jsr ProDOS dc h'cb' ;Write dc i2'WriteHS' bcs SaveHSErr SaveHSclose anop jsr ProDOS dc h'cc' ;Close dc i2'CloseHS' rts SaveHSErr anop lda #0 sta GSTemp2 lda #$60 sta GSTemp2+1 lda #SaveHS sta GSTemp1 lda #>SaveHS sta GSTemp1+1 ldx #11 ldy #182 jsr Texte8 jmp SaveHSClose ;-------------------------------------------------------------------------- EntreNom anop inc NeedSave ;il faut sauver les hiscores tya pha ldx #5 ldy #50 lda #phbest sta GSTemp1 lda #>phbest sta GSTemp1+1 lda #0 sta GSTemp2 lda #$60 sta GSTemp2+1 jsr Texte16 lda Player bne ENpl2 lda #phplayer1 sta GSTemp1 lda #>phplayer1 sta GSTemp1+1 jmp EN2 ENpl2 anop lda #phplayer2 sta GSTemp1 lda #>phplayer2 sta GSTemp1+1 EN2 anop ldx #12 ldy #70 lda #0 sta GSTemp2 lda #$60 sta GSTemp2+1 jsr Texte16 lda #0 sta FirstScore inc ScoreTemp jsr AfScore pla pha tay tax lda #0 sta vbest+1,x EN3 anop sty Temp jsr WaitUser ldy Temp cmp #0 ;clic ou fire beq EN3 cmp #$7f ;Delete ? beq EN4 cmp #$08 ;fleche gauche ? beq EN4 cmp #$0d ;return ? beq EN5 cmp #$5b ;A-Z, 0-9, espace, ... blt EN30 sec sbc #$20 ;force majuscule EN30 anop sta Temp lda vbest+1,y ;nb caracteres str tax cpx #9 beq EN3 pla tax lda Temp sta vbest+2,x ;caractere tape inx txa pha tya tax inc vbest+1,x EN33 anop sty Temp tya clc adc #vbest+1 sta GSTemp1 lda #>vbest sta GSTemp1+1 ldx #11 ldy #108 lda #0 sta GSTemp2 lda #$60 sta GSTemp2+1 jsr Texte16 ldy Temp jmp EN3 EN4 anop tya tax lda vbest+1,x beq EN3 dec vbest+1,x pla sec sbc #1 pha sty Temp lda #11 sta GSTemp1 lda #108 sta GSTemp1+1 lda #18 sta GSTemp2 lda #15 sta GSTemp2+1 lda #0 sta GSTemp3 sta GSTemp3+1 jsr PaintRect ldy Temp jmp EN33 EN5 anop pla lda #1 ;HGR2 jsr ClearHGR jsr CopyBest rts ;-------------------------------------------------------------------------- ProDOSErr anop bcs ProDOSerr2 rts ProDOSErr2 anop tax lda HexDec,x pha and #$0f clc adc #$30 ;zero sta Err2Str+1 pla and #$f0 clc lsr a lsr a lsr a lsr a clc adc #$30 ;zero sta Err2Str lda #9 sta GSTemp1 lda #70 sta GSTemp1+1 lda #22 sta GSTemp2 lda #52 sta GSTemp2+1 lda #$ff sta GSTemp3 sta GSTemp3+1 jsr PaintRect lda #10 sta GSTemp1 lda #76 sta GSTemp1+1 lda #20 sta GSTemp2 lda #40 sta GSTemp2+1 lda #0 sta GSTemp3 sta GSTemp3+1 jsr PaintRect lda #0 sta GSTemp2 lda #$60 sta GSTemp2+1 lda #ProDOSstr1 sta GSTemp1 lda #>ProDOSstr1 sta GSTemp1+1 ldx #13 ldy #83 jsr Texte8 lda #ProDOSstr2 sta GSTemp1 lda #>ProDOSstr2 sta GSTemp1+1 ldx #14 ldy #93 jsr Texte8 lda #ErrStr sta GSTemp1 lda #>ErrStr sta GSTemp1+1 ldx #23 ldy #106 jsr Texte8 jsr WaitUser ldx StackPtr txs jmp PnPEnd ;-------------------------------------------------------------------------- Alignement anop lda #8*20 ;taille tableau - une ligne sta Temp bcl1 anop lda #0 sta Multi sta PileSize sta Temp4+1 sta Temp4+2 sta Temp4+3 ldx Temp lda Tableau0,x bcl11 anop sta Temp2 tax lda TypeDep,x cmp #13 ;affreux ? bne pasAffreux stx StackX lda #1 ldx #5 jsr Sound ldx StackX sed lda Time sec sbc #1 sta Time bcs pastrouv0 lda Time+1 sec sbc #1 sta Time+1 pastrouv0 cld jmp pasTrouv2 pasAffreux anop cmp #9 bge PasTrouv1 sta Temp3 cmp #6 ;multiplicateur? bne PasMulti lda Temp2 sec sbc #61 ;numero element des multis - 2 sta Multi pasMulti anop lda ShScore,x sta Temp4 lda Temp sta Temp+1 bcl2 anop inc PileSize lda Temp+1 sec sbc #20 ;ligne superieur sta Temp+1 tax lda Tableau0,x beq Trouv1 tay tax lda TypeDep,x cmp #6 ;multiplicateur ? bne pasMulti2 tya sec sbc #61 ;numero element des multis - 2 cmp Multi blt pasmulti2 sta Multi pasMulti2 anop sed lda ShScore,x cmp #$99 beq bcl2score0 clc adc Temp4 sta Temp4 bcc bcl2score bcl2score0 anop inc Temp4+1 bcl2score anop cld lda TypeDep,x beq Trouv1 cmp #9 beq pasTrouv1 tax cpy Temp2 beq bcl2 cpx #5 ;bonus? beq bcl2 cpx #6 ;multi? beq bcl2 cpx #8 ;time? beq bcl2 PasTrouv1 jmp pasTrouv2 Trouv1 anop lda PileSize cmp Minimum blt pastrouv1 lda Temp sta Temp+1 bcl3 anop ldx Temp+1 lda Tableau0,x cmp #80 blt bcl3notdiams cmp #99 bge bcl3notdiams ldx #0 bcl3diams anop ldy Diams,x cpy #5 beq bcl3okdiam inx cpx #20 bne bcl3diams bcl3okdiam anop sta Diams,x bcl3notdiams anop tay lda TypeDep,y cmp #8 ;time? bne pastime2 sed lda Time+1 clc adc #2 sta Time+1 cld PasTime2 anop lda valcar,y ;afficher valeur de l'element ldx Temp+1 sta Tableau0,x lda #0 sta Tableau20,x lda Temp+1 sec sbc #20 ;ligne superieure sta Temp+1 dec PileSize bne bcl3 lda #10 sta Show ;pour ne pas effacer les valeurs lda Temp4 sta Temp2 lda Temp4+1 sta Temp2+1 sed ldx Multi beq pasbcl4 dex bcl4 anop lda Temp4 clc adc Temp2 sta Temp4 lda Temp4+1 adc Temp2+1 sta Temp4+1 dex bne bcl4 pasbcl4 anop cld ldx Temp+1 lda Temp4+1 cmp #$01 blt pasbonx cmp #$02 bge pasDiams1 lda #80 ;diams 1 sta Tableau,x jmp pasbonx pasDiams1 anop cmp #$04 bge pasDiams2 lda #83 ;diams 2 sta Tableau,x jmp pasbonx pasDiams2 anop cmp #$06 bge pasDiams3 lda #86 ;diams 3 sta Tableau,x jmp pasbonx pasDiams3 anop cmp #$08 bge pasDiams4 lda #89 ;diams 4 sta Tableau,x jmp pasbonx pasDiams4 anop cmp #$10 bge pasDiams5 lda #92 ;diams 5 sta Tableau,x jmp pasbonx pasDiams5 anop lda #95 ;diams 6 sta Tableau,x pasbonx anop sed clc lda Temp4 adc Score sta Score lda Temp4+1 adc Score+1 sta Score+1 lda Temp4+2 adc Score+2 sta Score+2 lda Temp4+3 adc Score+3 sta Score+3 cld PasTrouv2 anop inc Temp lda Temp cmp #9*20 ;le tableau est fini ? beq pasbcl1 jmp bcl1 pasbcl1 anop ldx #8*20 bcl5 anop lda Tableau-1,x cmp #40 ;boule 1 beq pasReussit cmp #41 ;boule 2 beq pasReussit cmp #42 ;boule 3 beq pasReussit dex bne Bcl5 lda #-1 sta Reussit rts pasReussit anop ldx #8*20 bcl6 anop lda Tableau-1,x cmp #135 ;pot de fleur ? bne paspot lda Tableau-1+20,x ;ligne suivante beq Paspot tay lda TypeDep,y cmp #11 beq paspot cmp #20 beq paspot lda #68 ;explosion sta Tableau-1+20,x paspot anop dex bne bcl6 rts ;-------------------------------------------------------------------------- DrawCursor anop lda JoyX clc lsr a lsr a lsr a lsr a lsr a sec sbc #4 beq DCJoyX bcc DCsubX clc adc Mx sta Mx jmp DCjoyX DCsubX anop eor #$ff sta Temp lda Mx sec sbc Temp sta Mx DCJoyX anop lda JoyY clc lsr a lsr a lsr a lsr a lsr a sec sbc #4 beq DCJoyY bcc DCsubY clc adc My sta My jmp DCjoyY DCsubY anop eor #$ff sta Temp lda My sec sbc Temp sta My DCJoyY anop lda Mx cmp #39 blt DCClampX cmp #$e0 blt DCClampX0 lda #0 sta Mx jmp DCClampX DCClampX0 anop lda #38 sta Mx DCClampX anop lda My cmp #24 blt DCClampY cmp #$e0 blt DCClampY0 lda #0 sta My jmp DCClampY DCClampY0 anop lda #23 sta My DCClampY anop ldx Mx beq doMousePos dex doMousePos anop txa clc lsr a ldx My adc ShapeTableY,x sta MousePos adc #20 sta MousePos2 adc #1 sta MousePos3 sec sbc #20 sta MousePos4 ldx Mx ldy My jsr XORCursor lda OldMouse cmp Mx bne DCClearCursor lda OldMouse+1 cmp My beq DrawCursorDone DCClearCursor anop lda OldMouse clc lsr a ldx OldMouse+1 adc ShapeTableY,x tax lda #0 sta Tableau2,x sta Tableau2-1,x sta Tableau2+20,x sta Tableau2+20-1,x DrawCursorDone anop lda Mx sta OldMouse lda My sta OldMouse+1 rts XORCursor anop lda ShapesLineY,y clc adc #4 sta Temp3 txa sta Temp1 lda #0 sta Temp2 sta Temp4 tax XORCursor2 anop ldy Temp3 lda adrlo,y clc adc Temp1 sta <$50 lda adrhi,y adc PageHGR sta <$51 lda ($50,x) ldy Temp4 and CursorMask,y ora CursorPict,y iny sta ($50,x) jsr Inc50 lda ($50,x) and CursorMask,y ora CursorPict,y iny sty Temp4 sta ($50,x) inc Temp3 inc Temp2 lda Temp2 cmp #9 bne XORCursor2 rts XORCursor3 anop lda ShapesLineY2,y sta Temp3 txa asl a sta Temp1 lda #0 sta Temp2 sta Temp4 tax XORCursor4 anop ldy Temp3 lda adrlo,y clc adc Temp1 sta <$50 lda adrhi,y adc PageHGR sta <$51 lda ($50,x) ldy Temp4 and CursorMask2,y ora CursorPict2,y iny sta ($50,x) jsr Inc50 lda ($50,x) and CursorMask2,y ora CursorPict2,y iny sty Temp4 sta ($50,x) inc Temp3 inc Temp2 lda Temp2 cmp #15 bne XORCursor4 rts OldMouse ds 2 MousePos ds 1 MousePos2 ds 1 MousePos3 ds 1 MousePos4 ds 1 ;--------------------------------------------------------------------- Explosions anop ldy #250 sty MousePos sty MousePos2 sty MousePos3 sty MousePos4 ldy #0 ldx #0 ExploLoop anop lda #68 sta Tableau,y lda #0 sta Tableau2,y iny cpy #20*8 bne ExploLoop lda #10 Explo1 anop pha jsr Affiche pla sec sbc #1 bne Explo1 lda AffSpeed pha lda #20 sta AffSpeed lda #100 Explo2 anop pha jsr Random and #$f clc adc #2 sta Temp jsr Random and #7 tax lda #0 ExploMul anop cpx #0 beq ExploMul2 clc adc #20 dex jmp ExploMul ExploMul2 anop clc adc Temp tax lda #68 ;explosion sta Tableau,x jsr Affiche pla sec sbc #1 bne Explo2 pla sta AffSpeed lda #10 Explo3 anop pha jsr Affiche pla sec sbc #1 bne Explo3 lda #10 jsr Pause rts ;--------------------------------------------------------------------- Preparation anop jsr Nettoyage lda #200 sec sbc Level sta vexplo lda #0 sta Temp lda Level asl a asl a asl a asl a clc adc #Diff bcc Prep0 inc Temp Prep0 anop sta <$50 lda Level clc lsr a lsr a lsr a lsr a clc adc #>Diff adc Temp sta <$51 ldx #0 lda ($50,x) ;nb de balles sta nbBalls jsr Inc50 jsr Inc50 lda ($50,x) ;time+1 sta Time+1 jsr Inc50 lda ($50,x) ;time sta Time jsr Inc50 lda ($50,x) ;longueur-1 des lignes clc adc #1 sta Minimum jsr Inc50 jsr Inc50 lda ($50,x) ;difficulte sta Difficulte jsr Inc50 jsr Inc50 lda ($50,x) ;% tete de mort sta Affreux jsr Inc50 jsr Inc50 lda ($50,x) ;% flammes sta Flammes jsr Inc50 jsr Inc50 lda ($50,x) ;% pot fleurs sta Pot jsr CopyBest jsr Afscore inc doFall ;simule l'appuie sur espace sta $c010 ;echantillonnage clavier Prep2 anop lda vmousejoy bne pasReadX2 ldx #0 jsr $FB1E sty JoyX pasReadX2 anop jsr GestionSouris jsr Afscore jsr Poum lda vmousejoy bne pasReadY2 ldx #1 ******* jsr $FB1E * sty JoyY * pasReadY2 anop jsr DrawCursor jsr Affiche jsr DeplaceBloc lda $c000 bpl Prep3 and #$7f cmp #'p' beq Prep22 cmp #'P' beq Prep22 jmp Prep3 Prep22 anop jsr doPause Prep3 anop ldy vmousejoy beq pasReadKeys2 jsr KeyMove pasReadKeys2 anop dec NbBalls bne Prep2 dec doFall rts ;--------------------------------------------------------------------- doPause anop ldx #15 ldy #96 lda #phpause sta GSTemp1 lda #>phpause sta GSTemp1+1 lda #0 sta GSTemp2 lda #$60 sta GSTemp2+1 jsr Texte16 jsr WaitUser ;* Debug cmp #'*' ;* bne doPause1 ;* lda #$01 ;* sta Time+1 ;* lda #1 ;* sta Vies ;* lda #0 ;* sta FirstScore ;* jmp doPause2 ;* doPause1 anop ;* cmp #'+' ;* bne doPause2 ;* sed ;* lda Score+1 ;* clc ;* adc #1 ;* sta Score+1 ;* cld ;* inc ScoreTemp ;* inc ScoreTemp ;* jsr AfScore ;* jmp doPause ;* doPause2 anop jsr ForceAff rts ;--------------------------------------------------------------------- GestionSouris anop jsr Random sta Temp3 lda Temp3 cmp #8 bge doFallTest lda Difficulte bge doFallTest and RNDRoot and RNDRoot+1 cmp #1 bne doFallTest cmp Temp3 beq doFallRout doFallTest anop lda doFall beq notFallRout doFallRout anop jsr Random eor Temp3 and #%00111100 ;colonne entre 0 et 15 clc lsr a lsr a adc #2 ;...entre 2 et 17 tay jsr Random sta Temp3 lda #0 sta Temp4 ldx #0 RndLoop anop lda Apparition,x beq pasval bmi notFallRout clc adc Temp4 sta Temp4 cmp Temp3 bge OkVal pasval anop inx jmp RndLoop okval anop txa sta Tableau0,y notFallRout anop lda Etalon bne PasApp lda MBut bne doSourisFire lda $c061 bmi doSourisFire rts doSourisFire anop lda #0 sta MBut lda #3 sta Etalon lda OkClic bne DejaClic lda #12 ldx #8 jsr Sound ldx MousePos lda Tableau,x tax lda TypeDep,x beq PasApp cmp #10 bge PasApp ldx MousePos lda #0 sta Tableau2,x lda MousePos sta Curs1 lda Mx clc lsr a sta XSour lda My sta YSour lda #-1 sta OkClic PasApp anop lda Etalon beq PasApp2 dec Etalon PasApp2 rts dejaClic anop ldx MousePos lda Tableau,x sta Temp2+1 tay lda TypeDep,y cmp #11 beq PasApp ldx Curs1 lda Tableau,x sta Temp2 ldx MousePos sta Tableau,x lda #0 sta Tableau2,x tya ldx Curs1 sta Tableau,x lda #0 sta Tableau2,x sta OkClic lda #8 ldx #12 jsr Sound ldx Temp2 lda TypeDep,x cmp #7 bne PasApp lda vexplo sec sbc #1 cmp Temp2+1 beq OkExplo sec sbc #10 cmp Temp2+1 beq OkExplo sec sbc #10 cmp Temp2+1 beq OkExplo sec sbc #10 cmp Temp2+1 beq OkExplo sec sbc #10 cmp Temp2+1 beq OkExplo sec sbc #10 cmp Temp2+1 beq OkExplo sec sbc #10 cmp Temp2+1 beq OkExplo sec sbc #10 cmp Temp2+1 beq OkExplo sec sbc #10 cmp Temp2+1 beq OkExplo lda #68 FillExplo anop ldy Diams ldx MousePos sta Tableau-20-1,x sta Tableau-20,x sta Tableau-20+1,x sta Tableau-1,x sta Tableau,x sta Tableau+1,x sta Tableau+20-1,x sta Tableau+20,x sta Tableau+20+1,x sty Diams jmp doGround OkExplo anop jsr Random and #$f clc adc #82 jmp FillExplo doGround anop lda #0 sta Tableau2-20-1,x sta Tableau2-20,x sta Tableau2-20+1,x sta Tableau2-1,x sta Tableau2,x sta Tableau2+1,x sta Tableau2+20-1,x sta Tableau2+20,x sta Tableau2+20+1,x ldx #0 lda #2 doGroundLoop anop sta Diams-20,x inx cpx #20 bne doGroundLoop jmp PasApp ;--------------------------------------------------------------------- DeplaceBloc anop ldx #20*8-1 DepBloc1 anop lda Tableau-20,x ;on charge un element beq PasTombe tay lda TypeDep,y cmp #20 bge PasTombe tay lda Tableau,x ;ligne en dessous bne tpasbas lda Tableau-20,x sta Tableau,x lda #0 sta Tableau-20,x sta Tableau2-20,x sta Tableau2,x jmp pasTombe tpasbas anop cpy #9 beq PasTombe jsr Random and #%00000010 bne tgauche lda Tableau+1,x bne pastombe lda Tableau-20,x sta Tableau+1,x lda #0 sta Tableau-20,x sta Tableau2-20,x sta Tableau2+1,x jmp pastombe tgauche anop lda Tableau-1,x bne pastombe lda Tableau-20,x sta Tableau-1,x lda #0 sta Tableau-20,x sta Tableau2-20,x sta Tableau2-1,x Pastombe anop dex bne DepBloc1 ldx #20 lda #0 ClearSky anop sta Tableau0-1,x dex bne ClearSky rts ;--------------------------------------------------------------------- Affiche anop lda #0 sta GSTemp2 lda #$20 sta GSTemp2+1 ldx #0 lda Show beq Affiche1 dec Show Affiche1 anop stx Temp lda OffSetX,x sta GSTemp7 ;x dest lda OffSetY,x clc adc #42 ;tableau de bord sta GSTemp7+1 ;y dest lda Tableau,x ldy Show beq OkAnim cmp #160 ;element valeur alignement bge Aff123 OkAnim anop tax ldy TypeDep,x cpy #14 ;flamme bne Affpasflamme pha jsr Random tay ldx Temp pla iny bne AffPasFlamme sta Tableau-20,x ;propagation des flammes AffPasFlamme anop ldx Temp tay lda Listeanim,y ;animation de l'objet cmp Tableau,x beq Aff123 sta Tableau,x jmp Aff124 Aff123 anop ldy Tableau2,x bne NotAff Aff124 anop tay lda OffSetX,y sta GSTemp6 ;x source lda OffSetY,y sta GSTemp6+1 ;y source lda #$80 sta Tableau2,x ;ne pas reafficher! inc AffNumber jsr Sprite16 lda Curs1 cmp Temp beq AffCurs0 cmp MousePos beq AffCurs0 cmp MousePos2 beq AffCurs0 cmp MousePos3 beq AffCurs0 cmp MousePos4 bne AffCurs1 AffCurs0 anop lda OkClic beq AffCurs1 inc AffNumber ldx XSour ldy YSour jsr XORCursor3 Affcurs1 anop lda Temp cmp MousePos beq AffFleche cmp MousePos2 beq AffFleche cmp MousePos3 beq AffFleche cmp MousePos4 bne NotAff AffFleche anop inc AffNumber ldx Mx ldy My jsr XORCursor ;utilise Temp1-4 NotAff anop ldx Temp inx cpx #20*10 beq AfficheDone jmp Affiche1 AfficheDone anop lda AffNumber cmp AffSpeed blt AfficheDone2 lda #0 sta AffNumber rts AfficheDone2 anop ;Tempo pour vitesse constante lda #10 sta GSTemp6 ;x source lda #0 sta GSTemp6+1 ;y source lda #38 sta GSTemp7 ;x dest lda #177 sta GSTemp7+1 ;y dest jsr Sprite16 inc AffNumber lda AffNumber cmp AffSpeed bne AfficheDone2 lda #0 sta AffNumber rts ;--------------------------------------------------------------------- Poum anop sed lda Time sec sbc #1 sta Time bcs Poum2 lda Time+1 sec sbc #1 sta Time+1 Poum2 anop cld lda vtictac bne PoumDone ldx vpoum beq doPoum dex stx vpoum jmp PoumDone doPoum anop lda TicSide eor #$ff sta TicSide bne TicLeft lda #25 jmp TicRight TicLeft anop lda #15 TicRight anop ldx #8 jsr Sound ;clic...c'est le tictac! lda Time+1 sta vpoum PoumDone anop rts ;--------------------------------------------------------------------- CopyBest anop lda #1 jsr ClearHGR2 lda #0 sta Temp2 lda #150 sta Temp CopyBestLoop anop ldx Temp lda adrlo,x sta <$50 lda adrhi,x adc #$60 ;Buffer car sta <$51 ldx Temp2 lda adrlo,x sta <$52 lda adrhi,x adc #$40 ;HGR2 sta <$53 ldy #40 CopyBestLine anop ldx #0 lda ($50,x) ;copie d'une ligne sta ($52,x) jsr Inc50 jsr Inc52 dey bne CopyBestLine inc Temp inc Temp2 lda Temp2 cmp #42 bne CopyBestLoop rts ;--------------------------------------------------------------------- Afscore anop lda ELife cmp Score+2 beq AfScore2 AfScore1 anop ;extra life ! lda #0 sta FirstScore lda Score+2 sta ELife sed lda Vies clc adc #1 sta Vies cld lda #7 sta GSTemp1 lda #70 sta GSTemp1+1 lda #26 sta GSTemp2 lda #46 sta GSTemp2+1 lda #%10101010 sta GSTemp3 lda #%11010101 sta GSTemp3+1 jsr PaintRect lda #8 sta GSTemp1 lda #73 sta GSTemp1+1 lda #24 sta GSTemp2 lda #40 sta GSTemp2+1 lda #0 sta GSTemp3 sta GSTemp3+1 jsr PaintRect ldx #10 ldy #85 lda #phextralife sta GSTemp1 lda #>phextralife sta GSTemp1+1 lda #0 sta GSTemp2 lda #$60 sta GSTemp2+1 jsr Texte16 lda #15 jsr Pause jsr ForceAff AfScore2 anop ;----------------------- ;affiche le temps clc lda Time and #$0f adc #$c2 ;zero (66 + $80) sta ScoreStr+4 lda Time and #$f0 lsr a lsr a lsr a lsr a adc #$c2 ;zero (66 + $80) sta ScoreStr+3 lda Time+1 and #$0f adc #$c2 ;zero (66 + $80) sta ScoreStr+2 lda Time+1 and #$f0 lsr a lsr a lsr a lsr a adc #$c2 ;zero (66 + $80) sta ScoreStr+1 lda #4 sta ScoreStr ldx #30 ldy #9 lda #ScoreStr sta GSTemp1 lda #>ScoreStr sta GSTemp1+1 lda #0 sta GSTemp2 lda #$60 sta GSTemp2+1 jsr Texte16 ;----------------------- ;affiche le score lda Score eor Score+1 eor Score+2 eor Score+3 sta Temp lda ScoreTemp eor ScoreTemp+1 eor ScoreTemp+2 eor ScoreTemp+3 cmp Temp bne doAffScore jmp affvie doAffScore anop lda AffNumber ;controle de la vitesse clc ;d'affichage adc #7 sta AffNumber clc lda Score and #$0f adc #$c2 ;zero (66 + $80) sta ScoreStr+7 lda Score and #$f0 lsr a lsr a lsr a lsr a adc #$c2 ;zero (66 + $80) sta ScoreStr+6 lda Score+1 and #$0f adc #$c2 ;zero (66 + $80) sta ScoreStr+5 lda Score+1 and #$f0 lsr a lsr a lsr a lsr a adc #$c2 ;zero (66 + $80) sta ScoreStr+4 lda Score+2 and #$0f adc #$c2 ;zero (66 + $80) sta ScoreStr+3 lda Score+2 and #$f0 lsr a lsr a lsr a lsr a adc #$c2 ;zero (66 + $80) sta ScoreStr+2 lda Score+3 and #$0f adc #$c2 sta ScoreStr+1 lda #7 sta ScoreStr ldx #12 ldy #9 lda #ScoreStr sta GSTemp1 lda #>ScoreStr sta GSTemp1+1 lda #0 sta GSTemp2 lda #$60 sta GSTemp2+1 jsr Texte16 lda Score sta ScoreTemp lda Score+1 sta ScoreTemp+1 lda Score+2 sta ScoreTemp+2 lda Score+3 sta ScoreTemp+3 ;----------------------- ;affiche les vies affvie anop lda FirstScore beq doScore rts doScore inc FirstScore clc lda Vies and #$0f adc #$c2 ;zero (66 + $80) sta ScoreStr+2 lda Vies and #$f0 lsr a lsr a lsr a lsr a adc #$c2 ;zero (66 + $80) sta ScoreStr+1 lda #2 sta ScoreStr ldx #2 ldy #9 lda #ScoreStr sta GSTemp1 lda #>ScoreStr sta GSTemp1+1 lda #0 sta GSTemp2 lda #$60 sta GSTemp2+1 jsr Texte16 ;----------------------- ;affiche les blasons lda Level sta Temp ldx #0 Blason50 anop lda Temp cmp #50 blt Blason10 sec sbc #50 sta Temp inx lda #204 ;blason 50 sta ScoreStr,x jmp Blason50 Blason10 anop lda Temp cmp #10 blt Blason5 sec sbc #10 sta Temp inx lda #205 ;blason 10 sta ScoreStr,x jmp Blason10 Blason5 anop lda Temp cmp #5 blt Blason1 sec sbc #5 sta Temp inx lda #206 ;blason 5 sta ScoreStr,x jmp Blason5 Blason1 anop lda Temp beq Blason0 sec sbc #1 sta Temp inx lda #207 ;blason 1 sta ScoreStr,x jmp Blason1 Blason0 anop stx ScoreStr ldx #10 ldy #26 lda #ScoreStr sta GSTemp1 lda #>ScoreStr sta GSTemp1+1 lda #0 sta GSTemp2 lda #$60 sta GSTemp2+1 jsr Texte16 rts ;--------------------------------------------------------------------- Inc50 anop lda <$50 clc adc #1 bcs Inc51 sta <$50 rts Inc51 anop sta <$50 inc <$51 rts ;--------------------------------------------------------------------- Inc52 anop lda <$52 clc adc #1 bcs Inc53 sta <$52 rts Inc53 anop sta <$52 inc <$53 rts ;--------------------------------------------------------------------- InitLevel anop lda #Menu ;ptr string sta GSTemp1 lda #>Menu sta GSTemp1+1 lda #0 ;taille a lire sta GSTemp2 lda #$20 sta GSTemp2+1 lda #0 ;buffer mem sta GSTemp3 lda #$40 sta GSTemp3+1 jsr LoadFile lda #$ff sta ScoreTemp lda Player bne ILpl2 lda Score1 sta Score lda Score1+1 sta Score+1 lda Score1+2 sta Score+2 lda Score1+3 sta Score+3 lda Vies1 sta Vies lda ELife1 sta ELife lda Level1 sta Level ldx #0 ILpl1Loop anop lda Diams1,x sta Diams,x inx cpx #20 bne ILpl1Loop ldx #12 ldy #96 lda #phplayer1 sta GSTemp1 lda #>phplayer1 sta GSTemp1+1 lda #0 sta GSTemp2 lda #$60 sta GSTemp2+1 jsr Texte16 jmp IL2 ILPl2 anop lda Score2 sta Score lda Score2+1 sta Score+1 lda Score2+2 sta Score+2 lda Score2+3 sta Score+3 lda Vies2 sta Vies lda ELife2 sta ELife lda Level2 sta Level ldx #0 ILpl2Loop anop lda Diams2,x sta Diams,x inx cpx #20 bne ILpl2Loop ldx #12 ldy #96 lda #phplayer2 sta GSTemp1 lda #>phplayer2 sta GSTemp1+1 lda #0 sta GSTemp2 lda #$60 sta GSTemp2+1 jsr Texte16 IL2 anop ldx #13 ldy #115 lda #phready sta GSTemp1 lda #>phready sta GSTemp1+1 lda #0 sta GSTemp2 lda #$60 sta GSTemp2+1 jsr Texte16 ldx #0 lda Level IL3Loop anop sec sbc #5 bcc IL4 inx inx cpx #20 bne IL3Loop ldx #0 jmp IL3Loop IL4 anop lda LoadTable,x ;ptr string sta GSTemp1 lda LoadTable+1,x sta GSTemp1+1 lda #0 ;taille a lire sta GSTemp2 lda #$20 sta GSTemp2+1 lda #0 ;buffer mem sta GSTemp3 lda #$20 ;hgr1 sta GSTemp3+1 jsr LoadFile jsr WaitUser rts ;--------------------------------------------------------------------- Nettoyage anop ldx #0 txa NettoyLoop anop sta Tableau,x sta Tableau2,x inx cpx #9*20 bne NettoyLoop ldx #0 lda #2 NettoyLoop2 anop sta Tableau+(8*20),x inx cpx #20 bne NettoyLoop2 rts ;--------------------------------------------------------------------- ForceAff anop ldx #0 txa ForceALoop anop sta Tableau2,x inx cpx #10*20 bne ForceALoop rts ;--------------------------------------------------------------------- ClrDiams anop lda #5 ldx #0 ClrDiamsLoop anop sta Diams,x inx cpx #20*3 ;diams + diams1 + diams2 bne ClrDiamsLoop rts ;--------------------------------------------------------------------- Presentation anop lda #Convers ;ptr string sta GSTemp1 lda #>Convers sta GSTemp1+1 lda #0 ;taille a lire sta GSTemp2 lda #$20 sta GSTemp2+1 lda #0 ;buffer mem sta GSTemp3 lda #$40 sta GSTemp3+1 jsr LoadFile jsr WaitUser lda #Presents ;ptr string sta GSTemp1 lda #>Presents sta GSTemp1+1 lda #0 ;taille a lire sta GSTemp2 lda #$20 sta GSTemp2+1 lda #0 ;buffer mem sta GSTemp3 lda #$40 sta GSTemp3+1 jsr LoadFile jsr WaitUser lda #1 ;Hgr2 jsr ClearHGR lda #Menu ;ptr string sta GSTemp1 lda #>Menu sta GSTemp1+1 lda #0 ;taille a lire sta GSTemp2 lda #$20 sta GSTemp2+1 lda #0 ;buffer mem sta GSTemp3 lda #$40 sta GSTemp3+1 jsr LoadFile jsr ChoixnbPlayer jsr ChoixLevel jsr ChoixMouseJoy jsr ChoixTictac PrepWait anop jsr WaitUser cmp #'1' bne PW2 lda nbPlayer eor #1 sta nbPlayer jsr ChoixNbPlayer jmp PrepWait PW2 anop cmp #'2' bne PW3 lda Level1x eor #1 sta Level1x jsr ChoixLevel jmp PrepWait PW3 anop cmp #'3' bne PW4 lda vmousejoy eor #1 sta vmousejoy jsr ChoixMouseJoy jmp PrepWait PW4 anop cmp #'4' bne PW5 lda vtictac eor #1 sta vtictac jsr ChoixTictac jmp PrepWait PW5 anop cmp #27 bne PW6 sec rts PW6 anop cmp #0 beq okPW7 cmp #' ' beq okPW7 cmp #13 bne PW7 okPW7 anop lda #1 ;hgr2 jsr ClearHGR clc rts PW7 anop jmp PrepWait ;--------------------------------------------------------------------- ChoixMouseJoy anop lda vmousejoy bne CMJ2 ldx #8 ldy #108 lda #phmouse sta GSTemp1 lda #>phmouse sta GSTemp1+1 lda #0 sta GSTemp2 lda #$60 sta GSTemp2+1 jsr Texte16 rts CMJ2 anop ldx #8 ldy #108 lda #phjoy sta GSTemp1 lda #>phjoy sta GSTemp1+1 lda #0 sta GSTemp2 lda #$60 sta GSTemp2+1 jsr Texte16 rts ;--------------------------------------------------------------------- ChoixLevel anop lda Level1x bne CLV2 ldx #8 ldy #91 lda #phleveleasy sta GSTemp1 lda #>phleveleasy sta GSTemp1+1 lda #0 sta GSTemp2 lda #$60 sta GSTemp2+1 jsr Texte16 lda #1 sta Level1 sta Level2 rts CLV2 anop ldx #8 ldy #91 lda #phlevelhard sta GSTemp1 lda #>phlevelhard sta GSTemp1+1 lda #0 sta GSTemp2 lda #$60 sta GSTemp2+1 jsr Texte16 lda #50 sta Level1 sta Level2 rts ;--------------------------------------------------------------------- ChoixnbPlayer anop lda nbPlayer bne CNP2 ldx #30 ldy #75 lda #phclear sta GSTemp1 lda #>phclear sta GSTemp1+1 lda #0 sta GSTemp2 lda #$60 sta GSTemp2+1 jsr Texte16 ldx #8 ldy #75 lda #phplay1 sta GSTemp1 lda #>phplay1 sta GSTemp1+1 lda #0 sta GSTemp2 lda #$60 sta GSTemp2+1 jsr Texte16 rts CNP2 anop ldx #8 ldy #75 lda #phplay2 sta GSTemp1 lda #>phplay2 sta GSTemp1+1 lda #0 sta GSTemp2 lda #$60 sta GSTemp2+1 jsr Texte16 rts ;--------------------------------------------------------------------- ChoixTictac anop lda vTictac bne CTT2 ldx #30 ldy #126 lda #phclear sta GSTemp1 lda #>phclear sta GSTemp1+1 lda #0 sta GSTemp2 lda #$60 sta GSTemp2+1 jsr Texte16 ldx #8 ldy #126 lda #phtictac1 sta GSTemp1 lda #>phtictac1 sta GSTemp1+1 lda #0 sta GSTemp2 lda #$60 sta GSTemp2+1 jsr Texte16 rts CTT2 anop ldx #8 ldy #126 lda #phtictac2 sta GSTemp1 lda #>phtictac2 sta GSTemp1+1 lda #0 sta GSTemp2 lda #$60 sta GSTemp2+1 jsr Texte16 rts KeyUp str 'I i' KeyLeft str 'J j' KeyRight str 'L l' KeyDown str 'K k' KeyPick str 'PICK: Space' KeyFall str 'FALL: Return' HiVert ds 1 CalibKey dc i1'1' NeedSave ds 1 nbPlayer ds 1 vtictac ds 1 vmousejoy ds 1 Etalon ds 1 OkClic ds 1 Curs1 ds 1 XSour ds 1 YSour ds 1 Level1x ds 1 Level ds 1 Level1 ds 1 Level2 ds 1 Vies ds 1 Vies1 ds 1 Vies2 ds 1 ELife ds 1 ELife1 ds 1 ELife2 ds 1 ScoreTemp ds 4 Score ds 4 Score1 ds 4 Score2 ds 4 Player ds 1 FirstScore ds 1 Time ds 2 Multi ds 1 PileSize ds 1 Show ds 1 vexplo ds 1 nbBalls ds 1 Reussit ds 1 AffNumber ds 1 TicSide ds 1 Minimum ds 1 Difficulte ds 1 vpoum ds 1 doFall ds 1 JoyX dc i1'128' JoyY dc i1'128' AffSpeed dc i1'40' StackPtr ds 1 ScoreStr ds 20 ShapesLineY dc i1'42,47,52,57,62,67,72,77,82,87,92,97' dc i1'102,107,112,117,122,127,132,137,142,147,152,157' ShapesLineY2 dc i1'42,42,42,57,57,57,72,72,72,87,87,87' dc i1'102,102,102,117,117,117,132,132,132,147,147,147' ShapeTableY dc i1'0,0,0,20,20,20,40,40,40,60,60,60' dc i1'80,80,80,100,100,100,120,120,120,140,140,140' Tableau0 anop ds 20 Tableau ds 20*9 Diams ds 20 Diams1 ds 20 Diams2 ds 20 Tableau20 anop ds 20 Tableau2 ds 20*9 DiamsTbl2 ds 20 HexDec dc h'00010203040506070809101112131415161718192021222324' dc h'25262728293031323334353637383940414243444546474849' dc h'50515253545556575859606162636465666768697071727374' dc h'75767778798081828384858687888990919293949596979899' phclear str ' ' phplay1 str '1. 1 PLAYER' phplay2 str '1. 2 PLAYERS' phlevelhard str '2. LEVEL HARD' phleveleasy str '2. LEVEL EASY' phjoy str '3. KEYBOARD' phmouse str '3. JOYSTICK' 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 !' name1 str ']]]]]]]]]]' name2 str ']]]]]]]]]]' ready str 'READY !' phnumber1 str 'RANK :' phlevel1 str 'LEVEL :' phname1 str 'NAME :' phscore str 'SCORE :' phhi str 'BEST SCORES' phpause str 'PAUSE' ProDOSstr1 str 'PRODOS ERROR!' ProDOSstr2 str 'Press a key' SaveHS str 'HiScores not saved.' ErrStr dc i1'7' dc c'Err #' Err2Str ds 2 CalibStr1 str 'ADJUST JOY & KEYS' CalibStr2 str 'Press "ESC" to continue' WrongCode str 'WRONG CODE...press any key to quit !' PassText str 'Enter password for...' PassLine str 'Line: ' PassRow str 'Row : ' CodeX ds 1 CodeY ds 1 *************************************** Serie dc c'.mgb.' *************************************** Temp ds 2 Temp1 ds 2 Temp2 ds 2 Temp3 ds 2 Temp4 ds 4 *************************************** MSB ON LoadTable anop dc i2'Motif1' dc i2'Motif2' dc i2'Motif3' dc i2'Motif4' dc i2'Motif5' dc i2'Motif6' dc i2'Motif7' dc i2'Motif8' dc i2'Motif9' dc i2'Motif10' Motif1 str 'PNP.Datas/Ball8' Motif2 str 'PNP.Datas/Ball2' Motif3 str 'PNP.Datas/Ball3.5.9' Motif4 str 'PNP.Datas/Ball4' Motif5 str 'PNP.Datas/Ball3.5.9' Motif6 str 'PNP.Datas/Ball6' Motif7 str 'PNP.Datas/Ball1.7' Motif8 str 'PNP.Datas/Ball1.7' Motif9 str 'PNP.Datas/Ball3.5.9' Motif10 str 'PNP.Datas/Ball10' Presents str 'PNP.Datas/Present2' Menu str 'PNP.Datas/Menu1' Car str 'PNP.Datas/Car' Convers str 'PNP.Datas/Convers' Calib str 'PNP.Datas/Calib' vbestFile str 'PNP.Datas/HiScores' OpenHS anop dc i1'3' dc i2'vbestfile' dc i2'IOBuffer' RefNumHS ds 1 WriteHS anop dc i1'4' ds 1 dc i2'vbest' dc i2'96' ds 2 CloseHS anop dc i1'1' ds 1 MSB OFF **************************************** CursorPict anop dc b'00000000 00000000' dc b'00011000 00000000' dc b'01111000 00000000' dc b'01111000 00000011' dc b'01111000 00001111' dc b'01111000 00000001' dc b'00011000 00000011' dc b'00000000 00000110' dc b'00000000 00000000' CursorMask anop dc b'11100111 11111111' dc b'10000001 11111111' dc b'10000001 11111100' dc b'10000001 11110000' dc b'10000001 11000000' dc b'10000001 11100000' dc b'10000001 11110000' dc b'10100111 11100000' dc b'11111111 11111001' CursorPict2 anop dc b'01111111 01111111' dc b'01111111 01111111' dc b'00000111 01110000' dc b'00000111 01110000' dc b'00000111 01110000' dc b'00000111 01110000' dc b'00000111 01110000' dc b'00000111 01110000' dc b'00000111 01110000' dc b'00000111 01110000' dc b'00000111 01110000' dc b'00000111 01110000' dc b'00000111 01110000' dc b'01111111 01111111' dc b'01111111 01111111' CursorMask2 anop dc b'10000000 10000000' dc b'10000000 10000000' dc b'11110000 10000111' dc b'11110000 10000111' dc b'11110000 10000111' dc b'11110000 10000111' dc b'11110000 10000111' dc b'11110000 10000111' dc b'11110000 10000111' dc b'11110000 10000111' dc b'11110000 10000111' dc b'11110000 10000111' dc b'11110000 10000111' dc b'10000000 10000000' dc b'10000000 10000000' copy Datas.Src copy GameSys.Src END \ No newline at end of file diff --git a/picknpile/SOURCES.IIE/MC.SRC b/picknpile/SOURCES.IIE/MC.SRC new file mode 100644 index 0000000..9faa703 --- /dev/null +++ b/picknpile/SOURCES.IIE/MC.SRC @@ -0,0 +1 @@ +macgen mainIIe.src PNP.Macros PNP.Macros \ No newline at end of file diff --git a/picknpile/SOURCES.IIE/PNP.MACROS b/picknpile/SOURCES.IIE/PNP.MACROS new file mode 100644 index 0000000..d87a6f5 --- /dev/null +++ b/picknpile/SOURCES.IIE/PNP.MACROS @@ -0,0 +1 @@ + MACRO &lab str &string &lab dc i1'L:&string',C'&string' MEND \ No newline at end of file diff --git a/picknpile/SOURCES.IIE/VBEST.SRC b/picknpile/SOURCES.IIE/VBEST.SRC new file mode 100644 index 0000000..1c40bf1 --- /dev/null +++ b/picknpile/SOURCES.IIE/VBEST.SRC @@ -0,0 +1 @@ + list off gen off msb off symbol off 65816 off 65c02 off keep HiScores mcopy PnP.Macros HiScore START dc h'10' str 'NICOLAS ' dc h'00000100' dc h'08' str 'MICHEL ' dc h'00700000' dc h'06' str 'VERONIQUE ' dc h'00500000' dc h'04' str 'SYLVIE ' dc h'00200000' dc h'02' str 'SERGE ' dc h'00100000' ds 16 MSB OFF dc c'WU0HI78VEAO4HKE53LVI6RY73C5UMU5862K2958TXOTU10T6ME' dc c'DYQODPYCRL4A9OEB4L43MUW0L4CQC1NV74XRKEB1T9W38U9I4V' dc c'IR1RC0IMJ536GJDNXFWEESIT3IUV8193EQK1YFYHXERPIGC0GV' dc c'TPO0GRNY9CD8LBX75YQSWYY4GQ8JVFDHPGUWJQCGDW0GS02KP2' dc c'TLAV2RJL7NP8JVEM121YP30J5SJT89BNY1ALPKY2VDSNOATLAU' dc c'1U45AX5AT01CLKO72HF4I9IW46KL4DJPHGWT16W903D40BWRXJ' dc c'TX893N9POMSAMNP7CDPXNFM6T6DIJ1D5XAEVJA2X5SXL7G0NBE' dc c'RJVOJCCXJNDLVXF60MVX2L3FC2MSYW76CEV159F7HNP3TD2NE9' dc c'YDQ779V9XHTJ6OYCE8C6NO12RJK8P1NPNMHXS2UKEC1E6UWLF7' dc c'6TDN5X8HE2Q5DQ57KCDH9LBJYX5LT233814169N0KHB1S1Q5FI' dc c'YUY66NARJRRD1PFU3J3TRM1NDNHIFK82W82882Y6BBJ4TIA4Y8' dc c'KUT4USI751XT2DLSUFK2SAUNDICCG98YT2RVKCJKCVRO5NW3XF' dc c'46DQVD5S7DCYHQRXT0HC59WBPH8U4NMPKCU77ARN62CT4PS304' dc c'8EB0O73PQU8YC3JILHF05EELPTTIKL9IRLAOAHJ30CNAC3RGH3' dc c'XVDYPFRQ124PFVQM0PVLESMC4XKXJFV5B92JTO3VNES29721O2' dc c'SD6RSQY0352UE8TY13UBOA9Y4QPSR2KMNTXAC9H5L33YD8TDSP' dc c'XOS1BB7XM0953XKTBIHCEFY3PFX3TYDFTRD35XLXG3FIIWTTGN' dc c'L6H3NFLMXTVQFCD8T66RWY7RL6QQBD9F294PV2NF80NG2HHV4F' dc c'B0GTAQYQGH91F6D1CR99R65WHKSCGH3HV37L4PHUDXFG3TNT4L' dc c'Y2PO9DACDXDRA8FUR7LQ5J4OAAC0JAFF1LSW7VGOPDA00GORRB' dc c'NXXLE7UMLN3D0OVOXWN4QKEGXO52RK67FI6OX4DYV2T5XG3VI8' dc c'Y3SU37SFUA9ESND5YCJLRN945C0S065D0W41LHULN7DQNG0RB5' dc c'84BDRQIJ7DR5SKPW8X8VTDQNC276DPM4UNBLDIHS07MSDN836P' dc c'0XB3H8ASWUIRKPJOW5AUKFRXTXM5FNH71XIUMY6I49UCSX9XM0' dc c'W62A5BS2HS8TXE8B8K71U6LB12O3O1GIPSS1SIF3ASR38845VT' dc c'LWUK8HHGFDS6AHWJTTRK029QKPP4ANVDA8OSBWHWIYCHXP1BBE' dc c'ARSXBAVYWC6R64A0HDD7Y14QRKJLDT13WGFIE4CI4FAMDP0WLV' dc c'TUIQHNTP5KD82FFM02L8UHKMPWOTCE5IIV0RLIHXROC293ANJL' dc c'M1M4S5QSOTPQ5FN9D97HEJ4IT8Y3P7V755DMIHN7T3JQP36CS5' dc c'360YDNDTC8496C17P16KKC4PPPFI0592U1QJ9FVCNQR2F3BN2A' dc c'NY1SMUJSWYYW9WIIS6N2P7QNYJES3D10VLORSWP2SBE0UYQP08' dc c'OUN0WEURBEHI2ECO11VPWKP6YV9PNIOHIFJL2VHC9RHU0A38NU' dc c'R887PGOFMU4A18YXVJWAN7H4KOULIBPM92L37QALS8OI6V8SX2' dc c'5AWGWFIFEKQG6T8AHBQWFDHNVK4V9AVC5Q0YE6FDUWGHLIJ6ON' dc c'K82B6QDQHHTGXP58HPUDRWWHPM88J9CHFO8L7HI48WVXPEQLT6' dc c'EWSQHOT3UERBC6JBVNS7D5E1GCM39QP46AK4NLWC4OAM74DNBE' dc c'I5U207SVSDVO2IQO1U1Q3QPNTN0IAFC1UUILQ10F6XHCUU3RXF' dc c'C0K47YI72F3WFQVKKWD1UQNA0LSW00UBAWE9XTXVAP7HRVGSFL' dc c'D4IXI4HI7SJJM7LCQ4QTXVCKPCPJGDSXWDG00EXJ0WG9MY4MCL' dc c'RJKTOUG3JVBPW3GB9W9OT28WUIHP2KUQPRI7AGTBI18R1EY00N' dc c'T6WPPHYT8RPJJO01XE67VX6QHNQB1BUWA98YA31QNHRFJA8FAD' dc c'WSIIUOU6RT9QSJN6GFO5OLEX44I28V9RMPE5LIJEB438VRG9K4' dc c'DG90BPGUT0UY9CLUH8FGB610GFQTYS38204RFLBYYV4B86OQ3C' dc c'19HUVVRY24B6XG5059453TOX694JRQB7J86SW7FVTTUMJ08QCN' dc c'MF439D3ASJT81WHOSOVM7VK9486X29K8RLAH1Q5S67BJ4UKEOC' dc c'VOWSE036M36IT8PV7SUQI7CUJT62UO4OC8H3S266YCM8Q75BEO' dc c'2XV5F8AR1SIOI5W4NHSVE2W3R35I2RQ2CRIUF97T55YXEK39GD' dc c'OMSBHWBHBSOVSESVISGRNEMGPAGETLBGQ9MPRXXKROTYVR573N' dc c'9BJBHGC306JTA9WIAV1MJF4SF5DYNQUORQAIPB0V4OSHLOPDKS' dc c'R1WIDBXQLIRCJ6AVP852MT8OV380TNLKCQBC8PCJFDM6QBTGTO' dc c'M1EN9FE5H1WE56V4K3KUR4338432M8XJYD79L5AW92948G4CC6' dc c'DIXLN00CH3FW61O0G1K3DY20D13HT3V8NK8G6E2FXK576WGNBD' dc c'JVKOLBHBEXQK014LD7TY2JQUYWDGLF44SV9WSLQWLWR8V2M4RO' dc c'4FLS86MFNA50QS2WPUXW125RB0CWQE4EJIY2L77CFC88G5IWT8' dc c'WQQR1Q6TP376WXQP52UDMG7AV82DNTAUQSO2KX2HRJ8SRCGWUW' dc c'WOOQ7LT085XSVUWIB1C4WOCKCPD537MOPIRX9OR55HU0SKJE3V' dc c'B7WIBXDW5OSD6Y1R2VF79HP4HRHE9QFX2FN1HYEPUTGK89GB5X' dc c'K2GRCJFU6G6HJ385GGKTM8W28467OT2E3YQLX5IJ54YOIBE4TY' dc c'IIPVIYKAEI3I6LQE6ELX073IVERQJUNFYY7UBY99AR17AEQ4AG' dc c'AY4QOIDL6B2L1D7FHM5EK9P6DSN288JKNY2JPAI1JS1AWOIBJM' END \ No newline at end of file diff --git a/picknpile/SOURCES.IIGS/.DS_Store b/picknpile/SOURCES.IIGS/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 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 E0&%1&>i_@% literal 0 HcmV?d00001 diff --git a/picknpile/SOURCES.IIGS/EX.SRC b/picknpile/SOURCES.IIGS/EX.SRC new file mode 100644 index 0000000..10f12e9 --- /dev/null +++ b/picknpile/SOURCES.IIGS/EX.SRC @@ -0,0 +1 @@ +asml Main.src filetype Shell S16 \ No newline at end of file diff --git a/picknpile/SOURCES.IIGS/GAME.SRC b/picknpile/SOURCES.IIGS/GAME.SRC new file mode 100644 index 0000000000000000000000000000000000000000..a99cc75136823debab29fc8ffe3bcc7db56c08c3 GIT binary patch literal 63341 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 ZZv66l^ws$5@8Mhg-S{WpWze$bbnnnn,x sta Nb16doCopy,x lda Temp2+1 ; bb sta Nb16doCopy+2,x lda Temp2 ; nnnn clc adc Temp sta Nb16doCopy+1,x inx inx inx inx lda #$99 ; STA nnnn,y sta Nb16doCopy,x lda #$2000 ; nnnn clc adc Temp sta Nb16doCopy+1,x inx inx inx inc Temp inc Temp iny cpy #4 bne Nb16CopyLoop ldy #0 lda Temp clc adc #160-8 sta Temp cmp #2560 bne Nb16CopyLoop rts ;-------------------------- ;init de 'Sound' SoundInit anop sei sep #$20 longa off lda >$e100ca ;acces aux registres and #$0f sta >$e0c03c lda #$e1 ;registre $e1 sta >$e0c03e ;SoundAdrL lda #$40 ;32 oscillateurs * 2 sta >$e0c03d ;SoundData rep #$30 longa on cli rts ************************************************************************ PaintRect anop ;GSTemp1 = coor. x anop ;GSTemp1+2= coor. y anop ;GSTemp2 = dep relatif x anop ;GSTemp2+2= dep relatif y anop ;GSTemp3 = couleur lda GSTemp2 lsr a ;un octect = 2 pts sta GSTemp2 lda GSTemp1 lsr a ;un octect = 2 pts ldy GSTemp1+2 PRLoop anop cpy #0 beq PR2 dey clc adc #160 bra PRLoop PR2 anop clc adc #$2000 sta PR4+1 ldx #0 txy PR3 anop lda GSTemp3 PR4 sta >$e12000,x inx inx cpx GSTemp2 blt PR3 lda PR4+1 clc adc #160 sta PR4+1 ldx #0 iny cpy GSTemp2+2 blt PR3 rts ************************************************************************ ErrTexte8 anop ;a= C string ptr anop ;x= position x anop ;y= position y stz GSTemp1 ;Invert ($1e) stz GSTemp2 ;Underline ($1f) pha txa clc lsr a ErrT8L1 anop ;calcul de l'offset ecran cpy #0 beq ErrT8L2 clc adc #160 dey bra ErrT8L1 ErrT8L2 anop sta GSTemp3 ;offset sta GSTemp4 phd tsc tcd ldy #0 ErrT8L3 anop lda (3),y and #$ff cmp #0 beq ErrT8L4 phy jsr ErrT8Aff ply iny bra ErrT8L3 ErrT8L4 anop pld pla rts ErrT8Aff anop cmp #$20 bge ErrT8Aff0 brl ErrT8Spe ErrT8Aff0 anop sec sbc #$20 ;premier caractere est 'espace' stz GSTemp5 ErrT8Aff1 anop sec sbc #40 ;40 caracteres par lignes bcc ErrT8Aff2 pha lda GSTemp5 clc adc #8*160 ;ligne suivante sta GSTemp5 pla bra ErrT8Aff1 ErrT8Aff2 anop adc #40 ;40 caracteres par lignes asl a asl a ;4 octets de large par caractere clc adc GSTemp5 tay ;offset source ldx GSTemp3 lda #0 ErrT8Aff3 anop pha lda ErrFont8,y eor GSTemp1 sta >$e12000,x lda ErrFont8+2,y eor GSTemp1 sta >$e12000+2,x tya clc adc #160 tay txa clc adc #160 tax pla inc a cmp #8 bne ErrT8Aff3 lda GSTemp2 beq ErrT8Aff4 ;souligner ? lda GSTemp3 clc adc #7*160 lda GSTemp1 eor #$ffff sta >$e12000,x sta >$e12000+2,x ErrT8Aff4 anop lda GSTemp3 clc adc #4 sta GSTemp3 rts ErrT8Spe anop cmp #$08 ;fleche gauche beq ErrT8Left cmp #$09 ;tab beq ErrT8Tab cmp #$0a ;fleche bas beq ErrT8Down cmp #$0b ;fleche haut beq ErrT8Up cmp #$0d ;return beq ErrT8CR cmp #$15 ;fleche droite beq ErrT8Right cmp #$1f ;toggle underline beq ErrT8Under cmp #$1e ;toggle invert beq ErrT8Invert rts ErrT8Left anop lda GSTemp3 sec sbc #4 sta GSTemp3 rts ErrT8Tab anop lda GSTemp3 clc adc #40 ;+10 caracteres sta GSTemp3 rts ErrT8Down anop lda GSTemp3 clc adc #8*160 sta GSTemp3 rts ErrT8Up anop lda GSTemp3 sec sbc #8*160 sta GSTemp3 rts ErrT8CR anop lda GSTemp4 clc adc #8*160 sta GSTemp3 sta GSTemp4 rts ErrT8Right anop lda GSTemp3 clc adc #4 sta GSTemp3 rts ErrT8Under anop lda GSTemp2 eor #$8000 sta GSTemp2 rts ErrT8Invert anop lda GSTemp1 eor #$ffff sta GSTemp1 rts copy GSFont.Src ************************************************************************ TransTSB16 anop ;GSTemp1= adresse dest PushLong GSTemp1 phd tsc tcd stz GSTemp2 stz GSTemp3 ldx #0 ldy #0 TSBRoutLoop anop lda #$04 ;TSB nn sta [3],y iny lda GSTemp3 ;nn inc GSTemp3 inc GSTemp3 sta [3],y iny NextTSB anop lda GSTemp3 cmp #166 ;Ligne + nb oct/ligne beq NextT1 cmp #6 ;nb octets/ligne bne NextT2 lda GSTemp3 clc adc #160-6 ;Ligne - nb oct/ligne sta GSTemp3 bra NextT2 NextT1 anop stz GSTemp3 lda #$7b ;TDC sta [3],y iny lda #$69 ;ADC #nnnn sta [3],y iny lda #320 ;nnnn A 2 Lignes sta [3],y iny iny lda #$5b ;TCD sta [3],y iny lda #$98 ;TYA sta [3],y iny NextT2 anop inx inx cpx #66 ;Nb octetsA 6octets*11lignes bne TSBRoutLoop RoutLoop2 lda #$6b ;RTL sta [3],y iny pld pla pla rts ************************************************************************ Linear16 anop ;GSTemp1= adresse source anop ;GSTemp2= adresse dest PushLong GSTemp1 PushLong GSTemp2 phd tsc tcd ldy #0 ldx #0 Linear16Loop anop lda [7],y phy txy sta [3],y ply iny iny inx inx lda [7],y phy txy sta [3],y ply iny iny inx inx lda [7],y phy txy sta [3],y ply iny iny inx inx lda [7],y phy txy sta [3],y ply inx inx tya clc adc #160-6 ;16 points par ligne tay cpx #16*8 ;16 lignes * 8 octets blt Linear16Loop pld pla pla pla pla rts ************************************************************************ ZPBank anop ;a=0/1 zp-s bank $0/1 plx cmp #0 beq ZPBank0 tsc sta ZPBankStack sep #$30 longa off lda >$e0C068 sta ZPBankStat ora #$34 sta >$e0C068 rep #$30 longa on lda #$9df0 tcs ;fixe la stack apres les SCBs phx rts ZPBank0 anop longa off sep #$30 lda ZPBankStat sta >$e0C068 rep #$30 longa on lda ZPBankStack tcs phx rts ZPBankStat ds 1 ZPBankStack ds 2 ************************************************************************ CursorCSet16 anop ;a= adresse data curseur (16*16) anop ;y=$0101/$e1e1 bank dest anop ;x= adresse memoire destination sty GSTemp5 sta CursorRoutLoop+1 phx phd tsc tcd jsr CursorLoop0 pld pla rts CursorLoop0 anop ldy #0 ldx #0 stz GSTemp4 stz GSTemp3 stz GSTemp1 lda #$8b ;PHB sta (3),y iny lda #$a9 ; LDA #nnnn sta (3),y iny lda GSTemp5 ;nnnn sta (3),y iny iny lda #$48 ;PHA sta (3),y iny lda #$ab ;PLB sta (3),y iny lda #$ab ;PLB sta (3),y iny CursorRoutLoop lda NextWord2,x sta GSTemp2 jsr TestTrans bcs doTrans20 bra doCopy2 NextWord2 anop inc GSTemp1 lda GSTemp1 cmp #4 ;Nb word/ligne bne CursorNW2 stz GSTemp1 lda GSTemp3 clc adc #152 ;160 - 8 (nb oct/ligne) sta GSTemp3 CursorNW2 anop inx inx cpx #128 ;Nb octetsA 8octets*16lignes bne CursorRoutLoop brl TransLoop22 doCopy2 anop lda GSTemp2 cmp GSTemp4 beq SameSTY2 lda #$a9 ;LDA #nnnn sta (3),y iny lda GSTemp2 ;nnnn sta (3),y iny iny sta GSTemp4 SameSTY2 anop lda #$9d ;STA nnnn,x sta (3),y iny lda GSTemp3 inc GSTemp3 inc GSTemp3 sta (3),y ;nnnn iny iny brl NextWord2 doTrans20 anop phx stz GSTemp4 lda #$000f tax and GSTemp2 jsr ModTemp4 lda #$00f0 tax and GSTemp2 jsr ModTemp4 lda #$0f00 tax and GSTemp2 jsr ModTemp4 lda #$f000 tax and GSTemp2 jsr ModTemp4 lda GSTemp4 bne doTrans22 inc GSTemp3 inc GSTemp3 plx brl NextWord2 doTrans22 anop lda #$bd ;LDA nnnn,x sta (3),y iny lda GSTemp3 sta (3),y iny iny lda #$29 ;AND #nnnn sta (3),y iny lda GSTemp4 ;nnnn eor #$ffff sta (3),y iny iny lda #$09 ;ORA #nnnn sta (3),y iny lda GSTemp2 ;nnnn sta (3),y iny iny lda #$9d ;STA nnnn,x sta (3),y iny lda GSTemp3 ;nnnn inc GSTemp3 inc GSTemp3 sta (3),y iny iny stz GSTemp4 plx brl NextWord2 TransLoop22 anop lda #$ab ;PLB sta (3),y iny lda #$6b ;RTL sta (3),y iny rts ModTemp4 anop cmp #0 beq MT4End txa ora GSTemp4 sta GSTemp4 MT4End rts TestTrans anop and #$000f beq TransOk lda GSTemp2 and #$00f0 beq TransOk lda GSTemp2 and #$0f00 beq TransOk lda GSTemp2 and #$f000 beq TransOk clc rts TransOk sec rts ************************************************************************ WaitUser anop ;--> a= caractere tape anop ; 0 si clic ou fire sep #$30 longa off longi off lda #0 lda >$e0c024 sta >$e0c010 ;echantillonne clavier WULoop anop rep #$30 longa on longi on lda #150 jsr WaitSpot jsr WaitVBL longa off longi off sep #$30 lda >$e0C000 ;teste touche bmi WUDone1 lda >$e0C061 ;teste fire 0 bmi WUDone lda >$e0C062 ;teste fire 1 bmi WUDone lda >$e0C027 ;teste clic souris bpl WULoop and #%00000010 bne WULoop2 lda >$e0C024 lda >$e0C024 bmi WULoop bra WUDone WULoop2 anop lda >$e0C024 bra WULoop WUDone anop lda #0 WUDone1 anop rep #$30 longa on longi on and #$7f rts *********************************************************************** Fade anop ;a=1 fade in a=0 fade out anop ;Source bank $01, dest bank $e1 cmp #0 bne FadeIn brl FadeOut FadeIn anop ldx #0 Shadow1 anop lda >$012000,x sta >$e12000,x inx inx cpx #32256 ;copie image + SCBs bne Shadow1 ldy #16 ldx #0 FadeInLoop anop lda >$019e00,x sta Temp4+2 lda >$e19e00,x sta Temp4 cmp Temp4+2 beq FILNoChange lda Temp4 and #$0f00 sta Temp lda Temp4 and #$00f0 sta Temp2 lda Temp4 and #$000f sta Temp3 lda Temp4+2 and #$0f00 cmp Temp beq FIL1 lda Temp clc adc #$0100 sta Temp FIL1 anop lda Temp4+2 and #$00f0 cmp Temp2 beq FIL2 lda Temp2 clc adc #$0010 sta Temp2 FIL2 anop lda Temp4+2 and #$000f cmp Temp3 beq FIL3 lda Temp3 clc adc #$0001 sta Temp3 FIL3 anop lda Temp ora Temp2 ora Temp3 sta >$e19e00,x FILNoChange anop dey bne FILNextVBL jsr NextVBL FILNextVBL anop inx inx cpx #64 ;fade sur 2 palettes beq FIL4 brl FadeInLoop FIL4 anop ldx #0 dey beq FIL5 brl FadeInLoop FIL5 anop rts NextVBL anop phx lda #150 jsr WaitSpot jsr WaitVBL plx ldy #16 rts FadeOut anop ldy #16 ldx #0 FadeOutLoop anop lda >$e19e00,x cmp #0 beq FOLNoChange lda >$e19e00,x and #$0f00 sta Temp lda >$e19e00,x and #$00f0 sta Temp2 lda >$e19e00,x and #$000f sta Temp3 lda Temp beq FOL1 lda Temp sec sbc #$0100 sta Temp FOL1 anop lda Temp2 beq FOL2 lda Temp2 sec sbc #$0010 sta Temp2 FOL2 anop lda Temp3 beq FOL3 lda Temp3 sec sbc #$0001 sta Temp3 FOL3 anop lda Temp ora Temp2 ora Temp3 sta >$e19e00,x FOLNoChange anop dey bne FOLNextVBL jsr NextVBL FOLNextVBL anop inx inx cpx #64 ;fade sur 2 palettes bne FadeOutLoop ldx #0 dey bne FadeOutLoop rts ************************************************************************ Decompacte anop ;Temp= handle anop ;Temp2= ptr dest PushLong Temp phd ;on dereference le handle tsc tcd ldy #0 lda [3],y sta Temp3 ldy #2 lda [3],y sta Temp3+2 pld pla pla PushLong #0 PushLong Temp _GetHandleSize ;Taille du handle ? PullLong Temp4 lda #32768 sta UnPackAreaSz PushWord #0 PushLong Temp3 PushWord Temp4 PushLong #Temp2 PushLong #UnpackAreaSz _UnPackBytes pla rts UnPackAreaSz dc i2'32768' ************************************************************************ WaitVBL anop lda >$e0C019 and #%0000000010000000 beq WaitVBL rts ************************************************************************ Texte16 anop ;a= ptr str anop ;x= coordonnee x anop ;y= coordonnee y anop ;CarPtr= ptr image source pha txa lsr a sta Temp2 lda CarPtr sta Temp lda CarPtr+2 sta Temp+2 lda #0 MemY anop clc adc #160 dey bne MemY clc adc Temp2 sta Temp2 ;offset sur l'ecran pla sta T16length+1 inc a sta T16Read+1 T16length lda T16length and #$ff sta Temp3 bne T16NotZero rts ;si len$(str)=0 on s'en va T16NotZero anop ldx #0 T16Read lda T16Read,x and #$ff cmp #128 bge T16Aff0 sta Temp4 ldy #0 T16Trans anop lda T16Car,y and #$ff cmp Temp4 beq T16Aff iny cpy T16NbCar bne T16Trans bra T16Aff T16Aff0 anop and #$7f tay T16Aff anop phx tya ldx #0 sec T16Aff2 anop sbc #20 inx bcs T16Aff2 adc #20 asl a asl a asl a T16Aff3 anop dex cpx #0 beq T16Aff4 clc adc #16*160 bra T16Aff3 T16Aff4 anop jsr Sprite16 lda Temp2 clc adc #8 sta Temp2 plx inx cpx Temp3 bne T16Read rts T16Car dc c'ABCDEFGHIJKLMNOPQRSTUVWXYZ' dc c'.:!?#0123456789 ' T16CarEnd anop T16NbCar dc i2'T16CarEnd-T16Car' ************************************************************************ Nombre16 anop ;a= ptr str anop ;x= coordonnee x anop ;y= coordonnee y anop ;CarPtr= ptr image source pha txa lsr a sta Temp2 lda #0 Nb16MemY anop clc adc #160 dey bne Nb16MemY clc adc Temp2 sta Temp2 ;offset sur l'ecran pla sta Nb16Length+1 inc a sta Nb16Read+1 stz Temp4 Nb16Length lda Nb16Length and #$ff sta Temp3 dec Temp3 ldx #0 Nb16Read lda Nb16Read,x and #$ff cmp #32 ;espace bne Nb16a lda #48 ;chiffre 0 Nb16a anop cmp #76 bge Nb16b clc adc #66-48 ;0 dans image - 0 ascii Nb16b anop phx jsr Nb16affiche plx lda Temp4 ;espace pour caractere suivant clc adc #8 sta Temp4 inx cpx Temp3 blt Nb16Read rts Nb16Affiche anop ldx #0 sec Nb16Aff2 anop sbc #20 inx bcs Nb16Aff2 adc #20 asl a asl a asl a Nb16Aff3 anop dex cpx #0 beq Nb16Aff4 clc adc #16*160 bra Nb16Aff3 Nb16Aff4 anop tax lda Temp2 ;offset ecran source clc adc Temp4 tay ;offset ecran dest Nb16Copy anop ;routine de copie des objets lda #$0101 pha plb plb Nb16doCopy ds 4*(4+3)*16 phk plb rts ************************************************************************ HexStr anop ;Temp= valeur 32 bits anop ;Temp2= ptr de string anop ;a= nb caractere de la str ldx Temp2 sta Temp3 inc Temp3 inx stx HexSClr+1 tax lda #48 ;chiffre 0 en ascii HexSClr sta HexSClr,x dex bne HexSClr PushLong Temp PushLong Temp2 PushWord Temp3 PushWord #0 _Long2Dec lda ScoreStr and #$ff00 ora Temp3 sta ScoreStr rts ************************************************************************ Sprite16 anop ;Temp= ptr image source anop ;Temp2= offset ecran dest anop ;a= offset ecran source ldx Temp+1 stx Sp16Read+2 clc adc Temp sta Sp16Read+1 lda #$2000 clc adc Temp2 sta SP16Write+1 sep #$20 longa off lda #$e1 ;page video pha plb ldx #0 txy Sp16Read lda >Sp16Read,x beq Sp16Next Sp16Write sta Sp16Write,x Sp16Next inx iny cpy #8 bne Sp16Read ldy #0 rep #$30 longa on txa clc adc #160-8 tax sep #$20 longa off cpx #16*160 bne Sp16Read rep #$30 longa on phk plb rts ************************************************************************ CopyZone anop ;Temp = coor. x anop ;Temp+2 = coor. y anop ;Temp2 = dep relatif x anop ;Temp2+2= dep relatif y lda Temp2 lsr a ;un octect = 2 pts sta Temp2 lda Temp lsr a ;un octect = 2 pts ldy Temp+2 CZLoop anop cpy #0 beq CZ2 dey clc adc #160 bra CZLoop CZ2 anop clc adc #$2000 sta CZ3+1 sta CZ4+1 ldx #0 txy CZ3 lda >$012000,x CZ4 sta >$e12000,x inx inx cpx Temp2 blt CZ3 lda CZ3+1 clc adc #160 sta CZ3+1 sta CZ4+1 ldx #0 iny cpy Temp2+2 blt CZ3 rts ************************************************************************ WaitSpot anop ;a= ligne lsr a longa off sep #$30 sta WS1+1 WaitS anop lda >$e0C02e and #$7f WS1 cmp #0 blt WaitS cmp #100 bge WaitS longa on rep #$30 rts ************************************************************************ Random anop ;--> a= rnd(256) lda >$e0c02e xba clc adc VBLCounter0 sta VBLCounter0 and #$ff rts ************************************************************************ Pause anop ;a = temps de pause (1/60 sec) pha jsr WaitVBL ;on force l'attente a 1/60s PauseVBL anop lda >$e0C019 and #%0000000010000000 bne PauseVBL pla dec a bne Pause rts ************************************************************************ ReadMouse anop ;a --> 0 A pas d'info souris anop ;a --> $8000 anop ;==> Mx--> coor X My--> coor Y anop ; MBut--> bouton lda Mx sta Mx2 lda My sta My2 lda MBut sta MBut2 longa off longi off sep #$30 lda >$e0C027 bpl RMDonebis and #2 beq DoXY lda >$e0C024 RMDonebis lda #0 ;pas d'info souris brl RMDone DoXY lda >$e0C024 tax lda >$e0c024 sta Temp longa on longi on rep #$30 txa and #$ff tax and #%01000000 bne XPos txa and #%00111111 clc adc Mx sta Mx bra NowDoY XPos anop txa ldx Mx and #%00111111 eor #%00111111 inc a sta Mx txa sec sbc Mx sta Mx NowDoY lda Temp and #$FF tax and #%01000000 bne YPos txa and #%00111111 clc adc My sta My bra XYDone YPos anop txa and #%00111111 eor #%00111111 inc a ldx My sta My txa sec sbc My sta My XYDone anop stz MBut lda Temp and #$80 bne RMDoUp lda #$8000 sta MBut RMDoUp anop lda Mx cmp #$f000 bge doXMin cmp #309 ;max x bge doXMax bra ClampY doXMin stz Mx bra ClampY doXMax lda #308 ;clamp x sta Mx ClampY anop lda My cmp #$f000 bge doYMin cmp #128 ;max y bge doYMax bra RMDone2 doYMin stz My bra RMDone2 doYMax lda #127 ;clamp y sta My RMDone2 anop lda Mx cmp Mx2 bne RMDone1 lda My cmp My2 bne RMDone1 lda MBut cmp MBut2 bne RMDone1 lda #0 bra RMDone RMDone1 lda #$8000 RMDone rep #$30 rts Mx ds 2 Mx2 ds 2 My ds 2 My2 ds 2 MBut ds 2 MBut2 ds 2 ************************************************************************ Shadow anop ;a = 1 A shadow on anop ;a = 0 A shadow off eor #1 asl a asl a asl a ora #%00010001 sep #$30 sta >$e0C035 ;shadowing video du bank $01 rep #$30 rts ************************************************************************ Sound anop ;a = frequence du son anop ;x = Ptr bloc info son anop ;==> Bloc info son (words)A anop ; _ Volume ($0 - $ff) anop ; _ Page adresse dans DOC ($0 - $ff) anop ; _ Longueur du son anop ; _ Controle du son sei sta GSTemp2 phx phd ;on lit les infos son tsc tcd sep #$20 longa off lda >$e100ca ;volume systeme and #$0f ;acces aux registres du DOC sta >$e0c03c lda SoundCh ;Reg frequence (bas) sta >$e0c03e lda GSTemp2 ;Frequence sta >$e0c03d lda SoundCh ;Reg frequence (haut) clc adc #$20 sta >$e0c03e lda GSTemp2+1 ;Frequence sta >$e0c03d lda SoundCh clc adc #$40 ;Reg Volume sta >$e0c03e ldy #0 lda (3),y ;Lecture Volume sta >$e0c03d lda SoundCh clc adc #$80 ;Reg adresse Ram DOC sta >$e0c03e ldy #2 lda (3),y ;Lecture adresse sta >$e0c03d lda SoundCh clc adc #$C0 ;Reg taille du son sta >$e0c03e ldy #4 lda (3),y ;Lecture taille du son sta >$e0c03d lda SoundCh clc adc #$A0 ;Reg controle du son sta >$e0c03e ldy #6 lda (3),y ;Lecture controle sta >$e0c03d ;Le son est joue ! lda SoundCh inc a and #$f ;16 oscillos ! sta SoundCh rep #$30 longa on pld pla cli rts SoundCh ds 2 ************************************************************************ ClearDOC anop sei sep #$20 longa off lda >$e100ca ;volume systeme and #$0f ;acces a la ram DOC ora #%01100000 ;auto inc des pointeurs sta >$e0c03c lda #0 sta >$e0c03e ;adresse basse sta >$e0c03f ;adresse haute dans le DOC ldy #0 lda #0 ClearDOCLoop anop sta >$e0c03d ;sound doc iny bne ClearDOCLoop rep #$30 longa on cli rts ************************************************************************ SoundLoad anop ;Temp = handle du son anop ;Temp2 = ptr bloc info son sei PushLong #0 PushLong Temp _GetHandleSize ;taille du son en octets PullLong Temp3 PushLong Temp PushLong Temp2 phd tsc tcd ldy #0 lda [7],y ;dereference de Temp tax ldy #2 lda [7],y stx <7 sta <9 sep #$20 longa off ldy #0 lda #$ff ;on fixe le volume a 255 sta [3],y ldx #7 lda Temp3+1 ;nombre de pages mem du son bmi SoundDOCok0 ;size = 32 ko si son > 32 ko ldx #0 SoundDOCLoop0 anop cmp SoundSzTable,x ;table des tailles possibles blt SoundDOCok0 inx bra SoundDOCLoop0 SoundDOCok0 anop stx Temp txa ;taille en pages (puissance de 2) asl a asl a asl a ora Temp ;resolution ldy #4 sta [3],y lda >$e100ca ;volume systeme and #$0f ;acces a la ram DOC ora #%01000000 sta >$e0c03c stz Temp2 FindDOCadr anop lda Temp2 sta >$e0c03f ;adr haute lda #0 sta >$e0c03e ;adr basse lda >$e0c03d ;une lecture pour rien ldy #0 FindDOCadr2 anop lda >$e0c03d ;lecture du DOC bne FindDOCadr3 rep #$30 lda >$e0c03e inc a ;incrementation manuelle ! sta >$e0c03e sep #$20 iny cpy Temp3 ;longueur du son (octets) blt FindDOCadr2 bra FindDOCadr5 FindDOCadr3 anop ldx Temp lda SoundSzTable,x clc adc Temp2 sta Temp2 bcc FindDOCadr ;si le DOC est pleinA page 0! FindDOCadr5 anop lda Temp2 ;adresse du son dans le DOC ldy #2 sta [3],y ldy #6 lda #%00000010 ;Controle de l'oscillo sta [3],y ;--> droite, pas int, one-shot lda >$e100ca ;volume systeme and #$0f ;acces a la ram DOC ora #%01100000 ;auto inc des pointeurs sta >$e0c03c lda #0 sta >$e0c03e ;adresse basse ldy #2 lda [3],y ;lecture page mem sta >$e0c03f ;adresse haute dans le DOC ldy #0 LoadDOCLoop anop lda [7],y bne LoadDOCL2 lda #1 LoadDOCL2 anop sta >$e0c03d ;sound doc iny cpy Temp3 ;nb octets du son bne LoadDOCLoop lda #0 sta >$e0c03d ;sound doc sta >$e0c03d sta >$e0c03d sta >$e0c03d sta >$e0c03d sta >$e0c03d sta >$e0c03d sta >$e0c03d rep #$30 longa on pld pla ;on enleve les ptrs ! pla pla pla cli rts SoundSzTable dc i1'1' dc i1'2' dc i1'4' dc i1'8' dc i1'16' dc i1'32' dc i1'64' dc i1'128' ************************************************************************ ReadJoy anop ;mx / my anop ;==> a=0 : pas de deplacement lda Mx sta Mx2 lda My sta My2 sei stz Paddle0 stz Paddle1 stz Paddle2 stz Paddle3 sep #$30 longa off longi off ldy #$30 ;Sampling value lda >$e0c036 ;Force GS Speed to 1Mhz pha and #$7f sta >$e0c036 lda >$e0c070 ;Prepare to read paddles nop APaddle0 lda >$e0c064 ;paddle 0 bmi AIncPaddle0 bra APaddle1 AIncPaddle0 inc Paddle0 APaddle1 lda >$e0c065 ;paddle 1 bmi AIncPaddle1 bra APaddle2 AIncPaddle1 inc Paddle1 APaddle2 lda >$e0c066 ;paddle 2 bmi AIncPaddle2 bra APaddle3 AIncPaddle2 inc Paddle2 APaddle3 lda >$e0c067 ;paddle 3 bmi AIncPaddle3 bra AContinue AIncPaddle3 inc Paddle3 AContinue bra Adey Adey dey bne APaddle0 pla sta >$e0c036 ;Restore GS speed cli rep #$30 longa on longi on lda Paddle0 and #$ff ;resultat cmp #$18 bge AdcX sta Temp lda #$18 sec sbc Temp clc lsr a lsr a lsr a sta Temp lda Mx sec sbc Temp cmp #$f000 blt ReadXEnd0 lda #0 bra ReadXEnd0 AdcX anop sec sbc #$18 clc lsr a lsr a lsr a clc adc Mx cmp #309 blt ReadXEnd0 lda #308 ReadXEnd0 anop sta Mx ReadXEnd anop lda Paddle1 and #$ff ;resultat cmp #$18 bge AdcY sta Temp lda #$18 sec sbc Temp clc lsr a lsr a lsr a sta Temp lda My sec sbc Temp cmp #$f000 blt ReadYEnd0 lda #0 bra ReadYEnd0 AdcY anop sec sbc #$18 clc lsr a lsr a lsr a adc My cmp #128 blt ReadYEnd0 lda #127 ReadYEnd0 anop sta My ReadYEnd anop lda >$e0c061 and #%0000000010000000 beq RNotFire lda #1 sta MBut bra RDepTest RNotFire anop stz MBut RDepTest anop lda Mx cmp Mx2 bne RDepTestF lda My cmp My2 bne RDepTestF lda #0 rts RDepTestF anop lda #$80 rts Paddle0 ds 2 Paddle1 ds 2 Paddle2 ds 2 Paddle3 ds 2 \ No newline at end of file diff --git a/picknpile/SOURCES.IIGS/GSFONT.SRC b/picknpile/SOURCES.IIGS/GSFONT.SRC new file mode 100644 index 0000000000000000000000000000000000000000..d206568462a8ecb604939e627fee45aaf97163aa GIT binary patch literal 16888 zcmeI4&ud&&6vyvOZNb)15&wXpR9Xe48^K)(Vrw@wr8{?$CNwHZNQ+1|31X}X! zAnZF3^6_F^ei+a1;(2sFpWnyzpYgokF$jZj?wf<*-FOb7=!w7ghhhARuYP?nd~o1U zxE8LyvKbzKbu+AA+zbzgb90B%X5YqFAB|rx53USut!$>(v5=j`!94VCUw9;hpKkv$ z{_FPL$pP^{xCSTvUqW2X=8Ny{He9o%g6m9^E;{Q7#lJ9Fmr`O(v(`O6ziD;Gx3udOaF ztzUjp!00v_&CR{Au_4<%H!6<#vo9^o758a*VR3Zv*oky3FY7V}SsiOZP9#KD6j{#O zyQ8oiNvV|!ij=~G1JPmJc&yw!&;0hh)7C#1u?OR z?6BcqW-f7iovnDag}*=&!|sKfq7-o(nD`zP$v(cSxo8dgOuUrH$*STa5&+t|{X@`8Li-q;&;>w2TB1nH`!JZdhWHiHWTiw1c^5 z*-|(T+khe1R#0t)MUL3^j=+l|sSrPk50rrF z>7&eI+urJ7h~|Um;c~GewaC_Xnh8p)AhK&d3?&GpmLPgZ6O*hgG3_&UV726iF{^m8hdJu~OcEh?B?=D~Jgp&Ud_g=+p;KmLWRH zo|VIL$B;C@Ftf;!u0?&4lRmxGY(ZQ^pbhpA)6!dlM1egL#Cl>oL44P4zbZ|J*z!}? z*b`EV2<`0FL=lrp^}xlKAV>u1Au*!#09$|q8$X0GE6?jbFpU# z7ewL$2@--UMFh$Kwx9@V$x*i8h}MnW;Ybjq1O$;F(l3!sGnT5CbnL(_aml*_vd9o9 zJ;A10azZAz+L((ckKGX&qC;6a*&YpumJ*xY-~tIE9xZW!G)7sbG~1Arl&}>WgNHSt}1WEJd ziAj(ITad)sf+4;wc1LXu2&CHKdSYmS7E!OIls6-`El?!LYUyV49V}`w7TCLS$p@tcT7JXdXG_VcPlX;OaIYKUGfC$%IA|J+Z3{kwRGKPiKUUx z3myJ6W4?%wQ=cg77??Z+$`C}9+nr5_*u}@`p#gyuGr*AE2WtZYNk0;oz7+Q}Bu`^n zbv~2(Lqj?yQv$g*Sf_@5T0-8B#09ejBs!@NK_Kl%f?z=UKloda#M)wpq{+&Q&W!aM zHqDP$JW|qRNF?e}{~WW4y7v>a!NsSs<n(HH zPCs*L=$Oxd_D|LXfiz9D3|*zkNo%lN<*c}5vA=CNqQftlz|A9Z(RzjG{aV_907aZ3 z=`%7fcKT_FrXt!T(18&tWWXfuiRa?;xhHDzhqJe889X!yN5g{tF@YdF2O9Nl*3t>F&>c;7~K8eeZKEA$n^3CDa$wAn9dl0UrKTvSv=9gdT z=EY?g!v0~H{QAjc{OM%;*<}3rWPD>Xz8NKl?}V+xF@!sZCEjx%-im+9V4K%F+&>8@ B?mqwk literal 0 HcmV?d00001 diff --git a/picknpile/SOURCES.IIGS/HISCORES2 b/picknpile/SOURCES.IIGS/HISCORES2 new file mode 100644 index 0000000..fd9c1c0 --- /dev/null +++ b/picknpile/SOURCES.IIGS/HISCORES2 @@ -0,0 +1 @@ +UQWY8u8õžT]_U[]8u8uhDUU]WQM8ÛUQ_K TQ8u8u8UU]_8u8uE?UUUUUUUUUUUÿ \ No newline at end of file diff --git a/picknpile/SOURCES.IIGS/MAIN.SRC b/picknpile/SOURCES.IIGS/MAIN.SRC new file mode 100644 index 0000000..ebb9285 --- /dev/null +++ b/picknpile/SOURCES.IIGS/MAIN.SRC @@ -0,0 +1 @@ +**************************************************************** * * 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 \ No newline at end of file diff --git a/picknpile/SOURCES.IIGS/MC.SRC b/picknpile/SOURCES.IIGS/MC.SRC new file mode 100644 index 0000000..d950a37 --- /dev/null +++ b/picknpile/SOURCES.IIGS/MC.SRC @@ -0,0 +1 @@ +macgen main.src sh.macros sh.macros \ No newline at end of file diff --git a/picknpile/SOURCES.IIGS/MUSIC.SRC b/picknpile/SOURCES.IIGS/MUSIC.SRC new file mode 100644 index 0000000..2b9ecca --- /dev/null +++ b/picknpile/SOURCES.IIGS/MUSIC.SRC @@ -0,0 +1 @@ +**************************************************************** * * Init Sound DOC * **************************************************************** ProDOS gequ $e100a8 longa on longi on InitSound START ReggaeMan Using InstDef Using PictureBuffer Using SequenceNotes Using SeqEffects1 Using SeqEffects2 ldx #$00 lda #$8080 bcle sta >WaveBuffer,x ; 256 bytes buffer inx inx cpx #256 bne bcle sei PushLong #WaveBuffer ; Copy to DOC ram 256 $80 bytes PushWord #0 ; to make sure that there are no PushWord #256 ; $00 bytes that would stop the _WriteRamBlock ; oscilator. sep #$20 longa off bcleWait lda >$E1C03C bmi bcleWait ora #%00100000 and #%10111111 sta >$E1C03C lda #$40 sta >$E1C03E ; Set Volume Registers ldy #0 lda #0 ; Volume=0 bcleWrite1 sta >$E1C03D iny cpy #30 bne bcleWrite1 lda #$80 sta >$E1C03E ; Set Wavetable Pointer Registers ldy #0 lda #0 ; Wavetable Pointer register=0 bcleWrite2 sta >$E1C03D iny cpy #30 bne bcleWrite2 lda #$A0 sta >$E1C03E ; Set Control Registers ldy #0 bcleWrite3 lda #1 ; Control Byte=1 (osc. stopped) sta >$E1C03D iny cpy #30 bne bcleWrite3 lda #$C0 sta >$E1C03E ; Set Wavetable Size Registers ldy #0 bcleWrite4 lda #0 ; Size=0 sta >$E1C03D iny cpy #30 bne bcleWrite4 lda #$00 sta >$E1C03E lda #$FA sta >$E1C03D ; Frequency low 0=$7D =50Hz lda #$20 sta >$E1C03E lda #$0 sta >$E1C03D ; Frequency high 0=0 lda #$E1 sta >$E1C03E lda #60 sta >$E1C03D ; 30 osc. enabled lda #$A0 sta >$E1C03E lda #$8 sta >$E1C03D ; Osc 0 generates interrupts rep #$20 longa on cli rts **************************************************************** * * Load Music * **************************************************************** LoadMusic ENTRY Using SequenceNotes Using SeqEffects1 Using SeqEffects2 Using InstDef PushLong #Parmblock PushWord #$2010 ; Open jsl GSOS jsl ProDOSErrJSL lda parmblock+2 sta parmblock2+2 sta parmblock3+2 sta parmblock4+2 sta parmblock5+2 sta parmblock6+2 sta parmblock7+2 PushLong #Parmblock2 PushWord #$2012 ; Read Header jsl GSOS jsl ProDOSErrJSL ldx #44 ldy #0 bcleSetVolume lda >HeaderBuffer,x sta VolumeTable,y iny iny txa clc adc #30 tax cmp #470 bcc bcleSetVolume ReadFile lda >HeaderBuffer+6 sta Length sta Length2 sta Length3 PushLong #Parmblock3 PushWord #$2012 ; Read Notes jsl GSOS jsl ProDOSErrJSL PushLong #Parmblock4 PushWord #$2012 ; Read Effects1 jsl GSOS jsl ProDOSErrJSL PushLong #Parmblock5 PushWord #$2012 ; Read Effects2 jsl GSOS jsl ProDOSErrJSL PushLong #Parmblock6 PushWord #$2012 ; Read Stereo jsl GSOS jsl ProDOSErrJSL PushLong #Parmblock7 PushWord #$2014 ; Close jsl GSOS jsl ProDOSErrJSL rts MSB OFF MusicPathname dc i2'MusicPNEnd-MusicPathName-2' dc c'1/PnP.Datas/PnP.sng' ;Song !!! MusicPNEnd anop parmblock dc i2'2' ds 2 ; ref_num dc i4'MusicPathname' ; pathname parmblock2 dc i2'4' ds 2 ; ref_num dc i4'HeaderBuffer' ; data_buffer dc i4'600' ; request_count ds 4 ; transfer_count parmblock3 dc i2'4' ds 2 ; ref_num dc i4'Notes' ; data_buffer Length dc i4'$0000' ; request_count ds 4 ; transfer_count parmblock4 dc i2'4' ds 2 ; ref_num dc i4'Effects1' ; data_buffer Length2 dc i4'$0000' ; request_count ds 4 ; transfer_count parmblock5 dc i2'4' ds 2 ; ref_num dc i4'Effects2' ; data_buffer Length3 dc i4'$0000' ; request_count ds 4 ; transfer_count parmblock6 dc i2'4' ds 2 ; ref_num dc i4'StereoTable' ; data_buffer dc i4'30' ; request_count ds 4 ; transfer_count parmblock7 dc i2'1' ds 2 LoadDOCFile anop PushLong #Parmblock8 PushWord #$2010 ; Open jsl GSOS jsl ProDOSErrJSL lda parmblock8+2 sta parmblock10+2 sta parmblock11+2 sta parmblock12+2 sta parmblock13+2 PushLong #Parmblock10 PushWord #$2012 ; Read Index jsl GSOS jsl ProDOSErrJSL PushLong #Parmblock11 PushWord #$2012 ; Read wbk jsl GSOS jsl ProDOSErrJSL WaveReadOk anop ldx InstIndex lda #0 bcleCalc cpx #0 beq EndCalc dex clc adc #92 bra bcleCalc EndCalc sta InstLength PushLong #Parmblock12 PushWord #$2012 ; Read Instruments jsl GSOS jsl ProDOSErrJSL PushLong #Parmblock13 PushWord #$2014 ; Close jsl GSOS jsl ProDOSErrJSL rts Write2DOC sei PushLong #WaveBuffer ; PicBuf Pushword #$000 ; doc start address PushWord #$FFFF ; byte count _WriteRamBlock cli rts InitSmith ENTRY phb phk plb jsr InitSound plb rtl LoadMusic2 ENTRY phb phk plb jsr LoadMusic plb rtl LoadMusic4 ENTRY phb phk plb jsr LoadDOCFile plb rtl WriteDOC2 ENTRY phb phk plb jsr Write2DOC plb rtl Play2 ENTRY phb phk plb jsr Play plb rtl **************************************************************** * * * Play the music * * * **************************************************************** Play anop PushLong #SoundIRQrtn _SetSoundMIRQV stz Timer lda >HeaderBuffer+8 sta Tempo lda >HeaderBuffer+470 and #%0000000011111111 sta NumberOfBlocks ; If NumberOfBlocks=0 beq SkipPlay ; do not play. stz NotePlayed stz BlockIndex lda >HeaderBuffer+472 and #%0000000011111111 asl a tax lda BlockTable,x sta NoteIndex lda #1 sta Performing SkipPlay rts FatalError ENTRY brk $0 brk $0 dc c'SoundS... error' DOCStr dc i2'DOCStrEnd-DOCStr-2' dc c'1/PnP.Datas/PnP.wbk' ; WaveBank !!! DOCStrEnd anop parmblock8 dc i2'2' ds 2 ; ref_num dc i4'DOCStr' ; pathname parmblock10 dc i2'4' ds 2 ; ref_num dc i4'InstIndex' ; data_buffer dc i4'$0002' ; request_count ds 4 ; transfer_count parmblock11 dc i2'4' ds 2 ; ref_num dc i4'WaveBuffer' ; data_buffer dc i4'$10000' ; request_count ds 4 ; transfer_count parmblock12 dc i2'4' ds 2 ; ref_num dc i4'Instrument1' ; data_buffer instlength dc i4'0000' ; request_count ds 4 ; transfer_count parmblock13 dc i2'1' ds 2 **************************************************************** * * * Sound IRQ routine (This routine is called 50 times/second) * * * **************************************************************** SoundIRQrtn anop longa off longi off phb phd rep #$30 lda >MyZP tcd sep #$30 phk plb lda Performing bne BcleWaitUn jmp Stopped BcleWaitUn anop lda >$E1C03C bmi BcleWaitUn and #%10011111 ; Disable auto-inc. and access DOC reg. sta >$E1C03C lda #$E0 sta >$E1C03E ; Read Interrupt register to find out lda >$E1C03D ; wich osc. generated the interrupt. lda >$E1C03D and #%01111111 sta >$E1C03D and #%00111110 ; If it is osc. #0 then it means that lsr a ; it is the 50Hz interrupt. beq TimerInterrupt clc ; If osc<>#0 then find wich pair of adc #$A0 ; osc. caused the interrupt. sta >$E1C03E ; Then we clear the interrupt bit lda >$E1C03D ; of the first osc. of that pair lda >$E1C03D ; and we launch the second one. bit #%00001000 ; This may be used in future versions beq Stopped ; of SoundSmith to allow instruments to and #%11111110 ; loop smoothly. sta >$E1C03D Stopped clc pld plb rtl TimerInterrupt lda Performing ; Performing is used to know if the bne WeCanPlay ; music must be played. Set Performing jmp EndInterrupt ; to 0/1 to stop/play the music. WeCanPlay stz Temporary ; Temporary contains the number of the ! ; track that is being processed. inc Timer lda Timer ; If Timer=Tempo, play the notes. cmp Tempo ; Else, handle Arpegiatto effects. beq PlayTracks jmp HandleEffects PlayTracks stz Timer ; resets the Timer NewTrack rep #$30 longa on longi on lda Temporary asl a tax lda ActiveTrkTable,x ; Look if the current track is active beq TrackActive ; (0=active, $FFFF=inactive) inc NoteIndex ; If the track is inactive, skip it. inc Temporary ; (You can save much processor time by lda Temporary ; disabling the unused tracks!) cmp #14 bne NewTrack jmp EndPlay ; When all 14 tracks have been played, ! ; exit TrackActive sep #$20 longa off ldx NoteIndex lda >Notes,x ; Reads the note to play. rep #$20 longa on and #%0000000011111111 beq NotValid cmp #128 ; If the value of the note is >=128, bcs NotValid ; then it means that it's a command. bra NoteFound NotValid inc NoteIndex ; Point to next note (x register still ! points to the current note) cmp #128 ; is it STP ? bne NotSTP sep #$20 longa off lda >$E1C03C ; disable auto-increment and #%10011111 sta >$E1C03C lda Temporary ; Stops the osc. pair used to play inc a ; the current track asl a sta OscNumber clc adc #$A0 sta >$E1C03E lda #$01 sta >$E1C03D ; Stop osc.a lda OscNumber clc adc #$A1 sta >$E1C03E lda #$01 sta >$E1C03D ; Stop osc.b NotACommand sep #$20 longa off inc Temporary ; Handle next track. lda Temporary cmp #14 beq NoMoreTracks jmp NewTrack NotSTP longa on cmp #129 ; is it NXT ? bne NotACommand lda #63 ; this will cause the player to jump sta NotePlayed ; to the next block when the line of ! ; notes is completed. bra NotACommand NoMoreTracks rep #$20 longa on jmp EndPlay NoteFound sta Semitone ; Save the note that we read. sep #$20 longa off lda >Effects1,x ; Read the sample number. If its value ldy Temporary ; is 0, we must use the sample played and #%11110000 ; last. bne ThereIsASample lda SampleTable,y ThereIsASample sta SampleTable,y ; Else, save the sample number. lsr a lsr a lsr a lsr a dec a ; Convert the sample number*64 into asl a ; an index to tables containing words. tay lda VolumeTable,y ; Get the volume of the sample, lsr a ; divide it by two, sta VolumeInt ; and save it for later. rep #$20 longa on lda >Effects1,x ; Read the effect and #%0000000000001111 bne NotArpegiatto ; If effect=0, its maybe an arpegiatto. lda >Effects2,x ; Read the value for the effect, sep #$20 longa off ldy Temporary ; and save it in this table. sta ArpegiattoTbl,y lda Semitone ; Save the note that will be modified sta ArpegeToneTbl,y ; by the arpegiatto. rep #$20 longa on jmp NoTempoChange NotArpegiatto pha ; Save the value of the effect. sep #$20 longa off ldy Temporary ; First, if the effect <> 0, we must lda #0 ; stop the arpegiatto effect on this sta ArpegiattoTbl,y ; track. rep #$20 longa on pla ; Recover the effect value. cmp #$03 ; Effect $3=set volume bne noVolChange lda >Effects2,x ; Read new volume and #%0000000011111111 lsr a sta VolumeInt ; and save it. ChangeVol lda Semitone ; If Semitone=0, it means that we must beq ChangeIt ; change the volume of a note that is jmp NoTempoChange ; being played. ChangeIt lda Temporary inc a asl a sta OscNumber sep #$20 longa off SetAutoInc lda >$E1C03C bmi SetAutoInc ora #%00100000 ; Auto-incrementation and #%10111111 sta >$E1C03C lda OscNumber clc adc #$40 sta >$E1C03E lda VolumeInt ; Set new volume sta >$E1C03D ; for osc.a sta >$E1C03D ; for osc.b rep #$20 longa on bra NoTempoChange NoVolChange cmp #$06 ; Effect $6=lower the volume bne NoVolChange2 lda >Effects2,x and #%0000000011111111 lsr a sta TempInterrupt lda VolumeInt sec sbc TempInterrupt bpl VolOk lda #0 VolOk sta VolumeInt jmp ChangeVol NoVolChange2 cmp #$05 ; Effect $5=Increase the volume bne NoVolChange3 lda >Effects2,x and #%0000000011111111 lsr a clc adc VolumeInt cmp #$80 bcc VolOk2 lda #$7F VolOk2 sta VolumeInt jmp ChangeVol NoVolChange3 cmp #$0F ; Effect $F=New tempo bne NoTempoChange lda >Effects2,x ; The tempo value uses only the lowest and #%0000000000001111 ; nibble (1-$F) sta Tempo NoTempoChange lda Semitone bne PlayIt inc NoteIndex jmp NotSTP PlayIt lda Temporary ; The 0-1 osc. pair is used to generate inc a ; interrupts. Therefore, the track 0 asl a ; uses the pair 2-3, etc. sta OscNumber sep #$20 longa off lda >$E1C03C and #%10011111 sta >$E1C03C lda OscNumber clc adc #$A0 sta >$E1C03E lda >$E1C03D lda >$E1C03D and #%11110111 ora #%00000001 sta >$E1C03D ; Stop even osc. lda OscNumber clc adc #$A1 sta >$E1C03E lda >$E1C03D lda >$E1C03D and #%11110111 ora #%00000001 sta >$E1C03D ; Stop odd osc. ldy Temporary lda SampleTable,y rep #$20 longa on and #%0000000011110000 lsr a lsr a lsr a lsr a dec a cmp InstIndex ; do not play instruments that have not bcc SampleExists ; been loaded. jmp IgnoreSample SampleExists sta CurrInstInt asl a tax lda >InstIndexTable,x ; Offset to the beginning of the instru- clc ; ment definition table. adc #32 ; Points to the first Wavelist of osc.a SearchingA tax lda >Instrument1,x and #%0000000011111111 cmp Semitone ; If Semitone < Topkey we use this bcs FoundWaveListA ; WaveList. Otherwise, we must try the txa ; next one. clc adc #6 bra SearchingA FoundWaveListA stx IndexInterrupt inx lda >Instrument1,x ; Read the size & adress of the wave for sta TempInterrupt ; osc.a inx inx lda >Instrument1,x ; Read mode byte for osc.a and #%0000000011111111 sta Temp2Interrupt lda StereoMode ; If StereoMode=zero, we use the Mode beq StereoOk ; byte for the channel stereo. lda Temp2Interrupt ; Otherwise, we must use StereoTable and #%0000000000001111 ; to find out what channel to use. sta Temp2Interrupt lda Temporary ; (0=right $FFFF=left) asl a tax lda StereoTable,x beq StereoOk lda Temp2Interrupt ora #%0000000000010000 sta Temp2Interrupt StereoOk lda IndexInterrupt ; Look for a WaveList starting with $7F SearchEndOfA tax ; The first WaveList for osc.b starts lda >Instrument1,x ; 6 bytes further. and #%0000000011111111 cmp #$7F beq FoundEndOfA txa clc adc #6 bra SearchEndOfA FoundEndOfA txa clc adc #6 SearchingB tax ; We repeat the operations for osc.b lda >Instrument1,x and #%0000000011111111 cmp Semitone bcs FoundWaveListB txa clc adc #6 bra SearchingB FoundWaveListB inx lda >Instrument1,x sta Temp3Interrupt inx inx lda >Instrument1,x and #%0000000011111111 sta Temp4Interrupt lda StereoMode beq StereoOk2 lda Temp4Interrupt and #%0000000000001111 sta Temp4Interrupt lda Temporary asl a tax lda StereoTable,x beq StereoOk2 lda Temp4Interrupt ora #%0000000000010000 sta Temp4Interrupt StereoOk2 lda Semitone ; Converts the semitone into a asl a ; frequence. tax lda >FreqTable,x sta TempFreqInt lda CurrInstInt asl a tax lda CompactTable,x ; If the instrument is compacted, tax ; the frequence must be divided by two. bcleFreq cpx #0 ; (If the instrument has been compacted beq EndBcleFreq ; twice, the frequence must be divided lsr TempFreqInt ; by four, etc.) dex bra bcleFreq EndBcleFreq lda #0 sep #$20 longa off bcleWait2 lda >$E1C03C bmi bcleWait2 ora #%00100000 ; Set auto-incrementation and #%10111111 sta >$E1C03C lda OscNumber sta >$E1C03E lda TempFreqInt sta >$E1C03D ; Frequency low even sta >$E1C03D ; Frequency low odd lda OscNumber clc adc #$20 sta >$E1C03E lda TempFreqInt+1 sta >$E1C03D ; Frequency high even sta >$E1C03D ; Frequency high odd lda OscNumber clc adc #$40 sta >$E1C03E lda VolumeInt tax lda VolumeTable2,x sta >$E1C03D ; Volume even sta >$E1C03D ; Volume odd lda OscNumber clc adc #$80 sta >$E1C03E lda TempInterrupt sta >$E1C03D ; Wave Adress even lda Temp3Interrupt sta >$E1C03D ; Wave Adress odd lda OscNumber clc adc #$C0 sta >$E1C03E lda TempInterrupt+1 sta >$E1C03D ; Wave Size even lda Temp3Interrupt+1 sta >$E1C03D ; Wave Size odd lda OscNumber clc adc #$A0 sta >$E1C03E lda Temp2Interrupt sta >$E1C03D ; Control register even lda Temp4Interrupt sta >$E1C03D ; Control register odd IgnoreSample rep #$20 longa on inc NoteIndex ; It's finished, we can go to the inc Temporary ; next track... lda Temporary cmp #14 beq EndPlay sep #$20 longa off jmp NewTrack longa on EndPlay inc NotePlayed ; Point to next line. lda NotePlayed ; If NotePlayed=64, we must play the cmp #64 ; next block. beq ReadNewBlock jmp EndInterrupt ReadNewBlock stz NotePlayed inc BlockIndex ; Check if the music is finished. ldx BlockIndex cpx NumberOfBlocks beq Finished lda >HeaderBuffer+472,x ; If it is not, find next block to play. and #%0000000011111111 sta BlockPlayed asl a tax lda BlockTable,x ; Compute new NoteIndex. sta NoteIndex bra EndInterrupt Finished lda #0 ; If it is finished, set Performing to sta Performing ; zero. lda Loop ; If Loop <> 0 start the song over again beq NoLoop lda >HeaderBuffer+470 and #%0000000011111111 sta NumberOfBlocks stz NotePlayed stz BlockIndex lda >HeaderBuffer+472 and #%0000000011111111 asl a tax lda BlockTable,x sta NoteIndex lda #1 sta Performing NoLoop sep #$30 ; Stop all the osc. longa off longi off bcleStopAll lda >$E1C03C bmi bcleStopAll and #%10011111 ; acces DOC registers and disable sta >$E1C03C ; auto-incrementation. lda #2 sta OscNumber bcleStopAll2 lda OscNumber clc adc #$A0 sta >$E1C03E lda #$01 sta >$E1C03D ; Stop even osc. lda OscNumber inc a clc adc #$A0 sta >$E1C03E lda #$01 sta >$E1C03D ; Stop odd osc. lda OscNumber clc adc #2 sta OscNumber cmp #30 bne bcleStopAll2 EndInterrupt sep #$30 longa off longi off pld plb clc rtl ; End of Interrupt routine. HandleEffects sep #$30 ; Handle Arpegiatto effects. longa off longi off stz Temporary bcleHandleArp ldy Temporary lda ArpegiattoTbl,y ; If 0, no arpegiatto. bne ThereIsAnArp jmp NoArpegiatto ThereIsAnArp lda Timer ; Timer modulo 6 cmp #6 TryAgain bcc StartArp sec sbc #6 bra TryAgain StartArp2 bne StartArp2 jmp NoArpegiatto StartArp cmp #1 ; The arpegiatto changes the beq Stage1 ; frequence of the note in function cmp #4 ; of the time. beq Stage1 ; When Timer=1 ou 4 the first nibble of cmp #2 ; the effect value is added to the beq Stage2 ; semitone of the played note. cmp #5 ; When Timer=2 ou 5 the second nibble of beq Stage2 ; the effect value is added to the ! ; semitone of the played note. Stage3 lda ArpegiattoTbl,y ; When Timer=3 the value of the first & and #%00001111 ; second nibbles of the effect value are sta TempInterrupt ; substracted from the semitone of the lda ArpegiattoTbl,y ; played note. lsr a lsr a lsr a lsr a clc adc TempInterrupt sta TempInterrupt lda ArpegeToneTbl,y sec sbc TempInterrupt sta ArpegeToneTbl,y ; save new semitone bra ModifieFreq Stage1 lda ArpegiattoTbl,y lsr a lsr a lsr a lsr a clc adc ArpegeToneTbl,y sta ArpegeToneTbl,y ; save new semitone bra ModifieFreq Stage2 lda ArpegiattoTbl,y and #%00001111 clc adc ArpegeToneTbl,y sta ArpegeToneTbl,y ; save new semitone ModifieFreq rep #$20 longa on and #%0000000011111111 ; Compute the new frequence. asl a tax lda >FreqTable,x sta TempFreqInt sep #$20 longa off ldy Temporary lda SampleTable,y rep #$20 longa on asl a tax lda CompactTable,x ; The frequency changes if the instru- tax ; ments is compacted. bcleFreq2 cpx #0 beq EndBcleFreq2 lsr TempFreqInt dex bra bcleFreq2 EndBcleFreq2 sep #$20 longa off lda Temporary inc a asl a sta OscNumber bcleWait3 lda >$E1C03C ; Update Frequency registers bmi bcleWait3 ora #%00100000 and #%10111111 sta >$E1C03C lda OscNumber sta >$E1C03E lda TempFreqInt sta >$E1C03D ; Frequency low even. sta >$E1C03D ; Frequency low odd. lda OscNumber clc adc #$20 sta >$E1C03E lda TempFreqInt+1 sta >$E1C03D ; Frequency high even. sta >$E1C03D ; Frequency high odd. NoArpegiatto inc Temporary lda Temporary cmp #14 beq Fini jmp bcleHandleArp Fini pld plb clc rtl longa on longi on SampleTable ds 14 ArpegiattoTbl ds 14 ArpegeToneTbl ds 14 OscNumber ds 2 DataBank ds 2 Temporary ds 2 Semitone ds 2 TempInterrupt ds 2 Temp2Interrupt ds 2 Temp3Interrupt ds 2 Temp4Interrupt ds 2 TempFreqInt ds 2 IndexInterrupt ds 2 VolumeInt ds 2 CurrInstInt ds 2 **************************************************************** * * GlobalDATA * **************************************************************** InstIndex ds 2 BlockIndex ds 2 NotePlayed ds 2 BlockPlayed ds 2 NoteIndex ds 2 Timer ds 2 Tempo ds 2 NumberOfBlocks ds 2 Performing ENTRY dc i2'0' Loop ENTRY dc i2'0' VolumeTable dc i2'255,255,255,220,100,255,105,175,255,255,255,255,255,255,255' CompactTable dc i2'0,0,0,0,0,0,0,0,0,0,0,0,0,0,0' ActiveTrkTable ds 14*2 StereoTable ds 14*2 StereoMode ds 2 VolumeTable2 dc i1'0,1,3,4,6,7,9,10,12,13,15,16,18,19,21,22,24,25,27,28' dc i1'30,31,33,34,36,37,39,40,42,43,45,46,48,49,51,52,54,55,57' dc i1'58,60,61,63,64,66,67,69,70,72,73,75,76,78,79,81,82,84,85' dc i1'87,88,90,91,93,94,96,97,99,100,102,103,105,106,108,109' dc i1'111,112,114,115,117,118,120,121,123,124,126,127,129,130' dc i1'132,133,135,136,138,139,141,142,144,145,147,148,150,151' dc i1'153,154,156,157,159,160,162,163,165,166,168,169,171,172' dc i1'174,175,177,178,180,181,183,184,186,187,189,190,192' BlockTable dc i2'0,896,1792,2688,3584,4480,5376,6272,7168,8064' dc i2'8960,9856,10752,11648,12544,13440,14336,15232,16128,17024' dc i2'17920,18816,19712,20608,21504,22400,23296,24192,25088,25984' dc i2'26880,27776,28672,29568,30464,31360,32256,33152,34048,34944' dc i2'35840,36736,37632,38528,39424,40320,41216,42112,43008,43904' dc i2'44800,45696,46592,47488,48384,49280,50176,51072,51968,52864' dc i2'53760,54656,55552,56448,57344,58240,59136,60032,60928,61824' dc i2'62720,63616,64512' END **************************************************************** * * Some general use buffers * **************************************************************** Buffer2 DATA WaveBank WaveBuffer ENTRY ds $ffff END **************************************************************** * * Instdef: Instrument definition * **************************************************************** instdef DATA InstDefinition Instrument1 ENTRY dc i1'0,0,0' ; enveloppe dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' ; fill out 8 stages with 0's dc i1'0' ; release segment - 1 PriorityInc1 dc i1'0' ; priority inc dc i1'0' ; pitch bend range dc i1'0' ; slight vibrato dc i1'0' ; vibrato speed dc i1'0' ; spare AWaveCount1 dc i1'0' ; number of waveptrs for osc A BWaveCount1 dc i1'0' ; number of waveptrs for osc B WaveLists1 dc i1'0,0,0,0,0,0' ; topkey,addr,size,ctrl,pitch dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem this size supports dc i1'0,0,0,0,0,0' ; idem up to 5 wave lists dc i1'0,0,0,0,0,0' ; idem for each wave. dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem Instrument2 dc i1'0,0,0' ; enveloppe dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' ; fill out 8 stages with 0's dc i1'0' ; release segment - 1 dc i1'0' ; priority inc dc i1'0' ; pitch bend range dc i1'0' ; slight vibrato dc i1'0' ; vibrato speed dc i1'0' ; spare AWaveCount2 dc i1'0' ; number of waveptrs for osc A BWaveCount2 dc i1'0' ; number of waveptrs for osc B WaveLists2 dc i1'0,0,0,0,0,0' ; topkey,addr,size,ctrl,pitch dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem this size supports dc i1'0,0,0,0,0,0' ; idem up to 5 wave lists dc i1'0,0,0,0,0,0' ; idem for each wave. dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem Instrument3 dc i1'0,0,0' ; enveloppe dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' ; fill out 8 stages with 0's dc i1'0' ; release segment - 1 dc i1'0' ; priority inc dc i1'0' ; pitch bend range dc i1'0' ; slight vibrato dc i1'0' ; vibrato speed dc i1'0' ; spare AWaveCount3 dc i1'0' ; number of waveptrs for osc A BWaveCount3 dc i1'0' ; number of waveptrs for osc B WaveLists3 dc i1'0,0,0,0,0,0' ; topkey,addr,size,ctrl,pitch dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem this size supports dc i1'0,0,0,0,0,0' ; idem up to 5 wave lists dc i1'0,0,0,0,0,0' ; idem for each wave. dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem Instrument4 dc i1'0,0,0' ; enveloppe dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' ; fill out 8 stages with 0's dc i1'0' ; release segment - 1 dc i1'0' ; priority inc dc i1'0' ; pitch bend range dc i1'0' ; slight vibrato dc i1'0' ; vibrato speed dc i1'0' ; spare AWaveCount4 dc i1'0' ; number of waveptrs for osc A BWaveCount4 dc i1'0' ; number of waveptrs for osc B WaveLists4 dc i1'0,0,0,0,0,0' ; topkey,addr,size,ctrl,pitch dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem this size supports dc i1'0,0,0,0,0,0' ; idem up to 5 wave lists dc i1'0,0,0,0,0,0' ; idem for each wave. dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem Instrument5 dc i1'0,0,0' ; enveloppe dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' ; fill out 8 stages with 0's dc i1'0' ; release segment - 1 dc i1'0' ; priority inc dc i1'0' ; pitch bend range dc i1'0' ; slight vibrato dc i1'0' ; vibrato speed dc i1'0' ; spare AWaveCount5 dc i1'0' ; number of waveptrs for osc A BWaveCount5 dc i1'0' ; number of waveptrs for osc B WaveLists5 dc i1'0,0,0,0,0,0' ; topkey,addr,size,ctrl,pitch dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem this size supports dc i1'0,0,0,0,0,0' ; idem up to 5 wave lists dc i1'0,0,0,0,0,0' ; idem for each wave. dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem Instrument6 dc i1'0,0,0' ; enveloppe dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' ; fill out 8 stages with 0's dc i1'0' ; release segment - 1 dc i1'0' ; priority inc dc i1'0' ; pitch bend range dc i1'0' ; slight vibrato dc i1'0' ; vibrato speed dc i1'0' ; spare AWaveCount6 dc i1'0' ; number of waveptrs for osc A BWaveCount6 dc i1'0' ; number of waveptrs for osc B WaveLists6 dc i1'0,0,0,0,0,0' ; topkey,addr,size,ctrl,pitch dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem this size supports dc i1'0,0,0,0,0,0' ; idem up to 5 wave lists dc i1'0,0,0,0,0,0' ; idem for each wave. dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem Instrument7 dc i1'0,0,0' ; enveloppe dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' ; fill out 8 stages with 0's dc i1'0' ; release segment - 1 dc i1'0' ; priority inc dc i1'0' ; pitch bend range dc i1'0' ; slight vibrato dc i1'0' ; vibrato speed dc i1'0' ; spare AWaveCount7 dc i1'0' ; number of waveptrs for osc A BWaveCount7 dc i1'0' ; number of waveptrs for osc B WaveLists7 dc i1'0,0,0,0,0,0' ; topkey,addr,size,ctrl,pitch dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem this size supports dc i1'0,0,0,0,0,0' ; idem up to 5 wave lists dc i1'0,0,0,0,0,0' ; idem for each wave. dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem Instrument8 dc i1'0,0,0' ; enveloppe dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' ; fill out 8 stages with 0's dc i1'0' ; release segment - 1 dc i1'0' ; priority inc dc i1'0' ; pitch bend range dc i1'0' ; slight vibrato dc i1'0' ; vibrato speed dc i1'0' ; spare AWaveCount8 dc i1'0' ; number of waveptrs for osc A BWaveCount8 dc i1'0' ; number of waveptrs for osc B WaveLists8 dc i1'0,0,0,0,0,0' ; topkey,addr,size,ctrl,pitch dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem this size supports dc i1'0,0,0,0,0,0' ; idem up to 5 wave lists dc i1'0,0,0,0,0,0' ; idem for each wave. dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem Instrument9 dc i1'0,0,0' ; enveloppe dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' ; fill out 8 stages with 0's dc i1'0' ; release segment - 1 dc i1'0' ; priority inc dc i1'0' ; pitch bend range dc i1'0' ; slight vibrato dc i1'0' ; vibrato speed dc i1'0' ; spare AWaveCount9 dc i1'0' ; number of waveptrs for osc A BWaveCount9 dc i1'0' ; number of waveptrs for osc B WaveLists9 dc i1'0,0,0,0,0,0' ; topkey,addr,size,ctrl,pitch dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem this size supports dc i1'0,0,0,0,0,0' ; idem up to 5 wave lists dc i1'0,0,0,0,0,0' ; idem for each wave. dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem Instrument10 dc i1'0,0,0' ; enveloppe dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' ; fill out 8 stages with 0's dc i1'0' ; release segment - 1 dc i1'0' ; priority inc dc i1'0' ; pitch bend range dc i1'0' ; slight vibrato dc i1'0' ; vibrato speed dc i1'0' ; spare AWaveCount10 dc i1'0' ; number of waveptrs for osc A BWaveCount10 dc i1'0' ; number of waveptrs for osc B WaveLists10 dc i1'0,0,0,0,0,0' ; topkey,addr,size,ctrl,pitch dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem this size supports dc i1'0,0,0,0,0,0' ; idem up to 5 wave lists dc i1'0,0,0,0,0,0' ; idem for each wave. dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem Instrument11 dc i1'0,0,0' ; enveloppe dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' ; fill out 8 stages with 0's dc i1'0' ; release segment - 1 dc i1'0' ; priority inc dc i1'0' ; pitch bend range dc i1'0' ; slight vibrato dc i1'0' ; vibrato speed dc i1'0' ; spare AWaveCount11 dc i1'0' ; number of waveptrs for osc A BWaveCount11 dc i1'0' ; number of waveptrs for osc B WaveLists11 dc i1'0,0,0,0,0,0' ; topkey,addr,size,ctrl,pitch dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem this size supports dc i1'0,0,0,0,0,0' ; idem up to 5 wave lists dc i1'0,0,0,0,0,0' ; idem for each wave. dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem Instrument12 dc i1'0,0,0' ; enveloppe dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' ; fill out 8 stages with 0's dc i1'0' ; release segment - 1 dc i1'0' ; priority inc dc i1'0' ; pitch bend range dc i1'0' ; slight vibrato dc i1'0' ; vibrato speed dc i1'0' ; spare AWaveCount12 dc i1'0' ; number of waveptrs for osc A BWaveCount12 dc i1'0' ; number of waveptrs for osc B WaveLists12 dc i1'0,0,0,0,0,0' ; topkey,addr,size,ctrl,pitch dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem this size supports dc i1'0,0,0,0,0,0' ; idem up to 5 wave lists dc i1'0,0,0,0,0,0' ; idem for each wave. dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem Instrument13 dc i1'0,0,0' ; enveloppe dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' ; fill out 8 stages with 0's dc i1'0' ; release segment - 1 dc i1'0' ; priority inc dc i1'0' ; pitch bend range dc i1'0' ; slight vibrato dc i1'0' ; vibrato speed dc i1'0' ; spare AWaveCount13 dc i1'0' ; number of waveptrs for osc A BWaveCount13 dc i1'0' ; number of waveptrs for osc B WaveLists13 dc i1'0,0,0,0,0,0' ; topkey,addr,size,ctrl,pitch dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem this size supports dc i1'0,0,0,0,0,0' ; idem up to 5 wave lists dc i1'0,0,0,0,0,0' ; idem for each wave. dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem Instrument14 dc i1'0,0,0' ; enveloppe dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' ; fill out 8 stages with 0's dc i1'0' ; release segment - 1 dc i1'0' ; priority inc dc i1'0' ; pitch bend range dc i1'0' ; slight vibrato dc i1'0' ; vibrato speed dc i1'0' ; spare AWaveCount14 dc i1'0' ; number of waveptrs for osc A BWaveCount14 dc i1'0' ; number of waveptrs for osc B WaveLists14 dc i1'0,0,0,0,0,0' ; topkey,addr,size,ctrl,pitch dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem this size supports dc i1'0,0,0,0,0,0' ; idem up to 5 wave lists dc i1'0,0,0,0,0,0' ; idem for each wave. dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem Instrument15 dc i1'0,0,0' ; enveloppe dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' dc i1'0,0,0' ; fill out 8 stages with 0's dc i1'0' ; release segment - 1 dc i1'0' ; priority inc dc i1'0' ; pitch bend range dc i1'0' ; slight vibrato dc i1'0' ; vibrato speed dc i1'0' ; spare AWaveCount15 dc i1'0' ; number of waveptrs for osc A BWaveCount15 dc i1'0' ; number of waveptrs for osc B WaveLists15 dc i1'0,0,0,0,0,0' ; topkey,addr,size,ctrl,pitch dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem this size supports dc i1'0,0,0,0,0,0' ; idem up to 5 wave lists dc i1'0,0,0,0,0,0' ; idem for each wave. dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem dc i1'0,0,0,0,0,0' ; idem InstIndexTable dc i2'0,92,184,276,368,460,552,644,736,828,920,1012,1104,1196,1288,1380' FreqTable dc i2'$00,$16,$17,$18,$1A,$1B,$1D,$1E,$20,$22,$24,$26' ; Octave 0 dc i2'$29,$2B,$2E,$31,$33,$36,$3A,$3D,$41,$45,$49,$4D' ; Octave 1 dc i2'$52,$56,$5C,$61,$67,$6D,$73,$7A,$81,$89,$91,$9A' ; Octave 2 dc i2'$0A3,$0AD,$0B7,$0C2,$0CE,$0D9,$0E6,$0F4,$102,$112,$122,$133' ; Octave 3 dc i2'$146,$15A,$16F,$184,$19B,$1B4,$1CE,$1E9,$206,$225,$246,$269' ; Octave 4 dc i2'$28D,$2B4,$2DD,$309,$337,$368,$39C,$3D3,$40D,$44A,$48C,$4D1' ; Octave 5 dc i2'$51A,$568,$5BA,$611,$66E,$6D0,$737,$7A5,$81A,$895,$918,$9A2' ; Octave 6 dc i2'$A35,$AD0,$B75,$C23,$CDC,$D9F,$E6F,$F4B,$1033,$112A,$122F,$1344' ; Octave 7 dc i2'$1469,$15A0,$16E9,$1846,$19B7,$1B3F,$1CDE,$1E95,$2066,$2254,$245E,2688' ; Octave 8 END ******************************************************************* * * * Memoire reservee au stockage des notes et effects du sequenceur * * * ******************************************************************* PictureBuffer DATA PictureSeg HeaderBuffer ENTRY ds 600 END SequenceNotes DATA NoteSeg Notes ENTRY ds 25000 ; ds 65408 ; =14*64*73 END SeqEffects1 DATA EffectsSeg1 Effects1 ENTRY ds 25000 ; ds 65408 END SeqEffects2 DATA EffectsSeg2 Effects2 ENTRY ds 25000 ; ds 65408 END \ No newline at end of file diff --git a/picknpile/SOURCES.IIGS/SH.MACROS b/picknpile/SOURCES.IIGS/SH.MACROS new file mode 100644 index 0000000..162dd32 --- /dev/null +++ b/picknpile/SOURCES.IIGS/SH.MACROS @@ -0,0 +1 @@ + MACRO &lab _CompactMem &lab ldx #$1F02 jsl $E10000 MEND MACRO &lab _DisposeHandle &lab ldx #$1002 jsl $E10000 MEND MACRO &lab _MMShutDown &lab ldx #$0302 jsl $E10000 MEND MACRO &lab _MMStartUp &lab ldx #$0202 jsl $E10000 MEND MACRO &lab _NewHandle &lab ldx #$0902 jsl $E10000 MEND MACRO &lab pulllong &addr1,&addr2 &lab ANOP AIF C:&addr1=0,.a AIF C:&addr2=0,.b LCLC &C &C AMID &addr1,1,1 AIF "&C"="[",.zeropage pullword &addr1 sta &addr2 pullword &addr1+2 sta &addr2+2 MEXIT .a pullword pullword MEXIT .b pullword &addr1 pullword &addr1+2 MEXIT .zeropage ldy #&addr2 pullword &addr1,y ldy #&addr2+2 pullword &addr1,y MEND MACRO &lab pullword &SYSOPR &lab ANOP pla AIF C:&SYSOPR=0,.end sta &SYSOPR .end MEND MACRO &lab pushlong &addr,&offset &lab ANOP LCLC &C LCLC &REST &C AMID &addr,1,1 AIF "&C"="#",.immediate AIF "&C"="[",.zeropage AIF C:&offset=0,.nooffset AIF "&offset"="s",.stack pushword &addr+2,&offset pushword &addr,&offset MEXIT .nooffset pushword &addr+2 pushword &addr MEXIT .immediate &REST AMID &addr,2,L:&addr-1 dc I1'$F4',I2'(&REST)|-16' dc I1'$F4',I2'&REST' MEXIT .stack pushword &addr+2,s pushword &addr+2,s MEXIT .zeropage ldy #&offset+2 pushword &addr,y ldy #&offset pushword &addr,y MEND MACRO &lab pushword &SYSOPR &lab ANOP AIF C:&SYSOPR=0,.b LCLC &C &C AMID "&SYSOPR",1,1 AIF ("&C"="#").AND.(S:LONGA),.immediate lda &SYSOPR pha MEXIT .b pha MEXIT .immediate LCLC &REST LCLA &BL &BL ASEARCH "&SYSOPR"," ",1 AIF &BL>0,.a &BL SETA L:&SYSOPR+1 .a &REST AMID "&SYSOPR",2,&BL-2 dc I1'$F4',I2'&REST' MEND MACRO &lab _TLShutDown &lab ldx #$0301 jsl $E10000 MEND MACRO &lab _TLStartUp &lab ldx #$0201 jsl $E10000 MEND MACRO &lab _UnPackBytes &lab ldx #$2703 jsl $E10000 MEND MACRO &lab str &string &lab dc i1'L:&string',C'&string' MEND MACRO &lab _GetHandleSize &lab ldx #$1802 jsl $E10000 MEND MACRO &lab _MTStartUp &lab ldx #$0203 jsl $E10000 MEND MACRO &lab _IntSource &lab ldx #$2303 jsl $E10000 MEND MACRO &lab _IMShutDown &lab ldx #$030B jsl $E10000 MEND MACRO &lab _IMStartUp &lab ldx #$020B jsl $E10000 MEND MACRO &lab _Long2Dec &lab ldx #$270B jsl $E10000 MEND MACRO &lab _MTShutDown &lab ldx #$0303 jsl $E10000 MEND MACRO &lab _SetSoundMIRQV &lab ldx #$1208 jsl $E10000 MEND MACRO &lab _WriteRamBlock &lab ldx #$0908 jsl $E10000 MEND MACRO &lab _SoundShutDown &lab ldx #$0308 jsl $E10000 MEND MACRO &lab _SoundStartUp &lab ldx #$0208 jsl $E10000 MEND MACRO &lab _DelHeartBeat &lab ldx #$1303 jsl $E10000 MEND MACRO &lab _SetHeartBeat &lab ldx #$1203 jsl $E10000 MEND \ No newline at end of file diff --git a/swordofsodan/S1/CODE.S b/swordofsodan/S1/CODE.S index ab58019..c374eb4 100644 --- a/swordofsodan/S1/CODE.S +++ b/swordofsodan/S1/CODE.S @@ -14052,7 +14052,7 @@ L7DF9 INY LDA ($16),Y INY INY - JSR LEFAC + JSR LEFAC ; make mask LDA ($16),Y INY INY @@ -14123,7 +14123,7 @@ L7E80 STZ LEFD3 L7E83 LDA #$FFFF INY INY -L7E88 JSR LEFAC +L7E88 JSR LEFAC ; make mask LDA ($16),Y INY INY @@ -23849,12 +23849,12 @@ LEDEF DB $00 LEDF1 STA $00 STX $02 STY $26 - LDA #$0082 + LDA #$0082 ; BRL BRA LEE05 LEDFC STA $00 STX $02 STY $26 - LDA #$002C + LDA #$002C ; BIT LEE05 SEP #$20 STA LEE6C REP #$20 @@ -23900,7 +23900,7 @@ LEE2D LDY LEEDA INY INY STY $26 - LDY #$0003 + LDY #$0003 ; PHD TXA TCD CLC LDX #LEFA6 JSR LEF9A LDX #$FFFF @@ -23912,34 +23912,36 @@ LEE6C BRL LEEDC LDX #$0000 LEE76 LDA [$00],Y BEQ LEE8A - JSR LEFD5 + JSR LEFD5 ; calc value & mask STA $10 BIT LEDEF BMI LEE87 - JSR LEF75 -LEE87 JSR LEEFF -LEE8A INX + JSR LEF75 ; new line +LEE87 JSR LEEFF ; output code +LEE8A INX ; next word INX DEY DEY BPL LEE76 -LEE90 LDA $20 + +LEE90 LDA $20 ; move source pointer CLC ADC $00 STA $00 LDA #$0000 ADC $02 STA $02 - DEC $14 - BEQ LEEB5 + DEC $14 ; line-- + BEQ LEEB5 ; exit LDA LEDEF BPL LEEAA LDA #$0000 LEEAA ADC #$00A0 STA LEDEF STA LEDE9 - BRA LEE6C -LEEB5 LDY #$0001 + BRA LEE6C ; loop + +LEEB5 LDY #$0001 ; PLD RTL LDX #LEFAA JSR LEF9A DEC $6E @@ -23976,22 +23978,23 @@ LEEF4 INX CPY $20 BCC LEEE0 BRL LEE90 -LEEFF LDA $12 +LEEFF LDA $12 ; compare previous word CMP LEDEB BNE LEF0D LDA $10 ORA LEDE9 - BEQ LEF46 -LEF0D LDA #$00A9 + BEQ LEF46 ; same means only a STA is required + +LEF0D LDA #$00A9 ; LDA # STA [$08] INC $08 LDA $10 STA LEDE9 - BEQ LEF3B + BEQ LEF3B ; if no transparency, skip AND ORA STA [$08] INC $08 INC $08 - LDA #$0025 + LDA #$0025 ; AND $xxxx STA [$08] INC $08 TXA @@ -23999,8 +24002,8 @@ LEF0D LDA #$00A9 INC $08 LDA $12 STA LEDEB - BEQ LEF46 - LDA #$0009 + BEQ LEF46 ; if transparent, skip ORA + LDA #$0009 ; ORA # STA [$08] INC $08 LEF3B LDA $12 @@ -24008,16 +24011,16 @@ LEF3B LDA $12 STA [$08] INC $08 INC $08 -LEF46 LDA #$0085 +LEF46 LDA #$0085 ; STA $ STA [$08] INC $08 TXA STA [$08] INC $08 LDA $08 - CMP #$FFF0 + CMP #$FFF0 ; next bank BCC LEF74 - LDA #$005C + LDA #$005C ; JMPL $ STA [$08] INC $08 LDA #$0000 @@ -24033,7 +24036,7 @@ LEF46 LDA #$0085 LEF74 RTS LEF75 PHA - LDA #$697B + LDA #$697B ; TDC ADC STA [$08] INC $08 INC $08 @@ -24041,7 +24044,7 @@ LEF75 PHA STA [$08] INC $08 INC $08 - LDA #$005B + LDA #$005B ; TCD STA [$08] INC $08 STA LEDE9 diff --git a/swordofsodan/SOS2018.2mg b/swordofsodan/SOS2018.2mg index 122a01a5a7b66c23ec3dc19ab06ffe2da284fb15..06ab4fb6319600681db4b337e6623b33e0b9b186 100644 GIT binary patch delta 151 zcmWN=TMB|e0EST}Gjpu0?5dTft*vFmJp9lO0{0O}J&DV46Z#!Et^1gkPDT@Xn#$Kq zf#wRo_E(#}`PVjhn*QAlmJt_Ra>bZyZn$N_9rrx&$P>>@neoCaZ_HWn&XQHr4Ud-_ E0s4thng9R* delta 151 zcmWN=OA3Ne0ESU+nc6ig%d)c49&2k2j^Yk}Xa|A&2qZ`1#`HUII`=glos1@$%F|4~ z0)?9Y?7ucu)7Cb4nd;LImJt_>x#Ws#Cfsn#lsoR3@xUWb%z5U8R~9UJ