找回密码
 立即注册
查看: 128|回复: 3

全球首款STC8H8K64移植芯片音乐仿真核心工程

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2026-06-16 02:34:23
已绑定手机

2

主题

5

回帖

77

积分

注册会员

积分
77
发表于 2026-6-9 09:49:43 来自手机 | 显示全部楼层 |阅读模式


折腾了一阵 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
IMG_7276.jpeg
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2026-06-16 02:34:23
已绑定手机

2

主题

5

回帖

77

积分

注册会员

积分
77
发表于 2026-6-9 13:00:56 | 显示全部楼层
源码也上传了,语音方案就是移植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 地位:高端复古音源代表,玩家很爱它的音色。


STC32G12K128_v2-20260609_125151.zip

245.52 KB, 下载次数: 7

STC_Chiptune v7-stc8h封顶.zip

1.97 MB, 下载次数: 10

回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:393
  • 最近打卡:2026-07-04 17:13:30

83

主题

7888

回帖

1万

积分

超级版主

积分
16827
发表于 2026-6-9 11:12:32 | 显示全部楼层
应该使用AI8051U或STC32G来做,算力提高好几倍。

另外你可以简介一下你的语音方案是什么,毕竟搞过的人比较少,一看不懂直接划走。
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2026-06-16 02:34:23
已绑定手机

2

主题

5

回帖

77

积分

注册会员

积分
77
发表于 2026-6-9 13:15:01 | 显示全部楼层
另外本次开发的亮点,全程使用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

回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-7-5 07:47 , Processed in 0.076681 second(s), 60 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表