From 99922c35f72bd2675ae857e436fe19bca82a48c7 Mon Sep 17 00:00:00 2001 From: Daniel Borges Date: Fri, 4 Jan 2019 16:50:29 +0100 Subject: [PATCH] make nintendo logo fly off like a rocket --- Code/main.asm | 6 +-- Code/nintendo-out.asm | 106 ++++++++++++++++++++++++++++++++++++++---- Code/utils.asm | 17 ------- Code/utils.inc | 26 +++++++++++ rom.gb | Bin 32768 -> 32768 bytes 5 files changed, 125 insertions(+), 30 deletions(-) create mode 100644 Code/utils.inc diff --git a/Code/main.asm b/Code/main.asm index e16a0c2..3857ff7 100644 --- a/Code/main.asm +++ b/Code/main.asm @@ -12,11 +12,7 @@ REPT $150 - $104 ENDR SECTION "Main", ROM0[$150] -Start: - ; shut sound off - xor a - ld [rNR52], a - +Start: ; enable v-blank interrupt ld a, IEF_VBLANK ld [rIE], a diff --git a/Code/nintendo-out.asm b/Code/nintendo-out.asm index b2303bb..a6f5980 100644 --- a/Code/nintendo-out.asm +++ b/Code/nintendo-out.asm @@ -1,26 +1,116 @@ INCLUDE "hardware.inc" -SECTION "NintendoLogo", ROM0 +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: - ld b, 30 + + ; wait a moment + ld b, 32 .wait - halt - xor a - ld [rIF], a + 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 -.scrollup - halt xor a - ld [rIF], 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 \ No newline at end of file diff --git a/Code/utils.asm b/Code/utils.asm index 85e16d0..9eb80b6 100644 --- a/Code/utils.asm +++ b/Code/utils.asm @@ -28,20 +28,3 @@ MemorySet: or c jr nz, MemorySet ret - - ; \1: sprite ID - ; \2: X position - ; \3: Y position - ; \4: tile number - ; \5: flags -SetSprite: MACRO - ld hl, _OAMRAM + \1 * 4 - ld a, \3 - ld [hl+], a - ld a, \2 - ld [hl+], a - ld a, \4 - ld [hl+], a - ld a, \5 - ld [hl+], a -ENDM diff --git a/Code/utils.inc b/Code/utils.inc new file mode 100644 index 0000000..63b6586 --- /dev/null +++ b/Code/utils.inc @@ -0,0 +1,26 @@ +INCLUDE "hardware.inc" + + ; destroys A +ClearAndEnableInterrupts: MACRO + xor a + ei ; will take effect AFTER next instruction + ldh a, [rIF] +ENDM + + ; \1: sprite ID + ; \2: X position + ; \3: Y position + ; \4: tile number + ; \5: flags + ; destroys A and HL +SetSprite: MACRO + ld hl, _OAMRAM + \1 * 4 + ld a, \3 + ld [hl+], a + ld a, \2 + ld [hl+], a + ld a, \4 + ld [hl+], a + ld a, \5 + ld [hl+], a +ENDM \ No newline at end of file diff --git a/rom.gb b/rom.gb index cea432a74a869d206baf57c9afc7f4a0af1cd0c2..de1b9c6c94c319cae5889a9e216226ec6c7ac3df 100644 GIT binary patch delta 442 zcmZo@U}|V!a$sO&WMX7uVg_L*W@eWEj7$xh@!qn*%$20O+F|JVQi zz<=^X!}b$p3=%&+pR7{iuGpyX^W;Q_HclxeVG!rX$;pL0hLafm>KT~9Iv((!?dB_E zSpUGm?#TmpMTQB2*}RMbjAxHAC^9q%R`W3mFo4tlBvbv5SAj{6LF$1sjLE8Scl`q=yQBw7Y%F{NV1*x?Y#umOZr4y_ jRZs?cNf8}NAq%jv@P2Um7jft*-}(n?CpS;zyHfxFSCpgI delta 299 zcmZo@U}|V!a$sO&WMX7uVg_L*W@Z*PxiW_J5BOOXet_u@PBssm{zV*;VmN6h@}SX9 z=s|-WmmB;qV4V zF@_KA=^r}s*SqsE)IFR0o{M$!c}7Df#@Cw}SxT9iBH1QC