barsik, попробую нарисовать свою идею псевдографикой.
Код:
[================ФФФФФФФ=========================================] - Память спектрума. Тут сидит экран, который является фоном.
/--------------|
|---------/ |
[ССССССС] | - экран для спрайтов.
| |
| |
[ММММММ==========================================] - Теневая память для масок.
|-------------------------|
| |
(с2) (спр1)
Когда мы копируем спрайт, то например, читаем байт из адреса (спр1) и пишем его по адресу (с2). В это же время одновременно с ним в памяти маски копируется байт из адреса (спр1) в адрес (с2) байт, который является маской байта пикселей спрайта, который мы сами копируем.
В общем, копируем 1 байт, а на самом деле железом копируется сразу 2 байта в 2 разных банках памяти. И без портов или регистров. По крайней мере, это должно быть прозрачно для программиста.