Dessiner des arbres binaires comme sur un Apple

un pet, un vic, un 64...

Modérateur : Politburo

Répondre
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3400
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Dessiner des arbres binaires comme sur un Apple

Message par C.Ret »

Bonjour,

C'est par hasard que je suis tombé sur cette vidéo où un utilisateur fou essaye de dessiner des arbres binaires par récurrence sur un vile Apple II.
Image


Comme je n'ai pas ce genre de machine, j'ai branché mon Commodore C128D sur le sujet.

Et je ne suis pas déçu par le résultat.
Commodore C128 - BASIC 7.0 - Arbre binaire 19 (Plot).gif
Commodore C128 - BASIC 7.0 - Arbre binaire 19 (Plot).gif (48.36 Kio) Vu 2835 fois

Bon en réalité, le Microsoft BASIC 7.0 de mon CBM permet de faire quelque chose de plus propre et plus lisible que l'AppleSOFT rudimentaire d'un Apple II.
Commodore C128 - BASIC 7.0 - Arbre binaire 19 (listing).gif
Commodore C128 - BASIC 7.0 - Arbre binaire 19 (listing).gif (4.93 Kio) Vu 2835 fois

En changeant quelques paramètres (notamment aux lignes 110 et 120) vous pourrez facilement dessiner vos propres buissons binaires ou tout autre chose:
Commodore C128 - BASIC 7.0 - Arbre binaire  Calkin Wilf.gif
Commodore C128 - BASIC 7.0 - Arbre binaire Calkin Wilf.gif (46.34 Kio) Vu 2835 fois

Cet arbre ne vous rappelle rien ?
MPO 95 ??
MPO 95 ??
Commodore C128 - BASIC 7.0 - Arbre binaire Calkin Wilf (code extract).gif (1.35 Kio) Vu 2835 fois
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.
Ben
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1549
Enregistré le : 21 août 2016 19:04

Re: Dessiner des arbres binaires comme sur un Apple

Message par Ben »

Je suis de temps en temps ses vidéos. Je trouve qu'elles sont encore bienfaits. :-)

J'aime bien ton arbre, il a l'air plus arrondi :-)
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3400
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Dessiner des arbres binaires comme sur un Apple

Message par C.Ret »

En réalité, je ne suis pas aller voir cette vidéo par hasard.
Car je trouve le gars fort sympathique et j'ai, suivi il y a quelques temps, certaines séries thématiques.
Ses vidéo sont bien faites et ses explications claires et pratiques. J'aime bien sa façon de faire faux parfois puis de corriger et optimiser ses codes.

Sinon, les rondeurs proviennent de l'inclinaison initiale et surtout de l'asymétrie occasionnée par le sens de rotation du dessin car de plus en plus de branches ne sont pas dessinées lorsque qu'il n'y a plus de place.

On peut passer des heures à essayer les différents paramètres du début du programme. Heureusement que sur les émulateurs on profite de vitesses accélérées!
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
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3400
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Dessiner des arbres binaires comme sur un Apple

Message par C.Ret »

Le même bonhomme a remis cela avec son Apple II mais cette fois en 3D sur un sujet qui nous est pas étranger.

Mais qui est le plus fou, le fou qui code ou le fou qui dessine un chapeau ?
Dessiner des cubes 3D comme sur un Apple II (repère).gif
Dessiner des cubes 3D comme sur un Apple II (repère).gif (4.33 Kio) Vu 2444 fois
Mon C128D n'étant pas assez véloce pour tenter d'animer en BASIC un cube 3D haute résolution, je me suis contenté d'optimiser le moteur de rendu avec une perspective conique. Ca cube bien et en perspective.
Dessiner des cubes 3D comme sur un Apple II.gif
Dessiner des cubes 3D comme sur un Apple II.gif (19.66 Kio) Vu 2449 fois

Je vous passe le code, pas ou si peu d'intérêt, la perspective est fausse mais l'astuce est surtout la simplification du calcul [ i j ] = P (x,y,z) qui donne en un minium d'additons et multiplications les coordonnées des pixels [ i j ] de l'écran GRAPHIC 1 à partir des coordonnées 3D abstraites (x,y,z).
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.
Gilles59
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1602
Enregistré le : 27 oct. 2010 20:46

Re: Dessiner des arbres binaires comme sur un Apple

Message par Gilles59 »

Sympa tout ça. Je vais y regarder de plus.
Cote vitesse sur mon Amstrad CPC j’ai banni l’usage des nombres réels et travaille en entier.

Ma table des sinus utilise une unité spécifique avec un tour correspondant à 256 « unités ». Un angle droit vaut 64, 45degres vaut 32 « unités ». Le résultat est un entier signé qui correspond à un multiple (par exemple x64) de la valeur du sinus. Ça accélère considérablement les choses même si on perd en prévision ce qui ne gêne pas dans les exemples ici. Par contre il me semble avoir lu que sur le basic C64 le calcul en entier est lent car la machine ne travaillerait en interne qu’en réel. Ça me parait bizarre.
Casio FX-502P /602P / 603P / FX180P+ / FX4000P / TI57 / TI66 / TI74 Basicalc / TI95 Procalc / HP12C / HP15C LE / DM41L / HP 30B / HP39GII / HP 48SX USA / 49G / 49g+ / 50G / 50G NewRPL / HP Prime / Oric 1 / Amstrad CPC 6128+ CM14 et MM12 / Alice 32
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3400
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Dessiner des arbres binaires comme sur un Apple

Message par C.Ret »

Gilles59 a écrit : 01 déc. 2022 13:03Ça me parait bizarre.
Non, c'est la triste réalité. Les BASIC Commodore existent sous différentes versions de la 1.0 (premier PET à membrane) à la 7.0 (Commodore C128).
Ces versions se différencient exclusivement par le catalogue des commandes et instructions qui s'étoffent au fur et à mesure du développement des équipements et périphériques. Tout se passe crescendo sauf pour le malheureux C64 qui, pour sortir à moindre coût et dans les temps sera à la hate pourvu d'une version très anciennes (la V2.0 c'est à dire celle du second PET, celui avec un clavier mécanique - alors que l'on s'attendait à une version 5.0 toujours manquante). Seule la ROM des charactères sera modifiée (à la hâte aussi) pour être plus épaisse et rester lisible sur une TV (les PET second version avaient un moniteur de très bonne qualité qui affichait sans problème les écrans monochromes 40 ou 80 col).

Cette façon de "ne pas" développer le BASIC résulte dans deux conséquences catastrophiques pour le C64 qui devient l'ordinateur le plus puissant (64 ko) et le plus vendu mais qui n'a d'origine aucun support logiciel pour tirer parti de ces 16 couleurs (l'écran par défaut est bleu et bleu foncé avec une couleur du curseur et des caractères identique au cadre de l'écran - on dirait un PET monochrome !!), ses sprites et toutes ses innovations graphiques ou sonores. Il n'a même pas de moniteur LM, le moniteur intégré et la commande MONITOR n'apparaissant qu'avec les ROM de la version 3.0 et des suivantes.
Mais bon, le C64 est une réussite commerciale car pas cher et sorti rapidement juste à temps en quelque sorte. Contrairement au C128 qui corrige tous ces inconvénients et tente de donner un aspect plus professionnel mais arrive trop tard avec un CP/M dépassé et déjà en fin de vie.

L'autre conséquence de ce type de développement faignant du Commodore BASIC est que TOUS les BASIC quelle que soit leur version utilise la même racine interne. Avantage, l'implantation des codes BASIC est la même quel que soit la version, seule l'adresse de stockage est différente d'une machine à l'autre, ou pour une même machine selon la configuration mémoire (cf. VIC 20). Les p-codes sont les mêmes ainsi que le système d'abréviation (qui après analyse semble être non volontaire et une conséquence d'astuce de programmation de la ROM qui utilise le bit-7 du dernier caractère comme un repère dans la liste des mots-clefs) et le codage des lignes BASIC sous forme d'une liste chainée.

Quand on désassemble la ROM BASIC, on se rend compte que c'est très mal organisé, qu'il y a même des redondances dans les codes gérant l'interprétation des lignes de code ou le positionnement du curseur. Apparemment, chaque fois que la taille d'un modèle Commodore a changé, il a fallu réécrire de nombreux sous-programme LM pour adapter à la nouvelle taille de l'écran, partition mémoire, la gestion de la couleur en mode texte, etc...

Le moteur du BASIC restant à chaque version identique, la partie arithmétique est restée identique à celle du BASIC 0.1 du premier PET à membrane datant de décembre 1977.

A l'époque, Bill Gate a fait au plus rudimentaire (c'était un de ses tout premier contract sérieux), il a livré une ROM BASIC qui tenait dans l'espace d'adressage très restreint imposé par son facétieux client. Pour réussir cela, il a utilisé le système de p-code pour les instructions qui limite l'emprise des programmes BASIC dans la RAM limité du PET (sans compté qu'il y a au centre de la RAM une zone interdite pour les E/S des ports série et donc du clavier), limité volontairement l'arithmètique flottante à presque 6.5 décimales. Il n'y a dans la ROM BASIC aucun support pour l'artihmètique des entiers autre qu'une vague sous-routine permettant de coder un entier signé de 15-bits dans le registre d'accumulation du système arithmétique flottant. Il n'y a pas de support pour l'arithmétique entière dans la ROM et encore moins dans le processeur, la famille des 6502 se distingue des autres microprocesseur par son unité arithmétique interne uniquement 8-bits (ou BCD mais non utilisé dans le code des Commodore).
Toute l'arithmétique flottante tient dans une petite demi-douzaine de sous-programmes de la ROM BASIC. Ainsi tous les calculs fait par un Commodore 8-bits se font par ces même sous-routines de calcul elementaries et fonction "mathématiques", lecture d'un nombre saisi (ou dans un programme c'est les même sous-routines), empilement/dépilement dans la pile opérationnelle du 6502, affichage d'un nombre, etc.

A cela s'ajoute le fait que, contrairement aux p-codes des instructions, les valeurs numériques ne sont pas codées dans les lignes BASIC, a chaque passage de l'interpréteur les arguments et valeurs doivent être lues chiffre par chiffre. Cela mobilise tout le moteur arithmétique flottant qui doit à chaque chiffre empiler l'accumulateur, convertir l'octet lu en nombre flottant pour le mémoriser dans la pile, échanger avec la valeur précédente de l'accumulateur qui doit être multipliée par dix pour enfin l'additionner le chiffre lu.
Et ce n'est rien, pour chaque argument, il faut ensuite retransformer la valeur de l'accumulateur en une série d'octets que l'on ira placer en RAM afin de servir d'arguments à l'instruction BASIC en cours. Pouffff j'imagine à peine le temps nécessaire à interpréter une commande comme

112 CIRCLE 1,160,100,90,90

Je crois que mon pauvre Commodore C128D passe plus de temps à lire les arguments entiers qu'à allumer les pixels à l'écran !!


Bref, nous voilà avec des machines capables et attrayantes pour le son et les graphiques mais dont le BASIC est certainement un des plus poussif de l'époque. D'où le success des jeux et autre cartouches ou mod qui permettaient de réellement développer sur ces machines.
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.
FLISZT
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 655
Enregistré le : 09 mars 2022 19:14

Re: Dessiner des arbres binaires comme sur un Apple

Message par FLISZT »

Quelques infos sur le Basic (MS) :

https://en.wikipedia.org/wiki/Commodore ... erformance

o-code → redirigé vers : https://en.wikipedia.org/wiki/BCPL
Bruno
Sanyo CZ-0124 ? TI-57 ? HP-15C ? Canon X-07 + XP-140 Monitor Card ? HP-41CX ? HP-28S ? HP-50G ? HP-50G
Répondre

Retourner vers « Commodore 8bits »