HOME 太陽光発電 無線 パソコン通信 PC-1245 MSX PC-9800 PDA ファミコン 迷路 あとがき
最終更新日:2017年1月7日

JP3TLC's homepage
PC-1245



自作ゲームのダウンロード

自作ツールのダウンロード

カセットインターフェースの製作

PC−1245のマシン語操作(BASIC)

PC−1245のプログラムの作り方

SC61860の構成

SC61860の命令一覧

液晶画面を大事にしよう

PC−1245の思い出
トップ

自作ゲームのダウンロード

@POCKET TETRIS Ver1.1(テトリスです)

 インターネットをさまよっていた所、 SC61860(PC-1245のCPUです。Hi)用の アセンブラを見つけました。 アセンブルするとCLOADM命令でそのまま読み込める WAVファイルができる優れものです。 アイデア自体は「ポケコンマシン語入門」にも載っているFM−8のクロスアセンブラそのままですが、普通のWinマシンで手軽に使えるのがうれしい。 ただしPerl (←Win98など古めのPC用。新しめのPCでは動作しないようなので 最新版で。) を事前にインストールしておかなければならず、そこがネックですが、 全部デフォルト設定でインストールすれば問題なく使用できました(^^)v。 (最新版でもデフォルトのままインストールで問題なし。平成27年9月12日) それで、何かを作ってみたくなり、これができました。 パッケージの取扱説明書中にダンプリストが入っていますので、 カセットインターフェースがない方でも大丈夫です。(ver1.0…平成14年12月)。
→キーにリピートがかかるように変更しました。(ver1.1…平成16年1月)
ソースが見たい方はこちら→tetris.S

APOCKET LIFE GAME Ver1.0(ライフゲームです)

 ゲーム1つではさびしいので、ライフゲームを作ってみました。 ライフゲームの詳細については検索サイトで調べてみると、 いくつか専門のサイトで解説されているのでそちらをご覧になってください。 以前(と言っても30年以上前ですが)、 何かの雑誌でBASIC言語でライフゲームを動かすのは、 パソコンでも速度的に非常に厳しいようなことが書いてあった記憶があり、 クロックが500kHzそこそこ(しかも1命令実行するのに何クロックもかかる)のポケコンでは、 たとえマシン語で組んでも実用的な速度が出ないのではないかと 心配しましたが、作ってみたら、1世代進むのに1秒程度ということで、 結構遊べるものになったのではないかと思います。 (ver1.0…平成16年3月)
ソースが見たい方はこちら→life.S

B足し算ゲーム Ver1.0

 子供に足し算を覚えさせようとして作りましたが、 大人が遊んでも結構、ハマることが分かったので公開。 簡単な計算でも、時間がかかるよりは早く間違いなく計算できるようになった方が、 仕事の効率も上がるかもしれない。 そろばんで暗算の得意な人は、ひょっとしたら桁が足りなくなるもしれません。 簡単なBASICプログラムです。リスト同梱につき、カセットインタフェースは なくてもOK。(ver1.0・・・平成20年11月)

CSHOOT1 Ver1.5

 このプログラムは相当気合を入れて作ったシューティングゲームです。 ステージの終わりにはボスも登場いたします。 最初はなかなかボスに会えなかったり、 会えても倒せないかもしれませんが、 コツをつかめば2面には進めると思います。 「SHOOT1」と言うからには「2」があるのか?・・・お楽しみに (ver1.0・・・平成21年1月)
 2面以降で得点計算が正しく行われていない場合があったので、 BASICプログラムを少し修正しました。根本原因が不明なので、 「とりあえず対応」です(^_^;(ver1.1…平成21年3月7日)
 キーリピートを固定にしていましたが、低速時(1面)で自機の移動速度が 速すぎて自分の撃った弾に追いついてしまう上、当たると死ぬバグがあったので、 直しました。そのほか、ちょこちょこ修正(ver1.2…平成21年3月13日)
 自弾の数を5→7に増やしたほか、ちょこっと修正。これによりステージ3クリアも 比較的簡単になりました(ver1.3…平成21年4月8日)
 自弾の数を7→10に増やしたほか、ちょこっと修正(ver1.4…平成21年4月10日)
 自弾の数を10→7に戻した。連射速度を自機の位置により変えるようにした。 少し1面の速度を速くした。これにより、多分、従来の得点は取れなくなりました。 でも、1面が退屈だったので、このくらいでちょうどよいと思います (ver1.5…平成21年4月17日)
※ソースはパッケージ内に同梱としました
トップ

自作ツールのダウンロード

@BAS to WAV Ver1.2

 BASICのテキストを元に、CLOAD命令で読み込めるWAVファイルを 作成するPERL(最新版はこちら) スクリプトです。 yasm.plの WAV作成部分を勝手に借りました(すみません)。(ver1.0…平成21年2月初旬)
「SCORE」表示をよく見たら「SC OR RE」になっていたので あわてて修正(^^;(ver1.1…平成21年2月23日)
「大きなファイルになると、きちんとロードできない変なWAVができる」との レポートを頂いていましたが、原因が書いてある サイト を見つけたので修正しました(mamo!!さんありがとう・・・)(ver1.2…平成27年9月13日)

Aメロディ演奏ツール ver1.1

 さしあたっては「風の谷のナウシカ(オープニング)」を鳴らすだけの プログラムですが、発音ルーチン自体は汎用的に作った(積もり)なので、 他の曲もデータをセットすれば演奏することができます。(ver1.0…平成21年6月27日)
演奏中、BRKキーで中断できるようにしました(ver1.1…平成21年7月3日)
「天空の城ラピュタ(君をのせて)」も 入力してみました(メロディ以外、パッケージ内容は同じです:平成21年6月30日)
同様にBRKキーで中断できるよう修正済み(平成21年7月3日)
トップ

カセットインターフェースの製作

 最近はポケコンのページもちらほらできてきて、ここ以外にも、 WAVファイルをダウンロードできるサイトがあるようです。 カセットインターフェースがないと少々辛くなってきています。 CE−124(カセットインターフェース)を入手できると一番よいのですが、 現在、入手困難と思われます。 で、適当に作ってしまおうというのがこのコーナーです。
 ポケコンの回路図を眺めていると、 ポケコンの左側面にあるコネクタの上から2番目にGND(マイナス)、 7番目に音声を入力すればよいようなので、 百円ショップでイヤホンを買い、コードを途中でぶった切ってポケコンに突っ込んでみましたが、 パワー不足でうまくいきません。 そこで、キット(リンク先は例として秋月電子通商さん) のアンプを買って途中に入れてみると、 一応読み込みに成功しました。 線をポケコンのコネクタに突っ込む際は、銅線のままではうまく入らないので、 キットを組み立てる際にできるゴミ(部品の足)を利用するとよいと思います。 クリップを伸ばして使ってもよいのですが、ハンダがうまくついてくれませんでした。 「製作」とたいそうなタイトルをつけている割にはキット利用(というかキットそのもの)ですみません。
CASETTE INTERFACE
トップ

PC−1245のマシン語操作(BASIC)

 POKE命令でメモリに値を書込み、CALLでマシン語ルーチンを呼び出します。 また、メモリに入っている内容はPEEK命令で見ることができます。 BASICプログラムは$C000番地から記録されていくので、 マシン語の開始アドレスは$C100番地から始めればちょうどいいようです。 なお、PC−1245のBASICはコマンド入力か プログラム中のどちらかでしか使えない命令がほとんどですが、 POKE、PEEK、CALL等はどちらでも使用できるようです。
命令説明使用例
POKE指定した番地に指定した値を書き込む命令。 1バイトずつ書き込む他、行が続く限り連続して書き込むことも可能。 PC−1245では&は16進数にする働きがある。 &FFと書いても255と書いても同じ。 @POKE &C100,&79
APOKE 49409,&C4,$00
BPOKE &C400,55
PEEK指定した番地の値を読み出す命令。 POKEと違って1バイトずつしか読み出せない。 直接実行して画面に値を表示することもできるし、 入力例のように変数に代入することもできる。 @PEEK &C100
AA=PEEK 49408
CALL指定した番地からマシン語ルーチンを 実行する命令。プログラムが間違っていると暴走する。 @CALL &C100
ACALL 49408
CLOADM テープやWAVファイルからマシン語プログラムを読み込む命令。 読み込む番地を指定したり、ファイル名を指定できるが、 特に指定しなくてもSAVE時の通りに読み込まれるので問題ない。 @CLOADM
ACLOADM "ABC"
BCLOADM &C100
CCLOADM "ABC";&C100
CSAVEM テープにマシン語プログラムを書き出す命令だが、Winに付属のサウンドレコーダで WAVファイルにしてしまうのがお手軽。 ファイル名は省略できるが、開始アドレスと終了アドレスは省略できない。 @CSAVEM "ABC";&C100,&C106
ACSAVEM &C100,&C106
トップ

PC−1245のプログラムの作り方

【1】プログラムの入力・実行の仕方
@右上のスライドスイッチを「PRO」のポジションにする。
ABASICの場合はそのままリストを入力する。 1行入力する都度、「ENTER」を押す。押すと、 行番号の横に:がついたり、命令の前後にスペースが入るなどの編集が自動的に行われる。
Bアセンブラの場合はまず上で紹介したアセンブラを使用してダンプリストを得る。 できたダンプリストを見ながら上で説明しているPOKE命令を使用して、 番地とセットする値を入力する。カセットインターフェースを持っている場合は、 上で紹介したアセンブラでWAVファイルを作って読み込めば、自分で入力しなくてもよい。
Cプログラムの実行の際は、右上のスライドスイッチを「RUN」のポジションにして、 BASICの場合はRUN(ENTER)、マシン語の場合はCALL &○○○○(ENTER)と 入力する。
【2】画面に任意のドットを表示する方法
 &F800番地から&F83B番地までが液晶の左12桁、 &F868番地から&F87B番地までが液晶の右4桁の VRAMになっている(右4桁については、画面の右へいくほど若番)。 そこで、例えば2桁目の左上のドットを黒くするには、 BASICで「POKE &F805,1」 を実行すればよい。書き込む値を2にすると、 上から2つめのドットが黒くなる。 書き込む値を4にすると、上から3つめのドットが黒くなる。 書き込む値を127にすると縦1列が黒くなる。 ただし、BASICの命令実行中はLCDがOFFになるため、 実際に表示を目で見る場合には、POKE命令を実行した後に、 LCDをONにするBIOSを呼び出す「CALL &11E0」を 実行する必要がある。 また、プログラムが終了してしまうと、 ユーザが表示したものを全部消して、 コマンドプロンプトが表示されてしまうため、 LCDをONにした後に別の処理を行うか、 空のループで時間稼ぎをして、 プログラムがすぐに終わってしまわないように する必要がある。 BASICの実行中はVRAMがBASICの処理のための ワークエリアとして使用されるため、 左端には意味不明なドットが表示されることがある。 あまり左端の桁は使用しない方がよい。 (全部アセンブラで組んでいる場合は別) 

@BASICで2桁目から山田と表示してみる
10 PRINT ""
20 POKE &F805,124,64,127,64,124,127,73,127,73,127
30 CALL &11E0
40 FOR A=0 TO 99:NEXT A
Aアセンブラで2桁目から山田と表示してみる
	ORG	$C100
	LIDP	$F800	;DP←$F800
	LII	59	;I←59(…5×12−1)
	LIA	0	;A←0
	FILD		;(DP)〜(DP+I)←A(…左12桁のクリア)
	LIDP	$F868	;DP←$F868
	LII	19	;I←19(…5×4−1)
	FILD		;(DP)〜(DP+I)←A(…右4桁のクリア)
	LIB	$00	;FONTのアドレスの上位(一度アセンブル後、改めて設定※)
	LIA	$00	;FONTのアドレスの下位(一度アセンブル後、改めて設定※)
	CAL	$11F1	;X←BA−1(…BIOSの機能呼出し)
	LIB	$F8	;B←$F8
	LIA	$05	;A←$05
	CAL	$11F5	;Y←BA−1(…BIOSの機能呼出し)
	LIA	9	;A←9
	PUSH		;スタックにAの値を入れる
TRAN:	IXL		;X←X+1,A←(X)
	IYS		;Y←Y+1,(Y)←A
	LOOP	TRAN	;スタックの値+1回ループ
	CAL	$11E0	;LCDをON(…BIOSの機能呼出し)
	LIA	$FF	;A←$FF
	PUSH		;スタックにAの値を入れる
	PUSH		;スタックにAの値を入れる
WWLP:	WAIT	$FF	;時間待ち
	LOOP	WWLP
	LOOP	WWLP
	RTN
FONT:	DB	124,64,127,64,124	;山
	DB	127,73,127,73,127	;田
※一度アセンブルしてFONTの配置されるアドレスを確定後、改めてその値をセットし、再度アセンブルする。
【3】音を出す方法
BASICの場合は、例えば「BEEP 3」とか入力すれば ピーピーピーと簡単に音が出るが、音程は変えられない。 アセンブラの場合は「12 5F 61 52 DF F1 E0」で よく耳をすますと「ぷち」という音がするので、 このルーチンをループさせればよい。 ループ内に適当なWAITを入れておくと、WAITが短いときは高い音が、 WAITが長いときは低い音が出る。また、WAITの時間を適切に設定すれば、 メロディの演奏も可能である。

(音を出すプログラム)
	ORG	$C100
	LIA	$FF	;A←$FF
	LIDP	ONTEI	;DP←ONTEI
LAB1:	STD		;(DP)←A
	LIA	5	;A←5
	PUSH
LAB2:	LIP	$5F	;P←$5F
	ORIM	$52	;(P)←(P)or$52
	OUTC
	CAL	$11E0
	LIDP	ONTEI	;DP←ONTEI
	LDD		;A←(DP)
	LP	$00	;P←Iレジスタ
	EXAM		;(P)←→A
	LIDP	$4000	;DP←$4000
	FILD		;(DP)〜(DP+I)←A
	LOOP	LAB2
	LIDP	ONTEI	;DP←ONTEI
	LDD		;A←(DP)
	DECA		;A←A−1
	JRNZM	LAB1	;IF Z=0 THEN LAB1
	RTN
ONTEI:	DS	1
※低い周波数から高い周波数まで上がっていく効果音が出ます。
【4】キースキャンする方法
 BASICの場合、INKEY$を利用できる。アセンブラの場合は、 &1F44をコールすると、その時点でキーが押されていれば、キャリーが立つとともに結果がAに入る(B、DP、K、L、P、Q、X、Mが破壊される)。 ただし、これらの方法は、同時に2つ以上のキーを押すと、何も押さなかったのと同じになってしまう。
 複数キーが同時に押されていることを判別するには、スキャンしたい行を 1にして、OUTA(とOUTB)を実行し、直後にINAを実行する。 すると、押されているキーに対応するビットが1になっているので、あるキーが押されているかどうか、判別できる。この方法は、複数キーが同時に押されても判別できるが、何のキーが押されているかは個々に調べなければ分からない。

キーマトリクス
トップ

SC61860の構成

 SC61860とはPC−1245に使われているCPUの名前である。 SC61860はCPU内部に96バイトのRAMを持っており、内部RAMと呼ばれる。 アキュムレータその他の汎用レジスタは内部RAM上に配置されている (アドレスレジスタはXとYを除いて内部RAMの外に独立して存在している)。 外部RAMは64KB使えるようになっている(ただし、 若い方のアドレスにはROM領域があり、 64KBすべてをRAMにできるわけではない)。 内部RAM・外部RAMともに、それぞれ専用のアドレスレジスタを使ってアクセスする (レジスタに割り当てられている内部RAMはレジスタ名でもアドレスレジスタを使ってもアクセスできる)。 フラグはCとZの2つあり、演算命令で繰り上がりまたは繰り下がり(キャリー)が起こったときにCが、 ゼロになったときZが立つ。 例えばA(アキュムレータ)に255(2進数で11111111)が入っている時にINCA (Aに1加える命令)を実行すると本来256(2進数で100000000)になるべき所だが、 Aのサイズは8ビット(8桁)しかないため、結果は0になる。 このとき演算結果がゼロなのでZが立ち、繰り上がりが発生しているためCも立つ。

【1】アドレスレジスタ
レジスタ名説明使用例
DP外部RAMにアクセスするための16ビットのレジスタ LIDP $C100
内部RAMにアクセスするための7ビットのレジスタ LP $04
内部RAMにアクセスするための7ビットのレジスタ LIQ $04
内部RAMにアクセスするための7ビットのレジスタ。 このレジスタはCALL命令やPUSH命令が使用するスタック・ポインタであるので、 ユーザが値を変更するとしばしば暴走する。 LIR $04

【2】内部RAM
アドレスレジスタ名使われ方
00 カウンタ
01 カウンタ
02 アキュムレータ
03 アキュムレータ予備
04X(下位) 外部RAMポインタ(読み込み用)
05X(上位) 外部RAMポインタ(読み込み用)
06Y(下位) 外部RAMポインタ(書き込み用)
07Y(上位) 外部RAMポインタ(書き込み用)
08 汎用レジスタ
09 汎用レジスタ
0A 汎用レジスタ
0B 汎用レジスタ
0C〜  汎用RAM
〜5B  システム・スタック
5CIA I/Oポート・レジスタ
5DIB I/Oポート・レジスタ
5EFO I/Oポート・レジスタ
5FOUTC コントロール・ポート・レジスタ
トップ

液晶画面を大事にしよう

 ポケコンを何年間も使っていると、液晶の端の方から 少しずつ黒ずんできます。 主に冬の低温下でこの症状は発生しますが、 だんだんと季節を問わず黒ずむようになり、 液晶の中央へ向かって進行していきます。 そして最終的には使用に耐えなくなってしまいます。 このようになる原因ですが、液晶が膨張・収縮を繰り返すうちに、 液晶を封じ込めている容器の容積がわずかに大きくなり、 容器の内側の圧力が下がるのが原因ではないかと考えています。 と、言いますのも、分解して偏光板をはがし、 黒ずんでいる所を指で押さえると、 押さえている間だけ黒ずみが改善するからです。 なお、偏光板を通して見なければ黒ずみは見えません。 念のため。なお、偏光板を一度はがすと、 二度と元の密着状態に貼り付けられないので、真似しないでください。
 筆者の知る限り、この黒ずみを根本的に直す方法がありません。 白熱電灯の下に置いて暖める、などの方法を紹介しているサイトもありますが、 温度が下がれば元通り黒ずみますので、 何の解決にもならない上に、 液晶の劣化(容器の拡張)を早めてしまいます。 結局、劣化を食い止める最善の方法は、暑さ寒さを避けて、 20℃くらいの一定温度で保管するしかないのではないかと 思います。実行するのはなかなか難しいことですが、 安易に加熱するのだけは避けた方がよさそうです。
 最近、偏光板の取り換えで画面を復活させる方法が行われているようです。ポケコンで再度、試したらやっぱり駄目でしたが、他機種ならまた見えるようになるかもしれません!ぜひ試してみてください!(例) 1台でも多く実機が使い続けられることを願って・・・
進行を遅らせることはできても止める事はできない
こうなってはおしまいの図
こうなってはおしまいの図
トップ

PC−1245の思い出

PC−1245
 中学に上がってすぐの頃、「子供の科学」誌でシャープのMZ−700やNECのPC−6001の紹介があり、 欲しくてたまりませんでしたが、当時、お金がなくてとても買えませんでした。 そして中学1年の冬休みにお年玉でやっとポケットコンピュータ(以下ポケコンと略)PC−1245を買い (本当はカシオPB−100を買いに行ったのですが売り切れでシャープになりました。結果的にラッキー)、 PIO誌に掲載されたゲームを打ち込んだり、 プログラムを作って遊んだりしていました。 LCDに私の名前(山田)を表示させていたら、 某氏からどうして自分の名前は出せないんだと言われたのも今では懐かしい思い出です。 1文字5×7ドットなので名前表示は山田が限界 ・・・とか説明しても分かってもらえなかったような気がします。 その後もお金がなく、高校時代もやっぱりPC−1245を使っていました。 その頃にはポケコン界の主流は画面の大きなPC−1350に移っており、 PC−1245のプログラムはほとんど雑誌に掲載されず、 高校時代はポケコンマシン語入門という本を入手して、 マシン語プログラミングにハマっておりました。 そして自分の作ったゲームで遊んでいました。 また、水晶交換(今は原発乗っ取りというのでしょうか)で、 倍速にしたりしていましたが、むちゃな改造がたたって破損。 そんなこんなで現在使用しているPC−1245は3台目です。 なお、倍速改造は音楽(といっても単音ですが)まで速くなり(音程も高くなる)、 ゲームも速すぎて遊べなくなってしまうため、 某氏はマイクロスイッチで切り替えできるようにされていました。 今は学生時代のように時間が取れなくなってしまいましたが、 「Yagshi's SC61860 Assembler "YASM61860"」を得て、 今後もプログラミングを楽しませてくれることでしょう。ポケコンよ、永遠なれ!

「MSXの思い出」へ続く

トップ

このホームページの内容についてのご意見ご感想は jp3tlc@jarl.com までお願いします。

HOME 太陽光発電 無線 パソコン通信 PC-1245 MSX PC-9800 PDA ファミコン 迷路 あとがき