Комментарии 42
Есть ли корректная эмуляция портов программируемого контроллера прерываний и прочей периферии которую можно было программировать через порты?
Я не делал таких проверок. Подозреваю, что работает далеко не всё https://www.vogons.org/viewtopic.php?p=1095120#p1095120
Я думаю, что dosbox вполне корректно эмулирует базовую переферию. Такую, как контроллер прерываний и т.п.
Чёрт, сразу вспомнился тот резидентный справочник по прерываниям... э-э-э, забыл уже название: hhelp или типа того. Там, понятно, не только про прерывания было, штука была незаменимая. Интерфейс ещё такой зелёный.
Стоп, нет: сама программа была просто для демонстрации справки по горячей клавише, а к ней уже у меня была прикручена справка по прерываниям.
Да уж. Прямо детство. Не пионерское, постарше. Но детство. debug.com, правда, не сильно любили. Скорее Turbo Debuger, а потом и более интересные варианты. Буквально следом должен идти перевод Криса Касперски о том, как взломать хиты времен MsDOS.
Надо ли только это хоть кому-то? Уже и в ассемблер для контроллеров мало кто заглядывает, что тут про специфичную археологию времен DOS да еще с "$"-терминированными строками. Хотя, безусловно, там было очень много интересного.
Кому-то, может быть, надо. Штуки вроде DOSBox весьма интересны с точки зрения изучения принципа построения машинного кода и отладки на низком уровне.
Может быть. Мне, как человеку заставшему код на 80186 без всяких MSDOS и в последствии занятым как раз низкоуровневым для ПК (в основном для Linux), да контроллерами, включая незабвенные 8051 с очень похожим ассемблером, уже начинает казаться что это нечто типа набившего оскомину Cobol'а у импортных финансистов.
Типа есть и есть. По возможности не трогай, чтоб не воняло. А если вдруг что, то немного денег кинем и нам все починят. Потому сюда особо народ не рвется. Навыки нужны несколько специфичные, денег больших нет, спрос и ответственность офигенные, результата работы в идеале не видно вообще. Стоишь ядовитой слюной забрызганный в стиле мы круты, а вы все криворукие, но ничего скоро наша ржа вас всех сожрет и не подавится. Только вот как-то не жрет. Скотина такая. Самим выкручиваться приходится.
Эх, статья интересная конечно, особенно лет 30 так тому назад. Жаль что винда отказывается нативно запускать com-файлы.
Сейчас было бы любопытно почитать про 64 бита от нажатия копки питания, до запуска ОС. Тот же 64 ABI для виндов и линукса.
эх, молодость... всплакнул..
debug.com, правда, не сильно любили.
symdeb наше фсё! По сравнению с debug гораздо более продвинутый, хотя внешне весьма похож. Ну а Turbo Debugger гораздо позже, мой любимый отладчик был. А особено TD386, который умел делать аж хардварные брекпойнты. Но это уже совсем много позже когда мне на работе выдали компутер с 80386.
Эх, сколько игр было пройдено путём делания себе неубивамости при помощи TD!
А вот отладчик от Microsoft под названием CodeView я ненавидел всеми фибрами, мне он был жутко неудобен после истиной юзабилити от Borland. Как, впрочем, и всё от Microsoft. Тот же Visual C даже сравниться не мог с Turbo C по удобству.
Немного смущает то, что обещали 8086, а фактически рассказали про IBM PC XT, с ее особенностями по раскладке памяти, использованию именно 8259A в качестве контроллера прерываний и т.п.
Когнитивное искажение автора. Я видел системные контроллеры для ТОС ЭЛКОС (телефонная станция производства Борисоглебского завода) на базе 8086. И софт для них, вроде бы, на Турбо Си делался. Но доступа к этой технике у меня, к сожалению, нет.
Я делал такие контроллеры (ну не прям телефонная станция, но тоже на 8086. Вернее, на 80186, но там очень маленькая разница).
И тоже программировал их на Turbo C 2.0, с самодельным стартап-кодом, чтобы он там по MS-DOS не скучал :)
Извините за бурную реакцию, но: Хватит! Я в универе на эту ерунду насмотрелся!
Что за ностальгия по 90ым?! Почему каждый раз, когда речь идёт о низкоуровневом программировании, начинаются разборы 8086ого, real mode, работа в древнем DOS и debug.com?
Я люблю олдскул, но учить в 2025 ассемблер также, как его деды учили - абсурд! Почему не используются современные инструменты для разработки в современных ОС, в long mode, с нормальным отладчиком, с постепенным переходом от создания простейших GUI-приложений на макросах FASMa к NTAPI, сисколлам, драйверам и более низкоуровневому коду?
N.B.: В DOSBox работа с прерываниями поддерживается не полностью, он может зависнуть или аварийно закрыться. Лучше всё-таки работать на живом "железе".
ну, кто-то любит попадью, кто-то свинной хрящик. Чтобы понастольгировать 8086 подходит, если кто его застал в эпоху бурной молодости, приятно вспомнить былые навыки. Чтобы донести ассемблер до молодого поколения лучше конечно что-то посовременнее взять, без нафталина, и подавать лучше не таким способом, более общим чтоли, с сопоставлением архитектур и их отличительных особенностей - расказать про endianess, выравнивание, наличие конвеера итд.. А если хочется чего-то совсем уж простого, можно например архитектуру 8051 предложить, для неё есть mcu8051ide - отличный IDE с эмулятором, очень наглядно даёт потрогать все азы микропроцессорной техники
8051 всего на пару лет моложе 8086, но вполне жив. Тут нужно найти компромисс: чтобы был одновременно и прикладной смысл и не требовалось какого-то специального оборудования для экспериментов in vivo. Думаю про Atmel и платки Arduino, но в контексте ассемблера. Пока не знаю, что было бы актуально И интересно читателям.
AVR ассембелер действительно неплох, писал на нём лет десять назад, когда начинал в embedded. Но там такая проблемка: эта архитектура так хорошо заточена под C, что в какой-то момент понимаешь что писать на ассембелре особо-то и нет необходимости, только чтобы познакомиться. В плане дидактики самого низкого уровня на мой взгляд 8051 реально лучше, она создавалась еще для ассемблерных программистов.
У Silicon Labs есть отличная серия EFM8, и девборды на неё не дороже ардуинок, рекомендую. И шустрые они, 25MHz и конвеер, по 1-2 такта на инструкцию, в отличии от старого.
Под C идеально заточен 1801ВМ1, там даже *(++p0) = *(p1--)
в одну инструкцию ассемблера можно уложить если мне не изменяет моя старческая память (p0 и p1 указатели на примитивные типы конечно, а не на структуры, там уже одной инструкцией не обойтись).
так это PDP11 архитектура, её особенность. У DEC Alpha говорят тоже ассемблер хорош был
MOV -(PC), -(PC)
кто трогал, тот поймёт :)
Система команд DEC PDP-11 была хороша, в СССР выпустили, ЕМНИП, три модели CPU: К1801ВМ1, ВМ2, ВМ3. Мой первый ассемблер был на ВМ2.
Система команд DEC PDP-11 была хороша, в СССР выпустили, ЕМНИП, три модели CPU: К1801ВМ1, ВМ2, ВМ3. Мой первый ассемблер был на ВМ2.
Еще были и микропроцессорные комплекты: 1811 и 1831 (аналоги комплектов DEC).
Я тогда в школе учился, ассемблер PDP-11, да под ОС RT11 по бледно-коричневым мануалам осваивал на машинках УКНЦ.
А я ассемблер PDP осваивал на КУВТ-86, состоявшего из центрального ДВК-2, к которому подключено много БК-0010.
А после занятий ходил в гости к приятелю, у которого дома (!!!) в то время (!!!) был настоящий комп Base-64 производства ФРГ, являвшийся клоном Apple ][e. И там я уже осваивал ассемблер 6502.
Я в универе на эту ерунду насмотрелся!
Мне в универе было интересно на ассемблере лабать, исключительно тёплые воспоминания. Правда, приходилось самому себе придумывать усложнения заданий ;)
Что за ностальгия по 90ым?!
Что за странный вопрос? Мы тогда были на 30 лет моложе.
Почему не используются современные инструменты для разработки в современных ОС, в long mode, с нормальным отладчиком, с постепенным переходом от создания простейших GUI-приложений на макросах FASMa к NTAPI, сисколлам, драйверам и более низкоуровневому коду?
Напишите, с удовольствием почитаем.
Практического смысла в этом, впрочем, будет примерно столько же, сколько и в статье о ассемблере под DOS.
В DOSBox работа с прерываниями поддерживается не полностью, он может зависнуть или аварийно закрыться. Лучше всё-таки работать на живом "железе".
Лучше, когда зависает DOSBox, чем когда зависает вся живая железяка.
Система с NTVDM — в самый раз. Забыл уже, в какой версии NT он последний раз из коробки шёл, в 32-битной Windows XP?
в наше время 30 лет назад архитектура x86 была практически единственная, мы с этим выросли, и это накладывает отпечаток. Хотя еще в 80х это было опять не так, тогда еще был зоопарк, но к нашим 90м он почти вымер, и нам казалось что вот это вот всё и только так и всегда. А сейчас умирает Intel и с ним уходит та эпоха, ничего не поделаешь, Arm и RISC-V сейчас важнее понимать, хотя бы в общих чертах. Такие дела.
Мне в универе было интересно на ассемблере лабать, исключительно тёплые воспоминания. Правда, приходилось самому себе придумывать усложнения заданий ;)
Мне тоже было интересно: все лабораторки из курса сделал за день и занялся тем же - придумывал себе задания, пробовал сделать что-то своё.
Что за странный вопрос? Мы тогда были на 30 лет моложе.
Я тоже был моложе, изучал работу с DOS во 2 классе, другие люди могли начать ещё раньше. На приставке программировал на BASIC (чего никому не желаю). Ностальгия по молодости - не аргумент.
Напишите, с удовольствием почитаем.
Может быть и напишу, отчего бы и нет? Ловите на слове!
Лучше, когда зависает DOSBox, чем когда зависает вся живая железяка.
Живую железку сбросить можно, но я писал о том, что некоторые действия DOSBox выполнить принципиально не позволяет. ЕМНИП, пару лет назад запустить в нём свой обработчик прерываний мне не удалось. Может быть с тех пор что-то изменилось.
Автор написал то, что ему было интересно.
Почему вы полагаете, что
не используются современные инструменты для разработки в современных ОС
? Для разработки в современных ОС используются (мной, в том числе) разные инструменты, вплоть до LLM & Cursor IDE.
Тут же либо олдскул, с соответствующими инструментами, либо то, что вы хотите. И тут два пути: вы можете написать такую публикацию сами, либо это сделает кто-то другой, возможно, что я :)
Если мне сегодня старый фотограф начнет промывать уши техникой печати фотоснимков, химической обработкой с фотоматериалами и т.д. и т.п., я вспомню эту публикацию.
Портирование же на уровне GUI с применением FSM это то, что сегодня актуально с применением x86
На все пр все, освоение за 20 минут без тяжелого низкоуровневого фундамента.
Спасибо, вспомнил школу, как писал дипломную работу на Ассемблере. Под MS-DOS, ага. Выежнулся, согласен. На «Турбо-Паскале» с «Турбо-Виженом» было бы проще и быстрее... :-)
DOS это еще что.... вот монитор (это по сути дебагер только без ассемблера/дизассемблера - все в HEX и ввод и вывод), который был в Специалисте (был такой довольно оригинальный комп с графическим дисплеем). Комп был собран (пайка) на макетке проводом МГТФ из деталей, что мне достал и купил папа.
Там из команд ввода вывода была только запись/чтение на/с магнитофона, а из подпрограмм (как прерывания в DOS) была только для вывода на экран символов на основе знакогенератора, который лежал в той же ROM где и сам монитор.
Там были набиты в HEX и ассемблер и еще несколько программ. А уже на ассме написана змейка (в графике).
И вот тогда.... (спаяв комп, набив в HEX ассемблер и написав в нем игру) я наконец смог поиграть :)
Слова "папа достал" заиграли новым смыслом. Но да, доставать приходилось и таки удавалось. В частности РУшки, микросхемы ОЗУ, в большинстве хоть и отбраковка, были цельнотянутыми с почтовых ящиков.
Да рушки (РУ3) как и еще пара микросхем были в золоте. Но тут надо большей половине читателей пояснить, что это значит: это такое исполнение микросхем в керамическом корпусе и позолоченными контактами, в таком исполнении микросхемы делались преимущественно для вояк, а в 90 был целый бизнес на извлечении этого золота из микросхем.
Хотя вот той же части читателей нужно еще пояснять, что такое почтовый ящик (который был источником таких микросхем, макетной платы и даже проводов и припоя, и где работал мой папа). Это военное производство начиная от проектных институтов и заканчивая заводами и полигонами - все имели гражданское название, например какие-нибудь Ленинец, Рубин или Малахит, но вся корреспонденция между ними ходила только как на ПЯ № 1234567890192010 (номер выдуман). Типа что бы шпиёны не догадались. Да только западные разведки знали о связи номеров ПЯ и предприятий больше, чем подавляющее большинство жителей СССР.
Кстати трансформатор в блоке питания для моего следующего (тоже спаянного собственными руками) ZX Spectrum был тороидальный (самый высокий КПД, но требует дюже специального оборудования для намотки) - тоже намотали папе по знакомству в ящике.
Начав читать, испугался и проверил год на календаре. Потом испугался за автора, что его держали взаперти 35 лет, успокоился дочитав до Ubuntu 24.04.
Блин, при чтении этой статьи я прям запах магазина "Технической книги" в Екатеринбурге на ул. К. Либкнехта почувствовал!
Низкоуровневое программирование под 8086 для любопытных, часть 1