Запиляторный DJ!

По мере появления большого количества писем от ААА с новыми запилами, я понял — новое мегадемо — это будет скучно.
Надо трекмо!


Исходные данные:
  • 20 частей, из них 18 занимают все страницы 128 спектрума, и 2 немного меньше.
  • Все части приходят с исходниками в духе «ящик Нюкокода», которые легко компилируются.
  • Будет 2 музыки на части + часть-эпилог.
  • Имеем TS конфигурацию, которая построена на базе обычного Pentagon и имеет дополнительные плюшки, которые облегчат и ускорят работу — DMA (для быстрого переноса блока памяти) и сборщик в SPG формат.
Итак, необходимо: пройтись по частям и поправить в исходниках такие пункты как:
  1. удалить установку стека
  2. настроить воспроизведение необходимой музыки в отдельной странице
  3. добавить блок подсчёта проигрывания паттернов для синхронизации под музыку
  4. добавить выход в блок для загрузки следующей части

Большинство средств исходник запила представляет, добавляем в него переключение страниц TS и…

Формируем DJ-лоадер:

	device zxspectrum128

		org #5e00
start
		ld c,#b0
		ld a,(base_page+1)
		cp #50-8
		jr c,int_mus_first
		inc c
int_mus_first	ld a,c
		ld (int_mus+1),a
; музыка для первой части у нас лежит в паге #b0, для второй - #b1
; по этому счётчику переключаем банк с музыкой для части

		ld bc,SYSCONFIG
		ld a,6
		out (c),a
		inc b
		ld a,%00001110
		out (c),a
; включаем 14 Мгц и кеш, а так-же включаем страницу 0 (которая находится с адреса #0 
; как RAM) - это использовалось в варианте с ldir
		ld sp,#5fff
		xor a
		out (#fe),a
		ld hl,#5800
		ld de,#5801
		ld bc,#2ff
		ld (hl),l
		ldir
		ld hl,int_loader
		ld (#5cff),hl
; стандартный запилятор располагает в этом адресе адрес обработки прерываний, подменяем

		ld hl,pages128
		ld (page_7ffd+1),hl
base_page	ld a,8		;#50-8 
		add 8
		ld (base_page+1),a
		ld (cps+1),a
; каждая новая часть находится по адресу страницы, кратной 8, начиная с #10-й
		ld b,5
page_ldir	push bc
page_7ffd	ld hl,pages128
		ld a,(hl)
		inc hl
		ld (page_7ffd+1),hl
		ld (cpd+1),a
		ld hl,copy_pages
		call set_ports
		ld hl,cps+1
		inc (hl)
		pop bc
		djnz page_ldir
; заполняем необходимые страницы данными. разбор данных в copy_pages смотрите далее

/*
; первоначальный вариант с медленным ldir, позже заменён на DMA
		ld b,5
page_ldir	push af
		push bc
		ld bc,PAGE0	;#0000
		out (c),a
		ld bc,#7ffd
page_7ffd	ld hl,pages128
		ld a,(hl)
		inc hl
		ld (page_7ffd+1),hl
		out (c),a
		ld hl,#0000
		ld de,#c000
		ld bc,#4000
		ldir
		pop bc
		pop af
		inc a
		djnz page_ldir
; здесь используется возможность TS размещения с 0 страницы RAM. 
; Впрочем, DMA быстрее в 4 раза, оставлено как пример :)
*/

; имеем загруженными банки памяти, начинаем перенос основных блоков, размером около 40кб
		ld bc,#1eaf
		ld a,#60
		out (c),a
; устанавливаем DMADAddrH (адрес приёмника, старший), в младшем у нас 0
; результатом имеем, что полный адрес приёмника будет #6000
		ld a,16-1
		ld (cmd_len+1),a
		ld a,5
		ld (cmd+1),a
; грязно хачим данные :)

		ld hl,copy_main
		call set_ports
; переброс первого блока в #2000 байт
		ld a,32-1
		ld (cmd_len+1),a
		ld a,2
		ld (cmd+1),a
		ld hl,copy_main
		call set_ports
; переброс второго блока, #4000 байт
		ld a,0
		ld (cmd+1),a
		ld hl,copy_main
		call set_ports
; переброс последнего блока, #4000 байт, вместе - 40960 байт

/*
; пример переброски при использовании ldir
		ld a,(cps+1)
		ld (cms+1),a
		exx
		ld bc,PAGE0	;#0000
		out (c),a
		exx
		ld hl,#0000
		ld de,#6000
		ld bc,#4000
		ldir
		inc a
		exx
		out (c),a
		exx
		ld hl,#0000
		ld b,#40
		ldir
		inc a
		exx
		out (c),a
		exx
		ld hl,#0000
		ld b,#20
		ldir
*/
		ld bc,#7ffd
		ld a,#10
		out (c),a
; устанавливаем стандартную страницу и стартуем часть
		jp #6000

; магическая процедура, которая принимает старший байт порта 
; и бросает туда данные пока не встретит признак конца - #FF
set_ports	ld c,#AF
.m1		ld b,(hl) 
		inc hl
		inc b
		jr z,dma_stats
		outi
		jr .m1

dma_stats	ld b,high DMASTATUS
		in a,(c)
		AND #80
		jr nz,$-4
		ret

PT3PLAY		equ #c000
mus_page	equ #f0

; инт, который отрабатывает при перегрузке памяти
int_loader	di
		push hl
		push de
		push bc
		push af
int_mus		ld a, mus_page
		ld bc,PAGE3 : out(c), a
		call PT3PLAY + 5
		pop af
		pop bc
		pop de
		pop hl
		ei
		ret

; стандартный набор!
pages128	db #1,#3,#4,#6,#7

copy_pages	db #1a,0
	        db #1b,0    ; откуда? #c000
cps		db #1c,0    ; страница из которой будет передача данных
		db #1d,0
	        db #1e,0    ; куда? #c000 !
cpd	        db #1f,0    ; страница памяти привычного спека
	        db #26,#ff    ; перебрасывается 512 байт
	        db #28,32-1   ; перебразывается 32 раза = 16384 байта
		db #27,DMA_RAM + DMA_DALGN +DMA_ASZ    ; набор, описывающий способ перебрасывания данных
		db #ff

copy_main	;db #1a,0
	        ;db #1b,0
;cms		db #1c,0
		;db #1d,0
	        ;db #1e,#60
cmd	        db #1f,05
	        db #26,#ff
cmd_len	        db #28,16-1
		db #27,DMA_RAM + DMA_DALGN +DMA_ASZ
		db #ff

end
	include "tsconfig.asm"
	SAVEBIN "_spg/loader.bin",start, end-start


Сам вызов DMA:
ld hl,copy_pages
call set_ports


copy_pages у нас хранит последовательно: старший байт порта, данные для него

а теперь вопрос!
Почему в copy_main набор портов в начале закомментирован?
Лоадер действующий и использован в Pixel trackmo :)

PS: От себя хочу добавить, что при желании — довольно несложно переделать этот лоадер на другой менеджер памяти.

50 комментариев

avatar
Это, я так понимаю, то что ААА назвал: «VBI немножко обложил кодом» ;)
avatar
nodeus , совсем немножко ;)
тут совсем мало о том, что я три дня все части перебирал да пересматривал/перекомпиливал/фиксил :)))
avatar

               ld hl,#0000
                ld de,#c000
                ld bc,#4000
                ldir

Вовча, где твои любимые ДМА??7777
avatar
g0blinish это я оставил как пример :)
заметил этот знак: /*
; пример переброски при использовании ldir

но начиналось именно с ldir, как тест.

а сама переброска вот:
ld hl,copy_pages
call set_ports
avatar
; первоначальный вариант с медленным ldir, позже заменён на DMA
avatar
лучше не под текстом писать, а править сразу, наверное…
avatar
ну вот оно осталось в исходниках, и даже хорошо.
понятнее принцип будет.
avatar


Что хотел сказать автор?
avatar
avatar
эээм… сказать, что я в шоке — ничего не сказать (: На ум приходит только одно — ага, память резиновая! :)
avatar
Я один только считаю, что надо хорошее, крепкое трекмо?
avatar
да
avatar
надо!
avatar
ну надо, тогда куда? завалить память тсконфы анимацией?
avatar
было уже :) не так интересно
avatar
т.е. на большее тебя вряд ли хватит?
avatar
g0blinish , щас большое пишется. с робом
НОРМАЛЬНОЕ :)
avatar
не мне судить, я воспитан на немного другом трэхмо.
например,

www.youtube.com/watch?v=KKS9E8nMY4s

взгляды у всех разные, поэтому я просто валю с дискуссии.
avatar
Я всегда был и буду против TS CONF, то что я не могу запустить на пфениксе, уже не в какие рамки не лезет. Но это мегадемо делалось тупо в ЮТУБ для показа людям что может спектрум, естественно он этого ничего не может. Дело не в памяти, а в невозможности загрузки следующей части во время проигрывания предыдущей.
  • AAA
  • 0
avatar
ну какое против тсконф? сколько раз с денпоповым делали демо не без анимашки а с цветом при анимации, а воз и ныне там.
avatar
Одно дело впиливать 1к эффект без морфа, продолжения и так далее. Другое дело пилить 20 частей по 128 кб, ни байта в свободе. Это же не грузить ассемблер, это анима. Тут другой расклад по загрузке. Спектрум не способен грузить и казать. Это доказало Инсульт, доказало Унреал…
avatar
детекчу у ААА новое «головокружение от успехов».
avatar
avatar
В чем успех? в 5 ти комментах на Поуэте. Полном отсуствие мобсуждения тут или на форуме пкру? Или ваабще в чем успех? Я понял одно, когда люди в принципе не понимают, как это делается и они сами себе не могут объяснить как это впихано и как это все обработано, они говорят, что это ТУПАЯ АНИМАЦИЯ И ЭТО ААА ПРИДУРОК, ДУРАЧОК, НАИВНЯЧОК сделал. Это его НИЗКИЙ УРОВЕНЬ.

Да, это красивей чем у меня, красивей чем все что было на спектруме, но блин, это же ААА, он же дурачок.

И до сих пор, нет ни одного запила, где обработка спрайтов хотя бы близка подошла к моему уровню. И я скажу почему, потому что это очень, очень нудно и трудно. Кодом сделать проще? конечно! Я это говорю, потому что Инвитатион делали кодом, 8 бит трах кодом. Там можно было тупо спрайт делить на два, зеркалить и выводить. В два раза выше скорость в два раза больше памяти. Там можно спрайт выводить так и наперекосяк, тут нет, одно за другим. Хочешь чтобы волос кртился и так и такю. рисуй, сука 170 фаз. В кодах достаточно 30, чтобы крытить его во всех плоскостях.

запилятор вещь простая в использовании, но ужасно трудная в полготовке. Это кодер не поймет, потмоу что мысли кодера о цифре. Но художник, который хоть раз сам рисовал спрайты поймет меня и оценит. Хотя с кем я говорю…
  • AAA
  • +1
avatar
не надо обижаться, а то вообще себя в комплексы загонишь.
кто тут говорил что это всё весело и не стоит воспринимать нашу сцену серьёзно?
avatar
Я не обижаюсь, страдаю, переживаю, но не обижаюсь. Победить в умах унбеливерщину, не так просто. Слишком долго на патях вбивалось в голову, что анимация это зло. Теперь, когда уже нет даже кода, появился маленький шанс изменить мнение прихожан нашей секты в свою пользу.
avatar
nyuk , халепа.
Оригинальный +2 при использовании im2 в этой области памяти будет гнать пургу на экран.
  • VBI
  • +1
avatar
Пока не готов ориентироваться на быструю память. Нужно же логику автоматизации перепиливать. Одно дело вручную переставить вектор, другое дело, чтобы тупой запилятор делал это сам. Там неудобненько память распределять получится, ААА может не понравиться. Но можно попробовать.
avatar
В настоящее время запилятор безупречен! Он великолепно жмёт спрайты. Мне кажется в 1-2 банке в небольшом экране я могу впихать бесконечное количество надписей с вылетом и анимацией. Возможностей много. Проблема одна — отсутствие конкуренции в запиляторном искусстве. Мне негде посмотреть, черпать новые идеи, приходится придумывать самому. Надеюсь найдётся человек способный рисовать и воплощать свое зло на экране.
  • AAA
  • 0
avatar
VBI , шикарно! на ccw15 голосовал почти вслепую (негде было дему толком посмотреть), пересмотрел сегодня — офигенно! ;)
ну и AAA привет по пути, ибо запилить из двадцати частей трахму — подвиг не из легких :)
avatar
В телефоне нажал твоему посту минус)) Промахнулся)) Ваще спасибо! Трудно было начинать, на 7 части дизелек раскочигарил и последние 10 сделал за два дня. Самое трудное рука немеет от обработки спрайтов и жена не кормит из за того что я а постель не прихожу ночью))
avatar
Спешу обрадовать поклонников жанра. Уже сделано 80% работы по запиливанию пиксель демо в пентагон! Демо будет идти на всех машинах. Это будет 20 частей мегадемо, полностью перепиленных заново. Все что можно было добавить добавил, все что можно было оптимизировать сделано. Будет то же самое, но вместе с тем совсем другой продукт. Фениксы, пентагоны, скорпионы, ОНО будет везде работать.
  • AAA
  • +1
avatar
Лёш, поздравляю, но.
это будет уже совсем другая дема)

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

Им пользуются в Европе))) А мы то тут при чем? Наш формат трд. Мы придумали тр дос. Мы придумали стандарт Пентагон. У нас свой инт. Зачем нам тап, если он не наш в любом раскладе.
avatar
Все очень просто. Делаешь буржуям игры в тап. Делаешь страничку с кнопкой donate. Буржуи донатят тебе на новый джипарь. В результате все довольны: буржуи имеют игры, а ты 1% денег на джип.
avatar
Проще получить инфу кто баллов на хату из банка берет. Проследить тачку, зажать её и выхватил сумку. Потом сбежать с баблом и купить диско4. Так сто пудов проще. И все в трд режиме.
avatar
Ходят слухи о выпуске Pixel megademo, расширенного и укрученного, под 128к!
Врут? ;)
  • VBI
  • 0
avatar
Смотрел сегодня Интерстеллар. Бред конечно, но был там забавный робот с чувством юмора. Вот он шутил примерно так же как VBI))

Конечно же фирма АААБант постоянно работает над производством демонстраций. Это и перевод не спековские дем на спектрум, Этим занимается самый сильный кодер России — Тибох. И производство демо под тс коконфу, этим занимается человек года — VBI.

AAA трудится над новым коротеньким трахмо, рабочее название Trahing Introspect. А настоящее время написано 4 эффекта. В качестве картинок будут браться работы исключительно тех художников, что не разрешали брать свою графику. Санд и тому подобное, а итак же графика из новых игр. Музыка, возможно тс спринтера.
avatar
Картинку заставку я сделал из этой невзрачной работы с Амтсрада


И вот как здорово сделал ААА:
  • AAA
  • +1
avatar
Извини, но оригинал был лучше :)
avatar
Главное сделал. Счас я украл более 500 картинок знаменитиших 8 битных художников из японии. Буду потихоньку их переводить на спектрум. Хаватит уже твой архив иметь ))

avatar


Сегодня с тибохом добрались до диска 2 нашего мегадемо. Перепелил +2 части заново. Добавил смелости ))

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

Comming Soon, как говорится, скорее всего на этой недели!

Исправлено 20 частей. Полностью переделано 5.
  • AAA
  • +1
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.