Welcome to mirror list, hosted at ThFree Co, Russian Federation.

dimming.asm - github.com/ClusterM/nes-warface.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
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