Важная информация

User Tag List

Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 25

Тема: адаптация CP/M-программ под стандартный ZX-Spectrum

  1. #1
    Master Аватар для siril
    Регистрация
    01.02.2005
    Адрес
    perm/ru
    Сообщений
    520
    Благодарностей: 189
    Записей в дневнике
    1
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию адаптация CP/M-программ под стандартный ZX-Spectrum

    Под CP/M существует довольно много полезных и потенциально полезных программ.

    Каков алгоритм переноса CP/M-программы в стандартный режим ZX Spectrum'а?

    Я так понимаю, что если у нас есть исходник переносимой программы, то:

    1) пытаемся скомпилировать его под ZXCPM. (Кстати, возможно ли переделать её под BASE - 4000, TPA - 4100. А в bios реализовать переключение в 7-ю страницу для вывода текста на экран #c000, и стоит ли такой изврат выгоды в 8 килобайт?)

    Вопрос а) перекомпилированы ли под ZXCPM основные средства разработки? PL/pascal/etc и с чем есть проблемы?

    Если у нас получилось скомпилировать приложение под ZXCPM и оно работает - значит принципиальная возможность его работы в обычном спектрумовском режиме доказана и есть в наличии, следовательно можно попытаться адаптировать получившийся код к спектрумовскому режиму (заменой библиотек с процедурами ввода/вывода). Как это лучше всего сделать?

    Если исходника нет, то?

    Какие тут есть возможности? чем декомпилировать? (с осмысленной интерпретацией системных вызовов) каков формат .com файла? Как в CP/M организована работа с прерываниями?
    oisee.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Veteran Аватар для Vadim
    Регистрация
    24.07.2008
    Адрес
    Курган
    Сообщений
    1,692
    Благодарностей: 354
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Может не заниматься ерундой? А запустить CP/M на спектрум +3, хотя бы. Или на Профи/ATM?

    Скрытый текст

    Profi 5.06 1024K 12Mhz (кварц на 24), палитра, COM-порт, часы, hdd, covox, программатор
    ZX-Spectrum +3, ZX-Spectrum +2B, ZX-Spectrum +2, ZX Spectrum 48, ZX Spectrum 48+
    ZX Evolution Rev B.
    Color 48 + Beta Disk Interface +FDD+YM2149F
    Орель-08БК
    Pentagon-48 (недоссобранный кем-то)
    Pentagon-128 (полуубитый)
    Кворум-128 (в ремонте)
    Магик-05 (в ремонте)
    Robotron 1715
    Корвет ПК8020 и ПК8010
    Amstrad CPC 464
    Amstrad CPC 6128
    [свернуть]

  4. #3
    Master Аватар для siril
    Регистрация
    01.02.2005
    Адрес
    perm/ru
    Сообщений
    520
    Благодарностей: 189
    Записей в дневнике
    1
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vadim Посмотреть сообщение
    Может не заниматься ерундой? А запустить CP/M на спектрум +3, хотя бы. Или на Профи/ATM?
    Vadim, если бы стояла задача запустить что-то в режиме CP/M, я бы так и спросил.

    есть что сказать по существу вопроса? Для каких средств разработки есть исходники (и где)? какие есть декомпиляторы под CP/M?
    Последний раз редактировалось siril; 18.04.2013 в 10:45.
    oisee.

  5. #4
    Veteran Аватар для Eltaron
    Регистрация
    16.01.2005
    Адрес
    Ekaterinburg
    Сообщений
    1,187
    Благодарностей: 641
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Если есть исходник, а программа написана нормально (=вся работа с диском, экраном и клавиатурой идет через BDOS), то достаточно реализовать те BDOS-функции, которые она использует. Их обычно мало - я эмулятор CP/M для PC, способный запускать ассемблер M80 и Hitech C, написал за вечер.
    После чего заменить все CALL 5 с соответствующими LD на вызовы новых функций.

    Как я понимаю, ZXCPM именно это и делает. Что значит, что ассемблерный CP/M исходник под ней соберется, но не заработает - точку входа в BDOS всё равно надо менять.

    Если исходников нет, то путь один - дизассемблирование com-файла (внутри это голый код без заголовков, который кладется по адресу 0x100 и с него же исполняется), а дальше та же самая замена CALL 5 на свои функции.
    Граф Дракула наш кумир, патамушта он вомпир!

  6. Эти 2 пользователя(ей) поблагодарили Eltaron за это полезное сообщение:
    Barmaley_m (07.11.2013), siril (18.04.2013)

  7. #5
    Master Аватар для siril
    Регистрация
    01.02.2005
    Адрес
    perm/ru
    Сообщений
    520
    Благодарностей: 189
    Записей в дневнике
    1
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Eltaron Посмотреть сообщение
    Если есть исходник, а программа написана нормально (=вся работа с диском, экраном и клавиатурой идет через BDOS)
    это относится только к программам на ассемблере? (их можно попытаться откомпилить и в спектрумовских асмах).

    а если исходники на паскале, С, PL/M?

    есть ли исходники этих компиляторов (где-нибудь) и можно ли их перекомпилировать под ZXCPM, либо, скомпилировать с их помощью под обычной CP/M на другой рабочий адрес? (не под 0x0100)

    (чтобы, например, заиметь 2 версии откомпилированного файла, с возможностью автоматически найти все изменяемые адреса переходов путём сравнения двух бинарников.)

    После чего заменить все CALL 5 с соответствующими LD на вызовы новых функций.
    Не подскажешь где есть подробное описание точек входа? (что-то вроде этого?)

    Если исходников нет, то путь один - дизассемблирование com-файла (внутри это голый код без заголовков, который кладется по адресу 0x100 и с него же исполняется), а дальше та же самая замена CALL 5 на свои функции.
    Кроме как через CALL 5 в правильной CP/M программе взаимодействие с системой как-то осуществляется?

    Какой-то стоящий подробный мануал для программиста по внутреннему устройству CP/M можешь подсказать? (в интернетах искал, но по CP/M гуглы ничего лучше чем мануал для пользователя не находили).
    oisee.

  8. #6
    Veteran Аватар для Eltaron
    Регистрация
    16.01.2005
    Адрес
    Ekaterinburg
    Сообщений
    1,187
    Благодарностей: 641
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от siril Посмотреть сообщение
    это относится только к программам на ассемблере? (их можно попытаться откомпилить и в спектрумовских асмах).

    а если исходники на паскале, С, PL/M?
    Ну, компилятор-то всё равно выдает ассемблерный код. Проблема, скорее, в исходниках библиотек, которые этими компиляторами используются. Что с ними делать - не знаю. Наверное только дизассемблировать.

    есть ли исходники этих компиляторов (где-нибудь) и можно ли их перекомпилировать под ZXCPM, либо, скомпилировать с их помощью под обычной CP/M на другой рабочий адрес? (не под 0x0100)
    Тот компилятор, который лежит на дискете в ZXCPM, есть в исходниках - http://www.bdsoft.com/resources/bdsc.html
    Hitech C бесплатен, но не открыт. Про остальные языки и компиляторы не в курсе.

    (чтобы, например, заиметь 2 версии откомпилированного файла, с возможностью автоматически найти все изменяемые адреса переходов путём сравнения двух бинарников.)
    Если компилер отделен от линкера (как в тех же Hitech C и BDC), то даже компилировать не надо, в объектном файле содержится информация о точках, где требуется релокация адреса.

    Не подскажешь где есть подробное описание точек входа? (что-то вроде этого?)
    Да, оно.
    Или еще http://atmturbo.nedopc.com/inf/bios_cpm.htm

    Кроме как через CALL 5 в правильной CP/M программе взаимодействие с системой как-то осуществляется?
    Есть еще BIOS, самая низкоуровневая часть CP/M, его использование не запрещено. Но на практике гораздо удобней использовать BDOS, поэтому подавляющее большинство программ в BIOS не лезет.

    Какой-то стоящий подробный мануал для программиста по внутреннему устройству CP/M можешь подсказать? (в интернетах искал, но по CP/M гуглы ничего лучше чем мануал для пользователя не находили).
    Где-то был мануал от Кворума, но там, по-моему, ровно то же, что и по твоей ссылке, и на сайте АТМ. Поищу на всякий случай.
    Граф Дракула наш кумир, патамушта он вомпир!

  9. Эти 2 пользователя(ей) поблагодарили Eltaron за это полезное сообщение:
    Barmaley_m (07.11.2013), siril (18.04.2013)

  10. #7
    Guru Аватар для caro
    Регистрация
    14.01.2005
    Адрес
    Ekaterinburg
    Сообщений
    2,481
    Благодарностей: 776
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от siril Посмотреть сообщение
    Какой-то стоящий подробный мануал для программиста по внутреннему устройству CP/M можешь подсказать? (в интернетах искал, но по CP/M гуглы ничего лучше чем мануал для пользователя не находили).
    Вот почитай для начала:
    Вложения Вложения
    • Тип файла: zip CPM.zip (39.9 Кб, Просмотров: 123)

  11. Эти 4 пользователя(ей) поблагодарили caro за это полезное сообщение:
    hantarex (04.03.2014), perestoronin (18.04.2013), siril (18.04.2013), Максагор (18.04.2013)

  12. #8
    Master Аватар для siril
    Регистрация
    01.02.2005
    Адрес
    perm/ru
    Сообщений
    520
    Благодарностей: 189
    Записей в дневнике
    1
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    @Eltaron: спасибо!

    Цитата Сообщение от caro Посмотреть сообщение
    Вот почитай для начала:
    отлично! спасибо!

    в примере там есть процедура вычисления адреса BIOS:

    Код:
       ld hl,#0001
    ясно, что по адресу #0000 стоит JP BIOS, означает ли это, что BIOS начинается с процедуры холодного старта?
    oisee.

  13. #9
    Veteran
    Регистрация
    16.09.2009
    Адрес
    г. Харьков
    Сообщений
    1,466
    Благодарностей: 575
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Eltaron Посмотреть сообщение
    Если есть исходник, а программа написана нормально (=вся работа с диском, экраном и клавиатурой идет через BDOS)
    не факт, она еще может определять доступную память читая из
    0006: DW

    она еще часто ходит в биос (т.к. это тоже стандартно и они имеют полное право)
    там еще default fcb 005c, ....

    а в общем то имхо смысла очень мало ....

  14. #10
    Veteran Аватар для Eltaron
    Регистрация
    16.01.2005
    Адрес
    Ekaterinburg
    Сообщений
    1,187
    Благодарностей: 641
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от siril Посмотреть сообщение
    означает ли это, что BIOS начинается с процедуры холодного старта?
    Теплого
    Список функций BIOS приведен в таблице 5.

    Таблица 5.
    Код:
    г======T=============T===============T==========================┐
    │Номер │ Смещение    │     Имя       │   Назначение             │
    │функц │   HEX       │    функции    │                          │
    │======+=============+===============+==========================│
    │ 0    │   00        │    WarmBoot   │  "Теплый старт"          │
    │------+-------------+---------------+--------------------------│
    │Управление вводом-выводом                                      │
    │------T-------------T---------------T--------------------------│
    │1     │   03        │    ConSt      │  Состояние консоли       │
    │2     │   06        │    ConIn      │  Ввод с консоли          │
    │3     │   09        │    ConOut     │  Вывод на консоль        │
    │4     │   0D        │    List       │  Вывод на принтер        │
    │5     │   0F        │    Punch      │  Вывод на перфоратор     │
    │6     │   12        │    Reader     │  Чтение с перфоленты     │
    │------+-------------+---------------+--------------------------+
    │Управление дисковыми накопителями                              │
    │------T-------------T---------------T--------------------------│
    │7     │   15        │    Home       │  Установка головки       │
    │      │             │               │  на 0 трек               │
    │8     │   18        │    SelDsk     │  Выбор текущего дисковода│
    │9     │   1B        │    SetTrc     │  Установить номер тек.   │
    │      │             │               │  трека для операции      │
    │10    │   1E        │    SetSec     │  Установить номер тек.   │
    │      │             │               │  сектора для операции    │
    │11    │   21        │    SetDma     │  Установить адрес DMA    │
    │12    │   24        │    Read       │  Чтение текущего сектора │
    │13    │   27        │    Write      │  Запись текущего сектора │
    │------+-------------+---------------+--------------------------│
    │Дополнительные функции                                         │
    │------T-------------T---------------T--------------------------│
    │14    │   2A        │    ListSt     │  Опрос состояния принтера│
    │15    │   2D        │    SecTran    │  Пересчет номера сектора │
    L======│=============│===============│==========================-
    Граф Дракула наш кумир, патамушта он вомпир!

Страница 1 из 3 123 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Адаптация программ к системе +3DOS
    от Addison в разделе Софт
    Ответов: 113
    Последнее: 05.12.2017, 17:05
  2. Ответов: 172
    Последнее: 10.12.2012, 17:36
  3. Стандартный шрифт
    от JeRrS в разделе Для начинающих
    Ответов: 5
    Последнее: 19.11.2010, 17:58
  4. TS адаптация
    от Voxel в разделе Музыка
    Ответов: 202
    Последнее: 23.09.2010, 21:47
  5. Ответов: 16
    Последнее: 14.03.2007, 05:35

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •