Comment assembler Apple 1 et écrire un jeu pour cela

Comment assembler Apple 1 et écrire un jeu pour cela




40 ans se sont écoulés depuis la sortie de l'ordinateur Apple 1. Aujourd'hui, ses capacités n'atteignent même pas les simples microprocesseurs ou microcontrôleurs. Mais en 1976, cette nouveauté faisait beaucoup de bruit, on parlait même d'une révolution dans le monde des ordinateurs. J'invite le lecteur à récupérer Apple 1 avec moi pour découvrir ce qui était intéressant et écrire une sorte de programme.

Je dois dire tout de suite que je ne l'ai pas récupéré à un moment donné. Il a fallu trois ans pour rechercher des composants, créer et déboguer pendant votre temps libre, puis déboguer à peu près le même montant, et enfin vous réunir et écrire cet article.

Caractéristiques Apple 1


Type: ordinateur personnel
Années de production: juillet 1976 - mars 1977
Processeur: MOS 6502
Fréquence d'horloge: 1 MHz
Mémoire: 256 octets ROM, 4 Ko de RAM, extensible jusqu'à 8 Ko
Vidéo: 40x24 caractères
Fabriqué: environ 200 pièces

Un peu d'histoire


Le créateur d'Apple 1 est Stephen Wozniak. En fait, au moment de sa création, il ne s'appelait pas encore Apple 1. Oui, et Apple lui-même n'était pas là.

Steve aimait concevoir des appareils électroniques dès son plus jeune âge. Sa première machine informatique était la «crème soda», conçue sur des circuits intégrés sans utiliser de processeur central, et capable d'effectuer des opérations mathématiques simples. Malheureusement, je n'ai pu trouver aucune photo ou description de cet ordinateur, seulement des informations assez méchantes de Steve lui-même, décrites dans son livre. Le sort du "soda à la crème" est également triste - il a brûlé et il n'y a eu aucune tentative de le restaurer. Plus tard, lorsque Steve a travaillé sur des calculatrices chez HP, son ami, Allen Baum, a invité une réunion du Computer Club à Palo Alto, en Californie. Steve a été informé que cette réunion était dédiée aux terminaux et à la technologie vidéo. A cette époque, il avait déjà créé son propre terminal pour travailler chez ARPANET, et avait une idée de la technique du terminal, c'est pourquoi il a accepté d'y aller. Steve était un gars modeste, et s'il savait qu'il s'agissait d'ordinateurs, il a dit qu'il n'irait pas là-bas.
Lors de la réunion, il s'est senti à l'aise, alors que les personnes présentes discutaient d'étranges microprocesseurs et de l'ordinateur Altair 8800.

Après la réunion, il a reçu une brochure décrivant le microprocesseur i8080A. Il a décidé de l'étudier à loisir et s'est rendu compte que c'était exactement ce qu'il faisait dans son premier PC «crème soda», et comment cela pourrait être rendu plus facile. Le même jour, il est né de l'architecture de la future Apple 1. Mais elle n'est venue à l'assemblage qu'après quelques mois, qui a été consacrée à l'étude des spécifications des nouveaux microcircuits et à la recherche de composants. Le fait est que dans les années 70, les microprocesseurs et la mémoire étaient très chers et rares. Le problème avec le processeur a été résolu lorsque la société MOS Technology a sorti un processeur économique 6500, et bientôt 6502, un analogue de 6500, mais avec de grandes fonctionnalités, et ne coûtant que 25 $. C'est le légendaire 6502 qui est tombé entre les mains de Steve.

Le problème suivant de l'époque était la préparation de l'ordinateur pour le lancement. Au cours de ces années, le programme de démarrage, en règle générale, était entré dans les ordinateurs manuellement ou à partir d'une bande, cela prenait jusqu'à une demi-heure, et seulement après cela, quelque chose pouvait être fait sur eux. Une vidéo du lancement de BASIC et un programme de jeu écrit sur celui-ci sur l'Altair 8800 sont disponibles au deuxième lien à la fin de l'article. Steve a résolu ce problème en installant des puces de mémoire permanentes (ROM) dans son PC, avec le programme de contrôle enregistré en eux, qu'il a appelé "Monitor". Le nom reflétait le but - la plupart du temps, elle surveillait les frappes et les transférait au terminal, tout en permettant d'afficher les valeurs dans les cellules de mémoire et d'exécuter le programme à partir d'un endroit spécifique. Le moniteur de Wozniak tient dans 253 octets.
Mais il manquait toujours de RAM pour démarrer l'ordinateur. La première version de son PC a été construite sur une mémoire statique lente. Plus tard, il l'a remplacé par un dynamique, ce qui a réduit le nombre de puces sur la carte et a eu un effet positif sur la vitesse de travail.
Steve a montré son PC au public, et son ami, Steve Jobs, qui a aidé à transporter le moniteur au club, a suggéré de commencer à produire des cartes de circuits imprimés pour ce PC et de créer sa propre entreprise, qui s'appelait Apple.

Vous pouvez en savoir plus à ce sujet et bien plus encore dans le livre iWoz.

Carte principale Apple 1




Architecture PC


Un PC se compose de plusieurs nœuds.


( Source du site )

Unité de formation et de sortie d'images (terminal)




En fait, c'est le terminal très Steve pour ARPANET. À son entrée se trouve un bus à sept bits, à travers lequel les données sont reçues pour sortie sur un écran de télévision.

Il n'a aucun schéma d'accès direct à la mémoire vidéo (DAP), mais utilise une mise à jour cyclique de la mémoire de 1024 cellules de 7 bits (de plus, 64 cellules ne sont pas utilisées). En raison de l'absence d'un DAP, ce terminal fonctionne comme une machine à écrire - ils ont soumis un caractère à l'entrée, il l'a affiché à l'écran, déplacé le curseur pour le caractère suivant et aucun graphique. Du fait de la mise à jour constante de cette mémoire, le fonctionnement du terminal est assez lent. Tous les caractères sont affichés de manière séquentielle, vous ne pouvez pas simplement revenir en arrière et corriger un caractère entré incorrectement. Pour l'édition, vous devez entrer la commande Moniteur, qui modifiera le contenu de la cellule mémoire où l'erreur a été commise, puis utilisez l'autre commande pour afficher la valeur d'octet de la cellule mémoire modifiée.

Si dans notre programme, nous voulons effacer l'écran, nous devons transférer le chariot 24 fois sur une nouvelle ligne 24 fois. Soit dit en passant, lorsque vous appuyez sur Retour (la désignation moderne est Entrée), le générateur démarre, qui imprime le caractère espace à la fin de la ligne.

Il n'y a pas de mode graphique, et le jeu de caractères est limité au jeu standard de codes ASCII, avec des valeurs de 1 à 127 (seuls les caractères de l'intervalle 32-126 sont affichés à l'écran, certains autres sont utilisés comme caractères de contrôle, par exemple 13 - saut de ligne), donc le bus à sept bits et dans l'ordre le plus élevé, l'unité est toujours réglée.

Les dispositions de tous les caractères affichés sont enregistrées dans la mémoire morte (ROM). Une fois que le caractère est arrivé à l'entrée du terminal, il est d'abord écrit dans une petite mémoire (un analogue de la mémoire vidéo moderne), puis via le système de compteur, les adresses dans la ROM du générateur de caractères contenant la disposition du caractère de sortie sont sélectionnées, et via les registres à décalage, ces données sont mélangées avec les impulsions d'horloge vidéo générées. entrée moniteur (ou entrée TV basse fréquence).

Pour régler la luminosité de l'image, la carte a une résistance d'accord. Je l'ai remplacé par une simple bissectrice.

Il convient également de noter qu'en raison d'erreurs dans le schéma de formation d'image, il ne peut pas être correctement affiché sur la plupart des téléviseurs ou moniteurs numériques modernes, les téléviseurs analogiques pardonnent ces erreurs. A la fin de l'article, une vidéo de trois minutes avec mon tourment sur un tel moniteur.

Unité de microprocesseur



Il contient un microprocesseur 6502, une ROM, un port d'entrée-sortie (PIA), des amplificateurs tampons, un décodeur d'adresse d'appareil, une RAM et quelques microcircuits à petite échelle.

Bloquer les E / S et travailler avec des périphériques externes




Le clavier est interrogé et le caractère entré est transmis au bus de données par le contrôleur d'entrée-sortie (PIA) 6520. Au lieu de cela, j'ai installé 6821. Et cela fonctionne très bien.

Le travail avec les périphériques externes se produit comme avec les cellules de mémoire. Chaque appareil possède sa propre zone de mémoire. Le décodeur de port traite de l'inclusion des entrées / sorties d'un périphérique spécifique. Ses lignes d'entrée sont connectées aux lignes d'adresse du microprocesseur, donc lorsque vous définissez l'adresse souhaitée, l'appareil dont nous avons besoin est connecté au bus de données. Ce que vous pouvez faire et comment vous pouvez le faire est déterminé par le programme et l'appareil lui-même.
Étant donné que les interruptions ne sont pas implémentées dans ce PC, le processeur central est engagé dans le traitement de l'ensemble du flux de données (entrée clavier, sortie de caractères, échange de données avec des périphériques externes, etc.).

Pour connecter un périphérique externe, il y a un connecteur sur la carte principale. Le seul appareil que je connaisse qui a été créé pour ce PC dans les années 70 est une carte d'interface pour travailler avec un stockage de données externe - un magnétophone.



Alimentation




Ici, tout est simple. Quatre tensions sont nécessaires pour alimenter un ordinateur. + 5V, -5V, + 12V et -12V. L'alimentation a été fabriquée par l'acheteur indépendamment. Pour ce faire, il était nécessaire d'acheter séparément deux transformateurs abaisseur et de les connecter à la carte principale, sur laquelle il y avait déjà des redresseurs et des stabilisateurs. Il y a un stabilisateur + 5V sur le radiateur, et il chauffe considérablement, donc de nombreux utilisateurs y ont installé un ventilateur, je n'ai pas inventé de vélo et j'ai fait de même.

Bien sûr, il était possible de mettre une alimentation à découpage moderne, mais je voulais un tube chaud grondant à 50 Hz.

Recherche, assemblage et mise en service de composants


Comme je l'ai écrit ci-dessus, il a fallu près de 3 ans pour rechercher des composants, bien que par intermittence. Le premier a été acheté une carte de circuit imprimé, après avoir reposé environ un an sur une étagère, il a commencé à se développer progressivement en composants. Tout d'abord, j'ai soudé les prises pour microcircuits et les connecteurs pour connecter l'alimentation et un moniteur. Ensuite, tous les éléments passifs - résistances, condensateurs et diodes. Certes, les condensateurs Sprague d'origine n'ont pas pu être obtenus immédiatement, et au lieu d'eux, le premier semestre de l'année était des électrolytes modernes ordinaires.

La plupart des microcircuits ont été acquis immédiatement, de plus, la plupart d'entre eux ont des analogues soviétiques de la 155e série. J'ai dû courir pour de tels microcircuits:

ROM vidéo - un certain firmware doit y être enregistré, sinon il n'y aura pas d'image adéquate.
2504V - sept registres dans lesquels l'image affichée à l'écran est stockée.
2519B est un compteur utilisé pour construire une image qui n'a pas d'analogues.
8T97 - tampons de bus de données qui empêchent de surcharger le bus de données du microprocesseur; dans d'autres domaines, ils ont trouvé plus tard un remplacement soviétique - K155LP11.
ROM avec le programme de contrôle "Monitor".

Après que tous les composants ont été trouvés, soudés ou installés dans la carte principale, la partie la plus intéressante a commencé - le débogage.

Le premier allumer - cliquez sur l'interrupteur d'alimentation, 5 secondes, éteignez - il n'y a pas de fumée, les embouteillages dans l'appartement sont intacts, rien n'a pris feu - ordre. Je l'allume, regarde l'image - il y a des déchets de caractères aléatoires sur l'écran. J'appuie sur RÉINITIALISER et EFFACER ÉCRAN derrière (oui, oui, il y a un tel bouton - les utilisateurs n'étaient pas gâtés avec des choses à la mode alors, et les concepteurs ont pensé, laissez l'utilisateur effacer l'écran quand il en a besoin), rien ne se passe - les mêmes déchets aléatoires.
En plus de tout, le stabilisateur à + 5V commence déjà à cuire, un arôme de tube chaud de feutres de vernis fraîchement brûlés, des feutres de peinture de ce stabilisateur ont fait le tour de la pièce. Je l'éteins, j'attends 5 minutes, jusqu'à ce qu'il refroidisse complètement, et dans une série si courte j'essaye de déboguer plus loin tout au long de la période de débogage, donc ce fait n'est pas indiqué plus loin.

Si tout a fonctionné, après avoir allumé l'ordinateur, un écran de bienvenue devrait apparaître à l'écran sous la forme de caractères alternatifs "@_" clignotants dans tout l'espace de travail du moniteur, et après avoir appuyé sur RESET et CS, l'écran devrait s'effacer et seul le curseur pour entrer la commande devrait rester. programme de contrôle "Moniteur".

L'inspection visuelle et la continuité des circuits d'imagerie et de puissance n'ont rien donné. Et après plusieurs jours de tourments, j'ai constaté que le vendeur m'avait envoyé les mauvais analogues des puces de mémoire vidéo. Je me tenais 1403A, bien que les analogues soient 1404A. J'ai sorti ces registres des panneaux, et rien n'a changé à l'écran. Le vendeur a reconnu son erreur et a demandé de lui renvoyer ces registres, mais comme ils n'étaient pas chers, je n'ai pas pris la peine de le faire. Les registres originaux m'ont déjà coûté environ 80 $. Ils ont dû attendre trois semaines.

Après avoir remplacé les registres, les chiens clignotants tant attendus (ou les pommes, à qui vous aimez le plus) sont finalement apparus, ce qui signifie la mémoire vidéo et avec elle tout le bloc vidéo gagné.

J'appuie sur RESET, CS, l'écran est effacé, mais le curseur n'apparaît pas. Donc, l'unité de microprocesseur ne fonctionne pas. Il n'y a pas beaucoup de sources de problèmes - ni le processeur, ni la ROM, ni la petite logique de leur liaison.

Le premier composant qui a fait l'objet d'une enquête a été la ROM avec le «moniteur», car l'un des microcircuits se réchauffait considérablement.

Un peu distrait, je dirai que le programme de contrôle est enregistré sur deux puces mémoire, chacune ayant 255 cellules mémoire, et chaque puce n'a que 4 bits en sortie. Pour contrôler le processeur à huit bits, Wozniak a mis 2 de ces microcircuits en parallèle, a reçu les 8 bits de données nécessaires à la sortie. Et tout son programme de contrôle tient dans 253 octets (2 octets sont restés libres).



Pour lire le contenu de cette mémoire, j'ai assemblé un appareil basé sur Arduino sur une planche à pain.

Le contrôleur a trié séquentiellement les adresses de ces ROM, fusionné les données 4 bits en 8 bits et les a affichées sous forme hexadécimale sur le moniteur du canal de communication sur l'ordinateur. Après avoir vérifié le contenu de la ROM, je n'y ai trouvé aucune erreur.

Le remplacement de la petite logique n'a pas non plus donné de résultats, de sorte que les soupçons sont tombés sur les années vénérables du processeur principal et sur sa retraite.

Je n'ai pas d'autre ordinateur 6502, je l'ai donc installé sur une maquette, je l'ai alimenté par Arduinki, les impulsions d'horloge du générateur à 1 MHz (du futur PC spécialisé), j'ai installé une commande NOP sur le bus de données avec des cavaliers à + 5V, et Je m'attendais à ce qu'en effectuant une action vide, cela augmente la valeur du compteur d'adresses. Mais cela ne s'est pas produit. Il ne s'est rien passé du tout. On dirait qu'une pierre est maintenant définitivement une pierre. J'en ai commandé un autre, car il devrait être produit par MOS. Pendant qu'il conduisait, j'ai réussi à partir en vacances et à nager dans la mer.



Tester le processeur 6502. Oui, il était possible d'obtenir 1 MHz à partir des minuteries Mega, oui, il était possible de s'en passer du tout, je peux faire tout cela, mais ensuite je voulais le faire.

Après avoir installé un nouveau processeur, allumé - bonjour les chiens - RESET - CS - bonjour la ligne de commande! Le processeur a fonctionné, moins de six mois se sont écoulés!

Le problème suivant - je n'avais rien pour entrer les commandes et le code, il n'y avait pas de clavier.

Clavier


Le clavier de ce PC est une grille de conducteurs, dans les nœuds dont les boutons sont installés. Ce boîtier est connecté à un décodeur de touche enfoncée, qui génère un code de touche enfoncée le long d'une ligne ASCII à sept bits et une impulsion de déclenchement à court terme sur une ligne distincte. Lorsque cette impulsion est passée au bus de commande, le processeur commence à traiter le caractère entré.



Pour obtenir un tel clavier, en général, le problème est toujours en cours de résolution, mais il s'agit généralement d'un nombre avec deux zéros, et non en roubles russes. Par conséquent, j'ai commencé à penser comment connecter mon clavier PS / 2 à mon ordinateur.

Rien de plus intéressant que l'Arduino Nano ne m'est venu à l'esprit. Au cours de la soirée, j'ai monté l'adaptateur entre le PS / 2 et le port ASCII en montant le montage et j'ai écrit le firmware pour cela. Comme Apple 1 n'a pas les touches PgUp et PgDown, je les ai utilisées comme boutons RESET et CLEAR SCREEN. A partir de ce jour, je n'ai plus eu à fermer les jambes au corps à corps avec des pincettes sur la planche, ce qui était très agréable.

Les caractères tapés étaient célèbres sur l'écran, et même le programme de test de la documentation de cet ordinateur fonctionnait. Tout ce qu'elle fait, c'est afficher tous les caractères affichés sur cet ordinateur en boucle.


Vue de dessus


Vue de dessous

Une histoire amusante s'est produite avec le clavier. Initialement, la touche Retour ne fonctionnait qu'à moitié - elle saisissait correctement les commandes en mémoire et donnait des instructions pour leur exécution, mais la traduction vers une nouvelle ligne ne se produisait pas. En général, en raison de la nature du terminal, cela n'a pas posé de gros problèmes. Mais j'ai décidé de régler ce problème. J'ai commencé par étudier le schéma de circuit du PC, une grande aide a été fournie par l'utilisateur Mdesk, avec zx-pk.ru. Quand j'ai étudié le circuit, je n'ai pas eu une seule question dans le fonctionnement de l'unité de traduction du chariot matériel, je me suis assis devant le testeur et l'oscilloscope. La sonnerie des conducteurs n'a rien donné - tout est intact. Ensuite, l'oscilloscope est entré en action. J'ai appelé les signaux d'entrée de la PIA - ils étaient normaux, le signal a été perdu quelque part sur le 7451N, j'ai essayé de le changer en 7450, et les homologues soviétiques (155LR1 et 155LR11), cela n'a pas fonctionné. Démêlant les chaînes plus loin, je suis arrivé au vibrateur simple 74123, il a fallu vérifier les retards générés par celui-ci. Mais mon adaptateur le ferme physiquement, ce qui rend l'appel inconfortable.

J'ai ensuite écrit un programme de test
280: A9 8D 20 EF FF A9 31 20 EF FF 4C 80 02
Tout ce qu'elle fait, c'est afficher la séquence Return-1-Return-1 (unités avec défilement vers le bas).

Je l'ai commencé, les unités, comme prévu, sont allées à la ligne. Ensuite, j'ai sorti l'adaptateur de la prise, les unités se sont immédiatement épuisées. La raison en est donc l'adaptateur. Après cela, a dévissé le problème rapidement. Les boutons PgUp et PgDown que j'utilise comme réinitialisation et effacent l'écran. Le nettoyage de l'écran (CLR) était accroché à l'une des jambes d'Arduina, au moment du nettoyage, j'en ai appliqué un là-bas, après l'avoir relâché, je l'ai remis à 0. Et ce même 0 a éteint toute la ligne CLR, mais en fait, il utilise également le bloc d'alimentation de ligne. La solution est simple - mettez une diode entre Arduinka et CLR, et cela a fonctionné!

Étant donné que composer des programmes en kilo-octets main à main serait une tâche fastidieuse et pas toujours précise, j'ai eu l'idée de connecter une carte SD au même Arduinka avec lequel vous pouviez entrer des programmes. Cela fonctionne comme ceci - je dépose le fichier nommé dump.hex à la racine, et lorsque j'appuie sur la touche TAB, le contrôleur lit le contenu du fichier et appuie sur les touches appropriées.

Logiciels


Il n'y a pas beaucoup de programmes écrits pour Apple 1, j'associe cela à l'apparition imminente d'un ordinateur plus avancé - Apple 2. Et pourtant, il existe plusieurs jeux et programmes système pour cela.À l'occasion du 30e anniversaire d'Apple 1, les passionnés ont même écrit une démo assez importante (lien ci-dessous).

J'ai lancé tout cela et j'ai regardé, mais je voulais écrire quelque chose de moi-même. J'ai décidé d'écrire un jeu pour lui en 2048. Il m'a fallu 2 heures pour écrire l'algorithme, le codage (avant cela, je ne pouvais pas écrire sous 6502). La taille du programme reçu était de 1679 octets. Vous pouvez l'exécuter à la fois sur le matériel d'origine et dans les émulateurs.

Le programme
280: 4C F8 08 20 20 20 20 20
288:20 20 32 20 20 20 34 20
290:20 20 38 20 20 31 36 20
298:20 33 32 20 20 36 34 20
2A0:31 32 38 20 32 35 36 20
2A8:35 31 32 31 30 32 34 32
2B0:30 34 38 01 00 00 00 00
2B8:00 00 00 00 00 00 00 00
2C0:00 00 00 2B 2D 2D 2D 2D
2C8:2D 2D 2B 2D 2D 2D 2D 2D
2D0:2D 2B 2D 2D 2D 2D 2D 2D
2D8:2B 2D 2D 2D 2D 2D 2D 2B
2E0:8D 00 A2 00 A9 8D E8 20
2E8:EF FF E0 24 F0 03 4C E6
2F0:02 60 A9 2B 20 EF FF A9
2F8:20 20 EF FF 60 A9 8D 20
300:EF FF 60 0A 2A A8 A9 00
308:79 83 02 20 EF FF C8 A9
310:00 79 83 02 20 EF FF C8
318:A9 00 79 83 02 20 EF FF
320:C8 A9 00 79 83 02 20 EF
328:FF A9 20 20 EF FF 20 F2
330:02 60 20 FD 02 A2 00 BD
338:C3 02 20 EF FF E8 E0 1E
340:F0 03 4C 37 03 60 20 32
348:03 20 F2 02 AD B3 02 20
350:03 03 AD B4 02 20 03 03
358:AD B5 02 20 03 03 AD B6
360:02 20 03 03 20 32 03 20
368:F2 02 AD B7 02 20 03 03
370:AD B8 02 20 03 03 AD B9
378:02 20 03 03 AD BA 02 20
380:03 03 20 32 03 20 F2 02
388:AD BB 02 20 03 03 AD BC
390:02 20 03 03 AD BD 02 20
398:03 03 AD BE 02 20 03 03
3A0:20 32 03 20 F2 02 AD BF
3A8:02 20 03 03 AD C0 02 20
3B0:03 03 AD C1 02 20 03 03
3B8:AD C2 02 20 03 03 20 32
3C0:03 60 32 30 34 38 8D 8D
3C8:57 2D 55 50 8D 41 2D 4C
3D0:45 46 54 8D 44 2D 52 49
3D8:47 48 54 8D 53 2D 44 4F
3E0:57 4E 8D 8D 43 4F 44 45
3E8:3A 20 44 45 4E 49 53 20
3F0:50 41 52 59 53 48 45 56
3F8:8D 8D 50 52 45 53 53 20
400:41 4E 59 20 4B 45 59 A2
408:00 BD C2 03 20 EF FF E8
410:E0 45 F0 03 4C 09 04 AD
418:11 D0 10 FB AD 10 D0 8D
420:E1 02 60 47 41 4D 45 20
428:4F 56 45 52 59 4F 55 20
430:57 49 4E 20 E2 02 A2 00
438:BD 23 04 20 EF FF E8 E0
440:09 F0 03 4C 38 04 A2 34
448:BD C2 03 20 EF FF E8 E0
450:43 F0 03 4C 48 04 AD 11
458:D0 10 FB AD 10 D0 4C F8
460:08 A0 00 AD E1 02 29 0F
468:AA C8 C0 11 F0 C5 BD B3
470:02 C9 00 F0 0A E8 E0 10
478:D0 EF A2 00 4C 69 04 A9
480:01 9D B3 02 8E E1 02 60
488:A2 00 A9 00 9D B3 02 E8
490:E0 10 D0 F8 A9 01 8D B3
498:02 60 00 00 00 00 00 00
4A0:AE 9F 04 BD 9A 04 C9 00
4A8:D0 14 AE 9E 04 BD 9A 04
4B0:AE 9F 04 9D 9A 04 A9 00
4B8:AE 9E 04 9D 9A 04 60 A9
4C0:03 8D 9F 04 A9 02 8D 9E
4C8:04 20 A0 04 A9 02 8D 9F
4D0:04 A9 01 8D 9E 04 20 A0
4D8:04 A9 01 8D 9F 04 A9 00
4E0:8D 9E 04 20 A0 04 A9 03
4E8:8D 9F 04 A9 02 8D 9E 04
4F0:20 A0 04 A9 02 8D 9F 04
4F8:A9 01 8D 9E 04 20 A0 04
500:A9 03 8D 9F 04 A9 02 8D
508:9E 04 20 A0 04 60 20 E2
510:02 A2 00 BD 2C 04 20 EF
518:FF E8 E0 07 F0 03 4C 13
520:05 A2 34 BD C2 03 20 EF
528:FF E8 E0 43 F0 03 4C 23
530:05 AD 11 D0 10 FB AD 10
538:D0 4C F8 08 AE 9E 04 BD
540:9A 04 C9 00 F0 1D AE 9F
548:04 DD 9A 04 D0 15 A8 C8
550:98 AE 9F 04 9D 9A 04 C9
558:0B F0 B3 A9 00 AE 9E 04
560:9D 9A 04 60 A9 02 8D 9E
568:04 A9 03 8D 9F 04 20 3C
570:05 A9 01 8D 9E 04 A9 02
578:8D 9F 04 20 3C 05 A9 00
580:8D 9E 04 A9 01 8D 9F 04
588:20 3C 05 60 20 BF 04 20
590:64 05 20 BF 04 60 AD B3
598:02 8D 9D 04 AD B7 02 8D
5A0:9C 04 AD BB 02 8D 9B 04
5A8:AD BF 02 8D 9A 04 20 8C
5B0:05 AD 9A 04 8D BF 02 AD
5B8:9B 04 8D BB 02 AD 9C 04
5C0:8D B7 02 AD 9D 04 8D B3
5C8:02 AD B4 02 8D 9D 04 AD
5D0:B8 02 8D 9C 04 AD BC 02
5D8:8D 9B 04 AD C0 02 8D 9A
5E0:04 20 8C 05 AD 9A 04 8D
5E8:C0 02 AD 9B 04 8D BC 02
5F0:AD 9C 04 8D B8 02 AD 9D
5F8:04 8D B4 02 AD B5 02 8D
600:9D 04 AD B9 02 8D 9C 04
608:AD BD 02 8D 9B 04 AD C1
610:02 8D 9A 04 20 8C 05 AD
618:9A 04 8D C1 02 AD 9B 04
620:8D BD 02 AD 9C 04 8D B9
628:02 AD 9D 04 8D B5 02 AD
630:B6 02 8D 9D 04 AD BA 02
638:8D 9C 04 AD BE 02 8D 9B
640:04 AD C2 02 8D 9A 04 20
648:8C 05 AD 9A 04 8D C2 02
650:AD 9B 04 8D BE 02 AD 9C
658:04 8D BA 02 AD 9D 04 8D
660:B6 02 60 AD B3 02 8D 9A
668:04 AD B7 02 8D 9B 04 AD
670:BB 02 8D 9C 04 AD BF 02
678:8D 9D 04 20 8C 05 AD 9D
680:04 8D BF 02 AD 9C 04 8D
688:BB 02 AD 9B 04 8D B7 02
690:AD 9A 04 8D B3 02 AD B4
698:02 8D 9A 04 AD B8 02 8D
6A0:9B 04 AD BC 02 8D 9C 04
6A8:AD C0 02 8D 9D 04 20 8C
6B0:05 AD 9D 04 8D C0 02 AD
6B8:9C 04 8D BC 02 AD 9B 04
6C0:8D B8 02 AD 9A 04 8D B4
6C8:02 AD B5 02 8D 9A 04 AD
6D0:B9 02 8D 9B 04 AD BD 02
6D8:8D 9C 04 AD C1 02 8D 9D
6E0:04 20 8C 05 AD 9D 04 8D
6E8:C1 02 AD 9C 04 8D BD 02
6F0:AD 9B 04 8D B9 02 AD 9A
6F8:04 8D B5 02 AD B6 02 8D
700:9A 04 AD BA 02 8D 9B 04
708:AD BE 02 8D 9C 04 AD C2
710:02 8D 9D 04 20 8C 05 AD
718:9D 04 8D C2 02 AD 9C 04
720:8D BE 02 AD 9B 04 8D BA
728:02 AD 9A 04 8D B6 02 60
730:AD B6 02 8D 9A 04 AD B5
738:02 8D 9B 04 AD B4 02 8D
740:9C 04 AD B3 02 8D 9D 04
748:20 8C 05 AD 9D 04 8D B3
750:02 AD 9C 04 8D B4 02 AD
758:9B 04 8D B5 02 AD 9A 04
760:8D B6 02 AD BA 02 8D 9A
768:04 AD B9 02 8D 9B 04 AD
770:B8 02 8D 9C 04 AD B7 02
778:8D 9D 04 20 8C 05 AD 9D
780:04 8D B7 02 AD 9C 04 8D
788:B8 02 AD 9B 04 8D B9 02
790:AD 9A 04 8D BA 02 AD BE
798:02 8D 9A 04 AD BD 02 8D
7A0:9B 04 AD BC 02 8D 9C 04
7A8:AD BB 02 8D 9D 04 20 8C
7B0:05 AD 9D 04 8D BB 02 AD
7B8:9C 04 8D BC 02 AD 9B 04
7C0:8D BD 02 AD 9A 04 8D BE
7C8:02 AD C2 02 8D 9A 04 AD
7D0:C1 02 8D 9B 04 AD C0 02
7D8:8D 9C 04 AD BF 02 8D 9D
7E0:04 20 8C 05 AD 9D 04 8D
7E8:BF 02 AD 9C 04 8D C0 02
7F0:AD 9B 04 8D C1 02 AD 9A
7F8:04 8D C2 02 60 AD B6 02
800:8D 9D 04 AD B5 02 8D 9C
808:04 AD B4 02 8D 9B 04 AD
810:B3 02 8D 9A 04 20 8C 05
818:AD 9A 04 8D B3 02 AD 9B
820:04 8D B4 02 AD 9C 04 8D
828:B5 02 AD 9D 04 8D B6 02
830:AD BA 02 8D 9D 04 AD B9
838:02 8D 9C 04 AD B8 02 8D
840:9B 04 AD B7 02 8D 9A 04
848:20 8C 05 AD 9A 04 8D B7
850:02 AD 9B 04 8D B8 02 AD
858:9C 04 8D B9 02 AD 9D 04
860:8D BA 02 AD BE 02 8D 9D
868:04 AD BD 02 8D 9C 04 AD
870:BC 02 8D 9B 04 AD BB 02
878:8D 9A 04 20 8C 05 AD 9A
880:04 8D BB 02 AD 9B 04 8D
888:BC 02 AD 9C 04 8D BD 02
890:AD 9D 04 8D BE 02 AD C2
898:02 8D 9D 04 AD C1 02 8D
8A0:9C 04 AD C0 02 8D 9B 04
8A8:AD BF 02 8D 9A 04 20 8C
8B0:05 AD 9A 04 8D BF 02 AD
8B8:9B 04 8D C0 02 AD 9C 04
8C0:8D C1 02 AD 9D 04 8D C2
8C8:02 60 AD 11 D0 10 FB AD
8D0:10 D0 8D E1 02 C9 D7 D0
8D8:04 20 96 05 60 C9 D3 D0
8E0:04 20 63 06 60 C9 C1 D0
8E8:04 20 30 07 60 C9 C4 D0
8F0:04 20 FD 07 60 4C CA 08
8F8:20 88 04 20 E2 02 20 07
900:04 20 E2 02 20 61 04 20
908:46 03 20 CA 08 4C 01 09




Travail vidéo sur youtube.

Et ensuite?


Tout d'abord, le boîtier, je veux le rendre beau.

Adaptateur pour clavier et carte SD. Il est nécessaire de se débarrasser du montage en surface, je prévois de développer et de commander une carte de circuit imprimé pour cela en Chine.

Travaillez avec plusieurs fichiers. J'ai l'intention d'écrire un gestionnaire de fichiers pour Arduinka, ce qui me permettra de sélectionner un fichier sur la carte et de l'exécuter.

J'ai également acheté un connecteur pour les cartes d'extension. Je veux lui souder une carte audio sur K580VI53 (juste parce que cette minuterie traîne à la maison) et dessiner une petite démo avec du son.
Ce sera probablement le prochain article.

Conclusion


Dire que j'ai vraiment aimé créer, déboguer et écrire un programme pour Apple 1 n'a presque rien à dire.

Un grand merci à l'utilisateur Mdesk et à tous les gars de zx-pk.ru pour leur aide dans l'explication des subtilités de l'architecture et pour des conseils utiles dans la configuration de ce PC.

Et bien, merci à Steve Wozniak pour ce merveilleux ordinateur personnel !!!

Liens utiles


Apple 1 sur le wiki
Chargement BASIC sur Altair 8800
Apple 1 et un moniteur moderne (trois minutes et demie de douleur et de souffrance)
30 ans Apple 1 (démo)
Émulateur en ligne Apple 1
Assembleur / désassembleur / débogueur en ligne 6502

Sites en russe dédiés à Apple 1:
mdesk.ru
zx-pk.ru

Source: https://habr.com/ru/post/fr431270/


All Articles