Un compilateur Basic pour VG-5000

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

Daniel
Messages : 17288
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Un compilateur Basic pour VG-5000

Message par Daniel »

L'illusion de points est donnée par une police spéciale de l'EF9345. Bizarrement tous les points ne sont pas carrés, il y a deux fois plus de points rectangulaires que de points carrés. Il est impossible de mettre trois points identiques dans la hauteur d'un caractère, car 10 n'est pas multiple de trois, alors il a fallu tricher. Le résultat est horrible.

police-ef9345.png
police-ef9345.png (25.89 Kio) Consulté 2380 fois
Daniel
L'obstacle augmente mon ardeur.
Neotenien
Messages : 354
Inscription : 23 oct. 2020 19:15
Localisation : Le Mans
Contact :

Re: Un compilateur Basic pour VG-5000

Message par Neotenien »

__sam__ a écrit : 08 juil. 2022 09:31 Le basic est plus universel. Regarder aussi du côté de ugbasic.
Bonjour Samuel

Je vois cette partie de code ugbasic

Code : Tout sélectionner

PROCEDURE escape
 FOR prison = 1 TO 1000000000
  IF prison == 10 THEN POP PROC 
  DEBUG "I AM ABANDONED."
 NEXT
END PROC
Et je dis oui à ce basic là, du moment qu'on puisse avoir effectivement des procédures et fonctions, qu'il ne soit pas qu'interpété et que ces foutus numéro de lignes disapaissent.

C'est ça que j'attend 'un langage de programmation, mais ya-y-il aussi le typage de variables comme en pascal afin d'avoir un controle de la limite de variables ? C'est une des force de Pascal qui permet de compiler très rapidement notamment (en prédéclarant les variables obligatoirement.*

Je vois qu'il existe déjà une version pour Thomson MO5, c'est super mais ça ne permet sans doute pas d'utiliser les fonctions étendues du TO8, notamment celle du Gate Array Mode Page (et les mode autres que TO7-70), mais je crois que je vais essayer ce truc pour mes futurs jeux vidéo,n au lieu du Basic+Assembleur.Je me demande si ça optimise également les Peek-Poke en Ram Vidéo, parce que c'est ce qui ralentit considérablement le basic/Assembleur (jusqu'à 300 fois plus lent!!)

Par contre, je le suis pas d'accord avec le fait que tu dise que le Basic est plus répandu... Le Pascal a exoisté sur quasiment toutes les plate-forme 8 bits, 16bits, 32 et 64 bits!

Un extrait de mon site web sur le langage Pascal

Amstrad CPC : Turbo Pascal 3 (2013)
- Apple II, II et Lisa : Apple Pascal (1979) (basé sur une machine virtuelle comme l'UCSD); Kyan Pascal, Lazer Pascal, Lisa Pascal...
- Atari ST et compatibles : Alice Pascal, High Speed Pascal, Pure Pascal (compatible TP 7+ et Pascal Objet)
- Atari XL : Atari Pascal (1982) (basé sur une machine virtuelle comme l'UCSD mais 7 fois plus rapide!); Kyan Pascal
- BBC Micro (Accorn) : ISO Pascal (2x16 kO), S-Pascal
- Commodore 64 : Oxford Pascal 2.1 (1984), Pascal 64 3.2 (1984), Super Pascal 5.3 (1985), G-Pascal 3.1 (1983), UCSD Pascal 1.3 (1983), Kyan Pascal.
- Thomson MO et TO : Pascal Base (Pascal compilé (donnant du code 10 fois plus rapide que le Basic) mais typage limité aux entiers et tableaux d'entier), Pascal UCSD (utilisant son propre Système DOS). Les 2 sont dispo sur le site de DC MOTO

Sachant qu'il en manque pas mal... Alors que le C, il me semble, n'a pas vraiment existé sur les 8 bits (ou du moins jusquà' très récemment)

Et je ne parle pas des récents FreePascal et Gnu Pascal. Pour moi le Pscal est meilleur au Java et au langage C (je ne reviendtrait pas sur la remarque de Kernigan à propos des tableaux puisque les pointeurs ont été implémenté en Pascal à la fin des années 80, et même l'Objet, et je si n veut aller par là, le C a + de défauts que le Pascal).

Bon c'est intéressant ce basic en tous cas. J'espère qu'il y a une doc incluse. Et en tous cas, ça semble nettement meilleur que Speedy Wonder et se rapproche + du GFA Basic que du Microsoft (avec ces foutus numéro de ligne). Si c'est bohn, j'en ferai une vidéo sur ma chaine et le recommanderai.
Neotenien
Messages : 354
Inscription : 23 oct. 2020 19:15
Localisation : Le Mans
Contact :

Re: Un compilateur Basic pour VG-5000

Message par Neotenien »

Je vois que l'UGBasic notifié par Samuel existe pour les processeurs 6502, Z80 et 6809 et il se trouve justement que le VG5000 (qui a été produit dans ma ville du Mans) est basé justement sur le Zilog Z80! Alors pourquoi ne pas se servir de cette base plutôt que tout refaire de A à Z ? Il n'y aurait juste qu'à modifier les partie propre au Hardware des Philips VG5000 (d'autant qu'en plus le processeur graphique est le même que sur les TRS Coco1 et 2 de mémoire).

Le Z80 est inclus dans les machines:
- ZX81
- ZX Spectrum
- MSX1, MSX2...
- Amstrad
- et ... VG5000

Ca a l'air d'être un super compilo ce truc mais utilisable sur PC pour du cross compiling... Bah peu importe. C'est toujours plus simple que d'utiliser des cross compilo 6809/6309, Speedy onder (très limité), Pascal Base...
__sam__
Messages : 7909
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Un compilateur Basic pour VG-5000

Message par __sam__ »

Oui il y a des entiers 8, 16 ou 32 bits, et ça utilise le gate array du mo6 pour faire du bm16 (print, images et double buffer supportés). Le code asm ne vaut pas celui d’un humain qui connaît le 6809 par cœur, mais ça passe. Si j’ai la possibilité, je regarderais à nouveau le peephole optimizer 6809 pour voir s’il y a des choses qu’on peut améliorer.

Sinon c’est pas parce-que le Pascal a existé sur plein de machines qu’il est plus universel. Par universel, je veux dire connu par le plus de monde. Or étant livré de base avec toutes les machines 8bits, c’est pour moi le plus connu et utilisé
des langages de programmation toutes machines 8bits confondues. Tout le monde sur 8 bits a débuté sur Basic.
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
Mokona
Messages : 1036
Inscription : 17 déc. 2016 22:01
Localisation : Nord Est des Yvelines
Contact :

Re: Un compilateur Basic pour VG-5000

Message par Mokona »

Ça dévie un peu du sujet original non ?
__sam__
Messages : 7909
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Un compilateur Basic pour VG-5000

Message par __sam__ »

Oui :mrgreen:
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
Neotenien
Messages : 354
Inscription : 23 oct. 2020 19:15
Localisation : Le Mans
Contact :

Re: Un compilateur Basic pour VG-5000

Message par Neotenien »

Mokona a écrit : 11 juil. 2022 19:57 Ça dévie un peu du sujet original non ?
Un peu mais pas tant que ça, il se trouve que l'UgBasic existe également pour le VG5000 je viens de le voir dans cette page.

Alors je ne sais pas qui a écrit cette adaptation, mais au vue de ce qu'est capable de fiare ce Basic je me demande si ça vauit le coup de se lancer dans un autre compilo, plutôt qu'éventuellement améliorer celui ci ?
Avatar de l’utilisateur
Mokona
Messages : 1036
Inscription : 17 déc. 2016 22:01
Localisation : Nord Est des Yvelines
Contact :

Re: Un compilateur Basic pour VG-5000

Message par Mokona »

Il est possible d'avoir un mode mosaic sur l'EF9345 pour accéder à une résolution bicolor de 160x125.

Tout comme pour l'astuce d'utiliser les caractères semi-graphiques pour afficher des points individuels, ça demande un peu de jonglerie, mais ça se fait.

Voici un résultat, pris rapidement sur un moniteur 16/9, donc le ratio est un peu aplati, mais malgré cela, c'est pas si pire :
VG5000-Mosaic-Mode-800.jpg
VG5000-Mosaic-Mode-800.jpg (676.96 Kio) Consulté 2318 fois
Pour aller dans le plus fin, il faut sortir la redéfinition des caractères. La résolution de 320x250 peut alors être atteinte... mais pas partout en même temps sur l'écran. Voici un exemple que j'avais fait avec le mode accessible depuis le BASIC :
vg5000-maison-hidef.jpeg
vg5000-maison-hidef.jpeg (31.07 Kio) Consulté 2318 fois
En quittant le BASIC pour accéder à l'EF9345 directement, on peut assez facilement redéfinir 300 caractères de ce type (plutôt que les 190 depuis le BASIC). On peut donc imaginer une image "haute définition" en 20x15 caractères, ce qui donne 160x150 « petits pixels » sans répétitions.
Avatar de l’utilisateur
Papy.G
Modérateur
Messages : 3044
Inscription : 10 juin 2014 13:40
Localisation : Haute-Garonne/Gers

Re: Un compilateur Basic pour VG-5000

Message par Papy.G »

Selon la doc du 9345, une page ne prend jamais plus de trois "blocs", ce qui doit te laisser 500 caractères, inutilisables de cette facon, mais dans le mode mosaïque que tu as cité plus haut, en demi-définition, ca t'en fait mille, soit l'écran entier.
Soyez exigeants, ne vous contentez pas de ce que l'on vous vend.
Demandez-en plus, ou faites-le vous-même.
Avatar de l’utilisateur
Mokona
Messages : 1036
Inscription : 17 déc. 2016 22:01
Localisation : Nord Est des Yvelines
Contact :

Re: Un compilateur Basic pour VG-5000

Message par Mokona »

Je ne comprends pas le sens de la phrase.

En effet, un écran ne prend jamais plus de trois "blocs" (adresses Z), la première adresse Z doit être impaire et les blocs contigus dans un même district (ensemble de 4 blocs). Le VG5000 met ça en blocs 0 et 1. Vu la manière dont fonctionne l'adressage, c'est en effet un bon choix de commencer à 0, ça simplifie. Quand on a besoin de 3 pages (mode long en 40 et 80 colonnes, mode variable dans certaines conditions), prendre les blocs 0, 1 et 2 semble une bonne chose.

Ce qui laisse les blocs 3, 4, 5, 6, 7 de libre.

La ROM du VG5000 utilise le bloc 2 pour la redéfinition des caractères semi-graphiques, et le bloc 3 pour la redéfinition des caractères alpha numériques. En mode court, le système d'adressage ne permet pas d'adresser plus d'un bloc pour chaque de ces ensembles de caractères (et encore, pas complète).

En mode 40 colonnes long, il est possible d'adresser : 1 page d'alphanumériques redéfinis, 2 pages de semi-graphiques redéfinis et 8 pages de caractères quadrichrome. Chaque page fait 100 caractères (ou 200 pour les quadri demi-résolution)

Ici, on est limité par l'adressage : on ne peut pas adresser plus que ces pages. Même s'il est possible d'avoir, dans les 8 ko du VG5000, 500 caractères semi-graphiques redéfinis présents, on ne peut pas les adresser tous en même temps sur un même écran (registre DOR)

Si on veut tout adresser sur le même écran, une possibilité est, en mode 40 long :

- 0, 1, 2 -> contenu écran
- 3 -> G'0 -> 100 x alpha-numériques
- 4, 5 -> G'10 et G'11 -> 200 x semi-graphiques
- 6, 7 -> Q6 et Q7 -> on utilise le reste de la mémoire pour des quadrichromes

Dans le mode Mosaic que j'ai utilisé au-dessus, on oublie tous les caractères redéfinis, il ne sont pas accessibles. On a besoin de 3 pages et chaque triplet encode les 10 pixels de chaque position en direct.

Reste un truc que je me suis mis d'essayer cet été : tenter de modifier les registres interne au vol, pour voir si on ne peut pas tricher (changer DOR au vol par exemple, pour changer la plage d'adressage). Pas forcément très simple car la seule synchro disponible à la VSync, mais je suis curieux :)
Avatar de l’utilisateur
Papy.G
Modérateur
Messages : 3044
Inscription : 10 juin 2014 13:40
Localisation : Haute-Garonne/Gers

Re: Un compilateur Basic pour VG-5000

Message par Papy.G »

Tu arrives à faire trois couleurs en mode 80 colonnes?
Sinon, en quad, Q4 a Q7 te donne bien 1000 en demi-resolution, si tu fais la demi- resolution par le doublement des lignes, tu peux peut-être même récupérer trois demi-blocs en plus.
Soyez exigeants, ne vous contentez pas de ce que l'on vous vend.
Demandez-en plus, ou faites-le vous-même.
Avatar de l’utilisateur
Mokona
Messages : 1036
Inscription : 17 déc. 2016 22:01
Localisation : Nord Est des Yvelines
Contact :

Re: Un compilateur Basic pour VG-5000

Message par Mokona »

Oui pour le mode 80 colonnes. Il y a 3 couleurs : 2 couleurs + la couleur de marge. La couleur de marge peut être utilisée... partout, pas seulement dans la marge.

Cf. mon screenshot plus haut. La marge est noire, la couleur d'écriture rouge et la couleur de fond blanche.

Oui pour les quadrichromes, si on choisi de les utiliser, alors on doit pouvoir couvrir l'écran avec. Et comme chaque « caractère » peut avoir sa propre palette, on doit pouvoir faire des choses assez complexe (mais toujours avec cette résolution « réduite »).
spotlessmind1975
Messages : 66
Inscription : 24 oct. 2021 15:47

Re: Un compilateur Basic pour VG-5000

Message par spotlessmind1975 »

Salut tout le monde!

Je commence à implémenter le support VG5000 pour le langage ugBASIC. Je suis en fait venu pour obtenir un seul exécutable prêt à fonctionner avec la commande native BASIC CLOAD et capable de travailler avec des commandes natives, des expressions et des commandes PRINT (et celles qui lui sont associées). Cependant, j'ai un problème étrange avec le chipset EF9345.

J'essaie de résumer.

Si je garde les interruptions activées, après un certain temps depuis le début du programme, la carte est "réinitialisée" avec des registres différents de ceux que j'ai demandés. Si, d'un autre côté, je garde les interruptions désactivées, le programme fonctionne parfaitement. Selon la complexité du code, des résultats étranges, ou du moins incompréhensibles, sont obtenus.

Par exemple, il s'agit d'un petit programme qui exécute deux procédures en parallèle. Les deux écrivent sur l'écran (EF9345). Bien sûr, ils participent alternativement à l'écran, mais en fait c'est du multitâche coopératif.

Code : Tout sélectionner

    ; Imprimer en continu "exemple1"
    PARALLEL PROCEDURE example1
        DO
            PRINT "example"
        LOOP
    END PROC

    ; Imprimer en continu "exemple2"
    PARALLEL PROCEDURE example2
        DO
            PRINT "example2"
        LOOP
    END PROC

    ; Démarrer les deux procédures en parallèle (multitâche)
    ; et démarrer le mécanisme.
    SPAWN example1: SPAWN example2
    DO : RUN PARALLEL : LOOP
Image

Ceci est un autre exemple d'exécution. Dans ce cas, le défaut est décidément plus prononcé : en allant enquêter avec le débogueur intégré, j'ai découvert que tous les registres sont en pratique "réinitialisés" dans un mode différent du mode initial.

Code : Tout sélectionner

   FOR c = 34 TO 42
      PRINT CHR$(c);" = CODE ";
      PRINT ASC(CHR$(c))
   NEXT
Image

Question : quels sont les vecteurs d'interruption à intercepter, pour empêcher BASIC(?) ou la ROM de continuer à mettre à jour la carte ?

Merci d'avance pour votre aide!
Avatar de l’utilisateur
Mokona
Messages : 1036
Inscription : 17 déc. 2016 22:01
Localisation : Nord Est des Yvelines
Contact :

Re: Un compilateur Basic pour VG-5000

Message par Mokona »

Hello,

en effet, si tu ne désactive pas les interruptions, l'affichage va mettre la pagaïe.

D'après ce que tu écris, je pars du principe que tu n'utilises pas le système de page "vidéo" telle qu'implémentée par la ROM du VG5000 pour communiquer. Tu communiques en direct.

Je pense qu'effectivement, alors que tu es en train de lancer une commande, tu te fais interrompre par la ROM qui va faire à sa manière, et laisser l'EF9345 dans un état indéterminé. C'est un classique sur le VG5000.

La méthode la plus simple est en effet de tout couper : `di` au début de ton programme et on en parle plus. De toute façon, l'interruption vidéo est la seule masquable utilisée par le VG5000.

Mais avoir cette interruption active peut tout de même être utile. Dans ce cas, c'est $47D0 qui t'intéresse. Tu vas y trouver en `RET` de base. Il y a trois octets réservé ici, juste de quoi y mettre un `JMP xxxx` vers une routine à toi. Ici, tu as le choix de faire ce que tu veux. Le plus simple si tu veux couper complètement l'affichage de la ROM, c'est d'enlever l'adresse de retour de CALL de la pile, et de faire un RET.

Quelques renseignements sur les hooks : https://www.triceraprog.com/vg5000m-les-hooks.html

Pour répondre à la question plus directement, c'est le RST $38 (RST 7 suivant comment on écrit) qui est appelée. Et elle commence par `CALL $47D0`.
spotlessmind1975
Messages : 66
Inscription : 24 oct. 2021 15:47

Re: Un compilateur Basic pour VG-5000

Message par spotlessmind1975 »

Salut Mokona!
Mokona a écrit : 25 juil. 2022 00:18 D'après ce que tu écris, je pars du principe que tu n'utilises pas le système de page "vidéo" telle qu'implémentée par la ROM du VG5000 pour communiquer. Tu communiques en direct.
Je confirme que je communique directement, en utilisant les ports I/O. Voici une première implémentation - ne faites pas attention au désordre, au final c'est un "work in progress". :)
Mokona a écrit : 25 juil. 2022 00:18Le plus simple si tu veux couper complètement l'affichage de la ROM, c'est d'enlever l'adresse de retour de CALL de la pile, et de faire un RET.
Merci pour la grande suggestion! En fin de compte, j'ai fait exactement cela, et maintenant cela fonctionne sans interférence. J'ai pris le relais pour l'IRQ du système et l'ai désactivé. Vous trouverez ici l'implémentation qui suit vos instructions.

Je peux maintenant poursuivre les développements.

Merci beaucoup encore ! :D
Répondre