2013.9.12
前へ
次へ
ホームページトップへ戻る

復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります

[第474回]


●I/Oバイトのテスト

このところ大分県のH様にお願いしておりますE−80試作3号機のテストの様子などについてお伝えしております。
H様からは毎日のようにテスト結果のメールをいただいています。
もう感謝感謝の毎日です。
H様からはE−80試作機のテストに入る前に、ND80ZVのZB3DOS(CP/M互換DOS)の動作テストについても沢山のメールをいただいています。
そちらのほうも順次ご紹介させていただきたいと思っているのですが、実は今、私はE−80ミニコンの製品版のためのアートワーク作業に追われておりまして、それとは別に複数の作業も進めなければならないことになって、なかなかホームページの作業までは手が回らず、毎日後手にまわっております。

今回は少し前にH様からいただいたI/Oバイトについてのテストログをご紹介いたします。

logfile nd80zlog\09040925.txt open

ND80ZVに接続しました
0001 0000 - z
1000 00C3 - *** nd80z3 basic ****
>/cpm
loading zbds4k.bin ...19c1(6593)bytes loaded,from CC00 to E5C0
drive D ................................
drive C ................................
drive B ................................
drive A ................................

A>z:vftst7 --------------------------------------------------------------@
iobyte=00
version HL=0022
A>zb3
end of ZBDOS -----------------------------------------------------------A
>dm@0000,000f
0000  C3 03 E2 00 00 C3 06 D4-AA AA 54 55 40 5B AB A2  テ....テ.ヤェェTU@[ォ「
>/cpm,d
drive D ................................
drive C ................................
drive B ................................
drive A ................................

A>stat val: ------------------------------------------------------------B

Temp R/O Disk: d:=R/O
Set Indicator: d:filename.typ $R/O $R/W $SYS $DIR
Disk Status  : DSK: d:DSK:
User Status  : USR:
Iobyte Assign:
CON: = TTY: CRT: BAT: UC1:
RDR: = TTY: PTR: UR1: UR2:
PUN: = TTY: PTP: UP1: UP2:
LST: = TTY: CRT: LPT: UL1:
A>stat dev: ------------------------------------------------------------C
CON: is TTY:
RDR: is TTY:
PUN: is TTY:
LST: is TTY:

A>stat lst:=lpt: -------------------------------------------------------D

A>stat rdr:=ptr: -------------------------------------------------------E

A>stat dev: ------------------------------------------------------------F
CON: is TTY:
RDR: is PTR:
PUN: is TTY:
LST: is LPT:

A>z:vftst7 -------------------------------------------------------------G
iobyte=84
version HL=0022
A>zb3
end of ZBDOS
>dm@0000,000f ----------------------------------------------------------H
0000  C3 03 E2 84 00 C3 06 D4-AA AA 54 55 40 5B AB A2  テ....テ.ヤェェTU@[ォ「
>/cpm,d
drive D ................................
drive C ................................
drive B ................................
drive A ................................

A>z:vftst7 -------------------------------------------------------------I
iobyte=00
version HL=0022
A>z:vftst8 -------------------------------------------------------------J
set iobyte 55
55
set iobyte AA
AA
set iobyte FF
FF

A>stat dev: ------------------------------------------------------------K
CON: is UC1:
RDR: is UR2:
PUN: is UP2:
LST: is UL1:

A>zb3
end of ZBDOS
>/cpm,d
drive D ................................
drive C ................................
drive B ................................
drive A ................................

A>stat dev: ------------------------------------------------------------L
CON: is TTY:
RDR: is TTY:
PUN: is TTY:
LST: is TTY:

A>z:vftst8 -------------------------------------------------------------M
set iobyte 55
55
set iobyte AA
AA
set iobyte FF
FF

A>stat dev: ------------------------------------------------------------N
CON: is UC1:
RDR: is UR2:
PUN: is UP2:
LST: is UL1:

A> ---------------------------------------------------------------------O
A>stat dev:
CON: is TTY:
RDR: is TTY:
PUN: is TTY:
LST: is TTY:

A>/exit
>
0000 00C3 - 
リモート接続を終了しました
logfile closed at Wed Sep 04 09:43:25 2013


H様からいただいたメールでは、ログにつけた番号のひとつひとつに説明までつけていただきました。
以下にそのまま転載させていただきます。

@で、VFTST7によりIOBYTEを表示
Aで、ZB3BASICにもどりメモリーダンプ。IOBYTEは、00h
B互換DOSに戻り、変更可能なデバイスを表示
Cで、現在のデバイスを表示
Dで、LST:のデバイスをLPT:に変更
Eで、RDR:のデバイスをPTR:に変更
Fで、現在のデバイスを表示
Gで、VFTST7によりIOBYTEを表示
Hで、ZB3BASICにもどりメモリーダンプ。IOBYTEは、84h
Iで、互換DOSに戻り、VFTST7によりIOBYTEを表示
Jで、VFTST8により、IOBYTEをセット
Kで、現在のデバイスを表示
Lで、現在のデバイスを表示
Mで、VFTST8により、IOBYTEをセット
Nで、現在のデバイスを表示
Oで、Ctrl+Cを入力
Pで、現在のデバイスを表示
ということで、それぞれの操作は正常に終了しました。

●I/Oバイトがクリアされてしまいます

H様からのメールには、このあと続けてI/Oバイトについての問題点が指摘されていました。

処理結果に気になるところがありました。
HとI、KとL、NとPの間です。
この間は、ウォームブートと思うのですがIOBYTEが初期化されております。
IOBYTEは、ウォームブート時には、カレントドライブ同様に以前のまま引き継がれるのが正しいのではないでしょうか。?
現在、CP/M互換DOSでは利用されていませんがアプリケーションでは利用可能ですし、Ctrl+Pがサポートされれば影響は出てくると思います。
bios.txt(下のリスト)は、BIOSの該当部分の逆アセンブルリストです。
ちなみに、CP/M互換DOS(仮RAMディスク版)[第155回]では、初期化されておりません。

logfile nd80zlog\09041342.txt open

ND80ZVに接続しました
0001 0000 - z
1000 00C3 - *** nd80z3 basic ****
>/cpm
loading zbds4k.bin ...19c1(6593)bytes loaded,from CC00 to E5C0
drive D ................................
drive C ................................
drive B ................................
drive A ................................

A>zsid
ZSID VERS 1.4
#le27a
  E27A  LD   A,FF               ;コールド ブート
  E27C  OUT  9C,A 
  E27E  XOR  A
  E27F  LD   (E279),A
  E282  LD   (0004),A
  E285  INC  A
  E286  JP   E28B
  E289  LD   A,80               ;ウォームブート
  E28B  LD   (E26B),A
  E28E  LD   SP,F800
  E291  LD   A,FF
#l
  E293  OUT  9C,A
  E295  LD   HL,0038
  E298  LD   A,C3
  E29A  LD   (HL),A
  E29B  INC  HL
  E29C  LD   DE,E303
  E29F  LD   (HL),E
  E2A0  INC  HL
  E2A1  LD   (HL),D
  E2A2  LD   HL,0000
  E2A5  LD   A,C3
#l
  E2A7  LD   (HL),A
  E2A8  INC  HL
  E2A9  LD   DE,E203
  E2AC  LD   (HL),E
  E2AD  INC  HL
  E2AE  LD   (HL),D
  E2AF  LD   HL,0003
  E2B2  XOR  A
  E2B3  LD   (HL),A             ;IOBYTE
  E2B4  INC  HL
  E2B5  INC  HL
#l
  E2B6  LD   A,C3
  E2B8  LD   (HL),A
  E2B9  INC  HL
  E2BA  LD   DE,D406
  E2BD  LD   (HL),E
  E2BE  INC  HL
  E2BF  LD   (HL),D
  E2C0  LD   A,(E26B)
  E2C3  OR   A
  E2C4  JP   Z,E2DD
  E2C7  EX   DE,HL
#
A>/exit
>
0000 00C3 - 
リモート接続を終了しました
logfile closed at Wed Sep 04 13:46:49 2013


このメールの次にいただいたメールでは、以下のアドバイスもいただきました。

現在、(I/Oバイトの)クリヤのタイミングは、コールドブートとウォームブートの共通ルーチンにありますから、コールドブートの中に移動するだけで良いと思います。以前のプログラムのI/Oバイトをクリアする部分はコールドブートのルーチンにありました。

H様。
ご指摘有難うございました。
全く気がつきませんでした。
今はちょっと時間がありませんので少し先になりますが、ご指摘いただいた点についてはなるべく早く修正するようにいたします。
ご協力感謝いたします。
今後ともよろしくお願いいたします。

ワンボードマイコンでCP/Mを![第474回]
2013.9.12upload

前へ
次へ
ホームページトップへ戻る