assembly 如何在汇编语言(DOSBox)中更改项目的屏幕分辨率(像素数)

r3i60tvu  于 2022-12-19  发布在  其他
关注(0)|答案(1)|浏览(355)

实际上,我正在用汇编语言做一个项目,我正在汇编语言显示内存上打印山、海和土壤。我只是想让我的动作更流畅,或者我的分辨率更高,这样我的像素会更清晰。我想把我的80x25屏幕换成更大的屏幕,以增加分辨率。大约接近800或1280。
我试过使用int 10h服务。我用过函数01h,06h和所有相关的东西,但没有任何改变。

l3zydbqr

l3zydbqr1#

DOSBox(当前版本0. 74)具有VESA功能,前提是选项文件具有所需的设置。我的选项文件中的一些设置如下:
[sdl]
全屏=假
全双精度=假
全分辨率=台式机
窗口分辨率=1280x960
输出=打开
[文件夹]
计算机=svga_s3
[渲染]
纵横比=真
定标器=正常2x
我写了这个小演示来证明它的工作原理:

org  256

  mov  bx, 4115h        ; 32-bit 800x600 graphics
  mov  ax, 4F02h        ; VESA.SetVideoMode
  int  10h              ; -> AX
  cmp  ax, 004Fh
  jne  Abort
  call DrawDiagonals
  mov  ah, 00h          ; BIOS.GetKeystroke
  int  16h              ; -> AX
  mov  ax, 0003h        ; BIOS.SetVideoMode 80x25 text
  int  10h
Abort:
  mov  ax, 4C00h        ; DOS.Terminate
  int  21h
; ----------------------
DrawDiagonals:
  mov  cx, 600
  xor  eax, eax
  mov  ebx, 3200-4
.a:
  mov  dword [0C0000000h+eax], 004080C0h    ; 0RGB
  mov  dword [0C0000000h+ebx], 00C08040h    ; 0RGB
  add  eax, 3200+4
  add  ebx, 3200-4
  loop .a
  ret
; ----------------------

在一个成熟的应用程序中,您首先会向VESA询问其支持的视频模式列表,然后选择一个您可以检索其特征的模式(如LinearFrameBuffer地址、BytesPerScanline ...)。
请咨询the VESA documentation

相关问题