Un patch pour Flobynoid!
Cet article fait suite à ma page sur la démo du jeu
Flobynoid programmé par les anciens
crackers/programmeurs/artistes The Gog's,
Deny
et Spk du groupe ACS.
Comme je le mentionnais, pour avoir une chance que le soft complet
fonctionne avec l'émulateur d'Apple II Applewin,
il faut avant
tout s'assurer que dans la configuration, la vitesse du drive soit en
mode "Authentic Speed".
Selon votre version d'Applewin, l'option de
config peut ressembler
à ceci:
Mais même en ayant effectué ce réglage, il se peut
très bien que le jeu se plante en fonction de la version
d'Applewin que vous utilisez:
S'il y a bien quelque chose que vous ne maîtrisez pas, c'est le
suivi des mises à jour de cet émulateur.
Alors le plus simple pour que vous ne soyez pas tributaire des
éventuels bogues des programmeurs d'Applewin,
c'est de modifier
directement le jeu Flobynoid afin de faire en
sorte que quelque soit la
version de votre émulateur, le jeu ne plante plus en corrigeant
la source possible des problèmes.
C'est ce que je me propose de faire ici.
La modification en elle-même ne concerne que le boot 1, donc 1
seul secteur à changer.
Tout d'abord, j'ai recherché le disk image que j'allais
utiliser.
Il y a celui de The Gog's que l'on trouve sur la
page
Flobynoid sur son site du Free Tools
Association (FTA).
Cette version est datée de 2002 et correspond à la 9.8.
Celle proposée par Virtual Apple est exactement la même.
Je l'ai comparée à la version 9.8 que mon ami Thry2
m'avait envoyée il y a longtemps sous forme de .dsk, grâce
à l'outil FAST COMPARE.
Il s'avère qu'un bon nombre de secteurs sont différents
mais j'ignore à quoi correspondent ces modifications.
Seul Olivier doit le savoir...
J'ai donc privilégié sa version à lui. Si celle de
Thry2 vous intéresse, j'ai ça sous
le coude et je peux
vous l'envoyer.
Mais je ne la mets pas sur cette page pour ne pas multiplier les
versions avec un même numéro.
De mon côté, à l'époque, j'avais eu le jeu
complet sous le
manteau.
Le soft n'était pas encore diffusé et c'était mon
ami et collègue de groupe Eddie Hawk qui
m'avait passé sa
version 8.3 avec pour consigne de ne pas la donner.
Il y a là aussi des secteurs différents. Un des
changements se voit tout de suite: sur la version 8.3, il n'y a pas de
boot counter contrairement à la 9.8 (ce qui du coup permet de
booter plus vite!) et sur la signature la lettre O est remplacée
par un
zéro (O barré), façon Br0derbund
(et ses créateurs - les Carlstons, ... -
originaires des
Nordics, et plus précisement de Suède).
Comparaison visuelle 8.3 / 9.8:
Après, il faut jouer pour peut-être voir les écarts.
Sur la 8.3, les scores mentionnent quelques users de l'Underground FR.
Sur la 9.8, les scores ont été pourris au secteur
éditeur par les groupes français The
Brain Trust et The
MVGang.
Ces mégalos voulaient ainsi voir toujours leurs noms de groupe
en 1er...
Des différences dans les fonts utilisées...
Pour avoir les scores sur la page du menu principal sans attendre la
fin d'une partie, appuyez sur la touche flèche gauche.
Les high scores s'incrustent sur l'écran (ici la 8.3):
Quelques notes sur la 9.8:
- un message T$02 S$0A: "DANS LA VIE, IL Y A CEUX QUI CREUSENT... ET
LES AUTRES. SSS."
- numéro du boot: T$06 S$0E.
- un message T$0B S$05: "WHAT ARE YOU LOOKING FOR, SILLY BOY !!!"
- un message (de fin?) T$16 S$06: "QUELQUE PART, DANS L'ESPACE
INFINI... LE FL0BYNOID REGAGNE SA BASE... SA MISSION TERRESTRE TERMINEE
!!!"
J'ai mis la vieille version 8.3 en disk image à la fin de cette
page mais ce n'est pas celle là que j'ai patchée.
Je ne me suis occupé que de la 9.8.
Ce qui nous intéresse en 1er lieu ici, c'est le boot.
Contrairement à la démo, ACS a
été plus
raisonnable quant à l'emploi des softswitchs pour le remplissage
du latch.
On a ici du classique $C0EC, c'est à dire un $C08C,X avec X
forcé sur le slot 6 et pas de $C0E0/$C080,X.
Sinon, grosso modo, le boot du jeu est sensiblement le même que
celui de la démo!
La lecture des champs adresse est toujours zappée
avec la conséquence directe que l'on sait: le plantage dans
certains cas avec Applewin. Ceci concerne aussi
bien la version 8.3 que
la version
9.8.
(A noter que le boot1 de la version 8.3 n'a pas le même point
d'entrée dans le boot 2 que la version 9.8: $BAD8 au lieu de
$B600).
Pour le patch de la démo, j'avais repris un Accolad-boot
simplifié.
Ici, on va faire encore plus simple. Puisque l'on connait les
numéros de secteurs physiques à charger, on ne va pas
s'embêter à faire de l'interleaving avec des
numéros de secteurs logiques. Voir le cours sur l'interleaving si ce que je dis vous échappe.
Ainsi que le cours de Godfather sur le boot Accolade.
On va réutiliser la routine de la rom du controleur de disquette
qui charge un secteur physique de la piste courante.
Comme elle fait à chaque fois un JMP $0801 après
chargement, on met un RTS en $0801. Et hop, elle devient la
sous-routine de chargement du boot 1.
Il n'y a plus qu'à appeler ce code en $C65C après avoir
sélectionné le secteur physique à loader.
Le boot1 devient juste un petit physical-loader avec une boucle qui lit
la table des secteurs désirés et fait le JSR qui va bien.
Détail du loading:
Buffer Physical sector
$B600 : T$00 S$02
$B700 : T$00 S$04
$B800 : T$00 S$06
$B900 : T$00 S$08
$BA00 : T$00 S$0A
$BB00 : T$00 S$0C
$BC00 : T$00 S$0E
$BD00 : T$00 S$00
Et voila le tour est joué... :-)))
Pour plus de détail, le source est en bas de cette page.
Snapshots
Quelques images du jeu.
Je n'ai pas la doc, mais ce n'est pas génant pour jouer.
D'une manière générale, les touches se trouvent
sans problème. C'est intuitif.
Evidemment, il doit bien y avoir ici et là des Easter Eggs et
autres touches planquées mais je n'ai pas la liste.
En appuyant sur une touche de 1 à 9 au démarrage, cela
permet de commencer au tableau de la dizaine correspondante.
J'ai aussi vu qu'il était possible de sauvegarder et repartir de
la sauvegarde (touche ctrl-L pour le load).
Par le menu principal, il est possible d'accéder à
l'éditeur de tableaux.
Pour créer son data disk, il faut commencer par le formatage de
celui-ci via l'option F:
Quand c'est ok, vous passez en mode édition après avoir
sélectionné le tableau que vous voulez dessiner.
Utilisez la touche B pour choisir la brique (appuyez plusieurs fois sur
B pour la faire changer) et la touche espace pour poser cette brique.
Il y a comme choix:
- Brique cassable en 1 coup
- Brique cassable en 2 coup
- Brique incassable
Ici j'ai fait à la va-vite un tableau avec les lettres: HI!
J'ai choisi un libellé correspondant au nom du level: TEST HI.
Quand je lance le jeu en sélectionnant le data disk et en
choisissant mon niveau, je peux m'amuser avec (et le tester).
Disk images .DSK

|
Fast Boot
|
Download patched Flobynoid 9.8 (version 2002) for
Applewin (gzipped)
|

|
Fast Boot
|
Download Flobynoid 8.3 -older original version
(gzipped)
|

|
DOS 3.3
|
Download new Flobynoid boot 1 source code for
release 9.8 (gzipped)
|
File: Flobynoid_Src.dsk
Disk: DOS 3.3 Volume 254 (140KB)
Name
Type Auxtyp Modified
Format Length
------------------------------------------------------------------------------
DISK*
BAS $0801 [No
Date]
DOS 119
T.FLOBY.BOOT1.NEW
TXT $0000 [No
Date]
DOS 2547
FLOBY.BOOT1.NEW
BIN $0800 [No
Date]
DOS 256
INSTALL.SPEEDY
BAS $0801 [No
Date]
DOS 1560
------------------------------------------------------------------------------
Nouveau boot 1 avec un physical-load
:asm
1
2
; LST OFF
3
ORG $0800
4
5 ********************************
6
*
*
7 * Nouveau boot1
FLOBYNOID *
8 * FOR
APPLEWIN! *
9 * (c)2007 by
Deckard *
10
*
*
11 ********************************
12
13 * Adresses page 0
14
15 BUFF_LOW
EQU $26
16 BUFF_HIGH EQU
$27
17 SECTOR
EQU $3D
18 TRACK
EQU $41 ; must be
0!
19
20 * Adresse rom
21
22 HC65C
EQU $C65C ; routine load
sector
23
INIT
EQU $FB2F
24 SETKBD
EQU $FE89
25 SETVID
EQU $FE93
26
HOME
EQU $FC58
27
WAIT
EQU $FCA8
28
29 ********************************
30
0800: 01
31
DFB 1
; un seul secteur à charger
32
33 ********************************
34
35
FLOBY_BOOT1
0801: E0 60
36
CPX #$60 ; boot from
slot 6?
0803: F0 03
37
BEQ :1 ; yes
38
0805: 4C 9A 08
39
JMP BAD_SLOT ; no. sorry, can't run
40
41
; $60=RTS nécessaire car la routine de load
0808: 8E 01 08 42
:1
STX FLOBY_BOOT1 ; utilisée ($C65C) finit par
un JMP $0801
43
44 * Chargement boot2
45
080B: A9 B6
46
LDA #>$B600 ; buffer implantation
$B600-$BDFF
080D: 85 27
47
STA BUFF_HIGH
48
080F: CE FF 08 49
:3
DEC NB_SECT ; [7-0]
0812: 30 0C
50
BMI :2 ; fin
51
0814: AE FF 08
52
LDX NB_SECT ; traite index courant
0817: BD 77 08
53
LDA SECTP_BOOT2,X ; secteur physique
081A: 20 6A 08
54
JSR LOADP ; physical load
081D: 4C 0F 08
55
JMP :3 ;
secteur suivant
56
57 * Préparations
58
0820: 20 2F FB 59
:2
JSR INIT ; inits
0823: 20 93 FE
60
JSR SETVID
0826: 20 89 FE
61
JSR SETKBD
62
0829: A9 8E
63
LDA #<$BB8E ; reset
082B: 8D F2 03
64
STA $03F2
082E: A9 BB
65
LDA #>$BB8E
0830: 8D F3 03
66
STA $03F3
0833: 49 A5
67
EOR #$A5 ; funny
complement
0835: 8D F4 03
68
STA $03F4
69
0838: 20 58 FC
70
JSR HOME
71
083B: A9 DF
72
LDA #"_" ; affichage
haut titre
083D: A0 00
73
LDY #0
083F: 99 37 04 74
:4
STA $0437,Y
0842: C8
75
INY
0843: C0 0B
76
CPY #$0B
0845: D0 F8
77
BNE :4
78
0847: A0 00
79
LDY #0 ;
affichage Flobynoid
0849: B9 7F 08 80
:5
LDA FLOBY,Y
084C: 99 B5 04
81
STA $04B5,Y
084F: C8
82
INY
0850: C0 0F
83
CPY #$0F
0852: D0 F5
84
BNE :5
85
0854: A0 00
86
LDY #0 ;
affichage version
0856: B9 8E 08 87
:6
LDA VERSION,Y
0859: 99 B7 05
88
STA $05B7,Y
085C: C8
89
INY
085D: C0 0C
90
CPY #$0C
085F: D0 F5
91
BNE :6
92
0861: 8D 00 C0
93
STA $C000
0864: 8D 0C C0
94
STA $C00C
0867: 4C 00 B6
95
JMP $B600 ; boot2
96
97
98 ********************************
99
*
*
100 * Charge un secteur physique *
101 * de la piste
$00
*
102
*
*
103 ********************************
104
105 * In : acc = secteur physique à lire
106 *
107 * Out: BUFF_HIGH a été incrémenté
par la routine rom
108
109
LOADP
086A: 85 3D
110
STA SECTOR
086C: A2 00
111
LDX #$00
086E: 86 26
112
STX BUFF_LOW
0870: 86 41
113
STX TRACK
0872: A2 60
114
LDX #$60 ; slot*16
0874: 4C 5C C6
115
JMP HC65C ; routine LOAD de
la carte controleur+RTS
116
117 *-------------------------------
118
119 * Secteurs physiques du boot 2 à charger
120 * en ordre inversé
121 * Logiques: HEX 0008090A0B0C0D0E
0877: 00 0E 0C 122 SECTP_BOOT2
HEX 000E0C0A08060402
087A: 0A 08 06 04 02
123
124 ********************************
125
087F: A8 BA 126
FLOBY
ASC "(:"
0881: 20
127
ASC ' '
0882: 06 0C 0F
128
INV 'FLOBYNOID'
0885: 02 19 0E 0F 09 04
088B: 20
129
ASC ' '
088C: BA A9
130
ASC ":)"
131
088E: D6 E5 F2 132
VERSION ASC
"Version 9.8 "
0891: F3 E9 EF EE A0 B9 AE B8
0899: A0
133
134 ********************************
135
089A: 20 58 FC 136 BAD_SLOT
JSR HOME
089D: A0 00
137
LDY #0
089F: B9 AD 08 138
:1
LDA TXT_BAD_SLOT,Y
08A2: 99 00 04
139
STA $0400,Y
08A5: C8
140
INY
08A6: C0 0E
141
CPY #$0E
08A8: D0 F5
142
BNE :1
143
08AA: 4C 00 E0
144
JMP $E000 ; the end
145
08AD: 02 146
TXT_BAD_SLOT INV 'B'
08AE: CF CF D4
147
ASC "OOT "
08B1: A0
08B2: 13
148
INV 'S'
08B3: CC CF D4
149
ASC "LOT "
08B6: A0
08B7: 13
150
INV 'S'
08B8: C9 D8 AE
151
ASC "IX."
152
153 ********************************
154
08BB: 00 00 00
155
DS 61,0
...
08F6: 00 00
156
08F8: C4 C5 C3
157
ASC "DECKARD"
08FB: CB C1 D2 C4
158
08FF: 08 159
NB_SECT DFB
8 ; nbr de secteurs
à charger
160
161
SAV FLOBY.BOOT1.NEW
Object saved as FLOBY.BOOT1.NEW,A$0800,L$0100
--End assembly, 256 bytes, Errors: 0
Symbol table - alphabetical order:
BAD_SLOT
=$089A BUFF_HIGH
=$27
BUFF_LOW
=$26
FLOBY =$087F
FLOBY_BOOT1 =$0801
HC65C
=$C65C
HOME
=$FC58
INIT =$FB2F
LOADP
=$086A
NB_SECT
=$08FF
SECTOR
=$3D SECTP_BOOT2 =$0877
SETKBD
=$FE89
SETVID
=$FE93
TRACK
=$41 TXT_BAD_SLOT =$08AD
VERSION =$088E
? WAIT
=$FCA8
Symbol table - numerical order:
BUFF_LOW
=$26
BUFF_HIGH
=$27
SECTOR
=$3D
TRACK =$41
FLOBY_BOOT1 =$0801
LOADP
=$086A SECTP_BOOT2
=$0877
FLOBY =$087F
VERSION
=$088E BAD_SLOT
=$089A TXT_BAD_SLOT
=$08AD
NB_SECT =$08FF
HC65C
=$C65C
INIT
=$FB2F
HOME =$FC58
? WAIT =$FCA8
SETKBD
=$FE89
SETVID =$FE93