Ниже приведена моя процедура самоизменения для копирования памяти на Commodore 64.
Я записал char codes
и number of repeats
в таблицу и заполнил screen_ram этой процедурой.
Жду предложений по оптимизации. В данном случае у меня в приоритете память.
memCopy:
sourceAddress=*+1 ; mark self modifying addrres
fetchNewData:
lda data_table ; read char value into A
ldx data_table+1 ; read repeat value into x
inc sourceAddress
inc sourceAddress
cpx #00 ; if X=0
beq end ; finish copying
destination=*+1
- sta SCREEN_RAM
inc destination
dex
bne -
jmp fetchNewData
end:
rts
; data format: <char>,<number of repeats>,[<char>,<number of repeats>,...],00,00
data_table:
!by 01,03,02,02,......,00,00
SCREEN_RAM
и только в том случае, если он был выровнен по 256 байтам в начале. - person lvd   schedule 11.02.2016