Take 2 for PCM playback

This commit is contained in:
David Schmenk committed 2025-10-24 16:41:12 -07:00
1 parent 9c706b0bbd
commit 98f45b33dc
7 files changed
+320 -28

No files matched your search

+14 -12
View File
@@ -315,45 +315,47 @@ TONEXIT PLP
INX
RTS
end
asm a2spkrPCM(samples, pagecnt)#0
PWM_DIV = 3
PWM_DLY = $100/PWM_DIV
asm a2spkrPCM(rlepcm, pgcnt)#0
LDA ESTKL,X
STA TMP
LDA ESTKL+1,X
STA SRCL
LDA ESTKH+1,X
STA SRCH
STX ESP
PHP
SEI
LDY #$00
PWM_OUT LDA (SRC),Y ; 5
STA $C030 ; 4
LSR ; 2
LSR ; 2
LSR ; 2
;LSR ; 2
; 17
LSR ; 2
TAX ; 2
PWM_REP BIT $C030 ; 4
LDA (SRC),Y ; 5
AND #$0F ; 2
end
asm pwm_on
STA ON_BR+1 ; 4
ON_BR BNE OFF_BR ; 3
!FILL 31, $EA ; 15 * 2 NOPs
EOR #$1F ; 2
STA $C030 ; 4
; 43
!FILL 15, $EA ; 15 * 2 NOPs
BIT $C030 ; 4
EOR #$0F ; 2
end
asm pwm_off
STA OFF_BR+1 ; 4
OFF_BR BNE ON_BR ; 3
!FILL 31, $EA ; 15 * 2 NOPs
!FILL 15, $EA ; 15 * 2 NOPs
DEX ; 2
BPL PWM_REP ; 3
INY ; 2
BNE PWM_OUT ; 3
; 12
INC SRCH
DEC TMP
BNE PWM_OUT
PCMEX PLP
LDX ESP
INX
INX
RTS
+5 -5
View File
@@ -48,7 +48,7 @@ FPSTR = rel/FPSTR\#FE1000
FPU = rel/FPU\#FE1000
SNDSEQ = rel/apple/SNDSEQ\#FE1000
PLAYSEQ = rel/apple/PLAYSEQ\#FE1000
PLAYWAV = rel/apple/PLAYWAV\#FE1000
PLAYPCM = rel/apple/PLAYPCM\#FE1000
SANITY = rel/SANITY\#FE1000
RPNCALC = rel/RPNCALC\#FE1000
LZ4 = rel/LZ4\#FE1000
@@ -129,7 +129,7 @@ $(HTTPD) $(TFTPD) $(ROGUE) $(ROGUEMAP) $(ROGUECOMBAT) $(SFM) $(SFMSPRT) $(GRAFIX
$(HGRTILE) $(HGRFONT) $(HGRSPRITE) $(HGRLIB) $(TILETEST) $(HGRTEST) $(GRLIB) $(DGRLIB) $(VBLANK) \
$(GRTEST) $(DGRTEST) $(HGRTEST) $(FILEIO_APL) $(CONIO_APL) $(JOYBUZZ) $(PORTIO) $(SPIPORT) \
$(SDFAT) $(FATCAT) $(FATGET) $(FATPUT) $(FATWDSK) $(FATRDSK) $(INT32) $(INT32TEST) $(SANE) $(FPSTR) $(FPU) $(SANITY) \
$(LZ4) $(LZ4CAT) $(RPNCALC) $(SNDSEQ) $(PLAYSEQ) $(PLAYWAV) $(CONIOTEST)
$(LZ4) $(LZ4CAT) $(RPNCALC) $(SNDSEQ) $(PLAYSEQ) $(PLAYPCM) $(CONIOTEST)
-rm vmsrc/plvmzp.inc
@@ -443,9 +443,9 @@ $(PLAYSEQ): samplesrc/playseq.pla $(PLVM02) $(PLASM)
./$(PLASM) -AMOW samplesrc/playseq.pla
acme --setpc 4094 -o $(PLAYSEQ) samplesrc/playseq.a
$(PLAYWAV): samplesrc/playwav.pla $(PLVM02) $(PLASM)
./$(PLASM) -AMOW samplesrc/playwav.pla
acme --setpc 4094 -o $(PLAYWAV) samplesrc/playwav.a
$(PLAYPCM): samplesrc/playpcm.pla $(PLVM02) $(PLASM)
./$(PLASM) -AMOW samplesrc/playpcm.pla
acme --setpc 4094 -o $(PLAYPCM) samplesrc/playpcm.a
$(GRAFIX): libsrc/apple/grafix.pla $(PLVM02) $(PLASM)
./$(PLASM) -AMOW libsrc/apple/grafix.pla
+3 -3
View File
@@ -93,10 +93,10 @@ cp samplesrc/LEVEL1#040000 prodos/demos/rogue/LEVEL1.TXT
mkdir prodos/demos/music
cp rel/apple/PLAYSEQ#FE1000 prodos/demos/music/PLAYSEQ.REL
cp rel/apple/PLAYWAV#FE1000 prodos/demos/music/PLAYWAV.REL
cp rel/apple/PLAYPCM#FE1000 prodos/demos/music/PLAYPCM.REL
cp mockingboard/ultima3.seq prodos/demos/music/ULTIMA3.SEQ.BIN
cp mockingboard/startrek.seq prodos/demos/music/STARTREK.SEQ.BIN
cp mockingboard/hello.wav prodos/demos/music/HELLO.WAV.BIN
cp mockingboard/bells.pcm prodos/demos/music/BELLS.PCM.BIN
mkdir prodos/demos/net
cp rel/HTTPD#FE1000 prodos/demos/net/HTTPD.REL
@@ -153,7 +153,7 @@ cp samplesrc/sieve.pla prodos/bld/samples/SIEVE.PLA.TXT
cp samplesrc/test.pla prodos/bld/samples/TEST.PLA.TXT
cp samplesrc/testlib.pla prodos/bld/samples/TESTLIB.PLA.TXT
cp samplesrc/playseq.pla prodos/bld/samples/PLAYSEQ.PLA.TXT
cp samplesrc/playwav.pla prodos/bld/samples/PLAYWAV.PLA.TXT
cp samplesrc/playpcm.pla prodos/bld/samples/PLAYPCM.PLA.TXT
cp samplesrc/rpncalc.pla prodos/bld/samples/RPNCALC.PLA.TXT
cp samplesrc/fatcat.pla prodos/bld/samples/FATCAT.PLA.TXT
cp samplesrc/gfxdemo.pla prodos/bld/samples/GFXDEMO.PLA.TXT
+202
View File
@@ -0,0 +1,202 @@
™�÷÷G¸©řh÷—řČéřřřX©¨÷÷Wř¨‰(×ř HÇ8iJ[:)(gVw(;
C$* :)(KG()
␍. 
#*K;L; Ey·)J 3Z * T�G(
lYE¸():$
␍/␍
67hUiD(I:)XŮ
9Č9JGVG&$  l F
K9h)J6%$8ev  l
5y7
␍
$Egv')¸©8ůI(UVet M
F()f
 .␍
W&%V&f'+jI(™�);,
#6Bú*)6'‰*L
f§6…i*ű U
+, v%3$&GF +Xij U «,
v%$# k*©HWf)*M ED##:)‡(*;& Ś+ ((A(Ij�*Kz9H;
ö%2()
9Hk:)WČ)J 6%d):+*G
K*(w8y7(

33H§z9(J«*{
xU
,
X *;J)h9*<  @(‡H)98I)
␍
+,
&gf*L ( *8I5;$$Ć ;876
; 5
+|87&55+ +
'J)E
␍>␍ )(7C#" Z8'&
,+ů  =
wa
  X
[Ix);W&µ$c
K989H9Z 7&G8™J[
R  -
G8Y8 (W* W kcw((&5 ;śű b#Y()+7()*« W™ '):Ş)*K:9�*&vEy;,;*e*&Š+
t5F7  <+
28\Ű+ %t%65
- 
65*[Ś+)82U$%'89*59- )*;'FG2
␍N␍, 
$Š9Z„85&G
-  ¶%
+,=
�–GV
M
%TG
M,;*5X$5 JFg&U  -Ź␍ %”5$‰7 Z(+y+L
dv2'8
M:Ő
␍?␍
&W4H7j9
9H9Z 
,«'&uV'(*+%W2
Ź␍
8§3HV(Z– _␍
VP +&%(‰*I8
-şb'(9\:K 3
<9¨y;'896Ef'8 ␍?␍  B
K*I89
1z]j6E$5&GEY'UV
~>.␍
P8(Zf)j‹J)X *+
2%†G89[* 8'f)
)'
-
Ą:YHIZI$
N
C'(K B#:K␍?,  EW$‰H'F'Wj+.␍
%4b3$

%$%
l+*;,9HV2#
Ť
'h4
L
Tř8
K
'†'H%$% +Ś[Š C
<
&ed%(i
␍N␍ ©*¤G&6¨76
␍K* (
< w: l
E(Gş{
T ;{
'†Ç[';
t%V(i8
 
4·8)* $Ł
n-¬
'v7Tg(:
+Ś-N␍
""#45f7�JF
\+şx'%”�) ␍/
5ö)J9('&%4
L
W9H7¶E67X) >␍ 
)(y(U)Z'F%T©
?␍ 'h%$C$…(Ixi('
␍Ź␍
$“$%v  \
Hz E
,
Će&'6L
hiD\
U(9H
=
E(uT lkz4H&&7–7(w
␍␍ j[ S$÷'kVš«‚#):)x

F
;�W(D%&
[j;l
%´%89:IZU
L
%6gF6G78i>
vGhwXg6…
[** ]
dő%FW8™\;)7
,␍,  Ay
 ] &iXG&g�&E&w�)
\ $'gV
++(gHyJ+<
%DCh7&  ,m
)()(¤I&u(‰*,N )X¦%DEZW[
GhK(FEA
>
G8)�ič&5'8Y'& =<Fe$C [
'
[
%(9J9&%$$x)[JY|3(YwH' ␍/␍;:8g†3$%&f
LHY: Z)Xx(B
‹ś
¦wi4)*6*''k$#$:IJ;*xůy(5&'C

G
 MI8'“%)*)%
+Ś-,(w&U(3
- é'&'‰()(&5T%¦  M
HG&Y('V95
\
W)Ę)2#%
- 
w8I
Y('6%–u ZW
MIzd%&�f©89Ś
456g¸
␍.␍
V'9Z)Eö'
-,*9¸7VE)(vZ)w9*)(8yH#
]+)™x*K "(v *[J+L*9D3$g¦ ; XM
¨(3*)5+LK*58H982  ,+išVYUjů9()jYHW&¸  ,-,  5)
IeG&E&;*IŞË
EĆe: f'›:é„%fE'8y:;,+Ji(E ** 48Y:»*&E&X–Ixyř�* #H6 *[,K:iX)8W¨S™ÚK + &7(1 ZW(™*l;:IUh&U&'*K:9X)J5:UX$ *z;*)(Ç65:)(G()*{g * *UW
\*J;*(w&E6X4'ŘKŚX)JCX%ZGH)*«%wTČ«*)7:E*)w(ůj™8#i(8)J9878):)'†': #$‰+|[98wI5%X%*kj‹*dE66$)ŞYJyZůCi8G*+J9ř8'f'¸'VGř9J;: Uw6%
<)(K:I8·vEć7()M, VX&%DYE&J‰*+,-
Hçö7řij''
␍
$45–K*x9:*†GřX‰(WL
&%&'('D9zů8'7I
9u7�% =,Jk DI('6%vWX9,-,
ghSi�kG;* G(8&•{g9
977�7v'(i(v
[*h)*ři*+,+G** &eĆ%6(IJ‰
 ]
3¶G8)(fg(
M  X):)('–G¦'KF Kg(I5$…&(ú;f*%6'8ů)*+*WK „5V')Jů �)Jv'xe&GH)h)*+M )xWeX·v'[Š[* $W&ED):kIxYx)Z('–gč)L  5()('f'x×(é8'(š'v%D%&'
+<+*((
L+
'‡uF‡fH)
lJ9�'%D5h—X)*�)
 =
wh7&Fw¨9ş&&*+6Uö <x™E'h‡(9Ş)XIŞV‡6#*;*‰J9HW*)'u&x7vjű;U'H'V&(I(g(k98‰(„9(g(+,+·ř™%%
{:ů('f×–'j'&7)ząH'&%4%'hg
,=, H‰�'ö¶'©H \+
'&5ö6yV'
[*ů©8†÷);(7Hy(WG(I(&u(9H9{)8wF·v+*‰šh9z5d%&'wH)*:y*98ÇŘ'%5)
)(( +L;y9G6e'(9(f(Ůš(§6·&4
L
hY(—ř·(‰87(+Jix'6Ćy('&Z9�9:9�'FĹ&7 [y*+<h§Gć''f
\)iHGö÷89:)W:K*hŘ7f'(ih**)'F'(IX7Ć7HW8iZyz)4E&'X h)ząk(—X'6ED(9ZYz)ŘY¶7h'–(şË
'&‡xG–'(‰�™x©T%(I�IŠ9�÷ř(GXIzůIöFEz)g(y*ÉH7f%67vg
+l;*X‰8'f'87¶'ČIJk('–÷'Č7X9Z)8g(;*7¦w8)z9ř‰'–'hGgčI*k*(÷&e&8‰:K:ů9ZID%&'8'V'8Yú)8'Ey(%6ÇX)J şI‰(e()¨78ů XYh·'… *{J)ř8—X7F')J)¨9š:98g•&'hwH9JI8�Z)GĆu(‰Hś+
GV78÷'V6)Š:)87H)(&%V×;*‡HIZ9ř8G&7Č)*;:9X7FG�&%&÷89I(ij :)'d67x9Z9()ú)H—x&%$%—8)Ęą8ç6GH8¦'(y:[jI(—h'66():É8w8©H7&eF'Ř9J;J9HW6WGčW(9jůŮ(G6Ő&Z)(g(9Ş)�÷w6e&\[:‰¸W&ç&G8HW8:;:8WćWČ8)Š9(§89z)–w89Şx9I(Ć÷�—()‹:)xG†•&'(új9H)j)'6%6§¶789ú)(WV7�§gřůĘ)6VWřHéŘ·�'…&KŠą8÷&5&'(iZ)Ř[JYH'u&Çf9š)¸ą�6Uf—8©*;\ ÷‡�WF7(Yj)¨)�WVU&'9ŞI(g(‰8g89H—Hw()zK*9Hçög8Y�ů*{
T%¶88yJ{J98ghI(¦5&'8ů Z9řEH)x÷89şy�I8'&EF')*[*)8Gř)8u7řHi:k)HG6e&'řXąJ98i
™X7%T%'()�)x9Š8W�'xW&u)*‹j©8÷'v(yřh)J9(7Fwv7h'H)J;:)'&WHiH÷G(©Hyę)%$5F·�wH)*;Jiř'&µVú‰:ą('†8 HG†wHk*('f7�÷'XÉŘYşe&'řIZy*987†7HwF67(YĘůx'6Ą&)z)¸iú)÷gfU&)šIX)řxWvW8§8)«J)(7F÷xwH)z—XYXGVu9š9HŮxGF7řwČ)*{ř(&ŐF78ąX7(*kJfV·67(iJ+L+f(YH·F‡�9HůI('Ć'8YH'�y8É87():)'FU&'(*k:iřX'&ef'¨w8)úZ)5F·F7(iš9�ůY('&u6Gh§()[)�WG8i('¦G(*+*™jIH—F5&9
ą8'H™H÷§8'f'89*;;F'Čw87F'(II¸)*‹)'v•7·�Yš)(G(JöV'(Ş©Ş)†Wř7f7(ąJ)'F'�'†Ghij)ř9Z97&÷‡�)‹:I('&U&X7&U'�Iůj™(%důhIzů8wH)(45'(9z)¨yx·V'8YH·*‹:)8wv7h—89J+:)(G6'¨·FE&(IJ9X)ʶ—HI8Ç(ę)hI*)ĺVGZ)Č)š(÷—vw(:»*)'F(IH'fH řXw89z'6U6Gř�IJą(wHI
9u8™ú)8‰(%d%(I(×(ú*987FWH'&e)k*yčY*I8'6Fw(WV):JI8÷'(I(WV'()Z9hąZ987…6'*;:889*Y8ÇvWXWv'(
+;*Iř‡†Gȉ(g)L(‡ö¶g()J;J'&'8É(&E6wHIj©*;¶GHY�W¸©8w89h7…)šą(g+*'–'ŘG6')*ëvF‡Ö'J9(8)*©JI…&7HYh8*KJI8×(9*9(&E$% j9¨Yř'&5&'h9*)(g8)zů87&‡F§+L+ '&G�·656g8™8W
l
ö7ř(w8)š)xj9H'ĄFWh©x*+†'8iHG–')*;L '&7H)X7–'(9j9�V'j6%F÷�)ú:)(7G(™Ć'):9XIúJ)S'8Y8—HIĘ9X‡�GĆK:Ůř)8§X)H'&5&():;*)8‡6G�‡F7 *[*)(g9*ą8'•&zéŠ)'Ć÷—V'9Ş�)j)('&u7H)Z9X‡‹)(7&GH7ö67*{ÇHI8÷ř8É:;:(e&(IX'�ůY'fG(I
9%D%&)ú9hů &E&(Y8f(y:kJ9H×FĄ& z)x'XYJ‰('6%6'(i'&'()ZKJ)(7f7(É&5'(YřI*IX7ö)J(W()Ş9�GČgv5&  ڇČ'ö&G(y(—{J)('F÷WčIz(W8Iš'&E–WHI8G(*K*('&e‰H÷()k)řxF56'ůi(gH¸'†G�E&IZ‹)(76'(y8'&E&(‰HYH9JK:)&E4%&x7'(ů9�WH‰87&UšYxů (7†W(j&U)zy8÷Çv'(*k*)¸é(§†78Y¨+\'&u&7�W–'()z)¨Yz'ćG8IJ9(G()jYX'řGćG(*;:)(‡HY(&E6(9ÉHG()*k*U6G�g8ÉJi(Gf'(Y('6U&'ČŮú9&E6')*)'†()úYřX&d)ŠYř(™XG6G(Y(·(*[*9X÷X9('f9Z9('6G()Š)'6µą�):[:)(÷W�6F'*[Z‰™(&e†'8yH'F'(*[:(wř‡v'(*K:98—j)8GĆWŘ'8IŞ&E6'¨GŘ9Š)ř9:9D%iš)ř©'&U&'(9(7Ö'*›:9HW¸'&E(©ř9ę)('6E&h'vG8):;*)(GVWHj U&9šI¸©8gF6'9
IX‡8ÉHGH8×6u{*Y�9J9(g¶'(y8‡(*+\ –'vW(‡&'()*9ř)Š(÷wX9¸Yşf'©(WVE& *K*98w8i(&u&HYz9¨iz)7f'h'f7xI:+J9(76GHY(u&řWH9:›* %%y(ç8iziř�'…&'(É8yř§V)J)(7V'):[:)÷¨'–)Š)§H©�'u67ř):›*(gřHg†'Š9¨);*'&µ'(©(7W8)Š(wXIh÷7(Ę)(g(‰H÷č§89:[u&'x÷8)ú9‡)J9(eV7(ů™H©'&U(98G¦'(©zIXÉ'e&'(9Z)gH‰š9(&%&'h‡V7)ŞI8Gv'8Y(ÇH9J9¸)z9hG&E&™8‡8)Š)(‡x'�'Ą&*k*)h)z�G–7(YH§(){÷Ƕ'8Yy(Vz9X‡&W8iř9*K*'vGřWV7HYZ)(W(9)•6W()JYů Š)('f'�w†()ú
)'V'i'¦wX H—(Iú)'V'¸×()zYřX9*)&eF7(ą¸™�7&E&)Z9(—)Ş9Řwx'–7(9z9(w()J)�W¶WHgG(l(÷Č7†'8Yj)(G(z)(7öGHřX©(‡X™hgF7(Işw©('–gHiX·()*;:¦×VW()ú:)H'HI
9(¦gřh‰š)('&56'8Y865&8ůY�IJ)Ć'(éČů H÷�7v'J J9xGV'�7†'): J)8G8)ş9('Ö7X98w(9z)ř'¸GFe&'(IJI(Iş9(7†7xIX·[*)HÇ�g–78YZ)(—h‰XÇřř)[*(G&g¸WV7Xů (G8IJ)&545'(ůéš)(çČ7v'(™zIH7X987¶'(Y8×X9Z :)(—ř'V')šyh—(y8'6E&'™�ůY8&EFGHyHW(::9�IřGvF')z)878ů)87v÷wV'+ ;*Yř�÷X©(g()ZY8G–gřX'8)j('f7H™XçH)š)¨ą('Ć'8ř¸)Š)(÷‡V%6(Iú9¸©8G†'8)h7ČIŞ–GČGFGřřŮ8'–'(™xů‰8GFgČ7v'(: JYX÷×v(š)¨ůY8÷÷w8)Š9XgřwÖ'(y�)ę)(7†7Hy�g8)ZIHwŘGv§89Z)8‡ř×xř�)J[*)G&W�7†7�ŮŘÉ('&…&GČůŞI(·Hi(7FgxéČYhG6%&'(y8·�Ů�gČ7F'(9ĘiX7ř(G–'(iXX©*Y(7ć7ČGH9Šy¨©Xw¶'(‰¨ůH÷G�G†)ĘI¸IH÷GH)j)(gHÉ8÷·ČH9ZY8GFW8I8—ŘI:iXYj9('6E67řŘYZIx§h7656GX9şI�y�WG89h—�IZIHç�'VG8‰ŘGHéX'v'8yxyj‰8·FG�7V'8ůIř(gö'()Z9¨yjIŘ×8Wf'()šIX7ř÷6GH)h7H9Ş)(÷WřxIZIX§X)H7v·8Y*YčIH7v7řř(9ĘIř87¶7héčÉ('–÷W�YĘ9H§8iH·řřřH'¦'řř‰řŘ)H7f'(9ÚYřH‡¦78i�h9z9Xg¦g(§89Ši�Ů�wVGř�Ij)(÷g¸GF78i:Y¨yX÷789JąČY8÷(÷‡HYzI8Ç�÷'XŮx™Ş)¦÷řů9Xw¸7ĆW8ůů IH'V'8™h‡hÉ�·�WfG8éX'ř898G&WřXiĘ9hWvW8÷H騩hWFE6'(é�IZIřř(GVGHY*YřH÷—řč9z)8§H‡řYĘ)(·¨÷gHů Hé('–WřčyŠY�‰(FvG8Éř©8'fW�÷HYşI8—؇xÉř¸)X'–Gčxů¸§Řg&W8Išů9xgÖ'HI�XI:YČ÷‡FG8IŠ9¨É¸×řwH9j98÷W�·xÉČ™HÇg8ůůY8Gf‡x÷�Yz9(w¨G†gHů �YŞ)(÷×&G8ůYH‡ČwVWř8ů™87VWH™č™ř—�W–7(ůřř÷ř78):;Z‰8÷—6wHÉČÉXg–gřh)Š9ř¸)h÷H©ŘIxw†Wx‰h'H9J9HwX÷gXiĘ)8w¨—VwřčIj97–‡�ghů‰�©(G¦WŘŮ©8W§ČÇ8ůiHWŘ×(IZYř�9HGf§xwH9jY¸·¨÷8ů‰zy87ÖWřGH9:YŘw�gfG8IZY�yřWř¨w89J9H÷÷—XYZ9HWH™HWVg�ů™Z9(7†÷׸ůřXW¦'X™ )�iz9H—¨gVW8ů98·¨wgřxů‰H÷řxi:i�ÇŘ7¦'(ÉHů9xWvWř7HIÚi�÷–G(ąřY�÷GčW89šIH‡ř¨—8™řčW–—X™�ŮH§¸÷x9Ú9řXW¶7řřIZI(÷÷'¨™*Y¸©hW6gřXůIHG†GČ—XůIřČWF7(9jŮřx÷w(ç8Izyč÷ç(Éh©zY87ĆGČGXéh—ř÷7(ŮXŮ�ÇčIx7XŮH÷‡F·89š9ř¸÷G¨ů)Ş98WF÷§Ř©ČąH7–GřŘů)H‡Ř÷�éh÷—6WH™Řů)xggřhIŞiHç�g†GXYxůYhWvWř�™JÉ触7(©ř(¨÷GřgHijIXwřřXŮřYXWÖgř(‰:yHÇ�÷XYމ8ih7¶wřčéX—�÷xů)řyH×řčŮx7–G�W�ůIřČWVG8ůůYX§VwXçXůIč÷FGHůX™*ix÷7X§HůHÇř(×H騹H÷7X™ŘůX÷‡¦g8YZ‰�iXG6×řxIĘI8÷÷w�™ř8yH÷7řXůIx‡řÇ�Ůř�g¦GHůxé�÷�WXišy¸÷7vgř�iJYhw6gČWhYZ‰ř¸gfGXąř�÷gřČůř�÷Xi:iřYXWćgř(iŠIH÷÷G�ůůY87–—řčąX§řçHůYř�·řřéhWf÷wXYzYřř7vGHůůyhWv÷çXů‰č÷7xÉxů�Ǩ×XY:9H÷gx·xů �™�÷7ŘůąXwhǶGHůůY8w&§ř¨‰Š9h÷÷7řřř8çř¨ůi8·řXWhůČ'�WĆWHůůYx×H÷hIŠąř‡†wř¨ů9X÷ř¨ů)řč÷řČih÷‡ř¸‰
yřx÷gHy:yŘ �—v÷7�yjYř÷wxůů‰H÷WřřihÇř·xůiřH÷ř¨ůIXg6÷ÇHYz‰ř�÷7hIXů©X÷÷—�yřř÷7XÉHů ¸Çř8�٨÷÷'�ů hŮx÷Wř8™ZY�÷‡†‡xůéh÷7ř¨ů9řx÷G�ąh7ř÷'řxů‰X÷W—xůyřHWöGřů©X÷�§Xů©ř÷—ř¸yř·�—xY:™řČ÷�™ČY�‡–—ř8ůIř�÷'xůů9h‡F÷çXYZič÷—¨ů x™¨÷řȉh÷اxůyxI�÷7�ůů9x÷÷WXů©ř÷'ř¨ůiX÷÷wřřřX÷�ůé�÷řČůČ÷'–gXůů™h÷wř(iJ™Č÷÷Gř8ů)X÷řŘůřČ÷�ąř8÷—řXů©Č÷ÇXůiřxWÖ‡Řů™xç¨g�ůŮŘ÷Gřřř(Çř(WhIj™ř8÷wx™(Éčw–ç¸ů‰řx÷WXůů9h÷÷Çhůř8÷Čů9Iř8×řřÉh÷÷g¨ůů9�‡&—ČůÉ�÷wvgxůé¸÷řČůI¨÷÷řřřX÷xIůÉX÷—ř8ů9řÇĆgHůůY¸÷×�ůYř(÷×ř�É�÷ř(ůy¨7Č÷Čąřh—f—řůé¨÷Ç�ů‰řwv÷7�ůi�wČWŘůřČ÷7řřř÷'ř�ůÉČ÷—hůů)�—¦÷xůyřh÷Wř8ůIh÷÷—ŘyřČç�ůyř8÷—řHé¸÷÷'�ůů‰X÷‡řů‰h÷÷‡�ůiř·ř¨ůř·Hç�ÉřX÷·¨ůů¨÷§¨ůiř(·¶gŘůąř(Gř7�ů9ř÷Çřřč÷gřů‰�wX÷G¸ů řXW†ç¨ůů)č÷g¨ů™Ř÷÷GČů¨WřřůIř¸÷7řXɸ÷÷Whůů¨÷‡�ůé¨Ç6÷7�ů©ř�wřčůx÷÷ř8™ř�÷7¨ůé�÷ÇřůI�÷7F§�ůůyX÷§čůix÷÷GřX™ř8Çřů‰ř÷÷�ůř÷÷¸ů)J©�÷ǨůIř÷6·řů9řřřxéřH÷§řřř÷—Řů™č÷§ŘůIř÷÷¸ůÉřH÷'Řů)ř÷÷řIř�Wř¸ůąřX÷WřXů¸÷÷�ůů9�÷—řů9Ř÷÷Wxů)řřř�9�٨÷×řŮř8÷§�ůů9h÷×řů9Ř÷׸ůů ¸—ř¸ůY�÷÷'řx)ř¨÷ČůŮŘ÷÷�ůiČ÷çřůůx÷ǨůIč÷÷ř8éřřřxů řX÷Ç�ŮřH÷ç¨ůZ™Č÷§řů™�÷÷¸ů‰ř�§řHéř÷§ř(™řh÷‡¸ůŮř÷§řůI¸÷÷xůů9¸÷gř8éŘ÷÷W¨ÉřŘ'řhůŮČ÷÷Čůč÷÷�ůů9h÷ÇřHůř÷×Řůąč'řřůI�÷÷řąřX÷g¸ůů¸÷÷�ů™¸×F—řůů¨÷—¨ůř(÷÷ř�™řxwřHů‰ř÷÷�ů‰�÷÷¸ÉZŮČ÷wřÉřX÷÷řů9řřřhů)ř÷§řů ř÷çxůůČ÷·ř(ů9Č÷÷xůůř(çřhÉČ÷×řH™ř¨×řůů¸÷÷čů9Č÷÷¨ůů)x÷Çř(Éř8÷ÇřůřhWř�ů‰¨÷÷¸ů9ř÷‡Řůů)x÷÷řů)Č÷×řů™řWř¨ůř÷÷ř�IřX÷WČůŮř÷÷�ůąx÷÷ŘůŮŘ÷gř(yřx÷÷řůřřř(ů‰ř÷ç¨ůiČ÷÷�ůů)¸÷—řXů Č÷÷�ůąř�gřxé¨÷÷řéřX÷—�ůů)�÷÷čů)ř÷Ç�ůů)�÷gř¸y¨÷÷7řŮřx§řXůÉ�÷÷'�ůiř(÷wŘůů)x÷÷řX©ř÷§ř(ůIř(řřů)Ř÷÷'¨ůyč÷‡čůŮŘ÷÷Čů‰�÷Çřů™ř(·řřřx÷ÇřXů¸W�‡Řůąř§F÷¨ůy¸÷÷xůů)Ř÷WřřřH÷÷¨ůyřřřů©¨÷÷řů)ř(÷·�ůů)�÷÷'Čů ř÷·¸ůůř'Wřř)Č÷÷7řůřX÷7čůůx÷÷G¨ůIř÷§čůé¨÷×řřř8÷Wř(ů)ř—ř�ůYč÷÷�ůąŘ÷‡čÉ*ů¨÷÷řXÉ�÷ÇřůIřřřxąřX÷×řůyČ÷—�ůů ¸—vçČůyx÷÷¨ůéč÷'řřř8÷÷�ůiřxרůé¨×F÷¨ůYř÷·�ůů9�÷÷'Čąř8÷‡čůąřřřXů�÷÷g¨ůyř÷w¸ůů �÷÷7Čů9ř÷WřXů©řȇřřŘ÷×řůYČ÷'ř8ů™Č÷†‡¸ů™Ř÷—čůů¸÷·ř¨i¸÷—ř8ů)řřřhůř÷÷'Řůiř÷‡xůů9�§6÷7Čů)¨÷׸ůůřÇřřř8÷÷G�ů‰ř÷G�ůů�÷÷gxůIřH÷‡�ů
Binary file not shown.
+70
View File
@@ -0,0 +1,70 @@
#include <stdio.h>
#include <stdlib.h>
#define PCM4(p) ((p) < 0xF8 ? (((p) + 8) >> 4) : 0x0F)
int main(int argc, char **argv)
{
FILE *fp;
char *wavfile = NULL;
char *pcmfile = "out.pcm";
unsigned char header[44], *samples, *rlepcm;
unsigned int wavlen, pcmlen, prevpcm, pcm, run;
int i;
if (argc > 1)
{
wavfile = argv[1];
if (!(fp = fopen(wavfile, "rb")))
{
fprintf(stderr, "Ubale to open %s.\n", wavfile);
exit(-1);
}
if (argc > 2)
pcmfile = argv[2];
}
else
{
fp = stdin;
}
fread(&header, 44, 1, fp);
if (header[0] == 'R' && header[12] == 'f' && header[20] == 1 && header[34] == 8)
{
wavlen = (header[40] | (header[41] << 8) | (header[42] << 16) | (header[43] << 24));
fprintf(stderr, "WAV length: %d\n", wavlen);
samples = malloc(wavlen);
rlepcm = malloc(wavlen);
fread(samples, wavlen, 1, fp);
}
else
{
fprintf(stderr, "Not 8 bit/samples mono WAV header.\n");
exit(-1);
}
if (wavfile)
fclose(fp);
if (!(fp = fopen(pcmfile, "wb")))
{
fprintf(stderr, "Unable to open %s for writing.\n", pcmfile);
exit(-1);
}
prevpcm = PCM4(samples[0]);
run = 1;
pcmlen = 0;
for (i = 1; i < wavlen; i++)
{
pcm = PCM4(samples[i]);
if (pcm == prevpcm && run < 16)
run++;
else
{
rlepcm[pcmlen++] = ((run - 1) << 4) | prevpcm;
prevpcm = pcm;
run = 1;
}
}
fprintf(stderr, "RLE PCM length: %d\n", pcmlen);
fwrite(rlepcm, pcmlen, 1, fp);
fclose(fp);
return 0;
}
@@ -27,6 +27,15 @@ byte = $09, $0A, $0C, $0D, $0F, $10, $12, $13, $15, $17, $19, $1B, $1D, $1F, $21
byte = $25, $27, $2A, $2C, $2E, $31, $33, $36, $38, $3B, $3E, $40, $43, $46, $49, $4C
byte = $4F, $51, $54, $57, $5A, $5D, $60, $63, $67, $6A, $6D, $70, $73, $76, $79, $7C
def wavtopcm4(samples, rep, len)#0
var i
rep = (rep - 1) << 4
for i = 0 to len-1
samples->[i] = rep | (samples->[i] >> 4)
next
end
arg = argNext(argFirst)
if ^arg
ref = fileio:open(arg)
@@ -35,23 +44,32 @@ if ^arg
len = fileio:read(ref, pcm, heapavail)
fileio:close(ref)
heapalloc(len)
pcm = pcm + 44
len = len - 44
if pcm[0] == 'R' and pcm[1] == 'I' and pcm[2] == 'F'
pcm = pcm + 44
len = len - 44
wavtopcm4(pcm, 1, len)
fin
pcmPlay(pcm, len / 256)#0
fin
else
while ^$C000 < 128
pcmPlay(@sinewave, 1)#0
wavtopcm4(@sinewave, 16, 256)
memcpy(heapmark, @sinewave, 256)
memcpy(heapmark + 256, @sinewave, 256)
memcpy(heapmark + 512, @sinewave, 256)
memcpy(heapmark + 768, @sinewave, 256)
memcpy(heapmark + 1024, heapmark, 1024)
while ^$C000 < 128
pcmPlay(heapmark, 8)#0
loop
getc
memset(@sinewave, $10F0, 256)
memset(heapmark, $FFF0, 1024)
while ^$C000 < 128
pcmPlay(@sinewave, 1)#0
pcmPlay(heapmark, 4)#0
loop
getc
memset(@sinewave, $8080, 256)
memset(heapmark, $F8F8, 1024)
while ^$C000 < 128
pcmPlay(@sinewave, 1)#0
pcmPlay(heapmark, 4)#0
loop
getc
fin