标签: dos

9
推荐指数
1
解决办法
1819
查看次数

如果不存在则退出+ cmd

我尝试在.cmd文件中创建一个循环.

如果test.txt不存在,那么我将终止cmd进程.

@echo off
if not exists test.txt goto exit
Run Code Online (Sandbox Code Playgroud)

但是这段代码不起作用,我不知道如何每2秒做一次循环.

感谢帮助.

cmd dos

9
推荐指数
1
解决办法
3万
查看次数

ASCII DOS游戏 - 渲染方法

我正在写一个老式的ASCII DOS-Prompt游戏.老实说,我正试图效仿ZZT,以了解更多关于这个品牌的游戏设计(即使它已经过时)

我做得很好,让我的全屏文本模式工作,我可以创建世界和移动没有问题但我找不到一个像样的方法我的渲染.

我知道我的渲染和预渲染代码很快,因为如果我不添加任何延迟()或(time() - renderBegin)/ CLK_TCK从time.h检查,渲染速度非常快.

我不想使用delay(),因为它是我的知识平台特定的,并且在它延迟时不能运行任何代码(如用户输入和处理).所以我决定这样做:

do {
    if(kbhit()) {
        input = getch();
        processInput(input);
    }

    if(clock()/CLOCKS_PER_SEC-renderTimer/CLOCKS_PER_SEC > RenderInterval) {
        renderTimer = clock();
        render();
        ballLogic();
    }
}while(input != 'p');
Run Code Online (Sandbox Code Playgroud)

哪个应该在"理论"中工作得很好.问题是,当我运行此代码(将RenderInterval设置为0.0333或30fps)时,我不会得到接近30fps的任何地方,我最多会得到18.

我想也许我会尝试将RenderInterval设置为0.0以查看性能是否已经启动......它没有.我(RenderInterval为0.0)达到最大值~18-20fps.

我可能因为我不断调用所有这些clock()和"除以这个"方法,我正在减慢CPU的速度,但是当我把渲染和ballLogic调用if语句的括号并将RenderInterval设置为0.0我再次得到了极快的渲染效果.

这对我来说没有任何意义,因为如果我离开if if check in,它不应该运行得那么慢吗?我的意思是它仍然需要做所有的计算

顺便说一句,我正在编译Borland的Turbo C++ V1.01

c++ ascii render dos turbo-c++

9
推荐指数
1
解决办法
830
查看次数

如何在链中运行dos命令

我从这里找到了bat文件:

http://www.dostips.com/DtCodeBatchFiles.php#Batch.FindAndReplace

我想在这个蝙蝠之后运行另一个命令,但它不起作用.我想网站提供的代码一定有问题.任何人都可以给我一个线索?谢谢.

dos batch-file

9
推荐指数
2
解决办法
1万
查看次数

循环通过类似开关的参数的批处理文件?

我正在尝试遍历我传递给批处理文件的参数.根据参数,我想设置一个变量标志true或false,以便稍后在脚本中使用

所以我的命令是"myscript.bat/u/p/s"

我的代码是:

FOR /f %%a IN ("%*") DO (
  IF /I "%%a"=="/u" SET UPDATE=Y
  IF /I "%%a"=="/p" SET PRIMARY=Y
  IF /I "%%a"=="/s" SET SECONDARY=Y
)
Run Code Online (Sandbox Code Playgroud)

它只有在我有一个参数时才有效,它告诉我它将整个参数列表作为单个参数.我试过"delims ="但无济于事.获得每个间隔参数的任何想法?


如何为其中一个参数添加一个值?

myscript.bat/u/p/d TEST/s

:loop
IF "%~1"=="" GOTO cont
IF /I "%~1"=="/u" SET UPDATE=Y
IF /I "%~1"=="/p" SET PRIMARY=Y
IF /I "%~1"=="/s" SET SECONDARY=Y
IF /I "%~1"=="/d" SHIFT & SET DISTRO="%~1"
SHIFT & GOTO loop

:cont
Run Code Online (Sandbox Code Playgroud)

但是与最后一个IF一致的SHIFT实际上并没有改变任何东西.DISTRO最终成为"/ d"而不是"TEST"

for-loop dos batch-file

9
推荐指数
2
解决办法
1万
查看次数

帮助在NASM NAS for Assembly中编写TSR程序

我一直在尝试在程序集(16位)中为MS-DOS编写TSR(Terminate-Stay-Resident)程序(一般).我已经阅读了TSR上的维基百科页面以及在DOS中专门使用它的页面(但它似乎是用C语言教学,而不是直接用汇编语言).我查看了一个包含大量DOS中断文档的站点,找到了这个,这个,以及另一个与TSR程序最相关的站点.我无法发布所有链接,因为作为新用户,我在帖子上最多可以有2个超链接.

所以,我尝试在NASM中以实模式平面模型(.COM文件格式)编写(看似)非常简单的TSR程序.这是代码:

[BITS 16]
[ORG 0x0100]

[SECTION .text]

Start:
; Get current interrupt handler for INT 21h
mov AX,3521h                ; DOS function 35h GET INTERRUPT VECTOR for interrupt 21h
int 21h                     ; Call DOS  (Current interrupt handler returned in ES:BX)

mov WORD [v21HandlerSegment],ES     ; Store the current INT 21h handler segment
mov WORD [v21HandlerOffset],BX      ; Store the current INT 21h handler offset

; Write new interrupt handler for INT 21h
mov AX,2521h                ; DOS function 25h …
Run Code Online (Sandbox Code Playgroud)

assembly dos interrupt nasm tsr

9
推荐指数
1
解决办法
4249
查看次数

使用FIND.exe的DOS批处理FOR循环是否正在删除空白行?

即使我使用TYPE.exe命令转换文件以确保文件是ASCII以便FIND命令与文件兼容,这个DOS批处理脚本也会删除空白行而不显示文件中的空行. .谁能告诉我如何让这个脚本包含空白行?

@ECHO off
FOR /F "USEBACKQ tokens=*" %%A IN (`TYPE.exe "build.properties" ^| FIND.exe /V ""`) DO (
  ECHO --%%A--
)
pause
Run Code Online (Sandbox Code Playgroud)

cmd dos batch-file

9
推荐指数
1
解决办法
2万
查看次数

需要帮助在Borland C++ 3.0上分配远指针

我正在编写一个DOS游戏框架来更好地学习C,并对旧硬件上的编程感兴趣(特别是在我长大的系统上).

我正在尝试实现一个双缓冲系统,但我无法分配一个指向320*200阵列的远指针.

起初我试图使用malloc,但发现它只能分配到64kb以下.我读过你需要使用farmalloc(malloc返回NULL)并正确分配.但是,当运行_fmemset或_fmemcpy时......整个系统会冻结.

backBuffer = (unsigned char far*) farmalloc(64000);
Run Code Online (Sandbox Code Playgroud)

什么时候交换我使用的缓冲区

_fmemcpy(VGA, backBuffer, 64000);
Run Code Online (Sandbox Code Playgroud)

程序正在使用小内存模型.

c memory pointers dos

9
推荐指数
1
解决办法
1143
查看次数

我不明白如何使用中断21,AH = 0ah

我的信息来自这里.该作业要求读取不超过20个字符的程序,将这些字符转换为大写,然后将输入打印为大写字母.

我不知道如何从int21/AH = 0ah访问输入.除非我理解上面链接的内容,否则我真的不能问更准确的问题.谁能解释一下?此外,如果这有任何区别,我正在使用TASM.另外,我正在对freedos进行测试.

UPDATE1:

好的,多亏了你的帮助,我相信我理解中断是如何设置和行为的.

设置: 我必须指定一个ds:dx,我希望这个缓冲区存在

我必须将ds:dx设置为20(设置缓冲区可以容纳的最大字符数)

我必须将ds:dx + 1设置为0(我想以某种方式设置要读入的最小字符数)

实际上调用int21/AH = 0ah,它将转到ds:dx并解释预设的字节.它会在等待输入时暂停程序

int21/AH = 0ah将从我的输入填充ds:dx + 2 + n(其中n是输入的字符数,包括'\ r')

我现在的问题是,我该怎么做.我刚刚再次查看了x86汇编语言参考,但还没有找到任何有用的东西.

代码我到目前为止

           assume          cs:code,ds:code
code       segment
start:

           mov  ax,code ;moves code segment into reg AX
           mov  ds,ax   ;makes ds point to code segment

           mov  ah,0ah
           int  21h
           mov  ax,1234h  ;breakpoint

           mov  ah,9
           mov  dx,offset message
           int  21h

endNow:
           ;;;;;;;;;;ends program;;;;;;;;;;
           mov  ah,0  ;terminate program
           int  21h   ;program ends

message    db   'Hello world!!!',13,10,'$'
code       ends
           end …
Run Code Online (Sandbox Code Playgroud)

assembly dos interrupt bios tasm

9
推荐指数
1
解决办法
2万
查看次数

如何像GUI一样创建`DOS/Unix`

假设使用C/C++,我想知道应该使用哪种库来创建DOS/Linux类型的GUI?请看下面的照片(我不知道这样的GUI的官方名称是什么,因为我从来没有创建过,但现在我必须!).我不是要求一个完整的教程....而是一个重要的开始!

我需要有一个静态页面并在他们的位置更新一些文本(没有新的行和东西).还有一些按钮和复选框,#填充进度条等...

  • DOS示例: MEMTEST-86

  • Linux示例: NVIDIA INSTALLER

c c++ unix user-interface dos

9
推荐指数
1
解决办法
3636
查看次数

标签 统计

dos ×10

batch-file ×3

assembly ×2

c ×2

c++ ×2

cmd ×2

interrupt ×2

ascii ×1

bios ×1

for-loop ×1

java ×1

jvm ×1

memory ×1

nasm ×1

pointers ×1

render ×1

tasm ×1

tsr ×1

turbo-c++ ×1

unix ×1

user-interface ×1