用 Javascript 模擬超任

2,018
-1

Published on

COSCUP 2012 presentation, javascript SNES emulator

Published in: Technology, Education
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,018
On Slideshare
0
From Embeds
0
Number of Embeds
25
Actions
Shares
0
Downloads
19
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

用 Javascript 模擬超任

  1. 1. 用 Javascript 模擬超任 魏澤人
  2. 2. •國立東華大學應用數學系 助理教授•Hacker
  3. 3. 簡單的歷史• JSSpeccy (2008)• JSC64 (2009)• JSNES (2009)• 一些 Gameboy 模擬器 (2010-2011)• JSLinux (2011)• JavaScript-65816 (2012)
  4. 4. 硬體表 Release CPU Video MemoryZX 1982 Z80 3.5Mhz 256×192 16/48/128kb 15 colorC64 1982 6510 1Mhz 320x200 64k ram 16 color 20k romNES 1983 6502 256x224 2k ram 1.79Mhz 48 color 8k sram 16 sprites 32kromSNES 1990 65c816 256x224 3.58Mhz (512x478) 15bit color 128 sprites 4 BG
  5. 5. Live Demo 的機器 CPU 是 T5600
  6. 6. Try it athttp://weijr.b81.org/xnes/SnesEmu.html (try this first)SnesWW.html (firefox linux 64)SnesWW2.html (multicore android)Snes9x.html (very fast computer)
  7. 7. •PySX: 用 Python 寫的 Playstation 模擬器•利用 Python 來瞭解原理• 模擬了大部分的 CPU, IO• 能 Boot BIOS• 只缺 GTE , CD-ROM 就能跑遊戲• 但太慢
  8. 8. 如何五天內做出 JS 超任模擬器
  9. 9. 當時的計畫是:PS 模擬器都在寫了,超任模擬器算什麼,估計十天就能完成了
  10. 10. Day 1: 吃完晚飯後,找到一些文件資料,和source code ,完成 rom file loader
  11. 11. Day 2: 發現狀況不太對,好像有點複雜CPU 指令集有五種模式, PPU 有 8 種還有變化型,而且(當時)找到的文件不像 PS 那麼完整。決定使用 SNEM 配合 Emscripten
  12. 12. •Emscripten 是 LLVM byte code to JS 翻譯器•用了 Typed Array•可模擬 SDL , opengl , libc• Demo: Games, Python 直譯器• Compile 有點慢
  13. 13. •SNEM 是很簡單但是很快的超任模擬器•使用 Allegro•選擇改寫成 SDL
  14. 14. 程式碼也許很亂但只要是 Open Source 就型
  15. 15. Day 3: 很忙,所以沒有動。
  16. 16. Day 4:•成功改成 SDL• Emscripten 轉成 .js• 似乎能用 node 跑(沒有畫面)• 不確定對不對 ?• 用 ASCII 方式檢查
  17. 17. Day 5:•轉成 .html•修正顏色問題•修正 emscripten SDL 鍵盤輸入 bug
  18. 18. Day 6- Now•加入 File API•嚐試 Web Workers•去除 SDL overhead•Porting Snes9x•加速•更正天空顏色等 bug•修正位元對齊問題
  19. 19. Now –•Gamepad API•Multitouch API•更有效運用 workers•聲音•Auto framerate
  1. Gostou de algum slide específico?

    Recortar slides é uma maneira fácil de colecionar informações para acessar mais tarde.

×