「式の計算電卓コマンド版」、「かけ算・わり算計算機コマンド版」は X68000 エミュレーターで動かすことができました。「昔ながらの BASIC」もX68000 エミュレーターで動かすことはできましたが、間違っているところがあるのでまだ使えません。ファイルサイズが1MB以上になっているので小さくなるように検討した方が良いかもしれません。
「円の面積」の ChatGPT で作った X-BASIC 版はエミュレーターの X-BASIC で読み込ませると「ファイル構造が異常です」となって読み込ませることができませんでした。これについては調査中です。
「ぺけ‐BASIC」で読み込ませてみようと思いましたが「指定された外部関数のファイルが無い」となってしまいました。
「円の面積」の X-BASIC 版に関して、Windows 上で動作確認をするため ChatGPT で Visual Basic に書き換えてもらいました。「円の面積」は Visual Basic 版もあったのでこれと比較してみました。点を追加するとき順番になるように追加する処理が入っていなかったのですが、この関数を Visual Basic 版の「円の面積」から追加すると Visual Basic 版と同様に動きました。
Windows 上で動作確認したプログラムを X68000 エミュレーター用に変換したいのですが、まだ何も方法がありません。
Windows 上でこのプログラムを動かすことはできますか
と入力すると以下のような回答が返されました。
とても良い質問です!
結論から言うと、そのままではWindows上で直接実行することはできません。
X-BASICはX68000という独自のハードウェア上で動作するBASICインタプリタなので、そのままWindowsで実行することはできません。
でも、いくつか方法がありますので、順番に解説しますね。✅ どうすれば動かせる?
Visual Basic に書き換えてください
と入力すると以下のような回答が返されました。
了解です!
先ほどのX-BASICのロジックをVisual Basic(VB.NET)のWindowsフォームアプリケーションに書き換えますね。
以下は、クリックした位置を単位円に正規化して円周上に配置し、その点を結んで多角形を描画し、面積を計算して表示するVB.NETコード例です。📄 Visual Basic(VB.NET)コード例
Imports System.Drawing.Drawing2D Public Class Form1 Private Const RADIUS As Integer = 200 Private Const UNIT_RADIUS As Double = 1.0 Private centerX As Integer Private centerY As Integer Private points As New List(Of PointF)() Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Me.DoubleBuffered = True ' チラつき防止 centerX = Me.ClientSize.Width \ 2 centerY = Me.ClientSize.Height \ 2 End Sub Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint Dim g As Graphics = e.Graphics g.SmoothingMode = SmoothingMode.AntiAlias ' 背景クリア g.Clear(Color.White) ' 大きな円 g.DrawEllipse(Pens.Blue, centerX - RADIUS, centerY - RADIUS, RADIUS * 2, RADIUS * 2) ' 小さい点 For Each p In points Dim px As Single = centerX + CSng(RADIUS * p.X) Dim py As Single = centerY + CSng(RADIUS * p.Y) g.FillEllipse(Brushes.Red, px - 5, py - 5, 10, 10) Next ' 多角形 If points.Count >= 2 Then Dim polygon As PointF() = points.Select( Function(p) New PointF(centerX + CSng(RADIUS * p.X), centerY + CSng(RADIUS * p.Y)) ).ToArray() g.DrawPolygon(Pens.Green, polygon) End If ' 面積計算 If points.Count >= 3 Then Dim area As Double = CalculatePolygonArea(points) Dim str As String = $"面積(単位円換算): {area:F4}" g.DrawString(str, Me.Font, Brushes.Black, 10, Me.ClientSize.Height - 30) End If End Sub Private Sub Form1_MouseDown(sender As Object, e As MouseEventArgs) Handles Me.MouseDown If e.Button = MouseButtons.Left Then ' 中心からの相対座標 Dim dx As Single = e.X - centerX Dim dy As Single = e.Y - centerY Dim dist As Double = Math.Sqrt(dx * dx + dy * dy) If dist <> 0 Then ' 単位円上に正規化 Dim nx As Single = CSng(dx / dist) Dim ny As Single = CSng(dy / dist) points.Add(New PointF(nx, ny)) Me.Invalidate() End If ElseIf e.Button = MouseButtons.Right Then ' 右クリックでリセット points.Clear() Me.Invalidate() End If End Sub Private Function CalculatePolygonArea(pts As List(Of PointF)) As Double ' Shoelace formula Dim area As Double = 0 Dim n As Integer = pts.Count For i As Integer = 0 To n - 1 Dim j As Integer = (i + 1) Mod n area += (pts(i).X * pts(j).Y) - (pts(j).X * pts(i).Y) Next Return Math.Abs(area) / 2.0 End Function End Class🚀 使い方
1️⃣ Visual Studioで「Windowsフォームアプリケーション(VB.NET)」プロジェクトを新規作成します。
2️⃣ 上記コードを`Form1.vb`にペーストします。
3️⃣ 実行すると:
- 青い大きな円が描画されます。
- 左クリックで円周上の点を追加(円周上に補正されます)。
- 右クリックでリセット(点を消去)。
- 点を3個以上追加すると多角形と面積が表示されます。
Visual Basic から X-BASIC に変換することはできますか
と入力すると以下のような回答が返されました。
いい質問ですね!
結論から言うと、Visual Basic(VB.NET)からX-BASIC(X68000用)へ直接「自動的」に変換するツールは存在しません。
ただし、VB.NETのコードを人手でX-BASICの文法に書き換えることは可能です。
ここで、なぜそうなるのか、どこが難しいのか、そしてどうやって書き換えるのかを説明しますね!✋ そもそも、VB.NET と X-BASIC は全く別物!
VB.NET X-BASIC プラットフォーム Windows(.NET Framework) X68000(Human68k OS) 言語機能 イベントドリブン(Form1_MouseDownなど) 手続き型(メインループを自分で作る) グラフィック描画 GDI+(Graphics.DrawEllipse, FillEllipse) X-BASICの`CIRCLE`, `LINE`, `PSET` マウス入力 イベント(MouseDown) ポーリング(`MOUSE`関数で状態取得) 配列/データ型 ジェネリック、クラス、リスト 基本的に配列(DIM)と変数のみ 🔧 どうやって手動で変換するか?
例:VB.NET ➡ X-BASIC
以下のコード(VB.NET)
Private Sub Form1_MouseDown(sender As Object, e As MouseEventArgs) Dim dx As Single = e.X - centerX Dim dy As Single = e.Y - centerY Dim dist As Double = Math.Sqrt(dx * dx + dy * dy) If dist <> 0 Then Dim nx As Single = CSng(dx / dist) Dim ny As Single = CSng(dy / dist) points.Add(New PointF(nx, ny)) Me.Invalidate() End If End SubこれをX-BASICで書くとこんな感じ:
' 画面中央からの座標 DX = MX - CX DY = MY - CY DIST = SQR(DX*DX + DY*DY) IF DIST <> 0 THEN NX = DX / DIST NY = DY / DIST N = N + 1 X(N) = NX Y(N) = NY END IF✅ ポイント:
- VB.NETのイベントはX-BASICではポーリング(`MOUSE`)で代用
- List(Of PointF) はX-BASICの`DIM X(100), Y(100)`などの配列で代用
- Graphicsオブジェクトは直接`CIRCLE`, `LINE`, `PSET`で代用
- Form1_Paint → X-BASICではループの中で`CLS`して描き直す感じ
✍️ 結論
- 自動変換ツールはない(手動で書き換えるしかない)
- 人手で置き換えは可能(基本構造を理解して対応するX-BASIC文法に書き換え)
- X-BASICはシンプルなので、マウス検出や描画は「ループ + ポーリング」でまとめればOK
もし具体的に「このVB.NETコードをX-BASICに書き換えてほしい!」という部分があれば、ぜひ教えてください!
ピンポイントで書き換えてみますので、お気軽にどうぞ。 🚀




