PDA

Просмотр полной версии : Emu80 v.4



Страницы : [1] 2 3 4

Pyk
11.03.2017, 00:31
Последняя версия эмулятора — 4.0.466 от 31.03.2024:
https://emu80.org/news/v40466

Сайт эмулятора: https://emu80.org


Загрузить:

Qt-версия (рекомендуется):
Windows-сборка (portable): https://emu80.org/v4beta/Emu80qt_40466.zip
MacOS-сборка: https://emu80.org/v4beta/Emu80qt_40466_macos.zip
Linux-сборка: https://emu80.org/v4beta/Emu80qt_40466_linux_x86-64.tar.gz

Portable SDL/wx-версия, windows-сборка:
https://emu80.org/v4beta/Emu80_40466.zip

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


Основные возможности эмулятора:

- Поддержка ПК "Радио-86РК", "Микроша", "Партнер", "Апогей", "Электроника КР-04", "Пальмира", "Микро-80", "ЮТ-88", "Специалист", "Специалист-MX", "Орион", "Eureka", "ПК8000", "Вектор", "Львов", "Корвет"
- Мультиплатформенный: протестирована работа под Windows, Linux и MacOS
- С открытым исходным кодом: исходники эмулятора опубликованы под лицензией GPL v.3
- Аккуратная эмуляция аппаратуры поддерживаемых компьютеров
- Многоязычный интерфейс (на данный момент поддерживаются русский и английский)
- Богатые возможности настройки эмулятора через пользовательский интерфейс
- Возможность изменения конфигурации эмулируемого компьютера в конфигурационном файле (для опытных пользователей)
- Многочисленные режимы отображения, поддержка оригинального соотношения сторон,
скрытия областей гашения луча, режим отображения скан-линий, поддержка различных режимов отображения полукадров и т. д.
- Возможность использования перерисованных шрифтов большего размера для текстовых режимов
- Ассоциация с используемыми типами файлов, автозапуск программ, drug-n-drop для запуска
- Встроенный отладчик


Изменения в последней версии (4.0.466):

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

+ Добавлена поддержка вставки текста из буфера обмена (имитация нажатия клавиш).
На данный момент работает на ПК РК-86, Апогей, Партнер, ПК-8000, Вектор, Корвет.
Перечень поддерживаемых ПК будет расширяться.
+ Партнер: добавлена поддержка не существующего пока в железе модуля SD-карты на базе схемы Алексея Морозова.
Вызов оболочки - E1.
* Исправления в работе ВГ75. Исправлено поведение при программировании режима более 80 символов в строке
Проходит этот тест: https://zx-pk.ru/threads/33936-pishem-igry-pod-rk-podobnye.html?p=1192880&viewfull=1#post1192880
* Исправления в работе таймера ВИ53. Сейчас работает Exolon на Векторе и порт "Wave AY".
* Добавлена поддержка ROM-диска для ПК-8000
(закомментировано ввиду некорректной работы образа картриджа с играми из-за неполной эмуляции таймингов)
* В эмуляцию адаптера ROM-диска Апогея добавлен параметр, управляющий размером диска
+ Добавлена поддержка расширенного РОМ-диска по схеме Апогея в РК-86, включается в конфигурационном файле. Спасибо Shaos!
* Вектор: возможность указания в конфиге файла ПЗУ произвольного размера
* ЮТ-88: добавлена поддержка ROM-диска
* ЮТ-88: добавлена возможность задания размера RAM-диска в конфиге
* ЮТ-88: Монитор-F обновлен до версии 1.01 (https://zx-pk.ru/threads/24511-yut-88-displejnyj-modul.html?p=778159&viewfull=1#post778159)
* ЮТ-88: переработана эмуляция экрана с использованием оригинальных таймингов (изображение смещено на 1 строку для полного отображения)
* Микро-80: добавлена поддержка RAM и ROM-дисков
* Для Микро-80 и ЮТ-88 добавлен образ ROM-диска с CP/M из проекта https://github.com/prokushev/micro-80-cpm
* РК-86 и подобные: исправлена невозможность набрать символ подчеркивания ("_") в smart-раскладке.
* РК-86: файл образа диска, поставляемый с эмулятором, заменен более корректно сформированной версией
* Пальмира: уточнена эмуляция ВГ75, реализовано пунктирное подчеркивание, как в оригинальном РК-86
- Партнер: исправлена ошибка: в некоторых режимах некорректно накладывались изображения основного ВГ75 и МЦПГ
- Вектор: исправлено программирование палитры на Векторе при установке высоких частот процессора
- Корвет: исправлен регистр символов при использовании smart-раскладки клавиатуры
- ЮТ-88: исправлена форма курсора
- Пальмира: исправлена наблюдавшаяся иногда проблема с неправильным PAR в режиме VGA
- Отладчик: не работало обновление экрана при изменении экранной области через дамп


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

+ Добавлена новая конфигурация для ПК "Электроника КР-03"
+ Полностью переработаны опции командной строки, старый синтаксис оставлен для совместимости
* Пальмира: в образ SD-карты добавлена CP/M с примером образа диска
* РК-86: образ диска РК в составе эмулятора заменен на более полный
* Вектор: исправлено отображение бордюра в режиме высокого разрешения
* Орион: добавлен третий ВВ55
* Орион DSDOS: обновлена версия DSDOS в составе эмулятора до 3.95
* Орион DSDOS: объем памяти расширен до 512 КБ
* Орион DSDOS: улучшения и исправления в эмуляции дисковода
* Орион DSDOS: поддержка расширенного ROM-диска, управляемого портом FE
* Орион DSDOS: поддержка жесткого диска на третьем ВВ55
* Орион DSDOS: в состав эмулятора включен архив с пустым образом жесткого диска. Перед использованием распаковать!
* КР-04: клавиша ВР назначена на клавишу Menu ПК
* КР-04: обновлен до последней версии SD BIOS
* Корвет: отображение в эмуляторе текущей отображаемой скан-линии
* Корвет: исправления в эмуляции экрана
* Корвет: эмуляция второго канала таймера со строчной частотой экрана на входе (не до конца отлажено)
* Улучшена эмуляция ВВ55
* Улучшена эмуляция ATA (IDE) интерфейса
* Добавлена эмуляция форматирования ГМД. На данный момент протестирована на Орионе и ПК8000.
- Орион: исправлена тактовая частота
- Корвет: исправлена ошибка с использованием всего объема графического ОЗУ и работой RAM-диска
- Корвет: исправлена ошибка - не переключался режим цветности из меню
- Пальмира: исправлен регистр файлов в директории эмулируемой SD-карты (не работала эмуляция SD-карты в системах, отличных от Windows)
- Исправлена ошибка с не работавшим иногда переключением назначения клавиш F5/F9 в отладчике
- Исправлена ошибка при сборке с помощью GCC 13
- Исправлена ошибка при сборке Lite-версии
- Другие мелкие исправления и улучшения


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

+ Добавлена поддержка ПК "Северная Пальмира"
+ Добавлена сборка для ОС Linux x86_64
* Переработана и дополнена документация
* Устранена избыточная загрузка процессора в режиме отладки или паузы,
также несколько снижена загрузка процессора при работе на большинстве платформ
* Добавлен список последних файлов при загрузке файлов
* Реализовано сохранение и восстановление при следующем запуске позиции окна эмулятора (пока без пользовательского размера)
* Изменено поведение индикатора FPS: сейчас показывается реальное значение обновлений в секунду,
период обновления индикатора увеличен до 1 секунды
* При выборе пункта из последних файлов или платформ он сейчас поднимается на верх списка
* При сохранении скриншота установлен по умолчанию формат png
* Убрано ограничение на количество точек останова в отладчике
* В окно отладчика добавлено меню, будут добавляться новые возможности, доступные через меню и панель иснтрументов
* Опция сохранения памяти в отладчике перенесена с клавиши F2 на F12
* Вектор: добавлено отображение в отладчике информации о состоянии квазидисков
* Корвет: уточнено декодирование адресов портов
* КР-04: реализованы прерывания
* КР-04: добавлена возможнсть копирования текстового экрана
* Для ВГ75 теперь в отладчике показывается текущая отображаемая строка;
также при отладке реализовано частичное отображение экрана до текущей позиции луча
* Для ВГ75 добавлена поддержка режима VGA (640*480)
* Улучшена эмуляция SD-контролера по схемме vinxru
* Отключается звук таймера на РК86, поскольку стандартный Монитор не инициализирует таймер при сбросе
- Устранено возникавшее иногда падение эмулятора при переключении платформ
- Исправлен звук при уровне громкости 6
- Устранено искажение звука при ускорении работы эмулятора (например, по клавише Del)
- Исправлено поведение Here (F4) в отладчике, повторное нажатие в той же строке не приводило к выполнению
- В отладчике сейчас обновляется информация после загрузки файла или сброса
- Устранено некорректное поведение при сбросе при открытом отладчике на некоторых платформах
- Исправления в позиционировании окон на экране: окно эмулятора иногда появлялось
на дополнительном мониторе, окно отладчика перемещалось во время работы, не переключался фокус
на основное окно после выхода из отладчика
- Корвет: устранен возможное подение эмулятора в режиме Корвета
- Корвет: удалены неиспользуемые пункты меню и кнопки на панели инструментов
- Вектор: исправлен признак обращения к стеку при выполнении команды CALL;
EDD сейчас работает корректно с этой инструкцией
- Вектор: исправления в поведении эмулятора при сбросе по F12
- КР-04: устранено падение эмулятора при попытке переключения на альтернативный шрифт
- КР-04: исправлена работа SD-контроллера
- КР-04: исправлены проблемы при загрузке некоторых файлов
- РК-86: исправлен диапазон адресов контроллера ПДП
- РК-86: уточнения в эмуляции схемы подключения таймера, исправлен звук в некоторых играх
- Исправлено время выполнения команды MOV B,B на i8080
- Исправления в работе режима 2 таймера ВИ53
- Исправлена сборка с помощью MSVC 2015
- Исправлена сборка SDL/wx-версии с помощью Makefile'а
- Другие мелкие исправления и улучшения


Полную историю версий см. в файле whatsnew.txt
Краткое руководство по установке и сборке см. в файле README.md
Полное руководство пользователя в файле Emu80 v4 Manual.rtf


Основные сведения об эмуляторе:

Qt-версия:
Основной исполняемый файл Emu80qt.exe

SDL/wx-версия:
Основной исполняемый файл Emu80.exe
Emu80Lite - быстро запускаемая версия без части диалогов, удобен для командной строки.
Основной метод управления - горячие клавиши. Подсказку можно посмотреть в закладке Help окна конфигурации (Alt-F12). Переключение платформ - Alt-F9.

Кроме основных файлов эмулятора в архив SDL/wx-сборки также включены папки:

_tests - различные тесты и игры, на которых тестировал эмулятор
_stuff - различные образы дискет, игры и т.д. для разных машин

Более подробную информацию по реализации см. в файле Emu80 v4 Manual.rtf


Предыдущие версии можно найти в архиве на официальном сайте:
https://emu80.org/distr/

ZEman
11.03.2017, 09:43
Pyk, большое спасибо что продолжаете развивать свой эмулятор.
несколько замечаний:

1) очень не хватает ассоциации эмулятора с файлами как в прошлой версии.

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

3) некоторые игры работают неверно.
например в режиме радио86 у игр ALIAZ1.RK и BULNIK.GAM - экран сильно сдвинут вниз.

Pyk
11.03.2017, 11:11
ZEman, спасибо за тестирование!
1. Ассоциирование пока не делал, все-таки тестовая сборка, при желании ассоциировать пока можно вручную, командня строка поддерживается
2. Вполне реально, можно со временем сделать
3. С Aliaz1 не совсем понятна ситуация - там как-то странно программируется ВГ75. В эмуляторах b2m и Ретро-80 вообще черный экран. Посмотрю вечером, что там и неплохо бы проверить еще на реальном РК...
BULNIK - это вообще не игра, просто картинка, наверное имелась в виду какая-то другая?

ZEman
11.03.2017, 11:17
3. С Aliaz1 не совсем понятна ситуация - там как-то странно программируется ВГ75. В эмуляторах b2m и Ретро-80 вообще черный экран. Посмотрю вечером, что там и неплохо бы проверить еще на реальном РК...
BULNIK - это вообще не игра, просто картинка, наверное имелась в виду какая-то другая?

в третьей версии эмулятора они работают нормально.
позже я проверю побольше файлов на эмуляторе.

ещё хочу спросить.
в прошлой версии эмулятора были также машинки Micro80 и ЮТ88.
будут ли они добавлены в эмулятор ?

gdv2002
11.03.2017, 11:28
У меня вопрос по ВИ53 для РК86, что имеется ввиду под оригинальной схемой? Т.е. какая из схем?

ZEman
11.03.2017, 12:02
zebest, работает эта версия болдердаша.
просто смени расширение с rkr на rkp и запусти в режиме партнёра.

ZEman
11.03.2017, 12:39
это к теме не относится, просто интересно.
я много раз видел на PK-подобных игрушку болдердаш версия 2, версия 2.1 и 2.2.
а где собственно 1ая версия или такой не-было ?
и была ли эта игра для радио86.

mvg
11.03.2017, 14:23
попробовал. мой новодел идет ;)))

Pyk
11.03.2017, 14:47
в прошлой версии эмулятора были также машинки Micro80 и ЮТ88.
будут ли они добавлены в эмулятор ?
Да, будут. Никаких сложностей с ними нет, сделаю, когда руки дойдут...


У меня вопрос по ВИ53 для РК86, что имеется ввиду под оригинальной схемой? Т.е. какая из схем?
Вот эта, из журнала "Радио":
http://emuverse.ru/wiki/%D0%A0%D0%B0%D0%B4%D0%B8%D0%BE-86%D0%A0%D0%9A/%D0%A0%D0%B0%D0%B4%D0%B8%D0%BE_11-87/%D0%A2%D0%B0%D0%B9%D0%BC%D0%B5%D1%80_%D0%9A%D0%A05 80%D0%92%D0%9853
А какие были альтернативные?


Файлы с неверной КС грузить приходится по два раза по два раза Так задумано? и только по директиве "I"
Там скорее всего дело не в неверной контрольной сумме, а в полном ее отсутствии или еще каким-то образом нарушенном формате файла. Монитор пытается еще читать с ленты, а файл уже кончился, вот он заново и спрашивает его. В таком случае лучше отменить выбор файла во второй раз. Возможно, в прошлых версиях поведение эмулятора в подобных случаях было другим - я посмотрю. А откуда такие "битые" файлы вообще?


Нет аппаратной псевдографики, но это так, чисто к сведению,я и не прошу, меня Emu в этом плане устраивает, почти.
Не понял, о чем речь, о кодах C0-EF? Они отображаются точно так, как должны на этих машинах, в отличие от Emu... Или о чем-то другом?


а вот нет драг-энд-дроп-а, это сильнее расстраивает)
В каком виде хочется драг-энд-дроп? Перетащить файл в окно эмулятора для загрузки? Если это действительно нужно и кажется удобным, сделаю.

zebest
11.03.2017, 15:08
Перетащить файл в окно эмулятора для загрузки?
у "конкурентов" очень хорошо работает, перетащил файл, он и запустился.

речь, о кодах C0-EF
О них. ну понятно, что не должны. Но это все же эмуляторы. Где то и должны, поэтому я и сказал, что в Emu меня почти устраивает эмуляция этих кодов, хоть их и не должно как бы существовать.

А откуда такие "битые" файлы вообще?
Файлы мои. Сами они не битые, вполне рабочие, но без КС или совсем или с неверно посчитанной. опять же - Emu их грузит и даже не думает ругаться.

jerri
11.03.2017, 15:48
Pyk, я правильно понимаю что
на вашем эмуле вот это работать не будет?
http://zx-pk.ru/threads/18870-64kh64-simvlov-na-ekrane-i-grafika-192x60/page4.html

Pyk
11.03.2017, 15:56
Файлы мои. Сами они не битые, вполне рабочие, но без КС или совсем или с неверно посчитанной. опять же - Emu их грузит и даже не думает ругаться.
Как говорится, пример - в студию!



я правильно понимаю что
на вашем эмуле вот это работать не будет?
http://zx-pk.ru/threads/18870-64kh64...x60/page4.html
Работает, см. игры и демки для Апогея, хотя бы с ROM-диска.

jerri
11.03.2017, 15:58
Pyk, а для микроши? то что вот в этом посте?
http://zx-pk.ru/threads/18870-64kh64-simvlov-na-ekrane-i-grafika-192x60.html?p=495138&viewfull=1#post495138

uart
11.03.2017, 16:04
Вот эта, из журнала "Радио":
http://emuverse.ru/wiki/%D0%A0%D0%B0...%D0%92%D0%9853
Насколько я понимаю, там таймер подключается параллельно ВВ55, а не вместо.

jerri
11.03.2017, 16:41
Pyk, вот это выглядит не так как мне бы хотелось
что я делаю не так?

60067

Pyk
11.03.2017, 17:19
Pyk, вот это выглядит не так как мне бы хотелось
что я делаю не так?
Я посмотрю попозже. Еще вопрос, правильно ли она работает на оригинале, а то у uart в эмуляторе примерно такая же картина, как у меня.

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


Насколько я понимаю, там таймер подключается параллельно ВВ55, а не вместо.
Спасибо, упустил этот момент.
То запись происходит одновременно и в ВИ53, и в ВВ55, а чтение - из ВВ55?

jerri
11.03.2017, 17:44
Я посмотрю попозже. Еще вопрос, правильно ли она работает на оригинале, а то у uart в эмуляторе примерно такая же картина, как у меня.


на b2m экран стоит нормально
на живом - нету живого у меня
в версии для Микроши экран тоже стоит нормально
а в этой экран почемуто пополамится
нижняя сверху
верхняя снизу.

Pyk
11.03.2017, 18:03
Подправил адреса ВГ75 под Апогей, запустил на "железном" Апогее. Как и следовало ожидать:
http://emu80.org/temp/test.png
Vinxru, похоже, не все учел, а может быть, даже тестировал, но в Emu.
Это уже не первый случай, когда программа пишется на ПК и работает в одном из эмуляторов, а на реале она не работает как задумывалось :(

Надо будет разобраться, в чем тут дело.

DDp
11.03.2017, 18:05
на b2m экран стоит нормально
на живом - нету живого у меняУ меня есть
http://rgho.st/8KMkxtbqS/thumb.png (http://rgho.st/8KMkxtbqS.view)

в версии для Микроши экран тоже стоит нормально
Вранье Не правда, на реальном Микроше примерно тоже самое.

а в этой экран почемуто пополамится
нижняя сверху
верхняя снизу.Писание под (конкретный) эмулятор и писание под реал - это разные вещи.

И, это... научитесь правильно формировать файл-образ ленты и правильно считать контрольную сумму!!!

Pyk
11.03.2017, 18:08
А дело, похоже, вот в этом:

; Заполняем видеопамять (из за байта F1 это надо делать пока видео выключено)
и даже при выключенном видео ПДП работает и байт F1 обрабатывается!

Pyk
11.03.2017, 18:45
3) некоторые игры работают неверно.
например в режиме радио86 у игр ALIAZ1.RK и BULNIK.GAM - экран сильно сдвинут вниз.
ALIAZ1 - это игра для Партнера, проблемы с экраном на РК из-за этого.
Так что проблема не в этом эмуляторе, а в тех, на которых она тем не менее нормально работает (например, 3-й версии Emu80) ;)
P.S. А на Партнере она еще и со звуком :)

uart
11.03.2017, 19:12
Я у себя загрузки bin сделал, который внутри преобразуется в формат эмулироваемого компьютера, с заголовком и контрольной суммой.

Pyk
11.03.2017, 20:09
С нулевым начальным адресом?

uart
11.03.2017, 20:11
А где про формат CAS прочитать можно? И почему в Апогей не добавлена его поддержка?

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


С нулевым начальным адресом?
Да, ведь всегда можно вызвать I со смещением.
Еще можно загрузить com с начальным адресом 0100h

Pyk
11.03.2017, 20:14
Я здесь нашел:
http://www.faq.msxnet.org/suffix.html#CAS
А в Апогей просто не успел пока.
Кроме того, в памяти отложилось, что что-то в Апогее было не так с этим форматом, из-за чего он не мог читаться на других машинах (хотя память может подводить - это ж в 90-е было...)

uart
11.03.2017, 20:50
Pyk, ну да, запись монитора Апогея в Партнере не читается (и наоборот).
Но и твой Удав.cas не распознается cas2wav от https://github.com/joyrex2001/castools

Pyk
11.03.2017, 21:06
Посмотрю. Все может быть - допускаю, что как раз в Апогее формат был правильный.
Но я в свое время успешно считывал на Корвете записанные в MSX-формате на Партнере программы на бейсике.

jerri
11.03.2017, 21:24
У меня есть
http://rgho.st/8KMkxtbqS/thumb.png (http://rgho.st/8KMkxtbqS.view)

Вранье Не правда, на реальном Микроше примерно тоже самое.
Писание под (конкретный) эмулятор и писание под реал - это разные вещи.


со спеком такого практически не наблюдается :)
эмули спека практически вылизаны до блеска.

так что не ко мне претензия



И, это... научитесь правильно формировать файл-образ ленты и правильно считать контрольную сумму!!!

ой всё...
вы лучше обьясните почему изображение так козявит.

Pyk
11.03.2017, 21:27
Но и твой Удав.cas не распознается cas2wav от https://github.com/joyrex2001/castools
Распознается, wav-файл формируется.
Предупреждает только, что "unknown file type: using long header", так как Партнер для своих бинарных файлов использует почему-то сигнатуру 0A, а не D0.
Даже пытался потом в твоем эмуляторе полученный wav-файл загрузить - начинает грузиться, даже имя файла из заголовка выдает, правда потом эмулятор падает ;)
Так что формат похож на правильный.
А вот эмулятор у тебя в этом режиме работает, кажется, быстрее, чем нужно (используется режим регенерации ОЗУ через канал 3 ПДП).

uart
11.03.2017, 21:56
Pyk, у меня загрузился.

Pyk
11.03.2017, 23:40
Возможно, vmWare как-то влияет...
Но в любом случае это радует - значит, в Партнере близкая к стандарту реализация работы с MSX-форматом.

Pyk
12.03.2017, 21:36
Выяснилось, что в подсказке пропущена горячая клавиша Alt-D - вызов отладчика.
Так что можете потестировать.

krt17
12.03.2017, 23:37
При запуске из командной строки теряет текущую директорию

cd c:\workdir
c:\emu80\Emu80lite.exe -r test.rk
не работает

c:\emu80\Emu80lite.exe -r c:\workdir\test.rk
работает

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

Не особо критично конечно, но от неожиданности тупил минут 10 не понимая почему не работает.

Pyk
12.03.2017, 23:46
При запуске из командной строки теряет текущую директорию
Принято, спасибо!

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

Наверное стоит еще сделать автовыбор типа компьютера, если он не указан явно, на основании расширения файла, передаваемого в командной строке?

krt17
13.03.2017, 00:02
Наверное стоит еще сделать автовыбор типа компьютера, если он не указан явно, на основании расширения файла, передаваемого в командной строке?
Как выбрать модель в хелпе написано, мне по крайней без надобности, хотя для ассоциации наверное полезно.
Как кстати в отладчике посмотреть состояние dma и crt? Сходу тоже не нашел. Текущий такт в пиксельклоке тоже было бы неплохо видеть, ну какую нибуть инфу по лучу, пусть даже косвенную. Хорошо сделано в xpeccy.
Это конечно все для серьезной работы уже, пока не знаю насколько мне это нужно, и нужно ли кому нибуть, но на спеке это достаточно важная информация.

Pyk
13.03.2017, 00:15
Как кстати в отладчике посмотреть состояние dma и crt? Сходу тоже не нашел. Текущий такт в пиксельклоке тоже было бы неплохо видеть, ну какую нибуть инфу по лучу, пусть даже косвенную. Хорошо сделано в xpeccy.
Пока никак :( Дойдут руки - сделаю.
А насчет инфы по лучу - даже не уверен, что это действительно может понадобиться, хотя сделать также не проблема... Ну разве что текущую строку отображать, чтобы понять, сколько до конца кадра осталось...
В общем, в todo list добавил, но быстро не обещаю: есть пока более важные недоделки вроде точек останова по данным или изменения значений регистров...

jerri
13.03.2017, 06:25
Pyk, почему в созданном мной примере уезжает экран (там где строки f1 завершаются)

BYTEMAN
13.03.2017, 09:12
Мне показалось, или в кособане на заставке музыка как-то слишком медленно играет?

Pyk
13.03.2017, 09:30
jerri, Встречая код F1, ВГ75 должен прекратить обращения к памяти через ПДП для выборки следующего символа, пока не начнется следующая строка. В начале примера ждем обратного хода луча - отлично. А вот дальше начинается неприятное: экранная область заполняется программой медленнее, чем данные попадают в ВГ75, из-за чего некоторые F1 оказываются пропущенными, и из памяти считываются лишние данные - оттуда и смещение. Предлагаю исправить следующим образом:


; Вырубаем видео

ld hl, 0D001h ; для Апогея 0EF01h
ld (hl), 0E0H ; preset counters (останавливает ПДП)

... skip ...

; Устаналиваем режим и врубаем видео

ld hl, 0D001h ; для Апогея 0EF01h
ld (hl), 00H

ld hl, 0D000h ; для Апогея 0EF00h

jerri
13.03.2017, 09:38
jerri, Встречая код F1, ВГ75 должен прекратить обращения к памяти через ПДП для выборки следующего символа, пока не начнется следующая строка. В начале примера ждем обратного хода луча - отлично. А вот дальше начинается неприятное: экранная область заполняется программой медленнее, чем данные попадают в ВГ75, из-за чего некоторые F1 оказываются пропущенными, и из памяти считываются лишние данные - оттуда и смещение. Предлагаю исправить следующим образом:


; Вырубаем видео

ld hl, 0D001h ; для Апогея 0EF01h
ld (hl), 0E0H ; preset counters (останавливает ПДП)

... skip ...

; Устаналиваем режим и врубаем видео

ld hl, 0D001h ; для Апогея 0EF01h
ld (hl), 00H

ld hl, 0D000h ; для Апогея 0EF00h



каааак все сложно блин



на эмуле работает :)
хз что на реале.
60083

uart
13.03.2017, 12:10
Может кто на реале проверить?

Pyk
13.03.2017, 12:23
Я могу, но только вечером.
А вообще, вроде бы должно работать, не вижу причин, почему нет.

uart
13.03.2017, 14:02
Достал свой Апогей, работает. Пришлось заменить только 24 на 64, иначе был срыв синхронизации у телевизора.
Буду думать, что у меня в эмуляторе не так.

jerri
13.03.2017, 20:51
uart, 24? на 64?

uart
13.03.2017, 21:00
jerri,
0021: 21 01 EF !▘. LXI H,EF01
0024: 36 00 6. MVI M,00
0026: 2D - DCR L
0027: 36 4D 6M MVI M,4D
0029: 36 64 6Д MVI M,64
002B: 36 07 6▜ MVI M,07
002D: 36 63 6Ц MVI M,63
002F: 2C , INR L
0030: 36 27 6' MVI M,27

jerri
13.03.2017, 21:12
jerri,
0021: 21 01 EF !▘. LXI H,EF01
0024: 36 00 6. MVI M,00
0026: 2D - DCR L
0027: 36 4D 6M MVI M,4D ; 78 символов
0029: 36 64 6Д MVI M,64 ; (было 36 (37 линий) стало 101? (стало 36+64)) эээ
002B: 36 07 6▜ MVI M,07
002D: 36 63 6Ц MVI M,63
002F: 2C , INR L
0030: 36 27 6' MVI M,27


ага ... понятно

была 1 строка в КСИ
стало 2

uart
14.03.2017, 16:07
Pyk, а сравни свой эмулятор с реалом. В реале курсор на строчку выше рамки.
Это если сразу после резета нажать G<ВК>.

Pyk
14.03.2017, 17:24
uart, не понял, это в каком тесте?

uart
14.03.2017, 18:57
Pyk, из сообщения 40. Я адаптировал его для Апогея.
http://uart.myqnapcloud.com/files/test.rka

Pyk
14.03.2017, 21:01
на эмуле работает
хз что на реале.
testrk.zip
Оказывается, не совсем правильно работает, спасибо uart за тест


Pyk, а сравни свой эмулятор с реалом. В реале курсор на строчку выше рамки.
Это если сразу после резета нажать G<ВК>.
Ага, сюрприз, однако! Картинка съехала на пару строк вниз.
Однако, судя по даташиту, вроде бы все должно быть ок.
Буду думать и экспериментировать на Партнере, у которого DMA доступен для чтения...

NEO SPECTRUMAN
24.03.2017, 00:54
А чего эмуль так долго запускается?

barsik
24.03.2017, 01:31
Как загрузить RSS-файлы от ДОС-версии эмулятора?
Нельзя ли коды курсорнык клавиши продублировать на поле боковой цифровой клавиатуры?

Pyk
24.03.2017, 11:36
А чего эмуль так долго запускается?
Из-за использования тяжелой кроссплатформенной библиотеки wxWidgets - dll долго грузятся. Расплата за кроссплатформенность.
Подумаю, что с этим можно сделать. Можно отдельную windows-версию попробовать сделать, можно попробовать Qt (но она тоже довольно тяжелая)...
А пока можно запускать Emu80lite.exe - она не использует wxWidgets, грузится значительно быстрее, но в ней недоступны окна настроек и переключения типа ПК. Но вполне подойдет, например, для быстрой загрузки файлов из командной строки.



Как загрузить RSS-файлы от ДОС-версии эмулятора?
Увы, пока не реализовано :(


Нельзя лм коды курсорнык клавиши продублировать на поле боковой цифровой клавиатуры?
Можно, правда в сделать это самостоятельно в конфиге возможности пока нет, так что добавлю в следующую сборку.

NEO SPECTRUMAN
24.03.2017, 19:54
Из-за использования тяжелой кроссплатформенной библиотеки wxWidgets - dll долго грузятся. Расплата за кроссплатформенность.
интересно сколько десятков гигабайт кода за это время накомпилирует sjasm...:v2_dizzy_facepalm:


а теперь немножко цифер

2-х ядерный пень на 2294.3 MHz
эмуль на рамдиске (производительность в defrager-е написана) 1334.72 MB\s
время запуска 10-11 секунд

4-х ядерный амд на 3893.51 MHz
эмуль на рамдиске 1515.37 MB\s
время запуска 10-11 секунд

совпадение?

запустил с жесткого 150.83 MB\s
тоже 10 секунд...

мне только от одного названия wxWidgets прет ведром
hello world там столько же запускается?
там случаем не таймер для имитация бурной деятельности? :v2_dizzy_facepalm:




уберите нафик закрыть текущее окно с alt-f10

или добавьте щифт к этому

хочешь нажать ресет закрываешь окно
хочешь сменить платформу закрываешь окно
а потом десять секунд ждать...


и выход с alt-x

комбинации клавиш которые могут вызывать моментальную потерю данных
не должны нажиматься случайно
или должно быть подтверждение
(или получается ведроид в котором пока листаешь(скролишь) настройки ставишь 7 галочек :v2_dizzy_facepalm: )



меня неимоверно бесит когда лепят всякий сброс всего по f12

и вообще нужно избавляться от каменного века
и делать кликабельные кнопки :v2_dizzy_turn::v2_thumb::v2_dizzy_roll:

zebest
24.03.2017, 22:45
4-х ядерный амд на 3893.51 MHz
время запуска 10-11 секунд
6-ти ядерный АМД образца 2009 года - приблизительно стока же

Pyk
24.03.2017, 23:04
4-х ядерный амд на 3893.51 MHz
эмуль на рамдиске 1515.37 MB\s
время запуска 10-11 секунд
У меня на Core2Duo ~2 ГГц тоже примерно столько же :(
На i5 3,5 ГГц (Haswell) - 3 секунды.
Hello world запускается ровно столько же :(
При этом Lite-версия, не использующая wxWidgets, запускается меньше, чем за секунду.
В общем, я сам уже не рад, что связался с этой библиотекой. Придется, наверное переходить на Qt. Как, по ощущениям, Xpeccy, например, быстро запускается?


уберите нафик закрыть текущее окно с alt-f10
и выход с alt-x
Понял проблему. Просто меня, наоборот, раздражают лишние подтверждения - я почему-то практически никогда не промахиваюсь. Наверное стоит сделать опциональное подтверждение или добавления Shift'а. А вообще:

и вообще нужно избавляться от каменного века
и делать кликабельные кнопки
Согласен. На то это и тестовая версия - я больше времени уделял собственно эмуляции, а не интерфейсу (мне самому-то удобно - все с клавиатуры, к мышке тянуться мне обычно лень). Прилепил на скорую руку интерфейс на wxWidgets - сам вижу, что не то. Так что буду пробовать альтернативы - скорее всего Qt, которая позволит и кнопки сделать человеческие, и грузится побыстрее. А если использовать Qt5, то можно наверное и от SDL совсем отказаться (в Qt4 не было кое-чего мне нужного).

Вопрос только во времени, которого как обычно на все не хватает - либо в первую очередь вылизывать эмуляцию и добавлять новые компы и конфигурации, либо заниматься интерфейсом. Постараюсь найти золотую середину :)

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

NEO SPECTRUMAN
24.03.2017, 23:25
я почему-то практически никогда не промахиваюсь.
ну умя пальнцы не очень хорошо работают
и на клаве на который все фки сгрупиророваны в один ряд и не отделены от цифр найти лежа нужную сходу не часто выходит



либо в первую очередь вылизывать эмуляцию
пилить эмуляцию в первую очередь!!
я надеюсь вы учитываете что за 4 такта проца\дма проходит 3 такта вг75 и все из этого вытекающие последствия


запилите простейшую эмуляцию телевизора (в eightyone даже помехи от работы проца? прущие на видео выход запилили)
простой счетчик на длину КСИ ССИ
если насчитал нужное\регулируемое количество
то начинать обновление экрана по новой...

ато когда окно дрыгается в высоту
на моих поделках...

+потестить на телеке видео режимы и глянуть когда изображение начинает терять синхронизацию
и запилить тоже

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

И ЕЩЕ ЗАБЫЛ
НУЖНО ВПИЛИТЬ DRAG&DROP!!!
когда нужно просмотреть 100500 файлов
єто очень полезно

и ускоренную перемотку
для тех софтов который писали *********
и понавставляли 20 минут тупых заставок
под унылые звуки

Pyk
25.03.2017, 00:59
В общем, эксперименты с интерфейсом и ускорением загрузки оставлю ориентировочно до майских праздников плюс/минус. Интерфейс и ядро эмулятора у меня довольно самостоятельны, так что замена интерфейса не потребует радикальной переделки эмулятора.



я надеюсь вы учитываете что за 4 такта проца\дма проходит 3 такта вг75 и все из этого вытекающие последствия
Учитываю. Как и то, что на Партнере, например, DMA работает на тактовой частоте ВГ75, а не процессора. А вот с точным подсчетом тактов задержек ПДП пока не все так хорошо.

(Точный подсчет есть в эмуляторе Retro80, да и интерфейс у него отличный. Но он под MacOS.)


НУЖНО ВПИЛИТЬ DRAG&DROP!!!
Сделаю. Хотя лично для меня это еще одна бесполезная функция ;) Мне проще нажать Enter на файле, чем тащить его куда-то мышкой... Если, конечно, эмулятор не грузится 10 секунд ;)


и ускоренную перемотку
Согласен. Добавлю в планы. В старых версиях, кстати, было.


запилите простейшую эмуляцию телевизора (в eightyone даже помехи от работы проца? прущие на видео выход запилили)
простой счетчик на длину КСИ ССИ
если насчитал нужное\регулируемое количество
то начинать обновление экрана по новой...

ато когда окно дрыгается в высоту
на моих поделках...


Возможно, я не совсем понял, что именно нужно, может выставить фиксированный размер окна в настройках, чтобы оно не дрыгалось?


+потестить на телеке видео режимы и глянуть когда изображение начинает терять синхронизацию
и запилить тоже

А это от телека/монитора зависит.

И вообще, я довольно пессимистически настроен относительно этих экспериментов в ВГ75. Чего в итоге достичь-то хочется? Сэмулировать ВСЕ нереально.

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


простой счетчик на длину КСИ ССИ
если насчитал нужное\регулируемое количество
то начинать обновление экрана по новой...
А, кажется понял.
Сделать один экран из нескольких частей с разными параметрами?

NEO SPECTRUMAN
25.03.2017, 15:25
А это от телека/монитора зависит.
Ну это да
но если КСИ ССИ сильно короткие
они по идеи должны быть проигнорированы

да и писать софты нужно с учетом самых капризных телеков желательно
И лучше если эмуль покахет разсинхронизацию
чем стабильную картинку с разверткой 250 Гц

ато писатели под эмулятор глянут что оно работает
и понаписывают...
умя сразу вспоминается упоминание игры под zx81 которая работает только на эмуляторе...

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


И вообще, я довольно пессимистически настроен относительно этих экспериментов в ВГ75. Чего в итоге достичь-то хочется?
вот такое разрешение как в кубике слева
только на большей площади экрана
и по центру
http://savepic.ru/13326696.jpg

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


Сделать один экран из нескольких частей с разными параметрами?
ну это тоже да
но это скорей всего не реально
кроме сочетаний с режимами с высотой строки 1


Мне проще нажать Enter на файле, чем тащить его куда-то мышкой...
а я наоборот не люблю ассоциации файлов )))

Pyk
27.03.2017, 00:08
А чего эмуль так долго запускается?
Обновил wxWidgets до последней версии (3.1.0) - запускается не дольше секунды. Возможно, была какая-то проблема в версии 3.0.2 либо я собрал ее с неправильными опциями.
Постараюсь на неделе обновить тестовую версию.

ZEman
02.04.2017, 12:30
есть шанс увидеть новую версию эмулятора хотя-бы в апреле ?

Pyk
02.04.2017, 13:49
Все по мере наличия свободного времени, а с ним-то как раз было не очень :(
Вообще планировал сегодня сделать новую сборку - сейчас как раз допиливаю кое-что...
Но если вдруг что-то помешает, то завтра-послезавтра...

Pyk
02.04.2017, 22:53
Выложил новую тестовую сборку:

http://emu80.org/v4beta/Emu80_40225.zip

Изменения по сравнению в версией 4.0.218:

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

* Ускорен запуск эмулятора. Просьба оценить скорость запуска и необходимость lite-версии.
* Используется текущая папка при передаче имени файла без пути в командной строке.
- Исправлены некоторые фильтры при загрузке файлов.
+ Автозапуск файлов при загрузке по Alt-F3 (обычная загрузка - Alt-L).
+ Ассоциация расширений файлов в конфигурационном файле
Если не указана опция выбора типа платформы, он оперделяется на основании расширения файла.
При загрузке файла по умолчанию происходит автозапуск, если нужно просто загрузить,
используйте новую опцию "-l"
+ Drag-n-drop файлов: пока только автозапуск. Перетаскивать файлы нужно в окно, в котором
эмуляруется платформа, соответствующая перетаскиваемому файлу.
* Улучшения в эмуляции ВГ75:
исправлено поведение при одновременной установке атрибутов мерцания и подчеркивания,
исправления, касающиеся работы с флагом IE,
гашение экрана после команд stop display и reset
* Стрелки работают также и на на цифровой клавиатуре
+ Ускоренная перемотка (3x) при нажатой клавише End
+ Пауза/возобновление работы эмулятора по кнопке Pause/Break. При вызове отладчика режим паузы выключается.
+ Экспериментальная опция: Aspect Ratio. Позволяет отображать как квадратные пиксели
(1:1), так и в соотвтетствии с реально отображаемой на экране соответствующего ПК
картинкой. Горячая клавиша - ALt-R. Пока поддерживается только режим PAL (576i).
+ Конфигурация для РК-86 с процессором Z80 (вариант Владимира Чистякова).

Информацию в первом сообщении также поменял.

Кое-что из начатого и обещанного доделать не успел - войдет в следующие сборки.

NEO SPECTRUMAN
03.04.2017, 16:36
По моему на одном компе скорость запуска стала нормальной на другом(тот что по старей) так и осталась...
потом еще проверю (мог закинуть не ту версию)

в Emu80lite вообще есть смена конфигурации? попадание в настройки?
сброс и 2!!!!!! версии закрыть окна в нем работают...
но не F9


И ищо
за перехват обращения к магнитофону
когда делаю загрузку I
и не выбираю никакой файл
загрузка завершается
0000
0000
0000

при этом b2m правильно(по моему мнению) продолжает выполнять процедуру загрузки...
можно зайти в дебагер подебагать её...

в РК можно отменить загрузку??? есть какой нибудь break на клавиатуре??
или если она началась то ее не остановить??

ZEman
03.04.2017, 16:55
чтот у меня так и осталась ассоциация файлов со старой версией (3.04) эмулятора.
и пауза по кнопке "pause/break" не включается.

NEO SPECTRUMAN
03.04.2017, 17:26
На нем же сравнивал скорости эмулей лоб-в-лоб, один и тот же тест по времени.
совсем глупое тестирование скорости...
оно будет разбигаться даже на 2-х одинаковых компах с одинаковой схемой и из микросхем одной партии...

NEO SPECTRUMAN
03.04.2017, 17:51
совсем глупое утверждение при разнице в 33%
у меня такое чувство будто в b2m вообще не эмулируются задержки от DMA...

и вообще сравнивать кривые эмуляторы...
еще бы сравнили с Е3000...

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


совсем глупое утверждение при разнице в 33%
ты посмотри как эмулируется спектрум
выбираешь пентанон
и повышается скорость\частота звука

хотя у пентагона таже частота проца
но другая частота кадров

а в эмулях на оборот
одна частота кадров
но разное количество тактов в них...

Pyk
03.04.2017, 20:47
в Emu80lite вообще есть смена конфигурации? попадание в настройки?
сброс и 2!!!!!! версии закрыть окна в нем работают...
но не F9
В lite-версии нет ни настроек, ни смены конфигурации. Только диалоги выбора файла.


за перехват обращения к магнитофону
когда делаю загрузку I
и не выбираю никакой файл
загрузка завершается
0000
0000
0000
при этом b2m правильно(по моему мнению) продолжает выполнять процедуру загрузки...
В принципе, можно тоже подобное поведение сделать. Но у b2m сделано чтение wav-файлов, так что это имеет смысл, а у меня пока нет. Доберусь до чтения wav - переделаю и отказ от загрузки.


в РК можно отменить загрузку??? есть какой нибудь break на клавиатуре??
или если она началась то ее не остановить??
Отмены загрузки в РК нет - нужно жать на reset.


чтот у меня так и осталась ассоциация файлов со старой версией (3.04) эмулятора.
и пауза по кнопке "pause/break" не включается.
Можно ассоциировать текущую версию вручную: правой кнопкой - "Открыть / выбор программы из списка установленных" либо "Открыть с помощью", потом "Обзор" и выбрать emu80.exe и галку "всегда использовать..."
Никакого автоматического ассоциирования пока нет.


в конфе Радио 86-РК равные скорости с Emu если проц там CPUClock=1310000Hz, при стандарте 1777777 там значительно убегает вперед.

у меня такое чувство будто в b2m вообще не эмулируются задержки от DMA...
В emu в конфиге по умолчанию не настроено торможение из-за ПДП. Чтобы это включить, добавьте "hrq=CPU.hold" в секцию "dma : K580wt57". Это относится к РК, Апогею и Микроше. Как сделать (и можно ли) в emu правильное торможение ПДП для Партнера, я не знаю.

В Emu80 должно соответствовать реалу с погрешностью меньше 1% в обычном режиме. В emu скорее всего тоже. (Точнее пока только в Retro-80.)

NEO SPECTRUMAN
03.04.2017, 20:51
В lite-версии нет ни настроек, ни смены конфигурации. Только диалоги выбора файла.
Ну а как тогда...
...мне эмулятор партнера 3-жды не нужен
...не делать же отдельный исполняемый файл для каждой платформы?
или делать? (так например в vice)

пойду прямо счас проверю время запуска...
Ага тогда я запустил не ту версию видимо
На обоих компах время запуска нормальное :v2_thumb:

Pyk
03.04.2017, 21:02
NEO SPECTRUMAN,
Во первых, автозапуск Партнера настроен в конфиге, это можно поменять.
Во вторых, можно запускать эмулятор с опциями командной строки для запуска нужной платформы.
В третьих, при передаче в качестве параметра имени файла, в последней версии произойдет автоопределение запускаемой платформы на основании расширения файла.
Так что lite-версия даже в таком виде вполне юзабельна. Вполне можно ассоциировать с нужными расширениями для автозапуска.

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


и пауза по кнопке "pause/break" не включается.
Можно поподробнее - при каких обстоятельствах проверялось? Проверил - вроде бы все ок, пауза включается...

NEO SPECTRUMAN
03.04.2017, 21:04
и пауза по кнопке "pause/break" не включается.
а при этом не работает какой нибудь плеер или переназначалка клавиатуры?
у меня периодически возникают подобные траблы изза подобного в некоторых приложениях.

ZEman
04.04.2017, 03:33
а при этом не работает какой нибудь плеер или переназначалка клавиатуры?
у меня периодически возникают подобные траблы изза подобного в некоторых приложениях.

У меня стоит переназначалка клавиатуры "punto switcher" называется - довольно полезная для быстрого набора слов и корректировки ошибок программа, хотя иногда довольно вредная.
Жму на клавишу пауза, пауза проскакивает пару раз (очень быстро включается-выключается) а потом клавиша пауза как-будто игнорируется.
Может назначите паузу на другую клавишу какую-нибудь F ?

Pyk
04.04.2017, 09:06
Это в каком то ру-ководстве описано?))
Не помню, возможно на форуме проскакивало. В конфиге Микроши, кажется, уже сделано.



Включил. Теперь с точностью до наоборот.
Сейчас проверил на Микроше - и в Emu80, и в emu одинаковые результаты. К тому же свой эмулятор я с реалом сверял, хотя это давненько уже было...



Тесты все те же, от Shiru_Otaku. Только склеены все 45 штук в один файл.
Что за тесты? Не знаю о них, возможно, именно на них проблемы?

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


Может назначите паузу на другую клавишу какую-нибудь F ?
Хорошо, продублирую на сочетание Alt + что-нибудь.
Я не пользовался punto switcher'ом, он как раз клавишу Pause использует по умолчанию?

barsik
04.04.2017, 11:01
В эмуляторах, где специально принимаются меры для балансировки времён исполнения команд такая ситуация. Чем быстрее компьютер на котором прогоняется эмулятор, тем точнее балансировка времён исполнения команд. На одноядерном ПЕНТИУМ-II все современные эмуляторы дают 100% погрешность времен прогона некоторых команд (а если одновременно загрузить современный 100-мегабайтный браузер, жрущий все ресурсы CPU, то намного больше). А на CELERON 500 вообще даже не выходят на номинальную скорость (примерно вдвое медленнее). Это из-за использования ЯВУ, на ассемблере более точный эмулятор можно сделать на 286-той с тактом всего 16 МГЦ?

Pyk
04.04.2017, 11:19
Да нуу, ну как можно не знать.
http://www.nedopc.org/forum/viewtopic.php?f=43&t=8395
Эти знаю, конечно.
Только зачем же использовать тест не по назначению?
Он предназначен для тестирования ВГ75. А поскольку с эмуляцией ВГ75 остались пока проблемы, результат выдается не совсем корректный, и время выполнения получается не вполне корректное.
Как в emu дела обстоят с этим тестом - точно не знаю.
Потестируйте на чем-нибудь, что корректно работает в эмуляторе, да хоть просто дамп области памяти в Мониторе.



В эмулятораз, где специально принимаются меры для балансировки времён исполнения команд такая ситуация.
Ну, на современных компьютерах с достаточно мощным процессором все зависит только от самого эмулятора, не думаю, что проблемы могут быть из-за того, что не успевает компьютер, на котором этот эмулятор запущен...

barsik
04.04.2017, 11:40
на современных компьютерах с достаточно мощным процессором все зависит только от самого эмулятора, не думаю, что проблемы с могут быть из-за того, что не успевает компьютер

Это легко проверить. Когда я в 2000 году заимел свой первый ПЕНТИУМ (Celeron 500), который эмулировал в 5-6 раз быстрее, чем до того имевшийся 486DX2-80 (170 XT), то решил сбалансировать времена исполнения команд в своём эмуляторе. При 486-той ещё не было ресурса для этого. Для этого я прогонял 500 миллионов раз подряд одну команду Z80 и по системному таймеру (что считает клики в 1/18 секунды) "засекал" время.

Замечу, что сбалансировать 100% всё-равно не удастся - времена исполнения команд колеблются в разных процессорах из разных фирм. Кроме того, у одного кэш более быстрый, у другого конвейер более эффективный, в третьем компьютере интегрированный видеоадаптер тормозит. Конечно отличия невелики, но всё-же есть.

Что Вам мешает написать подобный тест и оттестировать корректность времянок по командам.

Тут некоторые пытаются тестировать программы основанные на времянках на эмуляторах. Я вообще не понимаю как это возможно. Ведь эмулятор на фреймах "рвёт" прогон программы ещё покруче, чем это делает ПДП в РК86. Так как, как минимум 50 раз в секунду, процессор в PC прекращает эмуляцию и начинает делать визуализацию, выкидывая картинку на экран SVGA. Понятно, что за секунду усреднённое торможение от визуализации постоянно. Но за короткий промежуток времени - это как попадёт. Если попадёт между двумя периодами визуалиции - это одна скорость, а если фрагмент придётся на период регенерации, то время прогона этого фрагмента изменится в разы. Или у Вас визуализацию делает другой процессор, не мешая основному?

Pyk
04.04.2017, 11:52
Что Вам мешает написать подобный тест и оттестировать корректность времянок по командам.
В этом нет необходимости - я никогда не полагался на подобный способ "балансировки" и с самых первых версий жестко привязывался к таймеру, считая такты выполняемых команд.

zebest
04.04.2017, 12:06
ПонИл. Тесты с ВГ75 нерелевантны ни разу. Ок.

barsik
04.04.2017, 12:45
Тесты с ВГ75 нерелевантны ни разу

Эмулятор может быть вполне адекватным. Всё зависит от того как сделана визуализация. Если так как выше описано, т.е процессор в каждом каждом кадре надолго прекращает прогон и начинает визуализацию всего экрана это одно. А если визулизация "размазана тонким слоем" по времени кадра, т.е после прогона каждых 10 команд Z80, мы визуализируем маленький кусочек экрана (но не весь) это другое.

И совсем третье, если визуализация сделана грамотно, когда все команды Z80 пишущие в экран отлавливаются (но не визулизируются сразу, а запоминаются), а затем после прогона очередноё 6000-ной команды все изменения экрана разом визуализируются и время процедуры визуализации подгоняется так, чтобы и при одном изменении экрана и при 150-ти, пауза в прогоне была одна и та же. Тогда скорость прогона неизменна, как для программ не пишущих в экран, так и для программ с быстрой динамикой на экране. При этом способе 50 раз в секунду делается визуализация не всего экрана, а лишь меняются произошедшие изменения на экране. Отчего потери скорости не на 99.9% как у цельно-фреймовой визуализации, а лишь на 0.05%. Так делаются эмуляторы на 286-том, которые работают лучше, чем эмуляторы на ПЕНТИУМЕ, что в 10 тысяч раз скоростнее. К сожалению, в моём эмуляторе не так. Я выравнивание потерь на визуализацию не делал, поэтому на 286-той (15 XT) есть 10%-ные колебания скорости в динамичных играх. Но уже на 386DX40 (43 XT) колебаний скорости нет.


я никогда не полагался на подобный способ "балансировки" и с самых первых версий жестко привязывался к таймеру, считая такты выполняемых команд.

Какой таймер, в режиме прогона прерывания запрещены. Точно также как клавиатура обслуживается собственным драйвером, INT_9 не работает, отчего программы для скрин-шота не работают. Поэтому копию экрана эмулятора я делаю в эмуляторе DOS BOX. Получается четверная эмуляция: DOS BOX, PC XT, ОРИОН, РК86. Кстати DOS BOX неверно эмулирует текстовый адаптер, а именно режим загрузки своих фонтов (это он делает), но не выпоняет функцию использовать фонт 9*16 вместо 8*16, отчего мой красивый фонт слипается, и в мониторе-отладчике отображается слипшийся фонт)

Не могли бы Вы пояснить идею. Я это не понял.

Я понимаю, что можно определить сколько маш.тактов прогналось за единицу времени, скорректировать константу тормозилки и снова протестировать. Через несколько итераций получим константу тормозилки, чтобы скорость соответствовала РК86 с реальным тактом в 1.3 МГЦ. Выяснить скорость легко даже по секундомеру. Так что не важно полагаетесь Вы на таймер или ручной секундомер. Как Вы тормозите - добавляя паузу после каждой команды (как делаю я, отчего получается дискретность и разбалансировка), добавляя большую паузу после, например 10.000 команд или добавляя количество кадров визуализируемых за секунду?

b2m
04.04.2017, 13:12
Как Вы тормозите - добавляя паузу после каждой команды (как делаю я, отчего получается дискретность и разбалансировка), добавляя большую паузу после, например 10.000 команд или добавляя количество кадров визуализируемых за секунду?
Выполняя в одном цикле эмуляции ровно столько тактов процессора, сколько выполнилось бы реальным процессором за время, которое прошло с предыдущего цикла. Сколько раз в секунду запускать цикл эмуляции, в таком случае, неважно. Можно 50 раз, а можно и 100 раз. Главное, что будет проэмулировано ровно столько тактов, сколько надо. Единственная погрешность - это погрешность при пересчёте времени в такты. У меня в эмуляторе время берётся в миллисекундах (количество тиков), соответственно если тактовая частота не кратна 1000, то количество тактов будет плюс-минус один. При 100 циклах в секунду до 100 тактов погрешности. Но при частоте около 2МГц это лишь 0.005%.

barsik
04.04.2017, 14:24
Выполняя в одном цикле эмуляции ровно столько тактов процессора, сколько выполнилось бы реальным процессором за время, которое прошло с предыдущего цикла. Сколько раз в секунду запускать цикл эмуляции, в таком случае, неважно

Извиняюсь, но я такой тупой, что ничего не понял... Какой цикл эмуляции? Что за цикл?

Эмуляция делается так. Эмулятор считывает байт - код команды. Затем табличным методом уходит на подпрограмму её эмуляции. В этой п/п-мме (их 256, а для префиксных Z80 делается 2-рой переход) соответственно меняются регистры и эмулируемое ОЗУ ЭВМ. В конце этой маленькой процедуры эмуляции стоит макрокоманда NEXTK?? после исполнения которой выполняется команда JMP перехода по адресу из ячейки где лежит адрес главной петли прогона (т.к переходы разные при STEP,RUN и TURBO). И всё повторяется уже для следующей команды. Какие тут циклы и какие такты Z80 команд? Понятно, что можно заставить каждую процедуру эмуляции конкретной команды увеличивать какой-то счётчик на число тактов реальной команды. Что это даст, кроме знания сколько тактов исполнилось.

Т.к время эмуляции команды намного меньше, чем время паузы добавляемое после каждой команды, то после каждой команды я загружаю в BL число её тактов. А на входе главной петли стоит тормозилка, которая прогоняет столько циклов декремента до 0 константы тормозилки, сколько тактов было в предыдущей команде. Константа тормозилки от 1 до 65536. В версиях выпущенных до 1998 было ограничение тормозилки до 4000. После ограничение снял, т.к для ПЕНТИУМ уже не хватало диапазона торможения.

Привожу исходник петли эмуляции и примеры эмуляции 3-х команд в эмуляторе ОРИОНА. Как видите регистровые команды эмулируются 4-мя командами 80x86. Команды КР580 для ОЗУ - ~10-ю командами, а сложные команды Z80 - до 30 команд 80x86-го. Главная петля такая простая только при тормозилке 0, когда выжимается 150 МГЦ процессора Z80. Реальная петля сложнее, там считаются команды, чтобы эмулировать INT 50 ГЦ, оценивается флаг DI и делается пауза на время пропорциональное числу тактов предудущей команды.

Как мне использовать Вашу идеологию торможения или идеологию Pyk?


; ────────────────� �────────────────� ��────────────

; петля прогона при TORMOZ =0

TGO_BAN: GET_ES SI ; сюда вылет после команд меняющ.банку
TGO_NOB: ; сюда вылет после команд не мен.банку
MOV BL,ES:[SI]
MOV BP,SI
INC SI
XOR BH,BH
SHL BX,1 ; умножить на 2
JMP [BX+word ptr VECT_580]

; ────────────────� �────────────────� ��────────────

@47: MOV BX,DI ; LD B,A
MOV BH,AL
MOV DI,BX
NEXTK4P ; Пауза для 4-тактовых команд

; ────────────────� �────────────────� ��────────────

@70: MOV BX,DI ; LD (HL),B
MOV BYTE_TO,BH
MOV BX,DX
if_wr_hi ; BP= адрес начала кода команды
@70_2: MOV BX,DI
XCHG SI,DX
GET_ES SI
MOV ES:[SI],BH
XCHG SI,DX
CMP DX,scr_low
JC @70_1
CMP DX,scr_ovr
JNC @70_1
MOV BX,DX
JMP SCREEN ; запись 1-го байта в экран (BYTE_TO, в BX=адрес)

@70_1: NXTK_B7 ; Пауза для 7-тактовых команд

; ────────────────� �────────────────� ��────────────

@FD_36: MOV BP,AX ; LD (IY+disp),nn
MOV BX,ES:[SI] ; диспласемент 'disp'
INC SI
INC SI
MOV AL,BH ; nn
MOV ES,AX
XOR BH,BH
OR BL,BL
JS @FD36_2
ADD BX,_REG_IY
@FD36_0: MOV AX,ES
GET_ES BX
MOV ES:[BX],AL
MOV BYTE_TO,AL
MOV AX,BP
if_noscr @DD70_3
JMP SCREEN ; запись одного байта в экран байт в BYTE_TO, адрес в BX

@FD36_2: NEG BL
MOV AX,_REG_IY
SUB AX,BX
MOV BX,AX
JMP @FD36_0

@DD70_0: GET_ES BX
MOV BP,AX
MOV AX,DI
MOV ES:[BX],AH
MOV BYTE_TO,AH
MOV AX,BP
if_noscr @DD70_3
JMP SCREEN

@DD70_2: NEG BL
MOV BP,_REG_IX
SUB BP,BX
MOV BX,BP
JMP @DD70_0

@DD70_3: NXTK_B

; ────────────────� �────────────────� ��────────────

NXTK_B4 MACRO
MOV BL,4 ; загрузка BL числом для балансировки
JMP [word ptr ADR_LOB]
ENDM

ADR_LOB label WORD ; адрес перехода для команд меняющих тек.банку
DW 0
ADR_LON label WORD ; адрес перехода для команд не меняющих банку
DW 0

; ────────────────� �────────────────� ��────────────

if_noscr MACRO ADDR
CMP BX,scr_low
JC ADDR
CMP BX,scr_ovr
JNC ADDR
ENDM

; ────────────────� �────────────────� ��────────────

if_wr_hi MACRO
CMP BH,0F4H
jmpnc WRIT_HI
ENDM

; ────────────────� �────────────────� ��────────────

; на входе BP должен содержать адрес начала кода команды

WRIT_HI: ; Запись одного байта по адресу выше F400
TEST _PFB,00100000B
JNZ WR_MEM ; если FULL RAM
WR_HI_2:
MOV ES,bank0 ; на входе: BX- адрес, BYTE_TO - байт
AND BL,3
CMP BX,0F800H
jmpnc WR_REG ; BP= адрес начала кода команды
CMP BX,0F500H
JNC H_F500 ; если выше F4FF
CMP BX,0F403H
JNZ F400_1
MOV BL,BYTE_TO ; write F403
MOV L_F403,BL
JMP short NO_REGS

; ────────────────� �────────────────� ��────────────

comment \

РАСПРЕДЕЛЕНИЕ РЕГИСТРОВ

DS - seg _TEXT AL - A
ES - seg ORION_MEM SI - PC
SS - seg STACK CX - BC
SI - PC DX - DE
_REG_S - SP ; ячейка ОЗУ BX - HL
AL - A BP - рабочий
AH - флаги КР580
DI - BC
CX - DE
DX - HL

BP - рабочий (при прогоне копия SI, текущий адрес PC)
BX - рабочий
SP - стек 8086
\

; ────────────────� �────────────────� ��────────────

VECT_580 LABEL BYTE

DW @00,@01,@02,@03,@04,@05,@06,@07
DW @08,@09,@0A,@0B,@0C,@0D,@0E,@0F
DW @10,@11,@12,@13,@14,@15,@16,@17
DW @18,@19,@1A,@1B,@1C,@1D,@1E,@1F
DW @20,@21,@22,@23,@24,@25,@26,@27
DW @28,@29,@2A,@2B,@2C,@2D,@2E,@2F
DW @30,@31,@32,@33,@34,@35,@36,@37
DW @38,@39,@3A,@3B,@3C,@3D,@3E,@3F
DW @40,@41,@42,@43,@44,@45,@46,@47
DW @48,@49,@4A,@4B,@4C,@4D,@4E,@4F
DW @50,@51,@52,@53,@54,@55,@56,@57
DW @58,@59,@5A,@5B,@5C,@5D,@5E,@5F
DW @60,@61,@62,@63,@64,@65,@66,@67
DW @68,@69,@6A,@6B,@6C,@6D,@6E,@6F
DW @70,@71,@72,@73,@74,@75,@76,@77
DW @78,@79,@7A,@7B,@7C,@7D,@7E,@7F
DW @80,@81,@82,@83,@84,@85,@86,@87
DW @88,@89,@8A,@8B,@8C,@8D,@8E,@8F
DW @90,@91,@92,@93,@94,@95,@96,@97
DW @98,@99,@9A,@9B,@9C,@9D,@9E,@9F
DW @A0,@A1,@A2,@A3,@A4,@A5,@A6,@A7
DW @A8,@A9,@AA,@AB,@AC,@AD,@AE,@AF
DW @B0,@B1,@B2,@B3,@B4,@B5,@B6,@B7
DW @B8,@B9,@BA,@BB,@BC,@BD,@BE,@BF
DW @C0,@C1,@C2,@C3,@C4,@C5,@C6,@C7
DW @C8,@C9,@CA,@CB,@CC,@CD,@CE,@CF
DW @D0,@D1,@D2,@D3,@D4,@D5,@D6,@D7
DW @D8,@D9,@DA,@DB,@DC,@DD,@DE,@DF
DW @E0,@E1,@E2,@E3,@E4,@E5,@E6,@E7
DW @E8,@E9,@EA,@EB,@EC,@ED,@EE,@EF
DW @F0,@F1,@F2,@F3,@F4,@F5,@F6,@F7
DW @F8,@F9,@FA,@FB,@FC,@FD,@FE,@FF

VECT_CB LABEL BYTE

DW @CB_00,@CB_01,@CB_02,@CB_03,@CB_04,@CB_05,@CB_06,@ CB_07
DW @CB_08,@CB_09,@CB_0A,@CB_0B,@CB_0C,@CB_0D,@CB_0E,@ CB_0F
DW @CB_10,@CB_11,@CB_12,@CB_13,@CB_14,@CB_15,@CB_16,@ CB_17
DW @CB_18,@CB_19,@CB_1A,@CB_1B,@CB_1C,@CB_1D,@CB_1E,@ CB_1F
DW @CB_20,@CB_21,@CB_22,@CB_23,@CB_24,@CB_25,@CB_26,@ CB_27
DW @CB_28,@CB_29,@CB_2A,@CB_2B,@CB_2C,@CB_2D,@CB_2E,@ CB_2F
DW @CB_30,@CB_31,@CB_32,@CB_33,@CB_34,@CB_35,@CB_36,@ CB_37
DW @CB_38,@CB_39,@CB_3A,@CB_3B,@CB_3C,@CB_3D,@CB_3E,@ CB_3F
DW @CB_40,@CB_41,@CB_42,@CB_43,@CB_44,@CB_45,@CB_46,@ CB_47
DW @CB_48,@CB_49,@CB_4A,@CB_4B,@CB_4C,@CB_4D,@CB_4E,@ CB_4F
DW @CB_50,@CB_51,@CB_52,@CB_53,@CB_54,@CB_55,@CB_56,@ CB_57
DW @CB_58,@CB_59,@CB_5A,@CB_5B,@CB_5C,@CB_5D,@CB_5E,@ CB_5F
DW @CB_60,@CB_61,@CB_62,@CB_63,@CB_64,@CB_65,@CB_66,@ CB_67
DW @CB_68,@CB_69,@CB_6A,@CB_6B,@CB_6C,@CB_6D,@CB_6E,@ CB_6F
DW @CB_70,@CB_71,@CB_72,@CB_73,@CB_74,@CB_75,@CB_76,@ CB_77
DW @CB_78,@CB_79,@CB_7A,@CB_7B,@CB_7C,@CB_7D,@CB_7E,@ CB_7F
DW @CB_80,@CB_81,@CB_82,@CB_83,@CB_84,@CB_85,@CB_86,@ CB_87
DW @CB_88,@CB_89,@CB_8A,@CB_8B,@CB_8C,@CB_8D,@CB_8E,@ CB_8F
DW @CB_90,@CB_91,@CB_92,@CB_93,@CB_94,@CB_95,@CB_96,@ CB_97
DW @CB_98,@CB_99,@CB_9A,@CB_9B,@CB_9C,@CB_9D,@CB_9E,@ CB_9F
DW @CB_A0,@CB_A1,@CB_A2,@CB_A3,@CB_A4,@CB_A5,@CB_A6,@ CB_A7
DW @CB_A8,@CB_A9,@CB_AA,@CB_AB,@CB_AC,@CB_AD,@CB_AE,@ CB_AF
DW @CB_B0,@CB_B1,@CB_B2,@CB_B3,@CB_B4,@CB_B5,@CB_B6,@ CB_B7
DW @CB_B8,@CB_B9,@CB_BA,@CB_BB,@CB_BC,@CB_BD,@CB_BE,@ CB_BF
DW @CB_C0,@CB_C1,@CB_C2,@CB_C3,@CB_C4,@CB_C5,@CB_C6,@ CB_C7
DW @CB_C8,@CB_C9,@CB_CA,@CB_CB,@CB_CC,@CB_CD,@CB_CE,@ CB_CF
DW @CB_D0,@CB_D1,@CB_D2,@CB_D3,@CB_D4,@CB_D5,@CB_D6,@ CB_D7
DW @CB_D8,@CB_D9,@CB_DA,@CB_DB,@CB_DC,@CB_DD,@CB_DE,@ CB_DF
DW @CB_E0,@CB_E1,@CB_E2,@CB_E3,@CB_E4,@CB_E5,@CB_E6,@ CB_E7
DW @CB_E8,@CB_E9,@CB_EA,@CB_EB,@CB_EC,@CB_ED,@CB_EE,@ CB_EF
DW @CB_F0,@CB_F1,@CB_F2,@CB_F3,@CB_F4,@CB_F5,@CB_F6,@ CB_F7
DW @CB_F8,@CB_F9,@CB_FA,@CB_FB,@CB_FC,@CB_FD,@CB_FE,@ CB_FF

if Z80

VECT_DD LABEL BYTE

DW @DD_00,@DD_01,@DD_02,@DD_03,@DD_04,@DD_05,@DD_06,@ DD_07
DW @DD_08,@DD_09,@DD_0A,@DD_0B,@DD_0C,@DD_0D,@DD_0E,@ DD_0F
DW @DD_10,@DD_11,@DD_12,@DD_13,@DD_14,@DD_15,@DD_16,@ DD_17
DW @DD_18,@DD_19,@DD_1A,@DD_1B,@DD_1C,@DD_1D,@DD_1E,@ DD_1F
DW @DD_20,@DD_21,@DD_22,@DD_23,@DD_24,@DD_25,@DD_26,@ DD_27
DW @DD_28,@DD_29,@DD_2A,@DD_2B,@DD_2C,@DD_2D,@DD_2E,@ DD_2F
DW @DD_30,@DD_31,@DD_32,@DD_33,@DD_34,@DD_35,@DD_36,@ DD_37
DW @DD_38,@DD_39,@DD_3A,@DD_3B,@DD_3C,@DD_3D,@DD_3E,@ DD_3F
DW @DD_40,@DD_41,@DD_42,@DD_43,@DD_44,@DD_45,@DD_46,@ DD_47
DW @DD_48,@DD_49,@DD_4A,@DD_4B,@DD_4C,@DD_4D,@DD_4E,@ DD_4F
DW @DD_50,@DD_51,@DD_52,@DD_53,@DD_54,@DD_55,@DD_56,@ DD_57
DW @DD_58,@DD_59,@DD_5A,@DD_5B,@DD_5C,@DD_5D,@DD_5E,@ DD_5F
DW @DD_60,@DD_61,@DD_62,@DD_63,@DD_64,@DD_65,@DD_66,@ DD_67
DW @DD_68,@DD_69,@DD_6A,@DD_6B,@DD_6C,@DD_6D,@DD_6E,@ DD_6F
DW @DD_70,@DD_71,@DD_72,@DD_73,@DD_74,@DD_75,@DD_76,@ DD_77
DW @DD_78,@DD_79,@DD_7A,@DD_7B,@DD_7C,@DD_7D,@DD_7E,@ DD_7F
DW @DD_80,@DD_81,@DD_82,@DD_83,@DD_84,@DD_85,@DD_86,@ DD_87
DW @DD_88,@DD_89,@DD_8A,@DD_8B,@DD_8C,@DD_8D,@DD_8E,@ DD_8F
DW @DD_90,@DD_91,@DD_92,@DD_93,@DD_94,@DD_95,@DD_96,@ DD_97
DW @DD_98,@DD_99,@DD_9A,@DD_9B,@DD_9C,@DD_9D,@DD_9E,@ DD_9F
DW @DD_A0,@DD_A1,@DD_A2,@DD_A3,@DD_A4,@DD_A5,@DD_A6,@ DD_A7
DW @DD_A8,@DD_A9,@DD_AA,@DD_AB,@DD_AC,@DD_AD,@DD_AE,@ DD_AF
DW @DD_B0,@DD_B1,@DD_B2,@DD_B3,@DD_B4,@DD_B5,@DD_B6,@ DD_B7
DW @DD_B8,@DD_B9,@DD_BA,@DD_BB,@DD_BC,@DD_BD,@DD_BE,@ DD_BF
DW @DD_C0,@DD_C1,@DD_C2,@DD_C3,@DD_C4,@DD_C5,@DD_C6,@ DD_C7
DW @DD_C8,@DD_C9,@DD_CA,@DD_CB,@DD_CC,@DD_CD,@DD_CE,@ DD_CF
DW @DD_D0,@DD_D1,@DD_D2,@DD_D3,@DD_D4,@DD_D5,@DD_D6,@ DD_D7
DW @DD_D8,@DD_D9,@DD_DA,@DD_DB,@DD_DC,@DD_DD,@DD_DE,@ DD_DF
DW @DD_E0,@DD_E1,@DD_E2,@DD_E3,@DD_E4,@DD_E5,@DD_E6,@ DD_E7
DW @DD_E8,@DD_E9,@DD_EA,@DD_EB,@DD_EC,@DD_ED,@DD_EE,@ DD_EF
DW @DD_F0,@DD_F1,@DD_F2,@DD_F3,@DD_F4,@DD_F5,@DD_F6,@ DD_F7
DW @DD_F8,@DD_F9,@DD_FA,@DD_FB,@DD_FC,@DD_FD,@DD_FE,@ DD_FF

VECT_FD LABEL BYTE

DW @FD_00,@FD_01,@FD_02,@FD_03,@FD_04,@FD_05,@FD_06,@ FD_07
DW @FD_08,@FD_09,@FD_0A,@FD_0B,@FD_0C,@FD_0D,@FD_0E,@ FD_0F
DW @FD_10,@FD_11,@FD_12,@FD_13,@FD_14,@FD_15,@FD_16,@ FD_17
DW @FD_18,@FD_19,@FD_1A,@FD_1B,@FD_1C,@FD_1D,@FD_1E,@ FD_1F
DW @FD_20,@FD_21,@FD_22,@FD_23,@FD_24,@FD_25,@FD_26,@ FD_27
DW @FD_28,@FD_29,@FD_2A,@FD_2B,@FD_2C,@FD_2D,@FD_2E,@ FD_2F
DW @FD_30,@FD_31,@FD_32,@FD_33,@FD_34,@FD_35,@FD_36,@ FD_37
DW @FD_38,@FD_39,@FD_3A,@FD_3B,@FD_3C,@FD_3D,@FD_3E,@ FD_3F
DW @FD_40,@FD_41,@FD_42,@FD_43,@FD_44,@FD_45,@FD_46,@ FD_47
DW @FD_48,@FD_49,@FD_4A,@FD_4B,@FD_4C,@FD_4D,@FD_4E,@ FD_4F
DW @FD_50,@FD_51,@FD_52,@FD_53,@FD_54,@FD_55,@FD_56,@ FD_57
DW @FD_58,@FD_59,@FD_5A,@FD_5B,@FD_5C,@FD_5D,@FD_5E,@ FD_5F
DW @FD_60,@FD_61,@FD_62,@FD_63,@FD_64,@FD_65,@FD_66,@ FD_67
DW @FD_68,@FD_69,@FD_6A,@FD_6B,@FD_6C,@FD_6D,@FD_6E,@ FD_6F
DW @FD_70,@FD_71,@FD_72,@FD_73,@FD_74,@FD_75,@FD_76,@ FD_77
DW @FD_78,@FD_79,@FD_7A,@FD_7B,@FD_7C,@FD_7D,@FD_7E,@ FD_7F
DW @FD_80,@FD_81,@FD_82,@FD_83,@FD_84,@FD_85,@FD_86,@ FD_87
DW @FD_88,@FD_89,@FD_8A,@FD_8B,@FD_8C,@FD_8D,@FD_8E,@ FD_8F
DW @FD_90,@FD_91,@FD_92,@FD_93,@FD_94,@FD_95,@FD_96,@ FD_97
DW @FD_98,@FD_99,@FD_9A,@FD_9B,@FD_9C,@FD_9D,@FD_9E,@ FD_9F
DW @FD_A0,@FD_A1,@FD_A2,@FD_A3,@FD_A4,@FD_A5,@FD_A6,@ FD_A7
DW @FD_A8,@FD_A9,@FD_AA,@FD_AB,@FD_AC,@FD_AD,@FD_AE,@ FD_AF
DW @FD_B0,@FD_B1,@FD_B2,@FD_B3,@FD_B4,@FD_B5,@FD_B6,@ FD_B7
DW @FD_B8,@FD_B9,@FD_BA,@FD_BB,@FD_BC,@FD_BD,@FD_BE,@ FD_BF
DW @FD_C0,@FD_C1,@FD_C2,@FD_C3,@FD_C4,@FD_C5,@FD_C6,@ FD_C7
DW @FD_C8,@FD_C9,@FD_CA,@FD_CB,@FD_CC,@FD_CD,@FD_CE,@ FD_CF
DW @FD_D0,@FD_D1,@FD_D2,@FD_D3,@FD_D4,@FD_D5,@FD_D6,@ FD_D7
DW @FD_D8,@FD_D9,@FD_DA,@FD_DB,@FD_DC,@FD_DD,@FD_DE,@ FD_DF
DW @FD_E0,@FD_E1,@FD_E2,@FD_E3,@FD_E4,@FD_E5,@FD_E6,@ FD_E7
DW @FD_E8,@FD_E9,@FD_EA,@FD_EB,@FD_EC,@FD_ED,@FD_EE,@ FD_EF
DW @FD_F0,@FD_F1,@FD_F2,@FD_F3,@FD_F4,@FD_F5,@FD_F6,@ FD_F7
DW @FD_F8,@FD_F9,@FD_FA,@FD_FB,@FD_FC,@FD_FD,@FD_FE,@ FD_FF

VECT_ED LABEL BYTE

DW @ED_00,@ED_01,@ED_02,@ED_03,@ED_04,@ED_05,@ED_06,@ ED_07
DW @ED_08,@ED_09,@ED_0A,@ED_0B,@ED_0C,@ED_0D,@ED_0E,@ ED_0F
DW @ED_10,@ED_11,@ED_12,@ED_13,@ED_14,@ED_15,@ED_16,@ ED_17
DW @ED_18,@ED_19,@ED_1A,@ED_1B,@ED_1C,@ED_1D,@ED_1E,@ ED_1F
DW @ED_20,@ED_21,@ED_22,@ED_23,@ED_24,@ED_25,@ED_26,@ ED_27
DW @ED_28,@ED_29,@ED_2A,@ED_2B,@ED_2C,@ED_2D,@ED_2E,@ ED_2F
DW @ED_30,@ED_31,@ED_32,@ED_33,@ED_34,@ED_35,@ED_36,@ ED_37
DW @ED_38,@ED_39,@ED_3A,@ED_3B,@ED_3C,@ED_3D,@ED_3E,@ ED_3F
DW @ED_40,@ED_41,@ED_42,@ED_43,@ED_44,@ED_45,@ED_46,@ ED_47
DW @ED_48,@ED_49,@ED_4A,@ED_4B,@ED_4C,@ED_4D,@ED_4E,@ ED_4F
DW @ED_50,@ED_51,@ED_52,@ED_53,@ED_54,@ED_55,@ED_56,@ ED_57
DW @ED_58,@ED_59,@ED_5A,@ED_5B,@ED_5C,@ED_5D,@ED_5E,@ ED_5F
DW @ED_60,@ED_61,@ED_62,@ED_63,@ED_64,@ED_65,@ED_66,@ ED_67
DW @ED_68,@ED_69,@ED_6A,@ED_6B,@ED_6C,@ED_6D,@ED_6E,@ ED_6F
DW @ED_70,@ED_71,@ED_72,@ED_73,@ED_74,@ED_75,@ED_76,@ ED_77
DW @ED_78,@ED_79,@ED_7A,@ED_7B,@ED_7C,@ED_7D,@ED_7E,@ ED_7F
DW @ED_80,@ED_81,@ED_82,@ED_83,@ED_84,@ED_85,@ED_86,@ ED_87
DW @ED_88,@ED_89,@ED_8A,@ED_8B,@ED_8C,@ED_8D,@ED_8E,@ ED_8F
DW @ED_90,@ED_91,@ED_92,@ED_93,@ED_94,@ED_95,@ED_96,@ ED_97
DW @ED_98,@ED_99,@ED_9A,@ED_9B,@ED_9C,@ED_9D,@ED_9E,@ ED_9F
DW @ED_A0,@ED_A1,@ED_A2,@ED_A3,@ED_A4,@ED_A5,@ED_A6,@ ED_A7
DW @ED_A8,@ED_A9,@ED_AA,@ED_AB,@ED_AC,@ED_AD,@ED_AE,@ ED_AF
DW @ED_B0,@ED_B1,@ED_B2,@ED_B3,@ED_B4,@ED_B5,@ED_B6,@ ED_B7
DW @ED_B8,@ED_B9,@ED_BA,@ED_BB,@ED_BC,@ED_BD,@ED_BE,@ ED_BF
DW @ED_C0,@ED_C1,@ED_C2,@ED_C3,@ED_C4,@ED_C5,@ED_C6,@ ED_C7
DW @ED_C8,@ED_C9,@ED_CA,@ED_CB,@ED_CC,@ED_CD,@ED_CE,@ ED_CF
DW @ED_D0,@ED_D1,@ED_D2,@ED_D3,@ED_D4,@ED_D5,@ED_D6,@ ED_D7
DW @ED_D8,@ED_D9,@ED_DA,@ED_DB,@ED_DC,@ED_DD,@ED_DE,@ ED_DF
DW @ED_E0,@ED_E1,@ED_E2,@ED_E3,@ED_E4,@ED_E5,@ED_E6,@ ED_E7
DW @ED_E8,@ED_E9,@ED_EA,@ED_EB,@ED_EC,@ED_ED,@ED_EE,@ ED_EF
DW @ED_F0,@ED_F1,@ED_F2,@ED_F3,@ED_F4,@ED_F5,@ED_F6,@ ED_F7
DW @ED_F8,@ED_F9,@ED_FA,@ED_FB,@ED_FC,@ED_FD,@ED_FE,@ ED_FF

endif
.

ZEman
04.04.2017, 14:26
Хорошо, продублирую на сочетание Alt + что-нибудь.
Я не пользовался punto switcher'ом, он как раз клавишу Pause использует по умолчанию?

да, оказалось что punto switcher использует клавишу "pause/break" для своих нужд.
отключил эту функцию в программе, пауза стала работать как надо.
но если можно продублируйте её на какое-нибудь сочетание клавиш.

Spectramine
04.04.2017, 14:30
да, оказалось что punto switcher использует клавишу "pause/break" для своих нужд.
отключил эту функцию в программе, пауза стала работать как надо.
но если можно продублируйте её на какое-нибудь сочетание клавиш.

Вместо отключения её можно переназначить в punto switcher на другую клавишу, например, на Scroll Lock.

b2m
04.04.2017, 14:39
Понятно, что можно заставить каждую процедуру эмуляции конкретной команды увеличивать какой-то счётчик на число тактов реальной команды. Что это даст, кроме знания сколько тактов исполнилось.
Без этого вообще невозможно сделать точную эмуляцию. И кстати, условные команды CALL и RET выполняются за разное количество тактов, в зависимости от условия, тоже надо учитывать.


Какой цикл эмуляции? Что за цикл?
Например, мы запускаем эмуляцию 50 раз в секунду по таймеру (или сигналу КСИ). Эмуляция команд процессора происходит в цикле. В нём же мы учитываем, сколько тактов выполнил наш процессор. Как только это число перевалило за 40000, завершаем цикл и ждём следующего срабатывания таймера. Таким образом в секунду мы эмулируем 50*40000=2000000 тактов процессора, что соответствует тактовой частоте 2МГц. В том-же цикле эмуляции нужно эмулировать и другие устройства: экран, звук, в/в магнитофона, последовательный интерфейс и т.д. и т.п.

barsik
04.04.2017, 15:14
Как только это число перевалило за 40000, завершаем цикл и ждём следующего срабатывания таймера

На мой взгляд это неудачная концепция. Пригодная лишь для точной эмуляции по скорости и ито НЕ на коротких периодах. На быстрой машине собственно такая эмуляция длится, допустим, 1 процент времени за цикл, а остальное время прогона нет. Как же тогда правильно будет играть музыка, где всё на задержках. И где взять таймер с периодом частоты в 50-100 герц? Я слышал, что в IBM PC есть таймер позволяющий измерять отсчеты с кратностью 1/18 секунды, а не 1/100 секунды.

По-моему, правильнее прогонять всё время, но тормозить после каждой команды, как я и делаю, хотя подгон времён и сделан небрежно. Обычно я сам пользуюсь эмулятором, где подгонка времён прогона команд отсутствует или минимальна, отчего погрешность времён +-100% и более (зато в режиме ТУРБО - 100 МГЦ Z80). Никакой разницы в работе программ при подгоне времён и без него - нет (точнее, я не заметил). Есть встроенный тест, который исполняет сотни миллионов команд NOP, а затем по таймеру вычисляет реальный такт. Этого вполне хватает. Можно прогнать тест с заведомо известным временем прогона и настроить и по нему. Но т.к команды плохо сбалансированы, то время прогона зависит от конкретного набора команд. Поэтому если настроить константу тормозилки по одному тесту, то на другом тесте возможны существенные расхождения с реальностью +-10%.

Но для программ это без разницы. Нет программ ни для ОРИОНА, ни для СПЕЦИАЛИСТА, ни для РК86, где это бы играло роль. Чем переделывать концепцию, мне проще написать тест команд по скорости (это программа Z80, который в моём эмуляторе имеет доступ к времени в 0040:006C) и сделать покомандную подгонку менее дискретной (т.е грузить в счётчик паузы не число тактов, а число тактов умноженное на 10), что даст возможность точнее сбалансировать команды.

КСИ у меня в эмуляторе нет, т.к такты я не считаю. А прерывание 50 ГЦ формирую подсчётом не тактов, а числа команд - делалось на медленной ЭВМ, где запаса по скорости вообще не было, а INC короче чем ADD (на число тактов). Поэтому если тормозилка маленькая, такт CPU высокий, то эмулируются прерывания не 50 ГЦ, а например 100 ГЦ. В программах разницы не заметил.

b2m
04.04.2017, 15:45
По-моему, правильнее прогонять всё время, но тормозить после каждой команды
На мой взгляд это неудачная концепция. Особенно для винды, которая совсем не реалтайм. А музыка - она буферизируется, естесственно. Если пополнять буфер 50 раз в секунду, то буфер нужен всего лишь на 1/25 секунды. Есть, конечно, и недостаток - музыка отстаёт на 20 миллисекунд. Иногда заметно, например когда должны быть короткий звук и вспышка на экране. Но чаще всего такое мизерное отставание особой роли не играет. К тому-же, можно видео на один кадр позже выводить (правда придётся очередь из кадров городить).

Кстати, я сталкивался с проблемой заметного отставания музыки, когда пытался переделать эмулятор на SDL. Причём размер буфера особой роли не играл. Pyk, а как ты эту проблему решил?

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


Я слышал, что в IBM PC есть таймер позволяющий измерять отсчеты с кратностью 1/18 секунды
Мне почему-то кажется, что времена ДОСа закончились уж лет 20 как.

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


Нет программ ни для ОРИОНА, ни для СПЕЦИАЛИСТА, ни для РК86, где это бы играло роль.
Зато есть демки для Вектора, где точность выполнения играет охренительную роль.

NEO SPECTRUMAN
04.04.2017, 16:44
Pyk, если у вас заявлена высокая точность по времянкам
то вы должны знать когда именно проц выдает hlda

смотрел по мануалу
проц детектит hold только во время t2, tw каждого машинного цикла
а подтверждение... (с разной задержкой в зависимости от комады сходу не вспомню)

короче
где мне взять список всех команд проца
разбитых на машинные циклы и их растактовку?

та таблица что мне попадалась была сильно зачуханой и плохо читаемой
где хорошо описанно подтверждение hold-а и как это влияет на время исполнения разных команд??

а еще меня интересует на каком такте ei, di появляется изменение на inte

Pyk
04.04.2017, 22:40
barsik, в общем-то b2m вроде бы уже все объяснил, и мне нечего добавить. У меня все сделано практически так же, да и в большинстве современных эмуляторов разных авторов и разных платформ, я думаю, тоже.



Кстати, я сталкивался с проблемой заметного отставания музыки, когда пытался переделать эмулятор на SDL. Причём размер буфера особой роли не играл. Pyk, а как ты эту проблему решил?
В 3-й версии такая проблема вообще возникнуть не могла, так как я синхронизировал эмулятор как раз со звуком. В текущей же используется SDL2, синхронизируется с performance timer'ом (хотя скорее всего хватило бы и обычного), и со звуком проблем не было. Да и вообще, непонятно, из-за чего может появиться отставание, может быть, как раз накапливались не перенесенные на следующий цикл какие-нибудь отброшенные остатки от деления? Не зная особенностей твоей реализации, сложно сказать...



Pyk, если у вас заявлена высокая точность по времянкам
то вы должны знать когда именно проц выдает hlda

Нет, я начал изучать этот вопрос, но так и не добил пока точные времянки, поэтому воздержусь от ответа, чтобы не наврать.
Зато этого добился uart, надеюсь, он подскажет.

У меня же было просто некое добавленное за несколько минут эвристическое решение, которое резко увеличило точность и зачастую даже выдавало совершенно точные значения на тестах. Но сейчас я уже сам до конца не понимаю, из каких соображений я это сделал и как оно вообще работает. Попытки улучшить приводят только к ухудшению, так что пока его убрал. :)

uart
04.04.2017, 22:59
У меня просто циклы записи и чтения различаются. Когда процессор выдаёт HLDA вроде бы нормально описано в его доке, важнее как ВТ57 и ВГ75 на это реагируют.

NEO SPECTRUMAN
04.04.2017, 23:11
Когда процессор выдаёт HLDA вроде бы нормально описано в его доке,
как описано
но когда и сколько раз этот т2(когда детектится hold) появляется за время каждой команды...

щас поищу таблицу

Pyk
04.04.2017, 23:13
где мне взять список всех команд проца
разбитых на машинные циклы и их растактовку?
Вот, нашел ссылку на мануал:
http://www.hartetechnologies.com/manuals/Intel/Intel%208080%20System%20Manual_a.PDF


важнее как ВТ57 и ВГ75 на это реагируют
ВременнЫе диаграммы вроде бы тоже в даташитах есть. Были какие-то недокументированные нюансы?

NEO SPECTRUMAN
04.04.2017, 23:20
важнее как ВТ57 и ВГ75 на это реагируют.
это уже видно на осцилограмме
и вроде там все стабильно с этим

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

Ага тут табличка покрасивее

uart
04.04.2017, 23:37
NEO SPECTRUMAN, каждая команда состоит из одного или нескольких циклов, каждый цикл это обращение к памяти для чтения или записи байта. Так что сколько команде требуется обращений к памяти, столько циклов у команды и есть, соответственно столько и тактов T2 выполняется.

NEO SPECTRUMAN
04.04.2017, 23:51
NEO SPECTRUMAN, каждая команда состоит из одного или нескольких циклов, каждый цикл это обращение к памяти для чтения или записи байта. Так что сколько команде требуется обращений к памяти, столько циклов у команды и есть, соответственно столько и тактов T2 выполняется.

каждый машинный цикл состоит из нескольких тактов
при том количество тактов в них разное

а т2 (второй такт по счету)))) в каждом только один
и длиной он 1 такт))))

+ hlda на командах которые пишут результат идет с задержкой

посмотрите 2 таблицы на страницах
18 20 27 29
в кнажачке на которую ссылается Pyk

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


столько циклов у команды и есть, соответственно столько и тактов T2 выполняется.
ну это да.
но размер циклов есть только в этой таблице
я видел еще в одной но не читаемого качества...

это я на отвечал толком не прочитав выше сказанное...

Pyk
04.04.2017, 23:57
NEO SPECTRUMAN, можешь подсказать какой вариант написания шестнадцатеричных констант предпочтительнее для дизассеблера Z80?
Мне встречались написания вида: 0F809h, #F809, $f809
Под Z80 я сам особо не программировал, все больше ВМ80, поэтому немного озадачен наличием разных вариантов...

uart
05.04.2017, 00:02
ВременнЫе диаграммы вроде бы тоже в даташитах есть. Были какие-то недокументированные нюансы?
Ну да. Частоты у ВМ80, ВТ57 и ВГ75 не совпадают, у меня вот не получилось такого-же совпадения на Партнере, как на Апогее...

NEO SPECTRUMAN
05.04.2017, 00:14
На данный момент я пользуюсь таким $F809
мне встречался и такой #F809
раньше я пользовался таким F809h

некоторые компиляторы нормально понимают только один из вариантов
у меня были трудности с $F809 в emuzwin (не помню давали ли что то настройки)
F809h в sjasm выдает error: Label not found: F809h

у каждого программиста свои предпочтения
и свой кривой компилятор со своими глюками...

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


Ну да. Частоты у ВМ80, ВТ57 и ВГ75 не совпадают,
ну пока мну точно может перевести только drq с частоты вг75 в hold частоты вт57

http://zx-pk.ru/attachment.php?attachmentid=60488&d=1491340084
остальное еще нужно курить...

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


не получилось такого-же совпадения на Партнере
я курил схему партнера но так и не нашел куда какие частоты идут
(схема не удобная и сильно за djvu-шеная)
и какой частоты кварц тоже не помню

barsik
05.04.2017, 02:05
какой вариант написания шестнадцатеричных констант предпочтительнее для дизассеблера Z80? Мне встречались написания вида: 0F809H, #F809, $f809

Единственное правильное и приемлемое написание HEX-констант это 0F809H. Так сделано во всех ассемблерах CP/M, а их я уже в начале 90-х имел более 10. Это только когда начали делать кросс ассемблеры, причём начали на DEC-машинах, а потом перетранслировали на Windows (если исходник на Си, это не проблема) и вот тогда пошло "дерьмо" с написанием $F809. Это нормально для 6502, 6800 и 6809. Но совершенно ненормально для 8080/Z80.

А #F809 это вообще от СИНКЛЕРА, а там, похоже, от бейсика.

В нормальных ассемблерах знак доллара это счётчик трансляции. Нельзя применять его как признак HEX-константы. А интересно, как Вы тогда будете обозначать двоичные и 8-ми ричные числа. Тоже будете ставить B и Q в начале цифр?

Табличный аасемблер TASM писали для 6502 и затем это дерьмовое обозначение перенесли и на другие процессоры. В любом случае, единственный приличный ассемблер - это M80. Ничего лучше не сделали. И он работает в MSDOS, т.е в Windows XP (в более поздних уже только в DosBoxe).

А в отладчиках а также мини-дизассемблерах вообще не пишут никаких префиксов и суффиксов, а также не используют лидирующих нулей перед HEX-буквой. Зачем, если нет символических имён? Зато всегда выписывают все 4 цифры в адресах и 2 цифры в байтах.

SegaBoy
05.04.2017, 05:22
а еще меня интересует на каком такте ei, di появляется изменение на inte

Это поможет?

http://savepic.ru/13483947m.png (http://savepic.ru/13483947.htm)

jerri
05.04.2017, 14:47
NEO SPECTRUMAN, можешь подсказать какой вариант написания шестнадцатеричных констант предпочтительнее для дизассеблера Z80?
Мне встречались написания вида: 0F809h, #F809, $f809
Под Z80 я сам особо не программировал, все больше ВМ80, поэтому немного озадачен наличием разных вариантов...

первый вариант - довольно распространенный на ПЦ

второй вроде GENS на спеке

третий это уже Амига и прочее

Black Cat / Era CG
05.04.2017, 15:06
Мне лично ближе #FD. Наверное из-за GENS.
SjASMPlus понимает варианты:

FDH
0xFD
#FD
$FD

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

NEO SPECTRUMAN
05.04.2017, 20:44
Соединил таблицы
разукрасил
добавил мнемоники z80
и подписал такты
так же сверил число тактов с имеющимися данными (красным пометил те в которых сомневаюсь)
голубым помечены(и синим подписаны) те последние такты команд которые продолжают исполнятся во время выполнения уже следующих
и которые можно просто игнорировать... (см пункт 9 комментариев)
фиолетовым пометил все отсылки к комментариям

Картинки кликабельны!!!

https://img-fotki.yandex.ru/get/196245/124968272.1/0_14ff9f_1eddc18a_XL.png (https://fotki.yandex.ru/next/users/speccyalist/album/534405/view/1376159?page=0)
https://img-fotki.yandex.ru/get/197923/124968272.1/0_14ffa0_b5468933_XL.png (https://fotki.yandex.ru/next/users/speccyalist/album/534405/view/1376160?page=0)

https://img-fotki.yandex.ru/get/244791/124968272.1/0_14ffa4_27a174d0_XL.jpg (https://fotki.yandex.ru/next/users/speccyalist/album/534405/view/1376164?page=0)


https://img-fotki.yandex.ru/get/232875/124968272.1/0_14ffa1_d7beeb7d_XL.jpg (https://fotki.yandex.ru/next/users/speccyalist/album/534405/view/1376161?page=0)
https://img-fotki.yandex.ru/get/362774/124968272.1/0_14ffa3_aaa205dd_XL.jpg (https://fotki.yandex.ru/next/users/speccyalist/album/534405/view/1376163?page=0)
https://img-fotki.yandex.ru/get/251308/124968272.1/0_14ffa2_9aa0701c_XL.jpg (https://fotki.yandex.ru/next/users/speccyalist/album/534405/view/1376162?page=0)

https://yadi.sk/i/v-_mBaN43Gh77U
https://yadi.sk/i/KrVZQs333Gh79Y

создал отдельную тему с некоторыми возникшими вопросами...
http://zx-pk.ru/threads/27582-rastaktovka-mashinnykh-tsiklov-intel-8080.html

NEO SPECTRUMAN
05.04.2017, 23:47
А в РК
IN и OUT не приведут к чтению\записи в память???
еще не смотрел схему
не уверен что сходу раздуплю

Pyk
05.04.2017, 23:59
А в РК
IN и OUT не приведут к чтению\записи в память???
Обязательно приведут. Более того, этим довольно часто пользуются.

NEO SPECTRUMAN
06.04.2017, 00:01
Оно эмулируется?
По каким адресам будет чтение\запись??
младшие 8 бит будут и в старших?

На каких еще клонах эта фича?

Pyk
06.04.2017, 11:32
Да, младшие будут и в старших.
Эмулируется.
На всех клонах, где используются устройства, отображаемые на на память (РК, Апогей, Микроша, Партнер, Специалист, Специалист-MX, Орион и многих других).
Нет такого на Микро-80, ЮТ-88 - там порты не отображаются на память.

NEO SPECTRUMAN
06.04.2017, 16:45
Эмулируется.
Но не в b2m... ??

и вообще это же крута!!
быстрое чтение\запись в какую нибудь переменную

а о каких вы еще знаете фичах?
и такйом их эмулируете но не кому про них не говорите))))

Pyk
06.04.2017, 16:55
Но не в b2m...
Да ну? Это во всех эмуляторах эмулируется, иначе бы добрая половина программ просто отказались работать ;) Это довольно широко использовалось.

NEO SPECTRUMAN
06.04.2017, 16:57
Да ну? Это во всех эмуляторах эмулируется, иначе бы добрая половина программ просто отказались работать Это довольно широко использовалось.
хотя я вчера пробовал на не сильно свежей версии...

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


Это довольно широко использовалось.
ДЕ?

Pyk
06.04.2017, 19:38
Использовалось это в основном для обращения к устройствам. Например, если в РК ВГ75 располагался по адресам C000-DFFF, то для записи в регистр команд можно было использовать, например, OUT 0C1h.
Это позволяло сэкономить байт. Было полезно либо когда нужно было вместить программу в ограниченный объем ПЗУ (например, широко применялось в RK-DOS), либо при переносе игр с одного ПК на другой, когда приходилось менять куски кода для работы с другим железом, и желательно было уместить все в прежнем объеме. Сам так иногда делал, да и в чужих программах встречал.

uart
06.04.2017, 20:27
Боком это на Апогее встает, когда только один из портов устройства доступен как порт процессора.

Pyk
06.04.2017, 20:44
На Партнере аналогично. Там тоже 256 байт на устройство.

Pyk
25.04.2017, 22:53
Очередная тестовая сборка:

http://emu80.org/v4beta/Emu80_40246.zip

Желательно распаковывать в новую папку, не переписывать "поверх" старой!

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

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

+ Микро-80 и ЮТ-88
+ Поддержка Z80 в отладчике, в том числе мнемоник Z80 для процессора ВМ80
+ Поддержка формата CAS (MSX) в Апогее
* Расширенный и компактный режимы отладчика для ВМ80
* Поддержка чтения слова состояния процессора с пустой шины в ВМ80
* Поддержка сигнала "индекс" в ВГ93
* Убран повторный запрос файла, если кончился файл ленты
* Ускорение 4x вместо 3x по клавише End
* Режим паузы продублирован на Alt-P
* Различный Aspect Ratio в зависимости от частоты кадров (i576/i480, PAL/NTSC)
* Пресет Alt-0 сейчас учитывает Aspect Ratio
- Исправлены коэффициенты Aspect Ratio для различных ПК
- Исправлена ошибка при чтении значений счетчиков ВИ53
- Реализовано отсутствие звука при программировании ВИ53 в пока не поддерживаемые режимы
- Исправлена ошибка в однобайтовых режимах загрузки таймера ВИ53
- Исправлена ошибка в работе канала 2 таймера в РК-86 и Специалисте
- Исправлена загрузка cpu-файлов Специалиста-MX из командной строки
- Исправлена ошибка в конфигурационном файле Апогея (не закрывался rka-файл после записи)
- Исправлен шрифт в отладчике
- Исправлена ошибка, иногда возникавшая при загрузке Монитора cpu-файлов
! Изредка вылетает при попытке загрузки файла, причина пока не обнаружена

Информацию в шапке также актуализировал.

krt17
25.04.2017, 23:19
Небольшое замечание по формату чисел. Если используете ....h то нужно добавлять ведущий 0 если первая цифра буква, иначе в 100% ассемблеров это выглядит как валидная метка. Если все равно то как бы и h не нужен, в общем случае по барабану в дизасме конечно, но глаз режет.

Pyk
25.04.2017, 23:55
Согласен, не очень красиво получилось. Наверное все-таки стоит подразумевать hex по умолчанию - не добавлять ни "0" в начале, ни "h" в конце...
Изменю в следующей сборке, если не будет других предложений.

Pyk
27.04.2017, 23:48
Вау! Оно реально грузится без отключения изображения на экране :)
http://emu80.org/temp/hp1.png
Скоро в эмуляторе: загрузка wav-файлов :)

ZEman
28.04.2017, 14:21
очень интересно, будем ждать.
а будет ли запись в wav из эмулятора ?
ну и конечно жду ассоциацию файлов с эмулятором.

Pyk
29.04.2017, 00:26
ZEman, запись наверное чуть позже, пока только чтение.

А ассоциировать пока можно вручную - правой кнопкой мыши - "Открыть" - "Выбрать программу из списка установленных" - "Обзор" - выбрать путь к emu80.exe - "Использовать выбранную программу для всех файлов такого типа" - "Ок". (Если уже было ассоциировано с чем-то, то "Открыть с помощью" - "Выбрать программу" и т.д.) Cpu/i80 только почему-то так и не грузятся, хотя в последней сборке я пытался это починить...

NEO SPECTRUMAN
29.04.2017, 14:18
ну и конечно жду ассоциацию файлов с эмулятором.
а потом для каждого расширения 100500 программ для его открытия
и sna bin rom asm ВНЕЗАПНО какого то хера пытается открыть какой нибудь cpc эмулятор...

каждая программа считаит своим долгом перелапатить ассоциации файлов
запускаешь на посмотреть
а потом разгребай чаво оно на изменяло...

драгндропайте нужный файл на нужный эмулятор!!!! :mad:


хотя если в настройках будет галочка
ассоциировать файлы сейчас бесплатно и без смс
то почему бы и нет...

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


Оно реально грузится без отключения изображения на экране
А чего тут удивительного?

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


Скоро в эмуляторе: загрузка wav-файлов
а скоро в комплекте с эмулятором будет тулза для перевода rk-ов в wav-ы?
а то те что есть морально устарели еще в прошлом веке

и наверное ужо не работают в шиндофс 19

ZEman
29.04.2017, 15:34
NEO SPECTRUMAN, не кипятитесь.
нормально ассоциация файлов работает например в emu80 v3 - двойной клик и всё запустилось, чего и в 4ой версии хочется.
да, насчёт утилит для перевода wav в rk и наоборот тоже очень надо.

DDp
29.04.2017, 17:41
тулза для перевода rk-ов в wav-ы?
Эта (http://zx-pk.ru/threads/6505-radio-86rk-raznoe.html?p=554635&viewfull=1#post554635) не пойдёт?

NEO SPECTRUMAN
29.04.2017, 18:01
Было бы не плохо приложить оно в комплект к эмулятору.
Умя дето были и для РК и для Львова...
но я их дето потерял и названия не помню...

но в wav по моему они не переводили
а просто пищали...

Pyk
29.04.2017, 23:37
хотя если в настройках будет галочка
ассоциировать файлы сейчас бесплатно и без смс
то почему бы и нет...
Хорошо, постараюсь сделать в одной из следующих версий.



Сообщение от Pyk
Оно реально грузится без отключения изображения на экране
А чего тут удивительного?
Для спектрумиста может быть и ничего удивительного, но не для РКшника ;)


а скоро в комплекте с эмулятором будет тулза для перевода rk-ов в wav-ы?
а то те что есть морально устарели еще в прошлом веке
Чем вот эта не устраивает?
http://zx-pk.ru/threads/6505-radio-86rk-raznoe/page17.html#168



нормально ассоциация файлов работает например в emu80 v3 - двойной клик и всё запустилось, чего и в 4ой версии хочется.
Точно так же работает, если ассоциировать так, как я описал выше. Даже лучше - файл еще и автоматически запускается.

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


Умя дето были и для РК и для Львова...
но я их дето потерял и названия не помню...
но в wav по моему они не переводили а просто пищали...
"Пищащую" утилиту wrkwin32 можно взять из архива Emu80 v.2:
http://emu80.org/files/emurk286.zip
Будет работать в любой версии windows несмотря на свой "возраст".

BYTEMAN
30.04.2017, 00:31
А "пищащую" утилиту можно адаптировать для генерации пищания не в динамик, а в wav-файл? :) Когда в музее резко надо загрузить РК не с ленты, приходится искать ноутбук и грузить из пищания :)

Pyk
30.04.2017, 01:00
А "пищащую" утилиту можно адаптировать для генерации пищания не в динамик, а в wav-файл?
Можно, конечно, но зачем изобретать велосипед, если есть готовая RK2WAV от DDp (ссылки на нее чуть выше в сообщениях от DDp и моем)?

ZEman
30.04.2017, 06:32
а как wav в rk переводить ?
нигде такой утилиты не нашёл.

BYTEMAN
30.04.2017, 12:11
Можно, конечно, но зачем изобретать велосипед, если есть готовая RK2WAV от DDp (ссылки на нее чуть выше в сообщениях от DDp и моем)?
Пропустил, что такая есть) Спасибо!)

Pyk
01.05.2017, 14:54
Очередная тестовая сборка:

http://emu80.org/v4beta/Emu80_40250.zip

Желательно распаковывать в новую папку, не переписывать "поверх" старой!

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

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

Изменения в версии 4.0.250:
+ Проигрывание wav-файлов по Alt-W. Загрузка возможно при отключенном перехвате обращений
к магнитофону. (Отмена проигрывания - повторное нажатие Alt-W)
* Убран суффикс "h" у шестнадцатеричных констант в дизассемблере отладчика
* Реализовано отключение перехвата обращений к магнитофону на Микроше
- Устранено периодическое "падение" эмулятора (чаще всего при переключении типа компьютера)
- Восстановлена загрузка cpu-файлов из командной строки
- Заменен исправленной версией файл RK-DOS для Z80 (спасибо barsik)
- Исправлено отображение заголовка окна при переключении режимов

В папку _stuff добавил набор игр "Hit parade" для Микроши в формате wav.

Информацию в шапке также актуализировал.

ZEman
01.05.2017, 15:35
Pyk, не убегайте, сейчас будет отчёт об ошибке найденой мной.

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

что-то явно не так со сбросом в эмуляторе (alt+F11).
такое впечатление будто что-то остаётся в памяти после сброса и в конце концов после нескольких открытий файлов вылазиет баг.
смотрите видео: https://youtu.be/6jOqbKRayR0
файлы из этого видео можно взять здесь http://zx-pk.ru/threads/17872-neizvestnye-kassety-opoznanie-otsifrovka-i-t-d.html?p=911000&viewfull=1#post911000
так-же после нескольких открытий файлов бывает такое что открываешь один файл, а запускается почему-то предыдущий.

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

zebest
01.05.2017, 16:07
В ̶п̶о̶с̶л̶е̶д̶н̶е̶й̶ крайней

NEO SPECTRUMAN
01.05.2017, 16:09
Например?
например я хочу подебагать ПЗУ при старте
и для этого мне нужно ставить эмуль на паузу и сбрасывать

как по мне это нормально
главное чтоб всегда было заметно что эмуль стоит на паузе

NEO SPECTRUMAN
01.05.2017, 16:28
А если я забыл, что эмуль на паузе был
Нужно как то отображать что эмуль стоит на паузе

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


Вот в дебагере и включать.
ага
вот только попробуй это проделать в 100500 эмуляторах
из многих дебагеров управление недоступно

кстате пожелания по дабагеру ​
нужна виртуальная клавиатура (на которой жмешь клавишу(их комбинации) и она(они) подсвечивается и висят пока на них не нажмешь еще раз)
сделать вход магнитофона (чтоб выставить что от туда считываитсо)

тк подменять содержание регистров ручками это...

Pyk
01.05.2017, 16:47
ZEman, все нормально. Просто программы со стартовым адресом 0100 и запускать нужно с помощью директивы G100. При выборе типа компьютера память очищается, а вот при сбросе - нет, поэтому остается мусор по адресам 0-FF от предыдущей программы. Запоминание типа компьютера со временем будет, а пока можно вручную поправить emu80.conf.


zebest, паузу по Alt-F11 оставлял для удобства отладки Монитора. Даже не знаю, как лучше - оставить или убрать... Скорее всего доработаю реакцию на Alt-F11 с запущенным отладчиком, а при сбросе уберу.

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


В последней деме от DDp самая верхняя строка явно лишняя??
Это о чем? О какой деме речь?

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

P.S. Отображение паузы тоже в планах. Пока вообще в эмуляторе никакого окна статуса или даже статусной строки нет :(

ZEman
01.05.2017, 16:53
Pyk, я что-то не понял, при ресете память не очищается только в эмуляторе или-же на реальной машине так-же ?
смысл тогда вообще какой в сбросе ?
И да, в любом случае, спасибо за этот отличный эмулятор.

NEO SPECTRUMAN
01.05.2017, 17:00
P.S. Отображение паузы тоже в планах. Пока вообще в эмуляторе никакого окна статуса или даже статусной строки нет
некоторые отображают PAUSE в заголовке окна (не помню как называется на синей полоске с emu80)

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


Это о чем? О какой деме речь?
чота у нас не любят давать ссылки

наверное это
http://www.pouet.net/prod.php?which=69811

DDp
01.05.2017, 18:10
В последней типун...

деме от DDp самая верхняя строка явно лишняя??
Не работает ВГ75 код F0 "конец строки"/"End of row".

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


наверное это
http://www.pouet.net/prod.php?which=69811
Да. Забирайте скорее, больше не будет (zebest так сказал :v2_lol: )

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


при ресете память не очищается только в эмуляторе или-же на реальной машине так-же ?
На реальной машине при ресете память не отчищается.
Более того, аппаратно сделан короткий импульс сброса сколько бы не удерживалась кнопка "сброс", что бы процессор быстро сбросился, запустил "монитор" и проинициализировал DMA+CRT, т.е. как можно быстрее запустилась регенерация динамического ОЗУ.

ZEman
01.05.2017, 18:20
понятно.
в таком случае нужна так-же эмуляция кнопки "power on/off" включение/выключение - при которой память очищается.

DDp
01.05.2017, 18:21
При выборе типа компьютера память очищается
Я бы не отчищал, а заполнял "мусором", что бы писателинаэмуляторах ловили бы свой некорректныйкод.
На реале при включении память не отчищается!

NEO SPECTRUMAN
01.05.2017, 18:23
в таком случае нужна так-же эмуляция кнопки "power on/off"
обычно вешают кнопки
soft reset
hard reset

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


Я бы не отчищал, а заполнял "мусором",
можно выгрузить содержимое памяти при старте с реальных машин
по несколько раз с каждой
и цеплять их

и это будет труЪ

Pyk
01.05.2017, 20:08
Не работает ВГ75 код F0 "конец строки"/"End of row".
Действительно, не работает, хотя когда-то работало. Видимо, сломалось в ходе реализации новых фич.
Спасибо за багрепорт, поправлю. А демка понравилась :)


в таком случае нужна так-же эмуляция кнопки "power on/off" включение/выключение - при которой память очищается.
В моем эмуляторе для этого можно использовать повторный выбор типа компьютера по Alt-F9. Хотя, как уже говорили, в реале память не совсем очищается.

ZEman
01.05.2017, 20:15
а кто-то может объяснить чем отличаются файлы *.rkr, *.rk, *.gam друг от друга ?
сконвертил и проверил несколько wav из rkr файлов для радио86пк - отлично работает.
а rk и gam файлы утилита возьмёт без проблем ?

NEO SPECTRUMAN
01.05.2017, 20:23
чем
одним байтом
rk* не отличаются друг от друга по моему
rk отличается от rk*
gam это по моему просто один из 2-х выше перечисленных форматов с другим расширением (для удобства со времен еще какого то досовского эмулятора)

ZEman
01.05.2017, 20:27
rk и rkr переведённые в wav загружаются в эмуляторе.
а вот перевёл gam файл (например SKACHKI.GAM) - не запускается.

Pyk
01.05.2017, 20:32
Новая сборка:

http://emu80.org/v4beta/Emu80_40251.zip

Изменения в версии 4.0.251:
- Исправлена работа кодов F0/F2 (конец строки/экрана) на ВГ75

ZEman
01.05.2017, 20:33
класс !
а насчёт расширений файлов ответьте кто-нидь.

NEO SPECTRUMAN
01.05.2017, 20:38
нет gam это переименованый другой формат

старая пищалка .gam-ов по идеи есть тут
ftp://ftp.radio.ru/pub/Emurk/



RK - общий формат файла без синхробайта (без уточнения)
RKR - файл Монитора "Радио-86РК" без с/байта
RKP - файл Монитора "Партнера" без с/байта
RKM - файл Монитора "Микроши" без с/байта
RKA - файл Монитора "Апогея" без с/байта
RKS - файл Монитора "Специалиста" без имени без с/байта

PKI - файл Монитора "Радио-86РК" с с/байтом
BSM - файл BASIC "MICRON" (с заголовком) с с/байтом
BSS - файл BASIC (без заголовка) с с/байтом
EDM - файл редактора MICRON с с/байтом
GAM - файл игровой программы для "Радио-86РК"



но чот спецификацию не нахожу...

ZEman
01.05.2017, 20:40
а как-нидь их можно перевести
gam в rk или rkr ?

Pyk
01.05.2017, 20:47
rk, rkr, rka, rkp - это, по сути, один и тот же формат, последняя буква просто детализирует, для какого компьютера предназначается файл. Если просто rk, то либо для РК-86, либо может работать на разных.
rkm - файл Микроши, очень похож на предыдущие, но форматы не полностью совместимы - загружаться будут, но выдавая при этом ошибку.
gam - файл для RK-86, отличается от rkr отсутствием присутствием первого байта 0xE6. Почему rk2wav формирует незагружаемый wav из gam, не разбирался, возможно, не пишет как раз отсутствующий второй раз пишет E6... Надеюсь, автор пояснит.

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


а как-нидь их можно перевести
gam в rk или rkr ?
2 способа:
1. В любом hex-редакторе в начало файла добавить байт E6 и пересохранить с расширением rkr
2. Загрузить в эмуляторе gam с помощью директивы I и пересохранить в rkr с помощью директивы O.

NEO SPECTRUMAN
01.05.2017, 20:56
по идеи аффтар описывает pki\gam
но описание какоето противоречивое выше сказаному


E6 <- синхробайт (в файлах эмулятора EMU80 этот байт отсутствует)
XX XX <- начальный адрес файла
XX XX <- конечный адрес файла
..... <- данные файла
00 00 <- junk (может и отсутствовать)
E6 <- синхробайт
XX XX <- контрольная сумма

В принципе, два нуля перед контрольной суммой роли не играют, так как
при вводе они пропускаются при вводе первого байта контрольной суммы в
режиме "с поиском синхробайта".

.
да и в своих rka я не ставил синхробайта

может его на оборот нужно выкидывать из gam?

ZEman
01.05.2017, 20:58
пересохранил с помощью команды "О".
результат - эмулятор стал сворачиваться в трубочку
:biggrin:

NEO SPECTRUMAN
01.05.2017, 21:03
как раз в gam e6 и есть


ZEman, выкинь его и попробуй


вот короче
60843

ZEman
01.05.2017, 21:11
NEO SPECTRUMAN, а в чём редактировали ?

NEO SPECTRUMAN
01.05.2017, 21:12
https://mh-nexus.de/en/hxd/

еще норм winhex

Pyk
01.05.2017, 22:25
да и в своих rka я не ставил синхробайта
может его на оборот нужно выкидывать из gam?
Просто все эмуляторы учитывают, что E6 в начале файла может присутствовать, а может не присутствовать и не смотрят на расширение. Поэтому и встречаются неправильно сформированные файлы: gam-файлы с E6 и, наоборот, rk - без E6...
Но изначально было так: rk - с синробайтом (формат моего эмулятора), gam - без синхробайта (формат эмулятора Демина).
GAM - с синхробайтом
RK - без синхробайта
Чтобы получить RK из GAM, действительнро нужно выкинуть из него первый байт E6

barsik
02.05.2017, 00:21
gam - файл для RK-86, отличается от rkr отсутствием первого байта 0xE6

Вообще-то мне казалось, что всё наоборот. Во всех GAM-файлах из дистрибутивов 1998-99 годов все GAM-файлы с байтом E6. И до сих пор это так. Мне не попадались GAM-файлы без Е6 в начале. А RKR-наоборот все лишены байта E6, отчего ими опасно пользоваться в эмуляторах. Поэтому я все файлы храню или в ORD-формате, что предпочтительнее, или в GAM.


Поэтому и встречаются неправильно сформированные файлы: GAM-файлы с E6 и, наоборот, RK - без E6... Но изначально было так: RK - с синробайтом (формат моего эмулятора), GAM - без синхробайта (формат эмулятора Демина)

Но вот эти сведения ввели меня в замешательство. Если есть такое безобразие, то получается, что вообще нет стандарта. Раз стандарта нет, то лучше использовать единый стандарт ORD. В нём есть свободный байт, куда можно писать тип компьютера (младший ниббл, и особенности модификации или доработки, можно истратить бит на тип Z80/КР580). Важно, что сохраняется уникальное имя даже при хранении на дискетах.

Эмуляторы должны во всех процедурах чтения признавать ORD-формат и, в зависимости от того какой формат они ждут, сами конвертировать ORD в магнитофонный формат с нужными синхробайтами, пилотонами, паузами и т.п и выдавать эту смесь байтов на п/п-мму LDBYTE. Тогда и не будет "моря форматов", в которых сами их авторы уже запутались. Если не использовать ORD, как быть с форматом ИРИШИ, которая принимает файл в виде блоков, причём разной длины (и это не только в играх со своим загрузчиком, но и просто формат монитора имитирует посекторный обмен).

Pyk
02.05.2017, 08:25
barsik, спасибо, это меня переклинило ;) Действительно, GAM - с синхробайтом, rk - без. Прошу прощения за то, что ввел в заблуждение, предыдущие сообщения поправил. А неправильные файлы (переименованные gam в rk) мне все же попадались...

NEO SPECTRUMAN
02.05.2017, 16:53
а 0 перед последним синхробайтом и контрольной суммой?
их может не быть вообще?
или нужен хотя бы 1
максимальное количество не ограничено так понимаю

а если туда произвольные данные а не (но не е6)
они будут просто пропускаться?
как сделано в настоящем загрузчике?

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


получается, что вообще нет стандарта.
получается что да
так как файл который захочет грузится с e600 (хотя как стартовый адрес это....)
будет не правильно трактоватся
и загрузится с 00**
да еще и...

а из за отсутствия ограничения на количество 00 перед последним синхробайтом и контрольной суммой
нельзя никак проверить по размеру первый e6 синхробайт или старший байт адреса....

barsik
02.05.2017, 17:56
Перед последним синхробайтом и контрольной суммой нуля может не быть вообще? Или нужен хотя бы один? Максимальное количество не ограничено, так понимаю. А если туда произвольные данные (но не Е6)? Они будут просто пропускаться? Как сделан ввод с МГ в настоящем РК86 ?

В стандартных входах РК есть п/п-мма ввод массива, которая полностью реализует директиву I. Не знаю как в клонах, а в самом РК это работает так. Сначала вызывается подпрограмма ввода двух байтов с поиском синхробайта (в роли которого E6 или его побитовая инверсия). Она пропускает любое число байтов, любых кроме E6 (или его инверсии). Любые байты передавать можно, если только из двух соседних байтов при их сдвигах в аккумуляторе не возникнет Е6.

Как только синхробайт найден, он тоже откидывается и дальше всё работает синхронно, - вводятся заказанные два байта. Затем вызывается подпрограмма ввода 2-х байтов уже без поиска синхробайта. Это будут 4 байта адресов загрузки. Далее зыпускается цикл ввода байтов до тех пор, пока текущий адрес ввода не станет равен конечному.

И вот тогда наступает момент, который Вас интересует. РК86 снова вызывает подпрограмму ввода 2-х байтов с поиском синхробайта. Таким образом, число байтов между концом блока и синхробайтом Е6 может быть любым, при условии, что среди этого потока битов нет байта Е6. Мне кажется, что байт 0 перед Е6 тоже не обязателен. Происходит сдвиг принятых битов, пока не возникнет Е6. Так что, если идут 2 байта 60 и 0Е, то по ним тоже произойдёт синхронизация. Это из-за того, что в этом формате нет побайтовой синхронизации (а в формате MSX есть). Именно поэтому перед синхробайтом выдают длинный пилотон, т.е блок из 256 (а иногда и более) нулей, чтобы человек услышав звук, мог нажать на <ВК>. Если пилотон не выдавать, а сразу начинать передачу с Е6, то шумы с выхода МГ могут сформировать ложный синхробайт.

Так, т.е с любым числом нулей до СБ контрольной суммы и любой паузой, сделано в РК86. Но в ОРИОНЕ претендующем на МГ-совместимость - не так. Там паузу вообще нельзя ввести, сразу возникает ТАЙМ-АУТ и уход на подпрограмму ERR_MG (ошибки чтения с МГ). И ОРИОН ожидает ровно 3 байта, причём в данном случае, точно не обязательно 2 нулевых и третий синхробайт Е6. Эти 3 байта могут быть любыми, т.к ОРИОН не сихронизируется по синхробайту, чтобы считать КС, он просто пропускает 3 байта и считывает 2 следующих, которые и оказываются контрольной суммой.

В СПЕЦИАЛИСТЕ контрольная сумма примыкает прямо к блоку данных. И никакой новой синхронизации по Е6 не делается. КС является как-бы частью блока, в смысле, что вводится с той же синхронизацией, отчего пауза перед КС недопустима.

Кстати, блок с КС может вводиться с инверсией. То есть вторым синхробайтом может служить байт являющийся побитовой инверсией E6 (это 19) и КС тогда надо тоже передавать в инверсии. Такой трюк сработает на РК86, т.к при второй синхронизации будет правильно поставлен флаг инверсии сигнала с МГ. А вот в ОРИОНЕ такой трюк не пройдёт. Т.о, это способ иметь формат РК86 несовместимый с ОРИОНОМ. Впрочем, для этого даже не надо исхитряться, достаточно добавить на один ноль больше или меньше перед КС.

Думаю, что в РК86 введётся и без (двух или иного числа) нулевых байтов между блоком и Е6, но пусть кто-нибудь проверит. Я могу сделать такую запись, если есть эмулятор, умеющий делать запись.

Я тут недавно узнал, что можно вводить МГ-записи в РК86 без гашения изображения на экране. Так что никто не хочет сделать для РК86 новый "монитор", где экран не будет гаснуть? Это теперь можно сделать, т.к пару месяцев назад в теме "РК86 на Z80" я освободил в ПЗУ РК86 КР580, если верно помню, ~80 ячеек. Этого должно Вам хватить на модернизацию подпрограммы чтения байта с МГ. Чтобы это сделать, надо сначала "кракнуть" коммерческую защиту от копирования и извлечь из неё подпрограмму чтения.

Pyk
02.05.2017, 19:36
NEO SPECTRUMAN, в принципе, barsik все правильно уже написал.
Дополню лишь, что в Партнере (rkp) используются два нулевых байта перед КС, в РК и остальных - один. Но, как и следовало ожидать, все файлы считываются на всех машинах. Допускаю, что так будет и без нулевых байтов - можно проверить при желании.

А файл с E600 ни на одной из этих машин располагаться не может, так как ни на одной из машин в этом месте нет пользовательского ОЗУ. В Апогее видео-ОЗУ разве что, но и в этом случае что-то грузить туда как минимум странно. Так что реально проблем с этим не возникает.

barsik
02.05.2017, 19:49
Реальный РК86 читает инверсный блок, т.е когда синхробайт не Е6, а 19. А эмуляторы читают такие записи? Ведь один магнитофон не инвертирует сигнал, а другой инвертирует. А адрес 19XX для загрузки блока вполне может быть и для РК86. Синхробайты нужны.

Если заставить всех пользователей иметь магнитофоны без инверсии, то в ПЗУ можно с'экономить более 20-ти байт! Если эмуляторы не читают инверсные записи, то так и надо сделать. Никто не хочет проверить эмуляторы на соответствие реалу? Надо проинвертировать все биты записи и даже пилотон тогда станет не цепочкой нулевых байтов, а байтов FF.

uart
02.05.2017, 20:00
Я тут недавно узнал, что можно вводить МГ-записи в РК86 без гашения изображения на экране. Так что никто не хочет сделать для РК86 новый "монитор", где экран не будет гаснуть?
Для Микроши был «драйвер магнитофона» который читал/писал без гашения экрана и с именем, небольшими блоками по два раза. Подозреваю, что это один и тот же метод, что и в «Highway Games hit-parade». Я пытался на своем Апогее повторить, делал синхронизацию таймером, даже работало и я начал переводить свой архив в новый формат. В Апогей и РК с ПЗУ 4К можно подобный "драйвер" вставить. Но тогда в этом был смысл, а сейчас то зачем? А просто не гасить экран и оставлять стандартный формат смысла особого не имеет, что на нем смотреть?

OrionExt
02.05.2017, 20:10
Ведь один магнитофон не инвертирует сигнал, а другой инвертирует. А адрес 19XX для загрузки блока вполне может быть и для РК86.
Как может магнитофон инвертировать сигнал?

И синхробайт - это просто посыл программе. Пора мусор (полезную часть. А потом по к.с. проверим) считывать)))

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

Тут. Видимо появился новый вирус на магнитофоне, который чего там инвертирует и …

barsik
02.05.2017, 20:11
начал переводить свой архив в новый формат

А что формат с негаснущим экраном уже несовместим со стандартным МГ-форматом РК86? Разве там не такой же двухфазный формат? Кажется в коммерческих защитах лишь применили разбиение всего большого файла на блоки, передавая в начале каждого блока его номер, что позволяет ориентироваться, т.е знать куда мотать ленту, чтобы найти нужную запись. Но физический формат ведь тот же? Или нет? Т.е можно ли его заимствовать для ROM-BIOS РК86 и клонов.


не гасить экран... смысла особого не имеет, что на нем смотреть?

Посмотрите в эмуляторе СПЕЦИАЛИСТА как вводит с МГ-ленты ленинградский монитор В.Ивинских. В правом верхнем углу "бежит" счётчик, показывающий адрес ячейки, куда читается очередной байт. Кроме того, вместо того, чтобы бессмысленно крутить циклы реализуя программные паузы, можно в эти паузы делать полезную работу, что и делают грамотные загрузчики. Да и благодаря "негасимости" экрана, на время загрузки основного блока можно вывести на экран заставку и правила игры. Авторы РК86 могли бы сделать хотя бы мигание светодиодом в ритме ввода каждых 128-ми байт (скорость ввода ~110 байт в секунду). А то сидишь перед чёрным экраном 5 минут и не знаешь, что всё уже давно зависло... Кстати, неплохая идея, попробую применить её в ROM-BIOS ОРИОНА, т.к там полно свободного места для доработок.


Как может магнитофон инвертировать сигнал?

Если в сквозном канале, т.е в сумме усилителя записи (у человека который записывал) и в усилителе воспроизведения (у человека, который считывает) нечётное число усилительных каскадов с открытым коллектором, то происходит инверсия. Это и учитывает драйвер чтения с МГ-ленты, тратя на это ценные байты ПЗУ.

OrionExt
02.05.2017, 20:30
По фронту либо по срезу, определяет программа (в строго отведенном интервале времени) 0 или единица считана. инверсия тут причем.

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

И дальше считывает, по виду кодировки на ленте. Первый раз влез. Как оно там работает.

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


Если в сквозном канале, т.е в сумме усилителя записи (у человека который записывал) и в усилителе воспроизведения (у человека, который считывает) нечётное число усилительных каскадов с открытым коллектором, то происходит инверсия.

А если у меня инвертор в компьютере стоит. Заканчивайте)))

NEO SPECTRUMAN
02.05.2017, 21:04
В Апогее видео-ОЗУ разве что, но и в этом случае что-то грузить туда как минимум странно. Так что реально проблем с этим не возникает.
Проблем то не возникает с готовым софтом
а вот в новом это уже нужно учитывать

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


Как может магнитофон инвертировать сигнал?
легко и просто

OrionExt
02.05.2017, 21:15
легко и просто

А рк тут причем. Может чего там инверт.... маг. пк тут причем. пк машина. ловит посыл... 0 или 1)))

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

Видать не одну судьбу инвертировал магнитофон. По фрейду.:v2_dizzy_ghost:

uart
02.05.2017, 23:06
А что формат с негаснущим экраном уже несовместим со стандартным МГ-форматом РК86?
Лично мне был малоинтересен просто негаснущий экран. Вот короткие блоки с именем - интересны. «Драйвер магнитофона» это реализовывал.

Pyk
02.05.2017, 23:42
uart, кстати, можно где-нибудь посмотреть на этот "драйвер магнитофона"? Может быть, здесь на форуме обсуждали?

uart
03.05.2017, 00:14
Pyk, увы. У меня и тогда его не было, только видел его в работе. Еще существовала программа "автозапуск", которая записывала программу двумя блоками, второй блок на большей скорости, а первый грузился в область стека монитора, автозапускался, грузил вторую часть и запускал ее. Вот она была более распространенной, но сейчас ее тоже найти не могу, хотя очень интересно такой составной rkm в эмуляторе загрузить.

Pyk
03.05.2017, 00:32
uart, В плане автозапуска с помощью загрузки в область стека я тоже что-то делал для Партнера в свое время - сохранились даже какие-то исходники. Да и в "Радио" публиковалось что-то подобное для РК-86.
А наработки для Апогея сохранились?

uart
03.05.2017, 06:50
А наработки для Апогея сохранились?
Нет, да и не интересны они сейчас.

Pyk
11.05.2017, 23:27
В последней версии обнаружился баг при чтении wav-файлов формата 16 бит, 2 канала (стерео).
В следующей версии поправлю, а пока при необходимости можно сконвертировать нужный файл в 8 бит либо моно.

cy6
20.05.2017, 14:21
Эмуляция РК ДОСа и образов дисков отлично работает!
Виктору огромное спасибо за позитивное развитие его эмулятора.

Вот я подгрузила образ, снятый SDCOPY (подробнее о моем формате и программе позже),
с оригинального диска RKDOS в эмулятор:
http://c6lab.org/pictures/RKDOS1.jpg

Добавлено:
Запись на образ пустого диска тоже работает. И даже посекторный DOCTOR функционирует. :v2_thumb:

Pyk
29.05.2017, 10:50
Очередная сборка:

http://emu80.org/v4beta/Emu80_40256.zip

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

Изменения в версии 4.0.256:
- Исправлена загрузка wav-файлов с параметрами 16 бит стерео
- Устранена утечка памяти в режиме fields mix
- Восстановлена работоспособность Микро-80 с Монитором РК
- В очередной раз восстановлена загрузка cpu-файлов из командной строки
+ Новый режим interlace для fieldsMixing
* Изменения в обработке поведения окон, полноэкранный режим должен работать без проблем

Нового за месяц появилось не так уж много - в основном занимался внутренними изменениями и вещами, не вошедшими пока в текущую сборку.
Желательно обратить внимание на разные режимы отображения и поведение окон, так как многое в этом плане переделал, могли появиться новые баги.

Новый режим:
http://emu80.org/temp/apogey_interlace.png

Pyk
15.06.2017, 23:53
Следующая сборка:

http://emu80.org/v4beta/Emu80_40265.zip

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

Изменения в версии 4.0.265:
+ Добавлена опция "Установить по умолчанию" при выборе платформы
+ Добавлена вкладка общих настроек и глобальный файл настроек
+ Добавлена настройка используемого канала при чтении wav-файла
* Улучшена стабильность чтения wav-файлов
* Уточнена отработка атрибутов на ч/б Апогее (отсутствуют схемы задержки атрибутов rvv, hglt, gpa)
* Кнопка сохранения настроек заменена на CheckBox, настройки сохраняются при нажатии на Save или Apply
- В предыдущей версии не включался режим "Растянуть" по Alt-0
- Исправлены ошибки в фильтрах диалогов загрузки/сохранения файлов
- Устранены утечки памяти
* Дополнения в документации
* Внутренние изменения

Изменений опять-таки не очень много: помимо добавления новых фич, занимался также отладкой эмулятора под Linux, подготовкой к публикации исходников и обновленным пользовательским интерфейсом. Из обещанного ранее добавилась возможность задания платформы, запускаемой при старте эмулятора. Спасибо uart за найденную ссылку на схему и фото экрана ч/б Апогея (https://geektimes.ru/post/279126/), отображение атрибутов приведено в соответствие с оригиналом. Также по просьбе суб "узаконил" расширение *.rdi наряду с *.rkdisk для образов дисков РК-86.

Pyk
16.06.2017, 12:46
Багфикс-версия:

http://emu80.org/v4beta/Emu80_40266.zip

Изменения в версии 4.0.266:
- Устранена ошибка при запуске из папки, содержащей символы килиллицы либо другие символы unicode

Кто успел поставить вчерашнюю версию 4.0.265, можете поменять только exe-файлы.

ZEman
16.06.2017, 17:26
Pyk, большое спасибо за эмулятор.
есть несколько пожеланий:

- на вашем сайте есть архив с программами для компьютера "Лик", а сам он я так понимаю в новых версиях эмулятора не эмулируется.
будет ли он добавлен в следующих релизах ?

- хотелось бы опцию для создания скриншотов из эмулятора.

Pyk
16.06.2017, 22:28
ZEman,
Сохранение скриншотов есть в планах, сделаю. По некоторым причинам чуть позже только, не в самых ближайших версиях. Что же касается "Лика" - по сути своей это тот же Специалист, и в эмуляторе для его поддержки скорее всего все есть, нужно просто сделать для него отдельный конфигурационный файл. В общем, постараюсь вспомнить что это за комп (после того, как я его реализовал в эмуляторе в далеком 99-м, я ни разу с ним не сталкивался) и сделать...

Vladimir_S
05.08.2017, 22:22
Pyk, В РК86 цвет ввел, а монитор не подправил. Синхронизация срывается.

Pyk
05.08.2017, 22:55
Vladimir_S, а что, существуют цветные программы для РК, которые не сами программируют ВГ75, а надеются на Монитор? Мне вроде бы такие не попадались...

Vladimir_S
05.08.2017, 23:01
Печаталась даже рекомендация - заменить 93 по адресу FADC на D3.

ZEman
16.09.2017, 12:11
а ещё обновления эмулятора будут ?
три месяца уже прошло.

Pyk
16.09.2017, 16:15
Лето - пора отпусков и каникул, вот и эмулятор взял творческий отпуск на пару месяцев ;)
В июле планировал сделать еще одну сборку, но довести до ума и опубликовать не успел :( В общем, сейчас уже в октябре.

А пока скрин, надеюсь, что будет уже осенью:
http://emu80.org/temp/v4qt_1.png

ZEman
16.09.2017, 16:35
ух, менюшки и иконки появились, очень интересно - будем ждать.

ZEman
01.11.2017, 06:29
Pyk, извините за надоедливость, но очень уж интересно.
Есть какой прогресс с эмулятором, может новенькая бета ;)
1.5 месяца уже прошло.

Pyk
02.11.2017, 01:09
К сожалению, не могу пока порадовать новой сборкой. Be patient...

Что, кстати, в первую очередь хотите видеть в следующих версиях? А то пока я экспериментировал с Qt, менюшками и иконками, новые фичи практически не добавлялись...

Pyk
11.11.2017, 22:01
Очередная версия 4.0.271 от 11.11.2017, с поддержкой ОС Linux:

http://emu80.org/v4beta/Emu80_40271.zip

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

Изменения в версии 4.0.271:
+ Опубликованы исходники на GitHub: https://github.com/vpyk/emu80v4
- Исправлена ошибка: не всегда правильно отображалось состояние регистра AF' в отладчике
+ Добавлена возможность редактирования памяти и содержимого регистров в отладчике по Enter или F2 (пока без отдельных флагов)
+ Сохранение скриншотов в bmp-файлы (Alt-S)
+ Режим "без звука" (Alt-U)
+ Возможнсть установки громкости в конфигурационном файле (emulation.volume = 1..5)
* Внутренние изменения
! Под Linux диалоговые окна могут появляться за основным окном эмулятора


Qt-версия (с меню и кнопками) все еще слишком "сырая", поэтому в этот релиз пока не вошла.
Под Linux еще довольно часто всплывают различные проблемы, так что Linux-версия требует усиленного тестирования. Для установки под Linux требуется сборка из исходников.
Не пробовал пока собирать под платформы, отличные от Windows и Linux, буду благодарен, если попробуете собрать и запустить на других платформах (например, Mac OS X).

ZEman
11.11.2017, 23:50
Pyk, большое спасибо за новый релиз.
хотя конеш жаль что без QT-оболочки, но буду ждать и надеяться увидеть такое к новому году ;)
ещё из пожеланий:
-хочется видеть поддержку компьютера лик.
-и хотелось бы ещё поддержку английского языка (меню и настройки на англицком).

Pyk
12.11.2017, 00:48
ZEman, единственное место, где русский жестко "зашит" в код - это подсказка по горячим клавишам.
Все остальное подтягивается из конфигурационных файлов. Если хочется видеть другой язык, достаточно поменять соответствующие строки в конфигах.
А с подсказкой со временем тоже разберусь.

Конфиг для "Лика" постараюсь сделать.

NEO SPECTRUMAN
12.11.2017, 05:45
на GitHub
по отрывать бы ноги им там
чтоб скачать нужно лезть в "исходный код страницы" и от туда выдергивать зип

или обновлять *****й браузер каждые 15 минут

ибо не такая свежая версия ужо не качает с этого быдло сайта....
(ничего визуально не меняется
но сначала перестает качать самая старая версия браузера
потом уже не качает версия по новей
потом...)
всмысле про "clone or download" для незареганых пользователей

Pyk
12.11.2017, 13:49
NEO SPECTRUMAN, только что проверил: Windows XP, Chrome 49 (последняя версия полуторагодичной давности с поддержкой Windows XP) - все ок, zip скачивается, без регистрации...
А по большому счету, сайт и не нужен - пользуйтесь git из командной строки ;)

zx_
30.11.2017, 15:23
Pyk, вопрос такой необычайный. в старом описании РК НГМД упомянута возможность подключения данного контроллера к Специалисту.
тема про подключение
http://zx-pk.ru/threads/28485-rk-kngmd-dlya-quot-spetsialista-quot/page3.html?p=939042#post939042

а возможно ли в эму подключить РК КНГМД к Специалисту? С целью выявления возможных схемотехнических неявных проблем , проверки софта

Спасибо

Pyk
01.12.2017, 00:44
zx_, в вышеприведенной ссылке обсуждается контроллер на ВГ75, не имеющий никакого отношения к контроллеру РК НГМД.
Теоретически подключить РК НГМД к Специалисту попробовать можно, можно и в эмуляторе поддержать (даже наверное на уровне конфигов), только вот я ничего не слышал про такое подключение и тем более про софт, который бы его использовал...
Есть какой-то софт, который нужно проверить?

barsik
01.12.2017, 03:52
в вышеприведенной ссылке обсуждается контроллер на ВГ93, не имеющий никакого отношения к контроллеру РК-КНГМД

Ссылка указана не та, а тема правильная. Указана ссылка на последний (в тот момент) пост, вместо ссылки на первый пост темы. А там как раз пошёл оффтоп (хотя и тоже про носители, флэш-память и КНГМД на ВГ93).


С целью выявления возможных схемотехнических неявных проблем, проверки софта
Думаю, скорее это надо для знакомства с RK-DOS виртуально.

Т.к пока платы "Восточный ЭКСПРЕСС" ещё не сделали и пройдёт ещё немалый срок, пока их изготовят и перешлют заказчикам. Затем пайка и отладка. Затем требуется спаять и настроить плату РК-КНГМД, что тоже может стать долгостроем. Поэтому до окончательной настройки можно будет познакомиться с RK-DOS только в эмуляторе.


я ничего не слышал про такое подключение и тем более про софт, который бы его использовал

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

Речь идёт о той же самой версии RK-DOS и РК-КНГМД, что Вы уже поддержали для РК. Адрес порта КНГМД тот же самый (F000) и сама RK-DOS та же самая (и естественно работает в тех же адресах). Отличия только в такте CPU. Надеюсь это можно сделать без модификаций кода, за счёт CONFIG-файла.

Я тоже заинтересован, как в эмуляторе РК-КНГМД, так и в некоторой модификации архитектуры самого СПЕЦИАЛИСТА. Во-первых, в СПЕЦИАЛИСТЕ хотелось бы иметь ROM-диск ОРИОНА подключенный на FE00. Во-вторых, "открытие ОЗУ" в адресах D000...F7FF, включаемое битом INTE. Это позволяет иметь как большое ПЗУ в 14 кб, так и дополнительное ОЗУ в 10 кб. Понятно, что ПЗУ нужно для резидентных программ, а ОЗУ для загрузки туда DOS (CP/M и других). В 1990 я имел аналогичную CP/M, только для КНГМД от КОРВЕТА, а не от РК86. Ну и как задел на будущее неплохо бы подцепить ВИ53 в качестве гуделки на адрес FD00 с входными тактами 2 МГЦ на все 3 канала.

Хотя оригиналом RK-DOS прошитый в ПЗУ E000 и E800 вполне можно пользоваться, но СПЕЦИАЛИСТ обладая гораздо большими возможностями позволяет кое-что положительно изменить. В частности, отсутствие дисководов с сигналом READY вызывает некоторые трудности при использовании. Приходится делать "химию" и аппаратно вводить формирование сигнала READY с задержкой на 0.5 сек из сигнала выборки DS0. Это неудобно и неудачно потому, что готовность формируется, даже когда дискеты нет.

Поэтому в более новых версиях RK-DOS сигнал READY формируется из сигнала INDEX, т.е когда диск стоит и колесо разгоняется до номинальной скорости. Для РК86 это невозможно было использовать, т.к там использован Z80, а при переделке в коды КР580 полученный объём зашкаливает за объём ПЗУ в 4 кб. RK-DOS уже ужата до предела и мне удалось выдавить из неё всего десяток байтов, чего недостаточно для процедуры эмуляции READY. Потому несчастные пользователи РК вынуждены разыскивать именно антикварный дисковод с READY или же паять "химию" на КМОП-микросхеме.

Однако на СПЕЦИАЛИСТЕ ситуация иная. Здесь не только ПЗУ как грязи, но свободно и ОЗУ выше рабочих ячеек РК-монитора до RAMTOP СПЕЦИАЛИСТА, т.е участок ОЗУ 76D0...8F5F. В этом ОЗУ удобнее всего и разместить RK-DOS. Для чего достаточно прошить в ПЗУ E000 всего 4 байта, так чтобы по адресу E001 стояла команда JMP 7800. А в адреса 7800...8F5F из ROM-диска загружается исполнительная часть RK-DOS. Все программы RK-DOS вызывают BDOS командой CALL E001 и им без разницы где размещается остальной код RK-DOS.

При этом мы выигрываем в объёме кода RK-DOS до ~6 кб, чего достаточно даже для расширения CCP на команды ERA, REN и COPY (отчего соответствующие SYS-файлы не нужны). Но самое удобное в том, что ПЗУ при этом не тратится, что позволяет прошить в эти 10 кб CP/M, которая будет грузиться из ПЗУ D004...F7FF в ОЗУ D004...F7FF (т.к CP/M рассчитана на ОЗУ) или, если для простоты схемы ПЗУ D000...F7FF отсутствует, то ещё удобнее грузить CP/M из ПЗУ ROM-диска (именно поэтому и нужен ROM-диск).

Возможен некоммутируемый вариант, когда есть 3 ПЗУ C000, C800, D000 а далее некоммутируемый кусок ОЗУ в 8 кб (D800...F7FF). Для размещения BDOS/BIOS CP/M этого достаточно, хотя драйвер консоли VT52 размещать негде. Такой вариант удобен для ручной доработки на плате "Восточный ЭКСПРЕСС". Т.к доп.ППА для ROM-диска нет, можно поставить буфер АП6 и через него подключить автоинкрементный ROM-диск от ИРИШИ.

Т.о, чтобы это отладить, требуется эмулятор, т.к пока проверить в реале нет возможности. Кроме того, требуется перетранслировать ряд дисковых программ RK-DOS для ОРИОНА в цвете на СПЕЦИАЛИСТ без цвета, а это существенная переделка и "вслепую" это не отладить.

Однако это ещё не всё. Желательно "поставить" в РК-КНГМД как кварц 8 МГЦ, так и кварц 10.5 и 12 МГЦ. При кварце 8 МГЦ формат 400 кб, при 10.5 МГЦ формат 560 кб, а при кварце 12 МГЦ формат 640 кб. Теретически ещё можно поставить кварц 16.5 МГЦ для формата 880 кб для CP/M, но скорости CPU в 2 МГЦ для такого формата не хватит.

Вот коротенько, вот в этом и суть проблемки. Не сочтите за наглость и сделайте лишь то, что необременительно. Как я понимаю, для варианта с ПЗУ достаточно поменять цифры частот кварцев в конфиге. А вот "открытие ОЗУ" потребует серьёзной доработки эмулятора, т.к это уже существенное изменение архитектуры.

Также был бы благодарен, если бы для эмулятора ОРИОНА (обязательно на Z80) был бы поставлен тот же РК-КНГМД, но по адресу F600 (вместо никому не нужного третьего порта) с теми же частотами кварца в РК-КНГМД.

Не стоит обижать и фанатов РК86. Для них можно сделать более совершенную версию RK-DOS, если добавить ПЗУ по адресу С400...DFFF, что даст 11 кб сплошного ПЗУ. Порт ВГ75 останется в области C000...C3FF. Схему можно посмотреть здесь (https://yadi.sk/i/U0Ph0FZ03PwPQK) а ссылку на описание схемы послал по личке, т.к выкладывать её в форуме запрещено.

Pyk
03.12.2017, 18:15
а возможно ли в эму подключить РК КНГМД к Специалисту?
zx_, посмотрел повнимательнее исходники - думаю, что это возможно. Если будет желание поэкспериментировать - сделаем.

barsik
10.12.2017, 02:52
Раньше пользовался эмулятором B2M, но он не эмулирует РК-КНГМД ни для РК86, ни для СПЕЦИАЛИСТА, ни для ОРИОНА. Поэтому попробовал недавно эмулятор EMU80 для эмуляции СПЕЦИАЛИСТА. Эмуляция дисковода сделана отлично, но в ходе эксплуатации возникли некоторые пожелания к отладчику эмулятора.

Учтите, что это нисколько не критика, а лишь изложение мнения о том, что лично мне хотелось бы. Да и возможно частично это уже есть, а я лишь сдуру не разобрался как пользоваться. Да и другим людям это может быть вовсе не надо и их вполне устраивает текущий вариант отладчика. На вкус и цвет...

Во-первых очень хотелось бы иметь возможность выбора мнемоники ассемблера. Всем привычна мнемоника Z80, а мнемонику КР580 ценят всего лишь несколько закоснелых фанатиков ретроградов.

В мои древние эмуляторы для MSDOS встроен простой командный отладчик, но процесс отладки там происходит намного быстрее и удобнее. Нажать одну клавишу намного быстрее, чем переместиться в нужное окно и делать там кучу манипуляций, тем более, когда мышь не позволяет перемещаться по окнам. Удобнее использовать символьные клавиши, т.к не надо запоминать назначение функциональных, ведь назначение символьных клавиш выбрано по первым буквам английских слов.

Например, G - старт прогона с текущего PC, X - переход к просмотру и редактированию регистров и флагов, T - один шаг трассировки, 1...999<ВК> - прогнать нужное число команд, P - (pass) прогнать подпрограмму без трассировки (остановка также если стек сброшен программно, т.к некоторые подпрограммы сбрасывают адрес возврата и переходят в другое место программы не возвращаясь в точку откуда был CALL), U - пропустить текущую команду без прогона, B - задать одну или несколько точек останова. В западных тоже экранных отладчиках так и сделано.

Неприятно, что команда HALT не делает автоматический вылет в отладчик. Ведь машина без прерываний, зачем же просто её подвешивать. Ясно, что HALT поставил программист отлаживающий программу.

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

В этом случае отладчик реально нужен только для ковыряния чужих программ, а не для отладки своих. Если при написании программы надо отследить по регистрам, что происходит, то я действую так. Ставлю в программу макрокоманду STOP, например, STOP 5, где 5 это номер стоп точки. Макрокоманда расширяется так: PUSH IY : LD IY,5 : HALT : POP IY.

При прогоне по достижении HALT эмулятор вылетает в монитор-отладчик эмулятора и я сразу вижу в какой из стоп-точек произошёл останов. Стоп точки можно задать и вручную. Посмотрев код встроенным дизассемблером, я ввожу команду G,adr1,adr2, после чего продожается прогон с текущего PC (хотя и адрес старта можно указать до первой запятой), но при этом поставлены стоп точки на адреса 'adr1' и 'adr2'.

Также не нашёл какой командой вызывается встроенный миниассемблер, а "лепить заплатку" в машинных кодах неудобно. И вообще не хватило описания команд отладчика, краткая подсказка на нижней строке не заменяет HELP.

Например, так и не понял как заполнить область памяти константой, как скопировать блок памяти на другое место. При просмотре программы на работает PageDown а перемещение балки указателя курсорными клавишами вверх-вниз медленно и не нашел команды, как сразу задать адрес куда перейти для просмотра.

Естественно, речь не о том, чтобы из экранного отладчика сделать командный, а чтобы добавить команды. Было бы уже намного удобнее, если бы хотя-бы ввести вылет в отладчик по HALT и команду U (пропустить текущую команду), т.к иначе с команды HALT никак не уйти, приходится вручную изменять регистр PC, что долго.

Pyk
10.12.2017, 22:54
barsik, большое спасибо за пожелания, всегда рад обратной связи. Прокомментирую вопросы и то, что уже сделано:

- Мнемоника в отладчике переключается клавишей "Z" (и да, я наверное "ретроград", для 8080 я использую его родные мнемоники ;)
- Встроенного миниассемблера, заполнения памяти константой и копирования блоков памяти пока нет :(

А вообще с пожеланиями согласен - в определенных обстоятельствах все это могло бы понадобиться и было бы удобным. Как и не помешали бы также точки останова по данным, например. Записываю себе в планы, но когда до чего из этого дойдут руки, сказать не берусь :( Будет настроение доработать отладчик - что-нибудь из этого реализую... То, что сделать относительно просто, постараюсь сделать побыстрее ;)

zx_
15.12.2017, 17:17
Pyk, к вам еще вопрос публичный образовался, возможно ли в эмуляторе Специалиста реализовать прерывания от КСИ ?
http://zx-pk.ru/threads/28514-igra-elite-na-protsessore-580vm80-nevozmozhna.html?p=941328&viewfull=1#post941328

Pyk
16.12.2017, 12:56
zx_, пока нет.
Насколько сложно сделать, зависит от цели их использования: просто сделать прерывания 50 Гц несложно, а вот синхронизировать их с растром, чтобы можно было делать что-то в интервале гашения и т.п. - намного сложнее (поскольку в оригинальном Специалисте не было никакой возможности синхронизации с растром, то и эмуляция экрана в эмуляторе для него сейчас сделана упрощенно).

barsik
18.12.2017, 08:48
Мне лично ничего во время гашения экрана делать не требуется, без разницы когда относительно кадра они приходят. Потому для меня, что прерывания 50 ГЦ, что без прерываний программный контроль МГ-входа, куда подан меандр 5 ГЦ - дают одну и ту же пользу, - позволяют оценивать время. Только с прерываниями переделка обходится дороже на 8 резисторов. В БК-010 тоже есть простейший аппаратный таймер - низкочастотный меандр поданный на какой-то вход и этого оказалось вполне достаточно для программ реального времени.

Да и прерывания годятся лишь для СПЕЦИАЛИСТА, но не годятся ни для РК86, ни для ОРИОНА, т.к там выход INTE занят для других, более странных целей. Там для счёта времени выход - только простейший аппаратный таймер в виде такта 5 ГЦ на входе МГ.

Прерывания при КР580 считаю полезными не для этого, а только если нет тика 5 ГЦ на входе МГ. Тогда прерывания позволяют бесплатно считать время (как это сделано в MSDOS, по системному тику 1/18 секунды). Это бы сделало программные часы точными и без введения тика 5 ГЦ на МГ-входе, а также существенно упростило бы вывод музыки, как программный, так и через ВИ53.

Наличие прерывания могло бы упростить драйвер консоли CP/M, позволив эмулировать аппаратную клавиатуру, которую требует CP/M. Но это было надо до 1991, а после эта проблема с успехом была решена программно. Так что и для этого прерывания уже не нужны.

Понятно, что из-за отсутствия MODE 2, прерывания в машинах на КР580 нельзя использовать для незаметного опроса клавиатуры, как это в ZX-Spectrum. Так как в области 0038H - ОЗУ и сюда грузятся программы. Поэтому и в этом плане от прерываний нет толка. И получается, что простейший аппаратный таймер лучше, чем прерывания, по крайней мере, это более надёжно, т.к могут попасться адаптированные от РК86 игры, где остался звук по DI/EI.

Pyk
18.12.2017, 21:48
Понятно, что из-за отсутствия MODE 2, прерывания в машинах на КР580 нельзя использовать для незаметного опроса клавиатуры
Небольшой комментарий: можно, если клавиатуру опрашивает сама программа. Я так делал на Партнере - полностью фоновый опрос клавиатуры, без необходимости терять на это драгоценное процессорное время. Особенно здорово при скроллинге стрелочками - если процессор успевает перерисовывать экран за время автоповтора клавиш, скорость автоповтора не снижается...

barsik
19.12.2017, 07:25
Понятно, что из-за отсутствия MODE 2, прерывания в машинах на КР580 нельзя использовать для незаметного опроса клавиатурыможно, если клавиатуру опрашивает сама программа
Имелось в виду то, что при ОЗУ с 0 и отсутствии контроллера прерываний, прерывания нельзя использовать в системном ПО, т.е в ROM-BIOS и DOS работающей в старших адресах, т.к прерывания требуют постоянного присутствия какой-то ерунды по адресу 38.

Но конечно в одной конкретной игре прерывания выравнивают темп игры и делают мгновенной реакцию на нажатия.


без необходимости терять на это драгоценное процессорное время.
Это невозможно. Общие потери процессорного времени при опросе клавиатуры по прерываниям могут даже увеличиться. Хотя визуально и в скорости реакции на клавиши игра при прерываниях выигрывает относительно версии с программным опросом.

Преимущество клавиатуры на прерываниях в том, что игра тормозится хоть и немного больше, но зато равномерно при прогоне всех участков программы. Без прерываний в тех местах программы, где CALL F81B вызывается часто, - торможение большее, а в тех участках кода, где это делается редко, - торможение меньшее. Программисту трудно добиться баланса, чтобы темп игры не колебался, общее торможение не упало бы чрезмерно, а реакция на клавиши осталась удовлетворительной.

Pyk
19.12.2017, 08:55
Общие потери процессорного времени при опросе клавиатуры по прерываниям могут даже увеличиться
Я имел в виду конкретно замену F803, где в подпрограмме Монитора задержка автоповтора и писк при нажатии реализованы с помощью циклов. Прерывания в данном случае позволили эффективно использовать это время в основной программе.

barsik
19.12.2017, 12:21
перенос из темы "игра Элитэ на КР580", т.к там это оффтопик.


можно... добавить прерывания в Специалист... назвать как-нибудь эту доработку (условно "Специалист 2017"), опубликовать спецификацию

Новую платформу из-за нескольких резисторов объявлять не нужно. Чем больше платформ, тем меньше на них пользователей. Зачем платформа, если на ней будет только её автор? Пользователей СПЕЦИАЛИСТА осталось 3 человека (надеюсь после настройки плат новоделов станет чуть больше).


Тогда если я или автор другого эмулятора заявит поддержку "Специалиста 2017"

Вот смотрим эмулятор АМИГИ. В нём можно поменять кучу всего, процессоры, периферийные БИС, ROM, память, дисководы, винчестер. Всё настраивается во вкладках. Так сложилось оттого, что было много моделей и не проблема смена комплектации в конкретной машине.

Почему же в отечественных эмуляторах надо вводить платформы. Нужен один эмулятор, но в нём вкладки, где всё дополнительное можно задать. Для СПЕЦИАЛИСТА тоже было бы удобно задавать во вкладках:

- 3 типа цвета и один монохром
- конструкция ПЗУ (многостраничное или нет)
- выбрать содержимое ПЗУ
- определить ОЗУ или ПЗУ в верхней области выше ПЗУ C000...CFFF
- выбрать тип КНГМД
- задать винчестер
- задать контроллер на 'microSD'
- задать ROM-диск и его содержимое
- задать число доп.банок ОЗУ
- задать внешний электронный диск
- задать наличие прерываний
- задать тиккер на МГ-входе
- задать ВИ53 на 3 канала

Так удобнее, чем какие-то платформы. Каждый сможет быстро выбрать вариант для отладки своей программы под своё конкретное железо. У пользователя может быть сделана всего одна или две доработки.

Если же делать платформы, то их число перевалит за тысячу. Из школы мы знаем, что число сочетаний равно "n-факториал". Считайте. Потому вкладки удобнее, чем платформы задаваемые конфиг-файлами. Но это лишь предложение исходя из того, как это делается в иностранных эмуляторах.

Предположительно реализация не создаст особых проблем, т.к каждое устройство в Вашем эмуляторе задается несколькими строчками в текстовом файле. Потому перенастройка во вкладках просто заканчивается записью соответствующего текстового файла, избавляя пользователя вникать в устройсво конфиг-файлов разных эмуляторов. К тому же часть железа уже и так выбирается во вкладках (например цвет 4/8/монохром).

Pyk
19.12.2017, 14:06
barsik, спасибо, я понял идею (в этом плане хорошо организованы настройки в эмуляторе Orion/Z от Error404).
В планах подобное есть, но, увы, не в самых ближайших.

Конечно, здесь все равно есть тонкая грань между существовавшими общепринятыми расширениями и современными предложениями вроде прерываний, пока не поддержанными ни софтом, ни железом. Но это все обсуждаемо и решаемо - можно вынести их в отдельную вкладку экспериментальных настроек и т.п.

barsik
24.12.2017, 12:27
Недавно мне понадобился эмулятор СПЕЦИАЛИСТА работающий с РК-КНГМД. И естественно, выбор пал на великолепный много-платформенный эмулятор EMU80 от Pyk.

В попытке проверить RAMDOS, RAMDOS-Commander, защищённые от копирования программы, их инсталляторы, МГ-компоновщик и SP-COPY, я столкнулся с проблемой загрузить программу с автостартом. На СПЕЦИАЛИСТЕ это делается без всяких директив, просто по сбросу.

Возможно, чтобы разобраться в использовании эмулятора мне нехватило ума и информации. Но т.к инструкции нет, то в итоге я вообще не смог найти в эмуляторе EMU80 возможности загрузить даже одноблочный файл по сбросу с автостартом.

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

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

При такой концепции эмуляции магнитофона, магнитофон эмулируется не в реальном времени, оттого ни МГ-константы ввода/вывода CLD и CSV, ни скорость CPU вообще не играют роли, а в самом ПЗУ весь код подпрограммы ввода байта можно забить любой информацией (это даёт удобство при модификациях ROM-BIOS специально для эмулятора).

А вот эмуляция обоих типов дисководов в эмуляторе EMU80 сделана полноценно, в реальном времени. Поэтому, кстати, такт эмулируемого CPU в конфиге понижать нельзя, - перестаёт работать дисковод. Потому в EMU80 работают форматёры дисков, а в EMU форматёры не работают.

Но даже и в такой концепции, полагаю, нет проблемы сделать и автостарт одного блока и ввод многоблочных программ. Но надо вводить все байты идущие с ленты. Пилотоны можно опустить, а вот все синхробайты E6, необходимы. Таким образом именно отсутствие в формате RKS байта E6 приводит к неприятностям. Именно по этой причине в формате GAM все байты E6 были сохранены.

При этом желательно эмулировать подпрограмму C377 с той же скоростью, с какой она прогоняется в реальной ЭВМ (для чего надо "посмотреть" на CLD в ячейке 8FFF). Однако концепция перехвата LDBYTE не позволит грузить МГ-файлы использующие нестандартный низкоуровневый формат записи. Потому имеющиеся возможности ленинградского монитора по чтению МГ-формата ZX-Spectrum и МГ-формата MSX не могут работать в эмуляторе EMU80.

А пока процедура ввода по первому вызову C377 просто открывает файл с заданным именем, интерпретирует первые 4 байта как адреса блока и считав файл, далее, вероятно, по понижению стека на 1 уровень (что соответствует RET из п/п-ммы C414 ввода массива) а скорее всего по выходу на конкретный адрес делается возврат в программу 8-ми разрядки. Этим объясняется, что лениградский монитор СПЕЦИАЛИСТА (в котором 100% совмещены все стандартные входные точки, но также и все нестандартные точки), не работает на ввод с магнитофона.

Можно и не зацикливаться на подпрограммах ввода байта (C377 и C806), а перехватывать подпрограммы ввода блоков - C3F9, c414, С422 и C824. Тогда по LDBYTE будет читаться служебная информация, а по входу в процедуры ввода блока читаться блок данных из файла.

Предположив, что возможно удастся загрузить и автозапустить по сбросу файл в WAV-формате с помощью нажатия на ALT-W, я попробовал грузить те WAV-файлы, что без проблем грузились в эмулятор от b2m. Но почему-то получил сообщение, что формат файлов неправильный, хотя эти записи нормально грузятся и в реале.

Вот такая ситуация по работе с магнитофоном. Выяснилось, что RAMDOS, даже если эмулировать внешний эл.диск на РУ7 или заменить его на внутренний RAM-диск из доп.ОЗУ, использовать на EMU80 не получится не только потому, что там другой формат магнитофона, но и потому, что программы там грузятся по сбросу.

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

Надеюсь, что описание возможностей упомянутых эмуляторов не вызовет озлобление их авторов в мой адрес. Если я кардинально заблуждаюсь и просто не умею пользоваться чужими программами без документации, прошу прощения и подробных инструкций.

ivagor
24.12.2017, 13:25
Понятно, что из-за отсутствия MODE 2, прерывания в машинах на КР580 нельзя использовать для незаметного опроса клавиатуры, как это в ZX-Spectrum. Так как в области 0038H - ОЗУ и сюда грузятся программы. Поэтому и в этом плане от прерываний нет толка.
basrik, зарекался реагировать на Ваши посты, но не выдержал. Хоть немного ознакомьтесь с компьютерами на 580ВМ80, в которых есть прерывания, а потом уже пишите свои гениальные мысли.
На векторе основная клавиатура (кроме УС, СС, РУС/ЛАТ) в 99.99% программ опрашивается по прерыванию rst 7 (rst 38 в мнемониках z80). Векторовские программы, где для опроса клавиатуры использовали другой метод, можно пересчитать по пальцам одной руки.

barsik
24.12.2017, 13:39
... потом уже пишите свои гениальные мысли. На ВЕКТОРЕ основная клавиатура в 99.99% программ опрашивается по прерыванию RST 38
Вы хоть внимательно читайте мои посты, а не по диагонали. Речь-то о резидентном системном ПО в ПЗУ в верхних адресах, а вовсе не о прикладных программах загруженных с 0. Любому ясно, что в прикладной программе загруженной с 0 нет проблем использовать прерывания. А вот как использовать прерывания, если программа работает в верхних адресах и ячейки 38...3A заняты ?

Да и речь идёт о СПЕЦИАЛИСТЕ, а вовсе не о ВЕКТОРЕ и не о других компьютерах. Так что Ваше выступление - просто беспочвенный и невежливый наезд. Разве не так?


На ВЕКТОРЕ... 99.99% программ

99.99 процентов означает, что у Вектора 10 тысяч программ из которых только одна не использует прерывания. А я сдуру думал, что у ВЕКТОРА программ меньше, чем у ОРИОНА.

ivagor
24.12.2017, 15:44
Все как ожидалось.
1.
Вы хоть внимательно читайте мои посты, а не по диагонали.
Прочитал внимательно весь пост и процитировал законченное высказывание, на которое ответил.

2.
Речь-то о резидентном системном ПО в ПЗУ в верхних адресах, а вовсе не о прикладных программах загруженных с 0.

Да и речь идёт о СПЕЦИАЛИСТЕ, а вовсе не о ВЕКТОРЕ и не о других компьютерах.
Один из демагогических приемов. Жаль, конечно, что я не телепат, но увы.

3.
Любому ясно, что в прикладной программе загруженной с 0 нет проблем использовать прерывания.
А теперь исходная цитата:

Понятно, что из-за отсутствия MODE 2, прерывания в машинах на КР580 нельзя использовать для незаметного опроса клавиатуры, как это в ZX-Spectrum. Так как в области 0038H - ОЗУ и сюда грузятся программы. Поэтому и в этом плане от прерываний нет толка. И получается, что простейший аппаратный таймер лучше, чем прерывания, по крайней мере, это более надёжно, т.к могут попасться адаптированные от РК86 игры, где остался звук по DI/EI.
Прогресс виден.

4.
А вот как использовать прерывания, если программа работает в верхних адресах и ячейки 38...3A заняты ?
Если в компьютере на ВМ80 есть прерывания, но нет контроллера прерываний и по адресам 38h-3Ah ПЗУ, то есть как минимум два варианта:
4.1. Предусмотреть в процедуре обработки прерываний в ПЗУ вызов подпрограммы из области ОЗУ. По умолчанию там заглушка (ret), а если надо - ставим переход и используем.
4.2. Предусмотреть отключение ПЗУ.
Пример компьютера, где использовали сразу оба варианта - ПК8000.

5.
Так что Ваше выступление - просто беспочвенный и невежливый наезд. Разве не так?
Нет, не так.

В дальнейшей дискуссии участвовать не намерен, т.к. не люблю демагогию и демагогов.

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


99.99 процентов означает, что у Вектора 10 тысяч программ из которых только одна не использует прерывания. А я сдуру думал, что у ВЕКТОРА программ меньше, чем у ОРИОНА.
Отвечать на эту демагогию (в данном случае - подмена предмета обсуждения) - себя не уважать, но в последний раз.
Если бы даже всего ОДНА программа на ОДНОМ компьютере (Векторе, ПК8000, ПК8002 и т.д.) использовала опрос клавиатуры по прерываниям - этого было бы достаточно для опровержения утверждения, которое я только что еще раз процитировал (в 3й раз цитировать не буду). А на векторе намного>1 программы используют опрос клавиатуры по прерываниям. ч.т.д.

barsik
24.12.2017, 18:44
Не надо лезть в чужую тему с глупостями даже не разобравшись о чём идёт речь. Причём уводя обсуждение от темы абстрактными рассуждениями о каком-то ВЕКТОРЕ. Речь о компьютере, где программы ничего не знают о прерываниях, потому область 38 в них занята. Кроме того этот пост продолжение этого (http://zx-pk.ru/threads/28514-igra-elite-na-protsessore-580vm80-nevozmozhna.html?p=941672&viewfull=1#post941672), - я перенёс его из темы Элитэ, где этот пост оффтоп. А тему Элитэ Вы читали и писали в ней, а значит были в курсе, т.к тоже самое развёрнуто я ещё раньше объяснил в той теме. И из текста невозможно не понять, что речь идёт о ситуации, когда обработчик прерываний на адресе 38 исключён. Кроме того, уже в этой теме в посте #202 (http://zx-pk.ru/threads/27488-emu80-v-4.html?p=941683&viewfull=1#post941683) это ещё раз было разжёвано.

Как можно было подумать, что кто-то на этом сайте не знает как работают прерывания с привязкой шины резисторами? Надёргав цитат и прокомментировав их глупостями, что Вы доказали? Что ошиблись и не имеете благородства признать это.



99.99 процентов означает, что у Вектора 10 тысяч программ из которых только одна не использует прерывания.
Если бы даже всего ОДНА программа на ОДНОМ компьютере использовала опрос клавиатуры по прерываниям - этого было бы достаточно для опровержения утверждения, которое я только что еще раз процитировал
Своим ответом я показал, что Вы не знаете даже арифметику, а Вы в очередной раз комментируете это глупостью и совсем мимо темы темы о арифметике и числе программ.

Pyk
24.12.2017, 22:51
В попытке проверить RAMDOS, RAMDOS-Commander, защищённые от копирования программы, их инсталляторы, МГ-компоновщик и SP-COPY, я столкнулся с проблемой загрузить программу с автостартом.
К сожалению, я не сталкивался с подобными программами. Если поделитесь, я попробую посмотреть, что можно сделать. Какой-то принципиальной невозможности грузить подобные файлы я не вижу.
Кстати, по умолчанию с эмулятором поставляется модифицированный Монитор, в котором отключена загрузка по сбросу, чтобы не выдавался запрос rks-файла сразу после сброса. Если восстановить оригинальный Монитор, загрузка по сбросу работает.


Т.к принцип эмуляции магнитофона здесь основан на перехвате единственной подпрограммы LDBYTE (C377, С806). Причём предполагается, что эта подпрограмма вызывается из подпрограммы ввода массива, в которой передаются адреса для ввода блока, а в конце массива следует контрольная сумма.
Нет, это не предполагается. Например, без проблем работает бейсик, который вызывает отдельно подпрограмму для загрузки байта и не использует ввод массива.


Пилотоны можно опустить, а вот все синхробайты E6, необходимы. Таким образом именно отсутствие в формате RKS байта E6 приводит к неприятностям. Именно по этой причине в формате GAM все байты E6 были сохранены.
Да никакой особой проблемы: при записи пропускается только самый первый синхробайт, а при чтении учитывается признак поиска синхробайта. Можно считать это более или менее логичным, но однозначность в любом случае сохраняется и ни к каким неприятностям не приводит. Пока не было времени это проверить.


имеющиеся возможности ленинградского монитора по чтению МГ-формата ZX-Spectrum и МГ-формата MSX не могут работать в эмуляторе EMU80
Эмулятор поддерживает формат CAS для формата MSX, интересно было бы попробовать перехватить также и эти вызовы. А для ZX остается загрузка wav.


лениградский монитор СПЕЦИАЛИСТА (в котором 100% совмещены все стандартные входные точки, но также и все нестандартные точки), не работает на ввод с магнитофона
Почему не работает Ленинградский Монитор я проверю и отдельно отпишусь.


я попробовал грузить те WAV-файлы, что без проблем грузились в эмулятор от b2m. Но почему-то получил сообщение, что формат файлов неправильный, хотя эти записи нормально грузятся и в реале.
Пожалуйста, пришлите примеры этих файлов, интересно будет посмотреть, что с ними не так.

barsik
25.12.2017, 07:37
Так что же насчёт МГ-формата орловского монитора. Как такой файл ввести в эмулятор?



принцип эмуляции магнитофона здесь основан на перехвате единственной подпрограммы LDBYTE (C377, С806). Причём предполагается, что эта подпрограмма вызывается из подпрограммы ввода массива
Нет, это не предполагается
Ну так расскажите о принципе эмуляции работы с магнитофоном в вашем эмуляторе. Всем это будет интересно узнать.

Ясно, что для перехвата используется попадание программы на адреса C377 и C806, т.е на стандартную подпрограмму ввода байта. Но не ясно по какому критерию Вы определяете, что прогон программы ввода байта закончился. b2m в своём эмуляторе делает это вполне понятным образом, он контроллирует точки выхода из п/п-рамм ввода байта и вывода байта. Поэтому его эмулятор не проблема настроить на любое ПЗУ конкретного компьютера. А вот как Ваш эмулятор настроить на конкретное ПЗУ нет никакой информации, а догадаться об этом изучая файлы EMU80.conf и Specialist.conf невозможно. Расскажите как Вы определяете, что ввод байта закончился.


для формата MSX, интересно было бы попробовать перехватить также и эти вызовы.
В этом нет проблемы. Т.к побайтовый обмен в любом МГ-формате имеет точку входа и точку выхода, то достаточно отлавливать вход в соответствующую исполнительную часть подпрограммы LDBYTE. Если перехватывать вход в подпрограмму LDBYTE и точку выхода из неё по RET, то Вас совершенно не волнует какой физически формат использует ПЗУ, это может быть даже и не МГ-формат, а например формат передачи по проводний линии со скоростью 8 кб в секунду.

А в ленинградском мониторе перехватывать ввод/вывод в любых форматах вообще не проблема. Так как в нём подпрограммы LDBYTE/SVBYTE векторизованы (идея заимствованая из монитора SP580), кстати, как и в ОРИОНЕ.

Итак, в ленинградском мониторе СПЕЦИАЛИСТА введены два вектора:

8FD3/D4 - ASAVE - адрес исполнительной части п/п-ммы записи байта на МГ
8FD5/D6 - ALOAD - адрес исполнительной части п/п-ммы чтения байта с МГ

а подпрограммы работы с МГ в ленинградском мониторе вот какие:



.
LDBYTE: PUSH HL
LD HL,(ALOAD)
EX (SP),HL
RET

SVSB: LD A,0E6H ; вывод на МГ синхробайта
SVBYTE: PUSH HL
LD HL,(ASAVE)
EX (SP),HL
RET
Так что, если Вы перехватили точки входа LDBYTE/SVBYTE, то Вы перехватили ввод/вывод байта во всех форматах, в том числе и когда загружен драйвер для обмена по проводной линии.

В ленинградском мониторе при включении частотной MSX-кодировки нажатием НР+F3 (включение обратно фазовой кодировки - НР+F4), то просто в ячейки ALOAD/ASAVE подставляются другие адреса. Однако в ленинградском мониторе в процедурах ввода/вывода используются не тупые программные паузы программной петлёй, а в паузе между фронтами процессор в правом верхнем углу экрана (по адресу из ACOUNT) выводит число - адрес ячейки куда (откуда) в данный момент происходит ввод (вывод) байта.

8FD7/D8 - ACOUNT (B00B) - экранный адрес куда выводится счётчик при вводе/выводе

А если Вы подменяете прогон реальных МГ-подпрограмм, то естественно и счётчика на экране не будет, если только Вы сами не захотите его выводить. Потому в эмуляторе от b2m счётчик при работе с магнитофоном бежит, а при Вашем алгоритме эмуляции магнитофона этого нет.

При такой концепции должен работать ввод многоблочных программ (вскоре попробую это проверить заменив ПЗУ в эмуляторе). Но перехват подпрограмм LDBYTE/SVBYTE никак не поможет грузить защищённые программы в которых содержится свой загрузчик с МГ, причём даже, если формат не хитроумный с антикракерскими мерами, а стандартный двухфазный, но точка входа в процедуру ввода иная.

Оказывается эмулятор от b2m тоже не совершенен по работе с магнитофоном. Там тоже какая-то "химия". Т.к он не грузит коммерческие программы защищённые форматом записи (естественно, в WAV-виде). А грузит только программы, что используют стандартную п/п-мму ввода байта.

Pyk
25.12.2017, 11:48
Так что же насчёт МГ-формата орловского монитора. Как такой файл ввести в эмулятор?
Я не спец по Специалисту, "Орловский" Монитор - это какой?
(Насчет Ленинградского позже отвечу - не дошли руки пока до него)

barsik
25.12.2017, 13:13
Ороловский монитор это основной монитор, который используют все (в т.числе и Вы в эмуляторе) и на который сдуру в программах делают вызовы, тогда как есть ROM-BIOS, жаргонно называемый загрузчиком, т.к это не RAM-монитор, а просто набор 19-ти базовых подпрограмм. Делать вызовы на C800 неправильно, т.к не все применяют именно орловский монитор, мониторов может быть много разных, а ROM-BIOS один.

Но теперь эту неприятность уже не исправить, т.к слишком поздно. Потому что сначала адаптации системного ПО от РК86, а затем и авторские программы некоторых совсем малограмотных товарищей полезли на входы C800. Однако почти все игры работают через загрузчик. Так что теперь орловский монитор - просто стандарт, альтернативы нет. Загрузка по сбросу это свойство загрузчика, не монитора. Для себя я чуть изменил загрузчик, теперь он, по нажатию на НР после сброса стартует из ROM-диска в формате ОРИОНА файл с оффсетом 800.

Орловский монитор характерен тем, что он зачем-то имитирует все основные входы монитора РК86, но по адресу C800, а не F800, хотя схемы совмещения адресации не опубликовали (т.к тогда до этого ещё не додумались). Кстати, прилагательные даже образованные от имён собственных и фамилий людей пишутся с маленькой буквы. Монитор А.Волкова это понятно тот, который был опубликован с самим компьютером и который работает из ОЗУ (8D00), а не из ПЗУ и потому может грузиться с ленты.

В журнале был ещё новожировский монитор и ещё какой-то (увы, сейчас не имею под рукой журналов МК). Но они совершенно не в тему и программы их не используют. Никакого смысла в них нет, т.к любые доработки, в т.числе и содержимого ПЗУ должны оставаться совместимыми, а всё неудовлетворяющее этой аксиоме, это просто чушь. Несовместимость уже попробовал КООП SP580, но всё равно и после них "вылезали деятели", до которых это не дошло.

В волковском мониторе нет формата с именем, только формат пригодный для загрузки по сбросу. Формат с именем также можно загрузить по сбросу, если у пользователя скорость реакции превышает 3 секунды. Для этого надо дождаться когда пройдёт первый пилотон, блок имени и начнётся второй пилотон. Вот тогда и надо нажимать на сброс. Есть много ранних пост-доработок волковского монитора, которые тоже работают в ОЗУ, а дополнительно имеют встроенный дизассемблер КР580 и иногда используют МГ-формат РК86 и есть версии и с форматом ОРИОН CHANGER$, служащие для интерфейса с другими бытовыми ЛК.

Я уже в какой-то теме предложил маркировать формат с именем расширением .SPT (Specialist tape), чтобы не было путаницы с форматом .RKS, при котором в начале файла просто стоят 4 байта с адресами загрузки, а последними байтами вставлена КС (и что неприятно даже байта E6 в начале нет, что очень печально, т.к нарушает логику и делает файл непригодным для прямой конверсии в WAV).

Для автоматизации переименования можно сделать специальную программку на бейсике Quick Basic (или даже Power Basic, который получше, т.к даёт при компиляции меньший и более скоростной код). Эта программка будет проверять все файлы с расширением .RKS и если обнаружится файл у которого в дампе первым байтом стоит D9, то у такого файла расширение имени будет изменено на .SPT.

А то, что в эмуляторе EMU80 по сбросу выскакивает окно для выбора загружаемого файла, то это можно исправить не кастрацией загрузчика, а сделать так, что по нажатию одной красной кнопки сброс, всё как и сейчас - загрузка блока с автостартом уничтожена. Но если нажать кнопку сброс удерживая клавишу <Control> или <Shift>, то выводится окно запроса файла с расширением именно и только .RKS.

Pyk
25.12.2017, 13:34
Так что же насчёт МГ-формата орловского монитора. Как такой файл ввести в эмулятор?
Как обычно, с помощью директивы "R". Или я не понял вопрос?

barsik
25.12.2017, 13:58
с помощью директивы "R"
Да нет, по директиве R грузится файл в формате волковского монитора (который также может грузиться и по сбросу с автозапуском).

А МГ-файл в формате орловского монитора (т.е файл у которого первый байт E6 затем три байта D9, а затем имя из 16 символов и завершающий 0, далее пилотон любого размера) грузится по директиве I. Если такой файл грузить по директиве R, то он загрузится на D9E6 (или D9D9, если лидирующего E6 нет). Эмулятор от b2m требует, чтобы чтобы первого байта E6 не было, сразу D9 и второй пилотон, что идёт после имени, д.быть не короче 40 байтов.

Посмотрите дамп файлов. Чтобы такой файл конвертировать в WAV для вывода через AUDIO-выход PC на реал, достаточно лишь в начале добавить ракорд (т.е стартовый пилотон 256 нулевых байтов) и первый синхробайт E6. При желании, чтобы был стандарт, второй пилотон (что после имени и перед вторым синхробайтом) можно удлинить до 768 нулевых байтов (но это не обязательно). И затем специальной программой конвертировать коды в WAV-файл.

Длинный второй пилотон в этом формате потому, чтобы дать время тому, у кого только волковский монитор, успеть нажать на кнопку сброс пока звучит второй пилотон. Но если это не надо, то второй пилотон можно сократить до 40 байтов (это время нужное на вывод имени, максимальное время затрачиваемое на это будет при вводе команды I в последней строке, тогда при выводе имени происходит ролик всего экрана).

Во вложении файлы в формате орловского монитора. Все они грузятся как на реале, так и в эмуляторе от b2m по директиве I. Хотя не будет проблем и с орловским монитором, но т.к он неудобный, я использовал ленинградский монитор.

Для этого в каталоге "для эмулятора B2M" приложен дамп этого монитора и конфиг для эмулятора EMU от b2m. Файлы с расширением .cfg надо скопировать в каталог по имени config, а файл монитора BIOS_33.DAT надо поместить в каталог Specialist. При старте выбрать нужную конфигурацию. Каталог с файлами RKS можно скопировать целиком в папку Specialist а, если Вы используете в ней свою папку с именем "МГ-программы", то все файлы перемещаете туда, убрав оттуда предварительно другие файлы с расширением RKS, чтобы не возникло путаницы между RKS-файлами загружаемыми по командам I и R.

Для просмотра текстов описаний, после их загрузки надо стартануть встроенный редактор, для этого нажимаете E<ВК> (в редакторе HELP по F1). На вопрос NEW? ответить N. Т.к тексты в формате 48 символов в строке, лучше включить большой шрифт по НР+F2.

Для загрузки файлов по I в эмуляторе, после сброса нажимаете любую функц.клавишу, чтобы выйти из режима ввода по сбросу. Затем, удерживая SHIFT, нажимаете F2. Шрифт становится заметно разборчивее. Затем нажимаете I<ВК>, затем на вопрос о имени снова <ВК> и сами открываете окно выбора файла нажав на кнопку пуска магнитофона. Выбираете нужный МГ-файл и кликаете на "загрузить". При вводе должен бежать счётчик. Т.е процедура такая же, как и при загрузке WAV-файлов.

Собираюсь на днях нацарапать программку конвертирующую ORD-файлы (а у меня программы для всех 8-ми разрядок в формате ORD) в файлы в формате орловского монитора. Также нужна такая же программка конвертирующая из RKS-файлов в формате волковского монитора.

В итоге, Вы убедитесь, что эмулятор EMU грузит файлы в формате орловского монитора, а как это сделать в эмуляторе EMU80, пока не ясно. Загрузка по сбросу в EMU80, точнее автостарт после неё, тоже пока под вопросом.

Pyk
26.12.2017, 01:53
Кое-что успел посмотреть.


Ну так расскажите о принципе эмуляции работы с магнитофоном в вашем эмуляторе. Всем это будет интересно узнать.
Перехватываются подпрограммы ввода и вывода байта. Вместо них выполняется перенаправление в файл и имитируется команда RET. То есть оригинальная подпрограмма не выполняется вообще. Также перехватывается подпрограмма ввода с клавиатуры с ожиданием нажатия - если ждем нажатия клавиши, подразумевается, что все прочитали или записали, и файл можно закрывать. Практика показала, что вариант закрытия файла по таймауту менее универсальный. Вот эти 3 адреса перехвата и задаются в конфигурационном файле. Возможно не самое лучшее решение, но пока такое.

А для формата MSX кроме подпрограмм ввода/вывода байта нужно еще перехватывать чтение и запись заголовков. Я пока не смотрел, как это сделано в ленинградском Мониторе, но думаю, что найти их адреса для перехвата также можно.

Обнаружил у себя ошибку в загрузчике wav-файлов. После ее исправления загрузились все образцы wav-файлов как в формате по "I", так и по сбросу, кроме SP-COPY. Там какой-то свой формат записи - надо смотреть, почему не грузится.


А то, что в эмуляторе EMU80 по сбросу выскакивает окно для выбора загружаемого файла, то это можно исправить не кастрацией загрузчика, а сделать так, что по нажатию одной красной кнопки сброс, всё как и сейчас - загрузка блока с автостартом уничтожена. Но если нажать кнопку сброс удерживая клавишу <Control> или <Shift>, то выводится окно запроса файла с расширением именно и только .RKS.
Именно так наверное не получится, надо подумать на самом деле, как это лучше сделать. Могут быть разные варианты.



Я уже в какой-то теме предложил маркировать формат с именем расширением .SPT (Specialist tape), чтобы не было путаницы с форматом .RKS
Если народ поддержит, можно и переименовать. А я могу в эмуляторе просто сделать поддержку загрузки rks или spt-файлв с именем из ком. строки или по Alt-F3/L.



В итоге, Вы убедитесь, что эмулятор EMU грузит файлы в формате орловского монитора, а как это сделать в эмуляторе EMU80, пока не ясно.
Вообще не понял суть проблемы. Файлы из архива успешно грузятся по директиве I. Правда некоторые выдают ошибку из-за того, что в конце файла отсутствует один байт контрольной суммы, но тем не менее все равно грузятся.

Пока все, завтра посмотрю чуть подробнее.
Версию эмулятора с исправленной процедурой чтения wav планирую выложить в конце недели.

http://emu80.org/temp/jet-set.png

barsik
26.12.2017, 03:12
А для формата MSX кроме подпрограмм ввода/вывода байта нужно еще перехватывать чтение и запись заголовков. Я пока не смотрел, как это сделано в ленинградском Мониторе, но думаю, что найти их адреса для перехвата также можно.
Это не требуется. В ленинградском мониторе используется не высокоуровневый протокол MSX, т.е все те же служебные байты, заголовки и т.п. что есть в компьютере MSX. А лишь заменяется низкоуровневый формат. А протокол, т.е пилотон, синхробайт, байты D9, имя файла и т.п - всё остаётся как и ранее. Т.е можно также выводить и по W и по O и затем соответственно грузить по R или I.

А на слух после нажатия на НР+F3 просто меняется звук, вместо шипа идет более приятный тональный сигнал. Но MSX двухчастотный формат несмотря на всю известность менее надёжный, чем двухфазный и ничуть не быстрее. Точнее при одной и той же скорости передачи MSX требует более высокого качества лентопротяга и ленты и вдвое большей полосы канала.

Что меняется оттого, что одна подпрограмма вывода байта заменяется на другую подпрограмму вывода байта? Причём так можно менять на любой формат, в том числе и проводной программный и проводной аппаратный (это с ВВ51). А т.к точки входа LDBYTE/SVBYTE не меняются, то если перехватывать именно эти точки, то ничего больше делать не надо.


загрузились все образцы wav-файлов как в формате по "I", так и по сбросу, кроме SP-COPY. Там какой-то свой формат записи - надо смотреть, почему не грузитсяСмотреть не надо... Точнее это бесполезно. Никогда по такому алгоритму эмуляции не загрузить программу защищённую от копирования. B2M кстати тоже нихрена не грузит, а вот проверьте на реале и убедитесь, что всё грузится.

Там только первые блоки идут в стандартной кодировке. Первый блок первичный загрузчик грузится в экран и выводит мигающую надпись "DO NOT STOP TAPE !". Второй блок - это основной загрузчик, он тоже грузится ещё в двухфазной кодировке. А следующий блок идёт уже в двухчастотной кодировке, причём не в той же самой, что прошита в мониторе, а в вариации - на слух то же самое, но байты не грузятся стандартной подпрограммой. Обычно также используются ухищрения - типа загрузка кода в обратном порядке, т.е от старших адресов к младшим, с перестановкой байтов с шагом 2 или 4 и XOR-ом вводимых байтов с E6.

Поэтому самОй SP-COPY её саму не скопировать. Этот копировщик берёт только двухфазный формат. Но он позволяет легко копировать примитивные защиты, что были в ходу в начальные годы. Защита была основана на том, что первый блок после загрузки и автостарта меняет константу ввода перед вводом второго блока и считает паузу до начала второго блока. Время паузы является ключом при декодировании второго блока. Это самая простая, но вполне эффективная защита и эмуляторы её тоже не берут.

Такой формат никак не скопировать вручную. А SP-COPY делал идентичную копию таких программ. Он запоминал константы ввода для каждого блока и паузы между блоками. Но есть некопируемая разновидность этого метода, когда константа ввода меняется прямо в ходе загрузки, изменясь при вводе очередных 128-ми байтов плавно или по случайному закону.

SP-COPY работает из экрана, отдавая под буфер ввода все 36 кб. А орионовская версия имеет буфер в 48 кб. Но гораздо круче копировщик работающий с электронным диском. Он грузит не в ОЗУ, а сразу во внешний эл.диск и позволяет копировать многоблочные программы любого размера.

У меня было много защищённых от копирования программ СПЕЦИАЛИСТА, в т.числе и ценные. Они не сохранились, сохранились лишь те, к которым я имел авторский инсталятор. Так пропали адаптации ZX-игр. Инсталяторы тоже, кстати, нихрена не работают в эмуляторах, т.к в них не используются стандартные подпрограммы вывода.


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

Pyk
26.12.2017, 13:05
Смотреть не надо... Точнее это бесполезно. Никогда по такому алгоритму эмуляции не загрузить программу защищённую от копирования.
Почему не надо? Значит, что-то эмулируется недостаточно хорошо. Что в алгоритме эмуляции может мешать в случае считывания wav-файла, когда не используются никакие перехваты?



Это не позволит грузить многоблочные программы, т.к между загрузками блоков нет вызовов подпрограмм опроса клавиатуры (особенно C803, C81B ещё может быть для контроля на аборт), а программы написанные виртуозами не используют для опроса клавиш стандартные подпрограммы.
Как раз наоборот, если для многоблочной программы записать все блоки в один файл, то он будет успешно грузиться (опрос клавиатуры вызывает закрытие файла). А вообще все предусмотреть наверное невозможно - для любого варианта реализации в эмуляторе перенаправления работы с магнитофоном в файл можно будет найти пример, на котором это работать не будет. Универсальный вариант - использование wav.

uart
26.12.2017, 20:04
Смотреть не надо... Точнее это бесполезно. Никогда по такому алгоритму эмуляции не загрузить программу защищённую от копирования. B2M кстати тоже нихрена не грузит, а вот проверьте на реале и убедитесь, что всё грузится.
Можно wav с такой программой? Вообще не вижу чем загрузка на реале отличается от загрузки на эмуляторе...

Pyk
26.12.2017, 20:27
uart, я так понимаю, что вот эти из архива "tape for check":
SP-COPY (auto)' EXE.wav
SP-COPY (auto) EXE.wav

Не грузятся ни в моем эмуляторе, ни в твоем. С jet-set на первый взгляд проблем нет (у меня vmWare зависает в процессе загрузки).

uart
26.12.2017, 22:06
jet-set.wav загрузился, а с этими что-то не так.

barsik
27.12.2017, 06:48
Не грузятся ни в моем эмуляторе, ни в твоем
И в эмуляторе от b2m тоже не грузятся.

Похоже, что в этих эмуляторах нет честной работы в реальном времени. Возможно там и при вводе WAV какая-то "химия", основанная на перехвате известных входов в подпрограммы, а не работа в реальном времени. А если с лентой работает другая подпрограмма с другими входами, тут эмуляторы обламываются.

Хотя при вводе WAV-файла казалось бы всё должно быть честно. Иначе почему не грузит WAV-записи в другом низкоуровневом формате. И не выгружает - инсталяторы, которые пишут защищённые от копирования программы тоже не работают.

В EMU80 от Pyk вообще нет записи WAV-файла. А в EMU от b2m якобы что-то пишется в WAV, но файл оказывается тишиной. Пока в EMU80 не проверить ввод WAV-файла и неизвестно сделан там ввод WAV-файла честно или тоже "химия" на перехвате входов.

А вот мой MSDOS эмулятор на тормозной 386SX33, что в 500 раз тормознее современных PC все защищённые МГ-программы грузились прямо с реального магнитофона. Потому что там все команды ввода/вывода на МГ-порт 8-ми разрядки переадресовывались на реальный ВВ55, стоящий на самодельной платке втыкаемой в ISA-слот. И через обычный МГ-адаптер всё читалось. Можно и без платки c ВВ55, а читать всё через бит параллельного LPT-порта. Но это не работает на ПЕНТИУМЕ, даже на самом медленном, т.к там даже без Windows прерывания от интегрированных устройств на плате рвут прогон программы в реальном времени.

А вообще-то и прекрасно, что эмуляторы нихрена не читают WAV-файлы в реальном времени. Это значит, что как и в 80-тые можно делать МГ-программы которые будет сложно кракнуть, просто потому, что их не ввести в эмулятор, чтобы воспользоваться волшебной кнопкой и слить всё ОЗУ с регистрами в RSS-файл. Т.е получается и на реале не кракнуть и в эмуляторе не обмануть.



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

Но первый блок начинает работу с того, что ждёт начало пилотона второго блока и программно считает время паузы. Дождавшись пилотона, он фиксирует время паузы и стартует программа определения константы ввода. А у Вас это вообще не сработает, потому что подпрограмма определения константы ввода сама лезет в порт МГ, а не получает уже готовые байты из подпрограммы LDBYTE.

Кстати именно поэтому ленинградский монитор ничерта не работает в EMU80, но работает с EMU от b2m. Это из-за автонастройки на скорость записи. Монитор просто виснет в подпрограмме автонастройки ожидая фронтов на МГ-входе, а в эмуляторе EMU80 фронты на входе МГ не эмулируются. Вот оттого ленинградский монитор и виснет в процедуре автонастройки. Вскоре попробую отключить автонастройку на скорость, тогда будет работать.

А грамотно надо перехватывать не входы в подпрограмму LDBYTE, а команду КР580 читающую из МГ-порта ! Т.е честно эмулировать прогон программы в реальном времени. С таким алгоритмом эмуляция магнитофона будет 100% точно соответствующей реалу.

Вообще-то, раз хоть одна многоблочная программа уже пошла грузиться, то значит WAV более менее честно читается, т.к первый блок всех многоблочных программ всегда содержит процедуру автонастройки на скорость записи, определяя скорость ввода второго блока.

Но при вводе не WAV, а RKS (т.е готовых кодов) объединение блоков в сплошной массив не поможет. Ведь суть много блочной программы заключается в том, что блоки стартуют. По концу загрузки первого блока он сразу стартует и начинает выполнять программу по загрузке второго блока. А если вы перехватите ввод в начале ввода первого блока, то вы просто сольёте в ОЗУ весь массив блоков, а что это даст? А надо, чтобы сразу по окончании ввода первого блока он стартанул. В концепции b2m с перехватом точки выхода из LDBYTE, это сработает, а с Вашей "химией" не сработает.

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

Кстати, SP-COPY вообще не использует подпрограмм из ПЗУ, поэтому ПЗУ можно снять, а программа продолжит работать. Для крака в качестве ПЗУ ставится такое, что обеспечивает копирование кода SP-COPY из экрана на 0. Нажав сброс я получил сам код SP-COPY, но не знаю какая точка входа. В эмуляторе это узнать не проблема.

А JET-SET это не защищённая программа, это просто многоблочная программа в обычном двухфазном формате. Она копируется с помощью SP-COPY. Чужие программы от копирования не защищались. Все игры из пакета SP580 были переделаны под стандартный СПЕЦИАЛИСТ, а некоторые, что стоили того, были сделаны многоблочными. Защищались от копирования только авторские программы, которых ещё ни у кого нет.

Прилагаю инсталятор SP-COPY для ОРИОНА. Он работает на СПЕЦИАЛИСТЕ с ленинградским монитором 3.3 (!), но пишет на ленту защищённые копии для ОРИОНА. Нихрена не работает в эмуляторах. С орловским монитором работать не будет. т.к использует встроенный в ПЗУ драйвер MSX. Есть инсталяторы и других программ ОРИОНА. Кстати эти защиты программ для ОРИОНА форматом MSX никто так кракнуть и не смог. Надо на реальном СПЕЦИАЛИСТЕ сделать копию на ленту. Тогда это можно будет грузить на ОРИОН по I (управление вышибает).

Про многоблочные программы и SP-COPY можно прочитать здесь (http://zx-pk.ru/threads/27540-leningradskij-monitor-i-drugie-programmy-dlya-spetsialista.html?p=942841&viewfull=1#post942841).

uart
27.12.2017, 08:16
Он работает на СПЕЦИАЛИСТЕ с ленинградским монитором 3.3
Монитор где взять?

barsik
27.12.2017, 08:50
Монитор где взять?
В вложении поста #216 (http://zx-pk.ru/threads/27488-emu80-v-4.html?p=942552&viewfull=1#post942552), в теме "Ленинградский монитор" (http://zx-pk.ru/threads/27540-leningradskij-monitor-i-drugie-programmy-dlya-spetsialista.html) или во вложении этого поста (http://zx-pk.ru/attachment.php?attachmentid=63518&d=1514353791). В файле OOO.RAR также предыдущий монитор 2.7, он немного хуже, но в нём есть некоторые команды, которые иногда нужны при компоновке блочных программ (запись блока без адресов загрузки), а также запись в формате ZX. Описание команд монитора можно найти здесь (http://zx-pk.ru/threads/27540-leningradskij-monitor-i-drugie-programmy-dlya-spetsialista.html?p=906158&viewfull=1#post906158). Перевложил сюда предыдущую выкладку монитора, там кажется исходники. Для эмулятора EMU от b2m файлы конфига переместите в каталог config, остальные файлы в каталог Specialist.

В минимуме достаточно 2 ПЗУ (C000...CFFF), но лучше 3 ПЗУ РФ2 (C000...D7FF). Остальное - редактор, ассемблер и RAMDOS факультативно. На месте RAMDOS D800...DFFF вставлены коды FF, т.к внешнего эл.диска на РУ7-мых ни у кого нет и в эмуляторах он не эмулируется (хотя это несложно сделать).

Попозже хотелось бы попробовать переписать RAMDOS так, чтобы носителем был не внешний эл.диск на РУ7-мых, а внутренний RAM-диск на базе запасных банок ОЗУ, коммутируемых портом F9. При переключении банки все 62 кб становятся ОЗУ другой банки. Но доступ в это ОЗУ только через п/п-ммы F836/39. Аппаратно это легко делается заменой РУ5 на РУ7, для чего ставится доп. КП12 и регистр номера банки на 155 ТМ2. Такой эл.диск в 186 кб больше, чем у ОРИОНА (60+60+48=168) и Корвета (144 кб).

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

Хотел бы сделать для проверки эмуляторов простую много блочную программу с простейшей защитой изменением скорости и паузами между блоками, но забыл где встречал программку для конверсии файлов .RKx в WAV. Если кто в курсе киньте, пожалуйства, ссылку.

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

Частично могут помочь программы вывода типа RKWIN.EXE, что выдают коды в WAV-формате на AUDIO-выход PC и мой магнитофон "Легенда-404" с пассиком из бытовой резинки. Но сначала надо как-то подготовить блоки в WAV-формате.

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

Можно также вывести звуки не в магнитофон, а в реальный ОРИОН с работающим на нём копировщиком SP-COPY прямо с выхода PC на его МГ-вход. Но как назло SP-COPY не может работать на Z80, т.к использует недокументированные команды КР580 для защиты от кракеров.

А для заставок при МГ-вводе нужны готовые заставки в формате экрана ZX-Spectrum. Есть подпрограмма вывода ZX-экрана на экран СПЕЦИАЛИСТА в монохроме. Но раз в эмуляторе есть цвет, то можно переделать её для вывода в цвете. Это не автоматизировать, раскраску картинок придётся делать вручную. Придётся написать специальную программку для раскраски, т.к цвет СПЕЦИАЛИСТА другой и сильно уступает в цветовых возможностях. Можно даже сделать, чтобы заставка при вводе с МГ грузилась также как на ZX, в виде неподряд выводимых линий.

Pyk
27.12.2017, 16:14
barsik, у меня в эмуляторе при загрузке wav-файла никакой "химии" нет - просто честно эмулируется железо. Если sp-copy грузится на реале, но не грузится в эмуляторе, возможно, есть какие-то погрешности в эмуляции.

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

barsik
28.12.2017, 07:04
Тут возник вопрос как грузить RKS и WAV-программы, что грузятся по сбросу в эмуляторах EMU80 и EMU. В реальности оказалось, что оба эмулятора не готовы грузить файлы по сбросу, хотя это самое врождённое свойство СПЕЦИАЛИСТА.

К эмулятору EMU от b2m претензий почти нет. Он по сбросу всё грузит, - и RKS и WAV. Но для ввода WAV надо знать маленький нюанс.

А EMU80 пока вообще "вне игры" до выхода нового релиза. WAV-файлы EMU80 по сбросу просто не грузит. RKS-сбросовые файлы теоретически грузит, если ему поставить оригинальный (МК 05.1987) или зверковский (МК 04.1988) загрузчик вместо того слегка кастрированного, что идёт в дистрибутиве.

Но лишь теоретически. Точнее можно было бы пользоваться EMU80 с ленинградским монитором, но увы, он виснет на процедуре автонастройки на скорость. А с базовым загрузчиком вообще возникла проблема. Не смог в нём выйти в монитор. В базовом загрузчике выход в монитор делается так - нажимаем на <STOP>, затем на <ВК>. C ленинградским монитором, в который встроен выход отовсюду, - вообще проще. Если программа хоть как-то читает клавиатуру (а это - 90% программ, 10% это игры со своей программой сканирования клавиш), то для выхода в монитор достаточно ввести НР+F9 (нажать F9 удерживая клавишу НР). А для выхода из загрузки в реале достаточно просто нажать на любую функциональную клавишу.

В ленинградском мониторе удобны клавиатурные прерывания вызываемые по НР+F1...F9, хотя без ПЗУ D000 они не работают. Это очень удобно, например, если начался ввод на оригинальном загрузчике, то его уже никак не прервать, причём даже тайм-аут сигнала не обрабатывается. А с ленинградским монитором, если надо прервать ввод с МГ или вообще любую программу, нажимает НР+F9 и мы в мониторе.

Так вот, с некастрированным загрузчиком RKS-файлы по сбросу можно загрузить и они автостартуют. Но ведь в большинстве случаев нам надо просто выйти в монитор, а не автостартовать по сбросу. Как указано выше, достаточно нажать на <STOP>, затем на <ВК> и мы окажемся в мониторе. Но, во первых, как сходу найти эту кнопку <STOP>, т.к никакого окна с картинкой клавиатуры, как есть на многих эмуляторах ни в EMU80, ни в EMU не предусмотрено. Но проблема даже не в этом, а в том, что уйдя в окно ввода файла с винчестера по первому же вызову CALL LDBYTE (C377) в эмуляторе EMU80 уже нельзя выйти в монитор.

Это происходит потому, что в EMU80 эмулируется ввод целого блока, а не ввод байта как в эмуляторе от b2m. Когда работает подпрограмма C3F9 в ПЗУ, что и делает ввод блока с ленты, то её работа может быть прервана нажатием на <STOP> или на любую функц.клавишу.

А EMU80 этот код вообще не прогоняет, а просто игнорирует, - по первому же CALL LDBYTE прерывает прогон (эмуляцию команд КР580) и возвращается к эмуляции кода 8-ми разрядки только когда произойдёт CALL на опрос клавиатуры. Мне вообще кажется этот метод дико некорректным, потому что существование стека просто игнорируется. Т.е программа может делать CALL F803 находясь в подпрограмме, а куда мы тогда вернёмся по RET, если в стеке нет адреса возврата, т.к CALL не прогонялся.

По этой причине и пришлось кастрировать загрузчик, забив в нём загрузку по сбросу. Если нажать "отмена", то так и остаётся висеть надпись "ПРОГРАММА ?" и на клавиши не реагирует. Потому единственный способ выйти в монитор это написать программу из одной команды JMP C800 и, оформив её как RKS-файл, стартовать по сбросу всякий раз. Вот полный код этого RKS-файла: 00,00,02,00,C3,00,C8,8B,C3.

Таким образом, совершенно очевидно, что концепция эмуляции ввода целого блока, полностью игнорируя весь программный код начиная с первого же CALL LDBYTE до последующего первого вызова опроса клавиатуры, - глубоко порочен. Это "химия" даже более высокого порядка, чем просто подмена вызова LDBYTE с возвратом каждого байта из дискового файла. Эта "химия" и не позволяет грузить программы по сбросу и не допускает загрузку многоблочных программ. Это и объясняет почему в эмуляторе EMU80 не нужен реально нужный программам первый синхробайт E6. Поэтому-то Вы его исключили из формата RKS. Конечно такая "химия" в реализации очень проста, но она сработала только потому, что на РК86, ОРИОНЕ и СПЕЦИАЛИСТЕ мало многоблочных и коммерческих программ, но они всё-же есть.

Гораздо более правилен алгоритм подмены не ввода целого блока, а только единственной подпрограммы LDBYTE. Для чего достаточно отлавливать всего 2 точки - это вход в подпрограмму и выход из неё по RET. Именно так и сделано в эмуляторе от b2m. Там тоже по первому же вызову CALL LDBYTE открывается окно запроса имени файла, затем при последующих CALL LDBYTE программе выдаётся 256 нулей, синхробайт E6, и только потом начинается чтение байтов из файла RKS. Совершенно очевидно, что логично было бы и все байты пилотона и байт E6 тоже иметь в файле. Это бы жёстко фиксировало формат, упростило бы эмуляторы и позволяло бы простую конверсию файла кодов в файл звуков и наоборот. А закрытие файла делается автоматически после прогона тысячи команд КР580 без вызова CALL LDBYTE. Это проще и эмулятору не надо отлавливать подрограммы опроса клавиатуры, чтобы сделать вывод о конце ввода с ленты и закрыть файл.

Чтобы было идеально, т.е с точностью реального времени, эмулировать надо фронты на МГ-входе. Тогда по открытию файла, ориентируясь на число машинных тактов прогнанных команд и константу ввода (из ячейки 8FFF), ну например, через 3000 машинных тактов меняется фронт на входе МГ, естественно, в соответствии с двухфазной кодировкой, т.е нулевой бит кодируется как 1,0, а единичный бит как 0,1. А ещё лучше сразу закодировать данные в файле точно также как они идут в реальной записи. Это увеличит размер файла всего лишь вдвое. Впрочем, концепции применённой в эмуляторе EMU от b2m с заменой подпрограмм LDBYTE/SVBYTE вполне достаточно. Более точная эмуляция не даст решающих преимуществ.

А загрузки WAV-файлов по сбросу в эмуляторе EMU80 вообще нет, только сбросовый формат RKS. Итак, с загрузкой по сбросу на EMU80 разобрались, - её пока нет ни в каком виде.

Но и с EMU от b2m для загрузки по сбросу тоже есть нюансы. Проблемка возникает из-за того, что по нажатию на красную кнопку СБРОС останавливается магнитофон, что делает загрузку по кнопке СБРОС невозможной. Надеюсь когда-нибудь b2m это исправит.

По счастью в ленинградском мониторе на этот случай предусмотрена директива B. Она не особо сложная и состоит всего из одной команды JMP C000 и служит для того, чтобы введя в строку букву 'B', можно было бы нажать на <ВК>, как только послышится пилотон. Дело в том, что изредка встречаются образцы плат в которых кнопка СБРОС иногда приводит к порче ОЗУ. Вот чтобы этого уж точно избежать и была введена эта команда.

Тогда в эмуляторе B2M набираем команду B, запускаем магнитофон, выбираем автостартующую или многоблочную программу и нажимаем <ВК>. Можно нажимать даже раньше, чем пошёл пилотон, т.к в эмуляторе шумов в линии, что в реале иногда могут вызвать ложный захват синхробайта, уж точно нет, т.к с ленты просто ничего не читается, а читаются уже готовые байты из дискового файла.

Если же используется не ленинградский монитор, а или родной (на 8D00) или орловский, в которых директива B отсутствует как класс, то тоже есть выход. Набираем команду GC000 (в родном мониторе это JC000) и после "включения магнитофона" нажимаем на <ВК> (это клавиша Enter).


К сожалению, в ленинградском Мониторе это не работает, надо подумать, что с этим можно сделать. Если есть какие-то предложения по реализации перенаправления магнитофона в файл - с удовольствием выслушаю
Ленинградский монитор не работает из-за того, что перед запуском процедуры поиска синхробайта, с чего начинается любая загрузка, он делает CALL CONST - вызов подпрограммы настройки на скорость. Эта подпрограмма не вызывает LDBYTE, а сама лезет в МГ-порт считывая фронты, а на выходе просто подставляет вычисленную константу в ячейку CLD (8FFF). Если настройку на скорость не вызывать, то константа CLD останется стандартной. А т.к фронтов на порту PB0 ППА Вы не эмулируете, то процедура настройки зависает навечно тщетно ожидая прихода хоть какого-то фронта на МГ-вход. Т.к автонастройка предшествует всем вводам с ленты, то возможно поможет если делать перехват на этом CALL. Но достаточно в коде ПЗУ этот CALL CONST забить. Например байт 0CDH заменить на 21H или просто забить 3 байта нулями.

Да, а в самом эмуляторе надо менять алгоритм работы с магнитофоном, сделать также как это в эмуляторе EMU - отлов входов и выходов п/п-рамм LDBYTE/SVBYTE.

Pyk
28.12.2017, 08:29
barsik, спасибо за отзыв. Я, конечно, про все эти проблемы знаю. Более того, надеюсь, что бо̒льшую часть их мне удалось уже решить - на днях будет новый релиз.

Но, к сожалению, вы не везде сделали правильные предположения о причинах этих проблем, поэтому небольшие комментарии:



Это происходит потому, что в EMU80 эмулируется ввод целого блока, а не ввод байта как в эмуляторе от b2m.
Как я уже говорил, это неверно.



А EMU80 этот код вообще не прогоняет, а просто игнорирует, - по первому же CALL LDBYTE прерывает прогон (эмуляцию команд КР580) и возвращается к эмуляции кода 8-ми разрядки только когда произойдёт CALL на опрос клавиатуры.
Это тоже неверно.



Мне вообще кажется этот метод дико некорректным, потому что существование стека просто игнорируется.
Естественно, существование стека не игнорируется.



Таким образом, совершенно очевидно, что концепция эмуляции ввода целого блока, полностью игнорируя весь программный код начиная с первого же CALL LDBYTE до последующего первого вызова опроса клавиатуры, - глубоко порочен.
Еще раз - это неверно. О том, как на самом деле это работает, я уже писал выше в посте № 217: перехват ввода опроса клавиатуры используется только для определения момента, когда пора закрывать файл.



А закрытие файла делается автоматически после прогона тысячи команд КР580 без вызова CALL LDBYTE. Это проще и эмулятору не надо отлавливать подрограммы опроса клавиатуры, чтобы сделать вывод о конце ввода с ленты и закрыть файл.
Можно сделать опционально. Насколько я помню, я даже пробовал такой вариант еще в первых версиях эмулятора, но для типичных случаем реализованный в настоящее время вариант мне понравился больше, его и оставил.

ZEman
28.12.2017, 09:00
Pyk, а эмуляцию компьютеров "лик" и "спектр001" увидим в новом релизе ?
Ещё из пожеланий - было бы здорово увидеть виртуальную клавиатуру.

barsik
28.12.2017, 09:05
Чтобы забить в ленинградском мониторе автонастройку на скорость надо поставить в начале подпрограммы настройки на скорость (это метка @KNSRD в исходнике C800) код команды RET. Это подпрограмма вызывается из многих мест, поэтому лучше забить именно здесь. Кстати, напоминаю ленинградские ПЗУ С000 и C800 это единая программа, а не отдельно загрузчик и монитор, нельзя подменить ПЗУ C000 на загрузчик Зверкова или Волкова или ПЗУ C800 на монитор Орлова, - там это отдельно загрузчик и монитор, здесь же это одна единая программа с перекрёстными вызовами.

Итак, чтобы забить автоопределение константы ввода, чтобы не было зависа на ожидании фронтов на МГ-входе, надо в ROM-BIOS версии 3.3 (но не 3.4) заменить байт E5

по адресу CEDF: E5 на байт C9 (т.е команду PUSH HL на RET). После этого зависа в эмуляторе при директивах R и I не будет.

После такой переделки ПЗУ эмулятор EMU80 стал работать с ленинградским монитором, исчез завис при запуске магнитофоных команд и стало наконец открываться окно выбора файла после нажатия <ВК> в МГ-директивах R и I. Т.о эмулятор стал наконец грузить с магнитофона файлы в формате RKS (хотя что считать форматом RKS не ясно), точнее идёт загрузка как по директиве I, так и по директиве R. Расширение у файлов одинаковое, а вот формат заголовка разный, из-за чего постоянно приходится смотреть дампы файлов, чтобы узнать в каком они формате.

Надо вводить новое расширение для файлов, чтобы не было путаницы или вводить возможность загрузки в эмулятор файла с любым расширением, тогда уж каждый сам переименует, как ему нравится. Пока приходится выкручиваться маркируя файлы регистром букв в имени.

Но вот, что совершенно непонятно, так это почему у эмулятора EMU от b2m не было никаких проблем с ленинградским монитором из-за процедуры настройки на скорость. Из-за этого я и решил, что EMU работает в реальном времени, а не "химическим" способом и при вводе готовых кодов из файлов RKS (т.е не звуков из WAV-файлов, там поятно, что ввод в реальном времени). Теперь уже и не знаю чего думать.


Как я уже говорил, это неверно
. . . . . . . . . . . .
Это тоже неверно
. . . . . . . . . . . .
Еще раз - это неверно
Значит у Вас тоже обычная химия, а не химия более высокого порядка. Это успокаивает.

Читается не сразу весь блок, а по каждому CALL LDBYTE читается один байт из дискового файла. Но вот куда Вы дели байт Е6 ? Это и вводит в заблуждение. Ведь только по его прочтению, начинается собственно ввод файла. А раз программа его не получает, значит и ввод программой 8-ми разрядки не происходит. И ещё вводит в заблуждение, что у Вас нет критерия для определния выхода из п/п-мм LDBYTE/SVBYTE. Как Вы тогда узнаёте конец ввода/вывода байта?

Если у кого проблемы с редакцией кодов (нет ни UltraEdit, ни HEX-Edit) и для тех кто не разбирается в конфиг-файле эмулятора, вкладываю изменённый монитор и конфиг-файл для EMU80. Скопируйте их в папку \EMU80\SPEC\ (это папка Специалиста, а не спека ZX-Spectrum).

Pyk
28.12.2017, 15:07
ZEman, "Лик" будет, уже готов. "Спектром" пока не занимался, наверное уже после НГ.

barsik, насчет процедуры настройки посмотрю еще.
А байт E6 просто всегда выдается сразу после открытия файла.
Также не понял, зачем нужен критерий выхода из п/п LDBYTE/SVBYTE?

zx_
28.12.2017, 17:10
нашел вот в описании ленинградского монитора 3.0 -3.3 по ссылке barsik,

я же помню -)
""

НОВИНКА! ПЗУ D000 содержит полный (!) эмулятор барнаульского монитора, что
позволяет выполнять барнаульские программы без изменений в них!

Для этого в самом компьютере необходимо установить дешифратор (555ИД7),
разбивающий адресное пространство F800-FFFF на 8 участков по 256 байт (для
тех у кого это еще не сделано) и обеспечить выборку ПЗУ C800 при обращении
к ПЗУ F800 - включить два диода анодами к входу /CS ПЗУ C800, катоды к вы-
ходам дешифраторов C800 и F800. После этого все программы барнаульского
кооператива не обращающиеся непосредственно к порту по адресу F000 (это 90%
программ) будут вашими. А для получения 100% совместимости с помощью еще
двух диодов (или одной ИМС 155ЛИ1) обеспечьте выборку порта, как по адресу
FF00 так и по адресу F000.

это я все про свое -РК КНГМД

barsik
28.12.2017, 17:14
не понял, зачем нужен критерий выхода из п/п LDBYTE/SVBYTE ?
Адрес LDBYTE в ПЗУ это адрес входа в подпрограмму. Но Вы эту п/п-мму реально не прогоняете, а химичите, заменяя прогон этой подпрограммы лезущей в МГ-порт 8-ми разрядки, считывающей фронты и компонующей из считанных битов целый байт, на примитивное чтение очередного байта из открытого файла. Т.е в тот момент когда в регистре PC эмулируемого КР580 вдруг оказался адрес LDBYTE=C377, что было задано строчкой в Вашем конфиге, Вы неожидано прекращаете эмуляцию, считываете очередной байт из открытого файла и заносите его в эмулируемый регистр A (т.к эта подпрограмма возвращает результат в A). И вот что Вы делаете дальше это Ваш большой секрет.

Эмулятор EMU от b2m в этом месте, зная точку выхода из LDBYTE, просто переустанавливает регистр PC на адрес точки выхода и продолжает эмуляцию прогона программы с этой точки. Просто и эффектно. И весь код, что исполняет подпрограмму LDBYTE в ПЗУ можно забить нулями или матерными фразами, это не повредит.

Ну а вот, что делаете Вы, т.к Вам неизвестна точка выхода, это большой и тщательно скрываемый Вами секрет. Могу предположить, что Вы пошли мазохистским путём, а именно продолжаете с этой точки уже не прогон, а трассировку программы. Т.е просто отслеживаете только регистр PC, трассируете и ищете команды которые меняют стек, т.е PUSH, POP, LD SP,nnnn, LD SP,HL и др. И ждёте когда стек станет ровно на 2 адреса выше того, что был в момент входа в точку LDBYTE, что означает, что прошла команда RET и произошел возврат, т.е была целиком прогнана подпрограмма LDBYTE.

Какие другие варианты узнать момент возврата из CALL LDBYTE могут быть ещё ?

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


это я все про свое - РК-КНГМД
Почему Вас волнует, что КООП SP580, чтобы освовободить адреса F800...FFFF для ПЗУ совместимого с РК86 решил перенести ППА клавиатуры с FF00 на F000. Они совершенно справедливо решили, что совместимость с РК86 важнее, чем совместимость с базовым вариантом, т.к для СПЕЦИАЛИСТА тогда вообше не было программ, а для РК86 были.

Только они ещё не знали о мониторе Орлова на C800 и потому не догадались, что для совместимости достаточно совместить только входы в подпрограммы, т.е F803, F806, F809... и т.д. Остальные адреса F839...FFFF совмещать не требуется. Потому и возможно с помощью 2-х дидов получить и совместимость с РК86 и сохранить адрес порта на FF00. И тогда все системные программы РК86 (кроме программ извращенцев, что лезут внутрь ПЗУ РК86 на нестандартные входы) будут работать на СПЕЦИАЛИСТЕ.

Идеи и схемы КООП SP580 не имеют никакого отношения к РК-КНГМД, хотя если РК-КНГМД ставить на вариант железа SP580, то да, возникнет конфликт, т.к по F000 у них стоит клавиатура, а РК-КНГМД как раз использует адрес F000. Но какая проблема? Если у Вас СПЕЦИАЛИСТ по варианту SP580, так перетранслируйте РК-КНГМД на какой-нибудь другой адрес. А вообще какой смысл в варианте SP580. Для него программ гораздо меньше, его использовали единицы, да и то, только до момента пока не понимали, что совместимость с остальными пользователями важнее.

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

barsik
28.12.2017, 18:02
внимательнее надо читать посты. Он уже писал, что вместо выполнения процедуры эмулируется команда RET
Ссылку на пост, где об этом сказано.

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

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

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

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

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

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

CodeMaster
28.12.2017, 18:07
Ссылку на пост, где об этом сказано.

barsik, как так-то? Я читаю эту тему по диагонали, чисто из исторического интереса и то видел, что на прошлой странице Pyk тебе лично повторил где он об этом писАл:

Вместо них выполняется перенаправление в файл и имитируется команда RET (http://zx-pk.ru/threads/27488-emu80-v-4.html?p=942613&viewfull=1#post942613)

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

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

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


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

barsik
29.12.2017, 00:50
А вот в эмуляторе uart судя по всему должно все без проблем работать
Но этот эмулятор конечно же недоступен, т.к не для IBM PC.


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

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


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 все эмуляторы блокируются.

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

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

barsik
29.12.2017, 01:40
А у меня эмулятор EMU от b2m нормально читает оба типа RKS-файлов и по директиве I и по директиве R. Естественно также нормально читает и WAV-формат. Вот только не пишет в WAV-формате.

Может быть дело в версии EMU, у меня вообще старая версия 1.01 из 2011 года. Привожу скриншот экрана с эмулятором B2M с указанным конфигом и на дампе видно, что монитор непатченный. И как видите и введённая программа работает.

А нельзя ли сделать версию эмулятора, чтобы звуки выводил на PC Speaker, а магнитофонный ввод/вывод делал через LPT-порт ?

zx_
29.12.2017, 14:25
barsik, А не мог бы высокоуважаемый (джин) :v2_dizzy_indy: опубликовать схему турбо для Специалиста?

на 2.5 мгц которая, на одной ТМ2

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

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


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

Pyk
29.12.2017, 20:21
А нельзя ли сделать версию эмулятора, чтобы звуки выводил на PC Speaker, а магнитофонный ввод/вывод делал через LPT-порт ?
Под Windows это вряд ли возможно. А вообще 2-я DOS-версия эмулятора может выводить звук на PC Speaker.
Конечно, возможности этой версии сильно ограничены, но исходники доступны на GitHub, и при желании несложно реализовать обмен с магнитофоном через LPT.

Pyk
30.12.2017, 20:43
Очередная версия 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 - частота прерываний

barsik
31.12.2017, 11:15
Естественно сразу поставил своё ПЗУ. С орловским ПЗУ вообще ничего невозможно вводить в 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 просто пропадают нажатия на клавиши уже при одном недоубитом процессе.


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.

Pyk
31.12.2017, 11:59
barsik, спасибо за оперативный отзыв.

Во-первых, должен сказать, что я все тестировал с орловским Монитором. Увы, с петербургским, в том числе и патченым, не все работает, и я пока, честно говоря, толком не разбирался почему. Будет время - посмотрю.


С орловским ПЗУ вообще ничего невозможно вводить в WAV, т.к при WAV ввод долгий и нет никакой индикации
Для этого я и сделал ускорение при загрузке wav. К сожалению, на медленных компьютерах ускорение может упереться в быстродействие процессора. А индикация пока в планах.


Если я нажимаю I, затем <ВК> и на запрос имя файла снова нажимаю <ВК>, то открывается окно, где я могу выбрать только файл RKS.
RKS по умолчанию. Нужно из выпадающего списка фильтров выбрать "Wav Files (*.wav)" или "Все файлы" и выбрать wav.


Надо чтобы после АЛЬТ-W уже никакие окна не открывались
Логично, поправлю.


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


Т.е многоблочные программы могут быть только WAV, что резко снижает ценность, т.к WAV слишком большие по объёму, чтобы их хранить.
Где-то в одной из соседних тем уже начинали обсуждение возможности использования формата, альтернативного wav - в формате 1 бит на сэмпл и со сжатием. Можно развить эту тему либо использовать один из вариантов спектрумовского формата tap.


Заметил, что создаётся копия Emu80, занимающая ~4 мб памяти, если происходит неудачный старт эмулятора
Исправлял уже такое поведение, но видимо что-то опять сломалось в одной из версий. Разберусь.

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


Эмулятор сам должен понимать, что когда я выбрал файл с расширением WAV, то и вводить надо звуки, а когда с расширением RKS, то готовые коды.
Именно так оно сейчас и работает - анализируется именно расширение (wav или WAV), хотя логичнее было бы смотреть заголовок файла. Почему возник такой вопрос?

barsik
31.12.2017, 17:03
С орловским монитором новая версия EMU80 читает и пишет и по I/O, и по R/W, причем как в кодах (т.е в формате RKS), так и в звуках (т.е в формате WAV). С ленинградским монитором 2.7 и 3.3 (в обоих заглушены кодом C9 входы CEDF) читает и пишет только в кодах (т.е в формате RKS). Со звуками работать отказывается. Эмулятор EMU от b2m с тем же, причем оригинальным монитором читал в формате WAV.

Вообще-то это странно, потому что этот монитор делался так, чтобы совместить все входные точки, что было очень непросто, т.к они раскиданы по всему загрузчику, а не сгруппированы в начале кода. С большим трудом удалось совместить все точки и даже недокумментированные. Совмещать выходные точки из подпрограмм, естественно было незачем.

Почему же если точки выхода из подпрограмм не важны, не работает чтение/запись WAV-файла. При этом же вообще не используется никаких точек перехвата. Как тогда программа может влиять на результат. Насколько я понимаю, при этом контролируется сам разряд PB0 ППА, а код программы делающей доступ туда не важен. А может быть Вы контроллируете не тот порт, например F800, а не FF00 ? Также на мысль о "химии" при вводе WAV наводит невозможность загрузить файлы в MSX-кодировке внешним драйвером. Это вопрос ещё нуждается в прояснении. Могу попробовать читать/писать и в кодировке ZX-Spectrum, т.к она тоже есть в мониторе. Но пока это бесполезно, если даже обычная двухфазная кодировка не вводится.

Строки

cpu.debugOnHalt = yes
cpu.debugOnIllegalCmd = yes

надо помещать не в файл EMU80.CONF, а в в конец конфиг файла конкретного компьютера.

Подскажите каким редактором можно отредактировать руские тексты в Ваших конфигах. Обычно конфиг-файлы это чисто текстовые файлы в кодировке MSDOS или Windows, чтобы можно было редактировать самым простым редактором. Обидно, что используется неизвестная кодировка для русских букв. Из-за это не смог изменить титр, т.е заголовок эмулятора при работе. Какая-то левая китайская кодировка и непонятно каким редактором это можно редактировать.


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

Для записи двухфазной кодировки годится частота дисретизации не ниже 22 КГЦ. Ведь при двухфазной кодировке скорость передачи 1200 бит/сек. Бит кодируется перепадом 0>1 или 1>0. Потому частота с которой следуют фронты равна 2400 ГЦ. Это значит, что между фронтами происходит 9 отсчётов и колебания фронтов равны +-11%. При этом размер файла будет в 18 раз больше объёма кода.

Впрочем для СПЕЦИАЛИСТА это не очень актуально, т.к почти все старые программы есть в виде кодов. И вводить программы с заставками как в Синклере интересно только из спортивного интереса (сделать так, чтобы никто не сумел кракнуть) или с целью распространения новых программ в некопируемом виде.

Pyk
31.12.2017, 19:57
И по-прежнему нельзя изменять флаги процессора.
Помню, сделаю, не все сразу. А пока, если очень нужно, можно изменить редактированием половинки "регистра" AF.


Жалко, что шагание только по F7, я привык к T (так во всех отладчиках в мире, зачем нарушать традицию?)
Зачем же так категорично? Может быть, так в большинстве отладчиков командной строки, но в визуальных отладчиках все-таки чаще что-то из серии F7, F8, F10, F11... Хотя мне не сложно продублировать команду на клавишу "T". Есть еще пожелания, какие буквы назначить в дополнение к F4, F8, F9?


уродские мнемоники получаются для Z80, если использовать мнемоники Intel
Что касается меня, то я предпочитаю родные мнемоники для каждого процессора: Intel - для 8080 и Zylog - для Z80, так что такое мне тоже не очень нравится. Но не навязываю никому свое мнение - дело вкуса и привычки.


С ленинградским монитором 2.7 и 3.3 (в обоих заглушены кодом C9 входы CEDF) читает и пишет только в кодах (т.е в формате RKS). Со звуками работать отказывается.
Да, знаю, есть проблема. Причину пока не знаю. Никакой "химии" там вроде бы нет, возможно просто баг. Разобраться пока не пытался, если поможете найти, буду благодарен.


Подскажите каким редактором можно отредактировать руские тексты в Ваших конфигах
Обычная кодировка UTF-8. Открыть можно очень много чем, да хотя бы блокнотом, только в диалоге открытия файла выбрать из выпадающего списка эту кодировку. Есть и более продвинутые редакторы вроде Notepad++, а сам я предпочитаю консольный нортоноподобный файловый менеджер Far и его встроенный редактор.

Ну а сейчас уже пора бы о встрече нового года подумать :) Всех с наступающим!

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


Открыть можно очень много чем, да хотя бы блокнотом, только в диалоге открытия файла выбрать из выпадающего списка эту кодировку.
Похоже, что блокнот - не самый удачный вариант. При сохранении он добавляет байты BOM в начало файла (EF BB BF), из-за чего его перестает понимать эмулятор. Можно, конечно, потом эти три байта убрать, но проще взять более адекватный редактор.

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


Где-то в одной из соседних тем уже начинали обсуждение возможности использования формата, альтернативного wav - в формате 1 бит на сэмпл и со сжатием.
Да, кстати, может быть поддержку CSW добавить?