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

User Tag List

Страница 1 из 29 12345 ... ПоследняяПоследняя
Показано с 1 по 10 из 353

Тема: Секреты и трюки программирования (в том числе и игр) для РК-86

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Banned
    Регистрация
    05.10.2016
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,080
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    5
    Поблагодарили
    5 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Секреты и трюки программирования (в том числе и игр) для РК-86

    Цитата Сообщение от mvg
    буду благодарен за кусок кода убирающий курсор
    Сначала, про убирание курсора в стандартном режиме. В графическом режиме (если не переносить линию подчёркивания с 10-й линии на 8-ю), курсор исчезает сам, т.к остаётся на 10-й неотображаемой линии. Поэтому специально выключать курсор надо только, если у Вас фонт 8*10 (фонт 2 кб) и для НОРТОНА, не меняя режима (т.е высоты знакоместа в 10), Вам необходимо лишь убрать курсор.

    Для того, чтобы курсор не был виден, я обычно перепрограммировал ВГ75 так, чтобы линия подчёркивания устанавливалась ниже 10-й линии растра. А, т.к в строке в стандартном режиме выводится всего 10 линий растра, то если установить значение для линии подчёркивания на 11...16, то мигающей линии подчеркивания видно не будет. Для этого достаточно изменить два бита в байте 99H

    Вот кусок из ПЗУ F800 (это в том месте где п/п-ма PUSK_VG, т.е куда идет JMP из F82D).

    LD (HL),99H ; 1001.1001 9 +1 линия подчерк.

    Первые 4 бита задают позицию линии подчёркивания. Если вместо 10-ти, Вы поставите 11, то курсор исчезнет. Вот две подрограммы. Одна выключает курсор, вторая включает курсор. Но не так как в ПЗУ F800, а большим мигающим прямоугольником, что намногого приятнее, чем мизерная чёрточка. Во всех моих мониторах и драйверах ОРИОНА и ПЗУ РК86 курсор всегда большой. По тому же принципу Вы получите курсор и в графическом режиме, но удобнее там его получать программно, - периодически выводя и гася символ псевдографики. Если же в стандартном режиме надо включить старый курсор (не сплошной прямоугольник, а тонкая линия подчёркивания), то делаете CALL 0F82DH.

    Код:
    .
    CUROFF:	LD	A,0A9H		; 1001.1001 10 +1 линия подчерк. 
    	LD	B,93H		; 1.0.01.0011 - курсор мигающая линия подчёркивания
    	JP	JJJ_01
    	
    CUR_ON:	LD	A,59H		; 0101.1001 5 +1 линия подчерк. 
    	LD	B,0C3H		; 1.1.00.0011 - курсор мигающее знакоместо
    				; отчего будет большой курсор
    
    JJJ_01:	PUSH	HL
    	LD	HL,VG_75+1
    	LD	(HL),0 		; команда RESET
    	DEC	HL  		; адрес VG_75
    	LD	(HL),04DH	; 0.1001101 77+1 знакомест
    	LD	(HL),01DH	; 00.011101 29+1 строк
           	
    	LD	(HL),A		; 0101.1001 10 +1 линия подчерк.выше
    	LD	(HL),B		; 1.1.00.0011 - МОЕ ИЗМЕНЕНИЕ:
    				; КУРСОР - МИГАЮЩЕЕ ЗНАКОМЕСТО
    				; атрибуты не отображать
    
    	INC	HL		; адрес VG_75+1
    	LD	(HL),27H	; команда START DISPLAY 001.001.11
    	
    	LD	A,(HL)		; читаем STATUS ???
    AFAE1:	LD	A,(HL)		; читаем STATUS
    	AND	20H		; маска 'Interrupt request flag'
    	JP	Z,AFAE1   	; ждем конца строки
    
    	LD	HL,VT_57+8	; далее заёмёмся ВТ57
    	LD	(HL),80H
    	LD	L,4    		; VT_57+04 !! НЕ_КОРРЕКТНО
    	LD	(HL),low SСRN	; 0D0H
    	LD	(HL),high SCRN	; 076H
    	INC	L    		; адрес VT_57+5
    	LD	(HL),23H
    	LD	(HL),49H
    	LD	L,8    		; VT_57+8 !! НЕ_КОРРЕКТНО
    	LD	(HL),0A4H
    	POP	HL
    	RET

    Что касается, того, чтобы убрать 2 линии растра разделяющие строки, что позволит использовать псевдографику (и рисовать сплошные вертикальные линии в рамочках), то для этого меняют вторую четверку битов в том же числе 99H. Если будет не 9, а 7, то это значит, что в строке, не 10, а 8 линий растра.

    Недостаточно этого, т.к на 20% увеличится частота кадров и на многих телевизорах синхронизация сорвётся. Я видел, что некоторые так и делают. Это неверно. Не у всех профессиональные мониторы AUTOSYNC с хорошей синхронизацией. Поэтому надо изменить число строк с 30 до 38.

    Или же надо, изменить число строк отводимое на обратный ход кадровой развертки. Считаем: убрались две линии растра в 30-ти строках. Это 60 строк растра. При 8 линиях растра на строку - это 60:8= 8 строк. Т.е число строк на обратный ход по кадрам надо увеличить с 1 до 9. Что невозможно, т.к максимум строк на обратный ход по кадрам 4. Поэтому можно сделать режим 35+4 строки, что тоже будет соответствовать TV-стандарту, но с'экономит 3*78=234 байта.

    Если неохота разбираться в ВГ75, то можно взять любую игру с псевдографикой, прогнать её через IDA и самому посмотреть, как включается графический режим. Получить полноценный листинг сложно, а получить просто вид программы в мнемониках - это дело считанных минут. Найти место, где идёт программирование ВГ75 - не проблема. Тут всё, как в шахматах, - лучший способ совершенствоваться, - это изучать партии мастеров. К сожалению, сами мастера, т.е программисты из 80-тых, уже вымерли, как класс. У меня есть несколько дизассемблированных графических игр, если будут проблемы, то вытащу оттуда и выложу соответствующий кусок листинга. С ВГ75 нельзя полагаться на эмулятор, надо всё проверять в реале.

    Теперь по поводу кода 0F1H останавливающего вывод строки и отчего все позиции сдвигаются. Это кажется, недокументированный (или широко недокумметированный ход). Об этом программисты 80-х, похоже не знали, или не использовали. В играх так не делают. Да и неудобно считать позиции фигурок, если нельзя посчитать позицию по формуле, а надо долго колдовать суммируя на калькуляторе длины предыдущих строк

    Этот "ход" позволяет уместить в области стандартного экрана не только 30, а даже 36 строк. Но старые игры, по крайней мере из тех, что я "ковырял", так не делают. Т.к экран увеличивается и затирает служебные ячейки ПЗУ, отчего стандартные подпрограммы перестают работать, то разбухший экран просто переносят ниже (обычно на 36D0, чтобы было проще считать позиции пользуясь стандартными таблицами для стандартного экрана 76D0).

    Но мне больше симпатичен вариант, когда разбухший экран оставляем в вершине ОЗУ, затирая естественно служебные ячейки ПЗУ, а работаем не подпрограммами ПЗУ, а подпрограммами его копии перетранслированной в ОЗУ, сразу ниже экрана. Это даёт максимально большой сплошной кусок памяти.
    Последний раз редактировалось barsik; 21.03.2017 в 10:48.

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

  3. #2
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,752
    Спасибо Благодарностей отдано 
    263
    Спасибо Благодарностей получено 
    274
    Поблагодарили
    206 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    barsik, 1. про доп коды написано здесь
    Специальные коды

    Специальные коды применяются для уменьшения затрат на память программ или на управление процессом ПДП.
    Ст.б. Мл.б.
    1 1 1 1 0 0 S S


    S S Функция
    0 0 Конец строки
    0 1 Конец строки, стоп ПДП
    1 0 Конец экрана
    1 1 Конец экрана, стоп ПДП
    я так подозреваю из спецификации на i8275

    2. если аккуратно порезать экранную область то никаких проблем с отображением экрана не возникнет.

    3. про хороших программистов РК86. Покажите что нибудь достойное на дизассемблирование
    С уважением,
    Jerri / Red Triangle.

  4. #3
    Banned
    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,841
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    658
    Поблагодарили
    512 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от jerri Посмотреть сообщение
    0 0 Конец строки
    0 1 Конец строки, стоп ПДП
    а в чем будет отличие?

  5. #4
    Banned
    Регистрация
    05.10.2016
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,080
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    5
    Поблагодарили
    5 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Jerri, узнать игры с псевдографикой очень легко, достаточно их запустить в эмуляторе. Навскидку я скидываю коды некоторых игр, что используют псевдографику. Но проверьте в эмуляторе, там могут попасть и чисто текстовые игры. А вообще, в основном графическими стали игры только из последних сезонов, из 1990-92 годов, программисты из 1987-88, в свой массе, это ещё не умели.

    ВГ75 запрашивает данные и получает их от ВТ57 пачками по 8 байт (судя по его режиму). Возможно, это даёт возможность иметь 80 видимых символов и совершенно любое число атрибутов в строке. Ранее предполагалось, что т.к и символы и атрибуты размещаются в буфере размером в 80 байт, то при ширине строки в 80 символов для атрибутов вообще не остаётся места.

    Логично предположить, что при 80-ти символах в строке можно использовать атрибуты, иначе зачем их вводить? Чтобы использовать только в режиме 64 символа в строке? Тут нужны эксперименты на реале. Ранее я исходил из того, что для вставки атрибутов в строку остаётся всего 7 байтов (от позиции 71 до 78). Но скорее всего, если режим с неотображаемыми атрибутами, то ВГ75 будет читать символы и выводить в строке (пропуская неотображаемые атрибуты), пока отображаемых символов не наберётся ровно в длину строки (в РК86 это 78). Но если сумма числа атрибутов и символов (код <80) превысит 78, то начало следующей строки сдвинется и уже не будет четкого соответствия адресов начала строк по формуле (76D0 + N_строки *78).
    Вложения Вложения
    Последний раз редактировалось barsik; 02.01.2018 в 04:37.

  6. #5
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,752
    Спасибо Благодарностей отдано 
    263
    Спасибо Благодарностей получено 
    274
    Поблагодарили
    206 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    а в чем будет отличие?

    Да ктож знает РК86 в 86 году мне был недоступен, но если ставили #f1 значит был смысл

    - - - Добавлено - - -

    barsik, ORD что за формат?
    РК86 вообще цвет не планировался.
    С уважением,
    Jerri / Red Triangle.

  7. #6
    Activist Аватар для SegaBoy
    Регистрация
    12.11.2009
    Адрес
    Москва
    Сообщений
    390
    Спасибо Благодарностей отдано 
    37
    Спасибо Благодарностей получено 
    80
    Поблагодарили
    59 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    а в чем будет отличие?
    В первом случае ПДП загрузит в ВГ75 пакетами всю строку символов. Дойдя при отображении строки до спецкода F0, ВГ75 включит сигнал VSP и дальнейшие символы в строке не будут отображаться.
    Во втором случае ПДП так же начнёт пакетную загрузку в ВГ75, но тот прекратит её, прочухав на этапе загрузки спецкод F1. Потом при отображении строки ВГ75 будет действовать аналогично F0.

    В первом случае видеообласть в памяти остаётся прежних размеров. Во втором видеообласть уменьшается, экономя память, плюс меньше тормозится процессор. И то и другое можно применять в программах для разных целей. Зачем это вообще придумали в Интел - отдельный вопрос = ))

  8. #7
    Banned
    Регистрация
    05.10.2016
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,080
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    5
    Поблагодарили
    5 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Насколько я понял из темы "Режимы ВГ75" этот трюк с кодом F1 обнаружил и проверил на практике vinxru, который недавно ушёл с сайта и теперь уточнить детали нЕ у кого.

    Использование кода F1 позволяет немного сократить размер экранной области, причём, если ставить F1 во всех строках чётко в позицию 72 (это 8+64; 8 это бордёр слева), то, если я правильно понимаю, бордёр справа получается не программным, а аппаратным, т.е ВГ75 сама будет гасить луч, формируя правый бордёр. И при этом программирование даже не усложняется, как будет в случае, если код F1 ставить не в чёткие позиции, а сразу за последним печатаемым символом.

    Вообще-то надо увеличивать число строк с 31 до 38, а не до 36, т.к 38*8=304 линии растра, что надо для сохранения частоты кадров (по стандарту надо выводить в кадре 312 линий), а при 36-ти строках получается 36*8=288 линий растра, а частота кадров растёт до (312/288)*50= 54 Герц, что срывает синхронизацию в телевизоре.

    В стандартном режиме (что программируется по сбросу) начало любой строки можно посчитать по формуле (76D0 + N_строки * 78), что позволяет четко позиционировать в экране. Если F1 стоит в позиции 72, то мы экономим по 5 символов в 38-ми строках, т.е экономия в 190 байт. Тогда позиция считается так: (76D0 + 73*Y +X). А при использовании кода F1 для максимальной экономии, ставя его за последним печатаемым символом в строке, размер затрачиваемый на каждую строку непредсказуем (в зависимости от числа атрибутов и реальной длины строки).

    190 выигранных байт при длине строки в 73 символа дают раздвижку экрана всего на 2 строки, а надо 7 строк. Потому толку от такого трюка при стандартной длине строки в 64 - немного, а если используются атрибуты, то ещё меньше. Только, если сократить отображаемый размер экрана с 64 позиций до 50, на 14 знакомест, что с центровкой сдвинет экран на 7 знакомест вправо, выигрыш в каждой строке составит 7+5= 12 байтов и всего 38*12=456 байтов или 456/(8+50)= ~8 строк. Т.е будем иметь требуемые 38 строк, но уже мизерного экранчика, а остаток линий растра по кадрам можно выиграть увеличив число строк на обратный ход луча по кадрам, что не только сплющит экран, но и визуально поднимет его вверх на 1 строку. Т.е использование трюка с F1 даёт увеличение вертикального размера экрана за счёт сокращения горизонтального размера экрана.

    В этом случае экран для использования псевдографики, т.е с шириной строк не в 10, а 8 линий растра влезет в стандартную экранную область 76D0...FFFF.

    Однако я считаю, что вместо таких извращений в программировании, проще кинуть 1 проводок от ВГ75 к ПЗУ фонта, прошить фонт извращённым фонтом и получить знакоместо 6*10 (а лучше 8*10, заменив ИЕ4 на ИЕ5), что даёт возможность рисовать сплошные вертикальные линии, т.е сплошные рамки в стандартном режиме дисплея. Однако при этом фонт придётся не до-прошить, а пере-зашить, т.к надо в псевдографике сделать элементарный пиксель высотой не 4 линии, а 5 линий растра. Для текстового вывода строки высотой в 10 линий растра лучше, чем в 8 линий. И главное, фонт красивее и псевдографика "сплошнее" без возни с перепрограммированием режимов ВГ75.

    Фонт обычно прошивают извращённым образом для того, чтобы не сдвигать адреса A3...A9 на ПЗУ фонта с целью, чтобы линия LC3 от ВГ75 шла на адрес A3, отчего пригоден обычный фонт с шагом 16. Для сдвижки надо перепаивать проводники на входах ПЗУ фонта - A3 на А4, А4 на А5, А5 на А6... а на А3 сигнал LC3 от ВГ75.

    Так вот, те ленивые, что не хотят этого делать, прошивают извращенный фонт 8*10, где линии растра 9 и 10 прошиваются не с отступом 9 и 10 от начала знакоместа, а во второй килобайт, т.е первые 8 линий знакоместа в первом килобайте, а две последние во втором. Шаг в фонте остаётся 8. Но такие извраты не годятся для большого ПЗУ фонта, содержащего кучу спрайтов для игр. Лучше иметь фонты в нормальном виде, с шагом 16, чем извращаться перед прошивкой ПЗУ, да и посмотреть правильный фонт удобно на экране ОРИОНА или СПЕЦИАЛИСТА, а извращённый фонт не посмотришь. Так что надо перепаивать 8 проводников на входе ПЗУ фонта.

    - - - Добавлено - - -

    Цитата Сообщение от jerri
    Что такое формат ORD?
    Формат ORD это формат в котором файлы ORDOS компьютера ОРИОН хранятся в его квазидисках. Квазидиском, в свою очередь называется банка ОЗУ целиком отданная для хранения файлов в формате ORDOS. Кроме квазидисков в ОРИОНЕ бывают и электронные диски, это диски в формате нормальных ДОС (т.е ДОС в которых есть каталог, фрагментация файлов и размер диска не ограничен в 60К). ORDOS это исторически первая ОС для ОРИОНА использующая в качестве носителя ОЗУ из излишней банки ОРИОНА. Хотя ORDOS туфта и давно вышла из употребления, но формат файлов примененный в ней оказался удобным для хранения файлов на дискетах. По моим данным первым такой формат применили в 1991 или Мистахов в своём PMBB или Мастер Бридж в своём LORD для CP/M.

    Формат ORD состоит из метки файла длиной в 16 байтов (иногда это неверно называют ORDOS-заголовком) и собственно самого файла, в котором нет информации о длине и адресах загрузки.

    Формат ORD позволяет хранить в метке адрес загрузки, длину файла (хотя и не точную, лишь с кратностью на параграф), а если не зацикливаться на ORDOS, то также КС и дату файла. Недостатком формата является слишком короткое имя всего 8 символов. Для исправления этого недостатка в 90-е годы использовали кодирование 3-х символов расширения одним байтом токеном, который ставится в метке файла в байте с офсетом 0DH. Прилагаю текст, описывающий формат для компьютера ИРИША, использующий формат ORD. У меня файлы для СПЕЦИАЛИСТА, ОРИОНА, РК86 и ИРИШИ хранятся в формате ORD.

    Могу конвертировать файлы из формата ORD в формат GAM.
    Вложения Вложения
    Последний раз редактировалось barsik; 02.01.2018 в 05:06.

  9. #8
    Activist Аватар для SegaBoy
    Регистрация
    12.11.2009
    Адрес
    Москва
    Сообщений
    390
    Спасибо Благодарностей отдано 
    37
    Спасибо Благодарностей получено 
    80
    Поблагодарили
    59 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от barsik Посмотреть сообщение
    ...
    150 выигранных байт при длине строки в 73 символа дают раздвижку экрана всего на 2 строки, а надо 8 строк.
    ...
    Так верхние три неиспользуемые строки можно сократить до двух байт, поставив 1F в самом их начале. Итого сэкономить 3*76 байт.
    А так же две нижние, поставив команду "Конец экрана, стоп ПДП". Ещё плюс 76+78 байт.
    Ну и если прибавлять дополнительные неиспользуемые строки, то поступать с ними так же.
    Неотображаемые строки не имеет смысла считать за полноценные и отсчёт строк можно начинать сразу с видимых.

    Vinxru эту технику подробно описал (даже где-то тут на форуме сохранилось). Его экран 78*36 (при видимых 64*25 без промежутков между строками символов) занимает область в памяти меньше чем родной 78*30 (те же 64*25, но с промежутками).

  10. #9
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,752
    Спасибо Благодарностей отдано 
    263
    Спасибо Благодарностей получено 
    274
    Поблагодарили
    206 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    barsik, по том же ссылке предлагалось верхние и нижние строки исключать из отрисовки изображения
    сколько то верхних и сколько то нижних. опять же расставляя в ключевых местах #f1

    а еще можно перенести на новое место сам экран раз уж начали программировать экстремально.

    какой эмулятор понимает ORD?
    emu отказался воспроизводить

    - - - Добавлено - - -

    barsik, а какие соответствия ячейкам и памяти вообще существуют?

    и вопрос к окружающим.
    может кто-нибудь испытать на живом RK86 то что будет напрограммировано в данном разделе?
    С уважением,
    Jerri / Red Triangle.

  11. #10
    Banned
    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,841
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    658
    Поблагодарили
    512 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от barsik Посмотреть сообщение
    Однако я считаю, что вместо таких извращений в программировании, проще кинуть 1 проводок от ВГ75 к ПЗУ фонта, прошить фонт извращённым фонтом и получить занакоместо 6*10 (а лучше 8*10, заменив ИЕ4 на ИЕ5)
    только кто побежит перепаивать комп чтоб запустить одну такую программку

    я точно не побегу
    и другие тоже...

Страница 1 из 29 12345 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Ответов: 210
    Последнее: 26.07.2019, 11:45
  2. Ответов: 6
    Последнее: 07.02.2016, 11:55
  3. Трюки с контроллером FDD 82077
    от Titus в разделе Утилиты
    Ответов: 4
    Последнее: 10.06.2011, 19:17

Ваши права

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