復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第426回]
●ESCシーケンスをエミュレート
前回WindowsXPではESCシーケンスが使えません、と書きましたところ、長野県のN様からメールをいただきました。
CP/MEmulatorというソフトを動かしてみましたら、ちゃんとエスケープシーケンスが使えました。
だから何か方法があるのではありませんか?
というお尋ねです。
ええ。
きっとそういうお話が出るだろうと思っていました。
あの。
そのCP/MEmulatorはコマンドプロンプトで動いているのではありませんでしょう?
なんたってエミュレータですから何でもエミュレートするように作られているのでしょう。
エスケープシーケンスもエミュレートしているでしょうけれど、だからといって、コマンドプロンプトでエスケープシーケンスを実行しているわけではありませんでしょう。
エミュレートという意味では[第423回]のESC[2Jはエミュレートです。
実際にコマンドプロンプトにESC[2Jを渡しているわけではありません。
カーソル移動のESC=YXもエミュレートです。
[第424回]でWindows98SE上で実行したESC[nmはエミュレートではありません。
ホンモノのエスケープシーケンスです。
でもそれはWindowsXPでは動きませんでした。
Windows98SEで動いただけで、WindowsXPでは動作確認しないで、エスケープシーケンスが使えました、なんて画像つきでホームページに書いてしまいました。
実はWindowsXPでは動きませんでした。ごめんなさい。
いや、いや、いや。
それで終わったんではいささか、といいますか、非常に面白くありません。
もう。ほんとに忙しいのですけれど。
ええ。
面白くありませんから、カラー表示のエスケープシーケンスをエミュレートしてしまいました。
あ。
いまどきですと、たいていはWin32APIでやってしまいますですね。
しかし。
私はかなり抵抗しておりまして。
どうしても必要な場合以外はWin32APIなど使いたくはありません。
できるだけMicrosoft様の呪縛から逃れてフリーでいたいのですよお。
ですので今回のエスケープシーケンスではWin32APIは使っておりません。
何を使ったかといいますと、
TEXTCOLOR()関数とTEXTBACKGROUND()関数です。
使い方はチョー簡単です。
TEXTCOLOR(RED);
とか
TEXTBACKGROUND(BLUE);
だけでいいのです。
ですけれど。
この関数については、日本語のサイトではまず出てきません。
もうみんなかなりWIN32APIに毒されてしまっておりますようで。
英文のサイトで検索すると一発です。
この違いは何なのでしょう?
このように書きますと。
でもWIN32APIを使えばもっと細かい色の指定などが自由にできて、そのほうが便利なのではありませんか?
なんてご批判いただいたりしてしまいます。
いえ。それは違うのですよねえ。
もともとカラー制御など考えていませんでしたし、ましてそれをエスケープシーケンスでやるなどということは全く意識の外でした。
ですので今回はとにかくエスケープシーケンスのエミュレートができればそれでよいのでありまして、はなから詳細なカラー制御ができるようにしようなどとは露ほども考えておりませぬ。
ま。
とにかくそのようにしまして、カラー指定のエスケープシーケンスをZB3DOS.EXEに組み込んでしまいました。
動作テストです。
こちらはZB3BASICです。
Windows7(32bit)のコマンドプロンプトでの実行です。
ほら。この通り。
もちろん。実際にエスケープシーケンスが機能しているわけではありません。
ZB3DOS.EXEがそれをエミュレートしています。
こちらが上で実行しましたBASICプログラムです。
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 "; |
; ESC[2J clear screen test ;ESC[xm color disp test ;2013/6/23 6/26 ; ORG $0100 FCALL=$0005 ; LD DE,LIST1 LD C,09 CALL FCALL LD E,1B;ESC LD C,02 CALL FCALL LD DE,LIST2 LD C,09 CALL FCALL LD DE,LIST3 LD C,09 CALL FCALL ; LD E,1B;ESC LD C,02 CALL FCALL LD DE,BGBLUE LD C,09 CALL FCALL ; LD E,1B;ESC LD C,02 CALL FCALL LD DE,BLACK LD C,09 CALL FCALL ; LD E,1B;ESC LD C,02 CALL FCALL LD DE,BGWHITE LD C,09 CALL FCALL ; LD E,1B;ESC LD C,02 CALL FCALL LD DE,RED LD C,09 CALL FCALL ; LD E,1B;ESC LD C,02 CALL FCALL LD DE,GREEN LD C,09 CALL FCALL ; LD E,1B;ESC LD C,02 CALL FCALL LD DE,BGMAGENTA LD C,09 CALL FCALL ; LD E,1B;ESC LD C,02 CALL FCALL LD DE,YELLOW LD C,09 CALL FCALL ; LD E,1B;ESC LD C,02 CALL FCALL LD DE,BGGREEN LD C,09 CALL FCALL ; LD E,1B;ESC LD C,02 CALL FCALL LD DE,BLUE LD C,09 CALL FCALL ; LD E,1B;ESC LD C,02 CALL FCALL LD DE,BGCYAN LD C,09 CALL FCALL ; LD E,1B;ESC LD C,02 CALL FCALL LD DE,MAGENTA LD C,09 CALL FCALL ; LD E,1B;ESC LD C,02 CALL FCALL LD DE,BGYELLOW LD C,09 CALL FCALL ; LD E,1B;ESC LD C,02 CALL FCALL LD DE,CYAN LD C,09 CALL FCALL ; LD E,1B;ESC LD C,02 CALL FCALL LD DE,WHITE LD C,09 CALL FCALL ; LD E,1B;ESC LD C,02 CALL FCALL LD DE,STNDRD LD C,09 CALL FCALL ; LD E,1B;ESC LD C,02 CALL FCALL LD DE,BGRED LD C,09 CALL FCALL ; LD E,1B;ESC LD C,02 CALL FCALL LD DE,BGSTNDRD LD 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" " $" ; |
2013/6/26 21:3 esct3cpm.txt END=03C1 ; ESC[2J clear screen test ;ESC[xm color disp test ;2013/6/23 6/26 ; ORG $0100 FCALL=$0005 ; 0100 111F02 LD DE,LIST1 0103 0E09 LD C,09 0105 CD0500 CALL FCALL 0108 1E1B LD E,1B;ESC 010A 0E02 LD C,02 010C CD0500 CALL FCALL 010F 113D02 LD DE,LIST2 0112 0E09 LD C,09 0114 CD0500 CALL FCALL 0117 114102 LD DE,LIST3 011A 0E09 LD C,09 011C CD0500 CALL FCALL ; 011F 1E1B LD E,1B;ESC 0121 0E02 LD C,02 0123 CD0500 CALL FCALL 0126 115B03 LD DE,BGBLUE 0129 0E09 LD C,09 012B CD0500 CALL FCALL ; 012E 1E1B LD E,1B;ESC 0130 0E02 LD C,02 0132 CD0500 CALL FCALL 0135 116802 LD DE,BLACK 0138 0E09 LD C,09 013A CD0500 CALL FCALL ; 013D 1E1B LD E,1B;ESC 013F 0E02 LD C,02 0141 CD0500 CALL FCALL 0144 119703 LD DE,BGWHITE 0147 0E09 LD C,09 0149 CD0500 CALL FCALL ; 014C 1E1B LD E,1B;ESC 014E 0E02 LD C,02 0150 CD0500 CALL FCALL 0153 117A02 LD DE,RED 0156 0E09 LD C,09 0158 CD0500 CALL FCALL ; 015B 1E1B LD E,1B;ESC 015D 0E02 LD C,02 015F CD0500 CALL FCALL 0162 118A02 LD DE,GREEN 0165 0E09 LD C,09 0167 CD0500 CALL FCALL ; 016A 1E1B LD E,1B;ESC 016C 0E02 LD C,02 016E CD0500 CALL FCALL 0171 116E03 LD DE,BGMAGENTA 0174 0E09 LD C,09 0176 CD0500 CALL FCALL ; 0179 1E1B LD E,1B;ESC 017B 0E02 LD C,02 017D CD0500 CALL FCALL 0180 119C02 LD DE,YELLOW 0183 0E09 LD C,09 0185 CD0500 CALL FCALL ; 0188 1E1B LD E,1B;ESC 018A 0E02 LD C,02 018C CD0500 CALL FCALL 018F 113203 LD DE,BGGREEN 0192 0E09 LD C,09 0194 CD0500 CALL FCALL ; 0197 1E1B LD E,1B;ESC 0199 0E02 LD C,02 019B CD0500 CALL FCALL 019E 11AF02 LD DE,BLUE 01A1 0E09 LD C,09 01A3 CD0500 CALL FCALL ; 01A6 1E1B LD E,1B;ESC 01A8 0E02 LD C,02 01AA CD0500 CALL FCALL 01AD 118403 LD DE,BGCYAN 01B0 0E09 LD C,09 01B2 CD0500 CALL FCALL ; 01B5 1E1B LD E,1B;ESC 01B7 0E02 LD C,02 01B9 CD0500 CALL FCALL 01BC 11C002 LD DE,MAGENTA 01BF 0E09 LD C,09 01C1 CD0500 CALL FCALL ; 01C4 1E1B LD E,1B;ESC 01C6 0E02 LD C,02 01C8 CD0500 CALL FCALL 01CB 114603 LD DE,BGYELLOW 01CE 0E09 LD C,09 01D0 CD0500 CALL FCALL ; 01D3 1E1B LD E,1B;ESC 01D5 0E02 LD C,02 01D7 CD0500 CALL FCALL 01DA 11D402 LD DE,CYAN 01DD 0E09 LD C,09 01DF CD0500 CALL FCALL ; 01E2 1E1B LD E,1B;ESC 01E4 0E02 LD C,02 01E6 CD0500 CALL FCALL 01E9 11E502 LD DE,WHITE 01EC 0E09 LD C,09 01EE CD0500 CALL FCALL ; 01F1 1E1B LD E,1B;ESC 01F3 0E02 LD C,02 01F5 CD0500 CALL FCALL 01F8 11F702 LD DE,STNDRD 01FB 0E09 LD C,09 01FD CD0500 CALL FCALL ; 0200 1E1B LD E,1B;ESC 0202 0E02 LD C,02 0204 CD0500 CALL FCALL 0207 112003 LD DE,BGRED 020A 0E09 LD C,09 020C CD0500 CALL FCALL ; 020F 1E1B LD E,1B;ESC 0211 0E02 LD C,02 0213 CD0500 CALL FCALL 0216 11AB03 LD DE,BGSTNDRD 0219 0E09 LD 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 |