Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » MicroPython sur Graph 35/75+E
ZezombyeEn ligneRédacteurPoints: 1587 Défis: 12 Message

MicroPython sur Graph 35/75+E

Posté le 09/05/2018 17:27

Page du programme : https://www.planet-casio.com/Fr/programmes/voir_un_programme_casio.php?showid=3603

Todo list :

- Corriger le bug de sauvegarde lors de la sauvegarde d'un fichier vide
- Faire les menus en image
- Module graphique
- Plus de mémoire pour les SH4

Ancien message
Cliquer pour enrouler
Parce que le python est très conseillé pour l'année prochaine, il serait bien de faire un port de MicroPython pour les graph monochromes.

Niveau faisabilité, c'est faisable :
- MicroPython demande 256k d'espace (la limite est de 512k donc on a de la chance) et 16 ko de ram (même pas besoin de taper dans les 256 ko des SH4)
- L'éditeur de texte serait tout simplement une version modifiée d'Edit, avec l'interface adaptée au Python (catalogue intégré, fonctions disponibles avec les F-keys, comme l'appli pour graph 90).

Du coup j'aimerais bien faire le port moi même, mais j'aurai sûrement besoin de votre aide :
- MicroPython ne compile que sous linux (ou en tout cas sûrement pas avec le SDK casio), du coup pour moi ça va être chiant voire impossible de le compiler
- J'ai regardé le port minimal (https://github.com/micropython/micropython/tree/master/ports/minimal) et je comprends que dalle à ce qu'il faudrait modifier sûrement les trucs GPIO, mais quoi d'autre ?

Si vous êtes partant pour ce projet, votre aide est la bienvenue



Pages : Précédente1, 2, 3, 4, 5, 6, 7, 8Suivante
ZezombyeEn ligneRédacteurPoints: 1587 Défis: 12 Message

Citer : Posté le 24/08/2018 03:19 | #


Ah, mais justement ça marche pas
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
LephenixnoirEn ligneAdministrateurPoints: 13829 Défis: 136 Message

Citer : Posté le 24/08/2018 08:31 | #


Eh bien utilise ma version assembleur... mais juste l'appel à GetKeyWait(). Et lis le tuto de Ziqumu sinon tu ne vas rien comprendre...
Rise.
ZezombyeEn ligneRédacteurPoints: 1587 Défis: 12 Message

Citer : Posté le 24/08/2018 08:59 | #


Oui mais il faut convertir l'assembleur en assembleur GCC, ce dont je n'ai aucune idée de comment faire
(et le tuto de ziqumu ne dit rien là dessus)
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Dark stormHors ligneMembre d'honneurPoints: 10760 Défis: 174 Message

Citer : Posté le 24/08/2018 09:07 | #


Tiens, prends exemple là dessus : https://git.planet-casio.com/Dark-Storm/EasyInput/blob/master/EasyInput_.s
Dans le dossier t'as le même en .src pour le SDK
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Páranÿe quetë Quendya
ZezombyeEn ligneRédacteurPoints: 1587 Défis: 12 Message

Citer : Posté le 24/08/2018 09:11 | #


C'est pas exactement les mêmes trucs :/ y'a juste le changement de .export en .global mais ça je savais déjà.
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Dark stormHors ligneMembre d'honneurPoints: 10760 Défis: 174 Message

Citer : Posté le 24/08/2018 09:12 | #


Ce que je t'ai filé, c'est la procédure d'appel de syscall (avec ou sans arguments) pour GCC. Si ton truc marche pas, c'est que ça vient d'autre part je pense.
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Páranÿe quetë Quendya
ZezombyeEn ligneRédacteurPoints: 1587 Défis: 12 Message

Citer : Posté le 24/08/2018 09:17 | #


J'ai toujours le même bug :/
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
LephenixnoirEn ligneAdministrateurPoints: 13829 Défis: 136 Message

Citer : Posté le 24/08/2018 09:32 | #


Dark storm a écrit :
Ce que je t'ai filé, c'est la procédure d'appel de syscall (avec ou sans arguments) pour GCC. Si ton truc marche pas, c'est que ça vient d'autre part je pense.

Il y a des arguments à mettre sur la pile.

Zezombye a écrit :
J'ai toujours le même bug :/

Avec toujours le même code ? Un peu de sérieux, si tu as tenté quelque chose, essaie au moins de nous montrer quoi.
Rise.
ZezombyeEn ligneRédacteurPoints: 1587 Défis: 12 Message

Citer : Posté le 24/08/2018 09:43 | #


J'ai juste adapté le code de DS :
.global _getkey
.type _getkey, @function
_getkey:
    mov.l    sc_addr, r2
    mov.l    5f, r0
    jmp        @r2
    nop
5:    .long 0x247

sc_addr:        .long 0x80010070


Et j'utilise toujours le même code C qu'avant.

Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
LephenixnoirEn ligneAdministrateurPoints: 13829 Défis: 136 Message

Citer : Posté le 24/08/2018 10:37 | #


Bon, j'ai pas testé, mais essaie ça... ça doit renvoyer une valeur en hexa, les 16 bits du haut sont la ligne, les 16 bits du bas la colonne.

    .global _GetKeyWait_syscall
_GetKeyWait_syscall:
    sts.l    pr, @-r15

    ; Make some space for the two first parameters
    add    #-4, r15
    mov    r15, r4
    add    #-4, r15
    mov    r15, r5

    ; Make some space for last parameter (address pushed to stack later)
    add    #-4, r15
    mov    r15, r1

    ; KEYWAIT_HALTON_TIMERON with a delay of zero (needed for menu to work)
    mov    #2, r6
    mov    #0, r7

    ; Push last parameter
    mov.l    r1, @-r15
    ; Allow return to menu
    mov    #0, r2
    mov.l    r2, @-r15

    ; Do the subroutine call
    mov.l    syscall_table, r1
    mov.l    getkeywait, r0
    jsr    @r1
    nop

    ; Get return value
    add    #8, r15
    mov.l    @r15+, r1
    mov.l    @r15+, r0
    shll16    r1
    or    r1, r0

    ; Restore stack and leave
    add    #20, r15
    lds.l    @r15+, pr
    rts
    nop

    .align    4

syscall_table:
    .long    0x80010070
getkeywait:
    .long    0x0247

Rise.
ZezombyeEn ligneRédacteurPoints: 1587 Défis: 12 Message

Citer : Posté le 24/08/2018 10:44 | #


Ca compile (mis à part les commentaires que j'ai dû enlever), mais cette fois ça me fait une system error "INTERRUPT" :


Juste avant, le SDK me fait une erreur "reserved instruction exception by code read access at 00334C40".

Je l'ai appelé comme le syscall normal : GetKeyWait_syscall(&column, &row, type_of_waiting, timeout_period, menu, &key); et comme une fonction qui ne prend pas d'argument : key = GetKeyWait_syscall(); mais ça me fait la même erreur :/
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
LephenixnoirEn ligneAdministrateurPoints: 13829 Défis: 136 Message

Citer : Posté le 24/08/2018 11:32 | #


Ah oui, j'ai oublié de te dire, le prototype est int GetKeyWait_syscall(void), les paramètres sont fixés dans l'assembleur pour l'instant. Il faudra que je teste... ce soir peut-être, désolé, là je suis coincé par d'autres choses. >_<
Rise.
ZezombyeEn ligneRédacteurPoints: 1587 Défis: 12 Message

Citer : Posté le 24/08/2018 20:27 | #


Voilà, en appuyant sur [EXIT] on peut faire aller le shell plus vite en mettant plus de boosters :


binwi, la shout est down, faut que je shitposte ailleurs

Ajouté le 24/08/2018 à 20:49 :
D'ailleurs, le truc system error interrupt n'apparaît (à ma connaissance) que lors d'un index d'array out of bounds, mais je vois pas comment le syscall pourrait causer ça...
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
LephenixnoirEn ligneAdministrateurPoints: 13829 Défis: 136 Message

Citer : Posté le 24/08/2018 20:56 | #


D'ailleurs, le truc system error interrupt n'apparaît (à ma connaissance) que lors d'un index d'array out of bounds, mais je vois pas comment le syscall pourrait causer ça...

Un index array out of bounds c'est indétectable en C, sauf si tu sors des mappings... mais ça c'est une TLB ERROR.

J'admets ne pas trop savoir exactement quelles sont les conditions pour une SysERROR INTERRUPT, mais dépasser d'un tableau me semble inadéquat. Par contre il peut y avoir un cas particulier où sortir du tableau déclenche d'autres choses fâcheuses, bien sûr.
Rise.
ZezombyeEn ligneRédacteurPoints: 1587 Défis: 12 Message

Citer : Posté le 25/08/2018 08:36 | #


Perso, ça m'est arrivé quand j'essayais d'accéder à la 23ème case d'un array de 21 cases. C'est aussi consistant avec celle de memallox, qui s'est produite parce qu'il avait pas mis le \0 (et j'imagine qu'il dépassait aussi d'un buffer).

Je conjecturerais que ça se produit quand on essaie d'accéder à de la mémoire qui existe (donc pas de TLB error) mais qui n'est pas attribuée à l'addin.
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
LephenixnoirEn ligneAdministrateurPoints: 13829 Défis: 136 Message

Citer : Posté le 25/08/2018 09:13 | #


Bien tenté, mais ça c'est ADDRESS (R) et ADDRESS (W)...

Entre nous, l'OS de Casio n'est pas terrible, mais je suis quand même convaincu que la SysERROR INTERRUPT a quelque chose à voir avec une interruption.

J'en ai régulièrement dans gint, soit dit en passant, en général c'est quand je casse les timers, et ça persiste parfois au redémarrage. (Les registres concernés ne sont réinitialisés que sur un RESET.) Un simple buffer overflow ne pourrait pas faire ça.
Rise.
ZezombyeEn ligneRédacteurPoints: 1587 Défis: 12 Message

Citer : Posté le 30/08/2018 18:44 | #


J'ai un bug chelou : j'ai réussi à tracer le crash sur SH4 à la fonction ML_pixel (j'ai pas testé les autres de la monochromelib). Ce qui est très bizarre, c'est que si on retourne au menu entre le lancement de l'addin et l'appel à ML_pixel, ça crashe pas, sinon ça crashe.

Une idée de pourquoi ce bug est causé (et seulement sur SH4), et pourquoi il est réglé par un appel au menu ?
En attendant je vais remplacer les fonctions de ML par leurs équivalents casio, mais j'aimerais quand même pouvoir utiliser ML.
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
LephenixnoirEn ligneAdministrateurPoints: 13829 Défis: 136 Message

Citer : Posté le 30/08/2018 18:52 | #


Affiche donc l'adresse de la VRAM utilisée par ML_pixel() pour voir ?
Rise.
ZezombyeEn ligneRédacteurPoints: 1587 Défis: 12 Message

Citer : Posté le 30/08/2018 19:16 | #


ML_vram_adress() cause le crash, effectivement (même erreur). Par contre c'est bizarre : mon truc pour scroller le shell, qui appelle aussi ML_vram_adress(), marche parfaitement sans retour au menu.

Si je fais un retour au menu avant l'appel, l'adresse est 0x880085e9.
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
LephenixnoirEn ligneAdministrateurPoints: 13829 Défis: 136 Message

Citer : Posté le 31/08/2018 08:31 | #


Quelle est la méthode d'appel de syscall utilisée dans ta version de ML ? L'ancienne méthode n'était pas compatible SH4.
Rise.
ZezombyeEn ligneRédacteurPoints: 1587 Défis: 12 Message

Citer : Posté le 31/08/2018 11:06 | #


Il utilise la méthode C :

static int SysCallCode[] = {0xD201422B,0x60F20000,0x80010070};
static int (*SysCall)( int R4, int R5, int R6, int R7, int FNo ) = (void*)&SysCallCode;
char* ML_vram_adress()
{
    return (char*)((*SysCall)(0, 0, 0, 0, 309));
}


Je devrais la remplacer par la méthode assembleur ?
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Pages : Précédente1, 2, 3, 4, 5, 6, 7, 8Suivante

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2019 | Il y a 36 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd