antoine-source/folibus/fr/prfolibus.s
2023-11-28 19:50:15 +01:00

1843 lines
24 KiB
ArmAsm
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

*
* La maison du Professeur Folibus
*
* (c) 1982, Alain BrŽgŽon
* (c) 2023, Brutal Deluxe Software (Apple II)
*
mx %11
org $4000
lst off
*-----------------------------------
* SOFTSWITCHES AND FRIENDS
*-----------------------------------
CH = $24 ; cursor horizontal position
CV = $25 ; cursor vertical position
LINNUM = $50 ; result from GETADR
X0L = $e0 ; X-coord
X0H = $e1
Y0 = $e2 ; Y-coord
maxY = 191 ; 0 to 191 = 192
chrRET2 = $8d
chrSPC2 = $a0
TEXTBUFFER = $200
chrOUI = "O"
chrNON = "N"
PRODOS = $bf00
KBD = $c000
CLR80VID = $c00c
KBDSTROBE = $c010
VBL = $c019
VERTCNT = $c02e
SPKR = $c030
CYAREG = $C036
TXTCLR = $c050
TXTSET = $c051
*--- The firmware routines
INIT = $FB2F
TABV = $FB5B
HOME = $FC58
WAIT = $FCA8
RDKEY = $FD0C
GETLN1 = $FD6F
COUT = $FDED
IDROUTINE = $FE1F
SETNORM = $FE84
SETKBD = $FE89
*-----------------------------------
* MACROS
*-----------------------------------
@explode mac
jsr EXPLODE
eom
@play mac
ldx #>]1
ldy #<]1
jsr playMUSIC
eom
@print mac
ldx #>]1
ldy #<]1
jsr printCSTRING
eom
@wait mac
ldx #>]1
ldy #<]1
jsr waitMS
eom
*-----------------------------------
* CODE BASIC EN ASM :-)
*-----------------------------------
sec
jsr IDROUTINE
bcs notiigs
lda CYAREG ; 1 MHz vaincra!
sta sauveCYA
and #%0111_1111
sta CYAREG
notiigs
*-------- CAN WE DO lowercase?
lda $FBB3
cmp #$06
beq lowerOK
lda #$80 ; OCPY UPPERCASE
sta fgCASE
lowerOK
*--------
jsr introPIC ; la picture GR
jsr :51000 ; le disclaimer
jsr :40000 ; les instructions
REPLAY
jsr initALL
jsr HOME
*-----------------------------------
* DU BASIC A L'ASSEMBLEUR (BEURK)
*-----------------------------------
:100 ldx #2
lda S,x
beq :200
:110 ldx #2
lda C,x
beq :120
dec C,x
:120 ldx #3
lda S,x
bne :200
@print #strILFAITNOIR
ldx #3
lda C,x
beq :150
dec C,x
:150 jmp :1000
*-----------------------------------
* 200 - description salle
*-----------------------------------
:200 @print #strRETURN
lda SALLE
asl
tax
lda tbl8000,x
sta :222+1
lda tbl8000+1,x
sta :222+2
:222 jsr $bdbd
:300 lda #0
sta H
sta HH ; for comma
lda #1
sta N
:310 ldx N
lda O,x
cmp SALLE
bne :400
lda H
bne :350
@print #strILYA
inc H
:350 lda HH
beq :360
@print #strCOMMA
:360 @print #strSPACE
lda N
asl
tax
ldy tblO$,x
lda tblO$+1,x
tax
jsr printCSTRING
inc HH
:400 inc N
lda N
cmp #nbO ; la constante 25
bcc :310
beq :310
@print #strRETURN
*-----------------------------------
* 1000 - ACCEPTATION COMMANDE
*-----------------------------------
:1000 lda #1
sta T
lda #0
sta N
jmp :2000
:1100 ldx #1
lda C,x
beq :1110
dec C,x
:1110 ldx #4
lda C,x
beq :1120
dec C,x
:1120 @print #strCOMMANDE
jsr GETLN1
stx lenSTRING ; longueur de la chaine saisie
jsr rewriteSTRING ; from lower to upper
jsr :6000 ; cherche les mots
lda MO$1
bne :1600
@print #strJENECOMPRENDS
jmp :100
*-----------------------------------
* 1600 - CONTROLES APPLE II
*-----------------------------------
:1600 cmp #59 ; switch wait to de/accelerate the game
bne :1605
jsr switchWAIT
jmp :100
:1605 cmp #60 ; quitter
bne :1610
jmp :20050
:1610 cmp #61
bne :1615
jsr switchCASE
jmp :100
*-----------------------------------
* 1600 - CONTROLE MVT
*-----------------------------------
:1615 ldy #0
:1620 lda SALLE ; T$=MID(M$(SALLE),Z,2)
asl
tax
lda tblM$,x
sta LINNUM
lda tblM$+1,x
sta LINNUM+1
lda (LINNUM),y
beq :1900
cmp MO$1
bne :1700
iny
lda (LINNUM),y
sta SALLE
jmp :100
:1700 iny
iny
bne :1620
:1900 lda #0
sta T
sta CORRESP
*-----------------------------------
* 2000 - CONTROLE
*-----------------------------------
:2000 lda #0
sta CP
:2100 inc CP
lda T
beq :2300
lda CP ; E$=C$(CP)
asl
tax
lda tblC$,x
sta LINNUM
lda tblC$+1,x
sta LINNUM+1
ldy #0
lda (LINNUM),y
tax
]lp lda (LINNUM),y
sta E$,y
iny
dex
bpl ]lp
jmp :2600
:2300 lda CP
cmp #AA
bcc :2400
beq :2400
lda CORRESP
beq :2320
jmp :1000
:2320 @print #strIMPOSSIBLE
lda MO$1 ; les directions
cmp #12+1
bcs :2350
@print #strCECHEMIN
:2350 @print #strEXCLAM
jmp :100
:2400 lda CP
sec
sbc #1
asl
tax
lda tblA,x
cmp MO$1
beq :2410
jmp :2100
:2410 lda tblA+1,x
beq :2430
cmp MO$2
beq :2430
jmp :2100
:2430 lda tblA$,x
sta LINNUM
lda tblA$+1,x
sta LINNUM+1
ldy #0
lda (LINNUM),y
tax
]lp lda (LINNUM),y
sta E$,y
iny
dex
bpl ]lp
*-----------------------------------
* 2600 - CONDITIONS
*-----------------------------------
:2600 lda #1
sta E
:2700 ldx E ; 7893
lda E$,x ; 7894
cmp #"."
bne :2710
jmp :3000 ; do actions
:2710 sec
sbc #"A"
asl
pha
lda #0
sta OK
lda E$+1,x
sec
sbc #"0"
tay
lda tblD2H,y
sta N
lda E$+2,x
sec
sbc #"0"
clc
adc N
sta N
pla
tax
lda tbl2900,x
sta :2800+1
lda tbl2900+1,x
sta :2800+2
ldy #1 ; pour OK si condition vŽrifiŽe
:2800 jsr $bdbd
lda OK
bne :2820
jmp :2100
:2820 lda E
clc
adc #3
sta E
jmp :2700
*--------
tbl2900 da :2900,:2910,:2920,:2930,:2940,:2950,:2960,:2970
*-------- A, si nous sommes dans la salle N
:2900 lda N
cmp SALLE
bne :2905
sty OK
:2905 rts
*-------- B, si l'objet N est present ou transporte
:2910 ldx N
lda O,x
cmp #-1
beq :2915
cmp SALLE
bne :2916
:2915 sty OK
:2916 rts
*-------- C, si l'objet N est present ou non transporte
:2920 ldx N
lda O,x
cmp SALLE
bne :2925
rts
:2925 cmp #-1
bne :2927
rts
:2927 sty OK
rts
*-------- D, si l'objet N est transporte
:2930 ldx N
lda O,x
cmp #-1
bne :2935
sty OK
:2935 rts
*-------- E, si le pointeur N est active
:2940 ldx N
lda S,x
beq :2945
sty OK
:2945 rts
*-------- F, si le pointeur n'est pas active
:2950 ldx N
lda S,x
bne :2955
sty OK
:2955 rts
*-------- G, si le compteur a atteint la valeur 1
:2960 ldx N
lda C,x
cmp #1
bne :2965
sty OK
:2965 rts
*-------- H, si le nombre aleatoire (1-99) est inferieur a N
:2970 lda VBL ; LOGO - Use a better RND?
eor VERTCNT
cmp N
bcs :2975
sty OK
:2975 rts
*-----------------------------------
* 3000 - ACTIONS
*-----------------------------------
:3000 inc E
lda #1
sta CORRESP
:3100 ldx E
lda E$,x
cmp #"."
bne :3120
jmp :2100
:3120 sec
sbc #"A"
asl
pha ; TYPE
lda E$+1,x
cmp #"."
beq :3200
sec
sbc #"0"
tay
lda tblD2H,y
sta N
lda E$+2,x
sec
sbc #"0"
clc
adc N
sta N
:3200 lda #0
sta BREAK
pla
tax
lda tbl4000,x
sta :3210+1
lda tbl4000+1,x
sta :3210+2
:3210 jsr $bdbd
lda BREAK
beq :3230
asl
tax
lda tblBRKA,x
sta :3220+1
lda tblBRKA+1,x
sta :3220+2
:3220 jmp $bdbd
:3230 lda E
clc
adc #3
sta E
jmp :3100
*-------- The modified BREAK table
tblBRKA da $bdbd
da :100,:1000,:1100
*-----------------------------------
* 1800
*-----------------------------------
tbl4000 da :4000,:4100,:4200,:4300,:4400,:4500,:4600,:4700,:4800,:4900
da :5000,:5100,:5200,:5300,:5400,:5500,:5600,:5700,:4100
*-------- A, si nous sommes dans la salle N
:4000 rts
*-------- B, transportes objets N
:4100 ldx #1
lda S,x
cmp #5
bcc :4140
@print #strEVIDENT
:4120 lda #1
sta BREAK
rts
:4140 ldx N
lda O,x
cmp #-1
beq :4180
lda #-1
sta O,x
ldx #1
inc S,x
rts
:4180 @print #strVOUSLAVEZ
jmp :4120
*-------- C, pose objets N
:4200 ldx N
lda O,x
cmp #-1
beq :4240
@print #strNOTOWNED
lda #1
sta BREAK
rts
:4240 lda SALLE
sta O,x
ldx #1
dec S,x
rts
*-------- D, affiche le message en 7000+N*10
:4300
@print #strRETURN
lda N
asl
tax
lda tbl7000,x
sta :4310+1
lda tbl7000+1,x
sta :4310+2
:4310 jmp $bdbd
*-------- E, active le pointeur N
:4400 ldx N
lda #1
sta S,x
rts
*-------- F, desactive le pointeur N
:4500 ldx N
lda #0
sta S,x
rts
*-------- G, fixe le compteur N ˆ M
:4600 lda N
sec
sbc #1
asl
tax
lda tblA$,x
sta LINNUM
lda tblA$+1,x
sta LINNUM+1
ldy E ; +2
iny
iny
sty E
iny ; +3
lda (LINNUM),y
sec
sbc #"0"
tax
lda tblD2H,x
ldx N
sta C,x
iny
lda (LINNUM),y
sec
sbc #"0"
clc
adc C,x
sta C,x
rts
*-------- H, inverse les lignes dans le tableau objet
:4700 lda N ; exchange object
asl ; do it here on pointers
tax ; not on strings
lda tblO$,x
pha
lda tblO$+1,x
pha
lda tblO$+2,x
sta tblO$,x
lda tblO$+3,x
sta tblO$+1,x
pla
sta tblO$+3,x
pla
sta tblO$+2,x
rts
*-------- I, pose objet N dans la salle en cours
:4800 ldx N
lda SALLE
sta O,x
rts
*-------- J, met le numero de salle contenant l'objet dans O
:4900 ldx N
lda O,x
bpl :4910
ldx #1
dec S,x
:4910 lda #0
sta O,x
rts
*-------- K, fixe le numero de salle en cours ˆ la valeur N
:5000 lda N
sta SALLE
rts
*-------- L, affiche d'accord et attend
:5100 @print #strDACCORD
*-------- M, attend une nouvelle commande + "resanne" le tableau des actions
:5200 lda #2
sta BREAK
rts
*-------- N, attend une nouvelle commande
:5300 lda #3
sta BREAK
rts
*-------- O, affiche la description de la salle en cours
:5400 lda #1
sta BREAK
rts
*-------- P, etes-vous sur ?
:5500 jmp :20050
*-------- Q, stop -> perdu
:5600 jmp :20000
*-------- R, inventaire
:5700 lda #0
sta G
sta HH
sta H ; for comma
:5710 inc G
lda G
tax
lda O,x
cmp #-1
beq :5740
lda G
cmp #nbO
bcc :5710
bcs :5770
:5740 lda HH
bne :5750
@print #strVOUSDETENEZ
:5750 inc HH
lda H
beq :5760
@print #strCOMMA
:5760 lda G
asl
tax
ldy tblO$,x
lda tblO$+1,x
tax
jsr printCSTRING
@print #strSPACE
inc H
lda G
cmp #V
bcc :5710
:5770 lda HH
beq :5780
@print #strPOINT
rts
:5780 @print #strVOUSRIEN
lda #1
sta BREAK
rts
*-------- S, prendre un objet => :4100
*-----------------------------------
* 6000 - ANALYSE DU MOT
*-----------------------------------
:6000 lda #0
sta N
sta X$1
sta X$2
sta MO$1
sta MO$2
* 1. cherche le premier caract<EFBFBD>re
ldx #0 ; cherche le premier caractere
]lp lda TEXTBUFFER,x
* cmp #chrRET2
* beq :6021
cmp #chrSPC2
bne :6022 ; on a trouvŽ un caract<63>re
inx
cpx lenSTRING
* bcs :6021
* cpx #nbCAR
bcc ]lp
:6021 rts ; retourne sans avoir trouve
* 2. recopie le mot
* 0123456789A
* 123456789
* PREN COMBI\
:6022 ldy #1
]lp lda TEXTBUFFER,x
cmp #chrRET2
beq :6023
cmp #chrSPC2
beq :6023
sta X$1,y ; 0P1R2E3N4
inx
cpx lenSTRING
bcs :6023
iny
cpy #4
bcc ]lp
beq ]lp
dey
:6023 sty X$1 ; sauve la longueur
* 3. cherche un espace
* inx
]lp lda TEXTBUFFER,x
* cmp #chrRET2
* beq :6032
cmp #chrSPC2
beq :6032
inx ; 5
cpx lenSTRING
* bcs :6100
* cpx #nbCAR
bcc ]lp
bcs :6100
* 4. recopie le mot
:6032 inx
ldy #1
]lp lda TEXTBUFFER,x
cmp #chrRET2
beq :6033
cmp #chrSPC2
beq :6033
sta X$2,y
inx
cpx lenSTRING
bcs :6033
iny
cpy #4
bcc ]lp
beq ]lp
dey
:6033 sty X$2 ; sauve la longueur
* 5. cherche le mot dans les options
* X$1 4 PREN
* X$2 4 LAMP
* V$x 6 04PREN
* 0 123456
:6100 lda X$1
bne :6110
rts
:6110 ldy #1
]lp tya
asl
tax
lda tblV$,x
sta :6225+1
lda tblV$+1,x
sta :6225+2
ldx #1
:6225 lda $bdbd,x
cmp X$1,x
bne :6250
inx
cpx X$1
bcc :6225
beq :6225
lda tblV,y
sta MO$1
bne :6300
:6250 iny
cpy #V
bcc ]lp
beq ]lp
* 6. on change de mot
:6300 lda X$2
bne :6310
rts
:6310 ldy #1
]lp tya
asl
tax
lda tblV$,x
sta :6325+1
lda tblV$+1,x
sta :6325+2
ldx #1
:6325 lda $bdbd,x
cmp X$2,x
bne :6350
inx
cpx X$1
bcc :6325
beq :6325
lda tblV,y
sta MO$2
bne :6400
:6350 iny
cpy #V
bcc ]lp
beq ]lp
:6400 rts
*-----------------------------------
* 7000 - LES REPONSES
*-----------------------------------
tbl7000 da :7000,:7010,:7020,:7030,:7040,:7050,:7060,:7070,:7080,:7090
da :7100,:7110,:7120,:7130,:7140,:7150,:7160,:7170,:7180,:7190
da :7200,:7210,:7220,:7230,:7240,:7250,:7260,:7270,:7280,:7290
da :7300,:7310,:7320,:7330,:7340,:7350,:7360,:7370,:7380,:7390
da :7400,:7410,:7420,:7430,:7440,:7450
*--------
:7000 @print #str7000
@explode
rts ; jmp :20000
:7010 @print #str7010
rts
:7020 @print #str7020
rts
:7030 @print #str7030
@explode
rts ; jmp :20000
:7040 @print #str7040
@explode
rts ; jmp :20000
:7050 @print #str7050
rts
:7060 @print #str7060
rts
:7070 @print #str7070
rts
:7080 @print #str7080
rts
:7090 @print #str7090
rts
:7100 @print #str7100
rts
:7110 @print #str7110
rts
:7120 @print #str7120
rts
:7130 @print #str7130
rts
:7140 @print #str7140
rts
:7150 @print #str7150
rts
:7160 @print #str7160
rts
:7170 @print #str7170
rts
:7180 @print #str7180
@explode
rts ; jmp :20000
:7190 @print #str7190
rts
:7200 @print #str7200
@explode
rts ; jmp :20000
:7210 @print #str7210
rts
:7220 @print #str7220
rts
:7230 @print #str7230
rts
:7240 @print #str7240
rts
:7250 @print #str7250
@explode
rts ; jmp :20000
:7260 @print #str7260
rts
:7270 @print #str7270
rts
:7280 @print #str7280
rts
:7290 @print #str7290
rts
:7300 @print #str7300
@explode
rts ; jmp :20000
:7310 @print #str7310
rts
:7320 @print #str7320
rts
:7330 @print #str7330
rts
:7340 @print #str7340
@explode
rts ; jmp :20000
:7350 @print #str7350
rts
:7360 @print #str7360
@explode
rts ; jmp :20000
:7370 @print #str7370
rts
:7380 @print #str7380
rts
:7390 @print #str7390
@explode
rts ; jmp :20000
:7400 @print #str7400
rts
:7410 @print #str7410
@explode
rts ; jmp :32000
:7420 @print #str7420
rts
:7430 @print #str7430
rts
:7440 @print #str7440
rts
:7450 @print #str7450
@explode
rts ; jmp :20000
*-----------------------------------
* 8000 - DESCRIPTION DES PIECES
*-----------------------------------
tbl8000
da $bdbd
da :8000
da :8010
da :8020
da :8030
da :8040
da :8050
da :8060
da :8070
da :8080
da :8090
da :8100
da :8110
da :8120
da :8130
da :8140
da :8150
da :8160
:8000 @print #str8000
rts
:8010 @print #str8010
rts
:8020 @print #str8020
rts
:8030 @print #str8030
rts
:8040 @print #str8040
rts
:8050 @print #str8050
rts
:8060 @print #str8060
rts
:8070 @print #str8070
rts
:8080 @print #str8080
rts
:8090 @print #str8090
rts
:8100 @print #str8100
rts
:8110 @print #str8110
rts
:8120 @print #str8120
rts
:8130 @print #str8130
rts
:8140 @print #str8140
rts
:8150 @print #str8150
rts
:8160 @print #str8160
rts
*-----------------------------------
* 8000 - CHARGEMENT VARIABLES
*-----------------------------------
initALL
ldx #FIN_DATA-DEBUT_DATA-1
lda #0
]lp sta CORRESP,x
dex
bpl ]lp
*---
lda #1
sta SALLE
*---
ldx #nbO ; reset object table
]lp lda refO,x
sta O,x
dex
bpl ]lp
ldx #nbO*2 ; reset object table
]lp lda refO$,x
sta tblO$,x
dex
bpl ]lp
rts
*-----------------------------------
* 20000 - PERDU
*-----------------------------------
:20000
@play #zikPERDU
:20050 ; commun avec gagne
jsr HOME
]lp @print #strREPLAY
jsr translateKEY
cmp #chrNON
beq :21000
cmp #chrOUI
bne ]lp
jmp REPLAY
:21000
lda sauveCYA
sta CYAREG
jsr PRODOS ; exit
dfb $65
da proQUIT
brk $bd ; on ne se refait pas ;-)
*--- Data
proQUIT dfb 4
ds 1
ds 2
ds 1
ds 2
sauveCYA ds 1
*-----------------------------------
* 32000 - GAGNE
*-----------------------------------
:32000
@play #zikGAGNE
:32010
jsr HOME
@print #strGAGNE
jmp :20050
*-----------------------------------
* 40000 - LISTE DES INSTRUCTIONS
*-----------------------------------
:40000
jsr HOME
]lp @print #strINSTR
jsr translateKEY
cmp #chrNON
beq :40001
cmp #chrOUI
bne ]lp
@print #strINSTR2
jsr translateKEY
:40001 rts
*-----------------------------------
* 51000 - DISCLAIMER
*-----------------------------------
:51000
jsr HOME
@print #strDISCLAIMER
jmp translateKEY
*-----------------------------------
* introPIC - la picture GR
*-----------------------------------
introPIC
jsr setTEXTFULL
lda #2
sta CH
lda #11
jsr TABV
@print #strLORICIELS
@wait #300
jsr HOME
@print #strLEMANOIR
lda #5
sta CH
lda #22
jsr TABV
@print #strINTRO1
@wait #300
lda #5
sta CH
@print #strINTRO2
@wait #300
lda #5
sta CH
@print #strINTRO3
@wait #300
@play #zikINTRODUCTION
rts
*-----------------------------------
* ORIC
*-----------------------------------
EXPLODE ldx #$25
]lp lda TXTCLR
lda #$25
jsr WAIT
lda TXTSET
lda #$25
jsr WAIT
dex
bpl ]lp
rts
*-----------------------------------
* CODE 6502
*-----------------------------------
*----------------------
* setTEXTFULL
*----------------------
setTEXTFULL ; 40x24 text
sta CLR80VID
jsr INIT ; text screen
jsr SETNORM ; set normal text mode
jsr SETKBD ; reset input to keyboard
jmp HOME ; home cursor and clear to end of page
*----------------------
* switchCASE
*----------------------
switchCASE
lda fgCASE
eor #$80
sta fgCASE
rts
*----------------------
* printCSTR
*----------------------
printCSTRING
sty pcs1+1
stx pcs1+2
pcs1 lda $ffff
beq pcs3
bit fgCASE
bpl pcs2
tax ; from lower to upper
lda tblKEY,x
pcs2 jsr COUT
inc pcs1+1
bne pcs1
inc pcs1+2
bne pcs1
pcs3 rts
*--------
fgCASE ds 1 ; $00 lower OK, $80 otherwise
*----------------------
* waitMS
*----------------------
switchWAIT
lda waitMS+1
eor #1
sta waitMS+1
rts
waitMS lda #0 ; skip if not zero
bne waitMS9
sty LINNUM
doW1 ldy LINNUM
]lp lda #60 ; 1/100<30>me de seconde
jsr WAIT
dey
bne ]lp
dex
bpl doW1
waitMS9 rts
*-----------------------------------
* rewriteSTRING (lower -> upper)
*-----------------------------------
rewriteSTRING
ldx #0
]lp ldy TEXTBUFFER,x
lda tblKEY,y
sta TEXTBUFFER,x
inx
cpx lenSTRING
bcc ]lp
rts
*-----------------------------------
* translateKEY (lower -> upper)
*-----------------------------------
translateKEY
jsr RDKEY
tax
lda tblKEY,x
rts
tblKEY
hex 00,01,02,03,04,05,06,07,08,09,0A,0B,0C,0D,0E,0F
hex 10,11,12,13,14,15,16,17,18,19,1A,1B,1C,1D,1E,1F
hex 20,21,22,23,24,25,26,27,28,29,2A,2B,2C,2D,2E,2F
hex 30,31,32,33,34,35,36,37,38,39,3A,3B,3C,3D,3E,3F
hex 40,41,42,43,44,45,46,47,48,49,4A,4B,4C,4D,4E,4F
hex 50,51,52,53,54,55,56,57,58,59,5A,5B,5C,5D,5E,5F
hex 60,61,62,63,64,65,66,67,68,69,6A,6B,6C,6D,6E,6F
hex 70,71,72,73,74,75,76,77,78,79,7A,7B,7C,7D,7E,7F
hex 80,81,82,83,84,85,86,87,88,89,8A,8B,8C,8D,8E,8F
hex 90,91,92,93,94,95,96,97,98,99,9A,9B,9C,9D,9E,9F
hex A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF
hex B0,B1,B2,B3,B4,B5,B6,B7,B8,B9,BA,BB,BC,BD,BE,BF
hex C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,CA,CB,CC,CD,CE,CF
hex D0,D1,D2,D3,D4,D5,D6,D7,D8,D9,DA,DB,DC,DD,DE,DF
hex E0,C1,C2,C3,C4,C5,C6,C7,C8,C9,CA,CB,CC,CD,CE,CF
hex D0,D1,D2,D3,D4,D5,D6,D7,D8,D9,DA,FB,FC,FD,FE,FF
*-----------------------------------
* VARIABLES
*-----------------------------------
V = 75
tblV$ da $bdbd
da V$1,V$2,V$3,V$4,V$5,V$6,V$7,V$8,V$9,V$10
da V$11,V$12,V$13,V$14,V$15,V$16,V$17,V$18,V$19,V$20
da V$21,V$22,V$23,V$24,V$25,V$26,V$27,V$28,V$29,V$30
da V$31,V$32,V$33,V$34,V$35,V$36,V$37,V$38,V$39,V$40
da V$41,V$42,V$43,V$44,V$45,V$46,V$47,V$48,V$49,V$50
da V$51,V$52,V$53,V$54,V$55,V$56,V$57,V$58,V$59,V$60
da V$61,V$62,V$63,V$64,V$65,V$66,V$67,V$68,V$69,V$70
da V$71,V$72,V$73,V$74,V$75
tblV dfb $bd
dfb 01,01,02,02,03,03,04,04,05,05
dfb 06,06,07,07,05,06,13,35,14,14
dfb 15,15,16,17,18,19,19,20,21,22
dfb 23,55,25,26,27,28,29,29,30,31
dfb 32,33,35,34,36,31,37,38,39,40
dfb 39,41,42,43,44,45,46,47,47,48
dfb 49,50,51,52,53,54,49,56,56,57
dfb 58,58,59,60,61
*---
nbO = 20
refO dfb $bd
dfb 02,00,02,00,06,07,03,06,00,10
dfb 16,00,13,00,13,00,13,00,13,16
O dfb $bd
dfb 02,00,02,00,06,07,03,06,00,10
dfb 16,00,13,00,13,00,13,00,13,16
*---
refO$ da $bdbd ; see :3300
da O$1,O$2,O$3,O$4,O$5,O$6,O$7,O$8,O$9,O$10
da O$11,O$12,O$13,O$14,O$15,O$16,O$17,O$18,O$19,O$20
tblO$ da $bdbd
da O$1,O$2,O$3,O$4,O$5,O$6,O$7,O$8,O$9,O$10
da O$11,O$12,O$13,O$14,O$15,O$16,O$17,O$18,O$19,O$20
*---
M = 17
tblM$ da $bdbd
da M$1,M$2,M$3,M$4,M$5,M$6,M$7,M$8,M$9,M$10
da M$11,M$12,M$13,M$14,M$15,M$16,M$17
M$1 dfb 00
M$2 dfb 02,04,04,03,00
M$3 dfb 04,05,02,02,00
M$4 dfb 04,02,00
M$5 dfb 01,06,02,03,00
M$6 dfb 01,08,03,05,00
M$7 dfb 00
M$8 dfb 03,06,00
M$9 dfb 00
M$10 dfb 01,11,00
M$11 dfb 00
M$12 dfb 00
M$13 dfb 00
M$14 dfb 02,13,00
M$15 dfb 05,17,02,16,01,13,00
M$16 dfb 04,15,00
M$17 dfb 06,15,00
*--- On commence ˆ index 0
AA = 92
tblA$ da A$1,A$2,A$3,A$4,A$5,A$6,A$7,A$8,A$9,A$10
da A$11,A$12,A$13,A$14,A$15,A$16,A$17,A$18,A$19,A$20
da A$21,A$22,A$23,A$24,A$25,A$26,A$27,A$28,A$29,A$30
da A$31,A$32,A$33,A$34,A$35,A$36,A$37,A$38,A$39,A$40
da A$41,A$42,A$43,A$44,A$45,A$46,A$47,A$48,A$49,A$50
da A$51,A$52,A$53,A$54,A$55,A$56,A$57,A$58,A$59,A$60
da A$61,A$62,A$63,A$64,A$65,A$66,A$67,A$68,A$69,A$70
da A$71,A$72,A$73,A$74,A$75,A$76,A$77,A$78,A$79,A$80
da A$81,A$82,A$83,A$84,A$85,A$86,A$87,A$88,A$89,A$90
da A$91,A$92
A$1 str "A01.D03K02O."
A$2 str "A01.D04O."
A$3 str "B01.S01L."
A$4 str "B03.S03L."
A$5 str "B03C01.D06N."
A$6 str "B01B03.H03E05E03L."
A$7 str "B01.H01E05E03L."
A$8 str ".R00."
A$9 str ".P00."
A$10 str ".O00."
A$11 str "B03.C03L."
A$12 str "B01.C01L."
A$13 str "D07.D07N."
A$14 str "B07.S07D22N."
A$15 str "C07.D08N."
A$16 str "C07.D08N."
A$17 str "D07.D09N."
A$18 str "D07.D09N."
A$19 str "A05F06F04.E04D11D10N."
A$20 str "A05F06F04.D11E03E06N."
A$21 str "A05E04.D12N."
A$22 str "A03F08.E08L."
A$23 str "A06F08.D23N."
A$24 str "A06E08C06.K07F08O."
A$25 str "A07B06.S06D24K06L."
A$26 str "A06E08B06.K06N."
A$27 str "A06D06E04B08.D13E07H08N."
A$28 str "A06D06E04B08.D14E07H08N."
A$29 str "A06D06F04F06B08.D15H08E07N."
A$30 str "A06C06B08.D16N."
A$31 str "A08E07E06.D17K09O."
A$32 str "A08F07F08.D18E08N."
A$33 str "A08F07F08.D18E08N."
A$34 str "A08F08F06.D18E08N."
A$35 str "A08F08F06.D18E08N."
A$36 str "A08E08.D19Q."
A$37 str "A08F08.D19Q."
A$38 str "A08E07E06.D19Q."
A$39 str "A09.E09K10O."
A$40 str "A09.D19Q."
A$41 str "A09.D27N."
A$42 str "A10F04.E04L."
A$43 str "A10E04.D29N."
A$44 str "A10E04.F04L."
A$45 str "A10F04.D29N."
A$46 str "A10E04F06.E06L."
A$47 str "A10E06.E08D30N."
A$48 str "A10E07.D21Q."
A$49 str "A10E04.D21Q."
A$50 str "A10F04.D32N."
A$51 str "A10E08.F08D33N."
A$52 str "A09.D27N."
A$53 str "A11.D34K12O."
A$54 str "A11.D34K12O."
A$55 str "A11.D34K12O."
A$56 str "B06.C06L."
A$57 str "A12.D31Q."
A$58 str "A12.K13O."
A$59 str "B11F04.E04H11D36N."
A$60 str "A13F04.D26Q."
A$61 str "A13E04.F04K14O."
A$62 str "B17.D37Q."
A$63 str "F05B15.E05H15L."
A$64 str "E05.D29N."
A$65 str "F08B13.E08H13L."
A$66 str "E08.D29N."
A$67 str "B13.S13L."
A$68 str "B17.S17L."
A$69 str "B15.S15L."
A$70 str "B13.C13L."
A$71 str "B17.C17L."
A$72 str "B15.C15L."
A$73 str "B19.S19L."
A$74 str "B19.C19L."
A$75 str "A13.E06K15O."
A$76 str "B20.S20L."
A$77 str "B20.C20L."
A$78 str "B20F07.D38E07N."
A$79 str "B20E07.D29N."
A$80 str "B11.S11L."
A$81 str "B11.C11L."
A$82 str "A17F07.D39N."
A$83 str "A17E07.D44D21O."
A$84 str "A14F05.D40Q."
A$85 str "A14E06E05F08.F06F05L."
A$86 str "A14F08.D41Q."
A$87 str "A14E06E05E08.F06L."
A$88 str "A14E08F05F06.D42D43Q."
A$89 str "A14E08E05E06.D42D45D46Q."
A$90 str "A14E08E05F06.D42D43D45Q."
A$91 str "A14E08F05E06.D42D46Q."
A$92 str ".N."
tblA dfb 07,00
dfb 30,00
dfb 15,28
dfb 15,18
dfb 17,18
dfb 17,18
dfb 17,28
dfb 34,00
dfb 33,00
dfb 35,00
dfb 32,18
dfb 32,28
dfb 13,16
dfb 15,16
dfb 13,16
dfb 14,16
dfb 14,16
dfb 14,16
dfb 19,20
dfb 19,21
dfb 19,21
dfb 15,36
dfb 23,25
dfb 23,25
dfb 15,22
dfb 23,25
dfb 29,31
dfb 29,31
dfb 29,31
dfb 29,31
dfb 05,00
dfb 05,00
dfb 06,00
dfb 05,00
dfb 06,00
dfb 05,00
dfb 06,00
dfb 06,00
dfb 41,00
dfb 06,00
dfb 30,00
dfb 23,38
dfb 23,38
dfb 42,38
dfb 42,38
dfb 39,37
dfb 06,00
dfb 40,00
dfb 40,00
dfb 40,00
dfb 05,00
dfb 44,00
dfb 43,00
dfb 45,43
dfb 46,43
dfb 32,22
dfb 19,47
dfb 19,48
dfb 49,51
dfb 04,00
dfb 04,00
dfb 50,53
dfb 50,54
dfb 50,54
dfb 50,52
dfb 50,52
dfb 15,52
dfb 15,53
dfb 15,54
dfb 32,52
dfb 32,53
dfb 32,54
dfb 15,56
dfb 32,56
dfb 03,00
dfb 15,57
dfb 32,57
dfb 13,57
dfb 13,57
dfb 15,51
dfb 32,51
dfb 58,00
dfb 58,00
dfb 15,55
dfb 15,55
dfb 06,00
dfb 15,55
dfb 06,00
dfb 06,00
dfb 06,00
dfb 06,00
dfb 00,00 ; 93 is ".N."
*--- On commence ˆ index 0
* C = 13
tblC$ da $bdbd
da C$1,C$2,C$3,C$4,C$5,C$6,C$7,C$8,C$9,C$10
da C$11,C$12,C$13
C$1 str "A04E05.D05Q."
C$2 str "E04F10.G0403E10."
C$3 str "G04A10.G0499F09D25."
C$4 str "A04F05.D20."
C$5 str "E06F10.G0405E10."
C$6 str "G04.D01Q."
C$7 str "A10E09.D26Q."
C$8 str "A10E07.F06F07F04F08."
C$9 str "A11F07.G0103E07."
C$10 str "A11G01.D35Q."
C$11 str "A12.F06F04."
C$12 str "A12.F08F05F07."
C$13 str ".N."
*-----------------------------------
DEBUT_DATA
CORRESP ds 1
BREAK ds 1
E ds 1
F1 ds 1
G ds 1
H ds 1
HH ds 1
L ds 1
LX ds 1
MO$1 ds 1 ; mot 1
MO$2 ds 1 ; mot 2
N ds 1
CP ds 1
OK ds 1
SALLE ds 1
T ds 1
W ds 1
Z ds 1
lenSTRING ds 1
C ds 5+1
E$ ds 32 ; the longest string
S ds 10+1 ; was P in Le manoir
X$1 ds 4+1 ; premier mot saisi
X$2 ds 4+1 ; second mot saisi
FIN_DATA
*--- The lazy decimal to hexadecimal conversion
tblD2H dfb 0,10,20,30,40,50,60,70,80,90
*-----------------------------------
* LES AUTRES FICHIERS
*-----------------------------------
put fr.s
put ../common/musiques.s
*--- It's the end