Jakoś tak wyszło, że dopiero niedawno miałem pierwszy raz potrzebę ort! tego dobrodziejstwa w DOS'ie i... coś kiepsko mi idzie ;P
Zastanawiam się, czy to <ort>w ogóle</ort> możliwe przy pomocy przerwania 31h w RM [???]
Udało mi się wprawdzie zaalokować tak 3000h bajtów i nawet zapisać/odczytać coś (paletę kolorów) z pierwszych 768 bajtów, ale kiedy ort! zapisać tam 3000h bajtów system (cały Windows) się zwiesza i nic - łącznie z zwiększeniem alokowanej pamięci, i sprawdzaniem, czy ES się nie przekręcił. [sciana]
Jeżeli komuś się chce to czytać to tu zamieszczam kod:
MOV AX, 13h
INT 10h
MOV AX, 0501h
XOR BX, BX
MOV CX, 05000h
INT 31h
JNC ok1
JMP koniec
ok1:
MOV hkolkoSI, SI
MOV hkolkoDI, DI
MOV ES, BX
MOV DI, CX
CLD
XOR AX, AX
MOV CX, 192
REP STOSW
SUB DI, 384
MOV CX, 3F3Fh
MOV BX, 3
pp:
MOV ES:[DI+BX], CX
ADD BX, 3
SUB CX, 0101h
JNZ pp
MOV AX, 1012h
XOR BX, BX
MOV CX, 100h
MOV DX, DI
INT 10h
k:
FILD pktk.x
FILD kpoz.x
FSUBP
FLD ST
FMULP
FILD pktk.y
FILD kpoz.y
FSUBP
FLD ST
FMULP
FADDP
FSQRT
FISTP kolor
MOV AX, kolor
INC AL
MOV byte ptr ES:[DI], AL
INC DI
TEST DI, DI
JNZ dalej
MOV AX, ES
INC AX
MOV ES, AX
dalej:
INC pktk.x
CMP pktk.x, 129
JB k
MOV pktk.x, 0
INC pktk.y
CMP pktk.y, 129
JB k
MOV SI, hkolkoSI
MOV DI, hkolkoDI
MOV AX, 0502h
INT 31h
koniec:
MOV AX,4C00h
INT 21h
PUNKT STRUC
x DW ?
y DW ?
PUNKT ENDS
pktk PUNKT <0,0>
kpoz PUNKT <64,64>
kolor DW ?
hkolkoSI DW ?
hkolkoDI DW ?
Kompiluję to TASM'em jako *.com
PS Tylko nie dorzucajcie uwag o optymalizacji, bo to tylko wersja do sprawdzenia tej pamięci ;)
PPS Kto zgadnie, co z tego dalej będzie? ;)