Вопрос наверное будет к vinxru.
это вообще как и если можно с живми примерами.
Вид для печати
Вопрос наверное будет к vinxru.
это вообще как и если можно с живми примерами.
Видеоконтроллер РК86 имеет разрешение 78 символов (по 6 пикселей) в ширину и 300 пикселей в высоту. Но из за чьих то кривых рук, на экране в лучшем случае видно 64 символа и 250 линий. Остальное за краем экрана.
Высоту символа (1-16) и количество текстовых строк (1-64) мы можем выбрать любое, но так, что бы в итоге получилось 250-300 графических строк. Иначе попылывут кадры.
Мы можем указать 64 строки высотой 4 пикселя. Получится нестандартная частота кадров. Вроде как ~60 Гц. Кадр станет уже.
---------- Post added at 23:19 ---------- Previous post was at 23:13 ----------
А у компьютера Апогей в знакогенераторе есть псевдографические символы 6x8, делящие знакоместо по ширине на 3 части, а по высоте на 2.
То есть, мы можем утроить разрешение по ширине и удвоить по высоте.
Но, само собой, если мы поставим высоту строки в 4 пикселя, но не увидим нижнюю половину символа и удвоения не произойдет.
Тут один вариант, высота строки 8 пикселей. И у нас получается 250/8 = 31 строка.
То есть по ширине 64*3=192 пикселя, а по высоте 31*2=62.
---------- Post added at 23:21 ---------- Previous post was at 23:19 ----------
Я с этим в живую экспериментировал. Включал разные видеорежимы и рисовал всякие картинки.
Если очень интересно, то могу поискать примеры на диске.
---------- Post added at 23:26 ---------- Previous post was at 23:21 ----------
А у стандартного РК86 в знгакогенераторе только псевдографические символы 6x8, делящие знакоместо по ширине на 2 части и по высоте на 2.
И псевдографическое разрешение по ширине 64*2=128 пикселей, а по высоте 31*2=62.
vinxru, А как насчет примеров?
если мы это сделаем, то видеопамять залезет на ячеки монитора и стек, или надо полностью перепрограмировать на другую область памяти.
вобщем ни одна известная мне программа для Микроши этого не делает.
---------- Post added at 09:49 ---------- Previous post was at 09:40 ----------
vinxru, это я собственно к чему...
вынесите ваши изыски с ВГ75 в отдельный раздел ВИКИ, и не вводите читателя в оману.
речь идет об этом http://zx-pk.ru/wiki/Микроша
Atari, я думаю vinxru имел ввиду Апогей когда писал про примеры.
Да, примеры для Апогея. Но на форуме есть адаптированный пример для Радио 86РК. Там отличия только в адресе ВГ75.
Я напишу для эмулятора пример тогда.
75FF - это верхняя граница свободного ОЗУ для 32к версии компов. в примерах надо перенести сам адрес портов ВГ75, адрес порта ВТ57 для Микроши и 86РК одинаков.
но, если будут использоваться обращения к монитору, то последний будет хранить временные переменные в стандарнтной области 7600h-76CFh ибо она является "зашитой".
а там хранятся константы работы с магнитофоном, адреса курсора и много еще чего забавного.
Не понял.
В компьютерах Апогей, 86РК и Микроша отличается адрес порта ввода вывода ВГ75 и ВТ57 в оперативной памяти. В программе надо будет подправить только их адреса.
А сама программа скажет контроллерам, что теперь у нас высота символа, кол-во строк и размер буфера в памяти другое.
---------- Post added at 11:22 ---------- Previous post was at 11:20 ----------
Конечно. Адрес видеопамяти переносится. Либо. В видеопамяти можно разместить значения F1 (стоп ПДП), что "сожмет" видеопамять.
Я так то же делал.
Каждая строка занимает 78 байт. При этом первые 5 байт не используются, так как символы попадают за левый край экрана. И последние 9 байт не используются.
Стандартный объем видеопамяти 78*30 = 2340 байт.
Но если мы разместим в видеопамяти значение F1, то это будет считаться началом следующей строки. То есть не надо будет тратить 9 байт памяти для правого поля.
И не надо тратить 78*5 = 390 байт для верхнего и нижнего поля.
Проверено.
Итого, видеопамяти у нас в обрез 2340 байта. Но в этом объеме мы сможем поместить режим 64x31, если мы будем использовать значение F1.
9 слева + 64 полезное + 1 стоп = 74 байта на строку
Еще 3 пустых строки сверху и 3 снизу. Байты F1 не могут идти подряд, поэтому по 2 байта на строку.
74 * 31 + 2 * 6 = 2306 байт.
Еще 34 байта в запасе осталось :)
---------- Post added at 11:29 ---------- Previous post was at 11:28 ----------
Гонки на Апогее заполняют всё ОЗУ рисунком трассы, а потом просто изменяют адрес видеопамяти. И получается аппаратный скролл.
vinxru, и еще о прозе...
я там написал что на ПДП тратится 10% машинного времени, но что-то мне кажется, что эта цифра сильно занижена, и наверное реально стремится к 30%.
какие будут идеи как проверить?
---------- Post added at 10:33 ---------- Previous post was at 10:31 ----------
отлично, в статьях о Апогее я вам не запрещаю писать все что вам хочется.
В Микроше используются те же микросхемы ВТ57 + ВГ75.
Адрес видеопамяти загружается в ВТ57 при старте компьютера и может быть изменен. Это стандартный контроллер DMA. Микросхема ВТ57 читает из указанной области памяти байт и отдает его ВГ75.
Сама ВГ75 ни к какой памяти не привязана. Она умеет только у ВТ57 просить один байт.
--
Пишем цикл, который дергает CLI и STI. Подключаем тестер в режиме измерения частоты к динамику.
a:
cli
sti
jmp a
Программно отключаем ВТ57 (это делается при загрузке программы с магнитофона, иначе процессор непредсказуемо тормозит). И запускаем ту же программу, и так же измеряем частоту динамика.
vinxru, у микроши динамик висит на таймере, и к INTE не привязан.
А зачем тебе это нужно? Если ты пишешь программу работающую в псевдографике, то ты явно будешь выводить графику не ESC последвательностями, а напрямую записью в видеопамять.
Курсор устанавливается через порт быстро и просто.
Все поголовно работают с видеопамятью и железом напрямую. Иначе бы программы Апогея, Микроши, РК86 были бы совместимые. Программ работающих через ПЗУ всего десяток.
гениально, а если мне понадобиться вывести текст?
конечно, одну строчку можно и прицелиться, но когда их больше одной?
да, если стоит вопрос только запхнуть байты в порты. но говорят (наверное врут) что иногда надо соотносить позицию курсора с адресом в видео ОЗУ. и говорят (наверное опять врут) что для этого надо провести некоторые математические действия.
если под словом "железо" понимать клаву и таймер то да.
пограмм которые напрямую работают с ВГ75 и ВТ57 единицы.
Вот тебе программа для Микроши включающая псевдографический режим 128x62, причем этот режим использует меньше ОЗУ, чем оригинальный 128x50
Код:; Пример псевдографического режима
; (с) 17-04-2012 vinxru
; Используется компилятор sjasm
device zxspectrum48
hdr: db 0,4
dw 0
start: ; Ждем обратный ход
ld hl, 0D001h ; для Апогея 0EF01h
ld a, (hl) ; Обязательно пару команд!
wait1: ld a, (hl)
and 20h
jp z, wait1
; Вырубаем видео
ld hl, 0D001h ; для Апогея 0EF01h
ld (hl), 0
; Заполняем видеопамять (из за байта F1 это надо делать пока видео выключено)
ld bc, data
ld hl, 76D0h ; для Апогея 0E1D0h
copy: ld a, (bc)
cp 0FFh
jp z, endCopy
ld (hl), a
inc bc
inc hl
jp copy
endCopy:
; Устаналиваем режим и врубаем видео
ld hl, 0D000h ; для Апогея 0EF00h
ld (hl), 04Dh ; 78 символов
ld (hl), 36 ; 37 линий
ld (hl), 7 ; Высота символа 8
ld (hl), 083h
; Врубаем видео
inc l
ld (hl), 27h
; Висим
jp $
data: db 0,0F1h,0,0F1h,0,0F1h
db 0,0,0,0,0,0,0,0,0, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0F1h ; 0
db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 1
db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 2
db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 3
db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 4
db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 5
db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 6
db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 7
db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 8
db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 9
db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 10
db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 11
db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 12
db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 13
db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 14
db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 15
db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 16
db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 17
db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 18
db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 19
db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 20
db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 21
db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 22
db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 23
db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 24
db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 25
db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 26
db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 27
db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 28
db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 29
db 0,0,0,0,0,0,0,0,0, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0F1h ; 0
db 0,0F1h,0,0F1h,0,0F1h
dataEnd: DUP 78*30 - (dataEnd-data)
db 0
EDUP
db 0FFh
end: savebin "test.rkm",hdr,end-hdr