Ko-Window 勝手に改造版 変更点 1991,92,93,94,95 小笠原博之 WSRV+1 ・文字出力ルーチンを、IOCS の PUT を使わずにフルアセンブラで書きおろ した。文字表示の速度アップ。特に 24 ドットフォント時に効果大。 ・2 byte 半角に、仮対応。(連続表示する場合のみ表示される) WSRV+2 ・12ドットフォントを IOCS を使わず 16ドットフォントから独自に生成。12 ドット文字の出力を大幅に高速化。 ・2 byte 半角文字に完全対応。 WSRV+3 ・12ドットフォントの出力アルゴリズムを改良し、フォントの崩れを直す。 WSRV+4 ・文字表示ルーチンを見直し、速度アップ。 ・一度に表示する文字列が、横 1024 ドットを越えるとサーバーが暴走する バグを修正。(WED が暴走しなくなった) ・65536色パレットの設定をテーブルから、プログラムへ変更。(改悪?) ・__fmtin/__fmtout/atoi を排除し、高速文字出力ルーチンで肥大した実行 ファイルサイズを減らした。 WSRV+5 ・WSRV.RC で、HighLightColor の設定が無視されるバグを修正。 ・漢字変換ウィンドウを、マウスの右ボタンで移動できるようにした。 ・サーバー終了後、ファンクションキー表示がおかしくなるバグの修正。 ・resource 読み込みで、文字列中の \8進数 を間違えるバグの修正。 ・起動時に TGUSEMD のチェックを行なう。 ・ウィンドウ上でグラフィックを使用後、GRAM が使用中のままになるバグの 修正。( wsrv -f で起動すると TXRAM/GRAM が使用中でも強制的に立ち上 がる) ・パス検索の変更。余計なディスクアクセスを減らしてレスポンス速度のアッ プ。 ・エラー処理の強化。処理の中止でウィンドウに戻って来るようにした。特 にディスクエラー処理の変更。 ・parts.a の行内編集を改良。Emacs モードの付加。 WSRV+6 ・WindowLoadExec 時に、_B_PRINT および CONCTRL(1) に対応。Command.win 上でも、ほとんどのコマンドをそのまま実行できるようになった。 ・GetEvent/CheckEvent の処理をアセンブラで書き直した。 ・インターバルイベント時の無駄な処理をカット。これによってサーバー内 のオーバーヘッドが激減。プロセス数の影響を受けにくくなった。 ・オプションヘルプの表示。 ・sheet.c の細分化。sheet.a(parts.a) をリンクする場合、不用なルーチン を省き、アプリケーション側のサイズ効率がアップ。 ・行内編集で、環境変数によりデフォルトを Emacs モードに設定できるよう になった。 ・[CTRL]+[XF2]+[XF5]+[BS]で Ko-Window を強制終了できるようになった。 ・インターバルイベント送出時、FALSE だった場合はイベントチェックを行 なわないように改良。 WSRV+7 ・リソースの文字列における全角文字対応化 ・256/65536色モードで GraphicPut ができないバグの修正 ・アプリケーションで独自にフォントを変更できる WindowSetFontAddress() WindowGetFontAddress() を追加。 ・複数のスクリーンモードに対応。Window{Set|Get}ScreenMode() を追加。 ・画面設定を全部独自に行なうように変更。CRTMOD() を使用しない。 ・チャイルド実行後等 WindowScreenInit() が発せられる場合、グラフィッ ク画面を使用しているアプリケーションに3回も EventRedraw が発生する バグを修正。(よって描画速度が向上した) ・イベントルーチンの若干の高速化。(全体で数%ほど) ・WindowLoadExec() のマルチプロセス対応化。ウィンドウ上で複数のバック グラウンドプロセスを実行させることができる。(-b スイッチで切り替え) WSRV+8 ・ライブラリ関数の解体。実行ファイルのメモリ効率を改善する。その代わ りファイル名の関係で TwentyOne.x が無いとコンパイル不可能。 ・parts.a ライブラリのデバッグ。(全角文字の BS 処理) ・parts.a ライブラリの InputKey() で2バイト半角完全対応 ・漢字変換ウィンドウ移動処理のエンバグ修正 ・エラールーチンの若干の修正 ・12 ドットフォントの生成を外部ドライバに委ねる。h12fon.r(後のhfont) が絶対に必要になる。 WSRV+9 ・Sheet 処理、描画速度の高速化 ・bgdrv モードの自動判別 (-b スイッチは不用) ・CRTC パラメーターの修正 (一部ディスプレイで特殊画面モード時に表示が 乱れるバグ) ・WindowMemoryAlloc() 時のゼロクリア削除(WindowMemoryAlloc が遅いか らと要望があったため) ・parts.a , winop.a の見直し、アイコン処理ルーチンの修正(アイコンマ ネージャ対応) WSRV+10 ・Window{Move|Resize}Operation() ルーチンをチャイルド対応に(move.c) ・parts.a のデバッグ(FontAddress関連) ・サーバーにGraphicスクロールOFFのスイッチを追加(getevent.s) ・サーバーコールルーチンを改良(_CallServer他)。サーバー呼び出し時の オーバーヘッドを軽減。単純な WindowGet CALL なら呼び出しが2割以上 高速に。 ・サーバー終了時に ScreenQuit() が2度呼び出されているバグの修正。 これによって GPIC 表示時に強制終了キーで脱出するとバスエラーするバ グが直った。(はず) ・Sheet 関連で TEXT V-RAM に直接描画する場合、CRTC の同時アクセス&マ スク機能を使うようにした。カラー0or3での Fill 描画で効果大。中でも ShadowLine が驚くほど速くなってビックリ。(6割以上の描画時間短縮) その代わり、マウス割り込みとの相性が悪くなる ・フォント展開も CRTC 機能を使うようにしたが、かえって遅くなり中止。 ・GraphicLine OptionBox のバグ (LineStyle が未定になっていたため、誤 動作する) ・サイクルレベルの高速化(涙) ・DrawSetDot(),DrawSetCircle() 追加 ・DrawSetGraphicDot(),DrawSetGraphicCircle() 追加 ・Dot,Circleルーチンの高速化(+z0 のルーチンはちょっと遅かったので) ・OpenRC() で、WSRV.RC を fclose() していないバグの修正 ・Slider で Length が 2 になると、0除算エラーが出るバグの修正 ・漢字変換ウィンドウ移動時の横方向の位置を間違うバグ修正 ・漢字変換時、候補ウィンドウを入力ウィンドウと兼用、FEP の ON/OFF と 候補表示時の速度が僅かに向上したはず(ASKv2のみ確認) ・左ボタンでも変換ウィンドウ位置を移動できるように修正 ・GPIC等、16色モード以外を使用するグラフィックアプリを起動したあとで ウィンドウ座標(0,0)でウィンドウ操作の Pop するとバスエラーが出る症 状を修正。 ・ウィンドウ外にはみだしたウィンドウに別のウィンドウを重ね、その上で はみでたウィンドウに Pop をかけるとウィンドウサイズが崩れるバグを ようやく修正できた。WindowPop で _WindowPop へ wp 中の実アドレスを 渡しているのが原因であった。 ・Symbol 表示の文字アトリビュートに、実験的に2ビット追加。 (AttrWhiteRev 32、AttrUnderLine 64) ・GPIC等、16色モード以外を使用するグラフィックアプリを起動したあとで ウィンドウ座標(0,0)でウィンドウ操作するとバスエラーが出る症状原因を ほぼ完璧に解明。Pop 以外でもバスエラーは起こらなくなったはず。 WSRV+11 ・ScreenQuit() 時に、CRTMOD で画面モードを再設定するようにした。 ・アクティブグラフィックモードを実現したい!と思った(だけ->+13で実現) ・X68030パッチを組み込んだ (Taka2さん感謝) (v2.24+10-30) ・10dotフォント展開ルーチンを組み込んだ (v2.24+10.1) ・CRTC を使用しないバージョンをデフォルトにした (v2.24+10.1n) ・WSRV.RC,WSRV.RS のファイル読み込みを、XC lib を使わずオリジナルの FileI/Oルーチンを組み込んだ。起動が(若干?)高速化された。 ・サーバーのエラー表示出力を fputs() から DOS _FPUTS に変更 ・以前の BGDRV 対応化実験で DOS の未使用ファンクションを利用するコー ドが残っていたのを除去した。 ・グラフィック画面をクリアしてから起動するオプションスイッチ -c を追 加した。 ・GCC の DOSCALL 宣言によるインライン展開を行った ・使用するライブラリを XC 2.00 から 2.11 にバージョンアップした ・X68030専用コードを出力する WSRV+11.30 を実験的に作成した(動作は未確 認) ・libc.a を使った開発用のライブラリ libwin.a を作成してみた。まだまだ 問題がいろいろ残っているが、一応使えるようだ。 ・こぺる氏による screen.c の改良コードを内蔵 ・bgdrv 対応部を従来のものに戻し、bgdrv の常駐ではなく PROCESS 行の存 在で判定するようにした。よって bgdrv を使わない BG プログラム常駐時 で起こる処理落ちを減らした。 WSRV+12 ・使用可能な画面サイズを 1024x1024 エリアに拡大した。従来 GV-RAM 下方 にあったワークエリアはメインRAMへ移動した。030 等 I/O の遅い機種で 効果あり。ただし、IOCS のマウスルーチンの制限により、今のままでは 1024x1008 dot が最大となってしまう。新しいマウスドライバを望む。 ・こぺる氏のマウスドライバにより、1024x1024dot フルに使えるようになっ た。 ・ソース改良によって実行ファイルサイズを若干減らした ・hfont.r チェッカを導入した ・10dot全角フォント表示でゴミが出るバグを修正 ・WindowLoadExec() 内で .win を見るようにした。これでアプリ側でいち いちコマンド名アドレスに 0x03000000 を加える必要はなくなった。 ・sheet 関数を、サーバー専用と parts.a 用に完全に分離した。そのため parts.a の sheet 関数で毎回スーパーバイザへ移行するなどの無駄がな くなった。 ・wlib.a をさらに徹底した分割化を推し進めて、効率を改善した ・プログラム開発に doslib が不要になった ・WindowGetAttr() を追加した ・開発用ドキュメント関連を一新した ・不要な TGUSEMD を削除し、新たに -g オプションを追加した ・WSRV.RC 最後の行がコメントの場合無視されないというバグを直した ・画面への Sheet 表示の場合に buf1==buf2 なら CRTC のビットマスク&同時 アクセスを利用し、高速化を行うようにした。 ・FONT 表示部を徹底的に見直し、文字列表示の高速化を行った。 ・SheetSymbol() でゴミ表示が入るバグを取った +12.3 AttrWhiteRev で左右にゴミが残るバグ修正 +12.4 WindowSetHenDsp() 追加。FEP ウィンドウの外部登録が可能になった +12.5 WSRV.RC内で文字'!'が使えないバグ修正。他 +12.6 エラー処理ルーチンの改善。ErrNO, PC, SR の表示追加。エラーの 表示ミスを修正。システムエラー発生時に正常に復帰できないバグ 修正。(trap #14 -> IOCS $ff -> DOS $fff2 -> TopLevel -> IOCS $ff の永久ループになっていた) +12.7 +12.6での修正で、今度はドライブエラーが復帰できなくなってい たのを直した。 +12.8 サーバーでBREAK-KILLにするようにした WSRV+13 ・+12 以降のパッチをまとめた ・-t/-dオプションが使えなくなっていたバグをった(実はアプリ側の問題) ・デバッグオプションを統一した ・EventStackは起動時のスイッチで抑制できるようにした。システム呼び出 しの速度が向上した。イベントループも速くなり、Koの動作速度がさらに あがった。 ・VramDrawでclipリージョンが1024x992のままだったのを直した ・256/65536色モード時に表示できる範囲を、左上角だけではなく自由に変更 できるようにした。WindowGetGraphicOffset()/WindowSetGraphicOffset() を追加した。またこの表示範囲はサーバー側が自動管理するようにした。 関連ライブラリ Gpos*() を corlib.a に追加。(やっとアクティブグラ フィックモードが実現できた) ・256色モードの時 DrawSetGraphicPut() ができないというバグを直した。 (なんで今までこんなバグが…) +13.1 ・GraphicDraw 時に 16色モード以外では描画の Clip 範囲が破壊されている バグを修正。(これも今まで気がつかなかった根バグだ…) ・GraphicLine の Fill 時に Gpos が反映していなかったバグ修正 ・GposSetFill() を corlib に追加した ・SUPER周りを若干改良修正(さほど差がないかも) ・vram.c を見直して多少計算効率をよくした ・GramFill 処理を 030 専用にループで置き換えたまま忘れていたのを直し た。これで GraphicClr, Fillが +13比でかなり速くなります(すみません) ・030専用版も同時に作成できるようにした +13.2 ・256/65536色モードで画像表示したあと、16色モードでの GraphicClear()が 前の IOCS CALL 設定での WINDOW clip の影響を受けることがあったバグ 修正。(文字による表現が難しい) ・ライブラリ側のいくつかのデバッグ(アプリ集7の編集時に見つけたもの, 多くは corlib.a ごめん) +13.3 こぺる さんによる以下の修正パッチを組み込んだ ・ウインドウのボタン(12x12ドット)の判定の位置が1ドットずれている ・横方向のスクロールバーが,画面左端にめり込んでしまうことがある ・スクロールバーが最大の位置だと1ドットずれてしまう(?) ・スクロールウインドウでグラフィック画面を使用できるようにした ・スクロールバーが端に来た時のスクロールバーのちらつきを減少させた ・ウインドウ描画終了後のグラフィック画面のクリアをやめた +13.4 (95/9/7) こぺる さんによる以下の修正(2つ)を加えた ・スクロールバーの描画方法を改善した ・OptionBox での描画時に縦が3ドットだとうまく描けなかったのを修正した (95/9/15) コンパイルのためのディレクトリ構成を大幅に変更し、デフォルトで 030版 サーバーや、libc版ライブラリも生成されるようにした。次の基本セットか ら libc版ライブラリも標準でついてくるように構成やドキュメントを全部 直した。 +13.5 (95/11/5) ・+13.4を公開したのち +14 へ向けての開発を始める。+13.5〜は未公開 ・+11の時に実験でつけた8dotフォント展開ルーチンを有効にした。hfont.r v1.22+ と併用すれば 8x8dot の ELISA フォントが使用できる。 ・manager.c 内部で画面初期化上の無駄な処理を削った ・Ko-Window 用にヒープ自動拡張する malloc/free ルーチンを書き起こした mm_mallocライブラリ(仮名) +13.5.1 (95/11/11) ・WlibMain.c の GlobalInit/GlobalExec を extern にした。mm_malloc ラ イブラリ対策。 +13.5.2 (95/11/12) ・XClib や libc を一切使わないようになった。つまり、使用するライブラ リはスタートアップからファイルI/O、メモリ管理まで全部独自のものと なる。 ・resource.c , readrc.c を修正。wsrv.rc/rs の読み出しルーチンを新た に書き直した(特に wsrv.rs)。バイナリサイズが数Kbyte小さくなって、 かつ起動がかなり速くなったはず。 WSRV+14 (95/11/15) ・+13 以降のパッチをまとめて +14 にした ・8dot ルーチンを正式サポートとした (95/11/20) ・wsrv.c の GetRequest を書き直した ・func.h の FunctionAttr を 16byte サイズになるよう argsとprocessflag を統一した(下位8bitが processflag で、上位 8bit が args) args はプ ログラムでは参照しない、processflag は wsrvasm.s の tst.l を tst.b にした。 ・システム作成時のみチェックが必要なルーチンを外した。wsrv.c 内部の SYSTEM_DEBUG を 1 にすると前と同様になる ・CallFunction に与える引数を変更し、ルーチンを直した。ほんのわずかに サーバー呼び出し時のオーバーヘッド減った。(XVI+Xellent30で epsが2増 える) ・描画時に発生する、ユーザー<->スーパーバイザの切り替えを最小限になる よう抑えた。描画がさらに高速になった。修正->super.h, vram.c (95/11/22) ・WindowMemoryAlloc/Free をただの malloc/free にした ・WindowGetCommon が mm_alloc の realloc を使うようにした ・サーバーが自分で環境領域を確保できるようにした(シェルモード) ・clip処理周りをアセンブラで書き直した clip.c -> clipasm.s ・getevent.s 内部で User/Supervisor 切り替え部分を効率化した Supervisorから呼び出されることはないはず(このへんが不安)のルーチン においては、モードチェックを省いた ・使われていない関数をコメントアウトした (95/11/24) ・malloc/free ライブラリを入れ替えたおかげで ClipSetOperation() のバ グが発覚。それを回避するため WindowGet/SetCommon() を修正した。 ・Common領域を個数制限なしにテーブルは自動拡張するようにした。よって wsrv.rc 内部の CommonSize の項目は意味がなくなった。 ・Common領域を初期化して確保するテーブルがなくなったため、wsrv.rc を プレリードして定数だけ読み込む必要がなくなった。そのため最初から ReadRC() を実行し、その分起動が速くなった。 (95/11/25) ・システム用マネージャーインターフェース WindowSetManagerExec() を追 加。 ・title.c でアイコン描画位置が ViewPosition を無視し、絶対位置に描画 されているのを修正した。 (95/11/27) ・wsrvasm.s 内の IntEntry (trap#0割り込みエントリ)の処理を、000と030 時の飛び先を分離させ、若干効率化した (95/11/30) ・文字属性に Mesh2 を追加してみた(and mesh ではなく or mesh)。あくま で実験であり今後採用するかやめるかわからない。 ・今までいちいちScreenパラメータテーブルを参照していたのが美しくなかっ たので、WindowGetScreenSize() を追加。 (95/12/02) ・BGDRV 使用中、裏でプログラムが起動されて FEP が勝手にクローズして しまうのを防ぐため、Ko-Window 起動中は Human 内部 (DOS EXEC など) で呼び出された KNJCTRL の MD=1 を無視するようにした。(-b0 など、 BGmode == OFF の場合はこの機能は働かない) 約1ヶ月に渡る+14の改良開発はこれを持って一区切りとする。 サーバーの改造環境 コンパイラ gcc version 1.29 Tool#2(X68) Based on 1.42 アセンブラ HAS v3.09 (Y.Nakamura) リンカ HLK v3.01 (SALT) 他コンパイル時 GNU Make v3.62(X6_10) har.x v1.37 (Satoshi) TwentyOne.x v1.35 (Ext T.Kawamoto) (+TSPD) ライブラリ gnulib.a 1.46 (T.Ohtsiki) microfio-lib (COR. H.Ogasawara) microstr-lib (COR. H.Ogasawara) mm_malloc-lib (COR. H.Ogasawara) suplib-lib (COR. H.Ogasawara) ヘッダ XC v2.11 (SHARP/Hudson) libc 31 環境 Human68k v3.02 (SHARP/Hudson) iocs.x v1.50 (SHARP) Ko-Window WSRV.X 2.24+13.4 (T.Kobayashi/COR. H.Ogasawara) エディタ stevie 3.69 J1.3 X68K 1.63 Ko-Window v3 シェル MicroShell dash.x v1.16 (COR. H.Ogasawara) Command.win v1.13+13 (T.Kobayashi/COR. H.Ogasawara) フォント Hartmann.f12 (Hartmann) その他ドライバ bgdrv.x v2.00 (KeI) BGD_PAT (しゃんしぁ) link.x/ln.x v0.40 (COR. H.Ogasawara) Hmouse.x v0.25 (こぺる) hfont.r v1.22 (COR. H.Ogasawara) rkeydrv.r v1.06 (COR. H.Ogasawara) dcache2.r v2.12 (Arimac) tmsio.x v0.31 (星野美季) Target.x v1.20 (COR. H.Ogasawara) hounds-SCSI v0.4 (Ext T.Kawamoto/COR. H.Ogasawara) 使用機種 CZ-652C(PRO)/634C(XVI)+4MRAM+Xellent30 半年間も X68030+MO を貸してくれた Mid-RIN さんに感謝! 連絡先 小笠原博之 oga@dgw.yz.yamagata-u.ac.jp SPS-NET: SPS0783 COR. (福島市 0245-46-1167) DenDenNET: DEN0006 COR. (米沢市 0238-26-3444, IP:133.24.72.9 login:den) :vi:se ts=8 sw=8: