dnjiro’s 9VAe blog

誰でもアニメが作れる無料ソフト9VAeきゅうべえ開発者のブログ

X68000 Z 用 MicroPython SDカードの作り方:ひとコマ解説

X68000 Z 実機で、MicroPythonを使う方法を解説します。X-BASICへの変換はこちら

Cコンパイラ用SDカードの作り方はこちら

X68000 Z 資料

参考にした記事はこちらです。

X68000 Z ツール入手先

 

X68000Z MicroPython用SDカードの作り方


音声で解説した動画

  1. DiskExplorer ダウンロード
  2. Lhaplus ダウンロード
  3. ブランクXDFダウンロード
  4. HumanSys ダウンロード
  5. SDカードの直下に「automount.xdf」という名前でいれておく
  6. MicroPython.XをBINフォルダに入れる

空き容量が少ない場合、「SYS」の中の「PRNDRV2.SYS / PRNDRV3.SYS / FLOAT3.X / FLOAT4.X」も削除してかまいません(出典

 

ヒストリー、カーソルキー設定

コマンド入力にものすごく便利です。


音声による解説

key.his を HISフォルダにいれておくと次に起動したときも使えます。

  1. Human68K コマンドで、KEY を実行
  2. U (更新)
  3. 入力は、[KEY.SYS]、(2回目以降は前回作成した key.his )
  4. 出力は、key.his
  5. 処理を開始。次の4つのキーを変更「F」「2」「5」「Ctrl+W同時押し」「Enter」のように押すと設定できます。
    F25 ^W
    F26 ^S
    F27 ^D
    F28 ^E
  6. Enter 2回で終了。KEY.HIS ができます。
  7. KEY.HIS を、\HIS フォルダにコピー。移動でもよいがオリジナルをのこしておくと安心。
  8. 作成した 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 サンプルプログラム(マウス左ボタンで線をひく)

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 関数

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)

描画関数

記述
意味
g=GVRam(0) グラフィック画面
tx=TVRam(0) テキスト画面
g.line(x1,y1,x2,y2,pal)
g.line(x1,y1,x2,y2,pal,dot)
x1,y1-x2,y2に線をひく。palは色
点線(dot=-1は実線,0は透明)
g.box(x1,y1,x2,y2,pal)
g.box(x1,y1,x2,y2,pal,pal,dot)
x1,y1-x2,y2の四角形を描く。palは色
点線の四角(dot=-1は実線,0は透明)
g.fill(x1,y1,x2,y2,pal) x1,y1-x2,y2の四角形を塗りつぶす。palは色
g.circle(x,y,r,pal)
g.circle(x,y,r,from,to)
中心x,y,半径rの円を描く。palは色
円弧(from,toは角度0-360)

MicroPython 参考資料

 

X68000 Z で 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("a1 b0")
elif a==1:
print("a1")
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桁 {}に数字がはいる :#04x とすると 0xがつく
s ='{:02x}{:02x}'.format(a,a)  #16進数2桁を2つ並べる 
a = len(a)            #文字の長さ、半角も全角も1文字
a.isnumeric(a) #a が数字なら True

フォーマットの使い方(note.nkmk.me)

文字の検索 find、部分文字列

a = "abcde"
a.find("cd")    #結果は 2
a.find("x")     #結果は-1

a[0] #先頭の文字1文字(0が先頭)
a[2:4] #0から数えて文字2から2文字(4は含まれない)
a[2:] #0から数えて文字2から最後まで
a[-1] #最後の1文字

文字の比較 ==   !=

a = "abc"
print(a=="abc") #結果は True
print(a!=a) #結果は False

日付・時間 datetime

import datetime
dt = datetime.datetime.now() #年月日 時分秒(現在時刻)
dt = datetime.date.today() #年月日(今日)
str = '{:04d}-{:02d}{:02d}'.format(dt.year,dt.month,dt.day) 

日時の使い方(note.nkmk.me)

関数 def

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.path.exists('ファイル・フォルダ名') #存在チェック
os.path.isdir('フォルダ') #フォルダかどうか
os.path.isfile('ファイル') #ファイルかどうか
os.path.getsize('ファイル') #ファイルサイズ
os.listdir('フォルダ名') #フォルダの中のファイル
os.mkdir('フォルダ名') #フォルダ作成
if os.access('フォルダ名', os.R_OK|os.W_OK) : #読み書きできるか
os.chmod('フォルダ名', 0o777) #アクセス権限の変更(読み書き実行)
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 実機のみでプログラム開発することを目指します。

 

内容:


解説動画の作り方

この記事のひとコマ解説GIFは、フリーソフト9VAeきゅうべえの「ひとコマ機能」で作成しています。

9VAeきゅうべえのダウンロード

 

 

  • 9VAeきゅうべえで、キャプチャー画面に、矢印や説明を加え、ページに「ひとコマ」設定するだけで作れます。
  • FFmpeg を使って Youtube 動画にすることもできます。

 

画面キャプチャ方法

OS
画面キャプチャ方法
保存先
 Windows
クリップボード
 Mac
  • Shift + Command + 4 (ShiftキーはZの左、スペースでウィンドウ指定)
デスクトップ
 Android
  •  電源 + 音量Down
 adbコマンド (開発者向け)
  •  adb shell screencap -p /sdcard/screen.png
     adb pull /sdcard/screen.png
フォトアプリ>
ライブラリ>
Screenshots
 
iPhone / iPad
  •  ホームボタン + 電源ボタン
  • サイドボタン + 音量UP
写真>
アルバム>
スクリーンショット
 Linux Mint
  • Print Screen キー
クリップボード
ファイル
 Amazon Fire
  • 電源 + 音量Down 1秒長押し
  • USBケーブルでPCと接続し、
    設定>接続デバイス>USB>ファイル転送
ピクチャ >
スクリーンショット
 Chromebook
  • Shift + Ctrl + ウィンドウ一覧キー(上の中央のキー)
マイファイル >
ダウンロード
 X68000 Z
 

アニメ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で作成する素材動画

Windows

AviUtl

連番PNG または MP4

Mac/iPhone/iPad

iMovie

MP4 または QuickTime(古いMac)

Android

PowerDirector

GIF または MP4

作り方

 

      • もっと長いアニメを作ることもできます。以下をご覧ください。

9VAeきゅうべえ:長いアニメを作る方法 - Qiita

 

 

9VAeきゅうべえに関する質問