User Tag List

Страница 20 из 94 ПерваяПервая ... 161718192021222324 ... ПоследняяПоследняя
Показано с 191 по 200 из 1102

Тема: Emu80 v.4

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

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

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

    По умолчанию

    Цитата Сообщение от barsik Посмотреть сообщение
    Ну а вот, что делаете Вы, т.к Вам неизвестна точка выхода, это большой и тщательно скрываемый Вами секрет.
    Ничего он не скрывает, внимательнее надо читать посты. Он уже писал, что вместо выполнения процедуры эмулируется команда RET. К сожалению, этого не всегда достаточно, вызывающая программа иногда рассчитывает на определённое значение флагов и других регистров. Очень часто анализируется флаг переноса, и если он был установлен до входа в процедуру (и является флагом ошибки) то чтение прерывается. У меня в конфигах не всегда адрес выхода из процедуры в точности соответствует реальному концу процедуры, приходится искать подходящий код в ПЗУ (типа ORA A / RET).

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

  3. #2

    Регистрация
    05.04.2013
    Адрес
    Починки, Нижегородская обл.
    Сообщений
    1,371
    Спасибо Благодарностей отдано 
    401
    Спасибо Благодарностей получено 
    647
    Поблагодарили
    255 сообщений
    Mentioned
    26 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от b2m Посмотреть сообщение
    вызывающая программа иногда рассчитывает на определённое значение флагов и других регистров. Очень часто анализируется флаг переноса, и если он был установлен до входа в процедуру (и является флагом ошибки) то чтение прерывается.
    Это конкретно к процедурам ввода/вывода байта на РК и клонах относится? Что-то я не припомню, чтобы подобное где-то использовалось...

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

    Цитата Сообщение от barsik Посмотреть сообщение
    Но вот, что совершенно непонятно, так это почему у эмулятора EMU от b2m не было никаких проблем с ленинградским монитором из-за процедуры настройки на скорость
    Попробовал - что мой эмулятор, что emu одинаково зацикливаются с непатченым Монитором на процедуре автонастройки...
    В вот в эмуляторе uart судя по всему должно все без проблем работать

  4. #3

    Регистрация
    05.10.2016
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,080
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    5
    Поблагодарили
    5 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Pyk
    А вот в эмуляторе uart судя по всему должно все без проблем работать
    Но этот эмулятор конечно же недоступен, т.к не для IBM PC.

    Цитата Сообщение от Pyk
    Попробовал - что мой эмулятор, что emu одинаково зацикливаются с непатченым Монитором на процедуре автонастройки...
    А у меня EMU от b2m не зацикливается на автонастройке с любыми мониторами. Видимо Вы использовали в нём конфиг для орловского монитора, а он не подходит для других мониторов. Конфиги, чтобы грузили в формате RKS (точнее в обоих RKS-ах) надо настраивать индивидуально. Я не пользуюсь теперь эмулятором EMU более полугода, но впечатление от его работы с МГ было хорошее, т.к особых проблем не было. Хотя со зверковским загрузчиком я его не использовал.

    Я использую вот такой файл с именем "Specialist Mon 3.3.cfg" и по директиве I файлы RKS с именем грузятся. Но вот сделать записи в WAV-файл у меня с EMU не получается. Поэтому я и переключился на Ваш эмулятор. Надеюсь, что у Вас всё получится. Этот конфиг обычный, только в самом конце в нём возможно я изменил две строки в разделе "cas: tape-recorder". Точно не помню, это было ещё в апреле.

    Мой конфиг для EMU


    main.CPUClock=2500000Hz
    main.Caption="Специалист КР580 базовый"

    CPU : K580wm80a {
    debug=cas
    mem=mm
    pc=C000
    port.maptomem=1
    }

    mem1 : Memory {
    size=10000
    }

    bios : Memory {
    rom="Specialist\BIOS_33.DAT"
    }

    sys : K580ww55 {
    portA=kbd.row
    portB[0]=cas.playback
    portB[1]=kbd.shift
    portB[2-7]=kbd.col
    portC[0-3]=kbd.row2
    portC[7]=cas.record
    }

    mm : MemMap {
    map[0][0000-8FFF]=mem1[0000]
    map[0][9000-BFFF]=vid.mem
    map[0][C000-F7FF].ro=bios[0000]
    map[0][F800-FFFF]=sys.data
    }

    kbd : Specialist-Keyboard {
    layout="Specialist\layout.kbd"
    }

    vid : Specialist-Video {
    }

    beep : beep {
    input=sys.portC[5]
    }

    cas : tape-recorder {
    biproc[C37D-C4CF]=rk
    boproc[C3CB-C3F8]=sp
    }
    [свернуть]


    А вот когда я соберусь переделать свой эмулятор ОРИОНА для MSDOS в эмулятор СПЕЦИАЛИСТА для MSDOS (возможно в НГ-праздники), то я быть может тоже попробую встроить работу с магнитофоном (раньше не эмулировал, было не надо, зачем если есть CP/M), но применю не Ваши алгоритмы c перехватом LDBYTE, а "химию" более высокого уровня, буду перехватывать другие точки

    Код:
    .
    C3F9 - ввод блока с  поиском синхробайта, адреса 
           начала  и конца  блока  указаны  на ленте
    
    C422 - ввод блока с поиском синхробайта, адреса 
           начала и конца блока  заданы  в HL  и DE
    
    C414 - то же  самое,  но без поиска синхробайта, 
           позволяет иметь синхробайт не равный E6
    
    C453 - ввод блока с  поиском синхробайта и авто-
           матическим запуском  блока на исполнение
    Флаги эти подпрограммы не возвращают, а весь МГ-ввод основан только на этих подпрограммах. И напрасно Вы не включили в формат RKS синхробайт. Это значит, что просто подменив синхробайт E6 на E7 все эмуляторы блокируются.
    Последний раз редактировалось barsik; 29.12.2017 в 01:48.

  5. #4

    Регистрация
    05.04.2013
    Адрес
    Починки, Нижегородская обл.
    Сообщений
    1,371
    Спасибо Благодарностей отдано 
    401
    Спасибо Благодарностей получено 
    647
    Поблагодарили
    255 сообщений
    Mentioned
    26 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    barsik, не работает с этим конфигом.
    Как и следовало ожидать, зацикливается на тех же адресах, что и emu80...

  6. #5

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

    По умолчанию

    Цитата Сообщение от Pyk Посмотреть сообщение
    Это конкретно к процедурам ввода/вывода байта на РК и клонах относится? Что-то я не припомню, чтобы подобное где-то использовалось...
    Нет, там вроде не надо было так извращаться. Посмотрел конфиги, нашел такое как минимум в ПК8000. Может ещё где-то было.

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

    Цитата Сообщение от barsik Посмотреть сообщение
    Может быть дело в версии EMU, у меня вообще старая версия 1.01 из 2011 года.
    Я, конечно, не настаиваю, но пользоваться настолько старой версией не рекомендую. Как минимум из тех соображений, что у большинства пользователей (вероятно) гораздо более поздние версии и сравнивать работу эмулятора было бы не корректно. Возможно в той версии и был косяк с записью в wav, но я что-то не припомню.

  7. #6

    Регистрация
    05.10.2016
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,080
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    5
    Поблагодарили
    5 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от b2m
    внимательнее надо читать посты. Он уже писал, что вместо выполнения процедуры эмулируется команда RET
    Ссылку на пост, где об этом сказано.

    Это Вам откуда-то известно, но я об этом узнаю впервые. Действительно, если с'имитировать команду RET сразу на входе LDBYTE, то не надо знать адрес выхода из п/п-ммы LDBYTE. Это имеет недостатком то, что подгрузив на вектор LDBYTE свою исполнительную часть, например процедуру выводящую полосы по бордюру, как в Синклере, в эмуляторе этого не будет.

    И понятно, что многоблочные программы в которых своя процедура загрузки, этим алгоритмом не вводятся. Т.е только самые-самые простейшие многоблочные программы, что не используют своих подпрограмм чтения с ленты можно грузить в эмулятор. А практически все чуть более грамотные многоблочные программы уже в первом блоке имеют процедуру автонастройки на скорость (т.к нельзя рассчитывать, что у всех монитор с автонастройкой) и соответственно уже первый блок зависнет тщетно ожидая фронты на МГ-входе.

    И подпрограмма ввода в многоблочных программах своя, даже когда используется та же двухфазная кодировка. Например, в отличие от базовой подпрограммы в ПЗУ подпрограмма контроллирует сигнал на тайм-аут, достаточно сигналу прерваться на длительность более чем период выдачи одного бита, как это будет обнаружено и замигает надпись "TAPE LOADING ERROR".

    b2m а почему в Вашем эмуляторе монитор с автонастройкой на скорость записи не зависает, как эмулятор EMU80 ? В чём секрет ?

    Предполагаю, что Вы отлавливаете и чтения МГ-порта и инвертируете бит читаемый с PB0 по каждому 20-му обращению туда (число можно подобрать, чтобы определялась стандартная константа).

    Что советую сделать и Pyk-у в эмуляторе EMU80. Тогда автонастройка на скорость ввода будет работать, а какая константа определится и будет подставлена в CLD (8FFF) не важно, т.к п/п-мма LDBYTE всё-равно не прогоняется, а от зависа на чтении МГ-порта это избавляет.
    Последний раз редактировалось barsik; 28.12.2017 в 18:20.

  8. #7

    Регистрация
    05.10.2016
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,080
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    5
    Поблагодарили
    5 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Понятно, что команда RET когда-то должна быть исполнена, иначе как вернуться из LDBYTE. Поэтому эта фраза вообще ничего не говорит о теме. Из этой фразы ничуть не следует, что RET имитируется сразу же, а не по критерию выхода из подпрограммы LDBYTE. И вполне логично было думать, что в EMU80 алгоритм как у EMU.

  9. #8

    Регистрация
    14.05.2013
    Адрес
    г. Москва
    Сообщений
    264
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    14
    Поблагодарили
    5 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Да и мой будет циклиться. На входе же вечный 0, сигнала нет.

  10. #9

    Регистрация
    05.04.2013
    Адрес
    Починки, Нижегородская обл.
    Сообщений
    1,371
    Спасибо Благодарностей отдано 
    401
    Спасибо Благодарностей получено 
    647
    Поблагодарили
    255 сообщений
    Mentioned
    26 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Очередная версия 4.0.277 от 30.12.2017:

    Windows-сборка:
    http://emu80.org/v4beta/Emu80_40277.zip

    Исходники:
    https://github.com/vpyk/emu80v4


    Изменения в версии 4.0.277:

    Легенда:
    + Нововведение
    * Изменение / улучшение
    - Исправлен баг
    ! Известная проблема


    + Конфигурация для ПК "Лик"
    + Загрузка rks-файлов в формате с именем по Alt-F3 и Alt-L
    + Новая команда U в отдадчике: пропуск текущей команды без выполнения
    + Параметр громкости "emulation.volume" добавлен в конфигурационный файл
    + Два новых параметра "cpu.debugOnHalt = yes" no и "cpu.debugOnIllegalCmd = yes" для выхода в отладчик по команде HALT
    и по недопустимому коду команды (для i8080) соотвтетственно (можно добавить при необходимости в конец conf-файла)
    * Модифицирован Монитор РК-86 для запуска РК-ДОС по директиве U
    * Вместо клавиши Alt в комбинациях клавиш может быть использована клавиша Win (Meta). Может быть полезно в Linux.
    * В знакогенераторе РК знак "$" заменен на знак денежной единицы "¤"
    * Изменено поведение эмулятора при отказе от выбора файла при обмене с магнитофоном: временная отмена перехвата
    + Ограниченная поддержка записи wav-файлов
    + Чтение либо запись wav при выборе его вместо rk
    + Новый параметр конфигурации "Ускоерние при воспроизведении WAV", позволяющий задать коэффициент ускорения работы
    эмулятора при загрузке wav-файлов. В глобальном ini-файле ему соответствует параметр "wavReader.speedUpFactor".
    - Исправлена ошибка, возникавшая при выходе из эмулятора с установленными точками останова
    - Исправлена работа управляющих клавиш УС, СС и РУС на Микро-80 и ЮТ-88
    - Исправлена запись rks-файлов на Специалисте
    - Исправлена загрузка некоторых wav-файлов, выдававших ошибку при открытии
    - Пропатченый Монитор Специалиста заменен на оригинальный
    - Внутренние изменения


    Небольшое пояснение по работе с wav-файлами: загрузить wav-файл можно либо, как раньше, через Alt-W, либо выбрав wav-файл в
    ответ на запрос имени файла, выдаваемый по директивве ввода с магнитофона. Аналогично, при запросе имени файла, запрашиваемого
    по директиве вывода на магнитофон, можно задать имя файла с расширением wav: в таком случае вместо rk* будет записан wav-файл. В
    wav-файл попадает только сигнал вывода на магнитофон, другие звуки не записываются.

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

    zx_, для включения периодических прерываний в "Специалисте" добавьте в конец конфигурационного файла следующие строки:
    Код:
    PeriodicInt8080 periodicInt = &cpu, 7, 50
    periodicInt.active = yes
    Здесь 7 - это номер вектора прерывания (rst 7), а 50 - частота прерываний

  11. #10

    Регистрация
    05.10.2016
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,080
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    5
    Поблагодарили
    5 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Естественно сразу поставил своё ПЗУ. С орловским ПЗУ вообще ничего невозможно вводить в WAV, т.к при WAV ввод долгий и нет никакой индикации, - неясно идёт ввод или завис. Использовал своё ПЗУ с байтом C9 по адресу CEDF.

    Есть улучшения по реакции на СБРОС, хотя логика страдает. Эмулятор сам должен понимать, что когда я выбрал файл с расширением WAV, то и вводить надо звуки, а когда с расширением RKS, то готовые коды.

    А при вводе по директиве I стало чуть ли не хуже. Обьясните как вводить по I WAV-звуками.

    Вот смотрите. Если я нажимаю I, затем <ВК> и на запрос "Имя файла:" снова нажимаю <ВК>, то открывается окно, где я могу выбрать только файл RKS. Если же я на запрос имени файла перед нажатием <ВК> нажму АЛЬТ-W и выберу WAV-файл, то это снова не поможет. Т.к во-первых, я могу просто не успеть нажать на <ВК>, а во-вторых, это не срабатывает, - по нажатию <ВК> второй раз открывается окно на запрос имени файла и не ясно ждёт он RKS или WAV. Надо чтобы после АЛЬТ-W уже никакие окна не открывались и нужна индикация о том, что идёт ввод с WAV-файла (например, хотя-бы значок магнитофона из 2-х кружков на балке, а лучше индикатор "градусник" показываюший ход процесса).

    В общем, помыкался по разному, но WAV-файл предназначенный для ввода по I так ввести и не смог. А у меня все МГ-записи в нормальном формате, т.е в формате с именем. В формате без имени файлы никто не хранил на кассетах, т.к это очень неудобно.

    И по-прежнему остаются WAV-файлы на которые эмулятор пишет, что у них неправильный формат.

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

    Проблема в том, что в хитрых подпрограммах ввода во время ввода байта процессор делает полезную работу. Например, имитирует ввод в экран как на Синклере. А в эмуляторе это невозможно, т.к реальной процедуры ввода нет. Потому, что-то делать во время МГ-ввода в эмуляторе процессор может только в паузе между блоками, а не во время самого ввода. Что-то существенное во время пауз не сделать и это тормозит. Потому формат в кодах для многоблочных программ для эмулятора бесполезен. Т.е многоблочные программы могут быть только WAV, что резко снижает ценность, т.к WAV слишком большие по объёму, чтобы их хранить.

    Заметил, что создаётся копия Emu80, занимающая ~4 мб памяти, если происходит неудачный старт эмулятора. Например, если удалить каталог какого-либо компьютера, а затем запустить его. Тогда что-то грузит, но не стартует, а в диспетчере процессов остаётся процесс Emu80. Т.е в случае неудачи старта Emu80 себя не удаляет из памяти. Это часто происходит, когда редактируешь конфиги или когда все каталоги ненужных компов поудалять из папки EMU80.

    Причём если этот недо-удалённый процесс Emu80 "убить" в диспетчере процессов при второй работающей копии Emu80, то происходит сброс компьютера. Если удалить, когда другая копия Emu80 не работает, то сброса не будет. Наличие недо-убитых копий в памяти вдвое тормозит реакцию на клавиши. На Специалисте это ещё не заметно (точнее надо 2-3 недоубитых Emu80, чтобы так же тормознуть), а вот при РК86 просто пропадают нажатия на клавиши уже при одном недоубитом процессе.

    Цитата Сообщение от Pyk
    zx_, для включения периодических прерываний в "Специалисте" добавьте в конец конфигурационного файла следующие строки
    Мне это не особо важно, но для адаптаторов ZX-игр это знать надо.

    По какому сигналу (фронту) срабатывают прерывания: по КСИ, по началу кадрового гашения или "от балды"? В моём эмуляторе для MSDOS это было сделано "от балды", т.е момент прихода импульса запроса прерывания определялся не по реальному времени, а по прогону определённого числа команд (7800 команд). Время прогона 7800 команд при среднем числе тактов в командах это примерно 20 МСЕК, что и даёт 50 ГЦ,

    Понятно, что если это 7800 команд NOP (4 такта), то это короткий период между прерываниями, а если это (гипотетически) 7800 команд EX (SP),HL (19 тактов) или тем более LDIR, то период между запросами прерываний будет в тысячи раз больше. Но т.к программы из 7800 команд LDIR стоящих подряд не встречаются, то и проблем не было. Игры с прерываниями прекрасно работали.

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

    И по-прежнему нельзя изменять флаги процессора. Это свойство любого отладчика. Директива X должна сразу переходить на редакцию флагов. Жалко, что шагание только по F7, я привык к T (так во всех отладчиках в мире, зачем нарушать традицию?).

    Специально для фанатов мнемоники КР580 (временно, потом удалю) выкладываю отладчик DDT для CP/M работающий с Z80, но в мнемонике INTEL. Это та же мнемоника что выдаёт DISASM, если указать, что есть Z80 команды (и ассемблеры такие есть). По директиве L посмотрите какой-нибудь код для Z80 и увидите какие уродские мнемоники получаются для Z80, если использовать мнемоники Intel.

    Если у Вас Win XP, то можно запускать прямо из Win XP под TSR эмулятором 22NICE. Если же Ваша Windows неспособна к программам MSDOS, то придётся пользоваться DOSBOX. Кстати, 22NICE и другие TSR эмуляторы CP/M не всегда помогают. Например, компилятор PLMX приходится использовать только в эмуляторе ОРИОНА, т.к под TSR-эмулятором MSDOS он не работает. Это происходит с программами, которые лезут в Allocation Table CP/M или напрямую работают с байтами FCB.
    Вложения Вложения
    Последний раз редактировалось barsik; 31.12.2017 в 12:27.

Страница 20 из 94 ПерваяПервая ... 161718192021222324 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Emu80, старые версии
    от Pyk в разделе Эмуляторы отечественных компьютеров
    Ответов: 68
    Последнее: 11.03.2017, 00:33

Ваши права

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