[1] | 1 | Les points d'entrées du Moniteur disque |
---|
| 2 | Adresses et points d'entrées sont déclarés pour MO et pour TO (avec numéro de CALL pour MO). |
---|
| 3 | |
---|
| 4 | $A004/$E004 (CALL $26 sur MO) : Fonctions standard (DKCONT) |
---|
| 5 | Cette entrée donne la possibilité d’exécuter diverses opérations fondamentales sous les modalités suivantes: |
---|
| 6 | Reset du contrôleur (tout lecteur sauf RamDisk) |
---|
| 7 | Registres d’entrée: |
---|
| 8 | - $2048/$6048 Code de commande $01 |
---|
| 9 | - $20E9-$20EA/$60E9-$20EA Pointeur sur le buffer de secteur |
---|
| 10 | - $20ED-$20EE/$60ED-$60EE Pointeur sur le buffer de FAT |
---|
| 11 | Sur les lecteurs gérant simultanément la simple et la double densité, si le buffer de FAT et de secteur sont espacés de 256 octets, le reset contrôleur forcera la double densité. S'ils sont espacés de 128 octets, la simple. A l'initialisation de l'ordinateur, ces deux registres sont à $0000, la double densité est donc prioritaire. Il reste possible de forcer la densité par le point d'entrée Moniteur $A004/$E004 (commandes $04 et $10). La mise à jour des pointeurs de buffer pour des lecteurs ne gérant qu'une seule densité est sans conséquence au reset. |
---|
| 12 | Registres de retour: |
---|
| 13 | - Si C de CC à 0, $204E/$604E contient le code de densité du lecteur (« D » si double densité, « C » si simple). Si erreur, C de CC à 1 et code d’erreur dans $204E/$604E. |
---|
| 14 | Lecture d’un secteur (tout lecteur) |
---|
| 15 | Registres d’entrée : |
---|
| 16 | - $2048/$6048 Code de commande $02 |
---|
| 17 | - $2049/$6049 Numéro du lecteur |
---|
| 18 | - $204A-$204B/$604A-$204B Numéro de piste |
---|
| 19 | - $204C/$604C Numéro de secteur (de 1 à 16) |
---|
| 20 | - $204F-$2050/$604F-$2050 Pointeur sur la mémoire tampon de réception |
---|
| 21 | Registres d’entrée pour QDD avec numéro de secteur réel: |
---|
| 22 | - $2048/$6048 Code de commande $02 |
---|
| 23 | - $2049/$6049 Numéro du lecteur |
---|
| 24 | - $204A/$604A $FF |
---|
| 25 | - $204C-$204D/$604C-$604D Numéro de secteur (de 1 à 400) |
---|
| 26 | - $204F-$2050/$604F-$2050 Pointeur sur la mémoire tampon de réception |
---|
| 27 | Registres de retour : |
---|
| 28 | - C de CC à 0. Si erreur, C de CC à 1 et code d’erreur dans $204E/$604E. |
---|
| 29 | Passage en simple densité (floppy exclusivement) |
---|
| 30 | Registres d’entrée : |
---|
| 31 | - $2048/$6048 Code de commande $04 |
---|
| 32 | Registres de retour : |
---|
| 33 | Aucun |
---|
| 34 | Ecriture d’un secteur (tout lecteur) |
---|
| 35 | Registres d’entrée : |
---|
| 36 | - $2048/$6048 Code de commande $08 ($88 pour écriture avec vérification) |
---|
| 37 | - $2049/$6049 Numéro du lecteur |
---|
| 38 | - $204A-$204B/$604A-$204B Numéro de piste |
---|
| 39 | - $204C/$604C Numéro de secteur |
---|
| 40 | - $204F-$2050/$604F-$2050 Pointeur sur la mémoire tampon de réception |
---|
| 41 | Registres d’entrée pour QDD avec numéro de secteur réel: |
---|
| 42 | - $2048/$6048 Code de commande $08 ($88 pour écriture avec vérification) |
---|
| 43 | - $2049/$6049 Numéro du lecteur |
---|
| 44 | - $204A/$604A $FF |
---|
| 45 | - $204C-$204D/$604C-$604D Numéro de secteur (de 1 à 400) |
---|
| 46 | - $204F-$2050/$604F-$2050 Pointeur sur la mémoire tampon de réception |
---|
| 47 | Registres de retour : |
---|
| 48 | - C de CC à 0. Si erreur, C de CC à 1 et code d’erreur dans $204E/$604E. |
---|
| 49 | Passage en double densité (floppy exclusivement) |
---|
| 50 | Registres d’entrée : |
---|
| 51 | - $2048/$6048 Code de commande $10 |
---|
| 52 | Registres de retour : |
---|
| 53 | Aucun |
---|
| 54 | Recherche de la piste 0 (floppy exclusivement) |
---|
| 55 | Registres d’entrée : |
---|
| 56 | - $2048/$6048 Code de commande $20 |
---|
| 57 | Registres de retour : |
---|
| 58 | - C de CC à 0. Si erreur, C de CC à 1 et code d’erreur dans $204E/$604E. |
---|
| 59 | Recherche d’une piste quelconque (floppy exclusivement) |
---|
| 60 | Registres d’entrée : |
---|
| 61 | - $2048/$6048 Code de commande $40 |
---|
| 62 | - $204A-$204B/$604A-$204B Numéro de piste (sur 16 bits) |
---|
| 63 | Registres de retour : |
---|
| 64 | - C de CC à 0. Si erreur, C de CC à 1 et code d’erreur dans $204E/$604E. |
---|
| 65 | |
---|
| 66 | Remarque : dans le manuel, il est inscrit que le passage de densité peut provoquer une erreur mais elle n’est pas délivrée par les programmes de changement de densité, puisque ceux-ci ne renvoient jamais d’erreur. Une erreur, donc, que seule la logique impose... |
---|
| 67 | |
---|
| 68 | $A007/$E007 (CALL $28 sur MO) : Lancement du boot(DKBOOT) |
---|
| 69 | Registres d’entrée : |
---|
| 70 | Aucun |
---|
| 71 | Registres de retour : |
---|
| 72 | Aucun |
---|
| 73 | |
---|
| 74 | $A00A/$E00A (CALL $2A sur MO) : Formatage (DKFMT) |
---|
| 75 | Registres d’entrée : |
---|
| 76 | - $2048/$6048 Code $80 si vérification demandée, sinon $00 (floppy exclusivement) |
---|
| 77 | - $204D/$604D Facteur d’entrelacement de 1 à 15 (floppy exclusivement) |
---|
| 78 | Registres de retour : |
---|
| 79 | - C de CC à 0. Si erreur, C de CC à 1 et code d’erreur dans $204E/$604E. |
---|
| 80 | |
---|
| 81 | $A00D/$E00D (CALL $34 sur MO) : Lecture de la FAT (LECFA) |
---|
| 82 | Registres d’entrée : |
---|
| 83 | - $20ED/$60ED Pointeur sur la mémoire tampon de FAT (128 ou 256 octets selon la densité) |
---|
| 84 | Registres de retour : |
---|
| 85 | - C de CC à 1 si erreur de chargement. 0 si pas d’erreur. |
---|
| 86 | |
---|
| 87 | $A010/$E010 (CALL $38 sur MO) : Recherche d’un fichier (RECFI) |
---|
| 88 | Registres d’entrée : |
---|
| 89 | - La FAT a été chargée (entrée $A00D/$E00D) |
---|
| 90 | - $20E9-$20EA/$60E9-$60EA Pointeur sur la mémoire tampon de secteur |
---|
| 91 | - $20E7-$20E8/$60E7-$60E8 Pointeur sur le descripteur de fichier (11 octets) |
---|
| 92 | - $20F0/$60F0 Mode d’ouverture du fichier |
---|
| 93 | - $20EB/$60EB Type du fichier recherché |
---|
| 94 | - $20EC/$60EC Flag du fichier recherché |
---|
| 95 | Registres de retour : |
---|
| 96 | - C de CC à 1 si erreur de chargement. Le registre $20E5/$60E5 contient le code d’erreur du système d’exploitation logique $03 si I/O Error (aussi dans A). Registre à 0 et C de CC à 0 si pas d’erreur. |
---|
| 97 | - $20F9/$60F9 Numéro du secteur de l'entrée du fichier dans le catalogue. Si une sauvegarde avec écrasement est demandée ($03 dans le registre $20F0/$60F0), c’est le fichier nommé « SCRATCH.DOS » qui sera recherché. Si l’entrée du fichier n’a pas été trouvée, ce registre est à 0. ATTENTION! Le flag C de CC n’est pas mis à 1 dans ce dernier cas. |
---|
| 98 | - $20F6/$60F6 Numéro du premier bloc de fichier |
---|
| 99 | - $20F5/$60F5 Compteur de secteur à 0 |
---|
| 100 | - $20F7-$20F8/$60F7-$60F8 Nombre d’octets dans le dernier secteur du fichier (sur 16 bits) |
---|
| 101 | - $20FA-$20FB/$60FA-$60FB Pointeur sur l’entrée du fichier dans le secteur |
---|
| 102 | |
---|
| 103 | $A013/$E013 (CALL $3A sur MO) : Récupération de la place occupée par un fichier (RECUP) |
---|
| 104 | Registres d’entrée : |
---|
| 105 | - La FAT a été chargée (entrée $A00D/$E00D). |
---|
| 106 | - Le fichier à effacer doit avoir été recherché dans le catalogue au préalable (entrée $A010/$E010). |
---|
| 107 | Registres de retour : |
---|
| 108 | - C de CC à 1 si erreur de sauvegarde du secteur de catalogue. Le registre $20E5/$60E5 contient le code d’erreur du système d’exploitation logique $03 si I/O Error. Registre à 0 et C de CC à 0 si pas d’erreur. |
---|
| 109 | - Y contient le pointeur sur la mémoire tampon de FAT. |
---|
| 110 | - L’entrée du fichier a été effacée, le secteur de catalogue a été sauvé, la FAT a été mise à jour mais pas sauvée sur le disque. Pour sauver la FAT, positionner le mode « écriture d’un fichier sans écrasement » (code $02) et appeler la routine de clôture en $A022/$E022. |
---|
| 111 | |
---|
| 112 | $A016/$E016 (CALL $30 sur MO) : Ecriture d’un secteur (ECRSE) |
---|
| 113 | Registres d’entrée : |
---|
| 114 | - $20E9-$20EA/$60E9-$60EA Pointeur sur la mémoire tampon de secteur |
---|
| 115 | Registres de retour : |
---|
| 116 | - Le secteur courant est sauvé sur le disque. |
---|
| 117 | - C de CC à 0. Si erreur, C de CC à 1, code d’erreur dans $204E/$604E, code contrôleur $03 (IO Error) dans $20E5/$60E5, la FAT est rétablie. |
---|
| 118 | On peut remarquer que pour faciliter le travail du programmeur, le registre Y pointe sur le début du secteur tampon. |
---|
| 119 | |
---|
| 120 | $A019/$E019 (CALL $2E sur MO) : Allocation de départ (ALLOD) |
---|
| 121 | Registres d’entrée : |
---|
| 122 | - La FAT doit avoir été chargée. |
---|
| 123 | - $20E9-$20EA/$60E9-$60EA Pointeur sur la mémoire tampon de secteur |
---|
| 124 | - $20E7-$20E8/$60E7-$60E8 Pointeur sur le descripteur de fichier (11 octets) |
---|
| 125 | - $20F0/$60F0 Mode d’ouverture du fichier ($02 ou $03) |
---|
| 126 | - $20EB/$60EB Type du fichier |
---|
| 127 | - $20EC/$60EC Flag du fichier |
---|
| 128 | Registres de retour : |
---|
| 129 | - C de CC à 0. Si erreur, C de CC à 1, code d’erreur dans $204E/$604E, code d’erreur contrôleur dans $20E5/$60E5. |
---|
| 130 | - $20F6/$60F6 Nouveau numéro de bloc |
---|
| 131 | Le secteur de catalogue à été sauvé sur le disque avec: |
---|
| 132 | - Nom de fichier mis à jour (SCRATCH.DOS si code $03, nom du fichier courant si code $02). |
---|
| 133 | - Type de fichier mis à jour. |
---|
| 134 | - Flag de fichier mis à jour. |
---|
| 135 | - Bloc de départ du fichier mis à jour. |
---|
| 136 | |
---|
| 137 | $A01C/$E01C (CALL $2C sur MO) : Allocation d’un bloc (ALLOB) |
---|
| 138 | Registres d’entrée : |
---|
| 139 | - La FAT doit avoir été chargée. |
---|
| 140 | - $20F6-$60F6 Numéro du bloc courant |
---|
| 141 | Registres de retour : |
---|
| 142 | - Si FAT pleine, C de CC à 1. Le registre $20E5/$60E5 contient le code d’erreur du système d’exploitation logique $05 si « Disk Full ».Registre à 0 et C de CC à 0 si pas d’erreur. |
---|
| 143 | - $20F9/$60F9 Nouveau numéro de bloc |
---|
| 144 | - Dans la FAT, en mémoire, la nouvelle place passe de $FF à $00. |
---|
| 145 | |
---|
| 146 | $A01F/$E01F (CALL $36 sur MO) : Mise à jour cluster (MAJCL) |
---|
| 147 | Registres d’entrée : |
---|
| 148 | - $20F6/$60F6 Numéro du bloc courant |
---|
| 149 | Registres de retour : |
---|
| 150 | - $20F5/$60F5 Nombre de secteur du dernier bloc (initialisé à 1 pour écriture de bloc) |
---|
| 151 | - $20FA/$60FA Numéro du premier secteur du bloc (1 ou 9) |
---|
| 152 | - $20FB/$60FB Numéro de piste (sur 16 bits) |
---|
| 153 | |
---|
| 154 | $A022/$E022 (CALL $32 sur MO) : Fin du transfert (FINTR) |
---|
| 155 | Registres d’entrée : |
---|
| 156 | - La FAT a été chargée (entrée $A00D/$E00D) |
---|
| 157 | - Le fichier a été ouvert en mode sauvegarde. |
---|
| 158 | - $20E9-$20EA/$60E9-$60EA Pointeur sur la mémoire tampon de secteur |
---|
| 159 | - $20E7-$20E8/$60E7-$60E8 Pointeur sur le descripteur de fichier de 11 caractères |
---|
| 160 | - $20F0/$60F0 Mode d’ouverture du fichier ($02 ou $03) |
---|
| 161 | Registres de retour : |
---|
| 162 | - C de CC à 0. Si erreur, C de CC à 1 et code d’erreur dans $204E/$604E. |
---|
| 163 | Si le mode d’ouverture du fichier est $02 (sauvegarde sans écrasement), les opérations suivantes sont effectuées : |
---|
| 164 | - Rétablissement de la FAT en mémoire |
---|
| 165 | - Sauvegarde de la FAT sur le disque |
---|
| 166 | Si le mode d’ouverture du fichier est $03 (sauvegarde avec écrasement), les opérations suivantes son effectuées : |
---|
| 167 | - Recherche dans le catalogue du fichier de nom courant |
---|
| 168 | - Effacement du fichier de nom courant |
---|
| 169 | - Recherche du fichier SCRATCH.DOS |
---|
| 170 | - Remplacement du nom SCRATCH.DOS avec le nom de fichier courant |
---|
| 171 | - Ecriture du secteur de catalogue |
---|
| 172 | - Sauvegarde de la FAT sur le disque |
---|
| 173 | - Rétablissement de la FAT en mémoire |
---|
| 174 | ATTENTION ! Le nombre de secteurs du dernier bloc dans la FAT ainsi que la taille du dernier secteur dans le catalogue n’ont pas été mis à jour. Prévoyez d’inscrire l’un dans la FAT avant sa sauvegarde, puis recherchez le fichier en mode $02 dans le catalogue par l’entrée $A010/$E010, mettez l’autre à jour et sauvegardez le secteur par l’entrée $A016/$E016. |
---|
| 175 | |
---|
| 176 | $A025/$E025 : Fonctions standard avec numéro de secteur réel (QDD exclusivement). |
---|
| 177 | Equivalente aux fonctions standard en $A004/$E004 mais $204A/$604A doit être à $FF et le numéro de secteur de 1 à 400 dans le registre $204B-$204C/$604B-$604C. |
---|
| 178 | |
---|
| 179 | |
---|
| 180 | |
---|
| 181 | Procédures standard du système logique |
---|
| 182 | |
---|
| 183 | Lecture d’un fichier : |
---|
| 184 | - $A00D/$E00D Chargement de la FAT |
---|
| 185 | - Code $01 dans $20F0/$60F0 (lecture) |
---|
| 186 | - $A010/$E010 Recherche du fichier |
---|
| 187 | ...< chargement du fichier >... |
---|
| 188 | |
---|
| 189 | Sauvegarde d’un fichier sans écrasement: |
---|
| 190 | - $A00D/$E00D Chargement de la FAT |
---|
| 191 | - Code $02 dans $20F0/$60F0 (écriture sans écrasement) |
---|
| 192 | - $A019/$E019 Création du fichier |
---|
| 193 | - Si le fichier existe déjà, erreur et sort |
---|
| 194 | ...< sauvegarde du fichier >... |
---|
| 195 | - $A022/$E022 Clôture d’opération en écriture |
---|
| 196 | - Code $01 dans $20F0/$60F0 (lecture) |
---|
| 197 | - $A010/$E010 Recherche du fichier dans le catalogue |
---|
| 198 | - Mise à jour de la taille du dernier secteur dans le catalogue |
---|
| 199 | - $A016/$E016 Sauvegarde du secteur de catalogue |
---|
| 200 | |
---|
| 201 | Sauvegarde d’un fichier avec écrasement : |
---|
| 202 | - $A00D/$E00D Chargement de la FAT |
---|
| 203 | - Code $03 dans $20F0/$60F0 (écriture avec écrasement) |
---|
| 204 | - $A019/$E019 Création de l'entrée du fichier (SCRATCH.DOS si code $03, nom de fichier courant si code $02) |
---|
| 205 | ...<sauvegarde du fichier >... |
---|
| 206 | - $A022/$E022 Clôture d’opération en écriture (Efface fichier courant et renomme « SCRATCH.DOS » avec nom du fichier courant si code $03) |
---|
| 207 | - Code $01 dans $20F0/$60F0 (lecture) |
---|
| 208 | - $A010/$E010 Recherche du fichier dans le catalogue |
---|
| 209 | - Mise à jour de la taille du dernier secteur dans le catalogue |
---|
| 210 | - $A016/$E016 Sauvegarde du secteur de catalogue |
---|
| 211 | |
---|
| 212 | Effacement d’un fichier : |
---|
| 213 | - Code $02 dans $20F0/$60F0 (écriture sans écrasement) |
---|
| 214 | - $A00D/$E00D Chargement de la FAT |
---|
| 215 | - $A010/$E010 Recherche du fichier dans le catalogue |
---|
| 216 | - $A013/$E013 Effacement du fichier courant |
---|
| 217 | - $A022/$E022 Clôture d’opération en écriture |
---|
| 218 | |
---|