- BrainTools - https://www.braintools.ru -
Мир в 1982 году
Общие даты [1], по категориям [2], наука [3], спорт [4], музыка [5], кино [6], театр [7], литература [8], живопись [9], игры [10] (англ. [11]), авиация [12], метро [13], железные дороги [14].
Положение на игровом и компьютерно-железных рынках
По моим впечатлениям [15], этот год не был чем-то примечателен – выходили новые игры и системы (компьютеры, приставки, портативные устройства) и ничто не предвещало бурь в следующем году.
Из выпущенных систем стоит отметить:
11.1981 – PC-88. Несмотря на выпуск в прошлом году, игры начали выходить только с 1982 года (во всяком случае достоверной информации о играх за 1981 год нет, на mobygames с высокой долей вероятности может быть ошибка [16] с платформой).
23.04.1982 – ZX Spectrum. Только в Британии, выпуск в США будет только в ноябре 1983 года. 06.1982 – MPC 1600 (Columbia Data Products). Первый IBM PC совместимый клон.
08.1982 – Commodore 64. Легенда и важный гвоздь кризиса игровой индустрии США в 1983 году. 10.1982 – PC-98. Самый известный японский компьютер. В последние годы, за счет основы на процессорах Intel, возможна эмуляция в DosBox-X.
11.1982 – Sharp X1. Самый продвинутый из основной тройки японцев на момент выхода (PC-88, X1, FM-7).
11.1982 – FM-7.
Для обычного человека все тоже шло своим чередом – потребности [17] покупать еще один компьютер нет, в отличие от приобретения софта и потенциального расширения памяти [18]. Последнее можно было приобрести у IBM или же купить у Microsoft подобие-аналог RamCard (помимо опции расширения памяти её можно было использовать и как RAM-диск, что могло быть полезным). Другое направление – программирование. BASIC показался привлекательным по своей простоте и интересно посмотреть еще какой-нибудь язык. Таковым становится ассемблер, благо IBM и Microsoft продают компиляторы под него (но с нюансом).
Эмуляционный конфиг

RamCard выпускался с начала 1982 года (пример [19] раннего экземпляра – у некоторых чипов стоит дата 8204 (четвертая неделя 1982 года), а на самой плате указан 1981 год) и был доступным решением (125 долларов за вариант на 64КБ при покупке напрямую у Microsoft согласно официальной брошюре, у реселлеров цена могла быть до двух с небольшим раз выше). Память же нужна для работы компилятора из .ASM в .OBJ – нужно минимум 128КБ, на 64КБ работать не будет.
Насколько понимаю, новая версия BASICA поставлялась с новыми партиями IBM PC, потому на текущем этапе будут использоваться изначальные PC-DOS и BASICA версий 1.00. BASIC-86 5.22 также не стал смотреть из-за наличия знакомства с BASIC и несовместимости (исполняемый файл в формате CMD, работающий под CPM).
Однако, как раз с этого года доступны компиляторы под ассемблер – IBM Macro Assembler и Microsoft Macro Assembler. По факту это один и тот же компилятор, просто у IBM самая ранняя версия за декабрь 1981 года. Вариант Microsoft вышел в феврале-марте 1982 года, но обновленная версия указано только у линковщика (LINK.EXE, 1.08) – у компилятора 1.00 и 1981 год. Нюанс в том, что у IBM на дискете только компилятор, а LINK.EXE изначально вложен в состав PC-DOS 1.00. Я об этом подумал уже в ходе компиляции кода под вариант Microsoft, но я решил этим пренебречь ввиду не сильно большой разницы во времени выхода.
Так как писать под ассемблер придется много, я позволил себе допустить послабление и использовать текстовый редактор для IBM PC, который стал доступен на этой платформе немного позже 1982 года. Настолько сильно погружаться в эпоху интереса [20] у меня не было, а встроенный в PC-DOS 1.00 EDLIN меня ужаснул за 10 секунд. После просмотра ряда самых маленьких текстовых редакторов на old-dos.ru выбор пал на WordStar 3.20 (остальное не заработало) – исполняемый файл датируется маем 1983 года, хотя в самой программе указан 1982 год. Несмотря на неказистый дизайн у него есть базовый набор нужных функций по набору текста. Вкупе с моноширинным шрифтом я, не побоюсь сказать, кайфанул от процесса печати кода – просто и минималистично, но в то же время приятно и комфортно. Есть, однако, нюанс с размером файлов – максимальный размер при сохранении составляет, примерно, около 14КБ (хотя при этом WordStar может открывать файлы большего размера). Дополнительная причина писать код модульно (в идеале – каждая функция в своем файле, а в условном MAIN.ASM только ссылки на эти файлы), а не в один файл.
Пара нюансов по Macro Assembler – расширение файла не имеет значения (можно не только .ASM, но и любое другое, главное чтобы внутри был код ассемблера), внутри файла должен быть особый символ для определения конца файла (в моем случае это был знак с hex-кодом 1A: стрелка).
Также – dosbox-x с некоторых пор поддерживает монтирование дискет форматированных под DOS 1.x, потому его можно использовать для копирования файлов туда-сюда.
Из-за размера .ASM файлов, полные листинги приводится не будут.
Скачать – github [21].
Классика поздних версий MS-DOS в реализации для ранних.
Запросы: Qwen [22] (ранняя версия запроса [23]), Grok [24] (ранняя версия запроса [25]).
Также – рабочий пример работы с файлами через FCB (File Control Block): в ходе работы данные записываются в файл MEM.TXT объемом 64 байта, который можно посмотреть через команду TYPE. Интересно, что размер показывается честно – BASIC, WordStar и, возможно, Macro Assembler округляют размер файла до кратного 128 байтам (насколько понимаю, следствие наследиясовместимости CPM). FCB является единственным способом работы с файлами в DOS 1.x, handle-метод появился только в DOS 2.x.
Ниже – отрывок из кода (плюс код с разными процедурами выхода из программы в зависимости от версии DOS – 1.x не знает про 4Ch; выход из программы работает через RET, а перед этим нужно в самой первой процедуре кода набирать команды PUSH DS ; SUB AX, AX ; PUSH AX для обозначения PSP-сегмента, от которого выход и происходит):
; Set up FCB to MEM.TXT
LEA DX, FILE_FCB
MOV AH, 0Fh ; Open file
INT 21h
CMP AL, 0FFh ; FFh="not found/error"
JNE SHORT FILE_OPENED
; If not found, create it
LEA DX, FILE_FCB
MOV AH, 16h ; Create file
INT 21h
CMP AL, 0FFh ; Error?
JE SHORT SKIP_SAVE ; Skip if create failed
FILE_OPENED:
; Set record size to 1 byte (for seq write)
MOV WORD PTR [FILE_FCB+0Eh], 64 ; Record size = 64
; Set DTA to output buffer (for write)
MOV DX, OFFSET OUTPUT_BUFFER
MOV AH, 1Ah ; Set DTA
INT 21h
; Write to file (AH=15, number of records=OUTPUT_LEN)
MOV CX, OUTPUT_LEN
LEA DX, FILE_FCB
MOV AH, 15h ; Seq write
INT 21h
CMP AL, 0 ; AL=0 success
JNE SHORT SKIP_SAVE ; Skip close if write failed
; Close file
LEA DX, FILE_FCB
MOV AH, 10h ; Close file
INT 21h
SKIP_SAVE:
; Exit based on DOS version
CMP DOS_MAJOR, 2
JAE SHORT EXIT_DOS2
RET
EXIT_DOS2:
MOV AH, 4Ch
INT 21h
START ENDP
Рисовалка в нестандартном режиме 160x100x16 RGBI (технически обозначается как 160×200, но чем это обусловлено я не выяснял, специалисты смогут лучше пояснить). По факту – модификация текстового режима 80×25 с поддержкой цвета.
Под DOS 1.x глючит (курсор появляется в любой точке экрана и в том числе за его пределами) и работает только один из Shift’ов клавиатуры, такое поведение [27] происходит и в MartyPC. Под DOS 2.x+ работает корректно. Также – запускается и на конфиге с 48КБ памяти.
Запросы: Qwen (1 [28], 2 [29], 3 [30]), Google Gemini [31], Grok (1 [32], 2 [33], 3 [34]).
Запись [35] в DosBox Pure (RetroArch) с шейдером crt-royale-ntsc-320px-composite.glslp (сделать скриншот не удалось – портится изображение).
Ниже два отрывка кода – в первом набор значений для перепрограммирования CRTC, а во втором сама процедура перенастройки режима:
; --- CRTC Register Data for 160x100 Mode ---
crtcvals DB 71h, 50h, 5Ah, 0Ah ; R0-R3 (Horizontal)
DB 7Fh ; R4: Vertical Total (127)
DB 06h ; R5: Vertical Adjust
DB 64h ; R6: Vertical Displayed (100 rows)
DB 70h ; R7: Vertical Sync
DB 02h ; R8 Interlace (Mode 2)
DB 01h ; R9 Max Scan Line (1=2 lines high)
DB 20h, 00h ; R10-11 (Cursor - hidden)
; ===============================================
; SET_MODE_160X100
; ===============================================
SET_MODE_160X100 PROC NEAR
; 1. Set standard 80x25 text mode first (Mode 3)
MOV AX, 0003h
INT 10h
; 2. Disable Blink (Port 03D8h)
MOV DX, 03D8h
MOV AL, 09h
OUT DX, AL
; 3. Reprogram CRTC (6845)
MOV SI, OFFSET DGROUP:crtcvals
MOV CX, 12 ; Update registers 0 to 11
MOV DX, 03D4h ; CRTC Index Register
XOR AH, AH ; Start at Register 0
CRTC_LOOP:
MOV AL, AH ; Select Register Index
OUT DX, AL
INC DX ; Select Data Register (3D5h)
MOV AL, CS:[SI] ; Get Value (CS override needed)
OUT DX, AL
DEC DX ; Back to Index
INC SI
INC AH
LOOP CRTC_LOOP
RET
SET_MODE_160X100 ENDP
Основной функционал и выход из программы под DOS 1.x работает. Единственное что не удалось сделать рабочим – сохранениезагрузка файла через FCB. Найти или подобрать рабочие процедуры мне не удалось, информации про это в документации к Macro Assembler нет. Обидненько.
Текущая альтернатива это dosbox-x из-за поддержки сэйв-стейтов (и DosBox Pure в Retroarch).
Помощь приветствуется: DOS 1.x, FCB [36], DOS 2.x+, handle [37] (github).
По замыслу – программа для написания музыки под PC Speaker с возможностью сохранятьзагружать результат в файл для использованияпрослушивания.
Запросы: Qwen [38], DeepSeek [39], Grok (1 [40], 2 [41]).
Сделать рабочий код не старался, так как не видел смысла тратить на это время из-за фиаско с FCB для предыдущей программы. Первый вариант после конверсии из MASM 5.0+ в MASM 1.0 компилится без ошибок, но не работает (а еще из .OBJ получается большой по размеру исполняемый файл – 68480 байт). Второй вариант тоже компилится без ошибок и запускается, но зависает (возможно, неправильная последовательность операнд в одной из функцийпроцедур).
Помощьпредложения по написанию приветствуются – тема [42] на github.
Концепт подобия движка
Идея простая – используя Draw160 и PCSMUS с написанием игровой логики под ассемблер писать игры, которые можно запускать на самых ранних IBM PC как в эмуляции, так и на реальном железе. При этом они – работают в нестандартном графическом режиме (160x100x16 RGBI), с музыкой на PC Speaker (пример красивой реализации – System Beeps [43], статьи на тему от автора – 1 [44], 2 [45]).
Вспомогательные средства
CP437CHK – скрипт на python, проверяющий текстовые файлы на соответствие кодовой странице 437. Полезно, если в коде от нейронки неправильные символы из-за которых он не запускается под эмуляцией.
В целом, работа с ассемблером – это интересно. Правда, для понимания кода без справочника по командам и операндам процессора разобраться затруднительно. Сложностей при этом хватает и без этого – программа может скомпилироваться без ошибок, но не работать (для дополнительных проверок и дебага предусмотрены NUL.LST и NUL.CRF, но для этого требуются дополнительные знания) или же глючить в какой-то среде (Draw160 подглючивает в DOS 1.x, но при этом корректно работает под DOS 2.x).
Структура кода и синтаксис мне отчасти напомнили python (в частности, проставление пробелов в строках, хотя это, возможно, было не обязательно делать). Понравился и формат его организации (сначала идут сегменты данных DATASEG, потом STACKSEG, а затем до конца CODESEG; все операции желательно выполнять внутри процедур и самая первая должна быть PROC FAR, последующие – PROC NEAR; START PROC FAR и END START обертывают код внутри CODESEG). Разобрать работу с файлами и можно было бы попробовать сделать графический текстовый редактор с поддержкой нескольких языков минуя ограничения ранних IBM PC за счет использования графики из файла. И игры попробовать поделать само собой.
Автор: Gameruni
Источник [46]
Сайт-источник BrainTools: https://www.braintools.ru
Путь до страницы источника: https://www.braintools.ru/article/25675
URLs in this post:
[1] Общие даты: https://ru.wikipedia.org/wiki/1982_%D0%B3%D0%BE%D0%B4
[2] по категориям: https://ru.wikipedia.org/wiki/%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:1982_%D0%B3%D0%BE%D0%B4
[3] наука: https://ru.wikipedia.org/wiki/1982_%D0%B3%D0%BE%D0%B4_%D0%B2_%D0%BD%D0%B0%D1%83%D0%BA%D0%B5
[4] спорт: https://ru.wikipedia.org/wiki/1982_%D0%B3%D0%BE%D0%B4_%D0%B2_%D1%81%D0%BF%D0%BE%D1%80%D1%82%D0%B5
[5] музыка: https://ru.wikipedia.org/wiki/1982_%D0%B3%D0%BE%D0%B4_%D0%B2_%D0%BC%D1%83%D0%B7%D1%8B%D0%BA%D0%B5
[6] кино: https://ru.wikipedia.org/wiki/1982_%D0%B3%D0%BE%D0%B4_%D0%B2_%D0%BA%D0%B8%D0%BD%D0%BE
[7] театр: https://ru.wikipedia.org/wiki/1982_%D0%B3%D0%BE%D0%B4_%D0%B2_%D1%82%D0%B5%D0%B0%D1%82%D1%80%D0%B5
[8] литература: https://ru.wikipedia.org/wiki/1982_%D0%B3%D0%BE%D0%B4_%D0%B2_%D0%BB%D0%B8%D1%82%D0%B5%D1%80%D0%B0%D1%82%D1%83%D1%80%D0%B5
[9] живопись: https://ru.wikipedia.org/wiki/1982_%D0%B3%D0%BE%D0%B4_%D0%B2_%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D0%BC_%D0%B8%D1%81%D0%BA%D1%83%D1%81%D1%81%D1%82%D0%B2%D0%B5_%D0%A1%D0%A1%D0%A1%D0%A0
[10] игры: https://ru.wikipedia.org/wiki/1982_%D0%B3%D0%BE%D0%B4_%D0%B2_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D0%B8%D0%B3%D1%80%D0%B0%D1%85
[11] англ.: https://en.wikipedia.org/wiki/1982_in_video_games
[12] авиация: https://ru.wikipedia.org/wiki/1982_%D0%B3%D0%BE%D0%B4_%D0%B2_%D0%B0%D0%B2%D0%B8%D0%B0%D1%86%D0%B8%D0%B8
[13] метро: https://ru.wikipedia.org/wiki/1982_%D0%B3%D0%BE%D0%B4_%D0%B2_%D0%B8%D1%81%D1%82%D0%BE%D1%80%D0%B8%D0%B8_%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%BF%D0%BE%D0%BB%D0%B8%D1%82%D0%B5%D0%BD%D0%B0
[14] железные дороги: https://ru.wikipedia.org/wiki/1982_%D0%B3%D0%BE%D0%B4_%D0%B2_%D0%B8%D1%81%D1%82%D0%BE%D1%80%D0%B8%D0%B8_%D0%B6%D0%B5%D0%BB%D0%B5%D0%B7%D0%BD%D0%BE%D0%B4%D0%BE%D1%80%D0%BE%D0%B6%D0%BD%D0%BE%D0%B3%D0%BE_%D1%82%D1%80%D0%B0%D0%BD%D1%81%D0%BF%D0%BE%D1%80%D1%82%D0%B0
[15] впечатлениям: http://www.braintools.ru/article/2012
[16] ошибка: http://www.braintools.ru/article/4192
[17] потребности: http://www.braintools.ru/article/9534
[18] памяти: http://www.braintools.ru/article/4140
[19] пример: https://www.reddit.com/media?url=https%3A%2F%2Fpreview.redd.it%2Fmicrosoft-pc-ramcard-v0-8pq1wdu783xe1.png%3Fwidth%3D1865%26format%3Dpng%26auto%3Dwebp%26s%3Dee9208a5bb0db1f5a2d6e978d60852ad8dd48152
[20] интереса: http://www.braintools.ru/article/4220
[21] github: https://github.com/n1tr0ms/GameDev-Soft-Evo-1981-2001-
[22] Qwen: https://chat.qwen.ai/s/805d1ef1-53f1-4de9-a56f-78f33ebcd0d9?fev=0.2.0
[23] ранняя версия запроса: https://chat.qwen.ai/s/805d1ef1-53f1-4de9-a56f-78f33ebcd0d9?fev=0.1.38
[24] Grok: https://grok.com/share/bGVnYWN5LWNvcHk_f783a634-7d72-4dbc-90cb-5c3877dd870b
[25] ранняя версия запроса: https://grok.com/share/bGVnYWN5LWNvcHk_d6658914-9d0e-4d9e-9cd8-eb379bc4da1e
[26] Image: https://sourcecraft.dev/
[27] поведение: http://www.braintools.ru/article/9372
[28] 1: https://chat.qwen.ai/s/3c369525-0d9b-4b4d-a792-8de489480767?fev=0.1.39
[29] 2: https://chat.qwen.ai/s/42ab16a2-112e-42b0-8689-3529f2d10a69?fev=0.1.39
[30] 3: https://chat.qwen.ai/s/f8e87b2b-e91d-4603-a0bc-19a97281a4ff?fev=0.1.39
[31] Google Gemini: https://gemini.google.com/share/d9ee07200416
[32] 1: https://grok.com/share/bGVnYWN5LWNvcHk_2dbba1e1-47bc-4adc-909f-1f64a84b1616
[33] 2: https://grok.com/share/bGVnYWN5LWNvcHk_eb933a4a-99ca-4426-8706-ba1947797536
[34] 3: https://grok.com/share/bGVnYWN5LWNvcHk_d6388f87-643b-4664-9004-06a5268e72ce
[35] Запись: https://d.tmpfile.link/public/2026-02-14/8fb1d64f-e5ed-4fb3-894d-975efc8bb9d9/2026-02-07%2018-02-48.mkv
[36] DOS 1.x, FCB: https://github.com/n1tr0ms/GameDev-Soft-Evo-1981-2001-/issues/1#issue-3943177885
[37] DOS 2.x+, handle: https://github.com/n1tr0ms/GameDev-Soft-Evo-1981-2001-/issues/2#issue-3943183447
[38] Qwen: https://chat.qwen.ai/s/33938c2e-dce6-4796-b56c-84636294f7fe?fev=0.1.39
[39] DeepSeek: https://chat.deepseek.com/share/sswu109bvct1hgbjuf
[40] 1: https://grok.com/share/bGVnYWN5LWNvcHk_89e03fde-f996-4fe2-8d3c-06491ba20415
[41] 2: https://grok.com/share/bGVnYWN5LWNvcHk_1c8dce03-51c8-4a6c-886c-30c435ef7e7a
[42] тема: https://github.com/n1tr0ms/GameDev-Soft-Evo-1981-2001-/issues/3#issue-3943198062
[43] System Beeps: https://www.pouet.net/prod.php?which=79996
[44] 1: https://habr.com/ru/articles/438448/
[45] 2: https://habr.com/ru/companies/ruvds/articles/951514/
[46] Источник: https://habr.com/ru/articles/996664/?utm_source=habrahabr&utm_medium=rss&utm_campaign=996664
Нажмите здесь для печати.