Принудительный размер экрана при тестировании встроенного приложения DOS в командном окне Windows 7 - PullRequest
1 голос
/ 11 января 2011

Я занимаюсь разработкой встроенных DOS с помощью OpenWatcom (отличный компилятор для Windows, предназначенный для 16-битных приложений DOS).Целевое оборудование имеет экран с символами 24x16 (который предположительно эмулирует CGA в некоторой степени), и я пытаюсь заставить окно CMD.EXE на моем компьютере с Windows 7 оставаться фиксированным 24x16 без каких-либо полос прокрутки.1002 * Я использовал оба свойства окна и MODE CON: COLS=24 LINES=16, чтобы получить желаемый размер экрана, но как только мое приложение использует вызовы INT10 BIOS для очистки экрана, режим возвращается к 80x24.

Вот что я использую для очистки экрана:

void cls(void)
{
// Clear screen and reset cursor position to (0,0)
    union REGS  regs; 

    regs.w.cx = 0;          // Upper left
    regs.w.dx = 0x1018;     // Lower right (of 16x24)
    regs.h.bh = 7;          // Blank lines attribute (white text on black)
    regs.w.ax = 0x0600;     // 06 = scroll up, AL=00 to clear

    int86( 0x10, &regs, &regs ); 
}

Есть идеи?Я все еще могу проводить тестирование с разрешением 80x24 (или 80x25), но оно не совсем ведет себя как режим 24x16.

1 Ответ

1 голос
/ 23 февраля 2011

Я знаю, вызов system () не элегантен (см. Ниже), но это прагматическая возможность:

#ifdef deployed
int86( 0x10, &regs, &regs );
#endif
#ifndef deployed
system("MODE CON: COLS=24 LINES=16");  // includes a clear-screen
#endif

Если вы не хотите использовать system (), вы можете использовать consoleHandle, чтобы изменить окно консоли обратно после вашего вызова на прерывание 0x10. Вот функции для изменения размера буфера и размеров окна:

http://msdn.microsoft.com/en-us/library/ms687089%28VS.85%29.aspx

...