А теперь тоже самое на экране ТВ:cr0acker wrote:ООООО Шаос играет в Дюну2%)Shaos wrote:![]()

Читать тут
Moderator: Shaos
А теперь тоже самое на экране ТВ:cr0acker wrote:ООООО Шаос играет в Дюну2%)Shaos wrote:![]()
Code: Select all
Lines 0...199:
____^^^^^^^^^^^^^^^^^^^^__
|__|
48 84 480 (screen) 24
Lines 200...224:
__________________________
|__|
48 588
Lines 225,226,227:
__
| |__________________________
48 588
Lines 229...261:
__________________________
|__|
48 588
Code: Select all
Lines 0...199:
____^^^^^^^^^^^^^^^^^^^^__
|__|
48 84 480 (screen) 28
Lines 200...243:
__________________________
|__|
48 592
Lines 244,245,246:
____________ ____________
|_| |_|
24 296 24 296
Lines 247,248:
___________ __
|_______________|
276 318 46
Line 249:
___________ _______________
|__|
276 48 316
Lines 250,251:
____________ ____________
|_| |_|
24 296 24 296
Lines 252...311:
__________________________
|__|
48 592
Для упрощения можно разрешить на чтение и запись только порт символа - остальные только на запись. К видеопамяти можно обращаться не по координатам, а по адресу в микросхеме - в этом случае не придётся ставить лишний сумматор, на вычисление адреса из координат - хотя сумматор(ы) всё равно будет, чтобы в процессе отрисовки считать смещение в видеопамяти 80*y+x = (y<<6) + (y<<4) + x. Ну и скролл можно добавить - для круглоты например поддержав 64 строки, замкнутые в кольцо (это 5Кб) и на экран выводится 25 строк идущие подряд по указанному в порту управления смещению плюс флаг разрешения записи (чтобы можно было спокойно 3 байта один за другим заполнить не вызывая порчу данных на экране по неполным координатам):Shaos wrote:Ну тогда можно и к NI-15 его присобачитьНу, если это все равно символный экран, т.е. маленький, можно и портами... Чтобы проводков меньше было.
Примерный расклад такой - имеем 4 порта:
#B0 - порт управления (пока мыслится один бит 0 - обычный шрифт "0" или псевдографика "1")
#B1 - порт координаты X (допустимые значения 0...79)
#B2 - порт координаты Y (допустимые значения 0...24)
#B3 - код символа в указанных координатах (прочитать или записать)
Все порты функционируют и на запись, и на чтение. Ввиду того, что схема не будет тормозить центральный проц в случае занятости, центральный проц должен будет переспрашивать значение символа после каждой записи, чтобы убедиться, что он действительно записан:
Время выполнения подпрограммы - 40+39*N тактов, где N - количество попыток записи. Вывод одного символа в лучшем случае займёт 40+39=79 тактов (или 25316 символов в секунду при 2 МГц), но с учётом того, что в пределах кадра будут "мёртвые зоны", внутри которых видеопамять будет недоступна внешнему процессору, реальная скорость будет меньше (будет больше неудачных попыток записи) - предположительно "мёртвые зоны" будут занимать 6% всего времени (это для PAL, а для NTSC больше - 7.2%).Code: Select all
PRINT: ; B-x, C-y, D-code MOV A,B ;5t OUT #B1 ;10t MOV A,C ;5t OUT #B2 ;10t PRINT1: MOV A,D ;5t OUT #B3 ;10t IN #B3 ;10t CMP D ;4t JNZ PRINT1 ;10t RET;10t
P.S. В будущих версиях можно прикрутить автоматический инкремент координат по чтению или успешной записи символа (будет устанавливаться двумя битами в порту управления).
P.P.S. Кроме того в будущем можно вообще избавиться от "мёртвых зон" тщательно подсчитав тактирование так, чтобы заведомо более медленный центральный проц всегда попадал своими запросами на свободную видеопамять (причём без насильственного торможения центрального проца).
Code: Select all
0 - black on white background (inversion)
1 - blue
2 - green
3 - cyan
4 - red
5 - magenta
6 - brown (or dark yellow?)
7 - white on black background