Какие же все-таки муд... писали этот ROM фордовский. Они что, специально его гады запутывали,
что-ли? Такой блин идиотизм местами прет, что ховайся...
Как же много на все это времени уходит...
Ну и для программистов пара примеров:
Как вы думаете надо брать константу из сегмента данных на ассемблере без непрямой адресации?
Думаете в 2 команды? Типа :
LD REG1 $ADDR ; Загрузили адрес в регистр
LD REG2 [ADDR] ? ; Загрузили значение
Или даже в одну:
LD REG2 $ADDR[0]? : Загрузили значение по фиксированному смещению от 0
Дудки! Как вам такой пассаж:
LD REG1 $ADDR1 ; Адрес индекса абсолютно константный (сегмент данных)
LD REG2 [ADDR1] ; Собственно сам индекс такой же
DEC REG2 $4 ; Отняли зачем-то 4
LD REG3 $ADDR[REG2] ; Взяли значение по посчитанному (из константы!!) индексу
Песня, блин...
Или еще лучше - есть у нас функция которая периодически опрашивает АЦПшки и
укладывает их значения в память в цивильную табличку типа [# канала][значение]
Нам хочется отфильтровать явно бредовые значения (0 там или более 5 вольт)
и тоже сложить куда-то. Пользуем мы для этого функцию фильтра (как она написана - это
отдельная история). Как бы нам туда передать аргументами КУДА складывать и КАКОЕ
значение? Это при том что у нас 256 регистров, которые никогда не уничтожаются при вызовах?
Думаете - заполнив 2 регистра? Дудки!
Этот код - просто вершина!
Вызывающая функция:
CALL Filter_func
WORD XXXX ;Это прямо в кодовом сегменте - привет эдакий для дизассемблера
: По задумке авторов это адрес КУДА укладывать фильтрованое значение
...
Вызываемая функция (фильтр):
CALL GetArgs_func ;Верх идиотизма! Эта функция вытаскивает в регистры YY байт после
BYTE YY ; собственного возврата! Т.е. ХХХХ!
...
И таких пассажей там еще много! Блин, начинаю задалбываться...