MYCPU80でCP/Mを!
超巨大基板の8080互換HCMOS・CPUでCP/Mを走らせてしまおうという、なんとも狂気なプロジェクトです!
[第143回]
●WordStar、F80、L80が動きました
MYCPU80用ZB3BASIC+ZB3DOS(CP/M互換DOS)セットをご購入いただいた長野県のN様から、さっそく「動作の確認をしましたよ」とのメールをいただきました。
「WordStarとF80(Fortran80)、L80がMYCPU80で動きました」とのことです。
うんと若い頃、私は最初はFORTRANからプログラミングを始めたのでしたが、もうすっかり忘れてしまいました。
WordStarも使い方はよくわかっていません。
ですのでN様のようにソフトに詳しい方がこうやってテストをして動作のご確認をしていただきますととても助かります。
N様。さっそくのご連絡のメール有難うございました。
今後ともよろしくお願いいたします。
●シリアル入力ルーチン(2)
[第141回]からの続きです。
お話の順序が逆でした。
まずはどこがどうおかしいのかを説明するのが先でした。
/CPM[Enter]を実行すると、ZB3DOSシステムプログラムがロードされてZB3DOSが起動します。
ところがどういうわけか、そのシステムロードでときどき異常が発生することがありました。
どうもロードでなにかがおきているようでした。
毎回異常が発生するのではなくて、本当にごくたまにおかしな動作をするものですから、その正体を捉えるのはなかなか骨が折れました。
あれこれ手法を変えて繰り返しテストをしていくなかで、たまたま明らかな異常が発生しているところを捉えることができました。
下はアドレスCC00からロードするZB3DOSシステムプログラムをデバッグのために8C00からロードしたあと、メモリ内容をチェックしたときのものです。
異常はデータの先頭部分で発生しています。
logfile mycpu80log\02241731.txt open
mzbdos3ot3 2015.2.20 by Chunichidenko
MYCPU80に接続しました(19200bps)
0001 001E - z
1000 00C3 -
*** mycpu80 zb3basic ****
>dm 8c00,8cff
8C00 C3 3B CC C3 00 01 C3 74-74 CC C3 77 D0 C3 90 D0 テ;フテ..テttフテwミテ.ミ
8C10 C3 AC D0 C3 CB D0 C3 35-D1 C3 3B D1 C3 4C D1 C3 テャミテヒミテ5ムテ;ムテLムテ
8C20 5F D1 C3 0D CE C3 73 D2-C3 68 D0 C3 77 D3 00 00 _ムテ.ホテsメテhミテwモ..
8C30 00 00 00 00 00 00 00 00-00 00 00 00 C5 11 80 00 ............ナ...
8C40 CD 57 D4 AF 32 85 E8 3E-03 32 35 E9 F5 11 98 D3 ヘWヤッ2..>.25....モ
8C50 CD 24 D4 F1 F5 C6 41 5F-CD 0F D4 CD A4 D3 F1 5F ヘ$ヤ..ニA_ヘ.ヤヘ、モ._
8C60 CD 33 D4 CD 7B D4 CD A9-D3 3A 35 E9 3D F2 48 CC ヘ3ヤヘ{ヤヘゥモ:5.=.Hフ
8C70 C1 79 32 35 E9 AF 32 84-E8 32 85 E8 67 6F 22 80 チy25.ッ2..2..go".
8C80 E8 22 82 E8 31 00 F8 11-80 00 CD 57 D4 CD A9 D3 ."..1.....ヘWヤヘゥモ
8C90 3A 35 E9 5F CD 33 D4 CA-A3 CC CD 59 D3 AF 32 35 :5._ヘ3ヤハ」フヘYモッ25
8CA0 E9 C3 8C CC 21 FF 00 22-FE E9 3A 35 E9 C6 41 5F .テ.フ!.."..:5.ニA_
8CB0 CD 0F D4 1E 3E CD 0F D4-11 FE E9 CD 27 D4 CD A9 ヘ.ヤ.>ヘ.ヤ...ヘ'ヤヘゥ
8CC0 D3 7E B7 CA A9 CC 47 23-7E FE 20 C2 D4 CC 05 CA モ~キハゥフG#~. ツヤフ.ハ
8CD0 A9 CC C3 C6 CC 48 E5 7E-FE 61 DA E3 CC FE 7B D2 ゥフテニフH.~.aレ.フ.{メ
8CE0 E3 CC E6 DF 77 23 0D C2-D6 CC 36 00 E1 78 FE 02 .フ.゚w#.ツヨフ6..x..
8CF0 C2 13 CD 23 7E FE 3A 2B-C2 79 D1 7E D6 41 5F F5 ツ.ヘ#~.:+ツyム~ヨA_.
>/close
logfile closed at Tue Feb 24 17:43:32 2015
open new logfile
|
下は上のデータの先頭部分のアセンブルリストです。
;
;************** ZCCP ENTRY **********
;
CC00 C33BCC JMP CCPENTRY0
CC03 C30001 TRNS0J:JMP TRNS0
CC06 C374CC JMP CCPENTRY
CC09 C377D0 JMP RENSB1
CC0C C390D0 JMP RENSB2
CC0F C3ACD0 JMP RENSB22
CC12 C3CBD0 JMP RENSB3
CC15 C335D1 JMP OLDDRVSET
CC18 C33BD1 JMP NEWDRVSET
CC1B C34CD1 JMP DIRDT2WK
CC1E C35FD1 JMP WK2DIRDT
CC21 C30DCE JMP DIR_NOFILE
CC24 C373D2 JMP USRCMD73;end
CC27 C368D0 JMP SAMENMSB
CC2A C377D3 JMP ERR05
;
|
;
;SERIAL INPUT ROUTINE
;
ORG $02A0
;
02A0 DB98 SIN:IN 98
02A2 0F RRC
02A3 DAA002 JC SIN
02A6 3EFE MVI A,FE;BUSY
02A8 D398 OUT 98
02AA DB94 IN 94
02AC 4F MOV C,A
02AD 3EFF MVI A,FF;READY
02AF D398 OUT 98
02B1 79 MOV A,C
02B2 C9 RET
;
|
下がタイミングチャートです(こちらも[第141回]でお見せしました)。
D0 INはPIC16F88のRB0の出力を受けるMYCPU80側のライン(アドレス98のD0入力)です。
PIC16F88からのストローブ信号です。
D0 OUTはPIC16F88のRB1に向けて出力するMYCPU80側のライン(アドレス98のD0出力)です。
MYCPU80からのREADY/BUSY信号です。
PIC16F88はWindowsパソコンから送られてきたデータをFT232RLを介して受信すると、パラレルデータに変換してそれをI/Oアドレス94のラインに出力します。
そしてそれをCPUに知らせるためにSTB信号(D0 IN)をアクティブ(L)にします。
CPU側はSTB信号がLになったのを見てBUSY(D0 OUT)をLにしてから、データを読み込みます。
ここがそもそもよくありませんでした。
ここは順序が逆でした。
データを読んでからBUSYをLにすべきです。
でもまあもとはシリアルデータですから、ここは実際には問題ではありません。
問題はそのあとです。
PIC16F88はBUSY(D0 OUT)がLになったのを見て、STB信号(D0 IN)をHにして処理を終了するのですが、CPUの側はデータを読み込むとさっさとBUSY(D0 OUT)をHにして処理を終了してしまいます。
ここが問題でした。
PICはSTB信号(D0 IN)をLにしたあとはBUSY(D0 OUT)をずっと監視しているはずなので、そういう動作でもとりあえずはうまくいっていました。
MYCPU80組立キットに付属のTK−80モニタプログラムだけのシステムでしたらボーレートは2400bpsと低速ですので、まず問題にはなりませんでした。
ところがZB3BASIC+ZB3DOS(CP/M互換DOS)システムでボーレートを19200bpsと高速にしたために、もとのままのプログラムではその速度にはついていけなくなったため、プログラムを大幅に変更いたしました。
そのためちょっと都合の悪いことがおきてしまう可能性がでてきたのですが、うかつにも私はそのことに気が付いていなかったのでした。
上では「PICはSTB信号(D0 IN)をLにしたあとはBUSY(D0 OUT)をずっと監視しているはずなので」と書きましたが、実はZB3BASIC+ZB3DOSシステムのために新しく書いたプログラムはそこのところが違っていました。
説明が長くなってしまいますので、途中ですが今回はここまでといたします。
この続きは次回にいたします。
MYCPU80でCP/Mを![第143回]
2015.2.28upload
前へ
次へ
ホームページトップへ戻る