Собственно я уже разобрал дизассемблером и слегка даже переделал, сократив размер. Позже если не лень будет, выложу переделанный драйвер.
По файлу выше несколько мыслей:
Код:
.IIF NDF RTE$M, RTE$M =: 0
.IIF NDF MMG$T, MMG$T =: 0
.IIF NDF ERL$G, ERL$G =: 0
.IIF NDF TIM$IT, TIM$IT =: 0
Не несущие никакой нагрузки строки - просто захламляют исходник.
Код:
. = 116
HDMES:
.ASCIZ <CR><LF>/HD (177720) disk driver v1.2 2012/<CR><LF>
Вписывание мусора в официально документированные функциональные оффсеты не есть хорошо. Тем более, что места в install area полно и все упрощается если вписать эту строчку после JSR Rx в нсталяционном коде.
Код:
Mov PC, R0
Add #HDMES-., R0
Заменяется на .ADDR (а точнее в свете вышесказанного просто не требуется).
Код:
.DrSet MMGT, 2, O.GEN, NUM
Невозможно в принципе. Чтобы сделать подобный функционал потребуется серьезное усложнение кода.
Код:
.IIF GT .-1000 .ERROR
меняется на .ASSUME
а?
не нужно по определению в виду отсутствия даже принципиальной возможности для функционала который требует этого.
Код:
O.GEN:
Tst R0 ; Arg = 0 ?
BEq 30$
BiS R3, HD.GEN ; Set SYSGEN bit.
Br 31$
30$:
BiC R3, HD.GEN ; Clear SYSGEN bit.
31$:
ClC
Return
CLC ничего не делает.
Код:
.IIF GT .-HDSTRT-1000 .ERROR
а?
Код:
Mov PC, R0
Add #HDMESC-., R0
MOV #HDMESC-HDBOOT,R0
Код:
.IIF EQ MMG$T .BlkW 5
Бесполезный мусор в теле драйвера.