aboutsummaryrefslogtreecommitdiff
path: root/lib/cpcrslib/cpc_PutSpTr.s
blob: e1d24fa3443c663e87d1de9100543535478cc53b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
.globl _cpc_PutSpTr

_cpc_PutSpTr::	; dibujar en pantalla el sprite
		; Entradas	bc-> Alto Ancho
		;			de-> origen
		;			hl-> destino
		; Se alteran hl, bc, de, af
	LD IX,#2
	ADD IX,SP
	LD E,0 (IX)
	LD D,1 (IX)
	LD A,4 (IX)
   	LD L,6 (IX)
	LD H,7 (IX)


    LD (#anchot+1),A	;actualizo rutina de dibujo
	SUB #1
	CPL
	LD (#suma_siguiente_lineat+1),A    ;comparten los 2 los mismos valores.

	LD A,2 (IX)
	;JP  cpc_PutSpTr0

cpc_PutSpTr0:
	.DB #0XFD
	LD H,A		;ALTO, SE PUEDE TRABAJAR CON HX DIRECTAMENTE
anchot:
loop_alto_2t:
	LD B,#0
loop_ancho_2t:
	LD A,(DE)
	AND #0XAA
	JP Z,sig_pixn_der_2
	LD C,A ;B es el único registro libre
	LD A,(HL) ;pixel actual donde pinto
	AND #0X55
	OR C
	LD (HL),A ;y lo pone en pantalla
sig_pixn_der_2:
	LD A,(DE) ;pixel del sprite
	AND #0X55
	JP Z,pon_buffer_der_2
	LD C,A ;B es el único registro libre
	LD A,(HL) ;PIXEL ACTUAL DONDE PINTO
	AND #0XAA
	OR C
	LD (HL),A
pon_buffer_der_2:
	INC DE
	INC HL
	DEC B
	JP NZ,loop_ancho_2t
	.DB #0XFD
	DEC H
	RET Z
suma_siguiente_lineat:
salto_lineat:
	LD BC,#0X07FF			;&07f6 			;salto linea menos ancho
	ADD HL,BC
	JP NC,loop_alto_2t ;sig_linea_2zz		;si no desborda va a la siguiente linea
	LD BC,#0XC050
	ADD HL,BC
	;ld b,7			;sólo se daría una de cada 8 veces en un sprite
	JP loop_alto_2t

	LD A,H
	ADD #0X08
	LD H,A
	SUB #0XC0
	JP NC,loop_alto_2t ;sig_linea_2
	LD BC,#0XC050
	ADD HL,BC
	JP loop_alto_2t