Вход

Просмотр полной версии : ROM-диск на Скорпионе



Ewgeny7
03.12.2008, 17:00
Доброго дня всем сенсеям :v2_wink2:
Не знает ли кто случайно, как организован РОМ-диск в Скорпе?
Имею ввиду как располагаются блоки программ, каким образом компьютер "видит" список этих программ.
Хотелось бы маленько обновить содержимое ПрофПЗУ, большинство прошитых прог мне просто не нужны, а на их место запихнуть что-нибудь попользительнее.

Black_Cat
26.03.2009, 04:59
http://dlcorp.ucoz.ru/forum/5-363-1

spensor
26.03.2009, 11:10
Не знает ли кто случайно, как организован РОМ-диск в Скорпе?
Имею ввиду как располагаются блоки программ, каким образом компьютер "видит" список этих программ.
Боюсь что инфа отлинкованная Black_Cat не сможет помочь полностью решить задачу. В деле выступают скорпионовые magic-файлы, с ними самими еще надо разбираться. Но а в целом Black_Cat, deathsoft и Савелий респект.

savelij
26.03.2009, 17:24
Боюсь что инфа отлинкованная Black_Cat не сможет помочь полностью решить задачу. В деле выступают скорпионовые magic-файлы, с ними самими еще надо разбираться. Но а в целом Black_Cat, deathsoft и Савелий респект.

А в чем может быть проблема с этими магик-файлами? Может стоит разобраться с их форматом? Или в чем проблема?

spensor
26.03.2009, 18:51
А в чем может быть проблема с этими магик-файлами? Может стоит разобраться с их форматом? Или в чем проблема?
Ну это же не стандартные магики? Дамп регистров наверняка по другому организован. Имхо, трубуются дополнительные данные.

savelij
26.03.2009, 19:01
Ну это же не стандартные магики? Дамп регистров наверняка по другому организован. Имхо, трубуются дополнительные данные.

Ну если у тебя Скорп, то зачем тебе это? А у кого скорпа нет тоже вроде и ни к чему.

spensor
26.03.2009, 19:19
Ну если у тебя Скорп, то зачем тебе это? А у кого скорпа нет тоже вроде и ни к чему.
Ну да ладно. Вон ewgeny7 с практической точки зрения интересуется. Я с академической:)

savelij
26.03.2009, 20:08
Ну да ладно. Вон ewgeny7 с практической точки зрения интересуется. Я с академической:)

Ну если так, то немного попозже посмотрю. По формату ром диска я ковырял прошивку GMX еще в 98 кажется году. Другого ничего не было. И любые изменения загонял в обратную, благо для этого не нужен был программатор. Если уж так интересно расковыряю и остальное.

Ewgeny7
27.03.2009, 12:02
Ну это же не стандартные магики?
Конечно нестандартные. Но создать их на Скорпи легче чем обычный магик.
В них отсутствуют ошибки стандартного магика.
А вот куда и как их разместить?

spensor
27.03.2009, 13:20
А вот куда и как их разместить?
Вот тут

Страницы 0-3 стандартная прошивка скорпиона
Страница 4 - кусок монитора (или анализатора)
Страница 5...(rom disk) (директория)
Заголовок страницы (справедливо для каждой страницы, начиная со страницы 4)
0x70 - смещение начала ром диска внури каждой страницы (в блоках по 256 байт)
0x71 - количество свободных секторов в странице
0x72 - смещение каталога (в блоках по 256 байт), либо 0 - если каталог отсутсвует

Формат каталога (каждый элемент 16 байт)
0..13 байт - имя файла (в последнем символе установлен старший бит)
14 - смещение файла в секторах по 256 байт от начала страницы
15 - номер страницы начала файла

Файлы - это то что скинуто по save... из пункта монитора save & load
черным по белому и написанно:
"14 - смещение файла в секторах по 256 байт от начала страницы
15 - номер страницы начала файла"

Взято отсюда http://dlcorp.ucoz.ru/forum/5-363-1

У меня появилось несколько вопросов по формату.
Каталог на файлы ROM-диска один или у каждой страницы свой?
Есть ли идентификатор конца каталога?
Где в дискрепторе файла заложенна длина, адрес и страницы ОЗУ в которые будет грузится магик? Полагаю это прописанно внутри магика.

savelij
27.03.2009, 15:20
У меня появилось несколько вопросов по формату.
Каталог на файлы ROM-диска один или у каждой страницы свой?
Есть ли идентификатор конца каталога?
Где в дискрепторе файла заложенна длина, адрес и страницы ОЗУ в которые будет грузится магик? Полагаю это прописанно внутри магика.

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

spensor
08.12.2009, 17:03
Дабы не создавать отдельную тему, ибо вопрос чуть шире заданного в топике. Вопрос скорее к savelij, так как он один из немногих кто хоть немного понимает тайны древних в лице МОА, но возможно кто-то еще в теме. Какие в ПрофПЗУ есть защиты от модификации прошивки? Проскакивала информация, что прошивка при инициализации просчитывает CRC и при несоответствии дальше отказывается работать.
Стоит задача доработать пару-тройку процедур в ПрофПЗУ для расширения функционала, хотелось бы знать где грабли и можно ли их обойти. Собственно, это относится и к модификации ROM-диска - народ пытался, но по слухам заменить содержимое не удалось, возможно из-за пресловутого CRC.

savelij
08.12.2009, 18:17
Дабы не создавать отдельную тему, ибо вопрос чуть шире заданного в топике. Вопрос скорее к savelij, так как он один из немногих кто хоть немного понимает тайны древних в лице МОА, но возможно кто-то еще в теме. Какие в ПрофПЗУ есть защиты от модификации прошивки? Проскакивала информация, что прошивка при инициализации просчитывает CRC и при несоответствии дальше отказывается работать.
Стоит задача доработать пару-тройку процедур в ПрофПЗУ для расширения функционала, хотелось бы знать где грабли и можно ли их обойти. Собственно, это относится и к модификации ROM-диска - народ пытался, но по слухам заменить содержимое не удалось, возможно из-за пресловутого CRC.

Контролируется только страница Басика128 и страница самого монитора. РОМ диск можно менять как угодно, он не контролируется. Почему у кого-то не получилось модифицировать РОМ диск вопрос интересный. Скорее всего не правильно расположили блоки или в директории РОМ диска что то не то сделали.

AmoNik
08.12.2009, 18:23
Ну если так, то немного попозже посмотрю. По формату ром диска я ковырял прошивку GMX еще в 98 кажется году. Другого ничего не было. И любые изменения загонял в обратную, благо для этого не нужен был программатор. Если уж так интересно расковыряю и остальное.

В 98 году ещё не было защиты на дискете с прошивкой? У меня GMX появился гораздо позже и любая моя попытка изменить хотя бы один байт на диске приводили к ругани программатора на этапе проверки содержимого диска перед собственно программированием ПЗУ.
Я нашёл где лежат контрольные суммы, но непонятно как они рассчитываются.

Ewgeny7
08.12.2009, 18:27
Контролируется только страница Басика128 и страница самого монитора.
Именно эти страницы и нужны для модификации.

savelij
08.12.2009, 18:48
Именно эти страницы и нужны для модификации.

Вот версия с прибитым ЦРЦ. Можно вносить изменения. Если что еще посмотрю.

savelij
08.12.2009, 18:55
В 98 году ещё не было защиты на дискете с прошивкой? У меня GMX появился гораздо позже и любая моя попытка изменить хотя бы один байт на диске приводили к ругани программатора на этапе проверки содержимого диска перед собственно программированием ПЗУ.
Я нашёл где лежат контрольные суммы, но непонятно как они рассчитываются.

Дискета для обновления ГМХ это вообще отдельная песня. Там контролируется все что будет прошито, да бы не прошить то что убъет ГМХ.

spensor
08.12.2009, 18:57
Вот версия с прибитым ЦРЦ. Можно вносить изменения. Если что еще посмотрю.
Понимаю что адреса проверялки CRC от версии к версии меняются, но нельзя ли указать примерное местоположение, а возможно и привести листинг дизасма этой процедурки?
И кстати, говорилось, что там "очень все страшно замудренно зашифровано", так ли страшен черт? В прошивке GMX проверка CRC или другие защиты присутствуют?

Дискета для обновления ГМХ это вообще отдельная песня. Там контролируется все что будет прошито, да бы не прошить то что убъет ГМХ.
Логично, потому что можно запросто спалить основную ПЛИС, настроив неверно конфигурацию пинов.

savelij
08.12.2009, 20:52
Понимаю что адреса проверялки CRC от версии к версии меняются, но нельзя ли указать примерное местоположение, а возможно и привести листинг дизасма этой процедурки?
И кстати, говорилось, что там "очень все страшно замудренно зашифровано", так ли страшен черт? В прошивке GMX проверка CRC или другие защиты присутствуют?

Гыы. Чем может быть страшен CRC16? Другого там нет. Вот кусок дизасма:

Кусок первый. В том РОМе что я выложил смещение от начала #9093. Это вторая страница если считать с нулевой.

CS_5_NONE: ; CODE XREF: CP_CURSOR_LEFT+18j
; CP_CURSOR_LEFT+26j
push af
ld hl, 0
ld b, h
ld c, 0FEh
ld (0E012h), hl
ld h, 5

CP_PAGE2: ; CODE XREF: CP_CURSOR_LEFT+45j
rst 28h ; проверка в Basic128 куска 500-600
add a, b
ld b, a
inc hl
ld a, h
sub 6
jr nz, CP_PAGE2 ; проверка в Basic128 куска 500-600
ld a, (loc_2BB2)
sub b ; сравнение с константой
jp nz, ERROR_CP_PAGE2 ;адрес #1093 этот переход надо забить нулями
call SET_TURBO_ONOFF

Кусок второй. Страница РОМа та же. Смещение от начала #B152.

CP_SUM_PAGE: ; CODE XREF: ROM:3158j
; DATA XREF: ROM:072Do
xor a ; проверка контрольной суммы страницы ПЗУ
ld l, a
ld h, a
ld bc, 0F6h
push bc
call sub_315A
inc hl
ld bc, 0Dh
call sub_315A
ld de, 0Ch
add hl, de
ld bc, 3EF0h
call sub_315A
pop hl
cp (hl)
jp z, TURBO_OFF ;адрес #3152 команду условного перехода заменить на безусловный (байт #CA заменить на #С3)
call sub_305B ; при ошибки зацикливание
jr CP_SUM_PAGE ; проверка контрольной суммы страницы ПЗУ

---------- Post added at 20:52 ---------- Previous post was at 20:49 ----------

Для ГМХ на дискете не ковырял. И не знаю что там. Возможно то же самое.

Ewgeny7
09.12.2009, 22:03
Вот версия с прибитым ЦРЦ. Можно вносить изменения. Если что еще посмотрю.
Большущее спасибо! Это то, что надо!

Ewgeny7
10.12.2009, 13:48
Попытка перенести снапшот в ром-диск не удалась.
Кстати, есть мнение, что в описании формата есть ошибка.
байт 0x71 - не кол-во свободных блоков, а наоборот, сколько блоков занято.
максимальное число - #3e (#40 - #2).
Пробовал запихать снапшот как ни странно, Фатала :)
Снап нормально работает.
Для РОМ-диска разбил снап на две части (удалив заголовок естесственно).
Максимальная длина одного куска для РОМдиска = 16384 - 512 служебных байт.
В заголовке сегмента ставил смещение минимальное, 02.
Второй кусок файла вставил в следующий сегмент РОМ, также с адреса 200, смещение указал.
В каталоге РОМ-диска добавил файл Fatall, указал номер банки и смещение.
Битики в именах подкорректировал.
Результат - в каталоге ПП файл появился, при запуске - цветные квадратики...
Обычных окошек с указанием загружаемых страниц ОЗУ не появляется.

---------- Post added at 13:48 ---------- Previous post was at 13:15 ----------

попробовал продублировать уже имеющийся в РОМ-диске файл (скопировал в другую банку ПЗУ, дописал другое название в каталоге). Работает...
Значит и фаталл вставлял вроде как правильно...

Дмитрий
10.12.2009, 15:59
ewgeny7, а пробовал снап из РОМа достать и запустить? Нет ли там секретов со снапами в РОМе?

Ewgeny7
10.12.2009, 17:21
ewgeny7, а пробовал снап из РОМа достать и запустить? Нет ли там секретов со снапами в РОМе?
Не, не пробовал. Там ещё надо будет заголок для TR-DOS изобретать. Несложно, но лень :)
Впрочем, по любому ждём (со spensor'ом) помощи Савелия :)

---------- Post added at 16:35 ---------- Previous post was at 16:22 ----------

Йопс... получилось :)
Нашел, в чем фишка!

---------- Post added at 17:21 ---------- Previous post was at 16:35 ----------

Не, не до конца :(
Файлы влезающие на одну страницу РОМ-диска работают.
Если приходится размазывать файл большего размера, на пару страниц - виснем.
гдебы узнать об особенностях размещения больших файлов?

savelij
10.12.2009, 18:24
Не, не пробовал. Там ещё надо будет заголок для TR-DOS изобретать. Несложно, но лень :)
Впрочем, по любому ждём (со spensor'ом) помощи Савелия

Выложи сюда снапшот, который пытаешься загнать в РОМу. Объясню что и как.

Ewgeny7
10.12.2009, 18:48
Выложи сюда снапшот, который пытаешься загнать в РОМу. Объясню что и как.
Вот и здорово :)

savelij
10.12.2009, 21:48
Вот и здорово :)

Вот короче 2 РОМа на базе того с прибитым ЦРЦ который чуть раньше выложил. Один с пустым РОМом, второй уже с фаталлом. Где какой думаю понятно.
Принцип укладки в РОМ диск. Сначала адреса. РОМ диск начинается с 4 страницы (страница это #4000 байт), сектор это всегда 256 байт. Получается такая табличка памяти:
04-#10000
05-#14000
06-#18000
07-#1C000 ну и так далее.
Поиск куда ложить всегда начинать со смещения #70 (смещение в секторах от начала страницы) и #71 (сколько секторов свободно!!!) Количество свободных секторов это всегда непрерывное пространство. Для той версии которую выложил смещение в странице 4 равно #0E. Получаем смещения от начала РОМа #10000+#E00=#10E00. Свободно в этой странице #32 сектора, то есть до конца страницы. Если файл не влезает, то переходим к следующей странице - номер 5. Смещение от начала страницы здесь #33, получаем #14000+#3300=#17300. Свободно секторов здесь #0D. И так далее. Самое главное следить что вбито по смещениям #70 и #71. В страницах где находится окно входа в тырдос РОМ диск располагается не до конца страницы. Как пример страница семь. Содержимое байтов #70 и #71 равно #25 #18 соответсвенно. То есть РОМ диск начинается с #25 сектора (смещение в странице #2500) и заканчивается в адресе #3CFF.

Ну вроде все расписал.

Ewgeny7
11.12.2009, 08:05
Спасибо, savelij!
Я как раз "втискивал" снап в конец 7-ой - начало 8-ой страницы. Оказывается, это по определению было обречено на провал. :)

(сколько секторов свободно!!!) Количество свободных секторов это всегда непрерывное пространство.
Пнятна.
Теперь займусь подборкой полезных прог для РОМ-диска.

Ewgeny7
11.12.2009, 15:34
Разобрался, заработало.
savelij, а как быть со снапами 128-го режима из нескольких файлов? просто запихивать один за другим, а в каталоге давать ссылку на головной файл?

---------- Post added at 15:34 ---------- Previous post was at 14:16 ----------

Всё, разобрался с многофайловыми :)

spensor
11.12.2009, 15:53
Всё, разобрался с многофайловыми
Ознакомь общество с "разборками"

Ewgeny7
11.12.2009, 17:25
Файлы снапшота вставляются один за другим, без разрывов. В каталоге указывается только первый файл.

Дополню информацию от Савелия - те самы три циферки по адресам 0x70 - 0x72 изменению не подлежат. Пользуемся ими так.
Например, топаем на страницу 4. Это адрес 0x10000. Смотрим на 0x10070 - 72.
там, к примеру, 02 32 00. Это означает, что на данной странице №4 под РОМ-диск отведено 32 блока памяти (по 256 байт). Начало области для размещения снапа пользователя - отступ на 02 блока от начала страницы, т.е. 0x10200. Начиная с этого адреса мы можем разместить до 32 блоков снапа.
Если не влезло, то "остаток" от снапа пихаем на следующую страницу, где точно так же вычисляем адрес посадки и максимально возможную длину кода снапа.
Последняя цифирь в той "триаде" указывает на смещение в блоках до каталога РОМдиска, или при 00 - отсутствие его на данной странице. Ибо каталог только один, размещен соответственно только на одной странице :) Причем, посередине РОМдиска :)
В приведенной версии прошивки (4.01) каталог размещен по адресу 17200. Думаю, что можно его засунуть и в другую страницу/место.
Новые файлы добавляем дописывая новую строчку в каталоге. не забываем в последнем символе в названии файла включить старший бит. в конце строчки ставим смещение начала файла в странице и саму страницу.

---------- Post added at 17:25 ---------- Previous post was at 17:15 ----------

Добавлю еще информации уже от себя.
Снапшоты лучше делать в эмуле. Потому, что в эмуле по умолчанию все ячейки ОЗУ равны нулю. А это здорово экономит на размере снапа.
По возможности старайтесь делать снапы в режиме 48кб. Ибо снап получится меньше размером.
Буты и прочие коммандеры лучше делать как раз в режиме 128кб, ибо им нужно будет рулить памятью. А в снапе содержится также информация о текущей конфигурации машины. Это рекомендация уже от "скорпионовцев".
Да, ещё :) не забывайте включать "компрессор" при снятии снапшота. При распаковке декомпрессор работает быстро и прозрачно, а место на диске экономится здорово.

savelij
11.12.2009, 18:17
Фте самы три циферки по адресам 0x70 - 0x72 изменению не подлежат.

Думаю не ошибусь если скажу что эти циферки генерятся при компиляции прошивки. Ибо размер кода плавает. И при увеличении/уменьшении размера кода в страницах числа будут уже другие.

---------- Post added at 18:17 ---------- Previous post was at 18:13 ----------


Последняя цифирь в той "триаде" указывает на смещение в блоках до каталога РОМдиска, или при 00 - отсутствие его на данной странице. Ибо каталог только один, размещен соответственно только на одной странице

Вот о перемещении директории в другую страницу не думал и не смотрел. С другой стороны а не все ли равно где этот дир лежит. Но никак не в середине РОМ диска. Перед этой директорией лежит исполняемый код (куски кода) от монитора. А после директории уже лежат сектора РОМ диска.

Ewgeny7
11.12.2009, 18:36
Но никак не в середине РОМ диска.
Савелий, РОМдиск заполняется аж с четвертой страницы, каталог на пятой. Не в середине, конечно, но это не предмет для спора :)

Gutten
17.12.2013, 13:33
Подниму темку.
Есть у меня потребность из 2 разных ром-дисков составить 1, заменив там ненужные мне программы. Как я понимаю, для этого требуется куски байтов перенести из одной прошивки в другую. Как вычислить длину переносимого куска? Разница между 2 записями в каталоге? А если фактически перенести требуется меньше? Или проще очистить весь ром-диск и уже в него вставлять куски нужных программ из двух доноров?

Gutten
18.12.2013, 14:16
попробовал в готовой прошивке поменять местами 2 записи в каталоге ром-диска:


46 61 74 61 6c 6c 20 30 2e 32 b5 00 00 00 0e 04 Fatall 0.2......
54 65 73 74 20 53 63 6f 72 70 69 6f ee 00 09 08 Test Scorpio....
54 41 53 4d 20 34 2e b0 00 00 00 00 00 00 36 08 TASM 4........6.
53 43 42 6f 6f f4 00 00 00 00 00 00 00 00 28 0a SCBoo.........(.
43 68 65 73 73 20 50 73 69 6f ee 00 00 00 3a 09 Chess Psio....:.
54 65 74 72 69 f3 00 00 00 00 00 00 00 00 12 0b Tetri...........
43 68 75 63 6b 69 65 20 45 67 e7 00 00 00 37 0d Chuckie Eg....7.
42 6f 6d 62 65 f2 00 00 00 00 00 00 00 00 32 0e Bombe.........2.


Как видно, программы в каталоге идут друг за другом с увеличением номеров страниц. Но SCboot расположено со страницы 0A, а Chess - со страницы 09, т.е. в каталоге они расположены в обратном порядке. Если же В КАТАЛОГЕ поменять эти две строчки местами:


46 61 74 61 6c 6c 20 30 2e 32 b5 00 00 00 0e 04 Fatall 0.2......
54 65 73 74 20 53 63 6f 72 70 69 6f ee 00 09 08 Test Scorpio....
54 41 53 4d 20 34 2e b0 00 00 00 00 00 00 36 08 TASM 4........6.
43 68 65 73 73 20 50 73 69 6f ee 00 00 00 3a 09 Chess Psio....:.
53 43 42 6f 6f f4 00 00 00 00 00 00 00 00 28 0a SCBoo.........(.
54 65 74 72 69 f3 00 00 00 00 00 00 00 00 12 0b Tetri...........
43 68 75 63 6b 69 65 20 45 67 e7 00 00 00 37 0d Chuckie Eg....7.
42 6f 6d 62 65 f2 00 00 00 00 00 00 00 00 32 0e Bombe.........2.
, то SCboot перестаёт запускаться и висит на загрузке страницы А. Chess нормально работает. Что я делаю не так?

Ewgeny7
19.12.2013, 23:18
Gutten, мне разбираться уже лень,спать пора... Но я писал инструкцию по составлению ромдиска на основе инструкции Савелия - http://zx.pk.ru/showpost.php?p=239687&postcount=30
Тут вроде как всё разжевано. ВинХекс в помощь и калькулятор шестнадцатиричный виндовый. И бумажку с ручкой. Более ничего не надо.

Gutten
20.12.2013, 00:15
да я уже составил для себя часть прошивки, всё понятно с этим. мне не понятно почему переставление двух строчек в каталоге влияет на работу файлов. Хотя может это только у меня так не заработало.

AndTorp
11.01.2014, 14:52
Здравствуйте.
1. Может ли файл ROM-диска занимать более 255 секторов?
2. Где в ПЗУ Скорпиона (адрес ячеек) находятся номер версии, индивидуальный номер?
3. Что такое "05-07" и где это находится в ПЗУ?

4. Кто-нибудь знает формат самого файла, сохраняемого по команде теневого монитора "S. Save..."? Интересует - в самом файле прописывается его длина в секторах?

http://s005.radikal.ru/i210/1401/b6/5c0690786c21.png

AndTorp
18.01.2014, 04:07
По "05-07" нашел, что это число и месяц компиляции.
Для версии 4.01 в ПЗУ есть последовательность:

1с928 116161 LD DE,#6161 ;D=код версии, E=год
1c92b 010507 LD BC,#0705 ;B=месяц, C=число

Очень интересует такой вопрос.
Если на ROM-диске находится несколько файлов, но до конца диск не заполнен, то как найти начало свободной области (страница и сектор)?

Gutten
18.01.2014, 23:19
Смотришь в каждой странице #10071+Х*#4000, где Х=#0...#B, там указывается число свободных секторов ВСЕГО на пустой странице. И уже программист, кто заполняет диск должен следить, сколько секторов он занял и сколько оставил. Больше никак. Программист также выбирает куда ему записать кусок файла. Секторов для записи не так много на странице, чаще всего #3E, но есть и #32, #3B, #2E, #18, #0D, причём каждый сектор это 256 байт.

AndTorp
19.01.2014, 10:37
Смотришь в каждой странице #10071+Х*#4000, где Х=#0...#B, там указывается число свободных секторов ВСЕГО на пустой странице.
Gutten, это я знаю. Меня интересует именно оставшееся свободное пространство (если оно есть) всего ROM-диска. Т.к. в каталоге ROM-диска не указывается длина файлов, то невозможно найти где начинается свободная область, расположенная за последним файлом.
Никто не разбирался с самими такими файлами? Может там где-то внутри указывается длина. Ведь стандартные процедуры монитора как-то определяют сколько секторов надо "выгрузить" в ОЗУ.

Gutten
01.06.2015, 19:13
Владельцы Скорпионов, а поделитесь из своего опыта, какие программы полезно зашить в РОМ-диск, чтоб не искать по образам дисков? Я просто себе решил его немного обновить.
Сейчас у меня прошиты Fatall, SCBoot, MagOS, RCommander. В другой прошивке разные тесты, которые в принципе на рабочем компе не особо уже актуальны и использовались при наладке. Тоже можжно обновить и её.
Думал WildPlayer ещё загнать, но больно он долго распаковывается, за это время и на диске его найти и запустить можно.

AmoNik
01.06.2015, 22:37
Я бы себе прошил вот такие программы:
STS 7.x
PKUNZIP
HDDOCTOR
UNRAR
MAGOS
TDU
RDS
CATHDD
CDWALK
ZXRARC
REALCOMMANDER

Gutten
01.06.2015, 23:33
STS 7.x - не работал с ним, хватало теневика либо дебаггера в унриле. чем он хорош?
PKUNZIP - не встречал пока архивов на спектруме, но в принципе может пригодится
HDDOCTOR - где скачать и почитать про него?
UNRAR - аналогично PKUNZIP
MAGOS - прошита
TDU - где скачать и почитать про него?
RDS - где скачать и почитать про него?
CATHDD - где скачать и почитать про него?
CDWALK - CD привода я не ставил, потому не надо
ZXRARC - аналогично PKUNZIP
REALCOMMANDER - прошито

С прошиванием у меня трудности в плане найти оптимальную точку, когда надо сохранить снапшот. Особенно геморно с коммандерами, которые считывают каталог диска после своего запуска. Да и с MagOS не понятно когда ловить.
Есть вариант выдрать готовоые куски РОМ-диска из других прошивок, я так делал первую прошивку. Но как оказалось, это не оптимально и переносятся лишние килобайты. Перенеся Fatall и SCboot из другой прошивки я так потерял почти 20кБ, по сравнению с самолично сделанными снапшотами.

AmoNik
02.06.2015, 17:03
STS просто удобнее и быстрее, но заниматься отладкой по-живому не получится.
HDDoctor тут http://alonecoder.nedopc.com/zx/index.html
TDU (Turbo Disk Utility) и RDS тут http://zxsoft.zxby.org/#diskutil
CATHDD не могу найти ссылку

Я снимаю снапшот обычно после распаковки всех блоков загрузчиком, но до непосредственного запуска программы.

Gutten
02.06.2015, 19:52
вот как раз не всегда легко найти этот момент запуска в изощренных загрузчиках через #3D2F.

AmoNik
05.06.2015, 22:56
Последний JP в загрузчике скорее всего и есть запуск. CALL перед этим может быть распаковкой. Иногда адрес запуска сначала кладут на стек, а потом JP на распаковщик. В таком случае сам распаковщик "выйдет" на адрес запуска программы.

Gutten
05.06.2015, 23:31
Вот смотри, есть RCommander - отличная вещь, с модулями. У меня один раз получилось найти момент, когда ВРОДЕ БЫ все модули подгрузились, НО каталог дискеты для отображения ещё не считался. Всё получилось КАЗАЛОСЬ БЫ чудесно - с РОМ-диская запускаю этот коммандер, он распаковывается в память и выводит каталог именно той дискеты, что стоит в дисководе. Загруженные модули диск-доктора, вьера и HDD работают. Но при копировании файлов с одного диска на другой - зависаем с зелёным бордюром. Плюс я снапшот делал из унрила, потому в ром-диск он записан был с выключенной турбой (как и снапшоты Fatall, RCBoot).
Сейчас я начал переделывать снапшоты так, чтобы они при запуске принудительно включали турбу по RST8, 87h. С Fatall и RCBoot у меня получилось найти точки запуска после загрузки, а вот с RCommander - нет. Даже ту точку, что раньше нашёл сейчас не могу поймать. Либо рано и модули ещё не все загружены, либо поздно и каталог дискеты уже считан. С MagOS вообще не представляю как быть, хотя там тоже турбу принудительно включить хочу.

USERHOME
12.06.2015, 13:59
О Буду разбираться с ROM Диском (позже)
----------------------------------------------------------

ROM Диск---
объём ПЗУ 27010 ~44Кб
объём ПЗУ 27020 ~124Кб


АВТОСТАРТ
-цитата из книги-


При автозапуске удобно использовать файлы полной копии памяти (ALT MAGIC). Таким образом можно произвести, например, автозагрузку системы IS-DOS, предварительно сохранив настроенную копию в файле (bootm), на TR-DOS дискете. Можно создать несколько дискет с "настроенными" редактором, ассемблером или игрой....
Программа boot при этом может выглядеть следующим образом:



10 CLEAR 28900
20 REM ----- Change File Name
30 LET n$= "bootm"
40 REM
50 REM ------ Load program n$
60 LET a=29000
70 LET c=9: GO SUB 160
80 FOR i=1 TO LEN (n$)
90 POKE a,CODE n$(i)
100 LET a=a+1
110 NEXT i
120 LET c=3: GO SUB 160
130 RANDOMIZE USR 29000
140 STOP
150 REM ----------------------------
160 FOR i=0 TO c
170 READ d
180 POKE a,d
190 LET a=a+1
200 NEXT i
210 RETURN
220 REM Code ASM
230 DATA 217,229,1,0,0,58,246,92,207, 139,0,255 ,217,201

(вместо 139 должно быть 205)

139,0,255 Похоже, что опечатка
139 dec = 8B hex
а 8B похожа на CD т.е. CALL (при написании на бумажном носителе)

REM ASM

EXX
PUSH HL
LD BC, 0000#
LD A,(5CF6#)
RST 8
CALL FF00#
EXX
RET

savelij
12.06.2015, 14:57
EXX
PUSH HL
LD BC, 0000#
LD A,(5CF6#)
RST 8
CALL FF00#
EXX
RET



Неправильно. Должно быть так:
EXX
PUSH HL
LD BC, 0000#
LD A,(5CF6#)
RST 8
db 0x8b
db 0
rst 0x38
EXX
RET

В данном случае 0x8b это код функции вызываемой через rst 8.

USERHOME
12.06.2015, 15:14
Неправильно. Должно быть так:
EXX
PUSH HL
LD BC, 0000#
LD A,(5CF6#)
RST 8
db 0x8b
db 0
rst 0x38
EXX
RET

В данном случае 0x8b это код функции вызываемой через rst 8.
Похоже я ошибся, но скажите после вызова RST 8 разве 2 байта используются?
Меня смущает DB 00

savelij
12.06.2015, 15:29
Похоже я ошибся, но скажите после вызова RST 8 разве 2 байта используются?
Меня смущает DB 00

В данном случае DB 00 это конец строки текста (максимальная длина до 256). Если строка сразу 0, то внутри переменных встроенного кода в буфер переносится имя файла bootm (перед ним вставляется имя текущего дисковода для получения строки вида A:bootm. Что из себя представляет DB 0xFF пока не разбирался. Функция 0x8b нигде не описана и что для чего и как можно только по коду выяснить.