Langage machine

25 réponses
Avatar
Francois LE COAT
Bonjour,

Lorsque j'avais entre 15 et 20 ans, j'ai programm=E9 sur mon premier
ordinateur personnel, un Sinclair ZX81 avec 16ko de RAM. Je l'ai
programm=E9 en Basic et en langage machine, parce que le premier
programme auquel j'ai eu affaire =E9tait le "casse-brique" pr=E9sent
dans l'Ordinateur Individuel n=B038 de juin-juillet 1982 =E0 la page 178.=

J'ai d=E9couvert par la suite dans le cours de programmation du ZX81 :

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

C'est-=E0-dire qu'avec l'aide du livre de Rodnay Zaks, j'ai appris
l'assembleur Z80, et la mani=E8re de le transf=E9rer en m=E9moire via
une instruction "REM" contenant le langage machine correspondant.

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

Le langage Basic =E9tait inclus en ROM, mais le langage assembleur
aurait d=FB =EAtre charg=E9 en RAM, ce qui n=E9cessitait beaucoup de RAM
pour pouvoir travailler, non ? J'ai connu des ZX81 avec 64koctets ...

Merci,

--=20
Fran=E7ois LE COAT
<http://eureka.atari.org/>

10 réponses

1 2 3
Avatar
JKB
Le Fri, 12 Jan 2018 19:30:47 +0100,
Francois LE COAT écrivait :
Bonjour,

Bonsoir,
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 ...

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
--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr
=> http://loubardes.de-charybde-en-scylla.fr
Avatar
Tonton Pinuche
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)
--
J : Plus cher ou moins cher: je me casse de chez FT de toute facon.
MZ: Attention, les pigeons voyageurs font des crottes...
-+- in: Guide du Cabaliste Usenet - La Cabale voyage -+-
Avatar
Arachide
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.
http://www.zx81stuff.org.uk/zx81/tape/ZXAssembler(Mono)/inlays/.Cover.jpg
Guillaume.
Avatar
Gzavsnap
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.
Avatar
Gzavsnap
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...
Avatar
Pascal J. Bourguignon
Francois LE COAT writes:
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 ...

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:
https://wiki.qemu.org/Features/Z80
https://sourceforge.net/projects/z80gcc/?SetFreedomCookie
--
__Pascal J. Bourguignon
http://www.informatimago.com
Avatar
Arachide
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.
Avatar
pehache
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$
Avatar
JKB
Le Fri, 12 Jan 2018 23:50:14 +0100,
Francois LE COAT écrivait :
Salut,
JKB écrit :
Francois LE COAT écrivait :
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 ...

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.

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
--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr
=> http://loubardes.de-charybde-en-scylla.fr
Avatar
JKB
Le Sat, 13 Jan 2018 02:57:53 +0100,
Gzavsnap <**> écrivait :
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 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
--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr
=> http://loubardes.de-charybde-en-scylla.fr
1 2 3