2020年05月01日

X68000修理(2)

  X68000修理の続き


4)画面表示周り
 悪い箇所を特定するために、メイン基板、サブ基板、CRT表示基板とATX電源のみにして、本体内部に入れずに繋ぎました。
 メイン基板を段ボール箱の上に置いて、その横に立て掛けるようにサブ基板を置くとうまく接続できました。

 サブ基板の断線個所をさらに見つけていると、画面が真っ暗から縞模様に。

 縞模様の原因をネットで調べても出てきませんでした。ただ、ネットを見ていると気になる情報が。

 それは、X68000の画面モードは特殊だという事です(私はX68初心者です)。

 もしかしてと思って、モニタを調べていると、どうも縞模様はモニタの特性だったようです。
 同期が取れていない状態だったようで、何か変なものが縞模様に映っていたみたいでした。


 モニタを変更すると、正常な(?)真っ暗に戻りました...

 昔は、X68000専用のモニタを持っていたので、特殊だと全然気付かなかったんですねぇ。
 テレビを廃棄するのが有料になるというので、その時にTOWNS用モニタと一緒に捨てちゃいました。


 ロジアナを使って、水平同期、垂直同期信号をモニタしても問題なし。
 Outside X68000 の回路図を参考に、画像を出力しているD/Aコンバータのデジタル入力をサンプリングしてもベタ"L"。

 ということは、CPUがVRAMに対して全然書き込んでいないという事になります。


5)CPU周り
 CPUがどんな動作をしているか、とりあえずロジアナで観察しました。68000は、全然使った事がないので分からないかと思ったんですが...

 アドレス線が全く動いていませんでした。原因は、BR(バスリクエスト)がベタ"L"になっている事でした。

 バスリクエストを出力しているのはカスタムLSI(システムコントローラMESSIAH)で、しかもOutside X68000 の回路図には載っていないLSIです(Outside X68000 には、初代機とXVIしか回路図がない)。

 初代機とXVIの回路図からいろいろ類推した結果、MESSIAH ではいろんな部分のバスリクエストをまとめて、CPUに出力しているようでした。

 そこで MESSIAHに入力されている、バスリクエストっぽい信号を調べていると、ベタ"L"になっている信号がありました。
 それは拡張コネクタから来るバスリクエストでした。

 回路図ではプルアップされているはずですが...あー。


200501_01_メイン基板拡張コネクタ.jpg

 拡張コネクタ側の基板にプルアップ抵抗が実装されていました...


200501_01_メイン基板.jpg

 ↑こんな感じでメイン基板に拡張コネクタの基板を挿すと、CPUがちゃんと動作しているのが確認できました。

 普通、抵抗とコネクタだけの基板を外しても、メイン基板が動作しなくなるなんて考えませんよねぇ(そんな事ない?)


 でもまだ画面は真っ暗のままデス...

 (3)に続きます。

posted by えすび at 15:52| Comment(0) | P6実機:製作・修理・改造など | このブログの読者になる | 更新情報をチェックする

2020年04月30日

X68000修理(1)

  (P6とは関係ないですが)10年以上使用していなかった、X68000の掃除と修理をしました。

  いろいろと修理する箇所があったので、それを書き残しておきます。
  X68000の修理では、電源ユニットの修理記事がほとんどで、それ以外の記事があまりなかったので、ハマった所などを書いておきます。

  所有しているのは、X68000のACE-HDです。私自身はほとんど使っていない X68素人です(HDDがまっさらだった...)。


1)分解と掃除
 本体の分解方法(フタの開け方)は、調べると出てきます。
 全部分解して、洗える部品は洗って、それ以外は適当に綺麗にします。

 ネジが数種類あるので、写真を撮るなり、メモをするなりした方が無難です。
 対プラスティック用と、対金属用のネジがあり、対金属用は長さが3種類ありました。
 間違えても組み上がっちゃうので、間違えた事に気付かないかも。


2)電源ユニット
 うちのは、見た目はあまり問題がなさそうでしたが、電解コンデンサからやはり液漏れをしていたようです。
 半田ごてを当てた時に、特有の変な臭いがしました。銅箔面も、多少腐食していました。

 電源を入れたのがずいぶん前なので、ツェナーダイオードやトランスが焼け焦げているわけでもありませんでした。

 一番大きい電解コンデンサ(これだけ種類が違う)以外を新品にします。通販(秋月電子)に注文しました。
 温度は105℃のものを、耐圧は元のコンデンサと同じかそれより大きいものを選びました。

 5600uF x2 → 8200uF x2
 120uF → 220uF
 680uF → 1000uF

 で注文しました。種類が違う、470uF 180V のコンデンサは、見た目に大丈夫そうなのでそのまま使う事に。

 ついでにフォトカプラ(TLP785)も頼みました。ツェナーダイオードはなかったので頼めませんでした。


 注文したものを待つ間、電源ユニットはATX用の電源を使用する事にしました。

 以前に、P6用の代替電源として購入したもので、電源のON/OFFスイッチも付けています。

 ATX電源の使い方はこのページを参考にしました。
http://tdy5.mydns.jp/sata68/x68pw.shtml

 電源スイッチを付けていたので、X68000から来る電源制御用の回路は使っていません。


3)メイン基板、サブ基板
 基板名がわからないので、CPUが載っている一番大きい基板をメイン基板、本体下部にある基板をサブ基板としておきます。

 メイン基板は特に汚れていることも、電解コンデンサが液漏れを起こしているわけでもありませんでした。
 タンタルコンデンサが多数あったので、一応確認しましたがショート故障を起こしているわけでもありませんでした。

 サブ基板は、バッテリーバックアップ用の充電電池があり、これが液漏れ(ガス漏れ?)で広範囲でパターンが腐食していました。

200430_01_サブ基板1.jpg
 (写真は既に断線部分を修理した後です)


 とりあえず充電電池のみを外し、元通りに組み上げて動かしてみたのですが、画面が全く映りませんでした...

 結局、基板のパターンを目で追って、テスターで調べて、断線部分を特定して、修理する、というのを数か所行うハメになりました。



 全部直したはずなのに、画面が映らない...

 (2)に続きます。

posted by えすび at 22:32| Comment(0) | P6実機:製作・修理・改造など | このブログの読者になる | 更新情報をチェックする

2020年04月03日

ジョイスティックポートでRS-232C通信(2)

  ジョイスティックポートを使ったRS-232C通信の続き


  普通、今時のパソコンとP6間でRS-232Cを使う際は、

  USB <=> RS-232C変換(±12V)<=> 5Vレベル変換 <=> P6

  となるんですが、最近のRS-232Cは、5V/3.3Vで入出力するものがあります。
 (注意:±12Vとは限っていないようです。+Vと-Vで、V=3〜15だそうです)


  この場合、

  USB <=> RS-232C変換(5V)<=> P6

  となって、作る回路が少なくて済みます。


  先に紹介したTINY野郎さんが使っているのが、まさにその5Vで入出力するものです。


  AMAZONなどでも多数の種類があるのですが、232Cの処理をするチップが偽物で、
 ドライバをインストールしても動作しない事があるので、注意が必要です。


  私は秋月電子で↓を買いました。

http://akizukidenshi.com/catalog/g/gK-14745/

200403_01_写真1.jpg

  右下の緑色の基板がモジュール本体です。

  チップが中華製ですが...ドライバも秋月のホームページにリンクが張っています。

  また、USB側がTYPE-Cです。持ってなかったので、変換ケーブルをダイソーで買いました。


  ハードウエアを作るとき、RxD/TxD、RTS/CTS を逆にしがちなので注意が必要です。

  モジュールに記載している、RxD/TxD、RTS/CTSは、モジュールから見た端子名なので、
 P6と接続する時には、逆にして接続します。クロスケーブルで繋ぐイメージです。

  MORIYAさんのページの回路を実現する時は、

  モジュールTxD:ジョイスティックピン1
  モジュールRxD:ジョイスティックピン8
  モジュールRTS:ジョイスティックピン2
  モジュールCTS:ジョイスティックピン7
  モジュールGND:ジョイスティックピン9

 になります。


  実際に組み立てたものが↓です。

200403_01_写真2.jpg
200403_01_写真3.jpg

  むき出しはアレなので、熱収縮チューブを使って、コーティングしてみました。

200403_01_写真4.jpg

posted by えすび at 23:01| Comment(0) | P6解析:ジョイスティックポート | このブログの読者になる | 更新情報をチェックする

2020年03月31日

ジョイスティックポートでRS-232C通信

  最近ツイッターで、ジョイスティックポートを使った、RS-232C通信が流行っている(?)ので、流行に乗ってみました。


  P6のジョイスティック入出力ポートを使って、RS-232C通信を行うためのハードウエアなどは、MORIYAさんのページに詳しく書かれています。
http://p6ers.net/mm/pc-6001/dev/joy2rs232c/


  また、MSXでは、TINY野郎さんのページにも書かれています。
http://www.tiny-yarou.com/joyjoy_fs.html


  同じ事をやっても面白くないので、限界に挑戦してみることにしました。
  PC -> P6 のデータレートは、57600bps で動いているのが最速なようですが、115200bps が動きました。

  PC -> P6 への転送のみのプログラムです。プログラムは、MODE1-5、PAGE1-4で動作しますが、mk2SR/66SRではCPUクロックが違うために動作しません。

joy232c.zip


  ハードウエアは、上記のどちらのものを使っても動作します(RTS/CTSを使っていないため)。
  PC側の送信の設定は、57600bps or 115200bps、ストップビット1ビット、パリティなし、データ8ビットにして下さい。


  アセンブラソースは以下の通りです。


======================================================================
relaxed on

org $d000

jp WRITEDT_115K2 ; 0xD000:データ書き込み(115200bps)
jp WRITEDT_57K6 ; 0xD003:データ書き込み(57600bps)

org $d010

WRSTART: dw $0000 ; 書き込み先頭
WRSIZE: dw $0000 ; 書き込みサイズ

;
; データ書き込み
;
WRITEDT_115K2:
call INIT ; 初期化
ld hl,(WRSTART)
ld bc,(WRSIZE)
call RCVDT_115K2 ; データ受信&書き込み(115200bps)
call PS_PRO ; 後処理
ret

;
; データ書き込み
;
WRITEDT_57K6:
call INIT ; 初期化
ld hl,(WRSTART)
ld bc,(WRSIZE)
call RCVDT_57K6 ; データ受信&書き込み(57600bps)
call PS_PRO ; 後処理
ret

;
; データ受信&書き込み
; ・エラーチェックなし
; ・スタート、ストップ1ビット
; ・パリティなし
; ・ボーレート 115200bps(1ビット34.67clk@3.9936MHz)
; ・ボーレート 115200bps(1ビット34.72clk@4.0000MHz)
;
;
; 設計思想
; ・スタート、ストップとも1ビットのため、全体で10ビット
;
; ・1ビットのデータは、35クロック弱
;
; ・10ビット全体
;   スタートビットをすぐに見つける
;   8ビットデータを取り込む
;   データ格納、サイズチェックをして最初に戻る
;  までを、346クロック以内に終了させる(10ビットでデータ全体が346.7/347.2clkのため)
;
; ・スタートビット検出と、最初のデータ取り込みのタイミングは
;  36クロック以上にする
;  (35クロックにした場合、スタートビットがぎりぎり取れた時に
;   最初のビットを取り損なう可能性があるため)
;
;
; BC:データサイズ
; HL:書き込みアドレス
;
RCVDT_115K2:


ld (.sppt+1),sp ; ダミー命令を使うために、SPを退避する

.lp1:
in a,($a2) ; 11+2 / 13 受信ビット(bit0)(PSGは+1waitされる)
rrca ; 4+1 / 18
jp c,.lp1 ; 10+1 / 29 スタートビットを待つ


ld d,$00 ; 7+1 / 37

; 37 / 37


in a,($a2) ; 11+2 / 13 受信ビット(bit0)(PSGは+1waitされる)
rrca ; 4+1 / 18
rr d ; 8+2 / 28
ret c ; 5+1 / 34 時間調整用

in a,($a2) ; 11+2 / 13 受信ビット(bit0)(PSGは+1waitされる)
rrca ; 4+1 / 18
rr d ; 8+2 / 28
ld sp,hl ; 6+1 / 35 時間調整用

in a,($a2) ; 11+2 / 13 受信ビット(bit0)(PSGは+1waitされる)
rrca ; 4+1 / 18
rr d ; 8+2 / 28
ld sp,hl ; 6+1 / 35 時間調整用

in a,($a2) ; 11+2 / 13 受信ビット(bit0)(PSGは+1waitされる)
rrca ; 4+1 / 18
rr d ; 8+2 / 28
ret c ; 5+1 / 34 時間調整用

in a,($a2) ; 11+2 / 13 受信ビット(bit0)(PSGは+1waitされる)
rrca ; 4+1 / 18
rr d ; 8+2 / 28
ld sp,hl ; 6+1 / 35 時間調整用

in a,($a2) ; 11+2 / 13 受信ビット(bit0)(PSGは+1waitされる)
rrca ; 4+1 / 18
rr d ; 8+2 / 28
ld sp,hl ; 6+1 / 35 時間調整用

in a,($a2) ; 11+2 / 13 受信ビット(bit0)(PSGは+1waitされる)
rrca ; 4+1 / 18
rr d ; 8+2 / 28
ret c ; 5+1 / 34 時間調整用

; 242 / 279

in a,($a2) ; 11+2 / 13 受信ビット(bit0)(PSGは+1waitされる)
rrca ; 4+1 / 18
rr d ; 8+2 / 28
ld (hl),d ; 7+1 / 36
cpi ; 16+2 / 54 HL<=HL+1 / BC<=BC-1 で、BC=0の時、P/V=0
jp pe,.lp1 ; 10+1 / 65

;
; ↑ストップビットの間に処理を済ませる

; 65 / 344

.sppt: ld sp,$0000
ret


;
; データ受信&書き込み
; ・エラーチェックなし
; ・スタート、ストップ1ビット
; ・パリティなし
; ・ボーレート 57600bps(1ビット69.33clk@3.9936MHz)
; ・ボーレート 57600bps(1ビット69.44clk@4.0000MHz)
;
; BC:データサイズ
; HL:書き込みアドレス
;
RCVDT_57K6:

ld (.sppt+1),sp ; ダミー命令を使うために、SPを退避する

.lp1:
in a,($a2) ; 11+2 / 13 受信ビット(bit0)(PSGは+1waitされる)
rrca ; 4+1 / 18
jp c,.lp1 ; 10+1 / 29 スタートビットを待つ

; ここで、本来はデータの中心まで待つ必要があるのだが、
; データ幅(=69)に対して、サンプリング間隔(=29)が大きいので、
; 適当にウエイトを入れる
; ↓

ld a,b ; 4+1 / 34 時間調整用のダミー命令

; スタートビット分待つ

in a,($a2) ; 11+2 / 13 時間調整用のダミー命令
inc hl ; 6+1 / 20 時間調整用のダミー命令
dec hl ; 6+1 / 27 時間調整用のダミー命令
inc hl ; 6+1 / 34 時間調整用のダミー命令
dec hl ; 6+1 / 41 時間調整用のダミー命令
inc hl ; 6+1 / 48 時間調整用のダミー命令
dec hl ; 6+1 / 55 時間調整用のダミー命令
inc hl ; 6+1 / 62 時間調整用のダミー命令
dec hl ; 6+1 / 69 時間調整用のダミー命令

REPT 7

in a,($a2) ; 11+2 / 13 受信ビット(bit0)(PSGは+1waitされる)
rrca ; 4+1 / 18
rr d ; 8+2 / 28
in a,($a2) ; 11+2 / 41 時間調整用のダミー命令
inc hl ; 6+1 / 48 時間調整用のダミー命令
dec hl ; 6+1 / 55 時間調整用のダミー命令
inc hl ; 6+1 / 62 時間調整用のダミー命令
dec hl ; 6+1 / 69 時間調整用のダミー命令

ENDM

in a,($a2) ; 11+2 / 13 受信ビット(bit0)(PSGは+1waitされる)
rrca ; 4+1 / 18
rr d ; 8+2 / 28

ld (hl),d ; 7+1 / 8
cpi ; 16+2 / 26 HL<=HL+1 / BC<=BC-1 で、BC=0の時、P/V=0
jp pe,.lp1 ; 10+1 / 37

;
; ↑ストップビットの間に処理を済ませる

.sppt: ld sp,$0000
ret

;
; 初期化
;
INIT:
di
ld a,$02
out ($93),a ; BUSRQ停止

ld a,$07
out ($a0),a
ld a,$bf
out ($a1),a ; ミキサー初期化

ld a,$0f
out ($a0),a
ld a,$7f ; bit7=L:6,7pinを出力に設定(#1、#2とも)
; bit6=H:JOYSTICK#1を選択する(入力のみ)
; bit5=H:8pin(#1)に出力する値
; bit4=H:8pin(#2)に出力する値
; bit3=H:7pin(#1)に出力する値
; bit2=H:6pin(#1)に出力する値
; bit1=H:7pin(#2)に出力する値
; bit0=H:6pin(#2)に出力する値
out ($a1),a

ld a,$0e
out ($a0),a ; ポートAから入力する状態にしておく

ret
;
; 後処理
;
PS_PRO:
ld a,$03
out ($93),a ; BUSRQを戻す
ei
ret

end

======================================================================



  マシンサイクルをいちいち書いている所が、タイミングを合わせる必要があって、なおかつ高速にする必要がある部分です。

  今回コードを書いていての新しい発見は、「 cpi 」です。

  cpi は、本来 Areg とメモリ内容の比較なのですが、ここでは

 ・HL ++
 ・BC --
 ・BC が 0かどうかの判定

  の3つの事を1命令で済ませています。


  これは他でも応用できます。

  例えば、特定の範囲のメモリを0にする場合、


======================================================================

ld hl,$e200
ld bc,$1800
ld d,$00
.lp1:
ld (hl),d
inc hl
dec bc
ld a,b
or c
jr nz,.lp1
ret

======================================================================


  とするのが普通だと思います(LDIRを使わない場合)。

  これを


======================================================================

ld hl,$e200
ld bc,$1800
ld d,$00
.lp1:
ld (hl),d
cpi
jp pe,.lp1
ret

======================================================================


  と、すっきり書けるのでなかなか便利だと思います。


  また、マシンサイクルを調整するために、いろいろ命令を駆使する必要があります。

  データブックを見ながら適切な命令を探しますが、以下を使う事が多いです。


NOP ; 5 (=4+1)
OR A ; 5 (=4+1)
RET C ; 6 (=5+1) (条件が不成立になるようにする)
RET NZ ; 6 (=5+1) (条件が不成立になるようにする)
INC HL ; 7 (=6+1)
LD SP,HL ; 7 (=6+1)
LD A,$00 ; 8 (=7+1)
AND $00 ; 8 (=7+1)
DJNZ $00 ; 9 (=8+1) (Breg=1にしておく)


  マシンサイクルが10以上は、上の組み合わせで全部網羅できます。

  もっとマシンサイクルを稼ぎたい場合は、PUSH-POP(11+1,10+1)や、EX (SP),HL を2回使う(19+1、19+1)と、バイト数が少なくてマシンサイクルを稼ぐ事ができます。


posted by えすび at 00:20| Comment(0) | P6解析:ジョイスティックポート | このブログの読者になる | 更新情報をチェックする

2020年02月29日

RGBコンバータ(14)

  RGBコンバータ(14) ver3.2について。

  前までのバージョンで画面が乱れるなどの問題が出ていた件の話です。


  私が所有しているP6達+自分で作成のRGBケーブルでは全然問題が発生しませんでした。

  ばくてんさんが基板などを配布し出して、ちらほら動かない(画面が乱れるなど)ものが出てきたみたいだったのですが、自分の環境では再現できなかったので、何が原因か分からずに、対策しても改善できるかも分からない状態でした。

  ですが、今回ばくてんさんに画面が乱れる個体を借用して頂いて、いろいろな事が判明しました。


  結論としては、RGBコンバータの設計に問題がありました。問題というか私の想定外のP6の挙動です。


200229_02_RGB出力1.png200229_02_RGB出力2.png

  ↑は、mk2の出力に、25cmぐらいのケーブルを付けた先をオシロで観察してもらったものです。
  画面が乱れる個体の、14MHzクロックと、HSYNC を観測していますが、画面が乱れないものでもほとんど同じ波形でした。

  この波形は完全に想定外でした。

  普通、14MHzクロックで叩かれた信号(HSYNC)なら、こんなに立ち下がりがゆっくりではなく、もっと急峻になります。
  最終段が LS367 のためか、それともその後の3端子フィルタのためなのか分かりませんが、かなり波形がなまっています。

  波形のなまりを考慮せずに回路を作っているため、いろいろと問題が出ているようでした。


  今回対処したのは、大きく2点です。


1)14MHzクロックのサンプリング後に補正を掛けた。

  クロック入力の際、FPGA内部の100MHzクロックで、14MHzのクロックをサンプリングしています。
 そのサンプリング後のクロックを見ると、正常にクロック出力がなされずに、クロックが抜ける現象が発生していました。

  画像データが変化するとクロックが抜ける事があり、これが画像データが乱れる原因でした。
  画像データ変化→電源電圧変化→クロック入力の閾値変化→クロックが正常にサンプリングできない、という事が起こっているようです。

  クロックなので、数クロック抜けても再生可能なので、抜けた場合は内部回路であるものとして再生しています。


2)mk2/66の場合、データ幅が2倍になるとして、サンプリング間隔を倍にした。

  回路構成としては、横640ドットに対応するデータがP6から入力される事を想定していましたが、これだとmk2/66の場合にかなり厳しいようです。
  そのため、mk2/66だと検出した場合は、サンプリング間隔を倍にする事で、データ波形がなまっていても正常にサンプリングできるようにしました。

  ちなみに、mk2SR/66SR は、最終段が 7404 と無印のTTLを使っているので、波形は mk2/66 よりも急峻になるように設計されているようです。



  今回の改訂で、普通の(?) P6では問題なく動作すると思います。 ...だといいな(^^;)


posted by えすび at 22:15| Comment(0) | HW:その他 | このブログの読者になる | 更新情報をチェックする

RGBコンバータ(13)(ver3.2リリース)

  RGBコンバータ(13)(ver3.2リリース)

  RGBコンバータの新しいバージョンをリリースします。
  一つ前のバージョンのように、外付けSRAMが必要なバージョンです(ばくてんさんの所で売っている分です)。


怪しいCycloneIIボード1版(640x480) :c2_640x480_ver32.zip
怪しいCycloneIIボード1版(1280x1024):c2_1280x1024_ver32.zip

怪しいCycloneIIボード2版(640x480) :c2_r_640x480_ver32.zip
怪しいCycloneIIボード2版(1280x1024):c2_r_1280x1024_ver32.zip


○変更点

 ・一部の個体や環境で、画面が乱れる問題の対策
 ・データ同期の取り方の修正
 ・LED表示の変更


  mk2/66で、画面表示が崩れる、映らないなどの問題が改善されていると思います。

  また、今のFPGA周りの回路の都合ですが、P6とRGBコンバータをつなぐケーブルは、出来るだけ短くして下さい(15センチ以下が望ましい)。


  ボード上の3つのLEDを以下のように変更しています。

  クロック未検出時:D2、D4、D5が点滅。
  データ未検出時 :D4、D5が点滅。
  データ未同期時 :D5が点滅。

  データが同期していなくても、画面は問題なく表示される事が多いので、特に気にしなくても構いません。
 (一部のカートリッジソフトや、動作状況により、この状態になることがあります)


  クロック、データが正常に入力されている場合は、D2、D4が以下のようになります。

  D2:にじみ処理時、点灯
  D4:mk2SR/66SR時、点灯


  簡単に言うと、
 ・LEDが3つ点滅している場合は、何らかの原因で14MHz/3.58MHzが入力されていない。
 ・LEDが2つ点滅している場合は、何らかの原因でデータが入力されていない。
 ・LEDが1つだけ点滅している場合は、画面が表示されていれば特に気にしなくてもいい。

  です。


  RGBコンバータに電源投入直後は、P6の電源を入れない状態だと、LEDが3つ点滅し、画面は青画面になります。



  以下は前バージョンから同じ文言です。


  怪しいCycloneIIのみのリリースとなります。
  使用するモニタの解像度に合わせて、使用して下さい。


  怪しいCycloneIIボードが、1と2の二つありますが、73ピンのパワーオンリセットの回路のみが違うものがあります。
  ボード1:電源投入時、L→H
  ボード2:電源投入時、H→L

  基板の裏をよーく見るとわかるんですが、面倒な場合はどちらか動く方を使用して下さい。
 (リセットが違うので、別バージョンのものを書き込むと、ボタンを押してもLEDが点灯しません)


 ・使い方

  ボードに電源を供給して、mk2/66/mk2SR/66SRを起動すると、普通に表示されます。
  mk2SR/66SR使用時は、クロック出力を3.58MHzの方にして下さい(普通はこちらになっています)。

 ・怪しいCycloneIIボード版
  ボード上のプッシュスイッチを押すと、にじみが出せます。
  プッシュスイッチを押す毎に、にじみなし→赤青→青赤→桃緑→緑桃→にじみなし、となります。

posted by えすび at 00:23| Comment(0) | HW:その他 | このブログの読者になる | 更新情報をチェックする

2020年01月23日

RGBコンバータ(12)

  RGBコンバータ(12)(ver3.1リリース)

  RGBコンバータの新しいバージョンをリリースします。
  一つ前のバージョンのように、外付けSRAMが必要なバージョンです(ばくてんさんの所で売っている分です)。


怪しいCycloneIIボード1版(640x480):c2_640x480_ver31.zip
怪しいCycloneIIボード1版(1280x1024):c2_1280x1024_1000_ver31.zip

怪しいCycloneIIボード2版(640x480):c2_r_640x480_ver31.zip
怪しいCycloneIIボード2版(1280x1024):c2_r_1280x1024_1000_ver31.zip


○変更点
 ・SRAM周りの波形改善
 ・同期が取れていない時に、青色画面を出すようにした。



  怪しいCycloneIIのみのリリースとなります。

  使用するモニタの解像度に合わせて、使用して下さい。


  怪しいCycloneIIボードが、1と2の二つありますが、73ピンのパワーオンリセットの回路のみが違うものがあります。

  ボード1:電源投入時、L→H
  ボード2:電源投入時、H→L

  基板の裏をよーく見るとわかるんですが、面倒な場合はどちらか動く方を使用して下さい。
 (リセットが違うので、別バージョンのものを書き込むと、ボタンを押してもLEDが点灯しません)



  使用方法などは前回と変わっていません。一応、前回に掲載したものを再掲します。


 ・使い方

  ボードに電源を供給して、mk2/66/mk2SR/66SRを起動すると、普通に表示されます。
  mk2SR/66SR使用時は、クロック出力を3.58MHzの方にして下さい(普通はこちらになっています)。

 ・怪しいCycloneIIボード版
  ボード上のプッシュスイッチを押すと、にじみが出せます。
  プッシュスイッチを押す毎に、にじみなし→赤青→青赤→桃緑→緑桃→にじみなし、となります。

  ボード上の3つのLEDは、以下を示しています。
  D2:にじみ処理時、点灯
  D4:mk2SR/66SR時、点灯
  D5:データ同期時、点灯



posted by えすび at 20:51| Comment(0) | HW:その他 | このブログの読者になる | 更新情報をチェックする

2020年01月13日

mk2修理

  mk2の修理の話

  2台持っているmk2の内の1台が、動作しなくなりました。
  メニュー画面が出ずに、真っ白な状態になります。


  最初は電源を疑っていたんですが、特に問題はありませんでした。

  もしかしてDRAMの故障か?と思い、CPUの制御線をロジアナで観測してみました。
  するとこんな感じでした↓

200113_01_NG_mk2_1.png


  リセット後、途中まで正常に動作しているようなんですが、途中から変な止まり方をしています。
  特に、nRD と nMREQ が "L" で固まっているのが異常です。
  nRD とnMREQ の接続先が問題かとも思ったんですが、ちょっと考えにくいです。


  止まった部分を拡大すると↓

200113_01_NG_mk2_2.png


  4MHz クロックが何だか変です。ロジアナのサンプリングが 10MHz なので、若干おかしくなるんですが、それ以上に変な挙動をしています。

  クロック発生源を調べてみました。回路は下図の通りです。

200113_01_mk2_16M系クロック生成.png

  16MHz、16MHzの反転、8MHz、4MHz、2MHz を観測したのが↓です。

200113_01_NG_mk2_3.png


  正常に動作しているような、おかしいような...

  2MHz の4クロック分の時間を測ると(A と B の間)、1.020us となっています。
  正常の場合は、2us のはずなので、倍速で動いています。

  ちなみに正常に動作している mk2 では、↓でした。

200113_01_OK_mk2_1.png


  どうも水晶発振子が 16MHz ではなくて、32MHz で発振している(オーバートーン)のが元凶のようです。

  この辺りの話は、
http://www.nahitech.com/nahitafu/mame/mame1/xtal.html
  に詳しく書かれています。


  発振に 74LS04 を使っているのがそもそ間違いっぽいんですが、IC を取り換えるのではなくて、水晶発振子を長型ではなく、短型に変更してみました。


  手持ちの関係で、15.9744MHz ではなく 16.000MHz を使いましたが、問題なく動作するようになりました。


  ちなみに、15.9744MHz という中途半端な数字なのは、RS-232C で使用しているためで、RS-232Cを使用しなければ問題になりません。誤差と考えた場合 1600ppm ぐらいなので、この程度だったら RS-232C で通信するのに問題はないかと思います。


  過去に電源電圧が低くなって動作しない個体も、もしかしたら水晶発振子の問題だったのかもしれません。

posted by えすび at 14:07| Comment(0) | P6実機:製作・修理・改造など | このブログの読者になる | 更新情報をチェックする

2019年12月30日

開発途中案件2019

  去年にも開発途中案件を紹介しましたが、まだ開発中だったりします...
  さらに開発途中案件が増えました(^^;)

  完成させるつもりなんですが、気変わりが多いです。

  何のゲームかわかります?


  その1(完成度80%)
  88版からの移植。
  最近、再度着手し始めました。遅いのが難点。元々、88の8MHz用なので。

191230_01_画像1.png
191230_01_画像2.png


  その2(完成度95%)
  88の市販ゲームからの移植。
  プログラムは完成。
  一部のキャラクタを修正するのと、デバッグがちょっと大変なので、途中で止まっています。

191230_01_画像3.png
191230_01_画像4.png


  その3(完成度90%)
  I/O掲載作品の80版からの移植。
  テープローダの作成とデバッグが残っています。

191230_01_画像5.png
191230_01_画像6.png


  その4(完成度80%)
  ASCII掲載作品の80版からの移植。
  その3と同じくテープローダの作成とデバッグが残っています。

191230_01_画像7.png
191230_01_画像8.png


  今回は全部SR専用ですね。完成がいつになるのやら...


2019年07月30日

SD6031ファームウエアリリース(ver1.12)

  SD6031/SD6031WIF用のファームウエア(ver1.12)をリリースします。
 注)SD6031Airには使用できません。

SD6031_ver112.zip


 ・Ver1.11→Ver1.12変更点
  一部のd88ファイルが正常に認識されないのを改修。



  ある程度のテストしかしていないので、何か問題がありましたら連絡頂けると幸いです、


posted by えすび at 23:04| Comment(3) | HW:SD6031 | このブログの読者になる | 更新情報をチェックする

2019年07月29日

SD6031ファームウエアリリース(ver1.11)

  SD6031/SD6031WIF用のファームウエア(ver1.11)をリリースします。
 注)SD6031Airには使用できません。

 SD6031_ver111.zip


 ・Ver1.00→Ver1.10変更点(Ver1.10未公開)
  FlashAir(W-02/W-03/W-04)対応。
  D88 を入れ替えた時に、正常に読み込まない可能性があるのを修正。

 ・Ver1.10→Ver1.11変更点
  (FlashAir)拡張子を表示するようにした。



 注)FlashAirを使用して、P6の起動時のファイルを選択するためには、SD6031/SD6031WIF を改造する必要があります(1箇所パターンカット)。

  起動時のファイルを選ばなくていいのであれば、改造の必要はありません。



  FDアクセスには、ChaNさん作のぷちFatFSとサンプル用プログラムを使用しています。
  Web用のhtml、Javaスクリプトは、西田さんが SD6031Air用に開発されたものをベースに改造しています。
  フォントファイルに、Hashiさん作のP6mk2フォントを使用しています。

  それぞれの作者さんに感謝です。



  ある程度のテストしかしていないので、何か問題がありましたら連絡頂けると幸いです、
posted by えすび at 01:07| Comment(9) | HW:SD6031 | このブログの読者になる | 更新情報をチェックする

2019年07月21日

SD6031ファームウエアコマンド一覧(2)

  SD6031/SD6031WIFで扱う事が出来るコマンド一覧です(その2)。


  本来のドライブ(PC-6031/PC-80S31等)のコマンドは 0x00〜0x7f で、SD6031/SD6031WIF で新たに追加したコマンドは0x80〜0xfe になります。

従来からのコマンドは以下の通りです。

1)書き込みコマンド群

○コマンド0x01:write data
 P6→SD6031 0x01 セクタ数 ドライブ番号 トラック番号 セクタ番号 書き込みデータ…書き込みデータ

○コマンド0x11:high speed write data
 P6→SD6031 0x11 セクタ数 ドライブ番号 トラック番号 セクタ番号 書き込みデータ…書き込みデータ

○コマンド0x83:expand write data
 P6→SD6031 0x83 セクタ数 ドライブ番号 トラック番号上位 下位 セクタ番号 書き込みデータ…書き込みデータ

○コマンド0x84:expand high speed write data
 P6→SD6031 0x84 セクタ数 ドライブ番号 トラック番号上位 下位 セクタ番号 書き込みデータ…書き込みデータ

○コマンド0x86:double high speed write data
 P6→SD6031 0x86 セクタ数 ドライブ番号 トラック番号 セクタ番号 書き込みデータ…書き込みデータ

○コマンド0x87:expand double high speed write data
 P6→SD6031 0x87 セクタ数 ドライブ番号 トラック番号上位 下位 セクタ番号 書き込みデータ…書き込みデータ

  書き込みコマンドが複数存在するのは、

 ・一度に書き込むバイト数が、1バイト/2バイト/4バイト
 ・トラック番号の指定の仕方が、8ビット/16ビット

  の3通り×2通り=6通りの指定の方法があるためです。


  やる事は全て同じで、指定したセクタに対して、データを書き込みます。
  1セクタは256バイトですので、一度に256×セクタ数分のデータを書き込みます。

  複数のセクタにまたがって書き込む事は可能ですが、トラックはまたげません。


  またドライブ番号を 0x81 にした場合、EEPROMに書き込みが出来ます。
  この際、256バイト単位(=セクタ単位)でしか書き込みが出来ません。

  トラック番号がアドレス×256相当になります。セクタ番号は無視します。

 例:
 P6→SD6031 0x01 0x01 0x81 0x00 0x01 data...

  0x01(書き込みコマンド) 0x01(セクタ数) 0x81(ドライブ番号)
  0x00(トラック番号) 0x01(セクタ番号)

  の順なので、AVR内EEPROMのアドレス0x0000〜0x01FFに対して
 書き込みを行います。


○コマンド0x05:FORMAT
 P6→SD6031 0x05 ドライブ番号

  指定のドライブをフォーマットします。具体的には、データの部分を 0xFF で埋めます。このコマンドは通常の1D/1DD(2D)フォーマットのイメージファイルのみに使用してください。
  拡張子は、D88、DSK、P31 のみ有効です。それ以外はエラーを返します。



2)読み出しコマンド群

○コマンド0x02:read data
 P6→SD6031 0x02 セクタ数 ドライブ番号 トラック番号 セクタ番号

○コマンド0x85:expand read data
 P6→SD6031 0x85 セクタ数 ドライブ番号 トラック番号上位 下位 セクタ番号

○コマンド0x03:send data
 P6→SD6031 0x03
 SD6031→P6 読み出しデータ…読み出しデータ

○コマンド0x12:high speed send data
 P6→SD6031 0x12
 SD6031→P6 読み出しデータ…読み出しデータ

○コマンド0x88:double high speed send data
 P6→SD6031 0x88
 SD6031→P6 読み出しデータ…読み出しデータ

  書き込みコマンドと同じく、読み出しコマンドも指定方法により複数存在します。

  read data系で、ディスクからバッファにデータを読み出し、send data系でそのデータをP6側に転送します。


  また書き込みと同じく、ドライブ番号を 0x81 にした場合、EEPROMから読み出しが出来ます。


 例:
 P6→SD6031 0x02 0x02 0x81 0x00 0x01
 P6→SD6031 0x12
 SD6031→P6 data受信...

  0x02(読み出しコマンド) 0x02(セクタ数) 0x81(ドライブ番号)
  0x00(トラック番号) 0x01(セクタ番号)
  0x12(高速センド)

  の順なので、AVR内EEPROMのアドレス0x0000〜0x01FFの読み出しを行います。読み出しの際は、2バイト転送で行います。



3)ドライブの設定、状態の読み出し

○コマンド0x00:INITIALIZE
 P6→SD6031 0x00

  初期化コマンドです、SD6031/SD6031WIF ではエラーのクリアのみ行っています。


○コマンド0x06:COMMAND STATUS
 P6→SD6031 0x06
 SD6031→P6 STATUS情報(下記)

  STATUS情報は以下の通りです(1バイトのデータ)。
  bit7:常に1
  bit6: read data系を実行した後に1、send data系を実行した後に0
  bit5-1:常に0
  bit0:直前のコマンドがエラー時に1、エラーがなければ0


○コマンド0x07:DRIVE STATUS
 P6→SD6031:0x07
 SD6031→P6:STATUS情報(下記)

  STATUS情報は以下の通りです(1バイトのデータ)。
  bit7:常に0
  bit6:常に0
  bit5:常に1(ドライブ#1使用を示す)
  bit4:常に1(ドライブ#0使用を示す)
  bit3-0-1:常に1


○コマンド0x09:send memory
 P6→SD6031 0x09 開始アドレス上位 下位 終了アドレス上位 下位
 SD6031→P6 メモリ情報・・・メモリ情報

○コマンド0x0b:send memory 2
 P6→SD6031 0x0b アドレス上位 下位 バイト数上位 下位
 SD6031→P6 メモリ情報・・・メモリ情報

  フロッピードライブのROMの内容を読み出す命令です。
  BASIC-ROM から読み出される場合があるため、SD6031/SD6031WIF では、特定のアドレスを読み出した時に特定の値を返すようにしています。


○コマンド0x14:send device status
 P6→SD6031 0x14 ドライブ番号
 SD6031→P6 ST3

  メディアのステータス情報を返します。
  返す内容は以下の通り。

  bit7:常に0
  bit6:ライトプロテクト時1
  bit5:常に0
  bit4:常に0
  bit3:SDカード挿入時1
  bit2:常に0
  bit1-0:ドライブ番号(00 または 01)


○コマンド0x17:set surface mode
 P6→SD6031 0x17 設定情報

  1D/1DD(2D) の設定の変更を行います。
  bit7-2:未使用
  bit1:ドライブ#1の設定(0で1D、1で1DD/2D)
  bit0:ドライブ#0の設定(0で1D、1で1DD/2D)

  リセット直後は、すべてのドライブで1Dモードです。


○コマンド0x18:send surface mode
 P6→SD6031 0x18
 SD6031→P6 設定情報

  コマンド0x17 で設定した情報を読み出すコマンドです。


4)イメージファイル関連

○コマンド0x82:report disk image length
 P6→SD6031 0x82 ドライブ番号
 SD6031→P6 イメージファイル長×4(最上位から送信される)

  現在選択しているイメージファイルの長さを読み出します。メディアとして使用できる部分ではなく、実際のファイル長を読み出します。

  普通のP31フォーマット:0x000a0000
  普通のD88フォーマット:0x000552a0

  を返します。


○コマンド0xFD:get image file
 P6→SD6031 0xFD ドライブ番号
 SD6031→P6 

  0x01、ファイル#1のファイル名1バイト目…8バイト目、
  0x01、ファイル#2のファイル名1バイト目…8バイト目、
   :
  0x01、ファイル#nのファイル名1バイト目…8バイト目、
  0x00


  SDカードに格納されているイメージファイルで、現在指定している拡張子のファイルの一覧を取得します。イメージファイルの数分だけ、0x01+ファイル名(8バイト)の9バイトを順番に送信してきます。最後に0x00が送信されます。返してくるバイト数は、9×ファイル数+1 になります。P6側では、0x00 が受信されるまで読み出す必要があります。
  ファイル名は、拡張子を除いた8文字です。ファイル名が8文字未満の場合は、空白(0x20)で埋められます。


○コマンド0xFE:set image file
 P6→SD6031 0xFE ドライブ番号 ファイル名1バイト目…8バイト目

  指定したドライブ番号のイメージファイルを指定するファイルにします。ファイル名などは、get image file と同じです。


posted by えすび at 22:58| Comment(0) | HW:SD6031 | このブログの読者になる | 更新情報をチェックする

SD6031ファームウエアコマンド一覧(1)

  SD6031/SD6031WIFで扱う事が出来るコマンド一覧です(その1)。


  本来のドライブ(PC-6031/PC-80S31等)のコマンドは 0x00〜0x7f で、SD6031/SD6031WIF で新たに追加したコマンドは0x80〜0xfe になります。


今回のver1.00で削除したコマンドは以下の通り。

○コマンド0x80:SET SECTOR DATA(開始/終了セクタ番号のセット)
 P6→SD6031:0x80 ドライブ番号 開始セクタ番号 終了セクタ番号

○コマンド0x81:ASK SECTOR DATA(開始/終了セクタ番号の読み出し)
 P6→SD6031:0x81 ドライブ番号
 SD6031→P6:開始セクタ番号 終了セクタ番号



今回のver1.00から追加されたコマンドは以下の通り。

1)バージョン関連
○コマンド0xf0:read version number
 P6→SD6031 0xF0

 次の send version number を使う前に、実行します。


○コマンド0xf1:send version number
 P6→SD6031 0xF1
 SD6031→P6 バージョン番号1バイト目 2バイト目 3バイト目 機種コード1バイト目 2バイト目

  現在のバージョン番号、機種コードを返します。
  SD6031/SD6031WIF ver1.00 では、アスキーコードの "100SD" が返ってきます。

  このコマンドに先立って、前の read version number を実行する必要があります。実行していない場合はエラーになり、値を返しません。


 バージョンの読み出し手順は以下の通りです。

 コマンド 0xf1 を送信する
  ↓
 コマンド 0x06 を送信する
  ↓
 データを受信し、エラービットを確認する
  ↓
 エラーなしの場合、ver1.00 以前のバージョン。
  ↓
 コマンド 0xf0 を送信する
  ↓
 コマンド 0xf1 を送信する
  ↓
 データを受信する(5バイト)


2)イメージファイル関連

○コマンド0xf2:set file extention
 P6→SD6031 0xF2 ドライブ番号 拡張子1バイト目 2バイト目 3バイト目

  拡張子は3バイト固定で、アスキーコードで与えます。
  リセット直後は、"P31" です。

○コマンド0xf3:send file extention
 P6→SD6031 0xF3 ドライブ番号
 SD6031→P6 拡張子1バイト目 2バイト目 3バイト目

  今の拡張子を返します。


  SD6031は、設定した拡張子のファイルのみを扱います。

  拡張子を変更した時は、SDカードを新たに挿した場合と同様に扱います。
  つまり、拡張子を D88 に変更した場合は、INIT.D88 がある場合は、INIT.D88 を設定し、ない場合は 〜.D88 の中で一番新しいファイルを設定します。


  以下の拡張子を設定した場合は、特殊な動きをします。

  P31:ファイルを P31 フォーマットとして扱います(今までと同じ動きです)。

  D88:ファイルを D88 フォーマットとして扱います。
   次の条件を満たすもののみ正常に動作します。
   トラック 1D:#0〜#39(もしくは#0〜#34)/1DD:#0〜#79 が順番に抜けなく格納されている。
   セクタ#1〜#16が順番に抜けなく格納されている。
   1セクタ=256バイト。

   途中のセクタが抜けているとかセクタサイズが違うものは、正常に動作しません。


  DSK:ファイルを DSK フォーマットとして扱います。
    いわゆるディスクのベタファイルです。
    ファイルサイズが0x28000バイトの時、1D フォーマットとして扱います。
    (ドライブとディスクが食い違う時、トラック番号の調整が入ります)


  その他の拡張子の場合(例えば BIN)は、1セクタ=256バイト、1トラック=16セクタ、とした、ディスクのベタファイルとして扱います。HDDモード対応ですので、トラック数の最大は 65535 になります。


○コマンド0xfc:send image file
 P6→SD6031 0xFE ドライブ番号
 SD6031→P6 ファイル名1バイト目…ファイル名8バイト目

  現在指定されているイメージファイル名を返します。ファイル名などは、set image file と同じです。



3)EEPROM関連

○コマンド0xe0:receive EEPROM memory
 P6→SD6031 0xE0 EEPROM番号 アドレス上位 下位 サイズ上位 下位 データ、・・・


○コマンド0xe1:send EEPROM memory
 P6→SD6031 0xE0 EEPROM番号 アドレス上位 下位 サイズ上位 下位
 SD6031→P6 データ、・・・


  EEPROM番号は、0x81=AVR内EEPROMです。
  アドレスは 0x0000〜0x01FF が有効で、1バイトごとに書き込み/読み出しが可能です。


  EEPROMに対する読み書きは、ドライブ番号を 0x81 に指定する事により、通常のフロッピーへの読み書きのコマンドを使う事も可能です(後述)。


posted by えすび at 22:57| Comment(0) | HW:SD6031 | このブログの読者になる | 更新情報をチェックする

2019年07月20日

SD6031ファームウエアリリース(ver1.00)

  SD6031/SD6031WIF用のファームウエア(ver1.00)をリリースします。
 注)SD6031Airには使用できません。

  sd6031_ver100.zip

  イメージセレクタ.zip

  以前のバージョンと比べての主な変更点です。

 ○ドライブ数は2ドライブのみ対応。

 ○FAT12/16/32対応。このため、4M〜64Mバイトの SDHCが使用できます。
  (セクタサイズ=512バイトのものに限る。通常は512バイトのようです)

  ChaNさんのぷちFatFSモジュールを使用させて頂いています。
  http://elm-chan.org/fsw.html

 ○AVR内部のEEPROMに対して、読み書きすることができます。

 ○ファイルの拡張子を、〜.P31以外に、〜.D88、〜.DSK などが使用できます。
  〜.D88 を指定した場合は、通常のd88フォーマットのものに対して読み書きが可能です。
  ただし以下の制限があります。

  トラック 1D:#0〜#39(もしくは#0〜#34)/1DD:#0〜#79 が順番に抜けなく格納されている。
  セクタ#1〜#16が順番に抜けなく格納されている。
  1セクタ=256バイトのみ対応。

  〜.DSK や他の拡張子(例えば、〜.bin)を指定した場合は、ベタファイルとして扱います。

  拡張子の切り替えは、コマンドで行います。


  とりあえず、上にアップしたイメージセレクタ.zip 内の boot_d88.P31 と INIT.d88 を SDカードの D1 の下に格納します。
  同じSDカードの D1、D2 カードに、使用する 〜.d88 を格納すると、〜.P31 の時と同じように扱えるはずです。



  ある程度のテストしかしていないので、何かありましたら連絡頂けると幸いです、


  追加したコマンドなどに関しては、後ほどまとめてアップします。


posted by えすび at 19:24| Comment(0) | HW:SD6031 | このブログの読者になる | 更新情報をチェックする

2019年04月13日

ウルティマIVについて(1)

  ウルティマIV for P6

  聖者への道がやっと終わりました。
  実機でP6SR+SD6031WIFの環境で、最初からエンディングまで終わらせました。

  P6版では、以下のような問題(?)があります。


 ・移動が遅い
  特に、海や川などがあったりエネルギーフィールドを表示している場合、遅くなります。
  ゲームするのに、ぎりぎりかも知れません(^^;)

  海の上を漂っている時、どれくらい進んだか全然わからなくなったりします...


 ・ディスクアクセスが多い時がある
  88版の問題そのままなんですが、モンスターが5種類以上同時に出た場合、ディスクを読みっぱなしになります。
  移植の際に気付いたんですが、5種類以上は出ないと思ってたのでそのままにしておきました。

  アビイスの深い階で6種類とかあるんですよね...

  実機+SD6031だと、アクセスが多くてもタイムラグが少ないため、ほとんど分かりません。

ウルティマIV(ver1リリース)

  ウルティマIV for P6


  88版→P6SRへの変換ツールをリリースします。


ul4p6.zip

  説明などは、同梱のドキュメントを参照して下さい。

  エミュレータでは、PC-6001VW ver4.00(2018/07/21)、PC-6001VW ver310f、PC-6001V ver1.25 で動作を確認しています。

2019年02月10日

ワンダラー(2)

  ワンダラー(2)

  ログインの記事には、ディスクでは動かないように書いていますが、スタックを適切に設定するとディスクからでも起動します。

  MODE:5 FILES:0 PAGE:2 として、CLEAR100,&H8EFF としてから、0x9000〜にデータを読み込んで、EXEC &H9000 とすれば普通に起動します。

  いろいろと面倒なので、オートで起動するディスクイメージを作りました。
  ↓
wanderer_1d.zip


  起動のディスクイメージだけなので、ゲームプログラムをディスク上にセーブする必要があります。

  以下に手順の一例を記載します(テープに保存されているのが前提です)。


1)上記の wanderer.d88 をセットして、mk2などで起動する。
2)すると ??FF Error で止まる(ファイルがないので当然)。
3)テープ版をセットし、CLOAD を実行して、ローダのみを読み込む。
4)LIST 20 として、
 20 EXEC&H8F7C:END
と変更する。

5)RUN として、ローダを実行する。テープからマシン語が読み出される。
6)ロードが完了したら
 BSAVE "WANDERER",&H9000,&H6300
として、マシン語をセーブする。


 マシン語モニタでセーブしている場合は、3)〜5)を以下のようにします。

3)〜5)MON としてマシン語モニタを起動し、R-0 でテープからマシン語を読み出す。

ワンダラー(1)

  P6mk2用ゲーム「ワンダラー」について(1)

  P6NOTE No.10 の記事でもオススメゲームとして、ちょっと触れたゲームです。
  重複する部分もありますが、いろいろ調べた事を記載しました。

・掲載誌
  Login 1987年1月号P344-347(本文)、P403-409(ダンプリスト)
  ログインソフトウエアコンテスト'86の3位のようです。

・動作環境
  mk2以降で動作します。オールマシン語で0x9000〜0xF2FFです。

・ゲーム概要
  ドルアーガの塔っぽい(?)全80面のアクションパズルゲームです。
  モンスターやアイテムの出方が毎回決まっており、また、床とエレベータの使い方によってはクリアできなくなるので、ちゃんと攻略する必要があります。


○ダンプリストから入力する
  本誌の通りに入力してもいいのですが、Windows上で、スキャナ+OCRを使って
 入力する方法の一例を以下に紹介しておきます(P6NOTE 連動企画?)。

1)OCRex を使用して、スキャナのマシン語データをテキストに変換する。
  Burnout!内 http://p6ers.net/bernie/develop/ocrex.html
  この際、アドレス、チェックサムも併せて取り込むようにします。

2)チェックサムのチェックをする。
  ↓を使って下さい。
sumlogin.zip

 使い方は、
・リストの最後に、FFFF を入れる。
・コマンドラインから、
  sumlogin < 検査するファイル名
 とすると、画面に結果が表示されます。データが少なかったり最後がFFFF以外の場合は無限ループに入りますので、途中で CTRL+C で止めて下さい。

 結果をファイルに落とす場合は、
  sumlogin < 検査するファイル名 > 結果ファイル名
 とします。

3)チェック後、いらないチェックサムの部分を削除し、BINtoHEX for WIN32 でバイナリファイルに変換する。
  Burnout!内 http://p6ers.net/bernie/develop/ocrex.html
  変換時、PiOモニタ形式のテープイメージを出力する、にチェックを入れます。

4)マシン語ローダと、3)で作ったファイルを結合する。
  マシン語ローダは↓を使って下さい。
wanderer_loader.zip

  結合したものを、MODE5、PAGE2で起動して、CLOAD、RUN、でゲームが立ち上がります。

2018年12月30日

アドベンチャー(ver1.1リリース)

  アドベンチャー(Colossal Cave Adventure) for P6


  P6版の Ver1.1 をリリースします。

日本語版:adv_p6.zip
日本語版ソース:adv_p6_src.zip
英語版:adve_p6.zip
英語版ソース:adve_p6_src.zip


 ・Ver1.0 → ver1.1 変更点
  メモリ不足により、途中でゲームが止まる問題を修正。
  DEL が効かない問題を修正。
  スクロール速度を少し遅くした(日本語版のみ)。


  日本語版:mk2以上+1ドライブ+拡張カートリッジ(64K以上)が必要です。
  英語語版:mk2以上+1ドライブが必要です。

  説明などは、同梱のドキュメントを参照して下さい。

  エミュレータでは、PC-6001VW ver4.00(2018/10/27)、PC-6001V ver1.25 で動作を確認しています。

アドベンチャーについての問題

 アドベンチャー(Colossal Cave Adventure) for P6 について

 致命的な問題が発見されました。
 修正にちょっと時間が掛かりそうです。

×

この広告は90日以上新しい記事の投稿がないブログに表示されております。