2015.2.14

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

MYCPU80でCP/Mを!
超巨大基板の8080互換HCMOS・CPUでCP/Mを走らせてしまおうという、なんとも狂気なプロジェクトです!


[第130回]


●エスケープシーケンス

エスケープシーケンスについてはまだテストをしていなかったことに気が付きました。
エスケープシーケンスは「ワンボードマイコンでCP/Mを!」[第426回]でテストをしています。
そこではZB3BASICとCP/M互換DOSの両方でテストをしました。
CP/M互換DOSのテストプログラムはESCT3CPMです。

いつものようにESCT3CPMのソースプログラムをインテルニーモニックに書き直してMESCT3Cを作りました。

●テストプログラムMESCT3C

MESCT3Cのソースプログラムです。

; ESC[2J clear screen test
;ESC[xm color disp test
;2013/6/23 6/26
;
        ORG $0100
        FCALL=$0005
;
        LXI D,LIST1
        MVI C,09
        CALL FCALL
        MVI E,1B;ESC
        MVI C,02
        CALL FCALL
        LXI D,LIST2
        MVI C,09
        CALL FCALL
        LXI D,LIST3
        MVI C,09
        CALL FCALL
;
        MVI E,1B;ESC
        MVI C,02
        CALL FCALL
        LXI D,BGBLUE
        MVI C,09
        CALL FCALL
;
        MVI E,1B;ESC
        MVI C,02
        CALL FCALL
        LXI D,BLACK
        MVI C,09
        CALL FCALL
;
        MVI E,1B;ESC
        MVI C,02
        CALL FCALL
        LXI D,BGWHITE
        MVI C,09
        CALL FCALL
;
        MVI E,1B;ESC
        MVI C,02
        CALL FCALL
        LXI D,RED
        MVI C,09
        CALL FCALL
;
        MVI E,1B;ESC
        MVI C,02
        CALL FCALL
        LXI D,GREEN
        MVI C,09
        CALL FCALL
;
        MVI E,1B;ESC
        MVI C,02
        CALL FCALL
        LXI D,BGMAGENTA
        MVI C,09
        CALL FCALL
;
        MVI E,1B;ESC
        MVI C,02
        CALL FCALL
        LXI D,YELLOW
        MVI C,09
        CALL FCALL
;
        MVI E,1B;ESC
        MVI C,02
        CALL FCALL
        LXI D,BGGREEN
        MVI C,09
        CALL FCALL
;
        MVI E,1B;ESC
        MVI C,02
        CALL FCALL
        LXI D,BLUE
        MVI C,09
        CALL FCALL
;
        MVI E,1B;ESC
        MVI C,02
        CALL FCALL
        LXI D,BGCYAN
        MVI C,09
        CALL FCALL
;
        MVI E,1B;ESC
        MVI C,02
        CALL FCALL
        LXI D,MAGENTA
        MVI C,09
        CALL FCALL
;
        MVI E,1B;ESC
        MVI C,02
        CALL FCALL
        LXI D,BGYELLOW
        MVI C,09
        CALL FCALL
;
        MVI E,1B;ESC
        MVI C,02
        CALL FCALL
        LXI D,CYAN
        MVI C,09
        CALL FCALL
;
        MVI E,1B;ESC
        MVI C,02
        CALL FCALL
        LXI D,WHITE
        MVI C,09
        CALL FCALL
;
        MVI E,1B;ESC
        MVI C,02
        CALL FCALL
        LXI D,STNDRD
        MVI C,09
        CALL FCALL
;
        MVI E,1B;ESC
        MVI C,02
        CALL FCALL
        LXI D,BGRED
        MVI C,09
        CALL FCALL
;
        MVI E,1B;ESC
        MVI C,02
        CALL FCALL
        LXI D,BGSTNDRD
        MVI C,09
        CALL FCALL
        RET
;
LIST1:"*** "
        "ESC "
        "clea"
        "r sc"
        "reen"
        " tes"
        "t **"
        "*$"
LIST2:"[2J$"
LIST3:"*** "
        "ESC["
        "2J "
        "clea"
        "r sc"
        "reen"
        " tes"
        "t en"
        "d **"
        "*"
        DB 0D
        DB 0A
        DB 24
;
BLACK:"[30m"
        "COLO"
        "R"
        DB 3D;=
        "BLAC"
        "K  $"
RED:"[31m"
        "COLO"
        "R"
        DB 3D;=
        "RED"
        "  $"
GREEN:"[32m"
        "COLO"
        "R"
        DB 3D;=
        "GRE"
        "EN  "
        "$"
YELLOW:"[33m"
        "COLO"
        "R"
        DB 3D;=
        "YEL"
        "LOW "
        " $"
BLUE:"[34m"
        "COLO"
        "R"
        DB 3D;=
        "BLU"
        "E  $"
MAGENTA:"[35m"
        "COLO"
        "R"
        DB 3D;=
        "MAG"
        "ENTA"
        "  $"
CYAN:"[36m"
        "COLO"
        "R"
        DB 3D;=
        "CYA"
        "N  $"
WHITE:"[37m"
        "COLO"
        "R"
        DB 3D;=
        "WHIT"
        "E  $"
STNDRD:"[39m"
        "COLO"
        "R"
        DB 3D;=
        "STAN"
        "DARD"
        "  $"
BGBLACK:"[40m"
        "BGCO"
        "LOR"
        DB 3D;=
        "BLAC"
        "K  $"
BGRED:"[41m"
        "BGCO"
        "LOR"
        DB 3D;=
        "RED"
        "  $"
BGGREEN:"[42m"
        "BGCO"
        "LOR"
        DB 3D;=
        "GRE"
        "EN  "
        "$"
BGYELLOW:"[43m"
        "BGCO"
        "LOR"
        DB 3D;=
        "YEL"
        "LOW "
        " $"
BGBLUE:"[44m"
        "BGCO"
        "LOR"
        DB 3D;=
        "BLU"
        "E  $"
BGMAGENTA:"[45m"
        "BGCO"
        "LOR"
        DB 3D;=
        "MAG"
        "ENTA"
        "  $"
BGCYAN:"[46m"
        "BGCO"
        "LOR"
        DB 3D;=
        "CYA"
        "N  $"
BGWHITE:"[47m"
        "BGCO"
        "LOR"
        DB 3D;=
        "WHIT"
        "E  $"
BGSTNDRD:"[49m"
        "BGCO"
        "LOR"
        DB 3D;=
        "STAN"
        "DARD"
        "  $"
;

下はMESCT3Cのアセンブルリストです。

2015/2/3  18:37  mesct3c.txt
END=03C1
              ; ESC[2J clear screen test
              ;ESC[xm color disp test
              ;2013/6/23 6/26
              ;
                ORG $0100
                FCALL=$0005
              ;
0100 111F02     LXI D,LIST1
0103 0E09       MVI C,09
0105 CD0500     CALL FCALL
0108 1E1B       MVI E,1B;ESC
010A 0E02       MVI C,02
010C CD0500     CALL FCALL
010F 113D02     LXI D,LIST2
0112 0E09       MVI C,09
0114 CD0500     CALL FCALL
0117 114102     LXI D,LIST3
011A 0E09       MVI C,09
011C CD0500     CALL FCALL
              ;
011F 1E1B       MVI E,1B;ESC
0121 0E02       MVI C,02
0123 CD0500     CALL FCALL
0126 115B03     LXI D,BGBLUE
0129 0E09       MVI C,09
012B CD0500     CALL FCALL
              ;
012E 1E1B       MVI E,1B;ESC
0130 0E02       MVI C,02
0132 CD0500     CALL FCALL
0135 116802     LXI D,BLACK
0138 0E09       MVI C,09
013A CD0500     CALL FCALL
              ;
013D 1E1B       MVI E,1B;ESC
013F 0E02       MVI C,02
0141 CD0500     CALL FCALL
0144 119703     LXI D,BGWHITE
0147 0E09       MVI C,09
0149 CD0500     CALL FCALL
              ;
014C 1E1B       MVI E,1B;ESC
014E 0E02       MVI C,02
0150 CD0500     CALL FCALL
0153 117A02     LXI D,RED
0156 0E09       MVI C,09
0158 CD0500     CALL FCALL
              ;
015B 1E1B       MVI E,1B;ESC
015D 0E02       MVI C,02
015F CD0500     CALL FCALL
0162 118A02     LXI D,GREEN
0165 0E09       MVI C,09
0167 CD0500     CALL FCALL
              ;
016A 1E1B       MVI E,1B;ESC
016C 0E02       MVI C,02
016E CD0500     CALL FCALL
0171 116E03     LXI D,BGMAGENTA
0174 0E09       MVI C,09
0176 CD0500     CALL FCALL
              ;
0179 1E1B       MVI E,1B;ESC
017B 0E02       MVI C,02
017D CD0500     CALL FCALL
0180 119C02     LXI D,YELLOW
0183 0E09       MVI C,09
0185 CD0500     CALL FCALL
              ;
0188 1E1B       MVI E,1B;ESC
018A 0E02       MVI C,02
018C CD0500     CALL FCALL
018F 113203     LXI D,BGGREEN
0192 0E09       MVI C,09
0194 CD0500     CALL FCALL
              ;
0197 1E1B       MVI E,1B;ESC
0199 0E02       MVI C,02
019B CD0500     CALL FCALL
019E 11AF02     LXI D,BLUE
01A1 0E09       MVI C,09
01A3 CD0500     CALL FCALL
              ;
01A6 1E1B       MVI E,1B;ESC
01A8 0E02       MVI C,02
01AA CD0500     CALL FCALL
01AD 118403     LXI D,BGCYAN
01B0 0E09       MVI C,09
01B2 CD0500     CALL FCALL
              ;
01B5 1E1B       MVI E,1B;ESC
01B7 0E02       MVI C,02
01B9 CD0500     CALL FCALL
01BC 11C002     LXI D,MAGENTA
01BF 0E09       MVI C,09
01C1 CD0500     CALL FCALL
              ;
01C4 1E1B       MVI E,1B;ESC
01C6 0E02       MVI C,02
01C8 CD0500     CALL FCALL
01CB 114603     LXI D,BGYELLOW
01CE 0E09       MVI C,09
01D0 CD0500     CALL FCALL
              ;
01D3 1E1B       MVI E,1B;ESC
01D5 0E02       MVI C,02
01D7 CD0500     CALL FCALL
01DA 11D402     LXI D,CYAN
01DD 0E09       MVI C,09
01DF CD0500     CALL FCALL
              ;
01E2 1E1B       MVI E,1B;ESC
01E4 0E02       MVI C,02
01E6 CD0500     CALL FCALL
01E9 11E502     LXI D,WHITE
01EC 0E09       MVI C,09
01EE CD0500     CALL FCALL
              ;
01F1 1E1B       MVI E,1B;ESC
01F3 0E02       MVI C,02
01F5 CD0500     CALL FCALL
01F8 11F702     LXI D,STNDRD
01FB 0E09       MVI C,09
01FD CD0500     CALL FCALL
              ;
0200 1E1B       MVI E,1B;ESC
0202 0E02       MVI C,02
0204 CD0500     CALL FCALL
0207 112003     LXI D,BGRED
020A 0E09       MVI C,09
020C CD0500     CALL FCALL
              ;
020F 1E1B       MVI E,1B;ESC
0211 0E02       MVI C,02
0213 CD0500     CALL FCALL
0216 11AB03     LXI D,BGSTNDRD
0219 0E09       MVI C,09
021B CD0500     CALL FCALL
021E C9         RET
              ;
021F 2A2A2A20 LIST1:"*** "
0223 45534320   "ESC "
0227 636C6561   "clea"
022B 72207363   "r sc"
022F 7265656E   "reen"
0233 20746573   " tes"
0237 74202A2A   "t **"
023B 2A24       "*$"
023D 5B324A24 LIST2:"[2J$"
0241 2A2A2A20 LIST3:"*** "
0245 4553435B   "ESC["
0249 324A20     "2J "
024C 636C6561   "clea"
0250 72207363   "r sc"
0254 7265656E   "reen"
0258 20746573   " tes"
025C 7420656E   "t en"
0260 64202A2A   "d **"
0264 2A         "*"
0265 0D         DB 0D
0266 0A         DB 0A
0267 24         DB 24
              ;
0268 5B33306D BLACK:"[30m"
026C 434F4C4F   "COLO"
0270 52         "R"
0271 3D         DB 3D;=
0272 424C4143   "BLAC"
0276 4B202024   "K  $"
027A 5B33316D RED:"[31m"
027E 434F4C4F   "COLO"
0282 52         "R"
0283 3D         DB 3D;=
0284 524544     "RED"
0287 202024     "  $"
028A 5B33326D GREEN:"[32m"
028E 434F4C4F   "COLO"
0292 52         "R"
0293 3D         DB 3D;=
0294 475245     "GRE"
0297 454E2020   "EN  "
029B 24         "$"
029C 5B33336D YELLOW:"[33m"
02A0 434F4C4F   "COLO"
02A4 52         "R"
02A5 3D         DB 3D;=
02A6 59454C     "YEL"
02A9 4C4F5720   "LOW "
02AD 2024       " $"
02AF 5B33346D BLUE:"[34m"
02B3 434F4C4F   "COLO"
02B7 52         "R"
02B8 3D         DB 3D;=
02B9 424C55     "BLU"
02BC 45202024   "E  $"
02C0 5B33356D MAGENTA:"[35m"
02C4 434F4C4F   "COLO"
02C8 52         "R"
02C9 3D         DB 3D;=
02CA 4D4147     "MAG"
02CD 454E5441   "ENTA"
02D1 202024     "  $"
02D4 5B33366D CYAN:"[36m"
02D8 434F4C4F   "COLO"
02DC 52         "R"
02DD 3D         DB 3D;=
02DE 435941     "CYA"
02E1 4E202024   "N  $"
02E5 5B33376D WHITE:"[37m"
02E9 434F4C4F   "COLO"
02ED 52         "R"
02EE 3D         DB 3D;=
02EF 57484954   "WHIT"
02F3 45202024   "E  $"
02F7 5B33396D STNDRD:"[39m"
02FB 434F4C4F   "COLO"
02FF 52         "R"
0300 3D         DB 3D;=
0301 5354414E   "STAN"
0305 44415244   "DARD"
0309 202024     "  $"
030C 5B34306D BGBLACK:"[40m"
0310 4247434F   "BGCO"
0314 4C4F52     "LOR"
0317 3D         DB 3D;=
0318 424C4143   "BLAC"
031C 4B202024   "K  $"
0320 5B34316D BGRED:"[41m"
0324 4247434F   "BGCO"
0328 4C4F52     "LOR"
032B 3D         DB 3D;=
032C 524544     "RED"
032F 202024     "  $"
0332 5B34326D BGGREEN:"[42m"
0336 4247434F   "BGCO"
033A 4C4F52     "LOR"
033D 3D         DB 3D;=
033E 475245     "GRE"
0341 454E2020   "EN  "
0345 24         "$"
0346 5B34336D BGYELLOW:"[43m"
034A 4247434F   "BGCO"
034E 4C4F52     "LOR"
0351 3D         DB 3D;=
0352 59454C     "YEL"
0355 4C4F5720   "LOW "
0359 2024       " $"
035B 5B34346D BGBLUE:"[44m"
035F 4247434F   "BGCO"
0363 4C4F52     "LOR"
0366 3D         DB 3D;=
0367 424C55     "BLU"
036A 45202024   "E  $"
036E 5B34356D BGMAGENTA:"[45m"
0372 4247434F   "BGCO"
0376 4C4F52     "LOR"
0379 3D         DB 3D;=
037A 4D4147     "MAG"
037D 454E5441   "ENTA"
0381 202024     "  $"
0384 5B34366D BGCYAN:"[46m"
0388 4247434F   "BGCO"
038C 4C4F52     "LOR"
038F 3D         DB 3D;=
0390 435941     "CYA"
0393 4E202024   "N  $"
0397 5B34376D BGWHITE:"[47m"
039B 4247434F   "BGCO"
039F 4C4F52     "LOR"
03A2 3D         DB 3D;=
03A3 57484954   "WHIT"
03A7 45202024   "E  $"
03AB 5B34396D BGSTNDRD:"[49m"
03AF 4247434F   "BGCO"
03B3 4C4F52     "LOR"
03B6 3D         DB 3D;=
03B7 5354414E   "STAN"
03BB 44415244   "DARD"
03BF 202024     "  $"
              ;
BGBLACK      =030C  BGBLUE       =035B  BGCYAN       =0384  
BGGREEN      =0332  BGMAGENTA    =036E  BGRED        =0320  
BGSTNDRD     =03AB  BGWHITE      =0397  BGYELLOW     =0346  
BLACK        =0268  BLUE         =02AF  CYAN         =02D4  
FCALL        =0005  GREEN        =028A  LIST1        =021F  
LIST2        =023D  LIST3        =0241  MAGENTA      =02C0  
RED          =027A  STNDRD       =02F7  WHITE        =02E5  
YELLOW       =029C  

●BASICテストプログラムESCTSTB4の実行

「ワンボードマイコンでCP/Mを!」[第426回]では、先にZB3BASICでテストをしました。
そこで今回も同ページと同じ手順でテストを行いました。
BASICのテストプログラムは同ページにリストがありますが、参考までに下に再掲します。
ESCTSTB4.TXTです。
    10 A=0
    20 PRINT "***  ESC clear screen test  ***"
    30 PRINT CHR$($1B);"[2J";
    40 PRINT "***  ESC[2J clear screen test end  ***"
    50 PRINT "**   ESC[nm color test  ***"
    60 PRINT CHR$($1B);"[44m";
    70 PRINT "BACKGROUNDCOLOR=BLUE  ";
    80 PRINT CHR$($1B);"[30m";
    90 PRINT "COLOR=BLACK  ";
   100 PRINT CHR$($1B);"[47m";
   110 PRINT "BACKGROUNDCOLOR=WHITE  ";
   120 PRINT CHR$($1B);"[31m";
   130 PRINT "COLOR=RED  ";
   140 PRINT CHR$($1B);"[32m";
   150 PRINT "COLOR=GREEN  ";
   160 PRINT CHR$($1B);"[45m";
   170 PRINT "BACKGROUNDCOLOR=MAGENTA  ";
   180 PRINT CHR$($1B);"[33m";
   190 PRINT "COLOR=YELLOW  ";
   200 PRINT CHR$($1B);"[42m";
   210 PRINT "BACKGROUNDCOLOR=GREEN  ";
   220 PRINT CHR$($1B);"[34m";
   230 PRINT "COLOR=BLUE  ";
   240 PRINT CHR$($1B);"[46m";
   250 PRINT "BACKGROUNDCOLOR=CYAN  ";
   260 PRINT CHR$($1B);"[35m";
   270 PRINT "COLOR=MAGENTA  ";
   280 PRINT CHR$($1B);"[43m";
   290 PRINT "BACKGROUNDCOLOR=YELLOW  ";
   300 PRINT CHR$($1B);"[36m";
   310 PRINT "COLOR=CYAN  ";
   320 PRINT CHR$($1B);"[37m";
   330 PRINT "COLOR=WHITE  ";
   340 PRINT CHR$($1B);"[39m";
   350 PRINT "COLOR=STANDARD  ";
   360 PRINT CHR$($1B);"[41m";
   370 PRINT "BACKGROUNDCOLOR=RED  ";
   380 PRINT CHR$($1B);"[49m";
   390 PRINT "BACKGROUNDCOLOR=STANDARD  ";

これはBASICプログラムですからあらためて8080用に変換しなくてもそのまま使えます。
「ワンボードマイコンでCP/Mを!」[第426回]を開いてそれをバックにして実行しました。



同じ結果が得られました。

●MESCT3Cの実行

次はCP/M互換DOSでの実行です。
CP/M互換DOSにエントリしてMESCT3Cを実行しました。



こちらも「ワンボードマイコンでCP/Mを!」[第426回]と同じ結果になりました。



●Windows7でテストしました

今までのテストはずっとWindows98SEマシンに接続して行なってきました。
とにかくWindows98SEのほうがはるかに使い勝手がよいのです。
ですのでいまだにWindows98SEが手放せません。
まだ私のところではWindows98SEマシンが現役で活躍しています。

ところで。
「WindowsXP以後のマシンではエスケープシーケンスが働きません」と「ワンボードマイコンでCP/Mを!」[第425回]で書きました。
WindowsXP以後のマシンではコマンドプロンプト(MSDOSプロンプト)で普通にエスケープシーケンスを使ってもまともに機能してくれないことがわかりました。
そこでZB3DOS(CP/M互換DOS)ではいくつかのエスケープシーケンスをソフトウェアでエミュレートするようにしました。

おお。
そうすると。
これはやっぱりWindows7でもテストをしてみなければいけません。
どうせ最後はきちんとWindows7で動作テストをしておくつもりでしたから、ちょうどよい機会です。
Windows7でも同じテストをしてみました。
もちろんMYCPU80をWindows7に接続してのテストです。

Windows7に接続して、BASICテストプログラムESCTSTT4.TXTをロードしました。



ESCTSTT4を実行しました。
BASICは問題なく実行できました。

次にCP/M互換DOSにエントリしようとしましたら。
mcpm5e.bin cannot openと表示されてしまいました。
うっかりしてCP/M互換DOS本体をWindows7に持ってくるのを忘れておりました。

必要なファイルを実行フォルダにコピーしてから再度/CPMを実行しました。

今度はうまくいきました。
CP/M互換DOSが起動しました。
テストプログラムMESCT3Cを実行します。

「ワンボードマイコンでCP/Mを!」[第426回]を開いてそれをバックにして実行しました。



Windows7でも問題なく実行できました。

●エスケープシーケンス一覧(1)

今回テストをしたエスケープシーケンスは「ワンボードマイコンでCP/Mを!」[第427回]でまとめていますが、参考までに下に再掲します。

ESC=YX 
カーソルを左上隅を(0,0)とするとき座標(y,x)に移動する。ただしY=y+20H、X=x+20Hの文字コードの文字で示す。
たとえば(5,8)なら
ESC=%(
になる。%=25H、(=28H。

ESC[2J  画面クリア

ESC[30m  文字色を黒に指定
ESC[31m  文字色を赤に指定
ESC[32m  文字色を緑に指定
ESC[33m  文字色を黄に指定
ESC[34m  文字色を青に指定
ESC[35m  文字色をマゼンタに指定
ESC[36m  文字色をシアンに指定
ESC[37m  文字色を白に指定
ESC[39m  文字色を標準色に戻す

ESC[40m  背景色を黒に指定
ESC[41m  背景色を赤に指定
ESC[42m  背景色を緑に指定
ESC[43m  背景色を黄に指定
ESC[44m  背景色を青に指定
ESC[45m  背景色をマゼンタに指定
ESC[46m  背景色をシアンに指定
ESC[47m  背景色を白に指定
ESC[49m  背景色を標準色に戻す

「ワンボードマイコンでCP/Mを!」[第427回]では上記のほかにもいくつかのエスケープシーケンスについて説明とテストをしています。
またその後にもさらにいくつかのエスケープシーケンスを追加しました。
本日は時間がなくなってしまいましたので、それらにつきましては次回に説明をいたします。

MYCPU80でCP/Mを![第130回]
2015.2.14upload

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