nounoun
:
J'ai refait le scroll à la main, pour ne plus utiliser les fonctions de graphlib (scrtomem et memtoscr)
1. Pourquoi pas utiliser
tios::memmove? La fonction est dans la ROM, pourquoi ne pas l'utiliser?
2. Pourquoi ça:
;Enregistre l'écran dans le heap (buffer)
;Ecrit l'écran une ligne plus bas
? Tu peux directement déplacer le contenu de l'écran, pas la peine de passer par un buffer. Ça prend 2 fois moins de code et va 2 fois plus vite. Et ça économise de la mémoire.
nounoun
:
Je voudrais aussi avoir un nombre aléatoire sans utiliser userlib, et sans prendre la routine du tios, car la doc de tigcc dit qu'elle est très lente, mais je ne sais pas du tout comment m'y prendre
Tu utilises celle de
TIGCCLIB:
bsr rand.
Pour l'initialiser, ben:
move.b 6291479,%d0
not.b %d0
clr.l %d3
move.b %d0,%d3
move.l 200.w,%a0
cmp.l #999,-4(%a0)
jbls .L1114
move.l 5104(%a0),%a0
move.l (%a0),%d2
tst.w version_matérielle /* Ici, tu peux utiliser HW_VERSION
en mode kernel, ou le résultat de __gethwversion de TIGCCLIB en mode
_nostub. */
jbeq .L1115
move.l %d2,%d0
add.l %d0,%d0
add.l %d2,%d0
move.l %d0,%d1
lsl.l #4,%d1
add.l %d1,%d0
add.l %d2,%d0
jbra .L1116
.even
.L1115:
move.l %d2,%d0
lsl.l #2,%d0
add.l %d2,%d0
lsl.l #3,%d0
sub.l %d2,%d0
add.l %d0,%d0
.L1116:
add.l %d0,%d3
.L1114:
move.l %d3,__randseed
Ça correspond à mon code C:
// compute random seed from 0x600017 and FiftyMSecTick
unsigned long randnum=255-peekIO(0x600017);
if (!AMS_1xx) randnum+=(*((volatile unsigned long*)(_rom_call_addr(4FC))))*
(_Gray3PIsRealHW2()?52:78);
srand(randnum);
Sasume
:
P.S. : quelle est la taille de l'expace fantôme ?
7 espaces fantôme de 256 KO chacun. Le dernier (0x1C0000) a un traîtement particulier sur HW1, donc ça en fait 6 d'utilisables (0x40000, 0x80000, 0xC0000, 0x100000, 0x140000 et 0x180000).
Et celle de l'espace protégé ?
La RAM normale fait 256 KO. Les premiers 288 octets sont protégés. Certaines adresses négatives qui ne correspondent à rien (0xFFE00000-0xFFFFFFFF) le sont aussi, pour mieux détecter les débordements de la pile. Sachez aussi que le premier octet des adresses est totalement ignoré (ne sort jamais du processeur), donc les adresses "négatives" protégées sont en fait 0xE00000-0xFFFFFF, mais ces adresses ne correspondent à rien (ne sont pas mappées).
nounoun
:
Je pense donc que c'est comme ça qu'on fait des tsr? Un programme programme lancé par un int fait un peu ce qu'il veut, et rend la main?
C'est une classe de TSRs. On peut aussi en installer sur les hooks prévus par AMS, notamment
EV_hook.
Mais dans tous les cas, il ne suffit pas d'installer un handler et quitter le programme, il faut recopier le code dans un bloc de mémoire verrouillé, sinon à la prochaîne compression du heap, ça plante. Et pour qu'on puisse recopier le code, il faut soit qu'il soit entièrement PC-relatif, soit qu'on le reloge lors de la recopie.