Question BASIC MO5

Cette catégorie traite de développements récents pour nos vieilles machines, applications, jeux ou démos... Amis programmeurs, c'est ici que vous pourrez enfin devenir célèbres!

Modérateurs : Papy.G, fneck, Carl

acdan
Messages : 56
Inscription : 14 avr. 2022 12:39

Question BASIC MO5

Message par acdan »

Bonsoir,

A quoi correspond les POKE&.....,existe t'il une liste ? Merci de votre aide.
Daniel
Messages : 17286
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Question BASIC MO5

Message par Daniel »

L'instruction POKE A,O permet d'écrire l'octet O à l'adresse A. Cette adresse peut être un octet en RAM, ou un registre périphérique.
On peut utiliser le POKE en BASIC pour charger un programme en langage machine ou modifier des données en RAM, ou pour communiquer avec le matériel. L'instruction complémentaire est O=PEEK(A), permettant de lire l'octet O à l'adresse A.

Une liste de POKE n'a pas de sens. Il y a 256 valeurs différentes pour O et 65536 pour A, soit 16777216 POKEs possibles.
Daniel
L'obstacle augmente mon ardeur.
acdan
Messages : 56
Inscription : 14 avr. 2022 12:39

Re: Question BASIC MO5

Message par acdan »

Merci pour ta réponse
__sam__
Messages : 7909
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Question BASIC MO5

Message par __sam__ »

En basic pur on a normalement pas besoin de faire des peek() et poke. S'il y en a c'est très probablement qu'il y a un programme en langage machine avec lequel on veut interagir, et bien souvent dans les listing basic de la grande époque (cf Hebdogiciel), ces codes en langage machine sont entrés en basic via des poke.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
acdan
Messages : 56
Inscription : 14 avr. 2022 12:39

Re: Question BASIC MO5

Message par acdan »

Sur le C64, j'utilise souvent poke alors que sur MO5 (je débute) pas du tout, donc quand je suis tombé sur un document "bidouille du MO5" avec des poke&**** j'ai été surpris, car dans le manuel ce n'est pas vraiment traité, je veux dire pas de poke pour changer le fond d'écran etc..
__sam__
Messages : 7909
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Question BASIC MO5

Message par __sam__ »

Non contrairement au C64 le fond d'écran ou la couleur des caractères n'est pas géré par des poke et des chiffres magiques, mais ils sont gérés par une routine en ROM qui est elle-même associée mappée à des instructions de haut niveau en basic (SCREEN et COLOR pour ce cas là par exemple).
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Daniel
Messages : 17286
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Question BASIC MO5

Message par Daniel »

Le manuel du MO5 traite essentiellement des commandes BASIC. Il y a des commandes pour changer de couleur, positionner le curseur, définir la taille des caractères, limiter la fenêtre active de l'écran, paramétrer la vitesse du scroll vertical, etc. Les POKEs ne sont pas nécessaires.

Les mêmes opérations peuvent être réalisées en langage machine en modifiant des adresses en mémoire ou appelant des routines en ROM. Ce n'est pas décrit dans le manuel BASIC, mais dans la documentation technique. Ces procédés sont utilisables en langage machine, mais aussi en BASIC à l'aide de POKE et d'EXEC. L'intérêt est très discutable quand il existe une commande pour faire la même chose, car un listing avec des POKE est plus difficile à comprendre. De plus les commandes BASIC sont identiques d'une machine à l'autre, alors que les POKE sont différents.

POKE est surtout utile pour charger en RAM un petit programme en langage machine après l'avoir défini en DATA dans le programme BASIC, et éventuellement pour lui passer des paramètres avant de l'appeler. Mais il ne faut pas en abuser. Si on utilise beaucoup de routines en langage machine autant écrire tout le programme en assembleur, c'est plus naturel.
Daniel
L'obstacle augmente mon ardeur.
Ythunder
Messages : 928
Inscription : 21 août 2019 10:12

Re: Question BASIC MO5

Message par Ythunder »

Je me permet une interaction justement avec le C64 : pourquoi le C64 usait-il il me semble, à contrario fortement des pokes, alors que des instructions BASIC devait également exister ?
Neotenien
Messages : 354
Inscription : 23 oct. 2020 19:15
Localisation : Le Mans
Contact :

Re: Question BASIC MO5

Message par Neotenien »

__sam__ a écrit : 16 mai 2022 22:12 Non contrairement au C64 le fond d'écran ou la couleur des caractères n'est pas géré par des poke et des chiffres magiques, mais ils sont gérés par une routine en ROM qui est elle-même associée mappée à des instructions de haut niveau en basic (SCREEN et COLOR pour ce cas là par exemple).
Alors j'apporte un complément d'information...

Même si le Basic des Thomson permet effectivement de définir la couleur de forme et de fond d'un caractère (qi est en 8x8 pxl), cette fonction ne permet pasn cependant de définir les couple de couleur à chaque GPL (1 GPL = ensemble de 8 pxl) des caractères. Et pour cela, les Peek et Poke sont nécessaire... Mais vu que, comparé à l'assembleur, les Peek/Poke sont en moyenne 100 fois plus lent (j'avais écrit un petit module permettant de faire descentre un caractère pxl par pxl sur l'écran, en Basic et assembleur, et l'assmebleur mettait largement moins d'une seconde alors que le basic, une cen,taine de s)

En fait, le mode TO7 des Thomson gère les écran avec 2 RAM : la RAM A (tracé) et la RAM B (couleur). Et don un print "A"utilise un e série de 8 octet de traçage

Code : Tout sélectionner

00000000
00011000
00100100
01000010
01111110
01000010
01000010
00000000
Ca c'est pour la RAM A (8 kO) dite tracée.
La RAM B (dite couleur) définit pour chaque ligne 2 couleurs (de 0 à 15). La fonction Color donne les mêmes couples de couleurs pour l'ensemble des 8 GPL. Ici donc il serait possible d'utiliser les Poke pour avoir des lettres avec plusieurs couleur (on peut ainsi faire un dégradé sur le tracé ou sur le fond par exemple)

Il y a eu la Mégadémo d'HCL qui avait utilisé cette capacité pour un des extrait (avec un super rendu ma foi!!)
Neotenien
Messages : 354
Inscription : 23 oct. 2020 19:15
Localisation : Le Mans
Contact :

Re: Question BASIC MO5

Message par Neotenien »

Ythunder a écrit : 16 mai 2022 22:25 Je me permet une interaction justement avec le C64 : pourquoi le C64 usait-il il me semble, à contrario fortement des pokes, alors que des instructions BASIC devait également exister ?
Si les pokes en C64 sont pour utiliser des routines système assembleur, c'est bien mais effectivement ça pourrait être fait en Basic. Mais le Basic a le désavantage d'être interprété et quand vous utiliser des encchainement d'instruction en Basic, la vitesse de traitement est au moins 10 fois plus lente (à mi,imùa, ça êut aller jusqu'àa plus de 200 fois, j'ai fait des tests sur Thomson avec différentes orutines)..

Cependant, je ne saurait trop vous conseiller d'utiliser le Kyan Pascal, un compilateur Pascal (un des meilleurs langages structirés au monde) qui a été développé pour C64, Apple II et Atari (entre autres)et que j'aurais bien aimé voir adapté sur Thomson TO8 (plutôt que l'UCSD Pascal ou Pacal Base qui est incomplet malheureusement).

Avec le Kyan Pascal, vous aurez de très bonne habitudes de programmation et vous pourrez compiler les programmes pour en faire des logiciels à une vitesse proche du langage machine.

Le Basic des thomson reprend pas mal des bases du Pascal (ou est ce l'inverse ?)... Des instruction comme locate, color, ... les nombreuses instruction de "console écran" du Basic on les retrouve éggalement en Pascal. Mais le Pascal est un langage structuré, ce que le basic n'est pas (du moins pas les Basic à la sauce MicroSoft, le GFA Basic des Atari ST lui est structuré.
Bernouilli92
Messages : 1245
Inscription : 24 déc. 2021 09:46
Localisation : Région parisienne

Re: Question BASIC MO5

Message par Bernouilli92 »

Ythunder a écrit : 16 mai 2022 22:25 Je me permet une interaction justement avec le C64 : pourquoi le C64 usait-il il me semble, à contrario fortement des pokes, alors que des instructions BASIC devait également exister ?
Le basic du c64 n'a pas du tout été adapté aux possibilités du c64. Il a du être repris tel quel du basic des cbm.
Il n'y aucune instruction Basic pour gérer le graphisme, les sprites ou le son. Tout cela ne peux être fait qu'avec des pokes.

Édit: Apparement le basic 4.0 des pet contient des instructions évoluées pour les fichiers sur disquettes. Il est possible qu'ils soient parti du basic 4.0 des pet et qu'il ont supprimé des instructions pour aboutir à la version 2.0 du c64.
Dernière modification par Bernouilli92 le 17 mai 2022 01:09, modifié 1 fois.
__sam__
Messages : 7909
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Question BASIC MO5

Message par __sam__ »

Oui le basic C64 est assez limité (peu de mots clefs). Sur cette machine les peek et pokes sont indispensables pour accéder aux fonctions du matériel.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
acdan
Messages : 56
Inscription : 14 avr. 2022 12:39

Re: Question BASIC MO5

Message par acdan »

Le basic du MO5 est plus "simple" et agréable par rapport au C64, par contre niveau sprite pour les créer , la "grille" est vraiment plus petite et donc je trouve plus limité , d'ailleurs comment faire un sprite multicolore sur MO5? la technique la plus simple.
__sam__
Messages : 7909
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Question BASIC MO5

Message par __sam__ »

Il n'y a pas de sprite matériel sur MO5. Il faut écrire en RAM vidéo directement. En basic c'est extrêmement lent. Il faut passer par un moteur de sprites en langage machine pour avoir un début de truc utile. Un contournement possible est la redéfinition d'un caractère utilisateur en basic et d'utiliser les routines d'affichage de caractères de 8x8 pixels. Ca va un peu plus vite, mais c'est pas fluide (pas de positionnement au pixel près).

Qu'appelles-tu multicolor ? Sur thomson "de base" (mode 320x200 16 couleurs) il y a des contraintes de proximités. Il n'y a que deux couleurs possibles tous les 8 pixels horizontaux. Donc tu ne peux pas trop faire varier horizontalement les couleurs. Par contre verticalement il n'y a pas de contraintes et tu peux avoir des couleurs différentes d'une ligne sur l'autre. La routine de sprite et langage machine doit alors sauvegarder et écrire dans les ram vidéo FORME et FOND (aussi appelée COULEUR parfois). C'est plus complexe que de travailler sur la ram vidéo FORME (sprites monochromes), donc plus lent. En revanche si on utilise des caractères redéfinis, il n'y a que deux couleurs par caractères, le sprite sera alors essentiellement monochrome (par bloc de 8x8 pixels).

A noter: avec le basic128 (et suivants) présent sur les MO6/TO8/9/9+, les instructions GET et PUT permettent de copier des zones écran dans un tableau basic et de le recoller l'image où l'on veut à l'écran (en coordonnées caractères). Combiné à l'affichage graphique XOR et le mode 160x200 (qui n'a pas de contraintes de proximité), on peut alors avoir des sprites avec plein de couleurs en basic pur. Ca reste quand même assez lent.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
nouvelhermes
Messages : 400
Inscription : 22 juil. 2020 20:56

Re: Question BASIC MO5

Message par nouvelhermes »

Pour les "sprites", le mieux est d'utiliser Animatix.

Je crois savoir que Mandragore avait été désassemblé, je ne sais qui l'a fait, mais ce jeu utilise une émulation des sprites du C64, les routines sont normalement dans le jeu, et il utilise les sprites multicolores du C64 (il s'agit d'une adaptation du jeu pondu sur le C64)

Une liste de POKE sans autre explication n'a peut être pas d'intérêt, par contre ce serait intéressant d'avoir une liste des principales adresses (&HA7C0 est la plus connue, mais il existe un paquet de paramètres programmables dans le moniteur (plage d'adresse &H2000-20FF) et surtout le BASIC (plage d'adrese &H2100-&H21FF) dont il est difficile de récupérer des informations).

Un exemple parmi d'autres, il est impossible en BASIC d'avoir une redéfinition des 128 premiers caractères (comme dans MANDRAGORE), pour ce faire, il faut réserver une plage mémoire avec clear et POKER dans les adresses &H2073-&H2074 l'adresse du début de la table.
Répondre