Submit Search
Upload
JSでファミコンエミュレータを作った時の話
•
Download as PPTX, PDF
•
14 likes
•
30,008 views
S
sairoutine
Follow
JavaScript Performance http://js-performance.connpass.com/event/35294/
Read less
Read more
Technology
Report
Share
Report
Share
1 of 31
Download now
Recommended
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Toru Makabe
【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things
UnityTechnologiesJapan002
DockerコンテナでGitを使う
DockerコンテナでGitを使う
Kazuhiro Suga
20分でわかるgVisor入門
20分でわかるgVisor入門
Shuji Yamada
Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55
Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55
Preferred Networks
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
mosa siru
ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門
VirtualTech Japan Inc.
Recommended
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Toru Makabe
【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things
UnityTechnologiesJapan002
DockerコンテナでGitを使う
DockerコンテナでGitを使う
Kazuhiro Suga
20分でわかるgVisor入門
20分でわかるgVisor入門
Shuji Yamada
Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55
Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55
Preferred Networks
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
mosa siru
ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門
VirtualTech Japan Inc.
例外設計における大罪
例外設計における大罪
Takuto Wada
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫
Yuta Imai
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021
CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021
whywaita
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
シリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのか
Atsushi Nakada
目grep入門 +解説
目grep入門 +解説
murachue
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
Akihiro Suda
async/await のしくみ
async/await のしくみ
信之 岩永
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Koichi Tanaka
エンジニアから飛んでくるマサカリを受け止める心得
エンジニアから飛んでくるマサカリを受け止める心得
Reimi Kuramochi Chiba
どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)
どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)
NTT DATA Technology & Innovation
CQRS+ESをAkka Persistenceを使って実装してみる。
CQRS+ESをAkka Persistenceを使って実装してみる。
Matsushita Satoshi
Pythonによる黒魔術入門
Pythonによる黒魔術入門
大樹 小倉
Kubernetes環境に対する性能試験(Kubernetes Novice Tokyo #2 発表資料)
Kubernetes環境に対する性能試験(Kubernetes Novice Tokyo #2 発表資料)
NTT DATA Technology & Innovation
テストとリファクタリングに関する深い方法論 #wewlc_jp
テストとリファクタリングに関する深い方法論 #wewlc_jp
kyon mm
Docker Tokyo
Docker Tokyo
cyberblack28 Ichikawa
Cloud Nativeとは?
Cloud Nativeとは?
Masaki Yamamoto
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
JS と Canvas で作るシューティングゲーム
JS と Canvas で作るシューティングゲーム
sairoutine
PlayCanvas:2D機能とライブラリ組み込みのいろは - PlayCanvas運営事務局 - GTMF 2018 OSAKA
PlayCanvas:2D機能とライブラリ組み込みのいろは - PlayCanvas運営事務局 - GTMF 2018 OSAKA
Game Tools & Middleware Forum
More Related Content
What's hot
例外設計における大罪
例外設計における大罪
Takuto Wada
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫
Yuta Imai
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021
CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021
whywaita
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
シリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのか
Atsushi Nakada
目grep入門 +解説
目grep入門 +解説
murachue
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
Akihiro Suda
async/await のしくみ
async/await のしくみ
信之 岩永
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Koichi Tanaka
エンジニアから飛んでくるマサカリを受け止める心得
エンジニアから飛んでくるマサカリを受け止める心得
Reimi Kuramochi Chiba
どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)
どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)
NTT DATA Technology & Innovation
CQRS+ESをAkka Persistenceを使って実装してみる。
CQRS+ESをAkka Persistenceを使って実装してみる。
Matsushita Satoshi
Pythonによる黒魔術入門
Pythonによる黒魔術入門
大樹 小倉
Kubernetes環境に対する性能試験(Kubernetes Novice Tokyo #2 発表資料)
Kubernetes環境に対する性能試験(Kubernetes Novice Tokyo #2 発表資料)
NTT DATA Technology & Innovation
テストとリファクタリングに関する深い方法論 #wewlc_jp
テストとリファクタリングに関する深い方法論 #wewlc_jp
kyon mm
Docker Tokyo
Docker Tokyo
cyberblack28 Ichikawa
Cloud Nativeとは?
Cloud Nativeとは?
Masaki Yamamoto
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
What's hot
(20)
例外設計における大罪
例外設計における大罪
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021
CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
シリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのか
目grep入門 +解説
目grep入門 +解説
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
async/await のしくみ
async/await のしくみ
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
エンジニアから飛んでくるマサカリを受け止める心得
エンジニアから飛んでくるマサカリを受け止める心得
どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)
どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)
CQRS+ESをAkka Persistenceを使って実装してみる。
CQRS+ESをAkka Persistenceを使って実装してみる。
Pythonによる黒魔術入門
Pythonによる黒魔術入門
Kubernetes環境に対する性能試験(Kubernetes Novice Tokyo #2 発表資料)
Kubernetes環境に対する性能試験(Kubernetes Novice Tokyo #2 発表資料)
テストとリファクタリングに関する深い方法論 #wewlc_jp
テストとリファクタリングに関する深い方法論 #wewlc_jp
Docker Tokyo
Docker Tokyo
Cloud Nativeとは?
Cloud Nativeとは?
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Similar to JSでファミコンエミュレータを作った時の話
JS と Canvas で作るシューティングゲーム
JS と Canvas で作るシューティングゲーム
sairoutine
PlayCanvas:2D機能とライブラリ組み込みのいろは - PlayCanvas運営事務局 - GTMF 2018 OSAKA
PlayCanvas:2D機能とライブラリ組み込みのいろは - PlayCanvas運営事務局 - GTMF 2018 OSAKA
Game Tools & Middleware Forum
PlayCanvas:2D機能とライブラリ組み込みのいろは - PlayCanvas運営事務局 - GTMF 2018 TOKYO
PlayCanvas:2D機能とライブラリ組み込みのいろは - PlayCanvas運営事務局 - GTMF 2018 TOKYO
Game Tools & Middleware Forum
Enchant.js入門
Enchant.js入門
Yuusuke Takeuchi
Firefox OS アプリ開発
Firefox OS アプリ開発
Yoshitomo Akimoto
Tizen web app について調べたよ
Tizen web app について調べたよ
Naruto TAKAHASHI
Voicepic@FukuiMASeminar
Voicepic@FukuiMASeminar
Manabu Shimobe
20130216
20130216
komarineko
Unityで PhotonCloudを使ってリアルタイム・マルチプレイヤーゲームを作っちゃおう【導入編】
Unityで PhotonCloudを使ってリアルタイム・マルチプレイヤーゲームを作っちゃおう【導入編】
GMO GlobalSign Holdings K.K.
2017冬の開発合宿vrオンラインゲーム
2017冬の開発合宿vrオンラインゲーム
Syo Igarashi
SnapDishの事例
SnapDishの事例
Fumikazu Kiyota
【Unite 2017 Tokyo】WebGL:ゲームプラットフォームとしてのWebと現在と未来
【Unite 2017 Tokyo】WebGL:ゲームプラットフォームとしてのWebと現在と未来
Unite2017Tokyo
【Unite 2017 Tokyo】WebGL:ゲームプラットフォームとしてのWebと現在と未来
【Unite 2017 Tokyo】WebGL:ゲームプラットフォームとしてのWebと現在と未来
Unity Technologies Japan K.K.
Infrastructure as code ~ ツールスタック / ヌーラボの事例 ~
Infrastructure as code ~ ツールスタック / ヌーラボの事例 ~
ikikko
ゲーム開発初心者の僕がUnity + WebSocketで何か作ってみた
ゲーム開発初心者の僕がUnity + WebSocketで何か作ってみた
Kohei Kadowaki
Secret of Firefox
Secret of Firefox
dynamis
Introduction to Favmemo for Immature Engineers
Introduction to Favmemo for Immature Engineers
Takeshi Arabiki
【HTML5 Conference 2018】あんずフォト:PlayCanvasでリッチアドコンテンツを開発して発信してみた(2018/11/25講演)
【HTML5 Conference 2018】あんずフォト:PlayCanvasでリッチアドコンテンツを開発して発信してみた(2018/11/25講演)
PlayCanvas運営事務局
密着!わたしのコンソールアプリ開発環境
密着!わたしのコンソールアプリ開発環境
Fumihito Yokoyama
Nutanixログほいほい作ってみた.pdf
Nutanixログほいほい作ってみた.pdf
satorukondou
Similar to JSでファミコンエミュレータを作った時の話
(20)
JS と Canvas で作るシューティングゲーム
JS と Canvas で作るシューティングゲーム
PlayCanvas:2D機能とライブラリ組み込みのいろは - PlayCanvas運営事務局 - GTMF 2018 OSAKA
PlayCanvas:2D機能とライブラリ組み込みのいろは - PlayCanvas運営事務局 - GTMF 2018 OSAKA
PlayCanvas:2D機能とライブラリ組み込みのいろは - PlayCanvas運営事務局 - GTMF 2018 TOKYO
PlayCanvas:2D機能とライブラリ組み込みのいろは - PlayCanvas運営事務局 - GTMF 2018 TOKYO
Enchant.js入門
Enchant.js入門
Firefox OS アプリ開発
Firefox OS アプリ開発
Tizen web app について調べたよ
Tizen web app について調べたよ
Voicepic@FukuiMASeminar
Voicepic@FukuiMASeminar
20130216
20130216
Unityで PhotonCloudを使ってリアルタイム・マルチプレイヤーゲームを作っちゃおう【導入編】
Unityで PhotonCloudを使ってリアルタイム・マルチプレイヤーゲームを作っちゃおう【導入編】
2017冬の開発合宿vrオンラインゲーム
2017冬の開発合宿vrオンラインゲーム
SnapDishの事例
SnapDishの事例
【Unite 2017 Tokyo】WebGL:ゲームプラットフォームとしてのWebと現在と未来
【Unite 2017 Tokyo】WebGL:ゲームプラットフォームとしてのWebと現在と未来
【Unite 2017 Tokyo】WebGL:ゲームプラットフォームとしてのWebと現在と未来
【Unite 2017 Tokyo】WebGL:ゲームプラットフォームとしてのWebと現在と未来
Infrastructure as code ~ ツールスタック / ヌーラボの事例 ~
Infrastructure as code ~ ツールスタック / ヌーラボの事例 ~
ゲーム開発初心者の僕がUnity + WebSocketで何か作ってみた
ゲーム開発初心者の僕がUnity + WebSocketで何か作ってみた
Secret of Firefox
Secret of Firefox
Introduction to Favmemo for Immature Engineers
Introduction to Favmemo for Immature Engineers
【HTML5 Conference 2018】あんずフォト:PlayCanvasでリッチアドコンテンツを開発して発信してみた(2018/11/25講演)
【HTML5 Conference 2018】あんずフォト:PlayCanvasでリッチアドコンテンツを開発して発信してみた(2018/11/25講演)
密着!わたしのコンソールアプリ開発環境
密着!わたしのコンソールアプリ開発環境
Nutanixログほいほい作ってみた.pdf
Nutanixログほいほい作ってみた.pdf
More from sairoutine
How to manage parameters for gacha games
How to manage parameters for gacha games
sairoutine
DeNAの最新のマスタデータ管理システム Oyakata の全容
DeNAの最新のマスタデータ管理システム Oyakata の全容
sairoutine
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
sairoutine
Dark side of the reflect
Dark side of the reflect
sairoutine
マジック・ザ・ギャザリングの背景世界とストーリー
マジック・ザ・ギャザリングの背景世界とストーリー
sairoutine
em-dosbox
em-dosbox
sairoutine
flow による型のある世界入門
flow による型のある世界入門
sairoutine
レガシーな Perl システムに DDD (ドメイン駆動設計)を取り入れる
レガシーな Perl システムに DDD (ドメイン駆動設計)を取り入れる
sairoutine
Mithril - 軽量/高速なMVCフレームワーク
Mithril - 軽量/高速なMVCフレームワーク
sairoutine
Touhou Project on JavaScript
Touhou Project on JavaScript
sairoutine
ゲームエンジニアのためのデータベース設計
ゲームエンジニアのためのデータベース設計
sairoutine
Slack + Hubot でお前の一番好きな二次元嫁キャラと一緒に仕事をする
Slack + Hubot でお前の一番好きな二次元嫁キャラと一緒に仕事をする
sairoutine
More from sairoutine
(12)
How to manage parameters for gacha games
How to manage parameters for gacha games
DeNAの最新のマスタデータ管理システム Oyakata の全容
DeNAの最新のマスタデータ管理システム Oyakata の全容
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
Dark side of the reflect
Dark side of the reflect
マジック・ザ・ギャザリングの背景世界とストーリー
マジック・ザ・ギャザリングの背景世界とストーリー
em-dosbox
em-dosbox
flow による型のある世界入門
flow による型のある世界入門
レガシーな Perl システムに DDD (ドメイン駆動設計)を取り入れる
レガシーな Perl システムに DDD (ドメイン駆動設計)を取り入れる
Mithril - 軽量/高速なMVCフレームワーク
Mithril - 軽量/高速なMVCフレームワーク
Touhou Project on JavaScript
Touhou Project on JavaScript
ゲームエンジニアのためのデータベース設計
ゲームエンジニアのためのデータベース設計
Slack + Hubot でお前の一番好きな二次元嫁キャラと一緒に仕事をする
Slack + Hubot でお前の一番好きな二次元嫁キャラと一緒に仕事をする
Recently uploaded
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
Toru Tamaki
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
CRI Japan, Inc.
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NTT DATA Technology & Innovation
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
CRI Japan, Inc.
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
atsushi061452
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
Toru Tamaki
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
Hiroshi Tomioka
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Hiroshi Tomioka
Recently uploaded
(11)
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
JSでファミコンエミュレータを作った時の話
1.
JSでファミコンエミュレータを 作った時の話
2.
自己紹介 • HN: さい •
Twitter: @sairoutine • サーバーサイドエンジニア • フロントエンドフレームワーク Mithril の普及 に努めてます
3.
ファミコン
4.
のエミュレータを JavaScript で作る ※エミュレータ・・・動作を再現したソフトウェア
5.
FaithJS
6.
DEMO
7.
FaithJS • ブラウザで遊べる NES
エミュレータ • Web Audio と Canvas を使用 • ROMデータを読み込んでCPUを再現してる • 割りとちゃんと60FPS出る • http://sairoutine.github.io/faithjs/public/
8.
動機
9.
僕もOSとは何かを知りたい!
10.
ファミコンアーキテクチャについて
11.
概要 http://web.sfc.wide.ad.jp/~gucchan/docs/nesdev.pdf より引用
12.
http://web.sfc.wide.ad.jp/~gucchan/docs/nesdev.pdf より引用
13.
ROMの用意 • ネットに落ちてるのはもちろん違法 • 自分で吸い出す? •
有志が自作プログラムを公開してるので使わせ てもらう • FaithJS は門真なむ様のゲームを使用させても らって動作確認 http://www.geocities.jp/littlimi/fc.htm • nestest というテスト用ROMもあります
14.
主な情報源 • NesDev http://wiki.nesdev.com/w/index.php/Nesdev_Wiki • NES
on FPGA http://pgate1.at-ninja.jp/NES_on_FPGA/index.html • ギコ猫でもわかるファミコンプログラミング http://gikofami.fc2web.com/
15.
リファレンスだけでは実装イメージが 全然湧かない!!!
16.
既存のエミュレータコードを読む Web NES https://github.com/peteward44/WebNES JavaScript FC
エミュレータ http://twoseater.hp2.jp/nes/index.html bjne https://github.com/tanakh/bjne Cycloa https://github.com/ledyba/Cycloa
17.
未解析部分も多々あるので 実装が正!
18.
事前知識 • CPU • OS •
メモリ • アセンブラ • バイナリ • 英語
19.
レジスタ
20.
• 8bit しかない •
自由に使えるレジスタは A X Y の3つ
21.
描画の仕組み http://web.sfc.wide.ad.jp/~gucchan/docs/nesdev.pdf より引用
22.
6502 アセンブラの命令
23.
ここからやっと JS の話!
24.
すごい大雑把な処理の流れ var opcode =
this.Get(this.PC++); this.CPUClock += this.CycleTable[opcode]; this.PpuRun(); this.ApuRun(); this.ExecuteOpCode(opcode);
25.
オペコードの実装 NES.prototype.ExecuteOpCode = function
(opcode) { switch(opcode){ case 0xA1://LDA XIND this.LDA(this.GetAddressIndirectX()); break; case 0xA5://LDA ZP this.LDA(this.GetAddressZeroPage()); break; 以降、Switch文が命令の数だけ延々続く
26.
処理の遅い演算は事前に全パターン 演算しておいてキャッシュする this.ZNCacheTable = new
Array(256); this.ZNCacheTable[0] = 0x02; // 0b0010 var i; for(i=1; i<256; i++) { this.ZNCacheTable[i] = i & 0x80; }
27.
これで 60FPS!
28.
まとめ NESを実装するのはいいぞ!
29.
NES を実装すると良いこと • CPU
の知識が得られる(6502 だけでなく、 8086 や i386, x86_64 にも興味関心が出てき た • アセンブラに興味関心が出てくる!(例えばあ る処理が重い軽いの話に、アセンブラレベル で処理が追えるようになる) • 英語が読めるようになる!(有志のリファレン スはほぼ英語なので)
30.
みんなもやってみよう!
31.
ありがとうございました
Download now