User Tag List

Показано с 1 по 10 из 90

Тема: Потроха CP/M 2.2

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,926
    Спасибо Благодарностей отдано 
    105
    Спасибо Благодарностей получено 
    291
    Поблагодарили
    217 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от tnt23 Посмотреть сообщение
    А доступ к новым страницам нужно прописывать?
    Нет, ничего не надо. frame это окно доступа ко всему ОЗУ, таких окон может быть несколько, поэтому frame[0],frame[1],... и т.д. В конфиге описаны два окна, одно размером 32Кб, второе 64Кб. При выводе в portB биты 0-3 используются как номер страницы 32Кб-окна, а биты 1-3 как номер 64Кб-окна (этот номер в два раза меньше, но т.к. окно в два раза больше, то окно будет открыто на том-же месте). Я уже говорил, для чего нужно второе окно.

    Цитата Сообщение от tnt23 Посмотреть сообщение
    какой смысл все-таки несет индекс map [x]
    Номер карты памяти. В зависимости от того, какие из бит 4-5 порта В установлены, получим число от 0 до 3, это и будет индекс (номер) установленной карты. Например, если установлен только В4, то двоичное число 01 соответствует индексу 1. Тогда раскладка будет:
    0000-7FFF mem.frame[0] окно в 32Кб ОЗУ, номер которого (mem.frame[0].page) управляется битами 0-3 порта В
    8000-FFFF mem.frame[1][8000] окно в 64Кб (но со смещением 8000, т.е. только вторая половина) ОЗУ, номер которого (mem.frame[1].page) управляется битами 1-3 порта В

    - - - Добавлено - - -

    Цитата Сообщение от tnt23 Посмотреть сообщение
    но этого явно недостаточно
    Конечно, надо ещё увеличить размер диска в DPB

    - - - Добавлено - - -

    Посмотрел БИОС CP/M, выводы неутешительные:
    1. процедура рассчёта адреса сектора квазидиска расчитана только на 64Кб
    2. процедуры обмена с расширенной памятью в БИОСе также рассчитаны только на 64Кб максимум (т.е. адрес расширенной памяти 16-битный и передаётся в регистровой паре, никакого номера страницы не предусмотрено).
    Последний раз редактировалось b2m; 13.12.2018 в 17:36.

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

  3. #2

    Регистрация
    28.03.2006
    Адрес
    Санкт-Петербург
    Сообщений
    2,777
    Спасибо Благодарностей отдано 
    556
    Спасибо Благодарностей получено 
    200
    Поблагодарили
    138 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от b2m Посмотреть сообщение
    Сообщение от tnt23
    но этого явно недостаточно
    Конечно, надо ещё увеличить размер диска в DPB
    Это само собой, но пока и оно не дает результата, ясно почему:

    Цитата Сообщение от b2m Посмотреть сообщение
    Посмотрел БИОС CP/M, выводы неутешительные:
    1. процедура рассчёта адреса сектора квазидиска расчитана только на 64Кб
    Можешь дать ссылки на адреса?

    Цитата Сообщение от b2m Посмотреть сообщение
    2. процедуры обмена с расширенной памятью в БИОСе также рассчитаны только на 64Кб максимум (т.е. адрес расширенной памяти 16-битный и передаётся в регистровой паре, никакого номера страницы не предусмотрено).
    А здесь все не так плохо. В регистровой паре DE передается номер 128-байтового блока, которых в 64К влезает как раз 0x200. Как я уже выше писал, достаточно поправить пару команд в процедурах чтения-записи блока с "ANI 1; ORI 2" на "ANI 3; ADI 2", и сможем нормально щелкать линиями A16 и A17:

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

    Код:
    RDSEC:  ;F2A0
      PUSH  H
      PUSH  D
      MOV   A,D
      ANI   1    ; меняем на ANI 3
      ORI   2    ; меняем на ADI 2
      ORI   0
      MOV   B,A
      XRA   A
      MOV   A,E
      RAR
      MOV   D,A
      MVI   A,0
      RAR
      MOV   E,A
    [свернуть]
    Последний раз редактировалось tnt23; 13.12.2018 в 17:52.

  4. #3

    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,926
    Спасибо Благодарностей отдано 
    105
    Спасибо Благодарностей получено 
    291
    Поблагодарили
    217 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от tnt23 Посмотреть сообщение
    Можешь дать ссылки на адреса?
    А, так там не адрес, а номер сектора? Тогда отбой тревоги Адрес процедуры D712. Невнимательно посмотрел, там просто номер дорожки умножается на 16 и прибавляется номер сектора-1.
    Тогда действительно, достаточно подправить, как ты сделал (можно даже с рассчётом на будущее ANI 7). Увеличить размер диска можно подправив байт 3Fh на 7Fh в ПЗУ cpm80.bin по адресу 1796h.

    - - - Добавлено - - -

    Цитата Сообщение от tnt23 Посмотреть сообщение
    но пока и оно не дает результата
    Я тебе один умный вещ скажу, только ты не обижайся: встроенная команда DIR, которую они подправили, чтобы она размер свободной области выдавала, неправильно работает со 128Кб. Если через отладчик записать на кваз XDIR.COM, то он всё правильно покажет. Я попробовал после него записать два файла по 32Кб, а затем текстовый, так вот текст правильно выдаётся командой TYPE, т.е. всё работает.

  5. #4

    Регистрация
    28.03.2006
    Адрес
    Санкт-Петербург
    Сообщений
    2,777
    Спасибо Благодарностей отдано 
    556
    Спасибо Благодарностей получено 
    200
    Поблагодарили
    138 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от b2m Посмотреть сообщение
    Я тебе один умный вещ скажу, только ты не обижайся: встроенная команда DIR, которую они подправили, чтобы она размер свободной области выдавала, неправильно работает со 128Кб. Если через отладчик записать на кваз XDIR.COM, то он всё правильно покажет. Я попробовал после него записать два файла по 32Кб, а затем текстовый, так вот текст правильно выдаётся командой TYPE, т.е. всё работает.
    XDIR надо попробовать. Еще бы надыбать маленькую утилитку под CP/M, способную посчитать CRC или как-нибудь еще уникальность для произвольного файла, набить квазидиск да хоть бы копиями BIOS и проверить. А то текст может правильно выдаваться командой TYPE, и при этом из-за неверной адресации сидеть поверх тех двух файлов по 32Кб.

    - - - Добавлено - - -

    svofski, не далее как вчера скачивал и задумчиво глядел в PLM. Океанский CCP имеет отличия, начиная с команды DIR и заканчивая READ и WRITE.

    - - - Добавлено - - -

    Поправил 2 байта в BIOS и 1 байт в DPB:

    Нажмите на изображение для увеличения. 

Название:	XDIR.jpg 
Просмотров:	242 
Размер:	19.9 Кб 
ID:	67327

    (Фон цвета тины морской)

    - - - Добавлено - - -

    Цитата Сообщение от b2m Посмотреть сообщение
    Увеличить размер диска можно подправив байт 3Fh на 7Fh в ПЗУ cpm80.bin по адресу 1796h.
    Пробовал получить кваз на 192К (ок, на 191) методом правки 3Fh на BFh - нет, что-то не срастается.

  6. #5

    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,926
    Спасибо Благодарностей отдано 
    105
    Спасибо Благодарностей получено 
    291
    Поблагодарили
    217 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от tnt23 Посмотреть сообщение
    из-за неверной адресации сидеть поверх тех двух файлов по 32Кб
    Не, я смотрел куда записалось, у меня было 21000h, т.е. после границы памяти 128Кб

    Цитата Сообщение от tnt23 Посмотреть сообщение
    методом правки 3Fh на BFh - нет, что-то не срастается
    Не забыл ANI 7 сделать? 192Кб это страницы 2-7, т.е. до ADI 2 это будет 0-5.

  7. #6

    Регистрация
    28.03.2006
    Адрес
    Санкт-Петербург
    Сообщений
    2,777
    Спасибо Благодарностей отдано 
    556
    Спасибо Благодарностей получено 
    200
    Поблагодарили
    138 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от b2m Посмотреть сообщение
    Не забыл ANI 7 сделать? 192Кб это страницы 2-7, т.е. до ADI 2 это будет 0-5.
    А чёрт. Точно!

    Нажмите на изображение для увеличения. 

Название:	XDIR1.jpg 
Просмотров:	238 
Размер:	17.4 Кб 
ID:	67328

  8. #7

    Регистрация
    28.03.2006
    Адрес
    Санкт-Петербург
    Сообщений
    2,777
    Спасибо Благодарностей отдано 
    556
    Спасибо Благодарностей получено 
    200
    Поблагодарили
    138 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от tnt23 Посмотреть сообщение
    Еще бы надыбать маленькую утилитку под CP/M, способную посчитать CRC или как-нибудь еще уникальность для произвольного файла
    CRC.COM из дистрибутива Aztec C. например.

    Нажмите на изображение для увеличения. 

Название:	aztec.jpg 
Просмотров:	186 
Размер:	19.4 Кб 
ID:	67358
    crc.zip
    Последний раз редактировалось tnt23; 18.12.2018 в 21:16.

  9. #8

    Регистрация
    28.03.2006
    Адрес
    Санкт-Петербург
    Сообщений
    2,777
    Спасибо Благодарностей отдано 
    556
    Спасибо Благодарностей получено 
    200
    Поблагодарили
    138 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    (обожаю эксгумировать лежалые топики)

    Цитата Сообщение от b2m Посмотреть сообщение
    встроенная команда DIR, которую они подправили, чтобы она размер свободной области выдавала
    Пришлось вспомнить, как работать с ghidra (спойлер: весьма комфортно) и заново отдизелить океанские MONITOR, BIOS, BDOS и CCP.

    Монитор (0xe000-0xffff) после минимальной инициализации смотрит, прошит ли CPM (0xc0000-0xdfff), и передает управление загрузчику по адресу 0xd600.
    Загрузчик немножечко колдует, затем копирует CCP из ПЗУ (0xc000-0xc809) в RAM по адресу 0xb200, куда после недолгих раздумий прыгает сам.

    CCP почти один-в-один соответствует исходникам CP/M 2.2, за несколькими мелкими исключениями:

    - процедура проверки серийного номера на месте, но аварийный выход из нее забит NOP-ами
    - встроенных команд 6 ($DIR, ERA, TYPE, SAVE, REN, USER), к имени команды DIR добавлен доллар. Интересно, будет ли работать, если написать $DIR
    - после адресов обработчиков встроенных команд обычно идет адрес обработчика транзитных команд userfunc. В нашем случае там вбит адрес обработчика дополнительных команд из ПЗУ CP/M (0xdb00)
    - каковой добавляет еще 4 встроенные команды (DIR, READ, WRITE, EXIT). Ну и в конце ссылается обратно на штатный обработчик userfunc (0xb8a5).
    Последний раз редактировалось tnt23; 14.04.2023 в 10:44.

    Этот пользователь поблагодарил tnt23 за это полезное сообщение:

    dk_spb(30.12.2023)

  10. #9

    Регистрация
    28.03.2006
    Адрес
    Санкт-Петербург
    Сообщений
    2,777
    Спасибо Благодарностей отдано 
    556
    Спасибо Благодарностей получено 
    200
    Поблагодарили
    138 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от tnt23 Посмотреть сообщение
    (обожаю эксгумировать лежалые топики)
    Интересно, будет ли работать, если написать $DIR
    Нажмите на изображение для увеличения. 

Название:	dirdollar.jpg 
Просмотров:	204 
Размер:	13.3 Кб 
ID:	79994

    Этот пользователь поблагодарил tnt23 за это полезное сообщение:

    dk_spb(30.12.2023)

  11. #10

    Регистрация
    28.03.2006
    Адрес
    Санкт-Петербург
    Сообщений
    2,777
    Спасибо Благодарностей отдано 
    556
    Спасибо Благодарностей получено 
    200
    Поблагодарили
    138 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от tnt23 Посмотреть сообщение
    достаточно поправить пару команд в процедурах чтения-записи блока с "ANI 1; ORI 2" на "ANI 3; ADI 2", и сможем нормально щелкать линиями A16 и A17
    В Мониторе неизвестной версии, который подогнали коллеги из Североморска, процедуры уже пропатчены:

    Код:
    WBLOCK                                    XREF[2]:   ram:e01e(c), RAM2TAP:fa61(c)  
          ram:fb43 e5                PUSH      HL
          ram:fb44 d5                PUSH      DE
          ram:fb45 7a                MOV       A,D
          ram:fb46 e6 07             ANI       0x7
          ram:fb48 c6 02             ADI       0x2
          ram:fb4a f6 00             ORI       0x0
    Последний раз редактировалось tnt23; 04.01.2024 в 21:45.

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

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

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

Ваши права

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