.PADTO 0x0040 Interrupt_VBlank: JP =VBlank .PADTO 0x0048 Interrupt_Stat: JP =Effect .PADTO 0x0100 JP =Start .PADTO 0x0104 Nintendo_Logo: ; The Nintendo logo must be stored in bytes 0x104-133 .DB $CE,$ED,$66,$66,$CC,$0D,$00,$0B,$03,$73,$00,$83,$00,$0C,$00,$0D .DB $00,$08,$11,$1F,$88,$89,$00,$0E,$DC,$CC,$6E,$E6,$DD,$DD,$D9,$99 .DB $BB,$BB,$67,$63,$6E,$0E,$EC,$CC,$DD,$DC,$99,$9F,$BB,$B9,$33,$3E .PADTO 0x0134 Checksum: ; The bytes 0x134-0x14d need to add up to 0xe7 (= 0xff - 0x19) .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$e7 .DEFINE Wave_Top $c0 Start: LD A, ($42) LD ($82), A LD A, ($43) LD ($83), A LD C, $01 LD A, $03 LD ($FF), A LD A, $40 LD ($41), A LD A, $01 LD ($44), A LD B, $00 LD C, $30 LD H, $Wave_Top LD L, $00 LD A, $00 Clean_Wave.loop: LD (HL+), A CP L JR NZ, =Clean_Wave.loop EI Halt_loop: HALT JP =Halt_loop Effect: LD A, ($44) INC A AND $7f LD ($45), A LD E, A LD D, $Wave_Top LD A, (DE) LD D, $02 LD E, A LD A, (DE) AND $c0 RRCA RRCA RRCA RRCA RRCA RRCA SUB $02 LD D, A LD A, ($83) ADD D LD ($43), A LD A, ($82) ADD D LD ($42), A RETI VBlank: INC B LD A, B AND $03 JR NZ, =VBlank.end CP C JR Z, =Wave_Draw INC C Wave_Draw: LD H, $Wave_Top LD L, $00 VBlank.loop: LD A, (HL) ADD $08 LD (HL+), A LD A, C CP L JR NZ, =VBlank.loop VBlank.end: RETI .PADTO 0x0200 Sin_wave: .DB 0x80, 0x83, 0x86, 0x89, 0x8C, 0x90, 0x93, 0x96 .DB 0x99, 0x9C, 0x9F, 0xA2, 0xA5, 0xA8, 0xAB, 0xAE .DB 0xB1, 0xB3, 0xB6, 0xB9, 0xBC, 0xBF, 0xC1, 0xC4 .DB 0xC7, 0xC9, 0xCC, 0xCE, 0xD1, 0xD3, 0xD5, 0xD8 .DB 0xDA, 0xDC, 0xDE, 0xE0, 0xE2, 0xE4, 0xE6, 0xE8 .DB 0xEA, 0xEB, 0xED, 0xEF, 0xF0, 0xF1, 0xF3, 0xF4 .DB 0xF5, 0xF6, 0xF8, 0xF9, 0xFA, 0xFA, 0xFB, 0xFC .DB 0xFD, 0xFD, 0xFE, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF .DB 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFE, 0xFD .DB 0xFD, 0xFC, 0xFB, 0xFA, 0xFA, 0xF9, 0xF8, 0xF6 .DB 0xF5, 0xF4, 0xF3, 0xF1, 0xF0, 0xEF, 0xED, 0xEB .DB 0xEA, 0xE8, 0xE6, 0xE4, 0xE2, 0xE0, 0xDE, 0xDC .DB 0xDA, 0xD8, 0xD5, 0xD3, 0xD1, 0xCE, 0xCC, 0xC9 .DB 0xC7, 0xC4, 0xC1, 0xBF, 0xBC, 0xB9, 0xB6, 0xB3 .DB 0xB1, 0xAE, 0xAB, 0xA8, 0xA5, 0xA2, 0x9F, 0x9C .DB 0x99, 0x96, 0x93, 0x90, 0x8C, 0x89, 0x86, 0x83 .DB 0x80, 0x7D, 0x7A, 0x77, 0x74, 0x70, 0x6D, 0x6A .DB 0x67, 0x64, 0x61, 0x5E, 0x5B, 0x58, 0x55, 0x52 .DB 0x4F, 0x4D, 0x4A, 0x47, 0x44, 0x41, 0x3F, 0x3C .DB 0x39, 0x37, 0x34, 0x32, 0x2F, 0x2D, 0x2B, 0x28 .DB 0x26, 0x24, 0x22, 0x20, 0x1E, 0x1C, 0x1A, 0x18 .DB 0x16, 0x15, 0x13, 0x11, 0x10, 0x0F, 0x0D, 0x0C .DB 0x0B, 0x0A, 0x08, 0x07, 0x06, 0x06, 0x05, 0x04 .DB 0x03, 0x03, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01 .DB 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x03 .DB 0x03, 0x04, 0x05, 0x06, 0x06, 0x07, 0x08, 0x0A .DB 0x0B, 0x0C, 0x0D, 0x0F, 0x10, 0x11, 0x13, 0x15 .DB 0x16, 0x18, 0x1A, 0x1C, 0x1E, 0x20, 0x22, 0x24 .DB 0x26, 0x28, 0x2B, 0x2D, 0x2F, 0x32, 0x34, 0x37 .DB 0x39, 0x3C, 0x3F, 0x41, 0x44, 0x47, 0x4A, 0x4D .DB 0x4F, 0x52, 0x55, 0x58, 0x5B, 0x5E, 0x61, 0x64 .DB 0x67, 0x6A, 0x6D, 0x70, 0x74, 0x77, 0x7A, 0x7D