Прервать выполнение программы в консоли
Во время выполнения, разумеется. например, если не удовлетворяется какое-либо условие. оператор break; не предлагать.
8 мар 2012 в 15:02
3 ответа 3
Сортировка: Сброс на вариант по умолчанию
Самый правильный способ прервать выполенение кода на каком-либо его учатске — это оператор return . В Вашем случае его просто необходимо вставить в нужное место в методе main .
Если по каким-либо причинам он Вам не подходит, то есть ещё несколько способов:
- System.Environment.Exit() — завершение текущего процесса.
- System.Threading.Thread.CurrentThread.Abort() — заврешение текущего потока исключением System.Threading.ThreadAbortException .
Первый из предложенных вариантов Вам вполне подойдёт, но подумайте ещё раз о структуре программы.
Отслеживать
ответ дан 8 мар 2012 в 15:22
3,453 20 20 серебряных знаков 23 23 бронзовых знака
Нажмите Ctrl+C во время выполнения. Пример
using System; class Hello < static void Main() < for (int i = 0; i < 1000000; i++) Console.WriteLine("hello, world"); >>
Отслеживать
ответ дан 8 мар 2012 в 15:22
34.5k 27 27 золотых знаков 98 98 серебряных знаков 214 214 бронзовых знаков
- return #код_возврата; (если выход должен производится из главной » main()`» функции)
- Environment.Exit(#код_возврата );
Отслеживать
ответ дан 8 мар 2012 в 15:16
2,857 14 14 серебряных знаков 20 20 бронзовых знаков
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.4.26.8280
Как пользоваться DosBox
DosBox — это один из самых популярных эмуляторов операционной системы DOS, который может запускать множество Dos игр и программ прямо на современном компьютере. Windows имеет ограниченную поддержку DOS программ в режиме совместимости, Linux же в принципе не поддерживает такой исполняемый формат. А DosBox создает полноценную среду DOS.
В этой небольшой статье мы рассмотрим как пользоваться Dosbox для запуска старых программ и игр, как монтировать разделы там и как настроить саму программу. Но сначала нам нужно разобрать как ее установить.
Установка DosBox
Вы можете установить DosBox в Windows, Linux или MacOS, программа поддерживает все эти системы. В Linux она есть в официальных репозиториях большинства дистрибутивов. Например, для установки в Ubuntu достаточно выполнить:
sudo apt install dosbox
sudo yum install dosbox
sudo dnf install dosbox
Что касается Windows и Mac, то вам нужно будет загрузить установщик из официального сайта. Последняя версия — 0.74, она вышла в 2012 году, но сейчас все еще получает мелкие исправления у улучшения.
Как пользоваться DosBox
В большинстве случаев DosBox запускается из терминала, а для настройки параметров выполнения команде передаются определенные опции. Сначала рассмотрим синтаксис команды и ее основные опции.
Синтаксис и опции Dosbox
Синтаксис команды очень прост:
$ dosbox опции
Все же остальные параметры задаются с помощью опций и конфигурационного файла. Вот основные опции, которые нам предстоит использовать:
- -fullscreen — включить полноэкранный режим dosbox;
- -noautoexec — не выполнять секцию autoexec конфигурационного файла;
- -c выполнить произвольную команду после запуска;
- -conf — загрузить конфигурационный файл;
- -printconf — вывести адрес конфигурационного файла;
- -eraseconf — удалить конфигурационный файл по умолчанию;
Команды DosBox. Когда вы запустили оболочку DosBox, вы можете в ней работать, для этого можно использовать встроенные команды. Вот некоторые из них:
- MOUNT — монтировать системную папку в окружение DOS;
- MEM — доступное количество памяти;
- CONFIG — записать текущую конфигурацию в файл;
- RESCAN — пересканировать информацию о директориях;
- IMGMOUNT — примонтировать образ iso в оболочку;
- BOOT — запустить другую операционную систему в DosBox;
- LEUB — поменять раскладку клавиатуры.
Конечно, кроме всех этих команд, вы можете использовать привычные команды dos. Теперь давайте рассмотрим несколько примеров как работать с dosbox.
Примеры использования DosBox
В Windows вы можете запустить DosBox из меню пуск, в Linux, из главного меню или через терминал, командой:
Дальше откроется ваша оболочка. Теперь нам нужно взять папку в нашей файловой системе и подключить ее к этой оболочке. Для этого будем использовать MOUNT. Синтаксис команды такой:
> MOUNT метка_диска адрес_папки
Например, если наша игра или программа находится в папке ~/dos, то нужно выполнить:
Готово, теперь переходим на диск C: и смотрим его содержимое:
Мы видим несколько исполняемых файлов, теперь мы можем запустить EXE файл:
Как видите, ответ на вопрос как запустить игру через dosbox совсем не сложный. Таким образом, вы можете запустить любую программу DOS. Но это еще далеко не все. Дальше вы узнаете как настроить dosbox через конфигурационный файл.
Конфигурационный файл dosbox
Сначала давайте посмотрим где находится этот файл:
Вы можете настроить с помощью него множество различных параметров, включая команды, которые будут автоматически выполняться при старте окружения и до тонкой настройки работы процессора. Этот файл разделен на несколько секций, каждая из которых отвечает за определенный аспект работы эмулятора:
- sdl — настройка отображения;
- dosbox — настройка типа эмулятора;
- render — настройки dosbox отрисовки;
- cpu — настройка процессора;
- mixer, midi, sblaster, gus, speaker — настройка звука;
- joystick — настройка джойстика;
- serial — настройка подключенных COM устройств;
- dos — настройка расширений DOS;
- ipx — позволяет включить поддержку сети;
- autoexec — самая интересная для нас секция, позволяет выполнить команды при запуске DosBox.
В секции sdl нас будут интересовать такие опции:
- fullscreen=true — открываем окно в полный экран для игр;
- fulldouble=true — использование двойной буферизации;
- fullresolution=original — использовать максимальное разрешение экрана;
- output=opengl — тип видеосистемы, которая будет использоваться для отрисовки, влияет на производительность. Возможны такие варианты: surface, overlay, opengl, openglnb, а в Windows еще и directx.
Секция dosbox предоставляет несколько настроек машины:
- machine=svga_nolfb — указывает тип эмуляции графической системы, чем новее машина, тем больше цветов и тем выше производительность. Самая новая — svga_nolfb;
- memsize=16 — количество доступной оперативной памяти;
Из секции render нас будет интересовать только одна опция — это scaler. Она позволяет улучшить картинку, которая была рассчитана для отображения с небольшими разрешениями. Оптимальный вариант — scaler=super2xsai.
Секция cpu интересна тем, что позволяет влиять на скорость выполнения программы:
- core=normal — количество ядер процессора, рекомендуется установить в normal, параметр auto может не работать в Ubuntu;
- cycles=auto — количество циклов процессора, напрямую влияет на скорость работы программы. Если игра работает слишком быстро, просто уменьшите это число с помощью клавиши F11 или в противном случае увеличьте — F12;
Последняя секция, которая будет нас интересовать — это autoexec. Просто пропишем туда наши команды монтирования папок. В результате получиться такой конфигурационный файл:
[sdl]
fullscreen=true
fulldouble=true
fullresolution=original
output=opengl
[dosbox]
machine=svga_nolfb
memsize=16
[core]
core=normal
cycles=auto
[autoexec]
MOUNT C: ~/dos
C:
Рекомендую не заменять этим файлом настройки dosbox по умолчанию, а просто исправить нужные параметры. Вы можете пойти еще дальше и сохранить отдельный конфигурационный файл для вашей программы, а потом запускать только ее передав dosbox нужный файл:
dosbox -conf /путь/к/конфигурационному/файлу
Теперь вы знаете как запустить игру dosbox прямо из терминала и без лишних движений. Еще можно создать скрипт и запускать прямо двойным щелчком мыши.
Выводы
В этой небольшой статье мы рассмотрели как пользоваться Dosbox. Как видите, это не сложно. Достаточно знать несколько команд и вы можете сделать практически все, что вам будет нужно. А вы еще пользуетесь DosBox? Для решения каких задач? Напишите в комментариях!
Как использовать DOSBox
wikiHow работает по принципу вики, а это значит, что многие наши статьи написаны несколькими авторами. При создании этой статьи над ее редактированием и улучшением работали, в том числе анонимно, 10 человек(а).
Количество просмотров этой статьи: 145 548.
В этой статье:
DOSBox — это программа, эмулирующая работу MS-DOS, включая звуки, графическое оформление, ввод и сетевые функции. DOSBox в основном используется для запуска старых игр, написанных под MS-DOS. Программу DOSBox можно скачать бесплатно, она поможет вам запустить множество старых любимых игр.
Часть 1 из 4:
Установка DOSBox
Скачайте последнюю версию DOSBox. Вы можете бесплатно скачать эту программу с сайта DOSBox.com .
- Измените локальный диск C: на тот, на который вы хотите установить DOSBox.
- Например, если вы установили DOSBox в папку C:\DOSBox\ , создайте папку C:\DOSGAMES .
- Вы также можете скопировать игру со старой дискеты.
Запустите DOSBox. Откроется виртуальная командная строка с приглашением Z:\> . [1] X Источник информации
Часть 2 из 4:
Монтирование дисков
Ниже описаны способы монтирования дисков в DOSBox. Монтирование папки с играми позволит вам запускать игры, хранящиеся в этой папке. Монтирование компакт-диска позволит вам запускать игры с CD-диска. Монтирование образа диска (файл ISO) позволит вам открывать образы дисков.
- Введите mount C C:\DOSGAMES и нажмите ↵ Enter . Введите C: и нажмите ↵ Enter . Приглашение изменится на C:\> .
- В macOS введите соответствующий путь, например mount C ~/DOSGAMES
- Введите mount D D:\ -t cdrom и нажмите ↵ Enter . Замените D:\ буквой вашего оптического привода. Введите D: и нажмите ↵ Enter . Приглашение изменится на D:\> и вы сможете работать с файлами на компакт-диске.
- cdrom нужно вводить строчными буквами.
- Введите imgmount D C:\ ImagePath\image.iso -t iso и нажмите ↵ Enter . Замените C:\ ImagePath\image.iso на путь к вашему ISO-файлу.
- Введите imgmount D C:\ ImagePath\image.cue -t iso и нажмите ↵ Enter . Замените C:\ ImagePath\image.cue на путь к вашему CUE-файлу. BIN-файл должен иметь то же имя и располагаться в той же папке, что и CUE-файл.
- Введите mount A A:\ -t floppy и нажмите ↵ Enter .
- Windows — C:\Users\ имя пользователя \AppData\Local\DOSBox\dosbox- версия .conf
- Mac — /Macintosh HD/Users/ имя пользователя /Library/Preferences/DOSBox версия Preferences
- В конце файла dosbox.conf вставьте следующие строки:
Как прервать программу в досбокс
Всем привет. Дело такое, у меня задание в универе по языку ассемблер. Задание: Х= 3(А — 2В) +50 – С / 2 , в программе я задал такие значения: a = 10 ,b = 20 ,c = 5,x = ? Код программы:
data segment a dw 10 b dw 20 c dw 5 x dw ? data ends code segment assume cs:code, ds:data start: mov ax, data mov ds, ax mov ax, a ; AX = A sub ax, b ; AX = A - B sub ax, b ; AX = A - 2B add ax, ax ; AX = 2A - 4B add ax, ax ; AX = 4A - 8B sub ax, bx ; AX = 4A - 8B - BX add ax, ax ; AX = 8A - 16B - 2BX add ax, 50 ; AX = 8A - 16B - 2BX + 50 mov bx, 2 ; BX = 2 mov cx, c ; CX = C shr cx, 1 ; CX = C / 2 sub ax, cx ; AX = 8A - 16B - 2BX + 50 - C/2 mov x, ax ; сохранить результат в переменную X quit: mov ax, 4C00h ; завершить программу int 21h code ends end start
Теперь ,проблема. Я не могу найти в DOSBOX результат, т.е x.
(Я знаю,что результат представлен в 16-тиричной системе, и чтобы получить его в десятичную ,мне надо отнять от него FFFF и 1, полученное значение перевести в десятиричную и должно получится -42.5 по идее)
Как прервать программу в досбокс
По умолчанию DOSBox запускается в окне с разрешением 640×400 px.
Переключиться на полный экран можно клавишами Alt+Enter
Полный список горячих клавиш:
Горячие клавиши | Команда |
---|---|
Alt+Enter | На полный экран и обратно. |
Alt+Pause | Приостановить работу DOSBox. |
Ctrl+F1 | Запустить keymapper. |
Ctrl+F4 | Обновить кэш директорий для всех дисков. Подкачка примонтированных образов дисков. |
Ctrl+Alt+F5 | Запуск/Останов |
Ctrl+F5 | Записать скриншот в папку ~/.dosbox/capture/ |
Ctrl+F6 | Запуск/Останов |
Ctrl+Alt+F7 | Запуск/Останов |
Ctrl+Alt+F8 | Запуск/Останов |
Ctrl+F7 | |
Ctrl+F8 | |
Ctrl+F9 | Прервать работу DOSBox |
Ctrl+F10 | |
Ctrl+F11 | |
Ctrl+F12 | |
Alt+F12 |
Полный список встроенных в DOSBox команд:
Команда | Действие |
---|---|
DIR | |
CHDIR | |
ATTRIB | |
CALL | |
CD | |
CHOICE | |
CLS | |
COPY | |
DEL | |
DELETE | |
ERASE | |
ECHO | |
EXIT | |
GOTO | |
HELP | |
IF | |
LOADHIGH | |
LH | |
MKDIR | |
MD | |
PATH | |
PAUSE | |
RMDIR | Удалить директорию |
RD | Удалить директорию |
REM | |
RENAME | |
REN | |
SET | |
SHIFT | |
SUBST | |
TYPE | |
VER |
Полное описание и синтаксис каждой команды можно получить если указать в качестве параметра команды /? через пробел. Например:
Конфигурационный файл DOSBox ~/.dosbox/dosbox-0.74.conf
# This is the configurationfile for DOSBox 0.74. (Please use the latest version of DOSBox) # Lines starting with a # are commentlines and are ignored by DOSBox. # They are used to (briefly) document the effect of each option. [sdl] # fullscreen: Start dosbox directly in fullscreen. (Press ALT-Enter to go back) # fulldouble: Use double buffering in fullscreen. It can reduce screen flickering, but it can also result in a slow DOSBox. # fullresolution: What resolution to use for fullscreen: original or fixed size (e.g. 1024x768). # Using your monitor's native resolution with aspect=true might give the best results. # If you end up with small window on a large screen, try an output different from surface. # windowresolution: Scale the window to this size IF the output device supports hardware scaling. # (output=surface does not!) # output: What video system to use for output. # Possible values: surface, overlay, opengl, openglnb. # autolock: Mouse will automatically lock, if you click on the screen. (Press CTRL-F10 to unlock) # sensitivity: Mouse sensitivity. # waitonerror: Wait before closing the console if dosbox has an error. # priority: Priority levels for dosbox. Second entry behind the comma is for when dosbox is not focused/minimized. # pause is only valid for the second entry. # Possible values: lowest, lower, normal, higher, highest, pause. # mapperfile: File used to load/save the key/event mappings from. Resetmapper only works with the defaul value. # usescancodes: Avoid usage of symkeys, might not work on all operating systems. fullscreen=false fulldouble=false fullresolution=original windowresolution=original output=surface autolock=true sensitivity=100 waitonerror=true priority=higher,normal mapperfile=mapper-0.74.map usescancodes=true [dosbox] # language: Select another language file. # machine: The type of machine tries to emulate. # Possible values: hercules, cga, tandy, pcjr, ega, vgaonly, svga_s3, svga_et3000, svga_et4000, svga_paradise, vesa_nolfb, vesa_oldvbe. # captures: Directory where things like wave, midi, screenshot get captured. # memsize: Amount of memory DOSBox has in megabytes. # This value is best left at its default to avoid problems with some games, # though few games might require a higher value. # There is generally no speed advantage when raising this value. language= machine=svga_s3 captures=capture memsize=16 [render] # frameskip: How many frames DOSBox skips before drawing one. # aspect: Do aspect correction, if your output method doesn't support scaling this can slow things down!. # scaler: Scaler used to enlarge/enhance low resolution modes. # If 'forced' is appended, then the scaler will be used even if the result might not be desired. # Possible values: none, normal2x, normal3x, advmame2x, advmame3x, advinterp2x, advinterp3x, hq2x, hq3x, 2xsai, super2xsai, supereagle, tv2x, tv3x, rgb2x, rgb3x, scan2x, scan3x. frameskip=0 aspect=false scaler=normal2x [cpu] # core: CPU Core used in emulation. auto will switch to dynamic if available and appropriate. # Possible values: auto, dynamic, normal, simple. # cputype: CPU Type used in emulation. auto is the fastest choice. # Possible values: auto, 386, 386_slow, 486_slow, pentium_slow, 386_prefetch. # cycles: Amount of instructions DOSBox tries to emulate each millisecond. # Setting this value too high results in sound dropouts and lags. # Cycles can be set in 3 ways: # 'auto' tries to guess what a game needs. # It usually works, but can fail for certain games. # 'fixed #number' will set a fixed amount of cycles. This is what you usually need if 'auto' fails. # (Example: fixed 4000). # 'max' will allocate as much cycles as your computer is able to handle. # # Possible values: auto, fixed, max. # cycleup: Amount of cycles to decrease/increase with keycombo.(CTRL-F11/CTRL-F12) # cycledown: Setting it lower than 100 will be a percentage. core=auto cputype=auto cycles=auto cycleup=10 cycledown=20 [mixer] # nosound: Enable silent mode, sound is still emulated though. # rate: Mixer sample rate, setting any device's rate higher than this will probably lower their sound quality. # Possible values: 44100, 48000, 32000, 22050, 16000, 11025, 8000, 49716. # blocksize: Mixer block size, larger blocks might help sound stuttering but sound will also be more lagged. # Possible values: 1024, 2048, 4096, 8192, 512, 256. # prebuffer: How many milliseconds of data to keep on top of the blocksize. nosound=false rate=44100 blocksize=1024 prebuffer=20 [midi] # mpu401: Type of MPU-401 to emulate. # Possible values: intelligent, uart, none. # mididevice: Device that will receive the MIDI data from MPU-401. # Possible values: default, win32, alsa, oss, coreaudio, coremidi, none. # midiconfig: Special configuration options for the device driver. This is usually the id of the device you want to use. # See the README/Manual for more details. mpu401=intelligent mididevice=default midiconfig= [sblaster] # sbtype: Type of Soundblaster to emulate. gb is Gameblaster. # Possible values: sb1, sb2, sbpro1, sbpro2, sb16, gb, none. # sbbase: The IO address of the soundblaster. # Possible values: 220, 240, 260, 280, 2a0, 2c0, 2e0, 300. # irq: The IRQ number of the soundblaster. # Possible values: 7, 5, 3, 9, 10, 11, 12. # dma: The DMA number of the soundblaster. # Possible values: 1, 5, 0, 3, 6, 7. # hdma: The High DMA number of the soundblaster. # Possible values: 1, 5, 0, 3, 6, 7. # sbmixer: Allow the soundblaster mixer to modify the DOSBox mixer. # oplmode: Type of OPL emulation. On 'auto' the mode is determined by sblaster type. All OPL modes are Adlib-compatible, except for 'cms'. # Possible values: auto, cms, opl2, dualopl2, opl3, none. # oplemu: Provider for the OPL emulation. compat might provide better quality (see oplrate as well). # Possible values: default, compat, fast. # oplrate: Sample rate of OPL music emulation. Use 49716 for highest quality (set the mixer rate accordingly). # Possible values: 44100, 49716, 48000, 32000, 22050, 16000, 11025, 8000. sbtype=sb16 sbbase=220 irq=7 dma=1 hdma=5 sbmixer=true oplmode=auto oplemu=default oplrate=44100 [gus] # gus: Enable the Gravis Ultrasound emulation. # gusrate: Sample rate of Ultrasound emulation. # Possible values: 44100, 48000, 32000, 22050, 16000, 11025, 8000, 49716. # gusbase: The IO base address of the Gravis Ultrasound. # Possible values: 240, 220, 260, 280, 2a0, 2c0, 2e0, 300. # gusirq: The IRQ number of the Gravis Ultrasound. # Possible values: 5, 3, 7, 9, 10, 11, 12. # gusdma: The DMA channel of the Gravis Ultrasound. # Possible values: 3, 0, 1, 5, 6, 7. # ultradir: Path to Ultrasound directory. In this directory # there should be a MIDI directory that contains # the patch files for GUS playback. Patch sets used # with Timidity should work fine. gus=false gusrate=44100 gusbase=240 gusirq=5 gusdma=3 ultradir=C:\ULTRASND [speaker] # pcspeaker: Enable PC-Speaker emulation. # pcrate: Sample rate of the PC-Speaker sound generation. # Possible values: 44100, 48000, 32000, 22050, 16000, 11025, 8000, 49716. # tandy: Enable Tandy Sound System emulation. For 'auto', emulation is present only if machine is set to 'tandy'. # Possible values: auto, on, off. # tandyrate: Sample rate of the Tandy 3-Voice generation. # Possible values: 44100, 48000, 32000, 22050, 16000, 11025, 8000, 49716. # disney: Enable Disney Sound Source emulation. (Covox Voice Master and Speech Thing compatible). pcspeaker=true pcrate=44100 tandy=auto tandyrate=44100 disney=true [joystick] # joysticktype: Type of joystick to emulate: auto (default), none, # 2axis (supports two joysticks), # 4axis (supports one joystick, first joystick used), # 4axis_2 (supports one joystick, second joystick used), # fcs (Thrustmaster), ch (CH Flightstick). # none disables joystick emulation. # auto chooses emulation depending on real joystick(s). # (Remember to reset dosbox's mapperfile if you saved it earlier) # Possible values: auto, 2axis, 4axis, 4axis_2, fcs, ch, none. # timed: enable timed intervals for axis. Experiment with this option, if your joystick drifts (away). # autofire: continuously fires as long as you keep the button pressed. # swap34: swap the 3rd and the 4th axis. can be useful for certain joysticks. # buttonwrap: enable button wrapping at the number of emulated buttons. joysticktype=auto timed=true autofire=false swap34=false buttonwrap=false [serial] # serial1: set type of device connected to com port. # Can be disabled, dummy, modem, nullmodem, directserial. # Additional parameters must be in the same line in the form of # parameter:value. Parameter for all types is irq (optional). # for directserial: realport (required), rxdelay (optional). # (realport:COM1 realport:ttyS0). # for modem: listenport (optional). # for nullmodem: server, rxdelay, txdelay, telnet, usedtr, # transparent, port, inhsocket (all optional). # Example: serial1=modem listenport:5000 # Possible values: dummy, disabled, modem, nullmodem, directserial. # serial2: see serial1 # Possible values: dummy, disabled, modem, nullmodem, directserial. # serial3: see serial1 # Possible values: dummy, disabled, modem, nullmodem, directserial. # serial4: see serial1 # Possible values: dummy, disabled, modem, nullmodem, directserial. serial1=dummy serial2=dummy serial3=disabled serial4=disabled [dos] # xms: Enable XMS support. # ems: Enable EMS support. # umb: Enable UMB support. # keyboardlayout: Language code of the keyboard layout (or none). xms=true ems=true umb=true keyboardlayout=auto [ipx] # ipx: Enable ipx over UDP/IP emulation. ipx=false [autoexec] # Lines in this section will be run at startup. # You can put your MOUNT lines here.
- Вы здесь:
- Главная
- Desktop
- DOSBox DOS под Linux
- Linux на Orange Pi 3 LTS
- Orange Pi 3 LTS
- Linux на Orange Pi Zero 2
- gsettings конфигурация
- Установка приложений
- Gnome-tweaks
- Установка Fusion360 на Linux
- Отключить автоматическую блокировку экрана
- KNetWalk игра Компьютерная сеть
- Raspberry Pi OS на VirtualBox
- Raspberry Pi первый запуск
- ALT Linux загрузочная флешка
- ALT Linux для микрокомпьютеров
- OS RaspberryPy русский
- Raspberry Pi OS
- Inkscape
- Adobe Flash Player в Ubuntu
- Ubuntu 20.04 установка
- Raspbian добавить пользователя
- idesk значки рабочего стола
- slim миниатюрный менеджер дисплеев
- ObMenu
- OpenBox на Debian
- Детский компьютер
- Debian с Raspberry Pi Desktop для PC
- Author Login
- Карта сайта
Завершение программы при помощи ret
Есть программа, которая считывает сама себя и перезаписывает свой код. Мне непонятны такие комментарии к ней: при загрузке COM-программы вершина стека устанавливается на предпоследний байт нашего сегмента, т. е. sp=0FFFEh. При выполнении команды «ближний call» sp уменьшается на 2, т. е. становится равным 0FFFCh. Это свидетельствует о том, что при вызове подпрограммы процессор заносит в стек адрес возврата. Поэтому и не происходит путаницы при работе: выходить ли в DOS или вернуться из процедуры. Так или иначе, выход в DOS командой ret в COM-программах происходит только в том случае, если sp=0FFFEh, и программа сама не затерла первые 2 байта по смещению 0000h (т. е. команду int 20h) того сегмента, куда она загрузилась изначально. Сама программа:
CSEG segment assume cs:CSEG, ds:CSEG, es:CSEG, ss:CSEG org 100h begin: mov dx, offset file_name call open_file jc error_file ;Открыли файл mov bx, ax mov ah, 3Fh mov cx, offset finish - 100h mov dx, offset begin int 21h ;Прочитали файл call close_file ;Выводим сообщение mov ah, 9 mov dx, offset mess_ok int 21h ret ;Не смогли найти файл error_file: mov ah, 2 mov dl, 7 int 21h ret ;Процедуры ;Открытие файла open_file proc cmp handle, 0FFFFh jne quit_open mov ax, 3D00h int 21h mov handle, ax ret quit_open: stc ret handle dw 0FFFFh open_file endp close_file proc mov ah, 3Eh mov bx, handle int 21h ret close_file endp ;Данные file_name db 'prog09.com', 0 mess_ok db 'All is ok!', 0Ah, 0Dh, '$' finish equ $ CSEG ends end begin
1) Непонятно, что такое «ближний call». 2) Механика работы ret. Если эта инструкция снимает со стека адрес возврата, стало быть, в DOS она всегда увеличивает регистр стека на 2? 3) Если последнее верно, то остается понять, как из FFFE получили 0000. Здесь вычисления, похожие на модулярную арифметику: n mod n = 0. Если бы мы увеличили регистр стека на 1, то из FFFE получилось бы FFFF mod FFFF = 0000. Но ret увеличивает указатель на два, и поэтому должно получиться 0001. Что я говорю не так? И еще. Почему по смещению 0000 находится int 20h?
DOSBox для чайников. Инструкция по запуску классических игр под Windows
В этой инструкции вы найдете несколько простых шагов по установке и настройке DOSBox — эмулятора ПК под управлением старенькой операционной системы MS DOS. Обычно DOSBox включен в комплект поставки игры при её покупке в Steam или GOG. Но если у вас остались старые игры, которые хочется запустить, а сделать это в Windows 10 уже не получается, то настройте эмулятор самостоятельно.
Примечание. Эта инструкция предназначена для пользователей Windows.
Шаг 1. Установка DOSBox
1. Заходим на сайт www.dosbox.com, переходим в раздел Download, находим версию для Windows (Win32 installer), скачиваем её. Скачивание происходит через сервис SourceForge, на котором располагаются многие проекты с открытым исходным кодом.
Примечание: На момент написания обзора актуальная версия эмулятора — 0.74-3. Номер версии меньше единицы не означает, что эмулятор — не законченный проект. DOSBox уже давно работает стабильно и используется, в том числе, для запуска старых игр в Steam и других онлайн-магазинах.
Но ничто не бывает идеальным, и разработчики находят и исправляют ошибки в приложении, так что время от времени следует обновлять DOSBox на своем ПК. Просто установите новую версию эмулятора поверх старой. При необходимости измените файл конфигурации (шаг 3, пункт 7).
2. Запускаем инсталлятор, устанавливаем эмулятор. Инсталлятор создает иконку на рабочем столе, а также добавляет DOSBox в меню «Пуск». Если вы запустите DOSBox сразу после установки, то увидите командную строку.
3. Закройте эмулятор, если вы его запустили. Всю настройку будем производить в Windows.
Шаг 2. Дополнительные инструменты
1. На странице DOSBox размещены также ссылки на различные графические оболочки для эмулятора. Вы можете воспользоваться одной из них. В этом случае читать этот гайд вам не потребуется, но, возможно, придется искать гайд по выбранному вами приложению. Мы предлагаем воспользоваться другим способом работы с DOSBox.
2. Так как планируется самостоятельная установка игр и приложений для MS-DOS, а также их дальнейшая настройка, лучше всего будет «вернуться» в 90-е и создать программную среду, максимально схожую с той, что была в те времена. Драйвера мыши, дополнительной памяти, привода компакт дисков и т. п. нам не потребуются. Все это включено в состав эмулятора. Но для комфортной работы в DOS потребуется файловый менеджер.
3. В качестве файлового менеджера лучше всего воспользоваться известным DOS Navigator, разработанного компанией RitLabs. Версию 1.51 можно скачать с сайта компании, или воспользоваться OpenSource версией, которая доступна на сайте www.dnosp.com (версия DOS/Real Mode).
4. Если у вас отсутствует физический привод компакт-дисков, то DOSBox может подключать их образы без использования сторонних программ (в форматах iso и cue). Или можно воспользоваться любым другим эмулятором приводов CD, в том числе встроенного в Windows 10.
Примечание. При использовании сторонних программ, образы дисков в виртуальном приводе придется менять только при выключенном DOSBox.
Шаг 3. Предварительная настройка
1. Теперь нужно настроить структуру каталогов на жестком диске. В любом удобном месте с помощью проводника Windows необходимо создать каталог DOS (вы можете назвать его иначе, но в этом случае не забудьте изменить команды, которые будете прописывать в конфигурационные файлы). Проще всего его создать в корневом каталоге диска C.
C:\DOS
2. В каталоге DOS создайте подкаталоги DN, GAMES, IMAGES.
C:\DOS\DN C:\DOS\GAMES C:\DOS\IMAGES
3. В каталог DN распакуйте из архива DOS Navigator.
4. В каталоге IMAGES разместите снятые образы дисков приобретенных игр. Если игры не требуют установки, то просто скопируйте их файлы в свой каталог в папке GAMES.
5. Самое время настроить DOSBox. Откройте меню «Пуск» и в группе DOSBox запустите DOSBox Options. В Блокноте Windows откроется текстовый конфигурационный файл, и туда нужно будет внести некоторые изменения.
6. Настройки по умолчанию адекватны большинству конфигураций ПК, так что трогать их не стоит. Разве что можно включить полноэкранный режим при запуске. Для этого нужно поменять строку
fullscreen=false
fullscreen=true
Но лучше включать полноэкранный режим после запуска кнопками Alt+Enter.
7. В конце файла конфигурации найдите раздел
[autoexec]
и скопируйте под эту строку этот код:
mount C C:\DOS # Указан путь к физическому или виртуальному приводу CD имеющий в Windows обозначение D:\ # Замените путь к приводу, если он имеет другое обозначение mount D D:\ -t cdrom C: cls C:\DN\dn.com exit
Если вы меняли пути расположения каталога DOS, то измените путь на правильный в первой строчке.
Если вы не используете эмулятор привода компакт-дисков, а предпочитаете пользоваться встроенными средствами DOSBox, то строчку
mount D D:\ -t cdrom
замените на такую:
imgmount D C:\DOS\IMAGES\disk1.iso C:\DOS\IMAGES\disk2.iso . -t cdrom
где C:\DOS\IMAGES\ — путь в Windows, где хранятся ваши образы дисков, а disk1.iso, disk2.iso и т. д. — имена файлов образов, которые вы хотите подключить к виртуальной машине. Переключение между дисками в DOSBox осуществляется клавишами Ctrl+F4.
Примечание. Будьте внимательнее при написании имен файлов и путей. Особое внимание обращайте на расширение файлов iso или img. Ошибка в написании приведет к тому, что команда при запуске DOSBox выполнена не будет, и ни один из образов не будет подключен.
Закройте Блокнот, сохраните файл.
Шаг 4. Устанавливаем, играем
1. Смонтируйте на виртуальный привод нужный вам образ диска или вставьте диск в дисковод, если не используете средства DOSBox и если это требуется для установки или самой игры.
2. Запустите DOSBox. Вы попадете в DOS Navigator. Если вы не знакомы с двухпанельными файловыми менеджерами 90-х, то это не беда.
- Alt+F1 и Alt+F2 — выбор диска на левой и правой панели, соответственно.
- Tab — переключение между панелями.
- Кнопки со стрелками на клавиатуре — перемещение курсора.
- Enter — войти в каталог или запустить приложение. DOS Navigator подсвечивает исполняемые файлы и выводит их в начале списка.
- Alt+X — выйти из приложения (автоматически закроется DOSBox).
- Alt+F9 — играть в лучший тетрис на ПК.
3. Если игра требует установки, то установите её с диска D. В DOS установочная программа, как правило, имеет название файла INSTALL.EXE, в отличие от SETUP.EXE в Windows. Установку производите в каталог C:\GAMES виртуальной DOS-машины.
4. После установки нужно настроить звук. Обычно установочная программа предложит это сделать сразу после копирования файлов. Если это не произошло, перейдите в каталог установленной игры, и запустите программу настройки звука (обычно она имеет название SETUP.EXE или SETSOUND.EXE). Настройки необходимо выбрать для драйвера digital audio и драйвера midi audio.
5. DOSBox эмулирует звуковую карту Sound Blaster 16, поэтому при выборе звуковой карты выбирайте эту модель. Если её в списке нет, то можно выбрать обычный Sound Blaster или Pro. Как правило, программы настройки автоматически подбирают правильные параметры карты. Если этого не произошло, их можно ввести в программе настройки вручную:
I/O ADRESS=220 IRQ=7 DMA=1
Эти параметры прописаны в файле конфигурации DOSBox.
6. Найдите в интернете патч с последней версией. При необходимости, обновите игру до последней версии.
7. Все готово! Добро пожаловать в 90-е! Запускайте.