@@ -94,7 +94,7 @@ SECTION "Vblank interrupt", ROM0[$0040] |
| 94 |
reti |
94 |
reti |
| 95 |
|
95 |
|
| 96 |
SECTION "LCD controller status interrupt", ROM0[$0048] |
96 |
SECTION "LCD controller status interrupt", ROM0[$0048] |
| 97 |
jp _dosound |
97 |
call _dosound |
| 98 |
reti |
98 |
reti |
| 99 |
|
99 |
|
| 100 |
SECTION "Timer overflow interrupt", ROM0[$0050] |
100 |
SECTION "Timer overflow interrupt", ROM0[$0050] |
@@ -136,10 +136,10 @@ ENDM |
| 136 |
SECTION "Song Data", ROM0 |
136 |
SECTION "Song Data", ROM0 |
| 137 |
;; order_cnt is the number of orders times 2 |
137 |
;; order_cnt is the number of orders times 2 |
| 138 |
order_cnt: db 2 |
138 |
order_cnt: db 2 |
| 139 |
order1: dw unreal, unreal, unreal |
139 |
order1: dw empty, unreal, unreal |
| 140 |
order2: dw empty, unreal_arps, unreal_arps |
140 |
order2: dw unreal_arps, empty, unreal_arps |
| 141 |
order3: dw empty |
141 |
order3: dw empty, unreal_arps |
| 142 |
order4: dw drums |
142 |
order4: dw empty, empty |
| 143 |
|
143 |
|
| 144 |
lunawaves: |
144 |
lunawaves: |
| 145 |
include "lunawaves.inc" |
145 |
include "lunawaves.inc" |
@@ -161,6 +161,10 @@ rept 16 |
| 161 |
dn 90, 0, 0 |
161 |
dn 90, 0, 0 |
| 162 |
dn 90, 0, 0 |
162 |
dn 90, 0, 0 |
| 163 |
dn 90, 0, 0 |
163 |
dn 90, 0, 0 |
|
|
164 |
dn 90, 0, 0 |
|
|
165 |
dn 90, 0, 0 |
|
|
166 |
dn 90, 0, 0 |
|
|
167 |
dn 90, 0, 0 |
| 164 |
endr |
168 |
endr |
| 165 |
walkup: |
169 |
walkup: |
| 166 |
_ASDF = C3 |
170 |
_ASDF = C3 |
@@ -256,16 +260,16 @@ square_instrument: |
| 256 |
;; Format for channel 3: |
260 |
;; Format for channel 3: |
| 257 |
|
261 |
|
| 258 |
voice_instrument: |
262 |
voice_instrument: |
| 259 |
.length: db |
263 |
.length: db 0 |
| 260 |
.volume: db |
264 |
.volume: db %00100000 |
| 261 |
.wave: db |
265 |
.wave: db 0 |
| 262 |
.unused: db |
266 |
.unused: db 0 |
| 263 |
|
267 |
|
| 264 |
;; Format for channel 4: |
268 |
;; Format for channel 4: |
| 265 |
|
269 |
|
| 266 |
noise_instrument: |
270 |
noise_instrument: |
| 267 |
.length: db 0 |
271 |
.length: db 0 |
| 268 |
.envelope: db %11110001 |
272 |
.envelope: db %10100001 |
| 269 |
.step_and_ratio: db 0 |
273 |
.step_and_ratio: db 0 |
| 270 |
.unused: db |
274 |
.unused: db |
| 271 |
|
275 |
|
@@ -277,6 +281,8 @@ pattern4: dw |
| 277 |
|
281 |
|
| 278 |
ticks_per_row: db |
282 |
ticks_per_row: db |
| 279 |
current_order: dw |
283 |
current_order: dw |
|
|
284 |
next_order: dw |
|
|
285 |
row_break: db |
| 280 |
|
286 |
|
| 281 |
;; TODO: Find some way to get rid of this thing. |
287 |
;; TODO: Find some way to get rid of this thing. |
| 282 |
temp_note_value: dw |
288 |
temp_note_value: dw |
@@ -438,7 +444,7 @@ load_pattern: MACRO |
| 438 |
add hl, de |
444 |
add hl, de |
| 439 |
|
445 |
|
| 440 |
ld a, [hl+] |
446 |
ld a, [hl+] |
| 441 |
ld [\2], a |
447 |
ld [\2], a |
| 442 |
ld a, [hl+] |
448 |
ld a, [hl+] |
| 443 |
ld [\2+1], a |
449 |
ld [\2+1], a |
| 444 |
ENDM |
450 |
ENDM |
@@ -901,16 +907,12 @@ fx_pos_jump: |
| 901 |
|
907 |
|
| 902 |
;; free registers: A, D, E, H, L |
908 |
;; free registers: A, D, E, H, L |
| 903 |
|
909 |
|
| 904 |
pop hl ;; remove return address |
910 |
ld a, 1 |
| 905 |
pop hl ;; remove the AF pushed |
911 |
ld [row_break], a |
| 906 |
|
|
|
| 907 |
;; when we return from here, it will be as if we returned from the main |
|
|
| 908 |
;; _dosound function |
|
|
| 909 |
|
|
|
| 910 |
ld a, c |
912 |
ld a, c |
| 911 |
add a ;; double it, as orders are words |
913 |
ld [next_order], a |
| 912 |
|
914 |
|
| 913 |
jp _update_current_order |
915 |
ret |
| 914 |
|
916 |
|
| 915 |
fx_pattern_break: |
917 |
fx_pattern_break: |
| 916 |
;; B: channel |
918 |
;; B: channel |
@@ -918,20 +920,10 @@ fx_pattern_break: |
| 918 |
|
920 |
|
| 919 |
;; free registers: A, D, E, H, L |
921 |
;; free registers: A, D, E, H, L |
| 920 |
|
922 |
|
| 921 |
pop hl ;; remove return address |
923 |
ld a, c |
| 922 |
pop hl ;; remove the AF pushed |
924 |
ld [row_break], a |
| 923 |
|
|
|
| 924 |
;; when we return from here, it will be as if we returned from the main |
|
|
| 925 |
;; _dosound function |
|
|
| 926 |
|
|
|
| 927 |
ld b, c |
|
|
| 928 |
|
|
|
| 929 |
call _neworder |
|
|
| 930 |
|
|
|
| 931 |
ld a, b |
|
|
| 932 |
ld [row], a |
|
|
| 933 |
|
925 |
|
| 934 |
reti |
926 |
ret |
| 935 |
|
927 |
|
| 936 |
;; TODO: Fix this |
928 |
;; TODO: Fix this |
| 937 |
fx_note_cut: |
929 |
fx_note_cut: |
@@ -1473,18 +1465,46 @@ process_tick: |
| 1473 |
jp z, _newrow |
1465 |
jp z, _newrow |
| 1474 |
|
1466 |
|
| 1475 |
ld [tick], a |
1467 |
ld [tick], a |
| 1476 |
reti |
1468 |
ret |
| 1477 |
|
1469 |
|
| 1478 |
_newrow: |
1470 |
_newrow: |
| 1479 |
;; Reset tick to 0 |
1471 |
;; Reset tick to 0 |
| 1480 |
xor a ; ld a, 0 |
1472 |
xor a ; ld a, 0 |
| 1481 |
ld [tick], a |
1473 |
ld [tick], a |
| 1482 |
|
1474 |
|
|
|
1475 |
;; Check if we need to perform a row break or pattern break |
|
|
1476 |
ld a, [row_break] |
|
|
1477 |
cp 0 |
|
|
1478 |
jr z, .no_break |
|
|
1479 |
|
|
|
1480 |
;; These are offset by one so we can check to see if they've |
|
|
1481 |
;; been modified |
|
|
1482 |
dec a |
|
|
1483 |
ld b, a |
|
|
1484 |
|
|
|
1485 |
ld a, [next_order] |
|
|
1486 |
cp 0 |
|
|
1487 |
|
|
|
1488 |
push af |
|
|
1489 |
ld a, 0 |
|
|
1490 |
ld [next_order], a |
|
|
1491 |
ld [row_break], a |
|
|
1492 |
pop af |
|
|
1493 |
|
|
|
1494 |
jr z, _neworder |
|
|
1495 |
|
|
|
1496 |
dec a |
|
|
1497 |
jr _update_current_order |
|
|
1498 |
|
|
|
1499 |
.no_break: |
| 1483 |
;; Increment row. |
1500 |
;; Increment row. |
| 1484 |
ld a, [row] |
1501 |
ld a, [row] |
| 1485 |
inc a |
1502 |
inc a |
|
|
1503 |
ld b, a |
| 1486 |
cp PATTERN_LENGTH |
1504 |
cp PATTERN_LENGTH |
| 1487 |
jr nz, _noreset |
1505 |
jr nz, _noreset |
|
|
1506 |
|
|
|
1507 |
ld b, 0 |
| 1488 |
_neworder: |
1508 |
_neworder: |
| 1489 |
;; Increment order and change loaded patterns |
1509 |
;; Increment order and change loaded patterns |
| 1490 |
ld a, [order_cnt] |
1510 |
ld a, [order_cnt] |
@@ -1495,16 +1515,17 @@ _neworder: |
| 1495 |
jr nz, _update_current_order |
1515 |
jr nz, _update_current_order |
| 1496 |
xor a ; ld a, 0 |
1516 |
xor a ; ld a, 0 |
| 1497 |
_update_current_order: |
1517 |
_update_current_order: |
|
|
1518 |
;; Call with: |
|
|
1519 |
;; A: The order to load |
|
|
1520 |
;; B: The row for the order to start on |
| 1498 |
ld [current_order], a |
1521 |
ld [current_order], a |
| 1499 |
ld c, a |
1522 |
ld c, a |
| 1500 |
|
|
|
| 1501 |
call _refresh_patterns |
1523 |
call _refresh_patterns |
| 1502 |
|
1524 |
|
| 1503 |
xor a ; ld a, 0 |
|
|
| 1504 |
|
|
|
| 1505 |
_noreset: |
1525 |
_noreset: |
|
|
1526 |
ld a, b |
| 1506 |
ld [row], a |
1527 |
ld [row], a |
| 1507 |
reti |
1528 |
ret |
| 1508 |
|
1529 |
|
| 1509 |
_halt: |
1530 |
_halt: |
| 1510 |
; Do nothing, forever |
1531 |
; Do nothing, forever |