<?xml version="1.0" encoding="UTF-8" ?><rdf:RDF 
  xmlns="http://purl.org/rss/1.0/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xml:lang="ja">
  <channel rdf:about="http://w.atwiki.jp/imapoke/">
    <title>imapoke @ ウィキ</title>
    <link>http://w.atwiki.jp/imapoke/</link>
    <atom:link href="https://w.atwiki.jp/imapoke/rss10.xml" rel="self" type="application/rss+xml" />
    <atom:link rel="hub" href="https://pubsubhubbub.appspot.com" />
    <description>imapoke @ ウィキ</description>

    <dc:language>ja</dc:language>
    <dc:date>2013-04-17T20:17:47+09:00</dc:date>
    <utime>1366197467</utime>

    <items>
      <rdf:Seq>
                <rdf:li rdf:resource="https://w.atwiki.jp/imapoke/pages/32.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/imapoke/pages/2.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/imapoke/pages/31.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/imapoke/pages/15.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/imapoke/pages/1.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/imapoke/pages/29.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/imapoke/pages/30.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/imapoke/pages/28.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/imapoke/pages/27.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/imapoke/pages/26.html" />
              </rdf:Seq>
    </items>
	
		
    
  </channel>
    <item rdf:about="https://w.atwiki.jp/imapoke/pages/32.html">
    <title>g800win32(2)</title>
    <link>https://w.atwiki.jp/imapoke/pages/32.html</link>
    <description>
      ***使用方法①
　ＢＡＳＩＣ＋マシン語のプログラムの読み込みと実行
***●マシン語領域の確保
予め必要なだけマシン語領域を確保しておく
	[BASIC]
	MON[enter]
	USER XXXX[enter]
***●マシン語(インテルHEXファイル)の読み込み
[F4]を押すと、エミュレータ独自の「メニューモード」が立ち上がる。以下メニューの頭文字の英数を押して機能を選択する。
	[Sio]		sioから入力するファイル指定(BASIC TEXT 用)
	[File]		ファイルから直接インテルHEXファイルを入力
	[CLR]		元のポケコン本来のモードに戻る
マシン語プログラムはFileモードから読み込む
[F]キーを押すと次の画面に進む
	[Read]		インテルHEXファイルの読み込み
	[Write]		インテルHEXファイルの書き出し
[R]キーで読み込むファイルを入力するモードに進む

そこから[TAB]キーでファイルを一覧から選択モードとなる
読み込むHEXファイルを選択する
../ は上位ディレクトリに移動
dirname/ は下位ディレクトリに移動
ファイルを選択して[ENTER]を押すとファイルが読み込まれる

***●BASICのファイルを選択する
ここでは、ポケコン本来の[TEXT][Sio]で読み込まれるファイルを指定するだけ
実際の読み込みは[TEXT][Sio]で行う

***●通信条件の設定
事前に[TEXT][Format]で通信条件をあわせておく必要がある
	baud rate =4800
	data bit  =8
	stop bit  =*
	parity    =*
	end of line =CR LF
	end of file =1A
	line number =yes

　&quot;*&quot;で示した部分は、シリアル通信に依存している部分であるためどのように設定しても動作に支障はないと思われる。boud rateはポケコン側の読み込み速度なので最大速度に設定しておけば良い。

line number はnoで各行に行番号が付加される。yesであれば、行番号は元々のファイルについているとみなされ付加されない。

***●SioからBASICのテキストファイルを読み込んでBASICに変換
	[TEXT][Sio][Load]
	[TEXT][Basic←text]
***●BASICに戻って実行    </description>
    <dc:date>2013-04-17T20:17:47+09:00</dc:date>
    <utime>1366197467</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/imapoke/pages/2.html">
    <title>メニュー</title>
    <link>https://w.atwiki.jp/imapoke/pages/2.html</link>
    <description>
          </description>
    <dc:date>2013-04-17T20:14:41+09:00</dc:date>
    <utime>1366197281</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/imapoke/pages/31.html">
    <title>SDCC(1)</title>
    <link>https://w.atwiki.jp/imapoke/pages/31.html</link>
    <description>
      SDCC(Small Device C Compiler)はフリーのCコンパイラである。
----
**使用例
以下のテストプログラム(TEST001.C)を入力して
	#include &lt;stdio.h&gt;
	char	strBuf[32];			//文字列
	void main(){
		int i;
		int foo=1;
		for (i=0;i&lt;10;i++) {
			foo *= 2;
		}
		sprintf(strBuf,&quot;ans=%d&quot;,foo);
	}

以下のバッチファイル(MKTEST001.BAT)でコンパイルする
	sdcc -mz80 --no-std-crt0 --code-loc 0x0100 --data-loc 0x1000 test001.c
	pause
内容：Z80コード 標準入出力用コードをつけない 0x0100からコード領域 0x1000から外部変数領域

**実行
マシン語領域を確保して、SCDDが出力したインテルHEX形式のファイル(.ihx)をポケコンにアップロードして実行する
	MON[enter]
	USER1200[enter]
	R[enter]
	G100[enter]

**実行結果
D1000[enter]とすると
&quot;ans=1024\0&quot;
とメモリに書き込まれている。（メモリダンプ横のキャラクタ表示を参照）
#ref(SDCC01.PNG)
組み込み関数を使用した場合コードサイズが大きくなってしまうため、入出力関数は独自にIOCSをコールする形で組みなおしたほうがよさそうだ。
----
**転送時の注意
　SDCCが出力するインテルHEXフォーマット(.ihx)ファイルは一行が最長32バイトになっている。そのためポケコンにアップロードするときに文字解析とメモリへの格納が追いつかないことがあった(PC-G801実機の場合)。
　TeraTermでは、zasmが出力するファイルにあわせて一行ごとに60msのウェイトを入れていたが
とりあえず一行ごとのウェイトを２倍の120msに設定してやるとうまく転送できる。    </description>
    <dc:date>2013-04-15T20:15:12+09:00</dc:date>
    <utime>1366024512</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/imapoke/pages/15.html">
    <title>管理者用テストページ</title>
    <link>https://w.atwiki.jp/imapoke/pages/15.html</link>
    <description>
          </description>
    <dc:date>2013-04-15T20:06:55+09:00</dc:date>
    <utime>1366024015</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/imapoke/pages/1.html">
    <title>トップページ</title>
    <link>https://w.atwiki.jp/imapoke/pages/1.html</link>
    <description>
      #center(){SHARP PC-G801 / PC-G850 / PC-G850S
*今更ポケコンプログラミングに挑戦＠Ｗｉｋｉ
～ノーマニュアルでビギニングです～}
#right(){Author ぽこけん(POKOKEN)}
----
**&amp;bold(){当サイトの目的}
　Wiki主が偶然入手したポケコンを活用したくて右往左往するWikiです。

　このWikiの内容は全て個人的研究と参考、引用の産物です。語尾には全て「…らしい」という言葉を補ってお読み下さい。

　&amp;color(red){全てマニュアルなしで入手したので、マニュアルに書かれていることが再掲載されているかもしれません。知ってるよーという内容は華麗にスルーして下さい。}

**&amp;bold(){当サイトの方針}
	取り扱うものは基本的に、SHARPのZ-80搭載ポケコンの情報のみ
	本体内蔵のCASL,Z80ASSEMBLER,C-LANGUAGEは使用しない
	RAMファイルもなるべく使用しない
	動く/動かせるものを提示してゆく
	ソースは「コメントだく」で

情報、ご意見,ご希望は以下のコメント欄にどうぞ。
#comment
----
|訪問者カウンタ　|累計：&amp;counter()　|本日：&amp;counter(today)　|昨日：&amp;counter(yesterday)|    </description>
    <dc:date>2013-03-21T20:35:27+09:00</dc:date>
    <utime>1363865727</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/imapoke/pages/29.html">
    <title>G801 ROM解析事始</title>
    <link>https://w.atwiki.jp/imapoke/pages/29.html</link>
    <description>
      ***目標
　・SDCCからG801のBASIC ROM内にある浮動小数点演算などをコールすることが出来るライブラリ関数を作る
　・シャープのポケコンはIOCSのコールアドレスやBASICのワークエリアに共通点が多いため。自他のG850系列の解析時の助けになることを期待する。
　・以上を実現するため、まずバンクの少ないG801のROMを解析してみる。
　・その過程、手順を逐次追記する
----
***１日目
　ネットで拾ってきたPC-E220マニュアル(ドイツ語版)等を参考に、G801のメモリマップを推測すると以下のようになる。

0000-1FFF　RAM
2000-3FFF　RAM IMAGE
4000-5FFF　RAM IMAGE
6000-7FFF　RAM IMAGE(BASICのワークとしてアクセス？)
8000-BFFF　ROM BANK0固定
C000-FFFF　ROM BANK1/BANK2/BANK3を切り替え

　Z-80ではリセット時にプログラムカウンタが0000Hとなるため０番地付近がRAMではまずい。バンクのうちひとつがリセット時に０番地付近に割り当てられるのではと推測。
　エミュレーターg800へのROM吸出し時にBANK0の先頭がC32C12 つまりJP 122CHとなっているのを見た。これはRAM領域へのジャンプであり不自然、BANK0がブートROMになっていて、リセット時には以下の様になるのではと推測。

0000-3FFF　ROM BANK0　(ブートROMとしてここに割当てられる)
4000-7FFF　???(ROMが来るのかRAMが来るのか不明)
8000-BFFF　ROM BANK0
C000-FFFF　ROM BANK1/BANK2/BANK3
----
***２日目
　以降、0000h～03FFFHにBANK0が割り当てられた状態をBANK4と呼ぶことにする。

　g800用のROM吸出しプログラムを改造、本来のアドレスに置かれているようにインテルHEXファイルを出力しなおした。
　　BANK0	8000～BFFF
　　BANK1~3	C000～FFFF
　　BANK4	0000～3FFF(BANK0がこのアドレスに割当たっているとみなす)

それを逆アセンブラhojaにかけて解析する。

　吸出しプログラムが不完全なようでチェックサムエラーが出たり、逆アセンブルリストが表示されないバンクがあるが。BANK0,BANK4の逆アセンブルのみ成功。

　その動作を追うと、0000HでJP 122CH(BANK4内)にジャンプした後IM1 DI BANK1をセットと処理した後。FFFAH(BANK1)番地にジャンプしている。

　どうやらリセット後のシーケンスは以上の推測で当たりかと思われる。
----
***３日目
　ポケコンの変数は全て浮動小数点であり、32767を超える数値に対してAND等のビット演算を行うことが出来ない。
　多分それが原因でインテルHEXファイルが正確に出力されていないようで、チェックサムが合わない、ファイルが大きすぎるなどのエラーが続出、hojaに適合したヘキサファイルを作ることが出来なかった。
　苦肉の策として、作ったヘキサファイルからバイナリファイルを作って逆アセンブルすることにした。

　HSPで変換プログラムを作ってインテルヘキサ形式からバイナリに変換し、hojaに渡すときに-oXXXX オブションで配置されるアドレスを指定して逆アセンブルしてやると、すんなり成功。
　とりあえずこれでG801の全バンクの逆アセンブルリストが得られたので、前回のリセット処理からちょっとだけ進めることができた。
	リセット時には普段8000HにあるBANK0が0000Hからにも割り当てられる
	0000H番地から実行スタート
	122CHへジャンプ
	割り込みモード１、割り込み禁止
	C000HからのバンクをBANK1にセット
	BANK1のFFFAHへジャンプする
	----ここから今回----
	FFFAHからすぐにC000H(BANK1)へジャンプ
	ＳＰを7FFEH番地にセット
	いろいろI/Oに出力
	.....
　さて、これでやっとG801のROMを解析する準備が整った…
----
***４日目以降の予定
　・ROMのどこを重点的に解析するかのあたりをつける
　・BASICの各種処理ルーチンを呼び出す前に、引数となる不動小数点数を格納する「浮動小数点アキュムレータ」なるものが必要な引数の数だけ存在するはず。マシン語のデータ列検索ルーチンを使ってその領域を特定してゆく。    </description>
    <dc:date>2013-03-21T20:33:47+09:00</dc:date>
    <utime>1363865627</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/imapoke/pages/30.html">
    <title>使用ツール</title>
    <link>https://w.atwiki.jp/imapoke/pages/30.html</link>
    <description>
      作者名は敬称略
|BGCOLOR(lightgray):ソフト名|BGCOLOR(lightgray):Z80アセンブラZASM|
|作　者|川端 晃史|
|動作ＯＳ|MS-DOS|
|備考|IF~ENDIF やマクロなどがサポートされていないのが残念|
|BGCOLOR(lightgray):ソフト名|BGCOLOR(lightgray):Tera Term|
|作者|平田 豊|
|動作OS|Windows 7/Vista/XP/Me/2000/98/95/NT|
|備考|マシン語プログラムのアップロードに使用|
|||
|BGCOLOR(lightgray):ソフト名|BGCOLOR(lightgray):hoja|
|作者|大場 正輝|
|動作OS|MS-DOS|
|備考|入力ファイル名は8+3文字のMS-DOS仕様である必要がある|
|BGCOLOR(lightgray):ソフト名|BGCOLOR(lightgray):Ｇ－ＬＩＮＫ|
|作者|ＳＨＡＲＰ|
|備考|行番号を付けてくれる機能があり、BASICプログラムのアップロードに便利|
|||
|BGCOLOR(lightgray):ソフト名|BGCOLOR(lightgray):ペイント|
|作者|Ｍｉｃｒｏｓｏｆｔ WindowsXP付属|
|備考|ドット作成にはこれで十分|

以降は、これから使用するかもしれないソフトウェア
|BGCOLOR(lightgray):ソフト名|BGCOLOR(lightgray):Z80シミュレータ for Win32|
|作者|ともひろ|
|動作OS|Windows Me/2000/98/95/NT|
|備考|最新版は作者のHPにあり　VectorにあるVerでは一部実行できない命令があった|
|||
|BGCOLOR(lightgray):ソフト名|BGCOLOR(lightgray):『MSX MAGAZINE 永久保存版3』(書籍)|
|作者|株式会社アスキー発行|
|備考|MSX-PLAYER上での動作になるが、アセンブラ、リンカ、デバッガ、ＣなどのZ80開発環境が一揃い収録されている|    </description>
    <dc:date>2013-03-19T03:48:19+09:00</dc:date>
    <utime>1363632499</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/imapoke/pages/28.html">
    <title>ポケコンエミュレータg800</title>
    <link>https://w.atwiki.jp/imapoke/pages/28.html</link>
    <description>
      　「SHARP PC-G850/G815/E200エミュレータ g800」(以下g800)は[[- Version 0 -&gt;http://www16.ocn.ne.jp/~ver0/]]で公開されている まるひろ さん作のポケコンエミュレータ。

　PC-G801は動作保証されていないが。以下に掲載する自作プログラムでPC-G801のROMを吸い出して動作させることに成功した。

***PC-G801 ROM吸出し手順
●ポケコンをオールリセットする
●パソコンとの通信条件を合わせる(忘れがち…)
●マシン語と転送バッファの領域を確保する
  MON[enter]
  USER1250[enter]
  [BASIC]
●以下のプログラムをポケコンにアップロードする
　&amp;ref(CPROM801.BAS)			;バンクの指定とシリアルポートへの出力
　&amp;ref(CPROM801.HEX)			;ROMバンク切り替えとRAMへの転送、16進文字列への変換
（BASICのプログラムには行番号がついていない。PCG-LINKで.BASファイルを読み込んだら行番号が付加される）
●TeraTermを起動する
●TeraTermでログの記録を開始し、BASICプログラムをRUNする
●ROMデータの転送が開始される。所要時間は4800bpsで１時間１０分ほど
●ログファイルにROMの内容が全て出力される。
●プログラムが終了したら、つづけて以下の手順でベクトル領域の転送を行う
  MON[enter]
  W0,3F[enter]
  [BASIC]
●テキストエディタでログファイルを開く
●BANK=xのところで切り出して(BANK=xの行は要らない) rom00.txt～rom03.txtという名前でセーブする。
●最後に転送したベクタ部分(最後の５行)はbase.txtという名前でセーブする。
●吸い出したROMファイルをg800が規定するフォルダに入れてconfigファイルのエミュレーション機器をE200にセット。
●g800起動


　以上の操作でG801のROMを吸い出し、g800でエミュレートすることができた。

　しかし、RAMはオリジナルの8KBではなく32KBあることになってしまうようで、ALLRESET直後、BASICからFREを実行すると30435と表示される。

　したがってG801用でBASICのワークエリアが1800-1FFFにあると想定されて書かれたプログラムは異常動作を起こす。

　BASIC側から見ると、G801のワークエリアは0000-1FFFのメモリイメージを6000-7FFFとみなしてアクセスしているようなので矛盾が生じていないようだ。

　増えた分のRAMがちゃんとRAMとして使えるかは近日検証

※参考 CPROM801.HEXのアセンブラソース&amp;ref(CPROM801.asz)（タブの文字数は４で）    </description>
    <dc:date>2013-03-07T02:52:29+09:00</dc:date>
    <utime>1362592349</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/imapoke/pages/27.html">
    <title>パソコンへ処理結果を転送</title>
    <link>https://w.atwiki.jp/imapoke/pages/27.html</link>
    <description>
      ターミナルソフトとパソコンの通信条件を合わせる。
機械語モニタからW0,100を実行する。
ターミナルの画面に16進数がズラズラっと表示されれば接続はOK。

以下のBASICプログラムを実行

1000 OPEN &quot;COM:&quot;
1010 PRINT #1,&quot;Hello PC-G801.&quot;
1020 CLOSE

ターミナルソフトに&quot;Hello PC-G801.&quot;と表示される。
必要に応じてログを取ればファイルに落とすこともできる。    </description>
    <dc:date>2013-03-05T02:22:11+09:00</dc:date>
    <utime>1362417731</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/imapoke/pages/26.html">
    <title>G801のメモリー(電卓としての)領域について</title>
    <link>https://w.atwiki.jp/imapoke/pages/26.html</link>
    <description>
      　BASICのRUNモードで[M+][R･CM]キーで使用するメモリー(電卓としての)が使用するメモリ(Ｚ８０の)領域を調べる。(ﾔﾔｺｼﾔ)

  ①RUNモードで[AC] 9538 [M+]を実行する
  ②下のプログラムを走らせてメモリーに入れた数値が入っているメモリ領域を探す
    10 FOR A=&amp;H1000 TO &amp;H1FFF
    20 IF PEEK(A)=&amp;H95 THEN PRINT A
    30 NEXT

その結果…

01998H～0199FHに一文字変数に数値を格納するのと同じ浮動小数点フォーマットで格納される。

※一文字変数領域とは異なり、先頭の一バイトをF5に書き換えても[R･CM]キーで文字列が出力されることはなかった。


ついでにANS領域も判明

1.122334455E29[enter]
019A0:02 90 11 22 33 44 55 00

※一文字変数領域とは異なり、先頭の一バイトをF5に書き換えても[ANS]キーで文字列が出力されることはなかった。

これらの領域がわかったところで何の得にもならない気もするが、もしワークエリアがどうしても５～１０バイト足りなくなったときに利用できるかもしれない……    </description>
    <dc:date>2013-03-03T01:56:11+09:00</dc:date>
    <utime>1362243371</utime>
  </item>
  </rdf:RDF>
