フォト
2017年11月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    
無料ブログはココログ

« 2015年10月 | トップページ | 2015年12月 »

2015年11月の13件の記事

2015年11月30日 (月)

Propeller始めました(8) スピーカーで音を出してみる

ブレッドボード上に実装したプロペラにスピーカーを付けて音を出してみました。
トランジスタを1つ使っただけの簡単な音出しです。

Dscn4335

音を出すサンプルプログラムとして、
Linus Åkessonさんが製作し公開している「Turbulence」を動かしてみました。

VGA出力+音を出すデモプログラムです。


リアルタイムレンダリングを行っています。
本当は音の出力はステレオのようですが、片側でけの再生です。
それでもそこそこの音が出せました。

ブレッドボード上の簡単な実装でここまで出来るのは驚きです。
プログラムデモは実際にはもっと長く、上の動画は後半の半分です。
プログラムサイズは32kバイトです。

2015年11月25日 (水)

IchigoJam用漢字フォントモジュールの製作 その1

IchigoJamのI2C接続モジュールとして、漢字フォントモジュールを試作しました。
LPC810で基板実装する予定ですが、まずはArduinoにて実装してみました。

Dscn4350

漢字フォントは以前利用実績のある日本語フォントROM GT20L16J1Yを利用しました。
スイッチサイエンスで購入できます。使い方もホームページで紹介されています。

Dscn4348

実際の動いている映像


今回の実装は、ArduinoのI2Cスレーブ周りのバグとIchigoJamのI2Cのバグで
ちょっとハマりました。

ArduinoのI2C(wire)ライブラリのスレーブ処理に不具合があるのは、既知でしたので
パッチを当てたのですが、write関数のバッファリングの作りが甘く、実質32バイト
までしか送信出来ないようです。正しい送信が出来きないのに、正常終了を返して
ました。

また、IchigoJamからI2CRコマンドで、引数のコマンド部のデータ長が4バイトを超えると
データの内容が壊れて正しい送信を行うことが出来ません。

ロジックアナライザーを使って、原因がわかり何とか対処出来ましたが、
本来I2CR命令1回実行すればよいところを、I2CW命令1回、I2CR命令24回という
面倒な処理となってしまいました。
Arduinoは、試作にはお手軽ですが標準ライブラリのいくつかは作りが甘いです。
試作環境はArduinoではなく、別環境にした方がよさそうかもしれません。

IchigoJamでの漢字文字列は、コメント部に記述しています。

01

文字列を扱えないのですが、プログラム内の文字列格納アドレスは分かります。
下記の格納形式なので、



文字列は、
プログラム格納領域先頭アドレス #C00 + 行番号2バイト+長さ1バイト +  ’文字1バイト
となり、#C04から取得できます。

このソースファイルをIchigoJamにシリアル通信で転送しています。

最終的には次の2のIC+抵抗2本の基板実装を予定しています。

Dscn4346

2016/04/12 追記

LCP810ではメモリ(SRAM)の容量とI/Oピン数的に実装が厳しいので
Arduinoの小型版またはATmega328にて実装に切り替えました。

続き
  IchigoJam用漢字フォントモジュールの製作 その2

2015年11月22日 (日)

微妙に仕様の異なる3.5mm 4極ミニプラグ接続AVケーブル

形状が同じでも、4極プラグに割りあってられている信号が微妙に異なるようです。
家にあった3本全て異なります。

01
プロペラ クイックスタートボードヒューマンインタフェースボード
ラズパイ2 用のAVケーブルを接続したのですが映像が出ません。

そこで、このあたりの仕様を調べてみると、統一された規格は無いようですが、
一応、2つ「OMTP」と「CTIA」が規格があるようです。
以下、「通信用語の基礎知識」 4極ステレオミニからの引用です。
プラグ先端から割り付けられている信号

OMTP(Open Mobile Terminal Platform)
  Left
  Right
  Mic
  Ground

CTIA(Cellular Telephone Industry Association)
  Left
  Right
  Ground
  Mic

Grandの位置が違うのが致命的です。これは注意が必要です。
Grandさえ正しければ、接続を入れ替えるだけで多分利用出来るでしょう。

実際に製品毎にどの仕様が採用されているかを調べてみました。

・Raspberry Pi Model B+
下図は公開されている回路図の抜粋です。

02
先端からオーディオLeft、オーディオRight、Ground、コンポーネントビデオ出力です。
CTIAに近いです。マイクの代わりにビデオ出力になっています。

・プロペラ ヒューマンインタフェースボード

03
先端からオーディオLeft、オーディオRight、コンポーネントビデオ出力、Groundです。
OMTPに近いです。マイクの代わりにビデオ出力になっています。

iPhoneも4極のプラグが使われているようです(持っていないので詳細不明です)。
先端からオーディオLeft、オーディオRight、Ground、MIC(リモコン)のようです。
CTIAっぽいです。ただし、MICがリモコンとしても使うようなので若干異なるようです。

実際にamazonで販売されている製品を見てみました。

04

CTIAのようです。仕様名の記載はないですが、
商品説明にちゃんと信号の割り付け仕様が明記されています。
仕様名が浸透していない現状では、この表記の方が分かり易いですね。

05_2

上記の商品も、信号割り付けを記載。CTIAのようです。

06

同じく、上記の商品も信号割り付けを記載。CTIAのようです。

07_2

上記は、仕様(規格)表示の上、信号割り付けを表示しています。
OMTP仕様で、私のプロペラ ヒューマンインタフェースボードに使えます。

08

中には、仕様等の記載がない商品もあります。
上の商品は「映像が出ない」のコメントがあり評価も低めです。
追記:
よく読むと説明書きがありました。購入者が仕様の違いを理解していないで
利用したようです。

CTIAの商品が圧倒的に多いようです。

うちの家では4極ミニプラグ接続AVケーブルを使う機器として、
ビクタービデオカメラ、ポータブルDVD 2台、ラズパイ、プロペラボードがあります。
ビクタービデオカメラ、ポータブルDVDの仕様は不明です(たぶんCTIA)。

ケーブルにラベルを貼って管理する必要がありそうです。

2015年11月20日 (金)

Propeller始めました(7) DIP版 最小構成の実装

プロペラDIP版 最小構成(外付けメモリEEPROM、水晶発振子なし)の実装です。

内部CR発信を使ってのシステムクロックは12MHzとなります。外部クロック利用時は
最大80MHzです。パソコン開発環境からプロペラのメインRAM上にプログラムを転送
して実行します。

Dscn4311

回路図



結線図



部品一覧

※1  本来は純正品 「Propeller Plug」を利用しますが、シリアル通信可能な製品で
       代替えできます。DTR端子をプロペラのRESn端子に接続します。
      

CR発信の場合、シリアル通信関連のライブラリを使った通信が正常に動作しません。
外付けの水晶発振子 5MHzを付けた方が良いですね。

動作確認Lチカプログラム

04

2015年11月19日 (木)

Propeller始めました(6) 演算用レジスタが存在しない

Propeller のデータシートを読んでいて演算用レジスタが無いことに衝撃を受けました。

8コアのそれぞれにあるRAM(2kバイト)領域において、
   mov アドレス1,  アドレス2
   add  アドレス1,  5

      ・・・・

といった具合に、レジスタを介さずに領域間で処理できます。

実際にはアセンブラではラベルを利用するので、
   mov my_value,  your_value
   add 
my_value,  5
     ・・・・
my_value   res 1
your_value res 1

と可読性が良くなります。
発想を変えると無いのではなく、各コア上のRAM領域が全てレジスタとも言えます。
32ビットCPUなので512個がレジスタとなります。
メインRAM間での直接演算や転送は出来ず、必ずコア上のRAMを経由しないと
いけないようです。

レジスタが512個もあるので、値を退避する必要がなく、POP/PUSH命令が存在しません。
レジスタを意識する必要もなしです。

では、割り込み処理等はどんな挙動になるのか(通常ならレジスタ退避とかやるので)
疑問に思い調べてみると、なんと、このプロセッサは割り込み機構を持っていません。
その変わり異常に高機能なwait命令群や、同期をとる命令やレジスタが存在します。
まだ勉強不足ですが割り込みのようなイベント処理は、高度な条件付きwaitを使って
別コアの実行の停止・再開を制御して実装しているのだと思われます。

精度の高いwait命令使ってループさせればインターバル処理や、ポーリングによる
データ受信や変化の検出が可能ですね。処理は別コアに振れば分けですし。
他のコアにイベントを発生させられますね。
色々と斬新なプロセッサです。

2015年11月18日 (水)

Propeller始めました(5) Parallax社純正ボードを購入

Parallax社純正ボードを購入しました。

マルチコアデベロップメントボードとヒューマンインタフェイスボードです。

Dscn4303

合体して利用できます。

Dscn4305

VGA出力、ビデオ・オーディオステレオ出力、P2/2マウス・キーボード、赤外線IR、
マイクロSDカードの利用が可能です。オープンソースハードウェアなので回路図も
公開されています。

USBホスト機能も実装した方がいらっしゃるようで、そのうち試してみようと思います。

開発スタンスとしては、ボードで試作、必要機能をDIP版で機能をチョイスして実装
です。

Arduino互換機と比較すると一回り大きい感じです。

Dscn4309

CPUが8個搭載なので、Arduinoの8個分は並列処理出来ます(たぶん)。

2015年11月15日 (日)

Propeller始めました(4) Propeller IDEを試してみる

標準開発環境 Propeller Tool v1.3.2はWindowsにしか対応していない、日本語環境だと
フォント表示がおかしい、日本語入力時は画面左上での入力となる等問題があります。

このため、私は別の開発環境 BST(Brad's Spin Tool)を利用しています。

この問題をParallax社が意識しているのか、新しい開発環境が公開されています。
Propeller IDEという環境です。まだバージョンが0.33なのでこれから色々と機能を追加して

いくみたいです。

PropellerIDE a simple, fun programming environment for the Propeller
http://developer.parallax.com/projects/propelleride/

実際にWindows 10環境で試してみました。
コンパイルして、プログラムの転送は問題なく動作しました。

Propeller IDE

フォントも変更できるようになりました。
特に目立った不具合はありません。環境はこちらに切り替えようと思います。

サポートしている環境は下記の通りです。

02

ラズパイにも対応しているようです。


2015年11月14日 (土)

Propeller始めました(3) VGA出力を試してみる

プロペラでVGA出力を試してみました。前回の回路に、
公開されている、デモボード回路「Propeller Demo Board Rev D/E/F Schematic」を参考にして、
VGA端子(D-SUB15ピン)と、マウス端子(PS/2)を追加しました。

Propeller Demo Board Rev D/E/F Schematic

実装すると、こんな感じになりました。

Dscn4292

VGA端子はこんな感じでジャンパワイヤーを使って繋げました。

Dscn4291

VGA出力ライブラリはいくつか種類がありますが、1280x1024の解像度のものを
試したみました。

ライブラリのデモプログラムを転送して動かすと、失敗することなく
一発で動作しました。しかも、映像が予想以上に綺麗です。
パソコンで表示しているのと同じレベルの綺麗さです。

Dscn4300

モニターは 10インチ小型液晶モニター(1024x768)を使用しています。

Dscn4299

テキスト表示80x32で色が64色利用出来ます。マウスも問題なく動きました。
マウスカーソルの表示も可能です。

実際の動作の雰囲気です。マウスカーソルがの動作が分かると思います。

他の解像度のライブラリもいくつか試してみました。

Dscn4296

1600x1200表示は、モニタの解像度が1024x768のためちょっと潰れています。

Dscn4297

やりたいこと(安価にGUIを作る)が出来ることが分かりました。
プロペラCPUは720円(秋月電子)とちょっとお高いですが、お値段以上に使えます。

次は、開発まわりのノウハスを習得していきたいと思います。

2015年11月12日 (木)

Propeller始めました(2) TV出力を試してみる

まず、一番やりたかったビデオ出力を試してみました。
前回の回路にビデオ出力端子を追加しました。

下記のSchematics for Spin Tutorial掲載の回路図をブレッドボード上に実装します。

01_2

1.1kΩの抵抗は無いので2.2kΩは並列にして1.1kΩとしました。
270Ωは120Ωと150Ωを直接接続して270Ωとしました。

実装はこんな感じです(CPUに自家製のラベルをはりました)。

Dscn4287

ビデオ出力ライブラリのサンプルプログラムをいくつか実行してみました。

カラーパレット表示
マウスを接続して操作出来るようですが、PS/2ポートは実装していないので
操作は出来ません。



次にキャラクタ表示
40x16のキャラクタが表示できます。

Dscn4278

次にグラフィック表示

実際はうねうねと動いている映像です。

Dscn4282

今回はビデオ端子出力でしたがVGA出力も可能です。
それも部品が揃い次第試したみようと思います。

追記
プロペラのデータシートには”8個の内部コアCPU毎にビデオ信号ジェネレータを持つ"
記述があります。本当なのか、サンプルプログラムを修正し、ビデオ端子を1つ追加計2つにして
試してみました。同時に異なる映像を2つ出力です。

Dscn4289

できちゃいました。これはすごい。1つをデバッグ情報表示用とかに利用できそうです。


2015年11月10日 (火)

Propeller始めました

今更感がありますが、Propellerを始めました。CPU単体のP8X32A-D40を購入。

あまり人気がないようですが、面白そうな思想のマイコンです。
(秋月電子で買いましたが、価格ラベルの変色が人気の無さを物がってています)

Dscn4270

PropellerはアメリカのParallax社の製品です。Arduinoと同じオープソースハードウェアで、
開発ツールが無料公開されていて、回路図等も公開されています。

早速情報を集めてみようと探してみると
国内で人気無し状態なのか、日本語で記載のドキュメント類があまりありません。
英文のドキュメント類を電子辞書を片手に読み漁っている状況です。

結局、ドキュメントしてはPropeller Toolに付随するPropeller Helpが一番分かり易いと判明。

04

情報てんこ盛りで使いやすいです。
同様の情報が公式サイトにもあります。
Propeller Q&A  http://www.parallax.com/propeller/qna/

色々とユニークな思想で魅力的な製品なのですが、なぜ人気がないのでしょう。
非常に疑問です。

これから、しばらくはこいつで遊ぼうと思います。

まずは最初の儀式、Lチカ。開発環境のPropeller Toolをインストールして
付属のPropeller HelpのSpinプログラミング チュートリアルの
サンプル回路をブレットボード上に組み、サンプルプログラムを実行してみました。

Schematics for Spin Tutorial掲載の回路図

01

上記の回路に同ページのLEDの回路を追加しています。

02

実際に組み上げた回路

Dscn4274

プログラムのを書き込み実行すると、あっさりとLチカ出来ました。
プログラムの書き込みには純正の「Propeller Plug」が必要とかと思いきや、
手持ちのUSBシリアル変換モジュール(Silicon Labs製CP2102搭載)で書き込み出来ました。

Dscn4277

ただし、3.3V出力でRXD、RXDの他にDTR(リセット用)が必要となります。

Lチカプログラムはこんな感じです。

PUB Toggle
  dira[16]~~
  repeat
    !outa[16]
    waitcnt(3_000_000 + cnt)

Spinというプログラミング言語が標準の開発言語となります。
C言語やアセンブラでの開発も可能なようです。

開発環境はPropeller Toolはこんな感じです。

02

使い勝手は悪くないのですが、日本語環境で使う場合、テキストエディタ部の
フォント表示がおかしいです。文字が重なったり、欠けたりします。
これはちょっとエディタとしては使えない。
また、Windows版のみでMacやLinuxでは利用出来ないようです。

この問題の解決には現状は、Windowsのシステムロケールの設定を英語にしないと
ダメのようです。

実際に解決するか、Windows 10にてコントロールパネルの地域を選択し、
システムろけーるを英語(米国)に変更してみました(要再起動)。

05

再起動後、OSが英語化されると思いきや、デスクトップ環境は全く変化ありません。
Propeller Toolを起動して確認してみると、フォント表示が正常になりました。

06

問題なさそうなのでシステムロケールを英語(米国)にしたまましばらく使ってみます。
 
  2015/11/11 追記
    やはり、色々と問題ありでした。メモ帳でシフトJISで保存したテキストファイルを開くと、漢字が
    表示出来ません。また、Word等でフォント一覧のフォント名が"MS Mincho"とかローマ字表示になります。
    古いアプリは日本語が正しく表示出来ません。元に戻して利用した方がよさそうです

別の方法でアプリケーション別にロケールを変更できる Microsoft AppLocale Utility
試してみましたが、こちらは改善されませんでした。Windows 10には対応していない
のかもしれませんね。

別の開発環境 BST(Brad's Spin Tool)も試してみました。

03

こちらのツールの方も使えそうです。Mac、Linux版もあります。

2015年11月 9日 (月)

IchigoJamでLEDドットマトリックスを制御する

IchigoJamでLEDドットマトリックスを制御してみました。
以前Arduinoで試したHT16K33というLEDドライバICを利用しました。

Dscn4257

まずは、ブレッドボードで実装してみました。I2C接続のためIchigoJamとの結線は
3本で済みます。取りあえず "さいたま" と表示。
HT16K33一つで8x16ドットのマトリックスを制御できます。2個使って8x32にしてみました。
最大で8個接続出来るので、やろうと思えば8x128ドットも行けるでしょう。

問題なく制御できそうです。
そこで、ユニバーサル基板上に実装してみました。実装はIchigoJamからの電源供給で
駆動できる8x16ドットとしました。

ごちゃごちゃ配線がすっきりで4線のみです。

Dscn4264

裏はこんな有様です。ピンセットを使ってのはんだ付けで、意外と時間かかりました。
もっと楽な実装方法はないのだろうか.

Dscn4266

IchigoJamに繋げると、奇跡的に一発で動作しました。

Dscn4269

デモ動画


利用した部品
  ・LEDドライバIC          HT16K33 1個
  ・8x8LEDマトリックス    HSN-0788UR 2個
  ・抵抗 2.2kΩ 1/6W 2個
  ・その他 基板、線材、はんだ

回路図
Photo_2

1)結線表
  配線数が多いため、HSN-0788URとHT16K33の結線表を作成して配線しました。

Photo

IchigoJamのプログラムソース

10 CLV
110 POKE #700,#21,#81,#E1,#00
120 FOR M=#70 0TO #702
130 R=I2CW(#70,M,1,#700,0)
140 NEXT
500 '
510 A=RND(28)*8+1824:B=RND(28)*8+1824
530 FOR I=0 TO 7
540 [I]=PEEK(A+I)<<8+PEEK(B+I)
550 NEXT
560 R=I2CW(#70,#703,1,#800,16)
570 WAIT 10
580 '
590 FOR I=1 TO 16
600 FOR J=0 TO 7
610 [J]=[J]<<1
620 NEXT
630 R=I2CW(#70,#703,1,#800,16)
640 WAIT 5
650 NEXT
660 GOTO 500

プログラムは、意外と短いです。
配列[0]~[7] パターンデータを格納しています。[0]がライン1の横16個分、
[1]がライン2の横16分.. [7]がライン7の横16個分のドットデータの状態です。

表示更新の都度、そのデータ16バイトをI2CWコマンドでドライバICに転送しています。
[0]の内容はアドレス#800に格納されているのでそのアドレスを指定しています。

110~140行はICの設定処理でシステムオシレータON、点滅周期設定、明るさ設定を
行っています。


追記 2017/06/28

同じドライバICを使ったモジュールがaitendoにて入手できます。
8x8ドットですが、お手軽に利用出来ます。
IchigoJamでaitendoのI2Cマトリックスキットを動かしてみました

2015年11月 6日 (金)

IchigojamのOUT命令の動作確認

最新ファームウェアV1.1beta10(FacebookのIchigojam-FANでのみ公開)では、
11ポートのデジタル出力が可能とのことなので、確認してみました。

利用するポートは下図のOUT1~OUT11です。

Ichigojam121_2

OUT1~OUT11に1をセットして出力をON(3.3V)にしたときにLEDが点灯するよう、
下記の結線でLEDを接続しました。LEDに2mA程度流すよう、1KΩの抵抗を入れています。

Ichigojamの基板に乗っている3.3Vを生成する三端子レギュレータは出力50mAまで
なので、11本同時点灯時に流れる電流には注意が必要です。

02

実測ではVf=1.65V、1本当たりに流れる電流は1.68mAでした。
11本を同時点灯しても18.5mAとなります

プログラムは単純に11ピンに1をセットします。

03

実際に動かすと次のようになりました。

01

OUT10が期待通りに点灯してくれません。
理由が分からないので、Ichigojam-FANで教えて頂きました。

5ピン(OUT10)は特殊でオープン・ドレインとなており、吸い込み(シンク)専用の
利用となるとのことです。
OUT10,1としても、ハイインピータンスになり、3.3Vの出力は出ません。

そうと分かれば、LEDの結線を次のように変更します。

04

OUTn, 0 の時に点灯、OUTn,1で消灯とします。

05

動かしてみると、期待通りの動作をしました。

06

次に、OUT命令の第二パラメタを省略すると複数ポートに一括出力する仕様なので
試してみると、

07

ちゃんと一括出力出来ました。

08





2015年11月 1日 (日)

IchigoJamのマシン語呼び出しの機能追加の確認

IchigoJamの新しいファームウェアV1.1 beta10では、マシン語呼び出しにおいて、
呼び出される側で、仮想メモリ領域の先頭実アドレス、フォントデータの先頭実アドレス
が拾得出来るようになりました。

BASICで
   U=USR(#700, N)
と実行すると、
仮想アドレス#700に格納されているマシン語プログラムに対して、
レジスタに次の値がセットされて呼び出しが行われます。
  R0  : USR関数の引数N (16ビット)
  R1  : 仮想アドレスの先頭実アドレス (BASICの#000の実アドレス)
  R2  : フォントデータの先頭実アドレス

また、USR関数の戻り値としてR0の値が返されます。

実際に次のC言語で作成した関数を呼び出して確かめてみます。
下記の関数は、指定した文字を画面に疑似グラフィック文字を使って
指定した位置に大きく表示します。

#include <stdint.h>
#define VRAM_ADR	0x900 // VRAM先頭アドレス
#define VAR_ADR		0x800 // 変数格納アドレス
#define CHR_BNK		0x80

// 仮想VRAM=>VRAM 疑似グラフィック展開
uint16_t draw_font(uint16_t c, uint8_t* m_p,  uint8_t* f_p) {
	uint16_t* 	h_p = m_p + VAR_ADR; 	// 変数格納アドレス
	uint8_t* 	v_p = m_p + VRAM_ADR; 	// VRAMアドレス
	uint8_t		d;
	int i,j;

	f_p+=c*8; 	// 指定フォント格納アドレス
	v_p+= *h_p; // v_pに[0]の値(横表示位置)を加算
	v_p+= *(h_p+1)*32;  // v_pに[1]*32(縦表示位置)を加算 
	for (i=0; i<4;i++) {
		for (j=0;j<4;j++) {
			d = ( *f_p >> (6-(j<<1)) ) &3;
			*v_p = (d>>1 | (d&1)<<1) + CHR_BNK;
			d = ( *(f_p+1) >> (6-(j<<1)) ) &3;
			*v_p += (d>>1 | (d&1)<<1)<<2;
			v_p++;
		}
		v_p+=28;
		f_p+=2;
	}
	return 0;
}

関数draw_font()の引数cには、レジスタR0の値、m_pにはR1、f_pにはR2の値が
セットされて呼び出されます。

この関数をコンパイルして、マシン語コード部を生成します。
この作業がちょっと面倒なので、今回はFacebookの公開グループIchigoJam-FANにて
公開されているツール IJBin2Pokeを利用させて頂きました。

01

便利ですね。
C言語で記述した部分をコンパイルして、BASICからマシン語として呼び出し可能な
ソースに変更してくれます。

出力したソースをコピペして、BASICのプログラムを完成したのが次のソースです。

1 'draw font
2 CLS:CLV:CLP
10 poke#700,#80,#23,#c0,#00,#10,#18,#90,#22
20 poke#708,#f0,#b5,#06,#1c,#1b,#01,#cb,#5a
30 poke#710,#12,#01,#9a,#18,#19,#4b,#cb,#5a
40 poke#718,#5b,#01,#d3,#18,#c9,#18,#08,#36
50 poke#720,#00,#22,#06,#25,#04,#78,#53,#00
60 poke#728,#eb,#1a,#1c,#41,#24,#06,#24,#0e
70 poke#730,#01,#27,#9c,#46,#23,#1c,#03,#3d
80 poke#738,#3b,#40,#2c,#40,#fc,#40,#bb,#40
90 poke#740,#65,#46,#23,#43,#80,#3b,#1b,#06
100 poke#748,#1b,#0e,#8b,#54,#44,#78,#2c,#41
110 poke#750,#03,#25,#24,#06,#24,#0e,#27,#40
120 poke#758,#25,#40,#7f,#00,#6d,#08,#3d,#43
130 poke#760,#ad,#00,#5b,#19,#8b,#54,#01,#32
140 poke#768,#04,#2a,#da,#d1,#02,#30,#20,#31
150 poke#770,#b0,#42,#d5,#d1,#00,#20,#f0,#bc
160 poke#778,#02,#bc,#08,#47,#02,#08,#00,#00
170 '
200 FOR [1]=0TO 23 STEP4
210 FOR [0]=0TO 31 STEP4
220 U=USR(#700,237):WAIT 10:U=USR(#700,0)
230 NEXT
240 NEXT
250 GOTO 200

プログラムは、拡大表示したキャラクタが動く簡単なものです。

BASICからのマシン語呼び出しにおいて、次の値を渡しています。
  変数 [0] 横位置
  変数 [1] 縦位置
  USR関数の第二パラメタに文字コードを指定

キャラクターコード237(宇宙人?)を指定しています。

02

関数draw_font()で仮想アドレスの先頭実アドレス、フォントデータの先頭実アドレス
を取得して、画面に表示することが出来ました。

« 2015年10月 | トップページ | 2015年12月 »