武善さんから、ポケコンが到着した。
え~っと、これが入るポケットってどんなんよ?(これから冬場だからコートのポケットには入るかもしれないけど )
早速、マニュアルを見ているけれど、興味深い機能が多い。
ただ、やりたいことをするには、時間を計る機能が必要なのに、これがポケコンのマニュアルからはどうしても見つからない。
ネットで検索すると、IPポート 14H が1秒タイマらしい。この周期をプログラムを使って測ってみると、(ストップウォッチがないので厳密じゃないけど)、大体、1秒周期で、デューティーは50%になっているみたい。
これを使えば、できないわけではないけれど、ポーリングしないといけないし、ちょっと1秒というのは、コンピュータには長すぎないか?
このタイマを動かすためにはタイマ割込みが内部で使われているはずなので、タイマ割り込みをトラップして、コールバックルーチンを呼び出すように出来れば、やりたいことができるはずなんだけれど、どうしたものやら。。。
タイマはBIOSが動かしているのだろうから、メモリをサーチして、14Hに出力しているルーチンのあたりを逆アセンブルして眺めてみるのがいいか?
追記:簡単なCのプログラムを作り、因みにサーチして探したら、8988番地に見つかった。
IN A,14h
RRA
JNC 88C4
OUT 14h,A
という感じになっているので、この辺りで処理していることは間違いなさそう。う~む、ディスアセンブラが欲しいところですね
普通に考えれば、タイマ割込みなんだから、割込みベクトルあたりを探せば見つかりそうだけれど、0番地からダンプして見ている限り、RST 30H, RST 38H以外のエントリはなさそう。
これだけ長く世の中に愛されているポケコンだから、さぞかし解析も進んでいるかと思いきや、ネットで検索にかかるのは、あまり深い話が載っていないような気がする? 学販専用などと言わずに、ちゃんと使えれば楽しいのだからもっと積極的に売ってみてもいいような気がするのだ。
ところで、教師用マニュアルってどうやったら入手できるんでしょうね?
タイマ割り込み
はじめまして.
PC-Gxx系は割り込みモード1で動いているのでジャンプ先は0x0038です. そして割り込みの原因はI/Oポートの0x16を読むとわかります.
0x0038にはJP命令があるので, ジャンプ先を変えればよいと思います.
また, タイマ割り込みの間隔はI/Oポート0x40に0x30~0x3fの値を書くと変えられるようです. (あまり詳しく調べていません. 小さいほど早いようです.)
以下のリンク先が参考になると思います.
http://park19.wakwak.com/~gadget_factory/factory/pokecom/io.html
http://www.akiyan.com/pc-g850_technical_data
コメント by まるひろ — 2009年11月21日 @ 10:47 PM
ありがとうございます。
まるひろさま、コメントならびに参考資料のご提示ありがとうございます。
1秒タイマをもっと細かなタイミングの割込みから作成しているのかと思っていましたが、どうやら、LCDのカーソルブリンキングの割込みを流用しているようですね。
割込み禁止をして、確認プログラムを動かしたところ、1Sのフラグは約0.8秒間隔で立つようでした。
これだと長すぎるし、精度も不明で、時間測定には使えないので、別の方法を考えます。
自作が難しいシステムバスを使わず済まそうと考えていますが、なかなか難しいものです。
コメント by 組み込まれたエンジニア — 2009年11月22日 @ 12:53 AM
わたしはPIOポートで
先生,こんにちわ.
昨日は1日,オシロと併用でポケコンをいじっていました.
http://members.jcom.home.ne.jp/0434383301/POKECON.htm
http://to-rinuke.hp.infoseek.co.jp/850/cable.html
こちらに書かれている資料を参考に,BASICレベルで11ピン出力されているPIO(SIO兼)ポートをたたいていました.
*****
解析され尽くされているのであろうとは思っていましたが,まだまだのようですね.
ただ,C開発ができるし,とりあえずですが8ビットPIOが出来るので,3年生/4年生レベルの研究テーマには使えるんじゃないかと思っています.
コメント by まさちく — 2010年1月16日 @ 11:23 PM
アイオー君Zキット
アイオー君Zキットを入手しました。
今度もって行きますね。
これを使えば、Z80バスを全部使えます。
コメント by 組み込まれたエンジニア — 2010年1月20日 @ 7:17 PM