2012年2月28日火曜日

FDの吸出し

次は、FDに溜まっているデータを吸出し

吸出しには、98を使う。
用意したのはPC-9821Af。外付けFDDのコネクタが標準で付いていたので。

しかし外付けFDDではうまく吸い出せず、ファイルスロットのFDDを利用。
吸出し用のソフトは、このサイトを参考にさせてもらった。

一番簡単だったのは、MAKE_HDというツール。
Bドライブが5inchドライブの場合、以下のコマンドでファイルを作ってくれる。

MAKE_HD B: -r 1 -f DISK.D88


MAHALITとDILTOを使う場合、

MAHALITO.EXE A -2D B: A:\BIN\MAHALITO\DISK
DILTO.EXE -w DISK


注意が必要なのは、1枚吸い出す度に本体をリセットした方が良いという点。
連続して実行すると、正しく吸い出せない場合があった。(単密度で吸い出しているっぽい)

原因は不明だが、パソピアと88ではフォーマットが違うからかもしれない。
パソピア88
トラック数3540
0ヘッド0トラック単密度倍密度
などなど。

#ちなみに、これらのツール、ハイレゾモードでは動かなかった。。

エミュレータをちょっといじって、吸い出したFDイメージから起動してみると、ディスクベーシックもちゃんと動いた。

すばらしい。。

2012年2月27日月曜日

フォントROMの作成

エミュレータにはフォントファイル(font.rom)が添付されているが、ちょっと太め
不自由なく使えていたが、ちょっと気になったので、オリジナルと同じフォントを作ることに。
まずは、実機でフォントを表示して、デジカメで写真とっとく。
純正のモニターだとぼやけてしまうので、西田ラヂオさんのS端子アダプタで、LCDに表示したものを写真に。断然見やすい。

フォント打込みは、Oh!PASOPIAの創刊2号に掲載の、パソピア7「スーパーフォント」というプログラムを使う

写真を見ながら、ポチポチ入力してく。
入力した文字は、0xA000~0xA7FFにフォントデータとして保存されているので、
BSAVE #-1,"FONT",&HA000,&H800
でwavファイルに保存。

実は、このプログラムが作成するフォントデータと、エミュレータのフォントフォーマットが同じなので、wave2bin.exeでバイナリに変換して、ヘッダーと最後を切り取って0x800バイトにして「font.rom」というファイルで保存すると、フォントファイルができてしまう。

出来たフォントでエミュレータを使ってみる

ちょー自己満足。

2012年2月26日日曜日

漢字ROMの吸出し

漢字ROM PACには、型番がPA7247のものとPA7246の2種類がある。
うちにあるのはPA7246で、カセットテープ付。

初代パソピアで漢字を使う場合、このサブルーチンカセットが必要。
ROM吸出しは、パソピア7を使う

基本は、武田さんのページに記載されている吸出し方法。
ROMが正しく読み出せたか検証したかったので、バイナリをダンプするように改良。
(その結果、処理時間がオリジナルより遅くなった。。)

100 data &hf5, &h3e, &h00, &hd3, &h1b, &h3e, &h00, &hd3
110 data &h18, &h3e, &h00, &hd3, &h19, &h3e, &h00, &hd3
120 data &h1a, &hdb, &h18, &h32, &h00, &h00, &h32, &h1b
121 data &hf0, &hf1, &hc9
130 clear ,&hefff
140 for a=&hf000 to &hf01a
150  read d:poke a,d
160 next a
161 width 80
170 input "slot (0-7)",s
180 print "0: 00000-07fff"
190 print "1: 08000-0ffff"
200 print "2: 10000-17fff"
210 print "3: 18000-1ffff"
220 input "range (0-3)",r
230 if r=0 then ms=&h00:h=0:goto 300
240 if r=1 then ms=&h80:h=0:goto 300
250 if r=2 then ms=&h00:h=1:goto 300
260 if r=3 then ms=&h80:h=1:goto 300
270 end
300 poke &hf002,s
310 poke &hf00e,h
320 for m=0 to &h7f
330  print hex$(m);"xx : ";
340  poke &hf00a,m+ms
350  poke &hf015,m
360  for l=0 to &hff
370   poke &hf006,l
380   poke &hf014,l
390   a=&hf000:call a
391   if (l>=0 and l<=7) or (l>=248 and l<=255) then a=peek(&hf01b):print right$("0"+hex$(a),2);" ";else if l mod 16=0 then print ".";
400  next l
401 print ""
410 next m

range 0~3でそれぞれ実行。bsave #-1,"KANJI",0,&h8000でwavファイルに録音して、wave2binでバイナリ化。ヘッダーと最後を削除、出来た4つのバイナリを合成して「kanji.rom」というファイル名で保存。

本体付属のカセットは、データレコーダーをPCに接続して、「ぷちれこ」でそのままwavファイルに保存。
パソピア7のデータレコーダーもあったが、シャープポケコン用のデータレコーダーを使用。
ポケコン用の方はトーン調整ができて、比較的データ化けが少なかったと思う

エミュレータをちょっと改良して、漢字ROMを試してみると、
表示できた。
#SCREEN 2でないと表示できないのね。。

2012年2月25日土曜日

パソピアのROM吸出し

次はパソピアのROM吸出し
まずは、実機を用意。RAM PACがあると更に便利

前回、パソピア7のBIOS吸出しで使ったプログラムをそのまま使う
RAM PACに保存しておけば、パソピア<->パソピア7間で、プログラムの受け渡しが簡単

パソピア7のBASICと同じように2回に分けて録音
同じプログラムをRUNで実行し、以下のように入力
前半
Memory Mode
(0bit:ROM[0:OnboardROM, 1:ROM Pack], 1bit:RAM[0:ROM Mode, 1:64KRAM Mode]) &H00
Source Address: &H0000
Destination Address: &H9000
Translation Byte: &H4000
・・・
BSAVE #-1,"BASIC1",&H9000,&H4000
後半
Memory Mode
(0bit:ROM[0:OnboardROM, 1:ROM Pack], 1bit:RAM[0:ROM Mode, 1:64KRAM Mode]) &H00
Source Address: &H4000
Destination Address: &H9000
Translation Byte: &H4000
・・・
BSAVE #-1,"BASIC2",&H9000,&H4000

パソピア7と同じように、バイナリエディタでそれぞれ0x4000バイトに編集。
あわせて0x8000バイトのファイルを作成し、「TBASIC10.ROM」 or 「TBASIC11.ROM」というファイル名で保存。
T-BASICには、Ver1.0とVer1.1の2種類のROMが存在するが、どちらも同じ吸出し方

次は、OA-BASICを吸い出し

写真のようにOA-BASICがROM PACから起動されている場合、BSAVEする前に以下を実行して、ROM PACへバンク切り替えしておく
OUT #60,1

以下のコマンド打ち込んでwavファイルに録音
BSAVE "CT1","OABAS",0,32767,32768

ROM PACのOA-BASICバイナリを画面に表示させたい場合、
OA-BASICで以下を実行し、T-BASIC ROMにバンク切り替え
OUT #60,0

その後、本体背面のリセットボタンを押すと、T-BASICが起動。
先ほどのプログラムを実行して、ROMの内容をダンプ

保存したwavファイルをweb2bin.exeでbinファイルに変換。ダンプ表示と同じになるように、バイナリエディターでヘッダー部分などを削除。0x8000バイトになったら、「OABASIC.ROM」というファイル名で保存。

最後に、Mini Pascalの吸出し
これが一番大変だった。

ROM PACをパソピアにセットして起動。
Mini Pascalが立ち上がったら、以下を入力して実行。
.INSERT
1 PROGRAM ROM;
2  BEGIN
3   OUT (60,0);
4 END.
.RUN


しばらくしてT-BASICの「How many files(0-15)?」が表示されたら、背面のリセットボタンでリセット
(一度リセットしないと、文字が入力できない状態)
これでT-BASICが使える状態になるので、BASIC吸出しで使ったプログラムでROM内容をコピーする。

ここで問題。コピーサイズが大きいと、メモリーコピーしている途中でハングしてしまう。
ハングしたら、一旦電源OFFでやり直し。

そこでコピーサイズは0x0100程度にして、コピーするたびにRAM PACに逐次保存していく、の繰り返し。
ときどきハングするので、RAM PACから保存してある部分をロードしなおして、やり直し。

あとは、BASICの吸出しと同じ手順でROMファイルを作成。作成したファイルは「PASCAL.ROM」で保存しておく

2012年2月24日金曜日

パソピアのエミュレータ

東芝のパソコンというと、御三家に比べてマイナーでソフトも少なかった。
そんなマイナー機のエミュレータを作っている人がいて、ちょっと感動。
ありがたく使わせてもらう。

まずはパソピア7。BIOSとBASICを吸い出す必要があるので、実機を用意。
データレコーダーとの接続ケーブルも必要。

録音は ぷちれこ(PetitRec)を使用。設定は48000Hz/8ビット/モノラルで録音。
Vistaでは録音できなかったのでXPで使用。XPなら64bit版XPでも大丈夫だった。

データレコーダー接続ケーブルの録音端子(赤)を、PCのライン入力に接続。
サウンドカードによっては結構ノイズを拾ってしまうので、品質の良いサウンドカードをお勧め。

パソピア7で、以下を入力。
コメントを入れるとオーバーメモリーになるので、コメント部分は入力しないどく
1000 CLEAR ,&H8FFF
1010 WIDTH 80
1020 GOSUB 2010
1030 GOSUB 9010
1040 IF VER<>5 THEN GOSUB 9010
1050 GOSUB 2110
1060 A=&HF000:CALL A
1070 S=VAL("&H"+DA$)
1080 GOSUB 3010
1090 PRINT "":PRINT "... "
1100 S=VAL("&H"+DA$)+VAL("&H"+TB$)-128
1110 GOSUB 3010
1990 END

2000 '--- Version Check ---
2010 P=PEEK(&HFFFB)
2020 IF P=&H58 THEN VER=1:PRINT"T-ROM Ver 1.0"
2030 IF P=&H0C THEN VER=2:PRINT"T-ROM Ver 1.1"
2040 IF P=&H76 THEN VER=3:PRINT"T-DISK Ver 1.0"
2050 IF P=&H45 THEN VER=4:PRINT"T-DISK Ver 2.0"
2060 IF P=&H84 THEN VER=5:PRINT"T-BASIC7 Ver 1.0"
2070 IF VER=0 THEN PRINT"Unknown Version"
2080 RETURN

2100 '--- Set Parameter ---
2110 A=&HF0F0
2200 PRINT"Memory Mode ";
2210 IF VER=5 THEN PRINT"(1:BIOS, 2:RAM, 4:V-RAM, 8:I/O Memory Mode)"; ELSE PRINT"(0bit:ROM[0:OnboardROM, 1:ROM Pack], 1bit:RAM[0:ROM Mode, 1:64KRAM Mode])";
2220 INPUT" &H",MM$
2300 POKE A+0, VAL("&H"+MM$) :'F0F0 メモリーモード 0bit:BIOS, 1bit:RAM, 2bit:V-RAM, 3bit:I/O Memory Mode
2310 POKE A+1, VAL("&H"+VS$) :'F0F1 V-RAM Select 11H:Blue, 22H:Red, 44H:Text/Green
2320 POKE A+2, VAL("&H"+RIGHT$(SD$,2)):'F0F2 転送元アドレス
2330 POKE A+3, VAL("&H"+LEFT$(SD$,2))
2340 POKE A+4, VAL("&H"+RIGHT$(DA$,2)):'F0F4 転送先アドレス
2350 POKE A+5, VAL("&H"+LEFT$(DA$,2))
2360 POKE A+6, VAL("&H"+RIGHT$(TB$,2)):'F0F6 転送バイト数
2370 POKE A+7, VAL("&H"+LEFT$(TB$,2))
2380 RETURN 

3000 ' --- Display Memory ---
3010 FOR I=S TO S+127
3020 IF I MOD 16=0 THEN PRINT "":PRINT RIGHT$("000"+HEX$(I),4);": ";
3030 A=PEEK(I):PRINT RIGHT$("0"+HEX$(A),2);" ";
3040 NEXT I
3050 RETURN

9000 ' --- Set Data ---
9010 A=&HF000
9020 READ D$
9030 WHILE D$<>"END"
9040 POKE A,VAL("&H"+D$)
9050 A=A+1
9060 READ D$
9070 WEND
9080 RETURN

9100 ' --- Data ---
9200 ' Initialize
9210 DATA DB,22 :'F000 IN A,(22H) メモリーステータス取得 0bit:BIOS, 1bit:RAM 
9220 DATA E6,03 :'F002 AND 03H マスクしてスタック
9230 DATA F5 :'F004 PUSH AF
9240 DATA 00,00,00,00,00,00,00:'F005-F00B NOP パソピア用のために空けておく

9300 'V-RAM Bank Switching
9310 DATA F3 :'F00C DI 割り込み禁止
9320 DATA 3A,F0,F0 :'F00D LD A,(0F0F0H)
9330 DATA D3,3C :'F010 OUT (3CH),A メモリモードセット
9340 DATA 3E,03 :'F012 LD A,03H
9350 DATA D3,0F :'F014 OUT (0FH),A 8255コントロールポート設定
9360 DATA 3A,F1,F0 :'F016 LD A,(0F0F1H)
9370 DATA D3,0C :'F019 OUT (0CH),A V-RAM面セレクト
9380 DATA 3E,08 :'F01B LD A,08H
9390 DATA D3,0D :'F01D OUT (0DH),A アトリビュート設定
9400 DATA FB :'F01F EI 割り込み許可

9500 ' Data Translate
9510 DATA 2A,F2,F0 :'F020 LD HL,(0F0F2H) HL:転送元アドレス
9520 DATA ED,5B,F4,F0:'F023 LD DE,(0F0F4H) DE:転送先アドレス
9530 DATA ED,4B,F6,F0:'F027 LD BC,(0F0F6H) BC:転送バイト数
9540 DATA ED,B0 :'F02B LDIR ブロック転送

9600 ' Restore Memory Bank
9610 DATA F3 :'F02D DI 割り込み禁止
9620 DATA F1 :'F02E POP AF
9630 DATA D3,3C :'F02F OUT (3CH),A メモリモードセット→V-RAMアクセス不可
9640 DATA 3E,02 :'F031 LD A,02H
9650 DATA D3,0F :'F033 OUT (0FH),A 8255コントロールポート設定
9660 DATA FB :'F035 EI 割り込み許可
9670 DATA C9 :'F036 RET
9680 DATA END

9700 ' Initialize for Pasopia T/5
9710 DATA DB,22 :'F000 IN A, (22H) メモリーステータス取得 2bit:RAM(0:ROMモード, 1:64KRAMモード), 3bit:ROM(0:本体ROM, 1:ROMパック)
9720 DATA E6,0C :'F002 AND 0CH 2, 3bitをマスク
9730 DATA 0F :'F004 RRCA Aを3回右ローテイト
9740 DATA 0F :'F005 RRCA
9750 DATA 0F :'F006 RRCA
9760 DATA 30,02 :'F007 JR NC,LF00B 2bit:CarryフラグにRAMの値。Cy=0でジャンプ
9770 DATA F6,02 :'F009 OR 02H 1bit:RAMをセット
9780 DATA F5 :'F00B LF00B: PUSH AF
9790 DATA END
RUN で実行し、以下のように入力してBIOSの内容を0x9000~0xCFFFにコピー
Memory Mode (1:BIOS, 2:RAM, 4:V-RAM, 8:I/O Memory Mode) &H1
Source Address: &H4000
Destination Address: &H9000
Translation Byte: &H4000
画面上には先頭と最後のバイナリが表示されるので、メモっとく。
Windowsでぷちれこの録音を開始して、パソピア側で
BSAVE #-1,"BIOS",&H9000,&H4000
でwavファイルに保存。

エミュレータに同梱されているwav2bin.exeに、録音したwavファイルをドラッグ&ドロップ。
生成されたbinファイルをバイナリエディタで開いて、パソピアの画面に表示されているバイナリと同じになるように、余分なバイナリを削除。
正常に録音できた場合、先頭のヘッダー部分38バイトと、最後の1バイトを削除すると同じになるはず。
もしずれている場合、ノイズなどで正常に録音できていない可能性があるので、録音レベルやサウンドカードを見直してみる
できたバイナリは、「BIOS.ROM」 というファイル名で保存

BASICは2回に分けて録音
前半
Memory Mode (1:BIOS, 2:RAM, 4:V-RAM, 8:I/O Memory Mode) &H8
Source Address: &H0000
Destination Address: &H9000
Translation Byte: &H4000
・・・
BSAVE #-1,"BASIC1",&H9000,&H4000
後半
Memory Mode (1:BIOS, 2:RAM, 4:V-RAM, 8:I/O Memory Mode) &H8
Source Address: &H4000
Destination Address: &H9000
Translation Byte: &H4000
・・・
BSAVE #-1,"BASIC2",&H9000,&H4000

BIOSと同じように、バイナリエディタでそれぞれ0x4000バイトに編集。
あわせて0x8000バイトのファイルを作成し、「BASIC.ROM」 というファイル名で保存。

2012年2月15日水曜日

こんにちは世界

開発環境が動くか、確認してみる

Eclipseを立ち上げて、メニューの「ファイル」-「プロジェクト」を選択

「新規プロジェクト」ダイアログで、「Android」-「Androidプロジェクト」を選択

「プロジェクト名」を入力

ビルド・ターゲットは「Android 3.2」を選択。

「アプリケーション名」、「パッケージ名」、「アクティビティー」を入力

Java用のパースペクティブが表示されるので、左のパッケージ・エクスプローラーで、入力したアクティビティを選択。この画面の例では、「HelloWorldActivity.java」
真ん中にソースコードが表示されるので、以下の画面のように修正

メニュー下の虫みたいなデバッグアイコンをクリック(もしくはF11キー)で、デバッグ方法を聞かれたら、「Androidアプリケーション」を選択

Android 3.2のエミュレータが起動するので、辛抱強く待つ。結構、立ち上がるまで時間がかかる。

ようやく起動。。。マウスを使って、実機と同じようにロックを解除する。

ちゃんと、表示された。

以外とすんなり動いて、なかなか素直なやつ。。
ここでAndroidは一旦中断。次はちょっと、じゃじゃ馬に戻ってみる。

2012年2月8日水曜日

Android開発環境

Androidアプリの開発環境を用意。
あちこちのサイトで紹介されているが、自分の備忘録として書き残しておく。

本家はこちら
http://developer.android.com/sdk/installing.html

(0) JDKをインストール
http://www.oracle.com/technetwork/java/javase/downloads/index.html
今回は、Java SE 7u2  JDKをインストール。


(1) EclipseをダウンロードしてZIP解凍
http://www.eclipse.org/downloads/
推奨となっているEclipse Classicを利用。今回はVer3.7.1を利用
ZIPを解凍すると、「eclipse」というフォルダができるので、まるごとドライブ直下に配置。
例えば、C:\eclipseとなるように。

あと、以下のサイトから日本語パッチを入手
http://mergedoc.sourceforge.jp/
ZIPを解凍して出来る「features」と「plugins」フォルダを、C:\eclipseフォルダにコピー
C:\eclipse\eclipse.iniを編集し、最後に以下の一文を追記
-javaagent:plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar

解凍された「eclipse.exe -clean.cmd」を、C:\eclipseフォルダにコピーして実行。
実行したら、ワークスペースフォルダを指定した後、日本語版のEclipseが立ち上がる。
「ようこそ」のタブを閉じると、Java用のパースペクティブが開く。

推奨フォント(MS ゴシック  9 ポイント)に変更しておく。
メニューの「ウィンドウ」-「設定」を開き、「一般」-「外観」-「色とフォント」の「基本」-「テキスト・フォント」で設定

(2) Android SDK
Recommendedのexeインストーラー版をダウンロードして実行

最後に「Start SDK Manager」にチェックして「Finish」

SDK Managerが起動したら、以下のチェックをしてインストールを実施
Sony Tablet Sは現在Android 3.2だが、将来4にバージョンアップされる淡い期待をこめて、Android 4.0.3もインストールしとく。(ダウンロードに結構時間がかかったので、止めときゃよかったと後から後悔。)

Eclipseを起動したら、SDKのインストール先をセットしておく
「ウィンドウ」メニューの「設定」から、以下の画面でインストール先をセット。

(3) Android Development Tools (ADT)インストール
ADTをダウンロード。今回は、ADT 16.0.1を利用

Eclipseを起動し、「ヘルプ」メニューの「新規ソフトウェアのインストール」
「インストール」ダイアログが出たら、作業対象の「追加」ボタン
「リポジトリーの追加」ダイアログが出たら、「アーカイブ」ボタンをダウンロードしたZIPファイルを選択して「OK」

ZIPファイルをダウンロードしていない場合は、以下のようにWebアドレスを入力
(後々のバージョンアップとかを考えたら、こちらの方が楽かも)

ツリーに開発ツールが追加されるので、「すべて選択」して「次へ」

最後に、ライセンス画面で「使用条件の条項に同意します」で「完了」
Eclipseの再起動を強く勧められるので、勧められるがまま再起動。。

Eclipseが起動したら、「ウィンドウ」メニューの「AVD Manager」でVirtual Deviceを追加。

あと、コマンドプロンプトで起動されるツールもあるようなので、環境変数のパスに、以下の2つを追加しとく。

xxx\android-sdk\tools;
xxx\android-sdk\platform-tools
xxxは、Android SDKをインストールしたフォルダに依存。


これで準備完了。
試したOSはXP 64bit版だから、JDKとEclipse本体は64bit版を使った。ちゃんと動くだろうか。。

2012年2月6日月曜日

Wifi設定

Wifi設定で、ちょっとだけ問題が発生。
SSIDステルス機能をONにすると、ネットワークの再接続ができない。。

まずは、セットアップ時にWifiを設定。
この時点では、問題なく接続OK。

この後、無線LANルーター側でSSIDステルス機能を有効に。
すると、ネットワークが一度切断すると、再接続できなくなってしまった。

システムアップデートしてみても、改善されず。
検索してみると、Android端末で同じ問題で困っている人が結構いる。

ところが以下のようにすると、再接続ができるようになった。

(1) SSIDステルス機能を有効にしておく。
(2) 「設定」→「無線とネットワーク」→「Wi-Fi設定」で、既に作成されているSSIDを選択して「切断」。
(3) 「Wi-Fiネットワークを追加」で、もう一度同じSSID設定を追加

今度は一度ネットワークが切れても、再接続ができるようになった。
試したAndroidバージョンは「3.2.1 (release2)」

設定を削除して、追加しなおしただけだが、、、

2012年2月5日日曜日

Sony Tablet 買った

Sony Tablet S (SGPT112JP/S) 買った。

自炊したPDFが溜まってきたのと、Androidアプリを作ってみたかったので、大枚を叩いて衝動買い。

サイズは、B5よりやや小さめ

ブラウザとか、意外とサクサク動いて良い感じ。