我正在 Windows 7 64 位上使用 DosBox 在 Turbo C++ 中运行图形程序。现在,我想IBM3514在高分辨率模式 ( IBM3514HI) 下使用图形驱动程序。因此,我编写了以下简单程序来测试它:
#include <graphics.h>
#include <iostream.h>
void main() {
int gd = IBM3514, gm = IBM3514HI, e;
initgraph(&gd, &gm, "C:\\TC\\BGI");
if (e = graphresult()) {
cout << grapherrormsg(e);
}
cleardevice();
rectangle(100, 100, 300, 300);
cin.get();
closegraph();
restorecrtmode();
}
Run Code Online (Sandbox Code Playgroud)
现在,程序编译并运行,没有任何错误。但是,该initgraph函数调用不会初始化图形模式。graphresult的返回值为0。因此,没有发生错误。然而,该程序仍然以文本模式运行。闪烁的下划线可见,但未绘制矩形。
我检查了我的C:\TC\BGI文件夹,该IMB3514.BGI文件存在。因此我假设它确实加载了图形驱动程序。然而,我不明白为什么程序不能在图形模式下执行,甚至抛出错误。但是,如果我使用默认设置,它工作得很好:int gd = DETECT, gm;
任何关于为什么我的程序不起作用的解释将不胜感激。请尝试解决此问题。我真的很想在1024x768屏幕上用256颜色画画。
我的TASM已安装到我的TASM,TLINK和文件所在的文件夹中.具体来说就是C:/TASM/BIN.运行单个.asm文件时没有问题但是当我包含另一个文件以便我的代码看起来模块化时,会出现这个问题.
我已经包含了6个文件,其中包括printMzpos1.kt.(文件扩展名在汇编文件包含中无关紧要.)我的主文件名是c.asm.该图像显示printMzpos1.kt在我的TASM挂载的文件夹中:

这是我的代码的快照.我包括printMzpos1.kt之后main endp和之前end main.printMzpos1.kt包含打印框的过程.
.model small
.386
.stack 64
.data
colorW db 0Fh
xPos dw ?
currmode db ?
horLineLen dw 120
verLineLen dw 70
include macro.kt
.code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
MAIN proc far
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
mov ax, @data
mov ds, ax
mov es, ax
setVidMode
cls
call printMzPos1
;call move3Boxes
retVidMode
mov ax, 4c00h
int 21h
MAIN endp
include printMzPos1.kt
include printMzPos2.kt
include printMzPos3.kt
include …Run Code Online (Sandbox Code Playgroud) 我在下面编写了这个程序,但它没有用.我正在输入文件名dur.txt.它返回AX = 4C03.为什么它不起作用,我该如何纠正呢?
.model tiny
.data
max1 db 32
act1 db ?
inp1 db 30 dup(0)
hande dw ?
.code
.startup
;enter the name of the file
lea dx,max1
mov ah,0ah
int 21h
;delete the file
mov ah,41h
lea dx, inp1
int 21h
.exit
end
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 DOSBox 在另一台机器上安装文件夹,两台机器都运行 Windows 10。
我尝试//PC-NAME/filename按照 Windows 资源管理器中显示的方式进行安装,但它不起作用。
安装快捷方式也不起作用。这可以吗?
我已经知道有一段时间可以通过使用CRTC将行高改为两个像素来在IBM CGA上实现伪160×100图形模式.我一直试图在几天内完成这项工作,走到了尽头.
在英特尔开源HD显卡和英特尔虹膜™图形程序员参考手册要求,我可以通过写扫描线的最大注册为此45页(或59页的PDF),或者这就是我从中解读.
我相信,我已经尝试直接写入值为00000001b的内存地址3B5或2个扫描行的代码.当我在DOSBox中测试它时,这什么都没做.
如果你想看到我写的代码将在NASM中汇编:
BITS 16
xor bx,bx
mov ax, 3b5h
mov es, ax
mov ah, 00000001b
mov BYTE [es:bx], ah ; write 00000001b to 0x03b5:0000, right?
cli
hlt
Run Code Online (Sandbox Code Playgroud)
我对这样的低级别的东西还不是很有信心,任何帮助都会受到赞赏.
我正在组装一个"西蒙"游戏我需要在按钮打开时发出哔哔声,哔哔声也应该彼此不同.谢谢
我正在为学校的程序集 8086(使用 DOSBox)开发一个项目,我试图将我的程序延迟 0.5 秒。
我尝试创建一个循环,将当前时间与初始时间进行比较,使用 int 21h、函数 2Ch 和 中的百分之一值DL,但它似乎太慢了......
mov ah, 2Ch
int 21h
mov al, dl ;hundredths
mov bx, 0
wait_loop:
one_hun:
int 21h
cmp al, dl
je one_hun
mov al, dl
inc bx
cmp bx, 50
jne wait_loop
Run Code Online (Sandbox Code Playgroud) 我有一个非常旧的DOS应用程序,我想自动化.就像有按键等,如果自动化会有很多帮助,因为我可能需要手动运行程序一百多次.
我的问题似乎与这个问题非常相似,但那里提供的解决方案对我来说并不是很有用,而且它已经超过九年了
这个问题与我的唯一不同之处在于除了DOSbox之外我没有选择这样做.这个应用程序是在很多计算机上设置的,所有使用该应用程序的人都知道如何使用DOSBox.迁移到Virtualbox将是一件痛苦而且非常耗时的事情.
我想也许我可以使用xautomaton或uinput在python中以某种方式机械化这个,但我还没弄清楚究竟是怎么做的.该应用程序将主要在Ubuntu上运行.
为了了解该应用程序,我附上了一个截图:
解决方案不一定需要在python中.任何其他语言都可以.任何帮助表示赞赏.
我对汇编很陌生,最近我一直在努力使 INT 21,43 (将文件属性更改为只读)工作。我正在使用 Windows 10、DOSBox x86 和 Turbo 汇编器/链接器/调试器(如果这有什么区别的话)。据我所知,使用调试器,它应该可以工作(CF 未设置,并且根据文档,我没有得到应有的错误代码)。另外,如果我使用相同的 INT 21,43 获取(将 al 设置为 0)文件的文件属性,该文件已手动设置为只读,则 CX 设置为 20,据我所知,这不会使有道理,但 CF 没有设置好,所以它说它有效。我希望你能帮我解决这个问题,提前致谢。
.model small
.stack 100h
.data
filename db "temp.txt",0 ; my file name
.code
start:
mov dx, @data
mov ds, dx
mov ah, 43h
mov al, 01h ; Set file attribute
mov cx, 01h ; 1 = read-only
lea dx, filename ; Set pointer to filename
int 21h
mov ah, 4ch ; Return to DOS
mov al, 0
int …Run Code Online (Sandbox Code Playgroud) 这段代码是使用Turbo Assembler汇编的,但是当我尝试在DOSBox中运行它时,它冻结并且DOSBox消失。这有什么问题吗?
TITLE SAMPLE PROGRAM
.MODEL SMALL
.STACK 64
.DATA
.CODE
MYCODE PROC
MOV AX,04
MOV BX,0212
CMP AX, BX
JG action1
JLE action2
action1:
ADD AL, 30
JMP exit
action2:
ADD BL, 20
JMP exit
exit:
MOV AX, 4CH
INT 21H
MYCODE ENDP
END MYCODE
Run Code Online (Sandbox Code Playgroud)