HEX LOADER for PC-E500 の使い方 written by jsurfer last updated on 2013年12月05日 ===================================================================== 「HEX LOADER for PC-E500」とは: 「HEX LOADER for PC-E500」プログラムは、パソコン上にテキストファイル として保存されたマシン語のプログラム(ダンプリスト)を、ポケコン上の 任意のアドレスにマシン語プログラムとして読み込むプログラムです。 使い慣れたパソコン上のテキストエディタでマシン語入力を行い、テキスト ファイルとして保存し、そのファイルを「HEX LOADER for PC-E500」を使って ポケコン上でマシン語としてマシン語領域に読み込むことができます。この プログラムを使うと、マシン語モニタをポケコンにインストールする必要が なくなります。(マシン語モニタを使ってポケコン上でちまちまとマシン語 入力をするのは個人的には嫌いではないのですが...。) ネットでダウンロードしたマシン語ダンプリストをポケコンのマシン語領域 に転送するということも可能です。 「マイコン BASIC マガジン(通称ベーマガ)」に掲載されているプログラム はオール BASIC のものばかりなのでいいのですが、今はなき 「ポケコン・ジャーナル」等の雑誌に掲載されている PC-E500用のゲームプ ログラムは、面白そうなゲームほどマシン語で書かれており、なおかつ 長かったりします。PC-E500 にはマシン語モニタは入っていないので、マシ ン語プログラムを入力するにはまずマシン語モニタプログラムを入力して、 それもゲームのプログラムと同じアドレスを使用しないように工夫が必要 だったりと、いろいろと敷居が高く、あきらめて、もっぱらオール BASIC の プログラムを入れて遊んでいたという方も多いのではないでしょうか? 当時は入力を断念したマシン語のゲームプログラム、ぜひこの「HEX LOADER for PC-E500」を使って再チャレンジしてみてください。 ===================================================================== 流れとしてはこんな感じです: 1) デスクトップなどのパソコン上でマシン語プログラムを入力してテキスト ファイルとして保存 2) 「HEX_LOADER.BAS」のプログラムをポケコンに転送 3) ポケコン上の RUN モードで RUN [RET] と入力 4) 「ファイルノ テンソウヲ ハジメテクダサイ...」と表示されるので、マシン語プログラム を転送 これで指定されたアドレスにマシン語プログラムが転送されます。 ===================================================================== 動作環境: このプログラムは Sharp の PC-E500系のポケコンならどれでも動作します。 PC-E500系のポケコン一覧: PC-E500 PC-E550 PC-E650 PC-1480U PC-1490U PC-1490UII PC-U6000 このドキュメントには「GZOIS」(Windows Mobile 5.0 用の PC-E500 エミュレータ) のことも書いてありますが、GZOIS エミュレータを知らないもしくは使わない という方はこの部分は無視してください。 ===================================================================== 準備: STEP 1) パソコン上でマシン語プログラムを入力して、テキストファイルとして保存し ておく。ファイル名はなんでもいいが、ここでは「HEX.TXT」としておく。 ファイルの中身の形式は下記に従うこと: BE700 01 02 03 04 05 06 07 08 : 24 BE708 09 0A 0B 0C 0D 0E 0F 10 : 64 END 最初の行のアドレス(上の例では「BE700」の部分)は間違いのないよう、必ず 転送したいスタートアドレスにしておく。2行目以降のアドレスの部分(上の例 では「BE708」の部分)は実際には使わないので何を入力してもいいが、必ず 5桁にしておくこと。 各行のチェックサム(上の例では 1行目だと「: 24」の部分)も実際には使わな いので、チェックサムは入力しないで、下記のようにしておいてもいい: BE700 01 02 03 04 05 06 07 08 BE708 09 0A 0B 0C 0D 0E 0F 10 END ファイルの最後に「END」という文字を入れておくこと。また「END」のあとに 必ず改行を入れておくこと。 STEP 2) マシン語を扱うので必ずポケコン上で必要なマシン語領域を確保するように。 例として、10Kバイト (2800h) のマシン語領域を確保するには下記を入力 すればいい。 POKE &BFE03,&1A,&FD,&0B,&00,&28,&00:CALL &FFFD8 [RET] STEP 3) E:ドライブに保存する場合、前もって必ず DSKF"E:" [RET] と入力して、E:ドライブに 必要な空き容量があるのを確認するように。 空き容量がなければ INIT"E:16K" [RET] と入力して、E:ドライブに必要な空き容量を確保する。(上記の例では 16K の要領を確保する。この部分は各自確認してから必要な変更を加えて実行する ように。) STEP 4) ポケコンにプログラムを転送するので、通信の設定を行なっていない場合、 下記を入力して設定を済ませる。 POKE &BFD35,0,255,0,80 [RET] OPEN "COM:9600,N,8,1,A,L,&H1A,X,N" [RET] CLOSE [RET] ===================================================================== 実際に転送する: STEP 1) 最初に「HEX_LOADER.BAS」をポケコンに転送する。(転送が終わったら エミュレータのGZOISの場合、必ず、Files > SIO > SI > CLOSE を選んでおく ように。これをしないと次のステップでプログラムを RUN したときにエラー が出る。) STEP 2) マシン語領域を確保していなかったら、必要なマシン語領域を確保する。例と して、10Kバイト (2800h) のマシン語領域を確保するには下記を入力すれば いい。 POKE &BFE03,&1A,&FD,&0B,&00,&28,&00:CALL &FFFD8 [RET] STEP 3) RUN モードにしてから RUN [RET] と入力してプログラムを走らせる。 STEP 4) この時点で BUSY インジケータが点き、「ファイルノ テンソウヲ ハジメテクダサイ...」と表示 される。この状態でパソコン上でファイル転送ソフト(フリーウェアの 「TeraTerm」 等)を使ってマシン語のダンプリストの HEX.TXT ファイルを 転送する。(エミュレータの GZOIS の場合、File > SIO > SI > OPEN で オープンダイアログが表示されるので、HEX.TXT を選ぶと転送される。) 転送中は転送されている行が一行ずつ表示される。 転送が終わったら「テンソウガ ブジ シュウリョウシマシタ。」と表示され、開始アドレスと 終了アドレスが表示される。これが表示されずに Input past end in 1610 というエラーが表示された場合、転送は正常に終わっているが、なんらかの 理由で最後の行の「END」が読み取れなかったということなので、ポケコン上で CLOSE [RET] と入力して Close にしておくように。 その他のエラーが表示された場合は CLOSE [RET] と入力してから、エラーが出た原因を調べ、直してから「ステップ 1」からや り直す。 (転送が終わったらエミュレータのGZOISの場合、必ず、Files > SIO > SI > CLOSE を選んでおくように。) STEP 5) これで マシン語プログラムがポケコンにロードされた状態になったので、 正常に転送されたかどうかをみてみたい場合、例えば PEEK&BE701 [RET] と入力すると、現在「BE701」アドレスに入っている値が表示されるので、正し い値が入っているかが確認できる。 STEP 6) RAM ファイル(E:ドライブ等)に保存する場合、 DSKF"E:" [RET] と入力して、E:ドライブに 必要な容量の空きがあるのを確認してから SAVEM"E:ABC.BIN",&BE700,&BFC00 [RET] のように入力して保存する。(開始アドレスと終了アドレスはプログラムに よって違うので、この部分は各自確認してから必要な変更を加えて実行するよ うに。) ===================================================================== おまけ: マシン語プログラムのロード&起動の仕方: 上記のステップを踏んで、E:ドライブに ABC.BIN が存在する場合、次からは 下記の2行を入力するとロード&起動ができる。 LOADM"E:ABC.BIN" [RET] CALL&BE700 [RET] (開始アドレスはプログラムによって違うので、この部分は 各自確認してから必要な変更を加えて実行するように。) ===================================================================== 「HEX_LOADER.BAS」のプログラム: 1000 ' 1010 ' Program name: HEX_LOADER.BAS 1020 ' 1030 ' This program loads machine 1040 ' language program that is 1050 ' saved in text format on your 1060 ' personal computer to your 1070 ' pocket computer. 1080 ' 1090 ' Supported Pocket Computers: 1100 ' PC-E500, PC-1480U, PC-1490U 1110 ' PC-E550, PC-1490UII, PC-E650 1120 ' PC-U6000 1130 ' 1140 ER=0 1150 CLS 1160 ' 1170 PRINT "=== HEX LOADER by jsurfer 2013/12/05 ===" 1180 PRINT "トチュウデトマッタバアイ、ツギノギョウヲ ニュウリョクシテクダサイ。" 1190 PRINT "CLOSE [RET]" 1200 PRINT "ファイルノ テンソウヲ ハジメテクダサイ..." 1210 ' 1220 OPEN "9600"AS #1 1230 A$="" 1240 INPUT #1,A$ 1250 IF MID$ (A$,6, 1)<>" " AND MID$ (A$,6, 1)<>":" THEN ER=1:GOTO *ERROR 1260 IF A$="" THEN ER=2:GOTO *ERROR 1270 IF ASC (LEFT$ (A$,1))<48 THEN ER=3:GOTO *ERROR 1280 IF ASC (LEFT$ (A$,1))>57 AND ASC (LEFT$ (A$,1))<65 THEN ER=3:GOTO *ERROR 1290 IF ASC (LEFT$ (A$,1))>70 THEN ER=3:GOTO *ERROR 1300 IF ASC (MID$ (A$,2,2))<48 THEN ER=4:GOTO *ERROR 1310 IF ASC (MID$ (A$,2,2))>57 AND ASC (MID$ (A$,2,2))<65 THEN ER=4:GOTO *ERROR 1320 IF ASC (MID$ (A$,2,2))>70 THEN ER=4:GOTO *ERROR 1330 IF ASC (MID$ (A$,3,3))<48 THEN ER=5:GOTO *ERROR 1340 IF ASC (MID$ (A$,3,3))>57 AND ASC (MID$ (A$,3,3))<65 THEN ER=5:GOTO *ERROR 1350 IF ASC (MID$ (A$,3,3))>70 THEN ER=5:GOTO *ERROR 1360 IF ASC (MID$ (A$,4,4))<48 THEN ER=5:GOTO *ERROR 1370 IF ASC (MID$ (A$,4,4))>57 AND ASC (MID$ (A$,4,4))<65 THEN ER=6:GOTO *ERROR 1380 IF ASC (MID$ (A$,4,4))>70 THEN ER=5:GOTO *ERROR 1390 IF ASC (MID$ (A$,5,5))<48 THEN ER=6:GOTO *ERROR 1400 IF ASC (MID$ (A$,5,5))>57 AND ASC (MID$ (A$,5,5))<65 THEN ER=7:GOTO *ERROR 1410 IF ASC (MID$ (A$,5,5))>70 THEN ER=6:GOTO *ERROR 1420 IF LEN A$>34 THEN ER=8:GOTO *ERROR 1430 ' 1440 A=VAL ("&"+LEFT$ (A$,5)) 1450 AA = A 1460 *START 1470 IF A$="END" THEN *FIN 1480 PRINT HEX$ A;" "; 1490 A$=MID$ (A$,7,23) 1500 PRINT A$ 1510 *NEXTHEX 1520 B$=LEFT$ (A$,2) 1530 IF LEN B$<2 THEN *READLINE 1540 POKE A,VAL ("&"+B$) 1550 A=A+1 1560 A$=MID$ (A$,4,40) 1570 GOTO *NEXTHEX 1580 ' 1590 *READLINE 1600 A$="" 1610 INPUT #1,A$ 1620 GOTO *START 1630 ' 1640 *ERROR 1650 CLOSE 1660 PRINT "!!! エラー #";ER;" !!!" 1670 IF ER=1 THEN PRINT "6バンメノ キャラクタガ [space]カ[:] デハアリマセン。":GOTO *EXAMPLE 1680 IF ER=2 THEN PRINT "サイショノ ギョウガ ブランクデス。":GOTO *EXAMPLE 1690 IF ER=3 THEN PRINT "1ギョウメノ 1バンメノキャラクタガ HEX ニナッテイマセン。":GOTO *EXAMPLE 1700 IF ER=4 THEN PRINT "1ギョウメノ 2バンメノキャラクタガ HEX ニナッテイマセン。":GOTO *EXAMPLE 1710 IF ER=5 THEN PRINT "1ギョウメノ 3バンメノキャラクタガ HEX ニナッテイマセン。":GOTO *EXAMPLE 1720 IF ER=6 THEN PRINT "1ギョウメノ 4バンメノキャラクタガ HEX ニナッテイマセン。":GOTO *EXAMPLE 1730 IF ER=7 THEN PRINT "1ギョウメノ 5バンメノキャラクタガ HEX ニナッテイマセン。":GOTO *EXAMPLE 1740 IF ER=8 THEN PRINT "1ギョウメノ ナガサガ 34 イジョウニナッテイマス。":GOTO *EXAMPLE 1750 ' 1760 *EXAMPLE 1770 PRINT "ツヅケルニハ [C] キーヲ オシテクダサイ。"; 1780 Z$="":Z$=INKEY$ : IF Z$="C" OR Z$="c" THEN 1790 ELSE 1780 1790 PRINT :PRINT "コノプログラムハ カキノ フォーマットデナイト ウゴキマセン:" 1800 PRINT "BE700 01 02 03 04 05 06 07 08"; 1810 END 1820 ' 1830 *FIN 1840 CLOSE 1850 PRINT "テンソウガ ブジ シュウリョウシマシタ。" 1860 A=A-1:PRINT "START/END ADDRESS: ";HEX$ AA;"/";HEX$ A 1870 END  ===================================================================== 配布は自由に行ってもらって構いません。事前、事後の報告も必要がないので ご自由にお使いください。