ChatGPT
ピクセルごとの描画を行う関数を作成しました。これをインラインアセンブラに書きたいのですが、どうやってやるか検討中です。スーパーバイザーモードへの切り替えを別の関数にするやり方は、うまく動作しませんでした。スーパーバイザーモードから戻るのが…
コンパイルした結果から取り込むのは難しいということがわかったので、とりあえず以下の関数はハンドコンパイルで作成しました。 point に対応する関数 int pointx(int x1, int y1) { uint16_t color = 0; __asm__ volatile ( "move.l %1, %%d1\n\t" "move.l…
『X68000マシン語プログラミング グラフィックス編』のサンプルを参考に pset の代わりに使う以下の psetx を作成しました。この psetx を使うように変更した FillRectangle を実行すると速度は遅いですが描画できました。 void psetx(int x1, int y1, int c…
Windows 版の SetPixel を使った四角形を描画する関数 DirectDrawRectangle と塗りつぶした四角形を描画する関数 DirectFillRectangle は以下のようになります。これらの関数の形式はできるだけ .NET Framework の関数に合わせるようにします。これは C# か…
Windows 版の SetPixel を使った直線を描画する関数 DirectDrawLine は以下のようになります。DirectDrawLineTo は連続した直線を描くときに使います。X68000 で直接メモリーに書き込む形で描画するには、スーパーバイザモードに切り替えなければいけません…
Windows と X68000 で切り替えることができるグラフィックス機能のサンプルを作成中です。X68000 の IOCS の呼び出しでデータの領域のアドレスを渡すものがありますが、C++ のインラインアセンブラで変数のアドレスを渡そうとすると(エミュレーターで動作さ…
キーボード入力のサンプルで Windows X68000 で切り替えることができるものを作成しました。 #include <string> #include <sstream> #include <iostream> #define USE_PC // 定義を切り替えることでPC版とX68000版を切り替え可能 #ifdef USE_PC #include <conio.h> // _kbhit, _getch #else #incl</conio.h></iostream></sstream></string>…
マウスのサンプルを Windows の GUI X68000 で切り替えるようにしたものを作成しました。X68000 については前回と同様になっています。GitHub - hikakankan/MouseGX に公開することにしました。 #include <string> #include <sstream> #define USE_PC // 定義を切り替えること</sstream></string>…
修正した「IOCSコール」のマウスのサンプルは以下のようになります。 #include <stdio.h> #include <stdint.h> // IOCSコールをアセンブラで呼び出す void msinit() { __asm__ volatile ( "moveq #0x70, %%d0\n\t" // _MS_INIT "trap #15\n\t" : : // 入力なし : "d0" // 使用す</stdint.h></stdio.h>…
「IOCSコール」のグラフィックス機能を調べるために Windows ではウィンドウに描画する X68000 ではグラフィックス機能で描画する プログラムを作ろうと考えています。そのため、まず Windows のコンソールからウィンドウに描画するプログラムを ChatGPT で…
「かけ算・わり算計算機コマンド版」を拡張して Windows ではウィンドウにシフトによって乗算・除算を行う様子を表示する X68000 ではグラフィックスでシフトによって乗算・除算を行う様子を表示する プログラムを作っていきます。そのため ChatGPT で Windo…
「IOCSコール」への対応についてさらに ChatGPT でやり方を確認してみましたが、とくに問題はないようでした。いろいろ修正していたらとくに変更したとは思えないのですが動くようになっていました。X68000 エミュレーターでは F12 キーでマウスモードを切り…
「IOCSコール」への対応はまだできていません。ChatGPT でやり方を確認中です。 __asm__ volatile の使い方を教えてください と入力すると以下のような回答が返されました。 もちろんです! GCC (特に `m68k-elf-gcc` などのクロスコンパイラ) で インライン…
以下のように ChatGPT で入力すると、クロスコンパイラでコンパイルできるコードが返ってきました。しかしエミュレーターで実行するとエラーになります。前回はコンパイルがエラーになっていたので、少し改善されました。「Human68k BIOS の呼び出し」が何な…
X68000 のマウス処理のやり方は Windows とは違うということがわかってきたので、Windows 上で動作確認をするためには同様の処理を Windows 上のプログラミング言語で書けるようにした方が良いようです。X68000 のマウス処理のサンプルを ChatGPT で C と X-…
Windows 上で動作確認をするため ChatGPT で QB64 に書き換えてもらいましたが、これは思ったように動きませんでした。他の方法も考えていきたいと思います。 Windows 上で動作するイベントドリブンではない BASIC 系のプログラミング言語はありますか と入…
「式の計算電卓コマンド版」、「かけ算・わり算計算機コマンド版」は X68000 エミュレーターで動かすことができました。「昔ながらの BASIC」もX68000 エミュレーターで動かすことはできましたが、間違っているところがあるのでまだ使えません。ファイルサイ…
「円の面積」と同様のものを ChatGPT に X-BASIC で作ってもらいました。 X68000 の X-BASIC の機能について教えてください と入力すると以下のような回答が返されました。 もちろんです!X68000 の X-BASIC は、シャープのX68000シリーズ(1987年発売の日本…
「式の計算電卓コマンド版」、「かけ算・わり算計算機コマンド版」、「昔ながらの BASIC」は、X68000 をターゲットとするクロスコンパイラでコンパイルすることができました。しかしこれを公開する場所がないので、GitHub で公開しようかと考えています。Vis…
「「かけ算・わり算計算機」の説明: 数学とソフトウェアのメモ2」・「かけ算とわり算」のコマンド版を ChatGPT を使って作っていきます。 以下の仕様の、シフトによって乗算・除算を行う様子を表示するプログラムを C++ で書いてください: 数値は 進数( は…
前回からの手順がわからなかったので ChatGPT で調べました。 X68000 をターゲットとしたクロスコンパイラで作ったファイルを、X68000 のエミュレータで実行する手順を教えてください と入力すると以下のような結果が返されました。 1 クロスコンパイル環境…
新しい Windows11 のノート PC を導入したので、X68000 向けのクロスコンパイラの導入を再開しました。まず「xdev68k(GitHub - yosshin4004/xdev68k: Cross development environment for the SHARP X68K.)」に従って「MSYS2」をインストールしました。その後…
16ビット整数の乗算・除算 Z80 では乗算・除算の命令がないため、処理を書く必要があります。この処理を C++ で説明します。16ビット整数の乗算・除算を C++ で書くと以下のようになります。レジスターを節約するため引数と結果をまとめて 16 ビットで表しや…
8086 の例を参考に 68000 のフィボナッチ数列の例を変換した結果にコメントを追加します。「JSR OUTPUT」で数値を出力できるものとします。『【電子復刻版】bit 1984年07月号(通巻185号)』に「68000の命令セット」という記事があるのでこれも参考になるかも…
Z80 の例を参考に 8086 の例について考えます。『【電子復刻版】bit 1980年08月号(通巻138号)』の「16ビットマイクロプロセッサ8086」という記事に「8080 から 8086 へのプログラムの変換」という項目があったので Z80 から 8086 への変換にも使えそうです。…
Z80 のフィボナッチ数列の例を変換した結果から PUSH HL POP HL は不要なので取り除くと以下のようになります。「CALL OUTPUT」で数値を出力できるものとします。 ; フィボナッチ数列 LD HL, 10 LD (var_N), HL ; N = 10 LD HL, 1 LD (var_I), HL ; I = 1 LD…
今回は仮想命令のコードを Z80 のアセンブリ言語に変換する処理を追加しました。これも ChatGPT で作ってもらったものを改造しました。「CALL OUTPUT」で数値を出力できるものとします。Z80 は以前使ったことがあったので少しわかります。MZ-80K・MZ-80C の…
『16ビットアセンブリ言語』という 8086 の本があったので、今度は仮想命令のコードを 8086 のアセンブリ言語に変換する処理を追加しました。これも ChatGPT で作ってもらったものを改造しました。「CALL OUTPUT」で数値を出力できるものとします。本がある…
仮想命令のコードを 68000 のアセンブリ言語に変換する処理を追加しました。ChatGPT でやってもらったところ動かなかったのでそれを改造して作りました。 class VirtualTo68000 { unordered_map<string, string> variables; public: void translate(map<int, string> program) { int label</int,></string,>…
「C++ の調査(10) - 非専門的シンギュラリティー研究所」のコンパイルの処理で行番号を出力するようにします。 void compileExpression(const string& expr, int& line_number) { vector<string> postfix = toPostfix(expr); bool first = true; for (const string& </string>…