пофигу какое окно активно, выборка идёт всё равно из медленной памяти.
с другой стороны ЧВ на байте работает довольно шустро, так что не думаю что стоит заострять на медленной памяти сильно много внимания.
ну просто Machined фиксил под эмулятором под медленный комп - разница с пентагоном неземная =( вроде на 90% попал, но все равно на пенте смотреть приятнее намного...
я был бы очень благодарен тому, кто сможет ответить на следующие вопросы:
1. насколько долго вообще переключаются банки памяти?
2. как быстро можно перебросить буфер на экран при включенных прерываниях? по моему опыту - примерно за 100 000 тактов, но программист из меня не лучший.
за 100 000 тактов можно совершить примерно 3000 раз down hl, чего, по моим представлениям, обычно хватает для полного отстраивания тайлового фона и 4-5 спрайтов.
поправьте меня, если ошибаюсь.
спасибо, именно это и надо было знать как-то в литературе этот вопрос не освещается, подразумевая, видимо, что программист помимо асма еще и в железе разбирается.
Добавлено через 2 минуты
есть ли какие-нибудь готовые примеры реализации? я просто над этой задачей бьюсь сейчас, и лишние идеи, честно говоря, не повредили бы.
и еще, если запортить область после #5b00, trdos работать будет?
Последний раз редактировалось moroz1999; 05.02.2008 в 15:31. Причина: Добавлено сообщение
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
GMX для Scorpion'а можно приобрести здесь
ZX-BUS XTRaiser v2.1 (активный расширитель ZX-BUS здорового человека на 3 слота) можно приобрести здесь
SMUC 2.1 rev. C Black & White edition (v.2022) можно приобрести здесь
Scorpion ZS-256 Turbo, GMX 2048Kb, ZX-BUS XTRaiser v2.0, SMUC v2.0 rev. A, SDCard 32Gb, GS 2Mb,
ZXMC 2v28, TSFM, FDD 5'25 Teac x2, FDD 3'5 Sony, VGA&PALv2.09, PC Keyboard & Mouse
ну начинается ликбез :-) ладно как модеру мне положено это делать :-)
Если есть область данных неизвестной заранее структуры, тогда используются по простому
1) классика
ld hl,откуда
ld de,куда
ld bc,сколько
ldir
в итоге для больших массивов начальные установки можно считать 0 длительности, около 21 такт на байт, это наиболее очевидная и древняя конструкция, использовалась для переброса во всех первых играх
2) классика 2
ld a,количество_строк
ld hl,откуда
ld de,куда
metka:
ldi
ldi
..
ldi ; заданное количество раз
dec a
jr nz,metka
итого около 16 тактов на 1 байт, использовалось в robocop и многих других программах
3) классика 3
ld sp,откуда
pop hl
pop de
pop bc
pop af
exx
pop hl
pop de
pop bc
; сюда же можно записать и pop ix pop iy, однако это не так эффективно
ld sp,куда+количество_регистро� �ых_пар*2
push bc
push de
push hl
exx
push af
push bc
push de
push hl
; и заново переустанавливать стек
Эта конструкция использовалась в Satisfaction и часто в других демках. Длина - около 12 тактов на байт, за это приходится расплачиваться тем что такие конструкции не сделаешь в цикле, итого огромный размер перебросчика буфера (около 1,5 байта на 1 байт перебрасываемой области, для одного экрана около 10 кбайт).
Итого 12 тактов * 6912 байт = около 80 тыщ тактов.
Если экран обрезан по краям (например есть рамка, которую нет смысла каждый раз выводить), тогда можно уложиться и в прерывание (опять тот же Satisfaction, где карта Киева), можно даже посчитать - вместо 32*24*8 надо прорисовать 30*20*8 байт, это 4080 байт, около 60 тыщ тактов на прорисовку, даже есть время прорисовать атрибуты и сделать бегущую строчку и проиграть фоновую музыку.
Быстрее можно только если экранная область будет кривая, то есть например расположена внутри кода её выводящего -классическая для мультиколора процедура
ld hl,nn
push hl
ld hl,mm
push hl
и т.д.
nn и mm - те самые данные.
В этом случае около 11 тактов на 1 байт (меньше невозможно).
この悲しみは何時かきっと優しさに成る
貴方に逢えた丘の上星が降る
-------------------------------------------------
Критик - человек, рассуждающий о том, как бы правильно сделал он сам... если бы умел.
-------------------------------------------------
Sony PS2 SCPH-70008 et Sony PS3 Eur 2.10
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)