
Сообщение от
Korchagin
О, нет. Заглянул точно не один
Я Вас и имел ввиду. Судя по тому, что вопрос возник через десяток сообщений после моего о том, что выложил... А потом как то никто не удивлялся - или все заинтересованные видели этот вопрос и ответ или....
Кто-то в DEC нарисовал набор макросов (и даже как минимум в одной из системных программ они были использовано), я после появления у меня Квант-а слегка поковырялся, даже начал использовать и слегка подрихтовал под Modula-2 подобность. Ну, а когда начал дизассемблить 134 долго парился с отслеживанием всех этих переходов и меток, а потом вспомнил, попробовал - и на удивление быстро причесал код. По крайне мере теперь стало гораздо меньше локальных меток (то есть тех, на которые идёт переход из одного двух мест) и стало гораздо проще логику ловить. Но из за работы как режиме halt, так и в обычном режиме - всё равно голову ещё приходится ломать..
В целом - писать с их использованием проще (хотя надо почувствовать и знать возможные варианты написания - до сих пор в исходники подглядываю) и с учётом некоей высокоуровневости кода - проще понимать (особенно знакомым с Паскалем), но с учётом того, что это всё равно транслируется ассемблером - на вложенных (по крайне мере) IF-ах получаются лишние BR-анчи. И как минимум пару ошибок в макросах - например, оператор ELSEIF (или ELSIF - не помню, как макрос назвали) есть, но код генерится неправильный. И ещё какую то ошибку находил...

Сообщение от
Korchagin
на поток реверсерской мысли
Скорей посмотреть - а что там в ПЗУ-ах делается...
- - - Добавлено - - -

Сообщение от
AFZ
Ну и писал бы сразу по-человечески
Я взял кусок кода из дизассмеблированной 134-ой.

Сообщение от
AFZ
Скорее всего, вызывающая программа в цикле вызывает эту программу, смотрит эту TSTMOD и ждет, пока она не станет TVKBNC
А теперь после этого "замечательного гадания" смотрим на этот код
Код:
..............................................................................
;
;
;
PROCEDURE L06006
BEGIN
IF @#PWRUP EQ #123456 THEN
CALL L13316
JUMPTO L02152
END
; Интересный вариант повтора после определения замкнутости входа на выход :)
LOOP
IF @#TSTMOD EQ #TVKBC THEN ; вход на выход замкнут ?
IF @#HV002 NE #0 THEN
LET @#HV002 := #0
LET @#HV154 := R2
CALL TEST4 ; T4
END
LET @#HV160 := @#HV160 + #1
LET @#HV156 := #0
CALL L12556
LET @#PWRUP := #0 ; вечное включение питания
JUMPTO TEST0 ; T0 и возврат в эту процедуру
END
IF @#TSTMOD EQ #TVKBNC THEN ; вход на выход НЕ замкнут ?
LET @#PWRUP := #123456 ; все, питание включено
JUMPTO TEST0 ; однократный прогон T0 и в пульт
END
; А ещё не знаем, поэтому - на определение
CALL CLUPBC
LET @#HV154 := #0
LET @#HV160 := #0
LET @#HV002 := #0
END
END L06006
и на этот код
Код:
..............................................................................
;
;
;
PROCEDURE L12556
BEGIN
IF #TVKBNC NE @#TSTMOD THEN
IF @#HV160 GE #20
LET @#HV160 := #1
END
LET R2 := @#HV156 + @#HV160 + @#HV050
LET @#LPB := R2
END
RETURN
END L12556
LPB, если что - это регистр принтера, тот, который буфер для печатаемого байта
- - - Добавлено - - -
- - - Добавлено - - -

Сообщение от
AFZ
Посылаем звездочку, ждем ее возврата, проверяя готовность приемника. Дождавшись
Каким образом символ, посланный на для вывода на экран - прилетит через входной регистр клавиатуры, а?
- - - Добавлено - - -

Сообщение от
AFZ
Как-то так
То есть выводы делаем даже не заглянув в код ПЗУ. По всей видимости.
Мои то (возможные) ошибки хоть каким то кодом подкреплены...