blob: 9134649e15e88dbd492145a1a275d5003977b7be (
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
|
; загружаем 16 байт палитры во временную память
preload_palette:
ldy #$00
ldx #16
.loop:
lda [PAL_SOURCE_ADDR], y
sta PALETTE_CACHE, y
iny
dex
bne .loop
rts
; загружаем 4 байта палитры во временную память
preload_palette_4:
ldy #$00
ldx #4
.loop:
lda [PAL_SOURCE_ADDR], y
sta PALETTE_CACHE, y
iny
dex
bne .loop
rts
; загружаем 16 байт палитры в $3F00
load_palette:
lda #LOW(PALETTE_CACHE)
sta <COPY_SOURCE_ADDR
lda #HIGH(PALETTE_CACHE)
sta <COPY_SOURCE_ADDR+1
lda #$3F
sta $2006
lda #$00
sta $2006
ldy #$00
ldx #16
.loop:
lda [COPY_SOURCE_ADDR], y
sta $2007
iny
dex
bne .loop
rts
; загружаем 16 байт палитры в $3F10
load_sprite_palette:
lda #LOW(PALETTE_CACHE)
sta <COPY_SOURCE_ADDR
lda #HIGH(PALETTE_CACHE)
sta <COPY_SOURCE_ADDR+1
lda #$3F
sta $2006
lda #$10
sta $2006
ldy #$00
ldx #16
.loop:
lda [COPY_SOURCE_ADDR], y
sta $2007
iny
dex
bne .loop
bit PPUSTATUS
rts
; затемняет загруженную палитру
dim:
ldx #0
.loop:
lda PALETTE_CACHE, x
sec
sbc #$10
bpl .not_minus
lda #$1D
.not_minus:
cmp #$0D
bne .not_very_black
lda #$1D
.not_very_black:
sta PALETTE_CACHE, x
inx
cpx #16
bne .loop
rts
; затемняет загруженную палитру, только 4 байта
dim_4:
ldx #0
.loop:
lda PALETTE_CACHE, x
sec
sbc #$10
bpl .not_minus
lda #$1D
.not_minus:
cmp #$0D
bne .not_very_black
lda #$1D
.not_very_black:
sta PALETTE_CACHE, x
inx
cpx #4
bne .loop
rts
; плавно проявляет экран
dim_in:
jsr preload_palette
jsr dim
jsr dim
jsr load_palette
ldx #5
jsr wait_blank_x
jsr preload_palette
jsr dim
jsr load_palette
ldx #5
jsr wait_blank_x
jsr preload_palette
jsr load_palette
jsr wait_blank
rts
; плавно затухает экран
dim_out:
jsr preload_palette
jsr dim
jsr load_palette
ldx #5
jsr wait_blank_x
jsr dim
jsr load_palette
ldx #5
jsr wait_blank_x
jsr dim
jsr load_palette
ldx #5
jsr wait_blank_x
jsr load_black
jsr wait_blank
rts
|