===============================================================================
 LCD ドライバの初期化 (40h) によるフォント復帰 (2025-12-30)
 by @num_kadoma
===============================================================================

-------------------------------------------------------------------------------
 概要
-------------------------------------------------------------------------------
　SHARP PC-E500 シリーズにおいて変更したフォントベクタの復帰手段として、
　[CTRL]+[+/-] の押下や「INIT "SCRN:」の実行が知られているが、
　PC-1480U ではそのどちらも使えない。

　そこで「LCD ドライバの初期化 (40h)」を用いて復帰させるプログラムを作成した。
　組込みや改変などはご自由に。


-------------------------------------------------------------------------------
 プログラム
-------------------------------------------------------------------------------
■BASIC リスト
1 POKE &BFE00,&,&,&40,&8,&,&3,&DC,&FF,&F:CALL &BFE03
2 A$=CHR$ &+CHR$ &5:KEY &,A$+A$:END
     ^^^^^^^^^^^^^^ [BASIC] のキーコード      ^^^^^^ &BFE00 ではないので注意


■マシン語部分のダンプとソース (tab=8)
		org	$bfe00

		; IOCS 簡易呼出し用パラメータ
00 00		dw	$0000		; (cx) に入れるべき値
40		db	$40		;  il  に入れるべき値

		; メイン (ここを CALL する)
08 00		mv	a, 0		; a=初期化のレベル (0:all reset)
03 dc ff 0f	jpf	$fffdc		; = callf + retf
					;   (IOCS 簡易呼出し + BASIC へ復帰)


-------------------------------------------------------------------------------
 備考
-------------------------------------------------------------------------------
・BFE00h..BFEFFh の領域は、ポケコンジャーナル '94 年 11 月号 (工学社)
　pp.38-43「E500 のワークエリア解析」によれば
　　> IOCS/BASIC の作業領域らしい (USING などで使われる)
　　> 注意すればユーザーで使っても可
　らしい。

・[PC-E650・PC-U6000] 活用研究 (工学社) 第 9 章「各デバイスの使い方」の扉に
　　> また特別に，レジスタ il, (cl), (ch) だけしか必要のないコマンドは，
　　> アドレス 0BFE00h～0BFE01h に (cx) に入れるべき値を，
　　> 0BFE02h に il に入れるべき値をそれぞれ書き込んだ後，BASIC から
　　> 　CALL &HFFFDC
　　> として呼び出します．
　という簡易呼出し方法が書かれており、それを利用している。
　
　FFFDCh からの処理では、il, (cx) に BFE00h..BFE02h の値を書き込んだ後で
　FFFE8h を呼んで IOCS を呼び出しているので、今回のコードで大丈夫そうである
　(ROM バージョン 2-1 (PC-1480U), 8-4 (PC-U6000), 8-5 (PC-E650) で確認)。

・a レジスタに与える「初期化のレベル」が 0 でないと、フォントは復帰しなかった。

・このプログラムを実行すると、RUN/PRO や角度モードなどの表示が消えてしまうが、
　[BASIC] キーでモードを変えるなどすると表示が戻る。
　そこで、行 2 でキーバッファに [BASIC] のキーコードを二つ入れて
　END 後に自動で押させることで、結果的に現モード (RUN) での表示をさせている。

・[BASIC] 2 回押し以外に、[SHIFT]+[.] (角度モード変更) 3 回押しでも結果は同じ。


-------------------------------------------------------------------------------
 バージョン履歴
-------------------------------------------------------------------------------
■2025-12-30
・[BASIC] 2 回押しによるインジケータ復帰を追加

■2018-07-25
・IOCS 呼出しを簡易版に変更

■2018-07-24
・初版公開


-------------------------------------------------------------------------------
 連絡先
-------------------------------------------------------------------------------
・Twitter : @num_kadoma
・WebSite : http://littlelimit.net/
