aboutsummaryrefslogtreecommitdiff
path: root/lib/cpcrslib/cpc_PutMaskSp2x8.s
diff options
context:
space:
mode:
authorJuan J. Martinez <jjm@usebox.net>2021-05-03 08:21:10 +0100
committerJuan J. Martinez <jjm@usebox.net>2021-05-03 10:00:00 +0100
commitc3b0fa04a663fe233765b83d3be41a42aa08c25d (patch)
tree0befda349001ef6ce306b39378f9c70ad917363e /lib/cpcrslib/cpc_PutMaskSp2x8.s
downloadreturn-of-traxtor-cpc-c3b0fa04a663fe233765b83d3be41a42aa08c25d.tar.gz
return-of-traxtor-cpc-c3b0fa04a663fe233765b83d3be41a42aa08c25d.zip
Initial import for public releaseHEADmain
Diffstat (limited to 'lib/cpcrslib/cpc_PutMaskSp2x8.s')
-rw-r--r--lib/cpcrslib/cpc_PutMaskSp2x8.s45
1 files changed, 45 insertions, 0 deletions
diff --git a/lib/cpcrslib/cpc_PutMaskSp2x8.s b/lib/cpcrslib/cpc_PutMaskSp2x8.s
new file mode 100644
index 0000000..ac85f0e
--- /dev/null
+++ b/lib/cpcrslib/cpc_PutMaskSp2x8.s
@@ -0,0 +1,45 @@
+.globl _cpc_PutMaskSp2x8
+; imprime un sprite de 8x8 en modo 1
+; El formato del sprite es el siguiente por cada línea:
+; defb byte1,byte2,byte3,byte4
+; siendo byte1 y byte3 son las máscaras de los bytes 2 y 4
+; se recibe de entrada el sprite y la posición.
+_cpc_PutMaskSp2x8::
+ LD IX,#2
+ ADD IX,SP
+ LD L,2 (IX)
+ LD H,3 (IX)
+ LD E,0 (IX)
+ LD D,1 (IX)
+ .DB #0XFD
+ LD H,#8 ;ALTO, SE PUEDE TRABAJAR CON HX DIRECTAMENTE
+ LD B,#7
+loop_alto_mask_2x8:
+ EX DE,HL
+ LD A,(DE) ;leo el byte del fondo
+ AND (HL) ;lo enmascaro
+ INC HL
+ OR (HL) ;lo enmascaro
+ LD (DE),A ;actualizo el fondo
+ INC DE
+ INC HL
+ ;COMO SOLO SON 2 BYTES, es más rápido y económico desplegar la rutina
+ LD A,(DE)
+ AND (HL)
+ INC HL
+ OR (HL)
+ LD (DE),A
+ INC DE
+ INC HL
+ .DB #0XFD
+ DEC H
+ RET Z
+ EX DE,HL
+ LD C,#0XFE
+ ADD HL,BC
+ JP NC,loop_alto_mask_2x8
+ LD BC,#0XC050
+ ADD HL,BC
+ LD B,#7
+ JP loop_alto_mask_2x8
+