aburi6800のブログ

コンピュータのプログラミング、ゲームに関するニッチな情報を書いていくブログです。

【雑記】Androidタブレットを購入しました

 10月から少し長い間、東京へ出張になりそうなので、出張先で使う端末として、Androidタブレットを購入しました。
 購入した機種はこれ。

NEC PC-TE510JAW LaVie Tab E

NEC PC-TE510JAW LaVie Tab E

  • 発売日: 2019/01/11
  • メディア: エレクトロニクス

 Wifiモデルですね。
 なぜこの機種を選択したかというと、市内の電器店の閉店セールに行ったところ、相方と出張で必要という話になり、たまたまそこにあった中で一番いいスペックの機種にしたというだけです。(^^;
 今のところスペックには不満がなく、意外とスピーカーが良いので映画も楽しめてます。バッテリーも、カタログスペックでは10時間でしたが、実際は普通に一日使えそうな勢いです。
 なかなか気に入ってしまったので、個人的に購入後のセットアップ内容を記録しておこうと、記事にしました。
   

目次

 

1.googleアカウントの登録

 既にスマホに登録しているgoogleアカウントをタブレットに登録。
 スマホgoogleアカウントのバックアップ設定をしているので、自動的にスマホのデータと同期し、アプリもセットアップしてくれる。楽。
 一部、LINEやSMSといった電話番号が必要なアプリもインストールされるが、この機種では使用できない。
 ただ、タブレットから削除するとスマホへ影響がありそうなので、ストレージの容量がもったいないが、そのままにしておく。
   

2.各サービスへのログイン

 evernotedropbox等のクラウドサービスへタブレットからログインする。
 ログイン後、データが同期されていることを確認する。
   

3.マイクロSD追加

 外部ストレージとして64GBのマイクロSDカードを追加。
 挿入口の開け方が良くわからず苦労したが、蓋にある小さな穴に付属のピンを刺し、グッと押し込むことで開いた。
 説明書にこのあたりが記載されいないのは不親切だと思う。
   

4.Pushbulletのインストール

 使用する端末が3台(スマホ、PC、タブレット)となったので、手軽にデータを転送できるよう、Pushbulletを導入。
 例えばLINEできたメッセージや、PCのgoogleマップで調べた経路をタブレットに送信すれば、手軽に情報共有ができる。
   

5.テザリング設定

 自宅以外でも使えるよう、テザリングの設定を行う。
 最初、消費電力を考えてbluetoothテザリングを設定したが、自動的に切断されその後復帰できない症状が出た。
 調べても確実な対処法がよくわからず、面倒になったのでwifiテザリング設定を行う。
 スマホwifiテザリングをonにし、タブレットからwifiの接続先をスマホに設定。
 無事、安定してネットワークに接続できたので、外出先でもタブレットで作業が可能になった。
   

最後に

 ここまでで、スマホとほぼ同等の環境が完成した。
 今後は、スマホや手帳でメモを取り、タブレットでドラフトを進め、PCで仕上げ、スマホで閲覧する、といった住み分けができるかと考えている。
 使用感だが、今回10.1インチのAndroidタブレットにしたが、やはり画面が広いと効率が良い。快適。
 この機種はメモリ4GB、ストレージ64GBとAndroidとしては高めのスペックだが、レスポンスに関しては全くストレスがない。
 予算の範囲でスペックが高いものを選択すると、ストレスがなく長く使えるので良いと思う。
   

今後の残作業

・キーボード付きのカバーの購入(モノ書きをするには必須、ソフトウェアキーボードはストレスでしかない)
タブレットだけで完結した、デジカメのrawデータの現像フローを確定する(大量のrawデータをどうやって扱うか?)
・デフォルトのIMEが使いにくいので、代替を探す

【MSX】MSX-BASICとマシン語の処理速度差を体感してみる

 さて、前回は開発環境を作りました。

 せっかくなので、同じ処理をBASICとアセンブラで書いて、処理速度を比較してみたいと思います。

(2023/04/02) アセンブラソースで不要な部分(SET VRAM WRITE)があったため、削除しました。

  

BASICの場合

 次のようなBASICプログラムを実行してみます。

10 SCREEN 1:WIDTH 32:KEY OFF
20 PRINT "################################";
30 PRINT "################################";
40 PRINT "################################";
50 PRINT "################################";
60 PRINT "# ### #     # ##### #######   ##";
70 PRINT "# ### # ##### ##### ###### ### #";
80 PRINT "#     #    ## ##### ###### ### #";
90 PRINT "# ### # ##### ##### ###### ### #";
100 PRINT "# ### #     #     #     ###   ##";
110 PRINT "################################";
120 PRINT "################################";
130 PRINT "################################";
140 PRINT "################################";
150 PRINT "################################";
160 PRINT "################################";
170 PRINT "####### ### ###  ## ### ########";
180 PRINT "#######  #  ## ##### # #########";
190 PRINT "####### # # ###  #### ##########";
200 PRINT "####### ### ##### ## # #########";
210 PRINT "####### ### ##   ## ### ########";
220 PRINT "################################";
230 PRINT "################################";
240 PRINT "################################";
250 PRINT "###############################";
260 LOCATE 0,0
270 END

 ベタで画面いっぱいに文字を表示するプログラムです。

 これを適当なファイル名(拡張子は.BAS)で保存して、実行してみましょう。

 こんな感じで表示されました。

 実行中は、描画しているのが目でわかるくらいに処理が遅いと思います。

 

アセンブラの場合

 では、次にアセンブラで書いてみます。

;
;  画面いっぱいにテキストを表示するプログラム
;  CTRL+STOPで停止する
;
        .area   CODE (ABS)
        .org    #0xD000                 ; 開始アドレス

BREAKX  =       0x00B7                  ; BIOS(Ctrl-STOP)
INIT32  =       0x006F                  ; BIOS(INIT32)
ERAFNK  =       0x00CC                  ; BIOS(ERASE FUNCTION)
SETWRT  =       0x0053                  ; BIOS(SET VRAM WRITE)
LDIVRM  =       0x005C                  ; BIOS(RAM TO VRAM BLOCK COPY)

PG_START:
        CALL    PG_INIT                 ; 初期処理
        CALL    TEXTFILL                ; 画面をテキストで埋める

PG_MAIN:
        CALL    BREAKX                  ; BIOSコール(Ctrl-STOP)
        RET     C                       ; キャリーフラグが立っていたらリターン
        LD      A, #0
        JR      PG_MAIN

PG_INIT:
        CALL    INIT32                  ; BIOSコール(INIT32)
        CALL    ERAFNK                  ; BIOSコール(ERASE FUNCTION)
        RET

TEXTFILL:
        LD      HL, #TEXT               ; VRAMに転送するメモリの先頭アドレス
        LD      DE, #0x1800             ; 転送先VRAMアドレス
        LD      BC, #0x300              ; 転送データ長
        CALL    LDIVRM                  ; BIOSコール(RAM TO VRAM BLOCK COPY)
        RET

TEXT:
        .ASCII  "################################"
        .ASCII  "################################"
        .ASCII  "################################"
        .ASCII  "################################"
        .ASCII  "# ### #     # ##### #######   ##"
        .ASCII  "# ### # ##### ##### ###### ### #"
        .ASCII  "#     #    ## ##### ###### ### #"
        .ASCII  "# ### # ##### ##### ###### ### #"
        .ASCII  "# ### #     #     #     ###   ##"
        .ASCII  "################################"
        .ASCII  "################################"
        .ASCII  "################################"
        .ASCII  "################################"
        .ASCII  "################################"
        .ASCII  "################################"
        .ASCII  "####### ### ###  ## ### ########"
        .ASCII  "#######  #  ## ##### # #########"
        .ASCII  "####### # # ###  #### ##########"
        .ASCII  "####### ### ##### ## # #########"
        .ASCII  "####### ### ##   ## ### ########"
        .ASCII  "################################"
        .ASCII  "################################"
        .ASCII  "################################"
        .ASCII  "################################"
        .DB     #0

 これを適当なファイル名で保存して、前回のようにコンパイルし、MSXでBLOADしましょう。

 どうでしょうか?

 一瞬で表示さましたね!

 これがマシン語の威力です!

([CTRL]+[STOP]で停止します)

 

おわりに

 私はこれまでアセンブラでプログラムを作ったことがなく、敷居が高い印象がありましたが、MSXBIOSルーチンが充実しているので、思ったよりも簡単に組めるのではないかな、と感じてます。

 ただ、いきなり全体をマシン語で書くのは大変なので、まずはBASICをメインに、重い部分をアセンブラで書くようにして、徐々に慣れていきたいと思います。

 というわけで、次は「BASICから呼び出すマシン語サブルーチンを作る」にチャレンジします!

【MSX】SDCCでMSXのクロス開発環境を作る

 WindowsMSX(1)のアセンブラ開発環境を構築します。

 使用するものはSDCCとBlueMSX、Visual Stusio Codeです。

※当記事は、基本的なファイルの扱い方やパスの知識がある方、コマンドプロンプトが使える方を対象にしています。わからない方は各自で調べてください。
   

 

SDCCのインストール

 まずは、SDCCのインストールを行います。

 SDCCとは、Smaal Device C Compilerの略で、Z80など小規模デバイスのためのフリーのCコンパイラです。

 ただ、Cコンパイラとして見ると機能的に弱い面があるようですが、現時点では純粋にアセンブラとリンカを使いたいだけなので、これで良しとします。

sdcc.sourceforge.net

 適当に使用しているOSに合わせて最新ビルドをダウンロードします。

 インストールはデフォルトのままで、環境変数PATHへの追加も行っておいてください。

 インストール後、コマンドプロンプトで「sdcc -v」として、以下のようにバージョンが表示されればインストール成功です。

f:id:aburi6800:20190428222230p:plain
 

 

ihx2binのインストール

 生成したバイナリはIntelHEX形式で、そのままではBASICからBLOADして実行できません。

 これを変換するためのツールとして、ihx2binというものがあります。

 以下リンクで取得したzipに含まれている、ihx2bin.exeをパスの通った適当なディレクトリに入れておいてください。

http://www5d.biglobe.ne.jp/~hra/note/msx_game/files/asm.zip  

 

BlueMSXのインストール

 次に、MSXエミュレータのBlueMSXをインストールします。

 BlueMSXでなくても、MSXが動けば何でも良いのですが、ディレクトリをディスクドライブにマウントできるので生成したバイナリをすぐに実行できるのと、デバッガが内蔵されているため、私はこれを選択しました。

bluemsx.msxblue.com

 面倒なので、何も考えずにフルバージョンをダウンロードした方がいいと思います。

 細かいインストール手順は割愛。

 起動させるとついゲームを遊びたくなってしまいますが、ここはグッと我慢。  

 

Visual Studio Codeのインストール

 他のテキストエディタでもいいのですが、これに慣れた方が今後は幸せになる気がします。

code.visualstudio.com

 インストールは適当に。わからなければ解説しているサイトが山ほどあるので、検索。

 日本語化はされていないので、Ctrl+Shift+Xを押して、Extension(Japanese Language Pack for VS Code)を追加。再起動をすると日本語になっているはずです。

 ついでに、Z80 AssemblyというExtensionも入れておきましょう。  

 

ソース作成

 基本的な環境ができたところで、実際にプログラムを作って動かしてみます。

 簡単なもので、「Hello MSX!」と表示させてみましょう。

 開発はWindowsで行います。

 MSX実機でも開発は可能ではありますが、ツール(MSX-DOSアセンブラ)の入手が困難であること、編集の作業効率が悪いこと、実行スピードが遅いことから、現状はデメリットしかないため、お勧めはしません。

 それでは、Visual Studio Codeで適当なディレクトリを作り、そこにアセンブラのソースファイルとして「source.asm」を作りましょう。(Visual Studio Codeでのこのあたりの操作は、いろいろなサイトで解説されているので割愛します)

 ファイルはテキストファイルで、文字コードはCP437、改行コードはCRLFで作ります。(といいつつ・・・ShiftJISとかでも問題ないと思う)

 中身はこんな感じでしょうか。

;
;  source.asm
;
        .area   CODE (ABS)
        .org    #0xD000                 ; 開始アドレス

CHGMOD  =       0x005F                  ; BIOS(CHANGE SCREEN MODE)
ERAFNK  =       0x00CC                  ; BIOS(ERASE FUNCTION)
CHPUT   =       0x00A2                  ; BIOS(CHARACTER OUTPUT)

PG_INIT:
        LD      A, #1                   ; SCREEN1にする
        CALL    CHGMOD                  ; BIOSコール(CHANGE SCREEN MODE)
        CALL    ERAFNK                  ; BIOSコール(ERASE FUNCTION)
        LD      HL, #TEXT               ; 文字列データのアドレスをセット
        CALL    TEXTPUT                 ; 文字を表示してみる
        RET

TEXTPUT:
        LD      A, (HL)                 ; 1文字のデータをAレジスタに転送
        OR      A                       ; Aレジスタの値が0か判定
        RET     Z                       ; 0ならリターン
        CALL    CHPUT                   ; BIOSコール(CHARACTER OUTPUT)
        INC     HL                      ; 次のアドレスへ
        JR      TEXTPUT

TEXT:
        .ASCII  "Hello MSX!"
        .DB     #0

 今回は&HD000番地から格納されるプログラムとしました。  

 

コンパイル

 次に、ソースファイルからオブジェクトファイルを作ります。

 コマンドプロンプトで、ソースを保存したディレクトリに移動して以下のコマンドを実行します。

sdasz80 -ls -o source.o source.as

 エラーが無ければ、以下のように.lstファイルと.oファイル、.symファイルが出来ていると思います。

f:id:aburi6800:20190428233210p:plain

   オブジェクトファイルのままでは実行できませんので、実行可能なバイナリを作りためリンクという作業を行います。

 まず、ソースと同じ場所に source.rel のファイル名で以下の内容を保存します。

-im source
source.o

 そして、コマンドプロンプトで以下のコマンドを実行します。

sdld -nf source.rel

 エラーが出なければ、コンパイル完了です。

 フォルダの中は以下のようになっていると思います。

f:id:aburi6800:20190428234754p:plain      ここで作成された「.ihx」ファイルが、Intel HEX形式の実行バイナリになります。

 最後に、変換するために以下のコマンドを実行します。

ihx2bin source.ihx source.bin

 最後に「Complete.」の表示がされれば、変換完了です。

 ディレクトリの中は、以下のようになっていると思います。

f:id:aburi6800:20190429001848p:plain

 さて、これでWIndowsでの作業は完了です。

 次からはMSXでの作業となります。  

 

実行

 それでは、いよいよMSXで実行してみます。

 BlueMSXを起動して、[ファイル]-[ディスクドライブ A]-[ディレクトリ挿入]を選択します。

f:id:aburi6800:20190429002856p:plain

 次に、「フォルダーの参照」ダイアログが表示されるので、先ほどまで作業したディレクトリを選択します。

 そして、BlueMSXで「files」とコマンドを入力し、[Enter]を押してください。

 すると、以下のようにWindowsで作成したファイルが表示されていると思います。

f:id:aburi6800:20190429003145p:plain

 では、そのまま以下のコマンドを実行してください。

clear 200,&HCFFF
bload "source.bin",r

 どうでしょうか?

 画面に「Hello MSX!」と表示されましたでしょうか?

f:id:aburi6800:20190429004531p:plain    BASICのコマンドを打つのが面倒な場合は、BASICプログラムにして保存しておくと良いです。

(知らなかったのですが、Visual Studio Codeから行番号付けてBASICプログラムを書いて、拡張子「.BAS」で保存するとMSXから実行できるんですね・・・)

 以上がソースの作成から実行までの手順となります。

   

謝辞

 当記事を作成するにあたり、以下の方々の記事を参考にさせていただきました。

 お礼申し上げます。

こびにぃ氏:

こびにぃのあそび

HRA氏:

HRA's room

【MSX】Windows用MSXスプライトエディタ

 こんばんわ。

 

 MSXのスプライトデータを作るWindowsアプリケーションを探していたのですが、良いものを見つけたので紹介します。

 ゲームを作るなら、やっぱり絵を出して動かすところから始めたいですもんね!

  

sites.google.com

 

 GPLV3ライセンスによるフリーソフトウェアです。

 TMS9918(MSX1)、V9938(MSX2以降)に対応し、8×8または16×16のパターンを作ることができます。

 インストール方法は、ダウンロードしたzipファイルを適当な場所に展開するだけです。

 日本語化はされていませんが、シンプルなツールなので直観でわかると思います。

 

 起動すると新規にプロジェクト作るか、保存したプロジェクトをロードするかを選びます。

(※Windows10 などで .net Frameworkのランタイムが入っていない場合は起動時にインストールを促すダイアログが表示されますが、そのままインストールしてOKです)

 

 新規にプロジェクトを作るときは、プロジェクト名を入れて、スプライトサイズを選択し、単色(MSX1)または複数色(MSX2以降)を選択します。

 

 あとはがしがしスプライトを書いていきます。

 ツール自体はシンプルでわかりやすい操作系ですので、すぐに慣れると思います。

 

 データができたら、ソースを取得しましょう。

 右上のパレットアイコンの右にある「Generate data」ボタンをクリックすると、ダイアログが表示されます。

 BASIC(DATA文)、C言語アセンブラ(標準)、アセンブラ(SDCC)の4種の形式で出力できます。充実してますね!

 対象のスプライト番号を指定して、緑の「Get Data!」ボタンを押すと、ソースが生成されますので、これを自作のプログラムに取り込めばOKです。

 

 以上、簡単な紹介でしたが、これでMSXクロス開発の効率も上がりますね!

 作成者の303bcn氏に感謝します。

 

ブログはじめました

 MSXでのプログラミングについて、

メモ程度ですが記録を残しておこうと、ブログをはじめました。

 

 高校生くらいまでは、BASICで小さなプログラムを作っていた程度ですので、今回はアセンブラでのプログラミングにも調整したいと思ってます。

 

 詳しい人からしたら、レベルの低いことばかりだと思いますが、どうぞ暖かい目で見ていただけると嬉しいです(^^;

 

 よろしくお願いします。