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

github.com/ClusterM/nes-warface.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey 'Cluster' Avdyukhin <clusterrr@clusterrr.com>2020-11-07 15:07:17 +0300
committerAlexey 'Cluster' Avdyukhin <clusterrr@clusterrr.com>2020-11-07 15:07:17 +0300
commite40a82b54fe584f92179dc8a2b67338fa5804441 (patch)
treec25114bc6ca9e50c0a5b9d9cc2e2cc7732d7a162
parentfd02825bf853aafe29240d6705ac475142f0d6ad (diff)
Refactoring
-rw-r--r--Makefile4
-rw-r--r--clean.asm91
-rw-r--r--dimming.asm4
-rw-r--r--images/warface_logo.jpg (renamed from images/logo_warface.jpg)bin6874 -> 6874 bytes
-rw-r--r--main.asm287
-rw-r--r--patterns.asm2
-rw-r--r--text.asm6
-rw-r--r--warface.asm327
8 files changed, 363 insertions, 358 deletions
diff --git a/Makefile b/Makefile
index 84f9e99..03b5a7a 100644
--- a/Makefile
+++ b/Makefile
@@ -64,7 +64,7 @@ ifeq ($(STORY),7)
TEXT_3=text/6_3.txt
endif
-TITLE_IMAGE=images/logo_warface.jpg
+TITLE_IMAGE=images/warface_logo.jpg
CREDITS_IMAGE=images/credits.png
SYMBOLS_IMAGE=images/symbols.png
LOGO_IMAGE=images/warface_logo_small.png
@@ -75,7 +75,7 @@ SPLITTER=tools/ImageSplitter.exe
TILER=tools/NesTiler.exe
TEXT_CONVERTER=tools/TextConverter.exe
SOURCE=warface.asm
-INCLUDES=clean.asm dimming.asm text.asm nametables.asm patterns.asm buttons.asm sprites.asm
+INCLUDES=main.asm clean.asm dimming.asm text.asm nametables.asm patterns.asm buttons.asm sprites.asm
EXECUTABLE=warface.nes
MUSIC=Warface-12.nsf
MUSIC_BIN=music.bin
diff --git a/clean.asm b/clean.asm
index e928e31..1c147e3 100644
--- a/clean.asm
+++ b/clean.asm
@@ -1,94 +1,3 @@
-init:
- lda #%10000000 ; выключаем пока что PPU, но оставляем NMI
- sta PPUCTRL
- lda #%00000000
- sta PPUMASK
- jsr wait_blank_simple
- jsr load_black ; делаем экран чёрным
-
- ; очистка памяти
- lda #$00
- sta <COPY_SOURCE_ADDR
- sta <COPY_SOURCE_ADDR+1
- lda #0
- ldy #$22
-.memory_clean_loop:
- sta [COPY_SOURCE_ADDR], y
- iny
- bne .memory_clean_loop
-
- ; загрузка спрайтов
- lda #LOW(sprites_data)
- sta <COPY_SOURCE_ADDR
- lda #HIGH(sprites_data)
- sta <COPY_SOURCE_ADDR+1
- lda #LOW(SPRITES)
- sta <COPY_DEST_ADDR
- lda #HIGH(SPRITES)
- sta <COPY_DEST_ADDR+1
- ldy #0
-.sprites_clean_loop:
- lda [COPY_SOURCE_ADDR], y
- sta [COPY_DEST_ADDR], y
- iny
- bne .sprites_clean_loop
- lda #0
- sta OAMADDR
- lda #HIGH(SPRITES)
- sta OAMDMA
-
- ; определяем тип консоли
- lda #%00000000 ; отключаем NMI
- sta PPUCTRL
- bit PPUSTATUS
-console_detect_init:
- bit PPUSTATUS
- bpl console_detect_init
-console_detect_loop:
- inx
- bne console_detect_s
- iny
-console_detect_s:
- bit PPUSTATUS
- bpl console_detect_loop
- lda #$01
- cpy #$09
- bne console_detect_end
- lda #$00
-console_detect_end:
- sta <CONSOLE_TYPE
- ; включаем NMI
- lda #%10000000
- sta PPUCTRL
-
- ; Обнуляем звуковые регистры
- lda #0
- sta $4000
- sta $4001
- sta $4002
- sta $4003
- sta $4004
- sta $4005
- sta $4006
- sta $4007
- sta $4009
- sta $400A
- sta $400C
- sta $400D
- sta $400E
- sta $400F
- sta $4010
- sta $4011
- sta $4012
- sta $4013
- lda #$0F
- sta $4015
- lda #$40
- sta $4017
- lda #0
-
- rts
-
; очищаем nametable
clear_screen:
lda #$20
diff --git a/dimming.asm b/dimming.asm
index f4eb224..45c110d 100644
--- a/dimming.asm
+++ b/dimming.asm
@@ -104,7 +104,7 @@ dim_4:
rts
; плавно проявляет экран
-dim_in_s:
+dim_in:
jsr preload_palette
jsr dim
jsr dim
@@ -122,7 +122,7 @@ dim_in_s:
rts
; плавно затухает экран
-dim_out_s:
+dim_out:
jsr preload_palette
jsr dim
jsr load_palette
diff --git a/images/logo_warface.jpg b/images/warface_logo.jpg
index 80dc597..80dc597 100644
--- a/images/logo_warface.jpg
+++ b/images/warface_logo.jpg
Binary files differ
diff --git a/main.asm b/main.asm
new file mode 100644
index 0000000..0456ad4
--- /dev/null
+++ b/main.asm
@@ -0,0 +1,287 @@
+main:
+ ; выключаем пока что PPU, но оставляем NMI
+ lda #%10000000
+ sta PPUCTRL
+ lda #%00000000
+ sta PPUMASK
+ jsr wait_blank_simple
+ ; загружаем чёрную палитру
+ jsr load_black
+
+ ; определяем тип консоли
+ ; отключаем NMI
+ lda #%00000000
+ sta PPUCTRL
+ bit PPUSTATUS
+console_detect_init:
+ bit PPUSTATUS
+ bpl console_detect_init
+console_detect_loop:
+ inx
+ bne console_detect_s
+ iny
+console_detect_s:
+ bit PPUSTATUS
+ bpl console_detect_loop
+ lda #$01
+ cpy #$09
+ bne console_detect_end
+ lda #$00
+console_detect_end:
+ sta <CONSOLE_TYPE
+ ; включаем NMI
+ lda #%10000000
+ sta PPUCTRL
+
+ ; загрузка спрайтов
+ lda #LOW(sprites_data)
+ sta <COPY_SOURCE_ADDR
+ lda #HIGH(sprites_data)
+ sta <COPY_SOURCE_ADDR+1
+ lda #LOW(SPRITES)
+ sta <COPY_DEST_ADDR
+ lda #HIGH(SPRITES)
+ sta <COPY_DEST_ADDR+1
+ ldy #0
+.sprites_clean_loop:
+ lda [COPY_SOURCE_ADDR], y
+ sta [COPY_DEST_ADDR], y
+ iny
+ bne .sprites_clean_loop
+ jsr wait_blank
+ lda #0
+ sta OAMADDR
+ lda #HIGH(SPRITES)
+ sta OAMDMA
+
+ ; Обнуляем звуковые регистры
+ lda #0
+ sta $4000
+ sta $4001
+ sta $4002
+ sta $4003
+ sta $4004
+ sta $4005
+ sta $4006
+ sta $4007
+ sta $4009
+ sta $400A
+ sta $400C
+ sta $400D
+ sta $400E
+ sta $400F
+ sta $4010
+ sta $4011
+ sta $4012
+ sta $4013
+ lda #$0F
+ sta $4015
+ lda #$40
+ sta $4017
+ lda #0
+ ; музыка
+ jsr init_music
+
+ ; небольшая пауза после включения
+ ldx #30
+ jsr wait_blank_x
+
+ jsr disable_ppu
+ ; обнуляем скроллинг
+ jsr reset_scroll
+ ; загружаем nametable
+ lda #LOW(title_name_table)
+ sta <COPY_SOURCE_ADDR
+ lda #HIGH(title_name_table)
+ sta <COPY_SOURCE_ADDR+1
+ lda #BANK(title_name_table)/2
+ jsr load_name_table
+ ; выбираем CHR банк с автопереключением
+ lda #(BANK(title_pattern)-16)*2
+ jsr select_chr_auto_bank
+ ; включаем PPU
+ jsr enable_ppu
+ ; загружаем палитру
+ lda #LOW(title_palette)
+ sta <PAL_SOURCE_ADDR
+ lda #HIGH(title_palette)
+ sta <PAL_SOURCE_ADDR+1
+ ; плавно прибавляем яркость
+ jsr dim_in
+ ; музыка и чтение кнопок
+ cli
+ ; ждём любую кнопку
+ jsr pause
+ ; убавляем яркость
+ jsr dim_out
+
+ jsr wait_blank
+ jsr disable_ppu
+ ; обнуляем скроллинг
+ jsr reset_scroll
+ ; загружаем nametable
+ lda #LOW(frame_0_name_table)
+ sta <COPY_SOURCE_ADDR
+ lda #HIGH(frame_0_name_table)
+ sta <COPY_SOURCE_ADDR+1
+ lda #BANK(frame_0_name_table)/2
+ jsr load_name_table
+ ; выбираем CHR банк с автопереключением
+ lda #(BANK(frame_0_pattern)-16)*2
+ jsr select_chr_auto_bank
+ ; включаем PPU
+ jsr enable_ppu
+ ; загружаем палитру
+ lda #LOW(frame_0_palette)
+ sta <PAL_SOURCE_ADDR
+ lda #HIGH(frame_0_palette)
+ sta <PAL_SOURCE_ADDR+1
+ ; плавно прибавляем яркость
+ jsr dim_in
+ ; ждём любую кнопку
+ jsr pause
+ ; убавляем яркость
+ jsr dim_out
+
+ ; отображаем текст
+ lda #LOW(text_0)
+ sta <TEXT_SOURCE_ADDR
+ lda #HIGH(text_0)
+ sta <TEXT_SOURCE_ADDR+1
+ jsr print_text
+
+ jsr wait_blank
+ jsr disable_ppu
+ ; обнуляем скроллинг
+ jsr reset_scroll
+ ; загружаем nametable
+ lda #LOW(frame_1_name_table)
+ sta <COPY_SOURCE_ADDR
+ lda #HIGH(frame_1_name_table)
+ sta <COPY_SOURCE_ADDR+1
+ lda #BANK(frame_1_name_table)/2
+ jsr load_name_table
+ ; выбираем CHR банк с автопереключением
+ lda #(BANK(frame_1_pattern)-16)*2
+ jsr select_chr_auto_bank
+ ; включаем PPU
+ jsr enable_ppu
+ ; загружаем палитру
+ lda #LOW(frame_1_palette)
+ sta <PAL_SOURCE_ADDR
+ lda #HIGH(frame_1_palette)
+ sta <PAL_SOURCE_ADDR+1
+ ; плавно прибавляем яркость
+ jsr dim_in
+ ; ждём любую кнопку
+ jsr pause
+ ; убавляем яркость
+ jsr dim_out
+
+ ; отображаем текст
+ lda #LOW(text_1)
+ sta <TEXT_SOURCE_ADDR
+ lda #HIGH(text_1)
+ sta <TEXT_SOURCE_ADDR+1
+ jsr print_text
+
+ jsr wait_blank
+ jsr disable_ppu
+ ; обнуляем скроллинг
+ jsr reset_scroll
+ ; загружаем nametable
+ lda #LOW(frame_2_name_table)
+ sta <COPY_SOURCE_ADDR
+ lda #HIGH(frame_2_name_table)
+ sta <COPY_SOURCE_ADDR+1
+ lda #BANK(frame_2_name_table)/2
+ jsr load_name_table
+ ; выбираем CHR банк с автопереключением
+ lda #(BANK(frame_2_pattern)-16)*2
+ jsr select_chr_auto_bank
+ ; включаем PPU
+ jsr enable_ppu
+ ; загружаем палитру
+ lda #LOW(frame_2_palette)
+ sta <PAL_SOURCE_ADDR
+ lda #HIGH(frame_2_palette)
+ sta <PAL_SOURCE_ADDR+1
+ ; плавно прибавляем яркость
+ jsr dim_in
+ ; ждём любую кнопку
+ jsr pause
+ ; убавляем яркость
+ jsr dim_out
+
+ ; отображаем текст
+ lda #LOW(text_2)
+ sta <TEXT_SOURCE_ADDR
+ lda #HIGH(text_2)
+ sta <TEXT_SOURCE_ADDR+1
+ jsr print_text
+
+ jsr disable_ppu
+ ; обнуляем скроллинг
+ jsr reset_scroll
+ ; загружаем nametable
+ lda #LOW(title_name_table)
+ sta <COPY_SOURCE_ADDR
+ lda #HIGH(title_name_table)
+ sta <COPY_SOURCE_ADDR+1
+ lda #BANK(title_name_table)/2
+ jsr load_name_table
+ ; выбираем CHR банк с автопереключением
+ lda #(BANK(title_pattern)-16)*2
+ jsr select_chr_auto_bank
+ ; включаем PPU
+ jsr enable_ppu
+ ; загружаем палитру
+ lda #LOW(title_palette)
+ sta <PAL_SOURCE_ADDR
+ lda #HIGH(title_palette)
+ sta <PAL_SOURCE_ADDR+1
+ ; плавно прибавляем яркость
+ jsr dim_in
+ ; ждём любую кнопку
+ jsr pause
+ ; убавляем яркость
+ jsr dim_out
+
+ ; отображаем текст
+ lda #LOW(text_3)
+ sta <TEXT_SOURCE_ADDR
+ lda #HIGH(text_3)
+ sta <TEXT_SOURCE_ADDR+1
+ lda #1
+ sta <THE_END
+ jsr print_text
+
+ ; конец
+
+ ; авторы проекта
+credits:
+ jsr disable_ppu
+ ; обнуляем скроллинг
+ jsr reset_scroll
+ ; загружаем nametable
+ lda #LOW(credits_name_table)
+ sta <COPY_SOURCE_ADDR
+ lda #HIGH(credits_name_table)
+ sta <COPY_SOURCE_ADDR+1
+ lda #BANK(credits_name_table)/2
+ jsr load_name_table
+ ; выбираем CHR банк с автопереключением
+ lda #(BANK(credits_pattern)-16)*2
+ jsr select_chr_auto_bank
+ ; включаем PPU
+ jsr enable_ppu
+ ; загружаем палитру
+ lda #LOW(credits_palette)
+ sta <PAL_SOURCE_ADDR
+ lda #HIGH(credits_palette)
+ sta <PAL_SOURCE_ADDR+1
+ ; плавно прибавляем яркость
+ jsr dim_in
+.loop:
+ jsr wait_blank
+ jmp .loop
diff --git a/patterns.asm b/patterns.asm
index 052f7d5..f48d624 100644
--- a/patterns.asm
+++ b/patterns.asm
@@ -64,4 +64,4 @@ credits_pattern:
.db 0, 0, 0, 0, 0, 0, 0, 0
.db 0, 0, 0, 0, 0, 0, 0, 0
.org $1C00
- .incbin "warface_logo_pattern.bin" \ No newline at end of file
+ .incbin "warface_logo_pattern.bin"
diff --git a/text.asm b/text.asm
index 970e9d7..abc1788 100644
--- a/text.asm
+++ b/text.asm
@@ -1,10 +1,10 @@
-print_text_s:
- jsr wait_blank_simple
+print_text:
+ jsr wait_blank
; выключаем PPU
jsr disable_ppu
; выбираем последний CHR банк
lda #%00011111
- sta $6001
+ jsr select_chr_solid_bank
; очищаем экран
jsr clear_screen
; загружаем палитру
diff --git a/warface.asm b/warface.asm
index 48e655a..b0778b2 100644
--- a/warface.asm
+++ b/warface.asm
@@ -1,6 +1,6 @@
;
; Автор: Авдюхин Алексей / clusterrr@clusterrr.com / http://clusterrr.com
-; Специально Mail.ru Group
+; Специально для Mail.ru Group
;
; INES header
@@ -20,11 +20,11 @@ PPUDATA .equ $2007
OAMDMA .equ $4014
.rsset $0020 ; адрес для переменных
+COPY_SOURCE_ADDR .rs 2 ; исходный адрес для копирования данный
+COPY_DEST_ADDR .rs 2 ; целевой адрес для копирования данный
FRAMES .rs 1 ; счётчик NMI
ACTIVE_BANK .rs 1 ; текущий PRG банк
CONSOLE_TYPE .rs 1 ; тип консоли
-COPY_SOURCE_ADDR .rs 2 ; исходный адрес для копирования данный
-COPY_DEST_ADDR .rs 2 ; целевой адрес для копирования данный
PAL_SOURCE_ADDR .rs 2 ; исходный адрес для загрузки палитры
PALETTE_CACHE .rs 16 ; кеш для временного хранения палитры
SPRITES_ENABLED .rs 1 ; включены ли спрайты
@@ -49,250 +49,44 @@ SPRITES .rs 256 ; тут хранятся спрайты
.bank 12 ; PRG банк #12, середина PRG
.org $9152
+music:
.incbin "music.bin" ; Музыка
.bank 15 ; PRG банк #15, конец PRG
.org $FFFA ; Векторы прерываний
.dw NMI ; NMI вектор
- .dw Start ; Ресет вектор $FFFA
+ .dw RESET ; Ресет вектор $FFFA
.dw IRQ ; IRQ
- .bank 15 ; Тут начинается наш код
- .org $FD00 ; В памяти NES это будет адрес $8000
+ ; Тут начинается наш код
+ .bank 15
+ .org $FD00
-Start:
- sei ; сразу же отключаем любые прерывания
+RESET:
+ ; сразу же отключаем любые прерывания
+ sei
; обнуляем стек
ldx #$ff
- txs
- ; вызываем функцию инициализации из нулевого банка
- lda #BANK(init)/2
- jsr select_prg_bank
- jsr init
- ; предпоследний банк
- lda #6
- jsr select_prg_bank
- ; номер трека
- lda <CONSOLE_TYPE
- ; в регистре X задаётся регион: PAL или NTSC
- ldx <CONSOLE_TYPE
- ; инициализируем музыкальный проигрыватель
- jsr $A999
-
- ; небольшая пауза после включения
- ldx #30
- jsr wait_blank_x
-
- jsr disable_ppu
- ; обнуляем скроллинг
- jsr reset_scroll
- ; загружаем nametable
- lda #BANK(title_name_table)/2
- jsr select_prg_bank
- lda #LOW(title_name_table)
- sta <COPY_SOURCE_ADDR
- lda #HIGH(title_name_table)
- sta <COPY_SOURCE_ADDR+1
- jsr load_name_table
- ; выбираем CHR банк с автопереключением
- lda #(BANK(title_pattern)-16)/2
- jsr select_chr_bank
- ; включаем PPU
- jsr enable_ppu
- ; загружаем палитру
- lda #LOW(title_palette)
- sta <PAL_SOURCE_ADDR
- lda #HIGH(title_palette)
- sta <PAL_SOURCE_ADDR+1
- ; плавно прибавляем яркость
- jsr dim_in
- cli ; музыка
- ; ждём любую кнопку
- jsr pause
- ; убавляем яркость
- jsr dim_out
-
- jsr wait_blank
- jsr disable_ppu
- ; обнуляем скроллинг
- jsr reset_scroll
- ; загружаем nametable
- lda #BANK(frame_0_name_table)/2
- jsr select_prg_bank
- lda #LOW(frame_0_name_table)
- sta <COPY_SOURCE_ADDR
- lda #HIGH(frame_0_name_table)
- sta <COPY_SOURCE_ADDR+1
- jsr load_name_table
- ; выбираем CHR банк с автопереключением
- lda #(BANK(frame_0_pattern)-16)/2
- jsr select_chr_bank
- ; включаем PPU
- jsr enable_ppu
- ; загружаем палитру
- lda #LOW(frame_0_palette)
- sta <PAL_SOURCE_ADDR
- lda #HIGH(frame_0_palette)
- sta <PAL_SOURCE_ADDR+1
- ; плавно прибавляем яркость
- jsr dim_in
- ; ждём любую кнопку
- jsr pause
- ; убавляем яркость
- jsr dim_out
+ txs
- jsr wait_blank
- ; отображаем текст
- lda #LOW(text_0)
- sta <TEXT_SOURCE_ADDR
- lda #HIGH(text_0)
- sta <TEXT_SOURCE_ADDR+1
- jsr print_text
-
- jsr wait_blank
- jsr disable_ppu
- ; обнуляем скроллинг
- jsr reset_scroll
- ; загружаем nametable
- lda #BANK(frame_1_name_table)/2
- jsr select_prg_bank
- lda #LOW(frame_1_name_table)
- sta <COPY_SOURCE_ADDR
- lda #HIGH(frame_1_name_table)
- sta <COPY_SOURCE_ADDR+1
- jsr load_name_table
- ; выбираем CHR банк с автопереключением
- lda #(BANK(frame_1_pattern)-16)/2
- jsr select_chr_bank
- ; включаем PPU
- jsr enable_ppu
- ; загружаем палитру
- lda #LOW(frame_1_palette)
- sta <PAL_SOURCE_ADDR
- lda #HIGH(frame_1_palette)
- sta <PAL_SOURCE_ADDR+1
- ; плавно прибавляем яркость
- jsr dim_in
- ; ждём любую кнопку
- jsr pause
- ; убавляем яркость
- jsr dim_out
-
- jsr wait_blank
- ; отображаем текст
- lda #LOW(text_1)
- sta <TEXT_SOURCE_ADDR
- lda #HIGH(text_1)
- sta <TEXT_SOURCE_ADDR+1
- jsr print_text
-
- jsr wait_blank
- jsr disable_ppu
- ; обнуляем скроллинг
- jsr reset_scroll
- ; загружаем nametable
- lda #BANK(frame_2_name_table)/2
- jsr select_prg_bank
- lda #LOW(frame_2_name_table)
+ ; обнуление переменных
+clear_memory:
+ lda #$00
sta <COPY_SOURCE_ADDR
- lda #HIGH(frame_2_name_table)
sta <COPY_SOURCE_ADDR+1
- jsr load_name_table
- ; выбираем CHR банк с автопереключением
- lda #(BANK(frame_2_pattern)-16)/2
- jsr select_chr_bank
- ; включаем PPU
- jsr enable_ppu
- ; загружаем палитру
- lda #LOW(frame_2_palette)
- sta <PAL_SOURCE_ADDR
- lda #HIGH(frame_2_palette)
- sta <PAL_SOURCE_ADDR+1
- ; плавно прибавляем яркость
- jsr dim_in
- ; ждём любую кнопку
- jsr pause
- ; убавляем яркость
- jsr dim_out
+ lda #0
+ ldy #$02
+.memory_clean_loop:
+ sta [COPY_SOURCE_ADDR], y
+ iny
+ bne .memory_clean_loop
- jsr wait_blank
- ; отображаем текст
- lda #LOW(text_2)
- sta <TEXT_SOURCE_ADDR
- lda #HIGH(text_2)
- sta <TEXT_SOURCE_ADDR+1
- jsr print_text
-
- jsr disable_ppu
- ; обнуляем скроллинг
- jsr reset_scroll
- ; загружаем nametable
- lda #BANK(title_name_table)/2
+ lda #BANK(main)/2
jsr select_prg_bank
- lda #LOW(title_name_table)
- sta <COPY_SOURCE_ADDR
- lda #HIGH(title_name_table)
- sta <COPY_SOURCE_ADDR+1
- jsr load_name_table
- ; выбираем CHR банк с автопереключением
- lda #(BANK(title_pattern)-16)/2
- jsr select_chr_bank
- ; включаем PPU
- jsr enable_ppu
- ; загружаем палитру
- lda #LOW(title_palette)
- sta <PAL_SOURCE_ADDR
- lda #HIGH(title_palette)
- sta <PAL_SOURCE_ADDR+1
- ; плавно прибавляем яркость
- jsr dim_in
- ; ждём любую кнопку
- jsr pause
- ; убавляем яркость
- jsr dim_out
-
- jsr wait_blank
- ; отображаем текст
- lda #LOW(text_3)
- sta <TEXT_SOURCE_ADDR
- lda #HIGH(text_3)
- sta <TEXT_SOURCE_ADDR+1
- lda #1
- sta <THE_END
- jsr print_text
-
- ; конец
-
- ; авторы проекта
-credits:
- jsr disable_ppu
- ; обнуляем скроллинг
- jsr reset_scroll
- ; загружаем nametable
- lda #BANK(credits_name_table)/2
- jsr select_prg_bank
- lda #LOW(credits_name_table)
- sta <COPY_SOURCE_ADDR
- lda #HIGH(credits_name_table)
- sta <COPY_SOURCE_ADDR+1
- jsr load_name_table
- ; выбираем CHR банк с автопереключением
- lda #(BANK(credits_pattern)-16)/2
- jsr select_chr_bank
- ; включаем PPU
- jsr enable_ppu
- ; загружаем палитру
- lda #LOW(credits_palette)
- sta <PAL_SOURCE_ADDR
- lda #HIGH(credits_palette)
- sta <PAL_SOURCE_ADDR+1
- ; плавно прибавляем яркость
- jsr dim_in
-.loop:
- jsr wait_blank
- jmp .loop
+ jmp main
+ ; основное прерывание по таймеру картриджа
IRQ:
php
pha
@@ -303,11 +97,12 @@ IRQ:
; вызываем код музыки из предпоследнего банка
; заодно это делает ack прерыванию
- lda #6
+ lda #BANK(music)/2
sta $6000
- jsr $A99C ; играем музыку
+ ; играем музыку
+ jsr $A99C
; читаем контроллер
- lda #0
+ lda #BANK(read_controller)/2
sta $6000
jsr read_controller
; возвращаем назад активный банк
@@ -321,7 +116,8 @@ IRQ:
pla
plp
rti
-
+
+ ; прерывание по vblank
NMI:
php
pha
@@ -331,7 +127,7 @@ NMI:
pha
inc <FRAMES
- ; активируем прерывание
+ ; запускаем таймер в картридже
lda <ACTIVE_BANK
ora #%10000000
sta $6000
@@ -350,12 +146,36 @@ select_prg_bank:
sta $6000
rts
- ; субрутина для выбора CHR банка
-select_chr_bank:
- asl A
- asl A
+ ; субрутина для выбора CHR банка с автопереключением
+select_chr_auto_bank:
ora #%10000000
sta $6001
+ rts
+
+ ; субрутина для выбора CHR банка без автопереключения
+select_chr_solid_bank:
+ sta $6001
+ rts
+
+ ; инициализация музыки
+init_music:
+ lda ACTIVE_BANK
+ pha
+ lda #BANK(music)/2
+ jsr select_prg_bank
+ ; номер трека
+ lda <CONSOLE_TYPE
+ ; в регистре X задаётся регион: PAL или NTSC
+ ldx <CONSOLE_TYPE
+ ; инициализируем музыкальный проигрыватель
+ jsr $A999
+ pla
+ jsr select_prg_bank
+ rts
+
+ ; далее пихаем код в нулевой банк
+ .bank 0
+ .org $8000
enable_ppu:
lda #%00001110
@@ -439,7 +259,14 @@ wait_blank_x:
rts
; загружаем nametable в $2000
+ ; в A номер банка
+ ; в COPY_SOURCE_ADDR - адрес данных
load_name_table:
+ tax
+ lda ACTIVE_BANK
+ pha
+ txa
+ jsr select_prg_bank
lda #$20
sta $2006
lda #$00
@@ -454,24 +281,8 @@ load_name_table:
inc <COPY_SOURCE_ADDR+1
dex
bne .loop
- rts
-
-dim_in:
- lda #0
- jsr select_prg_bank
- jsr dim_in_s
- rts
-
-dim_out:
- lda #0
- jsr select_prg_bank
- jsr dim_out_s
- rts
-
-print_text:
- lda #0
+ pla
jsr select_prg_bank
- jsr print_text_s
rts
reset_scroll:
@@ -505,9 +316,7 @@ pause:
jsr wait_any_button
rts
- .bank 0
- .org $8000
-
+ .include "main.asm"
.include "clean.asm"
.include "dimming.asm"
.include "text.asm"