640x480초과의 해상도로 32비트 보호 GUI OS를 제작하려고 하는데요...
예를 들어 1024x768x24bpp의 비디오 모드를 설정한다고 가정하면,
VBE를 사용해야 한다는 것과 비디오 모드 번호는 117h라는 것은 알고 있는데, 32비트 보호모드에서 어떻게 VESA VBE함수에 접근하고,
어떻게 픽셀을 쓰거나 읽는지 잘 모르겠습니다...
많은 도움 부탁드립니다.
예전에 vesa 스펙 봤었는데 보호모드용 인터페이스가 따로 있습니다.
그리고 보호모드에서 리얼모드용 인터페이스를 이용하고자 한다면 당연히 리얼모드 스위칭 과정이 필요합니다.
그리고 리얼모드 인터페이스 사용시에는 bank switching은 필수이고, (VESA 인터페이스에 bank switching 부분 있습니다)
보호모드일 경우 비디오메모리 전체를 특정 주소에 매핑하는 기능도 있습니다(100% 다 되는건 아니지만)
이경우는 bank switching이 필요 없습니다.
픽셀은 비디오메모리의 (Y좌표*X해상도 + X좌표)*(색상비트/8) 오프셋에 액세스하면 됩니다.
단 24비트의 경우 간혹가다 32비트로 해야되는 경우 있으므로 주의 요하고요.
bank switching이 필요 없는 경우에는 비디오메모리가 매핑된 주소에 위 값을 더하면 바로 액세스가 가능합니다.
그리고 bank switching이 필요한 경우에는 (오프셋/뱅크크기)가 뱅크 번호, (오프셋%뱅크크기)가 뱅크 내 오프셋이 되고
뱅크번호는 vesa 인터페이스로 지정해주고, 뱅프내 오프셋은 A000세그먼트의 오프셋으로 지정하면 픽셀에 접근됩니다.
근데 뱅크크기도 반드시 64k라는 보장이 없고, 비디오카드도 대부분 A000으로 매핑되나
간혹가다 B000이나 B800으로 하는 경우도 있으니 확인하셔야 합니다. (규격에 확인방법 다 있을겁니다)
아래 사이트에서 VESA VGA BIOS 관련 규격을 구할 수 있습니다. 어디 있는지는 저도 모르겠습니다.
[수정] 117h가 아니라
[수정] 117h가 아니라 24bpp는 118h이네요.
[자답] 여러 군데 외국 사이트를 돌아다닌 결과 Bank switching을 사용해서 메모리상의 창(window)개념으로 64k씩 A000 세그먼트에서 접근하면 된다고 하는데... 자세한 방법을 모르겠습니다.
Real programmers /* don't */ comment their code.
If it was hard to write, it should be /* hard to */ read.
예전에 vesa 스펙
예전에 vesa 스펙 봤었는데 보호모드용 인터페이스가 따로 있습니다.
그리고 보호모드에서 리얼모드용 인터페이스를 이용하고자 한다면 당연히 리얼모드 스위칭 과정이 필요합니다.
그리고 리얼모드 인터페이스 사용시에는 bank switching은 필수이고, (VESA 인터페이스에 bank switching 부분 있습니다)
보호모드일 경우 비디오메모리 전체를 특정 주소에 매핑하는 기능도 있습니다(100% 다 되는건 아니지만)
이경우는 bank switching이 필요 없습니다.
픽셀은 비디오메모리의 (Y좌표*X해상도 + X좌표)*(색상비트/8) 오프셋에 액세스하면 됩니다.
단 24비트의 경우 간혹가다 32비트로 해야되는 경우 있으므로 주의 요하고요.
bank switching이 필요 없는 경우에는 비디오메모리가 매핑된 주소에 위 값을 더하면 바로 액세스가 가능합니다.
그리고 bank switching이 필요한 경우에는 (오프셋/뱅크크기)가 뱅크 번호, (오프셋%뱅크크기)가 뱅크 내 오프셋이 되고
뱅크번호는 vesa 인터페이스로 지정해주고, 뱅프내 오프셋은 A000세그먼트의 오프셋으로 지정하면 픽셀에 접근됩니다.
근데 뱅크크기도 반드시 64k라는 보장이 없고, 비디오카드도 대부분 A000으로 매핑되나
간혹가다 B000이나 B800으로 하는 경우도 있으니 확인하셔야 합니다. (규격에 확인방법 다 있을겁니다)
아래 사이트에서 VESA VGA BIOS 관련 규격을 구할 수 있습니다. 어디 있는지는 저도 모르겠습니다.
http://www.vesa.org
Written By the Black Knight of Destruction
Written By the Black Knight of Destruction
댓글 달기