Важная информация

User Tag List

Страница 2 из 4 ПерваяПервая 1234 ПоследняяПоследняя
Показано с 11 по 20 из 32

Тема: Вектор Турбо+

  1. #11
    Member
    Регистрация
    19.09.2022
    Адрес
    г. Саров
    Сообщений
    31
    Спасибо Благодарностей отдано 
    18
    Спасибо Благодарностей получено 
    27
    Поблагодарили
    10 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Improver Посмотреть сообщение
    Будет повод изучить Альтиум...

    Моя почта [email protected]. Если в телеграм, то можно прямо в канал t.me/VECTOR_06C.

    Но лучше все файлы по Вектору-Турбо разместить где-нибудь на гугл- или яндекс-диске, или на гитхабе, а тут запостить ссылку.
    Выслал проект на почту.
    И ссылка на Google Диск
    https://drive.google.com/drive/folde...Tg&usp=sharing
    Последний раз редактировалось Napoleon1; 20.09.2022 в 17:20.

  2. Эти 2 пользователя(ей) поблагодарили Napoleon1 за это полезное сообщение:

    Improver (20.09.2022), ivagor (20.09.2022)

  3. #12
    Master Аватар для Improver
    Регистрация
    06.02.2018
    Адрес
    г. Волгоград
    Сообщений
    982
    Спасибо Благодарностей отдано 
    441
    Спасибо Благодарностей получено 
    402
    Поблагодарили
    224 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Napoleon1 Посмотреть сообщение
    Выслал проект на почту.
    Спасибо, получил и успел уже бегло посмотреть... Что сразу порадовало:
    • замена к155ру2. Возможно это было сделано в первую очередь для режимов с 64 и более цветами, но всё равно это шаг вперёд.
    • замена видеоЦАП на резисторах на ADV7120(7125) -- я об этом думал, но так и не решился опробовать... (не в обиду адептам 100% совпадения цветов палитры, но это должно давать хорошую равномерность градиента по цветам)
    • выход на cxa2075. Пожалуй, лучший вариант для вывода на телевизор, в том числе, думаю, и по rgb на скарт.


    И что огорчило:
    • организация видеопамяти осталась в 32 бита, как на стандартном Векторе. Можно было бы сделать 16 бит, как в схеме ПК-6128, а то и вообще сократить до 8 бит.


    Буду изучать схему дальше...

  4. #13
    Member
    Регистрация
    19.09.2022
    Адрес
    г. Саров
    Сообщений
    31
    Спасибо Благодарностей отдано 
    18
    Спасибо Благодарностей получено 
    27
    Поблагодарили
    10 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Improver Посмотреть сообщение
    Спасибо, получил и успел уже бегло посмотреть... Что сразу порадовало:
    • замена к155ру2. Возможно это было сделано в первую очередь для режимов с 64 и более цветами, но всё равно это шаг вперёд.
    • замена видеоЦАП на резисторах на ADV7120(7125) -- я об этом думал, но так и не решился опробовать... (не в обиду адептам 100% совпадения цветов палитры, но это должно давать хорошую равномерность градиента по цветам)
    • выход на cxa2075. Пожалуй, лучший вариант для вывода на телевизор, в том числе, думаю, и по rgb на скарт.


    И что огорчило:
    • организация видеопамяти осталась в 32 бита, как на стандартном Векторе. Можно было бы сделать 16 бит, как в схеме ПК-6128, а то и вообще сократить до 8 бит.


    Буду изучать схему дальше...
    Выходную видеопамять я сначала искал двухпортовую, это было бы проще, но подходящей не нашёл. Пришлось ставить обычную с громадным избытком по объёму. Заодно использовал её же в других местах.
    ЦАП сначала тоже хотел городить на резисторах, но получилось очень громоздко - с готовым ЦАПом гораздо компактнее и проще.
    А насчёт битности памяти - чем это плохо? Учитывая время выборки принципиально можно было бы сделать 16 бит, но понадобились бы промежуточные регистры и другие мультиплексоры адреса. А суммарно всё равно микросхем ОЗУ столько же, поскольку требуются однобитные микросхемы, чтобы работал механизм маски записи в ОЗУ.
    Поэтому не удалось применить современные микросхемы. Зато получилось аутентично :-)

  5. #14
    Master Аватар для Improver
    Регистрация
    06.02.2018
    Адрес
    г. Волгоград
    Сообщений
    982
    Спасибо Благодарностей отдано 
    441
    Спасибо Благодарностей получено 
    402
    Поблагодарили
    224 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Napoleon1 Посмотреть сообщение
    Выходную видеопамять я сначала искал двухпортовую, это было бы проще, но подходящей не нашёл. Пришлось ставить обычную с громадным избытком по объёму.
    Да, я замелил избыток, но он не критичен. Хотя, избыток можно было бы использовать под хранение нескольких наборов цветов палитры и быстро их переключать, но оставим это улучшение на потом. А с двухпортовой памятью может и было бы проще, но смысла там в ней нет -- это же не видеопамять, когда нужно писать и читать одновременно по разным адресам, тут просто палитра, которая иногда пишется между кадрами.

    Цитата Сообщение от Napoleon1 Посмотреть сообщение
    А насчёт битности памяти - чем это плохо?
    Это не плохо, просто сокращение битности до 16 позволит сократить количество корпусов памяти вдвое, и можно будет применять более ёмкую память, а то и вовсе перейти полностью на статику...

    Цитата Сообщение от Napoleon1 Посмотреть сообщение
    Учитывая время выборки принципиально можно было бы сделать 16 бит, но понадобились бы промежуточные регистры и другие мультиплексоры адреса.
    Посмотрите схему ПК-6128, там это элегантно решили всего одной микрухой-триггером, делая задержку на 1 бит по двум каналам, что позволило читать данные последовательно по 16 бит.

    Второй вариант -- использовать 74HCT597, там сдвиговый регистр дополнен защёлками на параллельном входе, можно асинхронно записать туда байт, а потом, в нужный момент, загрузить его в регистр. Как это работает можно глянуть в схеме моей графической платы.

    Цитата Сообщение от Napoleon1 Посмотреть сообщение
    А суммарно всё равно микросхем ОЗУ столько же, поскольку требуются однобитные микросхемы, чтобы работал механизм маски записи в ОЗУ.
    А что за "механизм маски записи в ОЗУ", извиняюсь?

  6. #15
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    7,863
    Спасибо Благодарностей отдано 
    658
    Спасибо Благодарностей получено 
    1,854
    Поблагодарили
    1,059 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Improver Посмотреть сообщение
    что за "механизм маски записи в ОЗУ"
    "46h - порт маски записи", 12я страница Вектор Турбо.docx. На мой субъективный взгляд околоEGAшные возможности (порты 45h и 46h) в том виде, в котором они сделаны, приносят проекту больше вреда чем пользы. Другое дело, если бы они были поддержаны большим количеством ПО, но на это вряд ли можно рассчитывать.
    Последний раз редактировалось ivagor; 21.09.2022 в 07:06. Причина: исправил опечатку

  7. Этот пользователь поблагодарил ivagor за это полезное сообщение:

    Improver (21.09.2022)

  8. #16
    Member
    Регистрация
    19.09.2022
    Адрес
    г. Саров
    Сообщений
    31
    Спасибо Благодарностей отдано 
    18
    Спасибо Благодарностей получено 
    27
    Поблагодарили
    10 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    "46h - порт маски записи", 12я страница Вектор Турбо.docx. На мой субъективный взгляд околоEGAшные возможности (порты 45h и 46h) в том виде, в котором они сделаны, приносят проекту больше вреда чем пользы. Другое дело, если бы они были поддержаны большим количеством ПО, но на это вряд ли можно рассчитывать.
    Ну вообще-то этот механизм минимум в 3 раза ускоряет вывод символов и спрайтов не кратных по ширине байту или со сдвижкой по горизонтали не кратной байту.

  9. #16
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  10. #17
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    7,863
    Спасибо Благодарностей отдано 
    658
    Спасибо Благодарностей получено 
    1,854
    Поблагодарили
    1,059 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Napoleon1 Посмотреть сообщение
    этот механизм минимум в 3 раза ускоряет вывод символов и спрайтов не кратных по ширине байту или со сдвижкой по горизонтали не кратной байту
    Можете привести пример кода?

  11. #18
    Member
    Регистрация
    19.09.2022
    Адрес
    г. Саров
    Сообщений
    31
    Спасибо Благодарностей отдано 
    18
    Спасибо Благодарностей получено 
    27
    Поблагодарили
    10 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    Можете привести пример кода?
    Как то так.
    Код:
    ; Вывод символа на экран
    ; HL - адрес символа в знакогенераторе (символ шириной 6 пикселей в младших битах)
    ; E - младший байт адреса символа на экране (позиция строки)
    ; A - позиция символа в строке
    ; Принцип отображения для 40 символов в строке:
    ; 0 символ - сдвиг 2, символ в старших битах байта
    ; 1 символ - сдвиг 4, 2 бита в этом столбце, 4 - в следующем
    ; 2 символ - сдвиг 6, 4 бита в этом столбце, 2 - в следующем
    ; 3 символ - сдвиг 0, символ в младших битах байта
    ; Дальше всё повторяется
    
    DrawSymb:
    	di
    	push hl
    	ld b,a
    	and 3ch
    	rrca
            ld c,a
    	rrca
            add a,c
    	add a,0e0h	; Выводить будем в верхнюю плоскость
    	ld d,a	; Получаем горизонтальный полуадрес левого байта из 3 байтов, где могут быть 4 символа
    	ld a,b
    	and 3	; Выделяем биты, определяющие сдвиг символа 
    	ld bc,0300h	; Маска для 0 символа
    	ld l,2		; На сколько нужно сдвинуть влево байт символа при выводе на экран
    	jr z,DrawSymb1
    	dec a
    	ld bc,0fc0fh ; Маска для 1 символа
    	ld l,4
    	jr z,DrawSymb1
    	inc d
    	dec a
    	ld bc,0f03fh ; Маска для 2 символа
    	ld l,6
    	jr z,DrawSymb1
    	inc d	; в D получается полуадрес левого байта, где будет часть или весь символ
    	ld bc,0c000h ; Маска для 3 символа
    	ld l,0
    DrawSymb1:
    	ld a,l
    	pop hl		; Восстанавливаем указатель на символ в знакогенераторе
    	or a,0c0h	; Добавляем 3 бита системных параметров
    	out (45H),a	; Включаем циклический сдвиг
    	ld a,с
    	ex af,af'	; Сохраняем маску для второго байта
    	ld a,b
    	out (46H),a	; Включаем маску для первого байта
    	ld bc,8		; Высота символа 
    	ldir		; Выводим левую часть символа
    	ex af,af'	; Восстанавливаем маску для второго байта
    	and a
    	jr z,DrawSymb2 ; Весь символ в одном байте
    	out (46H),a	; Включаем маску для второго байта
    	dec hl
    	dec e
    	ld bc,8
    	lddr		; Выводим правую часть символа
    DrawSymb2:
    	xor a
    	out (46H),a	; 
    	ld a,0e0h
    	out (45H),a	; 
    	ei
    	ret
    Последний раз редактировалось Napoleon1; 21.09.2022 в 21:06.

  12. Эти 2 пользователя(ей) поблагодарили Napoleon1 за это полезное сообщение:

    Improver (21.09.2022), ivagor (21.09.2022)

  13. #19
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    7,863
    Спасибо Благодарностей отдано 
    658
    Спасибо Благодарностей получено 
    1,854
    Поблагодарили
    1,059 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Для сравнения переделал в софтовую процедуру вывода 40 символов в строке, принцип вывода аналогичный, надеюсь это не вызовет возражений.

    Скрытый текст

    Код:
    DrawSymbSoft:
    	ld b,a
    	and 00111100b
    	rrca
    	rrca
    	add a,0e0h	; Выводить будем в верхнюю плоскость
    	ld d,a	; Получаем горизонтальный полуадрес левого байта из 3 байтов, где могут быть 4 символа
    	ld a,b
    	and 3	; Выделяем биты, определяющие сдвиг символа 
    	jp nz,DrawSymbSoft1
    ;0
    	ld b,00000011b
    	ld a,(de)\ and b\ ld c,a\ ld a,(hl)\ inc hl\ rlca\ rlca\ or c\ ld (de),a\ inc e
    	ld a,(de)\ and b\ ld c,a\ ld a,(hl)\ inc hl\ rlca\ rlca\ or c\ ld (de),a\ inc e
    	ld a,(de)\ and b\ ld c,a\ ld a,(hl)\ inc hl\ rlca\ rlca\ or c\ ld (de),a\ inc e
    	ld a,(de)\ and b\ ld c,a\ ld a,(hl)\ inc hl\ rlca\ rlca\ or c\ ld (de),a\ inc e
    	ld a,(de)\ and b\ ld c,a\ ld a,(hl)\ inc hl\ rlca\ rlca\ or c\ ld (de),a\ inc e
    	ld a,(de)\ and b\ ld c,a\ ld a,(hl)\ inc hl\ rlca\ rlca\ or c\ ld (de),a\ inc e
    	ld a,(de)\ and b\ ld c,a\ ld a,(hl)\ inc hl\ rlca\ rlca\ or c\ ld (de),a\ inc e
    	ld a,(de)\ and b\ ld c,a\ ld a,(hl)\ rlca\ rlca\ or c\ ld (de),a
    	ret
    DrawSymbSoft1:
    	dec a
    	jp nz,DrawSymbSoft2
    ;1
    	ld b,11111100b
    	ld a,(de)\ and b\ ld c,a\ ld a,(hl)\ inc hl\ rrca\ rrca\ rrca\ rrca\ and 11b\ or c\ ld (de),a\ inc e
    	ld a,(de)\ and b\ ld c,a\ ld a,(hl)\ inc hl\ rrca\ rrca\ rrca\ rrca\ and 11b\ or c\ ld (de),a\ inc e
    	ld a,(de)\ and b\ ld c,a\ ld a,(hl)\ inc hl\ rrca\ rrca\ rrca\ rrca\ and 11b\ or c\ ld (de),a\ inc e
    	ld a,(de)\ and b\ ld c,a\ ld a,(hl)\ inc hl\ rrca\ rrca\ rrca\ rrca\ and 11b\ or c\ ld (de),a\ inc e
    	ld a,(de)\ and b\ ld c,a\ ld a,(hl)\ inc hl\ rrca\ rrca\ rrca\ rrca\ and 11b\ or c\ ld (de),a\ inc e
    	ld a,(de)\ and b\ ld c,a\ ld a,(hl)\ inc hl\ rrca\ rrca\ rrca\ rrca\ and 11b\ or c\ ld (de),a\ inc e
    	ld a,(de)\ and b\ ld c,a\ ld a,(hl)\ inc hl\ rrca\ rrca\ rrca\ rrca\ and 11b\ or c\ ld (de),a\ inc e
    	ld a,(de)\ and b\ ld c,a\ ld a,(hl)\ rrca\ rrca\ rrca\ rrca\ and 11b\ or c\ ld (de),a
    	inc d
    	ld b,00001111b
    	ld a,(de)\ and b\ ld c,a\ ld a,(hl)\ dec hl\ add a,a\ add a,a\ add a,a\ add a,a\ or c\ ld (de),a\ dec e
    	ld a,(de)\ and b\ ld c,a\ ld a,(hl)\ dec hl\ add a,a\ add a,a\ add a,a\ add a,a\ or c\ ld (de),a\ dec e
    	ld a,(de)\ and b\ ld c,a\ ld a,(hl)\ dec hl\ add a,a\ add a,a\ add a,a\ add a,a\ or c\ ld (de),a\ dec e
    	ld a,(de)\ and b\ ld c,a\ ld a,(hl)\ dec hl\ add a,a\ add a,a\ add a,a\ add a,a\ or c\ ld (de),a\ dec e
    	ld a,(de)\ and b\ ld c,a\ ld a,(hl)\ dec hl\ add a,a\ add a,a\ add a,a\ add a,a\ or c\ ld (de),a\ dec e
    	ld a,(de)\ and b\ ld c,a\ ld a,(hl)\ dec hl\ add a,a\ add a,a\ add a,a\ add a,a\ or c\ ld (de),a\ dec e
    	ld a,(de)\ and b\ ld c,a\ ld a,(hl)\ dec hl\ add a,a\ add a,a\ add a,a\ add a,a\ or c\ ld (de),a\ dec e
    	ld a,(de)\ and b\ ld c,a\ ld a,(hl)\ add a,a\ add a,a\ add a,a\ add a,a\ or c\ ld (de),a
    	ret
    
    DrawSymbSoft2:
    	dec a
    	jp nz,DrawSymbSoft3
    ;2
    	ld b,11110000b
    	ld a,(de)\ and b\ ld c,a\ ld a,(hl)\ inc hl\ rrca\ rrca\ and 1111b\ or c\ ld (de),a\ inc e
    	ld a,(de)\ and b\ ld c,a\ ld a,(hl)\ inc hl\ rrca\ rrca\ and 1111b\ or c\ ld (de),a\ inc e
    	ld a,(de)\ and b\ ld c,a\ ld a,(hl)\ inc hl\ rrca\ rrca\ and 1111b\ or c\ ld (de),a\ inc e
    	ld a,(de)\ and b\ ld c,a\ ld a,(hl)\ inc hl\ rrca\ rrca\ and 1111b\ or c\ ld (de),a\ inc e
    	ld a,(de)\ and b\ ld c,a\ ld a,(hl)\ inc hl\ rrca\ rrca\ and 1111b\ or c\ ld (de),a\ inc e
    	ld a,(de)\ and b\ ld c,a\ ld a,(hl)\ inc hl\ rrca\ rrca\ and 1111b\ or c\ ld (de),a\ inc e
    	ld a,(de)\ and b\ ld c,a\ ld a,(hl)\ inc hl\ rrca\ rrca\ and 1111b\ or c\ ld (de),a\ inc e
    	ld a,(de)\ and b\ ld c,a\ ld a,(hl)\ rrca\ rrca\ and 1111b\ or c\ ld (de),a
    	inc d
    	ld b,00111111b
    	ld a,(de)\ and b\ ld c,a\ ld a,(hl)\ dec hl\ rrca\ rrca\ and 11000000b\ or c\ ld (de),a\ dec e
    	ld a,(de)\ and b\ ld c,a\ ld a,(hl)\ dec hl\ rrca\ rrca\ and 11000000b\ or c\ ld (de),a\ dec e
    	ld a,(de)\ and b\ ld c,a\ ld a,(hl)\ dec hl\ rrca\ rrca\ and 11000000b\ or c\ ld (de),a\ dec e
    	ld a,(de)\ and b\ ld c,a\ ld a,(hl)\ dec hl\ rrca\ rrca\ and 11000000b\ or c\ ld (de),a\ dec e
    	ld a,(de)\ and b\ ld c,a\ ld a,(hl)\ dec hl\ rrca\ rrca\ and 11000000b\ or c\ ld (de),a\ dec e
    	ld a,(de)\ and b\ ld c,a\ ld a,(hl)\ dec hl\ rrca\ rrca\ and 11000000b\ or c\ ld (de),a\ dec e
    	ld a,(de)\ and b\ ld c,a\ ld a,(hl)\ dec hl\ rrca\ rrca\ and 11000000b\ or c\ ld (de),a\ dec e
    	ld a,(de)\ and b\ ld c,a\ ld a,(hl)\ rrca\ rrca\ and 11000000b\ or c\ ld (de),a
    	ret
    DrawSymbSoft3:
    ;3
    	ld b,11000000b
    	ld a,(de)\ and b\ or (hl)\ inc hl\ ld (de),a\ inc e
    	ld a,(de)\ and b\ or (hl)\ inc hl\ ld (de),a\ inc e
    	ld a,(de)\ and b\ or (hl)\ inc hl\ ld (de),a\ inc e
    	ld a,(de)\ and b\ or (hl)\ inc hl\ ld (de),a\ inc e
    	ld a,(de)\ and b\ or (hl)\ inc hl\ ld (de),a\ inc e
    	ld a,(de)\ and b\ or (hl)\ inc hl\ ld (de),a\ inc e
    	ld a,(de)\ and b\ or (hl)\ inc hl\ ld (de),a\ inc e
    	ld a,(de)\ and b\ or (hl)\ ld (de),a
    	ret
    [свернуть]

    Точных растактовок для турбо я не знаю (тем более они вроде бы разные для активной области изображения и бордюра), поэтому посчитал для "стандартного z80" на векторе (т.е. с векторовским торможением) при 3 МГц. В зависимости от позиции получается 508/1168/1120/416 тактов. Позиции по горизонтали равновероятные, поэтому среднее значение 803 такта.
    Чтобы подравнять силы в DrawSymb заменил ld bc,8\ ldir и ld bc,8\ lddr на 8 ldi и 8 ldd соответственно. Получилось 388/600/636/476 тактов. В среднем 525 тактов. 803/525=1.53
    Полтора раза это хорошо, но это совсем не три раза (которые должны были быть минимумом).
    И это не все.
    1. Если добавить к процедуре вычисление адреса символа по его коду, то выигрыш еще уменьшится.
    2. Процедуру софтового вывода можно заметно оптимизировать. Памяти много, можно хранить 4 предсдвинутых варианта символов. Выигрыш становится еще меньше.
    3. Запрещение прерываний может еще приемлемо для вывода символов, но не для спрайтов в игре при наличии фоновой музыки.
    Последний раз редактировалось ivagor; 21.09.2022 в 21:52.

  14. Этот пользователь поблагодарил ivagor за это полезное сообщение:

    Improver (21.09.2022)

  15. #20
    Member
    Регистрация
    19.09.2022
    Адрес
    г. Саров
    Сообщений
    31
    Спасибо Благодарностей отдано 
    18
    Спасибо Благодарностей получено 
    27
    Поблагодарили
    10 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Насчёт трёх раз - я имею в виду соотношение: (обращения к портам + простая перепись данных) и (чтение символа + чтение байта с экрана + сдвиг + or/and + запись). И в целом программа получается компактнее.
    Насчёт растактовки - все циклы, связанные с обращением к памяти, выравниваются на 4 такта. Скорость одинаковая в любой момент. Программирование расширенной палитры не тормозит процессор.

Страница 2 из 4 ПерваяПервая 1234 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ответов: 17
    Последнее: 05.10.2012, 20:11
  2. АТМ Турбо 1/2/2+
    от artice в разделе ATM
    Ответов: 4
    Последнее: 12.05.2012, 18:16
  3. Меняю Вектор/БК11М на Вектор (или куплю)
    от dk_spb в разделе Барахолка (архив)
    Ответов: 13
    Последнее: 07.01.2012, 17:31
  4. Турбо ВГ-93
    от Иван в разделе Внешние накопители
    Ответов: 1
    Последнее: 09.11.2006, 14:59

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •