Flobynoid Demo

Dernière mise à jour: jeudi 11/01/2007.

ACS!

Un nom de groupe underground qui a largement marqué l'ère Apple II non seulement en France, mais aussi à l'étranger (que ce soit sous cette forme ou sous la version commerciale du groupe: S.S.S. pour Second Sight Software).

J'ai déjà eu l'occasion d'aborder (superficiellement) leur premier jeu, Flobynoid lors de l'interview du pirate Godfather.
Ce fut pour The Gog's, Deny et Spk une expérience malheureuse; leur logiciel de casse-briques n'ayant pas pu être commercialié à cause d'une licence exclusive détenue par Taito et leur propre projet Arkanoid déjà en cours de développement sur la plateforme Apple II.

Le logiciel Flobynoid final, après être resté un moment sous le coude, fut finalement diffusé en shareware.
Mais l'esprit de gratuité de l'underground régnant alors, le soft n'a pas dû rapporter beaucoup d'espèces sonnantes et trébuchantes à nos malchanceux programmeurs et artistes.

Flobynoid fut répandu un peu partout dans l'hexagone et finit de l'autre côté de l'Atlantique où il fit le bonheur des vendeurs américain de freewares. On trouve ainsi sans trop de difficulté le disk image du jeu sur internet.

Il fonctionne sur PC avec l'émulateur de IIe Apple Oasis mais malheureusement se crashe sur Applewin.
Correction du 11/01/2007: le jeu fonctionne avec certaines versions d'Applewin (les anciennes) mais pas avec les dernières.
Par exemple c'est OK avec la 1.12.3 sous Linux (émulation Wine) mais le boot finit sous moniteur avec les versions 1.12.5.0 et 1.12.6.0 sous Win98SE.
Dans tous les cas de figure, il faut préciser au niveau de la configuration de l'émulateur que l'on veut avoir la vitesse authentique du drive:

Speed

Ce que l'on sait moins, c'est qu'ACS a aussi fait une démo de ce jeu. Et elle, on ne la trouve pas DU TOUT sur internet, y compris sur le site FTA de The Gog's.

C'est en créant des disks images avec mon outil FASTDSK, que je me suis fait un .DSK de cette disquette de démo inhumée dans un de mes cartons.
J'ai testé ma version sur un vrai Apple IIe. Elle marche correctement en affichant une partie automatique enregistrée de quelques tableaux, puis s'arrête brutalement sous moniteur avec un message "FICHIER TEXTE".
Est-ce normal ou pas, je l'ignore, mais c'est la seule version que je possède.
J'ai vu au passage qu'elle avait probablement déjà été tripatouillée par d'autres users (les modifs des vecteurs reset étaient désactivées et il y a du NOP qui traine au milieu du code).
Aussi je me suis dit que ce serait bien qu'elle soit accessible à tous.

J'ai donc testé mon .DSK sur Applewin, et malheureusement cela ne fonctionnait pas :-(((

Et puis j'ai pensé à Deny qui m'avait contacté en mai/juin 2006 après avoir découvert mon site.
Il n'a pas souhaité faire une interview pour la raison suivante (je cite): " je crois qu'il faut toujours laisser une part de mystère aux mythes, non ? ;) "
Mais il m'a très sympatiquement fait cadeau d'un bouquin sur l'Apple II: "How to program the Apple II using 6502 assembly language" écrit par Randy Hyde et paru chez Datamost.

Aussi dans l'espoir qu'il veuille bien me recontacter pour m'en dire plus sur ce soft (par exemple pour savoir comment ils ont enregistré les parties de la démo), j'ai passé un peu de temps sur cette disquette pour voir ce qui ne passait pas.

J'ai donc fait chauffer Sourceror et ai trouvé 3 raisons de disfonctionnement.
Je me propose de vous les expliquer à présent.
J'ai fixé chaque problème au moyen d'un patch.

1) La caractéristique ACS

Comme je l'ai déjà abordé sur la page consacrée à Déplombage mode d'emploi 6, l'emploi du softswitch $C080 dans les routines de lecture de nibbles du disk II fonctionne. Néanmoins, le standard, c'est $C08C pour remplir le latch, aussi les émulateurs rencontrant $C080 se bloquent.
Le boot 1 de la disquette ne permet donc pas de démarrer le programme.
C'est un problème commun à presque tous les softs d'ACS. Ils ont toujours aimé se démarquer (particularisme, quand tu nous tiens)... rappelez vous le marker FTA de Photonix détecté comme "erreur" par ZZ-Copy...

J'ai shunté les $C080 et ai mis des $C08C à la place (patch #1). Attention, il ne faut pas faire du remplacement bestial car $C080 est aussi utilisé dans les routines de déplacement du bras! Bref, comprendre les routines est obligatoire.

2) L'émulation incomplète

Les émulateurs ne sont pas à 100% à l'image de leur modèle.
ACS était surtout connu pour programmer "au ras du métal". Et ce gap entre haute technicité d'ACS et codage empirique d'applications par les concepteurs d'émulos... coince.

Dans le boot 1 (toujours), on constate que le programme ne s'embarrasse pas de lire les champs adresses de la piste 0!
Il se contente de prendre les champs datas lus par le lecteur de disquette au fil de l'eau.
Or sur un vrai Apple IIe, le temps que le programme traite et denibblize les données d'un secteur, la tête de lecture a sauté le secteur suivant. On a donc un pas de 2 sur l'ordre des secteurs physiques.
Un émulateur n'est pas assujeti à ce facteur temps (ou les programmeurs d'Applewin ne se sont pas embarrassés de cette réalité va-t-on dire). De ce fait, le pas est de 1 sur l'ordre des secteurs physiques.
Donc au final, le programme ne charge pas la même chose sur un vrai apple IIe et sur un émulateur.
Evidement sur ce dernier, il y a crash!!!
Voici illustré le chargement du boot 2:

Buffer  Logical Sector     Physical  ! Logical sector  Physical
        (True Apple IIe)             ! (Applewin)
$B600 : T$00 S$0E          T$00 S$02 ! T$00 S$07       T$00 S$01
$B700 : T$00 S$0D          T$00 S$04 ! T$00 S$0E       T$00 S$02
$B800 : T$00 S$0C          T$00 S$06 ! T$00 S$06       T$00 S$03
$B900 : T$00 S$0B          T$00 S$08 ! T$00 S$0D       T$00 S$04
$BA00 : T$00 S$0A          T$00 S$0A ! T$00 S$05       T$00 S$05
$BB00 : T$00 S$09          T$00 S$0C ! T$00 S$0C       T$00 S$06
$BC00 : T$00 S$08          T$00 S$0E ! T$00 S$04       T$00 S$07
$BD00 : T$00 S$00          T$00 S$00 ! T$00 S$0B       T$00 S$08
                           ->pas de 2                  ->pas de 1

J'ai donc dû ré-écrire un boot 1 plus "standard" qui lit aussi les champs adresses. Je me suis basé sur un Acco-boot que j'ai simplifié mais en respectant l'apparence visuelle du boot 1 initial (signature Flobynoid).
J'ai fait la copie de secteurs logiques suivant sur la piste $00:
Source->cible
S$0E->S$01
S$0D->S$02
S$0C->S$03
S$0B->S$04
S$0A->S$05
S$09->S$06
S$08->S$07
S$00->S$08 : contient l'ancien boot1
Et j'ai mis mon nouveau boot1 en T$00 S$00.
Je précise que sur ma disquette, les secteurs logiques $01 à $07 d'origine n'étaient pas utilisés et ne contenaient que des zéros.
Cette modif correspond au patch #2.

Correction du 11/01/2007: Ce patch permet uniquement de faire tourner la démo sur Applewin sans avoir à mettre d'office la config du drive à "authentic speed". J'ai été mauvaise langue avec les programmeurs d'émulos! C'est une option qui existe... ou tout au moins a existé (bug dans les dernières versions?) car l'option semble ignorée sur les 1.12.5.0 et 1.12.6.0: même résultat (plantage) que l'on soit en authentic speed ou en enhanced speed!!!
Prenez donc ma version patchée et restez tout le temps en enhanced speed sans vous souciez des bévues des programmeurs d'émulos:

Speed


3) Le bug

Mais ça ne marchait toujours pas.
J'ai fini par comprendre le hic!
Je dirais que la faute est partagée.

Tout d'abord ACS aurait dû programmer avec un vrai assembleur et pas faire du bricolage avec Mobby Disk II.
Même s'il faut reconnaitre que c'est dingue d'avoir pondu ce jeu sans fichier source, il y a des limites à ce type d'exercice et c'est un facteur d'introduction de bugs qu'il est possible de détecter tout de suite via un assembleur comme Merlin 8.
C'est avec ce dernier que j'ai assez rapidement capté le problème.

Le bug se trouvait dans la routine de commutation du mode graphique ($BF25) et plus particulièrement dans une instruction de branchement. Au lieu d'avoir un BPL $BF3D (sur un RTS), il y a un BPL $BF3F avec $BF3F:54 C0 60.

A l'origine le code est:

$BF3D:RTS
$BF3E:STA $C054
$BF41:RTS

Sur un vrai Apple IIe, quand le proc de la famille 6502 traite la séquence de codes: 54 C0 60, ça marche.
Sur émulateur, plantum.
Pourquoi?
Parce que $54 est un opcode non documenté!
C'est un NOP sur 2 octets. Sur IIe, le programme ne plante pas et fait NOP+RTS.
Sur émulateur, seuls les opcodes documentés sont traités en temps que tel. Donc splashhh!

Info opcode $54 :

DOP (NOP) [SKB] : No operation (double NOP). The argument has no significance.

Addressing  |Mnemonics  |Opc|Sz | n
------------|-----------|---|---|---
Zero Page,X |DOP arg,X  |$54| 2 | 4


Pour corriger ça, avec un éditeur de secteur:
Chargement T$00 S$0F
Changement Byte$2E: remplacement de $10 par $0E (patch #3)

Voila ce qu'on peut voir avec un assembleur:

Bug

L'autre possibilité, c'est que ce branchement ait été volontairement dirigé vers cet opcode... pour montrer qu'ils connaissaient.
Tordu mais pas irréaliste!!!


Suite à ces corrections, Applewin affiche la même chose que sur mon IIe.
La preuve sur 2 versions différentes d'Applewin, dont une récente avec émulation de disque dur .HDV:

Ecran Flobynoid Demo
Ecran Flobynoid Demo



Voici quelques écrans de la démo (on n'en voit pas souvent sur le net des screenshots de Floby!)

On voit tomber les bonus, un dédoublement de balle et une ouverture en bas à droite vers le level suivant.

A noter un point important: si vous exécutez plusieurs fois de suite la démo, vous constaterez que l'enchainement des niveaux n'est pas forcément le même. Il y a une notion de hasard dans les bonus (laser, colle, next level, etc...). La durée d'un level en dépend.
Vous pouvez avoir 3 levels de démo ou plus (j'en ai eu 5 à un moment). Et donc voir à un moment donné un tableau que vous n'aviez pas vu la fois précédante...
Lors d'un run, j'ai eu un level très très long. Il ne restait plus qu'une seule brique et j'ai cru à un bug car la raquette n'arrivait pas à l'avoir. Finalement j'ai été patient et elle a fini par faire mouche. Mais c'était à s'endormir!!!

Ajout du 11/01/2007: à noter que cette notion de hasard semble perturber l'autre émulateur Apple Oasis.
En effet, sur 3 boots, les 3 fois je n'ai pas eu droit à 1 seul tableau!!! Je passe directement de la page graphique m'invitant à appuyer sur ESC pour commencer au message "FICHIER TEXTE".
Bizarre, bizarre car je tenais Apple Oasis pour meilleur qu'Applewin côté compatibilité...


Ecran Flobynoid Demo
Ecran Flobynoid Demo
Ecran Flobynoid Demo
Ecran Flobynoid Demo
Ecran Flobynoid Demo
Ecran Flobynoid Demo
Ecran Flobynoid Demo
Ecran Flobynoid Demo
Ecran Flobynoid Demo


Bon, j'espère qu'avec tout ça, il y en a au moins un -SPK- qui ne fait plus la gueule ;-)

Spk




Floppy
Fast Boot
Download Flobynoid Demo for Applewin - enhanced & authentic speed (gzipped)
Patchs 1 & 2 & 3
Floppy
Fast Boot
Download Flobynoid Demo for Applewin - runs only with authentic disk II speed (gzipped)
Patchs 1 & 3
Floppy
Fast Boot
Download Flobynoid Demo for REAL Apple II, which doesn't work with emulators (gzipped)
Floppy
DOS 3.3
Download Flobynoid Demo: boot source code (gzipped)


File: Demo_Flobynoid_Src.dsk
Disk: DOS 3.3 Volume 254 (140KB)
 Name                             Type Auxtyp Modified         Format   Length
------------------------------------------------------------------------------
 DISK*                            BAS  $0801  [No Date]        DOS         119
 T.FLOBYDEMO.BOOT1.NEW            TXT  $0000  [No Date]        DOS        2466
 FLOBYDEMO.BOOT1.NEW              BIN  $0800  [No Date]        DOS         256
 INSTALL.SPEEDY                   BAS  $0801  [No Date]        DOS        1560
 BOOT1.ORIG                       BIN  $0800  [No Date]        DOS         256
 BOOT2.ORIG                       BIN  $B600  [No Date]        DOS        2048
 BOOT1                            BIN  $0800  [No Date]        DOS         256
 T.BOOT1                          TXT  $0000  [No Date]        DOS        3627
 T.BOOT2                          TXT  $0000  [No Date]        DOS       12049
 BOOT2                            BIN  $B600  [No Date]        DOS        2048
 DRIVER.ORIG                      BIN  $BF00  [No Date]        DOS         256
 T.DRIVER                         TXT  $0000  [No Date]        DOS        3046
 DRIVER                           BIN  $BF00  [No Date]        DOS         256
------------------------------------------------------------------------------


hr ACS


Références


Lien Référence Source
Voir Boot 1 original. ACS.
Voir Boot 2 original (Fast Load). ACS.
Voir Driver original. ACS.
Voir Nouveau boot 1. Deckard.


hr ACS

Boot 1 original.



:asm
                1   
                2                                   ; LST OFF
                3                  ORG    $0800    
                4   
                5    ********************************
                6    *                              *
                7    *    BOOT 1 FLOBYNOID DEMO     *
                8    *         (C)1987 SSS          *
                9    *      SOURCE BY DECKARD       *
                10   *                              *
                11   ********************************
                12  
                13   * Une fois de plus ACS/SSS a utilisé le softswitch
                14   * $C080 au lieu de $C08C pour remplir le latch.
                15   * C'est quasiment une seconde signature!!!
                16  
                17   * Sur un vrai Apple II, ce n'est pas génant de skipper
                18   * la recherche du champ addresse au niveau du boot1.
                19   * Voila ce qui se passe:
                20   *
                21   * Chargement de 8 secteurs.
                22   *
                23   * Buffer        T/S logique  T/S physique
                24   * $B600-$B6FF : T$00 S$0E    T$00 S$02
                25   * $B700-$B7FF : T$00 S$0D    T$00 S$04
                26   * $B800-$B8FF : T$00 S$0C    T$00 S$06
                27   * $B900-$B9FF : T$00 S$0B    T$00 S$08
                28   * $BA00-$BAFF : T$00 S$0A    T$00 S$0A
                29   * $BB00-$BBFF : T$00 S$09    T$00 S$0C
                30   * $BC00-$BCFF : T$00 S$08    T$00 S$0E
                31   * $BD00-$BDFF : T$00 S$00    T$00 S$00
                32   *
                33   * Mais avec un émulateur, c'est la catastrophe car il
                34   * n'y a pas un pas de 2 pour les secteurs physiques.
                35   * Bref, on charge différement et évidemment il y a un crash.
                36  
                37   *-------------------------------
                38  
                39   BUFL          EQU    $26       ; buffer low chargement
                40   BUFH          EQU    $27       ; buffer high chargement
                41  
                42   H02D6         =      $02D6    
                43   H0300         =      $0300    
                44   RESET         =      $03F2    
                45   H03F3         =      $03F3    
                46   H03F4         =      $03F4    
                47   H08FF         =      $08FF    
                48   KEY           =      $C000    
                49   HC00C         =      $C00C    
                50   HC080         =      $C080    
                51   INIT          =      $FB2F    
                52   HOME          =      $FC58    
                53   WAIT          =      $FCA8    
                54   SETKBD        =      $FE89    
                55   SETVID        =      $FE93    
                56  
                57   *-------------------------------
                58  
0800: 01        59                 DFB    1         ; 1 secteur à charger
                60  
                61   *-------------------------------
                62  
0801: E0 60     63                 CPX    #$60      ; slot*16
0803: F0 03     64                 BEQ    H0808     ; ok en slot 6
                65  
0805: 4C D1 08  66                 JMP    H08D1     ; msg must boot from slot 6 et fin
                67  
0808: A9 B6     68   H0808         LDA    #>$B600  
080A: 85 27     69                 STA    BUFH     
                70  
                71   *-------------------------------
                72   * Routine de chargement secteur
                73  
080C: BD 80 C0  74   H080C         LDA    HC080,X   ; 1er nibble header champ data
080F: 10 FB     75                 BPL    H080C    
                76  
0811: 49 D5     77   H0811         EOR    #$D5     
0813: D0 F7     78                 BNE    H080C    
                79  
0815: BD 80 C0  80   H0815         LDA    HC080,X   ; 2nd nibble header champ data
0818: 10 FB     81                 BPL    H0815    
                82  
081A: C9 AA     83                 CMP    #$AA     
081C: D0 F3     84                 BNE    H0811    
                85  
081E: BD 80 C0  86   H081E         LDA    HC080,X   ; 3eme nibble header champ data
0821: 10 FB     87                 BPL    H081E    
                88  
0823: C9 AD     89                 CMP    #$AD     
0825: D0 EA     90                 BNE    H0811    
                91  
0827: A9 00     92                 LDA    #$00      ; décodage 6-2
0829: A0 56     93                 LDY    #$56     
082B: 84 3C     94   H082B         STY    $3C      
082D: BC 80 C0  95   H082D         LDY    HC080,X   ; lecture nibble data
0830: 10 FB     96                 BPL    H082D    
                97  
0832: 59 D6 02  98                 EOR    H02D6,Y  
0835: A4 3C     99                 LDY    $3C      
0837: 88        100                DEY             
0838: 99 00 03  101                STA    H0300,Y  
083B: D0 EE     102                BNE    H082B    
                103 
083D: 84 3C     104  H083D         STY    $3C      
083F: BC 80 C0  105  H083F         LDY    HC080,X   ; lecture nibble data
0842: 10 FB     106                BPL    H083F    
                107 
0844: 59 D6 02  108                EOR    H02D6,Y  
0847: A4 3C     109                LDY    $3C      
0849: 91 26     110                STA    (BUFL),Y 
084B: C8        111                INY             
084C: D0 EF     112                BNE    H083D    
                113 
084E: BC 80 C0  114  H084E         LDY    HC080,X   ; lecture nibble checksum
0851: 10 FB     115                BPL    H084E    
                116 
0853: 59 D6 02  117                EOR    H02D6,Y  
0856: D0 48     118                BNE    H089F+1   ; crash si différent de 0
                119 
0858: A0 00     120                LDY    #$00      ; integre les 2 bits dans chaque octet
085A: A2 56     121  H085A         LDX    #$56     
085C: CA        122  H085C         DEX             
085D: 30 FB     123                BMI    H085A    
                124 
085F: B1 26     125                LDA    (BUFL),Y 
0861: 5E 00 03  126                LSR    H0300,X  
0864: 2A        127                ROL             
0865: 5E 00 03  128                LSR    H0300,X  
0868: 2A        129                ROL             
0869: EA        130                NOP             
086A: EA        131                NOP             
086B: 91 26     132                STA    (BUFL),Y  ; et rempli le buffer résultat
086D: C8        133                INY             
086E: D0 EC     134                BNE    H085C    
                135 
                136  *-------------------------------
                137 
0870: E6 27     138                INC    BUFH      ; page suivante
0872: A2 60     139                LDX    #$60     
0874: CE FF 08  140                DEC    H08FF     ; un secteur de - à charger
0877: D0 93     141                BNE    H080C     ; pas fini
                142 
                143  *-------------------------------
                144 
0879: 20 C4 08  145                JSR    H08C4     ; inits
087C: 20 2F FB  146                JSR    INIT     
                147 
087F: A9 59     148                LDA    #$59      ; protection reset disable
0881: 2C F2 03  149                BIT    RESET    
0884: A9 FF     150                LDA    #$FF     
0886: 2C F3 03  151                BIT    H03F3    
0889: 49 A5     152                EOR    #$A5     
088B: 2C F4 03  153                BIT    H03F4    
                154 
                155  * Signature FLOBYNOID
                156 
088E: 20 58 FC  157                JSR    HOME     
0891: A9 DF     158                LDA    #$DF     
0893: A0 00     159                LDY    #$00     
0895: 99 0E 04  160  H0895         STA    $040E,Y  
0898: C8        161                INY             
0899: C0 0B     162                CPY    #$0B     
089B: D0 F8     163                BNE    H0895    
                164 
089D: A0 00     165                LDY    #$00     
089F: B9 B2 08  166  H089F         LDA    H08B2,Y  
08A2: 99 8C 04  167                STA    $048C,Y  
08A5: C8        168                INY             
08A6: C0 0F     169                CPY    #$0F     
08A8: D0 F5     170                BNE    H089F    
08AA: A9 00     171                LDA    #$00     
08AC: 20 A8 FC  172                JSR    WAIT     
08AF: 4C 00 B6  173                JMP    $B600     ; lance boot2
                174 
                175  *-------------------------------
                176 
                177  * Signature
                178 
08B2: A8 BA     179  H08B2         ASC    "(:"
08B4: 20        180                ASC    ' '      
08B5: 06 0C 0F  181                INV    'FLOBYNOID'
08B8: 02 19 0E 0F 09 04
08BE: 20        182                ASC    ' '      
08BF: BA A9     183                ASC    ":)"
08C1: 00 00 00  184                HEX    000000   
                185 
                186  *-------------------------------
                187 
                188  * Inits
                189 
08C4: 20 93 FE  190  H08C4         JSR    SETVID   
08C7: 20 89 FE  191                JSR    SETKBD   
08CA: 8D 00 C0  192                STA    KEY      
08CD: 8D 0C C0  193                STA    HC00C    
08D0: 60        194                RTS             
                195 
                196  *-------------------------------
                197 
                198  * Message bloquant si pas boot depuis slot 6
                199 
08D1: 20 2F FB  200  H08D1         JSR    INIT     
08D4: 20 58 FC  201                JSR    HOME     
08D7: A0 00     202                LDY    #$00     
08D9: B9 E6 08  203  H08D9         LDA    H08E6,Y  
08DC: 99 00 04  204                STA    $0400,Y  
08DF: C8        205                INY             
08E0: C0 18     206                CPY    #$18     
08E2: D0 F5     207                BNE    H08D9    
08E4: D0 FE     208  H08E4         BNE    H08E4    
                209 
08E6: A0        210  H08E6         ASC    " "      
08E7: 0D        211                INV    'M'
08E8: D5 D3 D4  212                ASC    "UST "   
08EB: A0
08EC: 02        213                INV    'B'
08ED: CF CF D4  214                ASC    "OOT "   
08F0: A0
08F1: 06        215                INV    'F'
08F2: D2 CF CD  216                ASC    "ROM "   
08F5: A0
08F6: 13        217                INV    'S'
08F7: CC CF D4  218                ASC    "LOT "   
08FA: A0
08FB: 13        219                INV    'S'
08FC: C9 D8 AE  220                ASC    "IX."
                221 
                222  *-------------------------------
                223 
08FF: 08        224                DFB    8         ; nbr de secteurs à charger
                225 
                226                SAV    BOOT1    

Object saved as BOOT1,A$0800,L$0100



--End assembly, 256 bytes, Errors: 0


Symbol table - alphabetical order:

   BUFH         =$27        BUFL         =$26        H02D6        =$02D6      H0300        =$0300
   H03F3        =$03F3      H03F4        =$03F4      H0808        =$0808      H080C        =$080C
   H0811        =$0811      H0815        =$0815      H081E        =$081E      H082B        =$082B
   H082D        =$082D      H083D        =$083D      H083F        =$083F      H084E        =$084E
   H085A        =$085A      H085C        =$085C      H0895        =$0895      H089F        =$089F
   H08B2        =$08B2      H08C4        =$08C4      H08D1        =$08D1      H08D9        =$08D9
   H08E4        =$08E4      H08E6        =$08E6      H08FF        =$08FF      HC00C        =$C00C
   HC080        =$C080      HOME         =$FC58      INIT         =$FB2F      KEY          =$C000
   RESET        =$03F2      SETKBD       =$FE89      SETVID       =$FE93      WAIT         =$FCA8



Symbol table - numerical order:

   BUFL         =$26        BUFH         =$27        H02D6        =$02D6      H0300        =$0300
   RESET        =$03F2      H03F3        =$03F3      H03F4        =$03F4      H0808        =$0808
   H080C        =$080C      H0811        =$0811      H0815        =$0815      H081E        =$081E
   H082B        =$082B      H082D        =$082D      H083D        =$083D      H083F        =$083F
   H084E        =$084E      H085A        =$085A      H085C        =$085C      H0895        =$0895
   H089F        =$089F      H08B2        =$08B2      H08C4        =$08C4      H08D1        =$08D1
   H08D9        =$08D9      H08E4        =$08E4      H08E6        =$08E6      H08FF        =$08FF
   KEY          =$C000      HC00C        =$C00C      HC080        =$C080      INIT         =$FB2F
   HOME         =$FC58      WAIT         =$FCA8      SETKBD       =$FE89      SETVID       =$FE93



Retour sommaire

hr ACS

Boot 2 original (Fast Load).



:asm
                1   
                2                                   ; LST OFF
                3                  ORG    $B600    
                4   
                5    ********************************
                6    *                              *
                7    *    BOOT 2 FLOBYNOID DEMO     *
                8    *         (C)1987 SSS          *
                9    *      SOURCE BY DECKARD       *
                10   *                              *
                11   ********************************
                12  
                13   * Adresses page 0
                14  
                15   PTR_BUFF      EQU    $00       ; et $01 : pointeur sur BUFFER
                16   SLOT16        EQU    $2B      
                17   FOUND_TRK     EQU    $2D      
                18   H002C         EQU    $002C     ; store address field
                19  
                20   * Adresses ram
                21  
                22   H02FF         EQU    $02FF     ; byte check disk T$00 S$00
                23   H0800         EQU    $0800    
                24   H11FF         EQU    $11FF    
                25   H1F03         EQU    $1F03     ; entry point demo
                26   H3D00         EQU    $3D00    
                27   H67B0         EQU    $67B0    
                28  
                29   * Adresses driver
                30  
                31   _SAV_HGRSTAT  EQU    $BF18    
                32   _SET_GRAPHIC  EQU    $BF25    
                33   _SAV_BUFFER   EQU    $BF45    
                34   _BLOADER_CHK  EQU    $BF90    
                35   _BLOADER      EQU    $BF9A    
                36   _BLOADERD     EQU    $BF9D    
                37   _TXT_FLOBYA   EQU    $BFE0    
                38   _SET_BUFFER   EQU    $BFF8     ; acc=high, Y=low
                39  
                40   * Adresses ROM
                41  
                42   KEY           EQU    $C000    
                43   STROBE        EQU    $C010    
                44   BUTTN0        EQU    $C061    
                45   BUTTN1        EQU    $C062    
                46   HC080         EQU    $C080    
                47   HC081         EQU    $C081    
                48   HC089         EQU    $C089    
                49   HC08C         EQU    $C08C    
                50   HC08E         EQU    $C08E    
                51   HC0E9         EQU    $C0E9    
                52   HC0EC         EQU    $C0EC     ; $C08C slot 6
                53   INIT          EQU    $FB2F    
                54   HOME          EQU    $FC58    
                55   WAIT          EQU    $FCA8    
                56  
                57   *-------------------------------
                58  
B600: A9 00     59   HB600         LDA    #$00      ; charge driver T$00 S$0F dans $BF00
B602: 8D 4B BA  60                 STA    TRACK_START
B605: A9 00     61                 LDA    #<$BF00  
B607: 8D 4D BA  62                 STA    BUFFERL  
B60A: A9 0F     63                 LDA    #$0F     
B60C: 8D 4C BA  64                 STA    SECTOR_START
B60F: A9 01     65                 LDA    #$01     
B611: 8D 4F BA  66                 STA    NB_SECT  
B614: A9 BF     67                 LDA    #>$BF00  
B616: 8D 4E BA  68                 STA    BUFFERH  
B619: A2 60     69                 LDX    #$60      ; slot*16
B61B: AD E9 C0  70                 LDA    HC0E9     ; motor on
B61E: 20 6D B6  71                 JSR    BLOADER0 
                72  
B621: EA        73                 NOP             
B622: EA        74                 NOP             
B623: EA        75                 NOP             
                76  
B624: 20 01 BB  77                 JSR    CHECK_DISK0 ; met le bon disk
                78  
B627: A9 1A     79                 LDA    #>$1A00   ; charge la suite via le driver
B629: A0 00     80                 LDY    #<$1A00  
B62B: 20 F8 BF  81                 JSR    _SET_BUFFER
                82                                  ; image SSS + musique
B62E: A9 09     83                 LDA    #$09     
B630: A0 0A     84                 LDY    #$0A     
B632: A2 51     85                 LDX    #$51      ; secteurs
B634: 20 90 BF  86                 JSR    _BLOADER_CHK
                87  
B637: 4C 03 1F  88                 JMP    H1F03     ; run demo
                89  
B63A: 00 00 00  90                 DS     8,0      
B63D: 00 00 00 00 00
                91  
                92   *-------------------------------
                93  
B642: A0 00     94   CLR_LINE      LDY    #0       
B644: A9 A0     95                 LDA    #" "     
B646: 99 A0 05  96   HB646         STA    $05A0,Y  
B649: C8        97                 INY             
B64A: C0 29     98                 CPY    #41      
B64C: D0 F8     99                 BNE    HB646    
                100 
B64E: A9 00     101                LDA    #$00     
B650: 8D FF 02  102                STA    H02FF    
B653: 60        103                RTS             
                104 
B654: 00 00 00  105                DS     25,0     
B657: 00 00 00 00 00 00 00 00
B65F: 00 00 00 00 00 00 00 00
B667: 00 00 00 00 00 00
                106 
                107  *===============================
                108  * Chargement d'un objet
                109  *===============================
                110 
B66D: AD 4B BA  111  BLOADER0      LDA    TRACK_START
B670: C9 23     112                CMP    #$23     
B672: D0 05     113                BNE    HB679     ; standard
                114 
                115                                 ; boucle jusqu'à repartir à la piste 0
B674: EE 4B BA  116                INC    TRACK_START
B677: D0 F4     117                BNE    BLOADER0 
                118 
B679: 8D 51 BA  119  HB679         STA    TRACK_END ; par defaut
B67C: AD 4D BA  120                LDA    BUFFERL  
B67F: 85 00     121                STA    PTR_BUFF 
B681: AD 4E BA  122                LDA    BUFFERH  
B684: 85 01     123                STA    PTR_BUFF+1
                124 
B686: AD 4C BA  125                LDA    SECTOR_START ; [$00,$0F]
B689: 8D 49 BA  126                STA    HBA49     ; secteur début et secteur fin sur meme piste?
B68C: 18        127                CLC             
B68D: 49 0F     128                EOR    #$0F     
B68F: 69 01     129                ADC    #$01     
B691: CD 4F BA  130                CMP    NB_SECT  
B694: 90 10     131                BCC    HB6A6     ; non
                132 
B696: AD 4C BA  133                LDA    SECTOR_START ; on reste sur la meme piste (TRACK_END dft)
B699: 18        134                CLC             
B69A: 6D 4F BA  135                ADC    NB_SECT  
B69D: 38        136                SEC             
B69E: E9 01     137                SBC    #$01     
B6A0: 8D 4A BA  138                STA    SECTOR_END
B6A3: 4C D3 B9  139                JMP    FLOAD_TRK
                140 
B6A6: A9 0F     141  HB6A6         LDA    #$0F     
B6A8: 8D 4A BA  142                STA    SECTOR_END
B6AB: 38        143                SEC             
B6AC: ED 49 BA  144                SBC    HBA49    
B6AF: 18        145                CLC             
B6B0: 69 01     146                ADC    #$01     
B6B2: 18        147                CLC             
B6B3: 8D 50 BA  148                STA    HBA50    
B6B6: 6D 4E BA  149                ADC    BUFFERH  
B6B9: 8D 4E BA  150                STA    BUFFERH  
                151 
B6BC: AD 4F BA  152                LDA    NB_SECT  
B6BF: 38        153                SEC             
B6C0: ED 50 BA  154                SBC    HBA50    
B6C3: 8D 4F BA  155                STA    NB_SECT  
B6C6: 20 D3 B9  156                JSR    FLOAD_TRK
                157 
B6C9: EE 4B BA  158                INC    TRACK_START
B6CC: A9 00     159                LDA    #$00     
B6CE: 8D 4C BA  160                STA    SECTOR_START
B6D1: F0 9A     161                BEQ    BLOADER0  ; toujours
                162 
B6D3: 38        163  HB6D3         SEC             
B6D4: 60        164                RTS             
                165 
                166  *===============================
                167  * Lecture champ data+denibblizing
                168  *===============================
                169 
B6D5: A5 00     170  RDSECDTA      LDA    PTR_BUFF 
B6D7: A4 01     171                LDY    PTR_BUFF+1
B6D9: 8D 73 B7  172                STA    HB772+1  
B6DC: 8C 74 B7  173                STY    HB772+2  
B6DF: 38        174                SEC             
B6E0: E9 54     175                SBC    #$54     
B6E2: B0 02     176                BCS    HB6E6    
                177 
B6E4: 88        178                DEY             
                179 
B6E5: 38        180                SEC             
B6E6: 8D 5B B7  181  HB6E6         STA    HB75A+1  
B6E9: 8C 5C B7  182                STY    HB75A+2  
B6EC: E9 57     183                SBC    #$57     
B6EE: B0 01     184                BCS    HB6F1    
                185 
B6F0: 88        186                DEY             
B6F1: 8D 34 B7  187  HB6F1         STA    HB733+1  
B6F4: 8C 35 B7  188                STY    HB733+2  
B6F7: A0 20     189                LDY    #$20     
B6F9: 88        190  HB6F9         DEY             
B6FA: F0 D7     191                BEQ    HB6D3    
                192 
                193  *-------------------------------
                194  * Lecture champ data
                195 
B6FC: AD EC C0  196  HB6FC         LDA    HC0EC     ; 1er header champ data
B6FF: 10 FB     197                BPL    HB6FC    
                198 
B701: 49 D5     199  HB701         EOR    #$D5     
B703: D0 F4     200                BNE    HB6F9    
                201 
B705: EA        202                NOP             
                203 
B706: AD EC C0  204  HB706         LDA    HC0EC     ; 2nd header champ data
B709: 10 FB     205                BPL    HB706    
                206 
B70B: C9 AA     207                CMP    #$AA     
B70D: D0 F2     208                BNE    HB701    
                209 
B70F: EA        210                NOP             
                211 
B710: AD EC C0  212  HB710         LDA    HC0EC     ; 3eme header champ data
B713: 10 FB     213                BPL    HB710    
                214 
B715: C9 AD     215                CMP    #$AD     
B717: D0 E8     216                BNE    HB701    
                217 
                218  * Lecture groupe nibbles (complement 6-2)
                219 
B719: A0 AA     220                LDY    #$AA      ; Y [$AA,$FF]
B71B: A9 00     221                LDA    #$00      ; init checksum
B71D: 85 26     222  HB71D         STA    $26      
                223 
B71F: AE EC C0  224  HB71F         LDX    HC0EC     ; lecture nibble data
B722: 10 FB     225                BPL    HB71F    
                226                                 ; X [$96,$FF]
B724: BD D3 B7  227                LDA    HB869-$96,X
B727: 99 00 BD  228                STA    HBD00,Y  
B72A: 45 26     229                EOR    $26      
B72C: C8        230                INY             
B72D: D0 EE     231                BNE    HB71D    
                232 
                233  * Lecture groupe nibbles (part 1)
                234 
B72F: A0 AA     235                LDY    #$AA     
B731: D0 03     236                BNE    HB736    
                237 
B733: 99 FF FF  238  HB733         STA    $FFFF,Y  
                239 
B736: AE EC C0  240  HB736         LDX    HC0EC     ; lecture nibble data
B739: 10 FB     241                BPL    HB736    
                242 
B73B: 5D D3 B7  243                EOR    HB869-$96,X
B73E: BE 00 BD  244                LDX    HBD00,Y  
B741: 5D D3 B8  245                EOR    HB8D3,X  
B744: C8        246                INY             
B745: D0 EC     247                BNE    HB733    
                248 
B747: 48        249                PHA              ; on finira plus tard (timing problem)
B748: 29 FC     250                AND    #$FC     
                251 
                252  * Lecture groupe nibble (part 2)
                253 
B74A: A0 AA     254                LDY    #$AA     
                255 
B74C: AE EC C0  256  HB74C         LDX    HC0EC     ; lecture nibble data
B74F: 10 FB     257                BPL    HB74C    
                258 
B751: 5D D3 B7  259                EOR    HB869-$96,X
B754: BE 00 BD  260                LDX    HBD00,Y  
B757: 5D D4 B8  261                EOR    HB8D3+1,X
B75A: 99 FF FF  262  HB75A         STA    $FFFF,Y  
B75D: C8        263                INY             
B75E: D0 EC     264                BNE    HB74C    
                265 
                266  * Lecture groupe nibble (part 3)
                267 
B760: AE EC C0  268  HB760         LDX    HC0EC    
B763: 10 FB     269                BPL    HB760    
                270 
B765: 29 FC     271                AND    #$FC     
                272 
B767: A0 AC     273                LDY    #$AC     
B769: 5D D3 B7  274  HB769         EOR    HB869-$96,X
B76C: BE FE BC  275                LDX    HBCFE,Y  
B76F: 5D D5 B8  276                EOR    HB8D3+2,X
B772: 99 FF FF  277  HB772         STA    $FFFF,Y  
                278 
B775: AE EC C0  279  HB775         LDX    HC0EC    
B778: 10 FB     280                BPL    HB775    
                281 
B77A: C8        282                INY             
B77B: D0 EC     283                BNE    HB769    
                284                                 ; last read=checksum
B77D: 29 FC     285                AND    #$FC     
B77F: 5D D3 B7  286                EOR    HB869-$96,X
B782: A6 2B     287                LDX    SLOT16   
B784: A8        288                TAY             
B785: D0 09     289                BNE    HB790     ; err checksum
                290 
B787: AD EC C0  291  HB787         LDA    HC0EC     ; 1er trailer champ data
B78A: 10 FB     292                BPL    HB787    
                293 
B78C: C9 DE     294                CMP    #$DE     
B78E: F0 02     295                BEQ    HB792    
                296 
B790: 38        297  HB790         SEC              ; err
B791: 24        298                DFB    $24       ; BIT
B792: 18        299  HB792         CLC              ; no err
                300 
B793: 68        301                PLA              ; sauve octet laissé en plan faute de timing
B794: A0 55     302                LDY    #$55     
B796: 91 00     303                STA    (PTR_BUFF),Y
B798: 60        304                RTS             
                305 
                306  *-------------------------------
                307 
B799: 00        308  CURR_HTRACK   DFB    0         ; current half track
B79A: 00        309  CPT_ERR       DFB    0         ; compteur err track
                310 
                311  *===============================
                312  * Avance ou recule le bras du drive
                313  *===============================
                314 
                315  * In : acc = wanted dos 3.3 track
                316 
B79B: 0A        317  MOVE_ARM      ASL              ; *2 pour half-track
B79C: 85 26     318                STA    $26      
B79E: AD 99 B7  319  HB79E         LDA    CURR_HTRACK
B7A1: 85 27     320                STA    $27      
B7A3: 38        321                SEC             
B7A4: E5 26     322                SBC    $26      
B7A6: F0 2F     323                BEQ    HB7D7     ; on est déja sur la bonne piste
                324 
B7A8: B0 05     325                BCS    HB7AF     ; il faut avancer
                326 
B7AA: EE 99 B7  327                INC    CURR_HTRACK
B7AD: 90 03     328                BCC    HB7B2    
                329 
B7AF: CE 99 B7  330  HB7AF         DEC    CURR_HTRACK
                331 
B7B2: 20 CB B7  332  HB7B2         JSR    HB7CB     ; first part
B7B5: 20 D8 B7  333                JSR    HB7D8     ; delai
                334 
B7B8: A5 27     335                LDA    $27      
B7BA: 29 03     336                AND    #$03     
B7BC: 0A        337                ASL             
B7BD: 09 60     338                ORA    #$60     
B7BF: A8        339                TAY             
B7C0: B9 80 C0  340                LDA    HC080,Y  
B7C3: 20 D8 B7  341                JSR    HB7D8     ; delai
B7C6: F0 D6     342                BEQ    HB79E    
                343 
B7C8: 20 D8 B7  344                JSR    HB7D8     ; delai
                345 
                346                                 ; second part
B7CB: AD 99 B7  347  HB7CB         LDA    CURR_HTRACK
B7CE: 29 03     348                AND    #$03     
B7D0: 0A        349                ASL             
B7D1: 09 60     350                ORA    #$60     
B7D3: A8        351                TAY             
B7D4: B9 81 C0  352                LDA    HC081,Y  
B7D7: 60        353  HB7D7         RTS             
                354 
                355  * Délai attente déplacement bras
                356 
B7D8: A9 28     357  HB7D8         LDA    #$28     
B7DA: 38        358                SEC             
B7DB: 48        359  HB7DB         PHA             
B7DC: E9 01     360  HB7DC         SBC    #$01     
B7DE: D0 FC     361                BNE    HB7DC    
                362 
B7E0: 68        363                PLA             
B7E1: E9 01     364                SBC    #$01     
B7E3: D0 F6     365                BNE    HB7DB    
B7E5: 60        366                RTS             
                367 
                368  *-------------------------------
                369  * Erreur: impossible de trouver champ adresse
                370 
B7E6: 38        371  HB7E6         SEC             
B7E7: 60        372                RTS             
                373 
                374  *===============================
                375  * Recherche champ adresse
                376  *===============================
                377 
                378  * Out: carry = 1 champ adresse introuvable
                379  *
                380  *      carry = 0 no err
                381  *      $2C   = volume lu
                382  *      $2D   = track lue
                383  *      $2E   = secteur lu
                384  *      $2F   = checksum lu
                385 
B7E8: A0 FC     386  RDADDRF       LDY    #$FC      ; init nbr d'essai
B7EA: 84 26     387                STY    $26      
B7EC: C8        388  HB7EC         INY             
B7ED: D0 04     389                BNE    HB7F3    
                390 
B7EF: E6 26     391                INC    $26      
B7F1: F0 F3     392                BEQ    HB7E6    
                393 
                394  *-------------------------------
                395  * Lecture champ adresse
                396 
B7F3: AD EC C0  397  HB7F3         LDA    HC0EC     ; 1er header champ adresse
B7F6: 10 FB     398                BPL    HB7F3    
                399 
B7F8: C9 D5     400  HB7F8         CMP    #$D5     
B7FA: D0 F0     401                BNE    HB7EC    
                402 
B7FC: EA        403                NOP             
                404 
B7FD: AD EC C0  405  HB7FD         LDA    HC0EC     ; 2nd header champ adresse
B800: 10 FB     406                BPL    HB7FD    
                407 
B802: C9 AA     408                CMP    #$AA     
B804: D0 F2     409                BNE    HB7F8    
                410 
B806: A0 03     411                LDY    #$03      ; lecture 2*4 nibbles en 4-4:
                412                                 ; volume/track/secteur/checksum
                413 
B808: AD EC C0  414  HB808         LDA    HC0EC     ; 3eme header champ adresse
B80B: 10 FB     415                BPL    HB808    
                416 
B80D: C9 96     417                CMP    #$96     
B80F: D0 E7     418                BNE    HB7F8    
                419 
B811: A9 00     420                LDA    #$00     
B813: 85 27     421  HB813         STA    $27      
                422 
B815: AD EC C0  423  HB815         LDA    HC0EC    
B818: 10 FB     424                BPL    HB815    
                425 
B81A: 2A        426                ROL             
B81B: 85 26     427                STA    $26      
                428 
B81D: AD EC C0  429  HB81D         LDA    HC0EC    
B820: 10 FB     430                BPL    HB81D    
                431 
B822: 25 26     432                AND    $26      
B824: 99 2C 00  433                STA    H002C,Y   ; $2C=volume, $2D=track, $2E=sector
B827: 45 27     434                EOR    $27       ; $2f=checksum
B829: 88        435                DEY             
B82A: 10 E7     436                BPL    HB813    
                437 
B82C: A8        438                TAY             
B82D: D0 B7     439                BNE    HB7E6    
                440 
B82F: AD EC C0  441  HB82F         LDA    HC0EC     ; lecture 1er trailer champ adresse
B832: 10 FB     442                BPL    HB82F    
                443 
B834: C9 DE     444                CMP    #$DE     
B836: D0 AE     445  HB836         BNE    HB7E6     ; error
                446 
B838: EA        447                NOP             
                448 
B839: AD EC C0  449  HB839         LDA    HC0EC     ; lecture 2nd trailer champ adresse
B83C: 10 FB     450                BPL    HB839    
                451 
B83E: C9 AA     452                CMP    #$AA     
B840: D0 A4     453                BNE    HB7E6     ; error
                454 
B842: 18        455                CLC              ; ok found
B843: 60        456                RTS             
                457 
                458  *-------------------------------
                459 
                460  HB844                         
B844: FF FF FF  461                HEX    FFFFFFDFAAD5AAD5AAD5FFFFFFFFFF00
B847: DF AA D5 AA D5 AA D5 FF
B84F: FF FF FF FF 00
B854: 00 00 00  462                HEX    00000000000000000000000000000000
B857: 00 00 00 00 00 00 00 00
B85F: 00 00 00 00 00
B864: 00 00 00  463                HEX    0000000000
B867: 00 00
                464 
B869: 00 04 98  465  HB869         HEX    00049899080C9C101418A0A1A2A3A4A5
B86C: 99 08 0C 9C 10 14 18 A0
B874: A1 A2 A3 A4 A5
B879: 1C 20 A8  466                HEX    1C20A8A9AA24282C3034B0B1383C4044
B87C: A9 AA 24 28 2C 30 34 B0
B884: B1 38 3C 40 44
B889: 48 4C B8  467                HEX    484CB85054585C606468C0C1C2C3C4C5
B88C: 50 54 58 5C 60 64 68 C0
B894: C1 C2 C3 C4 C5
B899: C6 C7 C8  468                HEX    C6C7C8C9CA6CCC707478D0D1D27CD4D5
B89C: C9 CA 6C CC 70 74 78 D0
B8A4: D1 D2 7C D4 D5
B8A9: 80 84 D8  469                HEX    8084D8888C9094989CA0E0E1E2E3E4A4
B8AC: 88 8C 90 94 98 9C A0 E0
B8B4: E1 E2 E3 E4 A4
B8B9: A8 AC E8  470                HEX    A8ACE8B0B4B8BCC0C4C8F0
B8BC: B0 B4 B8 BC C0 C4 C8 F0
B8C4: F1 CC D0  471                HEX    F1CCD0D4D8DCE0F8E4E8ECF0F4F8FC
B8C7: D4 D8 DC E0 F8 E4 E8 EC
B8CF: F0 F4 F8 FC
                472 
B8D3: 00 00 00  473  HB8D3         HEX    00000096020000970100009A0300009B
B8D6: 96 02 00 00 97 01 00 00
B8DE: 9A 03 00 00 9B
B8E3: 00 02 00  474                HEX    0002009D0202009E0102009F030200A6
B8E6: 9D 02 02 00 9E 01 02 00
B8EE: 9F 03 02 00 A6
B8F3: 00 01 00  475                HEX    000100A7020100AB010100AC030100AD
B8F6: A7 02 01 00 AB 01 01 00
B8FE: AC 03 01 00 AD
B903: 00 03 00  476                HEX    000300AE020300AF010300B2030300B3
B906: AE 02 03 00 AF 01 03 00
B90E: B2 03 03 00 B3
B913: 00 00 02  477                HEX    000002B4020002B5010002B6030002B7
B916: B4 02 00 02 B5 01 00 02
B91E: B6 03 00 02 B7
B923: 00 02 02  478                HEX    000202B9020202BA010202BB030202BC
B926: B9 02 02 02 BA 01 02 02
B92E: BB 03 02 02 BC
B933: 00 01 02  479                HEX    000102BD020102BE010102BF030102CB
B936: BD 02 01 02 BE 01 01 02
B93E: BF 03 01 02 CB
B943: 00 03 02  480                HEX    000302CD020302CE010302CF030302D3
B946: CD 02 03 02 CE 01 03 02
B94E: CF 03 03 02 D3
B953: 00 00 01  481                HEX    000001D6020001D7010001D9030001DA
B956: D6 02 00 01 D7 01 00 01
B95E: D9 03 00 01 DA
B963: 00 02 01  482                HEX    000201DB020201DC010201DD030201DE
B966: DB 02 02 01 DC 01 02 01
B96E: DD 03 02 01 DE
B973: 00 01 01  483                HEX    000101DF020101E5010101E6030101E7
B976: DF 02 01 01 E5 01 01 01
B97E: E6 03 01 01 E7
B983: 00 03 01  484                HEX    000301E9020301EA010301EB030301EC
B986: E9 02 03 01 EA 01 03 01
B98E: EB 03 03 01 EC
B993: 00 00 03  485                HEX    000003ED020003EE010003EF030003F2
B996: ED 02 00 03 EE 01 00 03
B99E: EF 03 00 03 F2
B9A3: 00 02 03  486                HEX    000203F3020203F4010203F5030203F6
B9A6: F3 02 02 03 F4 01 02 03
B9AE: F5 03 02 03 F6
B9B3: 00 01 03  487                HEX    000103F7020103F9010103FA030103FB
B9B6: F7 02 01 03 F9 01 01 03
B9BE: FA 03 01 03 FB
B9C3: 00 03 03  488                HEX    000303FC020303FD010303FE030303FF
B9C6: FC 02 03 03 FD 01 03 03
B9CE: FE 03 03 03 FF
                489 
                490  *-------------------------------
                491 
B9D3: AD 51 BA  492  FLOAD_TRK     LDA    TRACK_END
B9D6: 20 9B B7  493                JSR    MOVE_ARM 
                494 
B9D9: A5 01     495                LDA    PTR_BUFF+1 ; calcule adresse implantation en mem pour
B9DB: 38        496                SEC              ; les secteurs à charger
B9DC: ED 49 BA  497                SBC    HBA49    
B9DF: 85 01     498                STA    PTR_BUFF+1
                499 
B9E1: AC 49 BA  500                LDY    HBA49    
                501 
B9E4: 98        502  HB9E4         TYA             
B9E5: 18        503                CLC             
B9E6: 65 01     504                ADC    PTR_BUFF+1
B9E8: BE 29 BA  505                LDX    SKEWING,Y
B9EB: 9D 39 BA  506                STA    LIST_ADR_BUF,X
B9EE: C8        507                INY             
B9EF: CC 4A BA  508                CPY    SECTOR_END
B9F2: F0 F0     509                BEQ    HB9E4    
B9F4: 90 EE     510                BCC    HB9E4    
                511 
B9F6: A6 2B     512                LDX    SLOT16   
B9F8: A9 60     513                LDA    #$60      ; init nbr max passage
B9FA: 85 02     514                STA    $02      
                515 
B9FC: C6 02     516  HB9FC         DEC    $02      
B9FE: F0 25     517                BEQ    HBA25     ; probleme pour tout charger dans cette piste
                518 
BA00: 20 E8 B7  519                JSR    RDADDRF   ; lecture champ adresse
BA03: B0 F7     520                BCS    HB9FC     ; error
                521 
BA05: A4 2D     522                LDY    FOUND_TRK
BA07: B9 39 BA  523                LDA    LIST_ADR_BUF,Y
BA0A: F0 F0     524                BEQ    HB9FC     ; déja chargé: continue
                525 
BA0C: 85 01     526                STA    PTR_BUFF+1
BA0E: 20 D5 B6  527                JSR    RDSECDTA  ; lecture champ data
BA11: B0 E9     528                BCS    HB9FC     ; err-> next
                529 
BA13: A4 2D     530                LDY    FOUND_TRK
BA15: A9 00     531                LDA    #$00      ; signale chargement fait
BA17: 99 39 BA  532                STA    LIST_ADR_BUF,Y
                533 
                534  * Vérifie que tous les secteurs soient chargés
                535 
BA1A: A0 0F     536                LDY    #$0F      ; 16 secteurs
BA1C: B9 39 BA  537  HBA1C         LDA    LIST_ADR_BUF,Y ; adr impl destroyed?
BA1F: D0 DB     538                BNE    HB9FC     ; non, secteur not loaded:continue
                539 
BA21: 88        540                DEY             
BA22: 10 F8     541                BPL    HBA1C    
BA24: 60        542                RTS             
                543 
BA25: EE 9A B7  544  HBA25         INC    CPT_ERR   ; err piste
BA28: 60        545                RTS             
                546 
                547  *-------------------------------
                548 
BA29: 00 0D 0B  549  SKEWING       HEX    000D0B09070503010E0C0A080604020F
BA2C: 09 07 05 03 01 0E 0C 0A
BA34: 08 06 04 02 0F
                550 
                551  * Liste des 16 adresses possibles en ram pour load
BA39: 00 00 00  552  LIST_ADR_BUF  DS     16,0     
BA3C: 00 00 00 00 00 00 00 00
BA44: 00 00 00 00 00
                553 
BA49: 00        554  HBA49         DFB    0        
BA4A: 00        555  SECTOR_END    DFB    0        
BA4B: 01        556  TRACK_START   DFB    1        
BA4C: 00        557  SECTOR_START  DFB    0        
BA4D: 00        558  BUFFERL       DFB    0        
BA4E: 20        559  BUFFERH       HEX    20       
BA4F: 20        560  NB_SECT       HEX    20       
BA50: 00        561  HBA50         DFB    0        
BA51: 00        562  TRACK_END     DFB    0        
                563 
                564  *-------------------------------
                565 
BA52: A9 DD     566  HBA52         LDA    #$DD     
BA54: A0 FF     567  HBA54         LDY    #$FF     
BA56: 59 00 3F  568  HBA56         EOR    $3F00,Y  
BA59: 99 00 3F  569  HBA59         STA    $3F00,Y  
BA5C: 88        570                DEY             
BA5D: C0 FF     571                CPY    #$FF     
BA5F: D0 F5     572                BNE    HBA56    
                573 
BA61: CE 58 BA  574                DEC    HBA56+2  
BA64: CE 6A BA  575                DEC    HBA6A    
BA67: AE 6A BA  576                LDX    HBA6A    
BA6A: E0 1F     577  HBA6A         CPX    #$1F     
BA6C: D0 E6     578                BNE    HBA54    
                579 
BA6E: A0 1F     580                LDY    #$1F     
BA70: 60        581                RTS             
                582 
BA71: A9 DD     583                LDA    #$DD     
BA73: 8D 00 40  584                STA    $4000    
BA76: A0 00     585  HBA76         LDY    #$00     
BA78: B9 00 20  586  HBA78         LDA    $2000,Y  
BA7B: 59 01 20  587  HBA7B         EOR    $2001,Y  
BA7E: 99 00 20  588  HBA7E         STA    $2000,Y  
BA81: C8        589                INY             
BA82: D0 F4     590                BNE    HBA78    
                591 
BA84: EE 7A BA  592                INC    HBA78+2  
BA87: EE 7D BA  593                INC    HBA7B+2  
BA8A: EE 80 BA  594                INC    HBA7E+2  
BA8D: AE 80 BA  595                LDX    HBA7E+2  
BA90: E0 40     596                CPX    #$40     
BA92: D0 E2     597                BNE    HBA76    
BA94: 60        598                RTS             
                599 
BA95: A9 BA     600                LDA    #$BA     
BA97: 8D 5B BA  601                STA    HBA59+2  
BA9A: A9 B5     602                LDA    #$B5     
BA9C: 8D 6B BA  603                STA    HBA6A+1  
BA9F: A0 00     604                LDY    #$00     
BAA1: 98        605                TYA             
BAA2: 59 00 08  606  HBAA2         EOR    H0800,Y  
BAA5: 88        607                DEY             
BAA6: D0 FA     608                BNE    HBAA2    
                609 
BAA8: C9 31     610                CMP    #$31     
BAAA: D0 A6     611                BNE    HBA52    
BAAC: 60        612                RTS             
                613 
                614  *-------------------------------
                615 
                616  HBAAD                         
BAAD: A0 FF 3B  617                HEX    A0FF3B3A8200DB452404BA2260616263
BAB0: 3A 82 00 DB 45 24 04 BA
BAB8: 22 60 61 62 63
BABD: 64 65 66  618                HEX    6465666768696A6B6C6D6E6F70717273
BAC0: 67 68 69 6A 6B 6C 6D 6E
BAC8: 6F 70 71 72 73
BACD: 74 75 76  619                HEX    7475767778797A2B7A7A7A7A2200F545
BAD0: 77 78 79 7A 2B 7A 7A 7A
BAD8: 7A 22 00 F5 45
BADD: 28 04 B9  620                HEX    2804B93737322C32383ABAE728313829
BAE0: 37 37 32 2C 32 38 3A BA
BAE8: E7 28 31 38 29
BAED: 3B E7 28  621                HEX    3BE72833293B300006462904B933322C
BAF0: 33 29 3B 30 00 06 46 29
BAF8: 04 B9 33 32 2C
BAFD: 30 3A B9  622                HEX    303AB9   
                623 
                624  *-------------------------------
                625 
BB00: 08        626  HBB00         DFB    8         ; nbr de secteurs
                627 
                628  *===============================
                629  * Check disk
                630  *===============================
                631 
BB01: 20 18 BF  632  CHECK_DISK0   JSR    _SAV_HGRSTAT
                633 
BB04: A9 02     634  CHECK_DISK    LDA    #>$0200   ; buffer=$0200
BB06: A0 00     635                LDY    #<$0200  
BB08: 20 F8 BF  636                JSR    _SET_BUFFER
BB0B: A9 00     637                LDA    #$00      ; load 1 sector T$00 S$00
BB0D: A0 00     638                LDY    #$00     
BB0F: A2 01     639                LDX    #$01     
BB11: 20 9A BF  640                JSR    _BLOADER 
                641 
BB14: AD 00 BB  642                LDA    HBB00     ; check nbr of sectors (byte $FF)
BB17: CD FF 02  643                CMP    H02FF    
BB1A: D0 04     644                BNE    HBB20     ; not the demo
                645 
BB1C: 20 25 BF  646                JSR    _SET_GRAPHIC
BB1F: 60        647                RTS             
                648 
BB20: 48        649  HBB20         PHA             
BB21: 20 2F FB  650                JSR    INIT     
BB24: 2C 58 FC  651                BIT    HOME     
BB27: 68        652                PLA             
BB28: C9 FF     653                CMP    #$FF      ; byte $FF = $FF => disk utilisateur
BB2A: F0 0F     654                BEQ    HBB3B    
                655 
                656                                 ; sinon
BB2C: A0 00     657                LDY    #0        ; message: mettez flobynoid face A.
BB2E: B9 E0 BF  658  HBB2E         LDA    _TXT_FLOBYA,Y
BB31: 99 B0 05  659                STA    $05B0,Y  
BB34: C8        660                INY             
BB35: C0 18     661                CPY    #$18     
BB37: D0 F5     662                BNE    HBB2E    
BB39: F0 0D     663                BEQ    HBB48    
                664 
                665  *-------------------------------
                666 
BB3B: A0 00     667  HBB3B         LDY    #$00      ; message: mettez votre disk tableau
BB3D: B9 5E BB  668  HBB3D         LDA    HBB5E,Y  
BB40: 99 AF 05  669                STA    $05AF,Y  
BB43: C8        670                INY             
BB44: C0 1B     671                CPY    #$1B     
BB46: D0 F5     672                BNE    HBB3D    
                673 
BB48: A9 00     674  HBB48         LDA    #$00      ; attente insertion et touche
BB4A: 20 A8 FC  675                JSR    WAIT     
BB4D: 2C 10 C0  676                BIT    STROBE   
                677 
BB50: AD 00 C0  678  HBB50         LDA    KEY      
BB53: 0D 61 C0  679                ORA    BUTTN0   
BB56: 0D 62 C0  680                ORA    BUTTN1   
BB59: 10 F5     681                BPL    HBB50    
                682 
BB5B: 4C 04 BB  683                JMP    CHECK_DISK
                684 
                685  *-------------------------------
                686 
BB5E: 0D        687  HBB5E         INV    'M'
BB5F: E5 F4 F4  688                ASC    "ettez " 
BB62: E5 FA A0
BB65: 16        689                INV    'V'
BB66: EF F4 F2  690                ASC    "otre "  
BB69: E5 A0
BB6B: 04        691                INV    'D'
BB6C: E9 F3 EB  692                ASC    "isk "   
BB6F: A0
BB70: 14        693                INV    'T'
BB71: E1 E2 EC  694                ASC    "ableau.     "
BB74: E5 E1 F5 AE A0 A0 A0 A0
BB7C: A0
                695 
                696  *-------------------------------
                697 
BB7D: A0        698  SAV_Y         ASC    " "      
BB7E: 00        699  SAV_X         DFB    0        
BB7F: 00        700  SAV_A         DFB    0        
                701 
                702  *-------------------------------
                703 
BB80: 8D 7F BB  704                STA    SAV_A    
BB83: 8E 7E BB  705                STX    SAV_X    
BB86: 8C 7D BB  706                STY    SAV_Y    
                707 
BB89: AD 4D BA  708                LDA    BUFFERL  
BB8C: 8D 45 BF  709                STA    _SAV_BUFFER
BB8F: AD 4E BA  710                LDA    BUFFERH  
BB92: 8D 46 BF  711                STA    _SAV_BUFFER+1
                712 
BB95: 20 01 BB  713                JSR    CHECK_DISK0
                714 
BB98: AD 46 BF  715                LDA    _SAV_BUFFER+1
BB9B: 8D 4E BA  716                STA    BUFFERH  
BB9E: AD 45 BF  717                LDA    _SAV_BUFFER
BBA1: 8D 4D BA  718                STA    BUFFERL  
                719 
BBA4: AD 7F BB  720                LDA    SAV_A    
BBA7: AE 7E BB  721                LDX    SAV_X    
BBAA: AC 7D BB  722                LDY    SAV_Y    
BBAD: 4C 9D BF  723                JMP    _BLOADERD
                724 
BBB0: 00 00 00  725                DS     8,0      
BBB3: 00 00 00 00 00
                726 
                727  *-------------------------------
                728 
BBB8: 20 18 BF  729                JSR    _SAV_HGRSTAT
BBBB: A9 6D     730  HBBBB         LDA    #$6D     
BBBD: A0 E8     731                LDY    #$E8     
BBBF: 20 00 3D  732                JSR    H3D00    
                733 
BBC2: EA        734                NOP             
BBC3: EA        735                NOP             
BBC4: EA        736                NOP             
BBC5: EA        737                NOP             
BBC6: EA        738                NOP             
BBC7: EA        739                NOP             
BBC8: EA        740                NOP             
BBC9: EA        741                NOP             
BBCA: EA        742                NOP             
                743 
BBCB: AD FF 11  744                LDA    H11FF    
BBCE: C9 08     745                CMP    #$08     
BBD0: F0 03     746                BEQ    HBBD5    
                747 
BBD2: 4C 25 BF  748                JMP    _SET_GRAPHIC
                749 
BBD5: 20 2F FB  750  HBBD5         JSR    INIT     
BBD8: 2C 58 FC  751                BIT    HOME     
BBDB: A0 00     752                LDY    #$00     
BBDD: B9 B0 67  753  HBBDD         LDA    H67B0,Y  
BBE0: 99 AE 05  754                STA    $05AE,Y  
BBE3: C8        755                INY             
BBE4: C0 20     756                CPY    #$20     
BBE6: D0 F5     757                BNE    HBBDD    
                758 
BBE8: A9 00     759                LDA    #$00     
BBEA: 20 A8 FC  760                JSR    WAIT     
BBED: 2C 10 C0  761                BIT    STROBE   
                762 
BBF0: AD 00 C0  763  HBBF0         LDA    KEY      
BBF3: 0D 61 C0  764                ORA    BUTTN0   
BBF6: 0D 62 C0  765                ORA    BUTTN1   
BBF9: 10 F5     766                BPL    HBBF0    
BBFB: 4C BB BB  767                JMP    HBBBB    
                768 
BBFE: 00 00     769                DS     2,0      
                770 
                771  *-------------------------------
                772 
BC00: A9 08     773                LDA    #$08     
BC02: 85 00     774                STA    PTR_BUFF 
BC04: A2 60     775  HBC04         LDX    #$60     
BC06: A0 00     776                LDY    #$00     
BC08: BD 89 C0  777                LDA    HC089,X  
BC0B: A9 FF     778                LDA    #$FF     
BC0D: 20 A8 FC  779                JSR    WAIT     
BC10: A9 FF     780                LDA    #$FF     
BC12: 20 A8 FC  781                JSR    WAIT     
BC15: BD 8E C0  782                LDA    HC08E,X  
BC18: BD 8C C0  783  HBC18         LDA    HC08C,X  
BC1B: 10 FB     784                BPL    HBC18    
                785 
BC1D: C9 D5     786  HBC1D         CMP    #$D5     
BC1F: D0 F7     787                BNE    HBC18    
                788 
BC21: EA        789                NOP             
                790 
BC22: BD 8C C0  791  HBC22         LDA    HC08C,X  
BC25: 10 FB     792                BPL    HBC22    
                793 
BC27: C9 AA     794                CMP    #$AA     
BC29: D0 F2     795                BNE    HBC1D    
                796 
BC2B: A0 03     797                LDY    #$03     
                798 
BC2D: BD 8C C0  799  HBC2D         LDA    HC08C,X  
BC30: 10 FB     800                BPL    HBC2D    
                801 
BC32: C9 96     802                CMP    #$96     
BC34: D0 E7     803                BNE    HBC1D    
                804 
BC36: A9 00     805                LDA    #$00     
BC38: 85 27     806  HBC38         STA    $27      
                807 
BC3A: BD 8C C0  808  HBC3A         LDA    HC08C,X  
BC3D: 10 FB     809                BPL    HBC3A    
                810 
BC3F: 2A        811                ROL             
BC40: 85 26     812                STA    $26      
                813 
BC42: BD 8C C0  814  HBC42         LDA    HC08C,X  
BC45: 10 FB     815                BPL    HBC42    
                816 
BC47: 25 26     817                AND    $26      
BC49: 99 2C 00  818                STA    H002C,Y  
BC4C: 45 27     819                EOR    $27      
BC4E: 88        820                DEY             
BC4F: 10 E7     821                BPL    HBC38    
                822 
BC51: A8        823                TAY             
BC52: D0 C4     824                BNE    HBC18    
                825 
BC54: BD 8C C0  826  HBC54         LDA    HC08C,X  
BC57: 10 FB     827                BPL    HBC54    
                828 
BC59: C9 DE     829                CMP    #$DE     
BC5B: D0 BB     830                BNE    HBC18    
                831 
BC5D: EA        832                NOP             
                833 
BC5E: BD 8C C0  834  HBC5E         LDA    HC08C,X  
BC61: 10 FB     835                BPL    HBC5E    
                836 
BC63: C9 AA     837                CMP    #$AA     
BC65: D0 B1     838                BNE    HBC18    
                839 
BC67: 18        840                CLC             
BC68: A5 2D     841                LDA    FOUND_TRK
BC6A: C9 00     842                CMP    #$00     
BC6C: F0 03     843                BEQ    HBC71    
                844 
BC6E: 4C 18 BC  845                JMP    HBC18    
                846 
BC71: BD 8C C0  847  HBC71         LDA    HC08C,X  
BC74: 10 FB     848                BPL    HBC71    
                849 
BC76: C9 C1     850                CMP    #$C1     
BC78: D0 01     851                BNE    HBC7B    
                852 
BC7A: 60        853                RTS             
                854 
BC7B: C6 00     855  HBC7B         DEC    PTR_BUFF 
BC7D: D0 85     856                BNE    HBC04    
                857 
BC7F: D0 FE     858  HBC7F         BNE    HBC7F    
BC81: F0 FE     859  HBC81         BEQ    HBC81    
                860 
                861  *-------------------------------
                862 
BC83: 00 00 00  863                DS     123,0    
BC86: 00 00 00 00 00 00 00 00
...
BCFE: 00 00     864  HBCFE         DS     2,0      
                865 
                866  *-------------------------------
                867 
BD00: 00 00 00  868  HBD00         DS     256,0    
...
BDFB: 00 00 00 00 00
                869 
                870  *-------------------------------
                871 
                872                SAV    BOOT2    

Object saved as BOOT2,A$B600,L$0800



--End assembly, 2048 bytes, Errors: 0


Symbol table - alphabetical order:

   BLOADER0     =$B66D      BUFFERH      =$BA4E      BUFFERL      =$BA4D      BUTTN0       =$C061
   BUTTN1       =$C062      CHECK_DISK   =$BB04      CHECK_DISK0  =$BB01   ?  CLR_LINE     =$B642
   CPT_ERR      =$B79A      CURR_HTRACK  =$B799      FLOAD_TRK    =$B9D3      FOUND_TRK    =$2D
   H002C        =$2C        H02FF        =$02FF      H0800        =$0800      H11FF        =$11FF
   H1F03        =$1F03      H3D00        =$3D00      H67B0        =$67B0   ?  HB600        =$B600
   HB646        =$B646      HB679        =$B679      HB6A6        =$B6A6      HB6D3        =$B6D3
   HB6E6        =$B6E6      HB6F1        =$B6F1      HB6F9        =$B6F9      HB6FC        =$B6FC
   HB701        =$B701      HB706        =$B706      HB710        =$B710      HB71D        =$B71D
   HB71F        =$B71F      HB733        =$B733      HB736        =$B736      HB74C        =$B74C
   HB75A        =$B75A      HB760        =$B760      HB769        =$B769      HB772        =$B772
   HB775        =$B775      HB787        =$B787      HB790        =$B790      HB792        =$B792
   HB79E        =$B79E      HB7AF        =$B7AF      HB7B2        =$B7B2      HB7CB        =$B7CB
   HB7D7        =$B7D7      HB7D8        =$B7D8      HB7DB        =$B7DB      HB7DC        =$B7DC
   HB7E6        =$B7E6      HB7EC        =$B7EC      HB7F3        =$B7F3      HB7F8        =$B7F8
   HB7FD        =$B7FD      HB808        =$B808      HB813        =$B813      HB815        =$B815
   HB81D        =$B81D      HB82F        =$B82F   ?  HB836        =$B836      HB839        =$B839
?  HB844        =$B844      HB869        =$B869      HB8D3        =$B8D3      HB9E4        =$B9E4
   HB9FC        =$B9FC      HBA1C        =$BA1C      HBA25        =$BA25      HBA49        =$BA49
   HBA50        =$BA50      HBA52        =$BA52      HBA54        =$BA54      HBA56        =$BA56
   HBA59        =$BA59      HBA6A        =$BA6A      HBA76        =$BA76      HBA78        =$BA78
   HBA7B        =$BA7B      HBA7E        =$BA7E      HBAA2        =$BAA2   ?  HBAAD        =$BAAD
   HBB00        =$BB00      HBB20        =$BB20      HBB2E        =$BB2E      HBB3B        =$BB3B
   HBB3D        =$BB3D      HBB48        =$BB48      HBB50        =$BB50      HBB5E        =$BB5E
   HBBBB        =$BBBB      HBBD5        =$BBD5      HBBDD        =$BBDD      HBBF0        =$BBF0
   HBC04        =$BC04      HBC18        =$BC18      HBC1D        =$BC1D      HBC22        =$BC22
   HBC2D        =$BC2D      HBC38        =$BC38      HBC3A        =$BC3A      HBC42        =$BC42
   HBC54        =$BC54      HBC5E        =$BC5E      HBC71        =$BC71      HBC7B        =$BC7B
   HBC7F        =$BC7F      HBC81        =$BC81      HBCFE        =$BCFE      HBD00        =$BD00
   HC080        =$C080      HC081        =$C081      HC089        =$C089      HC08C        =$C08C
   HC08E        =$C08E      HC0E9        =$C0E9      HC0EC        =$C0EC      HOME         =$FC58
   INIT         =$FB2F      KEY          =$C000      LIST_ADR_BUF =$BA39      MOVE_ARM     =$B79B
   NB_SECT      =$BA4F      PTR_BUFF     =$00        RDADDRF      =$B7E8      RDSECDTA     =$B6D5
   SAV_A        =$BB7F      SAV_X        =$BB7E      SAV_Y        =$BB7D      SECTOR_END   =$BA4A
   SECTOR_START =$BA4C      SKEWING      =$BA29      SLOT16       =$2B        STROBE       =$C010
   TRACK_END    =$BA51      TRACK_START  =$BA4B      WAIT         =$FCA8      _BLOADER     =$BF9A
   _BLOADERD    =$BF9D      _BLOADER_CHK =$BF90      _SAV_BUFFER  =$BF45      _SAV_HGRSTAT =$BF18
   _SET_BUFFER  =$BFF8      _SET_GRAPHIC =$BF25      _TXT_FLOBYA  =$BFE0  


Symbol table - numerical order:

   PTR_BUFF     =$00        SLOT16       =$2B        H002C        =$2C        FOUND_TRK    =$2D
   H02FF        =$02FF      H0800        =$0800      H11FF        =$11FF      H1F03        =$1F03
   H3D00        =$3D00      H67B0        =$67B0   ?  HB600        =$B600   ?  CLR_LINE     =$B642
   HB646        =$B646      BLOADER0     =$B66D      HB679        =$B679      HB6A6        =$B6A6
   HB6D3        =$B6D3      RDSECDTA     =$B6D5      HB6E6        =$B6E6      HB6F1        =$B6F1
   HB6F9        =$B6F9      HB6FC        =$B6FC      HB701        =$B701      HB706        =$B706
   HB710        =$B710      HB71D        =$B71D      HB71F        =$B71F      HB733        =$B733
   HB736        =$B736      HB74C        =$B74C      HB75A        =$B75A      HB760        =$B760
   HB769        =$B769      HB772        =$B772      HB775        =$B775      HB787        =$B787
   HB790        =$B790      HB792        =$B792      CURR_HTRACK  =$B799      CPT_ERR      =$B79A
   MOVE_ARM     =$B79B      HB79E        =$B79E      HB7AF        =$B7AF      HB7B2        =$B7B2
   HB7CB        =$B7CB      HB7D7        =$B7D7      HB7D8        =$B7D8      HB7DB        =$B7DB
   HB7DC        =$B7DC      HB7E6        =$B7E6      RDADDRF      =$B7E8      HB7EC        =$B7EC
   HB7F3        =$B7F3      HB7F8        =$B7F8      HB7FD        =$B7FD      HB808        =$B808
   HB813        =$B813      HB815        =$B815      HB81D        =$B81D      HB82F        =$B82F
?  HB836        =$B836      HB839        =$B839   ?  HB844        =$B844      HB869        =$B869
   HB8D3        =$B8D3      FLOAD_TRK    =$B9D3      HB9E4        =$B9E4      HB9FC        =$B9FC
   HBA1C        =$BA1C      HBA25        =$BA25      SKEWING      =$BA29      LIST_ADR_BUF =$BA39
   HBA49        =$BA49      SECTOR_END   =$BA4A      TRACK_START  =$BA4B      SECTOR_START =$BA4C
   BUFFERL      =$BA4D      BUFFERH      =$BA4E      NB_SECT      =$BA4F      HBA50        =$BA50
   TRACK_END    =$BA51      HBA52        =$BA52      HBA54        =$BA54      HBA56        =$BA56
   HBA59        =$BA59      HBA6A        =$BA6A      HBA76        =$BA76      HBA78        =$BA78
   HBA7B        =$BA7B      HBA7E        =$BA7E      HBAA2        =$BAA2   ?  HBAAD        =$BAAD
   HBB00        =$BB00      CHECK_DISK0  =$BB01      CHECK_DISK   =$BB04      HBB20        =$BB20
   HBB2E        =$BB2E      HBB3B        =$BB3B      HBB3D        =$BB3D      HBB48        =$BB48
   HBB50        =$BB50      HBB5E        =$BB5E      SAV_Y        =$BB7D      SAV_X        =$BB7E
   SAV_A        =$BB7F      HBBBB        =$BBBB      HBBD5        =$BBD5      HBBDD        =$BBDD
   HBBF0        =$BBF0      HBC04        =$BC04      HBC18        =$BC18      HBC1D        =$BC1D
   HBC22        =$BC22      HBC2D        =$BC2D      HBC38        =$BC38      HBC3A        =$BC3A
   HBC42        =$BC42      HBC54        =$BC54      HBC5E        =$BC5E      HBC71        =$BC71
   HBC7B        =$BC7B      HBC7F        =$BC7F      HBC81        =$BC81      HBCFE        =$BCFE
   HBD00        =$BD00      _SAV_HGRSTAT =$BF18      _SET_GRAPHIC =$BF25      _SAV_BUFFER  =$BF45
   _BLOADER_CHK =$BF90      _BLOADER     =$BF9A      _BLOADERD    =$BF9D      _TXT_FLOBYA  =$BFE0
   _SET_BUFFER  =$BFF8      KEY          =$C000      STROBE       =$C010      BUTTN0       =$C061
   BUTTN1       =$C062      HC080        =$C080      HC081        =$C081      HC089        =$C089
   HC08C        =$C08C      HC08E        =$C08E      HC0E9        =$C0E9      HC0EC        =$C0EC
   INIT         =$FB2F      HOME         =$FC58      WAIT         =$FCA8



Retour sommaire

hr ACS

Driver original.



:asm
                1   
                2                                   ; LST OFF
                3                  ORG    $BF00    
                4   
                5    ********************************
                6    *                              *
                7    *    DRIVER FLOBYNOID DEMO     *
                8    *         (C)1987 SSS          *
                9    *       SOURCE BY DECKARD      *
                10   *                              *
                11   ********************************
                12  
                13   * Adresse ram
                14  
                15   H02FF         EQU    $02FF    
                16  
                17   * Adresses BOOT2
                18  
                19   CLR_LINE      EQU    $B642    
                20   BLOADER0      EQU    $B66D    
                21   TRACK_START   EQU    $BA4B    
                22   SECTOR_START  EQU    $BA4C    
                23   BUFFERL       EQU    $BA4D    
                24   BUFFERH       EQU    $BA4E    
                25   NB_SECT       EQU    $BA4F    
                26  
                27   * Adresses rom
                28  
                29   KEY           EQU    $C000    
                30   STROBE        EQU    $C010    
                31   RPAGE2        EQU    $C01C     ; lecture si page HGR1 ou 2
                32   RHIRES        EQU    $C01D     ; lecture si mode HGR ou pas
                33   TXTCLR        EQU    $C050     ; graphic mode
                34   LOWSCR        EQU    $C054     ; HGR1
                35   HISCR         EQU    $C055     ; HGR2
                36   HIRES         EQU    $C057     ; mode HGR
                37   BUTTN0        EQU    $C061    
                38   BUTTN1        EQU    $C062    
                39   HC0E8         EQU    $C0E8     ; drive off slot 6
                40   HC0E9         EQU    $C0E9     ; drive on slot 6
                41   INIT          EQU    $FB2F    
                42   HOME          EQU    $FC58    
                43  
                44   *===============================
                45   * Attente d'une touche entre 2
                46   * acces disk
                47   *===============================
                48  
BF00: 8D E8 C0  49   _WAITKEY      STA    HC0E8     ; stop drive
                50  
BF03: AD 00 C0  51   HBF03         LDA    KEY       ; attente touche
BF06: 0D 61 C0  52                 ORA    BUTTN0   
BF09: 0D 62 C0  53                 ORA    BUTTN1   
BF0C: 10 F5     54                 BPL    HBF03    
                55  
BF0E: 8D E9 C0  56                 STA    HC0E9     ; lance drive
BF11: EA        57                 NOP             
BF12: EA        58                 NOP             
BF13: 4C A8 BF  59                 JMP    _CHECK_DISK
                60  
                61   *-------------------------------
                62  
BF16: 00        63   _PAGE_HGR     DFB    0         ; HGR ($C054), HGR2 ($C055)
BF17: 00        64   _MODE_HGR     DFB    0         ; non ($C056), oui  ($C057)
                65  
                66   *-------------------------------
                67  
BF18: AD 1C C0  68   _SAV_HGRSTAT  LDA    RPAGE2   
BF1B: 8D 16 BF  69                 STA    _PAGE_HGR
BF1E: AD 1D C0  70                 LDA    RHIRES   
BF21: 8D 17 BF  71                 STA    _MODE_HGR
BF24: 60        72                 RTS             
                73  
                74   *===============================
                75   * Enclenche mode graphic
                76   *===============================
                77  
BF25: 20 42 B6  78   _SET_GRAPHIC  JSR    CLR_LINE 
BF28: EA        79                 NOP             
BF29: EA        80                 NOP             
BF2A: AD 17 BF  81                 LDA    _MODE_HGR
BF2D: 10 10     82                 BPL    HBF3E+1   ; BUG!!!! must be $BF3D
                83  
BF2F: 8D 50 C0  84                 STA    TXTCLR    ; graphic
BF32: 8D 57 C0  85                 STA    HIRES     ; mode HGR
BF35: AD 16 BF  86                 LDA    _PAGE_HGR
BF38: 10 04     87                 BPL    HBF3E    
                88  
BF3A: 8D 55 C0  89                 STA    HISCR     ; HGR2
BF3D: 60        90   HBF3D         RTS             
                91  
BF3E: 8D 54 C0  92   HBF3E         STA    LOWSCR    ; HGR1
BF41: 60        93                 RTS             
                94  
                95   *-------------------------------
                96  
BF42: 00        97   _SAV_A        DFB    0        
BF43: 00        98   _SAV_X        DFB    0        
BF44: 00        99   _SAV_Y        DFB    0        
BF45: 00 00     100  _SAV_BUFFER   DFB    0,0      
                101 
BF47: 00 00 00  102                DS     7,0      
BF4A: 00 00 00 00
                103 
                104  *-------------------------------
                105 
BF4E: 8D 42 BF  106  _CALLER_CHK   STA    _SAV_A   
BF51: 8E 43 BF  107                STX    _SAV_X   
BF54: 8C 44 BF  108                STY    _SAV_Y   
                109 
BF57: AD 4E BA  110                LDA    BUFFERH  
BF5A: 8D 45 BF  111                STA    _SAV_BUFFER
BF5D: AD 4D BA  112                LDA    BUFFERL  
BF60: 8D 46 BF  113                STA    _SAV_BUFFER+1
                114 
BF63: 20 A8 BF  115                JSR    _CHECK_DISK
                116 
BF66: AD 46 BF  117                LDA    _SAV_BUFFER+1
BF69: 8D 4D BA  118                STA    BUFFERL  
BF6C: AD 45 BF  119                LDA    _SAV_BUFFER
BF6F: 8D 4E BA  120                STA    BUFFERH  
                121 
BF72: AC 44 BF  122                LDY    _SAV_Y   
BF75: AE 43 BF  123                LDX    _SAV_X   
BF78: AD 42 BF  124                LDA    _SAV_A   
BF7B: 20 7F BF  125                JSR    _CALLER  
BF7E: 60        126                RTS             
                127 
                128  *-------------------------------
                129 
BF7F: 8D 4B BA  130  _CALLER       STA    TRACK_START
BF82: 8C 4C BA  131                STY    SECTOR_START
BF85: 8E 4F BA  132                STX    NB_SECT  
BF88: A2 60     133                LDX    #$60      ; slot16
BF8A: A9 06     134                LDA    #$06     
BF8C: 20 6D B6  135                JSR    BLOADER0 
BF8F: 60        136                RTS             
                137 
                138  *-------------------------------
                139 
BF90: 8D E9 C0  140  _BLOADER_CHK  STA    HC0E9    
BF93: 20 4E BF  141                JSR    _CALLER_CHK
BF96: 8D E8 C0  142                STA    HC0E8    
BF99: 60        143                RTS             
                144 
                145  *-------------------------------
                146 
BF9A: 8D E9 C0  147  _BLOADER      STA    HC0E9    
BF9D: 20 7F BF  148  _BLOADERD     JSR    _CALLER  
BFA0: 8D E8 C0  149                STA    HC0E8    
BFA3: 60        150                RTS             
                151 
                152  *-------------------------------
                153 
BFA4: 00 00 00  154                DS     3,0      
BFA7: FF        155                HEX    FF       
                156 
                157  *-------------------------------
                158 
BFA8: A9 02     159  _CHECK_DISK   LDA    #>$0200   ; load T$00 S$00 en $0200
BFAA: A0 00     160                LDY    #<$0200  
BFAC: 20 F8 BF  161                JSR    _SET_BUFFER
BFAF: A9 00     162                LDA    #$00     
BFB1: A0 00     163                LDY    #$00     
BFB3: A2 01     164                LDX    #$01     
BFB5: 20 7F BF  165                JSR    _CALLER  
                166 
BFB8: AD FF 02  167                LDA    H02FF     ; check byte
BFBB: C9 08     168                CMP    #$08      ; demo?
BFBD: F0 1D     169                BEQ    HBFDC     ; yes
                170 
BFBF: EA        171                NOP             
                172 
BFC0: 20 18 BF  173                JSR    _SAV_HGRSTAT
BFC3: 20 2F FB  174                JSR    INIT     
BFC6: 2C 58 FC  175                BIT    HOME     
BFC9: A0 00     176                LDY    #0        ; affiche ligne de commande
BFCB: B9 E0 BF  177  HBFCB         LDA    _TXT_FLOBYA,Y
BFCE: 99 B0 05  178                STA    $05B0,Y  
BFD1: C8        179                INY             
BFD2: C0 18     180                CPY    #$18     
BFD4: D0 F5     181                BNE    HBFCB    
                182 
BFD6: 2C 10 C0  183                BIT    STROBE   
BFD9: 4C 00 BF  184                JMP    _WAITKEY 
                185 
BFDC: 4C 25 BF  186  HBFDC         JMP    _SET_GRAPHIC ; RTS inclus
                187 
BFDF: 55        188                HEX    55       
                189 
                190  *-------------------------------
                191 
BFE0: 0D        192  _TXT_FLOBYA   INV    'M'
BFE1: E5 F4 F4  193                ASC    "ettez " 
BFE4: E5 FA A0
BFE7: 06        194                INV    'F'
BFE8: CC CF C2  195                ASC    "LOBYNOID "
BFEB: D9 CE CF C9 C4 A0
BFF1: 06        196                INV    'F'
BFF2: E1 E3 E5  197                ASC    "ace "   
BFF5: A0
BFF6: 01        198                INV    'A'
BFF7: AE        199                ASC    "."
                200 
                201  *-------------------------------
                202 
BFF8: 8D 4E BA  203  _SET_BUFFER   STA    BUFFERH  
BFFB: 8C 4D BA  204                STY    BUFFERL  
BFFE: 60        205                RTS             
                206 
BFFF: 00        207                DFB    0        
                208 
                209                SAV    DRIVER   

Object saved as DRIVER,A$BF00,L$0100



--End assembly, 256 bytes, Errors: 0


Symbol table - alphabetical order:

   BLOADER0     =$B66D      BUFFERH      =$BA4E      BUFFERL      =$BA4D      BUTTN0       =$C061
   BUTTN1       =$C062      CLR_LINE     =$B642      H02FF        =$02FF      HBF03        =$BF03
?  HBF3D        =$BF3D      HBF3E        =$BF3E      HBFCB        =$BFCB      HBFDC        =$BFDC
   HC0E8        =$C0E8      HC0E9        =$C0E9      HIRES        =$C057      HISCR        =$C055
   HOME         =$FC58      INIT         =$FB2F      KEY          =$C000      LOWSCR       =$C054
   NB_SECT      =$BA4F      RHIRES       =$C01D      RPAGE2       =$C01C      SECTOR_START =$BA4C
   STROBE       =$C010      TRACK_START  =$BA4B      TXTCLR       =$C050   ?  _BLOADER     =$BF9A
?  _BLOADERD    =$BF9D   ?  _BLOADER_CHK =$BF90      _CALLER      =$BF7F      _CALLER_CHK  =$BF4E
   _CHECK_DISK  =$BFA8      _MODE_HGR    =$BF17      _PAGE_HGR    =$BF16      _SAV_A       =$BF42
   _SAV_BUFFER  =$BF45      _SAV_HGRSTAT =$BF18      _SAV_X       =$BF43      _SAV_Y       =$BF44
   _SET_BUFFER  =$BFF8      _SET_GRAPHIC =$BF25      _TXT_FLOBYA  =$BFE0      _WAITKEY     =$BF00



Symbol table - numerical order:

   H02FF        =$02FF      CLR_LINE     =$B642      BLOADER0     =$B66D      TRACK_START  =$BA4B
   SECTOR_START =$BA4C      BUFFERL      =$BA4D      BUFFERH      =$BA4E      NB_SECT      =$BA4F
   _WAITKEY     =$BF00      HBF03        =$BF03      _PAGE_HGR    =$BF16      _MODE_HGR    =$BF17
   _SAV_HGRSTAT =$BF18      _SET_GRAPHIC =$BF25   ?  HBF3D        =$BF3D      HBF3E        =$BF3E
   _SAV_A       =$BF42      _SAV_X       =$BF43      _SAV_Y       =$BF44      _SAV_BUFFER  =$BF45
   _CALLER_CHK  =$BF4E      _CALLER      =$BF7F   ?  _BLOADER_CHK =$BF90   ?  _BLOADER     =$BF9A
?  _BLOADERD    =$BF9D      _CHECK_DISK  =$BFA8      HBFCB        =$BFCB      HBFDC        =$BFDC
   _TXT_FLOBYA  =$BFE0      _SET_BUFFER  =$BFF8      KEY          =$C000      STROBE       =$C010
   RPAGE2       =$C01C      RHIRES       =$C01D      TXTCLR       =$C050      LOWSCR       =$C054
   HISCR        =$C055      HIRES        =$C057      BUTTN0       =$C061      BUTTN1       =$C062
   HC0E8        =$C0E8      HC0E9        =$C0E9      INIT         =$FB2F      HOME         =$FC58



Retour sommaire

hr ACS

Nouveau boot 1.



:asm
                1   
                2                                   ; LST OFF
                3                  ORG    $0800    
                4   
                5    ********************************
                6    *                              *
                7    * Nouveau boot1 FLOBYNOID DEMO *
                8    *      (c)2007 by Deckard      *
                9    *                              *
                10   ********************************
                11  
                12   * Adresses page 0
                13  
                14   BUFF_LOW      EQU    $26      
                15   BUFF_HIGH     EQU    $27      
                16   SECTOR        EQU    $3D      
                17   TRACK         EQU    $41       ; must be 0!
                18   CUR_NBR       EQU    $FE       ; nbr de secteur
                19   CUR_SECT      EQU    $FF       ; secteur en cours (current)
                20  
                21   * Adresse rom
                22  
                23   TXTSET        EQU    $C051     ; mode text
                24   HC65C         EQU    $C65C     ; routine load sector
                25   INIT          EQU    $FB2F    
                26   SETNORM       EQU    $FE84    
                27   SETKBD        EQU    $FE89    
                28   SETVID        EQU    $FE93    
                29   HOME          EQU    $FC58    
                30   WAIT          EQU    $FCA8    
                31  
                32   ********************************
                33  
0800: 01        34                 DFB    1         ; un seul secteur à charger
                35  
                36   ********************************
                37  
                38   FLOBY_BOOT1                   
0801: A9 60     39                 LDA    #$60      ; RTS nécessaire car la routine de chargement
0803: 8D 01 08  40                 STA    FLOBY_BOOT1 ; utilisée ($C65C) finit par un JMP $0801
                41  
0806: 20 2F FB  42                 JSR    INIT     
0809: 20 84 FE  43                 JSR    SETNORM  
080C: 20 93 FE  44                 JSR    SETVID   
080F: 20 89 FE  45                 JSR    SETKBD   
0812: 8D 00 C0  46                 STA    $C000    
0815: 8D 0C C0  47                 STA    $C00C    
                48  
0818: AD 51 C0  49                 LDA    TXTSET   
081B: 20 58 FC  50                 JSR    HOME     
                51  
                52   * Chargement boot2
                53  
081E: A9 BD     54                 LDA    #>$BD00   ; implantation $B600-$BDFF
0820: 85 27     55                 STA    BUFF_HIGH
0822: A9 00     56                 LDA    #$00      ; piste $00
0824: A2 08     57                 LDX    #$08      ; secteurs $08/$07/$06/$05/$04/$03/$02/$01
0826: A0 08     58                 LDY    #$08      ; 8 secteurs décroissant
0828: 20 5C 08  59                 JSR    LOAD      ; chargement
                60  
                61   * Signature
                62  
082B: A9 DF     63                 LDA    #"_"     
082D: A0 00     64                 LDY    #0       
082F: 99 0E 04  65   :1            STA    $040E,Y  
0832: C8        66                 INY             
0833: C0 0B     67                 CPY    #$0B     
0835: D0 F8     68                 BNE    :1       
                69  
0837: A0 00     70                 LDY    #0       
0839: B9 4C 08  71   :2            LDA    SIGNATURE,Y
083C: 99 8C 04  72                 STA    $048C,Y  
083F: C8        73                 INY             
0840: C0 0F     74                 CPY    #$0F     
0842: D0 F5     75                 BNE    :2       
                76  
0844: A9 00     77                 LDA    #0       
0846: 20 A8 FC  78                 JSR    WAIT     
0849: 4C 00 B6  79                 JMP    $B600    
                80  
                81   SIGNATURE                     
084C: A8 BA     82                 ASC    "(:"
084E: 20        83                 ASC    ' '      
084F: 06 0C 0F  84                 INV    'FLOBYNOID'
0852: 02 19 0E 0F 09 04
0858: 20        85                 ASC    ' '      
0859: BA A9 00  86                 ASC    ":)"00
                87  
                88  
                89   ********************************
                90   *                              *
                91   * Charge des secteurs en T$00  *
                92   *                              *
                93   ********************************
                94  
                95   * In : ACC = piste à lire (TOUJOURS 0!)
                96   *      X   = secteur à lire en 1er
                97   *      Y   = nbr de secteurs à lire
                98  
085C: 85 41     99   LOAD          STA    TRACK     ; must be 0!
085E: 86 FF     100                STX    CUR_SECT 
0860: 84 FE     101                STY    CUR_NBR  
                102 
0862: A9 00     103  :1            LDA    #$00     
0864: 85 26     104                STA    BUFF_LOW 
                105 
0866: A4 FF     106                LDY    CUR_SECT  ; équivalence secteur logique/physique
0868: B9 82 08  107                LDA    SKEWING,Y
086B: 85 3D     108                STA    SECTOR   
                109 
086D: A2 60     110                LDX    #$60      ; slot*16
086F: 20 5C C6  111                JSR    HC65C     ; routine LOAD de la carte controleur
                112 
0872: C6 FF     113                DEC    CUR_SECT  ; passe au secteur précédant
0874: 10 03     114                BPL    :2        ; il en reste encore sur cette piste
                115 
0876: 4C 69 FF  116                JMP    $FF69     ; not allowed!
                117 
0879: C6 27     118  :2            DEC    BUFF_HIGH ; revient sur l'adr high du secteur qu'on
087B: C6 27     119                DEC    BUFF_HIGH ; vient de charger et pointe sur le précédant
                120                                 ; car la routine rom a fait adr high+1
087D: C6 FE     121                DEC    CUR_NBR   ; un secteur de moins à charger
087F: D0 E1     122                BNE    :1        ; il en reste encore
0881: 60        123                RTS              ; chargement fini
                124 
                125  ********************************
                126 
                127  * Table d'équivalence secteurs logiques et physiques
                128 
0882: 00 0D 0B  129  SKEWING       HEX    000D0B09070503010E0C0A080604020F
0885: 09 07 05 03 01 0E 0C 0A
088D: 08 06 04 02 0F
                130 
                131  ********************************
                132 
0892: 00 00 00  133                DS     102,0    
...
08F5: 00 00 00
                134 
08F8: C4 C5 C3  135                ASC    "DECKARD"
08FB: CB C1 D2 C4
08FF: 08        136                DFB    8         ; checked
                137 
                138                SAV    FLOBYDEMO.BOOT1.NEW

Object saved as FLOBYDEMO.BOOT1.NEW,A$0800,L$0100



--End assembly, 256 bytes, Errors: 0


Symbol table - alphabetical order:

   BUFF_HIGH    =$27        BUFF_LOW     =$26        CUR_NBR      =$FE        CUR_SECT     =$FF
   FLOBY_BOOT1  =$0801      HC65C        =$C65C      HOME         =$FC58      INIT         =$FB2F
   LOAD         =$085C      SECTOR       =$3D        SETKBD       =$FE89      SETNORM      =$FE84
   SETVID       =$FE93      SIGNATURE    =$084C      SKEWING      =$0882      TRACK        =$41
   TXTSET       =$C051      WAIT         =$FCA8  


Symbol table - numerical order:

   BUFF_LOW     =$26        BUFF_HIGH    =$27        SECTOR       =$3D        TRACK        =$41
   CUR_NBR      =$FE        CUR_SECT     =$FF        FLOBY_BOOT1  =$0801      SIGNATURE    =$084C
   LOAD         =$085C      SKEWING      =$0882      TXTSET       =$C051      HC65C        =$C65C
   INIT         =$FB2F      HOME         =$FC58      WAIT         =$FCA8      SETNORM      =$FE84
   SETKBD       =$FE89      SETVID       =$FE93



Retour sommaire