電子趣味の部屋

電子系のガジェットやアプリ開発等の趣味の話題を書いてます

MSXで遊ぶ! BASICプログラムのROM化

MSXでBASICプログラムをROM化して遊びたいと思って調べてたところ、手順を書いたページがありました。
MSX Datapack3章 カートリッジソフトの作成法
このページのBASICプログラムのROM化の方法に書いてあるIDの作成をそのままBASIC画面で実行するとメモリの内容が書き変わってしまい、なかなか上手くいきませんでした。
要はBASICのテキスト格納先頭アドレスを8021Hにして、先頭の32バイトを書き換えれば良いことが分かり、一度8000H〜BFFFHで保存してPC上でバイナリエディタで書き換えてれば成功しました。
このやり方の手順を紹介します。


BASICのROM化方法

BASICプログラムを用意する

今回は例として1から10を表示する簡単なプログラムを作成して、"test1.bas"というファイル名で保存しました。

10 FOR I=1 TO 10
20 PRINT I
30 NEXT
save "test1.bas"

BASICのテキスト格納先頭アドレスを変更してバイナリを保存

BASICのテキスト格納先頭アドレスを8021Hに変える。

POKE &HF676,&H21:POKE &HF677,&H80:POKE &H8020,0:NEW

これは必ず1行で実行してください。

保存したBASICプログラムをロード

load "test1.bas"

BSAVE形式で8000H〜BFFFHを保存する
今回は"test1.bin"というファイル名で保存しました。

bsave "test1.bin",&h8000,&hbfff

PC上でバイナリを編集

保存したBSAVE形式のファイルをPC上の適当なバイナリエディタを使用して編集します。
ここで行うことは2点です。
・BSAVE形式のヘッダ部分(先頭から7バイト)を削除する
・ID部分(BSAVE形式のヘッダ部分削除後の先頭から32バイト)を下の値に書き換える

41 42 00 00 00 00 00 00 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
アドレスの00,01,80,09以外はすべて00です。

今回は編集後のファイルを"test1.rom"というファイル名で保存しました。

編集前(test1.bin)


編集後(test1.rom)

実際に動かしてみる

作成したROMファイル(test1.rom)をエミュレータ(blueMSX)で動かしてみました。

無事にBASICプログラムが実行されています。

Mega Flash ROMに書き込んで実機で動かそうと思いましたが、リセットを繰り返すばかりで上手く実行できませんでした。これに関して、もう少し調査が必要そうです。


80年代マイコン大百科

80年代マイコン大百科

レジェンドパソコンゲーム80年代記

レジェンドパソコンゲーム80年代記

  • 作者: 佐々木潤,レトロPCゲーム愛好会,エマ・パブリッシング
  • 出版社/メーカー: 総合科学出版
  • 発売日: 2014/12/18
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログ (1件) を見る
激レア! お宝発掘!! 80年代マイコン読本

激レア! お宝発掘!! 80年代マイコン読本

Unicorn pHATで遊ぶまでのメモ

Unicorn pHATを入手したので、Raspberry Pi Zero W で遊んでみました。
動作させるまでのメモを残します。
GPIOは同じなので、他のRaspberry Pi(ZERO以外でも)でも同じ手順で操作します。

GitHub(ソース)

https://github.com/pimoroni/unicorn-hat
基本的にここのREADME.mdの通りにセットアップすれば、簡単デモを動かすことができるます。

以下、作業ディレクトリを /home/pi と想定。

/boot/config.txtを編集
hdmi_force_hotplug=1
一連のファイルをセットアップ

以下のコマンドを実行

curl -sS https://get.pimoroni.com/unicornhat | bash
デモファイルを動かしてみる。

サンプルのソースファイルが、~/Pimoroni/unicornhat/examples/ にあるので、ここにある demo.py を実行してみる。

cd ~/Pimoroni/unicornhat/examples/
sudo python ./demo.py


Raspberry Pi Zero W Starter Kit

Raspberry Pi Zero W Starter Kit

ちょっと変わったTI-Nspire (CAS無し)を入手しました。TI-84 Plusにもなります

この度、電池稼働できるTIのグラフ電卓が欲しいと思い久しぶりにebayを物色して、TI-Nspire with TouchPad (CAS無し、TI-84 Plusキーパネル付き)を入手しました。送料と合わせて100$ちょっとです。

この機種を知っている人から見ると、ちょっと違和感があると思います。
国内で流通している機種はこんな色です。

全体的に黒(CASの方)、又は左右の縁が白(CAS無しの方)です。
1つ前の世代は青と白で同じカラーリングですが、キー配置が違います。
これはSchool Propertyと書いてあるのですが、教育機関等が購入するモデルらしいです。
カバーやアルファベットキー周りに黄色い箇所があるのが特徴です。

この機種はCAS機能はありませんが、キーパネルを付け替えることにより、TI-84 Plusと互換モードになるのが特徴です。
互換性は高いらしく、アセンブラプログラムも動作したり、速度もそのまま実機と同じように調整されてるみたいです。
今回この機種にしたものも元はTI-84シリーズの何か安いものが欲しいと思い物色しているときに見つけました。

nspireモードではNspire CX CASを入手したときに作ったパズルゲームを実行したところ、違和感なくモノクロに変換され表示されました。

Nspire CX CASも既にあるので、強くお勧めするわけではありませんが、特徴があり遊べる面白い機種だと思います。

Texas Instruments Nspire CX CAS N3CAS/CLM/2L1 Graphing Calculator [輸入品]

Texas Instruments Nspire CX CAS N3CAS/CLM/2L1 Graphing Calculator [輸入品]

Maker Faire Tokyo 2017 でFlashAir W-04を購入

Maker Faire Tokyo 2017に行ってきました。
FlashAirのブースで FlashAirDoujinshi4をもらい、新型のFlashAir W-04の販売も行われていたので、16GBのモデルを購入しました。

去年も頂いた記憶もある作らないで放置していたおまけ基板を今年も頂き、今度こそ作って遊ぼうと思っています。

FlashAir W-04の特徴

第4世代FlashAir W-04より

基本性能が向上

読み出し最大90MB/s、書き出し最大70MB/sの高速転送を実現しました。大容量のRAW形式ファイルを高速に保存する必要がある時、例えば高画質デジタル一眼レフカメラで連写撮影をする場合などに高い効果を発揮します。

ワイヤレスデータ転送機能が向上

新たに設計したCPUを搭載することにより、実測値で従来製品の約2.9倍となる、約31.4Mbpsでのワイヤレスデータ転送を行うことができるようになりました。

Eyefi Connected対応

Eyefi Connectedは、カメラからSDメモリカードを制御することができるカメラ連携機能です。 Eyefi連動機能搭載カメラで使用すると、データ転送中のカメラの電源が切れてしまうのを防ぐことができます。

UHS-Iインターフェイス対応

UHS-Iインターフェイス対応機器で使用すると、高速のパフォーマンスが得られます。UHS Speed Class3に対応し、対応機器で使用した場合は読み書き時に最低30MB/sの転送速度を保証します。フルHDや4K動画撮影も可能です。

安定性の向上

他の無線LANによる干渉に対しても影響を受けにくくなり、人ごみの中でも安定してデータ転送できるようになりました。

Lua関数の追加

I2C機能、日時メモ保存、無線LANのOn/Off機能などが追加され、標準ライブラリの数学関数が使えるようになりました。

共有メモリ容量アップ

共有メモリが512バイトから2Kバイトに容量アップしました。
無線側のデバイスと、ファイルの書き込みをせずに、相互にデータ共有しやすくなります。また、アップロード機能で起こりがちなFATの整合性問題を避けることができます。

WebSocketクライアントに対応(予定)

WebSocketを使うことで、相互に通信するアプリや、常時通信するアプリがより開発しやすくなります。




MSXとメガドライブの記事のまとめ

最近でもMSXメガドライブ改造の話題で来てくれる人が多いので、関連記事へのリンクを書いておきます。

何気に名プリンター PIXUS iP2700

普段プリンタは複合機EPSON EP-805A を使っているのですが、家族が寝てる時でもほかの部屋で印刷ができるようにサブプリンタを購入しました。

今回購入したのが、Canon PIXUS iP2700です。
これがヨドバシ店頭でも3,200円ほどでしたので、サブ機にはちょうど良いと思い購入してしましました。アマゾンでは3,000円を少し切るくらいの価格で販売しています。

始めは軽く印刷できるものが欲しいと思い、とにかく一番安いのを選択したのですが、価格に見合わず結構高品質で印刷されて満足しています。カラー印刷は4色インクなのでメイン機には見劣りするものの、モノクロ印刷では顔料系インクということもあり、滲みもなくかなり鮮明に印刷されます。この機種のインクは3色インクカートリッジとブラックインクカートリッジの2種類で2つのカートリッジの合計価格が5000円を超えます。設定でブラックインクのみも選択できるので、モノクロメインで使用する人はうまく節約することもできます。

Wifi接続がなかったり、排紙トレイが無かったり、機能的にはシンプルですが、あくまでサブ機としてみた場合はかなり満足できる機種だと思います。

Canon インクジェットプリンター PIXUS iP2700

Canon インクジェットプリンター PIXUS iP2700

Arduino DUEでファミコンの三角波を再現

Arduino Dueのアナログ出力でちょっと遊んでみたと思います。

ファミコン三角波を再現してみます。
この三角波は正確な三角波ではなく、16段階の階段状になっています。

音を鳴らすにはスピーカーが必要です。
Arduinoエントリーキットに入っているような圧電スピーカーが手軽です。
+極をArduino DueのDAC0へ、−極をGNDへ接続してください。

三角波を出力するソースです。

#define RANGE     4095   // 12 bits DAC

// 16段階の三角波テーブル
unsigned int buffer_tri[] = {
    15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
};

void setup() {
  // DAC解像度12bit
  analogWriteResolution(12);
  // 16段階の三角波テーブルをアナログ出力値に変換
  for (int i = 0; i < 32; i++) {
    buffer_tri[i] = (unsigned int)(RANGE * (float)(buffer_tri[i] / 15.0f));
  }
}

void loop() {
    // 実行開始からの経過時間で三角波テーブルの使う値を計算
    int times_us_one = (int)((1000000 / 440) + 0.5); // 440Hz A(ラ)の周波数
    int times_mod = micros() % times_us_one;
    int f_no = times_mod * 32 / times_us_one;
    // DAC0からアナログ電圧出力
    analogWrite(DAC0, buffer_tri[f_no]);
}

この出力結果の波形です。
(DSO203 ポケット デジタルオシロスコープでの計測結果)


きれいな階段状の三角波になっています。

これを応用すれば、自作のアナログシンセも作れそうです。

Arduino Dueは少々高価ですが、互換品も検討してみてください。
純正品とAliExpressから$15程で購入した互換品も全く同じ動作をしているので、問題はないと思います。

Arduino エントリーキット(DUE版)

Arduino エントリーキット(DUE版)