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

User Tag List

Страница 6 из 36 ПерваяПервая ... 2345678910 ... ПоследняяПоследняя
Показано с 51 по 60 из 353

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

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

    По умолчанию

    Цитата Сообщение от barsik Посмотреть сообщение
    первых программистов страны
    да прям первых...

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

    Цитата Сообщение от goodboy Посмотреть сообщение
    такое на РК возможно ?
    ну да

    это можно было бы показывать что нибудь от РК
    и спрашивать а zx81\zx80 так может?
    (тк у рк намного больше памяти и процессор хоть и слабее но не нагруженый отрисовкой экрана на 70%)

    но почему то все с точностью да на оборот...

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

    хотя если поднатужиться на zx80 то можно и такое (тут большая проблема именно нарисовать графику)
    https://youtu.be/9T6m1IUqCa8

    хотя на РК тоже можно выпендриться и выдать подобие псевдо hires
    но это не получится так же хорошо как на zx80
    Последний раз редактировалось NEO SPECTRUMAN; 10.03.2017 в 21:39.

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

    По умолчанию

    NEO SPECTRUMAN, это же модификация шрифта?
    С уважением,
    Jerri / Red Triangle.

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

    По умолчанию

    Цитата Сообщение от jerri Посмотреть сообщение
    это же модификация шрифта?
    какого еще шрифта?

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

    Цитата Сообщение от jerri Посмотреть сообщение
    это же модификация шрифта?
    тут я рассказываю как происходит построение изображения на zx80 с точки зрения программиста
    если еще не видел
    http://zx-pk.ru/threads/27384-vopros...l=1#post902258

    у zx80 совсем не текстовый режим
    если наскрепти 6К рамы то без проблем можно выдать 256х192 pseudo hires
    так же как и 320х200

    он может выкинуть на экран все что у него есть в пзу
    Последний раз редактировалось NEO SPECTRUMAN; 10.03.2017 в 22:15.

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

    По умолчанию

    NEO SPECTRUMAN, это были 70е годы 20 века, мы курили траву и придумывали компьютеры.
    тот чья трава была хуже - победил.
    С уважением,
    Jerri / Red Triangle.

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

    По умолчанию

    и еще
    куда же на zx-е без
    https://youtu.be/EjA-qlDv5Xw
    Последний раз редактировалось NEO SPECTRUMAN; 10.03.2017 в 22:17.

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

    По умолчанию

    Пример кода для тех, кто не хочет мучиться с подбором констант инициализации ВГ75 и ВТ57, при построении экрана с нестандартными параметрами (правда пока без использования спецкоманд F0..F3).
    Программа заполняет невидимую экранную область нулями, а видимую символами. Изменяя константы (в исходнике), можно менять параметры экрана.
    Часть отвечающую за заполнение экрана символами можно выкинуть и использовать только процедуры инициализации. Она добавлена для наглядного отображения на ТВ и проверки на срывы синхронизации.
    Курсор в данном примере переносится за границы экрана и поэтому не отображается. Кому он нужен, может удалить этот кусок кода.
    Работа проверялась на Апогее, а так же в эмуляторах. Для написания кода использовался Прекрасный ассемблер

    Код:
    screen_addr	equ	0x1000  ; адрес экранной области (можно переназначить в другое место)
    
    ; параметры горизонтальной строки (в символах)
    h_back		equ	8   ; отступ слева
    h_act		equ	64  ; видимых символов в строке
    h_front		equ	6   ; отступ справа
    h_sync		equ	8   ; строчный синхроимпульс (2..32)
    h_total		equ	h_back + h_act + h_front  ; общее количество символов в строке без учёта синхроимпульса (1..80)
    
    ; параметры кадра (в строках)
    v_back		equ	3  ; отступ сверху
    v_act		equ	25  ; видимых строк в кадре
    v_front		equ	2  ; отступ снизу
    v_sync		equ	1  ; кадровый синхроимпульс (1..4)
    v_total		equ	v_back + v_act + v_front  ; общее количество строк в кадре без учёта синхроимпульса (1..64)
    
    line_per_row	equ	10  ; линий в строке (1..16)
    under_line	equ	10  ; позиция линии подчёркивания в строке (1..16) если этот параметр больше 8, то верхняя и нижняя линии в строке гасятся
    spaced_row	equ	0  ; пропущенные строки (0..1) если 1, то каждая вторая строка гасится (соответственно и строк в кадре надо указывать в два раза меньше, и память под экран занимает в два раза меньше)
    offset_line	equ	1  ; смещение для первой линии в строке символов (0..1) если 1, то первая линия строки будет отображаться второй (для псевдографики нужно ставить 0)
    no_trans_attr	equ	0  ; отображаемые атрибуты (0..1) если 1, то атрибут отображается как пустой символ и занимает место в видеопамяти (на Радио-86РК стоит по умолчанию 0, поэтому если кинуть атрибутом в экран он начинает уплывать)
    cursor_type	equ	1  ; тип курсора (1..4)
    
    ; команды и параметры для инициализации контроллера дисплея
    disp_ctrl_addr	equ	0xC000  ; адрес контроллера дисплея
    disp_reset_com	equ	0  ; команда Сброс
    disp_param_1	equ	spaced_row*128 + h_total - 1
    disp_param_2	equ	(v_sync - 1)*64 + v_total - 1
    disp_param_3	equ	(under_line - 1)*16 + line_per_row - 1
    disp_param_4	equ	offset_line*128 + no_trans_attr*64 + cursor_type*16 + h_sync/2 - 1
    disp_cursor_com	equ	0x80  ; команда Установка курсора
    disp_start_com	equ	0x27  ; команда Начать отображение
    disp_ir_flag	equ	0x20  ; константа для проверки флага Запрос прерывания
    
    ; команды и параметры для инициализации контроллера ПДП
    dma_ctrl_addr	equ	0xE000  ; адрес контроллера ПДП
    dma_reset_com	equ	0x80  ; команда Сброс
    dma_param_1	equ	screen_addr & 0x00FF
    dma_param_2	equ	screen_addr >> 8
    dma_param_3	equ	(0x4000 + h_total*v_total - 1) & 0x00FF
    dma_param_4	equ	(0x4000 + h_total*v_total - 1) >> 8
    dma_start_com	equ	0xA4  ; команда Запуск ПДП
    
    ; подпрограммы Монитора для выхода из программы
    wait_any_key	equ	0xF803  ; ожидание нажатия клавиши
    re_init_ctrl	equ	0xFACE  ; инициализация экранной области Монитора
    jump_to_cli	equ	0xF86C  ; возврат управления в командную строку
    
    
    	.org	0x0000
    
    StartProgram:
    	lxi	h, screen_addr
    	lxi	d, 0x2020
    	lxi	b, 0
    	
    FillScreen:
    	mvi	m, 0
    	mov	a, b
    	cpi	v_back
    	jc	IncAddr
    	cpi	v_back + v_act
    	jnc	IncAddr
    	mov	a, c
    	cpi	h_back
    	jc	IncAddr
    	cpi	h_back + h_act
    	jnc	IncAddr
    	mov	m, e
    	inr	e
    	
    IncAddr:
    	inx	h
    	inr	c
    	mov	a, c
    	cpi	h_total
    	jc	FillScreen
    	inr	d
    	mov	e, d
    	mvi	c, 0
    	inr	b
    	mov	a, b
    	cpi	v_total
    	jc	FillScreen
    
    
    InitDisplay:
    	lxi	h, disp_ctrl_addr + 1
    	mvi	m, disp_reset_com
    	dcr	l
    	mvi	m, disp_param_1
    	mvi	m, disp_param_2
    	mvi	m, disp_param_3
    	mvi	m, disp_param_4
    	inr	l
    	mvi	m, disp_cursor_com
    	dcr	l
    	mvi	m, 0xFF
    	mvi	m, 0xFF
    	inr	l
    	mvi	m, disp_start_com
    	mov	a, m
    
    WaitFlag:
    	mov	a, m
    	ani	disp_ir_flag
    	jz	WaitFlag
    	
    InitDma:
    	lxi	h, dma_ctrl_addr + 8
    	mvi	m, dma_reset_com
    	mvi	l, 4
    	mvi	m, dma_param_1
    	mvi	m, dma_param_2
    	inr	l
    	mvi	m, dma_param_3
    	mvi	m, dma_param_4
    	mvi	l, 8
    	mvi	m, dma_start_com
    
    
    EndProgram:
    	call	wait_any_key
    	call	re_init_ctrl
    	jmp	jump_to_cli

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

    По умолчанию

    Цитата Сообщение от SegaBoy
    re_init_ctrl equ 0xFACE ; инициализация экранной области Монитора
    Это инициализация ВГ75 на стандартный режим дисплея, экранная область не чистится.

    Зачем делать JMP внутрь тела ПЗУ F800, на нестандартную подпрограмму. В одной версии ПЗУ F800 это есть, а в другом нет. В базовом ПЗУ РК86 есть, а в базовом ПЗУ Микроши и других клонов нет. В версии для КР580 есть, а в версии для Z80 или 6502 нет.

    Это плохой стиль программирования "лезть внутрь ПЗУ F800". Зачем жестко привязывать программы к коду ПЗУ? Завтра к РК86 будет подключен модуль МЦПГ для добавления цвета и графики и в ПЗУ придётся вставить команды инициализации, отчего все внутренние нестандартные подпрограммы сдвинутся. И тогда все некорректные программы сделаные в стиле, "а мне плевать", лезущие во внутрь ПЗУ, перестанут работать. Такой стиль программирования обрекает использовать только программы РК сделанные до 1991 года и не позволяет сделать никаких совместимых программных улучшений.

    Есть стандартная входная точка F82D, в которой в базовом ПЗУ стоит JMP FACE. Потому результат - без разницы, делать стандартный CALL F82D или нагло лезть внутрь ПЗУ F800, делая нестандартный CALL FACE.

    Авторы РК86 неоднократно предупреждали, что лезть внутрь ПЗУ нельзя. Но нашлись умельцы, которые, чтобы с'экономить 9 МКСЕК времени и несколько байтов кода, стали лезть внутрь ПЗУ F800. Вероятно, из-за этого, авторы РК86 не смогли опубликовывать обещанную схему реконфигуратора архитектуры, дающего в РК86 две адресации портов - со старыми адресами портов на 8000 и с адресами портов на F000, что даёт 60 кб ОЗУ.
    Последний раз редактировалось barsik; 11.03.2017 в 11:43.

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

    По умолчанию

    Цитата Сообщение от barsik Посмотреть сообщение
    Это инициализация ВГ75 на стандартный режим дисплея, экранная область не чистится.

    Зачем делать JMP внутрь тела ПЗУ F800, на нестандартную подпрограмму. В одной версии ПЗУ F800 это есть, а в другом нет. В базовом ПЗУ РК86 есть, а в базовом ПЗУ Микроши и других клонов нет. В версии для КР580 есть, а в версии для Z80 или 6502 нет.

    Это плохой стиль программирования "лезть внутрь ПЗУ F800". Зачем жестко привязывать программы к коду ПЗУ? Завтра к РК86 будет подключен модуль МЦПГ для добавления цвета и графики и в ПЗУ придётся вставить команды инициализации, отчего все внутренние нестандартные подпрограммы сдвинутся. И тогда все некорректные программы сделаные в стиле, "а мне плевать", лезущие во внутрь ПЗУ, перестанут работать. Такой стиль программирования обрекает использовать только программы РК сделанные до 1991 года и не позволяет сделать никаких совместимых программных улучшений.

    Есть стандартная входная точка F82D, в которой в базовом ПЗУ стоит JMP FACE. Потому результат - без разницы, делать стандартный CALL F82D или нагло лезть внутрь ПЗУ F800, делая нестандартный CALL FACE.

    Авторы РК86 неоднократно предупреждали, что лезть внутрь ПЗУ нельзя. Но нашлись умельцы, которые, чтобы с'экономить 9 МКСЕК времени и несколько байтов кода, стали лезть внутрь ПЗУ F800. Вероятно, из-за этого, авторы РК86 не смогли опубликовывать обещанную схему реконфигуратора архитектуры, дающего в РК86 две адресации портов - со старыми адресами портов на 8000 и с адресами портов на F000, что даёт 60 кб ОЗУ.
    Может я непонятно написал. Это пример рабочего кода. Из него можно взять параметры инициализации и сами процедуры инициализации. Параметры позволяют не считать биты и вообще не задумываться автору, например желающему написать игру (а разве не после подобной темы отщепилась вот эта?), как изменить высоту строк, увеличить их количество и тд. Нужно только указать в параметрах желаемое. Не все же разбираются в мудрёных и запутанных константах для инициализации БИС, тем более что там нагорожено всё в кучу. Естественно, что переносить в свою программу заполнение экрана нулями и символами, а так же Выход из программы не надо (думал это и так каждому понятно).

    Далее. Да, в конце это инициализация на стандартный режим дисплея. И нужна она, чтоб запустив программу (именно вот эту) из Монитора, потом из неё в этот же монитор и вернуться, на строку ниже с тем же курсором. Зачем здесь чистить экран? Лично я в Мониторе правил некоторые параметры в этой программе и снова запускал её. Смотрел как отображается новый экран и снова возвращался. Делал я всё это на Апогее, там и адреса были другие. Для проверки на эмуляторе РК переписал адреса под РК. А если появится желающий проверить "это" на другой машине, ему нужно вставить адреса контроллеров и процедур свои. Чего здесь непонятного? Повторяю - адреса процедур и адреса устройств любой желающий может поставить свои, какие хочет. Это возможность воткнуть в реальный ТВ реальный РК (или клон) и не дожидаясь создания какой-то новой игры или программы, проверить нестандартный режим экрана для РК, но вписывающийся в стандарты ТВ.

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

    По умолчанию

    Цитата Сообщение от SegaBoy
    Может я непонятно написал. Это пример рабочего кода. Из него можно взять параметры инициализации и сами процедуры инициализации. Параметры позволяют не считать биты и вообще не задумываться автору, например желающему написать игру (а разве не после подобной темы отщепилась вот эта?), как изменить высоту строк, увеличить их количество и тд. Нужно только указать в параметрах желаемое. Не все же разбираются в мудрёных и запутанных константах для инициализации БИС, тем более что там нагорожено всё в кучу. Естественно, что переносить в свою программу заполнение экрана нулями и символами, а так же Выход из программы не надо (думал это и так каждому понятно).

    Далее. Да, в конце это инициализация на стандартный режим дисплея. И нужна она, чтоб запустив программу (именно вот эту) из Монитора, потом из неё в этот же монитор и вернуться, на строку ниже с тем же курсором. Зачем здесь чистить экран? Лично я в Мониторе правил некоторые параметры в этой программе и снова запускал её. Смотрел как отображается новый экран и снова возвращался. Делал я всё это на Апогее, там и адреса были другие. Для проверки на эмуляторе РК переписал адреса под РК. А если появится желающий проверить "это" на другой машине, ему нужно вставить адреса контроллеров и процедур свои. Чего здесь непонятного? Повторяю - адреса процедур и адреса устройств любой желающий может поставить свои, какие хочет. Это возможность воткнуть в реальный ТВ реальный РК (или клон) и не дожидаясь создания какой-то новой игры или программы, проверить нестандартный режим экрана для РК, но вписывающийся в стандарты ТВ.
    А может Вы не умеете читать?

    На какой вопрос Вы отвечаете? В моей реплике нет ни слова о Вашем коде. Ни слова, ни для чего он используется, ни о его качестве. С чего такая обиженная реакция? Всё моё сообщение посвящено только одному. Тому, что Вы неграмотно лезете внутрь ПЗУ F800, что даёт мерзкий прецендент для программиста, если он заимствует ваш код или хотя бы ссылки. Разве я обсуждал, что Вы что-то там заполняете или нет нулями?

    Цитата Сообщение от SegaBoy
    Зачем здесь чистить экран?
    Где я утверждал, что где-то надо чистить экран? Инициализация ВГ75 - это не инициализация экранной области. Инициализация экранной области как-раз и означает заполнение экрана чем-то. Я совершенно правильно указал название, причём я даже не писал, что Ваше название неверное, я просто указал, что делает эта стандартная процедура. Которая и в РК и в его клонах и даже в ОРИОНЕ всегда вызывается на F82D ! А вовсе не залезанием внутрь ПЗУ, что просто неграмотно с любой точки зрения (как совместимости с клонами и эмуляторами, так и программисткой этики). Тем более, что Вы утверждаете, что эта процедура для всех клонов

    Цитата Сообщение от SegaBoy
    Чего здесь непонятного? Повторяю...
    Разве я что-то не понял и переспрашивал? А вообще когда процедуре надо передавать много параметров обычно используются макрокоманды, иначе программист должен помнить, где конкретный параметр передавать.

    Теперь по поводу реплики по убиранию курсора. Ваш ответ совершенно бессмысленен и объясняется лишь обидой непонятно на что. Речь идёт об убирании курсора вообще, а не только в псевдографическом режиме сплошных строк. А в псевдографическом режиме и проблемы нет. Смотрите. mvg перепрограммирует ВГ75, причём специально меняет номер линии подчёркивания с 10 на 8, чтобы курсор остался видимым и при строках в 8 линий. А затем зачем-то стремится его убрать. Ну если он не нужен, так и не меняйте параметр "линия подчёркивания" - курсор исчезнет сам.
    Последний раз редактировалось barsik; 11.03.2017 в 18:41.

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

    По умолчанию

    Цитата Сообщение от barsik Посмотреть сообщение
    А может Вы не умеете читать?
    Возможно.
    Тогда о чём Вы? Надо было как-то по другому назвать процедуры? Или По другому выйти из программы?
    Можете показать пример как правильно сделать?

Страница 6 из 36 ПерваяПервая ... 2345678910 ... ПоследняяПоследняя

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

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

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

Ваши права

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