ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
К сожалению, нет. Не было такого API. Где-то в коде TR-DOS был фрагмент OUT(C),A: RET. С его помощью решался вопрос записи в порты. Но для чтения портов свистопляска требовалась практически со всеми, а особенно - IN #1F. Считать #1F, да без побочных эффектов - это было тайное искусство. Исторически разные люди решали эту задачу по-разному, с большим или меньшим успехом.
Вот моя карта точек входа в TR-DOS V5.03 из дискового драйвера (radisk), которую я взял из публикации "Low-level disk driver" в каком-то из журналов, то ли ZX-Ревю, то ли ZX-Format, то ли уже не помню:
И, для сравнения, их же реализация в случае "открытого" доступа к портам контроллера:Код:OUT_C_A: PUSH HL LD HL,2A53H EX (SP),HL JP 3D30H DMA_RD: PUSH HL LD HL,3FD5H EX (SP),HL JP 3D30H DMA_WR: PUSH HL LD HL,3FBAH EX (SP),HL JP 3D30H WT_IRQ: PUSH HL LD HL,3FE5H EX (SP),HL JP 3D30H IRZ: LD HL,3F33H PUSH HL JP 3D30H IN_1F: PUSH HL PUSH BC PUSH DE XOR A LD C,3FH CALL OUT_C_A LD A,0AH LD C,05FH CALL OUT_C_A LD D,01H CALL IRZ CALL GET_POS LD C,3FH CALL OUT_C_A LD A,B POP DE POP BC POP HL RET
Что еще важно: подпрограммы DMA_RD и DMA_WR (прием и передача данных чтения и записи сектора) должны были вызываться именно те, что были в TR-DOS. Попытка реализовать тот же функционал на других функциях доступа к портам терпела неудачу: не хватало скорости процессора.Код:OUT_C_A: OUT (C),A RET DMA_RD: LD B,4 DRD1: IN A,(0FFH) AND 0C0H JR NZ,DRD2 INC DE LD A,E OR D JR NZ,DRD1 DJNZ DRD1 RET DMA_WR: LD B,4 DWR1: IN A,(0FFH) AND 0C0H JR NZ,DWR2 INC DE LD A,E OR D JR NZ,DWR1 DJNZ DWR1 RET WT_IRQ: IN A,(0FFH) AND 0C0H JP Z,WT_IRQ RET M DRD2: INI JP WT_IRQ DWR3: IN A,(0FFH) AND 0C0H JP Z,DWR3 RET M DWR2: OUTI JP DWR3 IN_1F: IN A,(1FH) RET
Вот весь мой драйвер дисководаradisk.zip.
ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet
ZXMAK, любое изменение данных ПЗУ - потенциальный "затык" с тем ПО, которое использует фиксированные "точки входа", либо конкретные значения из него.
Когда есть, но не знаешь где - это все равно, что нету.
насколько помню, в ходу были много разных версий. Наиболее популярная была 5.04T, также часто встречалась 5.03. Но даже с одинаковой версией были разные модификации. Стандартные процедуры были у всех одинаковые. На некоторых версиях действительно были проблемы с загрузкой некоторого софта, если правильно помню - проблемы были с официальной 5.03. Но такого софта было немного.
да, я помню это. Детектирование версии использовалось во многих загрузчиках использующих прямое обращение к вг93... Помню даже вырезал понравившийся код инициализации процедур из какой-то демки и использовал его, даже не задумываясь на каких версиях он работает, на каких нет.
Последний раз редактировалось ZXMAK; 23.08.2024 в 20:15.
ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet
Barmaley_m(24.08.2024)
Такие образы TR-DOS появились, причем почти сразу. Уже в хакерской версии TR-DOS 5.04T (от Алексея Скоробогатова, кажется) были такие точки входа.
Но для софта это не означало, что можно пользоваться такими точками. Всегда был шанс, что у пользователя стоит фирменная TR-DOS v5.03 или даже v5.01. И что тогда? Тогда софт должен был или использовать универсальные точки входа, работающие на всех версиях; или детектировать версию и использовать подходящие для нее точки входа. Это лишь усложняло программу, без какой-либо практической пользы.
Поэтому сделать "стандартный образ" возможности на самом деле не было.
Что любопытно: TR-DOS v5.01 на практике почти нигде не встречалась. Точки входа в нее существенно отличались от v5.03. Большинство программистов не рассчитывало свой софт на работу с ней. Были такие, кто пытался детектировать версию TR-DOS (Николай Родионов в своей DCU, например) и в случае неудачи предлагал пользователю выбрать базовую версию (5.01 или 5.03). Был еще подход к детектированию базовой версии по ослабленным признакам - проверялись именно адреса точек входа. Так делал ASC в своем ASC Sound Master. Тот Спектрум, на котором работал ASC, имел именно TR-DOS v5.01. Наверное, 5.01 была у тех, кто среди первых подключал контроллер дисковода к Спектруму. Было это до начала массового распространения контроллеров в СНГ.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)