Tout a commencé par une nouvelle tentative d'arrêter de fumer. Ayant réveillé mon «crapaud» interne à la recherche de soutien, je lui dis: «Écoutez, un paquet de
mes cigarettes coûte aujourd'hui comme un ordinateur de poche rétro avec un écran, soit environ 10 $, et il était une fois, pour le clone Sinclair-48K, nous avons dépensé la totalité du salaire mensuel et a passé plus d'un mois sur l'assemblage et le débogage. " Elle: "Vous êtes des boucs et des menteurs, prouvez-le!" Je devais travailler.
Ainsi, les matériaux sources:
- Pilule bleue: STM32F103C8T6 - Flash 20K ram 64K $ 2.06
- Affichage Arduino: ILI9341 2,8 "320x240 avec écran tactile et fente pour carte de 7,72 $
- Tweeter 0,18 $
- Quelques boutons (7 pièces) 0,2 $
- Certains fils 0,1 $
- Carte flash pour 64 méga (d'un ancien appareil photo), non incluse dans le calcul
- Le programmateur ST-LINK n'est pas consommé et n'est pas inclus dans le calcul, cependant, il coûte également quelques dollars
- Un paquet de cigarettes - consommé trop rapidement et tous les jours - 8,37 $

La merveilleuse «pilule bleue» fabriquée en Chine est bonne pour tout le monde, à l'exception de la quantité de RAM, seulement 20K (bien qu'il y ait aussi peu de constante, seulement 64K). Spectrum-48K a besoin de 48K (coïncidence? Je ne pense pas) de RAM et 16K de constante. Nous prendrons la RAM de l'écran, car la résolution du spessi est de 256x192 + bordure, tandis que ILI9341 a 320x240 avec 18 bits par point. Autrement dit, vous pouvez utiliser le milieu de l'écran pour le rendu et tout le reste pour la «zone d'échange» réelle (zone d'échange?). De plus, le plus souvent (algorithme LRU) utilisé par l'émulateur de processeur, la mémoire Z80 est mise en cache dans la RAM STM32, le reste est stocké dans la mémoire d'écran ILI9341, avec un accès lent (SPI).
Il y a environ 25 ans, j'ai écrit l'émulateur Z80 sur la plate-forme 80286, ce ne sont pas des parents très éloignés du Z80, tous deux issus de 8080, ce qui m'a permis d'obtenir un code très rapide en utilisant les merveilleux Borland TACM et C ++, mais il n'y avait alors pas besoin d'une émulation aussi détaillée ( le code a été écrit pour les deux côtés: un cahier avec un dictionnaire et son émulateur sous windows 3.1 pour le débogage).
C'était trop paresseux pour écrire à partir de zéro pour le bras, alors j'ai demandé à Google: "Dis-moi Google, comment ça se passe avec une émulation Z80 soignée aujourd'hui?" Google m'a donné
quelques deux
mille deux projets appropriés:
Basé sur STM32F4, auteur de Gorien et l'
émulateur Fuse le plus avancé et débogué. Lors du premier montage du code de Gorien, il s'est avéré environ 100K de code exécutable, ce qui est clairement plus disponible sur le sujet. J'ai dû bricoler un peu
en poussant un éléphant dans le réfrigérateur . Par exemple, les appels aux variables locales sont compilés dans un code plus compact que les appels globaux, toutes les commandes étendues des registres IX et IY sont les mêmes, précises pour remplacer les variables, la table du générateur de caractères peut être remplacée par un lien vers le générateur de caractères Spectrum, etc. Il a également fallu overclocker le processeur à 112 MHz (
merci à xedas pour l'idée ).
Résultat: un émulateur ZX Spectrum-48 fonctionnant (j'ai essayé une douzaine de jeux pendant que tout le monde travaille) avec un écran de la taille d'un paquet de cigarettes (il entre déjà dans votre poche, mais les fils sortent), la lecture de vidages (icône + image mémoire + registres ~ 50K) de jeux avec format de carte flash FAT32 (quelques kilo-octets de code en plus) et avec une consommation totale de ~ 50mA (soit environ 50 heures à partir d'une batterie 18650 typique pour 2500mAh!), le temps de mise sous tension est inférieur à une seconde et le coût total d'environ moins de 10 $.
Inconvénients:
- Encore un peu plus lent que l'original.
- L'écran affiche le code du programme téléchargé, en couleur.
- Vous avez besoin d'un joystick ou de boutons plus doux. Et les frais. Et une boîte. Et les bras droits. Et ...
Dans les plans approximatifs: réduire la consommation (arracher les LED de la carte), ajouter une modulation de la luminosité de l'écran, le mode horloge avec l'écran éteint, souder un clavier normal avec un joystick, régler le retard pour un son correct et la lecture à partir d'un magnétophone (et quoi?), Convertisseur de format de fichier PC dumps, pressez un peu plus de code pour héberger l'interface utilisateur. Essayez de réduire le coût de la plateforme en utilisant un écran de 2,4 pouces. C'est vrai, enfin, très petit, mais pour 5 ... Il est clair qu'ici, l'intérêt est purement sportif, bien que si vous prenez en compte la vitesse de démontage de toute l'électronique en pièces inutilisables par les petits-enfants, le prix compte toujours.
Code de travail actuel sur GithubEt plus de photos pour les fans, le jeu de type R, la zone d'échange autour des bords de l'écran principal:

L'autre côté:

Jeu Atic-Atac:

PS: Je n’ai pas payé le prix d’un paquet de cigarettes, donc mon "crapaud" devra endurer mes mauvaises habitudes, mais j’ai déjà 55 ans, donc j’en ai déjà dépensé la majeure partie ... Pour continuer.
Vidéo, pas de son, désolé: