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
|