640 КБ на самом деле хватит всем

https://blog.sourcerer.io/640k-really-is-enough-for-anyone-314f393ca5b8
  • Перевод
image

Никогда не сдавайтесь


Действительно ли Билл Гейтс произнёс фразу «640 КБ должно хватить всем»? Её история довольно туманна, однако чаще всего её приписывают Биллу, так что, возможно, он действительно такое говорил.

Его довольно часто за это высмеивали. Мысль о общем пространстве памяти размером всего 640 КБ по современным стандартам смехотворна. В этот размер не уместится даже исполняемые файлы большинства программ-установщиков.

Для сравнения: калькулятор в Windows 10 занимает в состоянии простоя 16,2 МБ оперативной памяти — почти в 26 раз больше, чем объём доступной DOS-программам памяти в 1980-х.

Странные дела


Поверите ли вы мне, если я скажу, что до сих пор существует активное сообщество, использующее эту устаревшую платформу и разрабатывающее для неё ПО?

Наверно, вашим первым вопросом будет «Но зачем?» И я хорошо вас понимаю. Давайте рассмотрим некоторые группы, которые до сих пор заинтересованы во вложениях усилий в DOS.

Разработчики legacy-систем

Сегодня по-прежнему существует множество программ, которые выполняются в DOS. Промышленные управляющие программы, системы в точках продаж и научные инструменты — вот только некоторые из примеров областей применения, в которых даже сегодня используется DOS. С течением времени большинство этих программ были портированы на другие системы или полностью переписаны, но часть всё же сохранилась.

Незатратные системы реального времени

DOS в сущности является операционной системой реального времени (ОСРВ). Она не была специально разработана для этой цели, но её минималистичный дизайн позволяет отнести её к другим подобным системам.

ОСРВ характеризуются предсказуемой задержкой программных и аппаратных запросов. Так как DOS имеет минимальный API без внутренней многозадачности, стабильность задержек вызовов операционной системы довольно высока.

Хотя уже существуют более современные примеры систем реального времени с улучшенным дизайном и разработанные специально для этой цели, тончайший интерфейс DOS между приложением и оборудованием даёт ей преимущество в этой области использования. Поскольку такие системы, как FreeDOS (которую я рассмотрю ниже) имеют открытые исходники и распространяются бесплатно, они являются хорошей альтернативой другим ОСРВ.

Ностальгические видеоигры

Современные видеоигры потрясающи. Они требуют огромной мощи 3D, но графика, звук и геймплей иногда настолько реалистичны, что их можно спутать с реальностью. Оборудование виртуальной реальности ещё больше усиливает это ощущение, позволяя игрокам полностью погрузиться в среду игры.

Но несмотря на весь этот прогресс, многие геймеры, бывшие детьми в 80-х и начале 90-х, с любовью вспоминают времена, когда примитивная (по современным стандартам) графика и синтезаторные звуки заставляли их заполнять пробелы собственным воображением.

Несмотря на то, что оборудование оставило ограничения эры DOS далеко позади, по-прежнему существует активная сцена DOS-геймеров. Движимые ностальгией и любовью к программированию, разработчики пишут игры, запускаемые на старых системах, в том числе и на PC, которые изначально поставлялись с DOS.

Если вы считаете, что этот рынок ограничен кучкой пенсионеров, пытающихся вернуться в своё технологическое детство, то вы ошибаетесь. Дэвид Мюррей, больше известный в YouTube как The 8-bit Guy, имеет более полумиллиона подписчиков, которые еженедельно исследуют территорию ностальгического компьютерного «железа». Он даже написал стратегию реального времени для Commodore 64 под названием PlanetX2. Проект имел такой успех, что Дэвид распродал все физические запасы носителей с игрой и планирует создать сиквел для платформы DOS.

Запустите DOS


Существует множество способов запуска DOS. Возможно, у вас даже сохранился компьютер, на котором можно запустить её прямо сейчас. Но поскольку мы хотим плотно работать с этой операционной системой, то воспользуемся способом, в котором применяется бесплатное ПО, работающее почти на любом компьютере.

Для начала немного поговорим о лицензии. По некоторым данным, Microsoft сделала MS-DOS 6.22 общественным достоянием, но мне не удалось найти этому подтверждения. Поскольку ПО можно легко скачать из достаточно безопасных онлайн-источников, я не сторонник установки того, что может нарушать права на копирование. Даже если у вас есть законно приобретённая копия (а я подозреваю, что она есть у многих), её установка на виртуальную машину может быть юридически рискованным поступком.

Чтобы упростить установку, мы воспользуемся FreeDOS. FreeDOS — это клон DOS с открытым исходным кодом, написанный Джимом Холлом. Джим начал разработку в июне 1994 года, когда Microsoft заявила о том, что больше не будет продавать и поддерживать MS-DOS. Через несколько недель к проекту присоединились Пэт Виллэни и Тим Норман. Всего через несколько месяцев появилась версия 0.01. Сегодня мы пользуемся версией 1.2, выпущенной на Рождество 2016 года.

Сначала мы зайдём на веб-сайт FreeDOS и скачаем ISO-образ стандартного установщика на CD-ROM. Также можно скачать USB-версию, но с учётом различий в «железе», BIOS и т.д. мы не будем рассматривать здесь этот способ. Вместо этого мы воспользуемся виртуализацией.

Я протестировал FreeDOS и с VirtualBox Oracle, и с VMware Workstation / Player. Оба продукта работают хорошо, однако VMware обеспечивает немного более качественную эмуляцию BIOS и эмулирует PC speaker, используемый во многих играх для DOS. В примерах ниже я буду использовать VMware Workstation, но в принципе подойдёт любая система.

По умолчанию вариантами установки для FreeDOS являются VirtualBox и VMware. Вас может удивить, насколько мало выделяется ОЗУ и дискового места. Обычно я создаю для DOS двухгигабайтный диск, но и выбранных по умолчанию 512 МБ будет вполне достаточно.

Установка FreeDOS проста, достаточно загрузиться в виртуальной машине с ISO-образа (запрос файла ISO будет выдан при запуске или при создании виртуальной машины) и следовать экранным подсказкам. После того, как FreeDOS разобьёт диск и перезагрузится, снова выберите «Install to Hard Disk». Выберите «Full Installation» или «Full Installation with Sources», если вы любите видеть, как всё работает. Вы читаете эту статью, поэтому скорее всего так и есть, тогда почему бы не установить и исходники?

После установки необходимо будет перезагрузиться. На этот раз вместо выбора «Install to Hard Disk» в загрузочном меню CD выберите «Boot from System Hard Disk». Вариант по умолчанию Jemmex (with no EMS) вполне подходит для стандартной загрузки, особенно если вы хотите заняться разработкой.

Технически система FreeDOS готова к работе, только пока ещё полностью «голая». В таком состоянии удобно запускать игры и программы DOS, но оно не совсем подходит для разработки, потому что у нас нет важных инструментов.

Милый FDimples


Теперь настало время установить в FreeDOS немного программного обеспечения. ОС содержит в себе замечательную систему правления пакетами FDimples. Чтобы воспользоваться ею, введите:

fdimples

На этом экране можно установить широкий спектр ПО. Здесь у нас есть два варианта — установить все инструменты разработки, или просто установить всё. Второй вариант может показаться перебором, но помните, что по современным стандартам все эти программы займут очень мало места, поэтому на диске останется ещё много пространства.


Потрясающий пакетный менеджер с милым названием.

Для перемещения между категориями и пакетами можно использовать клавиши со стрелками. Пробелом выбираются отдельные пакеты, ENTER — целые категории. Какой бы вариант вы ни выбрали, обязательно отметьте категорию Development. Для запуска установки нажимайте TAB, пока не будет выбрана кнопка OK, затем нажмите ENTER.

От C++ не спрятаться


Но вы и не стремитесь, не так ли? C++ замечателен, и благодаря Ди Джею Делори производительность и возможности GNU Compiler Collection теперь доступны и в DOS.

Более того, с помощью поставляемого в комплекте расширителя DOS CWSDPMI программы могут использовать защищённый режим и компилироваться в 32-битные исполняемые файлы без малейших проблем. Вы сможете преодолеть барьер 640 КБ с большим запасом. Выкусите, мистер Гейтс!

Чтобы проверить работоспособность среды разработки, давайте создадим новую папку и тестовый проект:

mkdir C:\src
mkdir c:\src\hello
rhide c:\src\hello\hello.cpp

При этом запустится среда разработки RHIDE. Она не дотягивает до уровня Visual Studio, но для наших нужд разработки вполне достаточна. Мне она напоминает среду Borland Turbo-C, с которой связано множество приятных воспоминаний.


От этого интерфейса по телу разливается тепло и пробегают мурашки.

Вот обязательный тестовый код:

#include <iostream>
using namespace std;

int main() {
  cout << “Hello, World!\n”;
  return 0;
}

Теперь можно запустить код с помощью меню «Run» (или нажав ALT+R, а затем R или CTRL+F9). Вы заметите, что можно пользоваться мышью и горячими клавишами. Поначалу мыши достаточно, но стоит запомнить горячие клавиши, которые указаны рядом с различными элементами меню. Проведя какое-то время в RHIDE, вы запомните самые важные из них и ваша продуктивность значительно увеличится!

Более интересный пример


Давайте сделаем что-нибудь более интересное. Для начала давайте создадим рабочее пространство:

mkdir c:\src\example
rhide c:\src\example\example.cpp

В этом примере мы покажем, как задаются видеорежимы, указываются пиксели и выполняется управление цветом в режиме VGA 320x200x256.

#include <iostream>
#include <dpmi.h>
#include <unistd.h>
#include <go32.h>
#include <sys/farptr.h>
#include <stdlib.h>
#include <dos.h>
 
#define COLOR_WHITE 15
#define MAX_WIDTH 320
#define MAX_HEIGHT 200

using namespace std;

void set_video_mode(int mode) {
  // Создаём структуру для регистров
  __dpmi_regs r;
 
  // Задаём AX значение видеорежима
  r.x.ax = mode;
 
  // Вызываем int 10 (установка видеорежима BIOS)
  __dpmi_int(0x10, &r);
}

void put_pixel(int x, int y, int c) {
  // Видеопамять VGA находится по адресу A000, поэтому давайте выполнить запись в него.
  _farpokeb(_dos_ds, 0xA0000+y*320+x, c);
}

void clear_pixel(int x, int y) {
  // Мы просто записываем пиксель 0, чтобы очистить точку
  _farpokeb(_dos_ds, 0xA0000+y*320+x, 0);
}

void draw_effect() {
  // Текущие координаты x и y
  int x = 0;
  int y = 0;

  // Для каждого до y_max записываем пиксель
  for (y = 0; y < MAX_HEIGHT, y++) {
    for (x=0; x < MAX_WIDTH, x++) {
      put_pixel(x, y, rand()%(15+1));
    }
  }
}

int main() {
  // Устанавливаем видеорежим 13h (320x200x256)
  set_video_mode(0x13);

  // Отрисовываем эффект
  draw_effect();

  // Ожидаем нажатия клавиши ENTER
  cin.ignore();

  // Возвращаемся в текстовый режим
  set_video_mode(3);

  return 0;
}

Пример с движением


В этом примере мы на основе предыдущего примера добавим управляемое пользователем движение. Мы будем использовать клавиши со стрелками, чтобы перемещать пиксель по экрану. Это станет фундаментом того, что может превратиться в видеоигру.

#include <iostream>
#include <dpmi.h>
#include <unistd.h>
#include <go32.h>
#include <sys/farptr.h>
#include <stdlib.h>
#include <dos.h>

#define COLOR_WHITE 15
#define MAX_WIDTH 320
#define MAX_HEIGHT 200

#define KEY_ESC 283
#define KEY_UP 18432
#define KEY_DOWN 20480
#define KEY_LEFT 19200
#define KEY_RIGHT 19712

using namespace std;

void set_video_mode(int mode) {
  // Создаём структуру для регистровs
  __dpmi_regs r;
 
  // Задаём AX значение видеорежима
  r.x.ax = mode;
 
  // Вызываем int 10 (установка видеорежима BIOS)
  __dpmi_int(0x10, &r);
}

void put_pixel(int x, int y, int c) {
  // Видеопамять VGA находится по адресу A000, поэтому давайте выполнить запись в него.
  _farpokeb(_dos_ds, 0xA0000+y*320+x, c);
}

void clear_pixel(int x, int y) {
  // Мы просто записываем пиксель 0, чтобы очистить точку
  _farpokeb(_dos_ds, 0xA0000+y*320+x, 0);
}

int get_key() {
  // Создаём структуру для регистров
  __dpmi_regs r;
  // Присваиваем AH значение 00h для вызова BIOS
  r.x.ax = 0x0000;
  // Вызываем int 16 (обработчик клавиатуры BIOS)
  __dpmi_int(0x16, &r);
  // Возвращаем значение AX (полный скан-код)
  return r.x.ax;
}

int main() {

  // Устанавливаем видеорежим 13h (320x200x256)
  set_video_mode(0x13);

  // Основной цикл
  int running = 1;
  int curkey;
  // Начинаем с середины экрана
  int char_x = MAX_WIDTH / 2;
  int char_y = MAX_WIDTH / 2;
  while (running) {
    // Если нажата клавиша
    curkey = get_key();
    // Что бы ни случилось, мы всё равно должны очищать пиксель
    clear_pixel(char_x, char_y);
    switch (curkey) {
      case KEY_ESC:
        // Нажата клавиша ESC, поэтому выполняем выход
        running = 0;
        break;
      case KEY_UP:
        char_y--;
        break;
      case KEY_DOWN:
        char_y++;
        break;
      case KEY_LEFT:
        char_x--;
        break;
      case KEY_RIGHT:
        char_x++;
        break;
    }
    // Отрисовываем "персонажа" на экране
    put_pixel(char_x, char_y, COLOR_WHITE);
  }
  
  // Возвращаемся в текстовый режим
  set_video_mode(3);
  return 0;
}

Надеюсь, этот пример дал вам базовое понимание того, как обрабатывать ввод пользователя для перемещения персонажа по экрану. Некоторые части кода несовершенны.

Например, для получения нажатий клавиатуры мы используем INT 16. Это работает хорошо, но приостанавливает работу программы, пока она ждёт ввода. В более сложном примере мы бы использовали INT 16 AH = 01 для проверки состояния клавиатуры и возвращались бы к выполнению программы, если ввод с клавиатуры отсутствует. Это даст нам время на отрисовку другой графики. В нашем примере это работает нормально, но для более динамичной игры нужно будет писать обработчик событий клавиатуры с этими функциями.

Кроме того, put_pixel и clear_pixel работают достаточно хорошо, но оба они не так эффективны, как создание буфера кадра и запись в него. Буфер памяти можно с любой нужной скоростью копировать в видеопамять с помощью memcpy(). Пример его использования может выглядеть как-то так:

#include <sys/movedata.h>

char buffer[320x200];
int i;
 
// Изменяем массив буфера, как любой другой массив
 
// Периодически копируем буфер в видеопамять
dosmemput(buffer, 320*200, 0xA0000);

На этом мы экономим множество изменений защищённого/реального режима, что значительно ускоряет операции записи. Кроме того, можно выполнять запись на экран во время выбора, что позволяет производить в фоне другие операции — воспроизведение музыки, запись на диск и загрузку графики.

Лучшее из обоих миров


Даже несмотря на то, что C++ — высокоуровневый язык, вы можете заметить, что в этом примере мне всё равно пришлось использовать псевдоассемблер. Такова природа всей системы. На ранних этапах программирования в DOS без BASIC код часто писался на языке ассемблера, и существовало несколько стандартных библиотек.

Однако в таком подходе есть своя красота. Вместо того, чтобы писать целиком на ассемблере, я могу воспользоваться мощью вызовов прерываний языка ассемблера в сочетании с удобством C++, не говоря уже о мощной системе управления памятью в защищённом режиме, доступной благодаря DJGPP.

Можно сказать, что используя эту систему, я жульничаю, и если относиться к этому строго, то так и есть. До появления расширителей DOS разработчикам приходилось мучиться, пытаясь уместить всё в 640 КБ. И если смотреть реалистично, у них редко было даже 640 КБ. На большинстве DOS-машин после загрузки драйверов и TSR (резидентных программ) едва находилось 600 КБ ОЗУ.

Этого было достаточно для простых программ, но когда требовались более сложные структуры данных, приходилось использовать расширители DOS или EMS (расширенную память). Код может быть и умещался в 600 КБ, но пространства данных в сложных программах и играх требовали места для роста, а барьер в 1 МБ был невероятно мал. Расширители DOS наподобие CWSDPMI были настоящими спасителями!

Подводим итог


Надеюсь, вам понравилось наше путешествие в Страну ностальгии. Программирование под DOS — это очень интересная область. В любой другой операционной системе сложно так близко подобраться к голому «железу», а без использования DJGPP трудно добиться равновесия между функциональностью и гибкостью.

Хочется, чтобы у нас было больше времени на более сложные примеры программ. С этим комплектом разработки наши возможности поистине безграничны. Мы получаем молниеносность программирования под DOS, графический потенциал системы VGA (которая, несмотря на свою древнюю природу, по-прежнему может создавать интересную игровую графику) и мощь стандартной библиотеки C.

Благодаря C++ мы можем создать класс персонажа для героя видеоигры, назначить ему переменные (например, текущее положение на экране, здоровье и силу) и управлять им с помощью клавиш со стрелками. Поскольку у нас есть до 4 ГБ адресуемого пространства (по крайней мере, теоретически), мы можем считывать с диска сложную тайловую графику или даже целые JPG пререндеренной графики. С помощью этой системы вполне возможно создать почти современную видеоигру.

Но у неё будет одна особенность, которой нет сегодня ни у одной игры. Её можно будет запускать на компьютере, который вам подарили на Рождество в двенадцать лет.

Приступайте к работе — ваш старый компьютер ждёт вас. Настало время снова с ним познакомиться.
Поделиться публикацией
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама
Комментарии 197
  • +3
    Вспомнил молодость и Борланд Паскаль… Сейчас можно заменить на Free Pascal — и старые наколенные научные расчетики идут «на ура» :)
    • +1
      А Бейсик, который смог освоить (в меру возраста) мой 8-ми летний сын…
      Впрочем сейчас многие не верят в то, что Досовский Суперкалк работал не хуже Экселя.
      • +2
        А вы попробуйте сваять там не то что финмодель, а хотя бы простенькую табличку. Я тут недавно решил тряхнуть старинной, запустил Quattro Pro. Но удовольствие получил только от воспоминаний — на практике использовать это просто больно.
        • +5
          Тяжело, да и лениво вспоминать. В свое время делал и расчеты и графики (правда не цветные). Я лучше Вас рассмешу по теме. С времен ДОС у меня на некоторых форумах остался ник SYS Недавно меня обвинили в том, что я в качестве ника использую ничего не значащий набор из трех букв. А когда-то без загрузочной дискеты жизни не было.
          640 кбайт оперативка и 20 мегабайт винт хватало на жизнь. Про видеопамять вообще молчу. Сейчас 32 мегабита в телефоне приходится периодически чистить ибо начинает кричать что ему мало памяти.
          • +1
            С времен ДОС у меня на некоторых форумах остался ник SYS Недавно меня обвинили в том, что я в качестве ника использую ничего не значащий набор из трех букв.

            Эти люди, наверное, никогда не видели в корне ФС на своем жестком диске с виндой файла pagefile.sys. А он там обычно есть (мало кто выключает подкачку или переносит ее на другой диск).

            • +1
              А он там обычно есть

              Он помечен как скрытый и системный, и мало кто включает отображение файлов с этим атрибутом.
              • +4

                У меня другие файлы в памяти
                config.sys
                himem.sys
                emm386.sys
                Я очень стар)))

                • +3
                  А как же io.sys и msdos.sys? Без них все остальные sys'ы смысла не имеют.

                  И кстати, загрузочной дискета или винчестер (уже отформатированные) делались при помощи утилиты sys.com. Так что я тоже староват маленько ;-)
                  • 0

                    Смутно припоминаю, что в некоторых более альтернативных версиях DOS эти файлы назывались как-то по другому.
                    В частности, в PC-DOS и некоторых версиях DR-DOS вроде были ibm.com и ibmdos.com.

                    • 0
                      ibmbio.com и imbdos.com

                      Об это, кстати спотыкались особо «умные» системные утилиты, авторы которых были не в курсе, что кроме MS-DOS существовал так же PC-DOS.
                    • 0
                      или тем же format /s
                      и пропустили autoexec.bat и command.com
                      • 0
                        Я же сказал:

                        И кстати, загрузочной дискета или винчестер (уже отформатированные)

                        так что format /s тут не нужен, тут достаточно утилиты sys.

                        И ещё насчёт autoexec.bat и command.com позанудствую ;-) Разговор начался с того, что пользователь System12 сказал:

                        С времен ДОС у меня на некоторых форумах остался ник SYS

                        Поэтому easty и упомянул про config.sys, himem.sys и другие sys'ы, а я добавил io.sys и msdos.sys. Везде одни sys'ы, про bat'ы и com'ы никакой речи не было.
                      • 0
                        и command.com
                      • 0
                        autoexec.bat забыли.
                        Это же самая первая магия, которую я узнал в ms-dos.
                        Ну и как уже написали io.sys и msdos.sys
                        • +1
                          А как же 800.com, чтобы выжать несколько дополнительных дорожек с пятидюймового Verbatim-а? ;-)
                          • 0
                            Помним такое. Половина дискет в этом формате, никак прочитать теперь не могу.
                            • 0
                              800 — прошлый век. Есть ведь новейший PU_1700 :)
                              • +1
                                Да! И как тут не вспомнить Гуртяка с его KeyRus и образцовым вылизыванием кода, до каждого байта.
                                • 0
                                  Я пользовался gamma — только там было самое оптимальное переключение — по CapsLock. Сейчас только под linux нормально работает переключение по CapsLock и клавиатурная индикация из коробки. Под виндой все переключатели CapsLock имеют разные степени глюкавости.
                                  • 0
                                    Два шифта — наше все!
                                  • 0
                                    su.exe же есть — маленькая компактная программка, в отличие от монстра keyrus.com.
                            • 0
                              Сейчас еще и и файл hiberfil.sys с данными гибернации валяется.
                            • +2
                              С времен ДОС у меня на некоторых форумах остался ник SYS Недавно меня обвинили в том, что я в качестве ника использую ничего не значащий набор из трех букв.
                              «Почему диски начинаются с буквы C? Куда делись буквы A и B?» ©
                              • –1
                                Наверное Вы не видели компов со слотами для дискет. А и В это гибкие дисководы. Вы возможно удивитесь, но я застал времена когда диска С в простых ПК вообще не было, только дискеты. И для того чтобы комп заработал надо было обязательно первой вставлять дискету с ДОС. Команда format (буква диска:) стирала содержимое дисков. Команда sys кроме стирания переносила на диск/дискету ДОС. Кстати, для того чтобы загружаться с нового диска С: тоже требовалась команда sys
                                • 0
                                  Команда sys кроме стирания переносила на диск/дискету ДОС.

                                  Команда SYS ничего не стирала.
                                  • 0
                                    Вы ошибаетесь. По своей сути команда sys была комбинацией двух команд — форматирования диска/дискеты и переноса ДОС в системный каталог.
                                    • 0
                                      Да нет, я не ошибаюсь. :)

                                      Sys is used to copy the system files from one drive to another drive, allowing that drive to be bootable.

                                      When running sys, the below files will be copied.

                                      command.com
                                      io.sys
                                      msdos.sys
                                      drvspace.bin

                                      https://www.computerhope.com/syshlp.htm

                                      То, что Вы описали — это format + sys.
                                      • 0
                                        Значит уже склероз. Давно это было.
                                  • 0

                                    Да ладно! Дисководы? Гибкие? ДИСКОВОДЫ?
                                    А насколько они гибкие?

                                    • 0
                                      Пятидюймовые дискеты легко заворачивались в трубочку. Правда потом обычно не работали. Тонкий пластиковый диск в бумажном конверте с прорезью под головки и механизм вращения. Впрочем лучше читайте Вики ru.wikipedia.org/wiki/%D0%94%D0%B8%D1%81%D0%BA%D0%B5%D1%82%D0%B0
                                      • +1
                                        ИМХО это был сарказм :-) Ведь НГМД расшифровывается как «накопитель на гибких магнитных дисках»
                                        • 0
                                          A и B были, емнип и в CP/M с 8" дискетами.
                                          • 0
                                            Ага. Висела у меня парочка с тех времён на стенке. Но с тех пор как отдал «для декоративных целей» набор из 5 и 1.44" дистрибутива BC 3.11, снял и выкинул. Как и перепаянный в 486 386 dx 2 без сопра… И так старого барахла копится много, лишний пылесборник. Хоть и память, да :)
                                            • 0
                                              Не, у меня был рабочий Панасоник с CP/M, отдал в музей. Радует посетителей своей работой.
                                              • 0
                                                Это кто?
                                                Я учился на CM 1800, размером с хорошее трюмо :) 1986 год вроде был, первое введение уроков информатики в программу. Нашей тусовке «математиков-физиков» предложили на них забить (ибо последние уроки, для старшеклассников их прогулять — святое), но вместо этого ходить на станцию юных техников «в кружок». До сих пор помню имя руководителя — Юрий Шапиро, и как он нас учил простейшим алгоритмам на уровне калькулятора выражений… Ну и текстовой игрушки «клингон атакует».

                                                После этого был перерыв почти на 10 лет, а там уже и XP (не windows), и учебник по x86 ассемблеру с тетрадкой и карандашом в электричке, и даже крутяцкие 286 появились (в НИИ по совсем другому профилю). Так и понеслось…

                                                Да, и РАФОС был. Но момо сознания просвистел.
                                                • 0
                                                  Не помню модель. Отдельно монохромный черно-зеленый монитор, отдельно ящик с двумя вертикальными 8" НГМБ и отдельно процессорный блок. С то ли модемом, то ли телетайпом встроенным.
                                      • +2
                                        Бог ты мой. Вам точно надо таблички «сарказм» или «шутка» показывать. Там же цитата.
                                      • +2
                                        «Кто такой Генерал Фейлор и зачем он читает мой диск C:?» © :-)
                                        • +1
                                          Ты кого инвалидом назвал, железяка?
                                          • 0
                                            Не работе к различному проф. оборудованию иногда приходят майор Аларм и генерал Фейлор.
                                      • +1
                                        Просто навыки сменились. В том же суперкалке вместо мыши вполне себе использовались целые аккорды на клавиатуре не глядя, от которых остались только воспоминания в виде Alt-буква режима.
                                        У меня вполне работала таблица по расчёту заработной платы, с учетом среднего, вычетов на детей и тд. С собственным меню для пользователя, из которого только по Ctrl-C выйти можно было. И не сказать, чтобы инструмент меня больше напрягал, чем алгоритм.
                                        Писалось это классе в восьмом, изучал я 4 суперкалк по мануалу, так что назвать продукт сильно сложным я не могу.
                                        • +1

                                          Да ладно, в конце 80-х — начале 90-х люди полный цикл бухгалтерии и зарплаты учреждений средних размеров организации делали на SUPERCALC, притом это работало годами практически без присутствия автора (за исключением редкой правки размерностей отчетов в связи с инфляцией), и было заменено только в конце 90-х.

                                        • +1
                                          А вы попробуйте сваять там не то что финмодель, а хотя бы простенькую табличку. Я тут недавно решил тряхнуть стариной, запустил Quattro Pro. Но удовольствие получил только от воспоминаний — на практике использовать это просто больно.
                                        • 0
                                          Видел заметку о кросс компиляции с помощью GCC под DOS создание ком файлов
                                          на английском. gcc com =)
                                          Еще старый добрый Watcom чет вспомнился
                                          • +1
                                            Да-да-да. Сколько же раз меня выручал реализованный за 10 минут метод Ньютона… :)
                                          • +8
                                            Не хватило упоминания DN, а это для того времени мощнейший набор инструментов.
                                            • +3

                                              DN мне казался слишком жирным. Volkov Commander наше все

                                              • +1
                                                Зато в DN был встроенный тетрис…
                                                • +1
                                                  Ещё в DN был screensaver «Огонь». Очень натурально это пламя выглядело четветь века назад.
                                                  • 0
                                                    или можно было запустить резидентный тетрис
                                                  • 0
                                                    Особенно в части копирования файлов с дискеты на дискету… по сравнению с nc
                                                    • 0
                                                      Для этого xcopy был, зачем там вообще файловый менеджер?
                                                    • 0
                                                      А еще был Norton Commander.
                                                      Сейчас уже не вспомню но кажись Volkov Commander 4.0 занимал меньше памяти по сравнению с nc.
                                                      • 0
                                                        А на «Правец-16» с которого я начинал весь DOS был болгарский и в комплекте с ним шёл передранный с NC «Команден Организатор», называемый в инструкции просто Коморг.

                                                        А ещё из файловых менеджеров того времени был XTreeGold, но я им не проникся вообще.
                                                        • 0
                                                          Основной фичей XTree была отрисовка структуры каталогов в псевдографике и возможность быстрого перемещения директорий (это называлось «prune and graft»). Встроенной возможности перемещения директорий не было больше нигде, кроме специальной программы из комплекта Norton Utilities. Позднее эта возможность появилась лишь в DOS Navigator.
                                                        • 0
                                                          Не «а еще». Волков — это клон NC. Был действительно меньше, ел меньше памяти и летал быстрее. ЕМНИП, его писали на ассемблере, а NC к тому времени — на С или С++.
                                                    • 0
                                                      На большинстве DOS-машин после загрузки драйверов и TSR (резидентных программ) едва находилось 600 КБ ОЗУ.

                                                      Даже и 480k.
                                                      Но сие было проблемой первых версий DOS.
                                                      Потом появилось несколько менеджеров памяти, а позже и сама DOS начала это уметь. Как раз ко времени когда на машины стали по мегабайту-два ставить и хотелось их все использовать.


                                                      https://ru.wikipedia.org/wiki/HIMEM.SYS#%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C

                                                      • +2

                                                        DOS=UMB, HIGH

                                                        • 0
                                                          + qemm, который позволял оптимизировать размещение в оперативной памяти;
                                                          + найти самый маленький драйвер мыши и раскладки клавиатуры;
                                                          + vc.com который умел выгружать запущенные после него ненужные резиденты…
                                                      • +8
                                                        В этот размер не уместится даже исполняемые файлы большинства программ-установщиков.

                                                        меня вот это постоянно поражает… и вспоминается .kkrieger
                                                        • +1
                                                          Кроме оптимизации кода на помощь приходит процедурная генерация текстур и объектов, использование упаковщиков исполняемых файлов.
                                                          Плюс к этому избавление от зависимостей (всякие msvcr100.dll).
                                                          Но только это не востребовано в большинстве случаев из-за быстрого интернета и дешевого дискового пространства.
                                                          • +2

                                                            А упаковщик то все равно перед исполнением будет в память распаковывать.

                                                            • +3
                                                              Это верно, но применительно к .kkrieger примечателен был крайне малый размер исполняемого файла (~96 КБ).
                                                          • 0
                                                            формат .com исполняемого файла вообще не предполагает размер программы, больше чем 1 страница памяти (64 кбайта).
                                                        • +5
                                                          char buffer[320x200];

                                                          Так, разве, можно?

                                                          • +3
                                                            Видимо вместо х должен быть знак умножения.
                                                            • 0
                                                              За местным парсером замечана нежная любовь к этому знаку, потому многие и меняют)
                                                              • 0
                                                                Серьёзно? Какой поворот! А если объявлена переменная x? Что за глупость.
                                                                • 0

                                                                  Если объявлена переменная x, то все равно ничего не скомпилируется.

                                                                  • 0
                                                                    Это и понятно. Просто не понимаю, зачем менять * на х. Это же ломает код.
                                                          • +2
                                                            Поскольку у нас есть до 4 ГБ адресуемого пространства (по крайней мере, теоретически), мы можем считывать с диска сложную тайловую графику или даже целые JPG пререндеренной графики. С помощью этой системы вполне возможно создать почти современную видеоигру.

                                                            Ну положим были DOS extender:


                                                            DOS/4g
                                                            cwsdpmi
                                                            PMODE


                                                            Какие то из них дружны с упомянутым GNU для DOS — DJGPP


                                                            И еще куча.

                                                            • +5
                                                              калькулятор в Windows 10 занимает в состоянии простоя 16,2 МБ оперативной памяти
                                                              Любопытно было бы узнать, что же именно там столько памяти требует.
                                                              • +2

                                                                Скорее всего окна.

                                                                • +4
                                                                  Скорее всего какие-то абстракции Win10, потому что calc от XP занимает в Win7 x64 примерно 1мб…
                                                                • +3
                                                                  Думаю он на дотнете работает, так что нечему удивляться.
                                                                  • +5
                                                                    16 мегабайт памяти… Эх, этого с головой хватало для Windows 95 + Quake :) Там вам и окна, и графика, и «физика», и AI.
                                                                    • 0
                                                                      Обновления драйверов nvidia вчера запросили 400мб.
                                                                    • +1

                                                                      А чего тут удивительного, вот список одних только библиотек, который мне выдал listdlls calc на семёрке (нет 10-ки под рукой)...


                                                                      listdlls calc
                                                                      Base                     Size Path
                                                                      0x00000000ffb60000     929792 calc.exe
                                                                      0x0000000077420000    1744896 ntdll.dll
                                                                      0x0000000077200000    1175552 kernel32.dll
                                                                      0x00000000fd1d0000     434176 KERNELBASE.dll
                                                                      0x00000000fe840000   14196736 SHELL32.dll
                                                                      0x00000000fe230000     651264 msvcrt.dll
                                                                      0x00000000ff6b0000     462848 SHLWAPI.dll
                                                                      0x00000000fe2d0000     421888 GDI32.dll
                                                                      0x0000000077320000    1024000 USER32.dll
                                                                      0x00000000fdd00000      57344 LPK.dll
                                                                      0x00000000fdc10000     831488 USP10.dll
                                                                      0x00000000fb440000    2191360 gdiplus.dll
                                                                      0x00000000fd7d0000    2080768 ole32.dll
                                                                      0x00000000fd6a0000    1232896 RPCRT4.dll
                                                                      0x00000000ff5d0000     897024 ADVAPI32.dll
                                                                      0x00000000fd5a0000     126976 sechost.dll
                                                                      0x00000000fd5c0000     892928 OLEAUT32.dll
                                                                      0x00000000fb660000     352256 UxTheme.dll
                                                                      0x00000000fc2f0000    2048000 COMCTL32.dll
                                                                      0x00000000faeb0000     241664 WINMM.dll
                                                                      0x00000000fbfe0000      49152 VERSION.dll
                                                                      0x00000000fd570000     188416 IMM32.DLL
                                                                      0x00000000fdd90000    1085440 MSCTF.dll
                                                                      0x00000000f05f0000    1445888 WindowsCodecs.dll
                                                                      0x00000000fae20000      98304 MPR.dll
                                                                      0x00000000775f0000      28672 PSAPI.DLL
                                                                      0x00000000fb320000      98304 dwmapi.dll
                                                                      0x00000000fcfb0000      61440 CRYPTBASE.dll
                                                                      0x00000000fd4d0000     626688 CLBCatQ.DLL
                                                                      0x00000000fb060000     344064 oleacc.dll

                                                                      Ну и строго говоря и 16МБ это не совсем верно, ибо с ним например может запуститься wmiprvse с CIMWin32-провайдером (или еще какой другой, если еще не запущен от чего-то другого), который откушает еще 5-12МБ, и т.д. и т.п.

                                                                      • +1
                                                                        dlls калькулятор в w10



                                                                        • +2
                                                                          Чёрт, я читал мнение, что калькулятор каждый раз гробят, потому что это простая программа для демонстрации возможностей новых ОС. Видимо, в эту простую программу решили так же подключить файлы со всей ОС (
                                                                          • +2
                                                                            Все проще. Калькулятор написан на UWP, который, понятное дело, тянет кучу зависимостей с собой.
                                                                      • +6
                                                                        Фреймворки — вот что сейчас жрёт львиную долю ресурсов и производительности.
                                                                        Если вы хотите, чтоб ваша программа весила в 10 раз меньше и работала в 4 раза быстрее, напишите её без использования фреймворков.
                                                                        Фреймворки решают ровно одну задачу: увеличивают скорость разработки за счёт увеличения ресурсоёмкости готового продукта. То есть по сути позволяют переложить часть издержек, связанных с разработкой, на конечного пользователя.
                                                                        • +1
                                                                          К сожалению такой подход в больших проектах приводит к созданию своего фреймворка.
                                                                          • +3
                                                                            Специализированный фреймворк обычно легче, чем общего назначения.
                                                                            • +1
                                                                              А это уже как получится. Я в одном таком «фреймворке» на C++ «сборщик мусора» видел.
                                                                              • 0
                                                                                Я в одном таком «фреймворке» на C++ «сборщик мусора» видел.

                                                                                Это часто делается на самом деле. Почти в любом действительно большом проекте на C++ используется сборка мусора. На собеседованиях даже часто спрашивают: "а вы писали свой сборщик мусора?"

                                                                        • –1
                                                                          на счет windows 10 не скажу, а вот в windows 7 он в определенный момент ломится в интернет на какой-то ip, это хорошо видно когда в фаере все на ручном управлении и сам фаер отучен доверять всему майкрософтскому (фаер comodo). было еще пару утилит с той же странностью, но точно не скажу, кажется wordpad)
                                                                          • +1
                                                                            У вас в системе может быть некая софтина, которая внедряется во все процессы, и уже от их имени может что-нибудь запрашивать. Не так уж и много смысла писать вот такие вот заявления без подробного разбора «а что там было в адресном пространстве, что за данные передавались» и т.д., желательно с указанием на конкретный код, который что-то там передаёт (калькулятор не такой большой, можно и отреверсить).
                                                                        • +2

                                                                          Что есть, то есть — у DOS потрясающе простой дизайн, и такое же гениально простое API. Помню некоторые прерывания до сих пор, хотя уже давно не запускал DOS, так как для запуска нужного мне ПО мне хватает DOSBox.

                                                                          • +2

                                                                            Поиграйте с CP/M-80, там ещё проще (один call 5h на всё — кстати, он довольно долго поддерживался в DOS).

                                                                            • +1
                                                                              CP/M скучна — там идея в работе на разных архитектурах, без прямого доступа к железу. Поэтому всё было медленное, простое и печальное.
                                                                          • +9
                                                                            Режим 13h, сколько в свое время с ним провел.
                                                                            Вот эти вот
                                                                            mov al, 13h
                                                                            mov ah, 0
                                                                            int 10h

                                                                            первое, что всплывает в памяти когда вспоминаю те времена
                                                                            • +1
                                                                              Можно пояснение, для тех, кто под DOS не кодил?
                                                                              • –1
                                                                                Сброс дисковой подсистемы. Гуглите int 13 reference. И это не DOS, это функционал BIOS.
                                                                                • +3
                                                                                  Если мне не изменяет память, большая часть досовского функционала висела на 21h
                                                                                  • +2
                                                                                    Так и есть. Я даже частично в никнейме своем заюзал. :) km int21
                                                                                    • 0

                                                                                      10h это функции биоса, 21h это доса. Если нужны обращения на более низком уровне, к железу

                                                                                      • 0
                                                                                        Прерывания DOS начинались с 20h (завершение работы программы).
                                                                                      • +3
                                                                                        Неа. Это int 10h (графические функции BIOS), функция 0 — переход в выбранный графический режим (13h в данном случае). И можно обойтись двумя командами (mov ax,13h / int 10h)
                                                                                      • 0
                                                                                        Установка графического режима, вроде (из принципа не полез гуглить :)
                                                                                        • +1
                                                                                          Тьфу, верно.

                                                                                          Я как-то с утра косыми глазами увидел 13 прерывание.

                                                                                          Извините, коллеги.
                                                                                        • +3
                                                                                          После Турбо Паскаля и его библиотеки graph, которая не имела режимов выше 16 цветов, этот режим показался чудом так как позволял использовать аж 256 цветов в разрешении 320х200.
                                                                                          Что забавно, в те времена у меня не было интернета, поэтому режим я подсмотрел через отладчик в какой-то небольшой игрушке, которая его использовала. Откуда-то вычитал про прерывание 10h и его связь с видеорежимами. Поставил на него breakpoint и смотрел что в какие регистры складывается. Уж не знаю почему, но там было именно так: раздельно загружались ah и al. Как выше в комментах уже сказали, можно было обойтись «mov ax, 13h», но на тот момент мне было лет эдак 13-14 и я еще очень плохо понимал ассемблер.
                                                                                          В результате я сделал свою библиотечку graph13h, в которой были процедуры с короткими ассемблерными вставками для выставления режима и простейшие процедуры для рисования примитивов. Позже мне попала в руки потрепанная книга Майкла Абраша про программирование графики и я расширил библиотечку для рендера простейших 3D-сцен, переписал всё что мог на ассемблере. Эта библиотека позже даже имела хождение на форуме, посвященном паскалю где я был в то время модератором (да, за время её написания у нас появился dial-up).
                                                                                          Не знаю зачем я это всё пишу, ностальгия пробрала
                                                                                          • 0
                                                                                            Осталось только библиотеку запостить.
                                                                                            • 0
                                                                                              С той поры уже столько мертвых винтов утекло, а форум перешел в чужие руки и там уже фиг чего найдешь. Да и нечего там смотреть, есть две или три одноименных библиотек с гораздо более богатым функционалом и более чистым кодом. Не забывайте что тогда мне было лет от 14 до 16 примерно и понятия о красивом и хорошо структурированном коде я тогда особо не имел
                                                                                            • 0
                                                                                              На CGA фантастикой казались 16-цветная графика разрешением 80x50, 80x100 и 160x100 сделанная из текстового режима. en.wikipedia.org/wiki/Color_Graphics_Adapter#160%C3%97100_16_color_mode
                                                                                              Только не везде она работала, увы.
                                                                                              • 0
                                                                                                После Турбо Паскаля и его библиотеки graph, которая не имела режимов выше 16 цветов, этот режим показался чудом так как позволял использовать аж 256 цветов в разрешении 320х200.

                                                                                                Это вы, наверное, не тот драйвер использовали. vgaega.bgi позволял из модуля Graph стандартной библиотеки использовать полноцветный VGA-режим работы адаптера и дисплея. С помощью несложных манипуляций видеодрайвер vgaega.bgi возможно было преобразовать в .obj-формат, а затем в формат .tpu-модуля и внедрить (статически скомпилировать) с программой на Turbo Pascal, использующей графический режим, и она становилась автономной (не требовалось дополнительно таскать содержимое каталога \BGI).
                                                                                          • +1

                                                                                            Имеется терминал сбора даних METEOR ECO 486 OS Datalight ROM-DOS 6.22. Процесор 33 Mhz AMD Elan SC410-33AC, 2Мб оперативки и флеш памяти. Планирую ESP использовать для моста на сервер.

                                                                                            • +3
                                                                                              Действительно ли Билл Гейтс произнёс фразу «640 КБ должно хватить всем»? Её история довольно туманна, однако чаще всего её приписывают Биллу, так что, возможно, он действительно такое говорил.


                                                                                              Откуда туманность? Во-первых, нет ни одного источника, где приводилась бы эта цитата, во-вторых самого Билла спрашивали:

                                                                                              QUESTION: «I read in a newspaper that in l981 you said '640K of memory should be enough for anybody.' What did you mean when you said this?»

                                                                                              ANSWER: «I've said some stupid things and some wrong things, but not that. No one involved in computers would ever say that a certain amount of memory is enough for all time.»

                                                                                              • +3
                                                                                                Это называется «постправдой». Нужно просто очень часто повторять одно и то же обвинение (безо всяких доказательств), и через какое-то время оно становится правдой. А на вопрос о доказательствах удивлённо ответить: «Но ведь все это знают!». Используется сейчас всеми кому не лень.
                                                                                                • 0
                                                                                                  Точнее, он сказал на одной из конференций, что речь шла о том, что 16 бит/640к хватит всем ближайшие 10 лет. А не вообще и всегда.
                                                                                                  • +1

                                                                                                    Суть послания была в том, что ресурсов компьютера всегда будет достаточно для решения пользовательских задач. Видимо к тому, что нет смысла в специализированных программах, экономящих ресурсы на обычных компах.

                                                                                                    • 0
                                                                                                      Отчего минусите? Это его воспоминание на конференции 89 года.
                                                                                                  • +2
                                                                                                    Пробовал сделать псевдомультизадачную программу под DOS. Чтобы и документы читала, и jpg-шки. Всё делала, но с тучей тормозов, хотя открытие jpg было написано на ассемблере. Или код неэффективный, или DOS не умеет эффективно работать с Apple iMac…
                                                                                                    • –2
                                                                                                      А в чем именно выражались тормоза? Медленное чтение файла? Так неудивительно. Низкое разрешение таймера? Тоже не новость.
                                                                                                      • +1
                                                                                                        Для DOS в своё время была библиотека под названием CTask, как раз позволяла делать многозадачность на голом DOS без всяких дополнительных приблуд. Я её даже в своё время использовал когда программировал для банкоматов. К сожалению сейчас не смог ни нагуглить, ни наяндексить, везде сплошные Task in C, классы CTask и прочее, что к делу совсем не относится. Был у меня где-то дистрибутив этой библиотеки CTask, но насколько я помню он записан на дискете 3" так что даже если и найду его, то прочитать дискету 3" мне уже давно не на чем.
                                                                                                        • 0
                                                                                                          Многозадачность в дос решалась через резидентные программы.
                                                                                                          Да и вообще вся многозадачность обычно заключается в оседлании прерывания таймера, что делает сейчас любая многозадачная система.
                                                                                                          • 0
                                                                                                            В CTask как раз через таймер многозадачность и делалась. А разве её можно сделать по-другому? Как вы правильно заметили, все шедулеры ныне этим и занимаются. Правда сейчас шедулеры не на int 8 сидят, а на RTC или ещё на чём, int 8 уже никто давно не трогает.

                                                                                                            Эх… А когда-то игрушки CGA'шные, жутко большие, аж по 32 килобайта размером, садясь на int 8, и музыку играли 8-мибитную, и экран обновляли, а сев при этом ещё и на int 9 клавиатуру обрабатывали и даже (что мне казалось дико невозможным в то время!) блокировали Ctrl-Alt-Del.
                                                                                                            • +1
                                                                                                              А разве её можно сделать по-другому?

                                                                                                              Теоретически можно организовать кооперативную многозадачность безо всяких прерываний, когда программа сама отдаёт управление следующей программе в стеке выполняющихся программ, но по очевидным причинам такая модель не получила распространения.
                                                                                                              • +1
                                                                                                                В win 3.11 такая и была, емнип.
                                                                                                                • 0
                                                                                                                  Интересна концепция машинки HP-150, она же Touch Screen, вышедшей еще до первой Windows, по железу это был не PC, совместимость только на уровне кастомизированной DOS, запущенной поверх «собственной многозадачной ОС» в ПЗУ. Компьютер мог работать и без DOS в качестве терминала. По крайней мере, вот, как это описано в ее мануале

                                                                                                                  The HP 150 system contains a large amount of system management code located in Read Only Memory. In general, the firmware is not designed to be utilized by
                                                                                                                  ystem programmers. The operating system BIOS serves as the interface to
                                                                                                                  irmware located functionality.
                                                                                                                  The HP 150 firmware is a rather complex multi-tasking operating system in
                                                                                                                  tself. MS-DOS runs on the firmware as a single task from the firmwares
                                                                                                                  perspective. Essentially all of the terminal functionality of the HP 150 is
                                                                                                                  mplemented in the firmware. The firmware implements much of the BIOS device
                                                                                                                  driver functionality in addition to the terminal personality.
                                                                                                            • 0
                                                                                                              Пришлите мне дискету по почте :)
                                                                                                              Или сходите в любое госучреждение/библиотеку. Флопики еще не вымерли. Даже у меня есть, вставил после апгрейда старого ПК на почётное место.
                                                                                                              Upd: Да и забыл, сам работаю сисадмином в одном госучреждении, там осталась много раритетных дискет, в том числе и с MS-DOS ;)
                                                                                                              • +1
                                                                                                                У меня даже года 2-3 назад был специально приобретен FDD-USB привод. Тому как если придется переставлять Win2K3 Server, то дрова на RAID нужно либо внедрять в дистрибутив, либо устанавливать с флоповода — других носителей Win2K3 на этом этапе не видит.
                                                                                                          • +1
                                                                                                            Видел пару DOS-подобных 32-битных систем, в которых все программы размещались в общей памяти с OS и имели полный доступ ко всему железу. Выглядело интересно, но мне уже тогда надоело писать на C++ и ассемблере, а языки, которыми я увлекался, типа Haskell, там не поддерживались.
                                                                                                            Может и сейчас что-то подобное живое есть.
                                                                                                          • +2
                                                                                                            У ICP DAS даже в наше время есть куча ПЛК от совсем простеньких до весьма навороченных, работающих под DOS-compatible операционкой с Borland C++ 3.1 в качестве основного компилятора. Что, с одной стороны, прикольно (все знакомо как свои пять пальцев, зная устройство FAT-системы на встроенной флешке можно перепрошивать контроллер «на лету» с воздуха, и т.д.), а с другой стороны, вызывает некую тоску, когда приходится писать на старом стандарте со всеми ограничениями старого компилятора, плюс танцевать с бубном чтобы он вообще заработал на современных ОС.
                                                                                                            • +2
                                                                                                              Ну на самом деле в 13ом режиме полноценную игру не сделать. Нужен mode X или Y с планарным представлением видеопамяти для быстрого битблитинга(простите за некрасивое слово).
                                                                                                              • +3
                                                                                                                Большинство VGA'шных игр, включая самые известные, скажем, Sierra'овские, были в самом стандартном 320x200x256.
                                                                                                                mode-x стали использовать позднее и не так уж часто. Потому что у него были проблемы с некоторыми видеокартами.
                                                                                                              • +4
                                                                                                                Минимализм был когда-то в плюс. Программы так уплотнялись и зализывались (железо развивалось неспешно), что представляли из себя почти совершенство. Сейчас из за изобилия памяти код часто пишется небрежно, раздуто. Например какая-нибудь игрушка в 40 гб на диске содержит всего несколько шикарных локаций с туманом, заходящим солнцем и шевелящимися травинками — с прохождением в 10 мин. Но к прежнему методу не возврата. Этот бег не остановить.
                                                                                                                • 0
                                                                                                                  Да, Alexandr400, этот бег не остановить… Думаю, что наблюдаемый нами «вариант развития событий» выгоден и производителям ПО и «кузнецам железа». С одной стороны: можно быстро создавать монструозные (по объему кода) продукты с функционалом калькулятора, а с другой постоянно увеличивать продажи все более мощного оборудования…
                                                                                                                  • 0

                                                                                                                    Потому что в играх выбор такой — скорость загрузки/графон/занимаемое пространство на диске. Можно выбрать только 2. В век терабайтных хардов и приставок с 50гб блюреем естественно жертвуют занимаемым пространством на диске.

                                                                                                                  • +1
                                                                                                                    Размер исполняемого файла калькулятора зависит в большей мере от компилятора
                                                                                                                    • +2
                                                                                                                      Так здесь не про размер файла, а про размер памяти используемой калькулятором.
                                                                                                                      • 0
                                                                                                                        На размер памяти, используемой калькулятором, влияет много факторов.
                                                                                                                        Талант программиста один из них )
                                                                                                                    • –1
                                                                                                                      Все-таки dosbox сейчас более выгодный вариант, чем виртуалбокс, в том числе и за счет рендеринга экрана. Оригинальное разрешение на современных мониторах слишком мелкое. А возможность любую старую игру смотреть в 2x/3x со сглаживанием — отлично возвращает в жизнь и MOO и KB и другие игры.
                                                                                                                      • +3
                                                                                                                        DOS в сущности является операционной системой реального времени (ОСРВ).
                                                                                                                        Ну, это крайне спорное утверждение. Как минимум, существование резидентных (TSR) программ может помешать реалтаймовости. А ещё — в DOS отсутствует асинхронная работа с диском (пишите жалобу на BIOS), так что на период обращения к диску программа не может выполняться.

                                                                                                                        тончайший интерфейс DOS между приложением и оборудованием даёт ей преимущество в этой области использования
                                                                                                                        Осталось понять, зачем тут вообще нужен DOS, если выгоднее запустить 32-битную программу, которая сама в себе несёт драйвер для работы с файловой системой и всё остальное.

                                                                                                                        в режиме VGA 320x200x256
                                                                                                                        Все эти видеорежимы — мерзость. Я понимаю, что это не DOS виноват, а аппаратура — ну так аппаратура разрабатывалась в т.ч. с оглядкой на совместимость с DOS и той аппаратурой, на которой работал DOS — закономерно получился уродец.
                                                                                                                        • 0

                                                                                                                          Видеорежимы чем плохи? Понятно, что памяти мало, нужно было показать максимум возможного.
                                                                                                                          Конкретно VGA 320x200x256 вообще был один из лучших. Показать 256 цветов в то время — было очень круто. Понятно, что пиксели были громадные и даже на тех маленьких мониторах смотрелись как лампочки. Но все равно — это первый значительный шаг к какой-то нормальной многоцветной картинке. До сих пор помню картинку на обложке журнала ("Компьютерра" кажется), с которой заинтересовался этими возможностями и стал экспериментировать с графикой. Тем более рассчитывать координаты было довольно легко 320 = 2^8+2^6, вся видеопамять помещалась в 1 сегмент — можно было быстро и удобно перебрасывать картинку на экран.

                                                                                                                          • 0
                                                                                                                            В VGA режиме 320x200 пиксель не квадратный, а прямоугольный, что, в принципе, досаждало не сильно, но иногда хотелось поворчать :)
                                                                                                                            Был еще 320x240 с квадратной точкой, но это уже VESA.
                                                                                                                            • +1
                                                                                                                              320x240 обеспечивал так же небезызвестный «Mode X», доступный на всех VGA. Тот же режим 0x13, только в некоторые регистры видеодаптера записывались немного другие значения. Довольно много интро, демок и даже игрушек в то время в этом режиме было.
                                                                                                                              • 0
                                                                                                                                Помню такой, как раз в книге Абраша кажется и описывался. Также он назывался Chain-4. Там была хитрая организация памяти, которая позволяла иметь 4 страницы видеопамяти по 64кб, которые шли одна за одной. Его было классно использовать для скроллинга экрана — ты просто смещал «окно». Или можно было одну страницу показывать пока рисуется на второй, потом перемещать «окно» на начало второй, получая практически моментальное обновление экрана. Крутая штука
                                                                                                                          • 0
                                                                                                                            Нынешняя FreeDOS – 32-битная ОС.
                                                                                                                            • 0
                                                                                                                              А ещё — в DOS отсутствует асинхронная работа с диском (пишите жалобу на BIOS), так что на период обращения к диску программа не может выполняться.

                                                                                                                              Зато можно было ручками обратиться прямо к контроллеру через порты ввода-вывода и заюзать MWDMA (если он, конечно, поддерживался железом). В этом и прелесть примитивизма, что при желании можно выжать из оборудования все, а не только то, что позволяет API.
                                                                                                                              • +1
                                                                                                                                Если Вы лезете в железо напрямую — то зачем Вам вообще DOS? Это же ДИСКОВАЯ операционная система — а тут Вы лишаете её ейного основного заработка!
                                                                                                                              • 0
                                                                                                                                Все эти видеорежимы — мерзость. Я понимаю, что это не DOS виноват, а аппаратура — ну так аппаратура разрабатывалась в т.ч. с оглядкой на совместимость с DOS и той аппаратурой, на которой работал DOS — закономерно получился уродец.

                                                                                                                                DOS тут точно не при делах.
                                                                                                                                DOS вообще не поддерживал графику и работал в текстовом режиме.
                                                                                                                                Вся графика была на совести кода в ПЗУ видеоадаптера и работающих с видеоадаптером напрямую программ.
                                                                                                                                А видеорежимы определялись скромными возможностями электроники того времени: медленные процессоры, медленная и дорогая память.
                                                                                                                                Если тогдп кто-то забомбил бы хотя бы VGA, то оно стоило бы как самолет и рисовало бы со скоростью черепахи. А когда все ускорилось и подешевело, тогда и понеслось: сначала VGA, потом всякие XGA, потом всякие 3D ускорители.
                                                                                                                                Да и сами режимы не так уж и страшны. А уж для того времени они были огромным достижением.
                                                                                                                                А некоторые игры на графике CGA смотрелись лучше, чем некотооые современные игры на самых навороченных видеокартах.

                                                                                                                                • –1
                                                                                                                                  Вы не поняли.

                                                                                                                                  Сначала IBM решила использовать ублюдский процессор и пригласила Балла Гейтса, заключив с ним особый контракт (можете рассказывать, что при капитализме не бывает коррупции). Это было два независимых решения с разной мотивацией.

                                                                                                                                  Затем по ряду причин (не буду рассказывать — лень) эта платформа стала популярной — т.е. таких компьютеров с DOS стало много, для них было написано много программ. этот процесс — саморазгоняющийся. естественная монополизация рынка.

                                                                                                                                  Дальше при разработке новых аппаратных средств железячники ориентировались именно на работу на этой архитектуре. А там было прописано, что для видеопамяти выделяется конкретный сегмент = 64 KB адресного пространства. Вот и пришлось извращаться, запихивая туда видеопамять бОльшего размера.

                                                                                                                                  Что же касается «видеорежимы определялись скромными возможностями электроники того времени: медленные процессоры, медленная и дорогая память» — то Вы делаете мне смешно.
                                                                                                                                  Начнём с того, что CGA был сделан так, что программисту приходилось извращаться и интерливом (т.е. строки экрана шли в памяти не подряд, а сначала все чётные, потом все нечётные). И ещё нельзя было обращаться к видеопамяти в момент работы луча — это портило картинку. Т.е. CGA безумно сильно грузил процессор.

                                                                                                                                  Это ни разу не достижение. Это — самое настоящее капиталистическое вредительство. Особенно уродский VideoBIOS, в который так и не удосужились запихнуть нормальные драйверы типа BGI.
                                                                                                                                  • +1
                                                                                                                                    Сначала IBM решила использовать ублюдский процессор.

                                                                                                                                    Нормальный процессор для своего времени. Не надо его обижать.
                                                                                                                                    Проблема была не в процессоре, а в том, что накрутили вокруг него. И в слишком сильной обратной совместимости следующих поколений компьютеров.


                                                                                                                                    Дальше при разработке новых апп