BasiCode sur Thomson ?

C'est le lieu des discussions diverses et variées, mais toujours en rapport avec le thème général du forum et dans l'esprit de celui-ci. Contient des rubriques électroniques.

Modérateurs : Papy.G, fneck, Carl

__sam__
Messages : 7989
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: BasiCode sur Thomson ?

Message par __sam__ »

I think I have found an issue:
Capture.PNG
Capture.PNG (33.69 Kio) Consulté 1166 fois
The PLAY command doesn't support white space in strings. For course there is the one in "T5 A0", but the MID$() formula also introduces spaces that should be trimmed. Maybe something like

Code : Tout sélectionner

MIDS("  DO DO#RE RE#MI FA FA#SO SO#LA LA#SI",3*OP,3+(OP=1 OR OP=3 OR OP=5 OR OP=6 OR OP=8 OR OP=10))
can work. Note that the "+(OP=...)" expression might be slow in basic. Using ((1386 AND (2^OP))<>0)) instead might be faster (note: 1386=2^1+2^3+2^5+2^6+2^8+2^10).
Is it a problem that there are codes 0A (hex) to separate the lines? How can I change them to 0D 0A? Would it be better to attach text files instead of using these code boxes?
\n (hex $0A) as line separator seem pretty well handled by DCMOTO, but if you prefer having proper line endings, you can attach ZIP archive with TXT file having DOS format end-of-lines (\r\n: $0C0A).
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
Avatar de l’utilisateur
ThomasR
Messages : 39
Inscription : 16 janv. 2019 09:02

Re: BasiCode sur Thomson ?

Message par ThomasR »

Thanks for the quick answer!

Which model did You emulate? I used T07 and M05 and it works. I have no idea how to solve the conversion from BasiCode variables to Basic 1.0 variables because a note can have two or three characters: DO or MI# ... The M05 manual also says that spaces are allowed.

In my emulation the computer can't read the file if there are 0A separators.

These txt files inside a zip file are a very good suggestion, thanks! Maybe I change it this week.

>> Peut-être quelque chose comme ... Utiliser ((1386 AND (2^OP))<>0)) pourrait être plus rapide à la place (remarque : 1386=2^1+2^3+2^5+2^6+2^8+2^10 ). <<

I will check this tomorrow.
__sam__
Messages : 7989
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: BasiCode sur Thomson ?

Message par __sam__ »

I did test on a TO7,TO8,TO9: all fail to PLAY"DO RE MI".
Capture.PNG
Capture.PNG (26.2 Kio) Consulté 1150 fois
It seem to only work on MO5, MO6 and PC128 (BASIC1).
Capture.PNG
Capture.PNG (20.84 Kio) Consulté 1139 fois
These is one of the subtle differences between the MO and the TO Basics (others include DEFUSR missing on MO and few others).
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
Avatar de l’utilisateur
ThomasR
Messages : 39
Inscription : 16 janv. 2019 09:02

Re: BasiCode sur Thomson ?

Message par ThomasR »

Hello Samuel,

I followed Your suggestion and tested it on an emulated T08 and T09.
It works fine.
weihnach.png
weihnach.png (36.58 Kio) Consulté 1110 fois
These are some German Christmas songs.
WEIHNACH.zip
contains the program in text form with line separators 0D 0A
(3.35 Kio) Téléchargé 14 fois
EDIT: corrected version here: http://forum.system-cfg.com/viewtopic.p ... 17#p243417
Dernière modification par ThomasR le 16 févr. 2024 12:39, modifié 2 fois.
kirion
Messages : 346
Inscription : 22 sept. 2022 03:29

Re: BasiCode sur Thomson ?

Message par kirion »

Quelqu'un pourrait m'expliquer ce que Thomas a publié ici ? Ca n'est pas du BASICODE puisque c'est déjà un programme BASIC 1.0.

Il publie ses créations en BASICODE adaptées pour le BASIC 1.0, c'est ca ?
Avatar de l’utilisateur
ThomasR
Messages : 39
Inscription : 16 janv. 2019 09:02

Re: BasiCode sur Thomson ?

Message par ThomasR »

He publishes his creations in BASICODE adapted for BASIC 1.0, right?
Yes, this is correct. But: my creation is the bascoder, the programs aren't. :wink:

I attach the complete programs to make it more covienent for you.

You can take the lines 0 ... 999 and add a program (text with line numbers from 1000 upwards) that you found in the web - for instance here:https://github.com/robhagemans/basicode.

I hope it will run - if not, tell it here and I will try to improve the bascoder.

Enjoy it!
Dernière modification par ThomasR le 16 févr. 2024 01:40, modifié 1 fois.
__sam__
Messages : 7989
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: BasiCode sur Thomson ?

Message par __sam__ »

kirion a écrit : 15 févr. 2024 18:27 Ca n'est pas du BASICODE puisque c'est déjà un programme BASIC 1.0.
Non, c'est bel et bien du BasiCode au dessus de la ligne 1000. En dessous c'est le noyau "BASCODER" propre à chaque couple (machine,basic). Il nous publie les programmes BASICODE avec le BASCODER qu'il a écrit spécifiquement pour le BASIC1 sur Thomson. Ca simplifie leur chargement/exécution, sinon il faudrait charger le BASCODER avec un LOAD dans le basic, puis appeler la commande MERGE pour ajouter le programme BASICODE à proprement parler. Bref il nous fournit des programmes BASICODE prêts à l'emploi.

Pour rappel, le BasiCode est un sous ensemble du basic ultra portable. Il utilise un jeu de primitives communes à tous les basics sur toutes les machines de l'époque (GOTO, GOSUB, FOR/NEXT, IF, etc). Les opérations de haut niveau (ex: déplacer le curseur, changer de couleur, tracer une ligne, jouer de la musique, etc) sont faites avec un jeu d'une cinquantaines de routines (dans les lignes <= 1000) aux points d'entrée standardisés qui implémentent au mieux les fonctions de "haut niveau" en utilisant les spécificités de la machine et de son basic.

Un programme BasiCode débute donc en 1000 et est le même sur toutes les machines. Avant cette ligne on trouve l'implémentation spécifique au basic des opérations de haut niveau (le BASCODER). Cette partie là varie de machine en machine et de basic en basic. Ici, les deux sont fusionnés pour nous faciliter la vie; et comme on ne voit sur le forum que les premières lignes, on y trouve le BASCODER en BASIC1 Thomson. Plus loin, après la ligne 1000, on trouve le source BASICODE indépendant de la machine.

Plus d'info (en anglais) là: https://en.wikipedia.org/wiki/BASICODE#BASICODE_2
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
Zebulon
Messages : 2806
Inscription : 02 nov. 2020 14:03

Re: BasiCode sur Thomson ?

Message par Zebulon »

Merci Sam pour ces explications c'est très clair pour moi. Juste avant l'intervention de Kirion j'avais repris la lecture du fil depuis le début et notamment les articles scannés où il est expliqué qu'un volet important du BasiCode consiste en une méthode d'enregistrement et de lecture des programmes sur cassette qui est unifiée avec des logiciels spécifiques à chaque machine pour écrire/lire dans ce format et éventuellement convertir ensuite au format interne de la machine.

Si je comprends bien, de nos jours ce volet est mis de côté et les programmes sont échangés/distribués comme des fichiers textes.
__sam__
Messages : 7989
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: BasiCode sur Thomson ?

Message par __sam__ »

De toute façon il n'y a plus de diffusion "par les airs" de programmes BasiCode de nos jours, et implémenter ce volet sur thomson n'aurait pas été facile.

Après il y aurait p'tet un défit à faire: connecter nos vieilles bécanes au réseau LoRa pour diffuser du BasiCode sur toute la france...
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
__sam__
Messages : 7989
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: BasiCode sur Thomson ?

Message par __sam__ »

ThomasR a écrit : 15 févr. 2024 14:34 These are some German Christmas songs.
I tried "O Tannenbaum" ("Mon beau sapin" en français), but I get this error:
Capture.PNG
Capture.PNG (37.52 Kio) Consulté 1005 fois
It seem that there is a space character at the end of the duration OD$ (see snapshot). So this song fails on any TO machine :(
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
Avatar de l’utilisateur
ThomasR
Messages : 39
Inscription : 16 janv. 2019 09:02

Re: BasiCode sur Thomson ?

Message par ThomasR »

__sam__ a écrit : 15 févr. 2024 23:20Il semble qu'il y ait un espace à la fin de la durée OD$ (voir instantané).
Hm... Try it without that >>+" "<< at line 401. I will check it, too.
mistake.jpg
mistake.jpg (71.61 Kio) Consulté 989 fois
__sam__
Messages : 7989
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: BasiCode sur Thomson ?

Message par __sam__ »

This version (without the final ",2" in MID$ and without the +" ") seem to work:

Code : Tout sélectionner

401 OD$="L"+MID$(STR$(1+INT(20*SD*3/8)),2):OP=SP MOD 12+1
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
Avatar de l’utilisateur
ThomasR
Messages : 39
Inscription : 16 janv. 2019 09:02

Re: BasiCode sur Thomson ?

Message par ThomasR »

Version 0.96

I made some changes and gave a new version number.
WEIHNACH.zip
(3.4 Kio) Téléchargé 6 fois

Code : Tout sélectionner

.
.
.

4 LOCATE 20,6:PRINT "v 0.96":ATTRB 0,0:LOCATE 3,14:PRINT"en.em.wikipedia.org/wiki/BASICODE":PRINT

.
.
.

20 CLEAR A:HO=39:VE=24:HG=319:VG=191:SV=7:OPEN "O",#9,"LPRT:(120)":PLAY"O4T70L24A0"

.
.
.

400 OO=(INT(SP/12))-2:OO$="O"+RIGHT$(STR$(OO),1)
401 OD$="L"+MID$((STR$(1+INT(SD*3/8))),2,2):OP=SP MOD 12+1
402 IF SP=0 THEN PLAY "P":GOTO 405
403 OP$=MID$(" DOREREMIMIFASOSOLALASISI",2*OP,2):IF (1354 AND(2^(OP-1)))<>0 THEN OP$=OP$+"b"
404 PLAY OO$,OD$,OP$
405 RETURN
450 OSD=SD*.35
451 OSD=OSD-1
452 PLAY"P":GOSUB 200:IF IN=0 THEN 453 ELSE IF SD<>0 THEN 454
453 IF OSD>0 THEN 451 ELSE 457
454 SD=INT(OSD/.5)
455 RETURN
457 SD=0:GOTO 455

.
.
.
I don't know if the emulation on my machine has the same speed that the original hardware has.

To let the music play more slow or more fast change ... T70... at line 20

To play the tunes one octave higher or lower change ... -2 ... at line 400.

GOSUB 450 is to make a break. SD=50:GOSUB 450 should show the returning of the curser after five seconds. You can finish the break by pressing a key. Then SD shows the time (in 1/10 sec) that was not used.

If You want a break that is not stoppable then play a tune with SP=0 (sound pitch).

In line 401 the SD (sound duration) is transfered to the OD$ parameter of the PLAY command. SD has a range from 1 to 255 - OD$ from 1 to 96.
TV-TUNES.png
TV-TUNES.png (48.51 Kio) Consulté 916 fois
TV-TUNES.zip
(5.11 Kio) Téléchargé 6 fois
This program is written by Walther van den Elshout who loved to write music programs. He also programmed the music in FREUNDSF (the 3rd in this post http://forum.system-cfg.com/viewtopic.p ... 22#p242522 ). The output of characters in graphic mode is not perfect because they can be placed in the normal 8 x 8 grid only.

If a program doesn't run here You can try this other way: Take the lines from 1000 upwards and paste them into this online bascoder (under "Listing") http://robhagemans.github.io/basicode/

EDIT 29/2/2024: programs with corrected bascoder version 0.97
Dernière modification par ThomasR le 01 mars 2024 17:14, modifié 4 fois.
kirion
Messages : 346
Inscription : 22 sept. 2022 03:29

Re: BasiCode sur Thomson ?

Message par kirion »

__sam__ a écrit : 15 févr. 2024 20:45 Non, c'est bel et bien du BasiCode au dessus de la ligne 1000. En dessous c'est le noyau "BASCODER" propre à chaque couple
Merci sam, en effet je n'avais pas du tout compris ça. J'avais cru qu'il transcrivait simplement en BASIC 1.0
Par contre y aurait il un avantage à convertir les instructions BASICODE en LM 6809 en faisant un ajout dans le BASIC 1.0 (chargement par LOADM en début de programme qui remplacerait les 1000 premières lignes) ?
__sam__
Messages : 7989
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: BasiCode sur Thomson ?

Message par __sam__ »

Par contre y aurait il un avantage à convertir les instructions BASICODE en LM 6809
Je ne connais pas assez les fonctions du BASCODER, mais j'ai pas l'impression qu'il faille du LM car le basic Thomson est suffisamment avancé pour avoir des instructions de "haut-niveau" : on est loin du C64 où il faut poker pour changer les couleurs à l'écran ou jouer de la musique. Note: il manque l'affichage de chaines au pixel près en mode graphique en basic Thomson. Dans tous les cas il faudrait garder les points d'entrée normalisés (numéros de lignes) et y mettre un EXEC vers le point d'entrée ASM. On aurait donc toujours quelque chose entre les lignes 0 et 1000, sans compter le surcout en mémoire des routines en LM.

Evidement, certaines instruction du BASICODER faites par Thomas seraient plus rapide en ASM, mais je pense qu'il y aurait déjà moyen d'en coder certaines plus efficacement en BASIC1 simplement en utilisant des tableaux précalculés. Par exemple la lecture d'un caractère au clavier

Code : Tout sélectionner

200 IN$=INKEY$:GOTO 214
210 IN$=INKEY$
212 IF LEN(IN$)=0 THEN 210
214 IN=ASC(IN$+CHR$(0)):IN=IN-20*(IN=11)-20*(IN=8)-20*(IN=10)-20*(IN=9)-98*(IN=29):RETURN
pourrait être réécrite comme suit:

Code : Tout sélectionner

200 IN$=INKEY$:GOTO 212
210 IN$=INPUT$(1)
212 IF DECODE%(1)=0 THEN DIM DECODE%(127):FOR IN=0 TO 127:DECODE%(IN)=IN-20*(IN=11)-20*(IN=8)-20*(IN=10)-20*(IN=9)-98*(IN=29):NEXT:REM <- PRECALCUL TABLE DECODAGE
214 IN=DECODE%(ASC(IN$+CHR$(0))):RETURN
Mais est-ce que ca changerait beaucoup les performances du code ? C'est une saisie au clavier, pas besoin d'aller super vite. Sans compter que la table de décodage mange 254 octets précieux alors qu'à la base toutes les variables du Basic Thomson (et donc dans cette incarnation du BasiCode) sont des nombres flottants sur 4 octets donc intrinsèquement lentes à traiter.

Ca serait d'ailleurs un truc à regarder de plus près: est-ce que le BasiCode impose aux variables d'être des réels ou peut-il marcher avec certaines variables (les O<quelque-chose> ?) en entiers 16bits auquel cas il serait plus rapide pour certaines opérations n'utilisant que ces variables O<quelque-chose>. Ou alors l'inverse: toute les variables sont des entiers 16bis, et seules les H<quelque-chose> et V<quelque-chose> seraient des nombres flottants (utilisées pour les coordonnées écran entre 0.0 et 1.0). Je n'arrive pas trop à savoir. Peut-être que Thomas (s'il arrive à traduire ce que j'écris) pourrait nous éclairer ?

[EDIT] Cette spec indique que les valeurs numériques sont des nombres flottants simple précision. Bon c'est fichu pour accélérer les calculs avec des entier 16bits, et pire: leur traitement en ASM est super super pénible et pas tellement plus rapide que le basic au final.

En fin de compte peut-être que seule la lecture des données en binaire sur casette devrait se faire nécessairement en ASM (le basic étant trop lent), mais uniquement sur MO dont le magnéto est plus versatile que celui du TO lequel est incapable de lire les signaux carrés décrit dans le standard.
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
Répondre