User Tag List

Показано с 1 по 10 из 54

Тема: Работа с трекерными модулями на ZX

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #13

    Регистрация
    26.01.2005
    Адрес
    Минск
    Сообщений
    294
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В поддержку нового проекта от Sergey Bulba (автора AY Emul) универсального плэйера PT2+PT3 мелодий, я написал универсальный детектор, который ищет по сигнатуре мелодии обоих версий протракеров. Поиск осуществляется по общим для двух форматов критериям:

    1) Temp=1..#3f
    2) Длина в позициях != 0
    3) Длина в позициях > номер позиции для зацикливания
    4) (Список патернов)-1 = #FF (то есть конец таблицы позиций)
    5) (Таблица позиций)+(длина в позициях) = (список патернов)
    6) Описатели сэмплов (#40 байт) и описатели орнаментов (#20 байт)
    должны "нарастать" или быть равны нулю.

    При удовлетворении найденного модуля всем этим критериям определяем к какой версии PT нужно отнести модуль.

    Получилась достаточно короткая процедура - 119 байт и достаточно быстрая. На выходе выдает адрес начала мелодии, длину в позициях, тип мелодии (PT2, PT3). Предлагаю всем заинтересованным в ее дальнейшем использовании предложить пути ускорения/оптимизации/улучшения процедуры. Исходный текст:

    Код:
     
    ----------------------------------------------------------------
    ;PT2 and PT3 universal searcher by Spectre
    ;IN: HL-Start address, BC-Length.
    ;OUT: HL-Song start address, BC-Length (positions), A: 0-PT2, 1-PT3.
    		LD HL,#6000
    		LD BC,#A000
    FINDPT		LD A,B
    		OR C
    		RET Z; Not found
    		LD A,(HL) ;Temp
    		OR A
    		JR Z,FPTEND3
    		CP #40
    		JR NC,FPTEND3
    		PUSH HL
    		INC HL
    		LD A,(HL) ;Len
    		OR A
    		JR Z,FPTEND2
    		INC HL
    		CP (HL) ;Loop
    		JR C,FPTEND2
    		PUSH BC
    		INC HL
    		LD E,(HL)
    		INC HL
    		LD D,(HL)
    		INC HL
    		LD (FPT3+1),DE ;Patterns PT3 or first sample PT2
    		LD C,A
    		LD B,#30-1
    FPT2		PUSH DE
    		LD E,(HL) ;Samples
    		INC HL
    		LD D,(HL)
    		INC HL
    		EX (SP),HL
    		LD A,D
    		OR E
    		JR Z,$+5
    		SBC HL,DE
    		CCF 
    		POP HL
    		JR C,FPTEND
    		DJNZ FPT2
    		LD E,(HL) ;#63 ;Patterns PT2 or positions PT3
    		INC HL
    		LD D,(HL) ;#64
    		INC HL
    		PUSH HL
    		LD HL,-#83
    		ADD HL,DE
    		SBC HL,BC
    		POP HL ; #65
    		JR NZ,FPT3
    		PUSH HL
    		ADD HL,DE
    		LD DE,-#65-1
    		ADD HL,DE
    		LD A,(HL)
    		POP HL
    		INC A
    		JR Z,FPT5 ;It PT2
    FPT3		LD DE,0
    		PUSH HL
    		LD HL,-#C9
    		ADD HL,DE
    		SBC HL,BC
    		POP HL
    		JR NZ,FPTEND
    		PUSH HL
    		ADD HL,DE
    		LD DE,-#C9-1
    		ADD HL,DE
    		LD A,(HL)
    		POP HL
    		INC A
    		JR Z,FPT4 ;It PT3
    FPTEND		POP BC
    FPTEND2		POP HL
    FPTEND3		INC HL
    		DEC BC
    		JR FINDPT
    FPT4		LD DE,#65-#C9 ;found PT3
    		ADD HL,DE
    		INC A
    FPT5		POP DE,DE
    		LD DE,-#65 ;found PT2
    		ADD HL,DE
    		RET
    Последний раз редактировалось Spectre; 27.02.2005 в 20:47.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Работа с STS5.7
    от DemiChron в разделе Программирование
    Ответов: 3
    Последнее: 24.07.2005, 21:14

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •