Если ASHC выполняется за такое же время, как и ASH, то я бы сделал что-то типа того:
Код:R0, R1 - рабочие регистры R2 - какой-то буфер для спрайтов R3 - счетчик столбцов R4 - сдвиг R5 - указатель на спрайт 22$: MOV R3,-(SP) ; Сохранить R3 на стеке MOV @#176640,-(SP) ; Сохранить регистр адреса планов 1,2 на стеке 11$: CLR R0 ; R0 = 0 MOV (R5)+,R1 ; (R5)+ -> R1 ASCH R4,R0 ; R0.R1 << R4 BIS R0,R1 ; R1 = (R5)+ rol R4 MOV R1,R0 ; mask: BIC 0x0F0F,R0 ; Оставить старшие части сдвинутых байт ; (слово маски писать прям в код самомодификацией) BIS R0,@#176642 ; (план 1,2) = (план 1,2) | R0 MOV R0,(R2)+ ; R0 -> (R2)+ INC @#176640 ; Прирастить регистр адреса планов 1,2 XOR R0,R1 ; Оставить младшие части сдвинутых байт BIS R1,@#176642 ; (план 1,2) = (план 1,2) | R1 MOV R1,(R2)+ ; R1 -> (R2)+ SOB R3,11$ ; Цикл на R3 итераций MOV (SP)+,@#176640 ADD #80.,@#176640 MOV (SP)+,R3 3$: DEC #0 BNE 22$
Так было такое количество лишнего кода, что не удивлюсь, если даже при большем времени выполнения ASHC - новый код выиграет у старого
Были жалобы на нехватку памяти. Правда, если вместо 25 слов использовать 31 - то таки да, никакой памяти не хватит
- - - Добавлено - - -
BIC 0x0F0F,R0 => BIC #^B<0000111100001111>, R0
Твои же собственные тесты с этими командами протухли)
https://zx-pk.ru/threads/14702-rasch...l=1#post590216
Titus, но там сами тесты остались или нет? Что бы @S_V_B у себя мог прогнать?
если надо образ и все тесты Патрона выложу повторно
Не будет работать, поэтому так много лишнего кода.Код:11$: CLR R0 ; R0 = 0 MOV (R5)+,R1 ; (R5)+ -> R1 ASCH R4,R0 ; R0.R1 << R4 BIS R0,R1 ; R1 = (R5)+ rol R4 MOV R1,R0 ; mask: BIC 0x0F0F,R0 ; Оставить старшие части сдвинутых байт ; (слово маски писать прям в код самомодификацией) BIS R0,@#176642
В вашем примере байт не расширяется до слова.. а сдвигаются два последовательных байта спрайта.
И в памяти планы чередуются через байт 1,2,1,2..
Смысл в чем, взяли байт - сдвинули его в слове, а потом наложили BISом следующее слово со смещением в байт, тогда все склеится правильно.
Последний раз редактировалось S_V_B; 10.10.2019 в 06:46.
БK 0010-01, БК 11М, БК11М+,МС 0511 (УКНЦ)х3, Atari 65XE, Commodore 64, AMIGA 500 (HDD), ZX EVO
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)