[HOME]  [全部表示 会議室風]  [全部表示 保存用]  [HOME]  [リストへもどる] [リストへもどる]

一括表示


  ポポペ対応VZk08Q3ベータ - Konno 06/08/24-00:08 No.1299
 ┣ 大ポカしてました - Konno 06/08/25-01:59 No.1300
 ┗ ポポペ対応VZk08Q3ベータ2 - Konno 06/08/27-21:07 No.1315
  ┗ Re: ポポペ対応VZk08Q3ベータ2 - USEI 06/08/29-00:04 No.1324
   ┗ インジケータールーチンの添削 - Konno 06/08/30-01:54 No.1334
    ┣ Re: インジケータールーチンの添削 - USEI 06/08/30-10:44 No.1335
    ┃ ┗ Re^2: インジケータールーチンの添削 - Konno 06/08/31-01:41 No.1337
    ┃ ┗ Re^3: インジケータールーチンの添削 - USEI 06/08/31-08:26 No.1339
    ┃  ┗ Re^4: インジケータールーチンの添削 - Konno 06/08/31-22:33 No.1347
    ┃   ┗ 39文字目の表示 - USEI 06/09/01-08:29 No.1353
    ┃    ┗ Re: 39文字目の表示 - Konno 06/09/02-01:09 No.1360
    ┃     ┗ Re^2: 39文字目の表示 - Konno 06/09/03-23:08 No.1372
    ┃      ┗ Re^3: 39文字目の表示 - USEI 06/09/04-10:02 No.1375
    ┃       ┗ 完璧なインジケーター - Konno 06/09/06-00:54 No.1379
    ┃        ┗ Re: 完璧なインジケーター - USEI 06/09/06-18:47 No.1385
    ┃         ┗ ほぼ完璧なインジケーター(^^; - Konno 06/09/07-00:12 No.1391
    ┗ Re: インジケータールーチンの添削 - としき 06/08/31-11:19 No.1340
     ┗ Re^2: インジケータールーチンのコメント - Konno 06/08/31-22:55 No.1348
      ┗ Re^3: インジケータールーチンのコメント - としき 06/09/01-00:06 No.1352
       ┗ Re^4: インジケータールーチンのコメント - Konno 06/09/02-01:05 No.1359

(1299) 1299ポポペ対応VZk08Q3ベータ  投稿者:Konno   2006/08/24(木) 00:08
   コメント数 2

VZの部屋にDANNY版ベースの 私家版 VZ k08Q3 ベータ版 をアップしました。

DOSV版 とPC98版を同梱しました。
高橋版 VZ(IBMJ).COM(T03k2 99/12/21)の自己解凍差分です。

VZK8Q3J.COM --> VZIBMJ.COM
VZK8Q398.COM --> VZ.COM

vzk08Q2 からの変更点はポポペ対応がメインです。
・和生さんの赤点デフ(VP.DEF)方式のインジケーターバーを装備しました。
 ポポペの40桁に収まる範囲で動く。あまり正確ではないが目安という事で。
・行:桁カウンターをポポペの40桁に配置。ds+ dh+ で使用が前提です。

あまり動作確認してないので試用版としてます。気が付いたことがあれば
どんどんご指摘ください。

VZの部屋 DANNY版Vzからどうぞ。
http://tamaneko.world.coocan.jp/vz.htm#000012
      - No.1299 -    このTreeへ           [リストへもどる] soft

(1299) 1300大ポカしてました  投稿者:Konno   2006/08/25(金) 01:59
    1299 番 Konno さんへのコメント

> ・和生さんの赤点デフ(VP.DEF)方式のインジケーターバーを装備しました。
> あまり動作確認してないので試用版としてます。

なんかイジケタバーだなぁ、と思ったらファイルサイズメーターになってた。(^^;;
試された方、すみませんでした。直します。m(__)m
      - No.1300 -    このTreeへ    コメント元:1299 へ [リストへもどる] soft

(1299) 1315ポポペ対応VZk08Q3ベータ2  投稿者:Konno   2006/08/27(日) 21:07
    1299 番 Konno さんへのコメント    コメント数 1

VZの部屋にDANNY版ベースの 私家版 VZ k08Q3 ベータ版2 をアップし直しました。
DOSV版 とPC98版を同梱しました。
高橋版 VZ(IBMJ).COM(T03k2 99/12/21)の自己解凍差分です。

VZK08Q3J.COM --> VZIBMJ.COM
VZK08Q3.COM --> VZ.COM

vzk08Q2 からの変更点はポポペ対応がメインです。
●和生さんの赤点デフ(VP.DEF)方式のインジケーターバーを装備しました。
  ポポペの40桁に収まる範囲で動く。あまり正確ではないが目安という事で。
●行:桁カウンターをポポペの40桁に配置。op$100 で切り替わります。
●オプション変数 op を新設。op$5f など0以上でインジケーターバーを表示、
  数字はアトリビュート。1〜255
  op$100 ならステータスラインを40桁以降表示しない。カーソルが速くなるかも。
  op$15f などで2つの機能を同時に使えます。

あまり動作確認してないので試用版としてます。

VZの部屋 DANNY版Vzからどうぞ。
http://tamaneko.world.coocan.jp/vz.htm#000012
      - No.1315 -    このTreeへ    コメント元:1299 へ [リストへもどる] soft

(1299) 1324Re: ポポペ対応VZk08Q3ベータ2  投稿者:USEI   2006/08/29(火) 00:04
    1315 番 Konno さんへのコメント    コメント数 1

> vzk08Q2 からの変更点はポポペ対応がメインです。
> ●和生さんの赤点デフ(VP.DEF)方式のインジケーターバーを装備しました。
>   ポポペの40桁に収まる範囲で動く。あまり正確ではないが目安という事で。
> ●行:桁カウンターをポポペの40桁に配置。op$100 で切り替わります。
> ●オプション変数 op を新設。op$5f など0以上でインジケーターバーを表示、
>   数字はアトリビュート。1〜255
>   op$100 ならステータスラインを40桁以降表示しない。カーソルが速くなるかも。
>   op$15f などで2つの機能を同時に使えます。

 ポポペ対応、ありがとうございました!
 現在、op$15f の設定でやっていますが、なかなかいいですね〜。(^^)
 ポポペでも表示ファイルのどこまでを表示しているのかステータスライン上で判るので便利です。

 しかし konno さんはプログラム作るの速いですね〜。
 NP2並行で、これだけのことが出来るのだから、すごいですね!
  
      - No.1324 -    このTreeへ    コメント元:1315 へ [リストへもどる] soft

(1299) 1334インジケータールーチンの添削  投稿者:Konno   2006/08/30(水) 01:54
    1324 番 USEI さんへのコメント    コメント数 2

>  ポポペでも表示ファイルのどこまでを表示しているのかステータスライン上で
> 判るので便利です。

バーの可動範囲が30数桁しかないのはオリジナルのインジケーターバーの計算
ルーチンをコピーしてそのまま使っているからですが、ほんとは40桁にしたいんです。
これを40桁に伸ばすにはどうすればいいんでしょうね。

indibar2:
cmp byte ptr cs:opt_ppp,0 ;op;表示
je ppp_9
call getcurptr
tst dh
_ifn z
mov ax,-1
mov dl,al
_endif
mov dh,dl
mov dl,ah
mov ah,al
clr al
_repeat
_break cxz
shr cx,1
rcr bx,1
shr dx,1
rcr ax,1
_until
tst bx
_ifn z
div bx
mov dx,ax
_endif
shrm dx,3,cl ; 2なら可動範囲倍になる?
mov cx,ax
and cl,7
test hardware,IDN_PC98
_ifn z
shrm cl,2
_endif
mov al,byte ptr cs:opt_ppp ; point
ppp_8: call setatr ; attr set
mov cl,1
call fillatr ; attr 書き込み
ppp_9: ret


これがインジケータールーチン全文です。40桁にするにはどうすれば良いかどなたかご
教授!!おねがいします。m(__)m

このルーチンを使えばオリジナルVZでもポケ3VZでもインジケータ出来ると思うんですが
欲しい人いないですかね。(^^;

>  しかし konno さんはプログラム作るの速いですね〜。
>  NP2並行で、これだけのことが出来るのだから、すごいですね!

いやぁ、私はシングルタスクな人なので、並行してはできないですよ。だから今は
NP2をサボって(ぉぃ)VZを弄っているわけで。で、40桁以降の表示カットでどれだけ
カーソルが速くなるかと久しぶりにポポペを触ったら・・・お、遅〜い。(笑)
これでは違いがわかりまへんな〜。(^^;
  
      - No.1334 -    このTreeへ    コメント元:1324 へ [リストへもどる] pre

(1299) 1335Re: インジケータールーチンの添削  投稿者:USEI   2006/08/30(水) 10:44
    1334 番 Konno さんへのコメント    コメント数 1

> バーの可動範囲が30数桁しかないのはオリジナルのインジケーターバーの計算
> ルーチンをコピーしてそのまま使っているからですが、ほんとは40桁にしたいんです。
> これを40桁に伸ばすにはどうすればいいんでしょうね。

 う〜ん、プログラムはよくわからないのですが、このテのルーチンを考える場合、まず全体の文字(あるいは行)数を取得して、それを2で何回か割っていってインジケーターの位置を決めると思います。2で割るのはビットのシフトで出来ますから、この考え方でいくと、位置は2の乗数倍になるとおもいますので、おそらくインジケータの最終位置は32文字目になると思います。これより数を増やすと次は64文字目になると思いますので、インジケータはこのままにして、33文字目に最終位置を示す文字列をいれるといいのではないかと思います……。
 間違っているかも知れないので、正解を知っている方はツッコミをよろしく。(^^;;

> いやぁ、私はシングルタスクな人なので、並行してはできないですよ。だから今は
> NP2をサボって(ぉぃ)VZを弄っているわけで。で、40桁以降の表示カットでどれだけ
> カーソルが速くなるかと久しぶりにポポペを触ったら・・・お、遅〜い。(笑)
> これでは違いがわかりまへんな〜。(^^;

 いえ、僅かですけど確かに速くなったのが実感できますよ〜。(^^)
      - No.1335 -    このTreeへ    コメント元:1334 へ [リストへもどる] soft

(1299) 1337Re^2: インジケータールーチンの添削  投稿者:Konno   2006/08/31(木) 01:41
    1335 番 USEI さんへのコメント    コメント数 1

>  う〜ん、プログラムはよくわからないのですが、このテのルーチンを考える場合、まず全体の文字(あるいは行)数を取得して、それを2で何回か割っていってインジケーターの位置を決めると思います。2で割るのはビットのシフトで出来ますから、この考え方でいくと、位置は2の乗数倍になるとおもいますので、おそらくインジケータの最終位置は32文字目になると思います。

なるほど、可動範囲は1〜33桁目だったのでその考え方が正解のように思えてきました。
やはり地道に1命令づつ調べていくしかなさそうですね。

> これより数を増やすと次は64文字目になると思いますので、インジケータはこのままにして、33文字目に最終位置を示す文字列をいれるといいのではないかと思います……。

33文字目がカウンタと重なってるんですよね。だから、始まりを8文字目にするとか
だとどうでしょうね。どこかで1.2倍すればほぼ目いっぱいになりそうな気がする
んですが、わからないですねぇ。

>  いえ、僅かですけど確かに速くなったのが実感できますよ〜。(^^)

そう言って頂くと実装した甲斐が有ります。(^_^) カットしない場合は
インジケータのぶんだけよけいおそくなってしまいますしね。
      - No.1337 -    このTreeへ    コメント元:1335 へ [リストへもどる] soft

(1299) 1339Re^3: インジケータールーチンの添削  投稿者:USEI   2006/08/31(木) 08:26
    1337 番 Konno さんへのコメント    コメント数 1

> やはり地道に1命令づつ調べていくしかなさそうですね。

 すみません。ここを直せばOKですよ、と添削したいのですが、今では機械語の命令で判らないものがあって添削できないのです……(^^;

> 33文字目がカウンタと重なってるんですよね。だから、始まりを8文字目にするとか
> だとどうでしょうね。どこかで1.2倍すればほぼ目いっぱいになりそうな気がする
> んですが、わからないですねぇ。

 X座標を 1/4 (右へ2回ビットシフト)して、それを元の座標にたせば 1.25倍になりますよ。32文字目は40文字目になってちょうど良いですね!

> そう言って頂くと実装した甲斐が有ります。(^_^) カットしない場合は
> インジケータのぶんだけよけいおそくなってしまいますしね。

 いいえ〜、40文字ポポペでは視覚的に表示位置がわからないので、インジケータがあるとすごく便利です。(^-^)
      - No.1339 -    このTreeへ    コメント元:1337 へ [リストへもどる] soft

(1299) 1347Re^4: インジケータールーチンの添削  投稿者:Konno   2006/08/31(木) 22:33
    1339 番 USEI さんへのコメント    コメント数 1

>  すみません。ここを直せばOKですよ、と添削したいのですが、今では機械語の命令で判らないものがあって添削できないのです……(^^;

>  X座標を 1/4 (右へ2回ビットシフト)して、それを元の座標にたせば 1.25倍になりますよ。32文字目は40文字目になってちょうど良いですね!

なるほど、これなら出来そうです。・・・おお、出来たぁ。\(^^)/
と思ったら、41桁目までいくのでポポペでは見えなくなってしまいます。
でもやり方が分かったのでもうちょいです。ありがとうございます。

>  いいえ〜、40文字ポポペでは視覚的に表示位置がわからないので、インジケータがあるとすごく便利です。(^-^)

これは和生さんのマクロからの移植に挫折してたんですが、ポポペのおかげで
ひらめいて実現できたんです。うれしい〜\(^^)/
      - No.1347 -    このTreeへ    コメント元:1339 へ [リストへもどる] soft

(1299) 135339文字目の表示  投稿者:USEI   2006/09/01(金) 08:29
    1347 番 Konno さんへのコメント    コメント数 1

> なるほど、これなら出来そうです。・・・おお、出来たぁ。\(^^)/

 おおっ!出来たんですか〜、よかったですね〜。(^-^)
 微力ながら、お役に立てたようで嬉しいです。

> と思ったら、41桁目までいくのでポポペでは見えなくなってしまいます。
> でもやり方が分かったのでもうちょいです。ありがとうございます。
 
 えーと、1.25倍だと41(1+40=41)文字目が最後の表示になるんですね。
 という事は39文字分の表示にすればいいわけですから、39 割る 32 で 1.21875倍になればいいから、1 + (1/8) + (1/16) + (1/32) = 1.21875 ですので、元のX座標に
1/8(3ビット右シフト)と1/16(4ビット右シフト)と1/32(5ビット右シフト)をたせば、目的の場所に最後のインジケータが表示されますね。(演算回数は増えますけど…)

 ポポペとUBASICがあれば、この手の計算はカンタンですね〜。(^^)
      - No.1353 -    このTreeへ    コメント元:1347 へ [リストへもどる] soft

(1299) 1360Re: 39文字目の表示  投稿者:Konno   2006/09/02(土) 01:09
    1353 番 USEI さんへのコメント    コメント数 1

>  という事は39文字分の表示にすればいいわけですから、39 割る 32 で 1.21875倍
> になればいいから、1 + (1/8) + (1/16) + (1/32) = 1.21875 ですので、元のX座標に
> 1/8(3ビット右シフト)と1/16(4ビット右シフト)と1/32(5ビット右シフト)をたせば、
> 目的の場所に最後のインジケータが表示されますね。(演算回数は増えますけど…)

ひえ〜っ ビット演算でこんなことまで出来るとは。増えると言ってもたった2回
なので、さっそくやってみました。・・・おお、出来たぁ。\(^^)/
あ、あれ? 37桁目までしか行かないぞ〜? なんでだぁ?
と思ったらポカミスしてました。(^^;;;

mov al,dl ;X座標をalに
shr al,3 ;al を1/8に (右へ3回ビットシフト)
add dl,al ;元の座標にたす
shr al,4 ;al を1/16に (右へ4回ビットシフト)
add dl,al ;元の座標にたす
shr al,5 ;al を1/32に (右へ5回ビットシフト)
add dl,al ;元の座標にたす

こうやったんですが、よく見ると、1+(1/8)+(1/8/16)+(1/8/16/32) になっちゃって
ますね。(^^;; 正解は

mov al,dl ;X座標をalに
shr al,3 ;al を1/8に (右へ3回ビットシフト)
add dl,al ;元の座標にたせば1.125倍に 36桁
shr al,1 ;al を1/16に (右へ1回ビットシフト)
add dl,al ;元の座標にたせば1.1875倍に 38桁
shr al,1 ;al を1/32に (右へ1回ビットシフト)
add dl,al ;元の座標にたせば1.21875倍に 39桁

こうでした。これでばっちり1〜40桁目まで動くようになりました。\(^^)/
私は計算が苦手なため、今までビット演算も避けてましたが、こんなに応用が
出来るなら使わないと損ですね。

>  ポポペとUBASICがあれば、この手の計算はカンタンですね〜。(^^)

優れた計算機も使いこなせなくては宝の持ち腐れですね。UBASICの文法とか
を覚えれば計算できるようになるのかなぁ。
 
      - No.1360 -    このTreeへ    コメント元:1353 へ [リストへもどる] pre

(1299) 1372Re^2: 39文字目の表示  投稿者:Konno   2006/09/03(日) 23:08
    1360 番 Konno さんへのコメント    コメント数 1

自己レスです。

> こうでした。これでばっちり1〜40桁目まで動くようになりました。\(^^)/

動くには動きましたが、40文字のファイルで動かしてみるとカーソルとのズレが
大きく、ギクシャクします。40文字で3文字くらいのズレはかなり大きいですね。
半端な数値を整数計算するのは誤差が大きくなるという事でしょうか。
ということで、計算はシンプルな方が良さそうなので、はじめの1+1/4を工夫
してみました。

1+1/4では41桁になって一桁多くなるので、40桁以上なら-1することにしてみた
ところ、誤差が一文字分までになり、うまい具合に動くようになりました。(^_^)
ということで最終的には標準で80桁とし、ソースはこうなりました。(しつこい)

indibar2:
cmp byte ptr cs:opt_ppp,0 ;op;表示
je ppp_9
call getcurptr ; DX:AX :current ptr CX:BX :text size
tst dh ;dhは0か?
_ifn z ;0でなければ
mov ax,-1 ;ax=$ffff
mov dl,al ;dl=$ff
_endif
mov dh,dl ;dh=dl
mov dl,ah ;dl=ah
mov ah,al ;ah=al
clr al ;al=0
_repeat ;繰り返し
_break cxz ;cx == 0 なら終わり
shr cx,1 ;cx >> 1 右にシフト
rcr bx,1 ;bx << 1 右にローテイト
shr dx,1 ;dx >> 1 右にシフト
rcr ax,1 ;ax << 1 右にローテイト
_until
tst bx ;bxは0か?
_ifn z ;0でなければ
div bx ;ax=(dx,ax)/bx dx=(dx,ax)%bx
mov dx,ax ;dx=ax
_endif
; shrm dx,2,cl ;2なら可動範囲倍になる dx=1〜65
shr dx,2 ;2なら可動範囲倍になる dx=1〜65
mov al,dl ;X座標dlをalに
shr al,2 ;al を1/4に (右へ2回ビットシフト)
add dl,al ;元の座標にたせば1.25倍に max81桁
cmp dl,80 ;dlは80か?
jb ppp_7 ;80以内ならjmp
dec dl ;dl=dl-1
ppp_7: cmp word ptr cs:opt_ppp,0100h ;op;表示
jb ppp_8
shr dl,1 ;al を1/16に (右へ4回ビットシフト)
ppp_8: mov al,byte ptr cs:opt_ppp ;pointer表示
call setatr ;attr set
mov cl,1 ;attr 書き込み1文字
call fillatr ;DL,DH :location x,y CL :block width
ppp_9: ret

      - No.1372 -    このTreeへ    コメント元:1360 へ [リストへもどる] pre

(1299) 1375Re^3: 39文字目の表示  投稿者:USEI   2006/09/04(月) 10:02
    1372 番 Konno さんへのコメント    コメント数 1

> 動くには動きましたが、40文字のファイルで動かしてみるとカーソルとのズレが
> 大きく、ギクシャクします。40文字で3文字くらいのズレはかなり大きいですね。
> 半端な数値を整数計算するのは誤差が大きくなるという事でしょうか。

 あ〜、そうなんですか。
 元々のテキストサイズを39文字になるように割り算した場合には誤差が最小になると思うのですが、まず32文字になるように割り算をした値を 39/32倍しているので誤差が大きくなるのでしょうね……。(^^;

> ということで、計算はシンプルな方が良さそうなので、はじめの1+1/4を工夫
> してみました。
>
> 1+1/4では41桁になって一桁多くなるので、40桁以上なら-1することにしてみた
> ところ、誤差が一文字分までになり、うまい具合に動くようになりました。(^_^)

 そうですね、根本的になおすとなると割り算ルーチンを組み込まないといけないので、現状ではkonnoさんの判断がベストだと思いますよ〜。
      - No.1375 -    このTreeへ    コメント元:1372 へ [リストへもどる] soft

(1299) 1379完璧なインジケーター  投稿者:Konno   2006/09/06(水) 00:54
    1375 番 USEI さんへのコメント    コメント数 1

>  元々のテキストサイズを39文字になるように割り算した場合には誤差が最小になる
> と思うのですが、まず32文字になるように割り算をした値を 39/32倍しているので
> 誤差が大きくなるのでしょうね……。(^^;

公開版では dx の値を 64でやっていましたが、元々が256あったのを1/4にしていた
ので、256のままで計算して、1/4足せば320になり、最後にこれを1/4にして80と
してみたところ、ズレがさらに減りました。ただ、やっぱり数値の小さいところでは
ズレが残るので、256を8192まで大きくしてみましたがあまり変らないみたいです。
256以上は元の誤差が残ってしまうんでしょうかね。

>  そうですね、根本的になおすとなると割り算ルーチンを組み込まないといけない
> ので、現状ではkonnoさんの判断がベストだと思いますよ〜。

桁の小さいところだけずれるのが気になったので、320に1足して、それから256の
1/128(かな?)を引いてみたところ完全にズレが無くなりました。(^_^)
計算上はあっているかどうかわかりませんが、80桁では完璧です。

mov ax,dx ;256 ;X座標dlをalに
shr ax,2 ;64 ;al を1/4に (右へ2回ビットシフト)
add dx,ax ;320 ;元の座標にたせば1.25倍に max81桁
shr ax,5 ;1 ;al を1/32に (右へ5回ビットシフト)
inc dx ;321 ;dx + 1
sub dx,ax ;320 ;dx - ax
shr dx,2 ;80 ;
cmp dl,80 ;dlは80か?
jb ppp_7 ;80以内ならjmp
dec dl ;dl=dl-1

この追加で6バイト増えましたが、カーソルとバーが完全に同期して動くのは
気持ち良いですよ〜 (^_^)
公開版を差し替えようかなぁ。(^^;
      - No.1379 -    このTreeへ    コメント元:1375 へ [リストへもどる] pre

(1299) 1385Re: 完璧なインジケーター  投稿者:USEI   2006/09/06(水) 18:47
    1379 番 Konno さんへのコメント    コメント数 1

> >  元々のテキストサイズを39文字になるように割り算した場合には誤差が最小> 公開版では dx の値を 64でやっていましたが、元々が256あったのを1/4にしていた
> ので、256のままで計算して、1/4足せば320になり、最後にこれを1/4にして80と
> してみたところ、ズレがさらに減りました。ただ、やっぱり数値の小さいところでは
> ズレが残るので、256を8192まで大きくしてみましたがあまり変らないみたいです。
> 256以上は元の誤差が残ってしまうんでしょうかね。

 う〜ん、細かいことを云いますと、こういう計算方法でインジケーターの座標を出すのでは、割り算した余りの所が誤差になると思うので、最初の1文字目か最後の文字のどちらかでそのしわ寄せがくるんじゃないかと思います。
 そうすると、その部分では桁を繰り上げるか繰り下げるしかないので、これはもう"仕様"とでも云うほかはないと思います。
 konnoさんの云っているのは、こういう事とはまた、違うのかな…?(^^;

> 桁の小さいところだけずれるのが気になったので、320に1足して、それから256の
> 1/128(かな?)を引いてみたところ完全にズレが無くなりました。(^_^)
> 計算上はあっているかどうかわかりませんが、80桁では完璧です。
>
> mov ax,dx ;256 ;X座標dlをalに
> :
> dec dl ;dl=dl-1
>
> この追加で6バイト増えましたが、カーソルとバーが完全に同期して動くのは
> 気持ち良いですよ〜 (^_^)
> 公開版を差し替えようかなぁ。(^^;

 私のポポペでは今のバージョンでも十分に便利になっていますけど、気持ち良く使えるのでしたら、是非、使ってみたいですね!
      - No.1385 -    このTreeへ    コメント元:1379 へ [リストへもどる] soft

(1299) 1391ほぼ完璧なインジケーター(^^;  投稿者:Konno   2006/09/07(木) 00:12
    1385 番 USEI さんへのコメント

>  う〜ん、細かいことを云いますと、こういう計算方法でインジケーターの座標を出すのでは、割り算した余りの所が誤差になると思うので、最初の1文字目か最後の文字のどちらかでそのしわ寄せがくるんじゃないかと思います。

それが、前半1/4くらいで出ているんですよね。64を256にしたら1/6くらいになった
ような感じです。

>  konnoさんの云っているのは、こういう事とはまた、違うのかな…?(^^;

う〜ん、どうなんでしょう。例えば10%のところで9%と表示されているように見える
んですよね。整数の除算では切り捨てによって必ず数値が小さめになりますよね。
だからその逆の補正をやってみたわけです。

>  私のポポペでは今のバージョンでも十分に便利になっていますけど、気持ち良く使えるのでしたら、是非、使ってみたいですね!

早速差し替えました。ついでに2窓にも対応させてみたり。(^_^)

変更点
・80桁、40桁ともインジケーターの誤差をほぼゼロに出来ました。
・2窓に対応しました。それぞれの窓のステータスライン上で動きます。
 ただし、縦分割時の右窓では最大一文字分ずれます。
      - No.1391 -    このTreeへ    コメント元:1385 へ [リストへもどる] soft

(1299) 1340Re: インジケータールーチンの添削  投稿者:としき   2006/08/31(木) 11:19
参照先:http://toshiki.la.coocan.jp/
    1334 番 Konno さんへのコメント    コメント数 1

> これがインジケータールーチン全文です。40桁にするにはどうすれば良いかどなたかご
> 教授!!おねがいします。m(__)m

これだけじゃさっぱりわかりませんな。
まずgetcurptrで、どのレジスタにどんな数値が入ってくるのですか?
そして、最終的に、どのレジスタの値が、現状ではいくつからいくつの間で変化
しているのを、いくつからいくつの間で変化するようにすればよいのですか?
ということを落ち着いて考えればkonnoさんにできるはず。
逆に、それらが提示されなければ、他の人には絶対に添削できません。
      - No.1340 -    このTreeへ    コメント元:1334 へ [リストへもどる] pre

(1299) 1348Re^2: インジケータールーチンのコメント  投稿者:Konno   2006/08/31(木) 22:55
    1340 番 としき さんへのコメント    コメント数 1

> まずgetcurptrで、どのレジスタにどんな数値が入ってくるのですか?
> そして、最終的に、どのレジスタの値が、現状ではいくつからいくつの間で変化
> しているのを、いくつからいくつの間で変化するようにすればよいのですか?

すみません、つい甘えてしまいました。基本に返ってコメントを付けてみました。
USEIさんのアドバイスで範囲拡大まで出来たのでもうちょいです。

indibar2:
cmp byte ptr cs:opt_ppp,0 ;op;表示
je ppp_9

call getcurptr ; DX:AX :current ptr CX:BX :text size
tst dh ;dhは0か?
_ifn z ;0でなければ
mov ax,-1 ;ax=$ffff
mov dl,al ;dl=$ff
_endif
mov dh,dl ;dh=dl
mov dl,ah ;dl=ah
mov ah,al ;ah=al
clr al ;al=0
_repeat ;繰り返し
_break cxz ;cx == 0 なら終わり
shr cx,1 ;cx >> 1 右にシフト
rcr bx,1 ;bx << 1 右にローテイト
shr dx,1 ;dx >> 1 右にシフト
rcr ax,1 ;ax << 1 右にローテイト
_until
tst bx ;bxは0か?
_ifn z ;0でなければ
div bx ;ax=(dx,ax)/bx dx=(dx,ax)%bx
mov dx,ax ;dx=ax
_endif
shrm dx,3,cl ;2なら可動範囲倍になる
mov cx,ax ;cx=ax
and cl,7 ;cl & 0111
test hardware,IDN_PC98 ;ハードウエアは?
_ifn z ;98以外なら
shrm cl,2 ;?このマクロがわからない
_endif
mov al,dl ;X座標をalに
shr al,2 ;al を1/4に (右へ2回ビットシフト)
add dl,al ;元の座標にたせば1.25倍に32→40文字目
mov al,byte ptr cs:opt_ppp ;pointer表示
call setatr ;attr set
mov cl,1 ;attr 書き込み1文字
call fillatr ;DL,DH :location x,y CL :block width
ppp_9: ret

      - No.1348 -    このTreeへ    コメント元:1340 へ [リストへもどる] pre

(1299) 1352Re^3: インジケータールーチンのコメント  投稿者:としき   2006/09/01(金) 00:06
参照先:http://toshiki.la.coocan.jp/
    1348 番 Konno さんへのコメント    コメント数 1

添削まではできないけれど、ちょっと気がついたところだけ。

> _endif
> shrm dx,3,cl ;2なら可動範囲倍になる
> mov cx,ax ;cx=ax
> and cl,7 ;cl & 0111
> test hardware,IDN_PC98 ;ハードウエアは?
> _ifn z ;98以外なら
> shrm cl,2 ;?このマクロがわからない
> _endif

ここで使われているshrmなんですが、1つ目の方、パラメータが3つもあるので
すが、これでいいのですか?
c.mosさんの書かれたstd.incによると、

shiftm macro op,reg,imm
IFDEF i186
op reg,imm
ELSE
rept imm
op reg,1
endm
ENDIF
endm

shrm macro reg,imm
shiftm shr,reg,imm
endm

となってて、shrmはパラメータが2つだけのような気がします。
要は、ビットシフトするレジスタ名とシフトするビット数を指定しているだけの
ようですね。
アセンブラがよくわかっていないので、なにかとんちんかんなことを言っている
ような気もしますが。

で、結局、どのレジスタがいくつからいくつの範囲内であればOKなのかという
事が一向にわからないため、私にはさっぱりわからないのでした。
添削を求めるのであれば、コメントよりもなによりも、どういう要求仕様なのか、
という点を確定させた方がよいと思います。
      - No.1352 -    このTreeへ    コメント元:1348 へ [リストへもどる] pre

(1299) 1359Re^4: インジケータールーチンのコメント  投稿者:Konno   2006/09/02(土) 01:05
    1352 番 としき さんへのコメント

> ここで使われているshrmなんですが、1つ目の方、パラメータが3つもあるので
> すが、これでいいのですか?
> c.mosさんの書かれたstd.incによると、

あれっ、と思ったら、これも高橋版で変更されているみたいですね。

shiftm macro op,reg,imm,_cl
IFDEF i186
op reg,imm
ELSE
ifnb <_cl>
mov cl,imm
op reg,cl
else
rept imm
op reg,1
endm
endif
ENDIF
endm

shrm macro reg,imm,_cl
shiftm shr,reg,imm,_cl
endm

という感じで、項目が増えています。どういう動作なのか全く読めないです。

> で、結局、どのレジスタがいくつからいくつの範囲内であればOKなのかという
> 事が一向にわからないため、私にはさっぱりわからないのでした。

そもそも質問した私がわかってないのでレジスタの値とか言われても答えようが
無いのでした。それで、コメントを付けまくれば流れとかが見えてくるかもと
思ったわけです。実際やってみると頭の中が整理されてある程度見えてきました。

call fillatr ;DL,DH :location x,y CL :block width

これがアトリビュート出力部で、dl レジスタに桁位置が入っているわけなので、
これを1.25倍すれば良いという事が分りました。それでこの手前に、USEIさんの
アドバイスに従って
mov al,dl ;X座標をalに
shr al,2 ;al を1/4に (右へ2回ビットシフト)
add dl,al ;元の座標にたせば1.25倍に32→40文字目
と追加したわけです。今回の目的ではここだけ分ればとりあえずOKなので他のところは
また必要に応じて調べたいと思います。

> 添削を求めるのであれば、コメントよりもなによりも、どういう要求仕様なのか、
> という点を確定させた方がよいと思います。

これは一言で言えばインジケーターバーの可動範囲を、現状1〜33桁になっている
のを1〜40桁にしたいという要求だったんですね。としきさんやUSEIさんの的確な
アドバイスのおかげで実現できました。ありがとうございました。
      - No.1359 -    このTreeへ    コメント元:1352 へ [リストへもどる] pre