Quantcast
Channel: PICatout
Viewing all 192 articles
Browse latest View live

nucleo-8s208rb et sdcc: frapper un noeud.

$
0
0

J'ai commencé à adapter eForth sur stm8 par C.H. Ting lorsque j'ai réalisé qu'il y avait un problème d'adressage avec ce modèle Forth pour les STM8S haute densité. En effet tel qu'elle est conçue cette machine virtuelle Forth ne peut adresser que les premier 32Ko de mémoire FLASH alors que le STM8S208RB en contient 128Ko. Comme la majorité des Forth sur cpu 8 bits elle utilise un modèle de données de 16 bits. C'est à dire qu'elle est conçu pour travailler avec des entiers de 16 bits et des adresses de 16 bits. Ce qui permet d'adresser 64Ko mais comme la mémoire FLASH des stm8s débute à l'adresse 0x8000 les programmes Forth ne dispose dans les faits que de 32Ko d'espace 0x8000-0xffff soit seulement le quart de la mémoire disponible sur le STM8S208RB. J'ai commencé à réfléchir à la façon dont je pourrais modifier le modèle. Par exemple je pourrais le transformer en un modèle 24 bits au lieu de 16 bits. Je consulte la documentation de SDAS pour voir quelles sont les directives permettant de traiter des données de 3 octets et je trouve les directives .3byte ou .triple dans la table des matières mais elles ne sont pas documentées dans le texte. Malgré tout je fais un test avec l'assembleur mais celui-ci ne reconnais pas la directive dans aucune des deux formes proposées. C'est ce qu'on appelle par chez-nous frapper un noeud. En fait j'en ai frapper deux.

Du même coup je prends conscience que MONA version 0.1 a le même problème puisque lui aussi accède la mémoire avec des adresses de 16 bits. Je suspends donc l'adaptation de eForth et retourne travailler sur MONA vesrion 0.2 pour corriger cette limitation.


Apocalypse Tomorrow

$
0
0

Ce titre est bien sur un clin d’œil au film de Francis Ford Coppola, datant de 1979, Apocalypse Now. Une entrée en matière comme une autre pour parler de CollapseOS

L'apocalypse Demain

De quoi aura l'air le monde après l'effondrement appréhendé par plusieurs dont Pablo Servigne. C'est d'ailleurs après avoir lu le livre de M. Servigne que l'auteur de CollapseOS en a eu l'idée.

Bien que le projet me laisse sceptique tant qu'à son utilité future, Il me plait pour des raisons qui n'ont rien à voir avec un possible effondrement. Principalement pour les deux suivantes:

  1. KISS, Keep It Simple,Stupid. En français, Garde ça simple, idiot. Plus les systèmes sont complexes plus ils sont difficiles à gérer et susceptible d'avoir des failles. Il y a de nombreux exemples dans le monde de systèmes informatiques qui ont étés abandonnés, après des dépenses acquisition très élevées, parce qu'on arrivait pas à les faire fonctionner correctement. On en a un bel exemple au Canada avec le nouveau système de paye du gouvernement fédéral nommé Phénix et fourni par IBM. Le système installé en 2015 est plein de bogues et personne n'arrive à le faire fonctionner correctement. Le gouvernement parle de le remplacer, une perte de quelques milliards CAN$.
  2. Small is beautiful, Un principe qui est étroitement lié au précédent et qui me tient aussi à cœur. Il me plaît qu'un système soit suffisamment simple pour qu'une seule personne puisse le comprendre et le maintenir. Autrement dit il faut rester à l'échelle humaine.

CollapseOS répond à ces deux critères. De plus il est basée sur le CPU Z80 qui est encore en production de nos jours. Zilog le vend encore en format PDIP-40. Encore mieux cette version moderne est en technologie CMOS et fonctionne plus rapidement que l'original, jusqu'à 20 Mhz. Plus encore on peut trouver sur tindie.com plusieurs petits ordinateurs basés sur ce CPU et qui permettent de tester CollapseOS sur une vrai machine plutôt que sur un simulateur.

Si ce projet vous intéresse

Pour cloner le dépôt sur votre ordinateur (système Linux avec application git installée).

git clone https://github.com/hsoft/collapseos
Ensuite pour intégrer les mises à jour

git pull

MONA version 0.2

$
0
0

Je poursuis mes expérimentations avec la carte NUCLEO-8S208RB. Je viens de compléter la version 0.2 de MONA

Nouveautés

  • La mémoire étendue au delà de l'adresse 0xfffff (65536) est maintenant accessible.
  • Une commande qui ne reçoit pas suffisamment d'argument ou des arguments invalides est abandonnée et affiche un message d'erreur.
  • La Commande ! accepte maintenant des chaînes de caractères entre guillemets comme arguments.
  • La commande e pour mettre à zéro des plages de mémoire a été ajoutée.

MONA version 0.3

$
0
0

J'ai encore amélioré MONA. J'ai aussi mis à jour le fichier readme.md pour tenir compte des nouvelles possibilités du programme. J'ai encore d'autres idées pour améliorer ce programme.

MONA version 0.4

$
0
0

La version 0.4 de MONA est maintenant disponible. J'ai ajouté la commande f addr string pour faire une recherche en mémoire d'une Chaîne ASCII. Le readme.md a été mis à jour.


>f $8080 "commands"
Found at address: $8CAE
>h $8cae
$8CAE $63 $6F $6D $6D $61 $6E $64 $73 commands

>f $8080 "Commands"
String not found.
>f $8080 i "Commands"
Found at address: $8CAE

Prochaine étape

Pour la version 0.5 je vais ajouter un désassembleur. La commande va fonctionner de la façon suivante:


>d $809E
$00809E $AE $17 $FF LDW X,#$17FF
$0080A1 $94 LDW SP,X
Une vingtaine d'instructions seront affichées suivit d'une pause. La barre d'espacement va permette d'afficher les 20 instructions suivantes. N'importe qu'elle autre touche pour revenir à l'invite de commande.

MONA version 0.5

$
0
0

La version 0.5 de MONA est maintenant complétée. Pour cette version j'ai réogarniser le code source en plusieurs fichiers et ajouter la commande d addr qui est un déssembleur. Le fichier mona/reamdme.md a été mis à jour.

Affichage de la commande

Voici de quoi a l'air l'affichage de la commande.


>d $6000

$6000 $9B SIM
$6001 $AD $C CALLR $C
$6003 $25 $19 JRC $601E
$6005 $CE $48 $7E LDW X,$487E
$6008 $A3 $55 $AA CPW X,#$55AA
$600B $27 $11 JREQ $601E
$600D $20 $16 JRA $6025
$600F $C6 $80 $0 LD A,$8000
$6012 $A1 $82 CP A,#$82
$6014 $27 $6 JREQ $601C
$6016 $A1 $AC CP A,#$AC
$6018 $27 $2 JREQ $601C
$601A $99 SCF
$601B $81 RET
$601C $98 RCF
$601D $81 RET
$601E $C6 $48 $0 LD A,$4800
$6021 $A1 $AA CP A,#$AA
$6023 $26 $9 JRNE $602E
$6025 $5F CLRW X
$6026 $4F CLR A
$6027 $4B $28 PUSH #$28
$6029 $86 POP CC
$602A $AC $0 $80 $0 JPF $8000

Tous les entiers sont affichés en hexadécimal. Le champ de gauche est l'adresse mémoire où se situe l'instruction suivit des octets du code de l'instruction. Viens ensuite la traduction en assembleur du code.

Tiny BASIC sur STM8

$
0
0

Depuis la mi-décembre me je travail sur un nouveau projet pour la carte NECLEO-8S208RB. Il s'agit d'un interpréteur Tiny BASIC installé sur le microcontrôleur permettant la programmation en interactif. Le projet est sur https://github.com/pictatout/stm8_tbi. Pour plus d'information suivez le lien et lisez le readme qui s'affiche à l'ouverture de la page.

Tiny BASIC pour stm8, #2

$
0
0

Je continue mon travail sur Tiny BASIC sur STM8 Depuis une semaine environ j'ai travaillé sur l'amélioration des performances de l'interpréteur et j'ai multiplié celle-ci par 4,7. 12 millisecondes pour effectuer 1000 boucles FOR...NEXT vide alors que dans la version précédente il fallait 56 millisecondes.

Dans cette nouvelle version l'analyse lexicale est faite une seule fois et l'interpréteur fait la lecture d'une liste d'unités lexicales plutôt que du texte source. Il serait bien sur possible d'améliorer encore plus la performance en compilant le code source en byte code à exécuter par une machine virtuelle comme le fait MicroPython. Mais alors il serait très complexe de retrouver le texte original. Le problème est le suivant. Il n'y a que 5741 octets de RAM disponible pour les programmes BASIC. Il n'est pas possible de conserver une copie du programme source. Donc pour retravailler le code source il faut le rendre disponible sous forme texte.

Avec la méthode que j'utilise il est relativement simple de reconstruire l'équivalent du code source à partir de la liste des unités lexicales. Il est donc possible à tout moment d'examiner le programme sous forme texte et de modifier le programme comme s'il était conservé dans sa forme originale. Comme s'il s'agissait d'un éditeur de texte.

Je ne veux pas utiliser la mémoire flash car l'édition d'un code source requiert de fréquentes modifications. Hors la mémoire flash n'est garantie que pour 10 000 cycle d'effacement/écriture. Ce n'est donc pas recommandé de l'utiliser comme tampon pour l'édition d'un texte.

Rappel des objectifs

Il s'agit de concevoir un interpréteur Tiny BASIC résident sur le microcontrôleur et qui utilise un émulateur de terminal sur le PC pour l'interface utilisateur. Les programmes sont exécutés à partir de la mémoire RAM mais peuvent-être sauvegardés sous forme de fichiers dans la mémoire étendue du microcontrôleur. Cette mémoire étendue est de 96Ko sur le STM8S208RB.

Il s'agit donc d'un système REPLRead,Execute,Print,Loop comme MicroPython. Ce système rappel les premier ordinateurs personnel des années 1970s, comme le TRS-80 I, le Appel II, etc, sauf ici qu'il s'agit de programmer un microcontrôleur et non d'un ordinateur d'usage général.

Une fois le système installé sur la carte il suffit de relier celle-ci à un PC avec un câble USB pour l'alimenter et un cable avec adaptateur de niveau RS-232 pour la communication avec le PC par port sériel. Sur le PC un émulateur de terminal comme pTTY, TeraTerm ou autre permet d'interagir avec la carte.

Exemple de p;rogramme

Voici un exemple de programme extrait du manuel de l'utilisateur. Ce programme contrôle l'intensité de la LED LD2 qui est sur la carte à partir du terminal. La touche u augmente l'inensité. la touche d la diminue et la touche q termine le programme. La valeur de l'intensité est affichée sur le terminal à position fixe et mise à jour à chaque changement.


5 'Software PWM, controle LD2 sur carte
7 PRINT # 6,
10 R = 511 :PRINT R ,
20 K = 0
30 IF R :BSET GPIO ( 2 ,ODR ), 32
40 FOR A = 0 TO R :NEXT A
50 BRES GPIO ( 2 ,ODR ), 32
60 FOR A =A TO 1023 :NEXT A
70 IF QKEY :K =KEY
80 IF K =ASC (\u):GOTO 200
90 IF K =ASC (\d):GOTO 400
100 IF K =ASC (\q):STOP
110 GOTO 20
200 IF R < 1023 :R =R + 1 :GOTO 600
210 GOTO 20
400 IF R > 0 :R =R - 1 :GOTO 600
410 GOTO 20
600 PRINT "\b\b\b\b\b",R ,
610 GOTO 20

Documentation


eForth sur STM8

$
0
0

En partant du travail de C.H. Ting qui a créer un eForth pour la carte STM8-DISCOVERY. J'ai adapté ce travail pour la carte NUCLEO-8S208RB pour ensuite étendre les fonctionnalités. Le numéro de version du fichier original indiquait 2.1 mais avec toutes les modifications que j'ai fait il s'agit d'une révision majeure. J'ai donc fait passer le numéro de version à 3.0

La version originale compilait dans la mémoire RAM et il n'y avait aucun support pour la programmation de la mémoire flash. J'ai ajouter le vocabulaire pour la programmation de la mémoire FLASH, EEPROM et OPTION. Dans la version 3.0 les définitions sont compilées en mémoire RAM mais immédiatement transférées dans la mémoire FLASH pour les rendre permanentes.

J'ai aussi ajouter le vocabulaire nécessaire pour supporter la création de routines d'interruptions.

D'autres mots d'usage général ont aussi étés ajoutés.

Le dépôt de ce projet se trouve à https://github.com/Picatout/stm8_eForth

Boardview récupération

$
0
0

Boardview 0.73c

Boardview est une application pour concevoir des circuits électroniques sur plaquette d'expérimentation sans soudure. Cette application a étée écrite dans un langage obscur appellé euphoria. Lequel a été developpé dans les années 90 par Robert Craig alors qu'il étudiait à l'université de Toronto. Je me suis intéressé à ce langage à cette époque et l'ai utilisé pour de projets personnels pendant plusieurs années.

Cependant j'ai perdu rapidement tout intérêt pour cette application après la version 0.73c contenue dans ce dépôt. Lorsque j'ai créé cette application je l'avais sauvegardé sur Microsoft drive et partagée à partir d'une page sur ce blogue. Puis j'ai oublié ça pendant des années jusqu'à ce que la semaine dernière je recoive un courriel m'indiquant que quelqu'un essayait de télécharger l'application à partir du drive alors que j'avais supprimer les fichiers, je ne me rappelle plus quand.

Ma première réaction a été de supprimer toute information concernant cette application de ce blogue.

Aujourd'hui je me ravise et en fouillant dans mes copies de sécurité j'ai retrouvé l'application mais pas le code source. De toute façon je n'ai pas l'intention de retravailler sur ce projet. Donc si quelqu'un veut utiliser cette application windows il pourra la télécharger à partir du dépôt github. Possiblement qu'elle fonctionne sur linux en utilisant WINE. Je ne le garantie pas n'ayant pas essayer.

L'application est bilingue Français et anglais avec un manuel de l'utilisateur en format pdf pour les deux langues.

Boardview nouvelle génération

$
0
0

Finalement puisque j'étais incapable de retrouver le code source de mon application Boardview j'ai décidé de refaire l'application en utilisant un un outil de développement plus connu soit Lazarus IDE. Cependant cette nouvelle version est en anglais seulement. Elle ne fonctione pas exactement comme la version orignale mais a les même fonctionnalitées. Par exemple pour tracer un fil dans la version original il fallait tenir le bouton de la souris enfoncé pour tirer le fil. Dans cette version on fait un clic au point de départ et un autre clic au point de terminaison.

Le code source de cette version est sur https://github.com/picatout/Boardview
Cette version 0.1 est fonctionnelle.

Dans les prochains jours je vais mettre à jour la documentation dans le dossier DOCS/en

Vous pouvez cloner localement sur votre ordinateur le dépôt git au complet ou si vous n'utilisez pas git vous pouvez télécharger le fichier zip en utilisant le bouton CODE qui affiche un menu comprenant l'item Download zip.

Boardview-laz

$
0
0

J'ai préparé un fichier d'insallation pour Boardview-laz v1.0. Il s'agit de la nouvelle version de Boardview créée avec Lazarus IDE.

NOTE: Lorsque le programme d'installation démarre choississez l'option installer seulement pour moi. Avec cette option l'application est installée dans %homepath%\AppData\Local\Programs\boardview-laz. Autrement l'application sera installée dans le dossier C:\Program Files (x86). Le problème est qu'il faut des droits d'administrateur pour écrire dans ce dossier.

Manuel de l'utilisateur

Le manuel de l'utilisateur est disponible en français et en anglais ainsi qu'en format HTML ou PDF. La sélection des préférences se fait dans le menu help - preferences...

Boardview-laz 1.1.1

$
0
0

J'ai complété la version 1.1.1 de l'application Boardview-laz. J'ai fait un test de compilation sous Ubuntu 20.04. Il a suffit d'une modificatation mineure au projet pour que ça fonctionne. Le plus difficile a été d'installer lazarus-ide sur Ubuntu. Le paquet d'installation fournis par Canonical ne fonctionne pas. L'instalallation semble se faire sans message d'erreur mais l'application ne démarre pas et l'iône est invisible. J'ai donc désinstaller et rechercher une autre méthode sur internet. J'ai trouver la solution sur LazPlanet.

Version 1.1.1

Il n'y a pas de nouvelles fonctionnalités mais le fonctionnement de l'application est différent de la version 1.0.0.

  • Pour faire surgir le menu il faut maintenant cliquer avec le bouton droit de la souris sur l'élément du circuit au lieu du bouton gauche.
  • Pour déplacer un composant électronique ou une étiquette il faut la faire glisser en gardant le bouton gauche enfoncé au dessus de l'élément. On relache le bouton seulement lorsque rendu à la nouvelle position.
  • Pour installer un fil sur la platine on enfonce le bouton gauche de la souris au point de départ et on ne le relache qu'au point d'arrivé. Le fil s'étire en suivant le curseur de la souris.
  • Dans le dialogue de sélection d'un composant, le bouton freeze a disparu. L'étiquette est gelée automatiquement au moment ou le bouton OK est enfoncé.
  • Les manuels de l'utilisateur ont été mis à jour.
  • L'Application compile sans changement sous Ubuntu 20.04 lorsque Lazarus-ide/Free pascal est installé correctement.

Boardview-laz 1.1.2

$
0
0

Hier j'affirmais que la version 1.1.1 de Boardview fonctionnait correctement lorsque compilée sous Ubuntu 20.04. J'étais allé un peu trop vite en affaire. Des test plus approndis m'ont révélés que plusieurs choses ne fonctionnaient pas correctement. Comme dit l'expression anglophone: The devil is the details. J'ai travaillé la dessus aujourd'hui pour produire cette nouvelle version. Il y aussi une petite modification dans le popup menu de la version pour les 2 systèmes d'exploitation. L'Item de menu Tag font... a été remplacé par l'item Edit tag.... C'est fonctionnalité est plus pratique car elle permet de modifié aussi le texte de l'étiquette.

Le nouveau fichier d'installation pour Windows est ici.

Je n'ai pas créé de paquet d'installation pour Linux mais la procédure est simple. une fois installé lazarus-ide sur Ubuntu suivre les étapes suivantes.

  1. cloner le git de boardview sur votre ordinateur avec la commande.

    git clone https://github.com/picatout/boardview
  2. Ouvrir le projet qui est dans le dossier lazarus-source dans Lazarus-ide et le compiler. Il suffit de faire <CTRL+F9> pour compiler l'application. La compilation génère le fichier exécutable boardview dans le même dossier que les fichiers source du projet.
  3. Dans votre répertoire personnel créer un dossier boardview
  4. A partir du dossier lazarus-source copiez les dossiers suivants dans votre nouveau dossier ~/boardview.

    cp -r DOCS bitmaps boardview boardview.ini components.ini bvp.ico app-icon.ico proto-256x256.ico
Il n'est pas strictement nécessaire de copier les fichiers *.ico car ils sont déjà compilés dans l'application.
pour l'exécuter il suffit de faire la commande:

cd ~/boardview && ./boardview &

boardview-laz 1.1.3

$
0
0

Corrections apportées dans cette version.

  • Lors de l'ouverture d'un projet le répertoire initial n'était pas correctement initialisé.
  • Un filtre pour ne voir que les fichiers *.bvp a été ajouté au dialogue d'ouverture de projet.
  • Linux: Le séparateur de chemin de fichier n'était pas correct dans la fonction Save.
  • Linux: Le dialogue de sélection de composant ne conservait pas la couleur de l'étiquette lorsqu'on modifiait la police.

Dernier fichier d'installation windows


Boardview-laz version 1.1.4 et démo.

$
0
0

Je viens de mettre à jour le dépôt git avec la version 1.1.4

Nouveauté de cette version

Dans les versions antérieures pour faire appaître le menu surgissant il fallait cliquer bouton droit sur un élément de circuit. Maintenant on peut cliquez avec le bouton droit à n'importe quel endroit sur l'espace de travail de boardview pour le faire surgir. De plus 2 nouveaux éléments sont ajoutés et toujours actifs:

  • Add tag... Pour ouvrir la boite de dialogue tag.
  • Add component... Pour ouvrir la boite de dialogue components.
Ces 2 items permettent de réduire le déplacement de la souris. Plus besoin de se rendre à la barre d'outils pour ajouter un de ces éléments.

Une autre nouveauté est qu'on peut maintenant repositionner un fil en le tirant par l'une de ses extrémmité en gardant le bouton gauche de la souris enfoncé.

NOTE: Les projets créés avec les versions antérieures ne peuvent plus être réouvert dans cette version. En effet les composants ne seront pas situés au bon endroit.

Vidéo de démonstration

analyse de circuit du PDP-8

$
0
0

Dernièrement je me suis intéressé à l'électronique utilisée dans le célèbre ordinateur PDP-8(Programmable Data Processor) première génération de Digital Equipment Corporation (DEC). Le premier PDP-8 a été mis en marché en 1965 et il a été produit jusqu'en 1978, sur plusieurs générations technologiques. La première génération utilisait des circuit logiques DRL (Diode-Resistor-Logic) et DTL (Diode-Transistor-Logic) et une mémoire à tores magnétiques.

PDP-8 (1)
PDP-8 au musé de Bletchley Park, Angleterre.

Puis lorsque les circuits intégrés TTL(Transistor Transistor Logic) ont été mis en marché Digital a fabriqué une version dont les circuits étaient conçu avec cette technologie. Cependant il a fallu attendre les dernières années de sa production pour que la mémoire à tore magnétique soit remplacée par de la mémoire silicium RAM en circuits intégrés. Lors de ma dernière année de collège (1977-78) j'avais un cours consacré au PDP-8. On apprenait à le programmer en assembleur et on étudiait ses circuits logiques. Ceux de la version TTL.

En 1975 la compagnie Intersil a mis en marché un microprocesseur en technologie CMOS le IM6100 qui répliquait le CPU du PDP-8. Il a été utilisé dans certaines machine comme le VT78.

VT78
VT78 de Digital utilisant le IM6100 d'Intersil.

De 1965 à 1977 la technologie a donc permis de passer d'un mini ordinateur pesant 113Kg à un micro-ordinateur pesant sans doute moins de 30Kg et qui tenait dans le boitier d'un terminial vidéo VT521. Et la plus grosse part de ces 30Kg revenait au tube cathotique utilisé pour l'affichage.

Analyse de circuits DTL

Mes recherches m'ont permises de retrouver plusieurs manuels publiés par DEC à cette époque sur le site bitsavers.org

J'ai donc entrepris d'étudier les circuits en question pour en comprendre le fonctionnement. Selon le site suivant https://www.pdp8online.com/straight8/functional_restore.shtml le PDP8 qu'ils ont restauré contenait

  • 230 cartes de circuits imprimés.
  • aproximativement 10,148 diodes
  • 1409 transistors
  • 1674 condensateurs
  • 5615 résistances
Seulement 1409 transistors pour un ordinateur basé sur des mots de 12 bits alors que le microprocesseur MOS 6502 avec des mots de 8 bits utilisé dans le Apple II en contenait plus de 3000. Ça s'explique par l'utilisation de circuit DRL. On peut faire simplement avec une résistance et des diodes des portes logiques comme je vais le montrer plus bas.

Mon intention dans cet article est d'analyser le fonctionnement de ces circuits logiques. Non pas dans leur complexité mais seulement les circuits de base. Car l'ordinateur était construit à partir d'un petit nombre de cartes logiques de base utilisées en grand nombre et interconnectées entre elles pour former la complexité de l'ordinateur. Comme mentionné plus haut il y en avait 320. C'est un peu comme si aujourd'hui on voulait reconstruire le PDP-8 avec des circuits intégrés de la série 74HCxxx et qu'on utilisait seulement des AND, OR et NON en les combinants ensemble pour former des flipflops, des latchs, des décodeurs, un ALU, etc. C'est d'ailleurs ce qu'ils ont fait dans les dernières générations en utilisant des circuits intégrés TTL au lieu d'assemblage DTL.

architecture du PDP-8

L'objectif principal de Digital en concevant le PDP-8 était de réduire le coût au minimum. Ils devaient donc choisir une architecture très simple appellée architecture à une adresse.


Une architecture à une adresse signifie que les instructions machines n'ont besoins que d'une adresse pour spécifier les opérantes. Habituellement il s'agit d'une adresse mémoire. Par exemple pour les opérations logique et arithmétiques l'une des opérandes est l'accumulateur (AC) avec le contenu d'une adresse mémoire. Le résultat est déposé dans l'accumulateur. Donc l'instruction n'a besoin que d'un paramètre soit l'adresse où se trouve la seconde opérande.

Comme on le voit il n'y a que 4 registres de 12 bits et 1 registre de 1 bit LINK. Comme vous le voyez il n'y a pas de pointeur de pile. Lors d'un appel de sous-routine l'adresse de retour était enregistrée à la première adresse de la sous-routine. Les programmeurs devaient donc réserver cette adresse dans ce but. Ceci exclus la possibilité de faire des appels récursifs. En comparaison le MOS 6502 avait 5 registres 8 bits et 1 de 16 bits pour le compteur ordinal.

De plus le PDP-8 n'avait qu'un seul bus de 12 bits pour lire et écrire dans les registres. Comme on le voit le compteur ordinal n'avait que 12 bits lui aussi donc ne pouvait adresser que 4096 mots de mémoires. De base le système se vendait donc avec 4096 mots de mémoire mais grâce à un système de sélection de plan (bank) mémoire il était possible d'ajouter des plans de mémoire en tranche de 4096 mots. Évidemment 1 seul plan (bank)était visible à la fois. En étudiant cet ordinateur je ne pouvais m'empêcher de faire le rapprochement avec le CPU de la ligne de base des microcontrôleurs PIC qui eux aussi codent les instructions sur 12 bits et divisent la mémoire RAM en plans (banks) de 128 mots. Car sur les PIC les instructions qui accèdent la mémoire code l'adresse sur 7 bits.

Ceci dit je ne m'attarderai pas plus que ça sur l'architecture de programmation du PDP-8. Voici la schématique d'une carte comprenant 7 inverseurs et une autre comprenant 3 flipflops.


Si on s'attarde à la carte des inverseurs (fonction logique NON) on constate qu'il y a 2 alimentations, l'une de +10 volts et l'autre de -15 volts. L'alimentation de +10 volts est reliée à la base de chaque transistor par une résistance de 100Kohm. Cette alimentation ne joue aucun rôle dans le fonctionnement logique des portes. Son seul rôle est de réduire le temps de commutation des transistors lors du cutoff. En effet lorsqu'un transistor est en conduction une charge électrique est accumulée dans la jonction base-émetteur. Au moment où le courant de la base est coupé cette charge doit-être dissipée. Grâce à l'alimentation +10 volts et la résistance de 100Kohm cette charge est draînée plus rapidement donc le transistor commute plus rapidement vers le cutoff. Puisque cete partie du circuit n'est pas utile à l'analyse de la fonction logique elle sera ignorée ultérieurement.

À droite du circuit on note la présence des diodes D8-D11 ainsi que le la résistance R15 branchées en série entre le GND et le -15 volts. La tension au point 6 est d'environ 4*-0,7=-2,8 volts. À partir du point 6 les diodes D1-D7 se branche au collecteur de chaque transistor. Le rôle de ce circuit est de limiter la tension au collecteur lorsque le transistor est en cutoff à environ 5*-0,7=-3,5 volts. Donc lorsque le transistor est en saturation le voltage au collecteur s'approche de 0 volts et lorsqu'il est bloqué elle s'approche de -3,5 volts. Ces valeurs correspondent aux niveaux logiques de fonctionnement de l'ordinateur. On retrouvre le même circuit sur toutes les cartes qui implémentent des fonctions logiques. Pour l'analyse du fonctionnement logique des circuits on peut ignorer ce limiteur de tension.

En éliminant de notre analyse le circuit +10 volts et le limiteur de tension au collecteur on va pouvoir redessiner un forme simplifié des circuits logiques pour fin d'analyse.

Une fois épuré un inverseur, ou si vous préférez la fonction logique NON correspond au circuit suivant:

Si l'entrée (Input) est mise au GND le transistor Q1 bloque car le courant ne circule plus dans la base. En effet pour que le courant circule dans la base de Q1 il faut 3*-0,7=-2,1 volts au point jct1. Hors si l'anode de D1 est à GND il n'y a que -0,7 volts au point jct1. Le transistor étant bloqué on retrouve -3 voltsà la sortie (Out). Par contre si on laisse flotter l'anode de D1 ou si on la met à un voltage inférieur à -2,8 volts le courant peut circuler à travers R1,D2 et D3 dans la base de Q1. Le transistor entre alors en saturation et le voltage à sortie monte à 0 volts. En terme logique on obtient donc la fonction NON.

On peut obtenir une fonction NON ET en ajoutant des diodes aux points de jonctions jct1 comme ceci.

On peut ajouter d'autres diodes si on a besoin de plus d'entrées. Avec des portes NON et NON ET on peut construire n'importe quel circuit logique aussi complexe soit-il. On dit que ces 2 fonctions combinées ensemble sont Turing complete2. On pourrait dire que ce sont les briques LEGO de l'informatique3.

En ce qui concerne la carte de 3 flipflops (bascule bistable). Ça a l'air compliqué n'est-ce pas? Il n'y a que 6 transistors mais 46 diodes. Vous comprenez maintenant pourquoi il y avait tant de diodes dans cet ordinateur. Ce type de circuit ne s'appelle pas DTL pour rien. Le D vient en premier. Première constatation les transistors sont de type PNP et l'alimentation principale est donc négative à -15 volts.

Puisque la carte comprend 3 circuits identiques et une partie commune j'ai simplifié en extrayant un seul flipflop. J'ai aussi enlevé le circuit à +10 volts.

La ligne verticale grise sépare la partie du circuit commune aux 3 flipflops. Cet arrangement de diodes ne sert qu'à limiter le voltage au collecteur des transistors à -3.5 volts environ (clamping)à travers les diodes D1 et D6. Les deux valeurs logiques était donc représentées par des tenstions de 0 volt et -3 volt.

Le flipflop le plus simple est le RS-flipflop. On le construit en utilisant 2 portes NAND (NON ET) comme ceci.


Lorsqu'il y a un barre au dessus d'un symbole logique ça signifit que l'entrée est active à 0 logique. Si on met l'entrée ~Sà 0 volt (0 logique) on force la sortie Q1 à -3 volts (1 logique) et si on met l'entrée ~R à 0 volt on force la sortie Q2à -3 volt. La sortie ~Q est le complément de la sortie Q.
Sur le schéma du PDP-8 le point F représente la sortie Q et le point E représente la sortie ~Q. Le point D représente l'entrée ~S du flipflop. Il n'y a pas d'entrée ~R sur le schéma du PDP-8 cette entrée a étée remplacée par un circuit DCD expliqué ci-bas.

Diode-Capacitor-Diode

Cependant ce RS flipflop a été modifié quelque peu. Le NAND de droite a été modifié pour ajouter une entrée spéciale constituée des composants C1,R7,R8,D10..D14,D47,D48. Selon la terminologie de Digital ce circuit spécial s'appelle un DCD (Diode-Capacitor-Diode). Ça fonction est de changer l'état du flipflop mais avec un délais et sous contrôle d'une impulsion.

Voici une représentation séparée du circuit pour analyse.

Le circuit a donc 3 entrées et une seule sortie qui va à la base d'un transistor Q2 du flipflop en passant par la diode D10.

  • conditionning input, Si cette entrée est maintenue à 0 volt la condensateur ne peut se charger et le DCD ne passera aucun signal au flipflop.
  • pulse input, Pour que cette impulsion soit transmise au flipflop il faut que le condensateur est été chargé en maintenant level inputà 0 volt alors que les 2 autres entrées sont à -3 volts.
  • Level input, Tandis que les 2 autres entrées sont à -3 volts et que celle-ci est à 0 volt le condensateur C1 se charge à travers D11 et R7 puisque la jonction de D11-R8 est plus positive que la jonction D13-D14-R7. Le rôle de D12 est d'empêcher C1 de se charger dans l'autre sens advenant que les entrées conditionning et pulse seraient à 0 volt alors que level serait à -3 volts.
Avant d'envoyer une impulsion ascendante à pulse input il faut laisser le temps à C1 de se charger. Lorsque la tension passe de -3 volts à 0 volt à l'entrée de pulse si le condensateur C1 est chargé le voltage à l'anode de D5 devient suffisamment positif pour que le transistor Q1 bloque s'il n'est pas déjà bloqué. Le flipflop va donc basculer dans son état complémentaire. Comme le collecteur de Q1 est connectée à l'entrée conditionning et que cette sortie passe à 0 volt par basculment du flipflop, le circuit DCD est bloqué pour les impulsions suivantes quel que soit l'état de l'entrée level. On a donc un latch. Pour réinitialiser le latch il faut mettre l'entrée au point D du flipflop à 0 volt.

toggle flipflop

Si on installe un circuit DCD sur chacun des transistors du flipflop on peut configurer celui-ci pour fonctionner comme un toggle flipflop.

Si on branche les points d'entrrées E et Là 0 volt et qu'on branche les points d'entrées D et K ensemble en les maintenant à -3 volts. Chaque fois qu'une impulsion positive sera envoyée aux points D,K le flipflop va basculer d'état. C'est ce qu'on appelle un toggle flipflop. Si un train d'impulsions de fréquence Fi est envoyée sur l'entrée D,K on retrouve à la sortie du flipflop un train d'impulsion de fréquence Fo=Fi/2.

Démonstration pratique

Pour m'assurer que j'avais bien compris le fonctionnement du DCD j'ai fait un montage sur carte sans soudure. Ce montage comprend un multivibrateur astable qui fonctionne à 1,5 Hertz. La sortie Q du multivibrateur sert d'impulsion pour faire basculer un premier toggle flipflop dont la sortie Q et utilisée pour faire basculer un deuxième toggle flipflop. De cette façon j'obtiens un compteur binaire à 3 bits. Le compte binaire est envoyé à un décodeur qui sélectionne la sortie LED à allumer en fonction du code binaire. On a donc 8 LEDs de sortie.

Schématiques du montage

Le multivibrateur astable est utilisé comme bit de poids 0 du compteur binaire.


Le circuit suivit comprends 2 toggle flipflops pour les bits de poids 1 et 2. La sortie Q0 du multivibrateur sert d'impulsion pour faire basculer le flipflop de poids 1 et la sortie Q1 de ce flipflop sert d'impulsion pour faire basculer le deuxième flipflop.

Le décodeur sélectionne la LED à allumer en fonction du code binaire du compteur. Le circuit utilise 6 entrées puisque les sorties complémentaires doivent-être aussi utilisées par le décodeur.

En conclusion de ce long article je vous laisse l'opportunité d'étudier le circuit du décodeur pour en comprendre le fonctionnement qui somme toute est simple. Par exemple pour allumer la LED qui correspond au compte 0 la fonction booléenne est ~Q0*~Q1*~Q24.


NOTES:

  1. Les terminaux vidéos VT52,VT100, etc étaient aussi des produits de Digital.
  2. Référence au mathématicien Alan Turing.
  3. Les lois de De Morgan démontrent ~A*~B=~(A+B) et l'inverse ~A+~B=~(A*B) ce qui revient à dire que la combinaison des fonctions NON et OU sont aussi Turing complete.
  4. le caractère '~' représente la négation logique. Exemple: ~0=1 et ~1=0.Le caractère '*' représente la fonction ET et le caractère '+' la fonction OU.
  5. Manuel de maintenance du PDP8S dans lequel j'ai pris les schématiques présentées dans cet article.

TinyBASIC sur carte NUCLEO-8S208RB , version 2.0

$
0
0

J'ai continuer le développement stm8_tbi. J'ai fait beaucoup de changement ce qui explique que le numéro de version passe de 1.x à 2.0. Le système est de moins en moins un TinyBASIC et ressemble de plus en plus à Microsoft BASIC tel qu'on le retrouvait sur de nombreux ordinateurs 8 bits des années 80, tel que les Apple II, Commodore C64,VIC-20,PET et les Tandy TRS-80. Je n'ai cependant pas implémenter les calculs sur virgule flottante mais les entiers sont passés de 16 bits à 24 bits.

Pour connaître tous les changements il faut consulter le manuel de référence.

Démonstration des nouvelles fonctionnalités

Il y a 2 erreurs dans le vidéo.

  1. On peut mettre un commentaire après l'étiquette sur la première ligne. Ce commentaire n'apparaît pas dans l'affichage de la commande DIR. J'avais oublier que j'avais fais ce changement.
  2. Pour éditer une ligne d'un programme BASIC on entre le numéro de la ligne suivit de CTRL+E et non CTRL+I. La confusion vient du fait que j'utilise les 2 langues dans ce travail, le français et l'anglais. E en anglais se prononce I.

Tiny BASIC sur carte NUCLEO-8S208RB, version 2.1

$
0
0
je viens de compléter la version 2.1 du projet STM8_TBI. Cette version voit l'ajout de 5 commandes et fonctions.
  1. BUFFER pour l'allocation d'un tamppon d'octets en mémoire RAM.
  2. I2C.OPEN permet d'ouvrir le périphérique I2C du MCU.
  3. I2C.CLOSE ferme le périphérique I2C.
  4. I2C.READ pour recevoir des données d'un dispositif I2C.
  5. I2C.WRITE pour envoyé des données à un dispositiv I2C.

Regardez sur Youtube pour un plus grand affichage.

Tiny BASIC version 2.5

$
0
0

Une nouvelle version de Tiny BASIC sur carte NUCLEO-8S20X est maintenant en ligne. Cette version supporte maintenant 2 cartes NUCLEO

  • NUCLEO-8S208RB
  • NUCLEO-8S207K8

    Cette petite carte a moins de broches mais elle est pratique car elle s'enfiche dans une carte de prototypage sans soudure.

Installation du firmware sur la carte.

Lorsqu'une de ces cartes est branchée sur le PC le programmeur STLINK inclus sur ces cartes crée à la fois un disque virtuel qui apparait sous le nom NOD_8S207 ou NODE_8S208 selon la carte choisie et ajoute un port sériel. Pour l'installation du firware sur la carte

  1. Clonez le dépôt https://github.com/Picatout/stm8_tbi ou bien téléchargez le fichier zip du dépôt. Pour télécharger ce fichier cliquez sur le bouton vert CODE ensuite dans le menu sur download zip.
  2. Dans le répertoire build il y a un sous-répertoire pour chaque carte. Il suffit de copier le fichier TinyBasic.bin sur le disque virtuel NOD_20x.

Connecxion avec TeraTerm

Suppossons que vous utilisez Teraterm sur Windows. En lançant Teraterm la fenêtre nouvelle connexion s'ouvre. Il faut choisir Série avec le port identifié COMx STMicroelectronics STLink Virtual COM Port.


Ensuite dans le menu Configuration choisir port série, mettez la vitesse à 115200 et fermez la fenêtre en cliquant sur le bouton New setting


Encore dans le menu Configuration, choisir Terminal et dans la boite aller à la ligne mettez réception sur auto.

Si vous trouvez la police de caractères trop petite allez dans Configuration et sélectionnez Police.
Vous voudrez sûrement sauvegarder votre configuration pour ne pas avoir à recommencer à chaque fois. C'est encore dans le menu Configuration en sélectionnant sauvegarder setup.... Lors de la réouverture fermez la fenêtre nouvelle connexion et allez dans Configuration et faite restaurer setup... Ensuite, ce qui n'est pas évident, il faut allez dans Configuration, port série et cliquer sur le bouton new setting pour activer la connexion.
Finalement cliquez sur le bouton RESET de la carte pour redémarrer TinyBASIC.
Viewing all 192 articles
Browse latest View live