Optimizaciones de Juan Carmona

Una vez acabado el código en un porcentaje muy alto, hemos decidido empezar a optimizarlo.

Qué alegría cuando vez que, las subrutinas importantes, sólo se pueden optimizar un 3%. Eso es trabajo bien hecho.

Además estoy aprovechando para comentar el código e indentarlo bien para poder publicarlo con elegancia.

Increíble cómo rutinas ya optimizadas vuelven a ser optimizadas. Tendrá límite esto, no?

A ver si podemos, entre todos, optimizar esta rutina (sin usar el Stack Pointer):

Esta rutina imprime un sprite en la pantalla actual (buffer 1 o 2). Los datos del sprite están en IX

; escritura en la screen actual del sprite IX en las coordenadas Y,X 
; el sprite será de 2x2 del tipo sprite
; --------------------------------------------------------------------------- 
; IX sprite
write_sprite_screen_22
 LD H,(IX+.diractualh)
 LD L,(IX+.diractuall) 

 LD A,(IX+.mirada)
 CP sent_der
 JR Z,wss_der22
wss_izq22
 LD DE,SPR_ROTADOS
 ADD HL,DE
wss_der22
 EX DE,HL
write_sprite_static_screen_22
 LD IYH,D 
 LD IYL,E ;En IY la posición del sprite
 
 LD D,T_MASCARASH ;Usamos DE para la tabla de máscaras
 EXX
 LD C,(IX+.y) 
 LD A,(.sm_pantalla_actual+1)
 XOR 16 
 JR Z,buffer0_wss22 
 SET 7,C ;sumo 128 a las Y si es en el buffer 2
buffer0_wss22
 ;cojo las coordenadas de BC
 LD B,(IX+.x) 
 
 EX AF,AF'
 LD A,B ;guardo en a'=x
 EX AF,AF'
 LD B,8 ;dejo en b 8, y en C las Y
bucle_y_wssd22
 LD A,C ;c=y
 EXX
 EX AF,AF'
 LD C,A ;c=a'=x
 EX AF,AF'
 LD H,T_PANBC26HH
 LD L,A 
 LD A,(HL) 
 INC H 
 LD B,(HL) 
 ADD A,C 
 ;en HL dirpan DE dirbuf
 LD H,B
 LD L,A ;HL=dirpan
 
 LD E,(IY+0)
 LD A,(DE) 
 AND (HL)
 OR E
 LD (HL),A
 INC L ;siguiente dirpan
 
 LD E,(IY+1)
 LD A,(DE)
 AND (HL)
 OR E
 LD (HL),A
 INC L ;siguiente dirpan
 
 LD E,(IY+2)
 LD A,(DE)
 AND (HL)
 OR E
 LD (HL),A
 INC L ;siguiente dirpan
 
 LD E,(IY+3)
 LD A,(DE)
 AND (HL)
 OR E
 LD (HL),A

 LD BC,ANCHO_MAPA*2-3
 ADD HL,BC ;siguiente linea en dirpan 
 
 LD E,(IY+4)
 LD A,(DE)
 AND (HL)
 OR E
 LD (HL),A
 INC L ;siguiente dirpan
 
 LD E,(IY+5)
 LD A,(DE)
 AND (HL)
 OR E
 LD (HL),A
 INC L ;siguiente dirpan
 
 LD E,(IY+6)
 LD A,(DE)
 AND (HL)
 OR E
 LD (HL),A
 INC L ;siguiente dirpan

 LD E,(IY+7)
 LD A,(DE)
 AND (HL)
 OR E
 LD (HL),A

 LD BC,8
 ADD IY,BC ;siguiente DIRSPR

 EXX
 INC C
 DJNZ bucle_y_wssd22
 
 RET

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *