Files
GB-GameOfLife/Code/nintendo-out.asm

116 lines
1.7 KiB
NASM

INCLUDE "hardware.inc"
SECTION "Random", ROM0, ALIGN[4]
Random:
db -1, 1, 2, -1, 4, 3, -2, -1, -4, 3, -1, 5, 2
RandomEnd:
HaltAndClearIF: MACRO
halt
xor a
ld [rIF], a
ENDM
EXPORT ScrollNintendoOut
SECTION "Scroll Nintendo Out", ROM0
ScrollNintendoOut:
; wait a moment
ld b, 32
.wait
HaltAndClearIF
dec b
jr nz, .wait
; sound ON
ld a, $80
ldh [rNR52], a ; sound ON with noise channel
ld a, $77
ldh [rNR50], a ; max volume on both speakers
ld a, $88
ldh [rNR51], a ; noise channel on both speakers
; make noise
ld a, 0
ldh [rNR41], a ; set sound duration
ld a, $F0
ldh [rNR42], a ; set volume
ld a, $72
ldh [rNR43], a ; set frequency
ld a, $80
ldh [rNR44], a ; turn on
; nudge nintendo logo
ld d, HIGH(Random)
ld e, 0
ld b, 42
.noise
HaltAndClearIF
HaltAndClearIF
ld a, [de]
ldh [rSCY], a
inc e
ld a, e
cp a, RandomEnd - Random
jr nz, .next
ld e, 0
.next
ld a, [de]
ldh [rSCX], a
inc e
ld a, e
cp a, RandomEnd - Random
jr nz, .next2
ld e, 0
.next2
dec b
jr nz, .noise
xor a
ldh [rSCY], a
; change noise
ld a, $62
ldh [rNR43], a ; set frequency
ld b, 4 ; number of frames before reducing volume
ld c, 16 ; number of steps before volume is 0
; nintendo logo lift-off!
.scrollup
HaltAndClearIF
; scroll up
ldh a, [rSCY]
inc a
ldh [rSCY], a
; fade out
ld a, c
or a
jr z, .novolumechange
dec b
jr nz, .novolumechange
; decrement volume by 1
; see http://gbdev.gg8.se/wiki/articles/Gameboy_sound_hardware obscure behavior...
ld a, $08
REPT 15
ldh [rNR42], a
ENDR
ld b, 4
dec c
.novolumechange
; loop until nintendo logo is out of screen
ldh a, [rSCY]
cp a, 88
jp nz, .scrollup
; sound off
xor a
ldh [rNR52], a
ret