Ruby

sdl2rでゲームライブラリを作る(8)

ま、とりあえず最低限の入力はできてるので次、RenderTargetクラスを作ろう。SDL2に興味を持った理由は大きいのがGPUを使った高速描画だったのだが、RenderTargetテクスチャが扱えることも大きな要因であった。

sdl2rでゲームライブラリを作る(7)

昨日の記事で「オススメできない」と書いたばっかりだが、せっかくボタン用定数にオブジェクトが入っているのだから、これを利用して何か面白いことができないかを考えてみた。

sdl2rでゲームライブラリを作る(6)

入力がマウスの座標しかないので、もう少し入力できるようにしておこう。とりあえずマウスのボタンとキーボードのよく使うやつだけって感じで。 DXRubyではマウスやパッド、キーの入力は定数を定義してあって、それを使う。内部的にはそれぞれのボタンの状態…

sdl2rでゲームライブラリを作る(5)

いつまでもトウフでは寂しいので画像ファイルを読めるようにしよう。SDL2で画像ファイルを読み込むのは標準でできるが、標準だとBitmapしか扱えないのでSDL_Imageを使う。SDL_Imageはsdl2rでバインドしているので普通に使える。SDL_Imageの各関数はSDL::IMG…

sdl2rでゲームライブラリを作る(4)

ここらで方針を決めておこう。どういったものを作るつもりでいるのか。それが定まっていないと二転三転してしまうから。 まず、DXRuby完全互換は目指さない。もっといいアイデアがあればそのように作るし、それがよさげであればDXRubyのほうに取り込まれちゃ…

sdl2rでゲームライブラリを作る(3)

トウフが表示できるだけではさすがにしょんぼりなので、今回はImageクラスと、Imageを描画するWindow.drawメソッドを作ってみよう。 とりあえずコードを出そう。 module DXRuby C_WHITE = [255, 255, 255] class Image attr_reader :_surface, :_texture, :w…

sdl2rでゲームライブラリを作る(2)

前回は基本部分をとりあえず作ってみたところまでだった。今回はもうちょい進めたいところだが、その前に少しだけ周辺の話。 まず、Rubyのいいところに「既存のクラスを好きなように拡張できる」というのがある。モンキーパッチであり、オープンクラスである…

sdl2rでゲームライブラリを作る

Macを買ったらDXRubyが動かないので、いや、Wineで動くらしいんだけど、それをいうと話が終わってしまうので、とりあえず動かないことにしておいて(すみません)、RubyからSDL2を使うバインダsdl2rで遊んでみようという企画。 sdl2rはSDL2を使ってみたかった…

ハードウェアシミュレータその16

今回は除算器。割り算である。 割り算はものすごく単純に考えると、引き算を繰り返す処理になる。最後、引きすぎた場合に1回分戻して余りを求めることになるが、この手法を引き戻し法と言う。 ハードウェアで割り算をする場合、引き算を繰り返すのは非常に効…

ハードウェアシミュレータその15

今回のネタは乗算。掛け算である。 最近の多くのCPUには乗算命令が装備されているが、乗算回路は規模が大きくなりがちなので、昔はそんなもの無いか、多くのクロックを消費して実行する形だった。さすがに足し算を延々繰り返すような実装はしないだろうが、…

ハードウェアシミュレータその14

そろそろ佳境である(うそ)。 最近、16bit固定長命令セットなどをあれこれ考えていたのだが、CPUの命令セットを作るのは難しいんだなーとしみじみ思った次第。ビットパターンには限りがあり、命令によって必要ビット数は異なり、便利な命令を1つ入れると他の…

ハードウェアシミュレータその13

ここまででそれとなく動作するCPUぽい何かはできたのだが、機能を追加していくには8bit固定長の命令では幅が足りない。幅を増やして更なる独自命令セットを作るぐらいなら既存の何かにチャレンジすればいいのではないか、など考えてみて、そもそも既存の何か…

ハードウェアシミュレータその12

コードがややこしくなってきたので整理した。 修正点 まず、いくつかのクラスをシミュレータ本体に移動。 それから、バスのビットを見ながらごちゃごちゃ条件をチェックしている部分を分離して、出力ピンを変数に格納。 ## 命令デコーダ # mov命令時にH insn…

ハードウェアシミュレータその11

いままでレジスタへの操作は値の転送と加算のみだったので、たいしたことができなかった。レジスタ間の転送と加算ができるようになれば世界は広がるだろう。 レジスタ4bitだけど。 レジスタ4個しかないけど。今回は以下の2つの命令を追加する。 mov reg, reg…

ハードウェアシミュレータその10

ついにシリーズも2桁突入である。そのわりには歩みは遅々としてなかなか進まないわけなのだが、素人がひとつずつやっているのでしょうがない。 なんでHDLとか使って既存のシミュレータソフトで動かしたりしないのか、そのほうがFPGAで実行したりできるし圧倒…

ハードウェアシミュレータその9

転送と加算ができたので、次は簡単な無条件直接ジャンプ命令を作ってみよう。 現状、ROMに入力するアドレスは4bitバイナリカウンタで生成していて、これはDフリップフロップを繋げただけのものであり、こいつに値を入力する機能が無い。これを書き換えること…

ハードウェアシミュレータその8

CPUの部品的なものができあがってきたので、ようやく命令を追加する。 とりあえず今は命令に埋め込まれた値をレジスタに書き込むMOV命令しか実装できていないので、これに近い「命令に埋め込まれた値をレジスタに加算するADD命令」を作ってみよう。

ハードウェアシミュレータその7

レジスタファイルを作ろうとして、そういえば仕様的におかしいところがあるのを放置していたなあ、と思い出した。それがあるとレジスタファイルを作るのにも困るので、まずそれを直す。

ハードウェアシミュレータその6

前回、ROMを8bit化するのに単純な手を使ったが、色んなものの幅を変えるたびにコードを書いていくのは単純にめんどくさい。 例えば複数の素子が並んでいる状態はRubyの配列に入れておけばよく、配列に入れるのであればそれは繰り返しで処理できるということ…

ハードウェアシミュレータその5

ハードウェアシミュレータの最終目標は、これを使って動作するCPUを作ることである。 前にアセンブラを作ったことはあるからそれで独自命令セットでも何かしらのコードを書くことはできそうだが、俺には高級言語のコンパイラを作る技術は無いので、いずれそ…

ハードウェアシミュレータその4

DeadBeefROMについて。 とりあえず何か作ってみるかと言うことで16進数8桁でdeadbeefと言うデータを書き込んだROMを作って、アドレスを渡すとデータが出てくる、という回路を作ってみた。のでその話。

ハードウェアシミュレータその3

いや、まあ、特に何か記事を書くほどのことがあったわけでもないが、とりあえず進捗はあったので書いて置くことにした。 現状のコードはこちら。 https://gist.github.com/mirichi/cbf87b3626389f4e3c66 以下、変更点など。 処理順変更 いままでは入力に更新…

ハードウェアシミュレータその2

回路図と基板だけ渡されてコード書けって言われる仕事を2回ほどやったことがあるので回路図を読むことはある程度できるが、まともに動作する回路図を書いたことは難しい部分を抽象化したデジタル回路ですら経験が無い。 ということで、適当にハードウェアシ…

ハードウェアシミュレータ

久しぶりの更新。 最近なんとなくデジタル回路などを勉強してて、しかし目的と手段が入れ替わっているので(いつものこと)、勉強した結果として何をするかという目標は無い。 そのうちDE0とかのFPGA学習ボードを買ってなんか作ってみるかもしれないし、何もし…

OpalのNativeモジュール

なんかOpalのドキュメントにも見当たらないのでコードを見ながら機能の勉強。勉強中なのでウソが書いてあるかもしれない。 とりあえずクラスとモジュールの定義部分だけ引っこ抜いてみる。 module Native module Helpers module Kernel class Native::Object …

OpalによるJavaScriptとRubyの連携

OpalはRubyコードの中にJavaScriptを埋め込むことができ、微妙に融合・連携させることができる。ただ、JavaScriptを書かずにOpalをわざわざ使う人がいるとしたら、それはおそらくJavaScriptを書きたくないというのが理由であって、Opalで書けるからと言ってJ…

webMAGURO

Opalがなかなか面白いのでDXRuby互換インターフェイスを少し進めて、Fontクラス追加とちょこっとメソッド追加を行った。ついでにタッチインターフェイスも微妙に対応。 いまんところ試作レベルにも達していないので名前をつけるほどでもないのだが、とりあえ…

Opal:Ruby to Javascript Compiler

RubyのコードをJavaScriptに変換するOpalというソフトウェアがある。Opal自身はRubyで書かれていて、gemでインストールできる。これを使ってRubyコードをJavaScriptに変換してWebサイトにアップロードすると、手元でRubyで書いたコードがブラウザ上で動作し…

x86アセンブラの続き

動的にバイナリを生成して実行できるのでJITアセンブラなわけだが、こいつに簡単な命令をいくつか追加して、ModR/MバイトとSIBバイトも出力できるようにした。これでメモリアクセスやインデックス指定ができるようになったし、ebpやespなども使えるようにな…

x86アセンブラDSLを作ってみるテスト

ずーっと前にStringでバイナリを作ってDLで呼び出すコードを書いたことあったけども、x86アセンブラの文法はわりとそのままRubyで解釈できるんじゃね?って思ってDSLを作ってみるテスト。Rubyも新しくなったからfiddleを使う。 require 'fiddle' module X86A…