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

User Tag List

Показано с 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
    Размещение рекламы на форуме способствует его дальнейшему развитию

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

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

Эту тему просматривают: 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

Ваши права

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