X68000 Z 実機で、MicroPythonを使う方法を解説します。
ほかの解説動画はこちら。
- X68000 Z 資料
- X68000 Z ツール入手先
- X68000Z MicroPython用SDカードの作り方
- ヒストリー、カーソルキー設定
- エディタEDの使い方
- MicroPython サンプルプログラム(マウス左ボタンで線をひく)
- MicroPython で使える x68k 関数
- MicroPython 参考資料
- MicroPython-x68k で Python を勉強してみた
- X68000との出会い
- 解説動画の作り方
X68000 Z 資料
参考にした記事はこちらです。
- はじめての X68000 Z (note)
- X68000 の開発環境(Qiita)
- X68000 zで音楽を流す(MachiaWorks)
- Zマニュアル(サポート>マニュアル)
- OhX、OhMZなど
- X68K:IOCS
- iocsコール
X68000 Z ツール入手先
- DiskExplorer(XDFファイル作成)
- ブランクXDFファイル (出典Twitter)
- X68000 LIBRARY 各種リソース
- MicroPython ダウンロード(yunkya2)
- 使えるSDカード(SDHC 最大32GB FAT32)
X68000Z MicroPython用SDカードの作り方
- DiskExplorer ダウンロード
- Lhaplus ダウンロード
- ブランクXDFダウンロード
- HumanSys ダウンロード
- SDカードの直下に「automount.xdf」という名前でいれておく
- MicroPython.XをBINフォルダに入れる
空き容量が少ない場合、「SYS」の中の「PRNDRV2.SYS / PRNDRV3.SYS / FLOAT3.X / FLOAT4.X」も削除してかまいません(出典)
ヒストリー、カーソルキー設定
コマンド入力にものすごく便利です。
key.his を HISフォルダにいれておくと次に起動したときも使えます。
- Human68K コマンドで、KEY を実行
- U (更新)
- 入力は、[KEY.SYS]、(2回目以降は前回作成した key.his )
- 出力は、key.his
- 処理を開始。次の4つのキーを変更「F」「2」「5」「Ctrl+W同時押し」「Enter」のように押すと設定できます。
F25 ^W
F26 ^S
F27 ^D
F28 ^E - Enter 2回で終了。KEY.HIS ができます。
- KEY.HIS を、\HIS フォルダにコピー。移動でもよいがオリジナルをのこしておくと安心。
- 作成した KEY.HIS をSDカードにいれておき、新しいフロッピーのHISフォルダにコピーできるようにしておくと便利です。
エディタEDの使い方
X68K標準エディタです。PDFマニュアル(p.296)
EDの機能 | キー操作 |
終了 | ESC+Q |
上書き保存 | ESC+H |
全部保存して終了 | ESC+E |
ファイルを開く | ESC+F |
ファイルを閉じる | ESC+K |
ファイル切り替え | ESC+AまたはD |
指定行に移動 | ESC+数字 |
MicroPython サンプルプログラム(マウス左ボタンで線をひく)
- ed test.py と入力し、以下のプログラムをいれましょう
- 入力したあと、ESCキー、E で保存終了します
- 注意、保存終了してもメモリにしか保存されません。SDカードに保存するには、SDカード取り出しボタン(下の緑ボタン)を2回おしてください。電源OFFでも保存されます。
- メニュー、色指定つきお絵描きアプリのサンプルコード
- キーボードをピアノにするサンプルコード
import x68k x68k.crtmod(16, 1) g = x68k.GVRam(0) x=0 y=0
print('Draw line with Mouse. Exit=Move to bottom') while y<500: pos = x68k.iocs(x68k.i.MS_CURGT) #マウス座標取得 xx = (pos & 0xffff0000) >> 16 yy = (pos & 0xffff) btn = x68k.iocs(x68k.i.MS_GETDT) #マウスボタン取得 left = btn & 0xff00 right = btn & 0xff if left !=0: #左ボタンが押されていたら g.line(x,y,xx,yy,xx % 16) #線をひく x = xx y = yy
import x68k | x68k関数を使えるようにする |
x68k.crtmod(16, 1) | 768 x 512 x 16色(31kHz) mode |
g = x68k.GVRam(0) | グラフィック画面 g |
while y<500: |
yが500以下ならループする、下の同じインデントの行がループ範囲 |
x68k.iocs(x68k.i.MS_CURGT) | マウス座標 |
x68k.iocs(x68k.i.MS_GETDT) | マウスボタン |
g.line(x,y,xx,yy,c) | 画面gに色cで線をひく |
- micropyt test.py と入力して実行してみましょう。
- 左ボタンを押しながら線が描けます。
- マウスを一番下に移動させると終了します。
- Pythonの特徴として、ループやIF文の範囲を「:」の下の行のインデント(行の先頭からのスペースの数)で表現するというルールがあります。そのためスペースの数にも注意して入力してください。CやBASICだと、スペースはいくついれても同じですが、Pythonは違います
MicroPython で使える x68k 関数
- 本家マニュアルはこちら
- Pythonプログラムの先頭に以下の行をいれれば、x68k. を省略できます。
from x68k import *
x68k.iocs(x68k.i.B_CLR_ST, 2) | 画面のリセット |
x68k.crtmod(16, 1) | 768 x 512 x 16色(31kHz) |
x68k.crtmod(14, 1) | 255 x 255 x 65536色 |
x68k.crtmod(12, 1) | 512 x 512 x 65536色 |
key=x68k.iocs(x68k.i.B_KEYINP) | キーを入力待ちして取得 |
key=x68k.iocs(x68k.i.B_KEYSNS) | キー取得(入力待ちしない) |
key=x68k.iocs(x68k.i.B_SFTSNS) | シフトキー取得(入力待ちしない) |
key=x68k.iocs(x68k.i.B_BITSNS, group) | キー取得(入力待ちしない) |
x68k.dos(x68k.d.KFLUSH, b'¥x00¥x06¥x00¥xfe') | キーバッファクリア |
x68k.dos(x68k.d.INPOUT,b'\x00\x07') |
ビープ音を鳴らす |
x68k.iocs(x68k.i.G_CLR_ON) | グラフィック表示する |
x68k.iocs(x68k.i.B_LOCATE, x, y) | カーソルを(x,y)に移動 |
xxyy = x68k.iocs(x68k.i.B_LOCATE, -1) | カーソル位置を取得 |
x68k.iocs(x68k.i.B_COLOR, d1=pal) | 文字の色 pal: 0=black, 1=cyan, 2=yellow, 3=white |
x68k.iocs(x68k.i.OS_CURON) | カーソル表示 |
x68k.iocs(x68k.i.OS_CUROF) | カーソルを消す |
x68k.iocs(x68k.i.MS_INIT) | マウス初期化 |
x68k.iocs(x68k.i.MS_CURON) | マウスカーソルON |
x68k.iocs(x68k.i.MS_CUROF) | マウスカーソルOFF |
mcr=x68k.iocs(x68k.i.MS_STAT) | マウスカーソルの状態 |
x68k.iocs(x68k.i.MS_LIMIT,
(x1 << 16) | y1, (x2 << 16) | y2) |
マウスの範囲設定 |
x68k.iocs(x68k.i.MS_CURST,
(x << 16) | y) |
マウス位置指定 |
pos = x68k.iocs(x68k.i.MS_CURGT) | マウス位置取得
(x=(pos >> 16) & 0xffff, y=pos & 0xffff) |
stat = x68k.iocs(x68k.i.MS_GETDT) | マウス位置、ボタン取得 (x, y, btn_l, btn_r) |
x68k.iocs(x68k.i.SKEY_MOD,-1) | ソフトキーボード ON |
x68k.iocs(x68k.i.SKEY_MOD,0) | ソフトキーボード OFF |
x68k.iocs(x68k.i.TPALET,pal,-2) | テキストパレット初期化 |
x68k.iocs(x68k.i.TPALET,pal,color) | テキストパレット設定(colorは16bit:g5r5b5+0, pal=0-3, 7,8(マウスポインタ)) |
x68k.iocs(x68k.i.TPALET,pal,-1) | テキストパレット取得 |
x68k.iocs(x68k.i.GPALET,pal,-2) | グラフィックパレット初期化 |
x68k.iocs(x68k.i.GPALET,pal,color) | グラフィックパレット設定(colorは16bit:g5r5b5+0, pal=0-15) |
x68k.iocs(x68k.i.GPALET,pal,-1) | グラフィックパレット取得 |
x68k.iocs(x68k.i.HSVTORGB,(h<<16)|(s<<8)|v) | HSVからRGB変換(h:0-191 0=R 64=G 128=B 32=Y 96=C 160=M s,v:0-31) |
MicroPython 参考資料
MicroPython-x68k で Python を勉強してみた
- 京都大学の Python の教科書(無料) が、microPythonでできるのか試してみました
- 教科書では、Anaconda で Pythonをインストール。IDLEで入力、実行していますが、microPythonでも ED.x を使って7章まで同じことができました。
Python シェル
micropyt
で、Pythonシェルになります。(>>>と表示)
1+2 a = 1 + 2 a
と入力すると、答え3が表示されます。
終了は Ctrl+D
スクリプトの作成と実行 / Python で使えるデータ型
ED.x で入力。
ed p2-1.py
a = 1 b = 1/2 c = “ABC” print(a) print(b) print(c) print(type(a)) print(type(b)) print(type(c))
保存終了は ESC E
実行は
micropyt p2-1.py
複数の変数への代入
a = 1 b = 2 c, d = a*2, b*c #c,d に同時に代入 print(c, d)
b*cはエラーになりました。b*aならOK。
リスト
a = [5, 1, 3, 4] a a[0] #先頭は0 a = [1]*4 #[1,1,1,1] a = list() #空のリスト、a=[]でもよい a = list(range(5)) #[0,1,2,3,4] a = list('abcde') #['a','b','c','d','e'] t = "a textbook of Python" a = t.split() a = "a textbook of Python".split()
リストの要素へのアクセス
- [開始:終了]で指定します。先頭は0、終了は含まれません
- 負の添字は後ろから数えます
a = [5, 1, 3, 4] a[0] #先頭の5 a[-1] #最後の4 a[0:2] #[5,1] a[1:3] #[1,3]
リストへの追加
a = [5, 1, 3, 4] a.append(2) #aの最後に2を追加 a b = [2, 6] a.extend(b) #aの後ろにbを追加 a.append(b) #aの後ろにb(リスト)を追加
リストの代入と複製
- リストの代入には注意が必要です
a = [ 1, 2, 3] b = a #bはaと同じ a[1]=0 #a を修正 b #b も修正されてる b = a.copy() #浅いコピー(完全なコピーではない) a[1]=10 #a を修正 b #b は aをコピーしたときの値 id(a) id(b) #id(a) と id(b)が同じとき、中味は同じ
辞書
- リストの中身を文字列で指定する仕組み
age = {"yamada":18, "tanaka":19} age age["yamada"] age["sato"]=20 #"sato"が追加される age "okada" in age #"okada"がはいっているか?
繰り返し(for)
xの平方根を求めるプログラム
x = 2 rnew = x for i in range(10): r1 = rnew r2 = x/r1 rnew = (r1 + r2)/2 print(r1,rnew,r2)
for いろんな書き方
a = [5, 1, 3, 4] for i in range(len(a)): print(a[i]) for d in a: print(a) for i, d in enumerate(a): print(i, d) a = [i*i for i in range(5)] print(a)
if文
- 複数の条件は、and or not などと書きます
a = 1 b = 0 if (a == 1) and (b == 0): #()はなくてもOK print("YES") else: print("NO")
端末からの入力
- input で入力。数字をいれても文字列になります
a = input("*** ") a x = float(a) x x = int(a) x s = str(1/3) #数値を文字列にする s s = hex(a) #16進数 s ='{:04x}'.format(a) #16進数4桁 s ='{:02x}{:02x}'.format(a,a) #16進数2桁を2つ並べる
try except (エラー処理)
- 数字以外が入力されたときにエラー終了しないようにする
while True: x = input("*** ") try: x = float(x) except: print("Not number") continue print(x) break
- while True は無限ループです。Tは大文字
- エラーが発生すると、except から実行されます。except: は必ず必要で、何もしないときは pass と書きます
- continue は、while ループの先頭にもどります
- break で、whileループを抜けます
数値計算
import math a = math.pi #円周率 a = math.sqrt(2) #ルート
文字列の結合
s = "abc" + "def" s = "abc"+str(1.2) #数値は文字にしてから結合 s = "abc"*2 s = hex(a) #16進数 s ='{:04x}'.format(a) #16進数4桁 s ='{:02x}{:02x}'.format(a,a) #16進数2桁を2つ並べる a = len(a) #文字の長さ、半角も全角も1文字
文字の検索
a = "abcdef" a.find("cd") #結果は 2 a.find("x") #結果は-1
関数
def myabs(x): if x<0: return -x return x while True: a = float(input("> ")) print(a, myabs(a))
関数を引数にした関数
def f1(): print("f1") def f2(): print("f2") def F(y): y() F(f2) F(f1)
グローバル変数
関数の外側で定義された変数をつかいたいとき「global」と宣言します
a=1 def f(): global a print a
デフォルト引数
def f(a,b=2,c=3): return a + b + c f(1,1,1) #答えは3 f(1) #答えは6 f(1,c=2) #答えは5
ファイル入出力
import os print(os.getcwd()) f = open('test.txt','w') f.write('111\n 222\n 333\n') f.close() f = open('test.txt','r') s = f.read() f.close() print(s)
リネーム、削除など
import os os.rename('変更前ファイル名','変更後ファイル名') os.remove('ファイル名') os.listdir('フォルダ名')
autoexec.batを読んでみる
import os f = open('autoexec.bat','r') for line in f: printf(line) f.close()
close不要の書き方
import os with open('autoexec.bat','r') as f: for line in f: printf(line)
プログラムの終了
import sys sys.exit()
X68000との出会い
- X68000は、はじめてアニメーションをつくったパソコンです。lanma.x というベクトルアニメエディタを自作し、ASCII や 電脳倶楽部で公開しました。下は、lanmaで作ったアニメに、9VAeきゅうべえでイフェクトをつけた作品。登場人物は実在し、身内で公開したときは、めちゃうけました。
- 当時、最高のグラフィックス性能があり、簡単に音を鳴らすことができ、gcc コンパイラで高速な処理ができました。
- それが、X68000Z になって、よみがえるというので、当時を思い出してアプリ開発してみようと思いました。
- X68000 Z 実機のみでプログラム開発することを目指します。
内容:
- X68000 Z 資料
- X68000 Z ツール入手先
- X68000Z MicroPython用SDカードの作り方
- ヒストリー、カーソルキー設定
- エディタEDの使い方
- MicroPython サンプルプログラム(マウス左ボタンで線をひく)
- MicroPython で使える x68k 関数
- MicroPython 参考資料
- MicroPython-x68k で Python を勉強してみた
- X68000との出会い
- 解説動画の作り方
解説動画の作り方
この記事のひとコマ解説GIFは、フリーソフト9VAeきゅうべえで作成しています。
9VAeきゅうべえのダウンロード
- Android / Chromebook:9VAeきゅうべえAndroid版、9VAeDangla
- iPad / iPhone:9VAeDanga (Apple)、9VAePro (Apple)
- Win / Mac / Linux:無料ソフトでアニメを作ってみよう - Qiita
- Amazon Fire : 9VAeきゅうべえFire版 (Amazon)
- 9VAeのボタン説明、メニュー/キー
- 9VAeきゅうべえで、キャプチャー画面に、矢印や説明を加え、ページに「ひとコマ」設定するだけで作れます。
- FFmpeg を使って Youtube 動画にすることもできます。
画面キャプチャ方法
|
||
|
||
|
ライブラリ> Screenshots |
|
|
|
アルバム> スクリーンショット |
|
ファイル |
|
|
スクリーンショット |
|
|
ダウンロード |
|
|
アニメGIF、動画出力
- 「ファイルメニュー>アニメGIF出力」または「動画出力」で、好きなサイズのアニメGIF または MP4動画 が作成できます。
Win / RaspberryPi / Linux版 でMP4動画を作るには FFmpeg が必要。Youtube解説 - スマホの場合、端末内の「9VAe」フォルダの中に出力されます。フォトアプリで、「端末内の写真>9VAe」で見ることができます。
- アニメGIFは、背景を透明にできます。音がいれられません。
- MP4動画には音が入れられます。Youtubeに投稿できます。Youtubeに投稿する場合、1秒30コマ、高さ720 または 1080 で出力するとよいでしょう。
9VAeをつかえば素材動画が作れる
- 9VAeきゅうべえを使えば、オリジナルの素材動画が簡単に作れます。
- Openclipart や FreeSVG などフリーのSVGイラストをつかって動くキャラクタが作れます。
- 動画編集ソフトで動画に合成できます。
OS |
9VAeで作成する素材動画 |
|
---|---|---|
連番PNG または MP4 |
||
PowerDirector |
GIF または MP4 |
作り方
- もっと長いアニメを作ることもできます。以下をご覧ください。
9VAeきゅうべえに関する質問
- 9VAeに関する質問(Yahoo知恵袋)
- よくある質問(Qiita)
- 本記事の文章、図、アニメは複製自由です。教材、解説記事にご利用ください。