| ... | ... |
@@ -470,24 +470,24 @@ RTN |
| 470 | 470 |
RTN |
| 471 | 471 |
|
| 472 | 472 |
@adsr-envelope ( -- ) |
| 473 |
- #7f ,adsr #00 ~Audio.play #04 MUL ADD2 PEK2 SOUND |
|
| 474 |
- #40 ,adsr #00 ~Audio.play #04 MUL ADD2 #0001 ADD2 PEK2 SOUND |
|
| 475 |
- #40 ,adsr #00 ~Audio.play #04 MUL ADD2 #0002 ADD2 PEK2 SOUND |
|
| 473 |
+ #ff ,adsr #00 ~Audio.play #04 MUL ADD2 PEK2 SOUND |
|
| 474 |
+ #80 ,adsr #00 ~Audio.play #04 MUL ADD2 #0001 ADD2 PEK2 SOUND |
|
| 475 |
+ #80 ,adsr #00 ~Audio.play #04 MUL ADD2 #0002 ADD2 PEK2 SOUND |
|
| 476 | 476 |
#00 ,adsr #00 ~Audio.play #04 MUL ADD2 #0003 ADD2 PEK2 SOUND |
| 477 | 477 |
SOUND_FINISH |
| 478 | 478 |
BRK |
| 479 | 479 |
|
| 480 | 480 |
@square-wave ( -- ) |
| 481 |
- #5800 SOUND |
|
| 482 |
- #5880 SOUND |
|
| 483 | 481 |
#a800 SOUND |
| 484 | 482 |
#a880 SOUND |
| 483 |
+ #5800 SOUND |
|
| 484 |
+ #5880 SOUND |
|
| 485 | 485 |
BRK |
| 486 | 486 |
|
| 487 | 487 |
@triangle-wave ( -- ) |
| 488 |
- #7f40 SOUND |
|
| 489 |
- #8180 SOUND |
|
| 490 |
- #0040 SOUND |
|
| 488 |
+ #ff40 SOUND |
|
| 489 |
+ #0080 SOUND |
|
| 490 |
+ #8040 SOUND |
|
| 491 | 491 |
BRK |
| 492 | 492 |
|
| 493 | 493 |
@ch1_txt [ CHN0 00 ] |
| ... | ... |
@@ -87,9 +87,10 @@ apu_play_note(Note *note, Uint16 wave_vector, Uint16 envelope_vector, Uint8 volu |
| 87 | 87 |
for(i = 0; i < 2; ++i) {
|
| 88 | 88 |
note->volume[i] = 0xf & (volume >> 4 * (1 - i)); |
| 89 | 89 |
note->wv[i].count = note->wv[i].period = 0; |
| 90 |
- note->wv[i].end_value = 0; |
|
| 90 |
+ note->wv[i].end_value = 0x8000 * (1 - i); |
|
| 91 | 91 |
note->wv[i].queue.n = note->wv[i].queue.i = 0; |
| 92 | 92 |
note->wv[i].queue.finishes = 0; |
| 93 |
+ note->wv[i].queue.is_envelope = i; |
|
| 93 | 94 |
} |
| 94 | 95 |
note->wv[0].vector = wave_vector; |
| 95 | 96 |
note->wv[0].advance = note_advances[pitch % 12] >> (8 - pitch / 12); |
| ... | ... |
@@ -253,7 +253,10 @@ audio_poke(Uxn *u, Uint16 ptr, Uint8 b0, Uint8 b1) |
| 253 | 253 |
apu.queue->sz = apu.queue->sz < 4 ? 4 : apu.queue->sz * 2; |
| 254 | 254 |
apu.queue->dat = SDL_realloc(apu.queue->dat, apu.queue->sz * sizeof(*apu.queue->dat)); |
| 255 | 255 |
} |
| 256 |
- apu.queue->dat[apu.queue->n++] = (m[0xb] << 8) + m[0xc]; |
|
| 256 |
+ if(apu.queue->is_envelope) |
|
| 257 |
+ apu.queue->dat[apu.queue->n++] = (m[0xb] << 7) + (m[0xc] >> 1); |
|
| 258 |
+ else |
|
| 259 |
+ apu.queue->dat[apu.queue->n++] = (m[0xb] << 8) + m[0xc] + 0x8000; |
|
| 257 | 260 |
apu.queue->dat[apu.queue->n++] = (m[0xd] << 8) + b1; |
| 258 | 261 |
} else if(b0 == 0xf && apu.queue != NULL) |
| 259 | 262 |
apu.queue->finishes = 1; |