フォト
2019年5月
      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 31  
無料ブログはココログ

2019年5月19日 (日)

Arduino用 MML文演奏ライブラリの作成 その2

前回からの続きです。

Dscn1761

Arduino および Arduino STM32環境で利用できる
MML(Music Macro :ミュージック・マクロ・ランゲージ) 演奏ライブラリを作成しました。

  ・MML_Play MML文演奏ライブラリ
     https://github.com/Tamakichi/MML_Play

バックグラウンド演奏にも対応するよう、実装しましたが
実際にどこまで利用出来るかは、評価不足です。

とりあえず、豊四季Tiny BASIC for Arduino、Arduino STM32のMML文処理は
このライブラリを使って一元管理しようと思います。

今回のライブラリ作成で、次の点で少々ハマってしまいました。
1)tone()の引数durationの挙動
2)attachInterrupt()

Arduinoで周波数を指定した音だしは、tone()関数が用意されています。
出力長さを指定する第3引数 durationはミリ秒で指定するのですが、
  tone(8,400,500);
  tone(8,800,500);

と実行すると、1番目の400Hzの音出し500ミリ秒を待たずに
2番目の800Hzの音出しが実行されます。
指定時間音出し完了の上、次の処理に移ると思い込んでいました。

tone()は長さ指定しても、即時完了して次の処理に移ります。
並行動作で、500ミリ秒後に勝手に音が止まります。
ですので、1番目の音だしの処理後すぐに2番目の音出しに移り
演奏としてのタイミングが意図しないものになってしまいました。
対策としては、duration分、delay()で時間待ちする必要があります。

次にattachInterrupt()ですが、
ArduinoとArduino STM32で仕様が異なります。

Arduinoでは、
  attachInterrupt(interrupt, function, mode)
といった感じで第1引数には割り込み番号を指定します。

ところが、
Arduino STM32、micro:bit 用Arduino(arduino-nRF5) の同関数では
  attachInterrupt(pin, function, mode)
ピン番号を指定します。

Arduinoでもピン番号を指定するものと思い込んでプログラムを作成したところ
動作せず、しばらく原因が分からずハマってしまいました。

微妙に、仕様が異なるのはちょっと困りますね。

2019年5月18日 (土)

MSX casio PV-7の代替えACアダプタ

MSX casio PV-7、ヤフオクではACアダプタ無しであれば1000円~2000円程度で入手可能です。
魔改造等、実験等にはもってこいのマシンです。

Dscn1760

専用ACアダプタは、DC 10Vで 外径 5.5mm 内径 2.1mmのプラグなのですが、
外側がプラス、内側がGNDと一般的でなく通常とは逆になっています。
ちょっと入手しにくそうな規格のACアダプタです。

Dscn1757

ところが、ファミコンがちょうどこの規格のACアダプタを使用しています。
「CASIOはなんでこんなACアダプタの規格にしたのだろう」と思っていたのですが、
当時のファミコンを意識して規格を合わせたようです。

試しに、互換品のACアダプタを入手して試してみました。
新品でもamazon等で送料込みで1000円以下で入手できます。
ハードオフ等ではもっと安く入手出来ると思います。

電圧、電極、プラグ形状的には適合しており、実際に利用してみても問題無く利用出来ました。

Dscn1758

比較するとかなり小さいです。
「小さいは正義」、こちらの方が断然使い勝手が良いですよね。

Dscn1755

交換したところ、コンセント周りがスッキリしました。
今後これを使っていくことにします。

 

2019年5月10日 (金)

FUSION-C、MSXの開発環境? (3)

前回からの続きです。
FUSION-Cを使ったMSX用プログラム開発環境をWindows 10上に構築しました。

開発環境としては、
  ・テキストエディタ Sublime Text 3
  ・クロスCコンパイラ SDCC
  ・ライブラリ FUSION-C
  ・MSXエミュレータ Open MSX
  ・その他支援ツール(Hex2BIN、etc)
となります。

とりあえず、”Hello,world"を表示するプログラムを作成し、
(クリックすると拡大表示します)
02_3

ビルドしてみました。
(クリックすると拡大表示します)
09

MSXエミュレータが起動し、MSX-DOSのプロンプト状態になります。
(クリックすると拡大表示します)
10

カレントディレクトリには、コンパイルしたプログラム HELLO.COMが格納されています。
実行すると、"Hello,world"と表示されました。
C標準ライブラリを使った記述でも問題なく実行出来ました。
(クリックすると拡大表示します)
03_2

このプログラムをMSX2実機 FS-A1Fにて動作確認をしてみます。

Windows 10機にUSB接続のフロッピディスクドライブを接続して、
MSXFormで2DDフロッピディスク(以降FDと表記)をフォーマットし、
同FDにMSX-DOS、COMMAND.COM、HELLO.COMをコピーしてMSXにてMSX-DOS起動させました。
プロンプト表示状態でhelloを実行、エミュレータと同じように問題なく実行出来ました。

(クリックすると拡大表示します)
Dscn1754

これで、とりあえずはC言語を使ったMSX-DOS上で動くプログラムが作成できる環境が整いました。

このFUSION-Cの開発環境は、Repro Factoryがフリーソフトとして公開しています。
(無料ですが、ユーザー登録して0円商品の購入手続きが必要です) 

(クリックすると拡大表示します)
07

今回の環境構築では、上記の"Fusion-C Library""FUSION-C Tools-Chain"を利用しました。
"Fusion-C Library" が FUSION-Cライブラリパッケージです。
"FUSION-C Tools-Chain" には、最新版では無いかもしれませんが、
  ・テキストエディタ Sublime Text 3
  ・クロスCコンパイラ SDCC
  ・MSXエミュレータ Open MSX
  ・その他支援ツール(Hex2BIN、etc)
が含まれています。これだけで開発環境が構築出来ます。

"Fusion-C Library" にはクイックマニュアル(PDF 全108ページ)が添付されていて
これでけでも十分利用出来ます。
05_1

テキストエディタ Sublime Text 3は、デフォルトでは日本語対応していません。
私は下記のサイトの情報を参考にして日本語環境設定を行いました。
Sublime Text 3のインストールと初期設定

ちなみにこのFUSION-Cのライセンスは、次のように記載されています。
08


2019年5月 6日 (月)

液晶ディスプレイRDT193WMは15kHz対応っぽい

MSX2用に三菱電機製液晶ディスプレイ、RDT193WMを使っています。
RGB to HDMIコンバータ、HTMI to VGAコンバータを連結して映像出力しています。
このディスプレイはHDMI端子がありません ;^^

最近、ネットで
  「三菱製の液晶ディスプレイは非公式で15kHz、24kHz(水平同期信号)に対応している製品が多い」
とのうわさを聞き、
うちのディスプレイも対応しているか、ちょっと実験してみました。

ブレッドボード上にRGB信号をVGA信号に変換する回路を組み試してみると ... 

Dscn1743

表示出来ました。
う~ん、いいですねぇ。
コンバータが無いので表示の遅延も発生しないですね。

ただし、若干映像に縦縞があります。
ブレッドボードのためノイズを拾いやすいのかもしれません。

Dscn1747

水平同期信号は15.9kHzと認識、200ライン系もOKのようです。

Dscn1745

この子(ディスプレイ)、いいですね。
HDMI端子が無く、使い勝手が良くないので処分を考えていたのですが、
捨てなくて良かったです。
レトロPCやゲーム機のモニター用に需要がありそうです。

ちなみにRGB信号からVGA信号への変換は、下記のサイトの情報を参考に実装しました。
特に文献2)は方式を理解することが出来き、大変参考になりました。

参考にした文献
・1)LCD-8000VとMSX: うみゅ
      http://miyako.asablo.jp/blog/2015/06/21/7677303
・2)試運転の資料館 - 複合同期信号分離出力化改造工事設計図
      http://shiuntenlos.ie-yasu.com/psma0020.htm
・3)MSX2 RGB端子 ピンアサイン
      http://gamernium.com/archives/1472
・4)Wikipedia - RGB21ピン
      https://ja.wikipedia.org/wiki/RGB21%E3%83%94%E3%83%B3
・5)Arduinoを用いたVGA映像信号の出力
      http://www.net.c.dendai.ac.jp/~anada/

文献2)「試運転」さんの公開回路図を参考にして、下記の回路図を起こし、
ブレッドボード上にて実装しました。

Photo_1

マルチバイブレータ(74HC221)で水平同期信号のタイミングとパルス幅を確保しています。
時定数を決める抵抗は半固定抵抗に変えて、同期信号のタイミングを調整出来るように
修正した方が良さそうです。

ブレッドボード上ではなく、フレキシブル基板上に実装してケースに入れて
使い勝手を良くしようと思います。


追記 2019/05/09

色々と調整したのですが映像はコンバータ(映像はRGB to HDMIコンバータとHTMI to VGAコンバータを連結)を
利用した方が鮮明で映りが良いです。





2019年5月 2日 (木)

ヤフオクでFS-A1Fを入手したのですが...

ヤフオクでパナソニックのMSX2機 FS-A1Fを入手しました。

Msx

私が入札後、2人の方が競り合っていたのですが何故か、2人ともキャンセルのため
格安で落札出来ました。ラッキー!

FS-A1Fが到着し、動作確認をしてみると、
Dscn0067

画面がまともに表示出来ません。ありゃ..

Dscn9984

実際の起動の様子



はずれを引いたっぽいです。
まあ、2,100円なのでパーツ取り用でも元はとれるでしょう。

試しに、フロッピーディスクドライブにフロッピーディスクを入れて起動してみると
モーターが高速回転しているような感じです。
恐らく内部のベルトが切れていると思われます。

とりあえず、分解してしてみました。

Dscn9988

不具合の発生率が高いHIC-1と呼ばれているボードのコンデンサを見ると、なんとなく怪しい。
根元が錆びているような、液漏れしているような感じです。

Dscn9995

とりあえず、コンデンサを取り換えてみました。

Dscn0021

再度動作確認してみたのですが、状況は「変わらず」でした。残念。。
ここが原因では無いようです。

改めて画面の表示を見て分析してみると、
表示内容の一部が壊れているような感じです。映像出力の同期は出来ている、サウンド出力もOK。
もしかしたらVRAMが怪しい? そこでDRAMを交換してみました。

基板上のDRAMを4つ交換しました(下の写真)

Dscn0044

この交換、意外としんどかったです。
ボードが鉛フリーはんだ?のようで、はんだが溶けにくいです。
結局、DRAMをニッパーで切り離したのち、新しいDRAMを取り付けました。

Dscn0034

再度電源ON、やっと見慣れた画面が表示出来ました。やったー

Dscn0051

パナソニックのMSXではおなじみのコックピット画面が立ち上がりました。

Dscn0048

BASICに移動すると、BASICも起動できました。う~ん、いいですねぇ

Dscn0054

次にフロッピーディスクドライブを修理してみました。

やはりベルトが切れています。

Dscn9979

分解してベルトの破片を取り除きます。
粘土のように柔らかくなっていて、へばり付いていて取り除くのに意外と苦戦しました。

Dscn9997

フロッピーディスクドライブの解体は、こちらを参考にしました。
 (こちら「Restoring a MSX2 Panasonic FS-A1F」が元ネタっぽいです)
下の写真の真ん中のネジは外すとダメとのことです。

Dscn9998

モータについているプーリー(スピンドル?)にべっとりとベルトが溶けてくっついているのを剥がすのが大変でした。

Dscn9999

ベルトはとりあえず、モビロンバンドで代用してみました。
モビロンバンド 折径80mm 黒  50g
MSXの修理ではメジャーな方法ですね。

Dscn0068

組立てて、再度動作確認、フォーマットで動作確認。
最初はエラーとなったのですが、数回やってみるとベルトが馴染んできたのか、
何回やってもフォーマットエラーが発生しなくなりました。やったー

Dscn0061

フロッピーディスクドライブの修理はとりあえず、これで良しとします。
ヘッドは問題ないようなので、一安心です。
利用で難儀するようであれば、ちゃんとしたベルトを調達して対処したいと思います。

ちゃんと動くようになったので、次は掃除です。
キーボードがかなり汚いです。キーボードを1つ1つ外して掃除しました。

Dscn0028

Dscn0027

Dscn0026

修理完了、いい感じになりました。
キーボードは全て問題なく文字入力出来ました。

FS-A1F、フロッピーディスクドライブ付きでコンパクトなボディ、
重くもないので、使いたいときに取り出して使えてます。

  Dscn1737


追記 2019/05/03

メインRAM 128kバイト化の改造をやってみました。
下記の記事を参考にさせていただきました。
 ・MSX - FS-A1Fについて - FS-A1F RAM増設
    http://usbsecretbase.michikusa.jp/a1f/index.html

Dscn0042

同記事で公開しているメモリチェックプログラムを利用して確認したところ、
増加分のメモリが認識されているようです。

Dscn0045

「NG:8」 の表示は無視して良いとのことです。

«Wordで游明朝を使って行数を増やすと行間が広がる問題