antoine-source/labellezohra/sources/game.s

1947 lines
25 KiB
ArmAsm
Raw Normal View History

2023-08-28 16:01:04 +00:00
*
* La Belle Zohra
*
* (c) 1992, Fran<EFBFBD>ois Coulon
* (c) 2023, Antoine Vignau & Olivier Zardini
*
mx %00
2023-09-05 20:20:22 +00:00
*-----------------------
soundctl = $3c ; $c03c
sounddata = $3d ; $c03d
soundadrl = $3e ; $c03e
soundadrh = $3f ; $c03f
2023-08-28 16:01:04 +00:00
*-----------------------
* macros
*-----------------------
@carre mac
PushLong ]1
PushWord ]2
PushWord ]3
PushWord ]4
jsr carre
eom
2023-08-30 14:42:20 +00:00
@t mac
lda ]1
ldy ]2
jsr t
eom
@cree_fenetre mac
lda ]1
ldx ]2
jsr cree_fenetre
eom
*-----------------------
* LOAD_TEXTE - OK
*-----------------------
* load_texte
load_texte
lda #pTXT
sta proOPEN+4 ; filename
jsl GSOS
dw $2010
adrl proOPEN
bcs lt_err2
lda proOPEN+2
sta proREAD+2
sta proCLOSE+2
ldy proEOF
sty proREAD+8
ldx proEOF+2
stx proREAD+10
pha
pha
phx
phy
PushWord myID
PushWord #%11000000_00001100
PushLong #0
_NewHandle
phd
tsc
tcd
lda [3]
2024-02-03 21:58:16 +00:00
sta ptrTEXTES
2023-08-30 14:42:20 +00:00
sta proREAD+4
ldy #2
lda [3],y
2024-02-03 21:58:16 +00:00
sta ptrTEXTES+2
2023-08-30 14:42:20 +00:00
sta proREAD+6
pld
pla
pla
bcs lt_err1
jsl GSOS
dw $2012
adrl proREAD
lt_err1 jsl GSOS
dw $2014
adrl proCLOSE
clc
lt_err2 rts
2023-08-30 07:02:33 +00:00
*-----------------------
2024-02-05 22:40:05 +00:00
* TEST_FIN - OK
2023-08-30 07:02:33 +00:00
*-----------------------
2024-02-05 22:40:05 +00:00
* test_fin = a-t-on parcouru tous les textes ?
2023-08-30 07:02:33 +00:00
2024-02-05 22:40:05 +00:00
test_fin lda textes_encore_presents
beq tf_gagne
2024-02-04 20:08:00 +00:00
rts
2024-02-05 22:40:05 +00:00
tf_gagne lda #nombre_objets+1
sta objet_selectionne
lda #nombre_paragraphes+1
sta texte_selectionne
jmp cree_fenetre
2024-02-04 20:08:00 +00:00
*-----------------------
2024-02-05 19:21:30 +00:00
* TEST_OBJETS
2024-02-04 20:08:00 +00:00
*-----------------------
2024-02-05 19:21:30 +00:00
* test_objets = affiche les objets possibles
2024-02-04 20:08:00 +00:00
2024-02-05 19:21:30 +00:00
test_objets stz textes_encore_presents
sep #$30
ldx #1
]lp stz icone_objets,x
inx
cpx #nombre_objets
bcc ]lp
beq ]lp
ldx #1
]lp lda deja_lu,x
cmp #FALSE
bne to_1
ldy condition,x
lda indicateur,y
cmp #TRUE
bne to_1
ldy objet,x
lda #TRUE
sta icone_objets,y
sta textes_encore_presents
to_1 inx
cpx #nombre_paragraphes
bcc ]lp
beq ]lp
rep #$30
*-------- Affichage des objets
2024-02-04 20:08:00 +00:00
2024-02-06 19:49:01 +00:00
affiche_objets
2024-02-05 19:21:30 +00:00
ldx #1
]lp phx
jsr affiche_objet
plx
inx
cpx #nombre_objets
bcc ]lp
beq ]lp
rts
*-----------------------
* GESTION DES OBJETS
*-----------------------
test_objet stz objet_selectionne
ldx #1 ; from 1
]lp lda icone_objets,x
and #$ff
cmp #TRUE
bne objet_ko
txa
2023-08-30 07:02:33 +00:00
asl
2024-02-05 19:21:30 +00:00
tay
2023-08-30 07:02:33 +00:00
lda taskWHERE+2 ; compare le X
2024-02-05 19:21:30 +00:00
cmp objet_x,y
bcc objet_ko
lda objet_xx,y
2023-08-30 07:02:33 +00:00
cmp taskWHERE+2
2024-02-05 19:21:30 +00:00
bcc objet_ko
2023-08-30 07:02:33 +00:00
lda taskWHERE ; et le Y
2024-02-05 19:21:30 +00:00
cmp objet_y,y
bcc objet_ko
lda objet_yy,y
2023-08-30 07:02:33 +00:00
cmp taskWHERE
2024-02-05 19:21:30 +00:00
bcc objet_ko
stx objet_selectionne ; on a notre objet
2024-02-04 20:08:00 +00:00
clc
2023-08-30 07:02:33 +00:00
rts
2024-02-05 19:21:30 +00:00
objet_ko inx
cpx #nombre_objets
2023-08-30 07:02:33 +00:00
bcc ]lp
2024-02-04 20:08:00 +00:00
beq ]lp
sec
2023-08-30 07:02:33 +00:00
rts
*---
2024-02-05 19:21:30 +00:00
affiche_objet ; X is object
txa
asl
tay
lda objet_y,y ; x is 2..4..6..8
sta iconToSourceRect
sta iconToDestPoint
lda objet_x,y
sta iconToSourceRect+2
sta iconToDestPoint+2
lda objet_yy,y
sta iconToSourceRect+4
lda objet_xx,y
sta iconToSourceRect+6
lda icone_objets,x
and #$ff
cmp #TRUE
bne efface_objet
PushLong #iconParamPtr
_PaintPixels
rts
2023-08-30 07:02:33 +00:00
2024-02-05 19:21:30 +00:00
efface_objet
2024-02-04 20:08:00 +00:00
PushLong #fondParamPtr
2023-08-30 07:02:33 +00:00
_PaintPixels
2024-02-05 19:21:30 +00:00
rts
2023-08-30 07:02:33 +00:00
2024-02-05 19:21:30 +00:00
*-----------------------
* TEST_PECHES
*-----------------------
* test_peches = affiche les peches possibles
2023-08-30 07:02:33 +00:00
2024-02-05 19:21:30 +00:00
test_peches sep #$30
ldx #1
]lp stz icone_peches,x
inx
cpx #nombre_peches
bcc ]lp
beq ]lp
ldx #1
]lp lda objet,x
cmp objet_selectionne
bne tp_1
lda deja_lu,x
cmp #FALSE
bne tp_1
ldy condition,x
lda indicateur,y
cmp #TRUE
bne tp_1
ldy peche,x
lda #TRUE
sta icone_peches,y
tp_1 inx
cpx #nombre_paragraphes
bcc ]lp
beq ]lp
rep #$30
*-------- Affichage des peches
2024-02-06 19:49:01 +00:00
affiche_peches
2024-02-05 19:21:30 +00:00
ldx #1
]lp phx
jsr affiche_peche
plx
inx
cpx #nombre_peches
bcc ]lp
beq ]lp
rts
*-----------------------
* GESTION DES ICONES DES PECHES
*-----------------------
test_peche stz peche_selectionne
ldx #1 ; from 1
]lp lda icone_peches,x
and #$ff
cmp #TRUE
bne peche_ko
txa
asl
tay
lda taskWHERE+2 ; compare le X
cmp peche_x,y
bcc peche_ko
lda peche_xx,y
cmp taskWHERE+2
bcc peche_ko
lda taskWHERE ; et le Y
cmp peche_y,y
bcc peche_ko
lda peche_yy,y
cmp taskWHERE
bcc peche_ko
stx peche_selectionne ; on a notre peche
clc
rts
peche_ko inx
cpx #nombre_peches
bcc ]lp
beq ]lp
sec
rts
2023-08-30 07:02:33 +00:00
*---
2024-02-05 19:21:30 +00:00
affiche_peche ; X is object
txa
2023-08-30 07:02:33 +00:00
asl
2024-02-05 19:21:30 +00:00
tay
lda peche_y,y ; x is 2..4..6..8
2023-08-30 07:02:33 +00:00
sta iconToSourceRect
sta iconToDestPoint
2024-02-05 19:21:30 +00:00
lda peche_x,y
2023-08-30 07:02:33 +00:00
sta iconToSourceRect+2
sta iconToDestPoint+2
2024-02-05 19:21:30 +00:00
lda peche_yy,y
2023-08-30 07:02:33 +00:00
sta iconToSourceRect+4
2024-02-05 19:21:30 +00:00
lda peche_xx,y
2023-08-30 07:02:33 +00:00
sta iconToSourceRect+6
2024-02-05 19:21:30 +00:00
lda icone_peches,x
and #$ff
cmp #TRUE
bne efface_peche
PushLong #iconParamPtr
_PaintPixels
rts
efface_peche
PushLong #fondParamPtr
_PaintPixels
2023-08-30 07:02:33 +00:00
rts
2024-02-05 19:21:30 +00:00
*-----------------------
* LES DONNEES
*-----------------------
2023-08-30 07:02:33 +00:00
*---
fondParamPtr
adrl fondToSourceLocInfo
2024-02-05 19:21:30 +00:00
adrl contentToSourceLocInfo
2023-08-30 07:02:33 +00:00
adrl iconToSourceRect
adrl iconToDestPoint
dw $0000 ; mode copy
ds 4
iconParamPtr
adrl iconToSourceLocInfo
2024-02-05 19:21:30 +00:00
adrl contentToSourceLocInfo
2023-08-30 07:02:33 +00:00
adrl iconToSourceRect
adrl iconToDestPoint
dw $0000 ; mode copy
ds 4
fondToSourceLocInfo
dw mode_320 ; mode 320
ds 4 ; ptrFOND - $0000 on entry, high set after _NewHandle
dw 160
2024-02-04 20:08:00 +00:00
dw 0,0,200,320
2024-02-05 14:24:14 +00:00
2023-08-30 07:02:33 +00:00
iconToSourceLocInfo
dw mode_320 ; mode 320
2024-02-05 19:21:30 +00:00
adrl $8000 ; ptrICON - $8000 on entry, high set after ptrFOND
2023-08-30 07:02:33 +00:00
dw 160
2024-02-04 20:08:00 +00:00
dw 0,0,200,320
2024-02-05 19:21:30 +00:00
2023-08-30 07:02:33 +00:00
iconToSourceRect
dw 3,0,109,272
iconToDestPoint
dw 3,0
2024-02-05 19:21:30 +00:00
contentToSourceLocInfo
dw mode_320 ; mode 320
adrl $8000 ; ptrCONTENT - $8000 on entry, high set after ptrUNPACK
dw 160
dw 0,0,200,320
contentRect
dw 0,0,200,320
2023-12-01 20:56:37 +00:00
2023-08-28 16:01:04 +00:00
*-----------------------
* set_language
*-----------------------
set_language
2024-02-03 18:51:11 +00:00
PushWord #0
PushWord #$29
2023-08-28 16:01:04 +00:00
_ReadBParam
pla
cmp #20
bcc st_ok
rts
* index
* TEXTES : +16
st_ok jsr st_setit ; try IIgs language
bcc st_ok99
lda #0 ; if not, try EN US
jsr st_setit
bcc st_ok99
lda #2 ; it not, force FR - It always exists
jsr st_setit
st_ok99 rts
*---
st_setit sta saveLANGUAGE
asl
tax
lda tblLANG,x
2023-08-30 14:42:20 +00:00
sta pTXT+16
2023-08-28 16:01:04 +00:00
2024-02-03 21:58:16 +00:00
lda #pTXT ; check file exists
2023-08-28 16:01:04 +00:00
sta proOPEN+4
jsl GSOS
dw $2010
adrl proOPEN
bcs st_setit99
lda proOPEN+2
sta proCLOSE+2
jsl GSOS
dw $2014
adrl proCLOSE
st_setit99 rts
*---
tblLANG asc 'us' ; 0
asc 'uk'
asc 'fr' ; 2
asc 'nl'
asc 'es' ; 4
asc 'it'
asc 'de' ; 6
asc 'se'
asc 'us'
asc 'ca'
asc 'nl'
asc 'he'
asc 'jp'
asc 'ar'
asc 'gr'
asc 'tr'
asc 'fi'
asc 'ta'
asc 'hi'
asc 'us' ; 19
*-----------------------
2024-02-05 22:40:05 +00:00
* CHOIX D'ENTREE - OK
2023-08-28 16:01:04 +00:00
*-----------------------
2024-02-05 22:40:05 +00:00
antoine PushWord #$ffff
2023-08-30 14:42:20 +00:00
_ClearScreen
2024-02-03 21:58:16 +00:00
@t #strMENU1;#10
@t #strMENU2;#12
@t #strMENU3;#14
2024-02-03 18:51:11 +00:00
2024-02-05 19:21:30 +00:00
pha
pha
_TickCount
pla
clc
adc #5*60 ; 5 secondes
sta theTICK
pla
adc #0
sta theTICK+2
]lp lda taskWHEN+2 ; sort au bout de 5 secondes
cmp theTICK+2
bcc toinet
lda taskWHEN
cmp theTICK
bcs leJEU
toinet pha
2024-02-03 18:51:11 +00:00
PushWord #%00000000_00001010
PushLong #taskREC
_GetNextEvent
pla
beq ]lp
lda taskREC ; une touche ?
cmp #keyDownEvt
bne ]lp
lda taskMESSAGE ; entre 0 et 9 ?
cmp #'1'
beq laZIK
cmp #'2'
2024-02-03 21:58:16 +00:00
beq laPREZ
cmp #'3'
2024-02-03 18:51:11 +00:00
bne ]lp
2024-02-05 19:21:30 +00:00
leJEU rts
2024-02-03 21:58:16 +00:00
laZIK jsr musique
laPREZ jmp presentation
2024-02-05 19:21:30 +00:00
*-----------
theTICK ds 4 ; le tick <20> atteindre (tick + 5x60)
2023-08-28 16:01:04 +00:00
*-----------------------
2023-08-30 14:42:20 +00:00
* INIT - OK
2023-08-28 16:01:04 +00:00
*-----------------------
2023-08-30 14:42:20 +00:00
* init
2023-08-28 16:01:04 +00:00
2024-02-05 22:40:05 +00:00
init jsr init_icones
jsr init_souris
jsr load_texte
jsr init_texte
jmp mouse_on
2023-08-28 16:01:04 +00:00
*-----------------------
2023-08-30 14:42:20 +00:00
* INIT2 - OK
2023-08-28 16:01:04 +00:00
*-----------------------
2024-02-05 22:40:05 +00:00
init2 sep #$20
2024-02-04 12:07:16 +00:00
2024-02-05 22:40:05 +00:00
ldx #FIN_DATA-DEBUT_DATA
]lp stz DEBUT_DATA,x
dex
bne ]lp
lda #TRUE ; l'indicateur 0 est toujours vrai
2024-02-04 12:07:16 +00:00
sta indicateur,x
rep #$20
2024-02-05 22:40:05 +00:00
rts
2023-08-28 16:01:04 +00:00
*-----------------------
2024-02-04 12:07:16 +00:00
* INIT_ICONES - OK
*-----------------------
* init_icones
init_icones
@loadfile #pFOND;ptrFOND
@loadfile #pICONES;ptrICONES
2024-02-05 14:24:14 +00:00
2024-02-05 19:21:30 +00:00
PushLong ptrFOND
2024-02-05 14:24:14 +00:00
PushLong ptrCONTENT
PushLong #32768
_BlockMove
2024-02-05 19:21:30 +00:00
2024-02-05 14:24:14 +00:00
PushLong #0
PushLong #0
PushLong #wMAIN
PushLong #PAINTMAIN
PushLong #0
PushWord #refIsPointer
PushLong #theWINDOW
PushWord #$800e
_NewWindow2
PullLong wiMAIN
2024-02-04 12:07:16 +00:00
rts
*-----------------------
* INIT_SOURIS - OK
2023-08-28 16:01:04 +00:00
*-----------------------
2024-02-04 12:07:16 +00:00
* init_souris
2023-08-28 16:01:04 +00:00
2024-02-04 12:07:16 +00:00
init_souris
PushLong #monCURSEUR
_SetCursor
2023-08-28 16:01:04 +00:00
rts
*-----------------------
2024-02-04 12:07:16 +00:00
* INIT_TEXTE
2023-08-28 16:01:04 +00:00
*-----------------------
2024-02-04 12:07:16 +00:00
* init_texte
2023-08-28 16:01:04 +00:00
2024-02-04 12:07:16 +00:00
init_texte
lda ptrTEXTES
sta Debut
lda ptrTEXTES+2
sta Debut+2
ldx #1
2023-08-30 14:42:20 +00:00
sep #$20
2024-02-04 12:07:16 +00:00
]lp lda [Debut] ; un paragraphe d<>bute toujours par *
it_1 cmp #'*'
beq it_ok
jsr it_next
bra it_1
2024-02-05 10:39:51 +00:00
it_ok jsr it_fin ; le pointeur de fin
jsr it_objpec ; enregistre le *
2024-02-04 12:07:16 +00:00
jsr it_condit ; le &, condition
jsr it_conseq ; le =, consequence
jsr it_texte ; le pointeur du texte
2023-08-31 20:12:41 +00:00
2023-08-30 14:42:20 +00:00
inx
2024-02-05 22:40:05 +00:00
cpx #nombre_paragraphes+2 ; pour traiter la fin
2023-08-30 14:42:20 +00:00
bcc ]lp
2024-02-04 12:07:16 +00:00
beq ]lp
2023-08-30 14:42:20 +00:00
rep #$20
2023-08-28 16:01:04 +00:00
rts
2024-02-04 12:07:16 +00:00
mx %10
2023-08-28 16:01:04 +00:00
2024-02-04 12:07:16 +00:00
*--- * - objet + peche (tjs 2)
2023-08-28 16:01:04 +00:00
2024-02-04 12:07:16 +00:00
it_objpec jsr it_next
sec
sbc #'0'
sta objet,x
jsr it_next
sec
sbc #'0'
sta peche,x
jmp it_return
2023-08-28 16:01:04 +00:00
2024-02-04 12:07:16 +00:00
*--- & - condition
2023-08-28 16:01:04 +00:00
2024-02-04 12:07:16 +00:00
it_condit jsr it_next
sec
sbc #'0'
sta condition,x
jsr it_next
cmp #' '
beq it_condit1 ; c'<27>tait bien une unit<69>
cmp #chrRET
beq it_condit1
sec ; c'<27>tait une dizaine
sbc #'0'
clc
adc #10
sta condition,x
it_condit1 jmp it_return
2023-08-28 16:01:04 +00:00
2024-02-04 12:07:16 +00:00
*--- =
2023-08-30 14:42:20 +00:00
2024-02-04 12:07:16 +00:00
it_conseq jsr it_next
sec
sbc #'0'
sta consequence,x
jsr it_next
cmp #' '
beq it_conseq1 ; c'<27>tait bien une unit<69>
cmp #chrRET
beq it_conseq1
sec ; c'<27>tait une dizaine
sbc #'0'
clc
adc #10
sta consequence,x
it_conseq1 ; fall into it_return
*--- positionnne juste apr<EFBFBD>s un return
it_return lda [Debut]
]lp cmp #chrRET
beq it_return1
jsr it_next
bra ]lp
it_return1 ; fall into it_next
*--- next value
it_next inc Debut
bne it_next1
inc Debut+1
bne it_next1
inc Debut+2
it_next1 lda [Debut]
2023-08-28 16:01:04 +00:00
rts
2024-02-05 10:39:51 +00:00
*--- fin du texte (adresse d'*)
it_fin cpx #1
bne it_fin1
rts
it_fin1 rep #$20
txa
asl
asl
tay
lda Debut
sec
sbc texteDEBUT-4,y
2024-02-05 19:21:30 +00:00
dec ; on enl<6E>ve 1 <20> la fin
2024-02-05 10:39:51 +00:00
sta texteLEN-4,y
sep #$20
rts
mx %00
2024-02-04 12:07:16 +00:00
*--- adresse du texte
2023-08-28 16:01:04 +00:00
2024-02-04 12:07:16 +00:00
it_texte rep #$20
txa
asl
asl
tay
lda Debut
sta texteDEBUT,y
lda Debut+2
sta texteDEBUT+2,y
sep #$20
2023-08-28 16:01:04 +00:00
rts
2024-02-04 12:07:16 +00:00
mx %00
2023-08-28 16:01:04 +00:00
2024-02-04 12:07:16 +00:00
*-----------------------
* RETOUR
*-----------------------
* retour = le texte est lu
2023-08-30 14:42:20 +00:00
2024-02-04 12:07:16 +00:00
retour sep #$30
2023-08-30 14:42:20 +00:00
2024-02-04 12:07:16 +00:00
ldx texte_selectionne
lda #TRUE
sta deja_lu,x
ldy consequence,x
sta indicateur,y
rep #$30
2023-08-28 16:01:04 +00:00
rts
*-----------------------
2024-02-04 12:07:16 +00:00
* AIGUILLAGE
2023-08-28 16:01:04 +00:00
*-----------------------
2024-02-04 12:07:16 +00:00
* aiguillage = le texte <EFBFBD> afficher
aiguillage stz texte_selectionne
2023-08-28 16:01:04 +00:00
2024-02-04 12:07:16 +00:00
sep #$30
ldx #1
]lp lda objet,x
cmp objet_selectionne
bne ai_next
lda peche,x
cmp peche_selectionne
bne ai_next
lda deja_lu,x
cmp #FALSE
bne ai_next
ldy condition,x
lda indicateur,y
cmp #TRUE
bne ai_next
lda texte_selectionne
bne ai_next
2024-02-04 20:08:00 +00:00
stx texte_selectionne ; on a trouv<75> un texte
2024-02-04 12:07:16 +00:00
ai_next inx
cpx #nombre_paragraphes
bcc ]lp
beq ]lp
rep #$30
2024-02-05 08:23:26 +00:00
lda texte_selectionne
bne ai_affiche
2023-08-28 16:01:04 +00:00
rts
2024-02-05 19:21:30 +00:00
ai_affiche sep #$20
lda objet_selectionne
ora #'0'
sta pIMAGE+19
rep #$20
@loadfile #pIMAGE;ptrCONTENT
jmp cree_fenetre
2023-08-28 16:01:04 +00:00
*-----------------------
* PRESENTATION - OK
*-----------------------
* presentation
presentation
2024-02-03 21:58:16 +00:00
lda #1
]lp sta index
2023-08-28 16:01:04 +00:00
PushWord #0
_ClearScreen
2024-02-03 21:58:16 +00:00
lda index
2023-08-28 16:01:04 +00:00
dec
asl
tax
jsr (tbl_pres,x)
2024-02-03 21:58:16 +00:00
lda #2
jsr nowWAIT
lda index
inc
2024-02-04 12:07:16 +00:00
cmp #nombre_objets
2024-02-03 21:58:16 +00:00
bcc ]lp
2024-02-04 12:07:16 +00:00
beq ]lp
2024-02-03 21:58:16 +00:00
rts
2023-08-28 16:01:04 +00:00
*---
tbl_pres da pr_case_1
da pr_case_2
da pr_case_3
da pr_case_4
da pr_case_5
da pr_case_6
da pr_case_7
da pr_case_8
*---
2023-08-30 14:42:20 +00:00
pr_case_1 @carre #prSTR11;#100;#80;#$0771
2023-08-28 16:01:04 +00:00
@carre #prSTR12;#100;#120;#$0774
2023-08-30 14:42:20 +00:00
PushWord #15
_SetForeColor
PushWord #0
_SetBackColor
@t #prSTR13;#21
@t #prSTR14;#22
@t #prSTR15;#23
2023-08-28 16:01:04 +00:00
rts
2023-08-30 14:42:20 +00:00
pr_case_2 @carre #prSTR21;#25;#20;#$0437
2023-08-28 16:01:04 +00:00
rts
2023-08-30 14:42:20 +00:00
pr_case_3 @carre #prSTR31;#25;#180;#$0275
2023-08-28 16:01:04 +00:00
rts
2023-08-30 14:42:20 +00:00
pr_case_4 @carre #prSTR41;#100;#0;#$0743
2023-08-28 16:01:04 +00:00
rts
2023-08-30 14:42:20 +00:00
pr_case_5 @carre #prSTR51;#150;#20;#$0743
2023-08-28 16:01:04 +00:00
@carre #prSTR52;#50;#100;#$0743
@carre #prSTR53;#70;#180;#$0177
rts
2023-08-30 14:42:20 +00:00
pr_case_6 @carre #prSTR61;#0;#100;#$0607
2023-08-28 16:01:04 +00:00
@carre #prSTR62;#20;#150;#$0607
rts
2023-08-30 14:42:20 +00:00
pr_case_7 @carre #prSTR71;#0;#99;#$0073
PushWord #15
_SetForeColor
PushWord #0
_SetBackColor
@t #prSTR72;#20
@t #prSTR73;#21
@t #prSTR74;#22
@t #prSTR75;#23
2023-08-28 16:01:04 +00:00
rts
2023-08-30 14:42:20 +00:00
pr_case_8 @carre #prSTR81;#100;#180;#$0555
2023-08-28 16:01:04 +00:00
rts
*---
prSTR11 str 'la belle zohra'
prSTR12 str '(morceaux de bravoure)'
prSTR13 str 'fran'8d'ois coulon'
2023-08-30 14:42:20 +00:00
prSTR14 str 'les logiciels d'27'en face 1992'
prSTR15 str 'reproduction interdite'
2023-08-28 16:01:04 +00:00
prSTR21 str 'graphismes faustino ribeiro'
prSTR31 str 'programmation pascal piat'
prSTR41 str 'musique erik ecqier'
prSTR51 str 'un grand merci '88':'
prSTR52 str 'emmanuel talmy'
prSTR53 str 'sans qui ce logiciel... etc.'
2023-08-30 14:42:20 +00:00
prSTR61 str 'miss zohra c'8e'lestibus est habill'8e'e...'
2023-08-28 16:01:04 +00:00
prSTR62 str '...par aristide aristibus'
prSTR71 str 8e'crit et r'8e'alis'8e' par fran'8d'ois coulon'
2023-08-30 14:42:20 +00:00
prSTR72 str 'Version Apple IIgs'
prSTR73 str 'par'
prSTR74 str 'Brutal Deluxe Software'
prSTR75 str 'Antoine Vignau & Olivier Zardini'
2023-08-28 16:01:04 +00:00
prSTR81 str 88' la famille paspire...'
*-----------------------
* CARRE
*-----------------------
* carre(texte$,x%,y%,couleur$)
* 3,s word : RGB color
* 5,s word : y
* 7,s word : x
* 9,s long : @text
* couleur$ est pour le carr<EFBFBD>
* le texte est toujours en jaune
2023-08-30 14:42:20 +00:00
carre lda 5,s
2023-08-28 16:01:04 +00:00
sta carreRECT
clc
adc #12
sta carreRECT+4
lda 7,s
sta carreRECT+2
clc
adc #12
sta carreRECT+6
lda 9,s
sta dpFROM
lda 11,s
sta dpFROM+2
2023-08-30 14:42:20 +00:00
*--- la couleur du GS
lda 3,s ; R
and #$0f00
asl
sta carreRGB
lda 3,s ; G
and #$00f0
asl
ora carreRGB
sta carreRGB
lda 3,s ; B
and #$000f
asl
ora carreRGB
sta carreRGB
*--- draw square
PushWord #0 ; on met du RGB
PushWord index
PushWord carreRGB
_SetColorEntry
ldx index
lda carreRECT ; la couleur si > 100
cmp #100+1
bcs carre_1
ldx #8 ; le rose sinon
carre_1 phx
_SetSolidPenPat
lda carreRECT+2
pha
lda carreRECT
pha
_MoveTo
PushLong #carreRECT
_PaintRect
*--- print text in bold typeface
pha
_GetTextFace
pha
_GetForeColor
pha
_GetBackColor
PushWord #%00000000_00000001 ; bold
_SetTextFace
PushWord #15
_SetForeColor
PushWord #0
_SetBackColor
lda carreRECT+2
clc
adc #15
pha
lda carreRECT
clc
adc #8
pha
_MoveTo
PushLong dpFROM
_DrawString
2023-08-28 16:01:04 +00:00
2023-08-30 14:42:20 +00:00
_SetBackColor
_SetForeColor
_SetTextFace ; restore
2023-08-28 16:01:04 +00:00
carreEXIT lda 1,s
plx
plx
plx
plx
plx
sta 1,s
rts
*---
2023-08-30 14:42:20 +00:00
carreRGB ds 2 ; couleur du carre (4 bits)
2023-08-28 16:01:04 +00:00
carreRECT ds 2 ; y0
ds 2 ; x0
ds 2 ; y0+12
ds 2 ; y0+12
2023-08-30 14:42:20 +00:00
2023-08-28 16:01:04 +00:00
*-----------------------
2024-02-05 10:39:51 +00:00
* CREE_FENETRE - OK
2023-08-28 16:01:04 +00:00
*-----------------------
* cree_fenetre(objet%,paragraphe%)
2023-08-30 14:42:20 +00:00
* A : objet
* X : paragraphe
2023-08-28 16:01:04 +00:00
2024-02-05 19:21:30 +00:00
delta_line = 2
delta_ctl = 6
2023-08-28 16:01:04 +00:00
cree_fenetre
2024-02-05 10:39:51 +00:00
2024-02-05 19:21:30 +00:00
* 1. les coordonnees de la fenetre et du controle
2024-02-05 08:23:26 +00:00
lda objet_selectionne
asl
tax
lda fenetre_y,x
2024-02-05 19:21:30 +00:00
sta fenetreRECT
clc
adc #delta_line
sta frameRECT
adc #delta_ctl
2024-02-05 14:24:14 +00:00
sta teRECT
2024-02-05 08:23:26 +00:00
lda fenetre_x,x
2024-02-05 19:21:30 +00:00
sta fenetreRECT+2
clc
adc #delta_line
sta frameRECT+2
adc #delta_ctl
2024-02-05 14:24:14 +00:00
sta teRECT+2
2024-02-05 08:23:26 +00:00
lda fenetre_yy,x
2024-02-05 19:21:30 +00:00
sta fenetreRECT+4
sec
sbc #delta_line
sta frameRECT+4
sbc #delta_ctl
2024-02-05 14:24:14 +00:00
sta teRECT+4
2024-02-05 10:39:51 +00:00
lda fenetre_xx,x
2024-02-05 19:21:30 +00:00
sta fenetreRECT+6
sec
sbc #delta_line
sta frameRECT+6
sbc #delta_ctl
2024-02-05 14:24:14 +00:00
sta teRECT+6
2024-02-05 10:39:51 +00:00
2024-02-05 22:40:05 +00:00
* 2. on ajoute le texte et sa longueur
2024-02-05 08:23:26 +00:00
lda texte_selectionne
asl
asl
tax
lda texteDEBUT,x
sta teTEXT
lda texteDEBUT+2,x
sta teTEXT+2
2024-02-05 10:39:51 +00:00
lda texteLEN,x
2024-02-05 08:23:26 +00:00
sta teLEN
2024-02-05 10:39:51 +00:00
2024-02-05 22:40:05 +00:00
* 3. on affiche le tout
2024-02-05 14:24:14 +00:00
2024-02-05 10:39:51 +00:00
PushLong #0
2024-02-05 14:24:14 +00:00
PushLong wiMAIN
2024-02-05 10:39:51 +00:00
PushWord #refIsPointer
2024-02-05 14:24:14 +00:00
PushLong #teCONTROL
_NewControl2
PullLong haCONTROL
2023-08-28 16:01:04 +00:00
rts
*-----------------------
2023-08-30 14:42:20 +00:00
* MOUSE_ON - OK
2023-08-28 16:01:04 +00:00
*-----------------------
2023-08-30 14:42:20 +00:00
* mouse_on
2023-08-28 16:01:04 +00:00
2024-02-04 12:07:16 +00:00
mouse_on _ShowCursor
2023-08-28 16:01:04 +00:00
rts
*-----------------------
2023-08-30 14:42:20 +00:00
* MOUSE_OFF - OK
2023-08-28 16:01:04 +00:00
*-----------------------
2023-08-30 14:42:20 +00:00
* mouse_off
2023-08-28 16:01:04 +00:00
2024-02-04 12:07:16 +00:00
mouse_off _HideCursor
2023-08-28 16:01:04 +00:00
rts
*-----------------------
2023-09-02 20:47:17 +00:00
* MUSIQUE - OK
2023-08-28 16:01:04 +00:00
*-----------------------
2023-09-02 20:47:17 +00:00
* musique
2023-09-03 20:10:44 +00:00
musique lda fgSND ; can we play?
bne mu_1 ; yes
rts ; no
2024-02-06 19:49:01 +00:00
mu_1 jsr ensoniq_stopall
jsr init_musique
2023-08-28 16:01:04 +00:00
2023-09-02 20:47:17 +00:00
lda #1
sta i
]lp lda i
2024-02-03 18:51:11 +00:00
jsr rythme ; charge le rythme
2023-09-03 20:10:44 +00:00
jsr rythme_joue ; joue le rythme
2023-09-02 20:47:17 +00:00
lda i
2024-02-03 18:51:11 +00:00
jsr charge_son ; charge les sons
jsr clavier_sonore ; joue les sons
2024-02-06 19:49:01 +00:00
php
jsr ensoniq_stopall
plp
2023-09-03 20:10:44 +00:00
bcs mu_exit ; si *, on quitte le clavier sonore
2023-09-02 20:47:17 +00:00
jsr nettoie_musique
inc i
lda i
cmp #5
bcc ]lp
beq ]lp
2023-09-05 20:20:22 +00:00
mu_exit jmp fin_musique
2023-08-28 16:01:04 +00:00
*-----------------------
2023-09-02 20:47:17 +00:00
* NETTOIE_MUSIQUE - OK
*-----------------------
* nettoie_musique
nettoie_musique
PushLong haBEAT
_DisposeHandle
lda #0
]lp pha
asl
asl
tax
lda haSND1+2,x
pha
lda haSND1,x
pha
_DisposeHandle
pla
inc
cmp j ; nombre de sons
bcc ]lp
rts
*-----------------------
* INIT_MUSIQUE - OK
2023-08-28 16:01:04 +00:00
*-----------------------
init_musique
2023-09-05 20:20:22 +00:00
sei
pha
pha
PushWord #11
_GetVector
PullLong sndVECTOR
PushWord #11
PushLong #sndINTERRUPT
_SetVector
cli
2023-09-02 20:47:17 +00:00
PushWord #$ffff
2023-09-05 20:20:22 +00:00
_ClearScreen
2023-08-28 16:01:04 +00:00
rts
2024-02-03 18:51:11 +00:00
*-----------------------
* THE SOUND INTERRUPT
*-----------------------
mx %00
sndINTERRUPT
phd
clc
xce
rep #$30
lda #$c000
tcd
sep #$20
]lp lda soundctl
bmi ]lp
ldal $e100ca
and #%0000_1111
sta soundctl
lda #$e0 ; which oscillo
sta soundadrl ; has generated
lda sounddata ; the interrupt?
lda sounddata
and #%0011_1110
lsr
cmp #1 ; oscillo 1 (li<6C> <20> 0)
beq sndINTERRUPT1
cmp #3 ; oscillo 3 (li<6C> <20> 2)
bne sndINTERRUPT99
2024-02-03 21:58:16 +00:00
lda #-1 ; dis au programme
stal fgCLEAR ; d'effacer le cadre
2024-02-03 18:51:11 +00:00
bra sndINTERRUPT99
sndINTERRUPT1
lda #$a0 ; oscillos 0 & 1
sta soundadrl
lda #%0000_0000
sta sounddata
lda #$a1
sta soundadrl
lda #%0001_1000 ; with interrupt
sta sounddata
sndINTERRUPT99
sep #$30
pld
clc
rtl
mx %00
2023-08-28 16:01:04 +00:00
*-----------------------
2023-09-02 20:47:17 +00:00
* RYTHME - OK
2023-08-28 16:01:04 +00:00
*-----------------------
* rythme(rythme%)
2023-09-02 20:47:17 +00:00
*--- offset to beat number is +22
rythme sep #$20
ora #'0'
sta pBEAT+22
rep #$20
*---
lda #pBEAT
sta proOPEN+4 ; filename
jsl GSOS
dw $2010
adrl proOPEN
bcs ry_err2
lda proOPEN+2
sta proREAD+2
sta proCLOSE+2
ldy proEOF
sty proREAD+8
ldx proEOF+2
stx proREAD+10
pha
pha
phx
phy
PushWord myID
PushWord #%11000000_00001100
PushLong #0
_NewHandle
phd
tsc
tcd
lda [3]
sta ptrBEAT
sta proREAD+4
ldy #2
lda [3],y
sta ptrBEAT+2
sta proREAD+6
pld
pla
sta haBEAT
pla
sta haBEAT+2
bcs ry_err1
jsl GSOS
dw $2012
adrl proREAD
ry_err1 jsl GSOS
dw $2014
adrl proCLOSE
clc
ry_err2 rts
2023-08-28 16:01:04 +00:00
2024-02-06 19:49:01 +00:00
*-----------------------
* ENSONIQ_STOPALL - OK
*-----------------------
* ensoniq_stopall = stoppe tous les oscillateurs
ensoniq_stopall
sei
phd
lda #$c000
tcd
sep #$20
]lp lda soundctl
bmi ]lp
ldal $e100ca
and #%0000_1111
sta soundctl
ldx #2 ; boucle 2 fois
esa_1 ldy #$0
]lp tya
ora #$a0
sta soundadrl
lda #$01
sta sounddata
iny
cpy #32
bcc ]lp
dex
bne esa_1
rep #$20
pld
cli
rts
mx %00
2023-09-03 20:10:44 +00:00
*-----------------------
* RYTHME_JOUE - OK
*-----------------------
* rythme_joue
rythme_joue
lda ptrBEAT
2023-09-05 20:20:22 +00:00
sta rj_from+1
lda ptrBEAT+1
sta rj_from+2
lda proEOF
sta rj_eof+1
2023-09-03 20:10:44 +00:00
* 1. on met en RAM son
sei
2023-09-05 20:20:22 +00:00
phd
lda #$c000
tcd
2023-09-03 20:10:44 +00:00
sep #$20
ldal $e100ca
2023-09-05 20:20:22 +00:00
and #%0000_1111
2023-09-03 20:10:44 +00:00
ora #%0110_0000
2023-09-05 20:20:22 +00:00
sta soundctl
2023-09-03 20:10:44 +00:00
lda #0
2023-09-05 20:20:22 +00:00
sta soundadrl
sta soundadrh
ldx #0
rj_from ldal $aabbcc,x
sta sounddata
inx
rj_eof cpx #$ffff
bcc rj_from
* 2. on d<EFBFBD>marre
2023-09-03 20:10:44 +00:00
2023-09-05 20:20:22 +00:00
jsr ensoniq_beat
* 3. on sort et <EFBFBD>a joue
rep #$20
pld
cli
rts
2024-02-03 21:58:16 +00:00
mx %10
2023-09-05 20:20:22 +00:00
*-----------------------
* ENSONIQ_BEAT - OK
*-----------------------
* ensoniq_beat
2023-09-03 20:10:44 +00:00
2023-09-05 20:20:22 +00:00
ensoniq_beat
2023-09-03 20:10:44 +00:00
ldy #0 ; oscillos 0 & 1
ldal $e100ca ; volume
2023-09-05 20:20:22 +00:00
and #%0000_1111
sta soundctl
2023-09-03 20:10:44 +00:00
tya ; fr<66>quence basse
2023-09-05 20:20:22 +00:00
sta soundadrl
2023-09-03 20:10:44 +00:00
lda #217
2023-09-05 20:20:22 +00:00
sta sounddata
2023-09-03 20:10:44 +00:00
tya
ora #$01
2023-09-05 20:20:22 +00:00
sta soundadrl
2023-09-03 20:10:44 +00:00
lda #217
2023-09-05 20:20:22 +00:00
sta sounddata
2023-09-03 20:10:44 +00:00
tya ; fr<66>quence haute
ora #$20
2023-09-05 20:20:22 +00:00
sta soundadrl
2023-09-03 20:10:44 +00:00
lda #0
2023-09-05 20:20:22 +00:00
sta sounddata
2023-09-03 20:10:44 +00:00
tya
ora #$21
2023-09-05 20:20:22 +00:00
sta soundadrl
2023-09-03 20:10:44 +00:00
lda #0
2023-09-05 20:20:22 +00:00
sta sounddata
2023-09-03 20:10:44 +00:00
tya ; volume
ora #$40
2023-09-05 20:20:22 +00:00
sta soundadrl
2023-09-03 20:10:44 +00:00
lda #$ff
2023-09-05 20:20:22 +00:00
sta sounddata
2023-09-03 20:10:44 +00:00
tya
ora #$41
2023-09-05 20:20:22 +00:00
sta soundadrl
2023-09-03 20:10:44 +00:00
lda #$ff
2023-09-05 20:20:22 +00:00
sta sounddata
2023-09-03 20:10:44 +00:00
2024-02-03 18:51:11 +00:00
tya ; address pointer (at $0000 and not $4000)
2023-09-03 20:10:44 +00:00
ora #$80
2023-09-05 20:20:22 +00:00
sta soundadrl
2024-02-03 18:51:11 +00:00
lda #$00
2023-09-05 20:20:22 +00:00
sta sounddata
2023-09-03 20:10:44 +00:00
tya
ora #$81
2023-09-05 20:20:22 +00:00
sta soundadrl
2024-02-03 18:51:11 +00:00
lda #$00
2023-09-05 20:20:22 +00:00
sta sounddata
2023-09-03 20:10:44 +00:00
tya ; waveform table size (32K)
ora #$c0
2023-09-05 20:20:22 +00:00
sta soundadrl
2023-09-03 20:10:44 +00:00
lda #%00111111
2023-09-05 20:20:22 +00:00
sta sounddata
2023-09-03 20:10:44 +00:00
tya
ora #$c1
2023-09-05 20:20:22 +00:00
sta soundadrl
2023-09-03 20:10:44 +00:00
lda #%00111111
2023-09-05 20:20:22 +00:00
sta sounddata
2023-09-03 20:10:44 +00:00
tya ; control register
ora #$a0
2023-09-05 20:20:22 +00:00
sta soundadrl
2023-09-03 20:10:44 +00:00
lda #%0000_0000
2023-09-05 20:20:22 +00:00
sta sounddata
2023-09-03 20:10:44 +00:00
tya
ora #$a1
2023-09-05 20:20:22 +00:00
sta soundadrl
lda #%0001_1000 ; with interrupt
sta sounddata
2023-09-03 20:10:44 +00:00
rts
2023-09-05 20:20:22 +00:00
mx %00
2024-02-03 18:51:11 +00:00
*-----------------------
* SON_JOUE - OK
*-----------------------
* son_joue
son_joue
2023-09-05 20:20:22 +00:00
2024-02-03 18:51:11 +00:00
* 1. on met en RAM son
sei
phd
lda #$c000
tcd
sep #$20
ldal $e100ca
and #%0000_1111
ora #%0110_0000
sta soundctl
lda #$00
sta soundadrl
lda #$80
sta soundadrh
ldx #0
sj_from ldal $aabbcc,x
sta sounddata
inx
sj_eof cpx #$ffff
bne sj_from
* 2. on d<EFBFBD>marre
ldy #2 ; oscillos 2 & 3
ldal $e100ca ; volume
and #%0000_1111
sta soundctl
tya ; fr<66>quence basse
sta soundadrl
lda waveFREQ
sta sounddata
tya
ora #$01
sta soundadrl
lda waveFREQ
sta sounddata
tya ; fr<66>quence haute
ora #$20
sta soundadrl
lda waveFREQ+1
sta sounddata
tya
ora #$21
sta soundadrl
lda waveFREQ+1
sta sounddata
tya ; volume
ora #$40
sta soundadrl
lda #$ff
sta sounddata
tya
ora #$41
sta soundadrl
lda #$ff
sta sounddata
tya ; address pointer (at $8000)
ora #$80
sta soundadrl
lda #$80
sta sounddata
tya
ora #$81
sta soundadrl
lda #$80
sta sounddata
tya ; waveform table size (32K)
ora #$c0
sta soundadrl
lda #%00111111
sta sounddata
tya
ora #$c1
sta soundadrl
lda #%00111111
sta sounddata
tya ; control register
ora #$a0
sta soundadrl
lda #%0000_0010 ; one-shot
sta sounddata
tya
ora #$a1
sta soundadrl
lda #%0001_1010 ; with interrupt
sta sounddata
* 3. on sort et <EFBFBD>a joue
rep #$20
pld
cli
rts
mx %00
2023-08-28 16:01:04 +00:00
*-----------------------
2023-09-02 20:47:17 +00:00
* CHARGE_SON - OK
2023-08-28 16:01:04 +00:00
*-----------------------
2023-09-02 20:47:17 +00:00
* charge_son
2023-08-28 16:01:04 +00:00
2023-09-02 20:47:17 +00:00
*--- offset to sfxs number is +21
charge_son dec
asl ; pointe sur la table de pointeurs
tax ; par niveau (1..5)
lda tblSND,x
cmp #-1
bne ch_1
sec
rts
ch_1 sta dpFROM ; pointe sur sndPARTx
lda #1 ; on charge tous les sons maintenant
sta j
]lp lda j
dec
asl
tay
tax
lda (dpFROM),y
cmp #-1 ; fin d'une structure
bne ch_2
2024-02-03 21:58:16 +00:00
dec j ; corrige l'index j
2023-09-02 20:47:17 +00:00
clc
2023-08-28 16:01:04 +00:00
rts
2023-09-02 20:47:17 +00:00
ch_2 sta dpTO ; pointe sur l'entr<74>e de la structure d'un son
lda (dpTO) ; nom du son
sta pSND+21
ldy #2
lda (dpTO),y
sta tblFREQ,x ; la fr<66>quence du son
lda dpTO
clc
adc #4
sta tblSTR1,x ; on pointe sur la premi<6D>re string
sta dpTO
lda (dpTO)
and #$ff
clc
adc tblSTR1,x
inc
sta tblSTR2,x
jsr charge_un_son
inc j
bra ]lp
*---
charge_un_son
lda #pSND
sta proOPEN+4 ; filename
jsl GSOS
dw $2010
adrl proOPEN
bcs cus_err2
lda proOPEN+2
sta proREAD+2
sta proCLOSE+2
ldy proEOF
sty proREAD+8
ldx proEOF+2
stx proREAD+10
pha
pha
phx
phy
PushWord myID
PushWord #%11000000_00001100
PushLong #0
_NewHandle
phd
tsc
tcd
lda j
dec
asl
tay
asl
tax
2024-02-03 18:51:11 +00:00
lda proEOF ; nombre d'octets
2023-09-02 20:47:17 +00:00
sta tblSIZE,y
lda [3]
sta ptrSND1,x
sta proREAD+4
ldy #2
lda [3],y
sta ptrSND1+2,x
sta proREAD+6
pld
pla
sta haSND1,x
pla
sta haSND1+2,x
bcs cus_err1
jsl GSOS
dw $2012
adrl proREAD
cus_err1 jsl GSOS
dw $2014
adrl proCLOSE
clc
cus_err2 rts
2023-08-28 16:01:04 +00:00
*-----------------------
2023-09-02 20:47:17 +00:00
* CLAVIER_SONORE - OK
2023-08-28 16:01:04 +00:00
*-----------------------
clavier_sonore
2023-09-07 07:03:07 +00:00
ldx #0 ; init keyboard
lda #FALSE
]lp sta sndKEY,x
inx
inx
cpx #10*2
bcc ]lp
2024-02-03 18:51:11 +00:00
cl_loop lda fgCLEAR
beq cl_noclear
jsr paintZIK
stz fgCLEAR
cl_noclear pha
2023-09-02 20:47:17 +00:00
PushWord #%00000000_00001010
PushLong #taskREC
_GetNextEvent
pla
beq cl_loop
lda taskREC ; une touche ?
cmp #keyDownEvt
bne cl_loop
lda taskMESSAGE ; entre 0 et 9 ?
2024-02-03 21:58:16 +00:00
cmp #chrESC
2023-09-03 20:10:44 +00:00
beq cl_exit
2023-09-02 20:47:17 +00:00
cmp #'0'
bne cl_1
2023-09-05 20:20:22 +00:00
2024-02-03 18:51:11 +00:00
cl_0 jsr paintZIK ; 0 pour sortir
2023-09-05 20:20:22 +00:00
clc
2024-02-03 18:51:11 +00:00
rts ; * pour quitter
2023-09-05 20:20:22 +00:00
2024-02-03 18:51:11 +00:00
cl_exit jsr paintZIK
2023-09-05 20:20:22 +00:00
sec ; d<>finitivement
rts
2023-09-02 20:47:17 +00:00
cl_1 cmp #'1'
bcc cl_loop
cmp #'9'+1
bcs cl_loop
sec
sbc #'1'
cmp j ; dans la limite du nombre de sons
bcs cl_loop
2023-09-07 07:03:07 +00:00
2023-09-02 20:47:17 +00:00
asl ; affiche les cha<68>nes
tax
2024-02-03 18:51:11 +00:00
asl
tay
2023-09-02 20:47:17 +00:00
lda tblSIZE,x
2024-02-03 18:51:11 +00:00
bpl cl_size
lda #$8000 ; on ne d<>passe pas 32K
cl_size sta sj_eof+1
2023-09-02 20:47:17 +00:00
lda tblFREQ,x
sta waveFREQ
lda ptrSND1,y
2024-02-03 18:51:11 +00:00
sta sj_from+1
lda ptrSND1+1,y
sta sj_from+2
2023-09-07 07:03:07 +00:00
2024-02-03 21:58:16 +00:00
* Une petite diff<EFBFBD>rence avec la version ST
2024-02-03 18:51:11 +00:00
* lda sndKEY,x ; did we press the key?
* cmp #TRUE
* bne cl_2 ; no, we can play
* brl cl_loop
2024-02-03 21:58:16 +00:00
*
*cl_2 lda #TRUE
* sta sndKEY,x
2023-09-02 20:47:17 +00:00
2024-02-03 18:51:11 +00:00
phx
jsr paintZIK
2024-02-03 21:58:16 +00:00
2024-02-03 18:51:11 +00:00
plx
phx
2024-02-03 21:58:16 +00:00
2023-09-02 20:47:17 +00:00
lda tblSTR1,x
ldy #22
jsr t
plx
lda tblSTR2,x
ldy #23
jsr t
2024-02-03 18:51:11 +00:00
jsr son_joue ; met le son en RAM son et le joue
2023-09-07 07:03:07 +00:00
brl cl_loop
2024-02-03 18:51:11 +00:00
*---------- The rectangle
2023-09-02 20:47:17 +00:00
2024-02-03 18:51:11 +00:00
paintZIK PushLong #curPATTERN
_GetPenPat
PushLong #whitePATTERN
_SetPenPat
2023-09-02 20:47:17 +00:00
2024-02-03 18:51:11 +00:00
PushLong #zikRECT
_PaintRect
PushLong #curPATTERN
_SetPenPat
rts
2024-02-03 21:58:16 +00:00
*---
2024-02-03 18:51:11 +00:00
zikRECT dw 150,0,200,320
fgCLEAR ds 2 ; -1 set by interrupt
2023-08-28 16:01:04 +00:00
*-----------------------
2023-09-02 20:47:17 +00:00
* FIN_MUSIQUE - OK
2023-08-28 16:01:04 +00:00
*-----------------------
2023-09-02 20:47:17 +00:00
* fin_musique
2023-08-28 16:01:04 +00:00
fin_musique
2023-09-05 20:20:22 +00:00
sei
PushWord #11
PushLong sndVECTOR
_SetVector
phd
lda #$c000
tcd
sep #$20
ldal $e100ca
and #%0000_1111
sta soundctl
ldx #2 ; boucle 2 fois
fm_1 ldy #$1f
]lp tya
ora #$a0
sta soundadrl
lda #$01
sta sounddata
dey
bpl ]lp
dex
bne fm_1
rep #$20
pld
cli
2023-08-28 16:01:04 +00:00
rts
*-----------------------
* T - OK
*-----------------------
* t(ligne%,texte$)
* A: @texte$
* Y: ligne%
2023-08-30 14:42:20 +00:00
t sty theY
PushWord #^t ; pointer to string
2023-08-28 16:01:04 +00:00
pha
PushWord #0 ; get string length
PushWord #^t
pha
_StringWidth ; return left on stack
2023-08-30 14:42:20 +00:00
lda #320 ; why 160?
2023-08-28 16:01:04 +00:00
sec
sbc 1,s
bpl t1
lda #0
2023-08-30 14:42:20 +00:00
t1 lsr
sta 1,s ; X
lda theY ; pour MoveTo
asl
asl
asl
pha ; Y
2023-08-28 16:01:04 +00:00
_MoveTo
_DrawString
rts
2023-08-30 14:42:20 +00:00
*-----------------------
* MON BEAU CURSEUR
*-----------------------
monCURSEUR
2023-09-02 20:47:17 +00:00
dw 16,5
hex FF000000000000000000 ; data
hex F0F00000000000000000
hex F00F0000000000000000
hex F000F000000000000000
hex F0000F000FFFFF000000
hex F00000F0F00000F00000
hex F000000F00FFF00F0000
hex F0000FFF00F0F00F0000
hex F0F00F0F00F0F00F0000
hex FF0F00FF00F0F00F0000
hex F000F00FFFFFF00F0000
hex 00000F00000000F00000
hex 000000FFFFFFFF000000
hex 0FFFFFFF00F000000000
hex F00000000F0000000000
hex 0FFFFFFFF00000000000
hex FF000000000000000000 ; mask
hex FFF00000000000000000
hex FFFF0000000000000000
hex FFFFF000000000000000
hex FFFFFF000FFFFF000000
hex FFFFFFF0FFFFFFF00000
hex FFFFFFFFFFFFFFFF0000
hex FFFFFFFFFFF0FFFF0000
hex FFFFFF0FFFF0FFFF0000
hex FF0FFFFFFFF0FFFF0000
hex F000FFFFFFFFFFFF0000
hex 00000FFFFFFFFFF00000
hex 000000FFFFFFFF000000
hex 0FFFFFFFFFF000000000
hex FFFFFFFFFF0000000000
hex 0FFFFFFFF00000000000
2023-08-31 20:12:41 +00:00
dw 1,1
2023-08-30 14:42:20 +00:00
*--- The end