PC-01 Lviv

It is currently 19 Apr 2024, 13:43

Forum Games WEB Tape Loader Twitter RSS

All times are UTC+03:00




Post new topic  Reply to topic  [ 57 posts ]  Go to page 1 2 3 4 Next
Author Message
PostPosted: 24 Apr 2021, 05:18 
Offline

Joined: 20 Apr 2021, 05:09
Posts: 100
С вашего позволения, создаю эту тему для обсуждения низкоуровневых вопросов.

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

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

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

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


Top
   
PostPosted: 24 Apr 2021, 09:14 
Offline

Joined: 21 Aug 2012, 22:30
Posts: 145
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


Top
   
PostPosted: 24 Apr 2021, 11:39 
Offline
Site Admin
User avatar

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

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

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


Top
   
PostPosted: 24 Apr 2021, 12:11 
Offline

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


Top
   
PostPosted: 24 Apr 2021, 12:17 
Offline

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


Top
   
PostPosted: 24 Apr 2021, 12:18 
Offline
Site Admin
User avatar

Joined: 24 Jul 2008, 12:05
Posts: 1070
Еще раз: это на совести программиста.

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


Top
   
PostPosted: 24 Apr 2021, 12:39 
Offline

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


Top
   
PostPosted: 24 Apr 2021, 12:46 
Offline

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


Top
   
PostPosted: 24 Apr 2021, 15:44 
Offline

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

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

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

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

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

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

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


Top
   
PostPosted: 24 Apr 2021, 15:55 
Offline

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


Top
   
PostPosted: 24 Apr 2021, 16:24 
Offline

Joined: 18 May 2016, 19:55
Posts: 426
Не знаю как получилось, но коль просил держи... :-)
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;



Top
   
PostPosted: 24 Apr 2021, 16:47 
Offline

Joined: 18 May 2016, 19:55
Posts: 426
Держи еще...
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



Top
   
PostPosted: 24 Apr 2021, 23:41 
Offline

Joined: 20 Apr 2021, 05:09
Posts: 100
Спасибо!


Top
   
PostPosted: 28 Apr 2021, 13:25 
Offline

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

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

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

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

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

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

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

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


Top
   
PostPosted: 28 Apr 2021, 14:12 
Offline

Joined: 18 May 2016, 19:55
Posts: 426
Как ты там мне говорил - Нет. Сам дрочись!
Или Зелю жди!
Вот только утилиты готовой у нас насколько я знаю нет!
И писать её кто либо не собирается!
А мне смысла ну никакого нет!
Успехов!


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 57 posts ]  Go to page 1 2 3 4 Next

Forum Games WEB Tape Loader Twitter RSS

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
cron
Powered by phpBB® Forum Software © phpBB Limited