Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).
чисто теоретические прикидки на счет к1816ве39, генератор Z (входы для кварца - CR1 CR2) способен работать на 11mhz, при этом внутренний CLK = Z/3; далее 1 машинный цикл 5 тактов CLK, т.е. 11/(3*5); загрузка в аккумулятор из внешней памяти 2 машинных цикла, значит 11/(3*5*2); ну и для переброски надо еще и выгрузить из аккумулятора в память что тоже 2 цикла, т.е. 11/(3*5*2*2) = 183333 байта/сек...
Ещё разогнал АГАТик: теперь уже 5 Махов. Результаты скорости копирования ОЗУ обновил в #2.
Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).
Жалко мало данных, даже по Z80 нет.Хотя это несложно посчитать, если взять Amstrad CPC/PCW, то там на LDIR/LDDR нужно 24 такта. При эффективной частоте 3.2 МГц получаем 133.33 Kбайт/сек. У Спека при работе с быстрой памятью на LDIR/LDDR - 21 такт при эффективной частоте 3.5 МГц, итого - 166.67 Kбайт/сек. Если развернуть цикл и использовать LDI/LDR, то будет 16 тактов на байт на обоих системах. Для супербыстрого заполнения можно использовать PUSH - 11 тактов на словo на Спеке - 636.36 Kбайт/сек.
Немного запутывающая таблица. На 6502 можно копировать байт за примерно 14 тактов, если использовать самомодифицирующийся код. И на 6502 использовать стек для копирования/заполнения ну никак нельзя (хотя на некоторых системах с ММУ используют), адрес стека там фиксированный и его размер 256 байт. Поэтому соответствующиу данные ни о чем. Для 65816 можно копировать самомодифицирующим кодом слово в первом банке за 16 тактов, для произвольных банков 18. И использование стека на 65816, хотя и не так сильно урезано, как на 6502, но урезано - там стек всегда в первом банке.
Последний раз редактировалось litwr; 19.05.2023 в 12:14.
Посчитал результаты для Корвета (8080, 2.5 МГц). Быстрейшее копирование блока почти наверняка можно сделать кодом
Получаем 39 тактов на байт, 2.5*10^6/39 ≈ 64.11 KБ/сек. Если цикл развернуть, то будет 24 тактa на байт, ≈ 104.17 KБ/сек. Тайминги брал с https://litwr2.github.io/8080-8085-z...-Z80-8088.htmlКод:ld hl,FROM ld de,TO ld bc,COUNT loop ld a,(hl) ld (de),a inc hl inc de dec c jp nz,loop dec b jp nz,loop
Интересно ещё по размеру коды сравнивать, для Z80 код самый короткий - 11 байт, для PDP-11 - 16 байт, для 8080 - 21 байта, для 6502 - от 38 байт.
Последний раз редактировалось litwr; 19.05.2023 в 19:17.
8080
17 тактов/байтКод:pop d mov m,e inx h mov m,d inx h
- - - Добавлено - - -
Если в спековском стиле
то 13.8(3) такта/байтКод:lxi sp,откуда pop b pop d pop h lxi sp,куда push h push d push b
- - - Добавлено - - -
еще вариант
13 тактов/байтКод:pop h shld
Что касается PDP-11
Ну если данные подготовить для копирования, считать...
Три регистра надо:
адрес в первый откуда
адрес во второй куда
в третий сколько
далее всего две команды, пересылка MOV с автоинкрементом или автодекрементом (ну как хочется лучше)
и затем следующий SOB
Сама пересылка две команды или слова, или 4 байта
если учесть инициализацию, считая по тупому пересылку память -регистр, тогда 16 байт будет...
Но если исходные данные разместить по адресу четвёртого регистра, и считывать их инкрементом или декрементом то памяти будет менее, так как команды будут корочеНо вырастет объём данных
Так что... се ля ви...![]()
Последний раз редактировалось Alex; 19.05.2023 в 19:52.
Такими кодами всех пидипишников напугать можно сильно.Только хорошо бы добавить, что нужно отключать прерывания и сохранять/восстанавливать SP, что второй код не загнать в цикл, что третий код потребует гораздо дольшей подготовки, чем само копирование. Ну и вообще странно, когда на копируемый байт нужно от 2 байт копирующего кода.
Надо было мне написать "Быстрейшее НОРМАЛЬНОЕ копирование блока почти наверняка можно сделать кодом".
Для 6502 аналогом 3-о кода будет
8 тактов на байт и прерывания запрещать не надо. Команды копирования долгие и поэтому должны обеспечивать прерывания, что и сделано в Z80, 8086, 65816, ... - это кстати потребовало дополнительных усилий от разработчиков.Код:LDA STA
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)