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-06 14:41:41 +0300
committerAlexey 'Cluster' Avdyukhin <clusterrr@clusterrr.com>2020-11-06 14:41:41 +0300
commit8b0b463f4fded396a6ad90874f8766f769f05e35 (patch)
treef8c8a973fd140b30088ecdb814465e9af52465ab
parentfb80a2901c7b68da0b4c229b265553fa6b3eae37 (diff)
Faster text, shorted console detect
-rw-r--r--bank0_subroutines.asm117
-rw-r--r--warface.asm124
2 files changed, 125 insertions, 116 deletions
diff --git a/bank0_subroutines.asm b/bank0_subroutines.asm
index d442ad3..4aa8c78 100644
--- a/bank0_subroutines.asm
+++ b/bank0_subroutines.asm
@@ -50,18 +50,11 @@ console_detect_loop:
console_detect_s:
bit PPUSTATUS
bpl console_detect_loop
- lda #$00
+ lda #$01
cpy #$09
- bne console_detect_not_ntsc
-console_detect_not_ntsc:
- cpy #$08
- bne console_detect_not_pal
- ora #$01
-console_detect_not_pal:
- cpy #$0B
- bne console_detect_not_dendy
- ora #$01
-console_detect_not_dendy:
+ bne console_detect_end
+ lda #$00
+console_detect_end:
sta <CONSOLE_TYPE
; включаем NMI
lda #%10000000
@@ -142,9 +135,9 @@ preload_palette:
; загружаем 16 байт палитры в $3F00
load_palette:
lda #LOW(PALETTE_CACHE)
- sta COPY_SOURCE_ADDR
+ sta <COPY_SOURCE_ADDR
lda #HIGH(PALETTE_CACHE)
- sta COPY_SOURCE_ADDR+1
+ sta <COPY_SOURCE_ADDR+1
lda #$3F
sta $2006
lda #$00
@@ -163,9 +156,9 @@ load_palette:
; загружаем 16 байт палитры в $3F10
load_sprite_palette:
lda #LOW(PALETTE_CACHE)
- sta COPY_SOURCE_ADDR
+ sta <COPY_SOURCE_ADDR
lda #HIGH(PALETTE_CACHE)
- sta COPY_SOURCE_ADDR+1
+ sta <COPY_SOURCE_ADDR+1
lda #$3F
sta $2006
lda #$10
@@ -252,19 +245,19 @@ print_text:
jsr clear_screen
; загружаем палитру
lda #LOW(symbols_palette)
- sta PAL_SOURCE_ADDR
+ sta <PAL_SOURCE_ADDR
lda #HIGH(symbols_palette)
- sta PAL_SOURCE_ADDR+1
+ sta <PAL_SOURCE_ADDR+1
jsr preload_palette
jsr load_palette
lda #3
- sta TEXT_LINE
+ sta <TEXT_LINE
lda #1
- sta TEXT_POS
+ sta <TEXT_POS
sta SPRITES_ENABLED
lda #0
- sta TEXT_NAMETABLE
- sta TEXT_SCROLL_STARTED
+ sta <TEXT_NAMETABLE
+ sta <TEXT_SCROLL_STARTED
jsr reset_scroll
jsr wait_blank_simple
jsr enable_ppu
@@ -280,39 +273,39 @@ print_text:
.not_next_line:
; печатаем символ
jsr symbol_print
- lda KONAMI_CODE_TRIGGERED
+ lda <KONAMI_CODE_TRIGGERED
bne .exit_to_credits
.inc_source_pos:
- inc TEXT_SOURCE_ADDR
+ inc <TEXT_SOURCE_ADDR
bne .inc_text_pos
- inc TEXT_SOURCE_ADDR+1
+ inc <TEXT_SOURCE_ADDR+1
.inc_text_pos:
- inc TEXT_POS
+ inc <TEXT_POS
jmp .next_char
.end:
- lda THE_END
+ lda <THE_END
beq .not_the_end
.endless_loop:
jsr wait_blank
- lda KONAMI_CODE_TRIGGERED
+ lda <KONAMI_CODE_TRIGGERED
bne .exit_to_credits
jmp .endless_loop
.not_the_end
jsr wait_buttons_not_pressed
jsr wait_any_button
lda #LOW(symbols_palette)
- sta PAL_SOURCE_ADDR
+ sta <PAL_SOURCE_ADDR
lda #HIGH(symbols_palette)
- sta PAL_SOURCE_ADDR+1
+ sta <PAL_SOURCE_ADDR+1
jsr dim_out
lda #0
sta SPRITES_ENABLED
rts
.exit_to_credits:
lda #LOW(symbols_palette)
- sta PAL_SOURCE_ADDR
+ sta <PAL_SOURCE_ADDR
lda #HIGH(symbols_palette)
- sta PAL_SOURCE_ADDR+1
+ sta <PAL_SOURCE_ADDR+1
jsr dim_out
lda #0
sta SPRITES_ENABLED
@@ -322,9 +315,9 @@ print_text:
symbol_address:
pha
bit PPUSTATUS
- lda TEXT_NAMETABLE
+ lda <TEXT_NAMETABLE
bne .second_nametable
- lda TEXT_LINE
+ lda <TEXT_LINE
lsr A
lsr A
lsr A
@@ -332,7 +325,7 @@ symbol_address:
adc #$20
jmp .write_nametable_hi
.second_nametable:
- lda TEXT_LINE
+ lda <TEXT_LINE
lsr A
lsr A
lsr A
@@ -340,13 +333,13 @@ symbol_address:
adc #$28
.write_nametable_hi
sta PPUADDR
- lda TEXT_LINE
+ lda <TEXT_LINE
asl A
asl A
asl A
asl A
asl A
- ora TEXT_POS
+ ora <TEXT_POS
sta PPUADDR
pla
rts
@@ -355,7 +348,7 @@ symbol_address:
symbol_print:
pha
; при удержании любой кнопки ускоряем
- lda BUTTONS
+ lda <BUTTONS
bne .skip_sprite_draw
; настраиваем спрайт
@@ -366,7 +359,7 @@ symbol_print:
pha
lda #0
sta SPRITES+2
- lda TEXT_POS
+ lda <TEXT_POS
asl A
asl A
asl A
@@ -391,7 +384,6 @@ symbol_print:
jsr .set_sprite_y
jsr load_sprite_palette
-.skip_sprite_draw:
; скрываем спрайт
lda #$FF
sta SPRITES
@@ -400,30 +392,39 @@ symbol_print:
sta OAMADDR
lda #HIGH(SPRITES)
sta OAMDMA
+.skip_sprite_draw:
; вычисляем адреса
- ;jsr wait_blank
jsr symbol_address
pla
; печатаем символ
sta PPUDATA
+ inc <SYMBOL_COUNTER
+ ; если зажата кнопка, то ждём vlank раз в 4 символа
+ lda <BUTTONS
+ beq .not_skip_vblank
+ lda <SYMBOL_COUNTER
+ and #%11
+ bne .skip_vblank
+.not_skip_vblank:
jsr wait_blank
+.skip_vblank:
rts
.set_sprite_y:
- lda TEXT_LINE
+ lda <TEXT_LINE
asl A
asl A
asl A
sec
- sbc SCROLL_POS
+ sbc <SCROLL_POS
bcs .not_ovf
sec
sbc #16
.not_ovf
sec
sbc #1
- ldx SCROLL_POS
- cpx SCROLL_TARGET_POS
+ ldx <SCROLL_POS
+ cpx <SCROLL_TARGET_POS
beq .not_scrolling
sec
sbc #1
@@ -439,33 +440,33 @@ symbol_print:
next_line:
jsr wait_blank
lda #0
- sta TEXT_POS
+ sta <TEXT_POS
; увеличиваем номер строки
- inc TEXT_LINE
- lda TEXT_LINE
+ inc <TEXT_LINE
+ lda <TEXT_LINE
; если он равен 30...
cmp #30
bne .scroll_check
; обнуляем строку
lda #0
- sta TEXT_LINE
+ sta <TEXT_LINE
; меняем nametable
lda TEXT_NAMETABLE
eor #1
- sta TEXT_NAMETABLE
+ sta <TEXT_NAMETABLE
; проверка, не пора ли начинать скроллинг
.scroll_check:
- lda TEXT_LINE
+ lda <TEXT_LINE
cmp #27 ; на какой строке начинать скроллить
bne .not_scroll_start
; пора
- inc TEXT_SCROLL_STARTED
+ inc <TEXT_SCROLL_STARTED
.not_scroll_start:
; включен ли сейчас скроллиг?
- lda TEXT_SCROLL_STARTED
+ lda <TEXT_SCROLL_STARTED
beq .clear_line
; увеличиваем скроллинг на 8 пикселей
- lda SCROLL_TARGET_POS
+ lda <SCROLL_TARGET_POS
clc
adc #8
; если дошли до 240й строки, обнуляем
@@ -473,14 +474,14 @@ next_line:
bne .not_next_nt
lda #0
.not_next_nt:
- sta SCROLL_TARGET_POS
+ sta <SCROLL_TARGET_POS
; очищаем строку на противоположном nametable
.clear_line:
jsr wait_blank
bit PPUSTATUS
- lda TEXT_NAMETABLE
+ lda <TEXT_NAMETABLE
bne .second_nametable
- lda TEXT_LINE
+ lda <TEXT_LINE
lsr A
lsr A
lsr A
@@ -488,7 +489,7 @@ next_line:
adc #$28
jmp .write_nametable_hi
.second_nametable:
- lda TEXT_LINE
+ lda <TEXT_LINE
lsr A
lsr A
lsr A
@@ -496,7 +497,7 @@ next_line:
adc #$20
.write_nametable_hi
sta PPUADDR
- lda TEXT_LINE
+ lda <TEXT_LINE
asl A
asl A
asl A
diff --git a/warface.asm b/warface.asm
index 505ac4c..d67bd6e 100644
--- a/warface.asm
+++ b/warface.asm
@@ -41,6 +41,7 @@ BUTTONS_TMP .rs 1 ; temporary variable for buttons
LAST_KONAMI_BUTTON .rs 1 ; last button state for Konami Code check
KONAMI_CODE_STATE .rs 1 ; Konami Code state
KONAMI_CODE_TRIGGERED .rs 1 ; Konami Code triggered flag
+SYMBOL_COUNTER .rs 1 ; счтётчик напечатанных символов
.rsset $0400
SPRITES .rs 256 ; тут хранятся спрайты
@@ -73,7 +74,7 @@ Start:
jsr select_prg_bank
lda #0 ; номер трека
; в регистре X задаётся регион: PAL или NTSC
- ldx CONSOLE_TYPE
+ ldx <CONSOLE_TYPE
jsr $A999 ; Инициализируем музыкальный проигрыватель
ldx #30
@@ -86,9 +87,9 @@ Start:
lda #BANK(title_name_table)/2
jsr select_prg_bank
lda #LOW(title_name_table)
- sta COPY_SOURCE_ADDR
+ sta <COPY_SOURCE_ADDR
lda #HIGH(title_name_table)
- sta COPY_SOURCE_ADDR+1
+ sta <COPY_SOURCE_ADDR+1
jsr load_name_table
; выбираем CHR банк с автопереключением
lda #(BANK(title_pattern)-16)/2
@@ -99,14 +100,14 @@ Start:
lda #0
jsr select_prg_bank
lda #LOW(title_palette)
- sta PAL_SOURCE_ADDR
+ sta <PAL_SOURCE_ADDR
lda #HIGH(title_palette)
- sta PAL_SOURCE_ADDR+1
+ sta <PAL_SOURCE_ADDR+1
; плавно прибавляем яркость
jsr dim_in
cli ; музыка
; ждём любую кнопку
- jsr wait_any_button
+ jsr pause
; убавляем яркость
jsr dim_out
@@ -118,9 +119,9 @@ Start:
lda #BANK(frame_0_name_table)/2
jsr select_prg_bank
lda #LOW(frame_0_name_table)
- sta COPY_SOURCE_ADDR
+ sta <COPY_SOURCE_ADDR
lda #HIGH(frame_0_name_table)
- sta COPY_SOURCE_ADDR+1
+ sta <COPY_SOURCE_ADDR+1
jsr load_name_table
; выбираем CHR банк с автопереключением
lda #(BANK(frame_0_pattern)-16)/2
@@ -131,22 +132,22 @@ Start:
lda #0
jsr select_prg_bank
lda #LOW(frame_0_palette)
- sta PAL_SOURCE_ADDR
+ sta <PAL_SOURCE_ADDR
lda #HIGH(frame_0_palette)
- sta PAL_SOURCE_ADDR+1
+ sta <PAL_SOURCE_ADDR+1
; плавно прибавляем яркость
jsr dim_in
; ждём любую кнопку
- jsr wait_any_button
+ jsr pause
; убавляем яркость
jsr dim_out
jsr wait_blank
; отображаем текст
lda #LOW(text_0)
- sta TEXT_SOURCE_ADDR
+ sta <TEXT_SOURCE_ADDR
lda #HIGH(text_0)
- sta TEXT_SOURCE_ADDR+1
+ sta <TEXT_SOURCE_ADDR+1
lda #0
jsr select_prg_bank
jsr print_text
@@ -159,9 +160,9 @@ Start:
lda #BANK(frame_1_name_table)/2
jsr select_prg_bank
lda #LOW(frame_1_name_table)
- sta COPY_SOURCE_ADDR
+ sta <COPY_SOURCE_ADDR
lda #HIGH(frame_1_name_table)
- sta COPY_SOURCE_ADDR+1
+ sta <COPY_SOURCE_ADDR+1
jsr load_name_table
; выбираем CHR банк с автопереключением
lda #(BANK(frame_1_pattern)-16)/2
@@ -172,22 +173,22 @@ Start:
lda #0
jsr select_prg_bank
lda #LOW(frame_1_palette)
- sta PAL_SOURCE_ADDR
+ sta <PAL_SOURCE_ADDR
lda #HIGH(frame_1_palette)
- sta PAL_SOURCE_ADDR+1
+ sta <PAL_SOURCE_ADDR+1
; плавно прибавляем яркость
jsr dim_in
; ждём любую кнопку
- jsr wait_any_button
+ jsr pause
; убавляем яркость
jsr dim_out
jsr wait_blank
; отображаем текст
lda #LOW(text_1)
- sta TEXT_SOURCE_ADDR
+ sta <TEXT_SOURCE_ADDR
lda #HIGH(text_1)
- sta TEXT_SOURCE_ADDR+1
+ sta <TEXT_SOURCE_ADDR+1
lda #0
jsr select_prg_bank
jsr print_text
@@ -200,9 +201,9 @@ Start:
lda #BANK(frame_2_name_table)/2
jsr select_prg_bank
lda #LOW(frame_2_name_table)
- sta COPY_SOURCE_ADDR
+ sta <COPY_SOURCE_ADDR
lda #HIGH(frame_2_name_table)
- sta COPY_SOURCE_ADDR+1
+ sta <COPY_SOURCE_ADDR+1
jsr load_name_table
; выбираем CHR банк с автопереключением
lda #(BANK(frame_2_pattern)-16)/2
@@ -213,22 +214,22 @@ Start:
lda #0
jsr select_prg_bank
lda #LOW(frame_2_palette)
- sta PAL_SOURCE_ADDR
+ sta <PAL_SOURCE_ADDR
lda #HIGH(frame_2_palette)
- sta PAL_SOURCE_ADDR+1
+ sta <PAL_SOURCE_ADDR+1
; плавно прибавляем яркость
jsr dim_in
; ждём любую кнопку
- jsr wait_any_button
+ jsr pause
; убавляем яркость
jsr dim_out
jsr wait_blank
; отображаем текст
lda #LOW(text_2)
- sta TEXT_SOURCE_ADDR
+ sta <TEXT_SOURCE_ADDR
lda #HIGH(text_2)
- sta TEXT_SOURCE_ADDR+1
+ sta <TEXT_SOURCE_ADDR+1
lda #0
jsr select_prg_bank
jsr print_text
@@ -240,9 +241,9 @@ Start:
lda #BANK(title_name_table)/2
jsr select_prg_bank
lda #LOW(title_name_table)
- sta COPY_SOURCE_ADDR
+ sta <COPY_SOURCE_ADDR
lda #HIGH(title_name_table)
- sta COPY_SOURCE_ADDR+1
+ sta <COPY_SOURCE_ADDR+1
jsr load_name_table
; выбираем CHR банк с автопереключением
lda #(BANK(title_pattern)-16)/2
@@ -253,26 +254,26 @@ Start:
lda #0
jsr select_prg_bank
lda #LOW(title_palette)
- sta PAL_SOURCE_ADDR
+ sta <PAL_SOURCE_ADDR
lda #HIGH(title_palette)
- sta PAL_SOURCE_ADDR+1
+ sta <PAL_SOURCE_ADDR+1
; плавно прибавляем яркость
jsr dim_in
; ждём любую кнопку
- jsr wait_any_button
+ jsr pause
; убавляем яркость
jsr dim_out
jsr wait_blank
; отображаем текст
lda #LOW(text_3)
- sta TEXT_SOURCE_ADDR
+ sta <TEXT_SOURCE_ADDR
lda #HIGH(text_3)
- sta TEXT_SOURCE_ADDR+1
+ sta <TEXT_SOURCE_ADDR+1
lda #0
jsr select_prg_bank
lda #1
- sta THE_END
+ sta <THE_END
jsr print_text
; конец
@@ -286,9 +287,9 @@ credits:
lda #BANK(credits_name_table)/2
jsr select_prg_bank
lda #LOW(credits_name_table)
- sta COPY_SOURCE_ADDR
+ sta <COPY_SOURCE_ADDR
lda #HIGH(credits_name_table)
- sta COPY_SOURCE_ADDR+1
+ sta <COPY_SOURCE_ADDR+1
jsr load_name_table
; выбираем CHR банк с автопереключением
lda #(BANK(credits_pattern)-16)/2
@@ -299,9 +300,9 @@ credits:
lda #0
jsr select_prg_bank
lda #LOW(credits_palette)
- sta PAL_SOURCE_ADDR
+ sta <PAL_SOURCE_ADDR
lda #HIGH(credits_palette)
- sta PAL_SOURCE_ADDR+1
+ sta <PAL_SOURCE_ADDR+1
; плавно прибавляем яркость
jsr dim_in
.loop:
@@ -326,7 +327,7 @@ IRQ:
sta $6000
jsr read_controller
; возвращаем назад активный банк
- lda ACTIVE_BANK
+ lda <ACTIVE_BANK
sta $6000
pla
@@ -345,9 +346,9 @@ NMI:
txa
pha
- inc FRAMES
+ inc <FRAMES
; активируем прерывание
- lda ACTIVE_BANK
+ lda <ACTIVE_BANK
ora #%10000000
sta $6000
@@ -361,7 +362,7 @@ NMI:
; субрутина выбора PRG банка
select_prg_bank:
- sta ACTIVE_BANK
+ sta <ACTIVE_BANK
sta $6000
rts
@@ -376,9 +377,9 @@ enable_ppu:
bit PPUSTATUS
lda #0
sta PPUSCROLL
- lda SCROLL_POS
+ lda <SCROLL_POS
sta PPUSCROLL
- lda SCROLL_NT
+ lda <SCROLL_NT
bne .second_nt
lda #%10000000
jmp .write_ppuctrl
@@ -387,7 +388,7 @@ enable_ppu:
.write_ppuctrl
sta PPUCTRL
lda #%00001110
- ldx SPRITES_ENABLED
+ ldx <SPRITES_ENABLED
beq .sprites_disabled
ora #%00010000
.sprites_disabled:
@@ -406,9 +407,9 @@ disable_ppu:
; субрутина простого ожидания vblank
wait_blank_simple:
pha
- lda FRAMES
+ lda <FRAMES
.loop:
- cmp FRAMES
+ cmp <FRAMES
beq .loop
pla
rts
@@ -422,18 +423,18 @@ wait_blank:
pha
; скроллим, если нужно
- lda SCROLL_POS
- cmp SCROLL_TARGET_POS
+ lda <SCROLL_POS
+ cmp <SCROLL_TARGET_POS
beq .end_scroll
- inc SCROLL_POS
- lda SCROLL_POS
+ inc <SCROLL_POS
+ lda <SCROLL_POS
cmp #240
bne .end_scroll
lda #0
- sta SCROLL_POS
- lda SCROLL_NT
+ sta <SCROLL_POS
+ lda <SCROLL_NT
eor #1
- sta SCROLL_NT
+ sta <SCROLL_NT
.end_scroll:
jsr enable_ppu
@@ -484,9 +485,9 @@ dim_out:
reset_scroll:
lda #0
- sta SCROLL_POS
- sta SCROLL_NT
- sta SCROLL_TARGET_POS
+ sta <SCROLL_POS
+ sta <SCROLL_NT
+ sta <SCROLL_TARGET_POS
rts
; waiting for button release
@@ -506,6 +507,13 @@ wait_any_button:
.end
rts
+pause:
+ jsr wait_buttons_not_pressed
+ ldx #150
+ jsr wait_blank_x
+ jsr wait_any_button
+ rts
+
.include "bank0_subroutines.asm"
.include "buttons.asm"
.include "nametables.asm"