diff options
Diffstat (limited to 'examples/wave.gbasm')
-rw-r--r-- | examples/wave.gbasm | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/examples/wave.gbasm b/examples/wave.gbasm new file mode 100644 index 0000000..a63fc43 --- /dev/null +++ b/examples/wave.gbasm @@ -0,0 +1,136 @@ +.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 |