Просмотр полной версии : Использование TR-DOS при затёртой области системных переменных
crushers[4ePT]
03.02.2008, 01:37
Доброво времени суток.
Помогите с инфой какие переменные TR-DOS необходимо восстанавливать перед началом работы.
(Это в случае когда игруха затирает всё с #5C00 и выше). Помню что было очень просто (сам пару раз проделывал эти пляски при подгрузки лвл с диска) но к сожалению все работы на реальных 5"25 а драива чтобы это перегнать на пц и посмотреть нет.:v2_conf2:
если на форуме проскакивала подобная инфа ткине носом плз.. ненашёл..
Shadow Maker
03.02.2008, 02:37
А нафиг? Пользуйся прямым доступом к ВГ, удобнее в разы.
crushers[4ePT]
03.02.2008, 02:44
Да как-то неохота не по стандарту. :)
Пользуйся прямым доступом к ВГ
Угу, а потом имей траблы при запуске с дисков В-D и при работе с винчестера. Сколько я перематерил кодеров, пользующих прямое программирование ВГ.
На VTRDOS появилась книга "ТырДОС для пользователей и проггеров", там детально описываются все необходимые переменные в памяти.
Сколько я перематерил кодеров, пользующих прямое программирование ВГ
А почему не авторов кривого эмулятора ВГ?
Shadow Maker
03.02.2008, 15:23
Да, на самом деле, с фига на кодеров-то валить. В 90% случаев прямой драйвер - единственное решение и ничего с этим не поделаешь, а материться лучше где-то в другом месте...
Добавлено через 2 минуты
;118492']Да как-то неохота не по стандарту. :)
Если игрухе нужно затирать с #5c00 это значит, что тебе нужно будет куда-то и сохранять эти данные. Место есть? Если есть - непонятно фигли мучаться, сохрани при старте все переменные и всё, если нету - запорешь игру.
А почему не авторов кривого эмулятора ВГ?
Элементарно. Не везде эмулится ВГ, потому что не считали нужным эмулить его в принципе. Например, СМУК. Каким боком там должен лежать эмуль ВГ? Работа с винтом происходит посредством обращения к #3D.. или RST8. Проги, работающие напрямую с ВГ, вешают программу, т.к. в момент подгрузки загорается огонек на дисководе (пустом) и на этом лафа заканчивается :(
Приходится переписывать программу на дискетку, назначать дисковод как А и далее работать с обычным дисководом. А после удобства винта это так лееениивооо... :)
Добавлено через 7 минут
В 90% случаев прямой драйвер - единственное решение и ничего с этим не поделаешь, а материться лучше где-то в другом месте...
Интересно, откуда эти проценты? Большинство программ как раз не требуют прямого доступа к ВГ. Исключения, ИМХО, демы, там сам бог велел выжать из железа все опилки :)
Просто обломно искать вторую-третью "одисковку" программы после того, как обвешанная "приветами" и "факами" Диззи, например, не желает запускаться с диска В, или с А, но на винчестере.
Shadow Maker
03.02.2008, 17:43
При чем тут Диззи. Я про игры с отгрузками говорю.
При чем тут Диззи.
Это было "например". Если кого задел лично - извините. Я высказал свои пожелания, не более того. Давайте закроем этот флуд.
например, не желает запускаться с диска В
А вот это реальный маразм, разросшийся в свое время до неимоверных размеров, непонятно по какой причине. И если просто играть на реале оно может и не мешает, то в процессе разбора колекций софта крови попортило очень немало.:mad:
FUCK всем авторам таких игр, ну и демок! :cool:
crushers[4ePT]
04.02.2008, 01:03
Места вроде нет, хотя... Я раньше просто во время загрузки сохранял эти 2-3 сектора в экране(припрятав под атрибуты конечно) и после восстанавливал. Так как проще помоему найти место для небольшого блока комманд чем место под эти самые 2-3 сектора. Я больше надеялся на инфу про критично важные для Тырдоса переменные... Эхх.. пойду искать... Хотя всё равно спасиб всем кто откликнулся! ;)
Evgeny Muchkin
04.02.2008, 14:59
crushers[4ePT], посмотри в R-TYPE Родионовской дисковой версии, кажись, я там видел установку необходимых переменных перед подгрузками.
Shadow Maker
04.02.2008, 16:39
;118655']Места вроде нет, хотя... Я раньше просто во время загрузки сохранял эти 2-3 сектора в экране(припрятав под атрибуты конечно) и после восстанавливал. Так как проще помоему найти место для небольшого блока комманд чем место под эти самые 2-3 сектора. Я больше надеялся на инфу про критично важные для Тырдоса переменные... Эхх.. пойду искать... Хотя всё равно спасиб всем кто откликнулся! ;)
Ну книжку прочитай TRDOS для пользователей, там вроде написано, какие она использует переменные.
Просто дело в том, что она кроме критичных тебе также запорет и некритичные, но которыми она пользуется...
ram_scan
04.02.2008, 23:25
Как правило всегда можно найти немножко закрытого атрибутами места в экранной области (отгрузка как правило делается из отдельного меню, и информации/графики на экране при этом не сильно много) чтобы сохранить туда кусок программы который перетрется переменными, проинициализировать TRDOS, сделать стандартную отгрузку документированым способом и вернуть все на место.
crushers[4ePT]
05.02.2008, 02:20
to Shadow Maker:
Я знаю что Тырдос перережет всех в округе #5c00-#5d40 но как написал ram_scan всё можно благополучно сохранить в экране под атрибутами чтобы не пугать народ. :v2_laugh: или в крайнем случае найти внутренний экран игрушки, где она всё сама перед каждым кадром "забывает" и кинуть туда. А вот за стандартную #3d13 подгрузку народ хоть спасибо скажет! :v2_laugh:
to Evgeny Muchkin:
Именно в версии Радионова я и видел но он там сохраняет всётаки блок небольшой.(наверное чтобы лвл по имени качать с диска :v2_biggr:). Попробую проверить что именно спасает он там :v2_smile:
Я 100% знаю что можно работать с Трдос без сохранения большых блоков.
посмотри в R-TYPE Родионовской дисковой версии, кажись, я там видел установку необходимых переменных перед подгрузками.
там сохраняются переменные 23746,122
а вот Лаптев делал проще. вся область переменных (бейсик и трдос) зануляется, после этого выставляется одна переменная бейсика и три !!! трдос. для загрузки этого хватает. от себя я бы добавил переменную отвечающую за текущий дисковод (что бы не был A по умолчанию). смотрите OperationThunderbolt.
а вот Лаптев делал проще. вся область переменных (бейсик и трдос) зануляется, после этого выставляется одна переменная бейсика и три !!! трдос. для загрузки этого хватает. от себя я бы добавил переменную отвечающую за текущий дисковод (что бы не был A по умолчанию). смотрите OperationThunderbolt.
а можно подробнее? я вот в тыр-досе не рулю вообще, а тема интересная...
crushers[4ePT]
06.02.2008, 02:29
Даа.. Лаптев молодец! :v2_clap2::v2_clap2: Именно то о чём я и спрашивал! :v2_yahoo:
use_trdos
di
im 1
ld hl,#5c00
ld de,#5c01
ld bc,#0240
ld (hl),l
ldir
ld iy,#5с3a
;можно и ld iyh,#3a как у Лаптева (по адресу #3a00 ;#ff находится - типо "Шеф усё харашо нету Ашибак
;летим дальшо" :v2_laugh: но это ПЗУ и хто ево знает
;что там окажется на другой машине :v2_wink2:)
ld a,#ff
ld (iy+0),a
ld (#5d0c),a ;#ff=i/o Буфер неиспользуется
ld a,#c9
ld (#5cc2),a ;для TR-DOS
ld a,#83
ld (#5cc8),a ;режим работы дисковода А
;для B,C,D будут #c9,#ca,#cb
;#5d16 содержит номер дисковода (0-3=А-D)+#3c
;А дальше как по маслу :)
ld hl,#c000
ld de,#0101
ld bc,#0105
call #3d13
ret
Ещё непроверил на работоспособность но помоему примерно так и было...
Данные режима работы дисковода и номер дисковода надо устанавливать перед запуском игрухи естественно. (вот эта одна переменная :v2_wink2: )
ну во первых, тут какой то холивар пошёл вместо реального ответа на вопрос.
Использовать TR-DOS при затертых переменных можно двумя способами
1) используя прямое обращение к ВГ
2) используя область, сохраняющую необходимые системные переменные
Насчёт эмуляторов для SMUC и прочего - тут конечно однозначно только второй вариант.В своей View я использовал драйвер с прямым доступом к ВГ, который тем не менее различает буквы и работает с любым дисководом.
Так что согласен с мненией о кривых руках.
Вообще если естькривой софт, который неизвестно как может вспакостить с системной областью, то лучше каждую дисковую операцию завершать сохранением этой системной области в расширенную например память, а оттуда их уже вытаскивать. В связи с высокой длительностью дисковых операций такая процедура малозаметна будет для тех кто будет её эксплуатировать.
crushers[4ePT]
09.02.2008, 01:31
Ещё один хороший метод это сохранять то что испортит ТРдос в начале области подгружаемых левелов а левелы соответственно паковать и после подгрузки восстановить затёртые досом данные а после распаковывать левел... и все довольны и счастливы. :v2_wink2:
П.С. процедурка указаная выше работает, сам проверял. :v2_smile:
Еще хорошо
LD (5C3d),SP
на случай ошибок.
Еще хорошо
LD (5C3d),SP
на случай ошибок.
И что тогда будет в случае ошибки?..
---------- Post added at 08:11 ---------- Previous post was at 07:52 ----------
;118923']
ld a,#83
ld (#5cc8),a ;режим работы дисковода А
;для B,C,D будут #c9,#ca,#cb
;#5d16 содержит номер дисковода (0-3=А-D)+#3c
Вот в этом моменте:
Что делать в случае с дисководом b?
типа по адресу #5cc9 прописывать #83 и по адресу #5d16 #3d
Или как?
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot