From ba57562bd844df0945a5f636aa902bbab885bc12 Mon Sep 17 00:00:00 2001 From: Daniel Borges Date: Mon, 7 Jan 2019 14:53:45 +0100 Subject: [PATCH] simpler way of fading out sound in nintendo out animation + sounds when adding/removing cells --- Code/edit.asm | 74 +++++++++++++++++++++++++++++++++++------- Code/nintendo-out.asm | 30 +++++------------ rom.gb | Bin 32768 -> 32768 bytes 3 files changed, 72 insertions(+), 32 deletions(-) diff --git a/Code/edit.asm b/Code/edit.asm index b2e8fb4..7915990 100644 --- a/Code/edit.asm +++ b/Code/edit.asm @@ -42,6 +42,14 @@ EditOldBuffer: or a, LCDCF_OBJON ldh [rLCDC], a + ; sound ON + ld a, $80 + ldh [rNR52], a + ld a, $77 + ldh [rNR50], a ; max volume on both speakers + ld a, $99 + ldh [rNR51], a ; channels 1 (pulse) and 4 (noise) on both speakers + ; init sprite animation xor a ldh [SpriteAnimation], a @@ -207,13 +215,17 @@ EditOldBuffer: xor a, %100 ldh [Video + 1], a + ; sound OFF + xor a + ldh [rNR52], a + ret Section "Value to flag", ROM0, ALIGN[8] Flag: db 1, 2, 4, 8 ; \1: horizontal stride -ToggleInTargetBuffer: MACRO +MoveToCell: MACRO ; move pointer to 2x2 cell group ldh a, [SelectY] sra a @@ -231,7 +243,9 @@ ToggleInTargetBuffer: MACRO sra a ld e, a add hl, de - +ENDM + +ToggleCell: ; compute cell number in 2x2 cell group ldh a, [SelectX] and a, 1 @@ -241,28 +255,66 @@ ToggleInTargetBuffer: MACRO sla a or a, b - ; transform cell number to bit offset in 2x2 cell + ; transform cell number to bit mask in 2x2 cell ld d, HIGH(Flag) ld e, a ld a, [de] ld b, a - ld a, [hl] - xor a, b - ld [hl], a -ENDM - -ToggleCell: + ; go to 2x2 cell in video buffer ldh a, [Video] ld l, a ldh a, [Video + 1] ld h, a - ToggleInTargetBuffer 32 + MoveToCell 32 + + ; toggle bit + ld a, [hl] + xor a, b + ld [hl], a + + ; go to 2x2 cell in automata buffer ldh a, [Progress] ld l, a ldh a, [Old] ld h, a - ToggleInTargetBuffer 20 + MoveToCell 20 + + ; toggle bit + ld a, [hl] + xor a, b + ld [hl], a + + ; do sound based on new value + and a, b + jr z, .blurp1 + + ; do noisy sound +.blurp0 + xor a + ldh [rNR41], a ; sound length + ld a, $F1 + ldh [rNR42], a ; init volume + envelope sweep + ld a, $82 + ldh [rNR43], a ; frequency + ld a, $80 + ldh [rNR44], a ; start + jr .exit + + ; do pulsy sound +.blurp1 + xor a + ldh [rNR10], a ; sweep + ld a, (%01 << 6) + 30 + ldh [rNR11], a ; pattern + sound length + ld a, $43 + ldh [rNR12], a ; init volume + envelope sweep + ld a, $D7 + ldh [rNR13], a ; frequency low ($6D7 = 1751 => 440Hz) + ld a, $83 + ldh [rNR14], a ; start + frequency high + +.exit ret Clear: diff --git a/Code/nintendo-out.asm b/Code/nintendo-out.asm index a6f5980..40df756 100644 --- a/Code/nintendo-out.asm +++ b/Code/nintendo-out.asm @@ -24,14 +24,14 @@ ScrollNintendoOut: ; sound ON ld a, $80 - ldh [rNR52], a ; sound ON with noise channel + ldh [rNR52], a 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 + xor a ldh [rNR41], a ; set sound duration ld a, $F0 ldh [rNR42], a ; set volume @@ -74,36 +74,24 @@ ScrollNintendoOut: ldh [rSCY], a ; change noise + xor a + ldh [rNR41], a ; set sound duration + ld a, $F4 + ldh [rNR42], a ; set volume with long sweep 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 + ld a, $80 + ldh [rNR44], a ; start ; 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 diff --git a/rom.gb b/rom.gb index 7cf6bd034178138d478a5cf92713d686f9b077ce..4951e14ea6e102c99a0f45ebeb543af607ead1b6 100644 GIT binary patch delta 319 zcmV-F0l@x%fC7Mk0Gm0L?7`&A5}w0Xr;)<^f0WhvosxC$JU*Um8d7 zf^YDHXYhy1FDM945g-5=4IuolSMY|*FJBpxF#;bdeyDe#C=svVAU^TnAwGiOB0hlN zBN!8};1E7u;1NDU;1WL9;1fQB;1siD0(=4i-m~EZbprxS2a~}Ip_7aSdk6ZE|2@JV z29v=H6O$hXnzJYhmjMC2v%m}Q0}MWZ;3htI;3Pho;3bo<4^jbplL8QL5#A5*K<546 zK=6a^1mJ_O;3kuQ5ElWjlb8@XB(LBgKJ?%rK4Rb^K7imOb^x#75AZ@f;6m_1{#e2V R5wGAT$+IC5-)@sI4F{rTf^z@> delta 351 zcmZo@U}|V!+Th2i!Nz9C_~8Hg2mEIn1j-oJKX9;n^1%Ipha$rS!5}_H0mid87!?^B z1d}G0F{&}W;+Z^;QJ!}W)7f*3XD2b7)nz!lX!0pWYn`V256$Tx+E43iaQF)M2+Mh9=R^K4T6ffmI*^o(I1VglLMfv6`rWz)u6U>tzG6zpS zz`?&cidBf2$&4MymzjKr%M2)Xo{@9&1Ws2brsZ5nqW+VkxXm}O=MiI`e33thF?F(v zK)(7O{tph%{yuQ{(EN_&LGwvA1(5IfSrvZRH9SzWD}SJ3*YQBrj$!g10V{XAqz6iD zEPUVq;Q!!c^T4TcyM`L8g0daQ14Vq0jfMAv)4zyAw*=NdP&>I