タイトル | : Bl3072 の大穴が塞がったかも |
投稿日 | : 2022/10/11(火) 21:59 |
投稿者 | : konno | 番 号 | : 10322 10291 番 konno さんへのコメント コメント数 1 |
Bl3072 では 3700bytes を超えるところで改行が入っていました。 ソースに改行を挿入するところがあるはずだと当たりをつけて 「,LF」で検索すると、それらしいところが TEXT.ASM にありました。 fread proc 中略 410行目 cmp si,di jne read3 mov byte ptr [si-1],LF _break read3: cmp byte ptr [si-1],LF _until e clz ret read9: stz read_x: ret ここの mov byte ptr [si-1],LF があやしいと思い、色々試したところ cmp si,di jne read3 stc ;★##k 221011 キャリーをセット jmps read9x ;★ ゼロフラグをクリアしてリターン ; mov byte ptr [si-1],LF ;★ Bl3072 の時 3700bytesで強制改行(実行しない) _break read3: cmp byte ptr [si-1],LF _until e read9x: clz ;★ ゼロフラグをクリアしてリターン ret read9: stz read_x: ret このように変更したら、Bl3072 で改行文字化けが無くなりました。 大穴と思っていたところが塞がったのです。 もちろんこの変更で他の所に穴が開いた可能性もあります。 しばらく Bl3072 で運用してみようと思います。 あと、CORE.ASM の 276行目 endlin proc pushm <cx,di,es> movseg es,ds mov di,si ; mov cx,-1 ;★ VTDOS でラップアラウンドエラーの原因? mov cx,3000h ;★##k 221009 ラインバッファ+アルファ mov al,LF repne scasb このようにしたら、Bl3072 で起きていた VTDOS でのラップアラウンドエラーが無くなりました。 ここが原因だったのでしょうか? これで Bl8192 と Bl3072 の蟲の居所がわかりましたが まだ他にもポインタズレという蟲が残っているようです。 0007.CGI (170335bytes) を後ろから削っていって 66882bytes にしたテストファイル 66882.CGI (66882bytes) に 0007.CG (132553bytes) を挿入するテストでは ポインタズレによる行の入れ替えが起こっています。 今回の修正で、他のVZよりは改善したようですが。 # 深淵の大穴は無限に続くのか?
- No.10322 一括表示へ - コメント元:10291 一括表示へ - [ 返信 ] [引用無し] pre