Le Zilog 80 et un fonctionnement type mode protégé

C'est le lieu des discussions diverses et variées, mais toujours en rapport avec le thème général du forum et dans l'esprit de celui-ci. Contient des rubriques électroniques.

Modérateurs : Papy.G, fneck, Carl

Avatar de l’utilisateur
bubulemaster
Messages : 1082
Inscription : 01 juil. 2014 13:48
Localisation : Nantes

Le Zilog 80 et un fonctionnement type mode protégé

Message par bubulemaster »

Hello,

je ne sais jamais où mettre les liens vers le vidéo Youtube en lien avec nos vénérables machines.
Donc, je les met ici, Fabien me tapera sur les doigts si nécessaires :P

Une première vidéo sur le Zilog 80 et un fonctionnement type mode protégé.
Je n'ai pas tout compris au fonctionnement avec le NMI et le IORQ.

Le 80286 et suivant sont des processeurs beaucoup trop évolués qui n'auraient jamais dû être inventés :-).
Vinted | Le bon coin | Ebay
Avatar de l’utilisateur
fneck
Site Admin
Messages : 17423
Inscription : 01 avr. 2007 12:03
Localisation : Drôme Provençale (26)
Contact :

Re: Le Zilog 80 et un fonctionnement type mode protégé

Message par fneck »

La bonne rubrique est fonction du contenu de la vidéo. En l'occurrence celle-ci me semble très bien ici 8)
Fabien https://www.system-cfg.com
Les bonnes pratiques de l'utilisateur du forum viewtopic.php?f=14&t=3
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Le Zilog 80 et un fonctionnement type mode protégé

Message par __sam__ »

Oui j'ai vu la vidéo dimanche.

Perso je pense que le type fait son trip en electronique, mais que question soft il est trop "stream-line" pour des cpus comme le Z80. En effet il raconte dans sa vidéo que comme ce cpu n'a pas de MMU, pas de mode protégé, pas de virtualisation, il ne peut avoir un vrai OS.

Ah bon? Il n'a jamais entendu de CP/M le gars ou il regarde les choses avec les yeux d'aujourd'hui sans aucune connaissance de ce qu'on faisait avant (et oui il y a eu des unix sans mode protégé, sans protection mémoire, bref sur des cpu très primitifs.)

Sinon au niveau technique il relie la pin IO du cpu à l'interruption NMI avec divers composants logiques. Le but est de générer une interruption sitôt que le CPU accède à l'espace des entrées sorties. L'interruption analyse l'adresse et permet de remapper tel port d'i/o sur tel autre. Bref une virtualisation des entrées/sorties. Du coup il peut faire tourner du code d'un ordi A sur un ordi B dont l'organisation des port est différents.

Alors en pratique c'est compliqué à mettre en oeuvre en électronique et le gars a trouvé une solution, mais au final la redirection logicielle des I/O fait tout rammer je pense.

Il en a aussi profité pour inventer une notion de mode superviseur pour executer les appels de l'OS avec un contexte protégé, etc. C'est rigolo, mais encore ca va rammer bien plus que les appels par sous-routine d'un moniteur 8 bits.

C'est un bel exercice, mais ne sera pas une approche normale pour faire un OS sur Z80, cf: http://www.z80.info/z80os.htm et l'excceptionnel http://www.symbos.de/
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Avatar de l’utilisateur
hlide
Messages : 3469
Inscription : 29 nov. 2017 10:23

Re: Le Zilog 80 et un fonctionnement type mode protégé

Message par hlide »

Alors j'ai regardé la vidéo. Non, le Z80 n'a pas de mode protégé. Mais on peut le simuler !

On se sert de NMI comme exception de mode protégé sur une tentative d'accès à l'espace I/O (/IORQ = 0 [et /M1 = 1 !]) ou un appel système (via RST n avec /M1 = 0 [et /IORQ = 1 !]). Mais pour cela, il faut introduire un notion d'état user/kernel via la porte RS (circuit connecté au /NMI) et un décodeur d'adresse I/O spécial qui pilotera cette porte RS. Avec /R = 0 pour repasser en mode USER (i.e, quitter le mode kernel) et /S = 0 pour valider l'accès au vrai périphérique.

De ce que je comprend :

1) Un premier accès à un port N va activer le NMI pour passer en mode Kernel. A ce stade, aucun périphérique ne peut être accédé car /EN du décodeur I/O est à 1. Donc ce PORT N est simplement ignoré. Le repassage de /IRQ à 1 a pour effet de passer /Q à 0 (mode kernel) et donc mettre l'/EN du décodeur I/O à 0.
2) En raison de l'activation du NMI, l'exception est exécutée juste après la tentative d'accès au PORT N pour déterminer le véritable port N' à accéder. L'/EN du décodeur étant à 0 cette fois, le décodeur I/O traite le PORT N' envoyé par le CPU pour accéder au périphérique concerné.
3) A la fin de l'exception, le CPU accède un port spécial pour demander au décodeur de repasser la porte RS en état mode user (et donc /EN = 1 pour le décodeur I/O).

C'est pas con mais c'est quand même coûteux en cycle de traitement pour l'exception car le traitement "exceptionnel" est fait par code et il faut déterminer pour quel port, quel code exécuter pour accéder au bon périphérique. Une amélioration serait que le décodeur I/O puisse prendre en charge la partie détermination du port virtuel à traiter via le mode IM 2 du CPU pour donner le vecteur associé à exécuter comme exception NMI.
Dernière modification par hlide le 19 oct. 2022 14:09, modifié 1 fois.
gotcha
Messages : 2759
Inscription : 30 mars 2017 11:39
Localisation : Isère
Contact :

Re: Le Zilog 80 et un fonctionnement type mode protégé

Message par gotcha »

Très intéressant. J'avais acheté une board à base de Z180 pour sa MMU, mais il semble qu'on puisse aussi virtualiser et protéger la mémoire avec le Z80. La grosse question est quand même la performance car il va y avoir pas mal d’interruptions à gérer en soft.

Personnellement, j’aurais mis ce post mis dans la section '8 bits' ou Développements actuels' car ça ouvre la porte à des nouveaux développement d'OS sur Z80.
Dernière modification par gotcha le 19 oct. 2022 14:11, modifié 1 fois.
Amstrad CPC et Goupil power :mrgreen:
Bénévole à l'association pour un conservatoire de l’informatique et de la télématique (https://www.aconit.org)
Avatar de l’utilisateur
Mokona
Messages : 1040
Inscription : 17 déc. 2016 22:01
Localisation : Nord Est des Yvelines
Contact :

Re: Le Zilog 80 et un fonctionnement type mode protégé

Message par Mokona »

Après avoir expliqué le schéma, il s'amende : désolé, j'ai fais une vidéo click-bait même si je désteste ça...

BREF, je résume :

- ce n'est pas une feature cachée du Z80 (il le dit lui-même dans la vidéo)
- ça demande au Z80 d'être accompagné d'un peu de circuiterie pour gérer le mode user et le mode kernel
- ça demande du banking de mémoire externe au Z80
- c'est quand même malin, l'idée est intéressante.

L'idée, c'est que lorsque le Z80 émet une instruction d'I/O, ou bien lorsqu'on utilise l'instruction RST, il branche ça sur la NMI, qui sert de point d'entrée au kernel.

Ce branchement est protégé par une bascule histoire que lorsque le kernel emet le vrai I/O, il ne s'appelle pas lui-même. Le kernel reset la bascule lorsqu'il a terminé.

Donc lors d'une I/O ou d'une instruction RST, c'est le kernel qui prend la main, peut faire le banking de mémoire qu'il veut et redonner la main.
Avatar de l’utilisateur
Mokona
Messages : 1040
Inscription : 17 déc. 2016 22:01
Localisation : Nord Est des Yvelines
Contact :

Re: Le Zilog 80 et un fonctionnement type mode protégé

Message par Mokona »

(ah ben le temps que je tape mon commentaire, on a été plusieurs à le faire :) )
Zebulon
Messages : 2788
Inscription : 02 nov. 2020 14:03

Re: Le Zilog 80 et un fonctionnement type mode protégé

Message par Zebulon »

Merci à tous pour "l'executive summary"... qui me font gagner une dizaine de minutes de ma vie. Je pense qu'on est à l'abri d'une attaque massive par un ransomware sur les machines tournant sur Z80, en tout cas Kaspersky ne propose pas de solution anti-malware sur ces machines. :roll:
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Le Zilog 80 et un fonctionnement type mode protégé

Message par __sam__ »

Pour les pbs de perfs, il peut prendre des clones Z80 tournant beaucoup plus vite, ca compensera. Mais à un moment de l'histoire informatique on a inventé la notion de machines virtuelles comme la Z-machine (ou la machine virtuelle Pascal UCSD) pour régler tous les problèmes de virtualisation et faire tourner un même soft sur plein de machines différentes.

Pas besoin de faire plus compliqué je dirais. Sauf si c'est pour son propre fun, ce qui est le cas ici. Mais il fait toujours bon de rappeler comment on faisait "avant" pour résoudre les mêmes soucis que celui qu'il se pose actuellement, mais avec des machines qui sont des millions de fois plus lentes..
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Avatar de l’utilisateur
hlide
Messages : 3469
Inscription : 29 nov. 2017 10:23

Re: Le Zilog 80 et un fonctionnement type mode protégé

Message par hlide »

Attention mode protégé n'est pas nécessairement virtualisation des ports. La vidéo mélange un peu tout.

Idéalement, il faudrait que le décodeur I/O fasse un peu plus en utilisant un CPLD :

1) Les signaux /NMI, /IORQ et /M1 sont connecté au CPLD.
2) Le CPLD gère le mode user/kernel : l'accès en mode KERNEL se fait via un RST, le retour en mode USER via un port special.
3) Si en mode USER, si le port n'est pas virtualisé, l'exception NMI punit. Ben oui, il faut bien PROTEGER !
4) Si en mode KERNEL, l'accès à un port spécial fait repasser en mode USER.
5) Si en mode KERNEL, pas de NMI, le port I/O est traité direct.
6) Si en mode USER, si le port est virtualisé, au choix :
6.a) le CPLD lance un NMI sous IM 2 en plaçant le numéro de vecteur adapté au périphérique concerné.
6.b) le CPLD lance un NMI et le CPU hors IM 2 se débrouille.

Techniquement, la protection c'est pour interdire un programme utilisateur d'accéder à des ressources sensibles, donc le point (3) est plus la norme ici que le point (6) qui sert strictement qu'à virtualiser un périphérique non existant.

Je rajoute qu'il faudrait une protection de la mémoire avec /NMI, /MREQ et /RFSH sur le même modèle : le CPLD doit connaître les adresses protégés pour le système et de créer un NMI si l'accès est interdit à l'utilisateur.
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Le Zilog 80 et un fonctionnement type mode protégé

Message par __sam__ »

Ou sinon on peut faire comme UZI, MINIX, OS9 et plein d'autres qui sont multitâches sans protection. C'est du Z80, pas un machin qui pilote l'ensemble d'un système sensible.

C'est un peu overkill ces histoires de modes protégé sur 8bits à mon gout (les 8 bits sont déjà suffisamment lents).
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
gotcha
Messages : 2759
Inscription : 30 mars 2017 11:39
Localisation : Isère
Contact :

Re: Le Zilog 80 et un fonctionnement type mode protégé

Message par gotcha »

Je pense que c'est le multitâche qui est quelque peu overkill sur Z80.
Par contre, avoir une petite protection mémoire pour s'assurer que l'appli ne va pas venir écraser de la RAM utilisée par l'OS ou le moniteur, je trouve ça sympa.
Amstrad CPC et Goupil power :mrgreen:
Bénévole à l'association pour un conservatoire de l’informatique et de la télématique (https://www.aconit.org)
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Le Zilog 80 et un fonctionnement type mode protégé

Message par __sam__ »

Pour la protection mémoire de l'OS, le mieux est de ne pas... avoir d'OS. :mrgreen:
Vive le bare-metal :!:
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Avatar de l’utilisateur
hlide
Messages : 3469
Inscription : 29 nov. 2017 10:23

Re: Le Zilog 80 et un fonctionnement type mode protégé

Message par hlide »

__sam__ a écrit : 19 oct. 2022 17:01 C'est un peu overkill ces histoires de modes protégé sur 8bits à mon gout (les 8 bits sont déjà suffisamment lents).
Si la protection consiste uniquement à ce qu'un programme normal n'aille pas triturer le hardware, le simple fait de faire un NMI uniquement en cas d'accès illicite (donc cas exceptionnel) ne dégrade en rien la performance du Z80. Le seul coût, c'est de passer par un noyau via RST plutôt que de gérer en direct mais un certain nombre de machine proposait déjà des services de ce genre (je pense au IOCS de certains machines japonaises) souvent par le biais d'un RST.

Après je te l'accorde, on a pas la perspective de faire tourner un Windows/Linux sur du Z80.
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Le Zilog 80 et un fonctionnement type mode protégé

Message par __sam__ »

Bof, un programme 8bit est fait pour planter tout l'ordi personnel avec. C'est pas grave, ca se reboot aussi sec, et on y traite pas la compta d'une entreprise, il n'y a pas de corruption possible des mémoires de masse (casettes), donc il n'y a rien de très grave. Ca fait partie de l'expérience de la micro des années 80 sur les 8 et 16 bits : que serait un Amiga sans Guru-Meditation qui vient nous visiter régulièrement ?

Bref, je pige pas bien l'intérer de se faire suer à traper par du matériel un problème de logiciel. Les fonctions de trace dans les émulateurs sont largement suffisantes pour ca de nos jour.

Bon, si on veut rester d'époque et qu'on tiens à la protection, l'abstraction et l'isolation d'avec le matériel, les machines virtuelles sont aussi très bien (et gèrent même la mémoire virtuelle pour certaines). Des OS complets (exemple) avaient été faits avec des machines virtuelles. Ce n'était pas spécialement plus lent, et toutes la séries des jeux de fiction interactive d'Infocom montre que cela a eu un gros succès tant technique que commercial.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Répondre