CASIO AI-1000を使ってみる!その11

突然、動作が不安定に!!

先日から活用を始めたHD61700クロスアセンブラ(hd61)、とっても便利に使ってる!!

実は私が開発してた逆アセンブラは(後になって気がついたけど)KC形式で出力するようになっているため、クロスアセンブラと親和性が高い。その気になればhd61でアセンブルする事ができるソースも出せる気がしてる(今のところ予定なし)。

 

使い勝手の良い開発環境が作れたので、動作確認もたいしてせずにホイホイとコーディングをしていったんだけど…ある時を堺にAI-1000へ送り込んでも動かなくなってしまった!

実行するとAI-1000が完全ハングアップしたり電源が落ちちゃったり、不安定を超えた安定の不動作!

 

原因を絞り込むためプログラムをどんどん削っていくが、もはや何をしても動かない状態になってしまった!こんな不安定は初めて!!

うーん、こうなってくると本体側の問題なのかも知れないなぁ…と思い、本体の電池を交換したりFA-7をまるごと交換してみたりとやってみるが、何をしても安定した不動作。

 

1時間以上格闘していたと思うけれども、理由がさっぱり分からなくて途方に暮れた!

そして自分が何をしたのかを思い出しつつ(こういうのは先にやれ)、行き着いた先がQuickLoaderのBASICプログラムだった!

 

実はロードするアドレスやサイズなどを表示するコードを、BASICで1行追加してたのだ。

それ自体は問題なく動いていたのだけど、どうやらコイツが悪さをしてるらしい。

でもQuickLoaderってDEFCHR$で変更されるメモリ領域を利用してるんだから、表示が問題になることはないはず…DEFCHR$した文字も表示してないよ???

 

…と思って、改めてQuickLoaderの仕組みを調べてみたら…(^^;;;;

あ、これはビットマップ領域(例の&H0201〜)にプログラムを転送し、そこでマシン語プログラムを動かしてたのね!!!

 

……書いてる意味がおわかりいただけるだろうか?(^-^;;

つまりマシン語プログラムを格納してあった領域を、私が文字表示なんていう余計なモノを入れてしまったばかりに、その領域を破壊してたのだ!そして壊れたデータが入ったアドレスにマシン語コールをしてハングアップする…という事だった!

内容を理解せずに余計な事をしてはいけないんだな…とキモも命じた(T-T)

 

グラフィックを表示するよ!

適当な幾何学的な模様じゃなく、豆腐じゃなく、なにか意味のある絵を表示してみたい!

いつも困るのが、適当なグラフィックデータを持ち合わせていないこと(T-T)

しかもモノクロのデータとなるとPC-8001(PCG)とかMZ-80Bとか、そういう機種のデータを流用する事になる。

 

今回も、以前PC-8201やPC-1600Kでも表示していた麻雀牌を表示させてみるよ!

手持ちのデータがホント少ないのよ(T-T)

困ったことにグラフィックのデータ形式が上記2機種とは異なっているため、元データからのコンバータを書かねばならない。この辺りはもう何度も何度も書いているのでサクっと変換しよう。そういう汎用コンバータを作ってもいいかもな…と思ったw

 

f:id:PocketGriffon:20210730065645j:plain

こんな感じにアセンブラ形式で出力してやれば、そのままhd61でinclude出来る。

そういえばhd61はバイナリファイルもinclude(incbin)出来る。この機能、他のアセンブラでも使ったことがあるけれども、ものすごく便利!全アセンブラで対応して欲しいw

 

そして実際の描画プログラムをこのブログの最後に載せてみる。プログラムを載せるのは、プログラマとしての威厳を損ねる可能性も秘めてる(そこまで?!)のでドキドキするが、CPU初心者のうちは良いだろうw

 

乗算命令の無いCPUの場合、どうしても座標計算に時間とコードサイズが掛かる。特に今回は横方向が192なので少々面倒。テーブル化しちゃった方がいいのかもなぁ…。

 

今は縦方向が8の倍数でしか描画出来ないけど、ドット単位に描画出来るようにしてみたいね…。これは近々やってみよう(^^)

 

シリアルから転送した後の話

そういえば前回のブログで「シリアルから転送したコードを実行できるようにするまで面倒」という話を書いた。そしたら!Jun Amano氏から的確なアドバイスが!!

BASICでLOADすれば良い

!!!なんと!!

AI-1000のメニューが便利すぎて基本的な事を忘れてたYO!!(ToT)

いっつも超マニアックなマシンばかり触っているので、教えてくれる方の存在が本当に助かります!ありがとうございます!!

 

さっそくBASICで「LOAD"COM0:」としてロード、そのままRUN!

超快適になった!!

プログラムが安定してきたら、QuickLoaderの最後にマシン語の実行まで付けたらさらに便利かも!

とっても開発しやすくなりました!(^o^)/

 

おっさんの主張

f:id:PocketGriffon:20210730080050j:plain

作業してて目が疲れてくると、↑オーバーレイシートに赤文字で書かれている文字が読めなくなりませんか?? そして気がつくと疲れて無くても読めなかったりしませんか?(T-T)

 

仕方ないので、おっさんは虫めがね(若者っぽくルーペなんて言わない)を手元に置いて、必要になったら使ってますぞ。

 

もひとつ。SHARP系のポケコンに慣れてると、画面クリアの感覚でmenuボタン押しちゃう! 

 

ところで…半分与太話…

HD61700のアーキテクチャを見た瞬間から思ってる事なんですが……これって絶対にコンパイラを意識したCPUだよね…?(^^;;

直交性の高いレジスタ構成、スタックフレームの作りやすさなどなど…。

 

当然世の中には便利な言語やコンパイラがあるんだろうと思って検索してみたけれども、どうにも見つからない…。もしかして……存在しない??? 需要がないのか、開発者がいなかったのか、その両方なのか分からないけれど、ぱっと探した範囲では見つからなかった。

 

無ければ作ってみたいなぁ…とか思いつつも、コンパイラの開発なんてそんな簡単じゃない(^^; しかも簡単に作ろうとしたらスタックマシンという、HD61700の特徴を全く活かせないものになってしまう。ちゃんとレジスタ割り当てまでしようとしたら中間層も作らないといけない気がするし…なんて思うと、動くようになるまでにどのくらい掛かっちゃうんだろ??

誰か言語系の得意な方、作ってみませんか?(他力本願マン)

 

ではまた次回!(^-^)ノ

 

麻雀牌描画プログラム

f:id:PocketGriffon:20210730070542j:plain