琵琶行论坛

 找回密码
 注册
每日签到论坛FTP使用教学领取红包(开放!)论坛FTP搜索引擎
查看: 37550|回复: 199

Nova v0.5 世嘉土星模拟器

[复制链接]

该用户从未签到

发表于 2017-10-17 13:32:29 | 显示全部楼层 |阅读模式
本帖最后由 stevekwok 于 2018-12-24 21:01 编辑

Nova 是一个世嘉土星模拟器,使用C++11编写,目标是达到像其他家用机平台模拟器那样的水准。
Nova 是从零开始写的,但是Nova的编写离不开很多朋友的研究和贡献。


Special thanks
=================
Anders Montonen, for everything related to development for Saturn.
Charles MacDonald, James Forshaw, I got lots of helps from their research on undocumented stuff.
Theo Berkau, emulation of undocumented CDBLOCK commands(E0, E1, E2) is based on his research.
Karl Stenerud, I referenced the source code of Musashi when I wrote my M68K emulator.
flamewing, BCD instructions emulation of M68K based on his research.
MITSUNARI Shigeo, for his great x86/x64 JIT assembler Xbyak.
Niels Lohmann, for his great JSON parser.
Jean-loup Gailly and Mark Adler, for their great zlib.
Dieter Baron and Thomas Klausner, for their great libzip.
Martin J. Fiedler, for his neat mp2 decoder.
SegaRetro and Satakore, for Saturn games/peripherals information.
Benjamin Siskoo, for his kindness and various helps.
Zet-sensei, for his kindness and the completed data.json file.
Hector Tomazella, a nice buddy who makes videos and compatibility list for Nova.
Dwayne, the first patron of Nova.


Testing
=================
Benjamin Siskoo
Zet-sensei
bosshunter
Strelok
InsertMoreCoins
Nocturne
caesarkof


Translation
=================
Benjamin Siskoo
Hector (Literalmente Game)
InsertMoreCoins
theheroGAC
Deni
cia
Klaus Sommer

感谢管理员帮忙找回账号密码

感谢管理员加精, 感谢版主lo585983再次置顶。
也收到了论坛朋友的评分鼓励,非常感谢!


经过论坛上热心朋友的测试,目前确认Nova可以运行在Win7/8/10之上,感谢各位提供测试报告的朋友。


Nova的一些特性:
1.支持自动保存记录。
2.支持自动选择扩展内存卡还是记忆卡(需要编辑cart.json)。
3.支持自动选择游戏区域。


Nova目前不支持 状态保存/读取

支持的CD镜像格式:.cue, .mds, .ccd, .bin, iso


What's new
===============


v0.5
---------------
VDP1: Refactored the entire architecture.
VDP1: Disabled force_interlace.
VDP1: Implemented better timing.
VDP1: Implemented handling of the MODR register.
VDP1: Implemented handling for invalid command table data.
VDP1: Implemented Color Calculation Mode 5.
VDP1: Implemented a new algorithm for quadrilateral rasterization.
VDP1: Implemented anti-aliasing for Distorted Sprite and Polygon.
VDP1: Rewrote user/system clipping and pre-cliping.
VDP1: Rewrote end code process.
VDP1: Rewrote High Speed Shrink.
VDP1: Rewrote handling of the LOPR/COPR registers.
VDP1: Rewrote manual frame change/erase.
VDP1: Added access restrictions to the registers TVMR/FBCR.
VDP1: Fixed a bug of EWLR/EWRR registers(Street Fighter Zero 3).
VDP2: Disabled VDP2_JIT.
VDP2: Refactored the entire architecture.
VDP2: Removed Character Pattern cache.
VDP2: Supported 1M VRAM.
VDP2: Implemented Special High-Resolution Graphics Mode(preliminary).
VDP2: Implemented HCNT/VCNT/EXLTEN handling(incomplete).
VDP2: Implemented RBG1 and EXBG.
VDP2: Implemented rotation calculation with coefficient data.
VDP2: Implemented Rotation Parameter Mode 2 of RBG0.
VDP2: Implemented Invalid Rotation Parameter Mode 2(when coefficient table is disabled) of RBG0.
VDP2: Implemented coefficient data as part of LNCL data.
VDP2: Implemented Screen Over Process Mode 1 of RBG0/RBG1.
VDP2: Implemented Gradation.
VDP2: Implemented Sprite Window.
VDP2: Implemented sprite color calculation condition 3(MSB).
VDP2: Added support of sprite type 0~7 for 8-bit data.
VDP2: Added support of sprite type 8~F for 16-bit data.
VDP2: Added Character Pattern cache again.
VDP2: Rewrote priority handling.
VDP2: Rewrote handling of the SPCLMD and SPWINEN bits of the register SPCTL(Dragon Force 2).
VDP2: Rewrote Cycle Pattern handling(incomplete).
VDP2: Rewrote TVSTAT handling.
VDP2: Rewrote Special Priority function.
VDP2: Rewrote Extended Color Calculation.
VDP2: Rewrote Sprite Screen Over Process.
VDP2: Rewrote Window Process.
VDP2: Rewrote Shadow Process.
VDP2: Rewrote LNCL insertion.
VDP2: Rewrote scrolling/zooming calculation of NBG0/NBG1/NBG2/NBG3.
VDP2: Rewrote Line Scroll/Vertical Cell Scroll process of NBG0/NBG1.
VDP2: Fixed a bug of byte access of the color RAM(wrong mask).
VDP2: Fixed a bug that the WxLWE bit of LWTA0U and LWTA1U are masked.
VDP2: Fixed a bug of special color calculation mode 3(palette data MSB).
VDP2: Fixed a bug of RGB0 color calculation ratio.
VDP2: Fixed a bug when the data is RGB format and color calculation is indicated by MSB.
VDP2: Fixed a bug of palette number.
VDP2: Fixed a bug of color RAM address offset.
VDP2: Fixed bugs of Character Number Supplement Modes.
VDP2: Fixed bugs of Normal Line Window coordinates.
VDP2: Fixed a bug of sprite transparent dot.
VDP2: Fixed a bug of Pattern Name Table Lead Address calculation.
VDP2: Fixed bugs of display/color mode limits by settings of the Reduction Enable Register.
VDP2: Fixed bugs of display limits by settings of NBG0/NBG1 color modes.
VDP2: Fixed bugs caused by changes in mid-frame.
VDP2: Fixed bugs of NBG2/NBG3 scroll values.
VDP2: Fixed bugs of LNCL/BACK screen in single interface mode.
VDP2: Fixed a bug of vertical Reduction.
VDP2: Fixed a bug of Screen Over Process Mode 3 when bitmap vertical size is 256.
VDP2: Fixed a bug of rotation parameter when the graphic mode is hi-res or exclusive hi-res.
VDP2: Fixed a bug of rotation parameter when it is double/single interlace.
VDP2: Fixed a bug of Special Color Calculation Mode 2(by dot) when color format is RGB.
VDP2: Fixed a bug of priority pattern(BIOS splash screen).
VDP2: Fixed a bug that BGON changes in mid-frame(Lunar Silver Star Story).
VDP2: Fixed a bug of sprite transparent dot.
VDP2: Fixed a bug of single interface.
VDP2: Fixed a bug of line scrolling.
VDP2: Fixed a bug when the priority number is 0.
SCU: Rolled back the fix of PPAF handling in v0.4(Thunder Force V).
SCU: Fixed a bug of DMA indirect mode table address detection(Tactics Ogre).
SCU: Fixed a bug of DMA range checking(Burning Rangers).
SCU: Fixed a bug of DMA timing(too slow to end transfer of palette data during VBLANK).
CDB: Supported MPEG audio decoding.
CDB: Fixed bugs of CdReport when the pickup is in the Lead In/Out area.
MISC: Added ON/OFF switch for the VDP2 BACK layer.
MISC: Fixed another wrong track mode bug of the MDS parser.


v0.4
---------------
CDB: Rewrote the entire Filter/Buffer/Partition/File system.
CDB: Rewrote most of the commands.
CDB: Rewrote the HIRQREQ register and interrupts handling.
CDB: Rewrote the DATATRNS register and data transferring.
CDB: Rewrote the periodic response procedure.
CDB: Rewrote CdReport.
CDB: Rewrote subcode Q decoding.
CDB: Implemented rarely used commands.
CDB: Implemented better timing for commands.
CDB: Implemented subcode R~W decoding.
CDB: Implemented REJECT/WAIT/ERROR handlings.
CDB: Implemented Copy/Move between selectors.
CDB: Improved status transition.
CDB: Improved logging.
CDB: Added timing for seeking process.
CDB: Fixed a bug of doing power-on when it is already power-on.
SCU: Improved PPAF handling, setting value by an event.
SCU: Fixed a bug of DMA accessing area detection.
VDP1: Fixed a bug of initializing.
SYSTEM: Improved threads synchronization.
SYSTEM: Rewrote CD reading.
SYSTEM: Rewrote the CD reading thread.
SYSTEM: Added new log types Notice and Remarks.
BIOS: Fixed a bug of the HIRQREQ register initial value.
MISC: Rewrote the BIN/ISO parser.
MISC: Fixed a bug(wrong track mode) of the MDS parser.


v0.3
---------------
SH2: Removed interrupts timing.
SCU: Rewrote DSP flags handling.
SCU: Rewrote DSP commands and opcodes mapping.
SCU: Rewrote the DSP RA register handling.
SCU: Rewrote PPAF register handling.
SCU: Rewrote DSTA register handling.
SCU: Rewrote DMAC priority handling.
SCU: Rewrote INTC.
SCU: Added timing for interrupt sending of INTC.
SCU: Added DSP register TN0.
SCU: Added DSP disassembly function.
SCU: Added restrictions to the DMA add values.
SCU: Added checking of DSP delay commands conflicts.
SCU: Added checking of PPAF register read access while DSP is executing.
SYSTEM: Supported adding user data to an event.


v0.2.2
---------------
VDP2: Fixed a bug of MSB transparent shadow(Game no Tatsujin).
CONTROLLER: Implemented
    Analog Joystick(No analog data for now)
    Keyboard(Game Basic for Sega Saturn)
    Shuttle Mouse(Game no Tatsujin)
    Mega Drive 6-Button Pad(for testing)
    Mega Drive 3-Button Pad(for testing)


v0.2.1
---------------
SMPC: Fixed command SYSRES(Force Master SH2 to run Power-On vector).
VDP1: Fixed manual change/erase frame buffer(ST-V VDP1/VDP2 HARDWARE TEST).
SYSTEM: Implemented TITAN mode(Preliminary).
SYSTEM: Rewrote the startup procedure.
SYSTEM: Rewrote the cartridge subsystem.
SYSTEM: Refactored the CD subsystem.
GRAPHIC: Fixed screen flickering.
GUI: Enabled menu item "Boot".
MISC: Supported CD drive(Preliminary).
MISC: Added "Software Reset"(Hold <Shift> when "Reset", equivalent to START+A+B+C).
MISC: Added more options in nova.ini.
MISC: Fixed a bug of the INI parser when there are square brackets within a property.
MISC: Fixed a bug of dragging and dropping files directly to the executable.
MISC: Some file names were changed,
      "primary_01.bup" >>> "sat_primary_01.bup"
      "memcard_01.bup" >>> "sat_memcard_01.bup"
      "battery.sav" >>> "sat_battery.sav"


v0.2
---------------
SH2: Fixed crashing bugs of the disassembler.
SH2: Added a hook routine for special usage.
SCU: Fixed a bug of table address boundary checking of DMAC indirect mode.
SMPC: Added magic numbers to the battery save file.
VDP1: Fixed MSBON of polygon.
CDB: Added log messages for commands MpDisp, MpSetWin, MpSetBcolor, MpSetFade, MpSetVeff.
SYSTEM: Implemented Nova BIOS(Preliminary).
SYSTEM: Supported ROM cartridge.
MISC: Implemented comments handing for the INI parser.
MISC: Added new options in nova.ini.
MISC: Some file names were changed,
      "backup.bin" >>> "primary_01.bup"
      "memcard_00.bin" >>> "memcard_01.bup"
      "smpc.bin" >>> "battery.sav"


v0.1.9
---------------
SH2: Added read byte access of TIER register of FRT(3D Lemmings (E)).
SCU: Refactored INTC.
SCU: Made DSP and DMAC as separated excutable devices.
SCU: Supported irregular(Transfer address is not aligned or transfer count is an odd number) DMA transfers.
SCU: Implemented better timing for DMA transfers.
SCU: Implemented better synchronization mechanism for DMAC.
SCU: Implemented caching of DMA triggers.
SCU: Implemented priority for the three DMA levels.
SCU: Implemented all status(Access, Interruption, Standby, Operation) of DMA transfers.
SCU: Implemented Force-Stop of DMA transfers.
SCU: Implemented handling for illegal DMA.
SCU: Implemented handling for the Status of Stopped DMA registers.
SCU: Added handling for DSTA register.
SCU: Added "Cool-down" time for interrupted/Force-Stopped DMA transfers.
SCU: Added restrictions for register access.
VDP1: Added restrictions for register access.
VDP2: Fixed the VBLANK bit of TVSTAT register.
CDB: Refactored handling of DATATRNS register.
CDB: Added byte access of DATATRNS register(Steam Hearts via SCU DMA).
SYSTEM: Added checking for accessing device registers from slave SH2.
MISC: Refined regular expressions of the CUE parser.
MISC: Fixed regular expression bugs of the INI parser.


v0.1.8
---------------
SH2: Added timing for interrupt handling(Kidou Senshi Z Gundam).
SH2: Rewrote address mapping/mirroring stuff again.
SH2: Added handling for illegal delay slot instructions.
SCSP: Added read byte of SCIPD(Virtua Cop/Virtua Cop 2).
CDB: Implemented several MPEG part commands(preliminary), Lunar-Silver Star Story MPEG Ban is playable now(No MPEG video/audio playing).
MISC: Added NO_GFX mode to increase the debugging speed.

VDP1: Fixed a bug of the clipping system not initialized when reseting(opening movie of Kidou Senshi Z Gundam).
VDP2: Fixed a bug of PAL mode(Rayman (Europe)).
SMPC: Tweaked timing of INTBACK command(autofire issue of Rayman).
INPUT: Fixed a bug of key num4 on the numberpad which acts as same as the right key(Thanks ut0).


v0.1.7
---------------
VDP2: Added byte access of cycle pattern registers(Sengoku Blade).
SCSP: Implemented a new algorithm for MIBUF and MOBUF of MIDI.
SCSP: Implemented cancellation of MIDI input/output interrupts.
MISC: Added command FLAGS for the CUE parser.

SCSP: Refactored INTC.

VDP2: Fixed VRESO bits of TVMD register when its value is 2 or 3.
VDP2: Fixed a bug of sprite shadow(Suiko Enbu).
CDB: Fixed the pickup reset of CdPlay command, Steam-Heart's plays BGM properly now.
MISC: Fixed the wrong file offset of the CUE parser(single BIN).


v0.1.6
---------------
SYSTEM: Completed PAL mode support.

MISC: Added command REM for the CUE parser.
MISC: Refined the INI parser.

SCSP: Fixed the random crash caused by CA(call address is out of range).
MISC: Fixed the crash when dragging and dropping files directly to the executable.
MISC: Fixed the crash of homebrews without a Product ID.
MISC: Fixed the crash caused by incorrect use of std::getline.


v0.1.5
---------------
MISC: Added configuration file.
MISC: Implemented I18N.
MISC: Rewrote the CUE parser.
MISC: Implemented startup from command line.
MISC: Implemented dragging and dropping files.

SH2: Improved address mapping and mirroring.
UI: Improved the user interface.

VDP1: Fixed Jump Call/Return.
M68K: Fixed TAS instruction, 3D Baseball is in-game (Not playable due to graphic issues).


v0.1.3
---------------
SCU: Added byte access of registers, Burning Rangers is playable now.
VDP2: Added MSB color calculation.
SCSP: Added read access of sound stack.
SYSTEM: Preliminary support for PAL mode, Tomb Raider (Europe) is playable now.

VDP1: Fixed MSBON.
VDP2: Fixed issues of MSB shadow, resolved the shadow disappearance of Asuka 120% Burning Fest.


v0.1.2
---------------
Fixed a mirroring bug of SH2 division unit, many games are playable now, sprites disappearance of some games is resolved too.


v0.1.1
---------------
Disabled thousands of warnings of illegal memory access of m68k, make Lunar Silver Star Story playable.
Fixed 4 instructions of m68k, CMP, CMPA, CMPI, CMPM, CD player and many games play sound properly now.
Fixed the issue of always formatting backup RAM when startup.


v0.1.0
---------------
Initial release.


当前Nova的状态:
硬件的模拟完成度大约是80%,其中:
SH2 90%(一部分片上单元(Onchip modules)像BSC, UBC未模拟,异常处理和DMA未完成)
SCU 70%(DMA需要重写,DSP完成了但目前还有很多问题)
SMPC 80% (不支持2P,多插Multitap等很多周边设备未模拟)
VDP1 90%(绘图命令接近完成但需要重写,需要更加精确的计时(Timing),Double interlace未模拟)
VDP2 90%(RBG0一部分未完成,RBG1,EXBG未模拟,Cycle pattern register一部分未完成,Line color screen旋转未模拟,coefficient data 未模拟)
M68K 95% (需要更加精确的计时(Timing),CPU的某些状态未模拟)
SCSP 70%(DSP未模拟,MD(Modulation data) 未完成,PG(Phase generator)有比较严重的问题)
CDB 70%(一部分命令未模拟,CD Drive 状态未完成)

控制器:目前只支持 1P Digital pad
扩展卡:目前已经支持所有容量的包括记忆卡,扩展内存卡等,但是默认是使用了32Mbit的扩展卡,通过编辑cart.json来自动选择要切换到记忆卡还是扩展内存卡。

关于速度:目前主CPU SH2只有解释器而没有JIT,这是速度慢的一个原因,另外一个原因是为了同步各个设备所作的牺牲。
VDP2支持JIT,用按键“9”可以在运行时动态切换C++核心和JIT核心,可以获得大幅速度提升,但是JIT核心目前的完成度没有C++核心那么高,颜色运算,窗口,阴影等还未完成。

感谢坛友 caesarkof 做了大量测试,喜欢测试的朋友可以和他一起做测试 BUG汇报帖



                               
登录/注册后可看大图


下载:(不知道为什么, 论坛上传附件总是失败,所以把Patreon地址贴上来了)
https://www.patreon.com/file?h=23526252&i=3043423


评分

20

查看全部评分

该用户从未签到

发表于 2017-11-22 19:34:36 | 显示全部楼层
感谢楼主更新
回复 支持 0 反对 1

使用道具 举报

该用户从未签到

发表于 2017-10-17 17:27:20 | 显示全部楼层
牛人啊,没想到国内也有这种会写模拟器的人才,顶起来啊 希望土星模拟器早点成熟,到目前为止那么多土星模拟器没有一款像样的
回复 支持 1 反对 0

使用道具 举报

签到天数: 613 天

[LV.9]以坛为家II

发表于 2017-10-17 16:00:56 | 显示全部楼层
am7 发表于 2017-10-17 15:20
建议直接在64位系统开发,不要在32位系统折腾太多,因为硬件性能已经改变了很多,而且如果API不是很深入 ...

我并不同意这种观点
老机器本身就是32位以下的cpu
基于32位开发对老机器的模拟器来说并没有太大问题
固然x64有更好的api调用机制
但事实上对于cpu的使用率更高了
在硬件受限的条件下
32位程序执行效率其实高于64位
虽然现在的硬件条件相对优越
但玩模拟还是需要考虑大众用户的
回复 支持 1 反对 0

使用道具 举报

签到天数: 613 天

[LV.9]以坛为家II

发表于 2017-10-17 13:42:28 | 显示全部楼层
32位还是64位
目前64位mednafen倒是已经相当不错了
回复 支持 反对

使用道具 举报

签到天数: 613 天

[LV.9]以坛为家II

发表于 2017-10-17 13:44:09 | 显示全部楼层
我手上的守护英雄镜像似乎运行不能
其他ss模拟器正常
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2017-10-17 13:46:46 | 显示全部楼层
菲鲁塞迪 发表于 2017-10-17 13:42
32位还是64位
目前64位mednafen倒是已经相当不错了

32位的程序也可以在64位系统上运行的。
回复 支持 反对

使用道具 举报

签到天数: 613 天

[LV.9]以坛为家II

发表于 2017-10-17 13:48:57 | 显示全部楼层
stevekwok 发表于 2017-10-17 13:46
32位的程序也可以在64位系统上运行的。

我知道
但是反过来不行
所以我比较喜欢32位版
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2017-10-17 13:51:36 | 显示全部楼层
菲鲁塞迪 发表于 2017-10-17 13:44
我手上的守护英雄镜像似乎运行不能
其他ss模拟器正常

出错信息截个图
回复 支持 反对

使用道具 举报

签到天数: 613 天

[LV.9]以坛为家II

发表于 2017-10-17 13:56:05 | 显示全部楼层
未标题-1.gif

CMD窗口在循环跳
但游戏依然是黑屏
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2017-10-17 13:57:56 | 显示全部楼层
菲鲁塞迪 发表于 2017-10-17 13:56
CMD窗口在循环跳
但游戏依然是黑屏

BIOS文件重命名为 bios.bin 放到 bios 文件夹里。

回复 支持 反对

使用道具 举报

签到天数: 613 天

[LV.9]以坛为家II

发表于 2017-10-17 14:07:56 | 显示全部楼层
可以运行了
楼主是作者么?
期待一下debug功能
目前mednafen和yabause的debug功能都不算很强
另外自定义按键还是必须的东西...
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2017-10-17 14:19:00 | 显示全部楼层
菲鲁塞迪 发表于 2017-10-17 14:07
可以运行了
楼主是作者么?
期待一下debug功能

目前的debug功能只有memory editor可用,其他的反汇编器这些都是方便我自己开发调试的,因为功能不完善,所以release版中屏蔽掉了。

回复 支持 反对

使用道具 举报

签到天数: 163 天

[LV.7]常住居民III

发表于 2017-10-17 14:26:28 | 显示全部楼层
月下夜想曲在播放完动画后程序崩溃...
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2017-10-17 14:26:31 | 显示全部楼层
WIN10 爆音
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|琵琶行论坛 ( 赣ICP备12000882号 )

GMT+8, 2019-6-25 11:42 , Processed in 0.030168 second(s), 12 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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