デジホリのblog

釣りと自転車とDIYを愛するオヤジのブログ

2015年11月

またポケコンの話。

ヤフオクにPB-100が出てたので、勢い余って落札してしまった。



その昔、高校生の頃だけど、友達がもっていました。
私はSHARP派だったので、CASIOのポケコンは持っていなかったのですが、ちょっと気になっていたんですよね。
しっかし、30年経った今になって手に入れてしまった。

これ、当時は確か定価が¥18,000ぐらい¥14,800だったと思うんだけど、パソコンもどきがこの値段で手に入ったんだから、すごかったなと改めて思う。。
パソコン買えない貧乏人にためのアイテムだったのね。(当時、ナイコン族って言ってたかな?)


で、手に入れたはいいけど、何するんだ???

ちょっと触ってみたけど、UIが特異すぎてさっぱりわからん。

いろいろ試行錯誤してみて、なんとか使い方がわかった。


まず、電源入れるとRUNモードになる。
この状態で、1+2[EXE]とか入れると普通に計算でき、結果が表示される。 

次に、[MODE] [1] ってやると、いわゆるプログラム入力モードになる。
するってーと、
「P 0123456789」と表示され、0が点滅する。
これはプログラムが0-9ページ?まで入力できるということみたい。
ここで[S][1]とかすれば、ページの選択ができる。
この状態で、
10 A=10[EXE]
20 PRINT A[EXE]
てな感じで入力すれば、プログラムが入力できる。

[MODE][0]でRUNモードに戻して、RUN[EXE]
とやれば、プログラム実行できる。

すげーわかりづらい。。 

ちなみに、入力したプログラムを参照するには、[MODE][1]でプログラムモードに入って、
LIST [EXE]
あるいは
LIST 10 [EXE]
などで、リスト表示される。
その状態で[EXE]とすると、次の行が表示される。
逆には戻れない。

SHARPのポケコンだと、[↑][↓]のカーソルキーがあって、戻ったりできるんだけど、CASIOのUIはひどすぎるな。気が狂いそうだ。

あと、プログラムをカセットテープに保存するための外部I/Fコネクタがあるんだけど、これ使えるようにしないと何もできないな。
 
何にせよ、おもちゃがひとつ増えてしまった。 

yagshiさんのサイトにあるツールでいろいろやってみた。

動作環境
Windows10
Perl 5(Active Perl 5.20.2)
cload.pl version 1.0 (13th Mar. 2003)
yasm.pl YASM61860 version 1.01

1.アセンブラコードをyasmでアセンブルしてwaveファイルに変換し、cload.plでソースコードに戻す。
これはうまく動いた。

使用したコード:scroll45.s(どこで落としたのか忘れた)

scroll45.s
# PC-1245,125x よう左画面スクロール

org $c200

cal $11e0
lp 6
lia $ff
exam
lp 7
lia $f7
exam
lia 5*12-1
push
lia $ff
loop: iys
loop loop
lia 0
push
loop2: wait $ff
loop loop2
rtn

C:\pocketcomputer>perl yasm.pl scroll45.s -w scroll45.wav

Yagshi's SC61860 assembler YASM61860 version 1.01
pass 1
      loop  $c20f
     loop2  $c215
pass 2
complete.

c200 : f1 e0 86 02 ff db 87 02 : bc
c208 : f7 db 02 3b 34 02 ff 26 : 6a
c210 : 2f 02 02 00 34 4e ff 2f : e3
c218 : 03 37

出来上がったwaveファイルをcload.plでソースコードに戻す。
C:\pocketcomputer>perl cload.pl -o scroll45.bin scroll45.wav
cload.pl version 1.0 (13th Mar. 2003) by Yagshi
file length= 28712+8
freq.      = 8000Hz
byte/sec   = 8000
byte/sample= 1
 bit/sample= 8
data length= 28672
file ID=67  BINARY
FOUND : AGSHI
--- CHECK SUM OK ---
START : c200
LENGTH: 0019
--- CHECK SUM OK ---
c200  f1  sum=10
c201  e0  sum=1e
c202  86  sum=2c
c203  02  sum=2e
c204  ff  sum=4c
c205  db  sum=64
c206  87  sum=73
c207  02  sum=75
c208  f7  sum=8b
c209  db  sum=a3
c20a  02  sum=a5
c20b  3b  sum=b3
c20c  34  sum=ba
c20d  02  sum=bc
c20e  ff  sum=da
c20f  26  sum=e2
c210  2f  sum=f3
c211  02  sum=f5
c212  02  sum=f7
c213  00  sum=f7
c214  34  sum=fe
c215  4e  sum=11
c216  ff  sum=2f
c217  2f  sum=40
c218  03  sum=43
c219  37  sum=4d
-----END-----
c21a  ff  sum=6b
-----END-----
c21b  ff  sum=6b
--- CHECK SUM OK ---

できた。。。

2.公開されているソースコード(yagmon1245.s)で1と同じ事やってみる。
でもアセンブルエラー

C:\pocketcomputer>perl yasm.pl -old yagmon1245.s -w yagmon1245.wav

Yagshi's SC61860 assembler YASM61860 version 1.01
pass 1
     K_BRK  $0007
      K_UP  $000c
    K_DOWN  $000d
   K_RIGHT  $000e
    K_LEFT  $000f
      ADRL  $0039
      ADRH  $003a
       ADR  $0039
      BUF5  $003b
       SUM  $003f
         I  $0000
         J  $0001
         A  $0002
         B  $0003
        XL  $0004
        XH  $0005
        YL  $0006
        YH  $0007
     begin  $c205
     here0  $c207
     tohex  $c216
    tohex0  $c21a
    tohex1  $c224
       end  $c22a
     here1  $c22b
     here2  $c235
    datlop  $c24b
     here3  $c254
      mvup  $c265
      mvdn  $c26b
    mvupdn  $c26f
   gobegin  $c271
     here4  $c273
     keyin  $c277
    bufwrt  $c29d
    rdaddr  $c2b0
     ldad1  $c2b5
     ldad2  $c2be
     ldad3  $c2c9
    rddata  $c2d2
    stdat1  $c2e2
    stdat2  $c2eb
    stdat3  $c2f6
   mvright  $c2fc
    mvleft  $c303
     mvlr1  $c308
     mvlr2  $c311
     mvlr3  $c313
pass 2
ERROR: undefined label(g)

なぬ?

<その後追記>
ソースコードを落とした時に、">>"が">"に、"&"が"&"にかわっていたことがわかり、ソースを修正して再度試したらうまくいった。
アセンブルして出来上がったwaveファイルのcload.plによる復元もうまく動いた。


3.昔テープに保存していたものをPCにwaveファイルとして再現させたものをcload.plでコードに戻してみる。
うーむ、うまく動かない。

C:\pocketcomputer>perl cload.pl -old -o manhole.bin manhole.wav
cload.pl version 1.0 (13th Mar. 2003) by Yagshi
file length= 1003616+8
freq.      = 22050Hz
byte/sec   = 22050
byte/sample= 1
 bit/sample= 8
unknown tag fact.
data length= 1003568
unknown type (255). Try -old switch. at cload.pl line 194.
file ID=ff

file ID が ff って何??
perlのコードをみると、初期値がffだからファイルの種類が判定できていないのかな。 


もういっちょ。
BASICのファイルを食わせた。
C:\pocketcomputer>perl cload.pl -o jack.bin jack.wav
cload.pl version 1.0 (13th Mar. 2003) by Yagshi
file length= 1047424+8
freq.      = 22050Hz
byte/sec   = 22050
byte/sample= 1
 bit/sample= 8
unknown tag fact.
data length= 1047376
unknown type (0). Try -old switch. at cload.pl line 194.
file ID=00

これは正しい動き??

うーむ、よくわからない。

<その後追記>
cload.plのソースコードをよーく読んでみた。
最初のwaveファイルをオープンして、ファイル属性チェックのところまではパスしている。
その後のデータ読み込みで、バイトストリームに変換しているところの最初でコケている感じ。
音データを取り込むときの録音レベルが問題のような気がするな。
試しに、古い別のPCのサウンドレコーダーで録音してみて、そいつをcload.plに食わせてみた。
(なぜかwaveのヘッダーが変だったので、無理やりヘッダーを書き換えたけど)何と正常に取り込みできた!
うーむ。。。

録音したデータを正規化?するようなステップが必要なのかな。
とはいえ、一歩前進。



 

その昔(30年前)、PC-1401で作成したプログラムがテープメディアに残っていて、なんとかを再現したく、いろいろ試してみました。


マイクロカセットの方は、再生機器(CE-127R)が残っていて、実は数年前に一部のデータをPCにバックアップしていました。しかし、最近動かしてみたら、再生してもすぐに停止してしまうようになってしまった。壊れちゃったのかな。。。マイクロカセットは二度と読み出せないな。
それから普通のカセットテープの方もすでに再生できるものを持っていないのでどうにもならない。。このためだけに買う気はしない。

ということで、気を取り直して、バックアップしておいたデータだけでいろいろやってみます。

やりたいこと
1.テープに記録されている音声データをPCに取り込み、wav(wave)ファイルにする。
2.取り込んだwavファイルを使ってポケコンにロードする。
3.取り込んだwavファイルをソースコードに変換する
 
とりあえず1はできている。
2もできた。
普通にポケコン側で"CLOAD"して、パソコン側でwavファイルを再生するだけ。
というか、プログラムはPC-1401で作ったものだけど、手元にあるのがPC-1470Uなので、微妙にちゃんと動かなかったりするんだけど。。

で、BASICのプログラムは何とかなることがわかった。

ここで、前回試した、シリアルI/Fでの接続をすれば、パソコン上にテキストデータとして取り出せる。
なので、3に関して、BASICのソースコードは再現できることがわかった。

問題なのはマシン語のプログラム。
ポケコンへのプログラムロードは何とかできるみたいだけど、プログラムがPC-1401用なので、当たり前だけどちゃんと動かない。
PC-1470U用にプログラムを書き換えたいな。
ポケコン上のマシン語コードをパソコンに取り出し、逆アセンブルして、PC-1470U用に移植して、アセンブルして、ポケコンに戻す。ってことをやりたい。

ちょっといろいろ調べたら、
マシン語の記録されたwavファイルをバイナリデータに変換するプログラム(yagshi's pocket computers)とか、マシン語を逆アセンブルするプログラム(Fenarinarsa Software Service)などが公開されています。
これらを使って何とかならないかな。
少し使ってみたけど、wavファイルのバイナリ変換がうまく動かない。
うーむ。。。先は長いな。

 

前回作成した電動リールのバッテリーですが、5時間ぐらいしか持たなかったのと、コネクタ部分が破損してしまったので改良しました。

 ピンの位置合わせのために穴を広げた関係で、強度不足となり欠けてしまいました。

MIC-6PではなくMIC-5Pをベースに作り直すことにします。
6Pって穴の位置が均等になっていないのです。(5Pが刺さらないようにバカよけになっているのかな?)
5Pは位置が均等なので、こっちの方がいいです。
センターに穴を開ける必要はあるけど。

そして、電池3本だとバランス悪いので4本構成にして降圧回路で電圧調整する方式にしました。

 
動作テスト。。。


うーむ、、
知らないうちに破損してた。
やっぱり強度の問題が残るなぁ。



でもスイッチングレギュレータ使っている関係で、電池の持ちは良くなった気がする。
もう少し様子を見てみることにします。
 

大昔、ポケコンというデバイスがあって、すごいハマっていました。
ポケコンというのは、プログラマブルな電卓で、BASIC言語が使えるとても革新的?なデバイスでした。
シャープとカシオが出していましたが、特にシャープのポケコンはマシン語が使えるので、今でも一部のマニアがいるみたいです。ググるとたくさんヒットします。

当時、友達がPC-1401を持っていたのがきっかけで、ポケコンで遊ぶようになりました。
現在、組み込みソフト開発を生業としているのですが、今を思うとポケコンでプログラミングを始めたのが起点になっているんだなと思います。

その当時、友達からPC-1401を譲ってもらい、その後はPC-1460、さらにPC-1470Uと買い換えていきました。
今手元に残っているのはPC-1470Uだけ。
これ↓ まだちゃんと動くのだ。


この当時はまだフロッピーディスクすらなかった時代だったので、プログラムコードが保存できる外部デバイスはカセットテープのみでした。
当たり前だけど、マシン語はいわゆるハンドアセンブルで、ノートに手書きでマシン語のコードを書いて、キーボードから手入力するという、今考えるととんでもない話です。。
確かPC-1460ぐらいからパソコンと接続できるシリアルI/Fも装備され、PC-1470Uにもありました。
当時は使っていなかったけど。

ということで、シリアルI/Fでパソコンとつないでみました。
接続ケーブルは、5年ぐらい前に高松製作所というところで買ったもの。
パソコンはすでにDSUBのシリアルコネクタがないので、USB変換ケーブルを買いました。BUFFALOのBSUSRC06ってやつ。

試しに、ポケコン側で簡単なプログラムを入力して、パソコン側に送ってみます。
ポケコン側のコマンドをすっかり忘れていて悩みましたが。。。
まず"OPEN"コマンドでポートをオープンします。
その後、"LLIST"と入力します。
すると、パソコン側のコンソールにプログラムが表示されました。(ちょっと感動!)
通信速度はデフォルトが1,200bpsみたい。2,400bpsとか使えるのかな。

逆にパソコン側からデータ送ってみます。
ポケコン側は"LOAD"とすればデータ待ち受け状態になるので、その後パソコンのターミナルでテキストファイルを送信してやればいいみたいです。
昔書いた2,000行ぐらいのコードを送ってみたら、通信エラー出まくり。。。 
キャラクタ間にディレイを適当に入れてやらないとオーバーフローしてしまうみたい。
OPENコマンドで、フロー制御ONとかすればいいのかな。 

ということで、昔を思い出していろいろ遊んでみました。

ちなみにちょっと調べたら、ポケコンのエミュレータやSC61860のアセンブラまで存在しています。
すごいなあ。

もう少しいろいろと試してみたいと思います。

以下、気になったサイトをあげておきます。
シャープ博物館 ポケコン別館 
POKE.COM:ポケットコンピュータ情報サイト 
yagshi's pocket computers 

↑このページのトップヘ