А реально существовали программы, которые детектили тип цветной приставки по содержимому ПЗУ? Или это просто теоретические размышеления? (У меня в emu80 при переключении 2/4/8-цветных режимов содержимое ПЗУ, естественно, не меняется...)
А реально существовали программы, которые детектили тип цветной приставки по содержимому ПЗУ? Или это просто теоретические размышеления? (У меня в emu80 при переключении 2/4/8-цветных режимов содержимое ПЗУ, естественно, не меняется...)
Вопрос правомерный. Возможно из-за детектирования наличия цвета по коду ПЗУ, мы видим некоторые программы лишь в монохроме. Т.к при несоответствующем ПЗУ из-за автонастройки они работают без цвета.
Кстати, вот именно поэтому, я и призывал включить в эмуляторы возможность оперативной замены ПЗУ. В моём эмуляторе Ориона (для MSDOS) в встроенном командном отладчике специально есть директива R - рестарт, как бы нажатие на кнопку сброс. Если ввести R с параметром не равным нулю, то грузится альтернативный ROM-BIOS (файл с именем ROM_F800.ALT, вместо обычного ROM_F800.DAT). Это удобно, если надо убедиться, что программа не работает с конкретным ПЗУ.
А вообще, очень сомнительно, что оригинальные программы из исторического периода используют такой трюк. Т.к тогда 8-ми цветных программ просто не было. Потому-что схема на 8 цветов была опубликована лишь в августе 1990, когда уже распространилась мода собирать ZX и появился Орион, из-за чего популярность Специалиста в городах фатально упала. А так как программисты-любители были сосредоточены именно в крупных городах, то их число мгновенно упало до нуля.
Потому основная масса пользователей Специалиста была с периферии, но среди них не было программистов. Потому что там лишь изолированые пользователи, лишённые возможности обмена опытом с другими и оттого не имеющие моральной поддержки и доступа к информации. Да и техническая грамотность населения ниже. Именно поэтому 99% программ Специалиста в XX веке написано именно в 80-тые. А в 1991 появился Специалист-MX, где цвет совсем иной, сигнал НП иной и ПЗУ другое. Потому новых игр с 1991 года вообще не появилось ни одной. Оцвечиванием старых программ Специалиста под 8 цветов и написанием новых занялись уже только в этом веке
А точно узнать ответ на этот вопрос можно только практически, - проверкой всех монохромных программ с модифицированным ПЗУ.
Последний раз редактировалось barsik; 06.03.2018 в 02:53.
Чтобы детектили как? Совсем не понял Вашу логику.Сообщение от barsik
В позапрошлом посте я утверждал, что так делать неправильно и вредно. И с этим все согласились. А в предыдущем посте я предположил, что так никто никогда и не делал. Т.е до сих пор, как и положено, не было привязки программ к конкретному коду в ПЗУ. Зачем же уже в новое время заниматься вредительством и сознательно портить имеющиеся программы?
Да и какой в этом смысл? Существующим эмуляторам этим Вы не навредите. Да и тем пользователя, что будут прогонять Ваши программы привязанные к конкретному ПЗУ это тоже не навредит, т.к у них уже есть Ваши старые программы в нормальном виде.
Вам что так сильно не нравятся прерывания, что требуется любой ценой заблокировать их появление на Специалисте? Мне тоже не нравятся прерывания, но я понимаю, как будет правильно. По-моему разумно, наоборот, бороться с использованием схемы начального пуска использующей выход INTE.
Я вообще не вижу проблемы, что её надо решать привязкой программ к коду ПЗУ и тратить на цели обнаружения схемы цвета прерывания.
Да, это неприятно, что "горе-изобретатели" 8-ми цветной схемы сдуру не только загубили выход INTE, привели к тому, что команда DI, что есть в многих фирменных программах приводит к завису, но и сделали такой цвет несовместимым с базовым Специалистом, хотя всем ясно, что любые доработки должны быть совместимы (а тем более до такой степени, что вызывают улет программ).
Да, неприятно, что в реале запуск 8-ми цветной программы на Специалисте с моно или 4-х цветным адаптером приводит к улёту. Но это проблема только для идиотов, которым лень сделать схему сброса НП такой же как в РК86 по сигналу /WR процессора, а не отдельным программно управляемым сигналом.
Я не вижу необходимости ни детектировать цвет, ни вводить в игры вопросы типа "А у тебя не будет зависа, если эта программа использует 8 цветов?". Когда у пользователя 8-ми цветные игры будут улетать, он быстрее сделает себе правильный сигнал НП. Кстати, посмотрите, многие игры для XT, при старте задают вопросы о типе адаптера и никто не обиделся. Так, что проще всего ввести в игры вопрос при старте игры.
Сейчас все эмуляторы Специалиста не эмулируют ни бит PC4, ни INTE. В противном случае, в них по DI или в цветных программах происходил бы улёт. И так это надо и оставить.
И если уж так хочется детектировать 8 цветов, то вот Вам решение проблемы.
Программно нельзя определить наличие 8-ми цветов в схеме цвета, но зато я знаю как грамотно детектировать незанятость бита PC4 под сигнал начальный пуск, чего достаточно для того, чтобы быть уверенным, что при запуске 8-ми цветной программы не произойдёт улёт. А то, что пользователь не увидит цветов, если нет соответствующей цветовой приставки, то это его проблемы.
Для контроля сигнала НП надо сознательно вывести единицу на бит PC4, что отключит всё ОЗУ из адресного пространства и включит вместо него ПЗУ.
Для детектирования использования бита PC4 в качестве НП, разместим в ОЗУ по адресу 024B, следующую программу:
и сделаем CALL на адрес 24B.Код:. A024B: LD A,82H LD (0FF03H),A CPL LD (0FF02H),A A0254: RET
При этом команда RET стоящая после команды LD (0FF02H),A, что выводит в PC4 единицу, расположена на адресе 0254. По включению в адресное пространство ПЗУ, на этом адресе оказывается подпрограмма C254, которая во всех разновидностях ПЗУ Специалиста одинакова: там записывается 82H по адресу FF03, что программирует весь порт C на вывод, делая PC4=0 и отключая тем самым ПЗУ.
Там такой код (когда ПЗУ включено с нуля):
Таким образом, если ПЗУ включится вместо ОЗУ, то будут исполнены эти 3 команды, если же нет, то будет просто RET командой из ОЗУ. Если при возврате в регистре A содержится 82H, значит бит PC4 ППА занят на начальный сброс и 8-ми цветную программу стартовать нельзя.Код:. A0254: LD A,82H LD (0FF03H),A RET
Вышеприведённую программу можно сократить до 3-х команд (с'экономив 4 байта), если задать режим ППА, где порт C работает на ввод. При этом сигнал на выходе PC4 тоже станет единицей (висящий в воздухе TTL-вход является единицей).
Таким образом нет проблем.
Вообще полезно было бы программно включать ПЗУ с адреса 0, но только до адреса 8000, хоть битом PC4, хоть выходом INTE. Чтобы ПЗУ включалось не на всё адресное пространство, а только в области ниже 8000, достаточно двух диодов. Тогда можно иметь 32 кб ПЗУ и разместить в нём набор подпрограмм для GUI, кучу оконных экранных драйверов, разные DOS и другие резидентные программы. Тогда занятие выхода INTE хотя бы приносило пользу.
Полезно выделить этот вопрос о сигнале НП и борьбы с зависом при запуске 8-ми цветных программ на монохромном и 4-х цветном Специалисте в отдельную тему.
Последний раз редактировалось barsik; 06.03.2018 в 14:22.
У меня в основном спортивный интерес (хочу выкрутится и обойтись без добавления/замены файла пзу в эмуляторах). Старые версии игрушек (без детекта) в любом случае останутся.
Обновил версию эмулятора (в первом посте) до 0.15g.
- Поддерживаются цветные режимы 4 и 8 цветов
- Сканлинии теперь можно отключить
- Описание новых режимов в первом посте
- В архив добавлены две цветные игры (а некоторые из тех, что были, тоже стали цветными).
Не сделано:
- ВВ55 все еще не обнуляет порты после записи в управляющий регистр. Т.к. нет тестов, проведенных на реале.
Какие нужны тесты на реале? Могу что-то проверить на Z80.
В чём заключается неясность? При задании режима порта на вывод, на его выходах сразу возникают нули и они же оттуда и читаются..
Почитал описание клавиатуры. Не очень понял что там с клавишей <НР>. В любом случае нужна полноценная эмуляция или возможность её включить. Судя по тексту, у Вас там полная или частичная "химия" с перехватом входных точек, хотя тогда непонятно как работают игры с прямым доступом к матрице.
Непонятная фраза.
Не понял тут, что значит термин "Специалисту будет передано" и как Вы узнаете, что "Специалист уже понял", что Shift отпущен? Куда передано? Передано в рег.А на выходе из подпрограмм опроса клавиш, или как положено, имитировано соответствующим битом порта при его чтении.
На всякий случай напомню как читается клавиатура. Очень простая подпрограмма опроса выдаёт код буквенного символа в нижнем регистре (т.е в диапазоне 40...5F). После выхода из опроса делается LD A,(PB) : AND 00000010B, и если получится 0 (что значит, что клавишу <НР> держат), то для символов с кодом более 40H и менее 80H делается XOR 20H (на самом деле прибавляется 20H, но грамотнее XOR), что переводит код в верхний регистр.
По поводу удобства на PC-клавиатуре. Я эту проблему решал в 90-тые в эмуляторе ОРИОНА. Сделал соответствие клавиш по латинским надписям. Остальные клавиши по положению на РК-клавиатуре. Получилось и понятно и привычно. И решил задачу полноценного использования PC-клавиатуры в эмуляторе в программах специально странслированных для работы в эмуляторе. Тогда совпадают вообще все надписи. Это достигается тем, что в программе определяется, что это эмулятор и тогда по таблице коды возвращаемые п/п-ммой F81B перекодируются.
Почему Вы клавишу TAB на PC-клавиатуре отдали под <ПВ>? Клавиша TAB должна быть клавишей <TAB>. Как иначе пользоваться редактором? А вот клавиша <ПВ> вообще, наоборот, совсем не нужна. Клавиша повтор была на антикварных ЭВМ (например на Apple-II первых моделей). Видимо А.Волков с какой-то рэтро-ЭВМ это и заимствовал.
В нормальных мониторах Специалиста и драйверах сделан нормальный автоповтор, отчего клавиша <ПВ> вообще не используется. Алгоритм автоповтора такой. Если клавишу нажать, то сразу же возвращается код (именно по нажатию, а не отпусканию). А если удерживать клавишу более 0.75 секунды, то начинается автоповтор, быстрая выдача кода клавиши с периодом в 0.15...0.20 секунды.
Скрытый текст
По поводу клавиатуры, у Специалиста проблема с отсутствием клавиши <Control> необходимой в CP/M. Тут есть два выхода. Если есть DOS с дисководом, то МГ-вход не нужен. Тогда, что более удобно, клавиша <Control> вешается туда (на PB0). Если же МГ-вход нужен, то в качестве <Control> приходится использовать клавишу <НР>.
Причём одновременно она же используется и в качестве <РУСЛАТ>. Тогда нажатие и отпускание <НР> меняет флаг RUSLAT драйвера. Если этот флаг выставлен, и нажата буквенная клавиша, то выдаются русские буквы КОИ-8 с кодами C0...FF. Если же удерживая <НР> нажать буквенную клавишу, то возращается код минус 40H, т.е <НР> при этом работает как <Control>. Но при этом неудобно вводить заглавные буквы, т.к клавиши SHIFT нет.[свернуть]
Последний раз редактировалось barsik; 08.03.2018 в 05:22.
barsik, на клавиатуре PC знак @ нажимается с шифтом, а на клавиатуре Специалиста - без. При нажатии Shift на клавиатуре PC в эмулятор передается это нажатие. Если потом нажимается "2" (@), то нужно сначала передать в эмулятор отжатие шифта, а уж потом саму "@". Titus говорит о том, что сразу это сделать не получается, нужна пауза. Похоже, что у меня из-за того же не работает как положено этот режим в "Специалисте", хотя в РК-86, например, все отлично.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)