it regularly difficult to spot, aside from maybe by a genuine Rolex replica history specialist, in light of the fact that the best phony Rolex are 95% made by Rolex. If you want to know how often you should optimally be winding your rolex replica watch, Click Here.

Des nouvelles de BA...
 
Notifications
Retirer tout

Des nouvelles de BAS_ORIC

4 Posts
4 Utilisateurs
4 Reactions
2,658 Vu
codeur
(@codeur)
New Member
Inscription: Il y a 5 ans
Posts: 3
Début du sujet  

En ces temps de confinement, le compilateur BAS_ORIC avance.
J'ai codé les entiers sur 2 octets, de -32768 à 32767, une bibliothèque arithmétique, quelques commandes graphiques (HIRES, CURSET, CURMOV, CIRCLE,…), le GOTO, le GOSUB/RETURN et j'ai commencé à coder le IF/THEN/ELSE.

J'ai eu envie de voir quelle était sa vitesse d'exécution.

Pour cela, j'ai effectué le programme suivant qui remplit l'écran de points espacés de 5 pixels:

10 HIRES
20 X%=0:Y%=0
30 CURSET X%,Y%,1
40 X%=X%+5
50 IF X%<>240 THEN GOTO 30
60 X%=0:Y%=Y%+5
70 IF Y%<>200 THEN GOTO 30
80 END

Je l'ai fait exécuter directement sur Oricutron, cela donne une idée de l'exécution de l'interpréteur intégré à l'ORIC.

Le même source dans BAS_ORIC est le suivant:

DIM X%,Y%
LABEL BOUCLE
HIRES
X%=0:Y%=0
BOUCLE:
CURSET X%,Y%,1
X%=X%+5
IF X%<>240 THEN GOTO BOUCLE
X%=0:Y%=Y%+5
IF Y%<>200 THEN GOTO BOUCLE
END

On peut remarquer:
- qu'il faut déclarer les variables par DIM
- qu'il n'y a pas de numéros de ligne et que pour faire un GOTO, il faut au préalable avoir déclaré un LABEL (ici BOUCLE).

Ce source, une fois compilé et assemblé donne:

33588  8334   --- début du code
33588  8334   --- DIM X%,Y%
33588  8334   --- LABEL BOUCLE
33588  8334   --- HIRES
33588  8334         20 33 EC               JSR $EC33
33591  8337   --- X%=0
33591  8337         A9 00                  LDA #0
33593  8339         48                     PHA
33594  833A         A9 00                  LDA #0
33596  833C         A2 00                  LDX #0
33598  833E         9D 23 84               SAX X
33601  8341         68                     PLA
33602  8342         E8                     INX
33603  8343         9D 23 84               SAX X
33606  8346   --- Y%=0
33606  8346         A9 00                  LDA #0
33608  8348         48                     PHA
33609  8349         A9 00                  LDA #0
33611  834B         A2 00                  LDX #0
33613  834D         9D 25 84               SAX Y
33616  8350         68                     PLA
33617  8351         E8                     INX
33618  8352         9D 25 84               SAX Y
33621  8355   --- BOUCLE:
33621  8355         EA          BOUCLE     NOP
33622  8356   --- CURSET X%,Y%,1
33622  8356         A2 01                  LDX #1
33624  8358         BD 23 84               LAX X
33627  835B         48                     PHA
33628  835C         CA                     DEX
33629  835D         BD 23 84               LAX X
33632  8360         48                     PHA
33633  8361         A2 01                  LDX #1
33635  8363         BD 25 84               LAX Y
33638  8366         48                     PHA
33639  8367         CA                     DEX
33640  8368         BD 25 84               LAX Y
33643  836B         48                     PHA
33644  836C         A9 01                  LDA #1
33646  836E         48                     PHA
33647  836F         A9 00                  LDA #0
33649  8371         8D E6 02               STA $02E6
33652  8374         68                     PLA
33653  8375         8D E5 02               STA $02E5
33656  8378         68                     PLA
33657  8379         8D E4 02               STA $02E4
33660  837C         68                     PLA
33661  837D         8D E3 02               STA $02E3
33664  8380         68                     PLA
33665  8381         8D E2 02               STA $02E2
33668  8384         68                     PLA
33669  8385         8D E1 02               STA $02E1
33672  8388         20 C8 F0               JSR $F0C8
33675  838B   --- X%=X%+5
33675  838B         A2 01                  LDX #1
33677  838D         BD 23 84               LAX X
33680  8390         48                     PHA
33681  8391         CA                     DEX
33682  8392         BD 23 84               LAX X
33685  8395         48                     PHA
33686  8396         A9 05                  LDA #5
33688  8398         48                     PHA
33689  8399         A9 00                  LDA #0
33691  839B         48                     PHA
33692  839C         20 10 80               JSR =OPADD
33695  839F         68                     PLA
33696  83A0         A2 00                  LDX #0
33698  83A2         9D 23 84               SAX X
33701  83A5         68                     PLA
33702  83A6         E8                     INX
33703  83A7         9D 23 84               SAX X
33706  83AA   --- IF X%<>240
33706  83AA         A2 01                  LDX #1
33708  83AC         BD 23 84               LAX X
33711  83AF         48                     PHA
33712  83B0         CA                     DEX
33713  83B1         BD 23 84               LAX X
33716  83B4         48                     PHA
33717  83B5         A9 F0                  LDA #240
33719  83B7         48                     PHA
33720  83B8         A9 00                  LDA #0
33722  83BA         48                     PHA
33723  83BB         20 45 80               JSR =OPSUB
33726  83BE         68                     PLA
33727  83BF         A8                     TAY
33728  83C0         68                     PLA
33729  83C1         AA                     TAX
33730  83C2         C0 00                  CPY #0
33732  83C4         D0 04                  BNE #4
33734  83C6         E0 00                  CPX #0
33736  83C8         F0 03                  BEQ =ENDIF1
33738  83CA   --- GOTO BOUCLE
33738  83CA         4C 55 83               JMP BOUCLE
33741  83CD   --- END_IF
33741  83CD   --- X%=0
33741  83CD         EA          =ENDIF1    NOP
33742  83CE         A9 00                  LDA #0
33744  83D0         48                     PHA
33745  83D1         A9 00                  LDA #0
33747  83D3         A2 00                  LDX #0
33749  83D5         9D 23 84               SAX X
33752  83D8         68                     PLA
33753  83D9         E8                     INX
33754  83DA         9D 23 84               SAX X
33757  83DD   --- Y%=Y%+5
33757  83DD         A2 01                  LDX #1
33759  83DF         BD 25 84               LAX Y
33762  83E2         48                     PHA
33763  83E3         CA                     DEX
33764  83E4         BD 25 84               LAX Y
33767  83E7         48                     PHA
33768  83E8         A9 05                  LDA #5
33770  83EA         48                     PHA
33771  83EB         A9 00                  LDA #0
33773  83ED         48                     PHA
33774  83EE         20 10 80               JSR =OPADD
33777  83F1         68                     PLA
33778  83F2         A2 00                  LDX #0
33780  83F4         9D 25 84               SAX Y
33783  83F7         68                     PLA
33784  83F8         E8                     INX
33785  83F9         9D 25 84               SAX Y
33788  83FC   --- IF Y%<>200
33788  83FC         A2 01                  LDX #1
33790  83FE         BD 25 84               LAX Y
33793  8401         48                     PHA
33794  8402         CA                     DEX
33795  8403         BD 25 84               LAX Y
33798  8406         48                     PHA
33799  8407         A9 C8                  LDA #200
33801  8409         48                     PHA
33802  840A         A9 00                  LDA #0
33804  840C         48                     PHA
33805  840D         20 45 80               JSR =OPSUB
33808  8410         68                     PLA
33809  8411         A8                     TAY
33810  8412         68                     PLA
33811  8413         AA                     TAX
33812  8414         C0 00                  CPY #0
33814  8416         D0 04                  BNE #4
33816  8418         E0 00                  CPX #0
33818  841A         F0 03                  BEQ =ENDIF2
33820  841C   --- GOTO BOUCLE
33820  841C         4C 55 83               JMP BOUCLE
33823  841F   --- END_IF
33823  841F   --- END
33823  841F         EA          =ENDIF2    NOP
33824  8420         60                     RTS
33825  8421   --- déclaration des variables
33825  8421         EA          =DEBSTR    NOP
33826  8422         EA          =FINSTR    NOP
33827  8423         EA          X          NOP
33828  8424         EA                     NOP
33829  8425         EA          Y          NOP
33830  8426         EA                     NOP
-----> OK     Date=13/04/2020   Time=10:48:04
-----> with BAS_ORIC Release 13/04/2020
-----> compiled using integer configuration

On peut remarquer que pour l'assembleur "maison" qui est intégré dans BAS_ORIC, j'ai fait en sorte que tous les mnémoniques tiennent sur 3 caractères.
Ainsi:
LAX $ABCD signifie LDA $ABCD,X
SAX $ABCD signifie STA $ABCD,X
De même,
LAY $ABCD signifie LDA $ABCD,Y
SAY $ABCD signifie STA $ABCD,Y

 

BAS_ORIC génère également un source BASIC qui permet de lancer le code binaire généré:

100 HIMEM 32767
110 GOSUB 120:CLS:INPUT A:CALL #8000:END
120 AD=32768:READ CD$
130 REPEAT
140 FOR I=1 TO LEN(CD$) STEP 2
150 POKE AD,VAL("#"+MID$(CD$,I,2)):AD=AD+1
160 NEXT I
170 READ CD$
180 UNTIL CD$="END"
190 RETURN
200 DATA "4C2783EAEAEAEAEAEAEAEAEA"
210 DATA "EAEAEAEAA9018D0F80688D0C"
220 DATA "80688D0D80688D0380688D04"
230 DATA "80688D0580688D068018AD06"
240 DATA "806D048048AD05806D038048"
250 DATA "AD0D8048AD0C804860A9028D"
260 DATA "0F80688D0C80688D0D80688D"
270 DATA "0380688D0480688D0580688D"
280 DATA "068038AD0680ED048048AD05"
290 DATA "80ED038048AD0D8048AD0C80"
300 DATA "4860A9038D0F80688D0C8068"
310 DATA "8D0D80688D0380688D048068"
320 DATA "8D0580688D0680A9008D0780"
330 DATA "8D0880186E03806E04809013"
340 DATA "18AD06806D08808D0880AD05"
350 DATA "806D07808D0780182E06802E"
360 DATA "0580AD0380C900D0D6AD0480"
370 DATA "C900D0CFAD088048AD078048"
380 DATA "AD0D8048AD0C804860A9048D"
390 DATA "0F80688D0C80688D0D80688D"
400 DATA "0380688D0480688D0580688D"
410 DATA "0680A9008D07808D08808D09"
420 DATA "808D0A808D0B80AD05801019"
430 DATA "38A900ED06808D0680A900ED"
440 DATA "05808D0580AD0B8049FF8D0B"
450 DATA "80AD0380101938A900ED0480"
460 DATA "8D0480A900ED03808D0380AD"
470 DATA "0B8049FF8D0B80A210182E06"
480 DATA "802E05802E0A802E098038AD"
490 DATA "0A80ED04808D0A80AD0980ED"
500 DATA "03808D0980101D182E08802E"
510 DATA "078018AD0A806D04808D0A80"
520 DATA "AD09806D03808D0980189007"
530 DATA "382E08802E0780CAE000D0B5"
540 DATA "AD0B80101138A900ED08808D"
550 DATA "0880A900ED07808D0780AD08"
560 DATA "8048AD078048AD0D8048AD0C"
570 DATA "804860688D0C80688D0D8068"
580 DATA "A8B92784F008AA207CF7C84C"
590 DATA "C981AD0D8048AD0C80486068"
600 DATA "8D0C80688D0D8068AA68A88A"
610 DATA "2099D420D5E0AE0001207CF7"
620 DATA "AE0101F023207CF7AE0201F0"
630 DATA "1B207CF7AE0301F013207CF7"
640 DATA "AE0401F00B207CF7AE0501F0"
650 DATA "03207CF7AD0D8048AD0C8048"
660 DATA "60AE0380F007CACABD2784F0"
670 DATA "0160AE03808AA888A9018D05"
680 DATA "80BD2784F008992784E8C84C"
690 DATA "4182CE0380CAA9009D27844C"
700 DATA "2982A200E88E0480BD2184F0"
710 DATA "F7C9FFF0178D0380A9008D05"
720 DATA "80202982AE0480AD03809D21"
730 DATA "844C5C82AD0580D0D560A001"
740 DATA "B92784F00CC8B92784D0FAC8"
750 DATA "B92784D0F460AD0480AABD27"
760 DATA "84F008992784E8C84C9E8260"
770 DATA "688D0C80688D0D80688D0380"
780 DATA "688D0480F019AD0380F01C20"
790 DATA "86829848209A82AD03808D04"
800 DATA "80209A824CE482AC03809848"
810 DATA "4CE482AC04809848AD0D8048"
820 DATA "AD0C804860688D0C80688D0D"
830 DATA "80688D0380688D0480CD0380"
840 DATA "F018AD0380F013AC0380A900"
850 DATA "992784C8B92784F005A9004C"
860 DATA "0C83AD048048AD0D8048AD0C"
870 DATA "804860A078A90099278488D0"
880 DATA "FA8D0E802033ECA90048A900"
890 DATA "A2009D238468E89D2384A900"
900 DATA "48A900A2009D258468E89D25"
910 DATA "84EAA201BD238448CABD2384"
920 DATA "48A201BD258448CABD258448"
930 DATA "A90148A9008DE602688DE502"
940 DATA "688DE402688DE302688DE202"
950 DATA "688DE10220C8F0A201BD2384"
960 DATA "48CABD238448A90548A90048"
970 DATA "20108068A2009D238468E89D"
980 DATA "2384A201BD238448CABD2384"
990 DATA "48A9F048A9004820458068A8"
1000 DATA "68AAC000D004E000F0034C55"
1010 DATA "83EAA90048A900A2009D2384"
1020 DATA "68E89D2384A201BD258448CA"
1030 DATA "BD258448A90548A900482010"
1040 DATA "8068A2009D258468E89D2584"
1050 DATA "A201BD258448CABD258448A9"
1060 DATA "C848A9004820458068A868AA"
1070 DATA "C000D004E000F0034C5583EA"
1080 DATA "60EAEAEAEAEAEAEAEAEAEAEA"
1090 DATA "EAEAEAEAEAEAEAEAEAEAEAEA"
1100 DATA "EAEAEAEAEAEAEAEAEAEAEAEA"
1110 DATA "EAEAEAEAEAEAEAEAEAEAEAEA"
1120 DATA "EAEAEAEAEAEAEAEAEAEAEAEA"
1130 DATA "EAEAEAEAEAEAEAEAEAEAEAEA"
1140 DATA "EAEAEAEAEAEAEAEAEAEAEAEA"
1150 DATA "EAEAEAEAEAEAEAEAEAEAEAEA"
1160 DATA "EAEAEAEAEAEAEAEAEAEAEAEA"
1170 DATA "EAEAEAEAEAEAEAEAEAEAEAEA"
1180 DATA "EAEAEAEAEAEAEAEA","END"

Voici le fichier tap correspondant à ce "lanceur":
http://panoramic-language.pagesperso-orange.fr/Reference/IQUADRILL3.tap

On constate que son exécution est beaucoup plus rapide qu'avec l'interpréteur intégré.
C'était le but.
A bientôt pour de nouvelles aventures.


   
colive, colive, colive and 1 people reacted
Citation
Moonchild
(@moonchild)
Eminent Member
Inscription: Il y a 5 ans
Posts: 21
 

Bravo, c'est impressionnant. Mais je n'arrive pas à lancer le tap avec oricutron. Une fois chargé il ne se passe rien.

Du coup j'ai copié le source du lanceur dans Oricutron et en effet c'est beaucoup plus rapide à l'exécution.

👍


   
RépondreCitation
JiBe
 JiBe
(@jibe)
Estimable Member
Inscription: Il y a 5 ans
Posts: 126
 

Je n'ai pas essayé de faire fonctionner mais j'ai lu la description du principe et je trouve ça très intéressant.

Ce langage est proche du basic traditionnel de l'Oric mais comme il est compilé plutôt qu'interprété, il va offrir un niveau de performance plus proche de celui du C ou de l'assembleur.

Comme il existe un bon nombre de sources en Basic et qu'il y a des codeurs dans ce langage, ça peut permettre d'accélérer les performances de certains anciens jeux et augmenter la puissance des nouvelles productions.

Personnellement je ne code pas beaucoup en BASIC .. donc je ne me sens pas concerné au premier abord .. mais par contre .. si ce BASIC peut permettre de partager des routines ASM et/ou C pour les rendre accessibles aux codeurs en BASIC .. ca m'intéresserait au plus haut point.

Bravo pour ce langage .. c'est vraiment une bonne idée. Selon moi le potentiel pour la communauté Oric est déjà énorme. 

S'il pouvait y avoir, en cerise sur le gâteau, un interfaçage avec des routines précompilées écrites en C ou en assembleur .. alors là .. ma ma mia .. 


   
RépondreCitation
rijiji
(@rijiji)
Trusted Member Adhérent
Inscription: Il y a 5 ans
Posts: 62
 

je viens de faire 2 petits test sur un Atmos et je suis sur le C*L

programme en basic                  ---> 41 secondes pour remplir l'écran.

avec le  compilateur BAS_ORIC  ---> 4 secondes

 trop fort

J ai hate de voir la suite

😜

1586878810-Oric.jpg

   
RépondreCitation
Share: