ZX81 - Vidéos sur la programmation en langage machine

Tous les Sinclair. Du Mk14 au QL

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éos sur la programmation en langage machine

Message par Schraf »

Bonjour à tous,

Suite à cette période de confinement, j'ai eu un peu de mal à trouver chez moi du silence pour enregistrer la partie n°2 consacrée à la programmation en langage machine du ZX81 mais voilà, c'est enfin en ligne ! :P

ZX81 - Initiation au langage machine (partie 2)

J'y corrige l'exercice proposé dans la partie n°1 en donnant une version en BASIC et 4 versions en langage machine (ce qui permet de voir différentes instructions)

Ensuite je me lance dans la programmation en langage machine de l'algorithme de Syracuse (3 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2 -> 1) qui donnera les temps de vol (nombre de fois où l'on doit faire n/2 ou 3*n+1 avant d'arriver à 1) des nombres entre 1 et 30. Cela permet de voir comment on peut astucieusement faire une multiplication (par 3) ou une division (par 2) de registres doubles (genre HL) avec le processeur Z80A qui ne connait que les additions, soustractions et les rotations de bits.

J'ai essayé de tenir à peu près le même temps que la première vidéo...

N'hésitez pas à me faire des retours (sur YTube ou ici).

Question : J'ai mis un lien vers un émulateur de ZX81 pour MAC que je trouve bien (zxsp) avec possibilité de taper en LM et debugger, est-ce que vous avec un équivalent pour Windows ?
DIDIER
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 99
Enregistré le : 05 janv. 2009 21:02
Localisation : BORDEAUX

Re: ZX81 - Vidéos sur la programmation en langage machine

Message par DIDIER »

merci schraf ...

excellent ... j attends la prochaine video ...

cool de faire ces videos sur la prog en LM sur le zx81

j utilise le zx assembleur d artic (sur mon zx81) ... ou autre option que j utilise le plus souvent c est la programmation en hexadecimal ... (plus long) ...

continue c est excellent

bien a toi schraf

didier
UTILISATEUR du ZX81 depuis 1982 . j ai un lecteur de disquette mageco qui marche bien ... mon zx a ete modifie (prise joystick ... extension 16KO interne ...) ... j ai edite y a 5 an un journal appele micro sinclair ... le numero 6 est en cour
Ben
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1549
Enregistré le : 21 août 2016 19:04

Re: ZX81 - Vidéos sur la programmation en langage machine

Message par Ben »

Effectivement, excellente vidéo, elle mérite bien le pouce bleu :-)

L'approche de la programmation Z80 est vraiment différente du 6502. Le 6502 n'a que des registres 8 bits, par contre, il compense par un accès mémoire.

Avec les exemples que tu donnes, c'est bien d'avoir le nombre d'octets, mais ce serait bien de faire le compte de cycle du processeur pour effectuer le traitement.

Encore merci!

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

Re: ZX81 - Vidéos sur la programmation en langage machine

Message par Schraf »

Bonjour,

Merci pour ces retours !

J'étais un peu frustré de ne proposer que le temps de vol et pas le maximum atteint, je viens enfin d'y arriver... :slime:

A tester sur le site http://rullf2.xs4all.nl/jszeddy/jszeddy.html

Code : Tout sélectionner

1 rem [hex:00,00,00,00,3a,82,40,32,84,40,3e,00,32,85,40,2a,82,40,7c,fe,00,20,05,7d,fe,01,28,20,7d,e6,01,20,06,cb,3c,cb,1d,18,05,5d,54,29,19,23,ed,5b,84,40,b7,ed,52,19,da,94,40,22,84,40,18,d6,ed,4b,84,40,c9 ]
2 for n = 1 to 30
5 poke 16514, n
10 scroll
15 print n;"->";usr 16518
20 next n
Et le code en "clair" :wink:

Code : Tout sélectionner

org 16514
nop  			; n sur 2 octets (je mets les variables ici plutôt qu'en utilisant RAMTOP pour plus de lisibilité)
nop
nop  			; max = 0
nop
ld a, (16514)		; a = n
ld (16516),a 		; max = n
ld a,0
ld (16517),a	
ld hl,(16514)
loop: ld a,h		; test si n = 1
cp 0
jr nz, suite
ld a,l
cp 1
jr z, fin
suite: ld a,l		; test n impair
and 1
jr nz,impair
srl h			; n / 2
rr l
jr maxi
impair: ld e,l		; 3 * n + 1
ld d,h
add hl,hl
add hl,de
inc hl
maxi: ld de,(16516) 	; de = max actuel
or a
sbc hl,de
add hl,de   		; test si HL > DE
jp c, loop
ld (16516),hl  		; si oui max = HL
jr loop
fin: ld bc, (16516)	; on renvoie le max dans BC
ret
Il faut que je me penche sur le 6502, d'autant que j'ai le commodore "THE C64" dans sa belle petite boite neuve :P
JCH
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 482
Enregistré le : 28 oct. 2018 17:28
Localisation : Entre Lyon et St Etienne
Contact :

Re: ZX81 - Vidéos sur la programmation en langage machine

Message par JCH »

Merci pour ces tutos, ça me ramène quelques années en arrière !

J'ai juste été surpris par l’utilisation du JP au Lieu d'un JR dans les 2 versions 3 ( :? ) du programme d'affichage de l'alphabet. :geek:
Tu aurais pu gagner un précieux octet de plus :wink:
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

Re: ZX81 - Vidéos sur la programmation en langage machine

Message par Schraf »

Merci @JCH ! Ouhlala oui, quel gâchis de perdre bêtement un octet :oops: !

Voici donc une version de l'alphabet en 9 octets :

Code : Tout sélectionner

1 rem [hex:3e,26,d7,3c,fe,40,20,fa,c9 ]
2 rand usr 16514

Code : Tout sélectionner

org 16514
ld a, 38
rst 16
inc a
cp 64
jr nz, -6
ret
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3405
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: ZX81 - Vidéos sur la programmation en langage machine

Message par C.Ret »

J'ai pris le temps de visionner ces vidéo avant de finir mon code pour MOS 6502/6510/8510. Je trouve cela fort instructif. Il y a des différences avec le Zylog Z80 mais aussi des similitudes. Notamment dans les mnémoniques utilisé et autres procédure de test.

Comme faire les calcul entre 0 et 255 n'a pas beaucoup d'intérêt et qu'il n'y a pas de registre fusionné, il faut faire les 'fusion' à la main. c'est très facile les 6502 possèdent pour cela deux registre d'indexage X et Y qui permettent des adressages étendus indexé rapide et pratique (tant que l'on ne charge pas à parcourir des matrice en deux dimension - les post et près- indexations ayant alors des limitations).

Mais traiter des entiers de plusieurs octets est assez pénible car il faut les coder et les résultats du calcul ne sont pas très visible, il faut décoder pour afficher.

Mon idée et de faire du calcul de la suite un jeu vidéo dont les chiffres s'animent en temps réel sur l'écran 40 Col (plus directement accessible au MOS 8502 de mon C128D).
Avantage, la saisie des donnée est facile car il suffit de taper les nombres directement dans l'écran 40Col (Les CBM-8bit de Commodore ont d'ailleurs un éditeur plein écran bien pratique ).
Les nombres et termes intermédiaire de la suite peuvent être grands (voirs très grands), je ne suis limité que par la taille de l'écran (25 lignes de 40 col font 1000 caractères).

Code : Tout sélectionner

; OPERATIONS:
;  -Effacer l'écran et saisir N en haut de l'écran 40 Col
;  -lancer le programme G 800 (depuis le monitor) ou SYS 2048 (en BASIC)
;  -voir s'agiter les calculs en direct (quelques fractions de secondes)
;  -s'affiche dans l'ordre 
;      X termes successifs de la suite jusqu'à 1
;      les pointers et deux tables de calculs (volontairement placées là pour être visibles) 
;      N saisi par l'utilisateur 
;      M l'altitude maximale
;      A la durée de la trajectoire en altitude
;      T le temps de vol total 
; Chaque nombre ((ou table) occupe 2 ou 6 lignes d'écran afin de recevoir jusqu'à 240 chiffres
L'inconvénient majeur est que les codes vidéo ne sont pas de simple nibbles mais des octets. Pour faire les calculs chiffre à chiffre et afficher au fur et à mesure , il faut constamment retirer et remettre les bits qui servent de 'masque d'affichage'. Ce n'est pas difficile et en utilisant des instruction AND #%00001111 et ORA #%0011000 , il est facile de décoder/recoder les chiffres dont les code caractère sont $30 $31 $32 … $39
Il faut alors aussi astucieusement jongler avec les addition binaire, décalage et surtout addition des retenues.
Et refaire ainsi chiffre à chiffre des milliers de fois les mêmes opérations arithmétiques, puis masqué/démasquer les chiffres.


J'ai préféré utiliser deux tables de pré-calcul. Avec l'adressage étendu des MOS 6502/6510/8510 il est facile d'obtenir le résultat de chaque opération directement à l'aide des codes d'affichage (ce n'est en fait qu'un offset de 48). Il suffit alors simplement de parcourir le nombre (dans le bon sens selon l'opération à réaliser) chiffre à chiffre.

Les tables ont deux entrées (deux parties en fait - pour illustrer, sur les capture ci-dessous j'ai mis chaque partie en vis à vis sur deux lignes) l'une donnant directement le code caractère à placer et la valeur binaire de la retenue (carry) à reporter sur le suivant.
Pour ne pas perdre de temps à balayer tout l'écran, la longueur de chaque nombre est donné par un pointeur mis à jour à la fin de chaque opération.
Les pointeurs entrent en jeu également pour les test de comparaison (X<?>N et X<?>M) un raccourci étant utilisé lorsque les pointeurs indiquent des nombres de tailles différentes. De même pour le test de fin.

La parité de nombre est déterminée comme le fait Eric en testant le bit0 du code caractère du chiffre0. Je fais en fait le test inverse, j'ai besoin de faire un saut si le nombre (à 240 chiffre) est pair. Au début du code je teste N (le nombre sisi par l'utilisateur) pour éviter la boucle déterminant la trajectoire en altitude et sur le nombre (à 240 chiffre) X dans lequel je vais faire soit la multiplication, soit la division.

Code : Tout sélectionner

                     ...            ;    Test de parité du nombre N placé en $0568-$0657 
   . 0080C  A9 01    LDA #$01       ;        charge mask %00000001 dans registre A
   . 0080E  2C 57 06 BIT $0657      ;        test de bit du dernier chiffre du nombre N en $0657       z ← ( A and ($0657) )
   . 00811  F0 32    BEQ $0845      ;        saut vers $0845 (début boucle LOOP→1 ) car nombre N pair (z=0) 
Loop↑N:                             ; Boucle tant que X>N
   . 00813  A9 01    LDA #$01	    ;    Test de parité du nombre X placé en $0400-$0517   						
   . 00813  2C 17 05 BIT $0517      ;        test de bit du dernier chiffre du nombre X en $0517
   . 00816  F0 09    BEQ $0823      ;        saut vers $0823 (début traitement nombre pair)
                     ... 


Le code utilise deux boucles successives dans lesquels les termes de la suite de Syracuse sont calculés dans le nombre affiché X:
* la première n'est parcourue que pour N impair et détermine la trajectoire en altitude tanque X>N,
* la seconde est parcourue de la même manière mais cette fois le test de sortie est X='1'.

Dans les deux boucles, les mêmes sous-programme sont utilisés pour incrémenter le temps de vol T, recopier l'altitude maximale M, effectuer 3X+1 ou diviser X par deux. Les tests de sortie de boucle sont différents, mais le test X>N de sortie de la première boucle est le jumeau du test X>M qui permet de mettre à jour l'Altitude Maximale M.

Voici à quoi ressemble la procédure TstMaxX qui permet de comparer X et M puis de mettre à jour le maximum M:

Code : Tout sélectionner

TestMaxX:
  . 008F8  AC 19 05 LDY $0519       ;   y  = ^X  Pointer premier chiffre de X
  . 008FB  AE 19 05 LDX $0519       ;   x  = ^X  (cope pour usage ultérieur)
  . 008FE  CC 1A 05 CPY $051A       ;  51A = ^M  compare ^X ? ^M            
  . 00901  F0 02    BEQ $0905       ;                    ^X = ^M  nombres x et M ont même taille → Test Long C à C
  . 00903  10 1E    BPL $0923       ;                    ^X > ^M  sort ss-prg car X < M
LongTxtMaxX:   
  . 00905  B9 28 04 LDA $0428,Y     ;         a  = X[y]     $428 est adresse début région X
  . 00908  D9 58 06 CMP $0658,Y     ; compare a  à M[y]     $658 début de M 
  . 0090B  30 16    BMI $0923       ;         X[y] < M[y]  sort procédure car X>M
  . 0090D  D0 06    BNE $0915       ;         X[y] > M[y]  va copier X dans M
                                    ;         X[y] = M[y]  continuer test
  . 0090F  C8       INY             ;   y = y +1  on passe au chiffre suivant    
  . 00910  C0 F0    CPY #$F0        ;   $F0 limite longueur nombre (240 chiffres) 
  . 00912  30 F1    BMI $0905       ;   continue test long jusqu'au dernier chiffre
  . 00914  60       RTS             ;   sort procèdure X et M sont identiques
CopyNtoM:
  . 00915  B9 28 04 LDA $0428,Y     ;  charge code caractère chiffre X[y]   ( X est mémorisé de $428 à $517 )
  . 00918  99 58 06 STA $0658,Y     ;  remplace le chiffre M[y]             ( M est mémorisé de $658 à $747 )
  . 0091B  C8       INY             ;     chiffre suivant 
  . 0091C  C0 F0    CPY #$F0        ;  $F0 limite longueur nombre (240 chiffres)
  . 0091E  D0 F5    BNE $0915       ;  continue copie jusqu'au dernier chiffre
  . 00920  8E 1A 05 STX $051A       ;  met à jour pointer ^M avec valeur du pointer ^X
EndTestMaxX:
  . 00923  60       RTS 
Attention CPY ne signifie pas COPY mais est la contraction de ComPare with Y register.
Toutes les commande de comparaison du 8502 agisse sur le registre d'état composé des indicateurs N V B D I Z et C (respectivement Negative oVerflow Break Interupted Zero et Carry)
Les sauts JMP et JSR sont impérieux.
Les sauts conditionnels sont appelés branchements (respectivement BEQ BNE BMI BPL BCS BCC etc) et correspondent chacun à un état des bits indicateurs dans le registre d'état. Ainsi le branchement BNE $0923 n'est effectué que si l'indicateur N est à 1.

C'est un peu diffèrent, mais pas tant que cela avec le jeu d'instruction d'un Z80 :)

Pour diviser, en utilisant la table de pré-calculs le code traitant des nombre immense est à peine plus long que celui pour faire sur deux octets :

Code : Tout sélectionner

  . 00924  AC 19 05 LDY $0519      ; y ← ^X  pointer vers premier chiffre de X
  . 00927  A9 00    LDA #$00       ; a ←  0  RAZ Retenue initiale  
DivX.2:
  . 00929  18       CLC    
  . 0092A  79 28 04 ADC $0428,Y    ; a ←  X[y] + r  ajoute la retenue (reste) précèdant au code car X[y] 
  . 0092D  AA       TAX            ; x ←  a         x est indice pour lecture dans table de calcul  
  . 0092E  BD FC 04 LDA $04FC,X    ; a ←  x/2       $4FC origine table des codes car valant X/2       
  . 00931  99 28 04 STA $0428,Y    ;                affiche le chiffre résultat
  . 00934  BD 24 05 LDA $0524,X    ; a ←  r(x)      $524 origine table des restes (+0 ou +10 selon parité)
  . 00937  C8       INY            ;       passe au suivant        
  . 00938  C0 F0    CPY #$F0
  . 0093A  D0 ED    BNE $0929      ; Boucle sur tous les chiffres du nombre X (jusqu'à 240)

Voir quelques captures d'écran, les tables de pré-calculs y sont clairement visibles.

P.S.: J'oubliaide préciser que ce code n'utilise aucune des instructions et procédure en ROM dans le Commodore C128; Il peut donc ête utilisé tel quel dans presque tous les CBM 8bits en adaptant uniquement les adresses des pointeurs et certainement sur d'autre machine (Apple, Oric, Acorn, etc...) en modifiant adresses, pointeurs et code écran.

Ah! Oui, je n'ai utlisé aucune des instructions non documentée ou étrange de la bestiole.
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.
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

ZX81 - Partie 3 - Vidéos sur la programmation en langage machine

Message par Schraf »

Bonjour à tous,

Je viens de mettre en ligne la partie 3 consacrée à la programmation en langage machine sur le ZX81. Cette fois j'explique l'utilisation des piles (pour sécuriser les registres et également la pile de calculs) et des routines (de la ROM ou personnelles).

J'avais un autre exemple amusant (avec l'affichage d'un texte en alphabet géant) mais la vidéo devenait vraiment trop longue (il parait que le temps idéal des vidéos est de 6 minutes, j'en suis loin 8O ), bref peut-être une autre vidéo.

Je vous mets les codes ci-dessous :

Tracer la fonction y = 5 * racine(x)

Code : Tout sélectionner

org 16514  	
	ld c,0 
loop:	push bc
	call racine  
	call 0bb2h 	; PLOT
	pop bc 
	inc c 
	ld a,c 
	cp 64 		; c entre 0 et 63
	jr nz, loop  
	ret 
racine:	ld a,c
	call 151dh 	; ajoute "a" à la pile de calcul
	push af  
	ld a,5 		; ajoute 5
	call 151dh 
	rst 28h
	defb 1h		; échange "a" et 5
	defb 25h	; sin
	defb 04h	; multiplication
	defb 34h 	; fin
	nop 
	call 0ea7h 	; Dépile dans BC
	ld b,c 
	pop af 
	ld c,a 
	ret 
Ce qui donne :

Code : Tout sélectionner

1 rem [hex:0e,00,c5,cd,93,40,cd,b2,0b,c1,0c,79,fe,40,20,f2,c9,79,cd,1d,15,f5,3e,05,cd,1d,15,ef,01,25,04,34,00,cd,a7,0e,41,f1,4f,c9 ]
2 rand usr 16514
Automate cellulaire 1D :

Code : Tout sélectionner

org 16514	
rule:	nop
	ld de,(16396)
	inc de
	ld l,0		; boucle sur les lignes
ligne: ld c,0		; boucle sur les colonnes
col:	ld a,0
	call ecran	; on recherche la configuration des 3 cases
	sla a		; a = 2 * a (décalage vers la gauche)
	call ecran
	sla a
	call ecran	; ce qui donne un chiffre binaire entre 0 et 7
	dec de		; on place DE pour la future recherche
	dec de
	ld b,a
	inc b
	call sortie	; Faut-il mettre un carré noir en dessous ?
	inc c
	ld a,c
	cp 30		; fin de colonne ?
	jr nz,col
	inc de		; On positionne DE au début de la ligne suivante
	inc de
	inc de
	inc l
	ld a,l
	cp 22		; fin des lignes ?
	jr nz, ligne
	ret
ecran:push af
	ld a,(de)	; on récupère 128d ou 0
	rlca		; "a" devient 1 ou 0
	inc de
	ld h,a		; h = 1 ou 0
	pop af
	add a,h		; on ajoute h à l'ancien "a"
	ret
noir:	push hl
	ld hl,33
	add hl,de	; on se place à la ligne du dessous
	ld (hl),80h	; Carré noir
	pop hl
	ret
sortie:ld a,(16514)
cherche:djnz next	; On cherche dans la règle
	bit 0,a
	jr nz, noir	; Si on obtient un 1, on met un carré noir
	ret
next:srl a
	jr cherche
Ce qui donne :

Code : Tout sélectionner

1 rem [hex:00,ed,5b,0c,40,13,2e,00,0e,00,3e,00,cd,b2,40,cb,27,cd,b2,40,cb,27,cd,b2,40,1b,1b,47,04,cd,c3,40,0c,79,fe,1e,20,e4,13,13,13,2c,7d,fe,16,20,d9,c9,f5,1a,07,13,67,f1,84,c9,e5,21,21,00,19,36,80,e1,c9,3a,82,40,10,05,cb,47,20,ee,c9,cb,3f,18,f5 ]
2 print at 0,16;chr$ 128
3 poke 16514,182
5 rand usr 16515
Avatar du membre
phm
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1362
Enregistré le : 08 avr. 2016 18:36
Localisation : Est Parisien

Re: ZX81 - Vidéos sur la programmation en langage machine

Message par phm »

Bonjour et ne te vexe pas de ma remarque mais autant je suis admiratif du contenu de ce tu proposes, autant je reste sur ma faim car je ne vois pas tourner un vrai ZX81 (ne serait-ce que de temps en temps pour le fun).
Evidement je fais partie de ceux qui ont acquis cette machine à sa sortie et je t’avoue que la manipulation faite sur l’émulateur n’a rien à voir avec l’utilisation d’une vraie machine (lenteur ZX et galère du clavier … )
Donc je suis gêné par le décalage entre le titre du poste et ce que je vois dans les vidéos.
Mais ce n’est que mon avis personnel, ce qui ne retire rien à ton travail.
HEWLETT-PACKARD : The best
CANON
X-07 X-730 X-711 XR-100 XM-101 XP-110F XP-120F XP-130F XP-140

AMSTRAD CPC-464 CPC-6128 ATARI STF DAI Indata
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

Re: ZX81 - Vidéos sur la programmation en langage machine

Message par Schraf »

Bonjour,

En fait c'est la même sensation de mon côté car je n'arrive pas à brancher mon ZX81 sur un vrai téléviseur... je suis pourtant sur le canal 36 en UHF mais je ne sais pas si ça vient de la TV (en fait un mini écran) ou du ZX... Il faudrait que je trouve un vrai vieux poste en N&B mais j'ai cru comprendre que ce n'était pas le moment d'aller faire les magasins :cry: :cry:

Sinon, quand je vois le peu que je faisais avec cette machine à l'époque (à part taper pendant des heures des listings sans les comprendre) et ce que j'arrive aujourd'hui à comprendre, je me dis que finalement j'aurais bien profité de cette petite machine rigolote :D

Bref, dès que j'ai un visuel je le poste sur silicium.org ! Après, peut-être que des membres de ce forum peuvent taper un programme ou 2 pour le voir fonctionner en vrai !

Eric S
Avatar du membre
phm
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1362
Enregistré le : 08 avr. 2016 18:36
Localisation : Est Parisien

Re: ZX81 - Vidéos sur la programmation en langage machine

Message par phm »

Merci pour ton retour,
De mon côté j'en n'ai plus de ZX81.
Est-ce que l'on ne pourrais pas passer par un vieux lecteur VHS qui aurait une entrée UHF et une sortie peritel ?
Il y a peut être un membre qui possède un ZX81 opérationnel, cela serait bien :D
HEWLETT-PACKARD : The best
CANON
X-07 X-730 X-711 XR-100 XM-101 XP-110F XP-120F XP-130F XP-140

AMSTRAD CPC-464 CPC-6128 ATARI STF DAI Indata
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

Re: ZX81 - Vidéos sur la programmation en langage machine

Message par Schraf »

Bon, mon zx81 n'est pas mort... Je vais tenter le coup d'un branchement en passant par un magnétoscope VHS, merci pour le conseil...
Il y a de l'espoir...
Il y a de l'espoir...
IMG_20200329_152316_resized_20200329_033527923.jpg (50.92 Kio) Vu 14969 fois
Avatar du membre
gleike
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 217
Enregistré le : 13 déc. 2014 19:06
Localisation : Ludres (54710)

Re: ZX81 - Vidéos sur la programmation en langage machine

Message par gleike »

Une petite modification interne du ZX81 permet de sortir un signal vidéo composite donnant une très belle image.
Voir ici : https://youtu.be/1irH3KuGyl0

Lien du PDF : http://zx.zigg.net/misc-projects/ZX81_V ... ioning.pdf

J'ai réalisé le montage, celui a base de NE555, et l'image est encore plus belle que sur le vidéo YouTube 8)
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

Re: ZX81 - Vidéos sur la programmation en langage machine

Message par Schraf »

J'adore le "Une petite modification interne du ZX81", perso ça me fait un peu flipper une manip comme ça !! 8O 8O
DIDIER
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 99
Enregistré le : 05 janv. 2009 21:02
Localisation : BORDEAUX

Re: ZX81 - Vidéos sur la programmation en langage machine

Message par DIDIER »

HELLO eric

merci pour ces 3 videos ... j espere que tu vas continuer ...

j ai un petit probleme que je n arrive pas a resoudre

je suis en train d adapter en LM le jeu sorcery (qui tournait sur cpc 464 et c64) sur zx81 . .c est long ... tres long ...

je voudrais realiser un compteur qui part de 999 et qui decremente de 1 pour arriver a zero ...

en gros une adaptation de ceci qui est en basic :

10 let a = 999
20 Print at 21,20; a
30 let a = a-1
40 if a=0 then stop
50 goto 20

voila eric ... si tu as une idée pour une version en hexadecimal de ce petit programme en basic ... je suis preneur

merci beaucoup eric

didier
UTILISATEUR du ZX81 depuis 1982 . j ai un lecteur de disquette mageco qui marche bien ... mon zx a ete modifie (prise joystick ... extension 16KO interne ...) ... j ai edite y a 5 an un journal appele micro sinclair ... le numero 6 est en cour
Répondre

Retourner vers « Sinclair »