标签: dosbox

计算批处理脚本中两个变量的总和

这是我第一次使用Stack Overflow,所以请对这个问题保持宽容.我一直在尝试使用批处理编程并使用DOSbox在我的linux机器上运行它们.

这是我一直在使用的代码:

@echo off
set a=3
set b=4
set c=%a%+%b%
echo %c%
set d=%c%+1
echo %d%
Run Code Online (Sandbox Code Playgroud)

输出是:

3+4
3+4+1
Run Code Online (Sandbox Code Playgroud)

我如何添加两个变量而不是回显该字符串?

variables batch-file dosbox

52
推荐指数
1
解决办法
16万
查看次数

如何增加DOSBox窗口的大小?

我在Ubuntu 12.04上的DOSBox上运行Turbo C.

问题是两个黑色条纹都出现在屏幕上.我想删除它们.

20130411_131000

我的电脑是戴尔Studio 15z,屏幕分辨率为1366x768.即使发生扭曲,我也没有问题.

我的dosbox.conf文件的相关部分:

[sdl]
fullscreen=true
fulldouble=false
fullresolution=1366x768
windowresolution=1366x768
output=overlay
autolock=true
sensitivity=100
waitonerror=true
priority=higher,normal
mapperfile=mapper-0.74.map
usescancodes=true
Run Code Online (Sandbox Code Playgroud)

dosbox

20
推荐指数
4
解决办法
9万
查看次数

在手动编码的远程调用之后定义在调试中出现的字节

我无法让MASM接受写成的远程调用指令call 0f000h:1260h,可能是因为这个问题带来的问题.

我没有乱用神秘的MASM指令,而是决定使用DB手动将其编码到我的程序中,如下所示:

pushf                      ;IRET will be executed, push flags.
db 9ah,60h,12h,0,0f0h      ;call location f000:1260.
                           ;Location pointed to by int 1c (System timer tick)
                           ;BIOS defaults it to a dummy IRET
Run Code Online (Sandbox Code Playgroud)

在使用DEBUG.COM跟踪程序时,我注意到在执行调用指令后出现"DB FE".但是,执行时不会发生这种情况int 1ch.跳转到位置f000:1260的这两种方法有什么区别?

在此输入图像描述

我假设DEBUG没有将0xfe(以及后面的字节)识别为有效的操作码.我倾倒了位置f000:1260以查看哪些字节存在.

在此输入图像描述

确实存在字节0xfe以及其他一些字节.我知道0xcf本身就是IRET的操作码(这是我期望找到的所有),那么这些其他字节是什么?

这是int 1ch位于0000:0070 的IVT条目.

在此输入图像描述

UPDATE

正如Michael Petch在他的回答中所说,奇怪的字节构成了DOSBox的回调机制.我很想知道如果我试图在我的主程序中执行这个回调会发生什么.

执行:

xor ah, ah                 ;select set video mode function
mov al, 13h                ;320x200 256 colors
db 0feh,38h,18h,00h        ;set video mode DOSBox callback.
                           ;Nothing pushed to stack.
Run Code Online (Sandbox Code Playgroud)

似乎与执行完全相同:

xor ah, ah …
Run Code Online (Sandbox Code Playgroud)

x86 assembly interrupt dosbox x86-16

8
推荐指数
1
解决办法
144
查看次数

如何使用 NASM 汇编 16 位 asm 代码,然后在 Linux 中调试它,然后在 DOSBox 中生成可执行文件

我们被要求编写 16 位汇编代码并将其汇编以在 DOSBox 中运行。

我知道 16 位汇编代码与普通 x86 汇编代码的不同之处在于它使用bits 1616 位寄存器(axbxcx、 ...)。

我尝试搜索如何将NASM 用于 16 位代码,但不幸的是不明白它在说什么。

我只是想知道NASM中使用什么参数来汇编16位汇编代码?(-bin-obj?),然后如果可能的话,如何在 Linux 中调试它。如果不行,如何在DOSBox中调试?

我真的很想在这里得到一些帮助,因为我们得到的资源非常少来理解这一点,所以我真的很困惑。

x86 assembly gdb nasm dosbox

6
推荐指数
1
解决办法
9971
查看次数

奇怪的宏(TASM)

考虑以下宏:

pixelFast MACRO
    ; This macro draws a pixel, assuming the coordinates are already loaded in cx&dx and the color is in al.
    xor bh, bh
    mov ah, 0ch
    int 10h
ENDM

drawRect MACRO x1, y1, x2, y2, color
    LOCAL @@loop, @@row_loop
    xor cx, cx
    mov dx, y1
    mov al, BYTE PTR [color]

    @@loop:
        mov cx, x1
        @@row_loop:
            pixelFast

            inc cx
            cmp cx, x2
            jna @@row_loop

        inc dx
        cmp dx, y2
        jna @@loop
ENDM

rendToolBar MACRO
    drawRect COLORDISP_X1, COLORDISP_Y1, COLORDISP_X2, …
Run Code Online (Sandbox Code Playgroud)

macros assembly interrupt tasm dosbox

6
推荐指数
1
解决办法
752
查看次数

是否可以将二进制数据嵌入到 Turbo C 中制作的 DOS EXE 中?

我用Turbo C++搭建了一个DOSBox开发环境,打算和朋友们一起制作一个游戏。

我正在使用 C 代码,并且想知道如何将二进制数据链接到 EXE 中。(我以前使用 C 的所有经验都是 libGBA,很抱歉,如果这实际上不可能我想象的那样。)

如果不可能,那么嵌入二进制数据的替代选项是什么?(我真的不想在游戏目录中需要一堆二进制文件......)

找不到太多关于 Turbo C 的第三方文档,特别是考虑到我正在使用其他受支持的但不是我的 IDE 的主要语言,该语言最后一次更新是在 2000 年代初完全转移到另一个操作系统之后。

c dos turbo-c++ dosbox

6
推荐指数
1
解决办法
290
查看次数

如何在两个不同的DOSBox上同时播放声音?

我已经在程序集8086中创建了“愤怒的小鸟”游戏。我现在的主要问题是我想在主循环运行时播放游戏的歌曲。我已经写了音乐代码。我考虑过使用多线程,但发现用于创建线程的程序集中断仅适用于cmd,不适用于DOSBox。

但是,我发现执行多线程的另一种方法是从C ++ Windows.h文件调用一个创建线程的命令。那太复杂了。

现在,我设法使用中断14h通过LAN端口发送消息,从而在两个不同的DOSBox窗口之间进行通信。基本上,我已经为音乐编写了单独的代码。这两个代码都运行,并且只有当音乐代码获得符号时,它才开始播放音乐。

但是,我发现打开两个DOSBox窗口时,只有主要的声音起作用。您必须切换窗口才能收听音乐,这意味着您听不到声音。

有没有人知道如何解决这个问题,或者在主循环运行时播放音乐?

谢谢

assembly background-music dosbox x86-16

6
推荐指数
1
解决办法
74
查看次数

VS 2015 C头错误C2039:'int_least8_t':不是''全局命名空间''的成员

当我尝试在 Windows 10 中编译 DOSBox SVN Daum 时,我遇到了 VS2015 中显然新出现的与标头相关的问题。示例:

Severity    Code    Description Project File    Line    Suppression State
Error (active)      the global scope has no "int_least8_t"  dosbox  c:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\cstdint  23  
Error   C2039   'int_least8_t': is not a member of '`global namespace'' dosbox  C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\cstdint  23  
Run Code Online (Sandbox Code Playgroud)

我的搜索告诉我,此类问题已经发生在周围的项目中,但我无法解决它。

特别是,我阅读了VisualStudio 2015 RC Issue with Includeshttps://blogs.msdn.microsoft.com/vcblog/2015/03/03/introducing-the-universal-crt/,然后更改了 AppData\Local 的内容\Microsoft\MSBuild\v4.0\Microsoft.Cpp.Win32.user.props 到:

<?xml version="1.0" encoding="utf-8"?> 
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ImportGroup Label="PropertySheets">
  </ImportGroup>
  <PropertyGroup Label="UserMacros" />
  <PropertyGroup>
    <IncludePath>D:\dev\include;$(UniversalCRT_IncludePath);$(IncludePath)</IncludePath> …
Run Code Online (Sandbox Code Playgroud)

c include dosbox cstdint visual-studio-2015

5
推荐指数
1
解决办法
2176
查看次数

错误:无法识别的指令 [ORG]

我试图编写一个引导加载程序以在 dos-box 中使用我编写了以下代码

[BITS 16]   ;tell the assembler that its a 16 bit code
[ORG 0x7C00]    ;Origin, tell the assembler that where the code will
;be in memory after it is been loaded

JMP $       ;infinite loop

TIMES 510 - ($ - $$) db 0   ;fill the rest of sector with 0
DW 0xAA55           ; add boot signature at the end of bootloader
Run Code Online (Sandbox Code Playgroud)

我试图通过以下命令使用 nasm 组装它

nasm -f elf myfile.asm
Run Code Online (Sandbox Code Playgroud)

然后我看到那个错误

错误:无法识别的指令 [ORG]

我使用的是ubuntu 14.04 LTS,nasm的版本是2.10.09

assembly nasm bootloader dosbox

5
推荐指数
1
解决办法
3469
查看次数

DOSBox上的8086汇编:带有idiv指令的Bug?

我帮助我的一个朋友调试他的程序,我们把它缩小到一个甚至在这里发生的问题:

.MODEL small
.STACK 16
.CODE
start:
    mov ax, 044c0h
    mov bl, 85
    idiv bl
exit:
    mov ax, 4c00h
    int 21h

end start
Run Code Online (Sandbox Code Playgroud)

用tasm 4.1组装它,然后在DOSBox 0.74上运行它,它进入一个无限循环.当涡轮调试器检查它人们可以看到它之后发生idiv的指令,这对于一些原因,修改csip登记,并经过两次看似随意指令恢复它们指向idiv线,再次执行它循环往复.

有没有人对此有任何解释?

x86 assembly tasm dosbox x86-16

5
推荐指数
1
解决办法
809
查看次数