Синие цветочкиОшибка в Fine Reader 6.0

IRIS

Симпатичная программа. Выводит на экран быстро меняющийся рисунок.
Использует аппаратные возможности VGA-адаптера.

P386

jr equ jmp short
bptr equ byte ptr
wptr equ word ptr
dwptr equ dword ptr
ofs equ offset
len_stek = 333
stek = offset posl+len_stek+len_dat

dat = offset posl
old_crd_mou = dat ;+4
data_15 = old_crd_mou+4 ;+1
data_16 = data_15+1 ;+1
data_17 = data_16+1 ;+1
data_18 = data_17+1 ;+1

len_dat = (data_18+1-dat)

Model tiny
Assume CS:IRIS,DS:IRIS
IRIS segment 'code' byte public use16



Org 256
start:
db '>_@21_'
jmp @@busy6
@@busy1:
jmp @@busy5
@@busy2:
jmp @@busy4
@@busy3:
jmp @@busy7
@@busy4:
jmp @@busy3
@@busy5:
jmp @@busy2
@@busy6:
jmp @@busy1
@@busy7:
cld
xor ax,ax
push ax
mov di,dat
mov cx,len_dat
rep stosb

mov ah,4ah
mov bx,(1500+len_stek+len_dat+277)/16 ;Размер программы,Стек
int 33

mov ah,15
int 16
mov bptr [old_scr-2],al
mov ah,3
int 16
push bx cx dx
xor ax,ax
int 33h
or ax,ax
jz loc_1
mov wptr [no_mou1-2],9090h
mov ax,3
int 33h
mov wptr [old_crd_mou],cx
mov wptr [old_crd_mou+2],dx
loc_1:
mov ax,13h
int 10h
cli
mov dx,3C4h
mov ax,604h
out dx,ax ; port 3C4h, EGA sequencr index al = 4, memory mode select
mov ax,0F02h
out dx,ax ; port 3C4h, EGA sequencr index al = 2, map mask register
mov dx,3D4h
mov ax,14h
out dx,ax ; port 3D4h, CGA/EGA reg index al = 14h, underline scan lin
mov ax,0E317h
out dx,ax ; port 3D4h, CGA/EGA reg index al = 17h, mode control
mov al,9
out dx,al ; port 3D4h, CGA/EGA reg index al = 9, max raster address
inc dx
in al,dx ; port 3D5h, CGA/EGA indxd dat
and al,0E0h
add al,7
out dx,al ; port 3D5h, CGA/EGA indxd data

mov dx,3C8h
mov al,80h
out dx,al ; port 3C8h, VGA pel address
inc dx

mov cx,384
mov si,ofs palitra
locloop_2:
lodsb
out dx,al ; port 3C9h, VGA pel data reg
loop locloop_2
sti
push 0A000h
pop es
mov si,ofs data_2

loc_3:
mov dx,3DAh
loc_4:
in al,dx ; port 3DAh, CGA/EGA vid status
test al,8
jz loc_4
loc_5:
in al,dx ; port 3DAh, CGA/EGA vid status
test al,8
jnz loc_5

xor di,di
mov ah,50
mov cx,wptr [data_17]
loc_6:
push ax
mov ah,80
mov dx,wptr [data_15]
loc_7:
mov bx,bp
xor bh,bh
mov al,bl
mov bl,dl
add al,[bx+si]
mov bl,dh
add al,[bx+si]
mov bl,cl
add al,[bx+si]
mov bl,ch
add al,[bx+si]
or al,80h
stosb
add dl,1
add dh,3
dec ah
jnz loc_7
add cl,2
add ch,1
pop ax
dec ah
jnz loc_6
dec bp
mov bx,bp
xor bl,bh
xor bl,bptr [data_2+di-1]
xor bl,cl
xor bl,dl
add bl,ch
add bl,dh
xor bh,bh
mov di,ofs data_8
test bl,8
jnz loc_8
and bl,3
cmp bptr [bx+di],3
jg loc_9
inc bptr [bx+di]
jmp loc_9

loc_8:
and bl,3
cmp bptr [bx+di],253
jl loc_9
dec bptr [bx+di]
loc_9:
mov dx,wptr [data_8]
mov cx,wptr [data_10]

neg dh
add wptr [data_15],dx
neg ch
add wptr [data_17],cx
jmp loc_10 ;#
no_mou1:

mov ax,3
int 33h ; get position, cx=horz,dx=vert bx=mouse button status bits
or bx,bx
jnz dos
cmp cx,wptr [old_crd_mou]
jnz dos
cmp dx,wptr [old_crd_mou+2]
jnz dos
loc_10:
mov ah,1
int 16h ; get status, if zf=0 al=char
jz loc_3

loc_11:
xor ah,ah
int 16h
dos:
mov ax,3 ;#
old_scr:
int 10h
pop dx cx bx
mov ah,2
int 10h
ret

data_2:
db 040h,040h,040h,040h,040h,040h,040h,040h
db 03Fh,03Fh,03Fh,03Fh,03Fh,03Eh,03Eh,03Eh
db 03Eh,03Dh,03Dh,03Dh,03Ch,03Ch,03Bh,03Bh; 002
db 03Bh,03Ah,03Ah,039h,039h,038h,038h,037h; 003
db 037h,036h,035h,035h,034h,034h,033h,032h; 004
db 032h,031h,030h,030h,02Fh,02Eh,02Eh,02Dh; 005
db 02Ch,02Ch,02Bh,02Ah,029h,029h,028h,027h; 006
db 026h,025h,025h,024h,023h,022h,022h,021h; 007
db 020h,01Fh,01Eh,01Eh,01Dh,01Ch,01Bh,01Bh; 008
db 01Ah,019h,018h,017h,017h,016h,015h,014h; 009
db 014h,013h,012h,012h,011h,010h,010h,00Fh; 00A
db 00Eh,00Eh,00Dh,00Ch,00Ch,00Bh,00Bh,00Ah; 00B
db 009h,009h,008h,008h,007h,007h,006h,006h; 00C
db 005h,005h,005h,004h,004h,003h,003h,003h; 00D
db 002h,002h,002h,002h,001h,001h,001h,001h; 00E
db 001h,000h,000h,000h,000h,000h,000h,000h; 00F
db 000h,000h,000h,000h,000h,000h,000h,000h; 010
db 001h,001h,001h,001h,001h,002h,002h,002h; 011
db 002h,003h,003h,003h,004h,004h,005h,005h; 012
db 005h,006h,006h,007h,007h,008h,008h,009h; 013
db 009h,00Ah,00Bh,00Bh,00Ch,00Ch,00Dh,00Eh; 014
db 00Eh,00Fh,010h,010h,011h,012h,012h,013h; 015
db 014h,014h,015h,016h,017h,017h,018h,019h; 016
db 01Ah,01Bh,01Bh,01Ch,01Dh,01Eh,01Eh,01Fh; 017
db 020h,021h,022h,022h,023h,024h,025h,025h; 018
db 026h,027h,028h,029h,029h,02Ah,02Bh,02Ch; 019
db 02Ch,02Dh,02Eh,02Eh,02Fh,030h,030h,031h; 01A
db 032h,032h,033h,034h,034h,035h,035h,036h; 01B
db 037h,037h,038h,038h,039h,039h,03Ah,03Ah; 01C
db 03Bh,03Bh,03Bh,03Ch,03Ch,03Dh,03Dh,03Dh; 01D
db 03Eh,03Eh,03Eh,03Eh,03Fh,03Fh,03Fh,03Fh; 01E
db 03Fh,040h,040h,040h,040h,040h,040h,040h; 01F

palitra:
db 03Fh,000h,03Fh,03Fh,002h,03Dh,03Fh,004h; 020
db 03Bh,03Fh,006h,039h,03Fh,008h,037h,03Fh; 021
db 00Ah,035h,03Fh,00Ch,033h,03Fh,00Eh,031h; 022
db 03Fh,010h,02Fh,03Fh,012h,02Dh,03Fh,014h; 023
db 02Bh,03Fh,016h,029h,03Fh,018h,027h,03Fh; 024
db 01Ah,025h,03Fh,01Ch,023h,03Fh,01Eh,021h; 025
db 03Fh,020h,01Fh,03Fh,022h,01Dh,03Fh,024h; 026
db 01Bh,03Fh,026h,019h,03Fh,028h,017h,03Fh; 027
db 02Ah,015h,03Fh,02Ch,013h,03Fh,02Eh,011h; 028
db 03Fh,030h,00Fh,03Fh,032h,00Dh,03Fh,034h; 029
db 00Bh,03Fh,036h,009h,03Fh,038h,007h,03Fh; 02A
db 03Ah,005h,03Fh,03Ch,003h,03Fh,03Eh,001h; 02B
db 03Fh,03Fh,000h,03Dh,03Fh,002h,03Bh,03Fh; 02C
db 004h,039h,03Fh,006h,037h,03Fh,008h,035h; 02D
db 03Fh,00Ah,033h,03Fh,00Ch,031h,03Fh,00Eh; 02E
db 02Fh,03Fh,010h,02Dh,03Fh,012h,02Bh,03Fh; 02F
db 014h,029h,03Fh,016h,027h,03Fh,018h,025h; 030
db 03Fh,01Ah,023h,03Fh,01Ch,021h,03Fh,01Eh; 031
db 01Fh,03Fh,020h,01Dh,03Fh,022h,01Bh,03Fh; 032
db 024h,019h,03Fh,026h,017h,03Fh,028h,015h; 033
db 03Fh,02Ah,013h,03Fh,02Ch,011h,03Fh,02Eh; 034
db 00Fh,03Fh,030h,00Dh,03Fh,032h,00Bh,03Fh; 035
db 034h,009h,03Fh,036h,007h,03Fh,038h,005h; 036
db 03Fh,03Ah,003h,03Fh,03Ch,001h,03Fh,03Eh; 037
db 000h,03Fh,03Fh,000h,03Dh,03Fh,000h,03Bh; 038
db 03Fh,000h,039h,03Fh,000h,037h,03Fh,000h; 039
db 035h,03Fh,000h,033h,03Fh,000h,031h,03Fh; 03A
db 000h,02Fh,03Fh,000h,02Dh,03Fh,000h,02Bh; 03B
db 03Fh,000h,029h,03Fh,000h,027h,03Fh,000h; 03C
db 025h,03Fh,000h,023h,03Fh,000h,021h,03Fh; 03D
db 000h,01Fh,03Fh,000h,01Dh,03Fh,000h,01Bh; 03E
db 03Fh,000h,019h,03Fh,000h,017h,03Fh,000h; 03F
db 015h,03Fh,000h,013h,03Fh,000h,011h,03Fh; 040
db 000h,00Fh,03Fh,000h,00Dh,03Fh,000h,00Bh; 041
db 03Fh,000h,009h,03Fh,000h,007h,03Fh,000h; 042
db 005h,03Fh,000h,003h,03Fh,000h,001h,03Fh; 043
db 000h,000h,03Fh,002h,000h,03Fh,004h,000h; 044
db 03Fh,006h,000h,03Fh,008h,000h,03Fh,00Ah; 045
db 000h,03Fh,00Ch,000h,03Fh,00Eh,000h,03Fh; 046
db 010h,000h,03Fh,012h,000h,03Fh,014h,000h; 047
db 03Fh,016h,000h,03Fh,018h,000h,03Fh,01Ah; 048
db 000h,03Fh,01Ch,000h,03Fh,01Eh,000h,03Fh; 049
db 020h,000h,03Fh,022h,000h,03Fh,024h,000h; 04A
db 03Fh,026h,000h,03Fh,028h,000h,03Fh,02Ah; 04B
db 000h,03Fh,02Ch,000h,03Fh,02Eh,000h,03Fh; 04C
db 030h,000h,03Fh,032h,000h,03Fh,034h,000h; 04D
db 03Fh,036h,000h,03Fh,038h,000h,03Fh,03Ah; 04E
db 000h,03Fh,03Ch,000h,03Fh,03Eh,000h,03Fh; 04F

data_8 db 2
data_9 db 1
data_10 db 3
data_11 db 4

posl:
IRIS ends
End start


Сделать com-программу через такой BAT-файл.

@echo off
cls
e:\asm\bin\tasm.exe /m9 /t /ml /ie:\asm\include %1.asc,%1.obj >_errors.obj
if errorlevel 1 goto exit
e:\asm\bin\tlink.exe /Tdc /c /C /x /yx %1.obj ,%1.com

if errorlevel 1 goto exit
del %1.obj
goto end

:exit
e:\asm\into\hiew\hiew.exe _errors.obj
:end