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

panoramic
Messages : 27
Inscription : 19 mai 2010 23:32

Un compilateur Basic pour VG-5000

Message par panoramic »

Dans le cadre de l'initiative d'Olivier Boisseau de relancer le développement de logiciels pour le VG5000 qui est une machine un peu oubliée, je me suis mis dans la tête de développer un compilateur Basic pour le VG5000.
Je ne pars pas de zéro car j'ai développé un interpréteur et un compilateur Basic (Panoramic) pour PC, MAC, Linux, Android et ... Oric Atmos.

Mais bon, le sujet n'est pas cela. Je me suis donc documenté sur le VG5000, le Z80 et j'ai commencé à développer un compilateur qui donne quelques résultats.
Il s'agit d'un compilateur qui s'exécute sur PC, qui génère un code source qui s'injecte puis se lance automatiquement dans l'émulateur de Daniel Coulom. Pour le moment, j'ai codé les variables réelles, les opérations + - * / et les fonctions trigonométriques SIN, COS, TAN, ATN, les fonctions mathématiques SQR, EXP, SQR, ... Ensuite quelques fonctionnalités spécifiques : INIT, DISPLAY, ...
Puis les instructions du Basic : GOTO, GOSUB, RETURN, IF/THEN, FOR/TO/STEP/NEXT.

Je viens vous montrer aujourd'hui un domaine dans lequel on n'attendait pas le VG5000 : le tracé de fonctions mathématiques, car me rendant compte du manque dans ce domaine, j'ai codé POINT x,y qui allume un point à l'écran (x de 0 à 79 et y de 0 à 74).

Voici ce que ça donne. J'ai pris pour exemple le tracé de la fonction sinus.

Le programme Basic:

Code : Tout sélectionner

' affiche la courbe de sinus
dim x,y
init 6,0
print "Y=SIN(X)"
' axe des x
for x=0 to 76:point x,37:next x:display
' axe des y
for y=0 to 70:point 0,y:next y:display
' courbe sinus
for x=0 to 8 step 0.1
 point x*10,37-33*sin(x)
next x:display
Le code machine généré par le compilateur:

Code : Tout sélectionner

                ; dim x,y
                ; init 6,0
7108 1E06          LD E,6
710A 1600          LD D,0
710C D5            PUSH DE
710D 1E00          LD E,0
710F 1600          LD D,0
7111 D1            POP DE
7112 CD9E00        CALL 009EH
                ; print "Y=SIN(X)"
7115 211F74        LD HL,ZTS
7118 3E59          LD A,89
711A 77            LD (HL),A
711B 23            INC HL
711C 3E3D          LD A,61
711E 77            LD (HL),A
711F 23            INC HL
7120 3E53          LD A,83
7122 77            LD (HL),A
7123 23            INC HL
7124 3E49          LD A,73
7126 77            LD (HL),A
7127 23            INC HL
7128 3E4E          LD A,78
712A 77            LD (HL),A
712B 23            INC HL
712C 3E28          LD A,40
712E 77            LD (HL),A
712F 23            INC HL
7130 3E58          LD A,88
7132 77            LD (HL),A
7133 23            INC HL
7134 3E29          LD A,41
7136 77            LD (HL),A
7137 23            INC HL
7138 AF            XOR A
7139 77            LD (HL),A
713A CD3470        CALL PRNTM
                ; for x=0 to 76
713D 010002        LD BC,512
7140 110000        LD DE,0
7143 21FF73        LD HL,_X
7146 70            LD (HL),B
7147 23            INC HL
7148 71            LD (HL),C
7149 23            INC HL
714A 72            LD (HL),D
714B 23            INC HL
714C 73            LD (HL),E
714D 011887        LD BC,34584
7150 110000        LD DE,0
7153 D5            PUSH DE
7154 C5            PUSH BC
7155 010081        LD BC,33024
7158 110000        LD DE,0
715B D5            PUSH DE
715C C5            PUSH BC
                ; point x,37
715D 00         __FOR1 NOP
715E 21FF73        LD HL,_X
7161 46            LD B,(HL)
7162 23            INC HL
7163 4E            LD C,(HL)
7164 23            INC HL
7165 56            LD D,(HL)
7166 23            INC HL
7167 5E            LD E,(HL)
7168 D5            PUSH DE
7169 C5            PUSH BC
716A 011486        LD BC,34324
716D 110000        LD DE,0
7170 CDD205        CALL 05D2H
7173 CD8300        CALL 0083H
7176 7B            LD A,E
7177 320774        LD (ADRRET),A  ; Y
717A C1            POP BC
717B D1            POP DE
717C CDD205        CALL 05D2H
717F CD8300        CALL 0083H
7182 3A0774        LD A,(ADRRET)
7185 67            LD H,A
7186 6B            LD L,E
7187 CD4670        CALL SETPOINT
                ; next x
718A C1            POP BC
718B D1            POP DE
718C 210974        LD HL,TMPFL1
718F 70            LD (HL),B
7190 23            INC HL
7191 71            LD (HL),C
7192 79            LD A,C
7193 E680          AND 128
7195 321D74        LD (SGNPAS),A
7198 23            INC HL
7199 72            LD (HL),D
719A 23            INC HL
719B 73            LD (HL),E
719C C1            POP BC
719D D1            POP DE
719E 210D74        LD HL,TMPFL2
71A1 70            LD (HL),B
71A2 23            INC HL
71A3 71            LD (HL),C
71A4 23            INC HL
71A5 72            LD (HL),D
71A6 23            INC HL
71A7 73            LD (HL),E
71A8 21FF73        LD HL,_X
71AB 46            LD B,(HL)
71AC 23            INC HL
71AD 4E            LD C,(HL)
71AE 23            INC HL
71AF 56            LD D,(HL)
71B0 23            INC HL
71B1 5E            LD E,(HL)
71B2 CDD205        CALL 05D2H
71B5 210974        LD HL,TMPFL1
71B8 46            LD B,(HL)
71B9 23            INC HL
71BA 4E            LD C,(HL)
71BB 23            INC HL
71BC 56            LD D,(HL)
71BD 23            INC HL
71BE 5E            LD E,(HL)
71BF CD1003        CALL 0310H
71C2 CDDD05        CALL 05DDH
71C5 21FF73        LD HL,_X
71C8 70            LD (HL),B
71C9 23            INC HL
71CA 71            LD (HL),C
71CB 23            INC HL
71CC 72            LD (HL),D
71CD 23            INC HL
71CE 73            LD (HL),E
71CF 210D74        LD HL,TMPFL2
71D2 46            LD B,(HL)
71D3 23            INC HL
71D4 4E            LD C,(HL)
71D5 23            INC HL
71D6 56            LD D,(HL)
71D7 23            INC HL
71D8 5E            LD E,(HL)
71D9 CD0A06        CALL 060AH
71DC 321E74        LD (SGNCMP),A
71DF 210D74        LD HL,TMPFL2
71E2 46            LD B,(HL)
71E3 23            INC HL
71E4 4E            LD C,(HL)
71E5 23            INC HL
71E6 56            LD D,(HL)
71E7 23            INC HL
71E8 5E            LD E,(HL)
71E9 D5            PUSH DE
71EA C5            PUSH BC
71EB 210974        LD HL,TMPFL1
71EE 46            LD B,(HL)
71EF 23            INC HL
71F0 4E            LD C,(HL)
71F1 23            INC HL
71F2 56            LD D,(HL)
71F3 23            INC HL
71F4 5E            LD E,(HL)
71F5 D5            PUSH DE
71F6 C5            PUSH BC
71F7 3A1D74        LD A,(SGNPAS)
71FA FE00          CP 0
71FC 280A          JR Z,$ + 12
71FE 3A1E74        LD A,(SGNCMP)
7201 FEFF          CP 255
7203 280D          JR Z,$ + 15
7205 C25D71        JP NZ,__FOR1
7208 3A1E74        LD A,(SGNCMP)
720B FE01          CP 1
720D 2803          JR Z,$ + 5
720F C25D71        JP NZ,__FOR1
7212 C1            POP BC
7213 D1            POP DE
7214 C1            POP BC
7215 D1            POP DE
                ; display
7216 CD8E0F        CALL 0F8EH
                ; for y=0 to 70
7219 010002        LD BC,512
721C 110000        LD DE,0
721F 210374        LD HL,_Y
7222 70            LD (HL),B
7223 23            INC HL
7224 71            LD (HL),C
7225 23            INC HL
7226 72            LD (HL),D
7227 23            INC HL
7228 73            LD (HL),E
7229 010C87        LD BC,34572
722C 110000        LD DE,0
722F D5            PUSH DE
7230 C5            PUSH BC
7231 010081        LD BC,33024
7234 110000        LD DE,0
7237 D5            PUSH DE
7238 C5            PUSH BC
                ; point 0,y
7239 00         __FOR2 NOP
723A 010002        LD BC,512
723D 110000        LD DE,0
7240 D5            PUSH DE
7241 C5            PUSH BC
7242 210374        LD HL,_Y
7245 46            LD B,(HL)
7246 23            INC HL
7247 4E            LD C,(HL)
7248 23            INC HL
7249 56            LD D,(HL)
724A 23            INC HL
724B 5E            LD E,(HL)
724C CDD205        CALL 05D2H
724F CD8300        CALL 0083H
7252 7B            LD A,E
7253 320774        LD (ADRRET),A  ; Y
7256 C1            POP BC
7257 D1            POP DE
7258 CDD205        CALL 05D2H
725B CD8300        CALL 0083H
725E 3A0774        LD A,(ADRRET)
7261 67            LD H,A
7262 6B            LD L,E
7263 CD4670        CALL SETPOINT
                ; next y
7266 C1            POP BC
7267 D1            POP DE
7268 210974        LD HL,TMPFL1
726B 70            LD (HL),B
726C 23            INC HL
726D 71            LD (HL),C
726E 79            LD A,C
726F E680          AND 128
7271 321D74        LD (SGNPAS),A
7274 23            INC HL
7275 72            LD (HL),D
7276 23            INC HL
7277 73            LD (HL),E
7278 C1            POP BC
7279 D1            POP DE
727A 210D74        LD HL,TMPFL2
727D 70            LD (HL),B
727E 23            INC HL
727F 71            LD (HL),C
7280 23            INC HL
7281 72            LD (HL),D
7282 23            INC HL
7283 73            LD (HL),E
7284 210374        LD HL,_Y
7287 46            LD B,(HL)
7288 23            INC HL
7289 4E            LD C,(HL)
728A 23            INC HL
728B 56            LD D,(HL)
728C 23            INC HL
728D 5E            LD E,(HL)
728E CDD205        CALL 05D2H
7291 210974        LD HL,TMPFL1
7294 46            LD B,(HL)
7295 23            INC HL
7296 4E            LD C,(HL)
7297 23            INC HL
7298 56            LD D,(HL)
7299 23            INC HL
729A 5E            LD E,(HL)
729B CD1003        CALL 0310H
729E CDDD05        CALL 05DDH
72A1 210374        LD HL,_Y
72A4 70            LD (HL),B
72A5 23            INC HL
72A6 71            LD (HL),C
72A7 23            INC HL
72A8 72            LD (HL),D
72A9 23            INC HL
72AA 73            LD (HL),E
72AB 210D74        LD HL,TMPFL2
72AE 46            LD B,(HL)
72AF 23            INC HL
72B0 4E            LD C,(HL)
72B1 23            INC HL
72B2 56            LD D,(HL)
72B3 23            INC HL
72B4 5E            LD E,(HL)
72B5 CD0A06        CALL 060AH
72B8 321E74        LD (SGNCMP),A
72BB 210D74        LD HL,TMPFL2
72BE 46            LD B,(HL)
72BF 23            INC HL
72C0 4E            LD C,(HL)
72C1 23            INC HL
72C2 56            LD D,(HL)
72C3 23            INC HL
72C4 5E            LD E,(HL)
72C5 D5            PUSH DE
72C6 C5            PUSH BC
72C7 210974        LD HL,TMPFL1
72CA 46            LD B,(HL)
72CB 23            INC HL
72CC 4E            LD C,(HL)
72CD 23            INC HL
72CE 56            LD D,(HL)
72CF 23            INC HL
72D0 5E            LD E,(HL)
72D1 D5            PUSH DE
72D2 C5            PUSH BC
72D3 3A1D74        LD A,(SGNPAS)
72D6 FE00          CP 0
72D8 280A          JR Z,$ + 12
72DA 3A1E74        LD A,(SGNCMP)
72DD FEFF          CP 255
72DF 280D          JR Z,$ + 15
72E1 C23972        JP NZ,__FOR2
72E4 3A1E74        LD A,(SGNCMP)
72E7 FE01          CP 1
72E9 2803          JR Z,$ + 5
72EB C23972        JP NZ,__FOR2
72EE C1            POP BC
72EF D1            POP DE
72F0 C1            POP BC
72F1 D1            POP DE
                ; display
72F2 CD8E0F        CALL 0F8EH
                ; for x=0 to 8 step 0.1
72F5 010002        LD BC,512
72F8 110000        LD DE,0
72FB 21FF73        LD HL,_X
72FE 70            LD (HL),B
72FF 23            INC HL
7300 71            LD (HL),C
7301 23            INC HL
7302 72            LD (HL),D
7303 23            INC HL
7304 73            LD (HL),E
7305 010084        LD BC,33792
7308 110000        LD DE,0
730B D5            PUSH DE
730C C5            PUSH BC
730D 014C7D        LD BC,32076
7310 11CDCC        LD DE,52429
7313 D5            PUSH DE
7314 C5            PUSH BC
                ; point x*10,37-33*sin(x)
7315 00         __FOR3 NOP
7316 21FF73        LD HL,_X
7319 46            LD B,(HL)
731A 23            INC HL
731B 4E            LD C,(HL)
731C 23            INC HL
731D 56            LD D,(HL)
731E 23            INC HL
731F 5E            LD E,(HL)
7320 D5            PUSH DE
7321 C5            PUSH BC
7322 012084        LD BC,33824
7325 110000        LD DE,0
7328 D5            PUSH DE
7329 C5            PUSH BC
732A CD0470        CALL OPMLF
732D 011486        LD BC,34324
7330 110000        LD DE,0
7333 D5            PUSH DE
7334 C5            PUSH BC
7335 010486        LD BC,34308
7338 110000        LD DE,0
733B D5            PUSH DE
733C C5            PUSH BC
733D 21FF73        LD HL,_X
7340 46            LD B,(HL)
7341 23            INC HL
7342 4E            LD C,(HL)
7343 23            INC HL
7344 56            LD D,(HL)
7345 23            INC HL
7346 5E            LD E,(HL)
7347 D5            PUSH DE
7348 C5            PUSH BC
7349 CDF170        CALL FNSIN
734C CD0470        CALL OPMLF
734F CD1C70        CALL OPSBF
7352 C1            POP BC
7353 D1            POP DE
7354 CDD205        CALL 05D2H
7357 CD8300        CALL 0083H
735A 7B            LD A,E
735B 320774        LD (ADRRET),A
735E C1            POP BC
735F D1            POP DE
7360 CDD205        CALL 05D2H
7363 CD8300        CALL 0083H
7366 3A0774        LD A,(ADRRET)
7369 67            LD H,A
736A 6B            LD L,E
736B CD4670        CALL SETPOINT
                ; next x
736E C1            POP BC
736F D1            POP DE
7370 210974        LD HL,TMPFL1
7373 70            LD (HL),B
7374 23            INC HL
7375 71            LD (HL),C
7376 79            LD A,C
7377 E680          AND 128
7379 321D74        LD (SGNPAS),A
737C 23            INC HL
737D 72            LD (HL),D
737E 23            INC HL
737F 73            LD (HL),E
7380 C1            POP BC
7381 D1            POP DE
7382 210D74        LD HL,TMPFL2
7385 70            LD (HL),B
7386 23            INC HL
7387 71            LD (HL),C
7388 23            INC HL
7389 72            LD (HL),D
738A 23            INC HL
738B 73            LD (HL),E
738C 21FF73        LD HL,_X
738F 46            LD B,(HL)
7390 23            INC HL
7391 4E            LD C,(HL)
7392 23            INC HL
7393 56            LD D,(HL)
7394 23            INC HL
7395 5E            LD E,(HL)
7396 CDD205        CALL 05D2H
7399 210974        LD HL,TMPFL1
739C 46            LD B,(HL)
739D 23            INC HL
739E 4E            LD C,(HL)
739F 23            INC HL
73A0 56            LD D,(HL)
73A1 23            INC HL
73A2 5E            LD E,(HL)
73A3 CD1003        CALL 0310H
73A6 CDDD05        CALL 05DDH
73A9 21FF73        LD HL,_X
73AC 70            LD (HL),B
73AD 23            INC HL
73AE 71            LD (HL),C
73AF 23            INC HL
73B0 72            LD (HL),D
73B1 23            INC HL
73B2 73            LD (HL),E
73B3 210D74        LD HL,TMPFL2
73B6 46            LD B,(HL)
73B7 23            INC HL
73B8 4E            LD C,(HL)
73B9 23            INC HL
73BA 56            LD D,(HL)
73BB 23            INC HL
73BC 5E            LD E,(HL)
73BD CD0A06        CALL 060AH
73C0 321E74        LD (SGNCMP),A
73C3 210D74        LD HL,TMPFL2
73C6 46            LD B,(HL)
73C7 23            INC HL
73C8 4E            LD C,(HL)
73C9 23            INC HL
73CA 56            LD D,(HL)
73CB 23            INC HL
73CC 5E            LD E,(HL)
73CD D5            PUSH DE
73CE C5            PUSH BC
73CF 210974        LD HL,TMPFL1
73D2 46            LD B,(HL)
73D3 23            INC HL
73D4 4E            LD C,(HL)
73D5 23            INC HL
73D6 56            LD D,(HL)
73D7 23            INC HL
73D8 5E            LD E,(HL)
73D9 D5            PUSH DE
73DA C5            PUSH BC
73DB 3A1D74        LD A,(SGNPAS)
73DE FE00          CP 0
73E0 280A          JR Z,$ + 12
73E2 3A1E74        LD A,(SGNCMP)
73E5 FEFF          CP 255
73E7 280D          JR Z,$ + 15
73E9 C21573        JP NZ,__FOR3
73EC 3A1E74        LD A,(SGNCMP)
73EF FE01          CP 1
73F1 2803          JR Z,$ + 5
73F3 C21573        JP NZ,__FOR3
73F6 C1            POP BC
73F7 D1            POP DE
73F8 C1            POP BC
73F9 D1            POP DE
                ; display
73FA CD8E0F        CALL 0F8EH
73FD E1         END POP HL
73FE C9            RET
73FF 00000000   _X DB 0,0,0,0
7403 00000000   _Y DB 0,0,0,0
7407 0000       ADRRET DB 0,0
7409 00000000   TMPFL1 DB 0,0,0,0
740D 00000000   TMPFL2 DB 0,0,0,0
7411 00000000   TMPFL3 DB 0,0,0,0
7415 00000000   TMPFL4 DB 0,0,0,0
7419 00000000   TMPFL5 DB 0,0,0,0
741D 00         SGNPAS DB 0
741E 00         SGNCMP DB 0
Le source généré pour charger et lancer le code machine:

Code : Tout sélectionner

10 REM COMPILATION PAR B5000
20 CLEAR 255,28671
30 LET A=28672
40 FOR I=0 TO 1054:READ D:POKE A+I,D:NEXT I
50 CALL &"7000"
100 DATA 229,195,7,113,225,34,7,116,193,209
110 DATA 205,210,5,193,209,205,122,4,205,221
120 DATA 5,213,197,42,7,116,229,201,225,34
130 DATA 7,116,193,209,205,210,5,193,209,205
140 DATA 13,3,205,221,5,213,197,42,7,116
150 DATA 229,201,225,34,7,116,33,31,116,205
160 DATA 170,54,205,155,38,42,7,116,229,201
170 DATA 229,197,245,213,124,205,146,112,87,125
180 DATA 31,95,125,230,1,71,124,146,146,146
190 DATA 135,128,183,71,62,1,40,3,23,16
200 DATA 253,245,66,75,38,80,88,205,229,112
210 DATA 121,135,6,0,79,9,1,0,64,9
220 DATA 68,77,3,10,203,127,40,5,126,203
230 DATA 127,40,2,62,64,209,178,119,62,224
240 DATA 2,209,241,193,225,201,217,33,157,112
250 DATA 6,0,79,9,126,217,201,0,0,0
260 DATA 1,1,1,2,2,2,3,3,3,4
270 DATA 4,4,5,5,5,6,6,6,7,7
280 DATA 7,8,8,8,9,9,9,10,10,10
290 DATA 11,11,11,12,12,12,13,13,13,14
300 DATA 14,14,15,15,15,16,16,16,17,17
310 DATA 17,18,18,18,19,19,19,20,20,20
320 DATA 21,21,21,22,22,22,23,23,23,22
330 DATA 0,106,6,8,41,48,1,25,16,250
340 DATA 201,225,34,7,116,193,209,205,210,5
350 DATA 205,132,9,205,221,5,213,197,42,7
360 DATA 116,229,201,0,30,6,22,0,213,30
370 DATA 0,22,0,209,205,158,0,33,31,116
380 DATA 62,89,119,35,62,61,119,35,62,83
390 DATA 119,35,62,73,119,35,62,78,119,35
400 DATA 62,40,119,35,62,88,119,35,62,41
410 DATA 119,35,175,119,205,52,112,1,0,2
420 DATA 17,0,0,33,255,115,112,35,113,35
430 DATA 114,35,115,1,24,135,17,0,0,213
440 DATA 197,1,0,129,17,0,0,213,197,0
450 DATA 33,255,115,70,35,78,35,86,35,94
460 DATA 213,197,1,20,134,17,0,0,205,210
470 DATA 5,205,131,0,123,50,7,116,193,209
480 DATA 205,210,5,205,131,0,58,7,116,103
490 DATA 107,205,70,112,193,209,33,9,116,112
500 DATA 35,113,121,230,128,50,29,116,35,114
510 DATA 35,115,193,209,33,13,116,112,35,113
520 DATA 35,114,35,115,33,255,115,70,35,78
530 DATA 35,86,35,94,205,210,5,33,9,116
540 DATA 70,35,78,35,86,35,94,205,16,3
550 DATA 205,221,5,33,255,115,112,35,113,35
560 DATA 114,35,115,33,13,116,70,35,78,35
570 DATA 86,35,94,205,10,6,50,30,116,33
580 DATA 13,116,70,35,78,35,86,35,94,213
590 DATA 197,33,9,116,70,35,78,35,86,35
600 DATA 94,213,197,58,29,116,254,0,40,10
610 DATA 58,30,116,254,255,40,13,194,93,113
620 DATA 58,30,116,254,1,40,3,194,93,113
630 DATA 193,209,193,209,205,142,15,1,0,2
640 DATA 17,0,0,33,3,116,112,35,113,35
650 DATA 114,35,115,1,12,135,17,0,0,213
660 DATA 197,1,0,129,17,0,0,213,197,0
670 DATA 1,0,2,17,0,0,213,197,33,3
680 DATA 116,70,35,78,35,86,35,94,205,210
690 DATA 5,205,131,0,123,50,7,116,193,209
700 DATA 205,210,5,205,131,0,58,7,116,103
710 DATA 107,205,70,112,193,209,33,9,116,112
720 DATA 35,113,121,230,128,50,29,116,35,114
730 DATA 35,115,193,209,33,13,116,112,35,113
740 DATA 35,114,35,115,33,3,116,70,35,78
750 DATA 35,86,35,94,205,210,5,33,9,116
760 DATA 70,35,78,35,86,35,94,205,16,3
770 DATA 205,221,5,33,3,116,112,35,113,35
780 DATA 114,35,115,33,13,116,70,35,78,35
790 DATA 86,35,94,205,10,6,50,30,116,33
800 DATA 13,116,70,35,78,35,86,35,94,213
810 DATA 197,33,9,116,70,35,78,35,86,35
820 DATA 94,213,197,58,29,116,254,0,40,10
830 DATA 58,30,116,254,255,40,13,194,57,114
840 DATA 58,30,116,254,1,40,3,194,57,114
850 DATA 193,209,193,209,205,142,15,1,0,2
860 DATA 17,0,0,33,255,115,112,35,113,35
870 DATA 114,35,115,1,0,132,17,0,0,213
880 DATA 197,1,76,125,17,205,204,213,197,0
890 DATA 33,255,115,70,35,78,35,86,35,94
900 DATA 213,197,1,32,132,17,0,0,213,197
910 DATA 205,4,112,1,20,134,17,0,0,213
920 DATA 197,1,4,134,17,0,0,213,197,33
930 DATA 255,115,70,35,78,35,86,35,94,213
940 DATA 197,205,241,112,205,4,112,205,28,112
950 DATA 193,209,205,210,5,205,131,0,123,50
960 DATA 7,116,193,209,205,210,5,205,131,0
970 DATA 58,7,116,103,107,205,70,112,193,209
980 DATA 33,9,116,112,35,113,121,230,128,50
990 DATA 29,116,35,114,35,115,193,209,33,13
1000 DATA 116,112,35,113,35,114,35,115,33,255
1010 DATA 115,70,35,78,35,86,35,94,205,210
1020 DATA 5,33,9,116,70,35,78,35,86,35
1030 DATA 94,205,16,3,205,221,5,33,255,115
1040 DATA 112,35,113,35,114,35,115,33,13,116
1050 DATA 70,35,78,35,86,35,94,205,10,6
1060 DATA 50,30,116,33,13,116,70,35,78,35
1070 DATA 86,35,94,213,197,33,9,116,70,35
1080 DATA 78,35,86,35,94,213,197,58,29,116
1090 DATA 254,0,40,10,58,30,116,254,255,40
1100 DATA 13,194,21,115,58,30,116,254,1,40
1110 DATA 3,194,21,115,193,209,193,209,205,142
1120 DATA 15,225,201,0,0,0,0,0,0,0
1130 DATA 0,0,0,0,0,0,0,0,0,0
1140 DATA 0,0,0,0,0,0,0,0,0,0
1150 DATA 0,0,0,0,0
Et enfin le résultat sur l'émulateur de Daniel Coulom:
Image
Tout seul, on va plus vite. Ensemble, on va plus loin.
https://panoramic.1fr1.net/
Avatar de l’utilisateur
Leraptor06
Messages : 658
Inscription : 15 févr. 2022 10:34
Localisation : Mandelieu

Re: Un compilateur Basic pour VG-5000

Message par Leraptor06 »

Bravo, un compilateur basic existait sur l'oric et je l'ignorais. Honte à moi!
Merci du travail
Jp
Avatar de l’utilisateur
Carl
Modérateur
Messages : 13232
Inscription : 08 avr. 2007 13:21
Localisation : http://www.doledujura.fr
Contact :

Re: Un compilateur Basic pour VG-5000

Message par Carl »

Bravo et très bonne initiative qui devrait relancer le développement sur VG5000 pour des utilisateurs limités au BASIC.... 8)

Carl
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 »

Excellent.

Est-ce que tu as essayé sur des listings existants pour VG5000 ? Dans ma liste des trucs à faire, j'avais un projet similaire pour essayer de voir ce que donnerait une compilation de "gros" jeux comme "La pierre philosophale". Ça me semblait un bon "benchmark".

D'après le code généré, tu te branches sur la ROM pour l'existant en commandes et en traitement de flottant, je lis bien ? Pas pour SIN() par contre qui à l'air d'appeler quelque chose qui est en $7000, avant le programme (bibliothèque qui vient avec ?).

Dis-nous tout ! (si tu le veux bien)

Et mettre POINT dans le BASIC du VG5000, forcément, c'est LE truc qui est indispensable.
OlivierV
Messages : 16
Inscription : 26 oct. 2020 14:09
Localisation : Hérault

Re: Un compilateur Basic pour VG-5000

Message par OlivierV »

C'est super!

Peut-on utiliser une version d'essai ?

En se branchant avant la partie "transformation en code BASIC" finale, il serait certainement possible de créer directement un fichier K7 avec https://github.com/ovalenti/mkk7

Utilises-tu un parseur syntaxique ? Je serais curieux de voir une grammaire du BASIC !
Markerror
Messages : 2121
Inscription : 31 oct. 2011 19:21
Localisation : Orléans
Contact :

Re: Un compilateur Basic pour VG-5000

Message par Markerror »

Décidemment, le VG 5000 suscite des vocations en ce moment ! Faire un compilateur est un chouette projet qui incitera peut-être des utilisateurs à se mettre à la programmation. Voir le machine afficher une courbe est déjà un petit miracle :-).
Neotenien
Messages : 354
Inscription : 23 oct. 2020 19:15
Localisation : Le Mans
Contact :

Re: Un compilateur Basic pour VG-5000

Message par Neotenien »

Pourquoi ne pas avoir choisi un compilateur Pascal plutôt ?

C'est un des tous meilleurs langages existant (y compris plus de 50 ans après) et les compilateur Pascal sont les plus rapide aux monde tout en produisant à la fois du code fiable, et rapide.

Sur Thomson il y a eu Speedy Wonder qui est une copie du Basic 1.2 des Amstrad et malheureusement ce compilo est une calamité avec énormément de limites (pire qu'avec Pascal Base).

Au moins en Pascal, on acquiert de bonne règles de programmation.
__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__ »

Le basic est plus universel. Regarder aussi du côté de ugbasic.
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
heightBITrulez
Messages : 20
Inscription : 14 juin 2022 16:01

Re: Un compilateur Basic pour VG-5000

Message par heightBITrulez »

Hé @panoramic , excellente nouvelle que ce compilateur basic pour Oric Atmos. Mais où peut-on le trouver ? Sur le site https://panoramic.1fr1.net/ il n'y a aucun topic à ce sujet ! Par ailleurs je n'en ai jamais lu une seule ligne et pourtant j'épluche les forum Oric. :?:
Avatar de l’utilisateur
Leraptor06
Messages : 658
Inscription : 15 févr. 2022 10:34
Localisation : Mandelieu

Re: Un compilateur Basic pour VG-5000

Message par Leraptor06 »

Merci, ça va je suis pas fou. Nada ,rien trouvé non plus pour un compilateur oric.
Jp
panoramic
Messages : 27
Inscription : 19 mai 2010 23:32

Re: Un compilateur Basic pour VG-5000

Message par panoramic »

heightBITrulez a écrit : 10 juil. 2022 19:14Par ailleurs je n'en ai jamais lu une seule ligne et pourtant j'épluche les forum Oric.
Leraptor06 a écrit : 10 juil. 2022 19:20Nada ,rien trouvé non plus pour un compilateur oric
Si, j'en ai parlé sur des forum Oric.
Par exemple ici:
https://ceo.oric.org/community/general- ... -bas_oric/
ou ici:
https://oric.forumactif.org/t855-des-no ... e-bas_oric

Mais, j'ai continué le développement de mon côté et sans présenter de version aboutie de ce compilateur pour une raison toute bête: le chargement par Oricutron du code généré est très lent (on doit attendre longtemps), puis on doit attendre ensuite le chargement du code machine en mémoire, le temps que les POKE se fassent : POKE AD,VAL("#"+MID$(CD$,I,2)):AD=AD+1). Et je n'ai jamais réussi à accélérer cette phase. Cela m'a fait renoncer et à le garder pour moi.
Tout seul, on va plus vite. Ensemble, on va plus loin.
https://panoramic.1fr1.net/
Avatar de l’utilisateur
DataPro
Messages : 2787
Inscription : 07 févr. 2011 17:03
Localisation : France - Auvergne

Re: Un compilateur Basic pour VG-5000

Message par DataPro »

Mokona a écrit : 06 juil. 2022 16:48 Excellent.

Est-ce que tu as essayé sur des listings existants pour VG5000 ? Dans ma liste des trucs à faire, j'avais un projet similaire pour essayer de voir ce que donnerait une compilation de "gros" jeux comme "La pierre philosophale". Ça me semblait un bon "benchmark".
Si j'ai bien compris, le BASIC proposé en entrée n'est pas celui du VG5000µ donc il y aurait une conversion à faire.
https://panoramic-language.pagesperso-o ... index.html
Recherche: cartouches Mattel Intellivision Imagic (loose)
Star Jacker et Lode Runner sur Yeno/SEGA SC-3000
Avatar de l’utilisateur
DataPro
Messages : 2787
Inscription : 07 févr. 2011 17:03
Localisation : France - Auvergne

Re: Un compilateur Basic pour VG-5000

Message par DataPro »

J'aurai bien quelques questions.

Je vois que la commande POINT peut tracer de 0 à 74
Cela veut-il dire que l'écran du VG5000µ n'est pas utilisable complètement ? Il me semble que la résolution est de 320x250

Y'a-t-il des instructions pour le son et pour les sprites ?
viewtopic.php?t=9389
Recherche: cartouches Mattel Intellivision Imagic (loose)
Star Jacker et Lode Runner sur Yeno/SEGA SC-3000
__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__ »

D’après le programme basic, le 74 (76) c’est pour l’axe des abcisses. La courbe elle est plotée de 0 à 80 et dépasse l’axe sur la photo. On peut donc compter sur une définition graphique du plot de 80x75, soit un point de plot représentant un carré de 4x3 ou 4x2 pixels écran suivant sa position en y (un caractère de 8x10 permet d’afficher 6 pixels indépendants).
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
Carl
Modérateur
Messages : 13232
Inscription : 08 avr. 2007 13:21
Localisation : http://www.doledujura.fr
Contact :

Re: Un compilateur Basic pour VG-5000

Message par Carl »

Il me semble que la résolution est de 320x250
c'est un argument marketing car pas de mode bitmap...
en réalité, c'est 40 colonnes x 25 lignes...avec un caractère de 8x10 et au final : (40*8) x (25*10) ou 320x250, c'est des petits malins chez Philips... :roll:

Carl
Répondre