Дмитрий, берём в пример процедуру получения идентификации блока рамдиска, для начала в трдос:
Код:
ld a,0 ;код рамдиска, в данном случае диск Е
ld c,0ceh ; получить идентификатор блока от рамдиска
call 3d13h
как ты думаешь, каким образом трдос это сделает? в трдосе нет функционала работы ни с рам диском (частично) ни с винтом и вапще, есть только редирект на биос:
Код:
REDIR_3D13:
BIT 7,C
JP NZ,EXP_FNS
BIT 6,C
JP Z,AUTO_283C
RES 6,C
JP HD_CMD
...
HD_CMD:
PUSH AF
DI
LD A,D_ROM16ON
OUT (07Ch),A
POP AF
RET
...
EXP_FNS:
PUSH AF
DI
XOR A ; D_ROM16OFF
OUT (07Ch),A
POP AF
RET
в данном случае после выполнения куска HD_CMD, а точнее сразу после OUT (07Ch),A включается кусок биоса (взято из исходника EXP.asz):
Код:
EXP_FNS_RET: ; Возврат в TR-DOS
PUSH AF
LD A,D_ROM16OFF
OUT (SYS_PORT_OFF),A
JP EXP_FNS ; Вход из TR-DOS
тут, кажется, комментарии не требуются. Таким образом при выполнении команд биоса через 3d13 мы оказываемся в биосе. Как сделать тоже самое, но в dss:
Код:
ld a,0
ld c,0ceh ; получить идентификатор блока от рамдиска
rst 8
вот и всё. у меня это всё работает из dss, но пока в виде раскиданных по отдельности файликам и пока трассирую что и как в эмуле. чуть позже выкачу в тест загрузчик для palsw. если говорить именно про загрузку самой альтеры, то тут возникает вопрос: я обратил внимание, что при переключении на пользовательскую конфу есть установка байта конфигурации (какие железки будут доступны). Байт конфигурации расположен в системной странице FEh, по смещению 0134h или 0138h, на память сходу не вспомню. туда закидывается инфа о конфе, типа наличие ковокса, ау, винта и прочее. поскольку трассировать в трдосе я не могу в эмуле, то приходится шарица на дизасме загрузчика от дума и версий этих загрузчиков я нашёл уже 3 штуки.