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.