Вопросы новичка по "Львову"
Вопросы новичка по "Львову"
С вашего позволения, создаю эту тему для обсуждения низкоуровневых вопросов.
Первый будет такой: правильно ли, что общая практика программирования для "Львова" (принятая в играх и софте) - это игнорировать часть экранного пространства, выходящую за пределы гарантированно отображаемой области? Примерно та же картина наблюдается при программировании для игровой приставки NES - там в зависимости от режима PAL/NTSC и типа телевизора не гарантируется, что будут показаны области, которые могут выйти за пределы экрана. Их в играх чаще всего используют, но не для критично важной игровой информации, имея в виду, что их покажут не все телевизоры.
И если всё так, тогда получается, что часть видеопамяти слева, справа и сверху-снизу мы должны игнорировать. Мы её и использовать не можем - потому что на некоторых телевизорах с областью отображения покрупнее будет мусор, и также мы вынуждены в своих графических процедурах эту память обходить.
Каким гарантированно мы можем считать достоверное разрешение экрана "Львова"?
Накидайте, пожалуйста, простых подпрограмм, выводящих простой спрайт. Можно даже привязанный по горизонтали к сетке 4 (чтобы попроще и без битовых сдвигов).
Первый будет такой: правильно ли, что общая практика программирования для "Львова" (принятая в играх и софте) - это игнорировать часть экранного пространства, выходящую за пределы гарантированно отображаемой области? Примерно та же картина наблюдается при программировании для игровой приставки NES - там в зависимости от режима PAL/NTSC и типа телевизора не гарантируется, что будут показаны области, которые могут выйти за пределы экрана. Их в играх чаще всего используют, но не для критично важной игровой информации, имея в виду, что их покажут не все телевизоры.
И если всё так, тогда получается, что часть видеопамяти слева, справа и сверху-снизу мы должны игнорировать. Мы её и использовать не можем - потому что на некоторых телевизорах с областью отображения покрупнее будет мусор, и также мы вынуждены в своих графических процедурах эту память обходить.
Каким гарантированно мы можем считать достоверное разрешение экрана "Львова"?
Накидайте, пожалуйста, простых подпрограмм, выводящих простой спрайт. Можно даже привязанный по горизонтали к сетке 4 (чтобы попроще и без битовых сдвигов).
-
NeoSpectruman
- Posts: 145
- Joined: 21 Aug 2012, 22:30
Re: Вопросы новичка по "Львову"
зачем оно игнорироватьZorko wrote: 24 Apr 2021, 05:18 тогда получается, что часть видеопамяти слева, справа и сверху-снизу мы должны игнорировать.
можно не заморачиваться и туда вполне рисовать если так проще
но как и несом тк нет гарантии что все это увидят
то тулить туда что то важное нельзя....
еще нужно учитывать что верхняя часть изображения часто завернутая вбок

и поэтому туда что либо рисовать тоже не безопасно
а еще последний столбец экрана видимо не отображается совсем без доработок
https://zx-pk.ru/threads/29171-kartinki ... post964361
https://zx-pk.ru/threads/29168-korrekts ... post967159
viewtopic.php?f=2&t=346
Re: Вопросы новичка по "Львову"
Нет, это на совести программиста. И большинство игр используют всю видеопамять. Разрешение ПК-01: 256х256.И если всё так, тогда получается, что часть видеопамяти слева, справа и сверху-снизу мы должны игнорировать
В понедельник кину несколько своих. Может не самые идеальные, но какие есть. Нужны вывод влоб (тайлы) и по маске (спрайты)? Или только тайлы?Накидайте, пожалуйста, простых подпрограмм, выводящих простой спрайт. Можно даже привязанный по горизонтали к сетке 4 (чтобы попроще и без битовых сдвигов).
Также, возможно, пригодится вот это (кодировка windows 1251):
http://pc01.lviv.ua/files/program.html
Там есть адерса внутренних подпрограмм. Что будет удобно для работы с текстом со стандартным шрифтом.
Re: Вопросы новичка по "Львову"
Zelya я не спорю! Но тут такой момент. Твой "РИК" писана весь экран, как и мой "Лабиринт". Но в "РИК" объекты то побольше чем в "Лабиринт" (8х8)! Это я всё к тому, что можна только представить как "Лабиринт" будет выглядеть на реальном железе с таким "развертками" ТВ как показано на скринах NeoSpectruman.Zelya wrote: 24 Apr 2021, 11:39 Нет, это на совести программиста. И большинство игр используют всю видеопамять. Разрешение ПК-01: 256х256.
Re: Вопросы новичка по "Львову"
Zorko, я тебе из "лабиринта" кидал - вот здесьZorko wrote: 24 Apr 2021, 05:18 Накидайте, пожалуйста, простых подпрограмм, выводящих простой спрайт. Можно даже привязанный по горизонтали к сетке 4 (чтобы попроще и без битовых сдвигов).
viewtopic.php?f=8&t=391&start=15#p5243
Тебе со скольких игрушек то наковырять ?
И с каких именно ?
Ну давай попробую. Пусть только остальные учасники проверят правильность наковыряния.
Штук пять игрушек (случаных) хватит ?
Re: Вопросы новичка по "Львову"
Еще раз: это на совести программиста.
Если есть основания думать, что играбельность из-за использования внешней зоны может упасть - то нарисуйте игре рамочку или просто не используйте эту область.
Среда разработки не должна искусственно ограничивать разрешение.
Если есть основания думать, что играбельность из-за использования внешней зоны может упасть - то нарисуйте игре рамочку или просто не используйте эту область.
Среда разработки не должна искусственно ограничивать разрешение.
Re: Вопросы новичка по "Львову"
О, блин...als wrote: 24 Apr 2021, 12:17 Ну давай попробую. Пусть только остальные учасники проверят правильность наковыряния.
Штук пять игрушек (случаных) хватит ?![]()
а чёрт там поймёшь в чужих игрушках
Я вот на торент вылкадовал архив декомпилированных для ТАСМ
212304_decLVTtoTASM1.7z
кому влом с торента качать, возьмите отсюда
https://dropmefiles.com/557078
там в каталогах "список..." есть каталоги "m" в них игрушки тоже по каталогам и файлы
Projectm.asm Projectm.lst у кого "глаз намётан" быстро разберётся!
Re: Вопросы новичка по "Львову"
А-а-а-а! Ну да! Конечно! Сама среда не должна делать никаких ограничений!
Это если отдельная процедура пишется типа вывод текста на экран как в ПК-01 что в квадрат по центру, то понять можна что она весь экран не использует для вывода текста!
Хотя могли б и сделать отдельную процедуру без ограничений, а вторую, (которая использует первую) что ограничивает! Или я чего-то не знаю ?
Re: Вопросы новичка по "Львову"
Спасибо за информацию, друзья.
У нас в библиотеках подпрограмм таких может быть очень много. Без описаний запутаемся. Спроектируем интерфейсы, и потом в рамках этого будем двигаться. Вывод тайла 8x8 - норм, поверх этого буквы-цифры, сякой-такой опрос клавиш, и понеслось.
Кстати, а графически подпрограммы ПЗУ какие-то ограничения по размеру экрана поддерживают?
Игродел из меня совсем никудышний, так что, пожалуй, по маске можно и на потом.
А давайте так. Нам нужен модуль общего назначения. Туда можно напихать вызов подпрограмм из ПЗУ. Это первое, что приходит на ум. Потом несложные тайлы. Что ещё следовало бы туда включить? Или сразу лучше организуем несколько модулей? Вот в ZXDev опрос управления, тайлы, спрайты, Basic, файлы и прочее разнесены по разным модулям. "Львов" тоже машинка многогранная, так что в итоге начав с одного модуля можно получить их целый набор. Но вот было бы интересно увидеть примерные интерфейсы будущих модулей, чтобы понять что к чему.
Если портировать "Охоту на лис" на Львов, то текстовый вариант с РК ляжет вообще без проблем. Но Львов побогаче РК - в нём есть графика. Но цветастость не такая, как на Спектруме, поэтому подсветка может быть устроена несколько специфически. Честно говоря, я не могу придумать как сделать подсветку на Львове.
Если портировать Клад, то первое, во что мы упрёмся - он ещё не отреверсен до конца.
Там на форуме Никита Зимин декомпилировал на Паскаль игру Зона с УКНЦ/ДВК (по Стругацким). Игра текстовая, и её можно переписать на Оберон для Львова. Но возможно, что эту работу будет проще сделать через Паскаль.
Есть ещё предложения? Давайте возьмём какую-то определённую игру и будет двигаться в её рамках, так и поймём какие нам нужны подпрограммы, и проблемы попутно порешаем, а K580Dev обрастёт мяском для Львова. Предлагаю такой коллективный проект. Кто согласен? Предлагайте идеи. Но с оглядкой на то, что писать всё-таки будем не на асме.
als, если можно, предвари свои процедуры коротенькими описаниями что они именно делают, что на входе, что на выходе, и в каких регистрах. У меня глаз такой асм читает очень тяжело, я к Z80 привык.als wrote: 24 Apr 2021, 12:17Zorko, я тебе из "лабиринта" кидал - вот здесь
viewtopic.php?f=8&t=391&start=15#p5243
Тебе со скольких игрушек то наковырять ?
И с каких именно ?
Ну давай попробую. Пусть только остальные учасники проверят правильность наковыряния.
Штук пять игрушек (случаных) хватит ?![]()
У нас в библиотеках подпрограмм таких может быть очень много. Без описаний запутаемся. Спроектируем интерфейсы, и потом в рамках этого будем двигаться. Вывод тайла 8x8 - норм, поверх этого буквы-цифры, сякой-такой опрос клавиш, и понеслось.
Понял-понял!Zelya wrote: 24 Apr 2021, 11:39Нет, это на совести программиста. И большинство игр используют всю видеопамять. Разрешение ПК-01: 256х256.
Кстати, а графически подпрограммы ПЗУ какие-то ограничения по размеру экрана поддерживают?
Мне нравится такой подход! Сразу быка за рогаZelya wrote: 24 Apr 2021, 11:39В понедельник кину несколько своих. Может не самые идеальные, но какие есть. Нужны вывод влоб (тайлы) и по маске (спрайты)? Или только тайлы?
А давайте так. Нам нужен модуль общего назначения. Туда можно напихать вызов подпрограмм из ПЗУ. Это первое, что приходит на ум. Потом несложные тайлы. Что ещё следовало бы туда включить? Или сразу лучше организуем несколько модулей? Вот в ZXDev опрос управления, тайлы, спрайты, Basic, файлы и прочее разнесены по разным модулям. "Львов" тоже машинка многогранная, так что в итоге начав с одного модуля можно получить их целый набор. Но вот было бы интересно увидеть примерные интерфейсы будущих модулей, чтобы понять что к чему.
Если портировать "Охоту на лис" на Львов, то текстовый вариант с РК ляжет вообще без проблем. Но Львов побогаче РК - в нём есть графика. Но цветастость не такая, как на Спектруме, поэтому подсветка может быть устроена несколько специфически. Честно говоря, я не могу придумать как сделать подсветку на Львове.
Если портировать Клад, то первое, во что мы упрёмся - он ещё не отреверсен до конца.
Там на форуме Никита Зимин декомпилировал на Паскаль игру Зона с УКНЦ/ДВК (по Стругацким). Игра текстовая, и её можно переписать на Оберон для Львова. Но возможно, что эту работу будет проще сделать через Паскаль.
Есть ещё предложения? Давайте возьмём какую-то определённую игру и будет двигаться в её рамках, так и поймём какие нам нужны подпрограммы, и проблемы попутно порешаем, а K580Dev обрастёт мяском для Львова. Предлагаю такой коллективный проект. Кто согласен? Предлагайте идеи. Но с оглядкой на то, что писать всё-таки будем не на асме.
Re: Вопросы новичка по "Львову"
Ну _свои_ то я попытаюсь, сейчас займусь, хотя они не очень-то и своиZorko wrote: 24 Apr 2021, 15:44 als, если можно, предвари свои процедуры коротенькими описаниями что они именно делают, что на входе, что на выходе, и в каких регистрах. У меня глаз такой асм читает очень тяжело, я к Z80 привык.
я их откуда-то передрал!
Ожидай!
Re: Вопросы новичка по "Львову"
Не знаю как получилось, но коль просил держи...
Code: Select all
(одна процедура) Вывод КВАДРАТА 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;
Re: Вопросы новичка по "Львову"
Держи еще...
Code: Select all
(вторая процедура) вывод СПРАЙТА т.е. из одной области байты вдругую (в видел
// 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
Re: Вопросы новичка по "Львову"
Господа, нужна утилита, позволяющая перегнать бинарь в формат эмулятора Львова (предположительно .lvt? или .lvt только для Бейсик-программ?)
Как вообще устроена загрузка машиннокодовых программ во Львов? На Спеке у прог и игр обычно есть Бейсик-загрузчик, он делает всю подготовительную работу. Но в ПЗУ Львова Бейсика нет, насколько я понимаю. Поэтому что мне нужно:
На входе утилиты: бинарник, скомпилированный под определённый адрес. Его надо превратить в файл, удобный для загрузки в эмуль. С изучением форматов морочиться не хочу, думаю, вы уже эту проблему решили в виде утилиты.
Что должно быть при старте .lvt-файла в эмуляторе:
1. Загрузка в память машкодового файла, оттранслированного с адреса 0 (будет отлично, если адрес можно будет задать утилитке произвольно, с ком. строки).
2. Запуск его, передав управление на этот адрес.
Загружать игры и программы во Львов не умею. Подозреваю, что эмуль делает это сам.
Эмуль юзаю b2m. lvt-шки он запускает автоматом, без мороки.
Как вообще устроена загрузка машиннокодовых программ во Львов? На Спеке у прог и игр обычно есть Бейсик-загрузчик, он делает всю подготовительную работу. Но в ПЗУ Львова Бейсика нет, насколько я понимаю. Поэтому что мне нужно:
На входе утилиты: бинарник, скомпилированный под определённый адрес. Его надо превратить в файл, удобный для загрузки в эмуль. С изучением форматов морочиться не хочу, думаю, вы уже эту проблему решили в виде утилиты.
Что должно быть при старте .lvt-файла в эмуляторе:
1. Загрузка в память машкодового файла, оттранслированного с адреса 0 (будет отлично, если адрес можно будет задать утилитке произвольно, с ком. строки).
2. Запуск его, передав управление на этот адрес.
Загружать игры и программы во Львов не умею. Подозреваю, что эмуль делает это сам.
Эмуль юзаю b2m. lvt-шки он запускает автоматом, без мороки.
Re: Вопросы новичка по "Львову"
Как ты там мне говорил - Нет. Сам дрочись!
Или Зелю жди!
Вот только утилиты готовой у нас насколько я знаю нет!
И писать её кто либо не собирается!
А мне смысла ну никакого нет!
Успехов!
Или Зелю жди!
Вот только утилиты готовой у нас насколько я знаю нет!
И писать её кто либо не собирается!
А мне смысла ну никакого нет!
Успехов!
Who is online
Users browsing this forum: No registered users and 1 guest

