1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
.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 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 ($43), A
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
|