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

User Tag List

Показано с 1 по 9 из 9

Тема: Теневой монитор для "Орели БК-08"

  1. #1
    Veteran
    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,053
    Спасибо Благодарностей отдано 
    218
    Спасибо Благодарностей получено 
    47
    Поблагодарили
    31 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    Smile Теневой монитор для "Орели БК-08"

    Владельцам "Орели БК-08" и сочувствующим - новогодний подарок!

    Monitor Z80 64K Version 2.0 (c) 1993 Michael Borisov & Arcadi Pushnikov

    Теневой монитор-отладчик!

    Загружается в теневые 16Кб ОЗУ "Орели БК-08" аналогично монитору MZ80, входящему в комплект поставки. Вызывается нажатием кнопки NMI, прерывая любую программу! По сравнению с прототипом имеет ряд решающих преимуществ:

    - дизассемблер, в том числе в исходный текст формата ZEUS.
    - не портит верхних 48К ОЗУ при возврате из прерванной программы (только 4 байта на вершине стека)
    - корректная работа с регистром R
    - значительное повышение удобства работы, поддержка ввода-вывода на кассету, в том числе в турбо-форматах двойной и тройной плотности (совместимо с копировщиком SORMOS3 и турбо-бейсиком "Рапид").

    Это коммерческая версия, которая была закончена летом 1993 года, и мы с соавтором (Аркадий Пушников) пытались ее продавать на радиорынке.

    С тех пор, разумеется, появлялись более новые версии. Последняя рассчитана на работу с "Орелью", имеющей 160Кб ОЗУ, открытые порты TR-DOS, IN 7FFD и рядом других нестандартных изменений, поэтому на заводской "Орели" ее запустить нельзя. А версию 2.0 - можно, и этим она ценна.

    Надеюсь, кому-нибудь пригодится!

    Описания не сохранилось, могу только по памяти пару намеков дать. Синтаксис команд единообразный: "K Adr1,Adr2,Adr3", где K - буква или символ, Adr1,Adr2 - шестнадцатеричные числа. Монитор воспринимает также и десятичные числа, если указывать им префикс - апостроф. Если использовать в качестве префикса кавычку, то в качестве адреса или константы пойдет код символа, стоящего после кавычки. Удобно при модификации памяти.

    D <Adr> - вывод содержимого памяти с адреса Adr, а если адрес не указан - то продолжение вывода, начатого предыдущей командой D.

    U <Adr> - просмотр дизассемблированного содержимого памяти с адреса Adr или, если адрес не указан - продолжение вывода.

    M Adr - модификация памяти с адреса Adr. Выход из режима модификации - клавиша "." (точка).

    Q - выход в Бейсик (0 OK, 0:1). Если системные переменные бейсика испорчены - то сбой.

    R - возврат из NMI

    T Adr1,Adr2,Adr3 - перемещение памяти с Adr1 по Adr2 на Adr3.

    I <Adr> - ввод с магнитофона (по адресу Adr)

    O Adr1,Adr2 - вывод на магнитофон

    S Adr1,Adr2,Byte1,<Byte2>,<Byte3>,<Byte4> - поиск последовательности в памяти начиная с Adr1 по Adr2, макс. длина последовательности - 4 байта

    F Adr1,Adr2,Byte - заполнение памяти с Adr1 по Adr2 константой Byte

    G Adr1,<Adr2> - возврат из NMI на адрес Adr1 или (если указан Adr2) выполнение кода с Adr1 по Adr2 (на Adr2 ставится точка останова вида CALL #66).

    H Turbo - Установка скорости обмена с кассетой (допустимые значения: 1,2,3).

    J Adr1 - выполнение подпрограммы в кодах по Adr1 (когда подпрограмма возвращается по RET, то управление передается на адрес #66)

    X <Rb> - просмотр и изменение содержимого регистров в блоке Rb. Блок регистров 0 используется при входе и возврате из NMI; блок регистров 1 - при использовании команд G Adr1,Adr2 и J. Блок регистров 2 свободен.

    B <Rb0>,<Rb1> - пересылка содержимого блока регистров Rb0 в блок Rb1.

    N <Ramtop> - выход в бейсик вида "CLEAR Ramtop: NEW". Работает независимо от того, испорчены системные переменные или нет. Позволяет задействовать бейсик, сохранив некоторую часть содержимого верхней памяти.

    + Num1,Num2 - сложение чисел
    - Num1,Num2 - вычитание чисел
    = Num - вывод числа в шестнадцатеричной и десятичной системах счисления

    Реализованы и другие команды. Фактически, из команд-букв задействованы почти все, но я к сожалению уже все это забыл.

    Приятной работы с монитором!
    Вложения Вложения

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

  3. #2
    Activist
    Регистрация
    23.02.2005
    Адрес
    Донецк
    Сообщений
    436
    Спасибо Благодарностей отдано 
    23
    Спасибо Благодарностей получено 
    87
    Поблагодарили
    53 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А сорцы не завалялись, хотелось бы глянуть на дизассемблер.

  4. #3
    Veteran
    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,053
    Спасибо Благодарностей отдано 
    218
    Спасибо Благодарностей получено 
    47
    Поблагодарили
    31 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Rubts0FF, завалялись сорцы от последней версии, но дизассемблер там без изменений практически был начиная с версии монитора 1.0.

    Привожу необходимые файлы в аттаче.

    Дизассемблер мы с Аркадием выдрали из компактного монитора Z80-List. На те времена меня не хватило на то, чтобы разобраться, как он работает. Лишь дал ему пару предохранительных веток, чтобы не портил память от длинных последовательностей DD/FD.

    Как можно видеть из сорца, там метки все трехбуквенные и бессмысленные - это была на то время наша традиция такая расставления меток вручную. Ибо код переписывался сначала ручкой на бумагу с адресами (с помощью дизассемблера Infrared), а потом - заводился вручную в ZEUS. С некоторого времени впоследствии я перешел на CP/M, и сырцы мониторные остались в формате ассемблера M80 от Microsoft.

    Сорц от дизассемблера (лакомую добычу!) я подарил Андрею Гетало, так что его Monitor Focal под Орель БК-08 также использует этот дизассемблер.

    Теперь немного о том, как ориентироваться в сорце. Там есть точка входа DIRU - туда попадает управление, когда пользователь введет директиву U. По метке IKP крутится цикл - дизассемблируется и выводится на экран 14 команд. Подпрограмма DISA - дизассемблирование одной строки в буфер. В этом же сорце находится реализация другой директивы - 'E' - пошаговое выполнение (в версии 2.0 ее еще не было). Однако я так и не довел до совершенства пошаговое выполнение. Уже не помню точно, были ли там явные глюки, но мне оно не нравилось, и я им не пользовался практически никогда. Добавил в монитор просто "для полноты комплекта" и чтобы не отставать от Гетало.
    Вложения Вложения

  5. #4
    Veteran
    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,053
    Спасибо Благодарностей отдано 
    218
    Спасибо Благодарностей получено 
    47
    Поблагодарили
    31 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Директивы "монитора"

    Привожу описание остальных директив монитора, восстановленное по изучению исходного текста.

    CLS - очистка экрана

    C Adr1,Adr2,Adr3 - сравнение двух областей памяти

    A Num - вывод числа в шестнадцатеричной и десятичной системах

    = Ink,Paper - установка цвета

    Y Adr - ввод в память строки текста

    S Adr1,Adr2,Byte1,<Byte2>,<Byte3>,<Byte4> - поиск последовательности. Максимальная длина - 4 байта. В качестве элементов последовательности можно указывать символ "?", что означает "любое значение".

    < Port - ввод из порта

    > Port,Value - вывод в порт

    P - выбор страницы ПЗУ. Возможные значения: 0 (бейсик), 1 (альтернативное ПЗУ), 2 (теневое ОЗУ). С выбранной страницей будут работать все остальные команды, читающие из памяти. Запись по адресам 0000-3FFF запрещена независимо от страницы - чтобы предотвратить самозатирание монитора.

    L - показать экран. До нажатия любой клавиши отображается содержимое экранной области прерванной программы.

  6. #5
    Moderator Аватар для BYTEMAN
    Регистрация
    11.01.2006
    Адрес
    Брест/Минск
    Сообщений
    8,393
    Записей в дневнике
    4
    Спасибо Благодарностей отдано 
    177
    Спасибо Благодарностей получено 
    115
    Поблагодарили
    57 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Монитор работает с любым спеком, имеющим 16Кб теневухи?
    С уважением, Александр.
    Scorpion ZS-256 Turbo+ GMX-2048
    SID-Blaster/ZX
    Музей ретрокомпьютеров в Минске!
    Здесь ничего нет => http://byteman.by
    И здесь тоже --->>> http://bytespace.by

  7. #6
    Veteran
    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,053
    Спасибо Благодарностей отдано 
    218
    Спасибо Благодарностей получено 
    47
    Поблагодарили
    31 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Да, но:

    1. Требуется чтобы у этого спека теневуха включалась по порту #7F. OUT (#7F),2 - включение теневухи, OUT (#7F),0 - выключение.

    2. Требуется чтобы в ПЗУ Бейсика была измененная подпрограмма обработки NMI в точности такого вида:

    PUSH AF
    LD A,2
    OUT (#7F),A
    PUSH HL
    LD HL,(NMI_AD)
    JP (HL)
    POP HL
    POP AF
    RETN

    3. Требуется расширенная клавиатура "Орели", иначе не удастся ввести такие важные символы, как ",". Клавиша "запятая" у Орели как раз размещена на тех битах порта #FE, которые в стандартном спеке не используются.

  8. #7
    Moderator Аватар для BYTEMAN
    Регистрация
    11.01.2006
    Адрес
    Брест/Минск
    Сообщений
    8,393
    Записей в дневнике
    4
    Спасибо Благодарностей отдано 
    177
    Спасибо Благодарностей получено 
    115
    Поблагодарили
    57 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Судя по всему, у Байта клава имеет шесть доп. кнопок, которые висят как-раз на доп. битах. Вобщем, проверим
    С уважением, Александр.
    Scorpion ZS-256 Turbo+ GMX-2048
    SID-Blaster/ZX
    Музей ретрокомпьютеров в Минске!
    Здесь ничего нет => http://byteman.by
    И здесь тоже --->>> http://bytespace.by

  9. #8
    Guru Аватар для bigral
    Регистрация
    12.07.2006
    Адрес
    г. Киев, Украина
    Сообщений
    2,147
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    95
    Поблагодарили
    82 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Barmaley_m Посмотреть сообщение
    Да, но:

    1. Требуется чтобы у этого спека теневуха включалась по порту #7F. OUT (#7F),2 - включение теневухи, OUT (#7F),0 - выключение.

    2. Требуется чтобы в ПЗУ Бейсика была измененная подпрограмма обработки NMI в точности такого вида:

    PUSH AF
    LD A,2
    OUT (#7F),A
    PUSH HL
    LD HL,(NMI_AD)
    JP (HL)
    POP HL
    POP AF
    RETN
    А какой смысл было помещать в ПЗУ команды следующие после "OUT (#7F),A" ?

  10. #9
    Veteran
    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,053
    Спасибо Благодарностей отдано 
    218
    Спасибо Благодарностей получено 
    47
    Поблагодарили
    31 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от bigral Посмотреть сообщение
    А какой смысл было помещать в ПЗУ команды следующие после "OUT (#7F),A" ?
    Об этом лучше спросить у разработчиков ПЗУ "Орели". Я же могу описать лишь последствия принятого решения.

    Можно скопировать содержимое ПЗУ бейсика в теневое ОЗУ и исполнять его оттуда. Тогда команда "out (#7f),a" не будет иметь никаких последствий, и при NMI будут исполняться следующие за ней команды. Появляется возможность передать управление по произвольному адресу при нажатии NMI, а также вернуться из прерывания.

    Что касается теневого монитора - то он использует команды POP AF, RETN для возврата из NMI, и это важно, т.к. появляется возможность не размещать в верхних 48К памяти никакого кода, относящегося к монитору, а только лишь 4 байта на стеке - содержимое AF и адрес возврата.

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

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

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

Похожие темы

  1. Ответов: 67
    Последнее: 21.04.2021, 14:51
  2. Ответов: 18
    Последнее: 27.08.2008, 20:27
  3. Ответов: 6
    Последнее: 20.11.2007, 11:29
  4. продаю монитор "Электроника" ВТЦ
    от White_Hunter в разделе Барахолка (архив)
    Ответов: 3
    Последнее: 09.08.2007, 12:20
  5. теневой монитор Скорпиона
    от Dima Bystrov (2:5029/77.48) в разделе Разный софт
    Ответов: 10
    Последнее: 25.10.2005, 03:16

Ваши права

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