b2m, приветствую.
Сегодня нашёл непонятный глюк в эмуляции ОРИОН'ов (128 и ПРО)!
При запуске исполняемого кода во второй странице ОЗУ, попытка исполнения команды LHLD <addr> приводит к порче содержимого этой самой второй страницы в произвольном месте. Места порчи зависят от <addr>, но какой-то явной корреляции со значением адреса я не увидел. Например, чтение по адресам 8003..8006h дают один и тот же глюк ПО, по адресу 8002h глюк не проявляется, по 8000..8001h или 0000h вообще всё виснет ((
Замена в исполняемом коде инструкции "LHLD <addr>" на пару LDA <addr> и LDA <addr+1> работает без глюков. Для проверки пробовал менять LHLD на SHLD - глюка нету!!! Т.е. проблема только в команде LHLD (2A xx xx).
П.С.: в конфигурациях "128" и "ПРО" адреса порчи несколько отличаются, если это как-то может помочь следствию
П.П.С. сложность ещё заключается в том, что глюк высекается при определённом предшествующем коде (или м.б. содержимом ОЗУ ?), т.е. если написать прицельную прогу:
ORG 8000h
LHLD 8006h
RET
то глюканат не проявляется (а может где-то что-то портится, но не попадает в область, где можно заметить).
П.П.П.С. менять ORG кода, перемещать команду в теле кода, менять адрес параметра LHLD пробовал - глюк всегда проявляется.
П.П.П.П.С. исполнение данного кода на реале ещё не проверял, но уверен, что там будет всё ок.





Ответить с цитированием
Размещение рекламы на форуме способствует его дальнейшему развитию 

