DOS 컴퓨터에서 24 비트 색상 깊이로 프로그램 할 수 있습니까? 나는 VGA가 8 비트 색 농도를 지원한다는 것을 알고 있지만, 24 비트를 처리하는 방법이 있습니까? Google에 대한 연구 결과가 없습니다. MS-DOS 대신에 FreeDOS에서 프로그래밍 중이며, 이것이 대답에 영향을 미친다 면요.MS-DOS - 24 비트 그래픽을 프로그래밍 할 수 있습니까?
답변
가 네, 가능하면 약 VESA 및 해당 드라이버 읽어야 : 여기 http://www.dosdriver.de/graph.php와는 여러 가지 기능 : 다음 http://www.delorie.com/djgpp/doc/rbinter/ix/10/4F.html
당신이 할 수있을 것입니다 :
는mov ax,4f02h
mov bx,103h
int 10h
이 보통 도끼를 제공합니다 vesa가 inited이고 103h (800x600x256) 모드가 설정되어있는 경우 004fh를 사용하면 11bh (1280x1024x16M) (예 : http://www.delorie.com/djgpp/doc/rbinter/it/83/0.html)를 사용할 수 있습니다.
업데이트 : 내 아주 아주 아주 오래된 파스칼 프로그램에서 송시는 :
### preserver space for vesa info structure, in asm it will look like sets of db, dw
tmodes=array[0..0] of word;
tvesainfo=
record
abSignature:array[1..4] of char;
lwVersion,hwVersion:byte;
pfszOEMStr:pchar;
rAbilities:longint;
{$F+}
pfawModes:^tmodes;
{$F-}
abData:array[1..238] of byte;
end;
### just pascal function, which calls ax 4f00 int 10h, passes address of structure above to fetch information from vesa driver, can be just simplified to asm block in it
function vesatest(var vi:tvesainfo):boolean;
var
os,sg:word;
res:word;
begin
os:=seg(vi);
sg:=ofs(vi);
asm
mov ax,4f00h
mov es,os
mov di,sg
int 10h
mov res,ax
end;
if res=$004f then vesatest:=true
else vesatest:=false;
end;
### call function about and basic display information about vesa driver installed
if vesatest(vesainfo)=false then
begin
writeln('This computer doesn''t have VESA');
halt(254);
end;
writeln('VESA signature - ',vesainfo.abSignature);
writeln('VESA version - ',vesainfo.hwVersion,'.',vesainfo.lwVersion);
writeln('VESA manufacturer - ',vesainfo.pfszOEMStr);
고마워요,하지만 파스칼에 대해서는 모르겠습니다. 나는 어셈블리를 배우고있다. (NASM, 문법을 알고 있지만 여전히 전체 명령어 세트를 배우고있다.) 위 스 니펫에서 ASM 코드 주변의 코드가 일반적으로 내게 말할 수 있습니까? –
ok, 덧글 추가 –
고마워, 대단히 감사합니다. –
현대 videocards의 대부분은 VBE2 - 바이오스 또는 VBE3 - 바이오스와 어쩌면 해상도까지 최대 2048x1536 픽셀과와 VBE의 modenumbers의 자신의 modetable와 함께 제공 픽셀 당 8 비트, 15 비트 또는 16 비트, 24 비트 또는 32 비트와 4 : 3, 4 : 5, 16 : 9 및 16x10의 종횡비를 지원합니다.
Note: Starting with VBE version 2.0, VESA will no longer define new VESA mode
numbers and it will no longer be mandatory to support these old mode numbers
(....from the older VBE 1.x modelist).
는 그래서 VBE-modenumber은 VBE2/3-BIOS에 VBE2/3 바이오스에서 differrent 할 수 있습니다. 아마도 일부 vbe-bios는 동일한 해상도를 제공하지만 다른 modenumbers를 사용합니다. VBE 버전 2.0부터는 vbe-bios에 포함 된 modetable을 사용해야하며 각 숫자를 숫자로 확인하여 해상도와 각 픽셀 당 몇 비트를 사용할 수 있는지에 대한 각 숫자의 모드 별 정보가됩니다. 그것으로.
자세한 내용은 vesa.org의 공개 문서 "vbe3.pdf"(costfree이지만 등록 및 로그인 필요)에서 찾을 수 있습니다. 자책골 CRT-매개 변수 테이블이있는 비디오 모드를 사용하는 방법을 보여줍니다
... 내가 (ASM의 sourcode와) 약간의 순수 DOS 기반의 데모를 작성했습니다 마지막으로. 이 데모는 100hz 새로 고침과 함께 1024x768x32의 해상도를 사용하고 있습니다. Addititinal이 데모는 선형 프레임 버퍼 (LFB, 4.GB에 있음) 및 VBE 하드웨어 트리플 버퍼링을 사용합니다.
32 비트를 사용하여 LFB에 쓰려면이 데모 스위치를 16 비트 언리얼 모드로 전환하십시오. 따라서 EMM386.EXE와 같은 EMS 메모리 관리 프로그램과 함께 사용할 수 없습니다. MSI Geforce 4 TI4200 (64MB, AGPx4) 및 Samsung의 19 인치 CRT 및 Samtron의 19 인치 CRT (96khz 및 160hz 용량)로 테스트되었습니다. www.alice-dsl.net/freecracmaps/Tool/Neutrip.zip
더크
나는 네오 페인트와 GDS (그래픽 디스플레이 시스템) 24 비트 컬러 비디오 모드를 사용 DOS 프로그램이었다 기억한다. 확실히 가능합니다. 아마도 VESA BIOS 비디오 모드와 내가 잊어 버렸던 다른 것들을 망칠 것입니다. – Boann
실제 하드웨어에는 아무런 문제가 없었습니다 ... –