SHARP PC-1350でプログラミング その6

f:id:PocketGriffon:20201222022252j:plain

PC-1350のバッテリー寿命が短すぎる!

コレが今イチバン気になっている点かも知れない。

とにかくPC-1350のボタン電池がすぐに切れてしまうのだ!

何も使わずに1週間くらい放置するとバッテリー切れ状態になる(T-T)

もしかしたら拡張メモリ側の電池が切れてるんだろうか…とかいろいろと調べてみたけれども、思い当たるところが無い。

しかし、いくらなんでも燃費が悪すぎる…。他のPC-1350やPC-1360ではそんなことないため、この筐体特有の問題らしい。これは何が原因なんだろう??

どなたかご存じの方いません?(T-T)

 

PC-1350で初めてのプログラミング♪

さあ、ようやくPC-1350でプログラミングしてみるよ!

まごう事なき、初のSC61860でのプログラミング。

Hello Worldに挑戦だ!

 

まず…作業を始めようとして何に困ったかと言えば、レジスタの使い方、いわゆる定石が全くわからない点だ。

これまでにエミュレータアセンブラ、逆アセンブラを作ってきたおかげで、それぞれ個々の命令がどんな動きをするのかは理解できた。…が、それらの命令をどうやって組み立てたら良いのかが分からないのである(^^;;

エミュレータ作ってて分かったのは、Pレジスタは内部RAM用、DPレジスタは外部メモリ用…って事くらい。あとはXYレジスタがそれぞれ外部メモリからの読み込み、書き込みに使えるらしい…くらいの感覚。

 

とりあえず…分かる範囲の命令で組み立ててみようw

というわけで作ってみたHello Worldはこんな感じ。

f:id:PocketGriffon:20201222015155j:plain

…おそらく、SC61860に慣れた方から見たら「なんじゃこりゃ」なプログラムなんだろうなー。まぁ覚えたての素人が作ったコードだと思ってカンベンして!

やっている事は…

Xレジスタに転送元(MessageData)アドレス

Yレジスタに転送先(テキストVRAMバッファ)のアドレスを入れて

文字列をコピーし

最後にテキストVRAMの内容を実際のVRAMへ反映(TRANSVRAM)

しているだけだ。

これも「コレが最適!」と思ってやってるわけではなく、たまたま見つけたVRAM転送サブルーチンがあったので、利用してみようと思っただけの話だw

 

ソースを見て分かるが、このアセンブラにはEQU疑似命令が存在しない。

この辺りはcppを利用しているので、それで代用出来るものは全て使っちゃえ!ということで、躊躇なく割愛している!割り切りは大事だ(^^)

 

動かしてみようとするのだが…

だいたい、この手のモノを動かしてみようと思うと、最初の1回目はとても苦労するw

まずは自作アセンブラがちゃんとコードを出しているのか疑って掛かる。

そしたら…案の定、ニーモニックのエラーチェックが抜けていたw ちゃんとしたコードが出ないばかりか、それっぽいコードを出力してしまっていた。これはひどい(TOT)

 

そして出来上がったバイナリをデバッガに読む仕組みを作る。

マシン語データの場合は、PC-1350のメモリにダイレクトに読み込ませてしまえば良い。バイナリデータの先頭にHC-40よろしく同じようなヘッダを付ける事で、特にアドレス指定等はなくても読み込めるようにした。あとは実機と同じ形式の「CALL アドレス」で実行する。

 

デバッガも、軽く実装はしてあったのだが、実際に使おうとするとバグがあったり使い勝手が悪かったり、もう散々だった(^^; やっぱり使ってみなくちゃ分からない!

理想のデバッガが欲しいわけじゃない、使いやすいデバッガが欲しいのだ!

そう割り切れば機能なんて最低限でかまわん(^^)

 

そしてようやく……

f:id:PocketGriffon:20201222020518p:plain

デバッガ上で「Hello PC-1350 World!」が表示された!(^-^)/

これは嬉しい!!

 

せっかくなので簡単に説明をしてみたい。

まず、青で囲まれた部分がコンソールとなっている。ここでコマンドを入力する。

Hello Worldのプログラムは$6200から格納されている。

#そういえばPC-1350には、マシン語の領域宣言(CLEAR命令?)はあるんだろうか…汗

 

起動した直後に「d6d00」で、ダンプウィンドウ(右中央)のダンプ表示を6D00に変更。このアドレスはテキストバッファを指している。この領域に表示させたい文字列をコピーして、システムコールを呼び出せば、画面に文字が出る…というワケだ。

 

次に「b6200」でブレークポイントを設定。$6200番地を実行しようとした瞬間に実行が止まってコンソールに戻ってくる。

 

「"CALL &6200」で、PC-1350上でCALL命令を実行する。こうする事で、実機で動かした時と同じ環境で実行が出来るはずだ。そして先ほどのブレークポイントに設定した$6200を実行する直前に停止してコマンド入力モードに戻ってくる。

 

「u」は逆アセンブラ表示だ。なんとなくSYMDEB(DEBUG)とあわせてみた。逆アセンブラを表示させようとすると、指が勝手に"u"と打ってしまうので、自然に任せる流れでそのままコマンドにしちゃった感じだw

 

「t」はトレース、1命令実行。

 

「g,620f」で、今のアドレスから$620Fまで実行させる。

 

最後の「s」はステップ実行で、サブルーチンの中までは追っていかず、サブルーチンから抜けたところで実行が止まる。CAL $1DDFはテキストVRAMの内容を画面に反映させるルーチンだ。ここの中身はデバッグする必要が無いのでステップ実行…というわけだ。

このタイミングで画面に「Hello PC-1350 World!」が表示された。

 

とりあえず動いたプログラム

自前で作ったアセンブラエミュレータ、デバッガでプログラムを動かす事が出来た!

途中、開発が全く進まなかった時期もあったが、約20日掛かってる。どう考えても素直に実機で「Hello World」を作った方が早いw

でも全部自分で作った環境で動くのって、とても楽しいよ!(^-^)

 

デバッガはまだまだ出来損ないにもホドがある状態だけど、これを利用してせっかくだから少しだけ規模の大きなものを作ってみたいな!

最終的にはちゃんと実機に持って行ける環境まで含めて作り上げないと!

よーし、もうちょっと頑張るよ(^^)

 

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