PDA

Просмотр полной версии : Общие вопросы эмуляции TR-DOS и ВГ93



Lethargeek
21.02.2020, 16:26
для начала:

1) применялась ли на спектруме команда read-track в (мб каких-то версиях) TR-DOS (не похоже), а также утилитах/защитах?

2) бит #1 регистра состояния после выполнения "вспомогательных" команд (то есть index) чему равен?
всегда 0/1 или "случайное" значение (как диск вертится)? одинаково для всех таких команд или нет?

3) когда именно всё-таки происходит переключение на ПЗУ тырдоса по ROMCS?
нули/нопы в ПЗУ намекают, что со следующей команды, но проверенные эмуляторы (unreal, xpeccy, zxspin) переключают на первой же
TESTall авторства Сергея Глагольева прыгает на #3D30 (=15664), явно предполагая немедленный ret с #3D30 уже из ПЗУ тырдоса
может ли так быть, что оригинальный бета-диск и (после)советские клоны переключают ПЗУ по-разному?

Titus
21.02.2020, 17:19
1) применялась ли на спектруме команда read-track в (мб каких-то версиях) TR-DOS (не похоже), а также утилитах/защитах?
Ты имеешь в виду команду ВГ93 чтения трека целиком? Да, применялась.
В защитах в основном.
И в моей (сделанной для софтстара) версии Street Fighter 2.

Lethargeek
21.02.2020, 17:39
В защитах в основном.
И в моей (сделанной для софтстара) версии Street Fighter 2.
поясни, так написано, как будто у тебя - не ради защиты

Titus
21.02.2020, 17:51
поясни, так написано, как будто у тебя - не ради защиты
В общем-то, конечно, ради защиты)
Но еще и для выпендрежа)

Lethargeek
21.02.2020, 18:04
Titus, а есть где-нибудь с примерами, типа write-track был такими байтами, но по read-track после этого прочитаются потом такие-то байты

Titus
21.02.2020, 18:18
Titus, а есть где-нибудь с примерами, типа write-track был такими байтами, но по read-track после этого прочитаются потом такие-то байты
Могу только поделиться этим (https://zx-pk.ru/threads/22505-polnaya-kollektsiya-softstar-g-moskva.html?p=667992&viewfull=1#post667992).

MetalliC
21.02.2020, 21:34
3) когда именно всё-таки происходит переключение на ПЗУ тырдоса по ROMCS?
на логическом уровне - сразу же.


может ли так быть, что оригинальный бета-диск и (после)советские клоны переключают ПЗУ по-разному?
зависит от того что понимать под "оригинальный бета-диск".
Beta128 AKA V5 переключает почти так же как наши клоны, отличие лишь в наличии переключателя совместимости со старыми версиями, активирующее окно 3Cxx в дополнение к привычному нам 3Dxx

более старые версии V3 и V4 переключают совсем иначе:
- окно доступа располагается в 3Cxx, перманентно, то есть и чтение опкодов и чтение данных всегда возвращает данные из ПЗУ бета-диска. при этом автоматического переключения всего ПЗУ и портов в режим бета-диска при доступе к этому окну тут НЕТ. это делается ручками через порты:
- порт FC - бит7==0 - активация портов бета-диска, после этого можно работать с портами контроллера -
- порт FF - бит7==0 - активация ПЗУ бета-диска, остальные биты порта емнип те же что и в Beta128

помимо этого, еще был самый старый из известных - бета-диск V2, там всё еще более иначе - использовался чип контроллера FD1771, который умеет лишь диски одинарной плотности. то есть привычные нам 16 секторов по 256байт на дорожку он не умеет. не уверен что там за формат, но скорее всего по 8 секторов на трек.

а еще, на оригинальных платах всех версий (и в прошивках ПЗУ тоже) перепутаны младший и старший биты данных, видимо такая (примитивная) защита, хех.

Lethargeek
21.02.2020, 22:01
на логическом уровне - сразу же.
это значит что? выборка опкода откуда будет - из пзу тырдоса или пзу бейсика?
и зачем тогда в пзу тырдоса по всем официальным точкам входа нопы стоят?

MetalliC
21.02.2020, 22:04
а фиг его знает зачем, видимо из разряда "береженого Бог бережет"

Lethargeek
21.02.2020, 22:45
интересно, что при попадании на точку отладчик xpeccy до выполнения команды показывает пзу бейсика, но на самом деле выполняет код уже из тырдосного :v2_wacko:

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


а может для совместимости с какими-то играми, которые намеренно или случайно читают оттуда и хотят видеть там нули как в оригинальном 48К ПЗУ
так читаться будет бейсик всегда, тырдос включится только по M1

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

а вот дизасм пзу interface-1:


; -------------------
; THE 'START' ROUTINE
; -------------------
; An instruction fetch on address $0008 pages in this ROM.
; The three-byte instruction at this location must exist on both sides of
; the looking-glass. The value fetched is immediately discarded.
; It follows that this restart should never be invoked from this ROM.

;; ST-SHADOW
L0008: LD HL,($5C5D) ; fetch character address from CH_ADD.
POP HL ; pop return address to HL register.
PUSH HL ; and save again on machine stack.

JP L009A ; jump forward to continue at START-2.

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

Lethargeek
26.02.2020, 21:26
Насчет TRDOS не знаю, а в бутах применяется.
может, вспомнишь ссылки, какие буты

Lethargeek
27.02.2020, 05:02
интересно, зачем (немного потыкал, вроде всё работает без неё)

Serg6845
27.02.2020, 09:30
для начала:

1) применялась ли на спектруме команда read-track в (мб каких-то версиях) TR-DOS (не похоже), а также утилитах/защитах?

вспоминаются как минимум утилиты серии DCU, в частности - 2.12.


2) бит #1 регистра состояния после выполнения "вспомогательных" команд (то есть index) чему равен?
всегда 0/1 или "случайное" значение (как диск вертится)? одинаково для всех таких команд или нет?

"вспомогательных" - это type 1? то есть поиск и перемещение головы? по даташиту - повторяет инвертированный вход индекса (35 нога), в реале - походу тоже, чаще всего 0, с редкими проскоками 1.




3) когда именно всё-таки происходит переключение на ПЗУ тырдоса по ROMCS?
нули/нопы в ПЗУ намекают, что со следующей команды, но проверенные эмуляторы (unreal, xpeccy, zxspin) переключают на первой же
TESTall авторства Сергея Глагольева прыгает на #3D30 (=15664), явно предполагая немедленный ret с #3D30 уже из ПЗУ тырдоса
может ли так быть, что оригинальный бета-диск и (после)советские клоны переключают ПЗУ по-разному?

тут не скажу, оригинальный в руках не держал.

Lethargeek
27.02.2020, 15:11
"вспомогательных" - это type 1?
и type 4 тоже, то бишь отмены (особенно интересно, что будет с битом, если дисковод перешёл в not-ready как раз по индексу)

ZXMAK
01.03.2020, 16:12
и зачем тогда в пзу тырдоса по всем официальным точкам входа нопы стоят?

nop нужен, т.к. ПЗУ не всегда успевало переключаться вовремя и на первой выборке возможно чтение обычного ПЗУ вместо ПЗУ TRDOS

Lethargeek
02.03.2020, 04:23
да это понятно, а вот что считать нормальным и задуманным поведением - было непонятно

MetalliC
03.03.2020, 21:44
nop нужен, т.к. ПЗУ не всегда успевало переключаться вовремя и на первой выборке возможно чтение обычного ПЗУ вместо ПЗУ TRDOS
не всегда это как и когда ? этож не гадание на кофейной гуще а электроника. и проверялось ли это на практике ?

и как так получается, что для MAGIC не нужен NOP ? там сразу JP xxxx, при чем по адресу 66h в ПЗУ 48 или 128 лежит не опкод JP (C3h)

ZXMAK
29.05.2020, 04:17
MAGIC автоматом включает нужное ПЗУ, после чего идёт довольно длительная обработка NMI - это занимает какое-то время, поэтому когда начинается выборка, ПЗУ уже подключено. Иногда даже конденсаторы приходилось подбирать для правильной выборки TRDOS. :)

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

IanPo
29.05.2020, 09:42
не всегда это как и когда ?
На некоторых схемах контроллеров дисковода.
Про это давно писали в статьях ZX-PRESS и других, про прошивки TR-DOS и программирование контроллера через точки входа ПЗУ.
Сейчас такое вряд ли встречается, хотя все может быть

MetalliC
29.05.2020, 10:54
чудненько, а как же тогда работали самые древние версии Бета-диска ? как видно на дизасмах - нопов там нет.


Иногда даже конденсаторы приходилось подбирать для правильной выборки TRDOS.
если мне не изменяет склероз, в некоторых вариантах мейджика бывали проблемы с дребезгом кнопки и длительностью импульса, а не переключением ПЗУ.

https://i.imgur.com/gUXPdgh.png
https://i.imgur.com/5uSBq0v.png

IanPo
29.05.2020, 13:43
Я не вижу здесь #3D13
Точку входа #3C03 я не знаю
Работали ли ВСЕ схемы со старыми версиями ПЗУ , я тоже не знаю.
Просто в некоторых схемах контроллеров сдвиг точки входа на 1 байт вперед приводил к неработоспособности программ.
Вот пример статьи:
http://zxpress.ru/article.php?id=1858

MetalliC
29.05.2020, 16:17
Я не вижу здесь #3D13
Точку входа #3C03 я не знаю
у оригинальных первых версий контроллеров Beta-Disk V2, V3 и V4 окно доступа было в #3Cxx, это уже в православном V5 AKA Beta-128 его изменили на #3Dxx ради совместимости с 128ми моделями, хотя точки входа #3Cxx оставили в ПЗУ для совместимости с имеющимся софтом, плюс тумблер включающий "старое" окно.

но смысл абсолютно тот же: 3С00 (15360) делает то же что и 3D00 (15616), 3С03 то же что и 3D03.
доступ из машинного кода там совсем по-другому, да и вообще он во всех версиях разный, и видимо вообще не предполагалось что разработчики отдизасмят прошивку и будут вызывать оттуда всякое.

кстати, не поленился проверил все имеющиеся оригинальные прошивки - NOP-ы появились лишь в 5-ой версии, да и то лишь в 3Dxx, а в 3Cxx там RST#38 вместо NOP-ов.


Вот пример статьи:
http://zxpress.ru/article.php?id=1858
там в конце такое:

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

офигенская статья, чо :)

IanPo
29.05.2020, 20:57
Я могу лишь предположить, что NOPы как раз из-за кривых контроллеров и появились,
а старые версии TR-DOS тестировались на нормальном оборудовании, которое было у разработчиков.
А в чем вообще смысл копания в старых прошивках?

И еще момент:
для входа в TR-DOS адрес должен быть #3Dxx, #3C не пройдет аппаратно. Или так было в старых схемах?

MetalliC
31.05.2020, 04:17
Я могу лишь предположить, что NOPы как раз из-за кривых контроллеров и появились,
а старые версии TR-DOS тестировались на нормальном оборудовании, которое было у разработчиков.
фиг его знает почему так, зачем авторы добавили те NOP-ы и почему оно работает и без них на наших клонах.
можешь поизучать схемы оригинальных контроллеров тут http://zx-pk.ru/showpost.php?p=460139&postcount=56 или там https://cygnus.speccy.cz/popis_trdos-schema.php

если тыкать от-балды пальцем в небо - могу предположить, что D7 (буфер шины данных, 74LS245 ~аналог 555АП6, появившийся в оригинальной схеме V5 и типично отсутствующий в наших клонах), может вносить какую-то задержку выдачи данных на шину. но это не точно (с)


А в чем вообще смысл копания в старых прошивках?
типа цифровая археология :) в частности я щас на досуге ковыряюсь и делаю эмуляцию всех этих разновидностей бета-дисков в MAME, из любопытства, ну и "шоб было".
а так - всё это по сути древний хлам, вне зависимости от версии.


И еще момент:
для входа в TR-DOS адрес должен быть #3Dxx, #3C не пройдет аппаратно. Или так было в старых схемах?
у каждой версии была своя схема/плата.

add: у родного Beta-128 был режим совместимости, смотри на схеме по ссылке выше, активировался переключателем S1

NOTES:
1. R8, R9, VD8 provide compatibility with software on addresses #3C00/#3C03 (15360/15363 dec.) and are not installed on some PCBs.
но в наших клонах это выпилили.

ZXMAK
09.06.2020, 05:51
если мне не изменяет склероз, в некоторых вариантах мейджика бывали проблемы с дребезгом кнопки и длительностью импульса, а не переключением ПЗУ.

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

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

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

MetalliC
09.06.2020, 08:21
не, меджик то отдельная тема. Там проблема встречалась именно с переключением пзу в момент когда была замаплена обычная пзу бейсика, а процессор начинал выборку из окна перехода в пзу трдос.
странненько, в оригинальных девайсах мейжик срабатывает лишь в моменты доступа процессора к ОЗУ (нажата_кнопка && /MREQ==0 && (A15|A14)). а если код выполняется в ПЗУ и ничего не читает/пишет из области >4000 - жми кнопку хоть до усрачки, никакой магии не будет :)

но дальше мутноватая схема на 2х одновибраторах - один генерит /NMI а другой переключает ПЗУ, почему сделано именно так - я хз.

MetalliC
16.07.2020, 19:50
но связан он был с тем что не на всех контроллерах происходило корректное чтение первого байта сразу в момент выборки пзу трдос.
у меня есть другая теория, более прозаичная :)

в схемах многих дисковых интерфейсов для спектрума с активацией при исполнении команд по определенным адресам часто используется синхронное переключение триггера "DOSEN" по переднему фронту /M1 или /MREQ (при переходе с низкого уровня в высокий, заведенному на CLK триггера и дешифрованному адресу на вход D триггера), то есть переключение происходит уже после выборки кода команды из памяти.

я бы лично поставил на то, что инженеры из TR подсмотрели реализацию у конкурентов и сперва сделали по такому же принципу, и сделали прошивку с учетом этого дела с NOP-ами, но позже упростили схему и сделали асинхронное вкл/выкл через /S и /R триггера, как оно и есть на всех известных на данный момент схемах, с "мгновенным" переключением без задержки, а уже не нужные NOP-ы так и оставили.