aboutsummaryrefslogtreecommitdiff
path: root/examples/wave.gbasm
diff options
context:
space:
mode:
Diffstat (limited to 'examples/wave.gbasm')
-rw-r--r--examples/wave.gbasm136
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