Ещё один вариант кода для вывода символа на разогнанном процессоре без помощи внешнего железа по отлову байтов на шине, как в предыдущем случае:
Code: Select all
MOV A,M ; 7
STA vport ; 13
INX H ; 5
INX H ; 5
Тут пользуемся тем, что первый проц выводит чётные байты, а второй - нечётные. Всего 30 тактов, разнесённых по процам на 15 тактов - в каждые 15 тактов будет выводиться одна полоска символа - по 2 такта на точку (7 точек) плюс 1 такт пробел между символами - в таком случае при 5 МГц получим 16 символов в строке...
Или вот так (на основе моего первого предложение в оригинальном посте):
Code: Select all
LXI H, video-mem ; address of current line
if(processor==1) INX H ; make odd for processor 1
LXI D, video-out ; address instead of port
; 24 ticks to send byte
MOV A,M ; 7
STAX D ; 7
INX H ; 5
INX H ; 5
; 24 ticks to send another byte
MOV A,M ; 7
STAX D ; 7
INX H ; 5
INX H ; 5
.... ; etc
12 тактов на символ - 2 такта на пиксел 6-пиксельных символов - 20 символов в строке при 5 МГц (и 16 при 4 МГц)
P.S. При разнесённых чётных и нечётных последовательностей тоже можно что-то такое соорудить:
Code: Select all
MOV A,M ; 7
OUT vport ; 10
INX H ; 5
Всего 22 такта - по 11 тактов на символ - по 2 такта на точку (5 точек) плюс 1 такт на промежуток - в этом случае при 5 МГц в строку влезет до 22 символов.
P.P.S. Ещё один вариант - задавать коды символов прямо в обработчике прерывания, тогда обработчик строкового прерывания не будет отдавать управление пока не нарисует весь видимый кадр:
Code: Select all
MVI A,code0 ; 7
STA vport ; 13
MVI A,code2 ; 7
STA vport ; 13
MVI A,code4 ; 7
STA vport ; 13
...
Тут имеем 10 тактов на символ (20 тактов разнесённых по процам на 10 тактов) - 24 символа в строке при 5 МГц (и почти 20 при 4 МГц)
P.P.P.S. А вот тоже самое если держать адрес видеопорта в DE:
Code: Select all
MVI A,code0 ; 7
STAX D ; 7
MVI A,code2 ; 7
STAX D ; 7
MVI A,code4 ; 7
STAX D ; 7
...
Получается 7 тактов на символ - 34 символов в строке при 5 МГц и почти 28 при 4 МГц ( можно ограничиться скажем 24 x 18 )
Вот ещё проще:
Code: Select all
MVI M,code0 ; 10
MVI M,code2 ; 10
MVI M,code4 ; 10
...
Но цифры не очень удобные - 5 тактов на символ...