26Fermer28
chickendudeLe 16/06/2011 à 19:17
Contra (./26) :
A deeph :
Donc tu vas être limité à ~8ko si mes souvenirs sont bon... Donc si jamais tu veux aller au delà je te conseil Ion, qui permettra d'avoir la compatibilité 83/83+.

Je n'utilise pas de shell et et mon code est squishé (2 fois plus long et 2 fois plus gros). Je pense utiliser Ion mais une fois le jeu fini seulement.

Ton programme peut être plus de ~8k, mais tu ne pourras pas exécuter rien après ce point-là. Tu peux y mettre tous tes données -- les variables, la matrice, les textes (si tu en as), tout ça -- mais pas de codes exécutables.
Bah generalement je n'utilise pas de variables 16bits si ce n'est pas utile, quelles sont celles dont tu parles?

On voit par exemple:
xcoord	= saferam1+4
ycoord	= 	xcoord+2
oldxcoord	= 	ycoord+2
oldycoord	= 	oldxcoord+2
select_flag	= 	oldycoord+2
tub_index	= select_flag+2
Quand tu les utilises tu utilises toujours les registres 16bits, bien qu'il n'est pas possible qu'ils passent d'un octet.

Et je ne sais pas pourquoi ce code ne fonctionnerait pas, où l'utilises-tu ? A propos, ix/iy sont très lents et occupent beaucoup d'espace car ils prennent un décalage. Quand tu dis "and (ix)" le calc l'interprète comme "and (ix+0)".

Et quant aux registres "cachés" (grin), voici un morceau de code pour dessiner un sprite de 16x16 pixels:
	exx
		ld hl,saferam1	;donde guardar el mapa antes de dibujarlo a la pantalla, es decir, el gbuf
		ld de,13		;numero de columnas en gbuf menos uno (por el inc hl')
		ld bc,$0705	;dibujar 7 columnas y 5 filas de sprites (en la pantalla caben 6x4))
...
	exx
...
	ld b,16		;16 filas en sprite
dibSprite:
	ld a,(hl)	;pixeles del sprite a dibujar
	inc hl		;proximo conjunto de pixeles
	exx		;cambiar a registros alternativos
		ld (hl),a
		inc hl	;proximo byte en gbuf
	exx
	ld a,(hl)
	inc hl		;2º conjunto (pixels 16x16: 2 bytes de ancho)
	exx
		ld (hl),a
		add hl,de	;bajar a la proxima fila del gbuf
	exx
	djnz dibSprite
On se sert d'exx pour changer les registres bc, de et hl avec leurs équivalents cachés, et ex af,af' pour changer af avec af'. (une apostrophe veut dire que c'est un registre caché). Si tu n'as pas besoin de conserver leurs valeurs, il n'est pas comme la pile, si tu ne changes pas aux registres normales avant de quitter ce n'est pas grave. Le calc ne fait pas de distinction entre les deux et utilisera les cachés comme les normales.