Derniers sujets
» Windows 10 DOSBOX & EUPHORIC
Aujourd'hui à 12:45 par maximus

» Capture d'écran (screenshot) en émulation
Aujourd'hui à 0:52 par laurentd75

» Blake's 7
Aujourd'hui à 0:48 par laurentd75

» Rencontre avec Emmanuel Viau (ERE informatique)
Aujourd'hui à 0:42 par laurentd75

» Tyrann III - RPG Oric 2015
Hier à 5:52 par didierv

» Orix : Thread de notification sur le développement
Sam 21 Oct 2017 - 10:56 par Jede

» L'immonde Docteur Kokus
Mar 17 Oct 2017 - 18:46 par Dom50

» Organisation RAM vidéo
Mar 17 Oct 2017 - 14:26 par Davros

» OVERLAYS : est-ce accessible avec LCC65
Lun 16 Oct 2017 - 14:47 par Jede

» Holdies
Dim 15 Oct 2017 - 21:09 par Dbug

Qui est en ligne ?
Il y a en tout 3 utilisateurs en ligne :: 0 Enregistré, 0 Invisible et 3 Invités

Aucun

Le record du nombre d'utilisateurs en ligne est de 29 le Mer 25 Fév 2015 - 14:01
Connexion

Récupérer mon mot de passe

Statistiques
Nous avons 123 membres enregistrés
L'utilisateur enregistré le plus récent est james64

Nos membres ont posté un total de 5729 messages dans 419 sujets
Portail ORIC




PILOT, Focal, Brainfuck, ... what else?

Page 1 sur 2 1, 2  Suivant

Voir le sujet précédent Voir le sujet suivant Aller en bas

PILOT, Focal, Brainfuck, ... what else?

Message  assinie le Mar 20 Jan 2015 - 0:08

Bonsoir,

J'ai fait un portage d'une version de  COMAL pour l'Oric et en lisant le post de Didier pour le Mag 297,
je me suis aperçu que je n'en avais parlé qu'à lui Embarassed

COMAL := COMmon Algorithmic Language

Il s'agit d'un langage datant de 1974 développé au Danemark par Borge Christensen et Benedict Leofstedt.
C'est une sorte de BASIC structuré, les numéros de ligne ne sont là que pour l'édition.

Il comprend des instructions comme:

  FOR... ENDFOR équivalent à FOR... NEXT si ce n'est qu'il ne faut pas mettre le nom de la variable après le ENDFOR
  IF... THEN... ELSE... ENDIF
  CASE... WHEN... OTHERWISE... ENDCASE
  WHILE... DO:... ENDWHILE
  REPEAT.. UNTIL
  LABEL:... pour pouvoir quand même utiliser un GOTO
  PROC:... ENDPROC pour des sous-programmes
  ONERR GOTO... RESUME pour traiter les erreurs

L'affectation utilise ":=" au lieu de "=".
L'instruction CASE peut s'utiliser aussi bien avec une variable numérique qu'une variable alpha.
Une ligne peut contenir plus de 250 caractères!
La commande LIST affiche le code indenté ce qui en facilite la lecture:


Je n'ai pas ré-écris les fonctions SAVE et LOAD qui ne fonctionnent donc pas, mais ça devrait être faisable en utilisant les routines K7 de la ROM de l'Oric (ou mieux celles d'un DOS).
Si il y a une demande pour ces fonctions, je verrais ce que je peux faire.

Il doit également être possible de modifier le programme pour en faire une ROM en récupérant les quelques routines nécessaires de la ROM BASIC (pour un Oric Octo-céphale par exemple)

En attendant plus d'infos dans un prochain numéro du Mag, le fichier .tap, compatible Oric-1 et Atmos, est joint à ce post.
Fichiers joints
COMAL.zip COMAL - Image .tap - 2015/01/19Vous n'avez pas la permission de télécharger les fichiers joints.(9 Ko) Téléchargé 7 fois
avatar
assinie

Messages : 171
Date d'inscription : 09/02/2014

Revenir en haut Aller en bas

Re: PILOT, Focal, Brainfuck, ... what else?

Message  Hialmar le Mar 20 Jan 2015 - 8:39

Je prends pour ma collection.

Grâce à toi on va bientôt avoir plus de langages que sur le C64 ou l'Apple II Wink
avatar
Hialmar
Admin

Messages : 815
Date d'inscription : 03/03/2014
Age : 47
Localisation : Toulouse

Revenir en haut Aller en bas

Re: PILOT, Focal, Brainfuck, ... what else?

Message  assinie le Mar 20 Jan 2015 - 21:19

Il y a encore un peu de marge d'autant que pour l'Apple certains langages étaient fournis sur une carte d'extension contenant une ROM et de la RAM...
Pour le moment ce n'est pas possible avec l'Oric, où alors peut-être en jonglant avec plusieurs ROM et la RAM overlay ou un système de banques mémoire.

Je t'enterais bien aussi un portage du Pascal UCSD mais ça va être compliqué!

En parlant d'Apple II, j'avais aussi regarder pour utiliser SWEET 16 mais le problème est qu'il faut 32 octets de RAM consécutifs en page 0.
avatar
assinie

Messages : 171
Date d'inscription : 09/02/2014

Revenir en haut Aller en bas

Re: PILOT, Focal, Brainfuck, ... what else?

Message  Hialmar le Mar 20 Jan 2015 - 22:35

Ah oui ce serait sympa d'avoir SWEET16.
On peut pas déplacer les registres ailleurs ?
Ok ça serait encore plus lent mais bon.
avatar
Hialmar
Admin

Messages : 815
Date d'inscription : 03/03/2014
Age : 47
Localisation : Toulouse

Revenir en haut Aller en bas

Re: PILOT, Focal, Brainfuck, ... what else?

Message  assinie le Mar 20 Jan 2015 - 23:56

C'est prévu pour utiliser la page 0 qui est plus souple d'utilisation et plus rapide.
Il y a également une contrainte: la partie principale du code, celle qui simule les instructions SWEET 16, doit tenir sur une seule page du coup je pense que ça ne tiendra plus.

Il y a une autre possibilité, lorsqu'on entre ou on sort de SWEET 16, il est fait appel aux procédures SAVE et RESTORE de la ROM Apple.
Ces procédures sauvegardent les registres du 6502 sur la pile et les restaurent à la fin.
On pourrait ajouter une copie des 32 octets ailleurs en mémoire, ça augmente un peu le temps d'exécution de SAVE et de RESTORE mais ca peut être marginal par rapport à l'exécution d'un programme SWEET 16.
En fait je pense qu'on pourrait en copier un peu moins, la zone $00 à $0b est inutilisée par le BASIC mais il est probable que certains DOS l'utilise.

Je peux en faire une version avec cette modification.
avatar
assinie

Messages : 171
Date d'inscription : 09/02/2014

Revenir en haut Aller en bas

Re: PILOT, Focal, Brainfuck, ... what else?

Message  assinie le Mer 21 Jan 2015 - 0:06

Petit correctif, les registres ne sont pas sauvegardés sur la pile mais en page 0.
Mais là on peut les mettre ailleurs sans problème!
avatar
assinie

Messages : 171
Date d'inscription : 09/02/2014

Revenir en haut Aller en bas

Re: PILOT, Focal, Brainfuck, ... what else?

Message  iss le Mer 21 Jan 2015 - 10:21

Here is my quick and dirty "port" of  Woz's original sweet16 source for Oric and the TAP file for Oricutron.
The simple "main" program at end of the source copies first line 10 times Very Happy .
Fichiers joints
woz-sweet16.zip Vous n'avez pas la permission de télécharger les fichiers joints.(4 Ko) Téléchargé 7 fois
avatar
iss

Messages : 37
Date d'inscription : 30/10/2014

Revenir en haut Aller en bas

Re: PILOT, Focal, Brainfuck, ... what else?

Message  Hialmar le Mer 21 Jan 2015 - 13:05

Awesome !
Thanks iss.
avatar
Hialmar
Admin

Messages : 815
Date d'inscription : 03/03/2014
Age : 47
Localisation : Toulouse

Revenir en haut Aller en bas

Re: PILOT, Focal, Brainfuck, ... what else?

Message  assinie le Dim 25 Jan 2015 - 14:59

A noter que les outils fournis avec cc65 sont capables d'assembler directement du code source SWEET16.
Il suffit de préciser l'option --cpu sweet16 à cl65 par exemple.

Pour les autres ont peut s'en sortir à l'aide de quelques #define ou de macros.
Exemple pour xa qui ne permet pas la définition de macros:
Code:

; -------------------------------
; Liste des instructions
; -------------------------------
#define SET(reg,cst) .byte $10+reg : .word cst
#define LD .byte $20+
#define ST .byte $30+
#define LDat .byte $40+
#define STat .byte $50+
#define LDDat .byte $60+
#define STDat .byte $70+
#define POPat .byte $80+
#define STPat .byte $90+
#define ADD .byte $a0+
#define SUB .byte $b0+
#define POPDat .byte $c0+
#define CPR .byte $d0+
#define INR .byte $e0+
#define DCR .byte $f0+
#define RTN .byte $00

; -------------------------------
; Liste des branchements
; -------------------------------
#define RELBR(loc) .byte (loc - * - 1) & $ff
#define BR(where) .byte $01 : RELBR(where)
#define BNC(where) .byte $02 : RELBR(where)
#define BC(where) .byte $03 : RELBR(where)
#define BP(where) .byte $04 : RELBR(where)
#define BM(where) .byte $05 : RELBR(where)
#define BZ(where) .byte $06 : RELBR(where)
#define BNZ(where) .byte $07 : RELBR(where)
#define BM1(where) .byte $08 : RELBR(where)
#define BNM1(where) .byte $09 : RELBR(where)
#define BK(where) .byte $0a : RELBR(where)
#define RS(where) .byte $0b : RELBR(where)
#define BS(where) .byte $0c : RELBR(where)

; -------------------------------
; Liste des registres
; -------------------------------
#define R0 0
#define R1 1
#define R2 2
#define R3 3
#define R4 4
#define R5 5
#define R6 6
#define R7 7
#define R8 8
#define R9 9
#define RA 10
#define RB 11
#define RC 12
#define RD 13
#define RE 14
#define RF 15

; -------------------------------
; Entrée de SWEET16
; -------------------------------
#define SWEET16 JSR SW16

La syntaxe est un peu différente dans ce cas mais permet quand même d'écrire un programme plus simplement.
En reprenant l'exemple de iss:

Code:

; -------------------------------
; Programme SWEET16
; -------------------------------
SOURCE = $BB80
DEST = SOURCE + 40
LEN = $0028*10

ENTRY:
    SWEET16
    SET(R1,SOURCE)
    SET(R2,DEST)
    SET(R3,LEN)

LOOP:
    LDat R1
    STat R2
    DCR  R3
    BNZ(LOOP)
    RTN

    RTS

Remarques:

  • Il faudra renommer les labels utilsés dans le source de iss, en ajoutant par exemple un _ à la fin de chaque label, si on veut utiliser ces pseudo-instructions dans le même fichier que celui qui contient SWEET16. Sinon ça posera un problème lors l'assemblage.
  • Une instruction utilisant une indirection comme LD @R1 qui s'écrit ici LDat R1 peut aussi s'écrire LDat @R1 dans le cas de xa sans que cela pose de problème.
avatar
assinie

Messages : 171
Date d'inscription : 09/02/2014

Revenir en haut Aller en bas

Re: PILOT, Focal, Brainfuck, ... what else?

Message  iss le Mer 28 Jan 2015 - 9:29

Wow, thanks assinie!
This looks great. I'll try cc65 and xa.
avatar
iss

Messages : 37
Date d'inscription : 30/10/2014

Revenir en haut Aller en bas

Re: PILOT, Focal, Brainfuck, ... what else?

Message  Hialmar le Mer 28 Jan 2015 - 9:42

Très intéressant en effet. Merci pour l'info Assinie.
avatar
Hialmar
Admin

Messages : 815
Date d'inscription : 03/03/2014
Age : 47
Localisation : Toulouse

Revenir en haut Aller en bas

Re: PILOT, Focal, Brainfuck, ... what else?

Message  iss le Sam 26 Déc 2015 - 14:41

Back to topic: I posted Brainfuck for Oric here.
You can try it for fun.
Or even you can decipher  drpsy's signature under his post here.
... and Happy Holidays to all!
avatar
iss

Messages : 37
Date d'inscription : 30/10/2014

Revenir en haut Aller en bas

Re: PILOT, Focal, Brainfuck, ... what else?

Message  Godzil le Dim 3 Jan 2016 - 16:44

Lua pour le prochain language?
avatar
Godzil

Messages : 106
Date d'inscription : 20/01/2013
Age : 35
Localisation : Entre France et UK

Revenir en haut Aller en bas

Re: PILOT, Focal, Brainfuck, ... what else?

Message  assinie le Dim 3 Jan 2016 - 17:22

Cest pas gagné mais c'est peut-être envisageable en partant de picoLua.
C'est prévu pour générer du code asm  pour un processeur PIC mais on doit pouvoir le modifier pour générer du code asm pour  le 6502.

Il existe aussi eLua mais il est peu probable qu'un portage soit possible.
avatar
assinie

Messages : 171
Date d'inscription : 09/02/2014

Revenir en haut Aller en bas

Re: PILOT, Focal, Brainfuck, ... what else?

Message  Godzil le Dim 3 Jan 2016 - 17:32

picolua n'est pas du tout une option pour plein de raison (la premiere est que ca date de 2005)

eLua ne me semble pas adapté non plus, contrairement a uLua: https://code.google.com/p/ulua/
avatar
Godzil

Messages : 106
Date d'inscription : 20/01/2013
Age : 35
Localisation : Entre France et UK

Revenir en haut Aller en bas

Re: PILOT, Focal, Brainfuck, ... what else?

Message  assinie le Dim 3 Jan 2016 - 18:27

Pour picoLua c'est vrai qu'il commence à dater.

J'a aussi trouver uLua sur github après mon post, à voir pour le portage de la VM
avatar
assinie

Messages : 171
Date d'inscription : 09/02/2014

Revenir en haut Aller en bas

Re: PILOT, Focal, Brainfuck, ... what else?

Message  iss le Dim 3 Jan 2016 - 22:55

Lua is cool! Actually it's my favorite language Very Happy and I think it's possible to have it for Oric.
avatar
iss

Messages : 37
Date d'inscription : 30/10/2014

Revenir en haut Aller en bas

Re: PILOT, Focal, Brainfuck, ... what else?

Message  assinie le Lun 4 Jan 2016 - 0:17

J'essaye de compiler la vm avec cc65, les soucis recontrés:

  1. Utilisation d'une union anonyme
  2. Utilisation des fonctions mathématiques fmod() et pow()
  3. Utilisation du type float

Pour le point 1, la modification est simple.
Pour le 2 il suffit de supprimer ces instructions en attendant de les ajouter à la librairie.
Pour le 3, la c'est moins simple, cc65 ne supporte pas l'utilisation de l'arithmétique avec ce type. Dans un premier temps on peut peut-être le remplacer par un int.

Il reste encore deux erreurs dont je n'ai pas encore trouvé l'origine lors de la compilation de native.c et uluai.c.
Pour ce dernier, qui ne fait que charger un fichier en mémoire et lancer l'interpréteur, il faudra probablement en écrire une version dédiée.

Je ferais peut-être aussi un test de compilation avec le portage de gcc pour le 6502 histoire de voir ce que ça donne mais il faut d'abord que je le récupère et que je le compile...
avatar
assinie

Messages : 171
Date d'inscription : 09/02/2014

Revenir en haut Aller en bas

Re: PILOT, Focal, Brainfuck, ... what else?

Message  assinie le Lun 4 Jan 2016 - 20:54

Bonsoir,
Je ne sais pas si cela pourra tourner correctement ou non sur un Oric mais je continue le test.
Pour le moment, la compilation de l'interpéteur avec CC65 passe correctement après quelques adaptations minimes.
J'ai un petit soucis à résoudre lors de l'édition des liens mais j'espère pouvoir trouver une solution...
avatar
assinie

Messages : 171
Date d'inscription : 09/02/2014

Revenir en haut Aller en bas

Re: PILOT, Focal, Brainfuck, ... what else?

Message  assinie le Mer 6 Jan 2016 - 0:28

J'ai réussi à générer une version de l'interpéteur qui se lance avec Oricutron  Very Happy

J'ai utilisé les outils cc65, je n'ai pas essayé avec l'OSDK que je n'ai jamais testé non plus mais ce sera peut-être l'occasion de le faire (si quelqu'un peut me dire si il sait gérer les variables de type float)

La taille de l'interpéteur est de 20Ko environ ce qui laisse assez de place pour faire tourner un programme LUA d'une taille tout à fait acceptable.

C'est encore du bricolage pour le moment, l'interpréteur embarque le byte code du programme LUA.
Il faut encore régler quelques détails et trouver le moyen de charger l'interpéteur et  le byte code LUA séparément et ensuite lancer l'exécution.
Le byte code est créé sur le PC, pas sûr qu'on puisse le faire directement sur l'Oric.
avatar
assinie

Messages : 171
Date d'inscription : 09/02/2014

Revenir en haut Aller en bas

Re: PILOT, Focal, Brainfuck, ... what else?

Message  iss le Mer 6 Jan 2016 - 1:03

Great news! Oric+Lua this is a dream Smile Can't wait to try it.
avatar
iss

Messages : 37
Date d'inscription : 30/10/2014

Revenir en haut Aller en bas

Re: PILOT, Focal, Brainfuck, ... what else?

Message  assinie le Jeu 7 Jan 2016 - 0:22

J'ai fait un test avec OSDK mais je pense que je vais rester avec cc65.

Le problème est le suivant, uLua utilise un type float pour traiter les valeurs numériques et comme je pense qu'on va être obliger de garder la version PC du compilateur, il faut que l'interpréteur sur l'Oric soit capable de traiter le fichier généré et donc des valeurs du même type.

Sur mon PC, gcc utilise 4 octets pour un float  comme cc65 alors que OSDK en utilise 5.
Il faudrait donc apporter pas mal de modifications et intégrer un module de conversion pour passer de 4 à 5 (ou de 5 à 4) et pouvoir utiliser OSDK.

cc65 est capable de générer une variable float mais pas de l'utiliser... en revanche la taille d'un int est la même pour gcc et cc65 et est également de 4 octets ce qui évite de modifier les routines de traitment des nombres.

Cependant, le codage d'un float et d'un int n'est pas le même:
Code:
00 00 80 3f
et
Code:
01 00 00 00
représentent la valeur 1 suivant les 2 codages.

La seule modification à faire est donc de remplacer float par int à la fois pour le compilateur et pour l'interpréteur et le tour est joué!

En contrepartie, on ne pourra utilser que des valeurs entières (la version originale de uLua n'affiche pas non plus la partie décimale)

Note:
Pour OSDK, un int ne fait que 2 octets

Il me reste encore à trouver un moyen simple de charger le byte code sans devoir l'intégrer à l'interpréteur.

En attendant, ci-dessous, une copie d'écran de l'exécution du programme de test alltest.lua fourni avec uLua:



La version originale sur mon PC:


Code du programme:
Code:

a = 15
b = (5+2)/2 + a
a = b/2

print('a=')
print(a)
print('b=')
print(b)

if a > 20 then
        print('a > 20')
elseif a < 10 then
        print('a < 10')
elseif a == 10 then
        print('a = 10')
elseif a == 20 then
        print('a = 20')
else
        print('a > 10 and a < 20')
end

a = 15
while a - 1 > 0 do
        print(a)
        a = a - 1
end
avatar
assinie

Messages : 171
Date d'inscription : 09/02/2014

Revenir en haut Aller en bas

Re: PILOT, Focal, Brainfuck, ... what else?

Message  Hialmar le Jeu 7 Jan 2016 - 9:07

Je pense que l'OSDK a des int sur 2 octets et des floats sur 5 octets car il utilise les routines de la ROM pour les opérations arithmétiques.

Je suppose donc que cc65 fait tout à la main. Intéressant, si on n'utilise pas la ROM pour récupérer de la RAM (avec un lecteur de disquette ou autre chose sur le port d'expansion).
Il faudrait voir avec Dbug s'il n'y a pas moyen de modifier OSDK pour cela. Mais c'est clair que ça risque de prendre du temps.

En attendant c'est super qu'on puisse avoir lua sur nos petites machines.

_________________
Hialmar
Membre du CEO et de Silicium.
avatar
Hialmar
Admin

Messages : 815
Date d'inscription : 03/03/2014
Age : 47
Localisation : Toulouse

Revenir en haut Aller en bas

Re: PILOT, Focal, Brainfuck, ... what else?

Message  Godzil le Jeu 7 Jan 2016 - 12:56

C'est surtout que int == entier 32bit sur une machine 8bit n'a pas de sens. INT est sensé être au moins de la taille d'un pointeur mémoire (donc 16bit sur le 6502), ou la taille la plus simple a traiter pour le CPU (8bit dans notre cas, mais c'est trop petit pour stocker un pointeur)
C'est surtout surprenant que cc65 ai choisis un entier 32bit, ca n'apporte rien si ce n'est une surconsommation mémoire, et de temps CPU..

C'est d'ailleurs aussi surprenant que uLua utilse le type "int" au lieu de types a taille fixe et connu avant la compilation (genre ceux de stdint, donc int32_t, int16_t, uint32_t etc...).
Change le type pas un dont la taille est fixe, ca corrigera le probleme. int n'a jamais eu une taille fixe.
Par contre un float de 5 octet est plutot etrange.
avatar
Godzil

Messages : 106
Date d'inscription : 20/01/2013
Age : 35
Localisation : Entre France et UK

Revenir en haut Aller en bas

Re: PILOT, Focal, Brainfuck, ... what else?

Message  assinie le Jeu 7 Jan 2016 - 13:27

Le plus étrange dans le cas de uLua, c'est qu'ils utlisent un type spécifique (lu08, lu16,...) pour tout sauf pour les valeurs numériques qui utlisent un float même si le format d'affichage ne comporte pas la partie décimale et provoque donc un arrondi.

L'autre soucis dans le cas du portage est que la génération du byte code et son exécution sont actuellement effectués sur des architectures différentes.

On pourrait utiliser OSDK et les routines de la ROM pour la partie Oric mais cela implique, au moins, d'ajouter l'équivalent de la routine de conversion de la ROM dans le compilateur uLua.
C'est toujours faisable mais on s'éloigne de la version d'origine, à voir...

L'autre solution étant de porter le compilateur uLua sur Oric, ce qui est moins évident en terme de ressources disponibles je pense.
avatar
assinie

Messages : 171
Date d'inscription : 09/02/2014

Revenir en haut Aller en bas

Re: PILOT, Focal, Brainfuck, ... what else?

Message  Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Page 1 sur 2 1, 2  Suivant

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum