16 FONCTIONNEMENT DE LA PILE MATÉRIELLE DU 6502 (2)
18 3D MAZE, LE TAPE-INS DU MOIS
Edito
A l’approche de la visu d’été (à priori le 15/6) ; Steve, Simon, André et Yann nous offrent de nouvelles découvertes à faire avec notre oric. Nous ne remercierons jamais assez ces mousquetaires de la préservation, qui nous permettent mois après mois d’aller plus loin avec notre ordinateur préféré, de découvrir quelques lignes perdues dans un magazine … Bientot, Voyageur nous proposera de nouvelles modifications à réaliser sur nos Oric (je dis «nos» car je me vois mal faire des modifications sur mon unique Oric). Préparez vos fers à souder.
Fasciné par certaines utilisations détournées de la pile de matériel du 6502, telles que les programmes de protections, j’ai voulu en apprendre davantage sur son fonctionnement. Je vous propose donc ici la traduction partielle d’un sujet dont la version originale se trouve à l’adresse suivante : http://wilsonminesco.com/stacks/
QUELQUES DEFINITIONS
Le type de pile dont il est question ici est une partie de la mémoire vive utilisée pour le stockage temporaire de données, qu’il s’agisse de variables ou d’adresses, avec comme mode d’accès, dernier entré, premier sorti (Last In First Out). On compare généralement ce type de pile à une pile d’assiettes dans un meuble à ressorts que l’on peut trouver à côté d’un buffet restaurant.
La quantité de compression ou
d’étirement des ressorts est proportionnelle au poids des assiettes que le
meuble contient, de sorte que tant que le meuble n’est pas rempli complètement,
un employé peut ajouter n’importe quel nombre d’assiettes récemment lavées et
les assiettes seront toujours dans la même position au sommet, prêtes pour le
prochain client.
D’habitude, ni l’employé ni le client
n’ont besoin de savoir combien d’assiettes chaudes sont stockées en dessous.
On peut aussi prendre l’exemple d’une tige métallique avec un tas de papiers embrochés. Vous pouvez voir les documents qui sont sous le sommet, et vous pourriez même lire ou écrire sur eux dans une certaine mesure sans retirer ceux qui sont au-dessus, mais le retrait ou l’ajout réel de documents a toujours lieu par le sommet.
Le contraire d’une pile (ou mémoire
LIFO) serait une mémoire de type premier entré, premier sorti (FIFO) ou file
d’attente, qui peut dans ce cas être comparée au convoyeur d’une machine à
rayons X dans un aéroport. Sur cette machine, les affaires passent d’un côté à
un autre des rayons X, dans le même ordre qu’elles sont entrées.
Contrairement à la pile d’assiettes,
une pile de nombres dans la mémoire de l’ordinateur ne se déplace pas de haut
en bas quand quelque chose est ajouté ou enlevé de la pile. Il serait en effet
contre-productif de déplacer toutes ces données vers le haut ou vers le bas
comme pour les assiettes, alors qu’il est plus simple d’utiliser un pointeur
réglable pour savoir où se trouve le haut ou, en fait, dans le cas de la pile matériel
du 6502, quelle est l’adresse RAM qui est la prochaine disponible pour mettre quelque
chose sur la pile.
Ce pointeur est le registre S (Stack
pointer) du 6502.
Dès lors, si l’analogie du
distributeur d’assiettes ne tient plus, pourquoi l’évoquer ?
En fait, ce qu’il convient surtout de
retenir ici, c’est qu’habituellement, on ne s’occupe que de ce qui se trouve
au-dessus de la pile, sans se soucier de la profondeur de celle-ci, comme un
navire en pleine mer qui flotte de la même manière que la profondeur de l’eau
soit de 100 mètres ou de 1000 mètres. Tant qu’une action ou une routine dispose
des éléments de la pile dont elle a besoin, peu importe combien d’autres éléments
sont plus bas dans la pile, en attendant d’être utilisés par d’autres routines
ou parties d’une routine.
La pile du processeur 6502 permet de
stocker des adresses pour des sous-routines et des interruptions (moins
fréquentes que pour des sous-routines) ainsi que des variables.
C’est dans la première page du 6502 ($0100-$01FF)
que réside la pile de matériel. Les tests montrent d’ailleurs que contrairement
à une légende urbaine, cette zone mémoire est beaucoup plus grande que ce dont
le programmeur a réellement besoin.
Le pointeur de la pile de matériel
est le registre S qui n’a que 8 bits de largeur; le 6502 ajustant
automatiquement le numéro de page à $01 pour tous les accès à la pile. La pile
de matériel en page 1 se développe vers le bas, et non vers le haut. Toute routine
de réinitialisation doit donc initialiser le pointeur de pile au sommet de
l’espace disponible. Il s’agit habituellement de l’adresse $01FF. Cette routine
s’écrira simplement :
LDX #$FF ; Initialise X au sommet de la pile TXS ; Transfère dans le pointeur de pile
Puisque la pile se développe vers le bas, le pointeur de pile se décrémente après chaque octet poussé
sur la pile, et s’incrémente avant
que chaque octet ne soit tiré hors de la pile.
ADRESSES DE SOUS-ROUTINE ET NIDIFICATION
Une sous-routine est une partie de votre
programme dont vous avez besoin à de multiples reprises et à différents
endroits. Au lieu d’avoir une copie de cette routine à chaque endroit où vous en
avez besoin, vous l’écrivez une fois pour toutes et vous l’appelez depuis la
portion de programme requise. Le compteur de programme se rend à cette
sous-routine puis doit pointer de nouveau sur la routine d’appel pour reprendre
l’exécution. Pour savoir où revenir, le compteur de programme (donc l’adresse
de retour) a au préalable été sauvée sur la pile.
C’est ce que réalise l’instruction JSR :
« Jump, Saving
Return address » (JSR est habituellement traduit
par « Jump to SubRoutine », ce
qui fonctionne tout aussi bien mais n’est pas tout à fait exact.) Supposons maintenant
que cette routine doive en appeler d’autres. Comme chaque JSR met l’adresse de
retour sur la pile, les adresses de retour nécessaires en premier lieu seront
les dernières stockées sur la pile.
La nidification est ce qui convient de mieux pour ce genre de
situation. On appelle nidification
(ou imbrication), le fait qu’une sous-routine en appelle une autre, qui à son
tour en appelle une autre, et ainsi de suite. Si vous n’aviez pas besoin de la nidification, vous pourriez inscrire
l’adresse de retour dans une variable ou un registre; mais vous vous apercevez
que dès la première nidification, la
variable serait écrasée et la première adresse de retour serait perdue.
C’est là que la pile entre en jeu.
Considérons à
présent la nidification des
sous-routines ci-dessous.
Dans ce scénario, la pile contiendra les nombres hexadécimaux suivants aux points (a), (b) et (c) ; (sans compter ce qui aurait déjà pu être sur la pile avant (a).
(a)
(b)
(c)
Sommet pile (*)
$1915
$2632
$2F43
$1915
$2632
$1915
(*) Top Of Stack (TOS)
Ce tableau semble comporter des erreurs. En effet, au point (a) l’adresse de la prochaine instruction est censée être $1916, et non $1915.
En fait, l’instruction RTS (Return
From subroutine) incrémentera l’adresse de retour et l’exécution du programme
reprendra bien à $1916 (ce qui n’est pas le cas pour RTI, ReTurn-from-Interrupt, et fera
l’objet d’un autre article).
Puisque le bus de données et la
mémoire du 6502 sont adressés sur 8 bits, chaque adresse de retour évoquée ci-dessus
nécessite deux emplacements dans la pile. Lorsque JSR pousse l’adresse
de retour (moins 1) sur la pile, il pousse d’abord
l’octet haut, puis l’octet bas. N’oubliez pas que la pile grandit, et que le
pointeur de la pile se décrémente lorsque les octets sont poussés sur la pile,
de sorte que l’ordre d’octet résultant est l’octet de poids faible dans
l’adresse mémoire la plus basse, comme le sont les autres adresses dans le 6502.
Supposons par exemple que la valeur
du pointeur de pile (registre S) était $EF avant que le code n’entre dans le
diagramme de pile ci-dessus. Cela donnerait une occupation de l’espace mémoire
de la pile selon le tableau suivant (ne sachant pas ce qui figurait de $EF à
$FF, ces octets ne sont pas cartographiés).
Lorsque vous
quittez les sous routines et que vous revenez à la routine principale, voici à
quoi ressemble la mémoire de la pile.
Les nombres entre parenthèses sont
toujours là, mais cette partie de la mémoire de la pile est libérée. Retirer
quelque chose de la pile signifie simplement que le processeur en lit le
contenu et incrémente ensuite le pointeur de la pile. Pouvez-vous utiliser ces
chiffres, puisqu’ils sont toujours là ? Si vous avez des interruptions, la
réponse est non, car une interruption pourrait survenir à tout moment et les
écraser. Cela violerait le protocole LIFO et le processus des interruptions nécessite
que ce protocole soit respecté.
12 FONCTIONNEMENT DE LA PILE MATÉRIELLE DU 6502 (1)
15 PUBLICITÉ
16 C’EST LA MÈRE MICHEL : ERRATUM
17 QUELQUES BLAGUES
Edito
Après une sympathique visu où nous avons testé un atelier de coworking tous à l’étroit pour découvrir les nouveautés apportées par les uns et les autres, J’ai pris une longue pause, suis parti en voyage mais rien n’est perdu. De retour avec un peu de temps, je profite de ce premier week-end un peu plus calme pour libérer enfin le mag de mars. Vous y découvrirez une nouvelle série proposée par Yann qui vous permettra de maitriser la pile de l’Oric, ou encore comment réduire les nuisances sonores du zap et du ping Bonne lecture A bientot, Didier
Bonjour et Meilleurs Voeux à tous, J-6 pour la visu, l’occasion de nous revoir et de découvrir le gagnant du concours NY 2019 CEO. Les tests impitoyables du jury se poursuivent … Profitons de ces quelques jours pour faire un peu de type-ins. En effet, Steve nous a scanné des tonnes de documents dont ce sympathique Alien Dropout (que l’auteur avait visiblement pensé appeller Alien Invasion. Le jeu m’a fait replonger des années en arrière, et m’a rappellé un de mes premiers jeux acquis avec mon Oric : Envahisseurs (oui, je sais, j’aurais peut etre pu mieux choisir à l’époque). Alors à vos claviers, relevez le défi (et pour les fainéants, le jeu est en exclusivité sur le zip du mois et sera uploadé dans quelques jours sur oric.org A bientot à la visu et que les comptables en herbe se préparent, nous fèterons le départ en retraite de René notre trésorier, après des années de bons et loyaux services. Une place en or est à prendre !
10 Transcrivez votre partition musicale en programme Oric
14 Histoire d’O
Edito
Bonjour et Meilleurs Voeux à tous, C’est la période des voeux. Je me plierais donc à la tradition. Avec ce numéro, je fais le voeu de recoller à la sortie mensuelle du mag. Vous en trouverez donc un exemplaire des plus classiques avec les incontournables articles d’André et de Yann qui en ce début d’année nous propose des trucs, astuces et recettes pour maitriser les domaines artistiques de l’Oric. Je me laisse un peu aller …. à un deuxième voeu…. imaginez la richesse du mag si chaque adhérent / lecteur assidu écrivait un article par an. Un test d’un jeu oublié, une solution, ou l’explication d’une routine / d’un hardware qu’il développe. Ce faisant, l’année 2019 démarre sur les chapeaux de roue, avec la prochaine visu et la remise des prix du concours CEO 2019.
Bonjour, Jamais nous n’aurions imaginé un tel déferlement de nouveaux logiciels ; même si les auteurs ont annoncé devoir améliorer leur software durant cette année 2019. 9 programmes ont été proposés ; l’année 2019 n’annonce exceptionnelle pour ce qui est des créations sur Oric. Je remercie tous les auteurs d’avoir réalisé en un temps record de si beaux logiciels et en particulier André. Déjà prolifique et pilier inamovible du mag, il a été le plus rapide à proposer des logiciels et lancer le concours. André encore, a été un fidèle secours pour la réalisation de ce mag. Ce hors série qui nous rappelera combien les Oriciens ont une imagination débordante. En quelques semaines, les Oriciens poussés par le démon du code auront réalisé de belles prouesses. Il m’aura fallu (et avec l’aide d’André) près de 8 mois pour finir ce numéro. Il faudra faire mieux la prochaine fois : 8 mois pour les programmeurs et quelques semaines coté rédaction !
Bonjour à tous, En quelques jours, et à l’approche de la fin d’année, les créations se multiplient. Nous avons désormais 6 jeux enregistrés au concours. Ce numéro sort le 30/12, il reste moins de 24 heures pour recevoir de nouvelles surprises. Afin de préserver la santé mentale de mes chers lecteurs (NDLR, et du rédac-chef aussi), ce numéro est peu fourni, pour éviter de distraire les auteurs de leur objectif de création. Je me suis également préservé de beaux articles pour le numéro de la nouvelle année, cette édition est l’occasion de revenir sur quelques softs de l’année. On pourrait presque dire qu’il s’agit d’une newsletter. Mais surtout, ce numéro me permet de boucler les archives du site oric.org proprement (car Jérome a crée les répertoires avec la cadence et le tempo infernal maitrisé par André). Bon réveillon à tous. Didier
16 CONVERSION DE L’HYPER-BASIC VERS LE BASIC 1.0/1.1 (2)
18 A LA RECHERCHE DE L’OCTET PERDU (3)
20 ASTUCES DE PROGRAMMATION DU 6502 (3/3)
23 PUBLICITÉ
24 COMMANDEZ UN SOUND AMÉLIORATEUR
Edito
Bonjour à tous, Déjà 3 jeux enregistrés au concours. J’espère que le rush de fin d’année verra de nouveaux prétendants fournir de nouvelles créations. Pour ceux qui n’auront pas eu le temps de créer un jeu, un utilitaire, … vous trouverez ici-bas quelques pages de votre magazine préféré à lire et à relire au coin du feu (pour ceux qui en ont, car ma chaudière est out depuis un peu plus d’une semaine maintenant) Dans les découvertes du moment, un amateur propose de réaliser des cartes permettant d’améliorer le signal k7 de l’Oric. Vous en trouverez tous les détails et comment commander. Voilà qui peut en interesser certains, qui auraient besoin de sauvegarder leurs précieuses k7 de l’époque. Joyeux Noël à tous.
10 CONVERSION DE L’HYPER-BASIC VERS LE BASIC 1.0/1.1
12 INTERVIEW : JEAN-PIERRE RIFF
18 A LA RECHERCHE DE L’OCTET PERDU (2)
21 MELI-MELO
22 ASTUCES DE PROGRAMMATION DU 6502 (2/3)
25 PUBLICITÉ
26 TWILIGHTE CARD & SITTLER CARD
Edito
Quel plaisir que de partager ce numéro si dense, qui nous permet de découvrir de nouveaux horizons. Ce numéro marque également le lancement du jeu-concours de programmation sur Oric. Un concours qui nous rappellera les deuxlignes d’un vieil hebdomadaire mais … sans limitation autre que votre imagination et la capacité de notre ordinateur préféré. Nul doute que les prochaines semaines seront passionnantes, nous pourrons ensuite tous découvrir ces logiciels dans un numéro spécial à paraitre en début d’année prochaine. Le challenge sera double pour moi… d’un coté sortir les prochains numéros de l’année, faire également fonctionner mon imagination et mon aptitude à faire parler le 6502. A vos claviers!
Quelle rentrée … un peu de temps pour reprendre tous ces mails laissés à l’abandon (et encore, il doit en rester un peu plus loin), relire les articles envoyés et rejouer un peu, une envie irrésistible de refaire une partie de Circus ; et voilà un beau mag plein de sympathiques articles, une belle rubrique courrier et de nouveaux high scores. Encore merci à tous les auteurs, et cela faisait longtemps que nous n’avions pas eu une telle diversité. C’est bon pour le moral ! Merci à tous vos soutiens ; directs avec vos articles ,vos mails, vos high scores et indirects sur notre beau forum. A bientôt.