Emulation du Tavernier 6809

Couvre tous les domaines de l'émulation logicielle ou de la virtualisation ainsi que les discussions sur les divers outils associés.

Modérateurs : Papy.G, fneck, Carl

Répondre
Daniel
Messages : 17417
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Emulation du Tavernier 6809

Message par Daniel »

On parle beaucoup du Tavernier grâce aux passionnés qui s'y intéressent, d'abord un seul, puis deux, et bientôt avec l'effet boule de neige ils seront des milliers :wink: :wink: :wink:

Alors je renouvelle ma proposition faite en juin 2011, dans le fil de discussion "Tavernier 6809" de la catégorie "Ordinateurs 8 bits" :
http://forum.system-cfg.com/viewtopic.php?f=1&t=3041
Daniel a écrit :Le Tavernier est rare, français, non encore émulé. J'ai une petite idée derrière la tête, mais il est trop tôt pour en parler.
Aujourd'hui je peux proposer de l'émuler en réutilisant une partie des modules de dcmoto. Je n'ai pas la machine, il me faudra donc une aide extérieure, mais avec les éléments déjà rassemblés et la documentation du Haut Parleur je crois que c'est jouable. J'ai fait un essai ce soir, il n'a pas été très loin puisque l'émulateur s'est planté à la quatrième instruction, mais ce n'est pas étonnant car j'ai utilisé le programme du MO5, qui n'a pas la même architecture. Exécuter trois instructions sans erreur est déjà très encourageant.

Image

[Edit - 21:40]
Gros progrès : j'ai mis de la RAM en $C000-$EFFF (en remplacement de la ROM du MO5) et le programme tourne sans plantage. Il écrit même quelque chose en mémoire vidéo (du MO5, pas du Tavernier :wink: ) et boucle aux alentours de $F441. C'est en très bonne voie :D
Image
Daniel
L'obstacle augmente mon ardeur.
Avatar de l’utilisateur
leduigou
Messages : 543
Inscription : 08 mai 2011 21:00
Localisation : Paris, 6ème

Re: Emulation du Tavernier 6809

Message par leduigou »

Excellent ! :D
Tu dois savoir plusieurs choses sur le Tavernier:
- Il y a dans l'EPROM des vérifications de l'architecture. Le PIA notamment est vérifié. S'il n'est pas présent, il y a plantage de l'EPROM;
- Il y a 2 switch sur la carte processeur qui déterminent si l'écran est présent et géré par la carte IVG, ou si le terminal doit être utilisé à une vitesse de 110, 300 ou 1200 bauds;
Il faut donc impérativement mettre les composants aux bons endroits. Voici la carte mémoire:
*
* Plan de la mémoire du Tavernier 6809
*
*
*
* Page Commune
* $FFFF Fin de la ROM
* $F000 Début de la ROM
* $EFFF Fin Mémoire système
* $EC00 Debut Mémoire système
* $EBFF Fin zone Périphériques
* $EB0C Timer
* $EBOB Timer
* $EB0A Timer
* $EBO9 Timer
* $EB08 Timer
* $EBO5 ACIA
* $EBO4 ACIA
* $EBO3 PIA
* $EBO2 PIA
* $EBO1 PIA
* $EBO0 PIA
* $EAFF Fin zone libre
* $E080 Registre selection lecteur
* $E003 Contrôleur disquettes
* $E002 Contrôleur disquettes
* $E001 Contrôleur disquettes
* $E000 Contrôleur disquettes
* Page 0 ---------------- Page 1 -- Page 2 -- Page 3 --
* $DFFF Fin Périphériques $DFFF $DFFF $DFFF Fin RAM
* $2FFF Fin IVG + PIA " " "
* $2081 CRT " " "
* $2080 CRT " " "
* $2000 PIA ACIA " " "
* $1FFF Fin RAM Video " " "
* $1000 Debut RAM Video " " "
* $0000 Vide $0000 $0000 $0000 Debut RAM
*
*
(ici, ça ne semble pas droit, mais sur mon listing c'est bien aligné !)
Je suppose que tu avais vu le travail de Pierrel5.

Je te transmettrais le désassemblé du moniteur dans son état actuel par MP (comme il n'est pas encore fini, je préfère ne pas le mettre en public sur le forum)

N'hésites pas à me poser des questions ...
Cordialement
Frédéric

Forget the C:\ prompt! Real computing starts with +++
Avatar de l’utilisateur
6502man
Messages : 12319
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: Emulation du Tavernier 6809

Message par 6502man »

Bravo Daniel, c'est un grand pas pour l'émulation :roll:

La Tavernier utilise quoi comme processeur vidéo, et il y a un OS en ROM ?
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
Avatar de l’utilisateur
leduigou
Messages : 543
Inscription : 08 mai 2011 21:00
Localisation : Paris, 6ème

Re: Emulation du Tavernier 6809

Message par leduigou »

Bonsoir 6502Man,

La carte IVG09 du Tavernier utilise un 6845 en page 0 avec une RAM dédiée et un codage sur 12 bits pour ajouter les caractères inversés, surbriance, ...

La RAM vidéo est de $1000 à $1FFF
Le 6845 en $2080
Le PIA est en $2000

La RAM programme est en Page 1. Il y a la place pour 2 pages supplémentaires d'environ 60 ko de mémoire ( en fait un peu moins car il y a de la RAM non paginée pour les piles et les registres systèmes.
Dans le moniteur, il faut appeler une interruption pour passer un page 0 puis revenir en page 1

Il n'y a pas d'OS en ROM, mais simplement un Moniteur avec des commandes de débuggage et un programme pour "Loader" le "Boot-loader" qui est sur la piste 0 de la disquette.
Il y a une EPROM pour le générateur de caractère mais elle n'est pas accessible depuis les programmes. Je ne l'ai pas encore dumpée.
Cordialement
Frédéric

Forget the C:\ prompt! Real computing starts with +++
Daniel
Messages : 17417
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Emulation du Tavernier 6809

Message par Daniel »

Petite progression aujourd'hui :
Le moniteur tourne sans planter, la lecture du clavier et l'envoi de caractères au terminal commencent à fonctionner.

Code : Tout sélectionner


TAVBUG09 V1.0
>D F100 F220


      0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F  
F100 9F 6E 86 01 A7 84 AD 9D FE D2 9E F4 6F 04 6F 05  .n..........o.o.
F110 CC 01 A6 A7 01 86 82 A7 84 E7 01 C6 12 E7 84 0F  ................
F120 7A B6 EB 00 84 60 10 8E FE 07 A1 A1 27 04 A1 A0  z....`......'...
F130 20 F8 EC 3F 26 04 0A 7A EC 39 ED 02 A6 8D 0C A8   ..?&..z.9......
F140 A7 8D F9 BE 8E EB 00 E6 8D 01 C2 3A A6 84 A1 8D  ...........:....
F150 0C 96 10 26 01 AF 8E EB 00 E6 8D 01 B1 3A A6 84  ...&.........:..
F160 A1 8D 0C 84 10 26 01 9D 6F 8D F9 96 6D 61 26 06  .....&..o...ma&.
F170 30 8D FF 54 3F 03 3F 06 17 07 E1 2A 0C 50 D7 FA  0..T?.?....*.P..
      0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F  
F180 5A 2B 06 A6 30 A7 B1 20 F7 AE 6A 9F 93 86 3E 3F  Z+..0.. ..j...>?
F190 01 33 E4 DF 95 4F 5F DD 9B DD 8F DD 91 C6 02 34  .3...O_........4
F1A0 07 17 06 22 30 8D 07 1C 81 2E 27 5A 30 8D 06 B7  ..."0.....'Z0...
F1B0 81 2F 27 52 81 20 23 14 34 02 6C 5F 81 2F 27 4F  ./'R. #.4.l_./'O
F1C0 17 05 D9 27 02 6A 5E 17 05 FC 20 E8 80 0D A7 5D  ...'.j^... ....]
F1D0 9E C4 E6 80 2A 10 9E EC 5C 27 F7 10 DE 95 30 8D  ....*...\'....0.
F1E0 01 7C 3F 02 20 90 5A E1 5F 24 03 3A 20 E4 31 5D  .|?. .Z._$.: .1]
F1F0 A6 5F 80 02 A7 5E 5A A6 80 A1 A2 26 EE 6A 5E 26  ._...^Z....&.j^&
      0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F  
F200 F5 3A EC 1E 30 8B 6D 5D 32 C4 AD 1E 16 FF 7A 6D  .:..0.m]2.....zm
F210 5E 2B C8 30 88 AE DC 9B 20 EC FE 04 42 06 E8 04  ^+.0.... ...B...
>
Daniel
L'obstacle augmente mon ardeur.
Avatar de l’utilisateur
6502man
Messages : 12319
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: Emulation du Tavernier 6809

Message par 6502man »

Pour les OS y a t'il des dumps existants ?
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
Avatar de l’utilisateur
leduigou
Messages : 543
Inscription : 08 mai 2011 21:00
Localisation : Paris, 6ème

Re: Emulation du Tavernier 6809

Message par leduigou »

Bonsoir,

Magnifique, tu es sur la bonne voie !
Si le moniteur marche, c'est que la mémoire, le PIA et l'Acia (si tu émules la sortie série) sont bonnes.

Je mets en copie une EPROM et une disquette système appairée. Il y a sur le Flex une particularité: quand tu utilise la double densité, la piste 0 reste en Simple densité. Mais pour les émulateurs, il faut habituellement mettre le même nombre de secteurs sur la piste 0 que sur les autres. C'est en tous cas ainsi que fonctionnaient les autres émulateurs de Flex.

La disquette que je vais te mettre est une disquette de PRODOS pour ne pas avoir de problème avec les protections du système mis sur les disquettes.
Archive.zip
Image disque PRODOS et TAVBUG
(69.07 Kio) Téléchargé 217 fois
Tu trouveras ici:
http://forum.system-cfg.com/viewtopic.p ... r&start=15
Beaucoup d'informations sur les disquettes, la protection, ...

A+
Cordialement
Frédéric

Forget the C:\ prompt! Real computing starts with +++
Daniel
Messages : 17417
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Emulation du Tavernier 6809

Message par Daniel »

Quand la disquette PRODOS se charge, elle envoie vers le terminal des séquences d'Escape et des caractères spéciaux dont je ne connais pas la signification. Existe-t'il une documentation sur ces codes ?

Une remarque sur cette disquette : elle contient 40 pistes de 10 secteurs de 256 octets en double face. Aucun problème pour la lire avec un émulateur, car le numéro de face n'est pas utilisé. Les secteurs sont numéroté de 1 à 20 (10 par face), et le numéro piste + le numéro de secteur sont suffisants pour localiser les données. Par contre, dans la routine SELTRK utilisée par le BOOT, on remarque que la face est déterminée en comparant le numéro de secteur à la valeur 18. Cette routine est donc prévue pour un format double face, 18 secteurs par piste. Sur la vraie machine, la disquette ne peut pas être utilisée avec 10 secteurs par piste. A moins que les secteurs soient numérotés de 1 à 10 puis de 19 à 38, mais c'est improbable.
Daniel
L'obstacle augmente mon ardeur.
Avatar de l’utilisateur
leduigou
Messages : 543
Inscription : 08 mai 2011 21:00
Localisation : Paris, 6ème

Re: Emulation du Tavernier 6809

Message par leduigou »

Bonsoir,

Tu progresse très vite, super ! :D

Pour les codes, c'est pas sûr à 100%, mais on doit avoir:Contrôle vidéo
ESC 0 ($27 $30) Vidéo Normale
ESC 1 ($27 $31) Vidéo clignotante
ESC 2 ($27 $32) Vidéo inversée
ESC 3 ($27 $33) Vidéo inversée clignotante
ESC 4 ($27 $34) Vidéo demi teinte
ESC 5 ($27 $35) Vidéo demi teinte clignotante
ESC 6 ($27 $36) Vidéo demi teinte inversée
ESC 7 ($27 $37) Vidéo demi teinte inversée clignotante

Contrôle curseur
ESC J ($27 $4A) Curseur à gauche
ESC L ($27 $4C) Curseur à droite
ESC I ($27 $49) Curseur en haut
ESC , ($27 $2C) Curseur en bas
ESC U ($27 $55) Scroll haut
ESC M ($27 $4D) Scroll bas
ESC O ($27 $4F) Scroll haut 1 écran
ESC . ($27 $2E) Scroll bas 1 écran

Contrôle position curseur
ESC = ($27 $3D XX YY) Positionne le curseur en XX YY
ESC C ($27 $43) Curseur Off
ESC E ($27 $45) Curseur On

Pour ce qui est du nombre de secteurs par faces, je crois que prodos teste le DD, et en cas d'échec, essaye le SD. Ainsi, le Tavernier, contrairement aux autres ordinateurs sous Flex accepte une 1ere piste indifféremment en SD ou DD.
Effectivement, les secteurs sont toujours numérotés consécutivement, donc de 1 à 10, puis de 11 à 20 pour le SD, ou de 1 à 18, puis de 19 à 36.
Si tout se passe bien avec l'interprétation des codes escape, tu dois avoir l'affichage que j'avais obtenu ici:
http://forum.system-cfg.com/viewtopic.p ... 1&start=60
(par respect envers l'ancien propriétaire, j'avais masqué son nom sur la copie d'écran)
Les commandes dir, free, list fonctionnent-elles ?
Pour mémoire, la doc du dos est ici
http://lab.nethence.com/frederic/Tavern ... er1983.pdf

A+
Cordialement
Frédéric

Forget the C:\ prompt! Real computing starts with +++
Daniel
Messages : 17417
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Emulation du Tavernier 6809

Message par Daniel »

Il me manque encore quelques correspondances de caractères graphiques et quelques séquences d'échappement, en particulier ESC F et ESC <. D'après la table des matières de "GMXBUG-09 User's Guide Version 2", la codification est probablement dans le chapitre 5. Malheureusement je n'ai pas réussi à le trouver.

J'ai modifié un peu la disquette pour masquer l'identité de l'ancien propriétaire (j'espère ne pas être poursuivi pour ça).

Image

La prochaine étape est de remplacer le logo Thomson, et de se pencher sur l'erreur # 4. A suivre...
Daniel
L'obstacle augmente mon ardeur.
Marcopolo

Re: Emulation du Tavernier 6809

Message par Marcopolo »

Génial !
Avatar de l’utilisateur
leduigou
Messages : 543
Inscription : 08 mai 2011 21:00
Localisation : Paris, 6ème

Re: Emulation du Tavernier 6809

Message par leduigou »

Super ! Cela commence à ressembler au vrai !

L'erreur 4 indique que le fichier est introuvable. Cela n'est pas un problème en soit car j'ai retiré le INITIAL.TXT qui contient les commandes à lancer au démarrage.
Par contre il devrait charger le fichier ERREURS.SYS qui traduit en texte les codes d'erreurs.

ERREURS.SYS est-il sur la disquette ?
Que donne un DIR 0 ? Cela affiche-t-il la liste des fichiers ?

A+
Cordialement
Frédéric

Forget the C:\ prompt! Real computing starts with +++
Avatar de l’utilisateur
6502man
Messages : 12319
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: Emulation du Tavernier 6809

Message par 6502man »

Superbe.

Quel génie Daniel, ca fonctionne du premier coup et de plus très rapide :D

Félicitations pour ces résultats très encourageants :D
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
Daniel
Messages : 17417
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Emulation du Tavernier 6809

Message par Daniel »

Merci pour vos encouragements 8)

En réalité ça a été très vite grâce à l'utilisation de la structure de dcmoto, mais je n'ai pas programmé grand chose : émulation très sommaire du PIA et de l'ACIA, quelques fonctions du contrôleur disquette, émulation incomplète du terminal. Il reste encore beaucoup à faire et à perfectionner, il faudra encore du temps pour arriver à maturité. Et aussi enlever les traces d'émulation Thomson qui se retrouvent un peu partout dans le code.

Dans le chargement du DOS il y a certainement un gros bug car aucune commande n'est reconnue. Ce n'est pas surprenant, et probablement facile à corriger, il faut juste trouver le temps...
test_dos.png
test_dos.png (7.25 Kio) Consulté 6738 fois
Daniel
L'obstacle augmente mon ardeur.
Avatar de l’utilisateur
leduigou
Messages : 543
Inscription : 08 mai 2011 21:00
Localisation : Paris, 6ème

Re: Emulation du Tavernier 6809

Message par leduigou »

C'est un problème d'accès à la disquette.
On obtient exactement ce problème quand le contrôleur de disquette retourne une erreur.
GET donne une autre réponse car c'est une commande qui est dans le DOS.

Si tu mets un Trace sur les instructions de lectures de disquettes, tu devrais trouver une fonction qui retourne une fonction d'erreur.
Les fonctions du Flex sont documentées dans le listing qui suit.

Bon courage :wink:

Extrait des adresses
DE00 ORG $DE00

>DE00 7E DE3C DREAD JMP LDE3C
DE03 7E DEE5 WRITE JMP LDEE5
DE06 7E DF3A VERFY JMP LDF3A
DE09 7E DF5A RESTOR JMP LDF5A
DE0C 7E DF70 DRIVE JMP LDF70
DE0F 7E DFC7 CHECK JMP LDFC7
DE12 7E DFCF QUICK JMP LDFCF
>DE15 7E DE2C COLDS JMP LDE2C
>DE18 7E DE36 WARMS JMP LDE36

Driver de disquettes:
* DISASSEMBLY BY DYNAMITE OF 1.PRODOS.SYS

* STANDARD PRE-NAMED LABEL EQUATES

LINBUF EQU $C080
SYSFCB EQU $C840
RETADR EQU $CC43
BASFCB EQU $D409
CURFCB EQU $D40B

* EXTERNAL LABEL EQUATES

CMDREG EQU $F000 CMDREG
TRKREG EQU $F001 TRKREG
SECREG EQU $F002 SECREG
DATREG EQU $F003 DATREG


ORG $DE00

DREAD JMP READ READ Read a single sector
DWRITE JMP WRITE WRITE Write a single sector
DVERFY JMP VERIFY VERIFY Verify last sector written
DRESTOR JMP RESTORE RESTORE Restore head to track #0
DDRIVE JMP DRIVE DRIVE Select the specified drive
DCHECK JMP CHKRDY CHKRDY Check for drive ready
DQUICK JMP QUICK QUICK Quick check for drive ready
DCOLDS JMP INIT INIT Driver initialize (cold start)
DWARMS JMP WARM WARM Driver initialize (warm start)
DSEEK JMP SEEKIT SEEK Seek to specified track
DRVTBL FCB $00 MAX SECTOR PER SIDE
LDE1F FCB $DE,$DD,$DB,$D7 DRIVE PRESENT
FCB $00
LDE24 FCB $00 CURRENT DRIVE
LDE25 FCB $00,$00,$00,$00 DRIVE TRACK MEMORY REGISTER
LDE29 FCB $00 COPY OF STATUS REG
LDE2A FCB $00 CURRENT SIDE MASQ
LDE2B FCB $00,$00 STEP RATE

* INIT AND WARM
*
* DRIVER INITIALIZATION
INIT LDX #$DE24 POINT TO VARIABLES
LDB #8 NO. OF BYTES TO CLEAR
LDE31 CLR 0,X+ CLEAR THE STORAGE
DECB
BNE LDE31
WARM LDA #$DF SET MASQ
STA LE080 IN DRIVE REG
RTS

* READ This routine reads the specified sector into memory at the
* specified address. This routine should perform a seek
* operation if necessary. A sector is 256 bytes in length.
*
* ENTRY - (X) = Address in memory where sector is to be placed.
* (A) = Track Number
* (B) = Sector Number
*
* EXIT - (X) May be destroyed
* (A) May be destroyed
* (B) = Error condition
* (Z) = 1 if no error
* = 0 if an error
READ BSR SEEKIT
TST FBFLAG spooling active?
BEQ LDE45 no - proceed
SWI3 give spooler opportunity to run
LDE45 ORCC #$50 disable FIRQ and IRQ
LDA DATREG load command register (useless)
LDA #$8C read sector command
ORA LDE2A CURRENT SIDE MASQ
STA CMDREG issue command
JSR DELAY wait for WD2793 to accept command
CLRB set byte counter
LDE56 LDA CMDREG
BITA #2 TEST DATA READY ?
BNE LDE67 GET IT
BITA #1 STILL BUSY ?
BNE LDE56 LOOP
TFR A,B
BSR LDE84
BRA LDE71

LDE67 LDA DATREG
STA 0,X+ STORE IN FCB
DECB
BNE LDE56 MORE TO COME ?
BSR LDE76
LDE71 BITB #$1C
ANDCC #$AF
RTS

LDE76 TST FBFLAG spooling active?
BEQ LDE7D no - proceed
SWI3 give spooler opportunity to run
LDE7D LDB CMDREG
BITB #1 STILL BUSY ?
BNE LDE7D YES LOOP
LDE84 STB LDE29 SAVES STATUS REG
BITB #$10 RECORD NOT FOUND ERROR ?
BEQ LDEAC NO, PROCEED
LDY #LDE1F
LDA LDE24
LDB A,Y
BITB #$10
BEQ LDEB0
TST LDE23
BNE LDEA1
EORB #$20
STB A,Y

*SET MAX SECTOR BY SIDE
LDEA1 LDA #$0A MAX TRACK SD
BITB #$20
BNE LDEA9
LDA #$12
LDEA9 STA LDE1E
LDEAC LDB LDE29
RTS

LDEB0 LDA #$0F
BRA LDEA9

* SEEK Seeks to the track specified in the 'A' accumulator. In
* double-sided systems, this routine should also select the
* correct side depending on the sector number supplied in 'B'.
*
* ENTRY - (A) = Track Number
* (B) = Sector Number
*
* EXIT - (X) May be destroyed (See text)
* (A) May be destroyed (See text)
* (B) = Error condition
* (Z) = 1 if no error
* = 0 if an error
SEEKIT LBSR LDFB5 WAIT FOR DRIVE READY
CLR LDE2A SIDE 1
CMPB DRVTBL COMPARE TO MAX SECTOR PER SIDE
BLS LDEC5 SIDE 1, JUMP
INC LDE2A MASQ FOR CURRENT SIDE
INC LDE2A
LDEC5 STB SECREG SET SECTOR
CMPA TRKREG CHECK TRACK
BEQ LDEE2 CURRENT TRACK ?
STA DATREG NO, STORE NEW TRACK
JSR DELAY
LDA #$18 SET SEEK COMMAND
ORA LDE2B SET INTERRUPT COMMAND
STA CMDREG SET COMMAND
JSR DELAY
BSR LDE76 CHECK RECORD NOT FOUND ERROR ?
BITB #$10
LDEE2 JMP DELAY DELAY AND RETURN

* WRITE This routine writes the information from the specifed memory
* buffer area to the disk sector specified. This routine should
* perform a seek operation if necessary. A sector is 256 bytes
* in length.
*
* ENTRY - (X) = Address of 256 memory buffer containing data
* to be written to disk
* (A) = Track Number
* (B) = Sector Number
*
* EXIT - (X) May be destroyed
* (A) May be destroyed
* (B) = Error condition
* (Z) = 1 if no error
* = 0 if an error
WRITE BSR SEEKIT
TST FBFLAG
BEQ LDEEE
SWI3
LDEEE ORCC #$50
LDB DATREG
LDB #$AC
ORB LDE2A
LDA 0,X+
STA DATREG
STB CMDREG
JSR DELAY
LDB #2
LDF05 BITB CMDREG
BEQ LDF0F
LDF0A STA DATREG
LDA 0,X+
LDF0F BITB CMDREG
BNE LDF0A
BITB CMDREG
BNE LDF0A
BITB CMDREG
BNE LDF0A
STA LDE29
LDA #1
BITA CMDREG
BEQ LDF32
LDA LDE29
BITB CMDREG
BNE LDF0A
BRA LDF05

LDF32 JSR LDE76
BITB #$5C
LDF37 ANDCC #$AF
RTS

* VERIFY The sector just written to the disk is to be verified to
* determine if there are CRC errors. No seek is required as
* this routine will only be called immediately after a write
* single sector operation.
*
* ENTRY - No entry parameters
*
* EXIT - (X) May be destroyed
* (A) May be destroyed
* (B) = Error condition
* (Z) = 1 if no error
* = 0 if an error
VERIFY BSR LDFB5
TST FBFLAG
BEQ LDF43
SWI3
LDF43 ORCC #$50
LDA DATREG
LDA #$8C
ORA LDE2A
STA CMDREG
JSR DELAY
JSR LDE76
BITB #$18
BRA LDF37
LDF5A PSHS X
BSR DRIVE
LDA #8
ORA LDE2B
STA CMDREG
JSR DELAY
JSR LDE76
BITB #$D8
PULS X,PC

* DRIVE The specified drive is to be selected. The drive is specified
* in the FCB pointed to by the contents of the X register. Note
* that the drive number is the 4th byte of the FCB.
*
* ENTRY - (X) = FCB address (3,X contains drive number)
*
* EXIT - (X) May be destroyed
* (A) May be destroyed
* (B) = $0F if non-existent drive
* = Error condition otherwise
* (Z) = 1 if no error
* = 0 if an error
* (C) = 0 if no error
* = 1 if an error
DRIVE LDA 3,X GET DRIVE NUMBER
CMPA #3 ENSURE IT'S < 4
BLS LDF7B BRANCH IF OK
LDF76 LDB #$0F ELSE SET ERROR VALUE
ORCC #1
RTS RETURN
LDF7B LDY #LDE1F DRIVE TRACK MEMORY REGISTER
LDB A,Y GET CURRENT TRACK OF TARGET DRIVE
BEQ LDF76
JSR LDFE1 FIND TRACK
LDB TRKREG GET CURRENT TRACK
STB 0,X SAVE IT IN REPOSITORY
STA LDE24 SAVE CURRENT DRIVE
LDB A,Y
STB LDE29 SAVE TARGET TRACK
JSR LDEA1 SET MAX SECTOR BY SIDE
CLR LDE2B CLEAR STEP RATE
BITB #$C0
BNE LDFA0
NOP
NOP
NOP
LDFA0 STB LE080 SET NEW DRIVE
BSR LDFE1 FIND NEW TRACK
LDA 0,X GET IT
STA TRKREG PUT NEW TRACK IN WD
BSR LDFB5 WAIT FOR DRIVE READY
LDB CMDREG
BMI LDFDE
LDFB1 CLRB
ANDCC #$FE
RTS

* WAIT FOR DRIVE READY
LDFB5 PSHS A,X
LDX #L0000
LDFBA LEAX -1,X
BEQ LDFC5
NOP
NOP
LDA CMDREG
BMI LDFBA
LDFC5 PULS A,X,PC

CHKRDY BSR DRIVE
BEQ LDFB5
LDB #$80
BRA LDFDE
QUICK LDB CMDREG
BMI LDFDE
LEAX -1,X
NOP
LEAX 1,X
LDB CMDREG
BPL LDFB1
LDFDE ORCC #1
RTS
* FIND TRACK
LDFE1 LDX #LDE25
LDB LDE24 CURDRV
BEQ LDFEA
ABX
LDFEA RTS

DELAY BSR DEL1
DEL1 BSR LDFEF
DEL2 BSR DEL3
DEL3 RTS

END COLDS
Cordialement
Frédéric

Forget the C:\ prompt! Real computing starts with +++
Répondre