| ... | ... |
@@ -6,8 +6,6 @@ |
| 6 | 6 |
%++ { #0001 ADD2 }
|
| 7 | 7 |
%MOD { DUP2 DIV MUL SUB }
|
| 8 | 8 |
%TRACK { ;track/ch1 #00 .track/active PEK #0020 MUL2 ADD2 }
|
| 9 |
-%SOUND { STH #00 .Audio/value DEO2 STHr #00 .Audio/delay DEO2 }
|
|
| 10 |
-%SOUND_FINISH { #00 .Audio/finish DEO }
|
|
| 11 | 9 |
|
| 12 | 10 |
( variables ) |
| 13 | 11 |
|
| ... | ... |
@@ -21,15 +19,16 @@ |
| 21 | 19 |
@knob [ &x $2 &y $2 &value $1 ] |
| 22 | 20 |
@head [ &pos $1 ] |
| 23 | 21 |
@track [ &active $1 &ch1 $20 &ch2 $20 &ch3 $20 &ch4 $20 ] |
| 24 |
-@adsr [ &ch1 $2 &ch2 $2 &ch3 $2 &ch4 $2 ] |
|
| 25 |
-@volume [ &ch1 $1 &ch2 $1 &ch3 $1 &ch4 $1 ] |
|
| 26 | 22 |
|
| 27 | 23 |
( devices ) |
| 28 | 24 |
|
| 29 | 25 |
|00 @System [ &vector $2 &pad $6 &r $2 &g $2 &b $2 ] |
| 30 | 26 |
|10 @Console [ &vector $2 &pad $6 &char $1 &byte $1 &short $2 &string $2 ] |
| 31 | 27 |
|20 @Screen [ &vector $2 &width $2 &height $2 &pad $2 &x $2 &y $2 &addr $2 &color $1 ] |
| 32 |
-|30 @Audio [ &pad $8 &adsr $2 &len $2 &addr $2 &volume $1 &pitch $1 ] |
|
| 28 |
+|30 @Audio0 [ &vector $2 &output $1 &pad $5 &adsr $2 &len $2 &addr $2 &volume $1 &pitch $1 ] |
|
| 29 |
+|40 @Audio1 [ &vector $2 &output $1 &pad $5 &adsr $2 &len $2 &addr $2 &volume $1 &pitch $1 ] |
|
| 30 |
+|50 @Audio2 [ &vector $2 &output $1 &pad $5 &adsr $2 &len $2 &addr $2 &volume $1 &pitch $1 ] |
|
| 31 |
+|60 @Audio3 [ &vector $2 &output $1 &pad $5 &adsr $2 &len $2 &addr $2 &volume $1 &pitch $1 ] |
|
| 33 | 32 |
|80 @Controller [ &vector $2 &button $1 &key $1 ] |
| 34 | 33 |
|90 @Mouse [ &vector $2 &x $2 &y $2 &state $1 &chord $1 ] |
| 35 | 34 |
|a0 @File [ &vector $2 &success $2 &offset $2 &pad $2 &name $2 &length $2 &load $2 &save $2 ] |
| ... | ... |
@@ -56,12 +55,19 @@ |
| 56 | 55 |
.trkframe/x2 PEK2 .ctlframe/x2 POK2 .chnframe/y2 PEK2 .ctlframe/y2 POK2 |
| 57 | 56 |
|
| 58 | 57 |
( default settings ) |
| 59 |
- #048c .adsr/ch1 POK2 #88 .volume/ch1 POK |
|
| 60 |
- #159d .adsr/ch2 POK2 #88 .volume/ch2 POK |
|
| 61 |
- #26ae .adsr/ch3 POK2 #88 .volume/ch3 POK |
|
| 62 |
- #260e .adsr/ch4 POK2 #88 .volume/ch4 POK |
|
| 63 |
- |
|
| 64 |
- .volume/ch3 PEK .Audio/volume DEO |
|
| 58 |
+ #048c .Audio0/adsr DEO2 #88 .Audio0/volume DEO |
|
| 59 |
+ #159d .Audio1/adsr DEO2 #88 .Audio1/volume DEO |
|
| 60 |
+ #26ae .Audio2/adsr DEO2 #88 .Audio2/volume DEO |
|
| 61 |
+ #0000 .Audio3/adsr DEO2 #88 .Audio3/volume DEO |
|
| 62 |
+ |
|
| 63 |
+ ;square-wave .Audio0/addr DEO2 |
|
| 64 |
+ ;square-wave/end ;square-wave SUB2 .Audio0/len DEO2 |
|
| 65 |
+ ;triangle-wave .Audio1/addr DEO2 |
|
| 66 |
+ ;triangle-wave/end ;triangle-wave SUB2 .Audio1/len DEO2 |
|
| 67 |
+ ;sine-wave .Audio2/addr DEO2 |
|
| 68 |
+ ;sine-wave/end ;sine-wave SUB2 .Audio2/len DEO2 |
|
| 69 |
+ ;noise-wave .Audio3/addr DEO2 |
|
| 70 |
+ ;noise-wave-end ;noise-wave SUB2 .Audio3/len DEO2 |
|
| 65 | 71 |
|
| 66 | 72 |
;draw-timeline JSR2 |
| 67 | 73 |
;draw-controls JSR2 |
| ... | ... |
@@ -122,10 +128,7 @@ BRK |
| 122 | 128 |
|
| 123 | 129 |
@play ( pitch -- ) |
| 124 | 130 |
|
| 125 |
- .adsr/ch3 PEK2 .Audio/adsr DEO2 |
|
| 126 |
- ;triangle-wave .Audio/addr DEO2 |
|
| 127 |
- ;triangle-wave/end ;triangle-wave SUB2 .Audio/len DEO2 |
|
| 128 |
- .Audio/pitch DEO |
|
| 131 |
+ .Audio0/pitch DEO |
|
| 129 | 132 |
|
| 130 | 133 |
RTN |
| 131 | 134 |
|
| ... | ... |
@@ -157,29 +160,29 @@ BRK |
| 157 | 160 |
|
| 158 | 161 |
.Mouse/x DEI2 .ctlframe/x1 PEK2 SUB2 8- 8/ SWP POP #02 DIV |
| 159 | 162 |
DUP #00 NEQ ,&no-a JNZ |
| 160 |
- .adsr .track/active PEK #02 MUL ADD PEK |
|
| 163 |
+ .Audio0/adsr .track/active PEK #10 MUL ADD DEI |
|
| 161 | 164 |
#10 .Mouse/state DEI #10 EQU #e0 MUL ADD ADD |
| 162 |
- .adsr .track/active PEK #02 MUL ADD POK &no-a |
|
| 165 |
+ .Audio0/adsr .track/active PEK #10 MUL ADD DEO &no-a |
|
| 163 | 166 |
DUP #01 NEQ ,&no-d JNZ |
| 164 |
- .adsr .track/active PEK #02 MUL ADD PEK |
|
| 167 |
+ .Audio0/adsr .track/active PEK #10 MUL ADD DEI |
|
| 165 | 168 |
DUP #f0 AND STH #01 .Mouse/state DEI #10 EQU #0e MUL ADD ADD #0f AND STHr ADD |
| 166 |
- .adsr .track/active PEK #02 MUL ADD POK &no-d |
|
| 169 |
+ .Audio0/adsr .track/active PEK #10 MUL ADD DEO &no-d |
|
| 167 | 170 |
DUP #02 NEQ ,&no-s JNZ |
| 168 |
- .adsr .track/active PEK #02 MUL ADD #01 ADD PEK |
|
| 171 |
+ .Audio0/adsr .track/active PEK #10 MUL ADD #01 ADD DEI |
|
| 169 | 172 |
#10 .Mouse/state DEI #10 EQU #e0 MUL ADD ADD |
| 170 |
- .adsr .track/active PEK #02 MUL ADD #01 ADD POK &no-s |
|
| 173 |
+ .Audio0/adsr .track/active PEK #10 MUL ADD #01 ADD DEO &no-s |
|
| 171 | 174 |
DUP #03 NEQ ,&no-r JNZ |
| 172 |
- .adsr .track/active PEK #02 MUL ADD #01 ADD PEK |
|
| 175 |
+ .Audio0/adsr .track/active PEK #10 MUL ADD #01 ADD DEI |
|
| 173 | 176 |
DUP #f0 AND STH #01 .Mouse/state DEI #10 EQU #0e MUL ADD ADD #0f AND STHr ADD |
| 174 |
- .adsr .track/active PEK #02 MUL ADD #01 ADD POK &no-r |
|
| 177 |
+ .Audio0/adsr .track/active PEK #10 MUL ADD #01 ADD DEO &no-r |
|
| 175 | 178 |
DUP #05 NEQ ,&no-left JNZ |
| 176 |
- ;volume #00 .track/active PEK ADD2 GET |
|
| 179 |
+ .Audio0/volume .track/active PEK #10 MUL ADD DEI |
|
| 177 | 180 |
#10 .Mouse/state DEI #10 EQU #e0 MUL ADD ADD |
| 178 |
- ;volume #00 .track/active PEK ADD2 PUT &no-left |
|
| 181 |
+ .Audio0/volume .track/active PEK #10 MUL ADD DEO &no-left |
|
| 179 | 182 |
DUP #06 NEQ ,&no-right JNZ |
| 180 |
- ;volume #00 .track/active PEK ADD2 GET |
|
| 183 |
+ .Audio0/volume .track/active PEK #10 MUL ADD DEI |
|
| 181 | 184 |
DUP #f0 AND STH #01 .Mouse/state DEI #10 EQU #0e MUL ADD ADD #0f AND STHr ADD |
| 182 |
- ;volume #00 .track/active PEK ADD2 PUT &no-right |
|
| 185 |
+ .Audio0/volume .track/active PEK #10 MUL ADD DEO &no-right |
|
| 183 | 186 |
POP |
| 184 | 187 |
( release ) #00 .Mouse/state DEO |
| 185 | 188 |
;draw-controls JSR2 |
| ... | ... |
@@ -193,44 +196,28 @@ BRK |
| 193 | 196 |
DUP #ff NEQ ,&skip1 JNZ |
| 194 | 197 |
POP ,&listen2 JMP |
| 195 | 198 |
&skip1 |
| 196 |
- .adsr/ch1 PEK2 .Audio/adsr DEO2 |
|
| 197 |
- .volume/ch1 PEK .Audio/volume DEO |
|
| 198 |
- ;square-wave .Audio/addr DEO2 |
|
| 199 |
- ;square-wave/end ;square-wave SUB2 .Audio/len DEO2 |
|
| 200 |
- #00 SWP ;notes ADD2 GET .Audio/pitch DEO |
|
| 199 |
+ #00 SWP ;notes ADD2 GET .Audio0/pitch DEO |
|
| 201 | 200 |
&listen2 |
| 202 | 201 |
;track/ch2 #00 .head/pos PEK #08 DIV ADD2 GET |
| 203 | 202 |
#01 SUB |
| 204 | 203 |
DUP #ff NEQ ,&skip2 JNZ |
| 205 | 204 |
POP ,&listen3 JMP |
| 206 | 205 |
&skip2 |
| 207 |
- .adsr/ch2 PEK2 .Audio/adsr DEO2 |
|
| 208 |
- .volume/ch2 PEK .Audio/volume DEO |
|
| 209 |
- ;triangle-wave .Audio/addr DEO2 |
|
| 210 |
- ;triangle-wave/end ;triangle-wave SUB2 .Audio/len DEO2 |
|
| 211 |
- #00 SWP ;notes ADD2 GET .Audio/pitch DEO |
|
| 206 |
+ #00 SWP ;notes ADD2 GET .Audio1/pitch DEO |
|
| 212 | 207 |
&listen3 |
| 213 | 208 |
;track/ch3 #00 .head/pos PEK #08 DIV ADD2 GET |
| 214 | 209 |
#01 SUB |
| 215 | 210 |
DUP #ff NEQ ,&skip3 JNZ |
| 216 | 211 |
POP ,&listen4 JMP |
| 217 | 212 |
&skip3 |
| 218 |
- .adsr/ch3 PEK2 .Audio/adsr DEO2 |
|
| 219 |
- .volume/ch3 PEK .Audio/volume DEO |
|
| 220 |
- ;sine-wave .Audio/addr DEO2 |
|
| 221 |
- ;sine-wave/end ;sine-wave SUB2 .Audio/len DEO2 |
|
| 222 |
- #00 SWP ;notes ADD2 GET .Audio/pitch DEO |
|
| 213 |
+ #00 SWP ;notes ADD2 GET .Audio2/pitch DEO |
|
| 223 | 214 |
&listen4 |
| 224 | 215 |
;track/ch4 #00 .head/pos PEK #08 DIV ADD2 GET |
| 225 | 216 |
#01 SUB |
| 226 | 217 |
DUP #ff NEQ ,&skip4 JNZ |
| 227 | 218 |
POP ,&end JMP |
| 228 | 219 |
&skip4 |
| 229 |
- #0000 .Audio/adsr DEO2 |
|
| 230 |
- .volume/ch4 PEK .Audio/volume DEO |
|
| 231 |
- ;noise-wave .Audio/addr DEO2 |
|
| 232 |
- ;noise-wave-end ;noise-wave SUB2 .Audio/len DEO2 |
|
| 233 |
- #00 SWP ;notes ADD2 GET #80 ORA .Audio/pitch DEO |
|
| 220 |
+ #00 SWP ;notes ADD2 GET #80 ORA .Audio3/pitch DEO |
|
| 234 | 221 |
&end |
| 235 | 222 |
|
| 236 | 223 |
RTN |
| ... | ... |
@@ -400,31 +387,31 @@ RTN |
| 400 | 387 |
( env ) |
| 401 | 388 |
.ctlframe/x1 PEK2 8+ .ctlframe/y1 PEK2 8+ #22 ;env_txt ;draw-label JSR2 |
| 402 | 389 |
.ctlframe/x1 PEK2 8+ .ctlframe/y1 PEK2 #0010 ADD2 |
| 403 |
- .adsr .track/active PEK #02 MUL ADD PEK #04 SFT |
|
| 390 |
+ .Audio0/adsr .track/active PEK #10 MUL ADD DEI #04 SFT |
|
| 404 | 391 |
;draw-knob JSR2 |
| 405 | 392 |
.ctlframe/x1 PEK2 #0018 ADD2 .ctlframe/y1 PEK2 #0010 ADD2 |
| 406 |
- .adsr .track/active PEK #02 MUL ADD PEK #0f AND |
|
| 393 |
+ .Audio0/adsr .track/active PEK #10 MUL ADD DEI #0f AND |
|
| 407 | 394 |
;draw-knob JSR2 |
| 408 | 395 |
.ctlframe/x1 PEK2 #0028 ADD2 .ctlframe/y1 PEK2 #0010 ADD2 |
| 409 |
- .adsr .track/active PEK #02 MUL ADD #01 ADD PEK #04 SFT |
|
| 396 |
+ .Audio0/adsr .track/active PEK #10 MUL ADD #01 ADD DEI #04 SFT |
|
| 410 | 397 |
;draw-knob JSR2 |
| 411 | 398 |
.ctlframe/x1 PEK2 #0038 ADD2 .ctlframe/y1 PEK2 #0010 ADD2 |
| 412 |
- .adsr .track/active PEK #02 MUL ADD #01 ADD PEK #0f AND |
|
| 399 |
+ .Audio0/adsr .track/active PEK #10 MUL ADD #01 ADD DEI #0f AND |
|
| 413 | 400 |
;draw-knob JSR2 |
| 414 | 401 |
( vol ) |
| 415 | 402 |
.ctlframe/x1 PEK2 #0058 ADD2 .ctlframe/y1 PEK2 8+ #22 ;vol_txt ;draw-label JSR2 |
| 416 | 403 |
.ctlframe/x1 PEK2 #0058 ADD2 .ctlframe/y1 PEK2 #0010 ADD2 |
| 417 |
- ;volume #00 .track/active PEK ADD2 GET #04 SFT |
|
| 404 |
+ .Audio0/volume .track/active PEK #10 MUL ADD DEI #04 SFT |
|
| 418 | 405 |
;draw-knob/force JSR2 |
| 419 | 406 |
.ctlframe/x1 PEK2 #0068 ADD2 .ctlframe/y1 PEK2 #0010 ADD2 |
| 420 |
- ;volume #00 .track/active PEK ADD2 GET #0f AND |
|
| 407 |
+ .Audio0/volume .track/active PEK #10 MUL ADD DEI #0f AND |
|
| 421 | 408 |
;draw-knob/force JSR2 |
| 422 | 409 |
|
| 423 | 410 |
RTN |
| 424 | 411 |
|
| 425 | 412 |
@draw-vu ( -- ) |
| 426 | 413 |
.ctlframe/x1 PEK2 #0088 ADD2 .ctlframe/y1 PEK2 #0010 ADD2 |
| 427 |
- .Audio/volume DEI DUP STH #04 SFT |
|
| 414 |
+ .Audio0/output .track/active PEK #10 MUL ADD DEI DUP STH #04 SFT |
|
| 428 | 415 |
;draw-knob/force JSR2 |
| 429 | 416 |
.ctlframe/x1 PEK2 #0098 ADD2 .ctlframe/y1 PEK2 #0010 ADD2 |
| 430 | 417 |
STHr #0f AND |
| ... | ... |
@@ -513,8 +500,8 @@ RTN |
| 513 | 500 |
|
| 514 | 501 |
RTN |
| 515 | 502 |
|
| 516 |
-@ch1_txt [ "SQR 00 ] |
|
| 517 |
-@ch2_txt [ "TRI 00 ] |
|
| 503 |
+@ch1_txt [ "SQR 20 00 ] |
|
| 504 |
+@ch2_txt [ "TRI 20 00 ] |
|
| 518 | 505 |
@ch3_txt [ "SINE 00 ] |
| 519 | 506 |
@ch4_txt [ "DRUM 00 ] |
| 520 | 507 |
@env_txt [ "Envelope 00 ] |
| ... | ... |
@@ -12,7 +12,7 @@ |
| 12 | 12 |
|00 @System [ &vector $2 &pad $6 &r $2 &g $2 &b $2 ] |
| 13 | 13 |
|10 @Console [ &pad $8 &char $1 &byte $1 &short $2 &string $2 ] |
| 14 | 14 |
|20 @Screen [ &vector $2 &width $2 &height $2 &pad $2 &x $2 &y $2 &addr $2 &color $1 ] |
| 15 |
-|30 @Audio [ &pad $8 &adsr $2 &length $2 &addr $2 &volume $1 &pitch $1 ] |
|
| 15 |
+|30 @Audio [ &vector $2 &output $1 &pad $5 &adsr $2 &length $2 &addr $2 &volume $1 &pitch $1 ] |
|
| 16 | 16 |
|70 @Midi [ &vector $2 &message $2 ] |
| 17 | 17 |
|80 @Controller [ &vector $2 &button $1 &key $1 ] |
| 18 | 18 |
|90 @Mouse [ &vector $2 &x $2 &y $2 &state $1 &chord $1 ] |
| ... | ... |
@@ -87,9 +87,8 @@ BRK |
| 87 | 87 |
|
| 88 | 88 |
.wave-view/x1 PEK2 #0028 ADD2 .Screen/x DEO2 |
| 89 | 89 |
.wave-view/y1 PEK2 #0010 SUB2 .Screen/y DEO2 |
| 90 |
- .Audio/volume DEI #04 SFT TOS #0008 MUL2 ;meter ADD2 .Screen/addr DEO2 |
|
| 90 |
+ .Audio/output DEI #04 SFT TOS #0008 MUL2 ;meter ADD2 .Screen/addr DEO2 |
|
| 91 | 91 |
#21 .Screen/color DEO |
| 92 |
- #88 .Audio/volume DEO |
|
| 93 | 92 |
|
| 94 | 93 |
|
| 95 | 94 |
BRK |
| ... | ... |
@@ -54,8 +54,8 @@ apu_render(Apu *c, Sint16 *sample, Sint16 *end) |
| 54 | 54 |
c->i %= c->len; |
| 55 | 55 |
} |
| 56 | 56 |
s = (Sint8)(c->addr[c->i]) * envelope(c, c->age++); |
| 57 |
- *sample++ += s * c->volume_l / 0x180; |
|
| 58 |
- *sample++ += s * c->volume_r / 0x180; |
|
| 57 |
+ *sample++ += s * c->volume[0] / 0x180; |
|
| 58 |
+ *sample++ += s * c->volume[1] / 0x180; |
|
| 59 | 59 |
} |
| 60 | 60 |
} |
| 61 | 61 |
|
| ... | ... |
@@ -81,17 +81,13 @@ apu_start(Apu *c, Uint16 adsr, Uint8 pitch) |
| 81 | 81 |
} |
| 82 | 82 |
|
| 83 | 83 |
Uint8 |
| 84 |
-apu_get_vu(Apu *c, Apu *end) |
|
| 84 |
+apu_get_vu(Apu *c) |
|
| 85 | 85 |
{
|
| 86 | 86 |
size_t i; |
| 87 |
- Sint32 sum[2] = {0, 0};
|
|
| 88 |
- for(; c < end; ++c) {
|
|
| 89 |
- if(!c->advance) continue; |
|
| 90 |
- sum[0] += envelope(c, c->age) * c->volume_l; |
|
| 91 |
- sum[1] += envelope(c, c->age) * c->volume_r; |
|
| 92 |
- } |
|
| 87 |
+ Sint32 sum[2]; |
|
| 88 |
+ if(!c->advance || !c->period) return 0; |
|
| 93 | 89 |
for(i = 0; i < 2; ++i) {
|
| 94 |
- sum[i] /= 0x800; |
|
| 90 |
+ sum[i] = envelope(c, c->age) * c->volume[i] / 0x800; |
|
| 95 | 91 |
if(sum[i] > 0xf) sum[i] = 0xf; |
| 96 | 92 |
} |
| 97 | 93 |
return (sum[0] << 4) | sum[1]; |
| ... | ... |
@@ -20,10 +20,10 @@ typedef struct {
|
| 20 | 20 |
Uint8 *addr; |
| 21 | 21 |
Uint32 count, advance, period, age, a, d, s, r; |
| 22 | 22 |
Uint16 i, len; |
| 23 |
- Sint8 volume_l, volume_r; |
|
| 23 |
+ Sint8 volume[2]; |
|
| 24 | 24 |
Uint8 pitch, repeat; |
| 25 | 25 |
} Apu; |
| 26 | 26 |
|
| 27 | 27 |
void apu_render(Apu *c, Sint16 *sample, Sint16 *end); |
| 28 | 28 |
void apu_start(Apu *c, Uint16 adsr, Uint8 pitch); |
| 29 |
-Uint8 apu_get_vu(Apu *c, Apu *end); |
|
| 29 |
+Uint8 apu_get_vu(Apu *c); |
| ... | ... |
@@ -25,7 +25,7 @@ static SDL_Texture *gTexture; |
| 25 | 25 |
static Ppu ppu; |
| 26 | 26 |
static Apu apu[POLYPHONY]; |
| 27 | 27 |
static Mpu mpu; |
| 28 |
-static Device *devscreen, *devmouse, *devctrl, *devmidi; |
|
| 28 |
+static Device *devscreen, *devmouse, *devctrl, *devmidi, *devaudio0; |
|
| 29 | 29 |
|
| 30 | 30 |
Uint8 zoom = 0, debug = 0, reqdraw = 0; |
| 31 | 31 |
|
| ... | ... |
@@ -251,26 +251,21 @@ file_talk(Device *d, Uint8 b0, Uint8 w) |
| 251 | 251 |
static void |
| 252 | 252 |
audio_talk(Device *d, Uint8 b0, Uint8 w) |
| 253 | 253 |
{
|
| 254 |
- Apu *c; |
|
| 255 |
- if(!w) {
|
|
| 256 |
- if(b0 == 0xe) d->dat[0xe] = apu_get_vu(apu, apu + POLYPHONY); |
|
| 257 |
- return; |
|
| 254 |
+ Apu *c = &apu[d - devaudio0]; |
|
| 255 |
+ if(!w && b0 == 0x2) {
|
|
| 256 |
+ d->dat[0x2] = apu_get_vu(c); |
|
| 258 | 257 |
} |
| 259 |
- c = &apu[d->dat[0x7] % POLYPHONY]; |
|
| 260 |
- SDL_LockAudioDevice(audio_id); |
|
| 261 |
- if(b0 == 0x1) c->period -= (Sint16)mempeek16(d->dat, 0x0); |
|
| 262 |
- if(b0 == 0x3 || b0 == 0xf) c->len = mempeek16(d->dat, (b0 & 0x8) | 0x2); |
|
| 263 |
- if(b0 == 0x5 || b0 == 0xf) c->addr = &d->mem[mempeek16(d->dat, (b0 & 0x8) | 0x4)]; |
|
| 264 |
- if(b0 == 0x6 || b0 == 0xf) {
|
|
| 265 |
- c->volume_l = d->dat[(b0 & 0x8) | 0x6] >> 4; |
|
| 266 |
- c->volume_r = d->dat[(b0 & 0x8) | 0x6] & 0xf; |
|
| 267 |
- } |
|
| 268 |
- if(b0 == 0xf) {
|
|
| 258 |
+ if(w && b0 == 0xf) {
|
|
| 259 |
+ SDL_LockAudioDevice(audio_id); |
|
| 260 |
+ c->period -= (Sint16)mempeek16(d->dat, 0x0); |
|
| 261 |
+ c->len = mempeek16(d->dat, 0xa); |
|
| 262 |
+ c->addr = &d->mem[mempeek16(d->dat, 0xc)]; |
|
| 263 |
+ c->volume[0] = d->dat[0xe] >> 4; |
|
| 264 |
+ c->volume[1] = d->dat[0xe] & 0xf; |
|
| 269 | 265 |
c->repeat = !(d->dat[0xf] & 0x80); |
| 270 | 266 |
apu_start(c, mempeek16(d->dat, 0x8), d->dat[0xf] & 0x7f); |
| 271 |
- d->dat[0x7]++; |
|
| 267 |
+ SDL_UnlockAudioDevice(audio_id); |
|
| 272 | 268 |
} |
| 273 |
- SDL_UnlockAudioDevice(audio_id); |
|
| 274 | 269 |
} |
| 275 | 270 |
|
| 276 | 271 |
void |
| ... | ... |
@@ -378,10 +373,10 @@ main(int argc, char **argv) |
| 378 | 373 |
portuxn(&u, 0x0, "system", system_talk); |
| 379 | 374 |
portuxn(&u, 0x1, "console", console_talk); |
| 380 | 375 |
devscreen = portuxn(&u, 0x2, "screen", screen_talk); |
| 381 |
- portuxn(&u, 0x3, "audio", audio_talk); |
|
| 382 |
- portuxn(&u, 0x4, "---", nil_talk); |
|
| 383 |
- portuxn(&u, 0x5, "---", nil_talk); |
|
| 384 |
- portuxn(&u, 0x6, "---", nil_talk); |
|
| 376 |
+ devaudio0 = portuxn(&u, 0x3, "audio0", audio_talk); |
|
| 377 |
+ portuxn(&u, 0x4, "audio1", audio_talk); |
|
| 378 |
+ portuxn(&u, 0x5, "audio2", audio_talk); |
|
| 379 |
+ portuxn(&u, 0x6, "audio3", audio_talk); |
|
| 385 | 380 |
devmidi = portuxn(&u, 0x7, "midi", midi_talk); |
| 386 | 381 |
devctrl = portuxn(&u, 0x8, "controller", nil_talk); |
| 387 | 382 |
devmouse = portuxn(&u, 0x9, "mouse", nil_talk); |