Сообщение от
Patron
Исходники драйвера HX
Заглянул в драйвер...
Несколько слов.
Код:
.Macro .ADDR x
Mov PC, R0
Add x -., R0
.EndM
Системная библиотека уже содержит макрокоманду .ADDR которая обладает весьма большим функционалом (кроме того что использован здесь). Вряд-ли есть смысл дублировать. Хотя на самом деле в данном драйвере она вообще не нужна (см ниже).
Код:
.Macro MTPS xx
Mov xx, -(SP)
Mov PC, -(SP)
Add #6, (SP)
RtI
.EndM
Макрокоманда нигде не используется ниже. В XM/ZM работать не будет (если вдруг возникнет желание сделать поддержку для). В системной библиотеке есть замечательная макрокоманда .MTPS для таких целей.
Код:
.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
Повторение того, что и так делается автоматом. Определение же вручную этих настроек здесь ломает возможность использования драйвера в стандартной процедуре SYSGEN.
Ничего полезного кроме несовместимости с RT-11 V5.0 на уровне исходников не дает: UMRы нам не нужны, error logging не поддерживается, а больше нигде от этих команд пользы нет. Ну разьве что сторонние утилиты могут посмотреть в эти таблицы (система их никак не использует). Зачем нужен .DRPTR без параметров даже придумать не могу.
Код:
. = 116
HXMES:
.ASCIZ <CR><LF>"HX DSK/TTY multiplexer v1.0 2012"<CR><LF>
Не очень хорошая идея вписываться в докементированные (со времен как минимум 4.0) области заголовка драйвера.
Код:
. = 200 ; DATA DEVICE Installation check
Return
. = 202 ; SYSTEM DEVICE Installation check
Если совместимость с самыми древними мониторами не нужна (а в том виде как есть ее и так нет), то можно
воспользоваться макросом .DRINS который предназначен для определения точки инсталяции.
Думаю проще JSR R0 и строка текста после
Кстати, тут как я понимаю готовился .PRINT изначально, мешался драйверу?
Код:
.DrSet MMGT, 2, O.GEN, NUM
Бессмысленный функционал. Драйвер работает с буфером программы и следовательно требует специальной работы с ним для XM. Непонятно зачем испольхуется значение - можно же было сделать [NO]KEY.
Код:
O.GEN:
Tst R0 ; Arg = 0 ?
BEq 30$
BiS R3, HX.GEN ; Set SYSGEN bit.
Br 31$
30$:
BiC R3, HX.GEN ; Clear SYSGEN bit.
31$:
ClC
Return
CLC лишний - никто бит C не взводил, да и первая же команда его чистит в явном виде.
Код:
.IIF GT .-1000 .ERROR
В системной библиотеке есть замечательная макрокоманда для этого
.ASSUME . LE 1000,MESSAGE=<;SET area overflow>
В начале драйвера есть намек на разные CSRы. Тогда проще сделать поддержку SET HX CSR=xxxxxx.
CLR будет короче
Попутно стоит отметить, что подобное не сработает в многотерминальных системах. Можно добавить проверку и .ERROR (на случай сборки родным SYSGEN) или проверку в подпрограмме инсталяции.
Дальше углубляться не стал. Добавлю еще, что для сборки драйвера неплохо бы LINK/NOBITMAP использовать (что согласно документации в принципе требуется).