画面のBitmapをいちど(アンセーフな)配列に持ってきて
直接弄る方法を比較してみた。
元ネタはここ
結果は
普通にSetPixelを使うと127mSだったがUnsafeArrayの使用で42mSと3倍に高速化
やはり実行が速い言語はいろいろと試行するのが速いので弄りやすい。
2019年4月14日日曜日
2019年4月12日金曜日
Lazarusへのリベンジ
昨日、Lazarusを使ってfree pascalでmandelbrotの描画の記述を試みたが失敗したことを書いた。
でも悔しかったので昨夜からちょっと調べてみたら流石にDelphiの代用を標榜するだけあってネット上の情報がほとんどそのまま当てはまって、実に納得のいく形でソースを記述できて動いた。結果は下図
左上がC#で最速、135mS
続いて右上が今回記述したLazarusで1422mS
右下が99BASICで13秒(=13000mS)
左下が98(というかEPSON互換機)のエミュレータAnex86の上で
N88BASICを動かしてそのうえで描いたMandelbrotで98画面の都合で
(2割領域の少ない)640x400ドットでの描画だけど8分28秒=508秒
すなわち508,000mS
速度比はC#を1とすると
C#:Lazarus:99basic:anex86(PC98N88Basic)=1:10.5:96.3:3762.9
≒1:10:100:3800
で、ちょっと比較するのが怖いぐらいの速度差である。
でもLazarusを思い通りに動かして記述できたことは実にうれしい。
このストンと落ちる納得感が明日への活力になる。
でも悔しかったので昨夜からちょっと調べてみたら流石にDelphiの代用を標榜するだけあってネット上の情報がほとんどそのまま当てはまって、実に納得のいく形でソースを記述できて動いた。結果は下図
左上がC#で最速、135mS
続いて右上が今回記述したLazarusで1422mS
右下が99BASICで13秒(=13000mS)
左下が98(というかEPSON互換機)のエミュレータAnex86の上で
N88BASICを動かしてそのうえで描いたMandelbrotで98画面の都合で
(2割領域の少ない)640x400ドットでの描画だけど8分28秒=508秒
すなわち508,000mS
速度比はC#を1とすると
C#:Lazarus:99basic:anex86(PC98N88Basic)=1:10.5:96.3:3762.9
≒1:10:100:3800
で、ちょっと比較するのが怖いぐらいの速度差である。
でもLazarusを思い通りに動かして記述できたことは実にうれしい。
このストンと落ちる納得感が明日への活力になる。
2019年4月10日水曜日
情報量の大切さ
大好きなプログラム言語のひとつがPascalである
でもWindowsよりも前に触っていた記憶(まあ、主にMS-DOSの時代だ)による
で、cp/mを弄ってみたいっていうのも、あの頃を思えばオーパーツとしか思えない
TurboPascalで当時を想ってみたいってことが多い
最近、free pascalのIDEであるところのLazarusの2.0が正式にリリースされたのを知って
遅まきながらWindowsでやってみようとインストールしてみた。
実に使いやすそうな感じだったのだが…
残念なことに躓くこと夥しい。
で、そんなときはgoogle先生のお世話になる。しかしネット上に情報が無いのだ。
その昔、TurboPascalをBorlandから世に出したヘルスバーグが、その後Microsoftに移って上梓したC#はどうだろう。同じ作者のものなのに情報が溢れるほどある。
google先生にお伺いを立てれば大抵の疑問はすぐに回答が得られる。
早速やってみると・・・・
BASICで書いたMandelbrotをC#で動かしてみると100倍も高速で動く。
やっぱ情報量が多いってめっちゃ大事。
※もちろん言語の力やライブラリーの使いやすさと充実しているかどうかも大事で、
C#の場合はそのあたりがめちゃくちゃ充実していることも大きい
ベンチマーク系の処理で処理時間を求めて表示したいことは多いけどC#のばあいだと
C#はいたるところでこんな仕組みがあるので楽々ソフト作りができる。
でもWindowsよりも前に触っていた記憶(まあ、主にMS-DOSの時代だ)による
で、cp/mを弄ってみたいっていうのも、あの頃を思えばオーパーツとしか思えない
TurboPascalで当時を想ってみたいってことが多い
最近、free pascalのIDEであるところのLazarusの2.0が正式にリリースされたのを知って
遅まきながらWindowsでやってみようとインストールしてみた。
実に使いやすそうな感じだったのだが…
残念なことに躓くこと夥しい。
で、そんなときはgoogle先生のお世話になる。しかしネット上に情報が無いのだ。
その昔、TurboPascalをBorlandから世に出したヘルスバーグが、その後Microsoftに移って上梓したC#はどうだろう。同じ作者のものなのに情報が溢れるほどある。
google先生にお伺いを立てれば大抵の疑問はすぐに回答が得られる。
早速やってみると・・・・
BASICで書いたMandelbrotをC#で動かしてみると100倍も高速で動く。
やっぱ情報量が多いってめっちゃ大事。
※もちろん言語の力やライブラリーの使いやすさと充実しているかどうかも大事で、
C#の場合はそのあたりがめちゃくちゃ充実していることも大きい
ベンチマーク系の処理で処理時間を求めて表示したいことは多いけどC#のばあいだと
みたいにStopwatchってライブラリー(オブジェクト)があって、スタートメソッド呼んで、測りたい処理実行してストップメソッド呼んでそのあと徐にストップウォッチの結果を然るべき形式で見せてくれるメソッドで取り出してやるだけでOK! わかりやすいStopwatch sw = new Stopwatch();sw.Start();// 処理を行うsw.Stop();Debug.WriteLine("Elapsed time (ms) = " + sw.ElepasedMilliseconds);
C#はいたるところでこんな仕組みがあるので楽々ソフト作りができる。
2019年4月8日月曜日
久しぶりのOS達
気が向いたら変なことに没頭するのが悪い癖
その一つが古いOSで遊ぶこと
cp/mについて調べていたら何となくPC98のソフトはどうだったっけと思い立ち
anex86をNASから引っ張ってきて動かしてみた。
画面をドットバイドットにするのが上手くいかない。
背景のanexは縦横を2倍した感じでサイズを模索してた時のものでその前でwin98seが
動いているのが見えるけどhyper-vを生かしておくと速いけど動作が不安定。
仕方なく外しているとかなり遅いけど安定して動く。
virtualboxの追加ドライバーはこんな古い16bitのOSでは使えないので640x480の基本的なVGAの画面サイズから他の大きなものにするのにかなり苦労をした。
仮想ハードウェアの構成やディスプレードライバーなどこちらのサイトを参考にさせていただいた、ありがたし。
こんどはarmの説明を見てarduinoのasm命令を試してみよう。
多分、今の自分が一番cp/mやDOSでやってみたいのがturbo pascalを使ったasm交じりのプログラミングだと思うから・・
その一つが古いOSで遊ぶこと
cp/mについて調べていたら何となくPC98のソフトはどうだったっけと思い立ち
anex86をNASから引っ張ってきて動かしてみた。
画面をドットバイドットにするのが上手くいかない。
いつものmandelbrotの描画テストをやってみた。
実行環境はN88BASIC(DOS)で発散までの繰り返し上限は100で640x400のエリアに
対して計算させている。
対して計算させている。
実行時間は8分28秒だから508秒か 遅いのだろうね。
もう一つ気が向いてvirtualboxの中でwindows98seも動かしてみた。
動いているのが見えるけどhyper-vを生かしておくと速いけど動作が不安定。
仕方なく外しているとかなり遅いけど安定して動く。
virtualboxの追加ドライバーはこんな古い16bitのOSでは使えないので640x480の基本的なVGAの画面サイズから他の大きなものにするのにかなり苦労をした。
仮想ハードウェアの構成やディスプレードライバーなどこちらのサイトを参考にさせていただいた、ありがたし。
こんどはarmの説明を見てarduinoのasm命令を試してみよう。
多分、今の自分が一番cp/mやDOSでやってみたいのがturbo pascalを使ったasm交じりのプログラミングだと思うから・・
2019年4月6日土曜日
古いPC環境とソフトウェアエミュレートの価値
最近、PC向けとしては最古のOSであるcp/mで遊んでいる
きれいなグラフィックスや表計算ソフトなどが動くわけではなくて、
文字だけの所謂DOS窓でソフトウェアを作ったり文字だけで表現されたゲームをしたりできるだけなのだがPC黎明期のあこがれのOSに触れられるだけで垂涎の体なのである
当初は8bitCPUの8080用に開発された(上位互換のz80でも動く)が後には16bitCPUの8086や68000用にも用意開発された ただし16bit用ではMS-DOSの後塵を拝した
現在cp/mそのものやそのうえで稼働した様々なソフトウェアが事実上フリーなものとしてネットで配布されている - The Unofficial CP/M Web site
そのほとんどが英語オンリーだけど8bit機であるし実験的な利用を考えると十分と言える
その実行環境は大きく分けて3つに分類できると思う。
きれいなグラフィックスや表計算ソフトなどが動くわけではなくて、
文字だけの所謂DOS窓でソフトウェアを作ったり文字だけで表現されたゲームをしたりできるだけなのだがPC黎明期のあこがれのOSに触れられるだけで垂涎の体なのである
当初は8bitCPUの8080用に開発された(上位互換のz80でも動く)が後には16bitCPUの8086や68000用にも用意開発された ただし16bit用ではMS-DOSの後塵を拝した
現在cp/mそのものやそのうえで稼働した様々なソフトウェアが事実上フリーなものとしてネットで配布されている - The Unofficial CP/M Web site
そのほとんどが英語オンリーだけど8bit機であるし実験的な利用を考えると十分と言える
その実行環境は大きく分けて3つに分類できると思う。
- 実機:昔ならPC-8801系にメモリーボードなどを加えて別売のcp/mを購入するような形で実現したものであろうけど、比較的最近だと有志によって作成された基盤にいくらかのLSIチップをのせてシングルボードコンピュータとしてPCとUSBケーブルでシリアルインターフェースにつないで利用することになる
例1:Z80-MBC2 z80とそのほかの3つのICで構成(128KBのRAMでCP/M3も稼働)
IOやバスの調停をAVRのATMega32Aにさせている
CPUの駆動クロックは4MHzと8MHzの切り替え
オレンジピコさん(レア部品多数)での取り扱い
例2:SBCZ80 古典電脳物語や8080伝説の鈴木哲哉氏の制作
CPUの駆動クロックは2.5MHzと5MHzの切り替え(ハンダジャンパ)
この方の他のSBCはスイッチサイエンスで扱いがあるけど、これはまだ
(部品点数が多いうえにZ80-SIOなどディスコンが心配)
例3:Pic24CPMボード z80最速の20MHz用を使って16MHzで動く。
例1のAVRと違いシステムのコントロールチップにPIC24を使用
プリント基板のガーバーデータなども公開されているし最も
作ってみたくなる存在 RAMがディスコンか?
(今ならHM628128ALP-7もオレンジピコにある) - PC上のエミュレータ
そもそもCPUクロックで千倍とかの差があるのでソフトウェアで8bit機の動作をさせることに何の支障もない
(もしあるとすれば5kgの手荷物を大型トラックで運んでる違和感か)
でも実機との比較ができると良いことも多いので手元で環境は仕込んでおきたい
例1:Windows32bit用にいくつか出ている
1)takeda氏のcp/m player
2)vecterのcp/m executor
3)altair 8800のエミュ 日本語紹介ページ オリジナル配布サイト
altair使いやすくてめっちゃいいのだけど^eがエミュレータからのエスケープで
エディタが使いにくいです
例2:linux用だとyaze 日本語紹介ページ
実は環境はそれぞれのエミュレータで錯綜していてmacとかでも動くものも多い
日本製の2本はwindowsの32bitコンソール専用だけにファイルの準備が楽
altairとyazeはcp/mの環境から忠実に再現しようとしているので母艦との
ファイル交換がひと工夫必要
で、z80などをエミュレートするけどwindowsPCでやっちゃうと牛刀割鶏な感が
否めないってエンジニア心が言うもんだから別のハードウェアでエミュレートするって選択肢も浮上する それが・・・・
- 他のCPU(ARMとATmegaがほとんどだけど)エミュレート
例1:CP/M on an AVR 面白そうだけど4bit D-RAM入手がね・・
例2:cpm8266 日本語で① その② ESP8266(WROOM-02)で入手性良し
内臓のフラッシュROMをファイルシステムとして使うため4MB必須
外部とのファイル転送方法を確立する必要あり
例3:RunCPM 日本語紹介ページ(詳しくて夢膨らむ) M5Stackでも
対応するボードは多岐にわたっており入手性に不安なし
安定性などで cpm8266のほうが良いって記述もある
でもm5stackでいろいろ遊ぶうちの一つの選択肢としては悪くない
例4:cp-mega88 作者はとよしまさん(日本人!!) 解説 ご本人解説
各種の環境で動くけど速くはない 忠実に8bitCPUを再現か?
本来(?)のハードのガーバナー情報など
例5:mbedでcp/mエミュ Nucleoは触ってみたいボード 生Z80とのコラボも!
こちらのコメント欄のやり取りではNucleo F401あんまり速くないみたい
とりあえずはPCのエミュで慣れつつcpm8266、runCPM、mbedなどで遊ぼう
登録:
コメント (Atom)
dosvaxj3が更新されていた。
最近、エミュレータ系をあまり触っていなかったのだけど久しぶりに見てみたらタイトルのようにdosvaxj3が更新されていた。 on emulatorでセルフにcなどのソースを書いて実行するのに母艦側の特定のフォルダをドライブとしてマウント出来たり普通に母艦のimeで漢字が入力でき...

-
sixelでターミナルに画像を出すというのをやってみた。 Github-libsixel を利用した。 これがもとの画像 そしてgnome端末がsixelに全く対応しないのでxtemを入れて 上記のlibsixelおすすめのoptionで起動...
-
本日 (18/08/22) ubuntuを再インストールした 理由はスリープやシャットダウンが効かなくなってしまったから 詳しい原因は不明だが理屈もわからずにapt -getやらしすぎたのかも で再インストールは恐ろしく簡単だった。 再インストールが30分ほどでデータ...
-
調べてみたらubuntu付属のRemminaでWindowsPC(Proのみ?)にリモート接続できることがわかった。 Express5800に接続してみたが快適 ubuntuのWinXPではUSBメモリーの接続がうまく行かないがこれで開発を継続できる 明日はこの辺りを解決...