GBC fixes: skip logo fade + set logo vram map

This commit is contained in:
2019-01-13 00:05:20 +01:00
parent 7f49a4518d
commit bd9fae1637
3 changed files with 94 additions and 62 deletions

View File

@@ -38,6 +38,11 @@ GraphicB:
ret
Intro:
; skip fade-out on gameboy color
ldh a, [GameboyType]
cp a, $11
jr z, .setBGPalette
; fade bg palette
ld b, 8
.fadeDelay0
@@ -64,6 +69,7 @@ Intro:
jr nz, .fadeDelay2
; load bg and obj palette [0=black, 1=dark gray, 2=light gray, 3=white]
.setBGPalette
ld a, %11100100
ldh [rBGP], a
@@ -80,21 +86,43 @@ Intro:
cp $34
jr nz, .logoloop
; move all map indices to block 1
; display logo in map 0 from block 1
ld hl, _SCRN0
ld bc, 18 * 32
.copy
ld d, $80
ld bc, 8 * 32 + 4
call VideoMemorySet
ld b, 12
.logoLine1
ldh a, [rSTAT]
and a, STATF_BUSY
jr nz, .copy
ld a, [hl]
add a, $80
ld [hl+], a
dec bc
ld a, b
or c
jr nz, .copy
jr nz, .logoLine1
inc d
ld [hl], d
inc hl
dec b
jr nz, .logoLine1
ld d, $80
ld bc, 20
call VideoMemorySet
ld b, 12
ld d, $8C
.logoLine2
ldh a, [rSTAT]
and a, STATF_BUSY
jr nz, .logoLine2
inc d
ld [hl], d
inc hl
dec b
jr nz, .logoLine2
ld d, $80
ld bc, 8 * 32 + 28
call VideoMemorySet
; display nintendo logo from new map
ld a, LCDCF_ON | LCDCF_BGON | LCDCF_BG9800
ldh [rLCDC], a

View File

@@ -7,8 +7,10 @@ EMPTY_BG_TILE EQU 17
ANIMATE EQU %01
STEP EQU %10
EXPORT GameboyType
SECTION "Main Memory", HRAM
Control: ds 1
GameboyType: ds 1
SECTION "Header", ROM0[$100]
EntryPoint:
@@ -18,58 +20,10 @@ REPT $150 - $104
db 0
ENDR
SECTION "Jingle", ROM0
Jingle:
; load initial frequency into HL
FREQUENCY = 330
ld hl, PULSE_FREQUENCY
; load step to be added to frequency in DE
; based on if a != 0 or not
or a
jr z, .up
.down
ld de, 100
jr .do
.up
ld de, -100
.do
; load note count
ld b, 3
.loop
; play pulse channel 1 with frequency set in HL
xor a
ldh [rNR10], a ; sweep
ld a, (%01 << 6) + 30
ldh [rNR11], a ; pattern + sound length
ld a, $F1
ldh [rNR12], a ; init volume + envelope sweep
ld a, l
ldh [rNR13], a
ld a, h
or a, SOUND_START
ldh [rNR14], a
; add DE to HL frequency
add hl, de
; wait ~166ms
ld c, 6
.delay
HaltAndClearInterrupts
dec c
jr nz, .delay
; repeat a few times
dec b
ret z
jr .loop
SECTION "Main", ROM0[$150]
Start:
Start:
ldh [GameboyType], a
; enable sound
ld a, $80
ld [rNR52], a ; sound ON
@@ -233,3 +187,53 @@ FREQUENCY = 220
ldh [rLCDC], a
jr .mainloop
SECTION "Jingle", ROM0
Jingle:
; load initial frequency into HL
FREQUENCY = 330
ld hl, PULSE_FREQUENCY
; load step to be added to frequency in DE
; based on if a != 0 or not
or a
jr z, .up
.down
ld de, 100
jr .do
.up
ld de, -100
.do
; load note count
ld b, 3
.loop
; play pulse channel 1 with frequency set in HL
xor a
ldh [rNR10], a ; sweep
ld a, (%01 << 6) + 30
ldh [rNR11], a ; pattern + sound length
ld a, $F1
ldh [rNR12], a ; init volume + envelope sweep
ld a, l
ldh [rNR13], a
ld a, h
or a, SOUND_START
ldh [rNR14], a
; add DE to HL frequency
add hl, de
; wait ~166ms
ld c, 6
.delay
HaltAndClearInterrupts
dec c
jr nz, .delay
; repeat a few times
dec b
ret z
jr .loop

BIN
rom.gb

Binary file not shown.