22
33MicroPython のシャープ X680x0 向け移植です。
44
5- [ MicroPython] ( https://micropython.org/ )  v1.20 .0 をベースにしています。
6- *  v1.19.1  からの差分は [ こちら] ( https://github.com/micropython/micropython/releases/tag/v1.20 .0 )  を参照してください。
7- 
5+ [ MicroPython] ( https://micropython.org/ )  v1.21 .0 をベースにしています。
6+ *  v1.20.0  からの差分は [ こちら] ( https://github.com/micropython/micropython/releases/tag/v1.21 .0 )  を参照してください。
7+ *  v1.21.0 は組み込みモジュール名の扱いが従来のバージョンから変更されているため、モジュールの import に関して注意が必要な場合があります。「 [ モジュールのimportに関しての注意点 ] ( #モジュールのimportに関しての注意点 ) 」を参照してください。 
88
99## ビルド方法  
1010
6262
6363## X680x0固有ライブラリ  
6464
65- MicroPython 自体の使い方は [ 公式ドキュメント] ( https://micropython-docs-ja.readthedocs.io/ja/v1.20ja /index.html )  を参照してください。
65+ MicroPython 自体の使い方は [ 公式ドキュメント] ( https://micropython-docs-ja.readthedocs.io/ja/v1.21.0ja /index.html )  を参照してください。
6666
6767X680x0版では、加えて以下のライブラリをサポートしています。
6868
@@ -112,12 +112,13 @@ MicroPython向けLチカのコードをそのままX680x0版で動かすため
112112      ``` 
113113      import x68k 
114114      import struct 
115-       import ctypes  
115+       import uctypes  
116116
117117      buf=bytearray(94) 
118-       x68k.dos(x68k.d.GETDPB,struct.pack('hl',0,ctypes .addressof(buf))) 
118+       x68k.dos(x68k.d.GETDPB,struct.pack('hl',0,uctypes .addressof(buf))) 
119119      ``` 
120120    * DOS _GETDPBは「1ワードのドライブ番号」「94バイトのバッファを指す1ロングワードのポインタ」をこの順にスタックに積んで呼び出す仕様なので、`struct.pack`のフォーマット文字列`'hl'` によってこのデータ配置を指定しています。 
121+   * 注) 上記コード例でバッファオブジェクトのアドレスを取得するために使用していた `addressof()` 関数は `uctypes` モジュールに含まれていて従来は `ctypes` モジュールという別名での呼び出しも可能でしたが、MicroPython v1.21.0 での仕様変更に伴い `uctypes` でのみ呼び出せるようになりました。v1.20.0 以前で `ctypes` を import してるコードは `uctypes` に変更する必要があります。 
121122* `x68k.mpyaddr()` 
122123  * MicroPython本体のメモリ上の開始アドレスを返します。デバッグ用です。 
123124* `x68k.loadfnc(file [,flag])` 
@@ -258,7 +259,7 @@ MicroPython向けLチカのコードをそのままX680x0版で動かすため
258259
259260#### クラス `IntVSync`, `IntRaster`, `IntTimerD`, `IntOpm` -- 割り込みハンドラ登録 
260261
261- * これらのクラスによって、Python言語で書かれた割り込みハンドラを登録することができます。割り込みハンドラには通常の関数と異なるさまざまな制約が存在します。詳細は[公式ドキュメント](https://micropython-docs-ja.readthedocs.io/ja/v1.20ja /reference/isr_rules.html)を参照してください。 
262+ * これらのクラスによって、Python言語で書かれた割り込みハンドラを登録することができます。割り込みハンドラには通常の関数と異なるさまざまな制約が存在します。詳細は[公式ドキュメント](https://micropython-docs-ja.readthedocs.io/ja/v1.21.0ja /reference/isr_rules.html)を参照してください。 
262263  * 割り込みハンドラは後述のネイティブコードまたはバイパーコード、インラインアセンブラを使用するなどして、出来るだけ早く処理を完了させるようにしてください。 
263264* class `x68k.IntVSync([callback, arg, mode, disp, cycle])` 
264265  * IntVSync オブジェクトを構築します。このオブジェクトで垂直同期による割り込みハンドラを登録します。 
@@ -363,7 +364,7 @@ MicroPython向けLチカのコードをそのままX680x0版で動かすため
363364
364365* MicroPythonのネイティブ/バイパーコードエミッター機能をサポートしています。 
365366* `@micropython.native` または `@micropython.viper` デコレータを付けた関数では通常のバイトコードの代わりにCPUの機械語コードが出力され、それをCPUが直接実行することで実行速度を高速化します。 
366- * 詳細は公式ドキュメントの [ネイティブコードエミッター](https://micropython-docs-ja.readthedocs.io/ja/v1.20ja /reference/speed_python.html#the-native-code-emitter) および [バイパーコードエミッター](https://micropython-docs-ja.readthedocs.io/ja/v1.20ja /reference/speed_python.html#the-viper-code-emitter) を参照してください。 
367+ * 詳細は公式ドキュメントの [ネイティブコードエミッター](https://micropython-docs-ja.readthedocs.io/ja/v1.21.0ja /reference/speed_python.html#the-native-code-emitter) および [バイパーコードエミッター](https://micropython-docs-ja.readthedocs.io/ja/v1.21.0ja /reference/speed_python.html#the-viper-code-emitter) を参照してください。 
367368
368369## `mpyconv` プリコンパイラ 
369370
@@ -375,9 +376,12 @@ MicroPython向けLチカのコードをそのままX680x0版で動かすため
375376
376377## モジュールのimportに関しての注意点 
377378
378- * Pythonの `import` では.pyファイルを納めたディレクトリ名がモジュール名として扱われますが、Human68kのシステムディスクに `SYS` ディレクトリがあるため、このルートディレクトリで `import sys` を行うと組み込みの `sys` モジュールがimportされないという問題があります。 
379- * 組み込みモジュールは外部モジュールより優先して扱われるのですが、MicroPythonの本来の組み込みモジュール名は"u"の付いた `usys` であり `sys` はその別名という扱いになっていて、別名の方は外部モジュールに優先しないためこのような現象が起きるようです。 
380- * 組み込みモジュールのimportが上手くいかない場合、モジュール検索パス上に同名のディレクトリがないかを確認してみて下さい。本来のモジュール名を用いた `import usys` であれば、組み込みモジュールが優先されます。 
379+ * MicroPython v1.21.0 で組み込みモジュールの命名に関するポリシーが変更されたため、v1.20.0 以前向けの既存のソースコードに対する互換性が一部失われています。既存のコードがエラーになる場合は以下の点について確認してみてください。 
380+ * v1.20.0 まで、MicroPython の組み込みモジュールの名前には "u" が付いていました(usys, uio, uos 等)。これは通常のPython (CPython) の同名の組み込みモジュールのサブセットであることを表すとともに、CPython との互換性向上のために "u" の付かない名前も別名として import できるという仕様になっていました。\ 
381+ v1.21.0 より、これらの組み込みモジュールの名前はほとんどが "u" の付かないものに変更され、逆に "u" の付く名前の方が別名として扱われるようになりました。 
382+ * この変更の唯一の例外が `uctypes` モジュールです。このモジュールは CPython の `ctypes` モジュールと互換性がないため、従来 `ctypes` を別名として import することができたのが今回の変更でできなくなりました。\ 
383+ `uctypes` モジュールにはバッファオブジェクトのアドレスを取得する `addressof()` 関数があり、X68k 版の DOS コール呼び出し等のために使われることが多かったのですが、この変更に伴い `import ctypes` を行っているコードは動作しなくなります。`import uctypes` への変更が必要です。 
384+ * また v1.21.0 より、組み込みモジュールについては import の際にファイルシステムの同名のディレクトリの検索を行わなくなりました。Human68k システムディスクに `SYS` ディレクトリが存在するため、従来はルートディレクトリで `import sys` を行うと組み込みの `sys` モジュールが import されないという問題がありましたが、仕様変更によりこの問題は発生しなくなっています。 
381385
382386## X-BASIC 外部関数ファイル読み込み機能 
383387
0 commit comments