Важная информация

User Tag List

Показано с 1 по 8 из 8

Тема: Формат MAGIC-файлов

  1. #1
    Administrator Аватар для CityAceE
    Регистрация
    13.01.2005
    Адрес
    г. Владивосток
    Сообщений
    2,998
    Благодарностей: 1285
    Записей в дневнике
    5
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Формат MAGIC-файлов

    Возникла необходимость выяснить точный формат MAGIC-файла для 48K и 128K. Однако, вот так сходу найти не смог. Поможете?

    P.S. Пока располагаю только такой информацией из книги Ю. Поморцева "TR-DOS для профессионалов и любителей", но её не достаточно:
    Код:
    З А П И С Ь   П Р И   П О М О Щ И   "M A G I C   K E Y"
    
    	При помощи  кнопки  MAGIC  практически  любая программа может
    быть записана на дискету в любой момент времени, и затем запущена
    с того же места.  Неважно,  как она загружалась первоначально - с
    магнитной ленты или дисковода. На диск записывается полностью все
    ОЗУ,  а также содержимое регистров процессора.  Естественно,  что
    дисковое пространство при этом расходуется не самым экономным об-
    разом, хотя для многих игрушек со сложными загрузчиками или кодо-
    выми блоками длиной более 41 KB,  использование MAGIC вполне  оп-
    равдано  (тем более,  что  существуют  программы  для  приведения
    MAGIC-файлов в нормальный вид).
    
    	Работа процедуры MAGIC основана на немаскируемом  прерывании,
    которое в основном ПЗУ не используется из-за ошибки. В контролле-
    ре BETA нажатие кнопки MAGIC переключает ПЗУ на DOS и вырабатыва-
    ет импульс немаскируемого прерывания. Получив сигнал NMI, процес-
    сор немедленно откладывает все остальные  дела, заносит  на  стек
    адрес  следующей  команды  (для  возврата) и переходит  на  адрес
    #0066, и далее на подпрограмму обработки (см.адреса ПЗУ).
    
    	Чтобы  сохранить  значение регистров (AF, ВС, DE, HL, IX, IY,
    ВС', DE', HL', AF', I, R), их заносят в стек .  Значение триггера
    прерывания  IFF  запоминается вместе с регистром  I как флаг P/V.
    Глубина стека составляет 13 слов,  а с учетом работы самой проце-
    дуры записи  -  21 слово (от значения SP в момент нажатия MAGIC).
    Запись начинается с сохранения первых 512 байт экранной области в
    2-х секторах нулевой дорожки (#0A, #0B).  Затем в эту область эк-
    рана считывается системный сектор дискеты  и организуется рабочая
    область DOS (стек).  Далее определяется  начало свободной области
    на диске и происходит запись всего ОЗУ, начиная с экрана; наличие
    свободного места на диске не проверяется. В каталоге записывается
    файл с именем  "@",  типом  "С";  в поле адреса указывается адрес
    стека (значение SP). После записи (если она прошла успешно, и ес-
    ли был включен режим DOS),  состояние программы восстанавливается
    так же, как при запуске MAGIC-файла. Процедура MAGIC записывает в
    последнюю ячейку  буфера принтера  23551 (#5BFF) - #C9 (RET), а в
    системные ячейки  сканирования  клавиатуры  23552 (#5C00) и 23553
    (#5C01) соответственно #16 и #10.
    	В фирменной инструкции указывается,  что для некоторых  прог-
    рамм имя файла должно начинаться с "$". Этот символ означает, что
    при запуске будет установлен режим прерываний IM2.  Программа  не
    может самостоятельно определить, какой тип прерываний был  до за-
    писи, поэтому необходимо проверить, работает ли программа с обыч-
    ным именем, и если нет - поставить в начале имени символ "$".
    
    	Для записи  при  помощи  MAGIC желательно использовать чистый
    диск, так как в случае аппаратного сбоя или особенностей програм-
    мы, диск может быть испорчен.  Некоторые программы не имеют стека
    достаточной глубины  (42 байта),  и при записи стек затирает саму
    программу.  Иногда  успешная  запись  зависит  от момента нажатия
    MAGIC, ведь при работе программы глубина стека меняется;  так что
    при неудаче  стоит попробовать  повторно.  Проверку области стека
    или появления байта #C9 по адресу #5BFF можно использовать специ-
    ально для защиты от применения MAGIC (попробуйте, например, запи-
    сать MAGICом программу DCU 2.02).
    	При загрузке MAGIC-файла на экране также, как при записи, ор-
    ганизуется рабочая область для DOS. Из каталога диска считываются
    параметры файла. Значение из поля адреса (байты #09,#0A) заносит-
    ся в регистр SP.  В зависимости от первого байта имени устанавли-
    вается  тип прерываний  IM1  или  IM2,  если имя начинается с "$"
    (прерывания  пока  запрещены).  Далее из стека  восстанавливаются
    значения регистров в порядке, обратном записи (см.выше). Упрощен-
    но процедура восстановления выглядит следующим образом:
    
    	POP AF
    	LD R,A
    	POP AF	  ; вектор прерываний I и триггер прерывания 
    	LD I,А
    	EX AF,AF'   ; IFF (как значение флага P/V) сохраняется в AF'
    	POP AF	  ; восстановление альтернативных регистров
    	POP HL
    	POP DE
    	POP BC
    	EXX
    	POP IY	  ; восстановление основных регистров
    	POP IX
    	POP HL
    	POP DE
    	POP BC
    	EX AF,AF'   ; восстановл. флага P/V, содержащего значение IFF
    	JP PO,ADR
    	EI		  ; разрешить прерывания, если P/V=1
    	POP AF
    	RET		 ; переход по адресу, который был в момент NMI
    
    	Существуют программы, которые  преобразуют MAGIC-файл в обыч-
    ный, с BASIC -загрузчиком для ленты или диска.  В них для запуска
    используется аналогичная процедура.
    С уважением, Станислав.

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

  3. #2
    Activist Аватар для Jukov
    Регистрация
    03.12.2005
    Адрес
    Серов
    Сообщений
    471
    Благодарностей: 65
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Лучше возьми "Полный дизассемблер TR-DOS" Федина, там фсё подробно расписано.
    Кворум-192, Кворум-128 CP/M, Кворум-64, ZS-Scorpion 256 Turbo+&Caro ZX_MC, Мастер48К

  4. #3
    Veteran
    Регистрация
    22.02.2005
    Адрес
    Украина, Харьков
    Сообщений
    1,523
    Благодарностей: 107
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Хорошая информация была в ZX-Revu за 96-97 годы (начало в печатных журналах, окончание в электронных)!

  5. #4
    Administrator Аватар для CityAceE
    Регистрация
    13.01.2005
    Адрес
    г. Владивосток
    Сообщений
    2,998
    Благодарностей: 1285
    Записей в дневнике
    5
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Да нет! Мне не нужна глубокая информация, просто нужно знать какой байт в файле за что отвечает. И всё! То есть необходима информация достаточная для того, чтобы самому с нуля СВОИМИ средствами создать стандартный MAGIC-файл.

    Неужели ни у кого нет? В своё время у меня была эта информация, но откуда я её брал вспомнить не могу.
    С уважением, Станислав.

  6. #5
    Veteran Аватар для jtn
    Регистрация
    15.01.2005
    Адрес
    Kievska Rus
    Сообщений
    1,147
    Благодарностей: 5
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  7. #6
    Administrator Аватар для CityAceE
    Регистрация
    13.01.2005
    Адрес
    г. Владивосток
    Сообщений
    2,998
    Благодарностей: 1285
    Записей в дневнике
    5
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от The Exploited
    взять эмуляторный дебаггер да отладить трдос.
    Да это понятно. Просто хотелось пропустить этот этап и тем самым съэкономить себе время.
    Цитата Сообщение от The Exploited
    вообще непонятно зачем нужен именно магикфайл
    Нужен!
    С уважением, Станислав.

  8. #7
    Guru
    Регистрация
    25.01.2005
    Адрес
    Miass, Chelyabinsk region
    Сообщений
    4,083
    Благодарностей: 924
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от CityAceE
    чтобы самому с нуля СВОИМИ средствами создать стандартный MAGIC-файл.
    хм.. ну, с 48к все же понятно? или что? вроде там написано всё..

  9. #8
    Master
    Регистрация
    27.04.2005
    Адрес
    Москва
    Сообщений
    869
    Благодарностей: 3
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    То что сейчас помню навскидку:

    1. Головной файл - "@"
    2. Файлы страниц - "@n", где n - номер страницы.
    3. Я не помню, где сохраняется текущая банка ОЗУ. Она определяется методом подсчета CRC текущей банки, затем перебором банок и сравнением CRC. Если банка содержит только 00, то она считается неиспользуемой и не сохраняется. Регистры сохраняются на стеке в определенном порядке. SP после этого пишется, кажется, в параметр Start файла. Есть некоторые грабли:
    1. Цвет бордюра устанавливается равным содержимому системной переменной BORDER из бейсика (кажется так она называется).
    2. Делается некая весьма условная проверка на валидность системных переменных, и при ее прохождении текущая банка также ставится из системной переменной бейсика-128.

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

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

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

Похожие темы

  1. формат файлов PASM 3.0
    от elf/2 в разделе Утилиты
    Ответов: 4
    Последнее: 31.08.2006, 11:42
  2. фильтр Magic Blur
    от E.Sokol в разделе Эмуляторы
    Ответов: 2
    Последнее: 23.03.2006, 12:13
  3. концовка Heavy of the Magic
    от Максагор в разделе Игры
    Ответов: 6
    Последнее: 18.08.2005, 20:54
  4. Формат файлов Hrust 1.3
    от Sinus в разделе Программирование
    Ответов: 17
    Последнее: 18.08.2005, 12:43
  5. Компьютер Magic Box
    от gexor в разделе Unsorted
    Ответов: 0
    Последнее: 03.03.2005, 09:31

Ваши права

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