PC-01 Lviv
http://pc01.lviv.ua/forum/

Вопросы новичка по "Львову"
http://pc01.lviv.ua/forum/viewtopic.php?f=20&t=393
Page 1 of 4

Author:  Zorko [ 24 Apr 2021, 05:18 ]
Post subject:  Вопросы новичка по "Львову"

С вашего позволения, создаю эту тему для обсуждения низкоуровневых вопросов.

Первый будет такой: правильно ли, что общая практика программирования для "Львова" (принятая в играх и софте) - это игнорировать часть экранного пространства, выходящую за пределы гарантированно отображаемой области? Примерно та же картина наблюдается при программировании для игровой приставки NES - там в зависимости от режима PAL/NTSC и типа телевизора не гарантируется, что будут показаны области, которые могут выйти за пределы экрана. Их в играх чаще всего используют, но не для критично важной игровой информации, имея в виду, что их покажут не все телевизоры.

И если всё так, тогда получается, что часть видеопамяти слева, справа и сверху-снизу мы должны игнорировать. Мы её и использовать не можем - потому что на некоторых телевизорах с областью отображения покрупнее будет мусор, и также мы вынуждены в своих графических процедурах эту память обходить.

Каким гарантированно мы можем считать достоверное разрешение экрана "Львова"?

Накидайте, пожалуйста, простых подпрограмм, выводящих простой спрайт. Можно даже привязанный по горизонтали к сетке 4 (чтобы попроще и без битовых сдвигов).

Author:  NeoSpectruman [ 24 Apr 2021, 09:14 ]
Post subject:  Re: Вопросы новичка по "Львову"

Quote:
тогда получается, что часть видеопамяти слева, справа и сверху-снизу мы должны игнорировать.
зачем оно игнорировать
можно не заморачиваться и туда вполне рисовать если так проще
но как и несом тк нет гарантии что все это увидят
то тулить туда что то важное нельзя....
еще нужно учитывать что верхняя часть изображения часто завернутая вбок
Image
Image
и поэтому туда что либо рисовать тоже не безопасно
а еще последний столбец экрана видимо не отображается совсем без доработок

https://zx-pk.ru/threads/29171-kartinki ... post964361
https://zx-pk.ru/threads/29168-korrekts ... post967159

viewtopic.php?f=2&t=346

Author:  Zelya [ 24 Apr 2021, 11:39 ]
Post subject:  Re: Вопросы новичка по "Львову"

Quote:
И если всё так, тогда получается, что часть видеопамяти слева, справа и сверху-снизу мы должны игнорировать
Нет, это на совести программиста. И большинство игр используют всю видеопамять. Разрешение ПК-01: 256х256.
Quote:
Накидайте, пожалуйста, простых подпрограмм, выводящих простой спрайт. Можно даже привязанный по горизонтали к сетке 4 (чтобы попроще и без битовых сдвигов).
В понедельник кину несколько своих. Может не самые идеальные, но какие есть. Нужны вывод влоб (тайлы) и по маске (спрайты)? Или только тайлы?

Также, возможно, пригодится вот это (кодировка windows 1251):
http://pc01.lviv.ua/files/program.html

Там есть адерса внутренних подпрограмм. Что будет удобно для работы с текстом со стандартным шрифтом.

Author:  als [ 24 Apr 2021, 12:11 ]
Post subject:  Re: Вопросы новичка по "Львову"

Quote:
Нет, это на совести программиста. И большинство игр используют всю видеопамять. Разрешение ПК-01: 256х256.
Zelya я не спорю! Но тут такой момент. Твой "РИК" писана весь экран, как и мой "Лабиринт". Но в "РИК" объекты то побольше чем в "Лабиринт" (8х8)! Это я всё к тому, что можна только представить как "Лабиринт" будет выглядеть на реальном железе с таким "развертками" ТВ как показано на скринах NeoSpectruman.
:-)

Author:  als [ 24 Apr 2021, 12:17 ]
Post subject:  Re: Вопросы новичка по "Львову"

Quote:
Накидайте, пожалуйста, простых подпрограмм, выводящих простой спрайт. Можно даже привязанный по горизонтали к сетке 4 (чтобы попроще и без битовых сдвигов).
Zorko, я тебе из "лабиринта" кидал - вот здесь
viewtopic.php?f=8&t=391&start=15#p5243
Тебе со скольких игрушек то наковырять ? :-)
И с каких именно ?
Ну давай попробую. Пусть только остальные учасники проверят правильность наковыряния. :-)
Штук пять игрушек (случаных) хватит ? :)

Author:  Zelya [ 24 Apr 2021, 12:18 ]
Post subject:  Re: Вопросы новичка по "Львову"

Еще раз: это на совести программиста.

Если есть основания думать, что играбельность из-за использования внешней зоны может упасть - то нарисуйте игре рамочку или просто не используйте эту область.
Среда разработки не должна искусственно ограничивать разрешение.

Author:  als [ 24 Apr 2021, 12:39 ]
Post subject:  Re: Вопросы новичка по "Львову"

Quote:
Ну давай попробую. Пусть только остальные учасники проверят правильность наковыряния. :-)
Штук пять игрушек (случаных) хватит ? :)
О, блин...
а чёрт там поймёшь в чужих игрушках :)
Я вот на торент вылкадовал архив декомпилированных для ТАСМ
212304_decLVTtoTASM1.7z
кому влом с торента качать, возьмите отсюда
https://dropmefiles.com/557078
там в каталогах "список..." есть каталоги "m" в них игрушки тоже по каталогам и файлы
Projectm.asm Projectm.lst у кого "глаз намётан" быстро разберётся!

Author:  als [ 24 Apr 2021, 12:46 ]
Post subject:  Re: Вопросы новичка по "Львову"

Quote:
Среда разработки не должна искусственно ограничивать разрешение.
А-а-а-а! Ну да! Конечно! Сама среда не должна делать никаких ограничений!
Это если отдельная процедура пишется типа вывод текста на экран как в ПК-01 что в квадрат по центру, то понять можна что она весь экран не использует для вывода текста!
Хотя могли б и сделать отдельную процедуру без ограничений, а вторую, (которая использует первую) что ограничивает! Или я чего-то не знаю ?

Author:  Zorko [ 24 Apr 2021, 15:44 ]
Post subject:  Re: Вопросы новичка по "Львову"

Спасибо за информацию, друзья.
Quote:
Zorko, я тебе из "лабиринта" кидал - вот здесь
viewtopic.php?f=8&t=391&start=15#p5243
Тебе со скольких игрушек то наковырять ? :-)
И с каких именно ?
Ну давай попробую. Пусть только остальные учасники проверят правильность наковыряния. :-)
Штук пять игрушек (случаных) хватит ? :)
als, если можно, предвари свои процедуры коротенькими описаниями что они именно делают, что на входе, что на выходе, и в каких регистрах. У меня глаз такой асм читает очень тяжело, я к Z80 привык.

У нас в библиотеках подпрограмм таких может быть очень много. Без описаний запутаемся. Спроектируем интерфейсы, и потом в рамках этого будем двигаться. Вывод тайла 8x8 - норм, поверх этого буквы-цифры, сякой-такой опрос клавиш, и понеслось.
Quote:
Нет, это на совести программиста. И большинство игр используют всю видеопамять. Разрешение ПК-01: 256х256.
Понял-понял!
Кстати, а графически подпрограммы ПЗУ какие-то ограничения по размеру экрана поддерживают?
Quote:
В понедельник кину несколько своих. Может не самые идеальные, но какие есть. Нужны вывод влоб (тайлы) и по маске (спрайты)? Или только тайлы?
Мне нравится такой подход! Сразу быка за рога :) Игродел из меня совсем никудышний, так что, пожалуй, по маске можно и на потом.

А давайте так. Нам нужен модуль общего назначения. Туда можно напихать вызов подпрограмм из ПЗУ. Это первое, что приходит на ум. Потом несложные тайлы. Что ещё следовало бы туда включить? Или сразу лучше организуем несколько модулей? Вот в ZXDev опрос управления, тайлы, спрайты, Basic, файлы и прочее разнесены по разным модулям. "Львов" тоже машинка многогранная, так что в итоге начав с одного модуля можно получить их целый набор. Но вот было бы интересно увидеть примерные интерфейсы будущих модулей, чтобы понять что к чему.

Если портировать "Охоту на лис" на Львов, то текстовый вариант с РК ляжет вообще без проблем. Но Львов побогаче РК - в нём есть графика. Но цветастость не такая, как на Спектруме, поэтому подсветка может быть устроена несколько специфически. Честно говоря, я не могу придумать как сделать подсветку на Львове.

Если портировать Клад, то первое, во что мы упрёмся - он ещё не отреверсен до конца.

Там на форуме Никита Зимин декомпилировал на Паскаль игру Зона с УКНЦ/ДВК (по Стругацким). Игра текстовая, и её можно переписать на Оберон для Львова. Но возможно, что эту работу будет проще сделать через Паскаль.

Есть ещё предложения? Давайте возьмём какую-то определённую игру и будет двигаться в её рамках, так и поймём какие нам нужны подпрограммы, и проблемы попутно порешаем, а K580Dev обрастёт мяском для Львова. Предлагаю такой коллективный проект. Кто согласен? Предлагайте идеи. Но с оглядкой на то, что писать всё-таки будем не на асме.

Author:  als [ 24 Apr 2021, 15:55 ]
Post subject:  Re: Вопросы новичка по "Львову"

Quote:
als, если можно, предвари свои процедуры коротенькими описаниями что они именно делают, что на входе, что на выходе, и в каких регистрах. У меня глаз такой асм читает очень тяжело, я к Z80 привык.
Ну _свои_ то я попытаюсь, сейчас займусь, хотя они не очень-то и свои :-)
я их откуда-то передрал! :-)
Ожидай!

Author:  als [ 24 Apr 2021, 16:24 ]
Post subject:  Re: Вопросы новичка по "Львову"

Не знаю как получилось, но коль просил держи... :-)
Code:
(одна процедура) Вывод КВАДРАТА 8на8 каким-то цветом ,  заданным в D
	// т.е. выводит два байта рядом (это пискселей по четыре, всего 8), цветом D
	// HL - начальная точка должно быть не менее $4000!  адрес $4000 равен первыми 4 пикселам нулевой строки

L8DC2:
                    Xra A		// A:=0
                    Out 0C2h 		//  A на порт  C2 =0 - влючаем страницу Видео ОЗУ

                    Mvi E, 008h 		// E=8 - высота спрайта Y
                    Lxi B, 0003Fh 	// BC=63 байтов, (63 байт =ОДНА строка! - потому что по 4 пикселя) ( =63 - для смешения на туже позицию в только в нижней строке)) (от 0..63 )

L8DCA: 	//Цикл
                    Mov M,D 	// mem[HL]=D // D - цвет сразу 4 пикселей!
                    Inx H  		// HL=HL+1 следующий байт рядом
                    Mov M,D 	// mem[HL]=D тоже цветом  D //D - цвет сразу 4 пикселей!
                    Dad B 		//HL=HL+BC {смещаем под тот же байт по X только в нижней строке}
                    Dcr E 		// E=E-1
                    JNZ L8DCA // если (E<>0) т.е. не все стороки выведено перейти L8DCA

                    Mvi A, 002h // A:=2
                    Out 0C2h //  A на порт  C2 =2 - ВЫКлючаем страницу Видео ОЗУ
                    RET

Давай я тебе чорновик паскалем это так
Procedure Kvadrat; // d - цвет
Label m1;
Begin
VIDEOon;
E=8; BC=63;

m1:
Video[HL]=D; // D - цвет сразу 4 пикселей!
HL:=HL+1;
Video[HL]=D;// ... и рядом 4пискела, D - цвет сразу 4 пикселей!

HL=HL+BC {смещаем под тот же байт по X только в нижней 
E:=E-1;
If E <> 0 then  m1;

VIDEOoff;
end;


Author:  als [ 24 Apr 2021, 16:47 ]
Post subject:  Re: Вопросы новичка по "Львову"

Держи еще...
Code:
(вторая процедура) вывод СПРАЙТА т.е. из одной области байты вдругую (в видел
// DE - адрес начала спрайта 8 на 8
//HL - адрес в ВидеоОЗУ (+$4000 смещение)

L8DD7:
                    Xra A		// A:=0
                    Out 0C2h  		//  A на порт  C2 =0 - влючаем страницу Видео ОЗУ
                    Mvi B, 008h // B=8 //счетчик строк

L8DDC:
                    Ldax D		//A=mem[DE] - читаем байт спрайта
                    Mov M,A 	//mem[HL]=A - толкаем байт в  Видео ОЗУ
                    Inx H 		// HL=HL+1
                    Inx D      // DE=DE+1

      //повторяем 4 пискела рядом! Ну это исключительно из моей игрушки
                    Ldax D //A=mem[DE] - читаем байт спрайта
                    Mov M,A //mem[HL]=A - толкаем байт в  Видео ОЗУ
                     Inx H // HL=HL+1
                    Inx D    // DE=DE+1

                    Push D // сохраним позицию DE в стек
                    Lxi D, 0003Eh // DE=62 смещение на нижнюю строку
                    Dad D  	/// HL=HL+DE прибавили это смещение 
                    Pop D // вернули DE из стека
                    Dcr B // B=B-1 // счетчик строк

                    JNZ L8DDC // если   B<>0 then L8DDC

                    Mvi A, 002h // A:=2
                    Out 0C2h 	//  A на порт  C2 =2 - ВЫКлючаем страницу Видео ОЗУ
                    RET


Author:  Zorko [ 24 Apr 2021, 23:41 ]
Post subject:  Re: Вопросы новичка по "Львову"

Спасибо!

Author:  Zorko [ 28 Apr 2021, 13:25 ]
Post subject:  Re: Вопросы новичка по "Львову"

Господа, нужна утилита, позволяющая перегнать бинарь в формат эмулятора Львова (предположительно .lvt? или .lvt только для Бейсик-программ?)

Как вообще устроена загрузка машиннокодовых программ во Львов? На Спеке у прог и игр обычно есть Бейсик-загрузчик, он делает всю подготовительную работу. Но в ПЗУ Львова Бейсика нет, насколько я понимаю. Поэтому что мне нужно:

На входе утилиты: бинарник, скомпилированный под определённый адрес. Его надо превратить в файл, удобный для загрузки в эмуль. С изучением форматов морочиться не хочу, думаю, вы уже эту проблему решили в виде утилиты.

Что должно быть при старте .lvt-файла в эмуляторе:

1. Загрузка в память машкодового файла, оттранслированного с адреса 0 (будет отлично, если адрес можно будет задать утилитке произвольно, с ком. строки).

2. Запуск его, передав управление на этот адрес.

Загружать игры и программы во Львов не умею. Подозреваю, что эмуль делает это сам.

Эмуль юзаю b2m. lvt-шки он запускает автоматом, без мороки.

Author:  als [ 28 Apr 2021, 14:12 ]
Post subject:  Re: Вопросы новичка по "Львову"

Как ты там мне говорил - Нет. Сам дрочись!
Или Зелю жди!
Вот только утилиты готовой у нас насколько я знаю нет!
И писать её кто либо не собирается!
А мне смысла ну никакого нет!
Успехов!

Page 1 of 4 All times are UTC+03:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/