dimanche 25 février 2024

POMME-I, le désassembleur

Le moniteur possède maintenant un désassembleur accessible avec la commande @. L'affichage pause à chaque page et il faut appuyer sur la barre d'espacement pour voir la page suivante. Toute autre touche revient à la ligne de commande du moniteur. Le STM8S207K8 possède un boot loader en ROM à l'adresse 0x6000. Voici les premières lignes de code tel que désasssemblées par stm8_dasm.

#6000@

6000: 9B
6000	9B               SIM
6001	AD 0C            CALLR 600F 
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 00         LD A,8000 
6012	A1 82            CP A,#82 
6014	27 06            JREQ 601C 
6016	A1 AC            CP A,#AC 
6018	27 02            JREQ 601C 
601A	99               SCF
601B	81               RET
601C	98               RCF
601D	81               RET
601E	C6 48 00         LD A,4800 
6021	A1 AA            CP A,#AA 
6023	26 09            JRNE 602E 
6025	5F               CLRW X
6026	4F               CLR A
6027	4B 28            PUSH #28 
6029	86               POP CC
602A	AC 00 80 00      JPF 8000 

La prochaine étape est l'écriture d'un assembleur simple. Lorsque l'assembleur sera intégré au moniteur je vais changer les commandes du moniteur. Toutes les fonctions qui ne font pas parti du moniteur de base comme S,] et @ seront accessible par une interface de commande dérivée accessibles par la lettre X. X pour extension puisque que ces fonctionnalités ne faisait pas partie du p1Monitor à lorigine.

Cette version V1.3R0 est disponible sur le github mais je vais attendre que l'assembleur soit complété avant de présenter un vidéo de démonstration.

POMME-I, V1.2R4 , améliorations du moniteur

Dans la version précédente du moniteur, assembler le code pour les appels système était un peu compliqué et encore plus compliqué lorsqu'il s'agissait d'opérations sur les fichiers. J'ai simplifié tout ça en ajoutant la commande S. De plus j'ai ajouté la commande ] pour assembler l'instruction machine RET qui indique la fin du programme en langage machine et le retour vers le moniteur.

En MS-DOS il y avait un programme appellé debug.exe qui était un moniteur avec un assembleur et un désassembleur ainsi que d'autre fonctions pour examiner et modifier la mémoire RAM. Il y avait 2 types de fichiers exécutables en MS-DOS, les fichiers *.COM et les fichiers *.EXE. L'application debug.exe permettait de créer des fichiers *.COM. Avec le p1Monitor mon objectif est de m'approcher des fonctionnalités de debug.exe en permettant de créer des fichiers en assembleur qui pourront être chargés et exécuter à partir de p1Monitor. Le désassembleur existe déjà puisque je l'avait créé en 2019 avec le projet MONA, ce ne sera pas trop compliqué d'intégrer ce désassembleur à p1Monitor et ensuite il ne me restera qu'à créer l'assembleur.

Démonstration de la commande S de p1Monitor

dimanche 18 février 2024

POMME-I V1.2R2 sauvegarde d'un programme en langage machine.

Dans le vidéo suivant je montre comment:

  • créer un programme en langage machine dans le moniteur en se servant des appels aux services noyau.
  • Comment créer un autre petit programme pour sauvegarder le premier comme fichier binaire.
  • Comment recharger dans le moniteur le fichier binaire pour l'exécuter.

samedi 17 février 2024

POMME-I version 1.2r0

Ces derniers jours j'ai apporté plusieurs améliorations au projet.

  • Dans le moniteur on peut maintenant entrer une chaîne de caractères directement dans la mémoire RAM sans avoir en convertir en codes ASCII.
  • Dans le moniteur on peut afficher une aide rapide sur les codes de service du noyau avec la commande ?.
  • Le BASIC a maintenant accès à la mémoire RAM SPI par le tableau XRAM().

Démonstration de la version 1.2

dimanche 11 février 2024

POMME-I: comment je programmais en 1978

Steve Wozniak le créateur du Apple-I a programmé le moniteur de celui-ci sans utiliser d'assembleur. Quelque années après lui j'ai fait la même chose sur le premier micro-ordinateur que j'ai acheté. Ce dernier était basé sur un processeur RCA CDP1802. Pour le programmer il n'y avait qu'un clavier hexadécimal et l'affichage était constitué de LEDs. Dans la vidéo suivante j'utilise le POMME-I pour montrer comment on programmait sans assembleur.

Écrire un programme en utilisant le moniteur.

À travailler de cette façon on mémorise assez rapidement les codes machines ce qui évite d'avoir à consulter le manuel de référence fréquemment. De plus en ce qui concerne l'ordinateur que j'avais le clavier était hexadécimal mais l'affichage LED était binaire donc j'ai aussi appris à traduire les codes binaires en hexadécimal au premier coup d'oeil.

POMME-I version de base

Le projet complet POMME-I comprend 3 modules, l'ordinateur proprement dit basé sur une carte NUCLEO-8S207K8, le terminal basé aussi sur une carte NUCLEO-8S207K8 et enfin l'alimentation 5VDC. Cependant il est possible d'expérimenter le POMME-I simplement en construisant le premier module. J'ai dessiné le schéma de base de ce module.

liste du matériel requis

  • 1 Carte NUCLEO-8S207K8
  • 1 EEPROM SPI 23LC1024 de 128KO pour sauvegarder des fichiers programmes BASIC et Forth.
  • 1 RAM SPI 25LC1024 de 128KO pour augmenter la mémoire RAM.
  • 2 résistances de 10Ko 1/4 watt.
  • 2 Condenstateur céramique de 100nF
  • 1 Petit haut-parleur piézo ou électromagnétique de 130 ohm.
  • 1 condensateur électrochimique de 10µF/16Volt.
  • 1 Cable USB avec connecteur A et micro C pour connecter la carte à l'ordinateur .

La carte NUCLEO-8S207K8 comprend un programmeur STLINK-V2.1 donc tout ce qu'il faut pour la programmer c'est un cable USB pour la relier à l'ordinateur. Lorsque la carte est reliée à l'ordinateur. Un lecteur apparaît ainsi qu'un port série virtuel qui peut-être utilisé avec un émulateur de terminal pour communiquer avec le POMME-I.

Montage sur carte sans soudure

Pour un montage permanent le circuit peut-être transféré sur une carte comme cell-ci

Programmation de la carte NUCLEO-8S207K8

Dans le dossier dist il y a 2 fichiers binaires

  1. pomme_1_hsi16m.bin, c'est le fichier à utiliser si l'option cristal 24Mhz n'est pas utilisée. Le pomme-I fonctionne alors avec l'oscillateur interne de 16Mhz HSI.
  2. pomme_1_hse24m.bin, c'est le fichier à utiliser pour faire fonctionner l'ordinateur avec un cristal externe de 24Mhz.
La procédure d'installation est simple il suffit de copier ce fichier sur le lecteur représentant la carte NUCLEO-8S207K8 sur le PC.

Communication avec le pomme-I

Sur Linux Ubuntu j'utilise GTKTerm alors que sur Windows j'utilise Teraterm.
Il faut configurer la communication à 115200 BAUDS 8N1.

samedi 3 février 2024

p1Forth sur ordinateur pomme-I

J'ai ajouté le langage Forth à l'ordinateur pomme-I.

démo

Dans ce démo je fait une comparaison entre la vitesse d'éxécution du p1BASIC versus p1Forth.