Что изменилось для одного байта в порт WordStar из CP/M в DOS?

Я перечитывал Joel Strategy Letter II: проблемы с курицей и яйцом и наткнулся на эту забавную цитату:

Фактически, WordStar был перенесен в DOS путем изменения одного байта в код. (Реальные программисты могут сказать вам что это за байт, я давно забыли).

Я не мог найти никаких других ссылок на это с помощью быстрого поиска Google. Это правда или просто фигура речи? В интересах моего стремления стать "настоящим программистом", что изменилось с помощью одного байта?

Ответы

Ответ 1

Звучит немного преувеличенно, нашел некоторую историю WordStar здесь

WordStar 3.0 для MS-DOS

Apr 1982

В одном полнометражном сеансе Джим Фокс запустил версию WordStar CP/M-86, чтобы запустить ее под MS-DOS на ПК IBM, чтобы это было продемонстрировано Rubenstein. Фактический порт был сделан группой ирландских программистов с использованием систем разработки Intel, в которых работала операционная система ISIS II. Сборка программного обеспечения была выполнена на 8-дюймовых дискетах, а двоичные (исполняемые) файлы затем были переданы на ПК IBM по последовательному кабелю.

Но... Джоэл, возможно, имел в виду MS-DOS 1.0/QDOS

MS-DOS 1.0 на самом деле была переименованной версией QDOS (Quick and Dirty Operating System), которую Microsoft купила в Сиэтле, соответствующая компания Seattle Computer Products, в июле 1981 года. QDOS был разработан как клон CP/M восьмибитной операционной системы, чтобы обеспечить совместимость с популярными бизнес-приложениями дня, такими как WordStar и dBase. CP/M (программа управления для микрокомпьютеров) была написана Гари Килдалл из Digital Research несколькими годами ранее и стала первой операционной системой для микрокомпьютеров общего пользования.

Ответ 2

Вам нужно будет изменить более одного байта. Исполняемые файлы CP/M-86 (. CMD) имеют 128-байтовый заголовок, который не похож на заголовок .EXE.

Если вы ограничиваете все вызовы API общим подмножеством CP/M и DOS, вы можете использовать условную сборку для сборки версий CP/M и DOS из одного источника:

bdos:
       if CPM86
         int 0E0h
       else
         mov ah, cl
         int 21h
       endif

Ответ 3

Эта запись в Wikipedia утверждает, что CP/M и MS-DOS используют двоичные форматы. Далее говорится:

Хотя формат файла тот же в MS-DOS и CP/M это не означает что программы CP/M могут быть напрямую выполненных под MS-DOS или наоборот; MS-DOS COM файлы содержат x86 инструкции, в то время как CP/M COM файлы содержат 8080, 8085 или Z80 инструкции.

В CP/M 3, если первый байт COM файл равен 0xC9, тогда это указывает наличие 256-байтового заголовка; поскольку 0xC9 соответствует 8080 RET, это означает, что COM файл немедленно прекратится, если запустить на более ранней версии CP/M, которая не поддерживает это расширение.

Это означает, что, возможно, fix/port меняет эту первую инструкцию на что-то другое, что заставляет остальных выполнять. Однако не уверен, что это означает, что двоичный файл должен быть "толстым", что кажется необоснованным для старого двоичного файла.

Ответ 4

"Фактически, WordStar был перенесен в DOS, изменив один байт в коде. (Настоящие программисты могут рассказать вам, что это за байт, я давно забыл).

Пн 6/08/2009 18:27. Мое предположение состоял в том, что Спольский говорил о 8080 CP/M до 8086 MSDOS, и эта история, вероятно, была фиктивной. 8086 CP/M никогда не был большим предметом - я имею в виду, что он был полностью раздавлен MSDOS, и кто-то мог преобразовать WordStar с 8080-CPM в 8086-CPM - путем его сборки, как отмечали другие, используя специальный 8080-to-8086 переводчик thingey - и тогда, возможно, нужно было изменить только один байт.

Ответ 5

Я не уверен, является ли утверждение Джоэла точным или нет. Возможно, он имел в виду демонстрационную версию, которую сделал Джим Фокс?

См. http://www.wordstar.org/wordstar/history/history.htm

Я приведу соответствующий раздел:

WordStar 3.0 для MS-DOS

Apr 1982

В одной однодневной сессии Джим Fox закрепил версию CP/M-86 WordStar, чтобы он запускался под MS-DOS на ПК IBM, чтобы он мог продемонстрировал Рубенштейну. Настоящий порт был сделан группой ирландцев программисты, использующие разработку Intel систем, которые управляли ISIS II операционная система. Создание программного обеспечения было выполнено на 8 "дискетах и ​​двоичном (исполняемые) файлы были тогда передается на ПК IBM по серийному номеру кабель.

(Edit: Ой, слишком поздно. Кто-то еще нашел то же самое: -/Не стесняйтесь игнорировать меня.)

Ответ 6

WordStar был написан на ассемблере 8080, а затем были инструменты для преобразования ассемблера 8080 на 8086 (набор инструкций 8086 был разработан для этого), если весь код мог вписаться в один сегмент, так что это вполне возможно.

Впервые я использовал WordStar в 1979 году в ящике Z80 CP/M. Сегодня люди могут не понимать, как им повезло: сколько пользователей MS Word будет подготовлено в качестве первой задачи по установке своего текстового процессора, чтобы написать пару небольших ассемблерных подпрограмм (в шестнадцатеричном формате) для эффективного взаимодействия текстового процессора (вы могли бы использовать подпрограммы CP/M, но они были медленными и не работали должным образом) с экраном и клавиатурой? Счастливые дни...

Ответ 7

Важно понять, что в то время как 16-битные машины 8086 просто выходили на смену нынешним 8-разрядным машинам, где операционная система CP/M была Windows дня. Все с дисководом, предназначенным для работы, запускало CP/M. Эта версия позже называлась CP/M-80, чтобы отличать ее от CP/M-86 для процессора 8086.

К сожалению, для выхода на рынок было так много времени, что QDOS была написана, чтобы программа SOMETHING запускала программы, и это было по существу быстрой реализацией функций CP/M (но с другим синтаксисом). QDOS позже был куплен Microsoft и внесен в MS-DOS. Следовательно, MS-DOS на самом деле имеет внутреннее ядро ​​CP/M, и поэтому объем работы, необходимый для запуска программы CP/M-86 для работы под MS-DOS, был ограничен (не одним байтом, а управляемым).

Мне было приятно работать несколько лет с CCP/M-86, что позволило многозадачность, очень похожую на то, что Linux в текстовом режиме (с виртуальными консолями) позволяет сегодня. К сожалению, он никогда не попадал. О, ну, у нас есть Linux:)