XGA급 해상도(1024x768)의 GUI OS를 제작하려고 합니다.

cppig1995의 이미지

640x480초과의 해상도로 32비트 보호 GUI OS를 제작하려고 하는데요...
예를 들어 1024x768x24bpp의 비디오 모드를 설정한다고 가정하면,
VBE를 사용해야 한다는 것과 비디오 모드 번호는 117h라는 것은 알고 있는데,
32비트 보호모드에서 어떻게 VESA VBE함수에 접근하고,
어떻게 픽셀을 쓰거나 읽는지 잘 모르겠습니다...
많은 도움 부탁드립니다.

cppig1995의 이미지

[수정] 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.

Necromancer의 이미지

예전에 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

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.