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

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

[第442回]


●COPYの不具合がクリアできました

前回からの続きです。
前回でも説明しましたが、ZB3DOSのファイルシステムでは、1つのファイルディレクトリでは16KBのデータしか管理できません。
16KBを越えるファイルの場合には同じファイル名のディレクトリが複数作られて、エクステント番号でそれが管理されます。

ファイルをコピーする方法は一通りではありませんが、ZB3DOSではコピー元から1セクタ分(128バイト)をDMAバッファに読み込んで、次にそれをコピー先のディスクにセーブすることを繰り返すという方法で行なっています。
書き込み側では、16KBを越えるところで、新しいディレクトリを作成してエクステントb+1します。
このときは当然ディレクトリバッファにディレクトリデータを読み込んで、新しいディレクトリを作成するという作業が必要となります。

このときDMAバッファアドレスがデフォルトのDMAバッファ(0080H)から、DIRバッファのアドレスに切り換えられるのですが、そのあとうっかりして、DMAバッファアドレスをもとのデフォルトのDMAバッファ(0080H)に戻すことを忘れてしまっていたため、データコピーが16KBを越えた時点からあとのデータが正しくコピーされなくなっていました。

このバグを修正したあとも、さらに別のバグなどがあって、再々修正をしたりしたのですが、最終的にH様からは「今までのおかしかったところは全てクリアできました」というメールをいただきました。

やっとこれで基本的には互換性についての不具合は解消できたようです。
しかし実は現在も、あと少しH様からご指摘いただいた点について検討中のところがありますので、再修正版の配布につきましては、今しばらくお待ちくださいませ。

●BASCOMとCB80

H様からは、上記のCOPYコマンドでの不具合が解消されたというご報告とともに以下の内容のメールをいただきました(一部説明のため加筆しました)。

「BASCOM」と「CB80」が正常に稼動しましたので報告しておきます。
BASCOMはTURBO PASCALと同じホームページ(http://www.retroarchive.org/cpm/lang/lang.htm)からダウンロードできます。
BASCOM53.ZIPとBASCOM.ZIPの二件が登録されていましたが、BASCOM.ZIPの方が動きました。ずっと下の方にあります。
CB80は、
http://www.cpm.z80.de/binary.html
からダウンロードできます。CB80 V2.0の方です。
BASCOMとCB80の使用方法は、共にTURBO PASCAlの説明と同じホームページ(http://ldlabo.gozaru.jp/)にあります。
リンク先のページの右側に各言語の説明へのリンクがあります。

ということで、双方の稼動ログも添付していただきました。
こちらがBASCOMです。

logfile nd80zlog\07141311.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>dir z:
Z: BASCOM   COM : BASCOM   HLP : BASCOM2  HLP : BASLIB   REL
Z: BCLOAD       : BRUN     COM : CREF     COM : CREF80   COM
Z: D        COM : L80      COM : LIB80    COM : M80      COM
Z: MBASIC   COM : OBSLIB   REL : RANTEST  ASC : RANTEST  BAS
Z: RANTEST  COM : RANTEST  REL : SAMPLE   BAS : SAMPLE   COM
Z: SAMPLE   REL
A>era d:*.*

A>copy z:*.* d:
BASCOM  COM to BASCOM  COM................................................................................................................................................................................................................................................................. done
BASCOM  HLP to BASCOM  HLP...................................................................................................................... done
BASCOM2 HLP to BASCOM2 HLP...................................................................................................................................................................................................................................... done
BASLIB  REL to BASLIB  REL.................................................................................................................................................................................................... done
BCLOAD      to BCLOAD     .. done
BRUN    COM to BRUN    COM.......................................................................................................................... done
CREF    COM to CREF    COM................................ done
CREF80  COM to CREF80  COM................................ done
D       COM to D       COM............... done
L80     COM to L80     COM..................................................................................... done
LIB80   COM to LIB80   COM...................................... done
M80     COM to M80     COM.............................................................................................................................................................. done
MBASIC  COM to MBASIC  COM............................................................................................................................................................................................... done
OBSLIB  REL to OBSLIB  REL........................................................................................................................................................................................................................................................................................................................................................................................... done
RANTEST ASC to RANTEST ASC...... done
RANTEST BAS to RANTEST BAS.... done
RANTEST COM to RANTEST COM............ done
RANTEST REL to RANTEST REL...... done
SAMPLE  BAS to SAMPLE  BAS.. done
SAMPLE  COM to SAMPLE  COM...... done
SAMPLE  REL to SAMPLE  REL... done

A>d:
D>dir
D: BASCOM   COM : BASCOM   HLP : BASCOM2  HLP : BASLIB   REL
D: BCLOAD       : BRUN     COM : CREF     COM : CREF80   COM
D: D        COM : L80      COM : LIB80    COM : M80      COM
D: MBASIC   COM : OBSLIB   REL : RANTEST  ASC : RANTEST  BAS
D: RANTEST  COM : RANTEST  REL : SAMPLE   BAS : SAMPLE   COM
D: SAMPLE   REL
D>sample
This is an example of BASIC-80


D>bascom sample,sample=sample/o

00000 Fatal Error(s)
21105 Bytes Free

D>l80 sample,sample/n/e

Link-80  3.44  09-Dec-81  Copyright (c) 1981 Microsoft

Data    0103    2327    < 8740>

30923 Bytes Free
[0114   2327       35]

D>era sample.com

D>l80 sample,sample/n/e

Link-80  3.44  09-Dec-81  Copyright (c) 1981 Microsoft

Data    0103    2327    < 8740>

30923 Bytes Free
[0114   2327       35]

D>sample
This is an example of BASIC-80


D>dir
D: BASCOM   COM : BASCOM   HLP : BASCOM2  HLP : BASLIB   REL
D: BCLOAD       : BRUN     COM : CREF     COM : CREF80   COM
D: D        COM : L80      COM : LIB80    COM : M80      COM
D: MBASIC   COM : OBSLIB   REL : RANTEST  ASC : RANTEST  BAS
D: RANTEST  COM : RANTEST  REL : SAMPLE   BAS : SAMPLE   COM
D: SAMPLE   REL : SAMPLE   PRN
D>/exit
>
0000 00C3 - 
リモート接続を終了しました
logfile closed at Sun Jul 14 13:45:31 2013


こちらがCB80です。

logfile nd80zlog\07142035.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>copy z:sample.bas d:
SAMPLE  BAS to SAMPLE  BAS...... done

A>d:
D>cb80 sample[s]
-------------------------------------------------
CBASIC Compiler CB-80      21 May 83  Version 2.0
Serial No.  ACB-0000-000072   All rights reserved
Copyright (c) 1982, 1983   Digital Research, Inc.
-------------------------------------------------
end of pass 1
end of pass 2
    1:  005ch         \  CB80 sample program for "application CP/M"  \
    2:  005ch 
    3:  005ch         INTEGER I,H,A
    4:  005ch 
    5:  005ch                 \input message out
    6:  005ch         PRINT
    7:  005fh         PRINT   "1+2+3+....n = x"
    8:  0065h INP.MSGOUT:
    9:  0065h         INPUT   "input n (n = 1...250)   -->" ; INPVAL
   10:  0076h         IF      (INPVAL<1) OR (INPVAL>250) THEN GOTO INP.MSGOUT
   11:  009ah 
   12:  009ah                 \compute
   13:  009ah         GOSUB   CALC.SUB
   14:  009dh 
   15:  009dh                 \out result
   16:  009dh         PRINT
   17:  00a0h         PRINT   "1+2+3+...." ; INPVAL ; "= " ; ANSX
   18:  00beh                 STOP    \program run end
   19:  00beh 
   20:  00c1h                 \calc subroutine
   21:  00c1h CALC.SUB:
   22:  00c1h         P=      INPVAL+1
   23:  00d3h         ANSX=   P * 0.5 * INPVAL
   24:  00e8h                 RETURN
   25:  00ech 
   26:  00ech \list end.
end of compilation
no errors detected
code area size:    236       00ech
data area size:    24        0018h
common area size:  0         0000h
symbol table space remaining: 24583

D>lk80 sample
--------------------------------------------------
LK80  Linker             15 Apr 1983   Version 2.0
Serial No.  ACB-0000-000072    All rights reserved
Copyright (c) 1982,1983     Digital Research, Inc.
--------------------------------------------------
code size:      1700 (0100-17FF)
common size:    0000
data size:      01AC (1800-19AB)
symbol table space remaining:   9B26

D>dir
D: CB80     COM : CB80     IRL : CB80     OV1 : CB80     OV2
D: CB80     OV3 : CBASE2   COM : CIRCOM   BAS : CRUN2    COM
D: DEMOGRAF BAS : GRAPHCOM BAS : GRAPHR   BAS : GSXPREP  BAS
D: LIB      COM : LINK     COM : LK80     COM : READ     ME 
D: TSTCIR   BAS : DEMOGRAF REL : DEMOGRAF SYM : DEMOGRAF COM
D: SAMPLE   BAS : SAMPLE   SYM : SAMPLE   REL : SAMPLE   COM

D>sample

1+2+3+....n = x
input n (n = 1...250)   --> 500
input n (n = 1...250)   --> 250

1+2+3+.... 250 =  31375

D>/exit
>
0000 00C3 - 
リモート接続を終了しました
logfile closed at Sun Jul 14 20:42:59 2013


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

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