Titre Rdos 3.3


Révisions:

1.0 :   /  /1989
2.0 : 04/02/1997
2.1 : 15/06/2006


Dernière mise à jour: 25/06/2006 (ajout sources sous DOS 3.3).

Présentation

Voici les sources complets du RDOS 3.3 de la société américaine SSI (Strategic Simulations, Inc.) qui a sorti des jeux sur Apple II pendant des années, surtout des jeux de role et des jeux de stratégie.
Il ne s'agit pas des sources de l'auteur (Roland Gustafsson) -et pour cause, ils ne furent jamais diffusés!- mais d'une interprétation personnelle... pour un usage personnel!!

Ce système d'exploitation propriétaire n'est pas récent : il date du début des années 80.
Les logiciels sortis jusqu'à la version 2.1 du système ont tous une protection.
Ces disks sont en 13 secteurs : c'est pour cela que la version 2.1 est aussi appelée Rdos 3.2 (en référence au DOS 3.2 qui est lui aussi en 13 secteurs par piste).
A l'époque pour cracker ces logiciels, les pirates pouvaient les convertir vers un format 16 secteurs (et ainsi en avoir une version copiable au Locksmith Fast Backup). Ils devaient pour celà modifier le système d'exploitation et y placer une RWTS du DOS 3.3. On trouve une référence à cette modification dans une ancienne interview du pirate Mister Z. D'autres (notamment des américains) firent de même pour leurs cracks.

Finalement, SSI finit par faire évoluer son système en le passant en 16 secteurs. Ce Rdos 3.3 a une RWTS identique au DOS 3.3 à l'exception d'un skewing différent. Cette dernière version a un copyright de 1986.

A la fin les logiciels de cette société n'étaient plus protégés. J'ai par exemple regardé Pool Of Radiance. Dans la doc, il est clairement mentionné qu'une copie de l'original doit être faite afin de ne jouer qu'avec le duplicata.

Pool of Radiance

Enfin si, il y avait quand même une forme de protection, via la doc avec une sorte de roue (translation wheel) qui permettait de s'assurer que l'utilisateur avait bien un original. On retrouve aussi ce système de roue dans Curse Of The Azure Bonds mais elle disparait complètement dans Champions Of Krynn où il ne subsiste qu'une routine demandant une référence dans la doc en début de partie.

LE SYSTEME D'EXPLOITATION DETAILLE ICI AVEC SON SOURCE COMPLET EST L'EXACTE VERSION QUE L'ON TROUVE SUR CES JEUX COMMERCIAUX NON PROTEGES (dans le sens copiable sur d'autres disquettes).


La particularité de ce système est sa rapidité, l'accès aux commandes du DOS via l'ampersand et surtout un HIMEM: $B100 bien pratique pour qui travaille en BASIC tout en ayant usage de la page graphique HGR.

Au niveau de l'underground, ce DOS a été utilisé pour la série des Muryaden après quelques patchs (notamment un catalogue déplacé de la piste $01 à la piste $22). Je l'ai aussi repris en version de base pour le jeu de role A la recherche de Karine de mon ami de l'époque, Bozo (et son frère).

Il s'agit à mon avis d'un des systèmes d'exploitations les plus agréables pour gérer une disquette 5,25 pouces dans le cadre d'un jeu de role contenant des programmes BASIC très longs et donc très gourmants en mémoire.
Il n'utilise ni les banks ni la mémoire étendu de l'apple II. Faire un jeu avec une configuration de base est tout à fait possible.

Pool of Radiance
Pool of Radiance


Spécifications

Avec le Rdos, on n'utilise pas la notion de secteur mais la notion de bloc.
Attention à ne pas confondre avec les blocs ProDOS! En effet, le bloc Rdos tout comme un secteur classique en DOS 3.3 fait 256 octets et pas 512 comme le bloc ProDOS.

La numérotation des blocs va de 0 à 559 soit 560 blocs maximum pour une disquette 5,25p (blocs $0000-$022F).
Un numéro de bloc a le format: $0PPS avec PP=numéro de piste et S =numéro de secteur.

Exemple: bloc $022F = piste $22 secteur $0F

Pour connaitre l'équivalence entre bloc Rdos et découpage logique Rdos en piste/secteur, il suffit de se ramener à son affichage hexa.

Attention ici, la notion de secteur correspond à une valeur logique différente de celle du DOS 3.3.

Table des équivalences bloc/T-S:

Bloc    Piste/secteur   Piste/secteur     Piste/secteur physique
RDOS    RDOS            DOS 3.3           (boot 0)
                        (& copy2+ 5.x)

$0000   T$00 S$00       T$00 S$00         T$00 S$00
$0001   T$00 S$01       T$00 S$0E         T$00 S$02
$0002   T$00 S$02       T$00 S$0D         T$00 S$04
$0003   T$00 S$03       T$00 S$0C         T$00 S$06
$0004   T$00 S$04       T$00 S$0B         T$00 S$08
$0005   T$00 S$05       T$00 S$0A         T$00 S$0A
$0006   T$00 S$06       T$00 S$09         T$00 S$0C
$0007   T$00 S$07       T$00 S$08         T$00 S$0E
$0008   T$00 S$08       T$00 S$07         T$00 S$01
$0009   T$00 S$09       T$00 S$06         T$00 S$03
$000A   T$00 S$0A       T$00 S$05         T$00 S$05
$000B   T$00 S$0B       T$00 S$04         T$00 S$07
$000C   T$00 S$0C       T$00 S$03         T$00 S$09
$000D   T$00 S$0D       T$00 S$02         T$00 S$0B
$000E   T$00 S$0E       T$00 S$01         T$00 S$0D
$000F   T$00 S$0F       T$00 S$0F         T$00 S$0F
$0010   T$01 S$00       T$01 S$00         T$01 S$00
...
$022E   T$22 S$0E       T$22 S$01         T$22 S$0D
$022F   T$22 S$0F       T$22 S$0F         T$22 S$0F


Le Rdos pour garder une petite taille n'intègre pas toutes ses commandes en ram.
En fonction des besoins, certains morceaux de code peuvent être chargés depuis la disquette.
C'est le cas pour 2 commandes: &CAT et &GOTO.

Une disquette Rdos 3.3 a ses 2 1ères pistes réservées:
- Piste $00 : RDOS et ses 2 modules (goto et cat)
- Piste $01 : catalogue

Les objets sont stockés à partir de la piste 2, c'est à dire à partir du bloc 32.
En temps normal le 1er objet présent est le fichier de lancement SYSTEMBOOT.

il n'y a pas de VTOC ni de TSL. Toutes les informations utiles sont dans le catalog.

Découpage de la disquette:

Bloc 0000      : boot1
Bloc 0001      : module &cat
Bloc 0002      : module &goto
Bloc 0003-0015 : RDOS 3.3
Bloc 0016-0031 : catalog
Bloc 0032      : SYSTEMBOOT
Bloc 0033-559  : objets


Une fois le Rdos en ram, la mémoire occupée est la suivante:

$B100-$B1FF  Buffer 1 (contient le code d'une commande supplémentaire chargée)
$B200-$B2FF  Buffer 2
$B300-$BFFF  RDOS 3.3


Le catalog va du bloc Rdos $0010 (16) au $001F (31) dans l'ordre séquentiel.
Le descriptif d'un objet fait 32 octets. Dans un bloc, il y a donc l'information pour 8 objets.
Et on peut avoir au maximum 8 * 16 blocs = 128 noms d'objets max.

Description d'un objet:

Offset          Rôle
$00-$17 (00-23) Nom de l'objet (1er caractère =$80 si objet supprimé)
                               (1er caractère = $00 -> fin catalog)
                               Le caractère espace est interdit.
                               Pour être valable, il faut des valeurs > espace ($A0).
                               Si un nom fait moins de 24 caractères, il est complété par des espaces à la fin.
$18     (24)    Type objet (A=basic, B=binaire, T=fichier, espace=objet supprimé)
$19     (25)    Nbr de bloc utilisé
$1A     (26)    Adresse implantation low
$1B     (27)    Adresse implantation high
$1C     (28)    Longueur low
$1D     (29)    Longueur high
$1E     (30)    Numéro 1er bloc (low)
$1F     (31)    Numéro 1er bloc (high)


Exemple d'un catalog avec un disk blank:

]&CAT
  LEN         -<NAME>-       LENGTH BLK
B 032 RDOS 3.3 COPYRIGHT 1986 8192  000
T 001 SYSTEMBOOT              256   032
A 001 HELLO                   48    033


Le 1er nom (bidon) permet de protéger les 2 premières pistes, c'est à dire le Rdos proprement dit et son catalogue.

Le fichier exec SYSTEMBOOT contient les instructions suivantes: PR#0:IN#0:&RUN"HELLO".

Commandes et erreurs

Doc dans le disk utils

&CAT : Donne le catalogue d'une disquette Rdos. Il s'agit d'une commande externe qui est chargée à chaque appel sur la piste $00 secteur $01 (référence logique Rdos), c'est à dire le bloc 1.

Doc dans le disk utils
Doc dans le disk utils

&LOAD "nom" (,adresse) : Charge un programme basic et redonne la main à l'utilisateur.
Il est possible de spécifier l'adresse d'implantation. Si rien n'est donné, le programme est chargé à l'adresse de début du basic (txttab).

Doc dans le disk utils

&RUN "nom" (,adresse) : Charge et exécute un programme basic. Même remarque pour l'adresse d'implantation.

Doc dans le disk utils


&GOTO "nom" (,adresse) : Permet de lancer un autre programme basic en conservant les données. Il s'agit d'une commande externe chargée à chaque fois sur la piste $00 secteur $02 (référence logique Rdos), soit le bloc 2.
Ceci n'est possible que si le nouveau programme basic est de taille inférieure ou égale au précédant.
Cette commande est l'équivalent du CHAIN sous DOS 3.3.

Doc dans le disk utils
Doc dans le disk utils


&SAVE "nom" : Sauvegarde du programme basic en cours.

Doc dans le disk utils


&STORE "nom", adresse, longueur : Equivalent du BSAVE.

Doc dans le disk utils


&RECALL "nom" (,adresse) : Charge un objet binaire. Si pas d'adresse mentionnée, utilise celle de la sauvegarde (incluse dans le descriptif du catalog).

Doc dans le disk utils


&DEF "nom", nbr de blocs (1 à 255) : Réserve une place pour un objet en taille de bloc. Rdos écrit des zéros dans l'espace réservé.

Doc dans le disk utils


&PRINT "nom" : Permet d'ajouter des informations dans un fichier texte.
Le mécanisme de cette commande passe par le détournement de CSW/KSW.
Toutes les sorties classiques de type "print" seront dirigées vers le fichier jusqu'à ce que la commande &END stoppe le process. On ne peut traiter qu'un seul fichier à la fois. Les infos sont écrites sur disk que quand un bloc est totalement rempli ou si la commande &END est rencontrée.

Doc dans le disk utils


&READ "nom" : Cette commande permet de lire le contenu d'un fichier texte (inverse de la commande &print).
On ne peut traiter qu'un seul fichier à la fois.
On ne peut pas lire plus de données que ce qui a été écrit dedans. Par contre, on peut en lire moins si on veut.

Doc dans le disk utils


&END : Arret commandes &PRINT ou &READ. Ceci est fait par l'envoi d'un $00 via COUT et remet les CSW/KSW d'avant &PRINT ou &READ.

Doc dans le disk utils


Exemple d'utilisation:

d'abord l'enregistrement des données:

10 INPUT "EXISTING FILE (Y/N):";A$
20 IF A$="Y" THEN &DEL "INCREDIBLE"
30 &DEF "INCREDIBLE",1
40 &PRINT "INCREDIBLE"
50 ? "STEVE WOZNIAK" : ? "APPLE II"
60 &END

puis la relecture (et affichage écran):

10 &READ "INCREDIBLE"
20 INPUT C1$: INPUT C2$
30 &END
40 ? C1$ : ? C2$


&DEL "nom" : Supprime un objet en écrasant son type et le 1er caractère du nom.

Doc dans le disk utils


&LEN : Commande liée au programme basic en cours. Elle permet de connaitre l'adresse de début du programme, sa taille et l'adresse de début des variables.

Doc dans le disk utils


&D lecteur, (autre commande Rdos) : Change le drive courant et éventuellement lance une autre commande Rdos.

&S slot, (autre commande Rdos) : Change le slot du drive courant et éventuellement lance une autre commande Rdos.

Doc dans le disk utils


&NEW : Supprime le programme basic en mémoire (commande basic NEW) et remet le himem $B100.

Doc dans le disk utils


&USR adresse : Défini une porte de sortie si la commande & trouvée n'est pas répertoriée en standard. Ceci permet de créer de nouvelles commandes et de les rattacher au Rdos.

Doc dans le disk utils



Notes:

- Quand j'indique "nom", il s'agit soit du nom réel entre guillemet soit une variable alpha soit un mixe des 2.
- Les adresses et longueurs doivent être indiquées en numérique (pas de support de l'alpha contrairement au DOS 3.3 et ProDOS).


Liste des erreurs:

File not found
Dos syntax error
Duplicate entry
Disk full
Out of data
I/O error
File type error
write protect error

Doc dans le disk utils


Assemblage


Les sources ont été réalisés avec MERLIN-8 ProDOS.

Vous trouverez 2 disquettes en pièces jointes.

Une version dite "statique" avec tous les éléments inclus dans le fichier MAKE.
Il suffit de taper:
(L)oad MAKE
ASM
et l'objet est dispo.

Une version dite dynamique car elle est découpée en modules linkables.
Si vous avez envie de faire des modifs, utilisez plutôt celle là.
A dire vrai, j'ai rajouté la statique pour sortir le listing des annexes!
Pour la "dynamique", il faut assembler individuellement les différentes composantes (relogeable REL), puis linker le tout.
Cette étape se fait avec  LINK $B300 "LNK.RDOS".

Le binaire résultat s'appelle RDOS.SSI dans le répertoire OBJ. (Pour la "dynamique", c'est dans LNK/OBJ).


Le Rdos 3.3 en lui même se compose des sources suivants:

INTERFACE.S      Interface gérant le & et le traitement des commandes RDOS
RWTS.S           Routine principale de la RWTS
RWTS.SUBS.S      Sous programmes de la RWTS
NBUF.S           Buffers NBUF1 et NBUF2 utilisés par la RWTS. NBUF1 contient
                 le code de démarrage du RDOS.
VARIABLES        Tables et variables utilisées par le RDOS 3.3.


J'ai également mis les sources complémentaires:

BOOT1.S          Amorçage piste $00 secteur $00 d'une disquette RDOS 3.3.
                 Ce boot très court charge le RDOS en une passe et le
                 stocke de $B300 à $BFFF avant de l'exécuter.

MODULE.CAT.S     Module exécuté suite à la commande &CAT (catalogue).

MODULE.CHAIN.S   Module exécuté suite à la commande &GOTO (chainage de 2
                 programmes BASIC pour conserver les variables).


Le résultat obtenu après le LINK n'est bien sur pas exploitable sous ProDOS.

Si vous souhaitez vous créer une disquette RDOS 3.3, utilisez ShrinkIt 3.4:

L'archive ($E0) RDOS3.3 contient l'image d'une disquette RDOS 3.3 avec juste le SYSTEMBOOT et un petit programme BASIC HELLO. La disquette obtenue est amorçable. Un message vous accueillera:

RDOS LOADED.

READY.

Vous avez alors la main pour tapez vos instructions.

Notes


Pour remplacer un objet dont le nom existe déjà au catalog, il faut obligatoirement le supprimer via les instructions &DEL puis le sauvegarder avec la commande liée au type.

Il faut être attentif à la place prise. En effet, du fait de l'usage exclusif du numéro de 1er bloc et de la longueur, chaque augmentaton de taille d'un objet peut poser problème.
Il faut gérer intelligement l'espace des blocs.

Par ex, si vous êtes en train de faire un programme et qu'il s'allonge à fur et à mesure, commencez avant tout à lui prévoir une place suffisament grande avec l'instruction &DEF (et supprimer le fichier immédiatement après avec l'instruction &DEL). Le Rdos vous aura ainsi fait un "trou" dans le catalog où vous pourrez sereinement sauvegarder votre programme à fur et à mesure de son évolution.
Dans le cas contraire, à chaque fois que vous allez sauver votre programme, il va trouver que l'ancien espace est insuffisant et se positionner après en laissant l'espace précédant intact (même s'il n'y a pas d'objet du tout derrière). A ce petit jeu là, vous allez rapidement arriver à un message d'erreur "disk full".
Si vous faites un &CAT après un &DEF / &DEL, la place libre apparaîtra avec un nom d'objet <NOT IN USE>.

Autre cas de figure: si vous voulez sauver un objet de petite taille et que la 1ère place dispo (résultant d'un &DEL) entre 2 autres objets est très grande, votre objet va être placé dans ce trou et il y aura plein de place gachée pour le reste (non utilisable) car un objet en remplace un autre dans le catalogue (et c'est tout).

Ajout du 20/06/2006: il semblerait que des outils aient filtrés finalement de chez Roland Gustafsson car après quelques recherches google, je suis tombé sur un disk d'outils à l'url http://www.apple2.org.za/gswv/a2zine/Sel/RDOSstuff.html.

Rdos Utils
Rdos Utils
Rdos Utils
Rdos Utils


Floppy
ProDOS
Download Rdos 3.3 dynamic source code -linked- (gzipped)
Floppy
ProDOS
Download Rdos 3.3 static source code (gzipped)
Floppy
DOS 3.3
Download Rdos 3.3 static source code (gzipped)
Floppy
Rdos 3.3
Download Rdos 3.3 blank disk (gzipped)
Floppy
Rdos 3.3
Download Rdos 3.3 Utils disk (gzipped)

File: Rdos_3_3_Master_Sources_Dynamic_Sous_ProDOS.dsk
Disk: ProDOS /RDOS.DYNAMIC (140KB)
 Name                             Type Auxtyp Modified         Format   Length
------------------------------------------------------------------------------
 SRC                              DIR  $0000  16-Jun-06 01:14  ProDOS      512
 SRC:BOOT1.S                      TXT  $0000  15-Jun-06 21:21  ProDOS     2721
 SRC:INTERFACE.S                  TXT  $0000  15-Jun-06 22:50  ProDOS    32253
 SRC:RWTS.S                       TXT  $0000  15-Jun-06 22:58  ProDOS     4868
 SRC:RWTS.SUBS.S                  TXT  $0000  15-Jun-06 23:01  ProDOS     7121
 SRC:NBUF.S                       TXT  $0000  15-Jun-06 23:02  ProDOS     1291
 SRC:VARIABLES.S                  TXT  $0000  15-Jun-06 23:07  ProDOS     2969
 SRC:LNK.RDOS.S                   TXT  $0000  15-Jun-06 23:29  ProDOS      495
 SRC:MODULE.CAT.S                 TXT  $0000  15-Jun-06 23:26  ProDOS     3349
 SRC:MODULE.CHAIN.S               TXT  $0000  15-Jun-06 23:26  ProDOS     4344
 SRC:INCLUDE                      DIR  $0000  16-Jun-06 01:10  ProDOS      512
 SRC:INCLUDE:INCLUDE.ROM.S        TXT  $0000  08-Mar-98 15:53  ProDOS     3226
 SRC:INCLUDE:INCLUDE.PAGE0.S      TXT  $0000  19-Apr-98 17:56  ProDOS     2052
 SRC:LNK                          DIR  $0000  16-Jun-06 01:14  ProDOS      512
 SRC:LNK:OBJ                      DIR  $0000  16-Jun-06 01:14  ProDOS      512
 SRC:LNK:OBJ:RDOS3.3              LBR  $8002  04-Feb-97 17:28  ProDOS     4589
 SRC:LNK:OBJ:MODULE.CAT           BIN  $B100  16-Jun-06 01:12  ProDOS      256
 SRC:LNK:OBJ:RDOS.SSI             BIN  $B300  16-Jun-06 01:14  ProDOS     3328
 SRC:LNK:OBJ:MODULE.CHAIN         BIN  $B100  16-Jun-06 01:13  ProDOS      256
 SRC:LNK:OBJ:BOOT1                BIN  $0800  16-Jun-06 01:11  ProDOS      256
 SRC:LNK:NBUF                     $F8  $0156  16-Jun-06 01:12  ProDOS      484
 SRC:LNK:VARIABLES                $F8  $0068  16-Jun-06 01:12  ProDOS      659
 SRC:LNK:INTERFACE                $F8  $062D  16-Jun-06 01:12  ProDOS     2925
 SRC:LNK:RWTS                     $F8  $00EC  16-Jun-06 01:12  ProDOS      575
 SRC:LNK:RWTS.SUBS                $F8  $0300  16-Jun-06 01:12  ProDOS     1069
 SRC:LNK:LNK.RDOS                 BIN  $8000  16-Jun-06 01:12  ProDOS       46
------------------------------------------------------------------------------

File: Rdos_3_3_Master_Sources_Static_Sous_ProDOS.dsk
Disk: ProDOS /RDOS.STATIC (140KB)
 Name                             Type Auxtyp Modified         Format   Length
------------------------------------------------------------------------------
 SRC                              DIR  $0000  16-Jun-06 01:05  ProDOS      512
 SRC:BOOT1.S                      TXT  $0000  15-Jun-06 23:35  ProDOS     2717
 SRC:INTERFACE.S                  TXT  $0000  16-Jun-06 00:20  ProDOS    30624
 SRC:RWTS.S                       TXT  $0000  15-Jun-06 23:50  ProDOS     3560
 SRC:RWTS.SUBS.S                  TXT  $0000  15-Jun-06 23:51  ProDOS     6664
 SRC:NBUF.S                       TXT  $0000  15-Jun-06 23:36  ProDOS      943
 SRC:VARIABLES.S                  TXT  $0000  15-Jun-06 23:40  ProDOS     2571
 SRC:MODULE.CAT.S                 TXT  $0000  15-Jun-06 23:37  ProDOS     3345
 SRC:MODULE.CHAIN.S               TXT  $0000  15-Jun-06 23:37  ProDOS     4340
 SRC:MAKE.S                       TXT  $0000  16-Jun-06 00:01  ProDOS      393
 SRC:INCLUDE                      DIR  $0000  16-Jun-06 01:02  ProDOS      512
 SRC:INCLUDE:INCLUDE.ROM.S        TXT  $0000  08-Mar-98 15:53  ProDOS     3226
 SRC:INCLUDE:INCLUDE.PAGE0.S      TXT  $0000  19-Apr-98 17:56  ProDOS     2052
 SRC:INCLUDE:INCLUDE.RDOS.S       TXT  $0000  16-Jun-06 00:01  ProDOS      881
 SRC:OBJ                          DIR  $0000  16-Jun-06 01:05  ProDOS      512
 SRC:OBJ:BOOT1                    BIN  $0800  16-Jun-06 01:04  ProDOS      256
 SRC:OBJ:MODULE.CAT               BIN  $B100  16-Jun-06 01:05  ProDOS      256
 SRC:OBJ:MODULE.CHAIN             BIN  $B100  16-Jun-06 01:04  ProDOS      256
 SRC:OBJ:RDOS.SSI                 BIN  $B300  16-Jun-06 01:05  ProDOS     3328
------------------------------------------------------------------------------.



25/06/2006 : Rajout sources sous DOS 3.3.

Sources sous DOS 3.3

Sommaire Annexes


Lien Contenu
Voir Source Boot 1.
Voir Source Rdos 3.3 (boot 2).
Voir Source &CAT.
Voir Source &GOTO.


hr Rdos 3.3


Source Boot 1.



                1
                2             ORG   $0800     
                3   
                4    ********************************
                5    *                              *
                6    *      BOOT1 du RDOS 3.3       *
                7    *     (s)ource by DECKARD      *
                8    *                              *
                9    ********************************
                10  
                11   * Le boot1 charge le RDOS en mémoire ($B300-$BFFF)
                12   * et l'exécute à partir de l'adresse $BE00.
                13   * Ce boot utilise la routine du controleur de disk II
                14   * comme sous programme pour le chargement.
                15   *
                16   * Chargement:
                17   *
                18   * Secteur    Secteur                  Secteur
                19   * Physique   Logique                  Logique
                20   * (Boot 0)   RDOS                     DOS 3.3 (&copy2+ 5.x)
                21  
                22   * T$00 S$00  T$00 S$00                T$00 S$00
                23   * T$00 S$01  T$00 S$08  $B800-$B8FF   T$00 S$07
                24   * T$00 S$02  T$00 S$01                T$00 S$0E
                25   * T$00 S$03  T$00 S$09  $B900-$B9FF   T$00 S$06
                26   * T$00 S$04  T$00 S$02                T$00 S$0D
                27   * T$00 S$05  T$00 S$0A  $BA00-$BAFF   T$00 S$05
                28   * T$00 S$06  T$00 S$03  $B300-$B3FF   T$00 S$0C
                29   * T$00 S$07  T$00 S$0B  $BB00-$BBFF   T$00 S$04
                30   * T$00 S$08  T$00 S$04  $B400-$B4FF   T$00 S$0B
                31   * T$00 S$09  T$00 S$0C  $BC00-$BCFF   T$00 S$03
                32   * T$00 S$0A  T$00 S$05  $B500-$B5FF   T$00 S$0A
                33   * T$00 S$0B  T$00 S$0D  $BD00-$BDFF   T$00 S$02
                34   * T$00 S$0C  T$00 S$06  $B600-$B6FF   T$00 S$09
                35   * T$00 S$0D  T$00 S$0E  $BE00-$BEFF   T$00 S$01
                36   * T$00 S$0E  T$00 S$07  $B700-$B7FF   T$00 S$08
                37   * T$00 S$0F  T$00 S$0F  $BF00-$BFFF   T$00 S$0F
                38  
                39   ********************************
                40  
                41   * Adresses page 0
                42  
                43   SLOT16   EQU   $2B       
                44   SECTEUR  EQU   $3D       
                45   BUFHIGH  EQU   $27       
                46   COMPTEUR EQU   $50       
                47  
                48   RESET    EQU   $03F2     
                49   MODE     EQU   $04F8+3   
                50  
                51   * Adresses ROM
                52  
                53   KEY      EQU   $C000     
                54   INIT     EQU   $FB2F     
                55   HOME     EQU   $FC58     
                56   SETNORM  EQU   $FE84     
                57   SETKBD   EQU   $FE89     
                58   SETVID   EQU   $FE93     
                59  
                60   ********************************
                61  
0800: 01        62            DFB   1          ; charge un seul secteur
                63  
0801: A9 60     64   H0801    LDA   #$60       ; RTS nécessaire car on utilise le sous-programme
0803: 8D 01 08  65            STA   H0801      ; de chargement du controleur qui finit par un
                66                             ; JMP $0801.
                67  
0806: A9 FF     68            LDA   #%11111111 ; cf firmware carte video (slot 3)
0808: 8D FB 04  69            STA   MODE      
                70  
080B: 8D F3 03  71            STA   RESET+1    ; reset=reboot system
080E: 8D F4 03  72            STA   RESET+2   
0811: 8D 00 C0  73            STA   KEY       
0814: 8D 0C C0  74            STA   $C00C     
0817: 8D 0E C0  75            STA   $C00E     
081A: 8D 5F C0  76            STA   $C05F     
081D: 8D 81 C0  77            STA   $C081     
0820: 20 2F FB  78            JSR   INIT      
0823: 20 58 FC  79            JSR   HOME      
0826: 20 84 FE  80            JSR   SETNORM   
0829: 20 93 FE  81            JSR   SETVID    
082C: 20 89 FE  82            JSR   SETKBD    
                83  
082F: A6 2B     84            LDX   SLOT16     ; slot16/16
0831: 8A        85            TXA             
0832: 4A        86            LSR             
0833: 4A        87            LSR             
0834: 4A        88            LSR             
0835: 4A        89            LSR             
0836: 09 C0     90            ORA   #$C0       ; $Cslot
0838: 8D 4D 08  91            STA   H084B+2   
                92  
083B: A0 00     93            LDY   #0         ; compteur des 16 secteurs de la piste 0
083D: 84 50     94   H083D    STY   COMPTEUR  
                95  
083F: B9 5A 08  96            LDA   H085A,Y    ; secteur physique
0842: 85 3D     97            STA   SECTEUR   
0844: B9 6A 08  98            LDA   H086A,Y    ; adr high buffer
0847: F0 05     99            BEQ   H084E      ; pas de chargement si adr high=0
                100 
0849: 85 27     101           STA   BUFHIGH   
084B: 20 5C 00  102  H084B    JSR   $005C      ; $Cx5C avec x=slot: chargement secteur
                103 
084E: A4 50     104  H084E    LDY   COMPTEUR   ; incrémente compteur
0850: C8        105           INY             
0851: C0 10     106           CPY   #16       
0853: D0 E8     107           BNE   H083D      ; pas fini
                108 
0855: A6 2B     109           LDX   SLOT16    
0857: 4C 00 BE  110           JMP   $BE00      ; lance RDOS
                111 
                112  * Liste des secteurs physiques selon l'ordre logique
                113  * du RDOS
                114 
085A: 00 02 04  115  H085A    HEX   00020406080A0C0E01030507090B0D0F
085D: 06 08 0A 0C
0861: 0E 01 03 05
0865: 07 09 0B 0D
0869: 0F
                116 
                117  * Liste des adresses high d'implantation
                118 
086A: 00 00 00  119  H086A    HEX   000000B3B4B5B6B7B8B9BABBBCBDBEBF
086D: B3 B4 B5 B6
0871: B7 B8 B9 BA
0875: BB BC BD BE
0879: BF
                120 
087A: 00 00 00  121           DS    \         
...
08F9: 00 00 00 00
08FD: 00 00 00
                122
                123           SAV   LNK/OBJ/BOOT1

Object saved as LNK/OBJ/BOOT1,A$0800,L$0100,BIN



--End assembly, 256 bytes, Errors: 0


Symbol table - alphabetical order:

   BUFHIGH =$27        COMPTEUR=$50        H0801   =$0801      H083D   =$083D
   H084B   =$084B      H084E   =$084E      H085A   =$085A      H086A   =$086A
   HOME    =$FC58      INIT    =$FB2F      KEY     =$C000      MODE    =$04FB
   RESET   =$03F2      SECTEUR =$3D        SETKBD  =$FE89      SETNORM =$FE84
   SETVID  =$FE93      SLOT16  =$2B


Symbol table - numerical order:

   BUFHIGH =$27        SLOT16  =$2B        SECTEUR =$3D        COMPTEUR=$50
   RESET   =$03F2      MODE    =$04FB      H0801   =$0801      H083D   =$083D
   H084B   =$084B      H084E   =$084E      H085A   =$085A      H086A   =$086A
   KEY     =$C000      INIT    =$FB2F      HOME    =$FC58      SETNORM =$FE84
   SETKBD  =$FE89      SETVID  =$FE93


Retour sommaire

hr Rdos 3.3


Source Rdos 3.3.




Programme d'assemblage static :

    1
    2          LST   OFF
    3          ORG   $B300
    4          TYP   $06
    5
    6 ********************************
    7 *                              *
    8 *    Création RDOS original    *
    9 *      (c)1997 by Deckard      *
   10 *                              *
   11 ********************************
   12
   13          USE   INCLUDE/INCLUDE.ROM
   14          USE   INCLUDE/INCLUDE.PAGE0
   15          USE   INCLUDE/INCLUDE.RDOS
   16
   17          PUT   INTERFACE
   18          PUT   RWTS
   19          PUT   RWTS.SUBS
   20          PUT   NBUF
   21          PUT   VARIABLES
   22
   23          SAV   OBJ/RDOS.SSI

********************************************


:asm
                1   
                2             ORG   $B300     
                3             TYP   $06       
                4   
                5    ********************************
                6    *                              *
                7    *    Création RDOS original    *
                8    *      (c)1997 by Deckard      *
                9    *                              *
                10   ********************************
                11  
                12           USE   INCLUDE/INCLUDE.ROM
               >1   
               >2   
               >3    ********************************
               >4    *                              *
               >5    *  Adresses de référence ROM   *
               >6    *     (c)1994 by Deckard       *
               >7    *                              *
               >8    ********************************
               >9   
               >10   KEY      EQU   $C000      ; touche entrée
               >11   RDPRINC  EQU   $C002      ; lire en mem princ
               >12   RDAUX    EQU   $C003      ; lire en mem aux
               >13   WTPRINC  EQU   $C004      ; écrire en mem princ
               >14   WTAUX    EQU   $C005      ; écrire en mem aux
               >15   STROBE   EQU   $C010      ; remise à zéro saisie clavier
               >16   STORE80  EQU   $C018      ; état de 80STORE
               >17   RD80COL  EQU   $C01F      ; test pour savoir si 80c ou 40c
               >18   SPEAK    EQU   $C030     
               >19   PRINC    EQU   $C054     
               >20   AUX      EQU   $C055     
               >21   BUTTN0   EQU   $C061     
               >22   BUTTN1   EQU   $C062     
               >23   PADDL0   EQU   $C064      ; état manette 0
               >24   PADDL1   EQU   $C065      ; état manette 1
               >25   PTRIG    EQU   $C070      ; init manette
               >26   PHASEOFF EQU   $C080     
               >27   XFER     EQU   $C314     
               >28   AUXMOVE  EQU   $C311     
               >29   BLTU2    EQU   $D39A     
               >30   ERRORN   EQU   $D412     
               >31   RESTART  EQU   $D43C      ; fin traitement erreur
               >32   LINKSET  EQU   $D4F2      ; init pointeurs basic
               >33   RUNPROG  EQU   $D566      ; lance prog basic en ram
               >34   INLINE   EQU   $D52C     
               >35   NEWCMD   EQU   $D64B     
               >36   CLEARC   EQU   $D66C      ; fin inits pour prog basic
               >37   STXTPT   EQU   $D697     
               >38   NEWSTT   EQU   $D7D2     
               >39   ADDON    EQU   $D998      ; ajoute Y à l'adr de chargot
               >40   CRDO     EQU   $DAFB     
               >41   STROUT   EQU   $DB3A     
               >42   STRPRT   EQU   $DB3D      ; affiche une chaine
               >43   OUTQUES  EQU   $DB5A     
               >44   OUTSP    EQU   $DB57     
               >45   OUTDO    EQU   $DB5C      ; affiche caractère ACC 'x'
               >46   FRMNUM   EQU   $DD67      ; évalue expression et vérif nbre
               >47   CHKSTR   EQU   $DD6C      ; vérifie que c'est une chaine
               >48   FRMEVL   EQU   $DD7B     
               >49   CHKCOM   EQU   $DEBE      ; vérifie présence virgule
               >50   SYNERR   EQU   $DEC9      ; syntax error
               >51   PTRGET   EQU   $DFE3      ; positionne sur variable
               >52   BASIC    EQU   $E000     
               >53   BASIC2   EQU   $E003     
               >54   AYINT    EQU   $E10C     
               >55   IQERR    EQU   $E199      ; illegal quantity
               >56   GIVAYF   EQU   $E2F2      ; entier A,Y -> FAC
               >57   STRLIT   EQU   $E3E7     
               >58   GETSPA   EQU   $E452      ; fait la place pour une chaine
               >59   GARBAG   EQU   $E484      ; nettoyage chaines inutilisées
               >60   MOVSTR   EQU   $E5E2      ; recopie chaine pointée vers variable
               >61   FREFAC   EQU   $E600     
               >62   GETBYT   EQU   $E6F8      ; lecture nombre 1 octet -> X
               >63   GETADR   EQU   $E752      ; lecture nbr. In: Y (low) Acc (High)
               >64   FADDT    EQU   $E7C1      ; FAC + ARG -> FAC
               >65   FMULTT   EQU   $E982      ; FAC * ARG -> FAC
               >66   MOVFM    EQU   $EAF9      ; A(-),Y(+) ptr flottant cond -> FAC
               >67   MOVAF    EQU   $EB63      ; FAC -> ARG
               >68   FLO2     EQU   $EBA0      ; routine de LINPRT
               >69   INPRT    EQU   $ED19     
               >70   LINPRT   EQU   $ED24      ; affichage nombre en décimal
               >71   PRNTFAC  EQU   $ED2E      ; affiche FAC
               >72   FOUT     EQU   $ED34      ; converti FAC en 1 chaine
               >73   NOTRACE  EQU   $F26F     
               >74   NORMAL   EQU   $F273      ; mode normal
               >75   INVERSE  EQU   $F277      ; mode inverse
               >76   HANDLERR EQU   $F2E9      ; traitement ON ERR
               >77   TEXT     EQU   $F399      ; mode TEXT
               >78   HGR      EQU   $F3F2     
               >79   PROLOGP  EQU   $F832     
               >80   SETCOL   EQU   $F864      ; fixe couleur
               >81   GBASCALC EQU   $F847      ; calcul adresse ligne
               >82   PRNTYX   EQU   $F940     
               >83   PRNTAX   EQU   $F941     
               >84   PRNTX    EQU   $F944     
               >85   PRBLNK   EQU   $F948      ; affiche 3 espaces
               >86   PRBL2    EQU   $F94A      ; affiche le nb d'espace donné par X
               >87   OLDBRK   EQU   $FA59     
               >88   INIT     EQU   $FB2F     
               >89   TABV     EQU   $FB5B      ; position curseur
               >90   BASCALC  EQU   $FBC1     
               >91   BELL2    EQU   $FBE4     
               >92   VTAB     EQU   $FC22      ; Positionne pour affichage text
               >93   HOME     EQU   $FC58      ; nettoie écran text
               >94   WAIT     EQU   $FCA8      ; délai attente
               >95   RDKEY    EQU   $FD0C      ; lecture clavier
               >96   CROUT    EQU   $FD8E      ; affiche retour chariot
               >97   PRBYTE   EQU   $FDDA     
               >98   COUT     EQU   $FDED      ; affiche caractère ACC "x"
               >99   COUT1    EQU   $FDF0      ; sortie normale CSW
               >100  IDENTGS  EQU   $FE1F      ; routine identifiant un IIGS
               >101  SETINV   EQU   $FE80      ; inverse
               >102  SETNORM  EQU   $FE84      ; normal
               >103  SETKBD   EQU   $FE89     
               >104  SETVID   EQU   $FE93     
               >105  IN       EQU   $FE8B      ; IN#
               >106  PR       EQU   $FE95      ; PR#
               >107  BELL     EQU   $FF3A      ; bip erreur
               >108  OLDRST   EQU   $FF59     
               >109  MON      EQU   $FF65     
               >110  MONZ     EQU   $FF69      ; call -151

                13           USE   INCLUDE/INCLUDE.PAGE0
               >1   
               >2    ********************************
               >3    *                              *
               >4    * Adresses de référence page 0 *
               >5    *     (c)1994 by Deckard       *
               >6    *                              *
               >7    ********************************
               >8   
               >9   
               >10   STAT     EQU   $11        ; flags dernière opération sur FAC
               >11   WNDLFT   EQU   $20        ; marge gauche
               >12   WNDWDTH  EQU   $21        ; largeur
               >13   WNDTOP   EQU   $22        ; marge haute
               >14   WNDBTM   EQU   $23        ; marge basse
               >15   CH       EQU   $24        ; position horizontale curseur
               >16   CV       EQU   $25        ; position verticale curseur
               >17   GBASL    EQU   $26        ; adr low ligne calculée par GBASCALC
               >18   GBASH    EQU   $27        ; adr high ligne calculée par GBASCALC
               >19   BASL     EQU   $28        ;
               >20   BASH     EQU   $29        ;
               >21   MASK     EQU   $2E        ; parité: 0F (ligne paire), F0 (ligne impaire)
               >22   COLOR    EQU   $30        ; couleur après SETCOL ($F864)
               >23   INVFLG   EQU   $32        ; #$3F=inverse  #$FF=normal
               >24   CSWL     EQU   $36        ; sortie de caractères low
               >25   CSWH     EQU   $37        ; sortie de caractères high
               >26   KSWL     EQU   $38        ; entrée de caractères low
               >27   KSWH     EQU   $39        ; entrée de caractères high
               >28   A2L      EQU   $3E        ; adr travail moniteur
               >29   A2H      EQU   $3F        ; adr travail moniteur
               >30   A3L      EQU   $40        ; adr travail moniteur
               >31   A3H      EQU   $41        ; adr travail moniteur
               >32   A4L      EQU   $42        ; adr travail moniteur
               >33   A4H      EQU   $43        ; adr travail moniteur
               >34   LINNUM   EQU   $50       
               >35   TEMPPT   EQU   $52       
               >36   TEMPST   EQU   $55       
               >37   INDEX    EQU   $5E       
               >38   TXTTAB   EQU   $67        ; adr début texte basic
               >39   VARTAB   EQU   $69        ; adr début des variables simples
               >40   ARYTAB   EQU   $6B        ; adr début des variables dimensionnées
               >41   STREND   EQU   $6D        ; début de l'espace libre
               >42   FRETOP   EQU   $6F        ; et $70
               >43   MEMSIZ   EQU   $73        ; et $74
               >44   CURLIN   EQU   $75       
               >45   VARNAM   EQU   $82        ; infos variable après PTRGET
               >46   VARPNT   EQU   $83        ; utilisé par PTRGET
               >47   DSCLEN   EQU   $8F       
               >48   HIGHDS   EQU   $94       
               >49   HIGHTR   EQU   $96       
               >50   LOWTR    EQU   $9B       
               >51   FAC      EQU   $9D       
               >52   FACMO    EQU   $A0        ; milieu de FAC (used by STRPRT)
               >53   FACSGN   EQU   $A2        ; signe FAC
               >54   ARG      EQU   $A5       
               >55   PGEND    EQU   $AF        ; fin du texte basic
               >56   CHARGET  EQU   $00B1      ; incrémente et lit caractère
               >57   CHARGOT  EQU   $00B7      ; lecture caractère only
               >58   TXTPTR   EQU   $B8        ; pointeur texte
               >59   ERRFLG   EQU   $D8        ; flag ONERR
               >60   ERRNUM   EQU   $DE        ; numéro erreur (mli, ...)
               >61   ONERR    EQU   $D8        ; POUR ON ERR GOTO...
               >62   CMDCPT   EQU   $EC        ; numéro de la cmd-1 dans la liste
               >63   ANL_CPT  EQU   $ED        ; numéro de liste
               >64   CURADR   EQU   $EE        ; et $EF adresses de la liste
               >65   SPEEDZ   EQU   $F1       

                14           USE   INCLUDE/INCLUDE.RDOS
               >1   
               >2    ********************************
               >3    *                              *
               >4    *   Définitions RDOS pour      *
               >5    *     assemblage static        *
               >6    *     (c)2006 by Deckard       *
               >7    *                              *
               >8    ********************************
               >9   
               >10   * Buffers RDOS
               >11  
               >12   BUFFER1  EQU   $B100      ; $B100-$B1FF
               >13   BUFFER2  EQU   $B200      ; $B200-$B2FF
               >14  
               >15   * RWTS + subs
               >16  
               >17   SLOTZ    EQU   $27       
               >18   CSUM     EQU   $27       
               >19   PRIOR    EQU   $27       
               >20   WTEMP    EQU   $26       
               >21   IDX      EQU   $26       
               >22   COUNT    EQU   $26       
               >23   LAST     EQU   $26       
               >24   TRKCNT   EQU   $26       
               >25   SLOTEMP  EQU   $2B       
               >26   TRKN     EQU   $2A       
               >27   SECFND   EQU   $2D        ; secteur trouvé
               >28   TRKFND   EQU   $2E        ; piste trouvée
               >29   DRIVNO   EQU   $35        ; bit 7: [0=drive 2,1=drive 1]
               >30   BUFADR   EQU   $3E        ; buffer implantation
               >31   IOBPH    EQU   $49        ; bit 7: [0=write,1=read]
               >32   CURTRK   EQU   $0478      ; piste courante
               >33   SEEKCNT  EQU   $04F8      ; nbr de passes
               >34   SLOTABS  EQU   $678      
               >35  
               >36   * Softswitchs drive
               >37  
               >38   LC088    EQU   $C088      ; arret drive
               >39   LC089    EQU   $C089      ; drive on
               >40   LC08C    EQU   $C08C     
               >41   LC08D    EQU   $C08D     
               >42   LC08E    EQU   $C08E     
               >43   LC08F    EQU   $C08F     
                15  
   
                18           PUT   INTERFACE 
               >1   
               >2   
               >3    ********************************
               >4    *                              *
               >5    *    INTERFACE RDOS 3.3 SSI    *
               >6    * (C)1986 by Roland Gustafsson *
               >7    *    (S)1989-97 by Deckard     *
               >8    *                              *
               >9    ********************************
               >10  
               >11  
               >12   ********************************
               >13   *                              *
               >14   *   Recherche token commande   *
               >15   *                              *
               >16   ********************************
               >17  
               >18   * In: acc=caractère ou token
               >19  
               >20   SKTOKEN                  
B300: 85 46    >21            STA   $46        ; sauvegarde input
B302: A0 FD    >22            LDY   #$FD       ; $FD+3=0
B304: C8       >23   :1       INY             
B305: C8       >24            INY             
B306: C8       >25            INY             
B307: B9 41 B3 >26            LDA   COMMANDES,Y ; commande connue
B30A: F0 0F    >27            BEQ   OTHER_CMD  ; fin de liste
               >28  
B30C: C5 46    >29            CMP   $46        ; compare avec input &
B30E: D0 F4    >30            BNE   :1         ; pas le bonne. Skip token+adr pour cmd suivante
               >31  
B310: B9 43 B3 >32            LDA   COMMANDES+2,Y ; empile adr-1 high
B313: 48       >33            PHA             
B314: B9 42 B3 >34            LDA   COMMANDES+1,Y ; empile adr-1 low
B317: 48       >35            PHA             
B318: 4C B1 00 >36            JMP   CHARGET    ; positionne sur la suite et exécute commande
               >37  
B31B: 4C 33 B4 >38   OTHER_CMD JMP  GO_RTS     ; commande inconnue. Poursuit l'analyse ailleurs.
               >39                             ; Par défaut, on ne fait rien de plus (RTS)
               >40  
               >41  
               >42   *------------------------------*
               >43   *          infos auteur        *
               >44   *------------------------------*
               >45  
B31E: C3 CF D0 >46            ASC   "COPYRIGHT 1986 BY ROLAND GUSTAFSSON"
B321: D9 D2 C9 C7
B325: C8 D4 A0 B1
B329: B9 B8 B6 A0
B32D: C2 D9 A0 D2
B331: CF CC C1 CE
B335: C4 A0 C7 D5
B339: D3 D4 C1 C6
B33D: D3 D3 CF CE
               >47  
               >48  
               >49   *------------------------------*
               >50   * Liste des commandes RDOS 3.3 *
               >51   *------------------------------*
               >52  
               >53   COMMANDES                
B341: 43       >54            ASC   'C'
B342: 74 B3    >55            DA    CAT-1     
               >56  
B344: B6       >57            DFB   $B6       
B345: A9 B3    >58            DA    LOAD-1    
               >59  
B347: AC       >60            DFB   $AC       
B348: AF B3    >61            DA    RUN-1     
               >62  
B34A: AB       >63            DFB   $AB       
B34B: 74 B4    >64            DA    GOTO-1    
               >65  
B34D: B7       >66            DFB   $B7       
B34E: A9 B4    >67            DA    SAVE-1    
               >68  
B350: A8       >69            DFB   $A8       
B351: 30 B5    >70            DA    STORE-1   
               >71  
B353: A7       >72            DFB   $A7       
B354: 46 B5    >73            DA    RECALL-1  
               >74  
B356: B8       >75            DFB   $B8       
B357: 5F B5    >76            DA    DEF-1     
               >77  
B359: BA       >78            DFB   $BA       
B35A: 87 B5    >79            DA    PRINT-1   
               >80  
B35C: 87       >81            DFB   $87       
B35D: 9D B5    >82            DA    READ-1    
               >83  
B35F: 80       >84            DFB   $80       
B360: C4 B5    >85            DA    END-1     
               >86  
B362: 85       >87            DFB   $85       
B363: C9 B5    >88            DA    DEL-1     
               >89  
B365: E3       >90            DFB   $E3       
B366: E8 B5    >91            DA    LEN-1     
               >92  
B368: 44       >93            ASC   'D'
B369: 1F B6    >94            DA    D-1       
               >95  
B36B: 53       >96            ASC   'S'
B36C: 2D B6    >97            DA    S-1       
               >98  
B36E: BF       >99            DFB   $BF       
B36F: 4D B6    >100           DA    NEW-1     
               >101 
B371: D5       >102           DFB   $D5       
B372: 82 B6    >103           DA    USR-1     
               >104 
B374: 00       >105           DFB   0          ; fin de liste
               >106 
               >107 
               >108  ********************************
               >109  *                              *
               >110  *         Commande &CAT        *
               >111  *                              *
               >112  ********************************
               >113 
               >114  * Permet d'obtenir le catalog d'une disquette RDOS
               >115  *
               >116  * &CAT
               >117 
B375: 49 C5    >118  CAT      EOR   #$C5       ; #$C5 = mot clef de 'AT' (le 'C' est déjà vérifié)
B377: F0 03    >119           BEQ   :1         ; 'AT' trouvé
               >120 
B379: 4C 41 B8 >121           JMP   RDOS_ERR+3 ; dos syntax err (&C???)
               >122 
B37C: 20 B1 00 >123  :1       JSR   CHARGET    ; positionne sur la suite
               >124 
               >125  CATD                     
B37F: A9 01    >126           LDA   #<$0001    ; bloc 1 (COPY II+:P$00 S$0E)
               >127 
B381: A0 00    >128  MODULE   LDY   #>$0001    ; low=0
B383: 20 FB B8 >129           JSR   SAVE_1ER_BLOC ; sauvegarde le numéro de bloc de &cat
B386: 20 04 B8 >130           JSR   LOAD_BLOC  ; charge le module dans BUFFER2
               >131 
B389: A0 03    >132           LDY   #3         ; vérifie que c'est bien un module RDOS
B38B: B9 A6 B3 >133  :1       LDA   SIGN_RDOS,Y ; on doit trouvé 'RDOS' au début du bloc
B38E: D9 00 B2 >134           CMP   BUFFER2,Y 
B391: D0 10    >135           BNE   :3         ; pas 'RDOS' en préambule (mauvaise disquette)
               >136 
B393: 88       >137           DEY              ; poursuit le controle des 4 lettres
B394: 10 F5    >138           BPL   :1        
               >139 
B396: C8       >140           INY              ; Y=0
B397: B9 00 B2 >141  :2       LDA   BUFFER2,Y  ; recopie le module cat en buffer1
B39A: 99 00 B1 >142           STA   BUFFER1,Y 
B39D: C8       >143           INY             
B39E: D0 F7    >144           BNE   :2        
               >145 
B3A0: 4C 04 B1 >146           JMP   BUFFER1+4  ; exécute module chargé (skip 'RDOS')
               >147 
B3A3: 4C 4D B8 >148  :3       JMP   RDOS_ERR+15 ; i/o error
               >149 
               >150 
               >151  *------------------------------*
               >152  *         Signature RDOS       *
               >153  *------------------------------*
               >154 
B3A6: 52 44 4F >155  SIGN_RDOS ASC  'RDOS'
B3A9: 53
               >156 
               >157 
               >158  ********************************
               >159  *                              *
               >160  *        Commande &LOAD        *
               >161  *                              *
               >162  ********************************
               >163 
               >164  * Permet de charger un programme BASIC
               >165  *
               >166  * &LOAD "nom" (,adresse)
               >167 
B3AA: 20 B6 B3 >168  LOAD     JSR   LOAD_PRG_BAS ; charge le programme BASIC
B3AD: 4C 6C B6 >169           JMP   HOT_BASIC  ; redonne la main à l'utilisateur
               >170 
               >171 
               >172  ********************************
               >173  *                              *
               >174  *        Commande &RUN         *
               >175  *                              *
               >176  ********************************
               >177 
               >178  * Permet d'exécuter un programme BASIC
               >179  *
               >180  * &RUN "nom" (,adresse)
               >181 
B3B0: 20 B6 B3 >182  RUN      JSR   LOAD_PRG_BAS ; charge le programme BASIC
B3B3: 4C 66 D5 >183           JMP   RUNPROG    ; exécution
               >184 
               >185 
               >186  ********************************
               >187  *                              *
               >188  *  Chargement d'un prog BASIC  *
               >189  *                              *
               >190  ********************************
               >191 
               >192  LOAD_PRG_BAS             
B3B6: A4 67    >193           LDY   TXTTAB     ; par défaut, charge au début du texte BASIC
B3B8: A5 68    >194           LDA   TXTTAB+1   ; ($0801 ou autre)
B3BA: 84 50    >195           STY   LINNUM    
B3BC: 85 51    >196           STA   LINNUM+1  
B3BE: 20 BA B7 >197           JSR   GET_NAME   ; lecture nom+adr éventuelle (si adr spécifiée, alors
               >198                            ; elle est placée dans LINNUM et remplace celle par
               >199                            ; défaut
               >200 
B3C1: A9 C1    >201           LDA   #"A"       ; prog BASIC
B3C3: 20 1C B4 >202           JSR   CHK_TYPE   ; recherche objet dans catalog et vérifie type
               >203 
B3C6: A4 50    >204           LDY   LINNUM    
B3C8: A5 51    >205           LDA   LINNUM+1  
B3CA: 8C 7A BF >206           STY   OBJ_ADR    ; force adr d'implantation dans descriptif
B3CD: 8D 7B BF >207           STA   OBJ_ADR+1 
               >208 
B3D0: 46 D8    >209           LSR   ERRFLG     ; bit 7 =0 -> désactive on error
B3D2: 20 34 B4 >210           JSR   LOAD_OBJ   ; charge l'objet
               >211 
B3D5: 18       >212           CLC              ; assigne l'adr de début d'implantation comme début
B3D6: A5 50    >213           LDA   LINNUM     ; du texte basic
B3D8: 85 67    >214           STA   TXTTAB    
B3DA: 6D 7C BF >215           ADC   OBJ_LEN    ; et affecte début des variables
B3DD: 85 69    >216           STA   VARTAB    
               >217 
B3DF: A5 51    >218           LDA   LINNUM+1  
B3E1: 85 68    >219           STA   TXTTAB+1  
B3E3: 6D 7D BF >220           ADC   OBJ_LEN+1 
B3E6: 85 6A    >221           STA   VARTAB+1  
               >222 
B3E8: A0 FF    >223           LDY   #$FF       ; place la valeur 0 juste avant le début du texte
B3EA: C6 68    >224           DEC   TXTTAB+1   ; basic
B3EC: A9 00    >225           LDA   #0        
B3EE: 91 67    >226           STA   (TXTTAB),Y
B3F0: E6 68    >227           INC   TXTTAB+1  
               >228 
B3F2: A4 36    >229           LDY   CSWL       ; sauvegarde CSW
B3F4: A5 37    >230           LDA   CSWH      
B3F6: 84 40    >231           STY   $40       
B3F8: 85 41    >232           STA   $41       
               >233 
B3FA: 68       >234           PLA              ; sauvegarde adr-1 retour
B3FB: 85 42    >235           STA   $42       
B3FD: 68       >236           PLA             
B3FE: 85 43    >237           STA   $43       
               >238 
B400: A0 0B    >239           LDY   #<LOAD_PRG_BAS2 ; adr reprise après linkset
B402: A9 B4    >240           LDA   #>LOAD_PRG_BAS2
B404: 84 36    >241           STY   CSWL      
B406: 85 37    >242           STA   CSWH      
B408: 4C F2 D4 >243           JMP   LINKSET    ; init pointeur basic
               >244 
               >245  LOAD_PRG_BAS2            
B40B: A5 43    >246           LDA   $43        ; remet adr-1 retour
B40D: 48       >247           PHA             
B40E: A5 42    >248           LDA   $42       
B410: 48       >249           PHA             
               >250 
B411: A4 40    >251           LDY   $40        ; remet CSW
B413: A5 41    >252           LDA   $41       
B415: 84 36    >253           STY   CSWL      
B417: 85 37    >254           STA   CSWH      
B419: 4C 6C D6 >255           JMP   CLEARC     ; fin init
               >256 
               >257 
               >258  ********************************
               >259  *                              *
               >260  *  Vérifie le type d'un objet  *
               >261  *   du catalog avec le type    *
               >262  *           attendu            *
               >263  *                              *
               >264  ********************************
               >265 
B41C: 20 8D B6 >266  CHK_TYPE JSR   SEEK_NAME  ; recherche nom objet
B41F: B0 03    >267           BCS   :1         ; nom trouvé
B421: 4C 3E B8 >268           JMP   RDOS_ERR   ; file not found
               >269 
B424: F0 03    >270  :1       BEQ   :2         ; type identique à celui recherché
B426: 4C 50 B8 >271           JMP   RDOS_ERR+18 ; file type err
               >272 
               >273  * Recopie le descriptif trouvé dans le catalogue
               >274 
B429: A0 1F    >275  :2       LDY   #31       
B42B: B1 3E    >276  :3       LDA   (BUFADR),Y
B42D: 99 60 BF >277           STA   OBJ_NOM,Y 
B430: 88       >278           DEY             
B431: 10 F8    >279           BPL   :3        
               >280  GO_RTS                   
B433: 60       >281           RTS             
               >282 
               >283 
               >284  ********************************
               >285  *                              *
               >286  *     Chargement d'un objet    *
               >287  *                              *
               >288  ********************************
               >289 
B434: AD 7D BF >290  LOAD_OBJ LDA   OBJ_LEN+1  ; calcul nbr de blocs réels utilisés (problème de
B437: 8D 79 BF >291           STA   OBJ_NBR_BLOC ; l'allocation de la place d'un objet deleté plus
               >292                            ; grand)
               >293 
B43A: AD 7C BF >294           LDA   OBJ_LEN    ; low
B43D: F0 03    >295           BEQ   :1         ; page plein
               >296 
B43F: EE 79 BF >297           INC   OBJ_NBR_BLOC ; le reliquat compte comme un bloc entier
               >298 
B442: AD 7A BF >299  :1       LDA   OBJ_ADR    ; adr de chargement bloc
B445: AC 7B BF >300           LDY   OBJ_ADR+1 
               >301 
B448: A2 01    >302           LDX   #1         ; commande=READ
B44A: CE 79 BF >303           DEC   OBJ_NBR_BLOC ; un bloc en moins (soustraction anticipée afin
B44D: F0 0C    >304           BEQ   :2         ; de savoir quand on traite le dernier bloc)
               >305 
B44F: 20 0A B8 >306           JSR   CMD_BLOCD  ; read bloc à son adresse définitive
               >307 
B452: 20 02 B9 >308           JSR   READY_NXT_BLK ; positionne sur bloc suivant
B455: EE 7B BF >309           INC   OBJ_ADR+1  ; adr high implantation+1
B458: 4C 42 B4 >310           JMP   :1         ; va traiter ce bloc suivant
               >311 
B45B: 20 04 B8 >312  :2       JSR   LOAD_BLOC  ; dernier bloc chargé dans buffer2
B45E: AD 7A BF >313           LDA   OBJ_ADR    ; pointeur en page 0
B461: AC 7B BF >314           LDY   OBJ_ADR+1 
B464: 85 3C    >315           STA   $3C       
B466: 84 3D    >316           STY   $3D       
               >317 
B468: A0 00    >318           LDY   #0         ; recopie le reliquat du buffer2 vers sa place
B46A: B1 3E    >319  :3       LDA   (BUFADR),Y ; finale
B46C: 91 3C    >320           STA   ($3C),Y   
B46E: C8       >321           INY             
B46F: CC 7C BF >322           CPY   OBJ_LEN   
B472: D0 F6    >323           BNE   :3        
B474: 60       >324           RTS             
               >325 
               >326 
               >327  ********************************
               >328  *                              *
               >329  *       Commande &GOTO         *
               >330  *                              *
               >331  ********************************
               >332 
               >333  * Permet de chainer 2 progs en conservant les données.
               >334  * Il faut bien sur que le 2nd programme chargé soit plus
               >335  * petit (ou de meme taille) que le 1er pour ne rien écraser.
               >336  *
               >337  * &GOTO "nom" (,adresse)
               >338 
B475: A9 02    >339  GOTO     LDA   #<$0002    ; bloc 2 (COPY II+:P$00 S$0D)
B477: 20 81 B3 >340           JSR   MODULE     ; load module chain, test RDOS et exécution
               >341 
B47A: A2 07    >342           LDX   #7         ; sauvegarde VARTAB, ARYTAB, STREND et FRETOP
B47C: B5 69    >343  :1       LDA   VARTAB,X  
B47E: 9D 9D BF >344           STA   PTR_BASIC,X
B481: CA       >345           DEX             
B482: 10 F8    >346           BPL   :1        
               >347 
B484: 20 B6 B3 >348           JSR   LOAD_PRG_BAS ; charge le nouveau prog BASIC à chainer
               >349 
B487: A5 6A    >350           LDA   VARTAB+1   ; high début des variables
B489: CD 9E BF >351           CMP   PTR_BASIC+1 ; VARTAB+1 ancien prog BASIC
B48C: D0 05    >352           BNE   :2         ; les tailles high des progs sont différentes
               >353                            ; si meme taille, vérifie low
B48E: A5 69    >354           LDA   VARTAB     ; low début des variables
B490: CD 9D BF >355           CMP   PTR_BASIC  ; VARTAB ancien prog BASIC
               >356 
B493: 90 05    >357  :2       BCC   :3         ; le nouveau prog est plus petit
B495: F0 03    >358           BEQ   :3         ; les 2 progs sont de meme taille
               >359 
B497: 4C 41 B8 >360           JMP   RDOS_ERR+3 ; nouveau prog plus grand:dos syntax err
               >361                            ; impossible de récupérer les variables!
               >362 
B49A: A2 07    >363  :3       LDX   #7         ; assigne au nouveau programme les pointeurs de
B49C: BD 9D BF >364  :4       LDA   PTR_BASIC,X ; variable de l'ancien
B49F: 95 69    >365           STA   VARTAB,X  
B4A1: CA       >366           DEX             
B4A2: 10 F8    >367           BPL   :4        
               >368 
B4A4: 20 97 D6 >369           JSR   STXTPT     ; pointeur chargot en place (pointe sur $00 au
               >370                            ; début du prog)
B4A7: 4C D2 D7 >371           JMP   NEWSTT     ; exécute une nouvelle instruction basic
               >372 
               >373 
               >374  ********************************
               >375  *                              *
               >376  *        Commande &SAVE        *
               >377  *                              *
               >378  ********************************
               >379 
B4AA: 20 BA B7 >380  SAVE     JSR   GET_NAME   ; lecture nom objet
B4AD: 90 03    >381           BCC   :1         ; que le nom
               >382 
B4AF: 4C 41 B8 >383           JMP   RDOS_ERR+3 ; dos syntax err (paramètrage interdit)
               >384 
B4B2: A5 67    >385  :1       LDA   TXTTAB     ; adr début sauvegarde=début texte basic
B4B4: A4 68    >386           LDY   TXTTAB+1  
B4B6: 8D 7A BF >387           STA   OBJ_ADR   
B4B9: 8C 7B BF >388           STY   OBJ_ADR+1 
               >389 
B4BC: 38       >390           SEC              ; détermine taille réelle (fin du texte basic -
B4BD: A5 AF    >391           LDA   PGEND      ; début du texte basic). Résultat dans LINNUM
B4BF: E5 67    >392           SBC   TXTTAB    
B4C1: 85 50    >393           STA   LINNUM    
B4C3: A5 B0    >394           LDA   PGEND+1   
B4C5: E5 68    >395           SBC   TXTTAB+1  
B4C7: 85 51    >396           STA   LINNUM+1  
               >397 
B4C9: A9 C1    >398           LDA   #"A"       ; basic
               >399 
               >400 
               >401  ********************************
               >402  *                              *
               >403  *    Sauvegarde d'un objet     *
               >404  *                              *
               >405  ********************************
               >406 
               >407  * In: acc    = type objet
               >408  *     LINNUM = taille objet
               >409 
B4CB: 8D 78 BF >410  SAVE_OBJ STA   OBJ_TYPE  
               >411 
B4CE: A6 51    >412           LDX   LINNUM+1   ; met en place len objet et le nbr de bloc utilisé
B4D0: 8E 7D BF >413           STX   OBJ_LEN+1 
B4D3: 8E 79 BF >414           STX   OBJ_NBR_BLOC
B4D6: A6 50    >415           LDX   LINNUM    
B4D8: 8E 7C BF >416           STX   OBJ_LEN   
B4DB: F0 03    >417           BEQ   :1        
               >418 
B4DD: EE 79 BF >419           INC   OBJ_NBR_BLOC ; reliquat compte pour 1 bloc de plus
               >420 
B4E0: AE 79 BF >421  :1       LDX   OBJ_NBR_BLOC ; sauve le nbr de bloc pour décompte lors de
B4E3: 8E A7 BF >422           STX   CPT_NBR_BLOC ; l'opération
B4E6: D0 03    >423           BNE   :2        
               >424 
B4E8: 4C 41 B8 >425           JMP   RDOS_ERR+3 ; dos syntax err (longueur nulle!)
               >426 
B4EB: 20 8D B6 >427  :2       JSR   SEEK_NAME  ; regarde si le nom existe déjà dans le catalog
B4EE: 90 03    >428           BCC   :3         ; non
               >429 
B4F0: 4C 44 B8 >430           JMP   RDOS_ERR+6 ; duplicate entry (l'objet existe déjà!)
               >431 
B4F3: 20 92 B6 >432  :3       JSR   SEEK_FREE  ; cherche une place libre
B4F6: B0 03    >433           BCS   :4         ; place trouvée
               >434 
B4F8: 4C 47 B8 >435           JMP   RDOS_ERR+9 ; disk full
               >436 
B4FB: AD 79 BF >437  :4       LDA   OBJ_NBR_BLOC
B4FE: 20 0B B9 >438           JSR   CHK_SPACE  ; vérifie que la place trouvée est assez grande
               >439 
B501: A0 1F    >440           LDY   #31        ; place le descriptif de l'objet à créer dans
B503: B9 60 BF >441  :5       LDA   OBJ_NOM,Y  ; le bloc du catalogue
B506: 91 3E    >442           STA   (BUFADR),Y
B508: 88       >443           DEY             
B509: 10 F8    >444           BPL   :5        
               >445 
B50B: A9 02    >446           LDA   #2        
B50D: 8D 59 BF >447           STA   RWTS_CMD   ; commande=ECRIRE
B510: 20 2F B8 >448           JSR   GO_RWTS:   ; enregistre la modif dans le catalog
               >449 
               >450  * Ecriture de l'objet sur la disquette
               >451 
B513: A2 02    >452  :6       LDX   #2         ; commande=WRITE
B515: AD 7A BF >453           LDA   OBJ_ADR   
B518: AC 7B BF >454           LDY   OBJ_ADR+1 
B51B: 20 0A B8 >455           JSR   CMD_BLOCD  ; écriture d'un bloc
B51E: 20 02 B9 >456           JSR   READY_NXT_BLK ; positionne sur next bloc
               >457 
B521: AD 78 BF >458           LDA   OBJ_TYPE  
B524: C9 D4    >459           CMP   #"T"       ; fichier?
B526: F0 03    >460           BEQ   :7         ; oui (pas de changement adr début)
               >461 
B528: EE 7B BF >462           INC   OBJ_ADR+1 
               >463 
B52B: CE A7 BF >464  :7       DEC   CPT_NBR_BLOC ; un bloc de moins
B52E: D0 E3    >465           BNE   :6         ; il reste encore des blocs
               >466 
B530: 60       >467           RTS             
               >468 
               >469 
               >470  ********************************
               >471  *                              *
               >472  *       Commande &STORE        *
               >473  *                              *
               >474  ********************************
               >475 
               >476  * Permet de sauvegarder un programme binaire commançant
               >477  * à une certaine adresse et d'une taille donnée.
               >478  *
               >479  * &STORE "nom", adresse, longueur
               >480 
B531: 20 BA B7 >481  STORE    JSR   GET_NAME   ; lecture nom objet
B534: B0 03    >482           BCS   :1         ; nom+paramètre
               >483 
B536: 4C 41 B8 >484           JMP   RDOS_ERR+3 ; dos syntax err (adresse indispensable!)
               >485 
B539: 8C 7A BF >486  :1       STY   OBJ_ADR    ; sauve adresse lue
B53C: 8D 7B BF >487           STA   OBJ_ADR+1 
B53F: 20 F9 B7 >488           JSR   GET_VAL    ; lecture longueur (dans LINNUM)
               >489 
               >490  STORED                   
B542: A9 C2    >491           LDA   #"B"       ; binaire
B544: 4C CB B4 >492           JMP   SAVE_OBJ   ; sauvegarde l'objet
               >493 
               >494 
               >495  ********************************
               >496  *                              *
               >497  *       Commande &RECALL       *
               >498  *                              *
               >499  ********************************
               >500 
               >501  * Permet de charger un objet binaire.
               >502  *
               >503  * &RECALL "nom" (,adresse)
               >504 
B547: 20 BA B7 >505  RECALL   JSR   GET_NAME   ; lecture nom et adr éventuelle
               >506 
               >507  RECALLD                  
B54A: 08       >508           PHP              ; sauve résultat
B54B: A9 C2    >509           LDA   #"B"      
B54D: 20 1C B4 >510           JSR   CHK_TYPE   ; recherche obj dans catalog et vérifie binaire
B550: 28       >511           PLP              ; récupère résultat
               >512 
B551: 90 0A    >513           BCC   :1         ; que le nom
               >514 
B553: A5 50    >515           LDA   LINNUM     ; prend en compte adr de chargement spécifiée
B555: A4 51    >516           LDY   LINNUM+1  
B557: 8D 7A BF >517           STA   OBJ_ADR   
B55A: 8C 7B BF >518           STY   OBJ_ADR+1 
               >519 
B55D: 4C 34 B4 >520  :1       JMP   LOAD_OBJ  
               >521 
               >522 
               >523  ********************************
               >524  *                              *
               >525  *        Commande &DEF         *
               >526  *                              *
               >527  ********************************
               >528 
               >529  * Permet de réserver un nbr de blocs pour un objet.
               >530  *
               >531  * &DEF "nom", nbr de blocs [1,255]
               >532 
B560: 20 BA B7 >533  DEF      JSR   GET_NAME   ; lecture nom objet
B563: B0 03    >534           BCS   :1         ; nom+taille
               >535 
B565: 4C 41 B8 >536  :2       JMP   RDOS_ERR+3 ; dos syntax err (pas de taille ou >255 blocs)
               >537 
B568: A5 51    >538  :1       LDA   LINNUM+1   ; high taille
B56A: D0 F9    >539           BNE   :2         ; allocation trop importante
               >540 
B56C: AA       >541           TAX              ; X=0
B56D: A4 50    >542           LDY   LINNUM     ; transforme un nbr de blocs en taille
B56F: 84 51    >543           STY   LINNUM+1   ; 1 bloc=$0100
B571: 86 50    >544           STX   LINNUM    
               >545 
B573: 9D 00 B1 >546  :3       STA   BUFFER1,X  ; nettoyage buffer1
B576: E8       >547           INX             
B577: D0 FA    >548           BNE   :3        
               >549 
B579: A0 00    >550           LDY   #<BUFFER1  ; On écrira de 1 à 255 fois le buffer1
B57B: A9 B1    >551           LDA   #>BUFFER1 
B57D: 8C 7A BF >552           STY   OBJ_ADR    ; adr début lecture
B580: 8D 7B BF >553           STA   OBJ_ADR+1 
B583: A9 D4    >554           LDA   #"T"       ; fichier
B585: 4C CB B4 >555           JMP   SAVE_OBJ   ; sauve le fichier
               >556 
               >557 
               >558  ********************************
               >559  *                              *
               >560  *       Commande &PRINT        *
               >561  *                              *
               >562  ********************************
               >563 
               >564  * Permet de faire un append d'un fichier existant
               >565  * afin d'y inséerer des infos nouvelles avec des print.
               >566  * Il faut faire un &END pour arreter.
               >567  *
               >568  * &PRINT "nom"
               >569 
B588: 20 BA B7 >570  PRINT    JSR   GET_NAME   ; lecture nom
B58B: 20 03 B7 >571           JSR   SAVE_CSW_KSW ; sauvegarde CSW/KSW
               >572 
B58E: A9 D4    >573           LDA   #"T"      
B590: 20 1C B4 >574           JSR   CHK_TYPE   ; vérifie existance objet et type fichier
               >575 
B593: C8       >576           INY              ; Y=0
B594: 8C A8 BF >577           STY   IND_BUF    ; remplit le buffer à partir du début
B597: 38       >578           SEC              ; bit 7=1
B598: 6E A9 BF >579           ROR   READ_OR_PRINT ; signale commande print
B59B: 4C 19 B7 >580           JMP   SET_PRT_VECT ; change CSW/KSW pour gestion print
               >581 
               >582 
               >583  ********************************
               >584  *                              *
               >585  *        Commande &READ        *
               >586  *                              *
               >587  ********************************
               >588 
               >589  * Permet d'ouvrir un fichier existant afin d'en
               >590  * lire le contenu avec des input.
               >591  * Il faut faire un &END pour arreter.
               >592  *
               >593  * &READ "nom"
               >594 
B59E: 20 BA B7 >595  READ     JSR   GET_NAME   ; lecture nom objet
               >596 
               >597  READD                    
B5A1: 20 03 B7 >598           JSR   SAVE_CSW_KSW ; sauve CSW/KSW
B5A4: A9 D4    >599           LDA   #"T"      
B5A6: 20 1C B4 >600           JSR   CHK_TYPE   ; recherche nom et controle type
               >601 
B5A9: 8C A8 BF >602           STY   IND_BUF    ; Y=$FF force lecture 1er bloc au début trt
               >603 
B5AC: 18       >604           CLC              ; bit 7=0
B5AD: 6E A9 BF >605           ROR   READ_OR_PRINT ; identification commande read
               >606 
B5B0: AD 7E BF >607           LDA   OBJ_1ER_BLOC ; commence la lecture sur 1er bloc fichier
B5B3: AC 7F BF >608           LDY   OBJ_1ER_BLOC+1
B5B6: 8D A5 BF >609           STA   VAL_BLOCNUM
B5B9: 8C A6 BF >610           STY   VAL_BLOCNUM+1
B5BC: AD 79 BF >611           LDA   OBJ_NBR_BLOC ; init nbr de blocs pouvant etre lu
B5BF: 8D A7 BF >612           STA   CPT_NBR_BLOC
B5C2: 4C 1C B7 >613           JMP   SET_READ_VECT ; change vecteurs pour traitement read
               >614 
               >615 
               >616  ********************************
               >617  *                              *
               >618  *         Commande &END        *
               >619  *                              *
               >620  ********************************
               >621 
               >622  * Permet de terminer un instruction &PRINT ou &READ
               >623 
B5C5: A9 00    >624  END      LDA   #0         ; output $00 (null)
B5C7: 4C ED FD >625           JMP   COUT      
               >626 
               >627 
               >628  ********************************
               >629  *                              *
               >630  *        Commande &DEL         *
               >631  *                              *
               >632  ********************************
               >633 
               >634  * Permet de supprimer un objet (provoque un trou
               >635  * réutilisable dans le catalog.
               >636  *
               >637  * &DEL "nom"
               >638 
B5CA: 20 BA B7 >639  DEL      JSR   GET_NAME   ; lecture nom
               >640 
               >641  DELD                     
B5CD: 20 8D B6 >642           JSR   SEEK_NAME  ; recherche nom dans le catalog
B5D0: B0 03    >643           BCS   :1         ; trouvé
               >644 
B5D2: 4C 3E B8 >645           JMP   RDOS_ERR   ; file not found
               >646 
B5D5: A0 00    >647  :1       LDY   #0        
B5D7: A9 80    >648           LDA   #$80       ; met $80 à la place du 1er caractère du nom
B5D9: 91 3E    >649           STA   (BUFADR),Y
               >650 
B5DB: A0 18    >651           LDY   #24       
B5DD: A9 A0    >652           LDA   #" "       ; efface le type objet
B5DF: 91 3E    >653           STA   (BUFADR),Y
               >654 
B5E1: A9 02    >655           LDA   #2        
B5E3: 8D 59 BF >656           STA   RWTS_CMD   ; commande=WRITE
B5E6: 4C 2F B8 >657           JMP   GO_RWTS:   ; modifie le descriptif catalog
               >658 
               >659 
               >660  ********************************
               >661  *                              *
               >662  *        Commande &LEN         *
               >663  *                              *
               >664  ********************************
               >665 
               >666  * Permet de connaitre en décimal l'adr de début d'un
               >667  * programme BASIC, sa taille et l'adr de début des
               >668  * variables.
               >669  *
               >670  * &LEN
               >671 
B5E9: A2 67    >672  LEN      LDX   #TXTTAB    ; affiche adr début texte basic
B5EB: 20 0E B6 >673           JSR   PRINT_PTR 
B5EE: 20 1B B6 >674           JSR   PRINT_VIRGULE
               >675 
B5F1: A2 50    >676           LDX   #LINNUM   
B5F3: 38       >677           SEC              ; calcule taille prog basic
B5F4: A5 AF    >678           LDA   PGEND      ; fin texte basic-début texte basic -> LINNUM
B5F6: E5 67    >679           SBC   TXTTAB    
B5F8: 85 50    >680           STA   LINNUM    
B5FA: A5 B0    >681           LDA   PGEND+1   
B5FC: E5 68    >682           SBC   TXTTAB+1  
B5FE: 85 51    >683           STA   LINNUM+1  
B600: 20 0E B6 >684           JSR   PRINT_PTR  ; affiche LINNUM (=taille)
B603: 20 1B B6 >685           JSR   PRINT_VIRGULE
B606: A2 69    >686           LDX   #VARTAB    ; affiche adr début des variables
B608: 20 0E B6 >687           JSR   PRINT_PTR 
B60B: 4C FB DA >688           JMP   CRDO      
               >689 
               >690  *------------------------------*
               >691  *  Affiche un pointeur page 0  *
               >692  *------------------------------*
               >693 
               >694  * In: X=pointeur à afficher
               >695 
               >696  PRINT_PTR                
B60E: B5 01    >697           LDA   $01,X     
B610: A8       >698           TAY             
B611: B5 00    >699           LDA   $00,X     
B613: AA       >700           TAX             
B614: 98       >701           TYA             
B615: 20 24 ED >702           JSR   LINPRT     ; affiche nbr en décimal X(-) A(+)
B618: 4C 57 DB >703           JMP   OUTSP      ; affiche espace
               >704 
               >705  PRINT_VIRGULE            
B61B: A9 2C    >706           LDA   #','      
B61D: 4C 5C DB >707           JMP   OUTDO     
               >708 
               >709 
               >710  ********************************
               >711  *                              *
               >712  *        Commande &D           *
               >713  *                              *
               >714  ********************************
               >715 
               >716  * Permet de changer le numéro du lecteur courant.
               >717  *
               >718  * &D numéro drive, (autre commande RDOS)
               >719 
B620: A2 03    >720  D        LDX   #2+1       ; nombre max+1
B622: 20 3D B6 >721           JSR   GET_NUM    ; lecture numéro lecteur+vérif cohérence
B625: 8E 57 BF >722           STX   RWTS_DRIVE ; sauve le nouveau drive courant
               >723 
B628: 20 BE DE >724  NEXT_CMD JSR   CHKCOM     ; virgule obligatoire
B62B: 4C 00 B3 >725           JMP   SKTOKEN    ; traite éventuelle autre commande
               >726 
               >727 
               >728  ********************************
               >729  *                              *
               >730  *         Commande &S          *
               >731  *                              *
               >732  ********************************
               >733 
               >734  * Permet de changer le slot du drive courant.
               >735  *
               >736  * &S numéro slot, (autre commande RDOS)
               >737 
B62E: A2 08    >738  S        LDX   #7+1       ; nbr max+1
B630: 20 3D B6 >739           JSR   GET_NUM    ; lecture slot et vérifie cohérence
B633: 8A       >740           TXA              ; slot*16
B634: 0A       >741           ASL             
B635: 0A       >742           ASL             
B636: 0A       >743           ASL             
B637: 0A       >744           ASL             
B638: 8D 56 BF >745           STA   RWTS_SLOT16
B63B: 90 EB    >746           BCC   NEXT_CMD   ; vérifie vrigule et traite autre cmd
               >747 
               >748  *------------------------------*
               >749  *  Lecteur nombre de 1 octet   *
               >750  *------------------------------*
               >751 
               >752  * In: X=valeur max+1
               >753 
B63D: 86 46    >754  GET_NUM  STX   $46       
B63F: 20 F8 E6 >755           JSR   GETBYT     ; lecture paramètre
B642: E0 01    >756           CPX   #1         ; controle cohérence
B644: 90 05    >757           BCC   :1         ; <1 err
               >758 
B646: E4 46    >759           CPX   $46       
B648: B0 01    >760           BCS   :1         ; >=valeur max+1 err
B64A: 60       >761           RTS             
               >762 
B64B: 4C 99 E1 >763  :1       JMP   IQERR      ; illegal quantity err
               >764 
               >765 
               >766  ********************************
               >767  *                              *
               >768  *         Commande &NEW        *
               >769  *                              *
               >770  ********************************
               >771 
               >772  * Permet de supprimer le prog basic en mémoire et
               >773  * de réinitialiser l'espace mémoire (himem).
               >774  *
               >775  * &NEW
               >776 
               >777  NEW                      
B64E: 20 03 B7 >778           JSR   SAVE_CSW_KSW ; sauve CSW/KSW
B651: A0 5C    >779           LDY   #<NEW2     ; pointeur reprise
B653: A9 B6    >780           LDA   #>NEW2    
B655: 84 38    >781           STY   KSWL      
B657: 85 39    >782           STA   KSWH      
B659: 4C 00 E0 >783           JMP   BASIC      ; lancement indirect de NEW2
               >784 
B65C: 91 28    >785  NEW2     STA   (BASL),Y  
B65E: A0 00    >786           LDY   #<BUFFER1  ; himem:buffer1
B660: A9 B1    >787           LDA   #>BUFFER1 
B662: 84 73    >788           STY   MEMSIZ    
B664: 85 74    >789           STA   MEMSIZ+1  
B666: 20 0E B7 >790           JSR   REST_CSW_KSW ; remet en place CSW/KSW origine
B669: 20 4B D6 >791           JSR   NEWCMD     ; new normal
               >792                            ; et hot basic
               >793 
               >794 
               >795  ********************************
               >796  *                              *
               >797  *         BASIC à chaud        *
               >798  *                              *
               >799  ********************************
               >800 
               >801  * Avant de sauter sur le BASIC à chaud, il
               >802  * faut obligatoirement vérifier qu'il est présent.
               >803  *
               >804  * AppleSoft: $E000 = JMP ($4C)
               >805  * Integer  : $E000 = JSR ($20)
               >806  *
               >807  * Si le BASIC AppleSoft n'est pas trouvé en ROM ($C081)
               >808  * on le recherche dans le bank 2 ($C080)
               >809 
               >810  HOT_BASIC                
B66C: 20 72 B6 >811           JSR   CHK_APLSFT ; vérifie présence BASIC Applesoft
B66F: 4C 03 E0 >812           JMP   BASIC2     ; relance BASIC
               >813 
               >814  CHK_APLSFT               
B672: A2 01    >815           LDX   #1         ; privilégie la ROM
B674: BD 80 C0 >816  :1       LDA   $C080,X   
B677: AD 00 E0 >817           LDA   BASIC      ; test signature AppleSoft
B67A: C9 4C    >818           CMP   #$4C       ; JMP
B67C: F0 0E    >819           BEQ   GO_RTS2    ; found! -> RTS
               >820 
B67E: CA       >821           DEX              ; essaie bank 2
B67F: F0 F3    >822           BEQ   :1        
               >823 
B681: D0 FE    >824  :2       BNE   :2         ; ça coince mec! Y-a pas d'AppleSoft!!
               >825 
               >826 
               >827  ********************************
               >828  *                              *
               >829  *        Commande &USR         *
               >830  *                              *
               >831  ********************************
               >832 
               >833  * Cette commande permet de définir une adresse de
               >834  * saut si la commande & n'est pas reconnue. Au lieu
               >835  * de faire un RTS, on donne la main à une autre routine.
               >836  *
               >837  * &USR adresse
               >838 
B683: 20 FC B7 >839  USR      JSR   GET_VALD   ; lecture adresse (sans test virgule)
B686: 8C 1C B3 >840           STY   OTHER_CMD+1 ; met en place JMP de substitution
B689: 8D 1D B3 >841           STA   OTHER_CMD+2
B68C: 60       >842  GO_RTS2  RTS             
               >843 
               >844 
               >845  ********************************
               >846  *                              *
               >847  *   Cherche un objet dans le   *
               >848  *          catalogue           *
               >849  *                              *
               >850  ********************************
               >851 
               >852  * In: acc    = type objet recherché [A,B,T]
               >853  *
               >854  * Out: carry = 0 nom introuvable (fin catalog atteint)
               >855  *      carry = 1 nom trouvé
               >856  *                Z=1 (BEQ) -> type concordant
               >857  *                Z=0 (BNE) -> type différent
               >858 
               >859  SEEK_NAME                
B68D: 18       >860           CLC              ; cherche objet
B68E: 8D 78 BF >861           STA   OBJ_TYPE  
               >862 
B691: 24       >863           DFB   $24        ; bit
               >864 
               >865  ********************************
               >866  *                              *
               >867  * Cherche une place vide avec  *
               >868  *     suffisemment de place    *
               >869  *                              *
               >870  ********************************
               >871 
               >872  * Out: carry = 0 pas de place libre assez grande
               >873  *      carry = 1 place libre trouvée
               >874 
               >875  SEEK_FREE                
B692: 38       >876           SEC              ; cherche place vide
B693: 6E 9B BF >877           ROR   VALEUR     ; carry dans bit 7
               >878 
B696: 20 F7 B8 >879           JSR   READY_CATALOG ; pointe sur 1er bloc du catalogue
               >880 
B699: 8C 97 BF >881           STY   NEXT_1ER_BLOC+1 ; =0 init 1er bloc objet suivant
B69C: 8C 96 BF >882           STY   NEXT_1ER_BLOC ; =0
               >883 
               >884  LOAD_CAT_BLOC            
B69F: 20 04 B8 >885           JSR   LOAD_BLOC  ; charge 1 bloc du catalog dans buffer2
               >886 
               >887  * Aiguille sur le type de recherche voulu
               >888 
B6A2: 2C 9B BF >889  SEEK_OPT BIT   VALEUR     ; test bit 7
B6A5: 10 1C    >890           BPL   SEEK_NAME2 ; =0 -> cherche nom d'objet
               >891 
               >892  *------------------------------*
               >893  *     Recherche place vide     *
               >894  *------------------------------*
               >895 
B6A7: A0 18    >896           LDY   #24        ; type objet
B6A9: B1 3E    >897           LDA   (BUFADR),Y
B6AB: D0 08    >898           BNE   :2         ; rempli
               >899 
B6AD: AD 79 BF >900           LDA   OBJ_NBR_BLOC
B6B0: 8D 79 BF >901  :1       STA   OBJ_NBR_BLOC ; taille demandée ou taille objet prédécent obj del
B6B3: 38       >902           SEC              ; place trouvée
B6B4: 60       >903           RTS             
               >904 
B6B5: C9 A0    >905  :2       CMP   #" "       ; type=espace -> objet supprimé
B6B7: D0 21    >906           BNE   SEEK_NEXT  ; non, la place est prise
               >907 
B6B9: C8       >908           INY             
B6BA: B1 3E    >909           LDA   (BUFADR),Y ; nbr de bloc utilisé par l'objet supprimé
B6BC: CD 79 BF >910           CMP   OBJ_NBR_BLOC
B6BF: B0 EF    >911           BCS   :1         ; suffisement de place. Réserve toute la place vide
               >912                            ; meme s'il y en a plus que nécessaire
B6C1: 90 17    >913           BCC   SEEK_NEXT  ; pas assez de place
               >914 
               >915 
               >916  *------------------------------*
               >917  *  Recherche nom dans un bloc  *
               >918  *------------------------------*
               >919 
               >920  SEEK_NAME2               
B6C3: A0 00    >921           LDY   #0         ; 1er caractère du nom
B6C5: B1 3E    >922  :1       LDA   (BUFADR),Y
B6C7: F0 38    >923           BEQ   FIN_CAT    ; =0 si fin catalog
               >924 
B6C9: D9 60 BF >925           CMP   OBJ_NOM,Y  ; compare avec caractère de l'objet recherché
B6CC: D0 0C    >926           BNE   SEEK_NEXT  ; pas le bon nom. Passe au suivant
               >927 
B6CE: C8       >928           INY             
B6CF: C0 18    >929           CPY   #24        ; compare tous les caractères
B6D1: 90 F2    >930           BCC   :1        
               >931 
B6D3: B1 3E    >932           LDA   (BUFADR),Y ; compare le nom du type trouvé avec celui de
B6D5: CD 78 BF >933           CMP   OBJ_TYPE   ; l'objet recherché (résultat dans Z)
B6D8: 38       >934           SEC              ; objet trouvé
B6D9: 60       >935           RTS             
               >936 
               >937 
               >938  *------------------------------*
               >939  *   Passage à l'objet suivant  *
               >940  *------------------------------*
               >941 
               >942  * Calcule le 1er numéro de bloc de l'objet suivant
               >943 
               >944  SEEK_NEXT                
B6DA: A0 19    >945           LDY   #25        ; nbr de bloc utilisés
B6DC: B1 3E    >946           LDA   (BUFADR),Y
B6DE: A0 1E    >947           LDY   #30       
B6E0: 18       >948           CLC              ; +numéro 1er bloc
B6E1: 71 3E    >949           ADC   (BUFADR),Y ; low
B6E3: 8D 96 BF >950           STA   NEXT_1ER_BLOC
B6E6: C8       >951           INY             
B6E7: B1 3E    >952           LDA   (BUFADR),Y ; high
B6E9: 69 00    >953           ADC   #$00       ; retenue
B6EB: 8D 97 BF >954           STA   NEXT_1ER_BLOC+1
               >955 
               >956  * Pointe sur le descriptif suivant du catalog
               >957 
B6EE: A5 3E    >958           LDA   BUFADR     ; un descriptif fait 32 octets
B6F0: 18       >959           CLC             
B6F1: 69 20    >960           ADC   #32       
B6F3: 85 3E    >961           STA   BUFADR    
B6F5: 90 AB    >962           BCC   SEEK_OPT   ; pas encore la fin du bloc
               >963 
               >964  * Passe au bloc suivant
               >965 
B6F7: EE 7E BF >966           INC   OBJ_1ER_BLOC ; next bloc du catalog
B6FA: AD 7E BF >967           LDA   OBJ_1ER_BLOC
B6FD: C9 20    >968           CMP   #<$0020    ; bloc 32 (piste $02 secteur $00)
B6FF: D0 9E    >969           BNE   LOAD_CAT_BLOC ; il reste encore des blocs du catalog à explorer
               >970 
B701: 18       >971  FIN_CAT  CLC              ; fin du catalog atteint
B702: 60       >972           RTS             
               >973 
               >974 
               >975  ********************************
               >976  *                              *
               >977  * Sauve vecteurs output/input  *
               >978  *                              *
               >979  ********************************
               >980 
               >981  SAVE_CSW_KSW             
B703: A2 03    >982           LDX   #3        
B705: B5 36    >983  :1       LDA   CSWL,X    
B707: 9D AA BF >984           STA   VECT_CSW_KSW,X
B70A: CA       >985           DEX             
B70B: 10 F8    >986           BPL   :1        
B70D: 60       >987           RTS             
               >988 
               >989 
               >990  ********************************
               >991  *                              *
               >992  *    Restaure output/input     *
               >993  *                              *
               >994  ********************************
               >995 
               >996  REST_CSW_KSW             
B70E: A2 03    >997           LDX   #3        
B710: BD AA BF >998  :1       LDA   VECT_CSW_KSW,X
B713: 95 36    >999           STA   CSWL,X    
B715: CA       >1000          DEX             
B716: 10 F8    >1001          BPL   :1        
B718: 60       >1002          RTS             
               >1003
               >1004
               >1005 ********************************
               >1006 *                              *
               >1007 *  Met en place vecteurs PRINT *
               >1008 *                              *
               >1009 ********************************
               >1010
               >1011 SET_PRT_VECT             
B719: A0 03    >1012          LDY   #3        
B71B: 2C       >1013          DFB   $2C        ; bit
               >1014
               >1015 ********************************
               >1016 *                              *
               >1017 *  Met en place vecteurs READ  *
               >1018 *                              *
               >1019 ********************************
               >1020
               >1021 SET_READ_VECT            
B71C: A0 07    >1022          LDY   #7        
B71E: A2 03    >1023          LDX   #3         ; change CSW/KSW
B720: B9 2A B7 >1024 :1       LDA   NEW_VECT,Y
B723: 95 36    >1025          STA   CSWL,X    
B725: 88       >1026          DEY             
B726: CA       >1027          DEX              ; 4 octets
B727: 10 F7    >1028          BPL   :1        
B729: 60       >1029          RTS             
               >1030
               >1031 * Nouveaux vecteurs
               >1032
B72A: 32 B7    >1033 NEW_VECT DA    TRT_IN_OUT ; csw print
B72C: 41 B8    >1034          DA    RDOS_ERR+3 ; ksw print (input interdit:dos syntax err)
B72E: B2 B7    >1035          DA    TRT_READ_OUT ; csw read
B730: 32 B7    >1036          DA    TRT_IN_OUT ; ksw read
               >1037
               >1038
               >1039 ********************************
               >1040 *                              *
               >1041 *     Traitement PRINT (out)   *
               >1042 *     Traitement READ (in)     *
               >1043 *                              *
               >1044 ********************************
               >1045
               >1046 TRT_IN_OUT               
B732: 8D 9B BF >1047          STA   VALEUR    
B735: 98       >1048          TYA              ; sauve registres Y,X
B736: 48       >1049          PHA             
B737: 8A       >1050          TXA             
B738: 48       >1051          PHA             
               >1052
               >1053 * Aiguille sur traitement
               >1054
B739: 2C A9 BF >1055          BIT   READ_OR_PRINT
B73C: 10 2F    >1056          BPL   TRT_IN     ; bit 7=0 -> read
               >1057
               >1058 *------------------------------*
               >1059 *      Traitement PRINT        *
               >1060 *------------------------------*
               >1061
               >1062 * Remplit le buffer avec le caractère lu. On effectue
               >1063 * l'enregistrement du bloc que lorsque le buffer est
               >1064 * rempli.
               >1065
B73E: AC A8 BF >1066 TRT_OUT  LDY   IND_BUF    ; indice courant
B741: AD 9B BF >1067          LDA   VALEUR     ; place la valeur à écrire
B744: 99 00 B2 >1068          STA   BUFFER2,Y 
B747: F0 07    >1069          BEQ   :1         ; &END
               >1070
B749: EE A8 BF >1071          INC   IND_BUF    ; indice suivant buffer
B74C: F0 07    >1072          BEQ   :2         ; buffer plein
B74E: D0 15    >1073          BNE   TRT_FIN    ; le buffer peut encore contenir des données
               >1074
B750: A9 01    >1075 :1       LDA   #1         ; 1 bloc à ecrire et c'est fini
B752: 8D 79 BF >1076          STA   OBJ_NBR_BLOC
               >1077
B755: A2 02    >1078 :2       LDX   #2         ; commande=WRITE
B757: 20 06 B8 >1079          JSR   CMD_BLOC   ; sauve bloc
B75A: 20 02 B9 >1080          JSR   READY_NXT_BLK ; positionne sur bloc suivant
               >1081
B75D: CE 79 BF >1082          DEC   OBJ_NBR_BLOC ; un bloc disponible en moins
B760: D0 03    >1083          BNE   TRT_FIN    ; il y a encore de la place
               >1084
               >1085                           ; tous les blocs sont remplis: force l'arret.
B762: 20 0E B7 >1086          JSR   REST_CSW_KSW ; restaure vecteurs CSW/KSW d'origine
               >1087
B765: 68       >1088 TRT_FIN  PLA              ; retour à l'appelant
B766: AA       >1089          TAX             
B767: 68       >1090          PLA             
B768: A8       >1091          TAY             
B769: AD 9B BF >1092          LDA   VALEUR    
B76C: 60       >1093          RTS             
               >1094
               >1095
               >1096 *------------------------------*
               >1097 *        Traitement READ       *
               >1098 *------------------------------*
               >1099
B76D: A9 A0    >1100 TRT_IN   LDA   #" "       ; efface résultat de CSW
B76F: 91 28    >1101          STA   (BASL),Y  
B771: EE A8 BF >1102          INC   IND_BUF    ; indice suivant buffer
B774: D0 22    >1103          BNE   :2         ; pas fini
               >1104
               >1105 * Chargement du bloc suivant (ou du 1er) contenant
               >1106 * les infos à extraire.
               >1107
B776: AD A5 BF >1108          LDA   VAL_BLOCNUM
B779: AC A6 BF >1109          LDY   VAL_BLOCNUM+1
B77C: 20 FB B8 >1110          JSR   SAVE_1ER_BLOC
               >1111
B77F: A2 01    >1112          LDX   #1         ; commande=READ
B781: A9 00    >1113          LDA   #<BUFFER1 
B783: A0 B1    >1114          LDY   #>BUFFER1 
B785: 20 0A B8 >1115          JSR   CMD_BLOCD  ; load bloc dans buffer1
               >1116
B788: EE A5 BF >1117          INC   VAL_BLOCNUM ; positionne sur le suivant
B78B: D0 03    >1118          BNE   :1        
B78D: EE A6 BF >1119          INC   VAL_BLOCNUM+1
               >1120
B790: CE A7 BF >1121 :1       DEC   CPT_NBR_BLOC ; un bloc lu en +
B793: 10 03    >1122          BPL   :2         ; il reste des blocs
               >1123                           ; on a traité le dernier bloc
B795: 4C 0E B7 >1124          JMP   REST_CSW_KSW ; restaure CSW/KSW d'origine
               >1125
               >1126 * Lecture caractère à l'indice actuel
               >1127
B798: AC A8 BF >1128 :2       LDY   IND_BUF   
B79B: B9 00 B1 >1129          LDA   BUFFER1,Y 
B79E: F0 0C    >1130          BEQ   :3         ; eof
               >1131
B7A0: C9 E0    >1132          CMP   #$E0       ; mise en forme
B7A2: 90 02    >1133          BCC   :4        
B7A4: 29 7F    >1134          AND   #%01111111
               >1135
B7A6: 8D 9B BF >1136 :4       STA   VALEUR    
B7A9: 4C 65 B7 >1137          JMP   TRT_FIN    ; attend la suite
               >1138
B7AC: 20 0E B7 >1139 :3       JSR   REST_CSW_KSW ; restaure CSW/KSW
B7AF: 4C 4A B8 >1140          JMP   RDOS_ERR+12 ; out of data
               >1141
               >1142
               >1143 ********************************
               >1144 *                              *
               >1145 *    Traitement READ (out)     *
               >1146 *                              *
               >1147 ********************************
               >1148
               >1149 TRT_READ_OUT             
B7B2: C9 00    >1150          CMP   #0         ; attente &END
B7B4: D0 03    >1151          BNE   :1         ; pas encore
               >1152
B7B6: 4C 0E B7 >1153          JMP   REST_CSW_KSW ; remet les pointeurs in/out d'origine
               >1154
B7B9: 60       >1155 :1       RTS             
               >1156
               >1157
               >1158 ********************************
               >1159 *                              *
               >1160 *   Lecture d'un nom d'objet   *
               >1161 *                              *
               >1162 ********************************
               >1163
               >1164 * Out: carry = 0 -> que le nom
               >1165 *      carry = 1 -> nom+paramètre
               >1166
B7BA: A9 55    >1167 GET_NAME LDA   #$55       ; évaluation de l'expression ("nom" ou variable
B7BC: 85 52    >1168          STA   TEMPPT     ; alpha ou combinaisons...)
B7BE: 20 7B DD >1169          JSR   FRMEVL    
B7C1: 20 6C DD >1170          JSR   CHKSTR    
               >1171
B7C4: A0 02    >1172          LDY   #2         ; place le descriptif de l'évaluation dans TEMPST
B7C6: B1 A0    >1173 :1       LDA   (FACMO),Y  ; TEMPST  : longueur
B7C8: 99 55 00 >1174          STA   TEMPST,Y   ; TEMPST+1: adr low début chaine
B7CB: 88       >1175          DEY              ; TEMPST+2: adr high début chaine
B7CC: 10 F8    >1176          BPL   :1        
B7CE: C8       >1177          INY              ; Y=0
               >1178
               >1179 * Examen du nom de l'objet et mise en place définitive
               >1180
B7CF: B1 56    >1181 :2       LDA   (TEMPST+1),Y ; test validité caractère
B7D1: 09 80    >1182          ORA   #%10000000
B7D3: C9 A0    >1183          CMP   #" "      
B7D5: B0 03    >1184          BCS   :3         ; si > espace -> caractère normal ok
B7D7: 4C 99 E1 >1185          JMP   IQERR      ; caractère interdit -> illegal quantity
               >1186
B7DA: 99 60 BF >1187 :3       STA   OBJ_NOM,Y  ; sauvegarde du nom final
B7DD: C8       >1188          INY             
B7DE: C0 18    >1189          CPY   #24        ; a-t'on fait les 24 caractères?
B7E0: F0 0E    >1190          BEQ   :4         ; oui
               >1191
B7E2: C4 55    >1192          CPY   TEMPST     ; longueur atteinte?
B7E4: 90 E9    >1193          BCC   :2         ; pas encore
               >1194
               >1195 * Complète avec des blancs le nom final s'il fait moins
               >1196 * de 24 caractères.
               >1197
B7E6: A9 A0    >1198          LDA   #" "      
B7E8: 99 60 BF >1199 :5       STA   OBJ_NOM,Y  ; remplissage
B7EB: C8       >1200          INY             
B7EC: C0 18    >1201          CPY   #24       
B7EE: 90 F8    >1202          BCC   :5        
               >1203
B7F0: 20 B7 00 >1204 :4       JSR   CHARGOT    ; charge le caractère avec l'expression
B7F3: C9 2C    >1205          CMP   #','       ; paramètrage complémentaire?
B7F5: F0 02    >1206          BEQ   GET_VAL    ; oui: prise en compte
               >1207
B7F7: 18       >1208          CLC              ; signale lecture nom seul
B7F8: 60       >1209          RTS             
               >1210
               >1211 ********************************
               >1212 *                              *
               >1213 * Lecture valeur après virgule *
               >1214 *                              *
               >1215 ********************************
               >1216
B7F9: 20 BE DE >1217 GET_VAL  JSR   CHKCOM     ; vérifie virgule
B7FC: 20 67 DD >1218 GET_VALD JSR   FRMNUM     ; evalue expression numérique
B7FF: 20 52 E7 >1219          JSR   GETADR     ; résultat dans LINNUM
B802: 38       >1220          SEC              ; signale présence paramètre
B803: 60       >1221          RTS             
               >1222
               >1223
               >1224 ********************************
               >1225 *                              *
               >1226 *     Chargement d'un bloc     *
               >1227 *                              *
               >1228 ********************************
               >1229
               >1230 LOAD_BLOC                
B804: A2 01    >1231          LDX   #1         ; commande=READ
               >1232
               >1233
               >1234 ********************************
               >1235 *                              *
               >1236 *    Opération sur un bloc     *
               >1237 *                              *
               >1238 ********************************
               >1239
               >1240 * In: X   = commande [1=read, 2=write]
               >1241
B806: A9 00    >1242 CMD_BLOC LDA   #<BUFFER2  ; opération dans buffer2
B808: A0 B2    >1243          LDY   #>BUFFER2 
               >1244
               >1245 * In: acc = low buffer implantation
               >1246 *     Y   = high buffer implantation
               >1247
B80A: 8D 5C BF >1248 CMD_BLOCD STA  RWTS_BUFADR ; opération dans buffer mentionné (low)
B80D: 8C 5D BF >1249          STY   RWTS_BUFADR+1 ; (high)
B810: 8E 59 BF >1250          STX   RWTS_CMD   ; type commande
               >1251
               >1252 * Transforme un numéro de bloc en piste et secteur
               >1253 * pour l'utilisation de la RWTS.
               >1254 * bloc $0PPS: OBJ_1ER_BLOC   = $PS
               >1255 *             OBJ_1ER_BLOC+1 = $0P
               >1256
B813: AD 7E BF >1257          LDA   OBJ_1ER_BLOC ; low bloc
B816: 8D 5A BF >1258          STA   RWTS_PISTE ; init piste
B819: 29 0F    >1259          AND   #$0F       ; vire l'info piste
B81B: 8D 5B BF >1260          STA   RWTS_SECTEUR ; secteur seul ok
               >1261
B81E: AD 7F BF >1262          LDA   OBJ_1ER_BLOC+1 ; high bloc
B821: 4A       >1263          LSR              ; bit dans carry
B822: 6E 5A BF >1264          ROR   RWTS_PISTE ; incorpore
B825: 4A       >1265          LSR              ; bit dans carry
B826: 6E 5A BF >1266          ROR   RWTS_PISTE ; incopore
B829: 4E 5A BF >1267          LSR   RWTS_PISTE ; insère bit=0
B82C: 4E 5A BF >1268          LSR   RWTS_PISTE ; insère bit=0
               >1269
B82F: 20 00 BA >1270 GO_RWTS: JSR   RWTS:      ; lecture piste/secteur
B832: B0 01    >1271          BCS   :1         ; erreur RWTS
B834: 60       >1272          RTS              ; lecture ok
               >1273
B835: AD 5F BF >1274 :1       LDA   RWTS_ERRNUM ; erreur
B838: C9 10    >1275          CMP   #$10      
B83A: F0 17    >1276          BEQ   RDOS_ERR+21 ; write protect err
               >1277
B83C: D0 0F    >1278          BNE   RDOS_ERR+15 ; i/o error
               >1279

               >1281
               >1282 ********************************
               >1283 *                              *
               >1284 *         Erreur RDOS          *
               >1285 *                              *
               >1286 ********************************
               >1287
               >1288 RDOS_ERR                 
B83E: A2 01    >1289          LDX   #$01       ; file not found
B840: 2C       >1290          DFB   $2C       
B841: A2 02    >1291          LDX   #$02       ; (+3) dos syntax err
B843: 2C       >1292          DFB   $2C       
B844: A2 03    >1293          LDX   #$03       ; (+6) duplicate entry
B846: 2C       >1294          DFB   $2C       
B847: A2 04    >1295          LDX   #$04       ; (+9) disk full
B849: 2C       >1296          DFB   $2C       
B84A: A2 05    >1297          LDX   #$05       ; (+12) out of data
B84C: 2C       >1298          DFB   $2C       
B84D: A2 06    >1299          LDX   #$06       ; (+15) I/O error
B84F: 2C       >1300          DFB   $2C       
B850: A2 07    >1301          LDX   #$07       ; (+18) file type error
B852: 2C       >1302          DFB   $2C       
B853: A2 08    >1303          LDX   #$08       ; (+21) write protect err
               >1304
B855: 4C 81 BF >1305          JMP   GO_AFF_ERR ; va afficher l'erreur dos
               >1306
               >1307
               >1308 ********************************
               >1309 *                              *
               >1310 * Affichage message erreur dos *
               >1311 *                              *
               >1312 ********************************
               >1313
               >1314 AFFICHE_ERR              
B858: 24 D8    >1315          BIT   ERRFLG     ; on error actif?
B85A: 10 03    >1316          BPL   :1         ; non
               >1317
B85C: 4C 12 D4 >1318          JMP   ERRORN     ; branchement on err
               >1319
B85F: 20 FB DA >1320 :1       JSR   CRDO       ; retour chariot
B862: A0 FF    >1321          LDY   #$FF       ; #$FF+1=0
               >1322
               >1323 * Cherche la fin d'un message
               >1324
B864: C8       >1325 :2       INY             
B865: B9 8A B8 >1326          LDA   LISTE_ERR,Y
B868: 10 FA    >1327          BPL   :2         ; pas la fin
               >1328
B86A: CA       >1329          DEX              ; un message passé
B86B: D0 F7    >1330          BNE   :2         ; ce n'est pas encore celui là
               >1331
               >1332                           ; ok on pointe sur le bon
B86D: 20 5A DB >1333          JSR   OUTQUES    ; print '?'
               >1334
               >1335 * Affiche le message
               >1336
B870: C8       >1337 :3       INY             
B871: B9 8A B8 >1338          LDA   LISTE_ERR,Y ; parcourt message
B874: 08       >1339          PHP             
B875: 20 5C DB >1340          JSR   OUTDO      ; affiche 1 caractère
B878: 28       >1341          PLP             
B879: 10 F5    >1342          BPL   :3         ; ce n'était pas le dernier caractère (identifié
               >1343                           ; par le DCI)
               >1344
B87B: A5 76    >1345          LDA   CURLIN+1   ; mode direct?
B87D: C9 FF    >1346          CMP   #$FF       ; (#$FF = direct)
B87F: F0 03    >1347          BEQ   :4         ; oui
               >1348
B881: 20 19 ED >1349          JSR   INPRT      ; affiche "IN" + numéro ligne
B884: 20 E2 FB >1350 :4       JSR   BELL2-2    ; biip!
B887: 4C 6C B6 >1351          JMP   HOT_BASIC  ; rend la main
               >1352
               >1353
               >1354 *------------------------------*
               >1355 *       Messages d'erreur      *
               >1356 *------------------------------*
               >1357
B88A: 80       >1358 LISTE_ERR DFB  $80        ; permet de déterminer le début msg err 1 en gardant
               >1359                           ; la meme routine pour tous les messages.
               >1360
B88B: 46 49 4C >1361          DCI   'FILE NOT FOUND'
B88E: 45 20 4E 4F
B892: 54 20 46 4F
B896: 55 4E C4
B899: 44 4F 53 >1362          DCI   'DOS SYNTAX ERROR'
B89C: 20 53 59 4E
B8A0: 54 41 58 20
B8A4: 45 52 52 4F
B8A8: D2
B8A9: 44 55 50 >1363          DCI   'DUPLICATE ENTRY'
B8AC: 4C 49 43 41
B8B0: 54 45 20 45
B8B4: 4E 54 52 D9
B8B8: 44 49 53 >1364          DCI   'DISK FULL'
B8BB: 4B 20 46 55
B8BF: 4C CC
B8C1: 4F 55 54 >1365          DCI   'OUT OF DATA'
B8C4: 20 4F 46 20
B8C8: 44 41 54 C1
B8CC: 49 2F 4F >1366          DCI   'I/O ERROR'
B8CF: 20 45 52 52
B8D3: 4F D2
B8D5: 46 49 4C >1367          DCI   'FILE TYPE ERROR'
B8D8: 45 20 54 59
B8DC: 50 45 20 45
B8E0: 52 52 4F D2
B8E4: 57 52 49 >1368          DCI   'WRITE PROTECT ERROR'
B8E7: 54 45 20 50
B8EB: 52 4F 54 45
B8EF: 43 54 20 45
B8F3: 52 52 4F D2
               >1369
               >1370
               >1371 ********************************
               >1372 *                              *
               >1373 *   Met en place 1er bloc du   *
               >1374 *          catalogue           *
               >1375 *                              *
               >1376 ********************************
               >1377
               >1378 READY_CATALOG            
B8F7: A9 10    >1379          LDA   #<$0010    ; bloc 16 (piste $01 secteur $00)
B8F9: A0 00    >1380          LDY   #>$0010   
               >1381
               >1382
               >1383 ********************************
               >1384 *                              *
               >1385 *   Met en place 1er bloc de   *
               >1386 *           l'objet            *
               >1387 *                              *
               >1388 ********************************
               >1389
               >1390 SAVE_1ER_BLOC            
B8FB: 8D 7E BF >1391          STA   OBJ_1ER_BLOC
B8FE: 8C 7F BF >1392          STY   OBJ_1ER_BLOC+1
B901: 60       >1393          RTS             
               >1394
               >1395
               >1396 ********************************
               >1397 *                              *
               >1398 * Positionne sur bloc suivant  *
               >1399 *                              *
               >1400 ********************************
               >1401
               >1402 READY_NXT_BLK            
B902: EE 7E BF >1403          INC   OBJ_1ER_BLOC ; low
B905: D0 03    >1404          BNE   :1        
               >1405
B907: EE 7F BF >1406          INC   OBJ_1ER_BLOC+1 ; high
               >1407
B90A: 60       >1408 :1       RTS             
               >1409
               >1410
               >1411 ********************************
               >1412 *                              *
               >1413 * Vérifie que la place trouvée *
               >1414 *   sera assez grande pour y   *
               >1415 *        sauver l'objet        *
               >1416 *                              *
               >1417 ********************************
               >1418
               >1419 * In: acc=nbr de bloc total de l'objet
               >1420
               >1421 CHK_SPACE                
B90B: 18       >1422          CLC              ; ajoute au 1er bloc de l'espace vide
B90C: 6D 96 BF >1423          ADC   NEXT_1ER_BLOC
B90F: A8       >1424          TAY             
B910: AD 97 BF >1425          LDA   NEXT_1ER_BLOC+1
B913: 69 00    >1426          ADC   #0         ; retenue
               >1427
B915: C9 02    >1428          CMP   #>$0231    ; déborde sur piste $23?
B917: D0 02    >1429          BNE   :1         ; non
               >1430
B919: C0 31    >1431          CPY   #<$0231   
B91B: 90 03    >1432 :1       BCC   :2         ; ça baigne
               >1433
B91D: 4C 47 B8 >1434          JMP   RDOS_ERR+9 ; disk full (place insuffisante)
               >1435
B920: AD 96 BF >1436 :2       LDA   NEXT_1ER_BLOC ; 1er bloc de l'objet=1er bloc de l'espace vide
B923: 8D 7E BF >1437          STA   OBJ_1ER_BLOC
B926: AD 97 BF >1438          LDA   NEXT_1ER_BLOC+1
B929: 8D 7F BF >1439          STA   OBJ_1ER_BLOC+1
B92C: 60       >1440          RTS             
               >1441
B92D: 00 00 00 >1442          DS    \,0
...
B9FC: 00 00 00 00

               19           PUT   RWTS      
               >1   
               >2    ********************************
               >3    *                              *
               >4    *       RWTS du RDOS 3.3       *
               >5    *     (s)ource by Deckard      *
               >6    *                              *
               >7    ********************************
               >8   
               >9    RWTS:                    
               >10  
               >11   * Lecture de l'état du drive courant
               >12  
BA00: A9 05    >13            LDA   #5         ; 5 passes de lecture champs autorisées
BA02: 8D F8 04 >14            STA   SEEKCNT   
               >15  
BA05: AE 56 BF >16            LDX   RWTS_SLOT16
BA08: BD 8E C0 >17            LDA   LC08E,X    ; disk vers ram
BA0B: BD 8C C0 >18            LDA   LC08C,X    ; mode lecture read
               >19  
BA0E: A0 08    >20            LDY   #8        
BA10: BD 8C C0 >21   :1       LDA   LC08C,X    ; attente 2 lectures différentes
BA13: 20 33 B4 >22            JSR   GO_RTS     ; rts tempo
BA16: DD 8C C0 >23            CMP   LC08C,X   
               >24  
BA19: D0 03    >25            BNE   :3         ; le drive tourne
BA1B: 88       >26            DEY             
BA1C: D0 F2    >27            BNE   :1         ; relecture
               >28                             ; meme valeur après 8 essais -> drive inactif
               >29  
BA1E: 08       >30   :3       PHP              ; Z=0 (BNE) -> drive courant actif
               >31                             ; Z=1 (BEQ) -> drive courant inactif
               >32  
               >33   * Met en route le nouveau drive et regarde si c'était
               >34   * le meme que le drive courant précédant
               >35  
BA1F: 8A       >36            TXA              ; slot16+lecteur
BA20: 18       >37            CLC             
BA21: 6D 57 BF >38            ADC   RWTS_DRIVE
BA24: A8       >39            TAY             
BA25: B9 89 C0 >40            LDA   LC089,Y    ; sélectionne le nouveau drive
BA28: BD 89 C0 >41            LDA   LC089,X    ; drive on (meme s'il tournait déjà)
               >42  
BA2B: AD 57 BF >43            LDA   RWTS_DRIVE ; [%00000001=drive1,%00000010=drive2]
BA2E: CD 58 BF >44            CMP   RWTS_OLD_DRV ; changement de drive?
BA31: F0 0A    >45            BEQ   :2         ; non (DRIVNO identique)
               >46  
               >47   * On a changé de drive
               >48  
BA33: 8D 58 BF >49            STA   RWTS_OLD_DRV ; old drive=new
BA36: 6A       >50            ROR              ; info new drive dans carry: [0=drv2,1=drv1]
BA37: 66 35    >51            ROR   DRIVNO     ; dans bit 7
BA39: 28       >52            PLP              ; restaure état drive courant
BA3A: A0 00    >53            LDY   #0         ; Z=1
BA3C: 08       >54            PHP              ; drive courant=inactif (force tempo)
               >55  
BA3D: AD 59 BF >56   :2       LDA   RWTS_CMD   ; [%00000001=read, %00000010=write]
BA40: 6A       >57            ROR              ; carry:1=read,0=write
BA41: 66 49    >58            ROR   IOBPH      ; dans bit 7
BA43: 28       >59            PLP              ; restaure état activité drive
               >60  
BA44: D0 0C    >61            BNE   :5         ; Z=0: il était déjà actif
               >62  
BA46: 24 49    >63            BIT   IOBPH      ; commande?
BA48: 30 08    >64            BMI   :5         ; read
               >65  
               >66   * Pas de tempo si:
               >67   * - drive actif
               >68   * - commande read
               >69  
BA4A: A0 04    >70            LDY   #4         ; tempo
BA4C: 20 A8 FC >71   :4       JSR   WAIT      
BA4F: 88       >72            DEY             
BA50: D0 FA    >73            BNE   :4        
               >74  
               >75   * Le drive est actif et pret
               >76  
BA52: AD 5C BF >77   :5       LDA   RWTS_BUFADR ; pointeur adr chargement
BA55: 85 3E    >78            STA   BUFADR    
BA57: AD 5D BF >79            LDA   RWTS_BUFADR+1
BA5A: 85 3F    >80            STA   BUFADR+1  
               >81  
BA5C: 24 49    >82            BIT   IOBPH      ; commande?
BA5E: 30 03    >83            BMI   TRYTRK2    ; read
               >84  
               >85                             ; write
BA60: 20 00 BB >86            JSR   PRENIB16   ; transforme 256 octets en 342 nibbles
               >87  
               >88   ********************************
               >89  
               >90   * On regarde où on se trouve sur le disk
               >91  
               >92   TRYTRK2                  
BA63: A9 30    >93            LDA   #48        ; 48 essais
BA65: 8D 78 04 >94            STA   CURTRK    
               >95  
               >96   TRYADR                   
BA68: AE 56 BF >97            LDX   RWTS_SLOT16
BA6B: 20 42 BC >98            JSR   RDADR16    ; read SECFND, TRKFND
BA6E: 90 2E    >99            BCC   RDRIGHT    ; ok
               >100 
BA70: CE 78 04 >101  TRYADR2  DEC   CURTRK     ; un essai de moins
BA73: 10 F3    >102           BPL   TRYADR     ; re-essaie
               >103 
BA75: A9 10    >104           LDA   #16       
BA77: 8D 5E BF >105           STA   RWTS_DRV0TRK
BA7A: A9 00    >106           LDA   #0        
BA7C: CE F8 04 >107           DEC   SEEKCNT    ; une passe de moins
BA7F: F0 15    >108           BEQ   BAD_DRIVE  ; bad drive si dernière passe
               >109 
BA81: 20 9E BC >110           JSR   SEEKABS   
BA84: 4C 63 BA >111           JMP   TRYTRK2   
               >112 
               >113  *------------------------------*
               >114  *      Fin traitement RWTS     *
               >115  *------------------------------(
               >116 
BA87: A9 00    >117  ALLDONE  LDA   #0        
BA89: 18       >118           CLC              ; pas d'erreur
BA8A: 24       >119           DFB   $24        ; faux bit
               >120 
BA8B: 38       >121  HNDLERR  SEC              ; signale erreur
BA8C: 8D 5F BF >122           STA   RWTS_ERRNUM ; met en place code erreur
BA8F: BD 88 C0 >123           LDA   LC088,X    ; arret drive
BA92: 60       >124           RTS             
               >125 
               >126 
               >127  *------------------------------*
               >128  * Branchement en cas d'erreur  *
               >129  *------------------------------*
               >130 
               >131  WRITE_PROTECT            
BA93: A9 10    >132           LDA   #$10       ; write protect
BA95: 2C       >133           DFB   $2C        ; faux bit
               >134  BAD_DRIVE                
BA96: A9 40    >135           LDA   #$40       ; bad drive
BA98: 2C       >136           DFB   $2C        ; faux bit
               >137  READ_ERROR               
BA99: A9 80    >138           LDA   #$80       ; erreur de lecture (après 48 essais)
BA9B: 4C 8B BA >139           JMP   HNDLERR   
               >140 
               >141  ********************************
               >142 
               >143  * On a trouvé une piste. Est-ce la bonne.
               >144 
BA9E: A5 2E    >145  RDRIGHT  LDA   TRKFND     ; piste trouvée
BAA0: CD 5A BF >146           CMP   RWTS_PISTE ; =piste demandée?
BAA3: F0 1C    >147           BEQ   CRCTVOL    ; oui
               >148 
BAA5: BD 80 C0 >149           LDA   $C080,X   
BAA8: BD 82 C0 >150           LDA   $C082,X   
BAAB: BD 84 C0 >151           LDA   $C084,X   
BAAE: BD 86 C0 >152           LDA   $C086,X   
BAB1: A5 2E    >153           LDA   TRKFND     ; piste trouvée*2
BAB3: 0A       >154           ASL             
BAB4: 8D 5E BF >155           STA   RWTS_DRV0TRK
               >156 
BAB7: AD 5A BF >157           LDA   RWTS_PISTE ; piste attendue*2
BABA: 0A       >158           ASL             
BABB: 20 9E BC >159           JSR   SEEKABS   
BABE: 4C 68 BA >160           JMP   TRYADR    
               >161 
               >162  * Piste ok. Est-ce le bon secteur
               >163 
BAC1: A4 2D    >164  CRCTVOL  LDY   SECFND     ; secteur trouvé
BAC3: B9 AE BF >165           LDA   INTRLEAV,Y
BAC6: CD 5B BF >166           CMP   RWTS_SECTEUR ; =secteur recherché?
BAC9: F0 07    >167           BEQ   :1         ; oui
               >168 
BACB: CE 78 04 >169           DEC   CURTRK     ; un essai de moins
BACE: 10 98    >170           BPL   TRYADR     ; recherche
BAD0: 30 C7    >171           BMI   READ_ERROR ; essais non concluants
               >172 
BAD2: 24 49    >173  :1       BIT   IOBPH      ; commande
BAD4: 10 0E    >174           BPL   WRIT       ; write
               >175 
BAD6: 20 DA BB >176           JSR   READ16     ; lecture secteur
BAD9: B0 95    >177           BCS   TRYADR2    ; erreur
               >178 
BADB: 20 C2 BB >179           JSR   POSTNB16   ; conversion en octets
BADE: AE 56 BF >180  FINI     LDX   RWTS_SLOT16
BAE1: 4C 87 BA >181           JMP   ALLDONE   
               >182 
BAE4: 20 2A BB >183  WRIT     JSR   WRITE16   
BAE7: 90 F5    >184           BCC   FINI      
               >185 
BAE9: 4C 93 BA >186           JMP   WRITE_PROTECT ; write protect
               >187 
BAEC: 00 00 00 >188           DS    \,0
BAEF: 00 00 00 00
BAF3: 00 00 00 00
BAF7: 00 00 00 00
BAFB: 00 00 00 00
BAFF: 00

               20           PUT   RWTS.SUBS 
               >1   
               >2    ********************************
               >3    *                              *
               >4    *  Sous programmes RWTS RDOS   *
               >5    *                              *
               >6    ********************************
               >7   
               >8    *------------------------------*
               >9    *     PRENIBBLIZE ROUTINE      *
               >10   *------------------------------*
               >11  
               >12   * CONVERTS 256 BYTES POINTED AT BY BUFADR TO 342
               >13   * 6-BIT NIBBLES OF THE FORM 00XXXXXX
               >14  
               >15   PRENIB16                 
BB00: A2 00    >16            LDX   #0        
BB02: A0 02    >17            LDY   #2        
               >18  
               >19   * GET NEXT USER BYTE
               >20  
BB04: 88       >21   PRENIB1  DEY             
BB05: B1 3E    >22            LDA   (BUFADR),Y
               >23  
               >24   * SHIFT H.O. TWO BYTES INTO NBUF2.
               >25  
BB07: 4A       >26            LSR             
BB08: 3E 00 BF >27            ROL   NBUF2,X   
BB0B: 4A       >28            LSR             
BB0C: 3E 00 BF >29            ROL   NBUF2,X   
               >30  
               >31   * PUT L.O. SIX BITS (SHIFTED LEFT) INTO NBUF1.
               >32  
BB0F: 99 00 BE >33            STA   NBUF1,Y   
BB12: E8       >34            INX             
BB13: E0 56    >35            CPX   #$56      
BB15: 90 ED    >36            BCC   PRENIB1   
               >37  
               >38   * DONE YET?
               >39  
BB17: A2 00    >40            LDX   #0        
BB19: 98       >41            TYA             
BB1A: D0 E8    >42            BNE   PRENIB1   
               >43  
               >44   * STRIP H.O. TWO BITS OF NBUF2.
               >45  
BB1C: A2 55    >46            LDX   #$55      
BB1E: BD 00 BF >47   PRENIB2  LDA   NBUF2,X   
BB21: 29 3F    >48            AND   #$3F      
BB23: 9D 00 BF >49            STA   NBUF2,X   
BB26: CA       >50            DEX             
BB27: 10 F5    >51            BPL   PRENIB2   
BB29: 60       >52            RTS             
               >53  
               >54   *------------------------------*
               >55   *       WRITE SUBROUTINE       *
               >56   *------------------------------*
               >57  
               >58   * WRITES PRENIBBILIZED DATA IN NBUF1 AND NBUF2 TO DISK.
               >59   *
               >60   * NOTE: THIS STUFF IS ALL TIME CRITICAL.
               >61   *
               >62   * WATCH PAGE BOUNDRIES, DON'T REMOVE NOP'S, ETC.
               >63  
               >64   WRITE16                  
BB2A: 38       >65            SEC              ;ANTICIPATE WRITE PROTECT
BB2B: 86 27    >66            STX   SLOTZ     
BB2D: 8E 78 06 >67            STX   SLOTABS   
BB30: BD 8D C0 >68            LDA   LC08D,X   
BB33: BD 8E C0 >69            LDA   LC08E,X    ;SENSE WRITE PROTECT
BB36: 30 7C    >70            BMI   WEXIT     
BB38: AD 00 BF >71            LDA   NBUF2     
BB3B: 85 26    >72            STA   WTEMP     
BB3D: A9 FF    >73            LDA   #$FF       ;SYNC BYTE
BB3F: 9D 8F C0 >74            STA   LC08F,X    ;WRITE 1ST NIBBLE
BB42: 1D 8C C0 >75            ORA   LC08C,X   
BB45: 48       >76            PHA             
BB46: 68       >77            PLA             
BB47: EA       >78            NOP             
BB48: A0 04    >79            LDY   #4        
               >80  
               >81   * WRITE THE SYNC BYTE
               >82  
BB4A: 48       >83   WSYNC    PHA             
BB4B: 68       >84            PLA             
BB4C: 20 B9 BB >85            JSR   WNIBL7    
BB4F: 88       >86            DEY             
BB50: D0 F8    >87            BNE   WSYNC     
BB52: A9 D5    >88            LDA   #$D5       ;FIRST DATA MARK
BB54: 20 B8 BB >89            JSR   WNIBL9    
BB57: A9 AA    >90            LDA   #$AA       ;2ND DATA MARK
BB59: 20 B8 BB >91            JSR   WNIBL9    
BB5C: A9 AD    >92            LDA   #$AD       ;3RD DATA MARK
BB5E: 20 B8 BB >93            JSR   WNIBL9    
BB61: 98       >94            TYA              ;CLEAR CHECKSUM
BB62: A0 56    >95            LDY   #$56       ;NBUF2 INDEX
BB64: D0 03    >96            BNE   L1         ;ALWAYS TAKEN
               >97  
BB66: B9 00 BF >98   WDATA0   LDA   NBUF2,Y    ;GET PRIOR 6-BIT NIBBLE
BB69: 59 FF BE >99   L1       EOR   NBUF2-1,Y  ;AND XOR WITH CURRENT NIBBLE
BB6C: AA       >100           TAX             
BB6D: BD 1F BD >101           LDA   NIBL,X    
BB70: A6 27    >102           LDX   SLOTZ     
BB72: 9D 8D C0 >103           STA   LC08D,X    ;WRITE NIBBLE
BB75: BD 8C C0 >104           LDA   LC08C,X   
BB78: 88       >105           DEY              ;NEXT NIBBLE
BB79: D0 EB    >106           BNE   WDATA0    
               >107 
               >108  * NOW HANDLE NBUF1.
               >109 
               >110  * GET PRIOR NIBBLE
               >111 
BB7B: A5 26    >112           LDA   WTEMP     
BB7D: EA       >113           NOP             
               >114 
               >115  * LOOP TO WRITE OUT DATA IN NBUF1
               >116 
BB7E: 59 00 BE >117  WDATA2   EOR   NBUF1,Y   
BB81: AA       >118           TAX             
BB82: BD 1F BD >119           LDA   NIBL,X    
BB85: AE 78 06 >120           LDX   SLOTABS   
BB88: 9D 8D C0 >121           STA   LC08D,X    ;WRITE NIBBLE
BB8B: BD 8C C0 >122           LDA   LC08C,X   
BB8E: B9 00 BE >123           LDA   NBUF1,Y   
BB91: C8       >124           INY             
BB92: D0 EA    >125           BNE   WDATA2    
BB94: AA       >126           TAX             
BB95: BD 1F BD >127           LDA   NIBL,X    
               >128 
               >129  * WRITE CHECKSUM
               >130 
BB98: A6 27    >131           LDX   SLOTZ     
BB9A: 20 BB BB >132           JSR   WNIBL     
               >133 
               >134  * WRITE EPILOG TO DATA
               >135 
BB9D: A9 DE    >136           LDA   #$DE       ;DM4, BIT SLIP MARK
BB9F: 20 B8 BB >137           JSR   WNIBL9    
BBA2: A9 AA    >138           LDA   #$AA       ;DM5, BSM
BBA4: 20 B8 BB >139           JSR   WNIBL9    
BBA7: A9 EB    >140           LDA   #$EB       ;DM6, BSM
BBA9: 20 B8 BB >141           JSR   WNIBL9    
               >142 
               >143  * ALL DONE, CLOSE UP THE SHOP!
               >144 
BBAC: A9 FF    >145           LDA   #$FF      
BBAE: 20 B8 BB >146           JSR   WNIBL9    
               >147 
               >148  * TURN OFF THE WRITE MODE
               >149 
BBB1: BD 8E C0 >150           LDA   LC08E,X   
               >151 
               >152  * AND BACK TO THE READ MODE
               >153 
BBB4: BD 8C C0 >154  WEXIT    LDA   LC08C,X   
BBB7: 60       >155           RTS             
               >156 
               >157  * WNIBL9 9 CYCLES, THEN WRITE
               >158 
BBB8: 18       >159  WNIBL9   CLC             
               >160 
               >161  * WNIBL7 7 CYCLES, THEN WRITE
               >162 
BBB9: 48       >163  WNIBL7   PHA             
BBBA: 68       >164           PLA             
               >165 
               >166  * WRITE NIBBLE TO DISK
               >167 
BBBB: 9D 8D C0 >168  WNIBL    STA   LC08D,X   
BBBE: 1D 8C C0 >169           ORA   LC08C,X   
BBC1: 60       >170           RTS             
               >171 
               >172  *------------------------------*
               >173  *    POST NIBBLIZE ROUTINE.    *
               >174  *------------------------------*
               >175 
               >176  * CONVERTS 342 NIBBLES OF THE FORM 00XXXXXX
               >177  * TO EIGHT BIT BYTES.
               >178  *
               >179  * THE NIBBLES ARE STORED IN NBUF1 AND NBUF2, THE 8-BIT
               >180  * BYTES WILL BE STORED AT (BUFADR).
               >181 
               >182  POSTNB16                 
BBC2: A0 00    >183           LDY   #0        
BBC4: A2 56    >184  POST1    LDX   #$56      
BBC6: CA       >185  POST2    DEX             
BBC7: 30 FB    >186           BMI   POST1     
               >187 
               >188  * GET BYTE AND SHIFT IN L.O. TWO BITS FROM NBUF2
               >189 
BBC9: B9 00 BE >190           LDA   NBUF1,Y   
BBCC: 5E 00 BF >191           LSR   NBUF2,X   
BBCF: 2A       >192           ROL             
BBD0: 5E 00 BF >193           LSR   NBUF2,X   
BBD3: 2A       >194           ROL             
               >195 
               >196  * STORE IN USER BUFFER
               >197 
BBD4: 91 3E    >198           STA   (BUFADR),Y
BBD6: C8       >199           INY             
BBD7: D0 ED    >200           BNE   POST2     
BBD9: 60       >201           RTS             
               >202 
               >203  *------------------------------*
               >204  *         READ ROUTINE         *
               >205  *------------------------------*
               >206 
               >207  * READS A SECTOR FROM THE DISK AND STORES THE DATA IN
               >208  * NBUF1 AND NBUF2.
               >209 
               >210  READ16                   
BBDA: A0 20    >211           LDY   #$20      
               >212 
               >213  * GET SYNC BYTES
               >214 
BBDC: 88       >215  RSYNC    DEY             
BBDD: F0 61    >216           BEQ   RDERR     
               >217 
               >218  * WAIT UNTIL A BYTE IS RECIEVED FROM THE DISK DRIVE.
               >219 
BBDF: BD 8C C0 >220  L2       LDA   LC08C,X   
BBE2: 10 FB    >221           BPL   L2        
               >222 
               >223  * BYTE RECIEVED, CHECK FOR DM1
               >224 
BBE4: 49 D5    >225  RSYNC1   EOR   #$D5      
BBE6: D0 F4    >226           BNE   RSYNC     
BBE8: EA       >227           NOP             
               >228 
               >229  * GET NEXT BYTE AND CHECK FOR DM2
               >230 
BBE9: BD 8C C0 >231  L3       LDA   LC08C,X   
BBEC: 10 FB    >232           BPL   L3        
BBEE: C9 AA    >233           CMP   #$AA      
BBF0: D0 F2    >234           BNE   RSYNC1    
BBF2: A0 56    >235           LDY   #$56      
               >236 
               >237  * CHECK FOR DM3
               >238 
BBF4: BD 8C C0 >239  L4       LDA   LC08C,X   
BBF7: 10 FB    >240           BPL   L4        
BBF9: C9 AD    >241           CMP   #$AD      
BBFB: D0 E7    >242           BNE   RSYNC1    
               >243 
               >244  * READ THE DATA FROM THE SECTOR
               >245 
BBFD: A9 00    >246           LDA   #0         ;INIT CHECKSUM
               >247 
               >248  * READ STUFF INTO NBUF2
               >249 
BBFF: 88       >250  RDATA1   DEY             
BC00: 84 26    >251           STY   IDX       
BC02: BC 8C C0 >252  L5       LDY   LC08C,X    ; Y=[$96,$FF]
BC05: 10 FB    >253           BPL   L5        
BC07: 59 00 BD >254           EOR   TRANS_6_2-$96,Y
BC0A: A4 26    >255           LDY   IDX       
BC0C: 99 00 BF >256           STA   NBUF2,Y   
BC0F: D0 EE    >257           BNE   RDATA1    
               >258 
               >259  * READ STUFF INTO NBUF1
               >260 
BC11: 84 26    >261  RDATA2   STY   IDX       
BC13: BC 8C C0 >262  L6       LDY   LC08C,X   
BC16: 10 FB    >263           BPL   L6        
BC18: 59 00 BD >264           EOR   TRANS_6_2-$96,Y
BC1B: A4 26    >265           LDY   IDX       
BC1D: 99 00 BE >266           STA   NBUF1,Y   
BC20: C8       >267           INY             
BC21: D0 EE    >268           BNE   RDATA2    
               >269 
               >270  * GET AND CHECK THE CHECKSUM BYTE
               >271 
BC23: BC 8C C0 >272  L7       LDY   LC08C,X   
BC26: 10 FB    >273           BPL   L7        
BC28: D9 00 BD >274           CMP   TRANS_6_2-$96,Y
BC2B: D0 13    >275           BNE   RDERR     
               >276 
               >277  * CHECK FOR DM4
               >278 
BC2D: BD 8C C0 >279  L8       LDA   LC08C,X   
BC30: 10 FB    >280           BPL   L8        
BC32: C9 DE    >281           CMP   #$DE      
BC34: D0 0A    >282           BNE   RDERR     
BC36: EA       >283           NOP             
               >284 
               >285  * CHECK FOR DM5
               >286 
BC37: BD 8C C0 >287  L9       LDA   LC08C,X   
BC3A: 10 FB    >288           BPL   L9        
BC3C: C9 AA    >289           CMP   #$AA      
BC3E: F0 5C    >290           BEQ   RDADRX    
BC40: 38       >291  RDERR    SEC             
BC41: 60       >292           RTS             
               >293 
               >294  *------------------------------*
               >295  *      READ ADDRESS FIELD.     *
               >296  *------------------------------*
               >297 
               >298  * READS STARTING ADDRESS MARKS ($D5, $AA, $96), ADDRESS
               >299  * INFO (VOLUME/TRACK/SECTOR/CHECKSUM), AND CLOSING
               >300  * ADDRESS MARKS ($DE, $AA)
               >301 
               >302  RDADR16                  
BC42: A0 FC    >303           LDY   #$FC      
BC44: 84 26    >304           STY   COUNT     
BC46: C8       >305  RDASYN   INY             
BC47: D0 04    >306           BNE   L10       
BC49: E6 26    >307           INC   COUNT     
BC4B: F0 F3    >308           BEQ   RDERR     
               >309 
               >310  * READ FIRST ADDRESS MARK ($D5)
               >311 
BC4D: BD 8C C0 >312  L10      LDA   LC08C,X   
BC50: 10 FB    >313           BPL   L10       
BC52: C9 D5    >314  RDASYN1  CMP   #$D5      
BC54: D0 F0    >315           BNE   RDASYN    
BC56: EA       >316           NOP             
               >317 
               >318  * READ NEXT ADDRESS MARK
               >319 
BC57: BD 8C C0 >320  L11      LDA   LC08C,X   
BC5A: 10 FB    >321           BPL   L11       
BC5C: C9 AA    >322           CMP   #$AA      
BC5E: D0 F2    >323           BNE   RDASYN1   
BC60: A0 03    >324           LDY   #3        
               >325 
               >326  * READ LAST ADDRESS MARK
               >327 
BC62: BD 8C C0 >328  L12      LDA   LC08C,X   
BC65: 10 FB    >329           BPL   L12       
BC67: C9 96    >330           CMP   #$96      
BC69: D0 E7    >331           BNE   RDASYN1   
               >332 
               >333  * INIT CHECKSUM AND READ THE ADDRESS DATA FIELD (FOUR BYTES)
               >334 
BC6B: A9 00    >335           LDA   #0        
BC6D: 85 27    >336  RDAFLD   STA   CSUM      
               >337 
               >338  * READ 'ODD' BIT NIBBLE
               >339 
BC6F: BD 8C C0 >340  L13      LDA   LC08C,X   
BC72: 10 FB    >341           BPL   L13       
BC74: 2A       >342           ROL             
BC75: 85 26    >343           STA   LAST      
               >344 
               >345  * READ EVEN BIT NIBBLE.
               >346 
BC77: BD 8C C0 >347  L14      LDA   LC08C,X   
BC7A: 10 FB    >348           BPL   L14       
               >349 
               >350  * MERGE THE TWO.
               >351 
BC7C: 25 26    >352           AND   LAST      
               >353 
               >354  * STORE THE DATA BYTE, UPDATE CHECKSUM, AND REPEAT UNTIL
               >355  * ENTIRE ADDRESS FIELD IS READ.
               >356 
BC7E: 99 2C 00 >357           STA   SLOTEMP+1,Y
BC81: 45 27    >358           EOR   CSUM      
BC83: 88       >359           DEY             
BC84: 10 E7    >360           BPL   RDAFLD    
               >361 
               >362  * CHECKSUM (IN ACC) MUST BE 0.
               >363 
BC86: A8       >364           TAY             
BC87: D0 B7    >365           BNE   RDERR     
               >366 
               >367  * READ FIRST EPILOGUE BYTE ($DE)
               >368 
BC89: BD 8C C0 >369  L15      LDA   LC08C,X   
BC8C: 10 FB    >370           BPL   L15       
BC8E: C9 DE    >371           CMP   #$DE      
BC90: D0 AE    >372           BNE   RDERR     
BC92: EA       >373           NOP             
               >374 
               >375  * READ SECOND EPILOGUE BYTE ($AA)
               >376 
BC93: BD 8C C0 >377  L16      LDA   LC08C,X   
BC96: 10 FB    >378           BPL   L16       
BC98: C9 AA    >379           CMP   #$AA      
BC9A: D0 A4    >380           BNE   RDERR     
BC9C: 18       >381  RDADRX   CLC             
BC9D: 60       >382           RTS             
               >383 
               >384  *------------------------------*
               >385  *       SEEKABS ROUTINE        *
               >386  *------------------------------*
               >387 
               >388  * MOVES THE DISK HEAD OVER THE DESIRED TRACK.
               >389 
               >390  SEEKABS                  
BC9E: 85 2A    >391           STA   TRKN      
BCA0: CD 5E BF >392           CMP   RWTS_DRV0TRK
BCA3: F0 55    >393           BEQ   RTS0      
BCA5: A9 00    >394           LDA   #0        
BCA7: 85 26    >395           STA   TRKCNT    
BCA9: AD 5E BF >396  MOVEHEAD LDA   RWTS_DRV0TRK
BCAC: 85 27    >397           STA   PRIOR     
BCAE: 38       >398           SEC             
BCAF: E5 2A    >399           SBC   TRKN      
BCB1: F0 33    >400           BEQ   ISTHERE   
BCB3: B0 07    >401           BCS   L17       
BCB5: 49 FF    >402           EOR   #$FF      
BCB7: EE 5E BF >403           INC   RWTS_DRV0TRK
BCBA: 90 05    >404           BCC   L18       
BCBC: 69 FE    >405  L17      ADC   #$FE      
BCBE: CE 5E BF >406           DEC   RWTS_DRV0TRK
BCC1: C5 26    >407  L18      CMP   TRKCNT    
BCC3: 90 02    >408           BCC   L19       
BCC5: A5 26    >409           LDA   TRKCNT    
BCC7: C9 0C    >410  L19      CMP   #$C       
BCC9: B0 01    >411           BCS   L20       
BCCB: A8       >412           TAY             
BCCC: 38       >413  L20      SEC             
BCCD: 20 EA BC >414           JSR   CHKPOS    
BCD0: B9 07 BD >415           LDA   ONTBL,Y   
BCD3: 20 FB BC >416           JSR   MSWAIT    
BCD6: A5 27    >417           LDA   PRIOR     
BCD8: 18       >418           CLC             
BCD9: 20 ED BC >419           JSR   CHKPOS2   
BCDC: B9 13 BD >420           LDA   OFFTBL,Y  
BCDF: 20 FB BC >421           JSR   MSWAIT    
BCE2: E6 26    >422           INC   TRKCNT    
BCE4: D0 C3    >423           BNE   MOVEHEAD  
BCE6: 20 FB BC >424  ISTHERE  JSR   MSWAIT    
BCE9: 18       >425           CLC             
BCEA: AD 5E BF >426  CHKPOS   LDA   RWTS_DRV0TRK
BCED: 29 03    >427  CHKPOS2  AND   #3        
BCEF: 2A       >428           ROL             
BCF0: 0D 56 BF >429           ORA   RWTS_SLOT16
BCF3: AA       >430           TAX             
BCF4: BD 80 C0 >431           LDA   PHASEOFF,X
BCF7: AE 56 BF >432           LDX   RWTS_SLOT16
BCFA: 60       >433  RTS0     RTS             
               >434 
               >435  *------------------------------*
               >436  *  HEAD MOVE DELAY SUBROUTINE  *
               >437  *------------------------------*
               >438 
               >439  * DELAYS ACC*100 USEC
               >440 
BCFB: AE 80 BF >441  MSWAIT   LDX   VAL_MSWAIT
BCFE: CA       >442  L21      DEX              ;DELAY 86 USEC
BCFF: D0 FD    >443           BNE   L21       
BD01: 38       >444  L22      SEC             
BD02: E9 01    >445           SBC   #1        
BD04: D0 F5    >446           BNE   MSWAIT    
BD06: 60       >447           RTS             
               >448 
               >449  ********************************
               >450 
               >451  * PHASEON/PHASEOFF TABLES
               >452 
BD07: 01 30    >453  ONTBL    HEX   0130      
BD09: 28 24 20 >454           HEX   2824201E1D1C1C1C1C1C
BD0C: 1E 1D 1C 1C
BD10: 1C 1C 1C
BD13: 70 2C 26 >455  OFFTBL   HEX   702C26221F1E1D1C1C1C1C1C
BD16: 22 1F 1E 1D
BD1A: 1C 1C 1C 1C
BD1E: 1C
               >456 
               >457  ********************************
               >458 
               >459  * WRITE TRANSLATE TABLES
               >460 
BD1F: 96 97 9A >461  NIBL     HEX   96979A9B9D9E9FA6A7ABACADAEAFB2B3
BD22: 9B 9D 9E 9F
BD26: A6 A7 AB AC
BD2A: AD AE AF B2
BD2E: B3
BD2F: B4 B5 B6 >462           HEX   B4B5B6B7B9BABBBCBDBEBFCBCDCECFD3
BD32: B7 B9 BA BB
BD36: BC BD BE BF
BD3A: CB CD CE CF
BD3E: D3
BD3F: D6 D7 D9 >463           HEX   D6D7D9DADBDCDDDEDFE5E6E7E9EAEBEC
BD42: DA DB DC DD
BD46: DE DF E5 E6
BD4A: E7 E9 EA EB
BD4E: EC
BD4F: ED EE EF >464           HEX   EDEEEFF2F3F4F5F6F7F9FAFBFCFDFEFF
BD52: F2 F3 F4 F5
BD56: F6 F7 F9 FA
BD5A: FB FC FD FE
BD5E: FF
               >465 
               >466  ********************************
               >467 
               >468  * ALIGN REMAINDER OF TABLE
               >469 
BD5F: 00 00 00 >470           DS    55        
...
BD92: 00 00 00 00
               >471 
               >472  TRANS_6_2                
BD96: 00 01 98 >473           HEX   0001989902039C040506A0A1A2A3A4A5
BD99: 99 02 03 9C
BD9D: 04 05 06 A0
BDA1: A1 A2 A3 A4
BDA5: A5
BDA6: 07 08 A8 >474           HEX   0708A8A9AA090A0B0C0DB0B10E0F1011
BDA9: A9 AA 09 0A
BDAD: 0B 0C 0D B0
BDB1: B1 0E 0F 10
BDB5: 11
BDB6: 12 13 B8 >475           HEX   1213B81415161718191AC0C1C2C3C4C5
BDB9: 14 15 16 17
BDBD: 18 19 1A C0
BDC1: C1 C2 C3 C4
BDC5: C5
BDC6: C6 C7 C8 >476           HEX   C6C7C8C9CA1BCC1C1D1ED0D1D21FD4D5
BDC9: C9 CA 1B CC
BDCD: 1C 1D 1E D0
BDD1: D1 D2 1F D4
BDD5: D5
BDD6: 20 21 D8 >477           HEX   2021D822232425262728E0E1E2E3E429
BDD9: 22 23 24 25
BDDD: 26 27 28 E0
BDE1: E1 E2 E3 E4
BDE5: 29
BDE6: 2A 2B E8 >478           HEX   2A2BE82C2D2E2F303132F0F133343536
BDE9: 2C 2D 2E 2F
BDED: 30 31 32 F0
BDF1: F1 33 34 35
BDF5: 36
BDF6: 37 38 F8 >479           HEX   3738F8393A3B3C3D3E3F
BDF9: 39 3A 3B 3C
BDFD: 3D 3E 3F
                21           PUT   NBUF      
               >1   
               >2   
               >3    ********************************
               >4    *                              *
               >5    * Buffers RWTS et point entrée *
               >6    *       du RDOS 3.3 SSI        *
               >7    *     (s)ource by Deckard      *
               >8    *                              *
               >9    ********************************
               >10  
               >11   NBUF1                    
BE00: 8E 56 BF >12            STX   RWTS_SLOT16 ; sauve slot*16
BE03: 20 72 B6 >13            JSR   CHK_APLSFT ; vérifie présence AppleSoft en ligne
               >14  
BE06: A2 2F    >15            LDX   #$2F      
BE08: BD 1A BE >16   :1       LDA   RDOS_VECT,X
BE0B: 9D D0 03 >17            STA   $3D0,X     ; met en place nouveaux vecteurs page 3
BE0E: CA       >18            DEX             
BE0F: 10 F7    >19            BPL   :1        
               >20  
BE11: A9 B6    >21            LDA   #>NEW-1    ; on fera NEW à la fin de cette routine
BE13: 48       >22            PHA             
BE14: A9 4D    >23            LDA   #<NEW-1   
BE16: 48       >24            PHA             
BE17: 4C A1 B5 >25            JMP   READD      ; effectue un READ direct (EXEC)
               >26  
               >27  
               >28   *------------------------------*
               >29   *     Vecteurs RDOS page 3     *
               >30   *------------------------------*
               >31  
               >32   RDOS_VECT                
BE1A: 4C 6C B6 >33            JMP   HOT_BASIC 
BE1D: 4C 00 E0 >34            JMP   BASIC     
BE20: 4C 33 B4 >35            JMP   GO_RTS    
BE23: 4C 00 BA >36            JMP   RWTS:      ; point d'entrée RWTS
               >37  
BE26: EA EA EA >38            DS    19,$EA     ; nop
BE29: EA EA EA EA
BE2D: EA EA EA EA
BE31: EA EA EA EA
BE35: EA EA EA EA
               >39  
BE39: 4C 59 FA >40            JMP   OLDBRK    
BE3C: 6C B6    >41            DA    HOT_BASIC  ; reset
BE3E: 13       >42            DFB   $13        ; DFB #>HOT_BASIC!$A500
               >43  
BE3F: 4C 00 B3 >44            JMP   SKTOKEN    ; & point d'entrée (SeeKTOKEN)
BE42: 4C 65 FF >45            JMP   MON       
BE45: 4C 65 FF >46            JMP   MON       
BE48: 65 FF    >47            DA    MON       
               >48  
BE4A: 00 00 00 >49            DS    $B6,0     
...
BEF9: 00 00 00 00
BEFD: 00 00 00
               >50  
               >51   ********************************
               >52  
               >53   NBUF2                    
BF00: 00 00 00 >54            DS    $56       
...
BF4F: 00 00 00 00
BF53: 00 00 00
                22           PUT   VARIABLES 
               >1   
               >2   
               >3    ********************************
               >4    *                              *
               >5    *      Tables et valeurs       *
               >6    *                              *
               >7    ********************************
               >8   
               >9    *------------------------------*
               >10   *       Paramètres RWTS        *
               >11   *------------------------------*
               >12  
               >13   RWTS_SLOT16               ; slot*16 (slot 6 par défaut)
BF56: 60       >14            DFB   $60       
               >15   RWTS_DRIVE                ; numéro lecteur (1 par défaut)
BF57: 01       >16            DFB   1         
               >17   RWTS_OLD_DRV              ; ancien numéro de lecteur utilisé (1 par défaut)
BF58: 01       >18            DFB   1         
               >19   RWTS_CMD                  ; commande RDOS (read=1 par défaut)
BF59: 01       >20            DFB   1         
               >21   RWTS_PISTE                ; piste
BF5A: 00       >22            DFB   0         
               >23   RWTS_SECTEUR              ; secteur
BF5B: 00       >24            DFB   0         
               >25   RWTS_BUFADR               ; adr implantation ($0800 pour SYSTEMBOOT)
BF5C: 00 08    >26            DA    $0800     
               >27   RWTS_DRV0TRK              ;
BF5E: 00       >28            DFB   0         
               >29   RWTS_ERRNUM               ; numéro erreur générée par RWTS
BF5F: 00       >30            DFB   0         
               >31  
               >32  
               >33   *------------------------------*
               >34   *  Descriptif objet en cours   *
               >35   *------------------------------*
               >36  
               >37   OBJ_NOM                   ; nom par défaut boot. Taille max=24 caractères
BF60: D3 D9 D3 >38            ASC   "SYSTEMBOOT              "
BF63: D4 C5 CD C2
BF67: CF CF D4 A0
BF6B: A0 A0 A0 A0
BF6F: A0 A0 A0 A0
BF73: A0 A0 A0 A0
BF77: A0
               >39   OBJ_TYPE                  ; boot par défaut sur fichier
BF78: D4       >40            ASC   "T"
               >41   OBJ_NBR_BLOC              ; nbr de bloc utilisé (SYSTEMBOOT=1 bloc)
BF79: 01       >42            DFB   01        
               >43   OBJ_ADR                   ; adresse implantation objet
BF7A: 00 00    >44            DA    0         
               >45   OBJ_LEN                   ; longueur objet
BF7C: 00 00    >46            DA    0         
               >47   OBJ_1ER_BLOC              ; numéro bloc (bloc 32 par défaut=P$02 S$00)
BF7E: 20 00    >48            DA    32        
               >49  
               >50   VAL_MSWAIT                ; délai MSWAIT (dans RWTS.SUBS)
BF80: 0F       >51            DFB   $0F       
               >52  
               >53  
               >54   *------------------------------*
               >55   *          JMP figés           *
               >56   *------------------------------*
               >57  
               >58   GO_AFF_ERR                ; affiche message d'erreur dos
BF81: 4C 58 B8 >59            JMP   AFFICHE_ERR
               >60   GO_READY_CAT              ; pointe sur bloc 16 (P$01 S$00)
BF84: 4C F7 B8 >61            JMP   READY_CATALOG
               >62   GO_LOAD_BLOC              ; charge un bloc
BF87: 4C 04 B8 >63            JMP   LOAD_BLOC 
               >64   GO_RECALLD                ; &RECALL direct
BF8A: 4C 4A B5 >65            JMP   RECALLD   
               >66   GO_STORED                 ; &STORE direct
BF8D: 4C 42 B5 >67            JMP   STORED    
               >68   GO_DELD                   ; &DEL direct
BF90: 4C CD B5 >69            JMP   DELD      
               >70   GO_CATD                   ; &CAT direct
BF93: 4C 7F B3 >71            JMP   CATD      
               >72  
               >73  
               >74   *------------------------------*
               >75   *          Variables           *
               >76   *------------------------------*
               >77  
               >78   NEXT_1ER_BLOC             ; numéro 1er bloc objet suivant
BF96: 00 00    >79            DA    0         
               >80   HBF98                     ; ?
BF98: 00       >81            DFB   0         
               >82   HBF99                     ; ?
BF99: 00       >83            DFB   0         
               >84   HBF9A                     ; ?
BF9A: 00       >85            DFB   0         
               >86   VALEUR                    ; %10000000 = cherche place vide
BF9B: 00       >87            DFB   0          ; %00000000 = cherche nom objet
               >88                             ; ou sauvegarde acc pendant PRINT/READ
               >89   HBF9C                     ; ?
BF9C: 00       >90            DFB   0         
               >91   PTR_BASIC                 ; sauvegarde des pointeurs BASIC (pour chain)
BF9D: 00 00 00 >92            DS    8,0       
BFA0: 00 00 00 00
BFA4: 00
               >93   VAL_BLOCNUM               ; numéro bloc en cours (pour traitement read)
BFA5: 00 00    >94            DA    0         
               >95   CPT_NBR_BLOC              ; compteur nbr de bloc (save_bloc, read)
BFA7: 01       >96            DFB   1         
               >97   IND_BUF                   ; indice buffer pendant print/read
BFA8: 00       >98            DFB   0         
               >99   READ_OR_PRINT             ; flag différenciant les 2 traitements
BFA9: 00       >100           DFB   0          ; %10000000 = print et %00000000 = read
               >101  VECT_CSW_KSW              ; sauvegarde CSW/KSW
BFAA: 00 00 00 >102           DS    4,0       
BFAD: 00
               >103 
               >104 
               >105  *------------------------------*
               >106  *                              *
               >107  *  Interleaving RWTS RDOS 3.3  *
               >108  *                              *
               >109  *------------------------------*
               >110 
               >111  INTRLEAV                 
BFAE: 00 08 01 >112           HEX   00080109020A030B040C050D060E070F
BFB1: 09 02 0A 03
BFB5: 0B 04 0C 05
BFB9: 0D 06 0E 07
BFBD: 0F
               >113 
BFBE: 00 00 00 >114           DS    \         
...
BFF9: 00 00 00 00
BFFD: 00 00 00


:asm
                1   
                23  
                24            SAV   OBJ/RDOS.SSI

Object saved as OBJ/RDOS.SSI,A$B300,L$0D00,BIN

 
 
--End assembly, 3328 bytes, Errors: 0


Symbol table - alphabetical order:

?  A2H     =$3F     ?  A2L     =$3E     ?  A3H     =$41     ?  A3L     =$40
?  A4H     =$43     ?  A4L     =$42     ?  ADDON   =$D998      AFFICHE_ERR=$B858
   ALLDONE =$BA87   ?  ANL_CPT =$ED     ?  ARG     =$A5     ?  ARYTAB  =$6B
?  AUX     =$C055   ?  AUXMOVE =$C311   ?  AYINT   =$E10C      BAD_DRIVE=$BA96
?  BASCALC =$FBC1   ?  BASH    =$29        BASIC   =$E000      BASIC2  =$E003
   BASL    =$28     ?  BELL    =$FF3A      BELL2   =$FBE4   ?  BLTU2   =$D39A
   BUFADR  =$3E        BUFFER1 =$B100      BUFFER2 =$B200   ?  BUTTN0  =$C061
?  BUTTN1  =$C062      CAT     =$B375      CATD    =$B37F   ?  CH      =$24
   CHARGET =$B1        CHARGOT =$B7        CHKCOM  =$DEBE      CHKPOS  =$BCEA
   CHKPOS2 =$BCED      CHKSTR  =$DD6C      CHK_APLSFT=$B672      CHK_SPACE=$B90B
   CHK_TYPE=$B41C      CLEARC  =$D66C   ?  CMDCPT  =$EC        CMD_BLOC=$B806
   CMD_BLOCD=$B80A   ?  COLOR   =$30        COMMANDES=$B341      COUNT   =$26
   COUT    =$FDED   ?  COUT1   =$FDF0      CPT_NBR_BLOC=$BFA7      CRCTVOL =$BAC1
   CRDO    =$DAFB   ?  CROUT   =$FD8E      CSUM    =$27        CSWH    =$37
   CSWL    =$36     ?  CURADR  =$EE        CURLIN  =$75        CURTRK  =$0478
?  CV      =$25        D       =$B620      DEF     =$B560      DEL     =$B5CA
   DELD    =$B5CD      DRIVNO  =$35     ?  DSCLEN  =$8F        END     =$B5C5
   ERRFLG  =$D8     ?  ERRNUM  =$DE        ERRORN  =$D412   ?  FAC     =$9D
   FACMO   =$A0     ?  FACSGN  =$A2     ?  FADDT   =$E7C1      FINI    =$BADE
   FIN_CAT =$B701   ?  FLO2    =$EBA0   ?  FMULTT  =$E982   ?  FOUT    =$ED34
?  FREFAC  =$E600   ?  FRETOP  =$6F        FRMEVL  =$DD7B      FRMNUM  =$DD67
?  GARBAG  =$E484   ?  GBASCALC=$F847   ?  GBASH   =$27     ?  GBASL   =$26
   GETADR  =$E752      GETBYT  =$E6F8   ?  GETSPA  =$E452      GET_NAME=$B7BA
   GET_NUM =$B63D      GET_VAL =$B7F9      GET_VALD=$B7FC   ?  GIVAYF  =$E2F2
   GOTO    =$B475      GO_AFF_ERR=$BF81   ?  GO_CATD =$BF93   ?  GO_DELD =$BF90
?  GO_LOAD_BLOC=$BF87   ?  GO_READY_CAT=$BF84   ?  GO_RECALLD=$BF8A      GO_RTS  =$B433
   GO_RTS2 =$B68C      GO_RWTS:=$B82F   ?  GO_STORED=$BF8D   ?  HANDLERR=$F2E9
?  HBF98   =$BF98   ?  HBF99   =$BF99   ?  HBF9A   =$BF9A   ?  HBF9C   =$BF9C
?  HGR     =$F3F2   ?  HIGHDS  =$94     ?  HIGHTR  =$96        HNDLERR =$BA8B
?  HOME    =$FC58      HOT_BASIC=$B66C   ?  IDENTGS =$FE1F      IDX     =$26
?  IN      =$FE8B   ?  INDEX   =$5E        IND_BUF =$BFA8   ?  INIT    =$FB2F
?  INLINE  =$D52C      INPRT   =$ED19      INTRLEAV=$BFAE   ?  INVERSE =$F277
?  INVFLG  =$32        IOBPH   =$49        IQERR   =$E199      ISTHERE =$BCE6
?  KEY     =$C000      KSWH    =$39        KSWL    =$38        L1      =$BB69
   L10     =$BC4D      L11     =$BC57      L12     =$BC62      L13     =$BC6F
   L14     =$BC77      L15     =$BC89      L16     =$BC93      L17     =$BCBC
   L18     =$BCC1      L19     =$BCC7      L2      =$BBDF      L20     =$BCCC
   L21     =$BCFE   ?  L22     =$BD01      L3      =$BBE9      L4      =$BBF4
   L5      =$BC02      L6      =$BC13      L7      =$BC23      L8      =$BC2D
   L9      =$BC37      LAST    =$26        LC088   =$C088      LC089   =$C089
   LC08C   =$C08C      LC08D   =$C08D      LC08E   =$C08E      LC08F   =$C08F
   LEN     =$B5E9      LINKSET =$D4F2      LINNUM  =$50        LINPRT  =$ED24
   LISTE_ERR=$B88A      LOAD    =$B3AA      LOAD_BLOC=$B804      LOAD_CAT_BLOC=$B69F
   LOAD_OBJ=$B434      LOAD_PRG_BAS=$B3B6      LOAD_PRG_BAS2=$B40B   ?  LOWTR   =$9B
?  MASK    =$2E        MEMSIZ  =$73        MODULE  =$B381      MON     =$FF65
?  MONZ    =$FF69   ?  MOVAF   =$EB63      MOVEHEAD=$BCA9   ?  MOVFM   =$EAF9
?  MOVSTR  =$E5E2      MSWAIT  =$BCFB      NBUF1   =$BE00      NBUF2   =$BF00
   NEW     =$B64E      NEW2    =$B65C      NEWCMD  =$D64B      NEWSTT  =$D7D2
   NEW_VECT=$B72A      NEXT_1ER_BLOC=$BF96      NEXT_CMD=$B628      NIBL    =$BD1F
?  NORMAL  =$F273   ?  NOTRACE =$F26F      OBJ_1ER_BLOC=$BF7E      OBJ_ADR =$BF7A
   OBJ_LEN =$BF7C      OBJ_NBR_BLOC=$BF79      OBJ_NOM =$BF60      OBJ_TYPE=$BF78
   OFFTBL  =$BD13      OLDBRK  =$FA59   ?  OLDRST  =$FF59   ?  ONERR   =$D8
   ONTBL   =$BD07      OTHER_CMD=$B31B      OUTDO   =$DB5C      OUTQUES =$DB5A
   OUTSP   =$DB57   ?  PADDL0  =$C064   ?  PADDL1  =$C065      PGEND   =$AF
   PHASEOFF=$C080      POST1   =$BBC4      POST2   =$BBC6      POSTNB16=$BBC2
?  PR      =$FE95   ?  PRBL2   =$F94A   ?  PRBLNK  =$F948   ?  PRBYTE  =$FDDA
   PRENIB1 =$BB04      PRENIB16=$BB00      PRENIB2 =$BB1E   ?  PRINC   =$C054
   PRINT   =$B588      PRINT_PTR=$B60E      PRINT_VIRGULE=$B61B      PRIOR   =$27
?  PRNTAX  =$F941   ?  PRNTFAC =$ED2E   ?  PRNTX   =$F944   ?  PRNTYX  =$F940
?  PROLOGP =$F832   ?  PTRGET  =$DFE3   ?  PTRIG   =$C070      PTR_BASIC=$BF9D
?  RD80COL =$C01F      RDADR16 =$BC42      RDADRX  =$BC9C      RDAFLD  =$BC6D
   RDASYN  =$BC46      RDASYN1 =$BC52      RDATA1  =$BBFF      RDATA2  =$BC11
?  RDAUX   =$C003      RDERR   =$BC40   ?  RDKEY   =$FD0C      RDOS_ERR=$B83E
   RDOS_VECT=$BE1A   ?  RDPRINC =$C002      RDRIGHT =$BA9E      READ    =$B59E
   READ16  =$BBDA      READD   =$B5A1      READY_CATALOG=$B8F7      READY_NXT_BLK=$B902
   READ_ERROR=$BA99      READ_OR_PRINT=$BFA9      RECALL  =$B547      RECALLD =$B54A
?  RESTART =$D43C      REST_CSW_KSW=$B70E      RSYNC   =$BBDC      RSYNC1  =$BBE4
   RTS0    =$BCFA      RUN     =$B3B0      RUNPROG =$D566      RWTS:   =$BA00
   RWTS_BUFADR=$BF5C      RWTS_CMD=$BF59      RWTS_DRIVE=$BF57      RWTS_DRV0TRK=$BF5E
   RWTS_ERRNUM=$BF5F      RWTS_OLD_DRV=$BF58      RWTS_PISTE=$BF5A      RWTS_SECTEUR=$BF5B
   RWTS_SLOT16=$BF56      S       =$B62E      SAVE    =$B4AA      SAVE_1ER_BLOC=$B8FB
   SAVE_CSW_KSW=$B703      SAVE_OBJ=$B4CB      SECFND  =$2D        SEEKABS =$BC9E
   SEEKCNT =$04F8      SEEK_FREE=$B692      SEEK_NAME=$B68D      SEEK_NAME2=$B6C3
   SEEK_NEXT=$B6DA      SEEK_OPT=$B6A2   ?  SETCOL  =$F864   ?  SETINV  =$FE80
?  SETKBD  =$FE89   ?  SETNORM =$FE84   ?  SETVID  =$FE93      SET_PRT_VECT=$B719
   SET_READ_VECT=$B71C      SIGN_RDOS=$B3A6      SKTOKEN =$B300      SLOTABS =$0678
   SLOTEMP =$2B        SLOTZ   =$27     ?  SPEAK   =$C030   ?  SPEEDZ  =$F1
?  STAT    =$11        STORE   =$B531   ?  STORE80 =$C018      STORED  =$B542
?  STREND  =$6D     ?  STRLIT  =$E3E7   ?  STROBE  =$C010   ?  STROUT  =$DB3A
?  STRPRT  =$DB3D      STXTPT  =$D697   ?  SYNERR  =$DEC9   ?  TABV    =$FB5B
   TEMPPT  =$52        TEMPST  =$55     ?  TEXT    =$F399      TRANS_6_2=$BD96
   TRKCNT  =$26        TRKFND  =$2E        TRKN    =$2A        TRT_FIN =$B765
   TRT_IN  =$B76D      TRT_IN_OUT=$B732   ?  TRT_OUT =$B73E      TRT_READ_OUT=$B7B2
   TRYADR  =$BA68      TRYADR2 =$BA70      TRYTRK2 =$BA63   ?  TXTPTR  =$B8
   TXTTAB  =$67        USR     =$B683      VALEUR  =$BF9B      VAL_BLOCNUM=$BFA5
   VAL_MSWAIT=$BF80   ?  VARNAM  =$82     ?  VARPNT  =$83        VARTAB  =$69
   VECT_CSW_KSW=$BFAA   ?  VTAB    =$FC22      WAIT    =$FCA8      WDATA0  =$BB66
   WDATA2  =$BB7E      WEXIT   =$BBB4   ?  WNDBTM  =$23     ?  WNDLFT  =$20
?  WNDTOP  =$22     ?  WNDWDTH =$21        WNIBL   =$BBBB      WNIBL7  =$BBB9
   WNIBL9  =$BBB8      WRIT    =$BAE4      WRITE16 =$BB2A      WRITE_PROTECT=$BA93
   WSYNC   =$BB4A   ?  WTAUX   =$C005      WTEMP   =$26     ?  WTPRINC =$C004
?  XFER    =$C314  


Symbol table - numerical order:

?  STAT    =$11     ?  WNDLFT  =$20     ?  WNDWDTH =$21     ?  WNDTOP  =$22
?  WNDBTM  =$23     ?  CH      =$24     ?  CV      =$25     ?  GBASL   =$26
   WTEMP   =$26        IDX     =$26        COUNT   =$26        LAST    =$26
   TRKCNT  =$26     ?  GBASH   =$27        SLOTZ   =$27        CSUM    =$27
   PRIOR   =$27        BASL    =$28     ?  BASH    =$29        TRKN    =$2A
   SLOTEMP =$2B        SECFND  =$2D     ?  MASK    =$2E        TRKFND  =$2E
?  COLOR   =$30     ?  INVFLG  =$32        DRIVNO  =$35        CSWL    =$36
   CSWH    =$37        KSWL    =$38        KSWH    =$39     ?  A2L     =$3E
   BUFADR  =$3E     ?  A2H     =$3F     ?  A3L     =$40     ?  A3H     =$41
?  A4L     =$42     ?  A4H     =$43        IOBPH   =$49        LINNUM  =$50
   TEMPPT  =$52        TEMPST  =$55     ?  INDEX   =$5E        TXTTAB  =$67
   VARTAB  =$69     ?  ARYTAB  =$6B     ?  STREND  =$6D     ?  FRETOP  =$6F
   MEMSIZ  =$73        CURLIN  =$75     ?  VARNAM  =$82     ?  VARPNT  =$83
?  DSCLEN  =$8F     ?  HIGHDS  =$94     ?  HIGHTR  =$96     ?  LOWTR   =$9B
?  FAC     =$9D        FACMO   =$A0     ?  FACSGN  =$A2     ?  ARG     =$A5
   PGEND   =$AF        CHARGET =$B1        CHARGOT =$B7     ?  TXTPTR  =$B8
   ERRFLG  =$D8     ?  ONERR   =$D8     ?  ERRNUM  =$DE     ?  CMDCPT  =$EC
?  ANL_CPT =$ED     ?  CURADR  =$EE     ?  SPEEDZ  =$F1        CURTRK  =$0478
   SEEKCNT =$04F8      SLOTABS =$0678      BUFFER1 =$B100      BUFFER2 =$B200
   SKTOKEN =$B300      OTHER_CMD=$B31B      COMMANDES=$B341      CAT     =$B375
   CATD    =$B37F      MODULE  =$B381      SIGN_RDOS=$B3A6      LOAD    =$B3AA
   RUN     =$B3B0      LOAD_PRG_BAS=$B3B6      LOAD_PRG_BAS2=$B40B      CHK_TYPE=$B41C
   GO_RTS  =$B433      LOAD_OBJ=$B434      GOTO    =$B475      SAVE    =$B4AA
   SAVE_OBJ=$B4CB      STORE   =$B531      STORED  =$B542      RECALL  =$B547
   RECALLD =$B54A      DEF     =$B560      PRINT   =$B588      READ    =$B59E
   READD   =$B5A1      END     =$B5C5      DEL     =$B5CA      DELD    =$B5CD
   LEN     =$B5E9      PRINT_PTR=$B60E      PRINT_VIRGULE=$B61B      D       =$B620
   NEXT_CMD=$B628      S       =$B62E      GET_NUM =$B63D      NEW     =$B64E
   NEW2    =$B65C      HOT_BASIC=$B66C      CHK_APLSFT=$B672      USR     =$B683
   GO_RTS2 =$B68C      SEEK_NAME=$B68D      SEEK_FREE=$B692      LOAD_CAT_BLOC=$B69F
   SEEK_OPT=$B6A2      SEEK_NAME2=$B6C3      SEEK_NEXT=$B6DA      FIN_CAT =$B701
   SAVE_CSW_KSW=$B703      REST_CSW_KSW=$B70E      SET_PRT_VECT=$B719      SET_READ_VECT=$B71C
   NEW_VECT=$B72A      TRT_IN_OUT=$B732   ?  TRT_OUT =$B73E      TRT_FIN =$B765
   TRT_IN  =$B76D      TRT_READ_OUT=$B7B2      GET_NAME=$B7BA      GET_VAL =$B7F9
   GET_VALD=$B7FC      LOAD_BLOC=$B804      CMD_BLOC=$B806      CMD_BLOCD=$B80A
   GO_RWTS:=$B82F      RDOS_ERR=$B83E      AFFICHE_ERR=$B858      LISTE_ERR=$B88A
   READY_CATALOG=$B8F7      SAVE_1ER_BLOC=$B8FB      READY_NXT_BLK=$B902      CHK_SPACE=$B90B
   RWTS:   =$BA00      TRYTRK2 =$BA63      TRYADR  =$BA68      TRYADR2 =$BA70
   ALLDONE =$BA87      HNDLERR =$BA8B      WRITE_PROTECT=$BA93      BAD_DRIVE=$BA96
   READ_ERROR=$BA99      RDRIGHT =$BA9E      CRCTVOL =$BAC1      FINI    =$BADE
   WRIT    =$BAE4      PRENIB16=$BB00      PRENIB1 =$BB04      PRENIB2 =$BB1E
   WRITE16 =$BB2A      WSYNC   =$BB4A      WDATA0  =$BB66      L1      =$BB69
   WDATA2  =$BB7E      WEXIT   =$BBB4      WNIBL9  =$BBB8      WNIBL7  =$BBB9
   WNIBL   =$BBBB      POSTNB16=$BBC2      POST1   =$BBC4      POST2   =$BBC6
   READ16  =$BBDA      RSYNC   =$BBDC      L2      =$BBDF      RSYNC1  =$BBE4
   L3      =$BBE9      L4      =$BBF4      RDATA1  =$BBFF      L5      =$BC02
   RDATA2  =$BC11      L6      =$BC13      L7      =$BC23      L8      =$BC2D
   L9      =$BC37      RDERR   =$BC40      RDADR16 =$BC42      RDASYN  =$BC46
   L10     =$BC4D      RDASYN1 =$BC52      L11     =$BC57      L12     =$BC62
   RDAFLD  =$BC6D      L13     =$BC6F      L14     =$BC77      L15     =$BC89
   L16     =$BC93      RDADRX  =$BC9C      SEEKABS =$BC9E      MOVEHEAD=$BCA9
   L17     =$BCBC      L18     =$BCC1      L19     =$BCC7      L20     =$BCCC
   ISTHERE =$BCE6      CHKPOS  =$BCEA      CHKPOS2 =$BCED      RTS0    =$BCFA
   MSWAIT  =$BCFB      L21     =$BCFE   ?  L22     =$BD01      ONTBL   =$BD07
   OFFTBL  =$BD13      NIBL    =$BD1F      TRANS_6_2=$BD96      NBUF1   =$BE00
   RDOS_VECT=$BE1A      NBUF2   =$BF00      RWTS_SLOT16=$BF56      RWTS_DRIVE=$BF57
   RWTS_OLD_DRV=$BF58      RWTS_CMD=$BF59      RWTS_PISTE=$BF5A      RWTS_SECTEUR=$BF5B
   RWTS_BUFADR=$BF5C      RWTS_DRV0TRK=$BF5E      RWTS_ERRNUM=$BF5F      OBJ_NOM =$BF60
   OBJ_TYPE=$BF78      OBJ_NBR_BLOC=$BF79      OBJ_ADR =$BF7A      OBJ_LEN =$BF7C
   OBJ_1ER_BLOC=$BF7E      VAL_MSWAIT=$BF80      GO_AFF_ERR=$BF81   ?  GO_READY_CAT=$BF84
?  GO_LOAD_BLOC=$BF87   ?  GO_RECALLD=$BF8A   ?  GO_STORED=$BF8D   ?  GO_DELD =$BF90
?  GO_CATD =$BF93      NEXT_1ER_BLOC=$BF96   ?  HBF98   =$BF98   ?  HBF99   =$BF99
?  HBF9A   =$BF9A      VALEUR  =$BF9B   ?  HBF9C   =$BF9C      PTR_BASIC=$BF9D
   VAL_BLOCNUM=$BFA5      CPT_NBR_BLOC=$BFA7      IND_BUF =$BFA8      READ_OR_PRINT=$BFA9
   VECT_CSW_KSW=$BFAA      INTRLEAV=$BFAE   ?  KEY     =$C000   ?  RDPRINC =$C002
?  RDAUX   =$C003   ?  WTPRINC =$C004   ?  WTAUX   =$C005   ?  STROBE  =$C010
?  STORE80 =$C018   ?  RD80COL =$C01F   ?  SPEAK   =$C030   ?  PRINC   =$C054
?  AUX     =$C055   ?  BUTTN0  =$C061   ?  BUTTN1  =$C062   ?  PADDL0  =$C064
?  PADDL1  =$C065   ?  PTRIG   =$C070      PHASEOFF=$C080      LC088   =$C088
   LC089   =$C089      LC08C   =$C08C      LC08D   =$C08D      LC08E   =$C08E
   LC08F   =$C08F   ?  AUXMOVE =$C311   ?  XFER    =$C314   ?  BLTU2   =$D39A
   ERRORN  =$D412   ?  RESTART =$D43C      LINKSET =$D4F2   ?  INLINE  =$D52C
   RUNPROG =$D566      NEWCMD  =$D64B      CLEARC  =$D66C      STXTPT  =$D697
   NEWSTT  =$D7D2   ?  ADDON   =$D998      CRDO    =$DAFB   ?  STROUT  =$DB3A
?  STRPRT  =$DB3D      OUTSP   =$DB57      OUTQUES =$DB5A      OUTDO   =$DB5C
   FRMNUM  =$DD67      CHKSTR  =$DD6C      FRMEVL  =$DD7B      CHKCOM  =$DEBE
?  SYNERR  =$DEC9   ?  PTRGET  =$DFE3      BASIC   =$E000      BASIC2  =$E003
?  AYINT   =$E10C      IQERR   =$E199   ?  GIVAYF  =$E2F2   ?  STRLIT  =$E3E7
?  GETSPA  =$E452   ?  GARBAG  =$E484   ?  MOVSTR  =$E5E2   ?  FREFAC  =$E600
   GETBYT  =$E6F8      GETADR  =$E752   ?  FADDT   =$E7C1   ?  FMULTT  =$E982
?  MOVFM   =$EAF9   ?  MOVAF   =$EB63   ?  FLO2    =$EBA0      INPRT   =$ED19
   LINPRT  =$ED24   ?  PRNTFAC =$ED2E   ?  FOUT    =$ED34   ?  NOTRACE =$F26F
?  NORMAL  =$F273   ?  INVERSE =$F277   ?  HANDLERR=$F2E9   ?  TEXT    =$F399
?  HGR     =$F3F2   ?  PROLOGP =$F832   ?  GBASCALC=$F847   ?  SETCOL  =$F864
?  PRNTYX  =$F940   ?  PRNTAX  =$F941   ?  PRNTX   =$F944   ?  PRBLNK  =$F948
?  PRBL2   =$F94A      OLDBRK  =$FA59   ?  INIT    =$FB2F   ?  TABV    =$FB5B
?  BASCALC =$FBC1      BELL2   =$FBE4   ?  VTAB    =$FC22   ?  HOME    =$FC58
   WAIT    =$FCA8   ?  RDKEY   =$FD0C   ?  CROUT   =$FD8E   ?  PRBYTE  =$FDDA
   COUT    =$FDED   ?  COUT1   =$FDF0   ?  IDENTGS =$FE1F   ?  SETINV  =$FE80
?  SETNORM =$FE84   ?  SETKBD  =$FE89   ?  IN      =$FE8B   ?  SETVID  =$FE93
?  PR      =$FE95   ?  BELL    =$FF3A   ?  OLDRST  =$FF59      MON     =$FF65
?  MONZ    =$FF69

Object saved as OBJ/RDOS.SSI,A$B300,L$0D00,BIN
 
 
--End assembly, 3328 bytes, Errors: 0


Retour sommaire

hr Rdos 3.3


Source &CAT.



                1   
                2             ORG   $B100     
                3   
                4            USE   INCLUDE/INCLUDE.ROM
               >1   
               >2   
               >3    ********************************
               >4    *                              *
               >5    *  Adresses de référence ROM   *
               >6    *     (c)1994 by Deckard       *
               >7    *                              *
               >8    ********************************
               >9   
               >10   KEY      EQU   $C000      ; touche entrée
               >11   RDPRINC  EQU   $C002      ; lire en mem princ
               >12   RDAUX    EQU   $C003      ; lire en mem aux
               >13   WTPRINC  EQU   $C004      ; écrire en mem princ
               >14   WTAUX    EQU   $C005      ; écrire en mem aux
               >15   STROBE   EQU   $C010      ; remise à zéro saisie clavier
               >16   STORE80  EQU   $C018      ; état de 80STORE
               >17   RD80COL  EQU   $C01F      ; test pour savoir si 80c ou 40c
               >18   SPEAK    EQU   $C030     
               >19   PRINC    EQU   $C054     
               >20   AUX      EQU   $C055     
               >21   BUTTN0   EQU   $C061     
               >22   BUTTN1   EQU   $C062     
               >23   PADDL0   EQU   $C064      ; état manette 0
               >24   PADDL1   EQU   $C065      ; état manette 1
               >25   PTRIG    EQU   $C070      ; init manette
               >26   PHASEOFF EQU   $C080     
               >27   XFER     EQU   $C314     
               >28   AUXMOVE  EQU   $C311     
               >29   BLTU2    EQU   $D39A     
               >30   ERRORN   EQU   $D412     
               >31   RESTART  EQU   $D43C      ; fin traitement erreur
               >32   LINKSET  EQU   $D4F2      ; init pointeurs basic
               >33   RUNPROG  EQU   $D566      ; lance prog basic en ram
               >34   INLINE   EQU   $D52C     
               >35   NEWCMD   EQU   $D64B     
               >36   CLEARC   EQU   $D66C      ; fin inits pour prog basic
               >37   STXTPT   EQU   $D697     
               >38   NEWSTT   EQU   $D7D2     
               >39   ADDON    EQU   $D998      ; ajoute Y à l'adr de chargot
               >40   CRDO     EQU   $DAFB     
               >41   STROUT   EQU   $DB3A     
               >42   STRPRT   EQU   $DB3D      ; affiche une chaine
               >43   OUTQUES  EQU   $DB5A     
               >44   OUTSP    EQU   $DB57     
               >45   OUTDO    EQU   $DB5C      ; affiche caractère ACC 'x'
               >46   FRMNUM   EQU   $DD67      ; évalue expression et vérif nbre
               >47   CHKSTR   EQU   $DD6C      ; vérifie que c'est une chaine
               >48   FRMEVL   EQU   $DD7B     
               >49   CHKCOM   EQU   $DEBE      ; vérifie présence virgule
               >50   SYNERR   EQU   $DEC9      ; syntax error
               >51   PTRGET   EQU   $DFE3      ; positionne sur variable
               >52   BASIC    EQU   $E000     
               >53   BASIC2   EQU   $E003     
               >54   AYINT    EQU   $E10C     
               >55   IQERR    EQU   $E199      ; illegal quantity
               >56   GIVAYF   EQU   $E2F2      ; entier A,Y -> FAC
               >57   STRLIT   EQU   $E3E7     
               >58   GETSPA   EQU   $E452      ; fait la place pour une chaine
               >59   GARBAG   EQU   $E484      ; nettoyage chaines inutilisées
               >60   MOVSTR   EQU   $E5E2      ; recopie chaine pointée vers variable
               >61   FREFAC   EQU   $E600     
               >62   GETBYT   EQU   $E6F8      ; lecture nombre 1 octet -> X
               >63   GETADR   EQU   $E752      ; lecture nbr. In: Y (low) Acc (High)
               >64   FADDT    EQU   $E7C1      ; FAC + ARG -> FAC
               >65   FMULTT   EQU   $E982      ; FAC * ARG -> FAC
               >66   MOVFM    EQU   $EAF9      ; A(-),Y(+) ptr flottant cond -> FAC
               >67   MOVAF    EQU   $EB63      ; FAC -> ARG
               >68   FLO2     EQU   $EBA0      ; routine de LINPRT
               >69   INPRT    EQU   $ED19     
               >70   LINPRT   EQU   $ED24      ; affichage nombre en décimal
               >71   PRNTFAC  EQU   $ED2E      ; affiche FAC
               >72   FOUT     EQU   $ED34      ; converti FAC en 1 chaine
               >73   NOTRACE  EQU   $F26F     
               >74   NORMAL   EQU   $F273      ; mode normal
               >75   INVERSE  EQU   $F277      ; mode inverse
               >76   HANDLERR EQU   $F2E9      ; traitement ON ERR
               >77   TEXT     EQU   $F399      ; mode TEXT
               >78   HGR      EQU   $F3F2     
               >79   PROLOGP  EQU   $F832     
               >80   SETCOL   EQU   $F864      ; fixe couleur
               >81   GBASCALC EQU   $F847      ; calcul adresse ligne
               >82   PRNTYX   EQU   $F940     
               >83   PRNTAX   EQU   $F941     
               >84   PRNTX    EQU   $F944     
               >85   PRBLNK   EQU   $F948      ; affiche 3 espaces
               >86   PRBL2    EQU   $F94A      ; affiche le nb d'espace donné par X
               >87   OLDBRK   EQU   $FA59     
               >88   INIT     EQU   $FB2F     
               >89   TABV     EQU   $FB5B      ; position curseur
               >90   BASCALC  EQU   $FBC1     
               >91   BELL2    EQU   $FBE4     
               >92   VTAB     EQU   $FC22      ; Positionne pour affichage text
               >93   HOME     EQU   $FC58      ; nettoie écran text
               >94   WAIT     EQU   $FCA8      ; délai attente
               >95   RDKEY    EQU   $FD0C      ; lecture clavier
               >96   CROUT    EQU   $FD8E      ; affiche retour chariot
               >97   PRBYTE   EQU   $FDDA     
               >98   COUT     EQU   $FDED      ; affiche caractère ACC "x"
               >99   COUT1    EQU   $FDF0      ; sortie normale CSW
               >100  IDENTGS  EQU   $FE1F      ; routine identifiant un IIGS
               >101  SETINV   EQU   $FE80      ; inverse
               >102  SETNORM  EQU   $FE84      ; normal
               >103  SETKBD   EQU   $FE89     
               >104  SETVID   EQU   $FE93     
               >105  IN       EQU   $FE8B      ; IN#
               >106  PR       EQU   $FE95      ; PR#
               >107  BELL     EQU   $FF3A      ; bip erreur
               >108  OLDRST   EQU   $FF59     
               >109  MON      EQU   $FF65     
               >110  MONZ     EQU   $FF69      ; call -151
                5            USE   INCLUDE/INCLUDE.PAGE0
               >1   
               >2    ********************************
               >3    *                              *
               >4    * Adresses de référence page 0 *
               >5    *     (c)1994 by Deckard       *
               >6    *                              *
               >7    ********************************
               >8   
               >9   
               >10   STAT     EQU   $11        ; flags dernière opération sur FAC
               >11   WNDLFT   EQU   $20        ; marge gauche
               >12   WNDWDTH  EQU   $21        ; largeur
               >13   WNDTOP   EQU   $22        ; marge haute
               >14   WNDBTM   EQU   $23        ; marge basse
               >15   CH       EQU   $24        ; position horizontale curseur
               >16   CV       EQU   $25        ; position verticale curseur
               >17   GBASL    EQU   $26        ; adr low ligne calculée par GBASCALC
               >18   GBASH    EQU   $27        ; adr high ligne calculée par GBASCALC
               >19   BASL     EQU   $28        ;
               >20   BASH     EQU   $29        ;
               >21   MASK     EQU   $2E        ; parité: 0F (ligne paire), F0 (ligne impaire)
               >22   COLOR    EQU   $30        ; couleur après SETCOL ($F864)
               >23   INVFLG   EQU   $32        ; #$3F=inverse  #$FF=normal
               >24   CSWL     EQU   $36        ; sortie de caractères low
               >25   CSWH     EQU   $37        ; sortie de caractères high
               >26   KSWL     EQU   $38        ; entrée de caractères low
               >27   KSWH     EQU   $39        ; entrée de caractères high
               >28   A2L      EQU   $3E        ; adr travail moniteur
               >29   A2H      EQU   $3F        ; adr travail moniteur
               >30   A3L      EQU   $40        ; adr travail moniteur
               >31   A3H      EQU   $41        ; adr travail moniteur
               >32   A4L      EQU   $42        ; adr travail moniteur
               >33   A4H      EQU   $43        ; adr travail moniteur
               >34   LINNUM   EQU   $50       
               >35   TEMPPT   EQU   $52       
               >36   TEMPST   EQU   $55       
               >37   INDEX    EQU   $5E       
               >38   TXTTAB   EQU   $67        ; adr début texte basic
               >39   VARTAB   EQU   $69        ; adr début des variables simples
               >40   ARYTAB   EQU   $6B        ; adr début des variables dimensionnées
               >41   STREND   EQU   $6D        ; début de l'espace libre
               >42   FRETOP   EQU   $6F        ; et $70
               >43   MEMSIZ   EQU   $73        ; et $74
               >44   CURLIN   EQU   $75       
               >45   VARNAM   EQU   $82        ; infos variable après PTRGET
               >46   VARPNT   EQU   $83        ; utilisé par PTRGET
               >47   DSCLEN   EQU   $8F       
               >48   HIGHDS   EQU   $94       
               >49   HIGHTR   EQU   $96       
               >50   LOWTR    EQU   $9B       
               >51   FAC      EQU   $9D       
               >52   FACMO    EQU   $A0        ; milieu de FAC (used by STRPRT)
               >53   FACSGN   EQU   $A2        ; signe FAC
               >54   ARG      EQU   $A5       
               >55   PGEND    EQU   $AF        ; fin du texte basic
               >56   CHARGET  EQU   $00B1      ; incrémente et lit caractère
               >57   CHARGOT  EQU   $00B7      ; lecture caractère only
               >58   TXTPTR   EQU   $B8        ; pointeur texte
               >59   ERRFLG   EQU   $D8        ; flag ONERR
               >60   ERRNUM   EQU   $DE        ; numéro erreur (mli, ...)
               >61   ONERR    EQU   $D8        ; POUR ON ERR GOTO...
               >62   CMDCPT   EQU   $EC        ; numéro de la cmd-1 dans la liste
               >63   ANL_CPT  EQU   $ED        ; numéro de liste
               >64   CURADR   EQU   $EE        ; et $EF adresses de la liste
               >65   SPEEDZ   EQU   $F1       
                6   
                7    ********************************
                8    *                              *
                9    *    Module traitement &CAT    *
                10   *           RDOS SSI           *
                11   *    (s)1989-97 by Deckard     *
                12   *                              *
                13   ********************************
                14  
                15   BUFADR   EQU   $3E        ; pointeur adr implantation bloc chargé
                16  
                17   OBJ_1ER_BLOC EQU $BF7E    ; low 1er bloc d'un objet
                18   GO_READY_CAT EQU $BF84    ; pointe sur bloc 16 (P$01 S$00)
                19   GO_LOAD_BLOC EQU $BF87    ; charge un bloc
                20   VALEUR   EQU   $BF9B      ; nbr de noms avant la pause
                21  
                22   *------------------------------*
                23   *    Signature module RDOS     *
                24   *------------------------------*
                25  
B100: 52 44 4F  26   RDOS     ASC   'RDOS'
B103: 53
                27  
                28   ********************************
                29  
B104: A9 89     30            LDA   #<LIGNE    ; affiche colonnage catalog
B106: A0 B1     31            LDY   #>LIGNE   
B108: 20 3A DB  32            JSR   STROUT    
                33  
B10B: 20 84 BF  34            JSR   GO_READY_CAT ; positionne sur catalog
B10E: 20 83 B1  35            JSR   INIT_VALEUR ; 18 noms avant la pause
                36  
                37   NXT_BLOC_CAT             
B111: 20 87 BF  38            JSR   GO_LOAD_BLOC ; charge un bloc catalog
                39  
                40   * Affichage du descriptif d'un objet
                41  
                42   PRINT_DESC               
B114: A0 18     43            LDY   #24       
B116: B1 3E     44            LDA   (BUFADR),Y
B118: F0 60     45            BEQ   :1         ; pas d'objet
                46  
B11A: 20 5C DB  47            JSR   OUTDO      ; affiche type
B11D: 20 57 DB  48            JSR   OUTSP      ; et un espace
B120: C8        49            INY             
                50  
B121: B1 3E     51            LDA   (BUFADR),Y
B123: AA        52            TAX              ; low=nbr bloc
B124: A9 00     53            LDA   #0         ; high=0
B126: 20 BF B1  54            JSR   PRINT_NBR  ; affiche nbr de blocs
B129: 20 57 DB  55            JSR   OUTSP      ; et un espace
                56  
B12C: A0 00     57            LDY   #0        
B12E: B1 3E     58   :5       LDA   (BUFADR),Y ; affiche le nom de l'objet
B130: 29 7F     59            AND   #%01111111
B132: D0 0B     60            BNE   :2         ; objet ok
                61  
                62                             ; 1er caractère=$80 -> objet supprimé
B134: B9 B2 B1  63   :4       LDA   NOTINUSE,Y ; affiche <not in use>
B137: F0 19     64            BEQ   :3         ; fin de chaine
                65  
B139: 20 5C DB  66            JSR   OUTDO     
B13C: C8        67            INY             
B13D: D0 F5     68            BNE   :4        
                69  
B13F: 20 5C DB  70   :2       JSR   OUTDO      ; affiche caractère 1 à 1
B142: C8        71            INY             
B143: C0 18     72            CPY   #24        ; jusqu'au 24ième
B145: 90 E7     73            BCC   :5        
                74  
B147: A0 1C     75            LDY   #28       
B149: B1 3E     76            LDA   (BUFADR),Y ; taille low
B14B: AA        77            TAX             
B14C: C8        78            INY             
B14D: B1 3E     79            LDA   (BUFADR),Y ; taille high
B14F: 20 24 ED  80            JSR   LINPRT     ; affiche taille objet
                81  
B152: A9 24     82   :3       LDA   #36       
B154: 85 24     83            STA   CH         ; attn: ne fonctionne pas en 80c!
                84  
B156: A0 1E     85            LDY   #30       
B158: B1 3E     86            LDA   (BUFADR),Y ; 1er bloc low
B15A: AA        87            TAX             
B15B: C8        88            INY             
B15C: B1 3E     89            LDA   (BUFADR),Y ; 1er bloc high
B15E: 20 BF B1  90            JSR   PRINT_NBR  ; afficher 1er bloc de l'objet
B161: 20 FB DA  91            JSR   CRDO       ; retour chariot
B164: 20 7B B1  92            JSR   DEC_VALEUR ; test si pause
                93  
B167: A5 3E     94            LDA   BUFADR     ; positionne sur le descriptif objet suivant
B169: 18        95            CLC             
B16A: 69 20     96            ADC   #32       
B16C: 85 3E     97            STA   BUFADR     ; low
B16E: D0 A4     98            BNE   PRINT_DESC ; on n'a pas fini de traiter le bloc
                99  
B170: EE 7E BF  100           INC   OBJ_1ER_BLOC ; high
                101 
B173: AD 7E BF  102           LDA   OBJ_1ER_BLOC ; a-t'on atteint la piste 2?
B176: C9 20     103           CMP   #<$0020    ; bloc 32
B178: D0 97     104           BNE   NXT_BLOC_CAT ; non->charge le bloc suivant
                105 
B17A: 60        106  :1       RTS             
                107 
                108 
                109  ********************************
                110  *                              *
                111  *  Routines traitement pause   *
                112  *                              *
                113  ********************************
                114 
                115  DEC_VALEUR               
B17B: CE 9B BF  116           DEC   VALEUR     ; un objet de moins avant la pause
B17E: D0 08     117           BNE   NO_PAUSE  
                118 
B180: 20 0C FD  119           JSR   RDKEY      ; attente touche
                120                            ; et réinit pour la prochaine
                121  INIT_VALEUR              
B183: A9 12     122           LDA   #18        ; 18 noms avant la pause
B185: 8D 9B BF  123           STA   VALEUR    
B188: 60        124  NO_PAUSE RTS             
                125 
                126 
                127  *------------------------------*
                128  *          Messages            *
                129  *------------------------------*
                130 
B189: 20 20 4C  131  LIGNE    ASC   '  LEN         -<NAME>-       LENGTH BLK'0D00
B18C: 45 4E 20 20
B190: 20 20 20 20
B194: 20 20 20 2D
B198: 3C 4E 41 4D
B19C: 45 3E 2D 20
B1A0: 20 20 20 20
B1A4: 20 20 4C 45
B1A8: 4E 47 54 48
B1AC: 20 42 4C 4B
B1B0: 0D 00
B1B2: 3C 4E 4F  132  NOTINUSE ASC   '<NOT IN USE>'00
B1B5: 54 20 49 4E
B1B9: 20 55 53 45
B1BD: 3E 00
                133 
                134 
                135  ********************************
                136  *                              *
                137  * Affiche un nombre de 2 bytes *
                138  *          en décimal          *
                139  *                              *
                140  ********************************
                141 
                142  * Le nombre affiché a systématiquement 3 digits
                143  * (on complètera avec des 0 pour les petits nbr).
                144  *
                145  * In: acc=high nbr
                146  *     X  =low nbr
                147 
B1BF: A8        148  PRINT_NBR TAY             ; sauve high
B1C0: D0 12     149           BNE   :1         ; si nbr>256 -> affiche tel quel (3 chiffres)
                150 
B1C2: A9 30     151           LDA   #'0'       ; complète avec zéro si nbr<10
B1C4: E0 0A     152           CPX   #10       
B1C6: B0 03     153           BCS   :2        
                154 
B1C8: 20 5C DB  155           JSR   OUTDO      ; ?'0'
                156 
B1CB: E0 64     157  :2       CPX   #100       ; complète avec zéro si nbr<100
B1CD: B0 03     158           BCS   :3        
                159 
B1CF: 20 5C DB  160           JSR   OUTDO      ; ?'0'
                161 
B1D2: A9 00     162  :3       LDA   #0        
B1D4: 4C 24 ED  163  :1       JMP   LINPRT     ; affiche nbr en décimal
                164 
B1D7: 00 00 00  165           DS    \
B1DA: 00 00 00 00
B1DE: 00 00 00 00
B1E2: 00 00 00 00
B1E6: 00 00 00 00
B1EA: 00 00 00 00
B1EE: 00 00 00 00
B1F2: 00 00 00 00
B1F6: 00 00 00 00
B1FA: 00 00 00 00
B1FE: 00 00
                166 
                167           SAV   OBJ/MODULE.CAT

Object saved as OBJ/MODULE.CAT,A$B100,L$0100,BIN

 
 
--End assembly, 256 bytes, Errors: 0


Symbol table - alphabetical order:

?  A2H     =$3F     ?  A2L     =$3E     ?  A3H     =$41     ?  A3L     =$40
?  A4H     =$43     ?  A4L     =$42     ?  ADDON   =$D998   ?  ANL_CPT =$ED
?  ARG     =$A5     ?  ARYTAB  =$6B     ?  AUX     =$C055   ?  AUXMOVE =$C311
?  AYINT   =$E10C   ?  BASCALC =$FBC1   ?  BASH    =$29     ?  BASIC   =$E000
?  BASIC2  =$E003   ?  BASL    =$28     ?  BELL    =$FF3A   ?  BELL2   =$FBE4
?  BLTU2   =$D39A      BUFADR  =$3E     ?  BUTTN0  =$C061   ?  BUTTN1  =$C062
   CH      =$24     ?  CHARGET =$B1     ?  CHARGOT =$B7     ?  CHKCOM  =$DEBE
?  CHKSTR  =$DD6C   ?  CLEARC  =$D66C   ?  CMDCPT  =$EC     ?  COLOR   =$30
?  COUT    =$FDED   ?  COUT1   =$FDF0      CRDO    =$DAFB   ?  CROUT   =$FD8E
?  CSWH    =$37     ?  CSWL    =$36     ?  CURADR  =$EE     ?  CURLIN  =$75
?  CV      =$25        DEC_VALEUR=$B17B   ?  DSCLEN  =$8F     ?  ERRFLG  =$D8
?  ERRNUM  =$DE     ?  ERRORN  =$D412   ?  FAC     =$9D     ?  FACMO   =$A0
?  FACSGN  =$A2     ?  FADDT   =$E7C1   ?  FLO2    =$EBA0   ?  FMULTT  =$E982
?  FOUT    =$ED34   ?  FREFAC  =$E600   ?  FRETOP  =$6F     ?  FRMEVL  =$DD7B
?  FRMNUM  =$DD67   ?  GARBAG  =$E484   ?  GBASCALC=$F847   ?  GBASH   =$27
?  GBASL   =$26     ?  GETADR  =$E752   ?  GETBYT  =$E6F8   ?  GETSPA  =$E452
?  GIVAYF  =$E2F2      GO_LOAD_BLOC=$BF87      GO_READY_CAT=$BF84   ?  HANDLERR=$F2E9
?  HGR     =$F3F2   ?  HIGHDS  =$94     ?  HIGHTR  =$96     ?  HOME    =$FC58
?  IDENTGS =$FE1F   ?  IN      =$FE8B   ?  INDEX   =$5E     ?  INIT    =$FB2F
   INIT_VALEUR=$B183   ?  INLINE  =$D52C   ?  INPRT   =$ED19   ?  INVERSE =$F277
?  INVFLG  =$32     ?  IQERR   =$E199   ?  KEY     =$C000   ?  KSWH    =$39
?  KSWL    =$38        LIGNE   =$B189   ?  LINKSET =$D4F2   ?  LINNUM  =$50
   LINPRT  =$ED24   ?  LOWTR   =$9B     ?  MASK    =$2E     ?  MEMSIZ  =$73
?  MON     =$FF65   ?  MONZ    =$FF69   ?  MOVAF   =$EB63   ?  MOVFM   =$EAF9
?  MOVSTR  =$E5E2   ?  NEWCMD  =$D64B   ?  NEWSTT  =$D7D2   ?  NORMAL  =$F273
   NOTINUSE=$B1B2   ?  NOTRACE =$F26F      NO_PAUSE=$B188      NXT_BLOC_CAT=$B111
   OBJ_1ER_BLOC=$BF7E   ?  OLDBRK  =$FA59   ?  OLDRST  =$FF59   ?  ONERR   =$D8
   OUTDO   =$DB5C   ?  OUTQUES =$DB5A      OUTSP   =$DB57   ?  PADDL0  =$C064
?  PADDL1  =$C065   ?  PGEND   =$AF     ?  PHASEOFF=$C080   ?  PR      =$FE95
?  PRBL2   =$F94A   ?  PRBLNK  =$F948   ?  PRBYTE  =$FDDA   ?  PRINC   =$C054
   PRINT_DESC=$B114      PRINT_NBR=$B1BF   ?  PRNTAX  =$F941   ?  PRNTFAC =$ED2E
?  PRNTX   =$F944   ?  PRNTYX  =$F940   ?  PROLOGP =$F832   ?  PTRGET  =$DFE3
?  PTRIG   =$C070   ?  RD80COL =$C01F   ?  RDAUX   =$C003      RDKEY   =$FD0C
?  RDOS    =$B100   ?  RDPRINC =$C002   ?  RESTART =$D43C   ?  RUNPROG =$D566
?  SETCOL  =$F864   ?  SETINV  =$FE80   ?  SETKBD  =$FE89   ?  SETNORM =$FE84
?  SETVID  =$FE93   ?  SPEAK   =$C030   ?  SPEEDZ  =$F1     ?  STAT    =$11
?  STORE80 =$C018   ?  STREND  =$6D     ?  STRLIT  =$E3E7   ?  STROBE  =$C010
   STROUT  =$DB3A   ?  STRPRT  =$DB3D   ?  STXTPT  =$D697   ?  SYNERR  =$DEC9
?  TABV    =$FB5B   ?  TEMPPT  =$52     ?  TEMPST  =$55     ?  TEXT    =$F399
?  TXTPTR  =$B8     ?  TXTTAB  =$67        VALEUR  =$BF9B   ?  VARNAM  =$82
?  VARPNT  =$83     ?  VARTAB  =$69     ?  VTAB    =$FC22   ?  WAIT    =$FCA8
?  WNDBTM  =$23     ?  WNDLFT  =$20     ?  WNDTOP  =$22     ?  WNDWDTH =$21
?  WTAUX   =$C005   ?  WTPRINC =$C004   ?  XFER    =$C314  


Symbol table - numerical order:

?  STAT    =$11     ?  WNDLFT  =$20     ?  WNDWDTH =$21     ?  WNDTOP  =$22
?  WNDBTM  =$23        CH      =$24     ?  CV      =$25     ?  GBASL   =$26
?  GBASH   =$27     ?  BASL    =$28     ?  BASH    =$29     ?  MASK    =$2E
?  COLOR   =$30     ?  INVFLG  =$32     ?  CSWL    =$36     ?  CSWH    =$37
?  KSWL    =$38     ?  KSWH    =$39     ?  A2L     =$3E        BUFADR  =$3E
?  A2H     =$3F     ?  A3L     =$40     ?  A3H     =$41     ?  A4L     =$42
?  A4H     =$43     ?  LINNUM  =$50     ?  TEMPPT  =$52     ?  TEMPST  =$55
?  INDEX   =$5E     ?  TXTTAB  =$67     ?  VARTAB  =$69     ?  ARYTAB  =$6B
?  STREND  =$6D     ?  FRETOP  =$6F     ?  MEMSIZ  =$73     ?  CURLIN  =$75
?  VARNAM  =$82     ?  VARPNT  =$83     ?  DSCLEN  =$8F     ?  HIGHDS  =$94
?  HIGHTR  =$96     ?  LOWTR   =$9B     ?  FAC     =$9D     ?  FACMO   =$A0
?  FACSGN  =$A2     ?  ARG     =$A5     ?  PGEND   =$AF     ?  CHARGET =$B1
?  CHARGOT =$B7     ?  TXTPTR  =$B8     ?  ERRFLG  =$D8     ?  ONERR   =$D8
?  ERRNUM  =$DE     ?  CMDCPT  =$EC     ?  ANL_CPT =$ED     ?  CURADR  =$EE
?  SPEEDZ  =$F1     ?  RDOS    =$B100      NXT_BLOC_CAT=$B111      PRINT_DESC=$B114
   DEC_VALEUR=$B17B      INIT_VALEUR=$B183      NO_PAUSE=$B188      LIGNE   =$B189
   NOTINUSE=$B1B2      PRINT_NBR=$B1BF      OBJ_1ER_BLOC=$BF7E      GO_READY_CAT=$BF84
   GO_LOAD_BLOC=$BF87      VALEUR  =$BF9B   ?  KEY     =$C000   ?  RDPRINC =$C002
?  RDAUX   =$C003   ?  WTPRINC =$C004   ?  WTAUX   =$C005   ?  STROBE  =$C010
?  STORE80 =$C018   ?  RD80COL =$C01F   ?  SPEAK   =$C030   ?  PRINC   =$C054
?  AUX     =$C055   ?  BUTTN0  =$C061   ?  BUTTN1  =$C062   ?  PADDL0  =$C064
?  PADDL1  =$C065   ?  PTRIG   =$C070   ?  PHASEOFF=$C080   ?  AUXMOVE =$C311
?  XFER    =$C314   ?  BLTU2   =$D39A   ?  ERRORN  =$D412   ?  RESTART =$D43C
?  LINKSET =$D4F2   ?  INLINE  =$D52C   ?  RUNPROG =$D566   ?  NEWCMD  =$D64B
?  CLEARC  =$D66C   ?  STXTPT  =$D697   ?  NEWSTT  =$D7D2   ?  ADDON   =$D998
   CRDO    =$DAFB      STROUT  =$DB3A   ?  STRPRT  =$DB3D      OUTSP   =$DB57
?  OUTQUES =$DB5A      OUTDO   =$DB5C   ?  FRMNUM  =$DD67   ?  CHKSTR  =$DD6C
?  FRMEVL  =$DD7B   ?  CHKCOM  =$DEBE   ?  SYNERR  =$DEC9   ?  PTRGET  =$DFE3
?  BASIC   =$E000   ?  BASIC2  =$E003   ?  AYINT   =$E10C   ?  IQERR   =$E199
?  GIVAYF  =$E2F2   ?  STRLIT  =$E3E7   ?  GETSPA  =$E452   ?  GARBAG  =$E484
?  MOVSTR  =$E5E2   ?  FREFAC  =$E600   ?  GETBYT  =$E6F8   ?  GETADR  =$E752
?  FADDT   =$E7C1   ?  FMULTT  =$E982   ?  MOVFM   =$EAF9   ?  MOVAF   =$EB63
?  FLO2    =$EBA0   ?  INPRT   =$ED19      LINPRT  =$ED24   ?  PRNTFAC =$ED2E
?  FOUT    =$ED34   ?  NOTRACE =$F26F   ?  NORMAL  =$F273   ?  INVERSE =$F277
?  HANDLERR=$F2E9   ?  TEXT    =$F399   ?  HGR     =$F3F2   ?  PROLOGP =$F832
?  GBASCALC=$F847   ?  SETCOL  =$F864   ?  PRNTYX  =$F940   ?  PRNTAX  =$F941
?  PRNTX   =$F944   ?  PRBLNK  =$F948   ?  PRBL2   =$F94A   ?  OLDBRK  =$FA59
?  INIT    =$FB2F   ?  TABV    =$FB5B   ?  BASCALC =$FBC1   ?  BELL2   =$FBE4
?  VTAB    =$FC22   ?  HOME    =$FC58   ?  WAIT    =$FCA8      RDKEY   =$FD0C
?  CROUT   =$FD8E   ?  PRBYTE  =$FDDA   ?  COUT    =$FDED   ?  COUT1   =$FDF0
?  IDENTGS =$FE1F   ?  SETINV  =$FE80   ?  SETNORM =$FE84   ?  SETKBD  =$FE89
?  IN      =$FE8B   ?  SETVID  =$FE93   ?  PR      =$FE95   ?  BELL    =$FF3A
?  OLDRST  =$FF59   ?  MON     =$FF65   ?  MONZ    =$FF69

Exemple de &CAT sur la face 1 de Pool Of Radiance: (pour stopper le programme, il suffit de faire un ctrl-C au démarrage!! puis de taper &CAT)

]&CAT
  LEN         -<NAME>-       LENGTH BLK
B 032 POOL APPLE SIDE A1 V1.1 8192  000
T 001 SYSTEMBOOT              256   032
B 004 ANIMATE00               928   033
B 004 ANIMATE01               963   037
B 003 BODY03                  552   041
B 003 BODY07                  558   044
B 003 BODY19                  546   047
B 008 CHARPIC00               2045  050
B 025 CHARPIC01               6216  058
B 006 CHARPIC02               1280  083
B 008 CHARPIC03               1920  089
B 015 CHARPIC04               3600  097
B 004 CHARPIC05               768   112
B 005 CHARPIC10               1024  116
B 005 CHARSET                 1024  121
B 018 COM.PREP                4365  126
B 001 COMPIC02                192   144
B 001 COMPIC03                192   145
B 001 COMPIC04                192   146
B 001 COMPIC05                192   147
B 001 COMPIC06                192   148
B 001 COMPIC07                192   149
B 002 COMPIC08                384   150
B 001 COMPIC09                192   152
B 001 COMPIC0B                192   153
B 001 COMPIC10                192   154
B 001 COMPIC21                192   155
B 004 COPYIT                  864   156
B 026 ECL12                   6642  160
B 030 ECL18                   7654  186
B 005 ECL1E                   1216  216
B 013 ECL64                   3326  221
B 003 ECL65                   751   234
B 012 GDRIVE00                3046  237
B 012 GDRIVE01                3034  249
B 005 GEO12                   1024  261
B 005 GEO18                   1024  266
B 005 GEO1F                   1024  271
B 002 HEAD06                  296   276
B 002 HEAD0D                  331   278
B 002 HEAD30                  281   280
B 014 INIT                    3536  282
B 002 IOBANK                  304   296
B 001 ITEMFILE04              16    298
B 001 ITEMFILE06              48    299
B 001 ITEMFILE08              48    300
B 001 ITEMFILE09              112   301
B 001 ITEMFILE11              128   302
B 001 ITEMFILE16              16    303
B 004 ITEMFILE35              912   304
B 013 ITEMNAMES               3072  308
B 009 ITEMS                   2048  321
B 001 LINKER                  176   330
B 002 MON02                   480   331
B 002 MON03                   480   333
B 001 MON04                   255   335
B 002 MON05                   480   336
B 001 MON06                   255   338
B 002 MON07                   480   339
B 001 MON08                   255   341
B 002 MON09                   480   342
B 002 MON16                   480   344
B 001 STAR                    192   346
B 002 MON21                   480   347
B 002 MON29                   480   349
B 002 MON2C                   480   351
B 002 MON4F                   480   353
B 002 MON6B                   480   355
B 005 MUSIC                   1134  357
B 004 PIC01                   992   362
B 005 PIC02                   1040  366
B 009 PIC04                   2120  371
B 007 PIC06                   1741  380
B 006 PIC08                   1509  387
B 007 PIC10                   1652  393
B 005 PIC1D                   1037  400
B 035 POST.COM                8914  405
B 003 SECSET02                671   440
B 003 SOUNDFX                 559   443
B 008 SPELLE00                1982  446
B 008 SPELLE01                2042  454
B 004 SPELLE02                1012  462
B 008 SPELLE04                2022  466
B 007 SPELLN00                1776  474
B 003 SPRITE02                680   481
B 003 SPRITE04                648   484
B 003 SPRITE06                536   487
B 003 SPRITE08                696   490
B 004 SPRITE13                856   493
B 004 SQRPACI64               957   497
  001 <NOT IN USE>                  501
B 019 TITLEPAGE               4644  502
B 004 WALLDEF01               967   521
B 005 WALLDEF03               1153  525
B 004 WALLDEF05               960   530
B 005 WALLSET01               1127  534
B 005 WALLSET03               1278  539
B 005 WALLSET05               1213  544
B 005 MON17                   480   549
A 006 HELLO                   1336  554


Retour sommaire

hr Rdos 3.3


Source &GOTO.



                1
                2             ORG   $B100     
                3   
                4            USE   INCLUDE/INCLUDE.ROM
               >1   
               >2   
               >3    ********************************
               >4    *                              *
               >5    *  Adresses de référence ROM   *
               >6    *     (c)1994 by Deckard       *
               >7    *                              *
               >8    ********************************
               >9   
               >10   KEY      EQU   $C000      ; touche entrée
               >11   RDPRINC  EQU   $C002      ; lire en mem princ
               >12   RDAUX    EQU   $C003      ; lire en mem aux
               >13   WTPRINC  EQU   $C004      ; écrire en mem princ
               >14   WTAUX    EQU   $C005      ; écrire en mem aux
               >15   STROBE   EQU   $C010      ; remise à zéro saisie clavier
               >16   STORE80  EQU   $C018      ; état de 80STORE
               >17   RD80COL  EQU   $C01F      ; test pour savoir si 80c ou 40c
               >18   SPEAK    EQU   $C030     
               >19   PRINC    EQU   $C054     
               >20   AUX      EQU   $C055     
               >21   BUTTN0   EQU   $C061     
               >22   BUTTN1   EQU   $C062     
               >23   PADDL0   EQU   $C064      ; état manette 0
               >24   PADDL1   EQU   $C065      ; état manette 1
               >25   PTRIG    EQU   $C070      ; init manette
               >26   PHASEOFF EQU   $C080     
               >27   XFER     EQU   $C314     
               >28   AUXMOVE  EQU   $C311     
               >29   BLTU2    EQU   $D39A     
               >30   ERRORN   EQU   $D412     
               >31   RESTART  EQU   $D43C      ; fin traitement erreur
               >32   LINKSET  EQU   $D4F2      ; init pointeurs basic
               >33   RUNPROG  EQU   $D566      ; lance prog basic en ram
               >34   INLINE   EQU   $D52C     
               >35   NEWCMD   EQU   $D64B     
               >36   CLEARC   EQU   $D66C      ; fin inits pour prog basic
               >37   STXTPT   EQU   $D697     
               >38   NEWSTT   EQU   $D7D2     
               >39   ADDON    EQU   $D998      ; ajoute Y à l'adr de chargot
               >40   CRDO     EQU   $DAFB     
               >41   STROUT   EQU   $DB3A     
               >42   STRPRT   EQU   $DB3D      ; affiche une chaine
               >43   OUTQUES  EQU   $DB5A     
               >44   OUTSP    EQU   $DB57     
               >45   OUTDO    EQU   $DB5C      ; affiche caractère ACC 'x'
               >46   FRMNUM   EQU   $DD67      ; évalue expression et vérif nbre
               >47   CHKSTR   EQU   $DD6C      ; vérifie que c'est une chaine
               >48   FRMEVL   EQU   $DD7B     
               >49   CHKCOM   EQU   $DEBE      ; vérifie présence virgule
               >50   SYNERR   EQU   $DEC9      ; syntax error
               >51   PTRGET   EQU   $DFE3      ; positionne sur variable
               >52   BASIC    EQU   $E000     
               >53   BASIC2   EQU   $E003     
               >54   AYINT    EQU   $E10C     
               >55   IQERR    EQU   $E199      ; illegal quantity
               >56   GIVAYF   EQU   $E2F2      ; entier A,Y -> FAC
               >57   STRLIT   EQU   $E3E7     
               >58   GETSPA   EQU   $E452      ; fait la place pour une chaine
               >59   GARBAG   EQU   $E484      ; nettoyage chaines inutilisées
               >60   MOVSTR   EQU   $E5E2      ; recopie chaine pointée vers variable
               >61   FREFAC   EQU   $E600     
               >62   GETBYT   EQU   $E6F8      ; lecture nombre 1 octet -> X
               >63   GETADR   EQU   $E752      ; lecture nbr. In: Y (low) Acc (High)
               >64   FADDT    EQU   $E7C1      ; FAC + ARG -> FAC
               >65   FMULTT   EQU   $E982      ; FAC * ARG -> FAC
               >66   MOVFM    EQU   $EAF9      ; A(-),Y(+) ptr flottant cond -> FAC
               >67   MOVAF    EQU   $EB63      ; FAC -> ARG
               >68   FLO2     EQU   $EBA0      ; routine de LINPRT
               >69   INPRT    EQU   $ED19     
               >70   LINPRT   EQU   $ED24      ; affichage nombre en décimal
               >71   PRNTFAC  EQU   $ED2E      ; affiche FAC
               >72   FOUT     EQU   $ED34      ; converti FAC en 1 chaine
               >73   NOTRACE  EQU   $F26F     
               >74   NORMAL   EQU   $F273      ; mode normal
               >75   INVERSE  EQU   $F277      ; mode inverse
               >76   HANDLERR EQU   $F2E9      ; traitement ON ERR
               >77   TEXT     EQU   $F399      ; mode TEXT
               >78   HGR      EQU   $F3F2     
               >79   PROLOGP  EQU   $F832     
               >80   SETCOL   EQU   $F864      ; fixe couleur
               >81   GBASCALC EQU   $F847      ; calcul adresse ligne
               >82   PRNTYX   EQU   $F940     
               >83   PRNTAX   EQU   $F941     
               >84   PRNTX    EQU   $F944     
               >85   PRBLNK   EQU   $F948      ; affiche 3 espaces
               >86   PRBL2    EQU   $F94A      ; affiche le nb d'espace donné par X
               >87   OLDBRK   EQU   $FA59     
               >88   INIT     EQU   $FB2F     
               >89   TABV     EQU   $FB5B      ; position curseur
               >90   BASCALC  EQU   $FBC1     
               >91   BELL2    EQU   $FBE4     
               >92   VTAB     EQU   $FC22      ; Positionne pour affichage text
               >93   HOME     EQU   $FC58      ; nettoie écran text
               >94   WAIT     EQU   $FCA8      ; délai attente
               >95   RDKEY    EQU   $FD0C      ; lecture clavier
               >96   CROUT    EQU   $FD8E      ; affiche retour chariot
               >97   PRBYTE   EQU   $FDDA     
               >98   COUT     EQU   $FDED      ; affiche caractère ACC "x"
               >99   COUT1    EQU   $FDF0      ; sortie normale CSW
               >100  IDENTGS  EQU   $FE1F      ; routine identifiant un IIGS
               >101  SETINV   EQU   $FE80      ; inverse
               >102  SETNORM  EQU   $FE84      ; normal
               >103  SETKBD   EQU   $FE89     
               >104  SETVID   EQU   $FE93     
               >105  IN       EQU   $FE8B      ; IN#
               >106  PR       EQU   $FE95      ; PR#
               >107  BELL     EQU   $FF3A      ; bip erreur
               >108  OLDRST   EQU   $FF59     
               >109  MON      EQU   $FF65     
               >110  MONZ     EQU   $FF69      ; call -151
                5            USE   INCLUDE/INCLUDE.PAGE0
               >1   
               >2    ********************************
               >3    *                              *
               >4    * Adresses de référence page 0 *
               >5    *     (c)1994 by Deckard       *
               >6    *                              *
               >7    ********************************
               >8   
               >9   
               >10   STAT     EQU   $11        ; flags dernière opération sur FAC
               >11   WNDLFT   EQU   $20        ; marge gauche
               >12   WNDWDTH  EQU   $21        ; largeur
               >13   WNDTOP   EQU   $22        ; marge haute
               >14   WNDBTM   EQU   $23        ; marge basse
               >15   CH       EQU   $24        ; position horizontale curseur
               >16   CV       EQU   $25        ; position verticale curseur
               >17   GBASL    EQU   $26        ; adr low ligne calculée par GBASCALC
               >18   GBASH    EQU   $27        ; adr high ligne calculée par GBASCALC
               >19   BASL     EQU   $28        ;
               >20   BASH     EQU   $29        ;
               >21   MASK     EQU   $2E        ; parité: 0F (ligne paire), F0 (ligne impaire)
               >22   COLOR    EQU   $30        ; couleur après SETCOL ($F864)
               >23   INVFLG   EQU   $32        ; #$3F=inverse  #$FF=normal
               >24   CSWL     EQU   $36        ; sortie de caractères low
               >25   CSWH     EQU   $37        ; sortie de caractères high
               >26   KSWL     EQU   $38        ; entrée de caractères low
               >27   KSWH     EQU   $39        ; entrée de caractères high
               >28   A2L      EQU   $3E        ; adr travail moniteur
               >29   A2H      EQU   $3F        ; adr travail moniteur
               >30   A3L      EQU   $40        ; adr travail moniteur
               >31   A3H      EQU   $41        ; adr travail moniteur
               >32   A4L      EQU   $42        ; adr travail moniteur
               >33   A4H      EQU   $43        ; adr travail moniteur
               >34   LINNUM   EQU   $50       
               >35   TEMPPT   EQU   $52       
               >36   TEMPST   EQU   $55       
               >37   INDEX    EQU   $5E       
               >38   TXTTAB   EQU   $67        ; adr début texte basic
               >39   VARTAB   EQU   $69        ; adr début des variables simples
               >40   ARYTAB   EQU   $6B        ; adr début des variables dimensionnées
               >41   STREND   EQU   $6D        ; début de l'espace libre
               >42   FRETOP   EQU   $6F        ; et $70
               >43   MEMSIZ   EQU   $73        ; et $74
               >44   CURLIN   EQU   $75       
               >45   VARNAM   EQU   $82        ; infos variable après PTRGET
               >46   VARPNT   EQU   $83        ; utilisé par PTRGET
               >47   DSCLEN   EQU   $8F       
               >48   HIGHDS   EQU   $94       
               >49   HIGHTR   EQU   $96       
               >50   LOWTR    EQU   $9B       
               >51   FAC      EQU   $9D       
               >52   FACMO    EQU   $A0        ; milieu de FAC (used by STRPRT)
               >53   FACSGN   EQU   $A2        ; signe FAC
               >54   ARG      EQU   $A5       
               >55   PGEND    EQU   $AF        ; fin du texte basic
               >56   CHARGET  EQU   $00B1      ; incrémente et lit caractère
               >57   CHARGOT  EQU   $00B7      ; lecture caractère only
               >58   TXTPTR   EQU   $B8        ; pointeur texte
               >59   ERRFLG   EQU   $D8        ; flag ONERR
               >60   ERRNUM   EQU   $DE        ; numéro erreur (mli, ...)
               >61   ONERR    EQU   $D8        ; POUR ON ERR GOTO...
               >62   CMDCPT   EQU   $EC        ; numéro de la cmd-1 dans la liste
               >63   ANL_CPT  EQU   $ED        ; numéro de liste
               >64   CURADR   EQU   $EE        ; et $EF adresses de la liste
               >65   SPEEDZ   EQU   $F1       
                6   
                7    ********************************
                8    *                              *
                9    *   Module traitement &GOTO    *
                10   *           RDOS SSI           *
                11   *    (s)1989-97 by Deckard     *
                12   *                              *
                13   ********************************
                14  
                15   LC089    EQU   $C089     
                16   RWTS_SLOT16 EQU $BF56     ; slot*16
                17  
                18  
                19   *------------------------------*
                20   *    Signature module RDOS     *
                21   *------------------------------*
                22  
B100: 52 44 4F  23   RDOS     ASC   'RDOS'
B103: 53
                24  
                25   ********************************
                26  
B104: AE 56 BF  27            LDX   RWTS_SLOT16 ; slot*16
B107: BD 89 C0  28            LDA   LC089,X    ; motor on (avant chargement nouveau prog basic)
                29  
B10A: 20 84 E4  30            JSR   GARBAG     ; nettoyage chaine
                31  
                32   * Traitement VARTAB (variables simples, pointeurs de chaines
                33   * et de fonctions)
                34  
B10D: A9 07     35            LDA   #7         ; 2 caractères pour le nom et 5 octets pour la valeur
B10F: 85 8F     36            STA   DSCLEN    
B111: A5 69     37            LDA   VARTAB     ; init:FAC=VARTAB
B113: A6 6A     38            LDX   VARTAB+1  
B115: 85 9D     39            STA   FAC       
B117: 86 9E     40            STX   FAC+1     
                41  
B119: E4 6C     42   :3       CPX   ARYTAB+1   ; reste t'il de ce type de données?
B11B: D0 04     43            BNE   :1         ; oui
B11D: C5 6B     44            CMP   ARYTAB    
B11F: F0 05     45            BEQ   :2         ; non
                46  
B121: 20 7B B1  47   :1       JSR   COPY_CHAINE ; sauvegarde chaine du texte basic dans espace libre
B124: F0 F3     48            BEQ   :3         ; toujours: traite variable suivante
                49  
                50   * Traitement ARYTAB (variables dimensionnées, pointeurs des
                51   * tableaux de chaines)
                52  
B126: 85 9F     53   :2       STA   FAC+2      ; sauve pointeur ARYTAB
B128: 86 A0     54            STX   FACMO     
B12A: A9 03     55            LDA   #3         ; 2 caractères nom variable+1 octet taille descriptif
B12C: 85 8F     56            STA   DSCLEN    
                57  
B12E: A5 9F     58   NEXT_TAB LDA   FAC+2     
B130: A6 A0     59            LDX   FACMO     
                60  
                61   NEXT_TAB2                
B132: E4 6E     62            CPX   STREND+1   ; reste t'il de ce type de données?
B134: D0 05     63            BNE   TRT_TAB    ; oui
                64  
B136: C5 6D     65            CMP   STREND    
B138: D0 01     66            BNE   TRT_TAB    ; oui
                67  
B13A: 60        68            RTS              ; FIN CHAIN (on a atteint le début de l'espace libre)
                69  
                70  
                71   ********************************
                72   *                              *
                73   * Traite un tableau de chaines *
                74   *    afin de recopier chaque   *
                75   *  string du texte basic dans  *
                76   *    l'espace libre après      *
                77   *          allocation          *
                78   *                              *
                79   ********************************
                80  
B13B: 85 9D     81   TRT_TAB  STA   FAC        ; FAC=pointeur courant ARYTAB
B13D: 86 9E     82            STX   FAC+1     
                83  
B13F: A0 00     84            LDY   #0        
B141: B1 9D     85            LDA   (FAC),Y   
B143: AA        86            TAX              ; X=1er caractère nom variable
B144: C8        87            INY             
B145: B1 9D     88            LDA   (FAC),Y   
B147: 08        89            PHP              ; sauve état N (bit 7 octet) pour BPL/BMI 2nd
                90                             ; caractère nom variable
B148: C8        91            INY             
B149: B1 9D     92            LDA   (FAC),Y    ; taille descriptif low+ptr courant ARYTAB
B14B: 65 9F     93            ADC   FAC+2     
B14D: 85 9F     94            STA   FAC+2     
B14F: C8        95            INY             
B150: B1 9D     96            LDA   (FAC),Y    ; idem high
B152: 65 A0     97            ADC   FACMO     
B154: 85 A0     98            STA   FACMO      ; FAC+2/FACMO pointe sur le descriptif du prochain
                99                             ; tableau
                100 
B156: 28        101           PLP              ; 2nd caractère nom variable
B157: 10 D5     102           BPL   NEXT_TAB   ; tableau de réels
                103 
B159: 8A        104           TXA              ; 1er caractère nom variable
B15A: 30 D2     105           BMI   NEXT_TAB   ; tableau d'entiers
                106 
                107                            ; tableau de chaines
B15C: C8        108           INY             
B15D: B1 9D     109           LDA   (FAC),Y    ; nbr de dimensions*2 pour skipper ces éléments
B15F: A0 00     110           LDY   #0         ; descriptifs
B161: 0A        111           ASL             
B162: 69 05     112           ADC   #5         ; +5 octets=1(nom variable)+2(taille descr)+1(nbr de
B164: 65 9D     113           ADC   FAC        ; dimensions)
B166: 85 9D     114           STA   FAC        ; FAC pointe sur le descriptif valeur d'une chaine
B168: 90 02     115           BCC   :1         ; du tableau
                116 
B16A: E6 9E     117           INC   FAC+1      ; high
                118 
B16C: A6 9E     119  :1       LDX   FAC+1      ; a-t'on traiter tous les indices du tableau?
                120 
B16E: E4 A0     121  :3       CPX   FACMO     
B170: D0 04     122           BNE   :2         ; non
B172: C5 9F     123           CMP   FAC+2     
B174: F0 BC     124           BEQ   NEXT_TAB2  ; oui
                125 
B176: 20 85 B1  126  :2       JSR   COPY_CHAINE2
B179: F0 F3     127           BEQ   :3         ; toujours
                128 
                129 
                130  ********************************
                131  *                              *
                132  * Recopie une chaine du texte  *
                133  *  basic dans l'espace libre   *
                134  *    après allocation place    *
                135  *                              *
                136  ********************************
                137 
                138  * In:  FAC est positionné sur le pointeur désiré
                139  * Out: FAC pointe sur le descriptif suivant
                140 
                141  COPY_CHAINE              
B17B: B1 9D     142           LDA   (FAC),Y    ; 1er caractère du nom de la variable
B17D: 30 46     143           BMI   NEXT_VAR   ; entier ou fonction
                144 
B17F: C8        145           INY              ; réel ou chaine
B180: B1 9D     146           LDA   (FAC),Y    ; 2nd caractère du nom variable
B182: 10 41     147           BPL   NEXT_VAR   ; réel
B184: C8        148           INY             
                149 
                150  * Traitement des chaines
                151 
                152  COPY_CHAINE2             
B185: B1 9D     153           LDA   (FAC),Y    ; longueur
B187: F0 3C     154           BEQ   NEXT_VAR   ; chaine vide, passe à la suivante
                155 
B189: C8        156           INY             
B18A: B1 9D     157           LDA   (FAC),Y    ; X=low adr chaine
B18C: AA        158           TAX             
B18D: C8        159           INY             
B18E: B1 9D     160           LDA   (FAC),Y    ; acc=high adr chaine
B190: 85 9C     161           STA   LOWTR+1   
B192: 86 9B     162           STX   LOWTR     
B194: C5 B0     163           CMP   PGEND+1   
B196: F0 02     164           BEQ   :1         ; valeur inclue dans le texte basic/prog non executé
B198: B0 2B     165           BGE   NEXT_VAR   ; valeur hors texte basic
                166 
B19A: 88        167  :1       DEY             
B19B: 88        168           DEY             
B19C: B1 9D     169           LDA   (FAC),Y    ; longueur
B19E: 48        170           PHA             
B19F: 38        171           SEC             
B1A0: A5 6F     172           LDA   FRETOP     ; fin de l'espace libre-taille chaine
B1A2: 85 94     173           STA   HIGHDS    
B1A4: F1 9D     174           SBC   (FAC),Y   
B1A6: C8        175           INY             
B1A7: 91 9D     176           STA   (FAC),Y    ; définit nouvelle adr low chaine
B1A9: 85 6F     177           STA   FRETOP     ; nouvelle fin espace libre low
B1AB: C8        178           INY             
B1AC: A5 70     179           LDA   FRETOP+1  
B1AE: 85 95     180           STA   HIGHDS+1  
B1B0: E9 00     181           SBC   #0         ; retenue
B1B2: 91 9D     182           STA   (FAC),Y    ; high adr chaine
B1B4: 85 70     183           STA   FRETOP+1   ; high fin espace libre
B1B6: 68        184           PLA              ; longueur
                185 
B1B7: 18        186           CLC             
B1B8: 65 9B     187           ADC   LOWTR      ; HIGHTR=adr dans texte basic+longueur
B1BA: 85 96     188           STA   HIGHTR    
B1BC: A5 9C     189           LDA   LOWTR+1   
B1BE: 69 00     190           ADC   #0        
B1C0: 85 97     191           STA   HIGHTR+1  
B1C2: 20 9A D3  192           JSR   BLTU2      ; recopie dans l'espace créé le contenu de la chaine
                193 
                194 
B1C5: A5 8F     195  NEXT_VAR LDA   DSCLEN     ; ajoute taille descriptif variable
B1C7: 18        196           CLC             
B1C8: 65 9D     197           ADC   FAC       
B1CA: 85 9D     198           STA   FAC        ; low
B1CC: 90 02     199           BCC   :1        
                200 
B1CE: E6 9E     201           INC   FAC+1      ; high
                202 
B1D0: A5 9D     203  :1       LDA   FAC       
B1D2: A6 9E     204           LDX   FAC+1     
B1D4: A0 00     205           LDY   #0         ; BEQ always
B1D6: 60        206           RTS             
                207 
B1D7: 00 00 00  208           DS    \
B1DA: 00 00 00 00
B1DE: 00 00 00 00
B1E2: 00 00 00 00
B1E6: 00 00 00 00
B1EA: 00 00 00 00
B1EE: 00 00 00 00
B1F2: 00 00 00 00
B1F6: 00 00 00 00
B1FA: 00 00 00 00
B1FE: 00 00
                209 
                210           SAV   OBJ/MODULE.CHAIN/

Object saved as OBJ/MODULE.CHAIN/,A$B100,L$0100,BIN

 
 
--End assembly, 256 bytes, Errors: 0


Symbol table - alphabetical order:

?  A2H     =$3F     ?  A2L     =$3E     ?  A3H     =$41     ?  A3L     =$40
?  A4H     =$43     ?  A4L     =$42     ?  ADDON   =$D998   ?  ANL_CPT =$ED
?  ARG     =$A5        ARYTAB  =$6B     ?  AUX     =$C055   ?  AUXMOVE =$C311
?  AYINT   =$E10C   ?  BASCALC =$FBC1   ?  BASH    =$29     ?  BASIC   =$E000
?  BASIC2  =$E003   ?  BASL    =$28     ?  BELL    =$FF3A   ?  BELL2   =$FBE4
   BLTU2   =$D39A   ?  BUTTN0  =$C061   ?  BUTTN1  =$C062   ?  CH      =$24
?  CHARGET =$B1     ?  CHARGOT =$B7     ?  CHKCOM  =$DEBE   ?  CHKSTR  =$DD6C
?  CLEARC  =$D66C   ?  CMDCPT  =$EC     ?  COLOR   =$30        COPY_CHAINE=$B17B
   COPY_CHAINE2=$B185   ?  COUT    =$FDED   ?  COUT1   =$FDF0   ?  CRDO    =$DAFB
?  CROUT   =$FD8E   ?  CSWH    =$37     ?  CSWL    =$36     ?  CURADR  =$EE
?  CURLIN  =$75     ?  CV      =$25        DSCLEN  =$8F     ?  ERRFLG  =$D8
?  ERRNUM  =$DE     ?  ERRORN  =$D412      FAC     =$9D        FACMO   =$A0
?  FACSGN  =$A2     ?  FADDT   =$E7C1   ?  FLO2    =$EBA0   ?  FMULTT  =$E982
?  FOUT    =$ED34   ?  FREFAC  =$E600      FRETOP  =$6F     ?  FRMEVL  =$DD7B
?  FRMNUM  =$DD67      GARBAG  =$E484   ?  GBASCALC=$F847   ?  GBASH   =$27
?  GBASL   =$26     ?  GETADR  =$E752   ?  GETBYT  =$E6F8   ?  GETSPA  =$E452
?  GIVAYF  =$E2F2   ?  HANDLERR=$F2E9   ?  HGR     =$F3F2      HIGHDS  =$94
   HIGHTR  =$96     ?  HOME    =$FC58   ?  IDENTGS =$FE1F   ?  IN      =$FE8B
?  INDEX   =$5E     ?  INIT    =$FB2F   ?  INLINE  =$D52C   ?  INPRT   =$ED19
?  INVERSE =$F277   ?  INVFLG  =$32     ?  IQERR   =$E199   ?  KEY     =$C000
?  KSWH    =$39     ?  KSWL    =$38        LC089   =$C089   ?  LINKSET =$D4F2
?  LINNUM  =$50     ?  LINPRT  =$ED24      LOWTR   =$9B     ?  MASK    =$2E
?  MEMSIZ  =$73     ?  MON     =$FF65   ?  MONZ    =$FF69   ?  MOVAF   =$EB63
?  MOVFM   =$EAF9   ?  MOVSTR  =$E5E2   ?  NEWCMD  =$D64B   ?  NEWSTT  =$D7D2
   NEXT_TAB=$B12E      NEXT_TAB2=$B132      NEXT_VAR=$B1C5   ?  NORMAL  =$F273
?  NOTRACE =$F26F   ?  OLDBRK  =$FA59   ?  OLDRST  =$FF59   ?  ONERR   =$D8
?  OUTDO   =$DB5C   ?  OUTQUES =$DB5A   ?  OUTSP   =$DB57   ?  PADDL0  =$C064
?  PADDL1  =$C065      PGEND   =$AF     ?  PHASEOFF=$C080   ?  PR      =$FE95
?  PRBL2   =$F94A   ?  PRBLNK  =$F948   ?  PRBYTE  =$FDDA   ?  PRINC   =$C054
?  PRNTAX  =$F941   ?  PRNTFAC =$ED2E   ?  PRNTX   =$F944   ?  PRNTYX  =$F940
?  PROLOGP =$F832   ?  PTRGET  =$DFE3   ?  PTRIG   =$C070   ?  RD80COL =$C01F
?  RDAUX   =$C003   ?  RDKEY   =$FD0C   ?  RDOS    =$B100   ?  RDPRINC =$C002
?  RESTART =$D43C   ?  RUNPROG =$D566      RWTS_SLOT16=$BF56   ?  SETCOL  =$F864
?  SETINV  =$FE80   ?  SETKBD  =$FE89   ?  SETNORM =$FE84   ?  SETVID  =$FE93
?  SPEAK   =$C030   ?  SPEEDZ  =$F1     ?  STAT    =$11     ?  STORE80 =$C018
   STREND  =$6D     ?  STRLIT  =$E3E7   ?  STROBE  =$C010   ?  STROUT  =$DB3A
?  STRPRT  =$DB3D   ?  STXTPT  =$D697   ?  SYNERR  =$DEC9   ?  TABV    =$FB5B
?  TEMPPT  =$52     ?  TEMPST  =$55     ?  TEXT    =$F399      TRT_TAB =$B13B
?  TXTPTR  =$B8     ?  TXTTAB  =$67     ?  VARNAM  =$82     ?  VARPNT  =$83
   VARTAB  =$69     ?  VTAB    =$FC22   ?  WAIT    =$FCA8   ?  WNDBTM  =$23
?  WNDLFT  =$20     ?  WNDTOP  =$22     ?  WNDWDTH =$21     ?  WTAUX   =$C005
?  WTPRINC =$C004   ?  XFER    =$C314  


Symbol table - numerical order:

?  STAT    =$11     ?  WNDLFT  =$20     ?  WNDWDTH =$21     ?  WNDTOP  =$22
?  WNDBTM  =$23     ?  CH      =$24     ?  CV      =$25     ?  GBASL   =$26
?  GBASH   =$27     ?  BASL    =$28     ?  BASH    =$29     ?  MASK    =$2E
?  COLOR   =$30     ?  INVFLG  =$32     ?  CSWL    =$36     ?  CSWH    =$37
?  KSWL    =$38     ?  KSWH    =$39     ?  A2L     =$3E     ?  A2H     =$3F
?  A3L     =$40     ?  A3H     =$41     ?  A4L     =$42     ?  A4H     =$43
?  LINNUM  =$50     ?  TEMPPT  =$52     ?  TEMPST  =$55     ?  INDEX   =$5E
?  TXTTAB  =$67        VARTAB  =$69        ARYTAB  =$6B        STREND  =$6D
   FRETOP  =$6F     ?  MEMSIZ  =$73     ?  CURLIN  =$75     ?  VARNAM  =$82
?  VARPNT  =$83        DSCLEN  =$8F        HIGHDS  =$94        HIGHTR  =$96
   LOWTR   =$9B        FAC     =$9D        FACMO   =$A0     ?  FACSGN  =$A2
?  ARG     =$A5        PGEND   =$AF     ?  CHARGET =$B1     ?  CHARGOT =$B7
?  TXTPTR  =$B8     ?  ERRFLG  =$D8     ?  ONERR   =$D8     ?  ERRNUM  =$DE
?  CMDCPT  =$EC     ?  ANL_CPT =$ED     ?  CURADR  =$EE     ?  SPEEDZ  =$F1
?  RDOS    =$B100      NEXT_TAB=$B12E      NEXT_TAB2=$B132      TRT_TAB =$B13B
   COPY_CHAINE=$B17B      COPY_CHAINE2=$B185      NEXT_VAR=$B1C5      RWTS_SLOT16=$BF56
?  KEY     =$C000   ?  RDPRINC =$C002   ?  RDAUX   =$C003   ?  WTPRINC =$C004
?  WTAUX   =$C005   ?  STROBE  =$C010   ?  STORE80 =$C018   ?  RD80COL =$C01F
?  SPEAK   =$C030   ?  PRINC   =$C054   ?  AUX     =$C055   ?  BUTTN0  =$C061
?  BUTTN1  =$C062   ?  PADDL0  =$C064   ?  PADDL1  =$C065   ?  PTRIG   =$C070
?  PHASEOFF=$C080      LC089   =$C089   ?  AUXMOVE =$C311   ?  XFER    =$C314
   BLTU2   =$D39A   ?  ERRORN  =$D412   ?  RESTART =$D43C   ?  LINKSET =$D4F2
?  INLINE  =$D52C   ?  RUNPROG =$D566   ?  NEWCMD  =$D64B   ?  CLEARC  =$D66C
?  STXTPT  =$D697   ?  NEWSTT  =$D7D2   ?  ADDON   =$D998   ?  CRDO    =$DAFB
?  STROUT  =$DB3A   ?  STRPRT  =$DB3D   ?  OUTSP   =$DB57   ?  OUTQUES =$DB5A
?  OUTDO   =$DB5C   ?  FRMNUM  =$DD67   ?  CHKSTR  =$DD6C   ?  FRMEVL  =$DD7B
?  CHKCOM  =$DEBE   ?  SYNERR  =$DEC9   ?  PTRGET  =$DFE3   ?  BASIC   =$E000
?  BASIC2  =$E003   ?  AYINT   =$E10C   ?  IQERR   =$E199   ?  GIVAYF  =$E2F2
?  STRLIT  =$E3E7   ?  GETSPA  =$E452      GARBAG  =$E484   ?  MOVSTR  =$E5E2
?  FREFAC  =$E600   ?  GETBYT  =$E6F8   ?  GETADR  =$E752   ?  FADDT   =$E7C1
?  FMULTT  =$E982   ?  MOVFM   =$EAF9   ?  MOVAF   =$EB63   ?  FLO2    =$EBA0
?  INPRT   =$ED19   ?  LINPRT  =$ED24   ?  PRNTFAC =$ED2E   ?  FOUT    =$ED34
?  NOTRACE =$F26F   ?  NORMAL  =$F273   ?  INVERSE =$F277   ?  HANDLERR=$F2E9
?  TEXT    =$F399   ?  HGR     =$F3F2   ?  PROLOGP =$F832   ?  GBASCALC=$F847
?  SETCOL  =$F864   ?  PRNTYX  =$F940   ?  PRNTAX  =$F941   ?  PRNTX   =$F944
?  PRBLNK  =$F948   ?  PRBL2   =$F94A   ?  OLDBRK  =$FA59   ?  INIT    =$FB2F
?  TABV    =$FB5B   ?  BASCALC =$FBC1   ?  BELL2   =$FBE4   ?  VTAB    =$FC22
?  HOME    =$FC58   ?  WAIT    =$FCA8   ?  RDKEY   =$FD0C   ?  CROUT   =$FD8E
?  PRBYTE  =$FDDA   ?  COUT    =$FDED   ?  COUT1   =$FDF0   ?  IDENTGS =$FE1F
?  SETINV  =$FE80   ?  SETNORM =$FE84   ?  SETKBD  =$FE89   ?  IN      =$FE8B
?  SETVID  =$FE93   ?  PR      =$FE95   ?  BELL    =$FF3A   ?  OLDRST  =$FF59
?  MON     =$FF65   ?  MONZ    =$FF69


Retour sommaire