by Adriweb » 05 Mar 2016, 11:23
critor wrote:Une fois que tu as codé les routines spécifiques d'entrée/sortie (affichage, lecture clavier, lecture/écriture dans un fichier AppVar...), tout le reste c'est du C normal.
Et en plus, maintenant, il n'y a même plus besoin de savoir comment les coder (ou besoin de bidouiller de l'ASM) - les romcalls ont été rendues accessibles directement.
Avant, dans un programme de démo de la toolchain, on pouvait trouver ca :
- Code: Select all
void print(const char* string, uint8_t xpos, uint8_t ypos)
{
_OS( asm("LD HL,(IX+6)");
asm("LD A,(IX+9)");
asm("LD (curCol),A");
asm("LD A,(IX+12)");
asm("LD (curRow),A");
asm("CALL _PutS");
);
}
void printSmall(const char* string, uint16_t x, uint8_t y)
{
_OS( asm("LD HL,(IX+6)");
asm("LD DE,(IX+9)");
asm("LD (penCol),DE");
asm("LD A,(IX+12)");
asm("LD (penRow),A");
asm("RES textInverse,(IY+textFlags)"); // SET for inverted
asm("CALL _VPutS");
);
}
void cleanUp()
{
// Clear/invalidate some RAM areas
_OS( asm("CALL _DelRes");
asm("CALL _ClrTxtShd");
asm("CALL _ClrScrn");
asm("SET graphDraw,(iy+graphFlags)");
// Restore the home screen nicely
asm("CALL _HomeUp");
asm("CALL _DrawStatusBar");
);
}
Maintenant, on a (la liste complète des nouvelles fonctions est dans le dernier lien de mon post d'avant) :
- Code: Select all
/* Draw text on the homescreen at the given X/Y location */
void printText(const char *text, uint8_t xpos, uint8_t ypos) {
_OS( os_SetCursorPos(ypos, xpos);
os_PutStrFull(text);
);
}
/* Draw small text at the given X/Y location */
void printTextSmall(const char *text, uint8_t xpos, uint8_t ypos) {
_OS( os_FontDrawText(text, xpos, ypos); );
}
pgrm_cleanup(); // juste le prototype (le code est défini en ASM automatiquement)
Tout simplement parce que les codes ASM équivalents étaient déjà tout "prêts" à l'usage une fois trouvés dans l'OS (TI a gentiment fait ça...).
Et il va y en avoir de plus en plus, et donc la toolchain va devenir de plus en plus fournie et simple au cours du temps.