SlideShare uma empresa Scribd logo
1 de 11
Baixar para ler offline
ノスタルジックな
スプライト機能とmruby
@mgwsuzuki
2018/4/11 @mgwsuzuki 1
Arty Z7にスプライト表示機能を実装した
• Arty Z7
• Arm Cortex-A9を内蔵したFPGAを搭載
• HDMI出力ができる
• 秋月電子で購入可能(2万円台)
2018/4/11 @mgwsuzuki 2
FPGA
• デジタル回路をプログラミングできるLSI
• verilogやVHDLといったハードウェア記述言語(HDL)で設計
• スピードや回路規模を無視すればCPUやGPUを作ることも可能
• Arty Z7搭載のFPGAはXilinx社から無償の開発ツールをダウンロードして開発できる
2018/4/11 @mgwsuzuki 3
スプライト
• 80年代ゲーム機(ex:スーパーファミコン)で使われた画像表示技術
• ドット絵のキャラクタ
• ノスタルジックな技術
位置:x0, y0
キャラ: id0
位置:x2, y2
キャラ: id2
スプライトごとに位置とキャラクタ指
定したら後はハードウェアが自動的
に画像を作ってくれる
2018/4/11 @mgwsuzuki 4
実装した回路のスペック
本回路 スーパーファミコン X68000
解像度 1024x768 256x224(?) 256x256~1024x768(16色)
スプライト表示可能色数 32768 32768から16色x8パレット 65536から16色x16パレット
最大スプライト数 1024 128 128
最大横表示スプライト数 80(min) 32 32
スプライトサイズ 16x16 8x8,16x16,32x32,64x64 16x16
※スプライト機能に絞ったスペックを調べたつもりだけど、よくわからんです
2018/4/11 @mgwsuzuki 5
ラインバッファ方式による画像生成
• 何か書こうと思ったけどマニアックなので割愛
• 画面の横方向1ラインごとに表示画像をレンダリングするイメージ
• KByte単位のメモリ量で頑張ってリッチな画像表現を!!
• なにせ1980年代の技術なので…
• GPUのメモリはGB単位、クロック周波数もGHz単位の昨今、こんな技
術にこだわるのは酔狂
2018/4/11 @mgwsuzuki 6
実機動作
• 1024個のスプライトの同時表示
2018/4/11 @mgwsuzuki 7
1024個のスプライトが飛び回る
• Cによる実装
• 1スプライトあたり8byteのデータを書き換えればよい
• でも、Cじゃ面倒くさくない?
• インタプリタ的なものが欲しい
• スプライト機能はオブジェクト指向と相性いいのでは?(知らんけど)
• mrubyを組み込んでみよう!!
2018/4/11 @mgwsuzuki 8
mruby
• mruby-1.4
• ホストはwindows
• クロスコンパイル先はZynq 7000シリーズのOS無し
• arm-none-eabi
• ツールチェインはXilinx社のXSDKを拝借
• mruby本体だけではなく、compilerとインタラクティブUIであるmirbも
組み込んだ
2018/4/11 @mgwsuzuki 9
mrubyとハードウェアのインターフェイス
• SpriteElem, Sprite, Sprite::updateはmrbgemで記述
class SpriteElem
attr_accessor :y, :x, :c_id, :op
attr_reader :s_id
def initialize(sprite_id)
@s_id = sprite_id
@y = -16 #表示位置x
@x = 0 #表示位置y
@c_id = 0 #表示キャラ指定
@op = 0
end
end
class Sprite
attr_accessor :sobj
def initialize(size) #size: 使いたいスプライト数
@sobj = Array.new(size)
size.times {|n|
@sobj[n] = SpriteElem.new(n)
}
end
end
#使い方
$sp = Sprite.new(64) #同時に64個のスプライトを使う
$sp.sobj[0].x = 100 #スプライト0の座標指定
$sp.sobj[0].y = 120
$sp.update #ハードウェアへ書き込み
2018/4/11 @mgwsuzuki 10
スプライトに動きをつける
• 1秒に60回、画面を書き終えるたびにCPUへ割り込みが入る
• ユーザはcv_isr(sw)というメソッドを定義することで割りこみのたびにスプライトの
位置を更新する
• 引数swはボード上のスイッチの状態を示しており、これに応じてスプライトの動き
を変化させることもできる
#mrubyにあらかじめ定義する
def cv_isr_base(sw)
if respond_to?(:cv_isr) #cv_isrメソッドが定義されていたら
return cv_isr(sw) #コールする
else
return nil
end
end
// Cからmrubyのcv_isr_baseというメソッドをコールする
mrb_funcall(mrb, mrb_top_self(mrb), "cv_isr_base", 1,mrb_fixnum_value(sw_btn));
# スプライトの位置を更新する
def cv_isr(sw)
$sp.sobj[0].x += 1
$sp.sobj[0].y = 100
$sp.update
end
2018/4/11 @mgwsuzuki 11

Mais conteúdo relacionado

Mais procurados

Fuji sakuraでmbedを!
Fuji sakuraでmbedを!Fuji sakuraでmbedを!
Fuji sakuraでmbedを!
Tetsuya Noguchi
 

Mais procurados (9)

Acri webn04 lt_iwi_配布
Acri webn04 lt_iwi_配布Acri webn04 lt_iwi_配布
Acri webn04 lt_iwi_配布
 
5月中旬の仮想通貨Re-orgについて
5月中旬の仮想通貨Re-orgについて5月中旬の仮想通貨Re-orgについて
5月中旬の仮想通貨Re-orgについて
 
AI Carの要約
AI Carの要約AI Carの要約
AI Carの要約
 
Arduino、Raspberry Pi、PIC 入門以前(NSEG 2014-04-19)
Arduino、Raspberry Pi、PIC 入門以前(NSEG 2014-04-19)Arduino、Raspberry Pi、PIC 入門以前(NSEG 2014-04-19)
Arduino、Raspberry Pi、PIC 入門以前(NSEG 2014-04-19)
 
RHTN2018: エンジニアは何故、技術書を書くのか? 執筆のススメ
RHTN2018: エンジニアは何故、技術書を書くのか? 執筆のススメRHTN2018: エンジニアは何故、技術書を書くのか? 執筆のススメ
RHTN2018: エンジニアは何故、技術書を書くのか? 執筆のススメ
 
DAS_202109
DAS_202109DAS_202109
DAS_202109
 
FPGAで遊んでみた
FPGAで遊んでみたFPGAで遊んでみた
FPGAで遊んでみた
 
Fuji sakuraでmbedを!
Fuji sakuraでmbedを!Fuji sakuraでmbedを!
Fuji sakuraでmbedを!
 
Microsemi FPGAで RISC-V を動かしてみた話 (Lチカ)
Microsemi FPGAで RISC-V を動かしてみた話 (Lチカ)Microsemi FPGAで RISC-V を動かしてみた話 (Lチカ)
Microsemi FPGAで RISC-V を動かしてみた話 (Lチカ)
 

Semelhante a Hardwre Sprite controled by mruby

統合ソフトウェアプラットフォームVitisとFPGA無償利用環境「ACRiルーム」のご紹介
統合ソフトウェアプラットフォームVitisとFPGA無償利用環境「ACRiルーム」のご紹介統合ソフトウェアプラットフォームVitisとFPGA無償利用環境「ACRiルーム」のご紹介
統合ソフトウェアプラットフォームVitisとFPGA無償利用環境「ACRiルーム」のご紹介
Jun Ando
 
2015年度GPGPU実践基礎工学 第9回 GPUのアーキテクチャ
2015年度GPGPU実践基礎工学 第9回 GPUのアーキテクチャ2015年度GPGPU実践基礎工学 第9回 GPUのアーキテクチャ
2015年度GPGPU実践基礎工学 第9回 GPUのアーキテクチャ
智啓 出川
 
2015年度GPGPU実践基礎工学 第2回 GPGPUの歴史と応用例
2015年度GPGPU実践基礎工学 第2回 GPGPUの歴史と応用例2015年度GPGPU実践基礎工学 第2回 GPGPUの歴史と応用例
2015年度GPGPU実践基礎工学 第2回 GPGPUの歴史と応用例
智啓 出川
 

Semelhante a Hardwre Sprite controled by mruby (20)

FPGAスタートアップ資料
FPGAスタートアップ資料FPGAスタートアップ資料
FPGAスタートアップ資料
 
統合ソフトウェアプラットフォームVitisとFPGA無償利用環境「ACRiルーム」のご紹介
統合ソフトウェアプラットフォームVitisとFPGA無償利用環境「ACRiルーム」のご紹介統合ソフトウェアプラットフォームVitisとFPGA無償利用環境「ACRiルーム」のご紹介
統合ソフトウェアプラットフォームVitisとFPGA無償利用環境「ACRiルーム」のご紹介
 
NetBSD/Zynq
NetBSD/ZynqNetBSD/Zynq
NetBSD/Zynq
 
Microsemi FPGA はいいぞ,FPGAの紹介とおさそい
Microsemi FPGA はいいぞ,FPGAの紹介とおさそいMicrosemi FPGA はいいぞ,FPGAの紹介とおさそい
Microsemi FPGA はいいぞ,FPGAの紹介とおさそい
 
Using asimdhp (fp16) on Jetson Xavier CPU
Using asimdhp (fp16) on Jetson Xavier CPUUsing asimdhp (fp16) on Jetson Xavier CPU
Using asimdhp (fp16) on Jetson Xavier CPU
 
FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料
 
ACRi panel_discussion_xilinx_hayashida_rev1.0
ACRi panel_discussion_xilinx_hayashida_rev1.0ACRi panel_discussion_xilinx_hayashida_rev1.0
ACRi panel_discussion_xilinx_hayashida_rev1.0
 
2015年度GPGPU実践基礎工学 第9回 GPUのアーキテクチャ
2015年度GPGPU実践基礎工学 第9回 GPUのアーキテクチャ2015年度GPGPU実践基礎工学 第9回 GPUのアーキテクチャ
2015年度GPGPU実践基礎工学 第9回 GPUのアーキテクチャ
 
FPGA・リコンフィギャラブルシステム研究の最新動向
FPGA・リコンフィギャラブルシステム研究の最新動向FPGA・リコンフィギャラブルシステム研究の最新動向
FPGA・リコンフィギャラブルシステム研究の最新動向
 
なにわTech20161215
なにわTech20161215 なにわTech20161215
なにわTech20161215
 
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
 
RustによるGPUプログラミング環境
RustによるGPUプログラミング環境RustによるGPUプログラミング環境
RustによるGPUプログラミング環境
 
2015年度GPGPU実践基礎工学 第2回 GPGPUの歴史と応用例
2015年度GPGPU実践基礎工学 第2回 GPGPUの歴史と応用例2015年度GPGPU実践基礎工学 第2回 GPGPUの歴史と応用例
2015年度GPGPU実践基礎工学 第2回 GPGPUの歴史と応用例
 
FPGAでCortex-M1を味見する
FPGAでCortex-M1を味見するFPGAでCortex-M1を味見する
FPGAでCortex-M1を味見する
 
RISC-Vの基礎、オバービュー(RISC-V basis-overview)
RISC-Vの基礎、オバービュー(RISC-V basis-overview)RISC-Vの基礎、オバービュー(RISC-V basis-overview)
RISC-Vの基礎、オバービュー(RISC-V basis-overview)
 
Gpu vs fpga
Gpu vs fpgaGpu vs fpga
Gpu vs fpga
 
FPGA, AI, エッジコンピューティング
FPGA, AI, エッジコンピューティングFPGA, AI, エッジコンピューティング
FPGA, AI, エッジコンピューティング
 
FPGAを用いたEdge AIの現状
FPGAを用いたEdge AIの現状FPGAを用いたEdge AIの現状
FPGAを用いたEdge AIの現状
 
Pythonによる高位設計フレームワークPyCoRAMでFPGAシステムを開発してみよう
Pythonによる高位設計フレームワークPyCoRAMでFPGAシステムを開発してみようPythonによる高位設計フレームワークPyCoRAMでFPGAシステムを開発してみよう
Pythonによる高位設計フレームワークPyCoRAMでFPGAシステムを開発してみよう
 
FirefoxOS を AndroidStick で動かしてみた(updated)
FirefoxOS を AndroidStick で動かしてみた(updated)FirefoxOS を AndroidStick で動かしてみた(updated)
FirefoxOS を AndroidStick で動かしてみた(updated)
 

Mais de mgwsuzuki (7)

レーザーカッターを使おう
レーザーカッターを使おうレーザーカッターを使おう
レーザーカッターを使おう
 
3Dプリンタを使おう - 20131110
3Dプリンタを使おう - 201311103Dプリンタを使おう - 20131110
3Dプリンタを使おう - 20131110
 
最近一年間で作ったもの
最近一年間で作ったもの最近一年間で作ったもの
最近一年間で作ったもの
 
カッティングプロッタの使い方
カッティングプロッタの使い方カッティングプロッタの使い方
カッティングプロッタの使い方
 
3 dプリンタの使い方
3 dプリンタの使い方3 dプリンタの使い方
3 dプリンタの使い方
 
PIC RoR Heroku
PIC RoR HerokuPIC RoR Heroku
PIC RoR Heroku
 
IR remocon
IR remoconIR remocon
IR remocon
 

Último

Último (10)

知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 

Hardwre Sprite controled by mruby