私はTSR(DOS 16BIT)をコード化しようとしていますが、INT8のすべてのティックがアスタリスクを画面の周りに移動します。私はそれぞれの画面の境界線に対応する '*'位置の異なるインクリメントを持つ4つのサブルーチンを持っています。しかし、コードはハングアップし、割り込みに依存するので、デバッガで一度に実行することもできません。解決策を提案してください。DOS INT 8の動くアスタリスクが動かない
pos: dw 158,3998,3838,0
routine: dw subrt1,subrt2,subrt3,subrt4
subrt1:
add di,2
cmp di,[pos]
jnz exit
add bx,2
exit: ret
subrt2: add di,160
cmp di,[pos+2]
jnz exit
add bx,2
ret
subrt3: sub di,2
cmp di,[pos+4]
jnz exit
add bx,2
ret
subrt4: sub di,160
cmp di,[pos+6]
jnz exit
mov bx,0
ret
timer: push ax
mov ax,0xb800
mov es,ax
mov word[es:di],0x720
call [routine+bx]
mov word[es:di],0x742
mov al,0x20
out 0x20,al
pop ax
iret
start: xor ax,ax
xor bx,bx
mov es,ax
cli
mov word[es:8*4],timer
mov word[es:8*4+2],cs
sti
mov dx,start
add dx,15
mov cl,4
shr dx,cl
mov ax,0x3100
int 0x21
コードを記述しようとしているプラットフォームを忘れないでください。しかしここで最も明白な問題は、私が見る限り、元のint 8hハンドラを連鎖していないということです。独自のコードを実行する前に、元の8hハンドラにチェーンする必要があります。 –
TSR?あなたは1980年代初めにワームホールを通って落ちましたか? –
私は第三世界の国出身です。あなたの質問に答える希望もありますが、私にも答えてください:) –