3DMGAME 3DM首页 新闻中心 前瞻 | 评测 游戏库 热门 | 最新 攻略中心 攻略 | 秘籍 下载中心 游戏 | 汉化 购买正版 论坛

注册 登录

QQ登录

只需一步,快速开始

查看: 4124|回复: 1
打印 上一主题 下一主题

[转贴] [模拟新闻]Makaron WIP 最新开发进展 01.24

[复制链接]

603

主题

2546

帖子

1万

积分

版主

Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

贡献度
2111
金元
34568
积分
12011
精华
11
注册时间
2007-11-11
QQ
跳转到指定楼层
主题
发表于 2008-1-25 12:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
http://dknute.livejournal.com/15529.html]


  • 18th-Jan-2008 - Today's experiment... success!

    Now the usuall stuff. I'm sure you've noticed how even the MT version gets choppy sometimes, SH4 speed indicator going all red for a split second with sound getting distorted, and so on. If you were paying attention you've noticed your HDD led blinked at the very same moment. Yup, it's not a coincidence. Untill now CD/GD image reads were blocking the main emulator thread - but no more.
    I've begun converting GD layer to threaded model and hit few walls (what a surprise, huh?). I mean it's very doable but I have a very specific implementation in mind:
    - ATA/ATAPI layer responds according to standards
    - INTRQ/DMARQ signals can change asynchronously
    - disc reads do not block emulator
    - data reads are speed-limited to 12x
    - DMA transfers are speed-limited to G1 max. of 10MB/s

    I'd also like to move CDDA support from image reader to GD module as a special case of raw sector read. This way I'd have only one place in which the buffers are being refilled from HDD - nice and tidy.
    So far I've completed about half of that, that is data reads are not blocking anymore - man, that does make a difference. You will like it . Still, the limiter on DMA is 10MB/s now and there's none on GD yet. Why would I even need those? Because I like it that way. Sure as hell would make my life easier to just remove them but this is a gauntlet thrown in my face and I will take up that challenge
    All this and no need for thread blocking other then BSY flag in status register - just like the hardware. But this might not last as I still need to figure out how to convert functions that "open" and "swap" discs - those can be called anytime from main thread (that is, menu that will be there someday). I need to gracefully handle cases like swap requests in the middle of buffer refill for example.

    The additional thread doesn't run all the time, it goes to sleep when GD is not being accessed. This means you don't need triple-core (and if you have you will not notice any speedup) beacuse it'll most likely get scheduled to the core doing rendering, once it finishes that of course. I'm sure you realize that on single-core system the read has to block at some point, so non-MT version will have this mechanism disabled and work as they always did.

    Oh, by the way, fighters/shooters use fog too:


回复

使用道具 举报

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

本版积分规则

Archiver|手机版|3DMGAME ( 京ICP备14006952号-1  沪公网安备 31011202006753号

GMT+8, 2026-3-24 04:34 , Processed in 0.029148 second(s), 15 queries , Memcached On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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