diff options
author | Juan J. Martinez <jjm@usebox.net> | 2021-05-03 08:21:10 +0100 |
---|---|---|
committer | Juan J. Martinez <jjm@usebox.net> | 2021-05-03 10:00:00 +0100 |
commit | c3b0fa04a663fe233765b83d3be41a42aa08c25d (patch) | |
tree | 0befda349001ef6ce306b39378f9c70ad917363e /lib/cpcrslib/cpc_PutMaskSp2x8.s | |
download | return-of-traxtor-cpc-c3b0fa04a663fe233765b83d3be41a42aa08c25d.tar.gz return-of-traxtor-cpc-c3b0fa04a663fe233765b83d3be41a42aa08c25d.zip |
Diffstat (limited to 'lib/cpcrslib/cpc_PutMaskSp2x8.s')
-rw-r--r-- | lib/cpcrslib/cpc_PutMaskSp2x8.s | 45 |
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 + |