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




