ZX81 - Vidéo d'introduction à la programmation en langage machine

Ici, c'est la foire aux liens, mais attention pas du lien nimportnawak (le méchant modo y veillera), mais du vrai lien 'in topic'

Modérateur : Politburo

Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

ZX81 - Vidéo d'introduction à la programmation en langage machine

Message par Schraf »

Bonjour à tous,

Ci-dessous un lien vers la première partie sur la programmation du célèbre micro-ordinateur ZX81 en langage machine.

ZX81 - Initiation au langage machine (partie 1)

La vidéo se veut accessible à tous et les outils utilisés ne nécessitent aucune installation (tout est en ligne).

N'hésitez pas à me partager vos impressions pour que je prépare au mieux la partie 2 qui sera concentrée sur le processeur Z80A.

Je propose un exercice à la fin de la vidéo donc si certains veulent poster leurs solutions ici...

Bon visionnage !
HLL
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 223
Enregistré le : 19 janv. 2017 20:58

Re: ZX81 - Vidéo d'introduction à la programmation en langage machine

Message par HLL »

Meri Eric, beau travail.
Avatar du membre
rogeroge
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4227
Enregistré le : 14 mai 2010 21:41
Localisation : Entre Nancy et Bercy : à Torcy

Re: ZX81 - Vidéo d'introduction à la programmation en langage machine

Message par rogeroge »

Bonjour,

En vidéo, voici un complément indispensable au manuel du ZX81.
Le tuto présente une qualité pédagogique remarquable.
De plus, la narration est totalement compréhensible (je suis malentendant de naissance).

Combien as-tu passé de temps pour créer cette vidéo ?
J'estime ce temps à 150 heures...

Félicitations pour ce travail !
Il faut être fou pour venir sur ce site mais encore plus fou pour ne pas y revenir !
Ben
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1549
Enregistré le : 21 août 2016 19:04

Re: ZX81 - Vidéo d'introduction à la programmation en langage machine

Message par Ben »

Vraiment bien cette vidéo! L'explication des notions de l'hexadécimal et de l'assemble/langage machine est peut-être un peu rapide si tu veux t'adresser à des novices.

La partie 2 est prévue pour quand?
Ben
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1549
Enregistré le : 21 août 2016 19:04

Re: ZX81 - Vidéo d'introduction à la programmation en langage machine

Message par Ben »

rogeroge a écrit : 12 mars 2020 09:15 Bonjour,

En vidéo, voici un complément indispensable au manuel du ZX81.
Le tuto présente une qualité pédagogique remarquable.
De plus, la narration est totalement compréhensible (je suis malentendant de naissance).

Combien as-tu passé de temps pour créer cette vidéo ?
J'estime ce temps à 150 heures...

Félicitations pour ce travail !
Une nouvelle vocation Roger? Tu vas te mettre à l'assembleur? :-)
Avatar du membre
rogeroge
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4227
Enregistré le : 14 mai 2010 21:41
Localisation : Entre Nancy et Bercy : à Torcy

Re: ZX81 - Vidéo d'introduction à la programmation en langage machine

Message par rogeroge »

Ben a écrit : 12 mars 2020 09:28
rogeroge a écrit : 12 mars 2020 09:15 .........
Une nouvelle vocation Roger? Tu vas te mettre à l'assembleur? :-)
J'ai déjà bricolé avec un Z80 tout seul
et plus anciennement, très sérieusement avec des formateurs avec un 6502 (Apple 2) pendant 3 jours.
Bon, ce n'est plus ma tasse de thé mais je peux m'y remettre... 8)
C'est un monde passionnant mais il faut du temps pour avancer...
Il faut être fou pour venir sur ce site mais encore plus fou pour ne pas y revenir !
Ben
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1549
Enregistré le : 21 août 2016 19:04

Re: ZX81 - Vidéo d'introduction à la programmation en langage machine

Message par Ben »

rogeroge a écrit : 12 mars 2020 10:27 J'ai déjà bricolé avec un Z80 tout seul
et plus anciennement, très sérieusement avec des formateurs avec un 6502 (Apple 2) pendant 3 jours.
Bon, ce n'est plus ma tasse de thé mais je peux m'y remettre... 8)
C'est un monde passionnant mais il faut du temps pour avancer...
L'assembleur prend beaucoup de temps avant d'avoir les premiers résultats. Il faut déjà bien connaître les instructions, mais il faut aussi bien connaître la machine sur laquelle on développe.
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

Re: ZX81 - Vidéo d'introduction à la programmation en langage machine

Message par Schraf »

Bonjour,

Merci pour ces premiers retours !

Concernant les explications sur l'hexadécimal, la plupart des bouquins sur la programmation parlent des bases 2 et 16, je ne voulais pas rajouter ma couche à ce sujet pour entrer plus rapidement dans le sujet. Je vais essayer de présenter un autre exemple de conversion dans la partie 2.

Sinon, j'ai pas compté les heures mais techniquement c'est assez rapide à faire une vidéo comme ça, du moins si on a préparé toutes les idées en marchant ou en prenant sa douche :D :D

La partie 2 présentera le corrigé de l'exercice proposé (avec 3 versions en LM) et la programmation de la conjecture de Syracuse, ce qui permettra de voir les tests, boucles et que le Z80 ne connait ni la multiplication ni la division ce qui a priori ne facilite pas la tache :?
HLL
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 223
Enregistré le : 19 janv. 2017 20:58

Re: ZX81 - Vidéo d'introduction à la programmation en langage machine

Message par HLL »

Salut à tous,
Pour info, Eric a cité la revue "ORDI-5" dans sa vidéo… et quelques programmes on déjà étaient tapés >ici< .

Amusez-vous bien.
Avatar du membre
meridian
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 1151
Enregistré le : 29 oct. 2014 05:08
Localisation : Seine-Saint-Denis

Re: ZX81 - Vidéo d'introduction à la programmation en langage machine

Message par meridian »

sympa la vidéo,

Merci :)
Ben
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1549
Enregistré le : 21 août 2016 19:04

Re: ZX81 - Vidéo d'introduction à la programmation en langage machine

Message par Ben »

Schraf a écrit : 12 mars 2020 19:30 le Z80 ne connait ni la multiplication ni la division ce qui a priori ne facilite pas la tache :?
Tout comme le 8080 et le 6502. Je pense que le 6809 a introduit une instruction de multiplication. Mais avec un petit décalage, on arrive à faire tout ça :-)
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3404
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: ZX81 - Vidéo d'introduction à la programmation en langage machine

Message par C.Ret »

Ben a écrit : 13 mars 2020 17:05[…]Mais avec un petit décalage, on arrive à faire tout ça :-)
c'est bien avec de petites opérations élémentaires comme lesdits décalages que je compte m'y prendre pour programmer les Suite de Syracuse en assembleur. Je projette de le faire à l'aide du moniteur intégré à mon C128D. Je ne maitrise pas suffisamment les nombreuses instructions et registres compliqués du Zilog Z80.

Par contre pourquoi faire cela en assembleur alors que le BASIC du Zx81 permet très certainement de faire plus facilement ??
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
Ben
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1549
Enregistré le : 21 août 2016 19:04

Re: ZX81 - Vidéo d'introduction à la programmation en langage machine

Message par Ben »

C.Ret a écrit : 15 mars 2020 13:05
Ben a écrit : 13 mars 2020 17:05[…]Mais avec un petit décalage, on arrive à faire tout ça :-)
c'est bien avec de petites opérations élémentaires comme lesdits décalages que je compte m'y prendre pour programmer les Suite de Syracuse en assembleur. Je projette de le faire à l'aide du moniteur intégré à mon C128D. Je ne maitrise pas suffisamment les nombreuses instructions et registres compliqués du Zilog Z80.

Par contre pourquoi faire cela en assembleur alors que le BASIC du Zx81 permet très certainement de faire plus facilement ??
Le BASIC permet de le faire, mais pas à la même vitesse que l'assembleur.

Depuis la vidéo d'Eric, j'ai eu pensé aussi, aussi sur 6502. En y réfléchissant 2 mins, ça ne doit pas être bien compliqué, effectivement
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

Re: ZX81 - Vidéo d'introduction à la programmation en langage machine

Message par Schraf »

Bonjour,

Oui, la vitesse n'a rien à voir entre un programme en BASIC et un autre en assembleur. Et puis si on se replace dans le contexte de l'époque, chaque octet était important surtout pour la version de base du ZX81 avec uniquement 1Ko de disponible pour les programmes.

En spoilant un peu la future vidéo, voici comment on fait pour diviser par 2 en Z80 :

Divisons par exemple 778 = (11 00001010 en binaire) par 2 en utilisant le registre BC. Ca veut dire que B sera égal à 11 et C à 1010)

Dans la partie ASM console de http://rullf2.xs4all.nl/jszeddy/jszeddy.html on tape :

Code : Tout sélectionner

org 16514
ld bc,778
srl b
rr c
ret
Puis "assemble". En lançant le programme par R(un) on trouve bien 389 qui est la moitié de 778

Mais pourquoi ça marche ?

Code : Tout sélectionner

srl b
signifie décaler les bits d'un rang vers la droite et mettre l'unité en retenue, donc B=0000 0011 devient B=0000 0001 mais l'unité est conservée dans le drapeau "retenue" (qui vaut donc ici 1)

Code : Tout sélectionner

rr c
fait également un décalage vers la droite mais remet à gauche la retenue, donc C=0000 1010 devient 1000 0101. Finalement BC = 1 1000 0101 qui est 389.

Dit plus simplement, ces 2 commandes permettent de décaler d'un bit vers la droite une paire de registres (c'est ça diviser par 2 en binaire). Pour un registre ordinaire de 8 bits, par exemple A, il suffit de faire SRL A.

Pour multiplier par 3 c'est plus facile à comprendre, par exemple faisons 724*3 + 1 et mettons le résultat final dans BC (car c'est cette paire de registres qui est affichée lorsque l'on utilise PRINT USR sur le ZX81) :

Code : Tout sélectionner

org 16514
ld hl,724
ld e,l        ; copie de hl dans de
ld d,h
add hl,hl  ; on double hl
add hl,de ; et on ajoute "de", ce qui fait bien 3*hl
inc hl       ; +1
ld b,h      ; on met le résultat dans bc
ld c,l
ret
Je n'ai pas regardé si les équivalents de srl et rr existaient sur l'Altair mais ça pourrait être amusant de programmer Syracuse sur cette machine (pour obtenir le temps de vol par exemple)
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3404
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: ZX81 - Vidéo d'introduction à la programmation en langage machine

Message par C.Ret »

Ah! je viens seulement de comprendre que sur ce microprocesseur 8 bits, avoir des "registres fusionnés" signifie pouvoir faire des calculs sur 16 bits !

C'est pas mal, sur mon rudimentaire MOS 8502 je n'ai pas de telle opportunité. Ses quelques registres sont bel et bien limité à 8 bits; seul le registre d'adressage fait exception).

Bon sur 8 bit on peut manipuler des nombres entre 0 et 255. C'est bien.
Avec les "registres fusionné" du Z80 on va pouvoir manipuler des nombres entre 0 et 65535. C'est mieux.

Mais les suites de Syracuse ont vite fait de prendre de l'altitudes mon idée est de traiter des nombres codés sur plusieurs chiffre et comme mon vilian petit MOS s'obstine à ne traiter que 8bits et que justement 8bits c'est l'octet pour coder un chacartère à l'écran, je pense faire le calcul in situe dans la mémoire d'affichage.
Cela va m'éviter de faire appel à une procédure d'affichage pour voir en temps réel le calcul.

Un peu comme on voit clignoter les diodes d'un Altaïr ou tourner les décapodes d'un Colossus.
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
Répondre

Retourner vers « Liens en vrac »