Ну, что ж, запустил я тест на реальном железе. Правда, получилось, что мы с тобой перепутали: у тебя F0 - передача из контроллера в корвет, у меня получилось наоборотНу, это мы просто с противоположных сторон смотрели на процесс передачи данных, ты из корвета, я из контроллера. Вообщем, заработал твой тест.
Вполне предсказуемо, он выдает стабильные повторяющиеся результаты. То есть каждый проход ( а у тебя проходы повторяются бесконечно) получается один и тот же результат. К сожалению, скриншот АЦЗУ корвета мы не предусмотрели (а можно было бы - перекидать его в контроллер через тот же интерфейс), поэтому придется набить руками:
1: 4c 49 28
2: 00AD 00BC 022F
Первые 2 результата предсказуемо почти одинаковы - ты только поменял вычисление адреса порта (2 dec L) на прямое обращение к нему. Пожалуй, ты прав - так быстрее.
Третий результат тоже вполне объясним - ты выкинул обращение к подпрограмме, и организовал в цикле прямо работу с портами. А обращение к подпрограмме - это очень долгая операция - там и сохранение в стек, и установка PC, да еще и в самой подпрограмме сохраняются регистры в стек.
Но в реальной жизни так не получится - данные ведь не просто так забирают с порта, с ними что-то сделать надо. Например, записать в буфер. А это еще пара-тройка тяжелых команд, что, скорее всего, практически съест твое преимущество.
Ну, вот примерно так. Откуда у тебя взялась колонка 4 во втором тесте? У меня он только 3 числа выдает, по количеству вариантов GETBYTE.




Ну, это мы просто с противоположных сторон смотрели на процесс передачи данных, ты из корвета, я из контроллера. Вообщем, заработал твой тест.
Ответить с цитированием