C言語で文字列の数値表現を整数型に置き換える

画像はorg. $1e3cによってアセンブル先のアドレスを指定している様子だ

ここで数値を取り出す機能だけど、他の命令でもオペランドから即値やアドレスを参照する事があるので、関数にしておきたいところ

NESASM仕様の2進数、10進数、16進数を変換して整数を返す関数

不適切な文字列によって変換が完全でない場合は-1を返す

strtolは基数を指定して文字列を数値で返す便利な関数で、&endptrは変換できなかった文字のあるポインタを返す、完全に変換できればヌル文字だ

以上(*‘∀‘)

C言語で読み込んだソースをトークン単位で保存する

テキストファイルから読み込んだソースを、解析しやすいようにトークンごとに分けて文字列に保存する

画像では保存したトークンに余分な空白が混じっていないか確認するために角カッコで挟んで表示している

トークンを保存する配列は0x800個x16文字の要素数を確保しているが、やはり適当である(笑

因みに、画像にはtoken[0x800][16]の宣言が見当たらないが、それはグローバルに宣言しているため見えていないだけ

main関数内で宣言すると「スタック使い過ぎだボケ!」と怒られてしまうからだ

なぜグローバル変数で上手くいくのかは分かっていない(ぉ

なんか上手く動いてるからヨシ!(゚∀゚)

[追記]

配列の確保で警告が発生する件だが、「グローバルでOKなら、そもそも関数の中でstaticにすれば良くね?」と思ったら、その通り上手くいった

C言語でテキストファイルを読み込む

テキストファイルに保存したアセンブリのソースを読み込むテスト

ソースを退避させる文字列のサイズはとりあえず適当に0x1000で

まぁこれくらいあればいいかな、と

入りきらなかったらエラー発生するのかな…分からない(ぉ

実行結果、テキストファイルの内容を正しく読み込めているようだ

これを字句解析してマシン語コードをchar配列に展開していこう、という企みなのである

何とかなれ!(゚∀゚)

自作CPUエミュの命令表を更新

アセンブリの命令名を6502に合わせた

そして、今回のエミュに組み込むべき命令のセットを考え直した

使わなそうな命令もあるが、CPUとして備えたいと思った命令がある

もしかしたら「やっぱりアレも必要かな」と思った命令は今後追加する可能性もある

実行サイクル数まで考慮するつもりはないので、ジャンプや分岐は絶対アドレスに絞った

SPにアクセスする命令が必要かどうかは結構考えたけど、SPを初期化する都合があるかも知れないので、一応加えておいた

アセンブリの文法は使い慣れたNESASMに準拠しようと思う

C言語で自作CPUエミュ

とりあえずレジスタやメモリ回りの宣言・定義などを考えてみた

あらゆる処理を1byteで統一していきたいので全てunsigned char

符号無しは正義である

命令セットはいつも使っている自作のやつでいいかな

この表にある命令の一部を実装したい。全部はいらんわな

マップドI/Oでもいいけど、今回はIN、OUT命令を追加して外部とやりとりする方法でいこうと思っている

アセンブラと各命令コードの実装を同時に進めていけたらいいな

入力や出力の仕様は追々策定していこうと思う

以上( ゚Д゚)

 

 

テラリアは面白いね~

テラリアは以前にVITAで遊んでたことがあったけど、

この間STEAMで安くなってたから思い切ってPC版を買ってみたんだよね。

思ったよりもキーボードとマウスの操作は快適で遊びやすかった。

いろいろとアプデで新しい要素が追加されてたけど、

釣りは何かよく分からん(w