PDA

Просмотр полной версии : процедура загрузки с диска



necroTrue
13.06.2010, 19:36
нужна процедура загрузки, что бы принимала имя файла и куда читать.

---------- Post added at 18:15 ---------- Previous post was at 18:05 ----------

нашел, может кому пригодится. но остался вопрос - а как указать что я хочу конкретный адрес? я так понимаю сейчас оно смотрит свойства файла

http://zxdn.narod.ru/coding/adv6dver.txt

LOAD
CALL SET_NAME ; готовим сист.
; переменные
LD C,10 ; ищем файл
CALL 15635
LD A,C
BIT 7,C
JR Z,LD_1
; Сообщение "файл не найден" или...
RET
LD_1 ; грузим...
LD A,C
LD C,8
CALL 15635
XOR A
LD (23801),A
LD (23824),A
LD C,14
CALL 15635
RET

SET_NAME ; Подпрограмма установки сист.переменных
LD HL,NAME ; перекидываем
LD DE,23773 ; имя файла
LD BC,8
LDIR
LD A,"C" ; тип файла м.б.
LD (23781),A ; любой, кроме "#","D","B"
LD A,9 ; поиск файла
LD (23814),A ; по 9 символам
RET

NAME DEFM "filename"

psb
13.06.2010, 20:23
а как указать что я хочу конкретный адрес?
видимо, грузить не по номеру файла в каталоге (С=8), а самому (С=5) - надо точнее смотреть функции #3d13.

valeron
13.06.2010, 23:59
В этом месте
...
XOR A
LD (23801),A
LD (23824),A
LD C,14
CALL 15635
...
при LD C,14 имеет значение что в регистре А. В этом куске кода А был обнулен операцией XOR A, и тогда адрес загрузки файла берется из каталога. Если сделать
LD A, 3 то нужно в DE указывать адрес куда грузить файл. Надеюсь ты именно это спрашивал, потому что вопрос поставлен не совсем понятно.

PS. Вот нашел точное описание, проверил - работает.
14 |Выполняет 5 функций:
| | Загрузка файла: в 23801 и 23824 поместите 0, имя и расширение поместите с 23773, а также:
| | Для бейсик - программ - больше ничего.
| | Для файлов CODE :
| | Пpи A=0 - адрес загрузки и длина берутся из каталога.
| | При A=3 - адрес загрузки берется из HL, длина - из DE.
| | Иначе - адрес загрузки берется из HL, длина - из каталога.

| | Для массивов - A<>0, в HL - длина тела старого мас-
| | сива или 0, если такового нет; в 23767 - адрес тела
| | старого массива в памяти, в 23762 - имя массива.

| | Верификация файла - все как и для загрузки, только в 23801 поместите 255.
| | Загрузка сектора файла - в 23801 поместите 0, в 23824 - 255, в 23767 - адрес загрузки, в HL - номер
| | сектора, в A - 3, в DE - 0 (два последних действия - для обхода ошибки. Внимание!!! Не работает с файлами
| | BASIC и DATA из-за ошибки.
| | Верификация сектора файла - все как и при загрузке, только в 23801 поместите 255.
| | Запись сектора файла - в 23801 поместите 255 (для обхода ошибки), в 23824 - не 0 и не 255, в A - не 0, в
| | HL - номер сектора, в 23767 - адрес в памяти.

necroTrue
14.06.2010, 11:29
да, думаю это. просто не переношу работу с диском, и влом разбиратся что и как там работает. вот какая-то нелюбовь к этим процессам :)
вечерком попробую, посмотрю то ли что я хотел

valeron
14.06.2010, 23:17
Там совсем не сложно, может кажется что запутано, но если разобраться то займет минут 15. Запоминать не нужно, просто нужно иметь под руками список процедур для CALL 15635 и какие регистры за что отвечают. Из всех процедур ты станешь использовать только 2, одну на запись, вторую на чтение. Потом со временем тебе захочется большего, но обойтись можно малым.
Да, еще при операциях с CALL 15635 имей ввиду что регистр IY должен быть на своем месте в системных переменных, прерывания IM1 и вектор прерываний I=#63. Я на этих граблях лажался в свое время...

psb
14.06.2010, 23:46
IY при IM1 должен быть всегда на своем месте. а #3d13 не приспособлен для IM2.

valeron
15.06.2010, 18:37
...прерывания IM1 и вектор прерываний I=#63...

Что-то меня никто не поправляет, а я тут по невнимательности 63 как # (HEX) обозначил, а надо десятиричное или уже #3F если в HEX

drbars
22.06.2010, 09:44
Я же выкладывал процедуру, правда без #3d13. Ей пофиг вообще на все переменные, регистры и режим прерываний.

Ссылка на код (http://zxdn.narod.ru/coding/trdosdrv.txt).

Код написан был для адаптации игры Helter Skelter (http://trd.speccy.cz/gamez/h/HELTER_S.ZIP).

valeron
23.06.2010, 00:53
Я же выкладывал процедуру, правда без #3d13. Ей пофиг вообще на все переменные, регистры и режим прерываний.

Ссылка на код (http://zxdn.narod.ru/coding/trdosdrv.txt).

Код написан был для адаптации игры Helter Skelter (http://trd.speccy.cz/gamez/h/HELTER_S.ZIP).

Что-то мне кажется что с RAM диском она не подружится, да и здоровенная больно, если делаешь маленькую утилитку то просто в лом дублировать половину операционки, так что ее я бы стал применять только если уж совсем другого выхода не будет. В любом случаен спасибо за потраченные усилия и внимание.

drbars
23.06.2010, 05:51
Что-то мне кажется что с RAM диском она не подружится, да и здоровенная больно, если делаешь маленькую утилитку то просто в лом дублировать половину операционки, так что ее я бы стал применять только если уж совсем другого выхода не будет. В любом случаен спасибо за потраченные усилия и внимание.
Небыло у меня в те времена рамдисков и hdd :) Только дискеты ;)

palsw
26.07.2011, 01:26
Небыло у меня в те времена рамдисков и hdd :) Только дискеты ;)

Вопрос -возможно пофиксить Ваши демки с использованием Soundrive ,что бы запускались с Ram-диска малой кровью?

Дмитрий
27.07.2011, 17:42
palsw, имхо, можно... место для кода, при прибивании драйвера, описанного drbars-ом, более чем достаточно для впихивания туда загрузчика через #3d13, но все же имеется ряд сложностей: 1. возможно проги заксорены, что осложняет процесс, 2. надо найти добровольца на перелопачивания довольно не малого количества ПО.

---------- Post added at 16:42 ---------- Previous post was at 16:39 ----------

Вообще бы я предложил бы организваторам всяких HackersTop-ов и иже с ними, сделать новый конкурс, кто качественней и количественней пофиксит софт под RAM-диск за определенный промежуток времени, это больше пользы принесет, чем всякие там демки :)

palsw
27.07.2011, 17:55
palsw, имхо, можно... место для кода, при прибивании драйвера, описанного drbars-ом, более чем достаточно для впихивания туда загрузчика через #3d13, но все же имеется ряд сложностей: 1. возможно проги заксорены, что осложняет процесс, 2. надо найти добровольца на перелопачивания довольно не малого количества ПО.

---------- Post added at 16:42 ---------- Previous post was at 16:39 ----------

Вообще бы я предложил бы организваторам всяких HackersTop-ов и иже с ними, сделать новый конкурс, кто качественней и количественней пофиксит софт под RAM-диск за определенный промежуток времени, это больше пользы принесет, чем всякие там демки :)

Поддерживаю,только не фиксы под рам диск а вообще проблемы совместимости

VNN_KCS
27.07.2011, 23:42
Поддерживаю,только не фиксы под рам диск а вообще проблемы совместимости
А в чём особая проблема? Если юзать обычный бейсик загрузчик, то работать должно нормально. Если типа:
ld hl, адрес
ld de,(#5cf4)
ld b,количество секторов
ld c,#05
call#3d13
ret
То тоже работать будет. А это вроде как самые обычные загрузчики. Лично я делал и всё "тип-топ".
Конечно, если что-то наворочено, то УВЫ. А так....

iceoflame
01.08.2011, 19:33
VNN_KCS, это хорошо, но увы не во всякую игру это дело вкрутишь. особенно для тех у кого есть поддержка блочной догрузки многоуровневые игрушки. Там места мала и нужно восстанавливать системные переменные нужно.

Обычных под 3д13 переделал кучу. Но все похерелось, дисков нету. Да и покацаные они после пшеков приходили, или без музыки или без картинки.

Killer
02.08.2011, 21:39
А в чём особая проблема? Если юзать обычный бейсик загрузчик, то работать должно нормально. Если типа:
ld hl, адрес
ld de,(#5cf4)
ld b,количество секторов
ld c,#05
call#3d13
ret
То тоже работать будет. А это вроде как самые обычные загрузчики. Лично я делал и всё "тип-топ".
Конечно, если что-то наворочено, то УВЫ. А так....

А если с выгрузкой? Когда-то давно дисковал Адвансед Соккер Менеджер, Заодно и слехка русифицыровал, пак делал КейСофт, у меня не получилось нормально запаковать. Дискетизация была полная)

iceoflame
17.08.2011, 13:43
Попробовал нарисовать загрузчик под R-TYPE, который мышкетизировали. Вроеде все просто и норм. Может кто-то посоветует, процедуры, варианты загрузки, со следующими требованиями.

1. Занимало как можно меньше места
2. не использовало системные переменные ТРДОС
3. Совместима с РАМ диском
4. Простая как двери.

VNN_KCS
17.08.2011, 13:50
А если с выгрузкой?
Тогда в de - track/sector(куда надо), а в С- #06

Shadow Maker
18.08.2011, 17:18
2. не использовало системные переменные ТРДОС
3. Совместима с РАМ диском

А разве эти два пункта не взаимоисключающие?