************************************************************************ * * * GAME SYSTEM //e * * --------------- * * * * (c) Atreid Concept SA Version 0.2 02/03/91 * ************************************************************************ ************************************************************************ GSInit anop rts ************************************************************************ ReadMouse anop ;a --> 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'