;--------------------------------------------------------------------------------- * X es la posición donde queremos poner el Sprite (0 izquierda) (múltiplo de 4) * Y es la posición donde queremos poner el sprite (0 arriba) * TamX es el tamaño horizontal del Sprite (múltiplo de 4) * TamY es el tamaño vertical del Sprite * SPRITE es la dirección de memoria del Sprite * Rutina pensada para MODE 8, usando el bit de flash como transparencia. * ENTRADA: X (D1), Y (D2), TamX (D3), TamY (D4), Sprite (D5), Máscara (D6), Pantalla (D7) SpriteTrans8 movea.l d7,a0 ; a0 <- comienzo de la pantalla movea.l d5,a1 ; a1 <- comienzo de la definicion del sprite movea.l d6,a2 ; a2 <- comienzo de la definición de la máscara del sprite lsr.l #1,d1 ; X dividido entre 2 andi.b #$fe,d1 ; y nos aseguramos de que sea par lsr #2,d3 ; TamX dividido entre 4 subq #1,d3 ; restamos 1 a TamX porque asi lo necesitan los DBRA subq #1,d4 ; y lo mismo con TamY. add.l d1,a0 ; sumamos X a comienzo de pantalla lsl #7,d2 ; un scan de la pantalla tiene 128 bytes adda.l d2,a0 ; a0 apunta a la coordenada X,Y move.l d3,d5 ; d5 es backup de d3 move.l a0,d6 ; d6 es backup de a0 PonScanT8 move.l d5,d3 move.l d6,a0 Pon4pixelsT8 move.w (a0),d0 ; D0 contiene el cacho de pantalla que va a usarse move.w (a1)+,d1 ; D1 contiene el cacho de sprite a mostrar move.w (a2)+,d2 ; D2 va a ser una máscara para determinar qué bits del sprite se quedan and.w d2,d1 ; Enmascaramos el sprite not.w d2 ; Negamos la mascara... and.w d2,d0 ; ... y la aplicamos a la pantalla or.w d1,d0 ; juntamos sprite enmascarado con pantalla enmascarada move.w d0,(a0)+ ; y lo plantamos en la pantalla dbra d3,Pon4pixelsT8 addi.l #128,d6 dbra d4,PonScanT8 moveq #0,d0 rts ;--------------------------------------------------------------------------------- * X es la posición donde queremos poner el Sprite (0 izquierda) (múltiplo de 8) * Y es la posición donde queremos poner el sprite (0 arriba) * TamX es el tamaño horizontal del Sprite (múltiplo de 8) * TamY es el tamaño vertical del Sprite * SPRITE es la dirección de memoria del Sprite * Rutina pensada para MODE 8, usando el bit de flash como transparencia. * ENTRADA: X (D1), Y (D2), TamX (D3), TamY (D4), Sprite (D5), Máscara (D6), Pantalla (D7) SpriteTrans4 movea.l d7,a0 ; a0 <- comienzo de la pantalla movea.l d5,a1 ; a1 <- comienzo de la definicion del sprite movea.l d6,a2 ; a2 <- comienzo de la definición de la máscara del sprite lsr.l #2,d1 ; X dividido entre 4 andi.b #$fe,d1 ; y nos aseguramos de que sea par lsr #3,d3 ; TamX dividido entre 8 subq #1,d3 ; restamos 1 a TamX porque asi lo necesitan los DBRA subq #1,d4 ; y lo mismo con TamY. add.l d1,a0 ; sumamos X a comienzo de pantalla lsl #7,d2 ; un scan de la pantalla tiene 128 bytes adda.l d2,a0 ; a0 apunta a la coordenada X,Y move.l d3,d5 ; d5 es backup de d3 move.l a0,d6 ; d6 es backup de a0 PonScanT4 move.l d5,d3 move.l d6,a0 Pon4pixelsT4 move.w (a0),d0 ; D0 contiene el cacho de pantalla que va a usarse move.w (a1)+,d1 ; D1 contiene el cacho de sprite a mostrar move.w (a2)+,d2 ; D2 va a ser una máscara para determinar qué bits del sprite se quedan and.w d2,d1 ; Enmascaramos el sprite not.w d2 ; Negamos la mascara... and.w d2,d0 ; ... y la aplicamos a la pantalla or.w d1,d0 ; juntamos sprite enmascarado con pantalla enmascarada move.w d0,(a0)+ ; y lo plantamos en la pantalla dbra d3,Pon4pixelsT4 addi.l #128,d6 dbra d4,PonScanT4 moveq #0,d0 rts ;--------------------------------------------------------------------------------- ClearScreen ;D1 = direccion de comienzo de la pantalla a borrar move.l #8191,d2 movea.l d1,a0 BucleClear move.l #0,(a0)+ dbra d2,BucleClear moveq #0,d0 rts end 0