В общем надо скроллер фреймовый как у megaball -> http://trd.speccy.cz/demo_ver/MBALL_D.ZIP
Печаталку даже 8x8 можно. У меня какой-то затуп с этой фигней, я могу написать, но пишу почему-то очень долго всякие такие фишки, связанные с экраном...
Вид для печати
В общем надо скроллер фреймовый как у megaball -> http://trd.speccy.cz/demo_ver/MBALL_D.ZIP
Печаталку даже 8x8 можно. У меня какой-то затуп с этой фигней, я могу написать, но пишу почему-то очень долго всякие такие фишки, связанные с экраном...
попробуй через стэк...
Я совет просил? Не просил. Я сорцы просил. Не флудь...
тогда тебе проще скачать сорец шторма, там фрэймовый скрол как раз 8*8 если не ошибаюсь!
http://opensourcezx.untergrund.net/c...ler-storm.html
чем сидеть ждать от моря погоды...
8x6 там - плюс не фулскрин и тока познакоместно...
вот лови - простенький скроллер...
cj, а мона с конкретным случаем? Чтобы хотя бы запустить и посмотреть на то как оно ездит мона было.
гы - там же есть скомпилированный уже снапшот, в котором все видно... там же не просто процедура, а готовый пример (кривоватый конечно немного, просто в лом было обвязку писать - так на скорую руку накидал, убыстрение/торможение скролла ппц кривое вышло =) )
А ты проверял? :) Если откомпилировать все сбрасывается. То ли таблички, то ли еще какой-то лабуды нет...
нет - я не проверял - снапшот просто нашел непонятно откуда-то =)
видимо проблема с разными версиями сиджасма - я пользуюсь последней stable - ибо лучшее враг хорошего.
вот тока что скомпилил - сиджасм тоже в комплекте - потом стеру (чтобы не засорять место на форуме).
не представляю какие ошибки там могут быть... я aprisobal'а в том году пару месяцев мучал - пока все ошибки не пропали (кроме глюка с 48 снапшотом) - а потом уже не менял компилятор...
или как вариант - я же написал что обвязка кривая - может банки щелкаются некорректно - а твоему эмулятору это не нравится... там годето в #7ffd вроде 0 кидается в одном месте.
cj, а у тебя там ошибки в расчетах никакой нету? А то что-то при изменении ширины по x больше 24 скроллер вниз сползает.
вот щас скомпилировал под разные ширины - как меньше, так и больше - окно стоит на месте - высота тоже не плавает. или ты о том, что спрайт текста больше становится и выкидка? дык там размер спрайта рассчитывается [size_x * font_hgt * кол-во строк текста], размер кода выкидки тоже от ширины зависит - то есть чем больше ширина, тем больше спрайт. для большого окна и большого текста данный скролл не подойдет, надо делать как в megaball - переставление стека и работу с банками (либо допечатывание в реалтайме).
Ну да, я об этом... Блин, слушай, надо чего-то придумать, а то считай текста на 2 страницы, а места уже нет в памяти. Спрайт тупо мега-здоровый получается и места нету нифига.
ну полноценный скролл пишется не за час как этот =)
в мегабалле - спрайт генерится в банки - занимает 14 почти экранов по практически 2/3 экрана - порядка 60К (4 банки)
код практически такой же как и в моем сорце, только рисуется все на #4000, и в каждой строке выкидки добавляется вначале 5 нулей.
перед выкидкой устанавливается нужная банка и нужный адрес дял стека, в BC заносится #7FFFD, в A - следующей банки.
рассчитывается когда происходит переполнение и там выставляется код LD SP,xxxx: OUT (C),A.
после вывода экрана этот код затирается
воть
в принципе это не сложно сделать - особенно если не мучаться с изменением размеров, а сразу писать под нужное окно.
ну и совет - в таких скроллах через раскранченный спрайт - обычно шрифт делают по высоте меньше 8, чтобы больше текста влазило, ибо при ширине текста в 32 знакоместа в память влезет порядка 300 строк всего (384 при использовании всех банок 0,1,3,4,6,7)
А если каждую новую строчку собирать на лету и двигать спрайте вверх-вниз? Не успеет?
Кстати хорошо пошутил, ввел font_hgt и нигде не использовал :) А я сижу втыкаю чож он мне высоту-то не меняет... :)
полноценный скролл с допечатыванием гораздо сложнее по коду - успеет конечно, но я писать это не буду =) вон в Born Dead фуллскрин (практически) со цветом скроллируется.
насчет высоты... ну она учитывается в рассчетах размера спрайта (ручками) и теоретически должна быть в генерилке спрайта.
// тут тупо считается высота фонта равной 8
я же сразу сказал что обвязку надо переписывать под себя =)
Ну и черт с ним тогда, просто мне надо всё всунуть в 48k, а это сложнее...
Ну да, я и говорю типа пошутил хорошо. Кстати там не тока тут, там еще надо в генерилке спрайта это тоже учесть. :) В общем ишо раз спасибо. Как-то более понятно стало, как это вообще пишут. Места правда жрет как я не знаю чего...Цитата:
насчет высоты... ну она учитывается в рассчетах размера спрайта (ручками) и теоретически должна быть в генерилке спрайта.
// тут тупо считается высота фонта равной 8
я же сразу сказал что обвязку надо переписывать под себя =)
под 48К - зы
если текста много - тогда надо писать всетаки чтото более реальное- ибо если даже отказаться от IM2 - код выкидки расположить гденить в #d000, то места все равно под спрайт мало останется - при шрифте 8х6 всего 149 строк. а надо еще музыку (надо ли) и код кудато запихивать.
Ну вот я домой приду вечером и посмотрю, хватает или нет.
Shadow Maker, никак, ИНТРО пишет!.. :) Молодец :)
Нет, не угадал... Именно скроллер текста, а не интро.
Не мешайте человеку! может так интра и родится ;-)
Не родится. Если все такие любопытные, вот зачем мне это надо:
http://zx.pk.ru/showthread.php?t=5624
посмотрел свое интро к Кащеевой цепи - там текста 7 экранов получается - памяти не хватало - дык я сделал раскранченный код не для всего окна - а только для одной строки в 8 пикселов высотой. код вида - pop de:ld (hl),e:inc l:ld (hl),d... сейчас до меня доходит, что проще было использовать обычный ldi - то же самое по тактам выходит =)
то есть проще всего написать будет так:
ld sp,таблица адресов начальных строк экрана
ld hl,начало спрайта-текста (вычисляемое)
ld a,высота окна в пикселах
loop
pop de// получили адес на экране
.(ширина в знакоместах) ldi
dec a:jp nz,loop
так ты потеряешь немного в скорости - но зато выиграешь кучу памяти для спрайта.
Точно. Вот буквально вчера нашёл в дебрях исходники своей игрухи KoolEggz, решил ее под формат исходников sjasm'а портировать. Потом родилась идея переделать ее из 128к онли в обычную 48к игру. Стал смотреть что можно заоптимизить - оказалось, что огромные декранченые процедуры нафиг не нужны, можно обычными ldi с pop de как в твоём примере ограничиться - всё влезло даже в фирмоспековское прерывание, правда пришлось поизвращаться с вектором прерываний, так как он в оригинале в #5b был установлен, что черевато в фирменых машинках. Кстати, вопрос не много не в тему - а есть смысл делать 257 байтовую таблицу прерываний, если проект чисто для буржуев? (в трд версии и так эта таблица есть - это что бы в дискриминации не обвиняли :) )
рассчеты показывают, что можно вывести окно 32х120 вполне, чтобы еще место на музыку осталось - в том же мегабалле 126 высота. я бы на твоем месте если неохота с кодом вохиться, все же бы окошко чуток уменьшил...
Чего-то настальгия пробила ... Захотелось забацать скролл !!! Прикрепляю файл с исходниками ... Файл "scroll.az8" и есть сам скролл. Там есть процедура "INIT", которая за вас всё декранчит. Позволяет установить окошко в любое знакоместо по X(0..31) и Y(0..191) и размером XS(3..32) YS(1..192). Сейчас скомпилен "scroll.trd", в котором лежит файл "1.С". Запускаем эмулятор и пишем в TR-DOS'е - RUN "1" CODE. Наслаждаемся окном размером 32х160 вместе с музыкой и идеальной работой без глюков, и свободно в инте ещё около 7000 тактов. Нажимаем пробел и смотрим сколько оно занимает в прерывании. Что бы откомпилировать запускаем "scroll.bat". Перед процедурой INIT описаны входные параметры ...
Если будет нужно, то можно сделать так, что бы было 32х176 и не дескрировало ... Я делал на скорую руку, поэтому не фиксил дискретизацию. Так же предупреждаю, размер по Х желателен чётный, можно, конечно и не чёт, но будете проигрывать в скорости !!! Ну и не стоит вылазить за пределы экрана !!!
Да, эффект требует под себя 16384 байт памяти, не считая, конечно же, текста и шрифта !!!
И ещё ... Компилится оно в моём ASAM'е ... Но без проблем можно перенести в любой Speccy асм. У меня поддерживаются команды JZ, что автоматом выбирает JR или JP ... Я старался не использовать такие приколы, так что если вдруг забыл в силу привычки, то пробегитесь по тексту и замените на JR !
Наслаждайтесь ...
Оно тока на пентагоне в инт лезет... У меня окошко 27 (28) символов по ширине и 17 по высоте. Робус, мона под это заточить чтобы в инт скорпиона полезло и клавиши вверх-вниз прикрутить с ускорением?
pop de// 10
.27 ldi // 27*16 = 432
dec a // 4
jp nz,loop // 10
итого на линию = 456 тактов
на 17 знакомест получаем 17*8*456 = 62016 тактов
так как все команды четные - на медленных тачках должно работать также (кажется), остается место на музыку...
Да, с 27 лезет. А чего терь с лучом делать, который посередине экрана хреначит? Или кто это там колбасит.
ну... надо ловить луч - что тут еще делать то...
типа так
halt
call scrollout2
call music
call control
// все рассчеты
call scrollout1
jr loop
scrollout1 - вывод верхней части окна - столько строк сколько влазит в фрейм
(так как используется стек - чтобы не испортить таблицу адресов - надо успеть восстановить стек до прихода прерывания)
scrollout2 - вывод оставшейся части экрана - по времени луч должен начать рисовать экран
на глаз вроде достаточно вывести 3-4 знакоместа во второй процедуре, и все остальное в первой.
то есть в начале фрейма у нас уже выведена основная часть спрайта, и мы быстро выводим остаток. луч начинает отрисовывать это на экран, и мы по быстрому начинаем строить новый экран...
процедуры ессно хватит одной - надо просто менять переменные на входе.
Ему всё равно ... Теперь уже ... =) Текущий вариант скроллирует 32х156 ... По-моему твои параметры покрывает с головой !!! Конечно же это под фирменный Speccy ... Там заремлена конфигурация под пентагон, где получается 32х168 !!! Под свой размер найди "CALL INIT" и перед ней задаются параметры в регистрах. Установи в нужные тебе координаты и нужные размеры !!! Текущий вариант уже сам подстраивается и не дискрирует. Проге то ли запускать под 128 или 48, теневой экран она не юзает ... Вообщем универсальная !!!
Поменял на свои параметры, вылез луч посередине... Выходит не подстраивается сам... Может расскажешь детальнее, что именно подкручивать? И мне кнопочки вверх-вниз, там для этого что именно подкрутить? Я как бы понимаю, что это в LoopPrint где-то, но лучше чтобы ты сказал точнее.
Добавлено через 36 минут
Ну вот я типа так сделал и вот не помогло, в другом месте колбасит. Инты я так понял надо на рет заменить? И еще теперь музыка на ударниках в инт не лезет... Покажи как надо, а?
Поменял под твои параметры ... Работает ...
В коде есть такой кусок:
Так вот CP 12 определяет "массу" скролла ... Там стояло 15, этим нужно подстраивать ... CP Х сравнивает со старшим байтом размера скроллирования. Если размер более Х*256 то нужно разбивать вывод скролла на две части, если нет, то высвечивается монотонным блоком !Код:LD D,0
LD E,C
LD HL,0
INI8 ADD HL,DE
DJNZ INI8
LD A,H
CP 12
LD HL,EFFECTER1
JR C,INI9
LD HL,EFFECTER2
INI9
LD (INT1+1),HL
LD A,205
LD (INT1),A
Данная конфигурация подстроена под твои параметры ...
Тебе нкужно графику выводить ? Спрайты там или ещё что-то ? Просто у тебя шла речь только о тексте ...
Нет, графику не нужно, начало печати надо с #40c1. И хотя окошко 17x27, печать шрифта надо бы не 8 в высоту а 7. Вот у cj в исходнике это легко меняется, а как у тебя сделать крутилки вверх/вниз и 7 пикселов я догадываюсь, но как-то не очень работает то, что я догадываюсь.
Кстати что-то его все равно подплющивает от луча на скорпионе.
Странно ... Я вот прямо сейчас смотрю как оно текёть ... Всё идеально ... Нажми пробел, что бы посмотреть где луч на бордюре делит две части скролла !
В самом EFFECTE ... Там есть место где меняется WAIT(метка) ... Как досчитает до 7, прибавить один лишний шаг и станет 7 ... К 15:00 сделаю ... На работу сейчас надо ...
Добавлено через 1 минуту
Кстати ... Какие у тебя координат окошка ?