全球首款STC8H8K64移植芯片音乐仿真核心工程
{:4_165:}折腾了一阵 STC8H8K + PWM-DAC 复古音源方案,目前进度来交个底😆
定时器分配:
• 定时器2:VGM主时序,固定 17640Hz 采样定时,负责音源解码与波形合成
• 另一定时器:60Hz 串口后台定时,用于调试/日志输出
目前兼容情况:
✅ AY-8910、SN76489 播放丝滑流畅,音色正常
⚠️ SCC 音源勉强能跑,已经摸到算力上限
❌ NES、GB、SAA1099 暂时没法正常播放,中断服务函数开销太大,8位MCU算力顶不住了
https://github.com/denjhang/STC_Chiptune
硬件非常简单,p2.0一根线出来,过耦合电容之后接有源音箱,音质还行,考虑性能原因,采样率固定为17640hz,pwm载波调制DAC输出原理
【全球首款STC8H 可编程声音发生器 AY8910 PSG仿真器-哔哩哔哩】 https://b23.tv/8wP2PQp
【全球首款STC8H 数控复杂声音发生器移植 DCSG SN76489兼容-哔哩哔哩】 https://b23.tv/FMonvpC
【全球首款STC8H 简易片上波表合成器 SCC-哔哩哔哩】 https://b23.tv/4U7ug0h 源码也上传了,语音方案就是移植libvgm的声音核心,这些PSG/DCSG是一些古董游戏机的声音芯片,也是最基础芯片音乐硬件。
本方案使用UART从上位机接受VGM寄存器流,通过内置的精简版仿真核心计算声音并使用PWM载波调制DAC输出到P2.0脚位,
和其他mp3/wav播放器项目相比有本质区别,那些播放器项目是对音频进行解码播放,我这里是进行真正的声音合成,具备实时合成的能力,
稍加改进即可配合电脑等上位机进行实时音乐合成,MIDI合成,电子琴等功能,也可扩展为本地SD卡播放VGM。
目前8h的性能已经榨干,超频到48M已经是内置IRC的极限,播放ay尚且流畅,sn略有卡顿,scc非常勉强,saa,gb,nes等几乎无法发出正常声音。
迁移到32g12k128之后,时钟频率有所下降为35M,但是由于C251内核对运算的加速,scc有大幅度改善,但是FM合成如YM2413还是做不了,FM合成需要大量高精度乘法(大多数单片机8位/32位低端MCU可能都难以完成),这里最多做精简内置查表替代。
如不懂可查豆包等ai解释下:
什么是 PSG / DCSG / GB / NES / SAA / SCC?(libvgm 复古声音芯片通俗解释)
这些全是老游戏机 / 老电脑里的声音芯片(音源),libvgm 就是专门模拟它们发声的核心库。下面逐个讲人话:
1. PSG(Programmable Sound Generator)
可编程声音发生器,8 位机最基础的 “方块声芯片”。
[*]代表型号:AY-3-8910、YM2149
[*]用在:世嘉 SMS、Game Gear、MSX、早期街机、Amstrad CPC
[*]声音特点:3 路方波 + 1 路噪音 + 一路硬件包络,就是那种 “嘟嘟、哔哔、沙沙” 的 8 位机味,音色硬、亮、电子感强。
[*]libvgm 地位:最基础、支持最多的一类芯片,几乎所有复古平台都有它。
[*]真正的特征是硬件包络可独立当波表输出,也可和方波进行AM调制获得特殊BASS音效
2. DCSG(Digital Channel Sound Generator)
德州仪器出的PSG竞品,SN76489
[*]本质:PSG 的同时期竞争对手,删除了硬件包络功能
[*]用在:部分 MSX 扩展卡、老家用电脑、掌机、Sega SMS/GG
3. GB(Game Boy Sound System)
任天堂 Game Boy 的内置音源,俗称 “GB 音”。
[*]芯片:GB DMG 声音单元
[*]用在:Game Boy、GB Color、GB Pocket
[*]声音特点:2 路方波 + 1 路波形 + 1 路噪音,经典的 “Game Boy 味”,单薄、清脆、带点 “滋滋” 感,童年宝可梦 / 口袋妖怪的音乐就是它。
[*]libvgm 地位:独立完整的 GB 核心,模拟度非常准。
4. NES(Famicom APU)
任天堂红白机(FC/NES)的声音处理器,俗称 “FC 音”。
[*]芯片:2A03 APU
[*]用在:NES/FC、盗版红白机
[*]声音特点:2 路方波 + 1 路三角波 + 1 路噪音 + 1 路 DPCM 采样,音色比 GB 更厚、更有力量,超级玛丽、魂斗罗、洛克人的音乐全是它。
[*]libvgm 地位:核心重点芯片,模拟精度极高。
5. SAA(SAA1099)
飞利浦出的早期 PSG 变种,欧洲 8 位机常用。
[*]芯片:SAA1099
[*]用在:SAM Coupe欧洲电脑,创新CMS PC-ISA声卡
[*]声音特点:6 路方波 + 噪音,比普通 PSG 通道多,音色更 “宽”,但还是典型 8 位电子味。
[*]libvgm 地位:小众但经典的欧洲音源。
6. SCC(Sound Creative Chip)
Konami(科乐美)给 MSX 做的 “超级 PSG”,也叫 “Konami SCC”。
[*]芯片:Konami SCC
[*]用在:MSX 科乐美游戏卡带(合金装备、宇宙巡航机等)
[*]声音特点:5 路自定义波形,不是固定方波,能做更柔和、更复杂的音色,8 位机里音质顶级,被称为 “8 位 FM”。
[*]libvgm 地位:高端复古音源代表,玩家很爱它的音色。
应该使用AI8051U或STC32G来做,算力提高好几倍。
另外你可以简介一下你的语音方案是什么,毕竟搞过的人比较少,一看不懂直接划走。
另外本次开发的亮点,全程使用vscode+claude code+glm5.1 AI全流程开发,里面全部源码都glm写的,我没有写一句,
编译器当然是直接调用keil c251完成编译,现在的ai实在是太强大了。不过当前烧录还是手动打开stcisp进行手动烧录,这也不麻烦。
以下是编译指令可参考:
cd "D:/working/vscode-projects/STC_Chiptune/STC32G12K128" && rm -f *.OBJ ; D:/Keil_v5/C251/BIN/C251.exe scc.c "LARGE" "OPTIMIZE(8,SPEED)" 2>&1 ; D:/Keil_v5/C251/BIN/C251.exe main.c "LARGE" "OPTIMIZE(8,SPEED)" 2>&1 ; D:/Keil_v5/C251/BIN/l251.exe ay8910.OBJ,scc.OBJ,sn76489.OBJ,gb.OBJ,nes.OBJ,saa1099.OBJ,ym2413.OBJ,main.OBJ TO build/MAIN 2>&1 ; D:/Keil_v5/C251/BIN/OH251.exe build/MAIN "HEXFILE(build/MAIN.hex)" 2>&1 ; echo "BUILD DONE"
C251 COMPILER V5.60.0.0 - SN: K2DZC-UCLHYC
COPYRIGHT ARM Germany GmbH 2018
*** WARNING C115 IN LINE 101 OF scc.c: '-' applied to unsigned type, result still unsigned
C251 COMPILATION COMPLETE.1 WARNING(S),0 ERROR(S)
C251 COMPILER V5.60.0.0 - SN: K2DZC-UCLHYC
COPYRIGHT ARM Germany GmbH 2018
C251 COMPILATION COMPLETE.0 WARNING(S),0 ERROR(S)
L251 LINKER/LOCATER V4.66.93.0 - SN: K2DZC-UCLHYC
COPYRIGHT ARM Germany GmbH 1995 - 2018
ay8910.OBJ,scc.OBJ,sn76489.OBJ,gb.OBJ,nes.OBJ,saa1099.OBJ,ym2413.OBJ,main.OBJ TO build/MAIN
*** ERROR L210: I/O ERROR ON INPUT FILE:
EXCEPTION 0021H: PATH OR FILE NOT FOUND
FILE: AY8910.OBJ
MCS 51/251 OBJECT TO HEX FILE CONVERTER V1.47.0.0
COPYRIGHT ARM Germany GmbH 2000 - 2018
*** ERROR: CANNOT OPEN FILE 'build/MAIN'
BUILD DONE
cd "D:/working/vscode-projects/STC_Chiptune/STC32G12K128" && rm -f *.OBJ ; D:/Keil_v5/C251/BIN/C251.exe ay8910.c "LARGE" "OPTIMIZE(8,SPEED)" 2>&1 ; D:/Keil_v5/C251/BIN/C251.exe scc.c "LARGE" "OPTIMIZE(8,SPEED)" 2>&1 ; D:/Keil_v5/C251/BIN/C251.exe sn76489.c "LARGE" "OPTIMIZE(8,SPEED)" 2>&1 ; D:/Keil_v5/C251/BIN/C251.exe gb.c "LARGE" "OPTIMIZE(8,SPEED)" 2>&1 ; D:/Keil_v5/C251/BIN/C251.exe nes.c "LARGE" "OPTIMIZE(8,SPEED)" 2>&1 ; D:/Keil_v5/C251/BIN/C251.exe saa1099.c "LARGE" "OPTIMIZE(8,SPEED)" 2>&1 ; D:/Keil_v5/C251/BIN/C251.exe ym2413.c "LARGE" "OPTIMIZE(8,SPEED)" 2>&1 ; D:/Keil_v5/C251/BIN/C251.exe main.c "LARGE" "OPTIMIZE(8,SPEED)" 2>&1 ; D:/Keil_v5/C251/BIN/l251.exe ay8910.OBJ,scc.OBJ,sn76489.OBJ,gb.OBJ,nes.OBJ,saa1099.OBJ,ym2413.OBJ,main.OBJ TO build/MAIN 2>&1 ; D:/Keil_v5/C251/BIN/OH251.exe build/MAIN "HEXFILE(build/MAIN.hex)" 2>&1 ; echo "BUILD DONE"
C251 COMPILER V5.60.0.0 - SN: K2DZC-UCLHYC
COPYRIGHT ARM Germany GmbH 2018
C251 COMPILATION COMPLETE.0 WARNING(S),0 ERROR(S)
C251 COMPILER V5.60.0.0 - SN: K2DZC-UCLHYC
COPYRIGHT ARM Germany GmbH 2018
*** WARNING C115 IN LINE 101 OF scc.c: '-' applied to unsigned type, result still unsigned
C251 COMPILATION COMPLETE.1 WARNING(S),0 ERROR(S)
C251 COMPILER V5.60.0.0 - SN: K2DZC-UCLHYC
COPYRIGHT ARM Germany GmbH 2018
C251 COMPILATION COMPLETE.0 WARNING(S),0 ERROR(S)
C251 COMPILER V5.60.0.0 - SN: K2DZC-UCLHYC
COPYRIGHT ARM Germany GmbH 2018
C251 COMPILATION COMPLETE.0 WARNING(S),0 ERROR(S)
C251 COMPILER V5.60.0.0 - SN: K2DZC-UCLHYC
COPYRIGHT ARM Germany GmbH 2018
*** WARNING C153 IN LINE 211 OF nes.c: '==': different spaced pointers (far,xdata)
C251 COMPILATION COMPLETE.1 WARNING(S),0 ERROR(S)
C251 COMPILER V5.60.0.0 - SN: K2DZC-UCLHYC
COPYRIGHT ARM Germany GmbH 2018
C251 COMPILATION COMPLETE.0 WARNING(S),0 ERROR(S)
C251 COMPILER V5.60.0.0 - SN: K2DZC-UCLHYC
COPYRIGHT ARM Germany GmbH 2018
C251 COMPILATION COMPLETE.0 WARNING(S),0 ERROR(S)
C251 COMPILER V5.60.0.0 - SN: K2DZC-UCLHYC
COPYRIGHT ARM Germany GmbH 2018
C251 COMPILATION COMPLETE.0 WARNING(S),0 ERROR(S)
L251 LINKER/LOCATER V4.66.93.0 - SN: K2DZC-UCLHYC
COPYRIGHT ARM Germany GmbH 1995 - 2018
ay8910.OBJ,scc.OBJ,sn76489.OBJ,gb.OBJ,nes.OBJ,saa1099.OBJ,ym2413.OBJ,main.OBJ TO build/MAIN
Program Size: data=9.1 edata+hdata=256 xdata=3174 const=2758 code=16219
L251 RUN COMPLETE.0 WARNING(S),0 ERROR(S)
MCS 51/251 OBJECT TO HEX FILE CONVERTER V1.47.0.0
COPYRIGHT ARM Germany GmbH 2000 - 2018
GENERATING INTEL H386 FILE: build/MAIN.hex
BUILD DONE
页:
[1]