RÉALISEZ VOS CARTOUCHES PB5

(Première Partie)

Une nouvelle rubrique d'André Chéramy et Claude Sittler

 


 Le "Journal du Soft" no 9 (CEO-MAG no 87-88 de juillet- août1997, pages 30 et 31) et le Journal du Hard" no 9 (CEO-MAG no 90 d'octobre 1997,pages 6 et 7) vous ont montré comment remplacer dans votre Oric-1/Atmos la ROM d'origine (16 koctets) par une double ROM (32 koctets), que nous avons baptisée "Cartouche PB5 ". En effet, la ligne PB5 du VIA 6522 est utilisée pour basculer entre la première moitié (ROM0 accessible quand PB5 est à 0) et la seconde moitié (ROM1, accessible lorsque PB5 est à 1). La grande originalité de ce système, mis au point par François Sittler, par rapport à l'utilisation d'un interrupteur mécanique, réside dans la possibilité de commander par logiciel l'état de PB5 et donc de pouvoir basculer entre les deux ROMs sans avoir à rebooter. Une même application peut donc utiliser les deux ROMS.

 PATCH.002

La première cartouche PB5, appelée "CMB.ROM" a été décrite dans le "Journal du Soft" n'9. Cette application avait été conçue pour tourner sans Microdisc. En fait, puisque la ligne d'entrée/sortie PB5 n'est pas connectée dans l'Oric- 1 /Atmos, les développeurs n'ont jamais prêté aucune attention à son égard. Sédoric (toutes versions) "massacre" donc allègrement cette ligne d'entrée/sortie. Afin de pouvoir utiliser conjointement les cartouches PB5 et les lecteurs de disquettes, un patch a été mis au point pour la version 3.0 de Sédoric. Placé dans la commande INIST, ce patch se charge automatiquement lors du boot. Vous le trouverez dans la disquette trimestrielle (version PC) de septembre 1997 (fichier PATCH. 002) et dans la disquette de mars 1998 (fichier PB5KIT.ZIP). fl peut aussi être élaboré très facilement en suivant les instructions de "Sédoric? Do It Yourself " no 20 (CEO-MAG no 90 d'octobre 1997, pages 9 et 1 0).

 EUPHORIC

Si vous êtes utilisateur de l'émulateur Euphoric de Fabrice Francès (version 0.99k et ultérieures), soyez ravis car vous pouvez utiliser dès maintenant les cartouches PB5, sans avoir d'autre souci que de modifier les trois lignes suivantes dans le fichier EUPHORIC.INI:

DiskController=Microdisc
AtmosRom=pb5lib1.rom
SelectRomWithPB5=Yes

et de booter avec la disquette PB5.DSK. Vous trouverez tous les éléments nécessaires, prêts à l'emploi, dans la disquette de mars 1998 du CEO (version PC). Si vous n'êtes pas abonné à la version PC, vous pouvez charger EUPHORIC.ZIP et PB5KIT.ZIP dans la page de Fabrice. http://www.ensica.fr/oric/archive.html

ORIC-I/ATMOS

Si vous êtes utilisateur d'un Oric-1/Atmos "en chair et en os", la première chose à faire sera de vous procurer une vraie cartouche PB5, c'est à dire une EPROM 27256 contenant par exemple les fichiers PB5LIB1.ROM (qui sera le prochain objet de cette nouvelle rubrique) ou CMB.ROM ("Journal du Soft" no 9). Si vous n'avez pas de programmateur d'EPROM n'hésitez pas à nous contacter. Ensuite, il vous faudra souder un simple fil entre la broche n°27 de cette EPROM et la broche n°15 du VIA 6522 (voir le "Journal du Hard" no 9) et mettre en place cette EPROM à la place de la ROM d'origine. A ce stade, vous pourrez utiliser toutes les cartouches PB5, mais sans lecteur de disquette. Il vous faudra donc ressortir l'alimentation 9V, qui fut livrée avec votre Oric-1/Atmos.

 Cette restriction est due au fait que le signal ROMDIS, envoyé par la carte contrôleur de votre lecteur de disquette et chargé de désactiver la ROM arrive normalement sur la broche n°27 des EPROMs 27128 or pour les EPROMs de capacité supérieure, cette broche change de fonction (voir le "Journal du Soft" no 3 pour le brochage des différentes EPROMS). Le signal ROMDIS doit donc être re-dirigé, ce qui est le cas dans les Atmos Quadricéphale, Octocéphale et Céphale+++ (voir plus loin). Ceci mis à part, les cartouches PB5 marchent parfaitement avec un Oric-1/Atmos auquel on a simplement ajouté le fil dont il est question si dessus. Il suffit de remettre en place la ROM d'origine pour pouvoir utiliser à nouveau un lecteur de disquette.

 QUADRICEPHALE, OCTOCEPHALE ET CEPHALE+++

 Si votre machine a été transformée pour utiliser des EPROMs de taille supérieure, c'est à dire transformée en Quadricéphale (qui accepte 4 ROMS), en Octocéphale (qui accepte 8 ROMS), ou en Céphale +++ (qui accepte jusqu'à 64 ROMS!) vous pourrez non seulement retrouver l'usage de votre lecteur de disquette, mais aussi faire cohabiter des ROMs et des cartouches PB5. En effet, comme indiqué au début de cet article, le terme "Cartouche PB5" correspond à un bloc de 32 koctets dont la première moitié, appelée ROM0, est accessible quand PB5 est à 0 et la seconde moitié, appelée ROM1, est accessible lorsque PB5 est à 1. Lorsque ce bloc de 32 koctets est shooté dans une EPROM 27256, on obtient une cartouche simple. Pour les Atmos multicéphales, il est possible de shooter plusieurs cartouches PB5 dans une EPROM de capacité supérieure. Dans ce cas, PB5 permet toujours de basculer entre ROM0 et ROM1, mais pour changer de cartouche PB5, il faut manoeuvrer des interrupteurs mécaniques et bien sûr rebooter. Rappel, pour utiliser un Microdisc, il faut booter avec le PATCH. 002 (voir plus haut).

 

DEFINITIONS ET PROJETS

 Il est parfaitement possible de programmer complètement les deux parties d'une cartouche PB5, mais ceci nécessite de prévoir l'initialisation de la machine lors du boot, la gestion d'un interpréteur de commandes etc., c'est à dire beaucoup de travail. En pratique et sauf contrainte spéciale, il est plus simple de mettre dans la ROM 1 une version légèrement modifiée de la ROM V1. 1. La cartouche bootera alors de façon normale et pourra être utilisée pour toutes les tâches habituelles. La ROM0 reste invisible, tant qu'on ne fait pas appel à son contenu. Dans ce premier article, nous allons donc décrire les modifications minimales à apporter à la ROM V1. 1 pour élaborer une ROM 1 universelle à laquelle il sera ensuite possible d'accoler diverses ROM0. Dans le prochain article, nous donnerons quelques exemples illustrant les différentes manières d'exploiter la ROM0. Ce faisant nous obtiendrons la cartouche de démonstration "PB5LIB 1

 

LA ROM1, PRINCIPES DE BASE

Si vous désirez lancer automatiquement lors du boot un programme BASIC contenu dans la ROM0, reportez vous au "Journal du Soft" n° 9 qui décrit une ROM 1 adaptée à cet usage. Nous allons décrire ci-dessous une ROM1 plus universelle qui permet de booter normalement puis d'exploiter le contenu de la ROM0. Vous pouvez aussi comparer les modifications indiquées dans le "Journal du Soft" n° 9 et celles qui suivent pour bien comprendre ce qui se passe et mieux maîtriser le processus.

 Rappelons d'abord comment procéder pour éditer une ROM:

 1)Pour obtenir une copie de la ROM V1. 1 : Bootez de frais, faites HIMEM#FFF<RETURN>, chargez en mémoire le fichier ROMATMOS.COM (livré avec Sédoric) avec LOAD"ROMATMOS",N et enfin sauvez la ROM V 1. 1 avec SAVE "ATMOS.ROM",A# 1000,E#4FFF<RETURN>

 

2)Pour éditer la ROM1 universelle, tapez: COPY"ATMOS.ROM"TO"ROM1.ROM"<RETURN>, bootez de frais, faites HIMEM#FFF<RETURN> et charger cette copie : LOAD"ROM1.ROM"<RETURN> ainsi que votre moniteur/assembleur par exemple MONAC 1 <RETURN>. Les adresses de la ROM 1 en RAM vont de #1000 à #4FFF et correspondent aux adresses #C000 à #FFFF en ROM.

 Et maintenant éditez les zones suivantes de votre ROM 1

1)En E77D (377D en RAM), la valeur #40 doit être remplacée par #60, ceci pour préserver la gestion de PB5.

2)De F816 à F864 (4816 à 4864 en RAM), remplacez la routine "Générer les caractères alternés" par les éléments suivants :

2a) En F816 neutralisation du sous-programme "Générer les caractères alternés"

 4816 60 RTS tout appel à l'ancienne routine est annulé par un retour immédiat au point d'appel

2b) En F817 routine "Mise en place du sous-programme de copie". Un appel à cette routine F817 en ROM1 installe en BFE0 en RAM un sous-programme capable de recopier en RAM n'importe quelle zone de la ROM0. Avant d'appeler BFE0 en RAM il faudra 'initialiser les adresses 00/01 avec l'adresse du début de cette zone en ROM0, les adresses 02/03 avec l'adresse cible en RAM et l'adresse 04 avec le nombre de pages à recopier

(une "page" correspond à 256 octets).

 4817

78

SEI

interdit les interruptions

4818

A0 IE

LDY 91E

index pour copier #1F = 31 octets

481A

B9 25 F8

LDA F825,Y

lit les octets F825 à F843 en ROM1

4810

99 E0 BF

STA BFE0,Y

les copie de BFE0 à BFFE en RAM

4820

88

DEY

vise octet suivant

4821

10 F7

BPL F81A

reboucle tant qu'il en reste

4823

58

CLI

autorise les interruptions

4824

60

RTS

 

 

2c) En F825 zone de DATA = code du sous-programme de copie

 4825

EAEAEA

3 NOPs

qui se retrouveront de BFE0 à BFE2

4828

78

SEI

interdit les interruptions

4829

A6 04

LDX 04

lit en 04 le nombre de pages à copier

482B

20 46 F8

JSR F846

routine "SWAP" qui bascule PB5

482E

A0 00

LDY #00

index de copie

4830

BI 00

LDA (00),Y

lit un octet selon adresse en 00/01 (source)

4832

9102

STA (02),Y

et l'écrit selon adresse en 02/03 (cible)

4834

C8

INY

vise l'octet suivant et reboucle

4835

D0 F9

BNE 4830

tant que 256 octets pas copiés

4837

E6 01

INC 01

page suivante en lecture

4839

E6 03

INC 03

page suivante en écriture

483B

CA

DEX

décrémente le nombre de pages à copier

483C

D0 F2

BNE 4830

reboucle tant qu'il en reste

483E

20 46 F8

JSR F846

routine "SWAP" qui bascule PB 5

4841

58

CLI

autorise les interruptions

4842

60

RTS

et retourne

4843

EAEAEA

3 NOPs

 

 

2d) En F846 routine "SWAP" qui bascule BP5, pour passer de la ROM0 à la ROM1 et vice-versa. C'est le coeur des cartouches PB5.

 4846

AD 00 03

LDA 0300

lit l'état actuel du registre de data du Port B

4849

4920

EOR #20

masque 0010 0000 pour inverser b5 représentant PB5

484B

800003

STA 0300

les autres bits resteront tels quels

484E

AD 02 03

LDA 0302

lit l'état actuel du registre de direction du Port B

4851

09 20

ORA #20

masque 0010 0000 pour forcer PB5 à un (en sortie)

4853

800203

STA 0302

les autres bits resteront tels quels

4856

60

RTS

 

 

2e) En F857 routine "Implantation et lancement d'un progranune BASIC"

 4857

20 17 F8

JSR F817

met en place la routine de copie

485A

20 E0 BF

JSR BFE0

déplace le programme BASIC de ROM0 > RAM

4850

20 08 C7

JSR C708

initialise les pointeurs BASIC

4860

4C CI C8

JNP C8CI

lance l'exécution du programme BASIC

4863

EA EA

2NOPs

 

 

Notez que si la routine de copie est déjà en place, on peut appeler la routine en F85A au lieu de F857. Dans tous les cas, il faudra au préalable initialiser les adresses 00/01 (source) avec #C000 (ou toute autre adresse dans la ROM0 où se trouve le programme BASIC à recopier), les adresses 02/03 (cible) avec #0501 et adresse 04 avec le nombre de pages à copier (selon la longueur du programme BASIC). Enfin, si vous désirez mettre en place un programme BASIC sans le lancer, il faudra appeler successivement les routines F817, BFE0 et enfin C708.

3) Modification de la routine "INITIALISER LE VIA 6522" pour préserver la gestion de PB5.

En F9B0 remplacez #F7 par #B7, en F9B2 remplacez #02 par #00, en F9B5 remplacez #B7 par #F7 et en F9B7 remplacez #00 par #02.

Vérifiez votre travail et sauvez-le: SAVE"ROMI-ROM",A#1000,E#4FFF<RETURN>. Vérifiez la checksum du fichier: CHKSUM"ROM1.ROM",AUTO<RETURN>. Si vous avez correctement travaillé, le résultat doit être #20B2.

Rendez-vous dans notre article n°2 pour la description d'une ROM0 expérimentale illustrant les diverses modalités d'exploitation des cartouches PB5.


Les articles du mois