gratifiant > comp.* > comp.ordinosaures

Francois LE COAT (12/01/2018, 20h30)
Bonjour,

Lorsque j'avais entre 15 et 20 ans, j'ai programmé sur mon premier
ordinateur personnel, un Sinclair ZX81 avec 16ko de RAM. Je l'ai
programmé en Basic et en langage machine, parce que le premier
programme auquel j'ai eu affaire était le "casse-brique" présent
dans l'Ordinateur Individuel n°38 de juin-juillet 1982 à la page 178.
J'ai découvert par la suite dans le cours de programmation du ZX81 :

<http://eureka.atari.org/langage_machine.jpg>

C'est-à-dire qu'avec l'aide du livre de Rodnay Zaks, j'ai appris
l'assembleur Z80, et la manière de le transférer en mémoire via
une instruction "REM" contenant le langage machine correspondant.

Il me semble, bien que j'ai programmé en langage machine, qu'il
existait un langage assembleur pour le Sinclair ZX81. J'avais
à ma disposition 1koctet ou 16koctets de RAM, et j'aurais voulu
savoir quelle était la quantité de mémoire requise pour le
langage de programmation assembleur ? On pouvait sans doute
programmer en assembleur, mais quelle était la mémoire requise ?

Le langage Basic était inclus en ROM, mais le langage assembleur
aurait dû être chargé en RAM, ce qui nécessitait beaucoup de RAM
pour pouvoir travailler, non ? J'ai connu des ZX81 avec 64koctets ...

Merci,
JKB (12/01/2018, 21h00)
Le Fri, 12 Jan 2018 19:30:47 +0100,
Francois LE COAT <lecoat> écrivait :
> Bonjour,


Bonsoir,

[..]
> Le langage Basic était inclus en ROM, mais le langage assembleur
> aurait dû être chargé en RAM, ce qui nécessitait beaucoup de RAM
> pour pouvoir travailler, non ? J'ai connu des ZX81 avec 64koctets ...


Je n'ai pas souvenir que les assembleurs soient des programmes très
volumineux. À la même époque, j'avais un Goupil G3/6809 et un Oric
Atmos 64K et j'ai écrit des programmes de plus de 40Ko de source.
En tout cas, on peut faire un assembleur (sans pseudo code,
l'assembleur de base) avec largement moins de 16Ko de programme
(code exécutable).

Sur le Goupil, l'assembleur était un exécutable chargé sur la
disquette de FLEX9. Sur l'Oric, c'était plus tordu, il s'agissait
d'un programme en BASIC avec des data et des poke, un genre de
chargeur filant le contrôle au code assemblé embarqué. Je me
souviens juste que ça lisait un fichier sur la cassette pour
enregistrer une version assemblée.

JKB
Tonton Pinuche (13/01/2018, 00h11)
Le 12/01/18 à 19:30, Francois LE COAT a écrit :

> Lorsque j'avais entre 15 et 20 ans, j'ai programmé sur mon premier
> ordinateur personnel, un Sinclair ZX81 avec 16ko de RAM. Je l'ai
> programmé en Basic et en langage machine, parce que le premier
> programme auquel j'ai eu affaire était le "casse-brique" présent
> dans l'Ordinateur Individuel n°38 de juin-juillet 1982 à la page 178.
> J'ai découvert par la suite dans le cours de programmation du ZX81 :
> <http://eureka.atari.org/langage_machine.jpg>


du Z80 sur un ATARI ?

> C'est-à-dire qu'avec l'aide du livre de Rodnay Zaks, j'ai appris
> l'assembleur Z80, et la manière de le transférer en mémoire via
> une instruction "REM" contenant le langage machine correspondant.


REM c'est du basic

> Il me semble, bien que j'ai programmé en langage machine, qu'il
> existait un langage assembleur pour le Sinclair ZX81. J'avais
> à ma disposition 1koctet ou 16koctets de RAM, et j'aurais voulu
> savoir quelle était la quantité de mémoire requise pour le
> langage de programmation assembleur ? On pouvait sans doute
> programmer en assembleur, mais quelle était la mémoire requise ?


je sais pas, je n'ai eu qu'un CPC 6128

> Le langage Basic était inclus en ROM, mais le langage assembleur
> aurait dû être chargé en RAM, ce qui nécessitait beaucoup de RAM
> pour pouvoir travailler, non ? J'ai connu des ZX81 avec 64koctets ...


Le langage assembleur, c'est du texte qui est passé au programme ASM (ou
èquivalent) qui le transforme en binaire (en une ou deux passes)
Il n'est pas "chargé en RAM"

Le programme basic c'est aussi du texte qui est interprêté par
l'interprêteur qui est en ROM, par fois en ram (sur CP/M par exemple)
Francois LE COAT (13/01/2018, 00h50)
Salut,

JKB écrit :
[..]
> chargeur filant le contrôle au code assemblé embarqué. Je me
> souviens juste que ça lisait un fichier sur la cassette pour
> enregistrer une version assemblée.


C'est à dire qu'avec les 16ko que j'avais à ma disposition j'aurais eu
des difficultés à développer en langage de programmation assembleur?

Je suppose que le langage assembleur devait être interprété, comme le
Basic résident en ROM. Enfin, je n'en ai pas eu l'usage, peut-être y
en avait-il plusieurs ... En fait, j'assemblais par moi-même, avec
de la documentation sur le Z80, ce qui fait que ma quantité réduite
de mémoire n'était pas un obstacle.

Mon tout dernier programme assembleur était une sorte de "Scramble"
avec un vaisseau spatial se déplaçant en scrolling de fond étoilé.
Comme le jeu de Konami n'est pas sorti sur ZX81 ça aurait pu marcher.

Merci pour la réponse d'un connaisseur =)
Arachide (13/01/2018, 00h58)
Le 12/01/2018 à 23:50, Francois LE COAT a écrit :

> C'est à dire qu'avec les 16ko que j'avais à ma disposition j'aurais eu
> des difficultés à développer en langage de programmation assembleur ?


L'étiquette du ZX Assembleur signale que 16K sont suffisants pour
utiliser cet assembleur.



Guillaume.
Gzavsnap (13/01/2018, 03h57)
> Il me semble, bien que j'ai programmé en langage machine, qu'il
> existait un langage assembleur pour le Sinclair ZX81. J'avais
> à ma disposition 1koctet ou 16koctets de RAM, et j'aurais voulu
> savoir quelle était la quantité de mémoire requise pour le
> langage de programmation assembleur ? On pouvait sans doute
> programmer en assembleur, mais quelle était la mémoire requise ?


Salut François,

En général, 16k était très juste pour la programmation assembleur.
Car même si le programme assembleur en lui même ne prend que 4 à 8k...
il faut loger les mnémoniques (8k) et l'assembleur généré(environ 4k),
donc, avec le programme, cela fait 16k en tout.

Au final, une mémoire de 16k permettait de créer un programme de 4k
assemblé!

Pour faire un programme de 16k, il faillait nécessairement 32k de RAM.
C'est pour cela qu'a l'époque, les programmes assembleur "maison"
étaient courts, ou créés avec des modules de moins de 4K.

Avec un programme assembleur en ROM, on ne gagne "que" 4k, mais cela
permettait de coder un peu plus d'un K de plus en assembleur.
Le ratio "mnémonique>compilé" est fluctuant, mais il faut penser au
texte enregistré:

"LD A,10" (rc) soit 8 octets pour un rendu de 3 octets.
"OR C" (rc) soit 5 octets pour 1 octet compilé.
Il faut y ajouter les labels et les commentaires...

Donc, 4k compilés sur 16k était un maximum, sans commentaires en texte
et avec le minimum de labels.
Gzavsnap (13/01/2018, 04h16)
Un exemple de "Casse-brique" de Bernard Lacoste (Ordi-5 n°6):
<http://zx81.ordi5.free.fr/programmes/casse-brique.zip>

En 5 modules rems...
Pascal J. Bourguignon (13/01/2018, 06h16)
Francois LE COAT <lecoat> writes:

[..]
> Le langage Basic était inclus en ROM, mais le langage assembleur
> aurait dû être chargé en RAM, ce qui nécessitait beaucoup de RAM
> pour pouvoir travailler, non ? J'ai connu des ZX81 avec 64koctets ...


Oui, ben en fait, pour ces processeurs là, tu peux facilement l'assembler
"à la main". En fait, j'avais écrit, en me basant sur le même Zaks, un
jeu de tic-tac-toe, directement en hexadecimal: pas besoin d'assembleur!
(Bon en fait je n'avais même pas d'ordinateur, j'ai juste passé
l'hexadécimal à un pote qui en avait un, mais il n'a pas pu le
déboguer).

Enfin, ceci pour dire que si tu as 1Ko de mémoire (et pas d'ordinateur
pour faire du développement croisé), le plus simple, c'est de travailler
directement en hexadecimal.

Maintenant, on est en 2018, si tu veux t'amuser, profite de tes 32 Go de
RAM, 4 TB de disque dur et de ton écran 4K, et lance QEMU pour exécuter
les petits programmes Z80 que tu auras assemblés ou compilés en une
milliseconde:


Arachide (13/01/2018, 09h01)
Le 13/01/2018 à 02:57, Gzavsnap a écrit :

> En général, 16k était très juste pour la programmation assembleur.
> Car même si le programme assembleur en lui même ne prend que 4 à 8k...
> il faut loger les mnémoniques (8k) et l'assembleur généré(environ 4k),
> donc, avec le programme, cela fait 16k en tout.
> Au final, une mémoire de 16k permettait de créer un programme de 4k
> assemblé!


Ensuite, cela dépend des capacités de l'assembleur.
Sur le TI-99, ils avaient réussi à loger un "Line-by-line assembler"
dans moins de 4Ko.
Celui-ci fonctionnait directement au clavier, sans édition d'un fichier
source.
On entrait une ligne d'assembleur qui était automatiquement encodée en
hexadécimal et stockée. Si elle contenait une référence, ceci était
consigné dans une table pour compléter le codage dès l'apparition de la
référence.
Ce qui fait qu'avec le module "Mini-mémoire" de 4Ko, on pouvait encore
créer une routine de 800 octets à peu près. Suffisant, en lien avec le
Basic pour accélérer la partie sensible d'un programme.

Et si on avait en plus l'extension 32k, c'étaient 32K directement
utilisables.

L'ennui c'était l'absence d'édition... pour insérer une instruction
qu'on aurait oubliée... c'était déplacement de bloc avec le moniteur en
ROM et souvent encodage à la main de la nouvelle instruction.

Guillaume.
Francois LE COAT (13/01/2018, 09h30)
Salut,

Arachide écrit :
> Francois LE COAT écrit :
> L'étiquette du ZX Assembleur signale que 16K sont suffisants pour
> utiliser cet assembleur.
>
> Guillaume.


Merci pour cette réponse précise. Il aurait donc suffit de 16koctets
pour développer en langage assembleur sur le Sinclair ZX81. En fait
je programmais en "langage machine", parce que le premier programme
auquel j'ai jamais eu affaire pour ZX81 était programmé de cette façon.

C'était un programme de "casse-brique" présent dans l'Ordinateur
Individuel n°38 de juin-juillet 1982 à la page 178. Ce numéro de l'O.I.
n'est pas disponible sur abandonware-magazines.org et je n'ai pas pu
le revoir écrit malgré mes recherches, alors que je l'aurais bien voulu.

À l'époque où j'ai retranscrit ce premier casse-brique, je n'avais pas
de téléviseur (j'étais chez un ami), je n'avais qu'un seul kilo-octet
de mémoire (la base), et pas de moyen de sauvegarde (je n'avais pas
encore l'expérience des cassettes audio). C'est un jeu de "Breakout"
qui m'a laissé un souvenir très précis, il y a environ 35 ans ...
pehache (13/01/2018, 09h39)
Le 12/01/2018 à 19:30, Francois LE COAT a écrit :
> Il me semble, bien que j'ai programmé en langage machine, qu'il
> existait un langage assembleur pour le Sinclair ZX81.


Pour info à ceux qui ne pratiquent pas le FLC au jour le jour, voilà ce
qu'il soutenait sur fcsa 2 jours avant :

---------------------------------------------------------------------
Mais Monsieur *****, sur le Sinclair, il n'y avait *pas*
de langage assembleur. C'était le cas de toutes les machines de
cette époque. On programmait en alphanumérique et "langage machine" !
---------------------------------------------------------------------
<p35v1d$15d2$1>
JKB (13/01/2018, 09h41)
Le Fri, 12 Jan 2018 23:50:14 +0100,
Francois LE COAT <lecoat> écrivait :
> Salut,
> JKB écrit :
> C'est à dire qu'avec les 16ko que j'avais à ma disposition j'aurais eu
> des difficultés à développer en langage de programmation assembleur ?


Le problème n'est pas l'exécutable lui-même, mais les données (pour
le calcul des sauts par exemple). C'est possible, mais il faut
utiliser des tables temporaires et gruger un peu partout (du style
compiler ligne par ligne en gardant les étiquettes dans un tableau
au fur et à mesure puis refaire une passe pour les adresses
calculées). C'est un peu plus tordu qu'avec une mémoire plus
importante, mais ça se fait.

> Je suppose que le langage assembleur devait être interprété, comme le
> Basic résident en ROM. Enfin, je n'en ai pas eu l'usage, peut-être y
> en avait-il plusieurs ... En fait, j'assemblais par moi-même, avec
> de la documentation sur le Z80, ce qui fait que ma quantité réduite
> de mémoire n'était pas un obstacle.


Aucune raison. Le programme d'assemblage peut être lui-même un
programme compilé, le BASIC ne servant que de chargeur en mémoire.
Je n'ia jamais eu de ZX81, mais sur l'Oric, c'était comme ça que
c'était fait.

> Mon tout dernier programme assembleur était une sorte de "Scramble"
> avec un vaisseau spatial se déplaçant en scrolling de fond étoilé.
> Comme le jeu de Konami n'est pas sorti sur ZX81 ça aurait pu marcher.
> Merci pour la réponse d'un connaisseur =)


Attention, ma mémoire est un peu rouillée...

JKB
JKB (13/01/2018, 09h48)
Le Sat, 13 Jan 2018 02:57:53 +0100,
Gzavsnap <**> écrivait :
> Salut François,
> En général, 16k était très juste pour la programmation assembleur.
> Car même si le programme assembleur en lui même ne prend que 4 à 8k...
> il faut loger les mnémoniques (8k) et l'assembleur généré(environ 4k),
> donc, avec le programme, cela fait 16k en tout.
> Au final, une mémoire de 16k permettait de créer un programme de 4k
> assemblé!


Pour un assembleur trivial. Mais je te garantis qu'on peut générer
des programmes bien plus long avec 16Ko de mémoire. Il faut juste
être un peu plus subtil et patient.

> Pour faire un programme de 16k, il faillait nécessairement 32k de RAM.
> C'est pour cela qu'a l'époque, les programmes assembleur "maison"
> étaient courts, ou créés avec des modules de moins de 4K.


Désolé, mais non.

Tu peux avoir un compilateur fonctionnant ligne par ligne et
écrivant les étiquettes pour les calculs de saut dans un tableau
(les machines avec sauvegarde sur bande étant incapables d'ouvrir
deux fichiers simultanément). Dans une seconde passe, tu relis le
fichier compilé et tu complètes les adresses.

J'avais écrit un assembleur comme ça en BASIC pour l'Oric Atmos qui me
permettait de générer des programmes aussi long que la mémoire le
permettait alors que je n'avais à disposition que 44k de mémoire (en
virant le support de l'écran graphique).

JKB
Francois LE COAT (13/01/2018, 10h45)
Salut,

JKB écrit :
[..]
> Je n'ia jamais eu de ZX81, mais sur l'Oric, c'était comme ça que
> c'était fait.
> Attention, ma mémoire est un peu rouillée...


Moi c'est un peu pareil. Ça fait pratiquement 30 ans que je n'ai plus
discuté de cela. À 20 ans, après mon expérience en langage machine pour
la programmation du ZX81, j'ai eu affaire à des ordinateurs Hewlett-
Packard professionnels, qui étaient munis de processeurs Intel 8085.
J'ai eu la grande surprise de retrouver le même assembleur (en moins
bien) que pour le Zilog Z80, alors que le Z80 avait une double banque
de registres, et des instructions de duplication mémoire plus avancées.

En fait, la firme Zilog avait été créée par des anciens ingénieurs de
chez Intel, et l'assembleur Z80 était plus avancé que pour le 8085.
La postérité a donné raison à Intel, et non pas à Zilog, oublié...

J'ai ma réponse grâce à Guillaume, qui me dit qu'il fallait 16koctets.
Si j'avais eu connaissance de l'existence de ce programme assembleur
pour Sinclair ZX81, j'aurais pu sans doute programmer plus efficacement.

Le langage machine était très performant, mais lourd en apprentissage!

Merci,
Gzavsnap (13/01/2018, 10h46)
Le 13/01/2018 à 08:39, pehache a écrit :
> Le 12/01/2018 à 19:30, Francois LE COAT a écrit :
> Pour info à ceux qui ne pratiquent pas le FLC au jour le jour, voilà ce
> qu'il soutenait sur fcsa 2 jours avant :
> ---------------------------------------------------------------------
> Mais Monsieur *****, sur le Sinclair, il n'y avait *pas*
> de langage assembleur. C'était le cas de toutes les machines de
> cette époque. On programmait en alphanumérique et "langage machine" !
> ---------------------------------------------------------------------
> <p35v1dd2>


salut,

Il faut se replacer dans le contexte historique de l'utilisateur.Sur de
nombreuses machines, le Basic a été choisi pour la programmation.
La ROM Basic (La MEM=ROM Moniteur Basic) permettant une utilisation plus
facile de la machine.

Donc, l'utilisateur a été contraint de programmer en Basic.
Mais, peu de temps après la sortie de ces machines, l'utilisateur a été
inondé de programmes rapides et courts à charger.
Il était claire que ces programmes n'étaient pas programmés en Basic car
il était impossible de reproduire une telle vélocité avec ce langage.
Le langage assembleur (ou langage machine) donna une nouvelle vie à
certaines machines tel que le ZX81... avec des jeux plus grand et plus
rapide.

Une nouvelle jeunesse, après une série de jeux médiocres programmés en
Basic.

Et c'était le jour et la nuit!

On découvrait alors un mode de programmation aussi curieux qu'énigmatique.

Saisir une série de codes décimaux ou hexadécimaux permettait de lancer
un jeu...

Avec la curiosité et la littérature de l'époque, de nombreuses personnes
ont explorer ce domaine, avec de couts programmes permettant "d'aider"
le Basic dans les tâches redondantes, mais aussi en programme
entièrement en langage machine.

Mais, effectivement, aucune machine (à part l'Apple 2) ne permettait la
programmation au niveau "machine" en assembleur.
Tous les utilisateurs devait se contenter du bon vieux Basic pour la
programmation.

Et il est vrai que l'entrée des codes se faisaient en "Pokant" les
valeurs de la suite du programme assembleur, les uns à la suite des
autres... tout bêtement!

L'assemblage des codes était marginal, mais de nombreux outils étaient
disponibles à l'époque... pour les passionnés.

Mais, bon nombre d'utilisateur se contentaient de taper une suite
interminable de codes sans avoir idée du résultat final.
C'est une surprise à chaque fois...

Mais, la surprise se méritait... car une seule erreur de saisie pouvait
rendre le programme instable et non fonctionnel!

Un exemple de programme en assembleur, vu du coté utilisateur:
ZX Kong (Olivier ROZE - Hebdogiciel février 1986) :
<http://download.abandonware.org/magazines/Hebdogiciel/hebdogiciel_numero123/22.jpg>

Et le résultat de cette longue liste de nombres...
<http://www.hebdogiciel.free.fr/hd-pictures/zx81/ZX-KONG_5.png>

Discussions similaires