π
<-

Jade - un projet de Xeda...

Assembleur, Axe, C/C++, ICE...

Jade - un projet de Xeda...

Postby Lionel Debroux » 11 Mar 2013, 18:03

Xeda, qu'on ne présente plus, travaille actuellement, en plus de tous ses autres projets, sur "Jade" :)

Jade (dont la deuxième version est ici décrite) est une plate-forme simulée de sa création, qui n'existe pas dans le monde réel, dont le simulateur pour la famille 83+/84+ s'occupe d'un CPU et quelques ports matériels. Jade fournit 256 octets de RAM et 512 octets de code (ROM).
Contrairement à la plupart des CPUs, Jade n'a pas de vrais registres processeur: ils sont mappés en RAM. Les 53 premiers octets de la RAM contiennent les registres (SP, PC, etc.) et les ports; les 128 derniers octets sont alloués à une pile, mais il n'y a pas de danger à utiliser une partie de cet espace comme mémoire de stockage si on n'utilise pas l'intégralité des 128 octets de la pile.

Liste des ports matériels:
* 8 jeux de 5 ports qui contrôlent les sprites: pointeur vers le sprite, coordonnées, méthode de dessin;
* 7 ports pour les pressions de touches;
* 1 port pour sélectionner la liste des sprites qui sont dessinés;
* 1 port pour lire la liste des sprites qui ont été dessinés;
* 1 port pour sélectionner la liste des touches scannées par le simulateur;
* 1 port pour quitter Jade ou activer la mise à jour de l'écran;
* 1 pointeur de pile (SP);
* 1 compteur de programme (PC), utilisant 2 octets.

Le jeu d'instructions est inspiré d'un sous-ensemble du jeu Z80, toutes les instructions peuvent être optionnellement exécutées si les flags C et Z du processeur sont à 1:
Code: Select all
   0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F
0   lda()   adda()   adca()   suba()   sbca()   xora()   ora()   anda()   cpa()   inc()   rotl()   shftl()   pusha()   pop()   inv()   ldira()
1   ldc()   addc()   adcc()   subc()   sbcc()   xorc()   orc()   andc()   cpc()   dec()   rotr()   shftr()   pushc()   ex()   bits()   ldirc()
2   ret()   setz()   setc()   togz()   togc()   jp1()   jp2()   jrf()   jrb()   call1()   call2()   callf()   callb()
3
;Duplicate for execution on the c flag condition
4x,5x,6x,7x
;Duplicate for execution on the z flag condition
8x,9x,Ax,Bx
;<not implemented>
Cx,Dx,Ex,Fx


lda() charge un octet d'une adresse vers une autre.
ldc() stocke une valeur constante à une adresse.
jp1(), jp2(), call1(), and call2() permettent des sauts et appels relatifs et absolus.

L'état actuel du code est tout à fait utilisable, bien que Xeda indique que la documentation est faible:
Image
Téléchargement première version de Jade v2: http://www.omnimaga.org/index.php?actio ... tach=14836
Plus d'infos sur la programmation en Jade (fichier Jade.inc + code source du programme exemple): http://www.omnimaga.org/index.php?topic ... #msg287207

Source: http://www.omnimaga.org/index.php?topic=15832.0 / http://www.cemetech.net/forum/viewtopic.php?t=8895
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
User avatar
Lionel DebrouxSuper Modo
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 11.4%
 
Posts: 6875
Joined: 23 Dec 2009, 00:00
Location: France
Gender: Male
Calculator(s):
MyCalcs profile
Class: -
GitHub: debrouxl

Re: Jade - un projet de Xeda...

Postby Xeda E. » 11 Mar 2013, 22:57

Merci beaucoup, Lionel Debroux! J'ai trouvé deux bugs, mais je leur ai fixés, et aussi, j'ai commencé le jeu Pong.
JadePongEx0.gif

Et le code:
Code: Select all
#include     "ti83plus.inc"
#include     "Jade.inc"
.org 0
scratchmath  equ  252
scratchmath1 equ  253
ballxinc     equ  254
ballyinc     equ  255

Start:
     ldirc(sLSB0,25)
       .dw $100+ball \ .db 3,3,2  ;load the sprite data for Sprite0. The 2 is for XOR logic.
       .dw $100+paddle \ .db 0,24,2  ;load the sprite data for Sprite0. The 2 is for XOR logic.
       .dw $100+paddle \ .db 0,32,2  ;load the sprite data for Sprite0. The 2 is for XOR logic.
       .dw $100+paddle \ .db 94,24,2  ;load the sprite data for Sprite0. The 2 is for XOR logic.
       .dw $100+paddle \ .db 94,32,2  ;load the sprite data for Sprite0. The 2 is for XOR logic.
     ldirc(keyMask,2)
       .db %00010110,31              ;the second byte is for sMask (the sprite mask)
     ldc(ballxinc,1)
     ldc(ballyinc,1)
Loop:
     orc(status,2)      ;tell the status port to draw the sprites
     orc(status,3)      ;tell the status port to update the LCD, then draw the sprites
KeyLoop:
     bits(key1,40h)     ;check for the Clear key being pressed
     orcz(status,80h)   ;sets bit 7 of the status port if the z flag is set. This turns off Jade.
     bits(key2,2)       ;check if player 2 down key is being pressed
     togz()
     jrfz(TestP2Up)
     cpc(sY3,48)
     jrfz(TestP2Up)
     addc(sY3,2)
     addc(sY4,2)
TestP2Up:
     bits(key2,8)       ;check if player 2 down key is being pressed
     togz()
     jrfz(TestP1Down)
     cpc(sY3,0)
     jrfz(TestP1Down)
     subc(sY3,2)
     subc(sY4,2)
TestP1Down:
     bits(key4,2)       ;check if player 2 down key is being pressed
     togz()
     jrfz(TestP1Up)
     cpc(sY1,48)
     jrfz(TestP1Up)
     addc(sY1,2)
     addc(sY2,2)
TestP1Up:
     bits(key4,8)       ;check if player 2 down key is being pressed
     togz()
     jrfz(MoveBall)
     cpc(sY1,0)
     jrfz(MoveBall)
     subc(sY1,2)
     subc(sY2,2)
MoveBall:
     adda(sX0,ballxinc)
     callfz(TestP1Collision)
     cpc(sX0,89)
     callfz(TestP2Collision)
     adda(sY0,ballyinc)
     jrfz(NegYinc)
     cpc(sY0,60)
     togz()
     jrbz(Loop)
NegYinc:
     inv(ballyinc)
     inc(ballyinc)
     jrb(loop)

TestP1Collision:
     lda(scratchmath,sY1)
     jrf(CheckBounds)
TestP2Collision:
     lda(scratchmath,sY3)
CheckBounds:
     lda(scratchmath1,scratchmath)
     subc(scratchmath,3)
     ldcc(scratchmath,0)
     suba(scratchmath,sY0)
     jrfc(CheckOtherBound)
LoseCode:
     ldc(status,80h)
CheckOtherBound:
     addc(scratchmath1,15)
     suba(scratchmath1,sY0)
     jrbc(LoseCode)
NegXinc:
     inv(ballxinc)
     inc(ballxinc)     
     ret()
     
ball:
     .db 18h
     .db 24h
     .db 24h
     .db 18h
     .db 0,0,0,0
paddle:
     .db $C0
     .db $C0
     .db $C0
     .db $C0
     .db $C0
     .db $C0
     .db $C0
     .db $C0

C'est 200 octets :) Les "ROMs" peuvent rester dans archive, aussi.


Je devrai écrire la documentation pour Jade .__.
You do not have the required permissions to view the files attached to this post.
Je suis désolé pour ma grammaire ^^ Je suis une américaine >.>
User avatar
Xeda E.
Niveau 7: EP (Espèce Protégée: geek)
Niveau 7: EP (Espèce Protégée: geek)
Level up: 71.9%
 
Posts: 17
Joined: 03 Sep 2011, 05:19
Gender: Not specified
Calculator(s):
MyCalcs profile
GitHub: Zeda

Re: Jade - un projet de Xeda...

Postby Lionel Debroux » 13 Mar 2013, 20:02

L'écriture de la doc est en cours.

Jade peut être utilisé pour faire des tilemaps:
Image

Code: Select all
spriteX = stackbase-1
spriteY = stackbase-2
tilenum = stackbase-3
.org 0
     ldc(keyMask,255)
     ldirc(160,96)
;tilemap data
;drawn by column
     .db 1,1,1,1,1,1,1,1
     .db 1,0,2,2,2,2,0,1
     .db 1,0,0,2,2,0,0,1
     .db 1,0,0,0,0,0,0,1
     .db 1,0,0,0,0,0,0,1
     .db 1,0,0,0,0,0,0,1
     .db 1,0,0,0,0,0,0,1
     .db 1,0,0,0,0,0,0,1
     .db 1,0,0,0,0,0,0,1
     .db 1,0,0,2,2,0,0,1
     .db 1,0,2,2,2,2,0,1
     .db 1,1,1,1,1,1,1,1
     ldirc(sMSB0,4)
       .db 1,96,0,2
     ldc(sMask,1)
TileMap:
     ldc(sY0,64)
     subc(sX0,8)
     jrfc(Start)
TileMapLoop:
     subc(sY0,8)
     jrbc(TileMap)
     pop(tilenum)
     rotl(tilenum)
     rotl(tilenum)
     rotl(tilenum)
     addc(tilenum,tiles)
     lda(sLSB0,tilenum)
     orc(status,2)
     jrb(TileMapLoop)
tiles:
     .db 0,0,0,0,0,0,0,0
     .db 3Ch,42h,81h,81h,81h,81h,42h,3Ch
     .db 3Ch,7Eh,$FF,$FF,$FF,$FF,7Eh,3Ch     
Start:
     ldc(stackptr,0)
     orc(status,1)
     ldc(status,80h)


Source: http://www.cemetech.net/forum/viewtopic ... 768#201768
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
User avatar
Lionel DebrouxSuper Modo
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 11.4%
 
Posts: 6875
Joined: 23 Dec 2009, 00:00
Location: France
Gender: Male
Calculator(s):
MyCalcs profile
Class: -
GitHub: debrouxl

Re: Jade - un projet de Xeda...

Postby Persalteas » 15 Mar 2013, 18:06

C'est intéressant, mais quelle est la réelle utilité de ceci, si c'est si semblable aux instructions du z80 ?

A part l'enrichissement personnel, bien sur ? ;)
User avatar
PersalteasMembre UPECS
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 6.2%
 
Posts: 2337
Images: 113
Joined: 04 Feb 2010, 00:00
Location: Evry (France)
Gender: Male
Calculator(s):
MyCalcs profile
Class: PhD candidate, Bioinformatics

Re: Jade - un projet de Xeda...

Postby Hayleia » 15 Mar 2013, 19:14

P-Rex wrote:C'est intéressant, mais quelle est la réelle utilité de ceci, si c'est si semblable aux instructions du z80 ?

A part l'enrichissement personnel, bien sur ? ;)
Ça peut attirer les débutants à essayer "un ASM plus facile" avant de passer au "vrai ASM" ;)

Image
ImageImageImage
Pokemon Topaze (Axe) discussion and download links here
(19:29:36) noelnadal: plus sérieusemen​t, j'ai très peu de problèmes
(22:45:44) Clifward: J'aime rire du malheur des autres :troll:

(2017.11.18 - 17:07:12) Fireworks: Hayleia !!!!!
(2017.11.18 - 17:07:19) TI-Bot: Fireworks has been logged out (Kicked).
(2017.11.18 - 17:07:22) TI-Bot: Ban of user Fireworks revoked.
(2017.11.18 - 17:07:25) TI-Bot: Fireworks logs into the Chat.
(2017.11.18 - 17:07:28) Fireworks: <3
(2017.11.18 - 17:07:31) Fireworks: 208
User avatar
HayleiaGénéreux
Niveau 17: GM (Grand Maître des calculatrices)
Niveau 17: GM (Grand Maître des calculatrices)
Level up: 43.8%
 
Posts: 2509
Images: 2
Joined: 30 Aug 2011, 08:22
Gender: Not specified
Calculator(s):
MyCalcs profile
Class: Templar

Re: Jade - un projet de Xeda...

Postby Lionel Debroux » 15 Mar 2013, 19:34

Par exemple, oui.
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
User avatar
Lionel DebrouxSuper Modo
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 11.4%
 
Posts: 6875
Joined: 23 Dec 2009, 00:00
Location: France
Gender: Male
Calculator(s):
MyCalcs profile
Class: -
GitHub: debrouxl

Re: Jade - un projet de Xeda...

Postby mdr1 » 15 Mar 2013, 19:36

Je vois que tu as parlé de "simulateur", Lionel, faut-il donc comprendre que le langage machine Jade est converti est z80 avant d'être exécuté ?
Image ImageImage
User avatar
mdr1Premium
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 44%
 
Posts: 1083
Images: 12
Joined: 28 Mar 2011, 00:00
Gender: Not specified
Calculator(s):
MyCalcs profile
Class: Je voyage toujours en première.

Re: Jade - un projet de Xeda...

Postby Persalteas » 15 Mar 2013, 20:21

mdr1 wrote:Je vois que tu as parlé de "simulateur", Lionel, faut-il donc comprendre que le langage machine Jade est converti est z80 avant d'être exécuté ?

Ben... oui, comme tous les langages, quoi...

Que ce soit un interpréteur ou un simulateur, c'est transformé en asm z80.
Le terme "simulateur" convient mieux cependant puisque là on considère un processeur fictif.
User avatar
PersalteasMembre UPECS
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 6.2%
 
Posts: 2337
Images: 113
Joined: 04 Feb 2010, 00:00
Location: Evry (France)
Gender: Male
Calculator(s):
MyCalcs profile
Class: PhD candidate, Bioinformatics

Re: Jade - un projet de Xeda...

Postby chickendude » 14 Apr 2013, 03:14

Persalteas wrote:C'est intéressant, mais quelle est la réelle utilité de ceci, si c'est si semblable aux instructions du z80 ?
Je crois que l'idée c'est de permettre à créer et faire courir des programmes avec un langage plutôt simple et dans un environment où il est impossible de planter la calto. Aussi, vue la limite de taille des programmes, on pourrait avoir peut-être des packs de jeux qui contiennent 10 ou 15 jeux mais n'occupent que 5ko. Une autre chose : le "simulateur" fait pas mal de choses pour toi, il gère tes sprites, met à jour l'écran, lit les touches, etc., donc avec très peu d'espace on peut faire des choses assez compliquées.

Xeda a aussi introduit l'indirection avec les commandes ind1() et ind2().
User avatar
chickendude
Niveau 0: MI (Membre Inactif)
Niveau 0: MI (Membre Inactif)
Level up: 0%
 
Posts: 9
Joined: 15 Oct 2012, 15:31
Gender: Not specified
Calculator(s):
MyCalcs profile
Class: Ouvrière


Return to Langages alternatifs

Who is online

Users browsing this forum: ClaudeBot [spider] and 6 guests

-
Search
-
Social TI-Planet
-
Featured topics
Ndless for CX 4.5.5 / CX II 6.2.0
Comparaisons des meilleurs prix pour acheter sa calculatrice !
"1 calculatrice pour tous", le programme solidaire de Texas Instruments. Reçois gratuitement et sans aucune obligation d'achat, 5 calculatrices couleur programmables en Python à donner aux élèves les plus nécessiteux de ton lycée. Tu peux recevoir au choix 5 TI-82 Advanced Edition Python ou bien 5 TI-83 Premium CE Edition Python.
Enseignant(e), reçois gratuitement 1 exemplaire de test de la TI-82 Advanced Edition Python. À demander d'ici le 31 décembre 2024.
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
12345
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1941 utilisateurs:
>1909 invités
>23 membres
>9 robots
Record simultané (sur 6 mois):
32248 utilisateurs (le 01/09/2025)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)