2025-01-01から1年間の記事一覧
C++ で コンパイル時にWindows用/X68000用の切り替え可能で コンソール風入出力と グラフィックス機能をもつ Windows 用 GUI システムを作成しました。このシステムを XCG システムと呼ぶことにします。さらに必要ならば仮想的なファイル入出力機能を持つと…
X68000 グラフィックス調査用プログラムXCGシステム版 DrawXCG を公開しました。 GitHub - hikakankan/DrawXCG: X68000グラフィックステスト用(XCGシステム) 使い方 Windows では以下のように表示されます。 DrawXCG (Windows) 左上のウィンドウは入力ウィン…
GitHub - hikakankan/CircleXCG: 円の面積XCGシステム版 の説明をこちらにも書いておきます。 使い方 このプログラムは「円の面積」にコマンドを受け付ける機能を追加したものです。最初はコマンドを受け付けるモードになっています。Windows では以下のよう…
「X68000(34) - 非専門的シンギュラリティー研究所」で作成した X68000 のグラフィックス機能調査用のプログラムに マウス、キーボード入力調査のための機能 数値文字列を表示する機能 を追加しました。X68000ベスト・プログラミング入門作者:千葉 憲昭技術…
「円の面積XCGシステム版」を以下のように変更しました。 グラフィック画面に多角形の面積を表示するようにした。 GitHub - hikakankan/CircleXCG: 円の面積XCGシステム版X68000ベスト・プログラミング入門作者:千葉 憲昭技術評論社Amazonプログラマーのため…
「円の面積XCGシステム版」をGitHubで公開しました。 GitHub - hikakankan/CircleXCG: 円の面積XCGシステム版 X68000ベスト・プログラミング入門作者:千葉 憲昭技術評論社AmazonプログラマーのためのX68000環境ハンドブック作者:吉沢 正敏,市原 昌文工学社Am…
「円の面積XCGシステム版」は X68000 エミュレーターで正しく表示されるようになりました。「円の面積」(円の面積(GitHubにも登録しました)参照)に以下のコマンドを追加しました。 add 角度 角度(度)に位置に点を追加します div 分割数 点の間を指定した個数…
「円の面積」(X68000(9) - 非専門的シンギュラリティー研究所参照)を「XCGシステム」(中間報告(23) - 非専門的シンギュラリティー研究所参照)に書き換えたものを作成中です。Windows では動作するようになりましたが、X68000 エミュレーターではまだ正しく表…
「アセンブラ(26) - 非専門的シンギュラリティー研究所」の結果を反映させて 塗りつぶした楕円の描画 塗りつぶした角が丸い長方形の描画 塗りつぶした台形の描画 塗りつぶした三角形の描画 の機能を X68000 のグラフィックス機能調査用のプログラムに追加し…
以下の関数の平方根を表から取得するバージョンも動作が確認できました。 塗りつぶした楕円の描画 塗りつぶした角が丸い長方形の描画 以下の関数も動作が確認できました。 塗りつぶした台形の描画 塗りつぶした三角形の描画 塗りつぶした多角形の描画 につい…
塗りつぶした楕円の描画 塗りつぶした角が丸い長方形の描画 ができるようになりました。問題(と思われる)の関数呼び出しはインライン関数に書き換えたので、何が起こっていたか確認はできないのですが良しとします。これらの関数で平方根を表から取得するバ…
インラインアセンブラで書いた関数の動作が正しくない件の原因と思われるものが見つかったのでこれを修正してエミュレーターで動作させてみてもいいのですが、もう少しアセンブリ言語のインタープリターで動作させることを続けます。以下の関数で三角関数の…
以下の関数をコンパイルした結果のアセンブリ言語の動作を確認できました。movem 命令の仕様が不明だったため修正に時間がかかりましたが、なんとか動くようになりました(まだ仕様は不明)。 楕円の描画 楕円の弧の描画 楕円の扇型の描画 角が丸い長方形の描…
このブログでやっていることは昔なら「まじめにやれ」と言われるようなことかもしれませんが、一人でやっているため誰も何も言ってこないので大丈夫です。現在は X68000 エミュレーターで動作するプログラムを作るためのシステムを考えることを主にやってい…
直線を描画する関数をコンパイルした結果の動作を確認できました。「X68000(21) - 非専門的シンギュラリティー研究所」でやったものを書き換えています。 void DirectDrawLine(HDC hdc, int x1, int y1, int x2, int y2, COLORREF color) { int w = x2 - x1;…
グラフィックス用のメモリーへの書き込みで描画できるようにします。そのため SetPixel 関数を以下の関数で置き換えます。 const int g_gwidth = 512; const int g_gheight = 512; int16_t g_gmemory[g_gheight][g_gwidth]; inline COLORREF SetPixel(HDC hd…
描画が実行できるようになりました。 実行例(長方形の描画) void DirectDrawRectangle(HDC hdc, int x1, int y1, int w, int h, COLORREF color) { for (int x = x1; x < x1 + w; ++x) { SetPixel(hdc, x, y1, color); SetPixel(hdc, x, y1 + h, color); } f…
倍精度浮動小数点数の加減乗除をコンパイルした結果が実行できるようになりました。 実行例(倍精度浮動小数点数の加算) double dadd(double x, double y) { return x + y; } これをコンパイルすると以下のようなアセンブリ言語のコードが得られます。 _Z4dad…
乗除算が実行できるようになりました。 実行例(乗算) int mul(int x, int y) { return x * y; } これをコンパイルすると以下のようなアセンブリ言語のコードが得られます。 _Z3mulii: move.l 8(%sp),-(%sp) move.l 8(%sp),-(%sp) jsr __mulsi3 addq.l #8,%sp…
簡単なプログラムは実行できるようになりました。 実行例(加算) 以下のような C++ のプログラムを考えます。 int add(int x, int y) { return x + y; } これをコンパイルすると以下のようなアセンブリ言語のコードが得られます。 _Z3addii: move.l 4(%sp),%d…
前回作成した コンソール風ウィンドウ(入力・出力) ソースコード入力ウィンドウ 描画ウィンドウ をもつシステムを使って、このシステム上で 68000 アセンブリ言語のインタープリターを動作させます。インタープリターは以下のような仕様とします。 デバッガ…
「関数のグラフ」コマンド版(コンソール風入出力・描画機能あり) (4) グラフが表示できるようになりました。構文解析中に発生したエラーが無視されていたので、エラーを返すようにしました。これは C# 版、TypeScript 版でもそうなっているので変更する必要…
「関数のグラフ」コマンド版(コンソール風入出力・描画機能あり) (3) 前回の問題は1か所ポインターに変更したら直りました。グラフが何もない状態の表示ができるようになりました。使い方は以下のようになります。 使い方 関数計算機能 exit で終了します。 …
「関数のグラフ」コマンド版(コンソール風入出力・描画機能あり) (2) できるだけポインターを使わないようにしたところ、以下のようなエラーが発生しました。クラスの定義が循環しているところはポインターを使う必要があると思われます。それがどこかで失敗…
「関数のグラフ」コマンド版(コンソール風入出力・描画機能あり) 「80sBASIC(1) - 非専門的シンギュラリティー研究所」では「Windows のデスクトップアプリケーションにコンソール風の入出力と描画機能を追加したシステム」上で BASIC インタープリターを動…
「関数電卓コマンド版(7) - 非専門的シンギュラリティー研究所」で Windows のデスクトップアプリケーションにコンソール風の入出力とグラフィックス機能を追加して「関数のグラフ」と同様の機能にしようとしたのですが C# から C++ への変換が失敗したと思…
GCC の調査(2) double の sin double sin_double_cpp(double x) { return sin(x); } から作られるアセンブリ言語のコードは以下のようになります。 _Z14sin_double_cppd: link.w %fp,#0 move.l 12(%fp),-(%sp) move.l 8(%fp),-(%sp) jsr sin addq.l #8,%sp u…
GCC の調査(1) GCC が出力するアセンブリ言語のコードの中で呼ばれる関数について調べていきます。 long のかけ算 long multiply_long_cpp(long x, long y) { return x * y; } から作られるアセンブリ言語のコードは以下のようになります。 _Z17multiply_lon…
executeInstruction 関数の処理(7) シフト系命令 シフト系命令には以下のようなものがあります。 lsl, lsr, asl, asr 「lsl src, dst」、「asl src, dst」は dst を src ビット左シフトしたものを dst に設定します。「lsl dst」、「asl dst」は dst を 1 ビ…
executeInstruction 関数の処理(6) 乗除算命令 乗除算命令には以下のようなものがあります。 mulu, muls 「mulu src, dst」は dst と src の符号なしの積を dst に設定します。「muls src, dst」は dst と src の符号ありの積を dst に設定します。フラグは …