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

github.com/ClusterM/coolgirl-multirom-builder.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey 'Cluster' Avdyukhin <clusterrr@clusterrr.com>2021-05-26 01:21:12 +0300
committerAlexey 'Cluster' Avdyukhin <clusterrr@clusterrr.com>2021-05-26 01:21:12 +0300
commitcbbddf64791c23b817ad906fd3e26da243594333 (patch)
treeaf5f9ecab7be0b524f81c00b811858a7e215e6cb
parentf87c42b55b913177953dff79f412d1fbe3af426b (diff)
Dimming feature
-rw-r--r--Makefile8
-rw-r--r--buildinfo.asm12
-rw-r--r--buttons.asm1
-rw-r--r--menu.asm92
-rw-r--r--preloader.asm6
-rw-r--r--saves.asm2
-rw-r--r--tests.asm4
-rw-r--r--video.asm175
8 files changed, 195 insertions, 105 deletions
diff --git a/Makefile b/Makefile
index 11b4363..819b4d3 100644
--- a/Makefile
+++ b/Makefile
@@ -44,16 +44,16 @@ all: $(UNIF) $(NES20) $(BIN)
build: $(UNIF)
$(MENU_ROM): $(SOURCES) games.asm header footer symbols sprites
- $(NESASM) $(SOURCES) --output=$(MENU_ROM) $(NESASM_OPTS)
+ $(NESASM) menu.asm --output=$(MENU_ROM) $(NESASM_OPTS)
menu: $(MENU_ROM)
games.asm $(OFFSETS): $(CONFIGS_DIR)/$(GAMES)
$(COMBINER) prepare --games $(CONFIGS_DIR)/$(GAMES) --asm games.asm --maxromsize $(SIZE) --maxchrsize $(MAXCHRSIZE) --offsets $(OFFSETS) $(REPORT_OPTION) $(SORT_OPTION) --language $(LANGUAGE) $(BADS_OPTION)
-$(UNIF): $(SOURCES) header footer symbols sprites
- $(COMBINER) build --games $(CONFIGS_DIR)/$(GAMES) --asm games.asm --maxromsize $(SIZE) --maxchrsize $(MAXCHRSIZE) $(REPORT_OPTION) $(SORT_OPTION) --language $(LANGUAGE) --nesasm $(NESASM) --unif $(UNIF) $(BADS_OPTION)
-# $(COMBINER) combine --loader $(MENU_ROM) --offsets $(OFFSETS) --unif $(UNIF)
+$(UNIF): $(SOURCES) header footer symbols sprites $(MENU_ROM) $(OFFSETS)
+# $(COMBINER) build --games $(CONFIGS_DIR)/$(GAMES) --asm games.asm --maxromsize $(SIZE) --maxchrsize $(MAXCHRSIZE) $(REPORT_OPTION) $(SORT_OPTION) --language $(LANGUAGE) --nesasm $(NESASM) --unif $(UNIF) $(BADS_OPTION)
+ $(COMBINER) combine --loader $(MENU_ROM) --offsets $(OFFSETS) --unif $(UNIF)
unif: $(UNIF)
diff --git a/buildinfo.asm b/buildinfo.asm
index 7a72202..905223a 100644
--- a/buildinfo.asm
+++ b/buildinfo.asm
@@ -183,7 +183,7 @@ print_prg_ram:
sta PPUADDR
jsr draw_footer1
jsr draw_footer2
- jsr load_text_palette
+ jsr load_text_attributes
lda #$FF
sta <SPRITE_Y_TARGET
@@ -200,10 +200,16 @@ print_prg_ram:
sta <SELECTED_GAME+1
sta <SCROLL_LINES_MODULO
-show_build_info_infin:
- jsr waitblank
+ ; enable PPU
+ jsr waitblank_simple
lda #%00011110
sta PPUMASK
+
+ ; start dimming
+ jsr dim_base_palette_in
+
+show_build_info_infin:
+ jsr waitblank
jmp show_build_info_infin
prg_ram_detect:
diff --git a/buttons.asm b/buttons.asm
index 50f3907..99ca19d 100644
--- a/buttons.asm
+++ b/buttons.asm
@@ -74,7 +74,6 @@ buttons_check:
lda <BUTTONS
and #%00000001
beq .button_b
- jsr start_sound
jmp start_game
.button_b:
diff --git a/menu.asm b/menu.asm
index 3ae5992..e6f284f 100644
--- a/menu.asm
+++ b/menu.asm
@@ -6,12 +6,15 @@
; settings
ENABLE_STARS .equ 1
-ENABLE_START_SCROLLING .equ 1
ENABLE_LAST_GAME_SAVING .equ 1
ENABLE_RIGHT_CURSOR .equ 1
GAME_NAMES_OFFSET .equ 2
BUTTON_REPEAT_FRAMES .equ 30
WRAP_GAMES .equ 30
+ENABLE_DIM_IN .equ 1
+DIM_IN_DELAY .equ 5
+ENABLE_DIM_OUT .equ 1
+DIM_OUT_DELAY .equ 1
; games settings
.include "games.asm"
@@ -63,11 +66,15 @@ Start:
ldx #$ff
txs
- lda #%00000000 ; PPU disabled
+ ; disable PPU
+ lda #%00000000
sta PPUCTRL
sta PPUMASK
-
+ ; warm-up
jsr waitblank_simple
+ jsr waitblank_simple
+ ; load black screen
+ jsr load_black
; clean memory
lda #$00
@@ -83,24 +90,6 @@ Start:
dex
bne .loop
- jsr clear_screen
- jsr load_black
-
- ; enable PPU to show black screen
- lda #%00001010
- sta PPUMASK
-
- ; wait some time
- ldx #15
-.start_wait:
- jsr waitblank_simple
- dex
- bne .start_wait
-
- lda #%00000000 ; disable PPU
- sta PPUMASK
- jsr waitblank_simple
-
; loading loader and other RAM routines
ldx #$00
.load_ram_routines:
@@ -119,18 +108,20 @@ Start:
jsr console_detect
; load CHR data
jsr load_base_chr
- ; palette
- jsr load_base_pal
; clear all sprites data
jsr clear_sprites
; load this empty sprites data
jsr sprite_dma_copy
-
- jsr read_controller ; read buttons
- jsr load_state ; loading saved cursor position and other data
- jsr save_all_saves ; сохраняем предыдущую сейвку во флеш, если есть
- jsr check_separator_down ; skip separator if any
-
+ ; read buttons
+ jsr read_controller
+ ; loading saved cursor position and other data
+ jsr load_state
+ ; saving last started game to flash (if any)
+ jsr save_all_saves
+ ; skip separator if any
+ jsr check_separator_down
+
+ ; init variables
lda <SCROLL_LINES_TARGET
sta <SCROLL_LINES
sta <LAST_LINE_GAME
@@ -261,48 +252,17 @@ Start:
dex
bne .print_next_game_at_start
- jsr waitblank_simple
- lda #%00001010 ; second nametable
+ ; enable PPU
+ lda #%00001000 ; first nametable
sta PPUCTRL
- lda #%00001010 ; disabled sprites
+ lda #%00011110 ; enable sprites
sta PPUMASK
- ; start scrolling
- .if ENABLE_START_SCROLLING!=0
- lda <SELECTED_GAME ; but only if first game selected
- bne .intro_scroll_end
- lda <SELECTED_GAME+1
- bne .intro_scroll_end
- ldx #8
-.intro_scroll:
- bit PPUSTATUS
- lda #0
- sta PPUSCROLL
- stx PPUSCROLL
- jsr waitblank_simple
- jsr read_controller
- ldy #0
- cmp <BUTTONS
- bne .intro_scroll_end
- inx
- inx
- inx
- inx
- cpx #$f0
- bne .intro_scroll
- .intro_scroll_end:
- .endif
-
- jsr scroll_fix
- ; updating sprites
- jsr sprite_dma_copy
- lda #%00001000 ; switch to first nametable
- sta PPUCTRL
- lda #%00011110 ; enable sprites
- sta PPUMASK
+ ; start dimming
+ jsr dim_base_palette_in
; do not hold buttons!
- jsr wait_buttons_not_pressed
+ ;jsr wait_buttons_not_pressed
; main loop
infin:
diff --git a/preloader.asm b/preloader.asm
index a276739..5e1be9e 100644
--- a/preloader.asm
+++ b/preloader.asm
@@ -1,5 +1,7 @@
; starting game!
start_game:
+ jsr start_sound
+ jsr dim_base_palette_out
; disable PPU
lda #%00000000
sta PPUCTRL
@@ -39,7 +41,7 @@ start_game:
jsr save_state
; print error message
jsr clear_screen
- jsr load_text_palette
+ jsr load_text_attributes
lda #$21
sta PPUADDR
lda #$A0
@@ -88,8 +90,6 @@ compatible_console:
jsr clear_sprites
; load this empty data
jsr sprite_dma_copy
- ; load black palette
- jsr load_black
; loading game settings
ldx <SELECTED_GAME
lda loader_data_reg_0, x
diff --git a/saves.asm b/saves.asm
index 0fbdb37..cf61868 100644
--- a/saves.asm
+++ b/saves.asm
@@ -210,11 +210,11 @@ save_all_saves:
iny
cpy #4
bne .write
+ jsr saving_warning_hide
.done:
lda #0
sta <LAST_STARTED_SAVE ; no more last started save ID
jsr save_state
- jsr saving_warning_hide
rts
saves_signature:
diff --git a/tests.asm b/tests.asm
index 9731e35..291f108 100644
--- a/tests.asm
+++ b/tests.asm
@@ -132,7 +132,7 @@ do_tests_again:
jsr select_chr_bank
jsr load_base_chr
jsr clear_screen
- jsr load_text_palette
+ jsr load_text_attributes
lda #$21
sta PPUADDR
lda #$A4
@@ -225,7 +225,7 @@ crc_tests:
lda #HIGH(string_calculating_crc)
sta COPY_SOURCE_ADDR+1
jsr print_text
- jsr load_text_palette
+ jsr load_text_attributes
jsr waitblank_simple
bit PPUSTATUS
lda #0
diff --git a/video.asm b/video.asm
index 52675de..238922f 100644
--- a/video.asm
+++ b/video.asm
@@ -1,3 +1,4 @@
+PALETTE_CACHE .rs 32 ; temporary memory for palette, for dimming
; cursors target coordinates
SPRITE_0_X_TARGET .rs 1
SPRITE_1_X_TARGET .rs 1
@@ -28,7 +29,6 @@ waitblank:
pha
txa
pha
-
bit PPUSTATUS ; reset vblank bit
.loop:
lda PPUSTATUS ; load A with value at location PPUSTATUS
@@ -76,6 +76,17 @@ waitblank_simple:
pla
rts
+waitblank_x:
+ ; for for v-blank X times
+ cpy #0
+ bne .loop
+ rts
+.loop:
+ jsr waitblank
+ dex
+ bne .loop
+ rts
+
scroll_fix:
pha
tya
@@ -275,7 +286,7 @@ screen_wrap_up:
load_base_chr:
; loading CHR
- lda #$06
+ lda #BANK(chr_data) / 2 ; bank with CHR
jsr select_prg_bank
lda #LOW(chr_data)
sta COPY_SOURCE_ADDR
@@ -284,21 +295,136 @@ load_base_chr:
jsr load_chr
rts
-load_base_pal:
- ; loading palette into $3F00 of PPU
- lda #$3F
- sta PPUADDR
- lda #$00
- sta PPUADDR
+preload_base_palette:
+ ; loading palette into palette cache
+ lda #BANK(tilepal) / 2 ; bank with palette
+ jsr select_prg_bank
ldx #$00
.loop:
lda tilepal, x
- sta PPUDATA
+ sta PALETTE_CACHE, x
+ inx
+ cpx #32
+ bne .loop
+ rts
+
+ ; loading palette from cache to PPU
+load_palette:
+ jsr waitblank_simple
+ 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 #32
+.loop:
+ lda [COPY_SOURCE_ADDR], y
+ sta $2007
+ iny
+ dex
+ bne .loop
+ jsr scroll_fix
+ rts
+
+;load_base_pal:
+ ; loading palette into $3F00 of PPU
+ ;lda #$3F
+ ;sta PPUADDR
+ ;lda #$00
+ ;sta PPUADDR
+ ;ldx #$00
+;.loop:
+ ;lda tilepal, x
+ ;sta PPUDATA
+ ;inx
+ ;cpx #32
+ ;bne .loop
+ ;rts
+
+dim:
+ ; dimming preloaded palette
+ 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 #32
bne .loop
rts
+ ; dimming base palette in
+dim_base_palette_in:
+ lda BUTTONS
+ bne .done ; skip if any button pressed
+ .if ENABLE_DIM_IN!=0
+ jsr preload_base_palette
+ jsr dim
+ jsr dim
+ jsr dim
+ jsr load_palette
+ ldx #DIM_IN_DELAY
+ jsr waitblank_x
+ lda BUTTONS
+ bne .done ; skip if any button pressed
+ jsr preload_base_palette
+ jsr dim
+ jsr dim
+ jsr load_palette
+ ldx #DIM_IN_DELAY
+ jsr waitblank_x
+ lda BUTTONS
+ bne .done ; skip if any button pressed
+ jsr preload_base_palette
+ jsr dim
+ jsr load_palette
+ ldx #DIM_IN_DELAY
+ jsr waitblank_x
+ .endif
+.done:
+ jsr preload_base_palette
+ jsr load_palette
+ jsr waitblank
+ rts
+
+ ; dimming base palette out in
+dim_base_palette_out:
+ .if ENABLE_DIM_OUT!=0
+ jsr preload_base_palette
+ jsr dim
+ jsr load_palette
+ ldx #DIM_OUT_DELAY
+ jsr waitblank_x
+ jsr preload_base_palette
+ jsr dim
+ jsr dim
+ jsr load_palette
+ ldx #DIM_OUT_DELAY
+ jsr waitblank_x
+ jsr preload_base_palette
+ jsr dim
+ jsr dim
+ jsr dim
+ jsr load_palette
+ ldx #DIM_OUT_DELAY
+ jsr waitblank_x
+ .endif
+ jsr load_black
+ jsr waitblank
+ rts
+
; loading empty black palette into $3F00 of PPU
load_black:
; waiting for vblank
@@ -357,7 +483,7 @@ sprite_dma_copy:
; loading header (image on the top), first part
draw_header1:
- lda #$06
+ lda #BANK(nametable_header) / 2 ; bank with header
jsr select_prg_bank
ldx #0
ldy #$40
@@ -371,7 +497,7 @@ draw_header1:
; loading header (image on the top), second part
draw_header2:
- lda #$06
+ lda #BANK(nametable_header) / 2 ; bank with header
jsr select_prg_bank
ldx #$40
ldy #$40
@@ -631,8 +757,6 @@ set_line_attributes:
bne .set_attribute_address
rts
.set_attribute_address:
- lda #6
- jsr select_prg_bank
; calculating attributes address
lda <TEXT_DRAW_ROW
cmp #LINES_PER_SCREEN
@@ -691,6 +815,8 @@ set_line_attributes:
eor TMP
lsr A
bcc .only_header_attributes
+ lda #BANK(header_attribute_table) / 2 ; bank with header attribute table
+ jsr select_prg_bank
.header_0_loop:
lda header_attribute_table, y
asl A
@@ -708,6 +834,8 @@ set_line_attributes:
eor TMP
lsr A
bcs .only_header_attributes
+ lda #BANK(header_attribute_table) / 2
+ jsr select_prg_bank
.header_1_loop:
lda header_attribute_table, y
lsr A
@@ -1068,17 +1196,17 @@ stars:
rts
.endif
-load_text_palette:
+load_text_attributes:
lda #$23
sta PPUADDR
lda #$C8
sta PPUADDR
lda #$FF
ldy #$38
-.print_warning_palette:
+.loop:
sta PPUDATA
dey
- bne .print_warning_palette
+ bne .loop
rts
; print null-terminated string from [COPY_SOURCE_ADDR]
@@ -1099,6 +1227,7 @@ saving_warning_show:
sta PPUCTRL
sta PPUMASK
jsr waitblank_simple
+ ; print text
jsr clear_screen
lda #$21
sta PPUADDR
@@ -1109,26 +1238,21 @@ saving_warning_show:
lda #HIGH(string_saving)
sta COPY_SOURCE_ADDR+1
jsr print_text
- jsr load_text_palette
- jsr waitblank_simple
- bit PPUSTATUS
- lda #0
- sta PPUSCROLL
- sta PPUSCROLL
+ jsr load_text_attributes
+ ; enable PPU
lda #%00001000
sta PPUCTRL
lda #%00001010
sta PPUMASK
- jsr waitblank_simple
+ jsr dim_base_palette_in
rts
; hide this message (clear screen)
saving_warning_hide:
+ jsr dim_base_palette_out
lda #%00000000 ; disable PPU
sta PPUCTRL
sta PPUMASK
- jsr waitblank_simple
- jsr clear_screen
rts
detect_chr_ram_size:
@@ -1204,3 +1328,4 @@ detect_chr_ram_size:
sta PPUDATA
jsr disable_chr_write
rts
+