Важная информация
  • Последние записи дневников

    Shiny

    Железок немношк

    описание автора:
    Собрана панель из 8 32х8 матриц, на панель при помощи ESP32 и WLED прошивки и e1.131 через вайфай выводится набор эффектов с Jinx + захват экрана.
    Основные вехи построения и...

    Shiny 26.04.2024 14:30
    Shiny

    Spigot

    Многим известен этот термин, да и вопрос обсуждения знаков числа пи поднимался на форуме. В свободное время я нашел программу вычисления на Z80, заодно и листинг на Бейсике. Адаптировать на Спектрум...

    Shiny 23.04.2024 16:35
    Shiny

    Cubulus - старая головоломка по новому

    Переписал код игры, выпущенной в 1991 году, подробно описано в readme.txt
    Скачать

    Shiny 17.04.2024 18:52
  • Последние комментарии статей

    zebest

    Вышла очередная версия ZXTune

    Да, этот момент я видел.
    проверил еще на одном компьютере с Win7 - ровно то же самое, 5040 -... К последнему сообщению

    zebest 25.04.2024 17:15
    Vitamin

    Вышла очередная версия ZXTune

    Между этими двумя версиями произошел переход на новый компилятор. Он вроде как должен поддерживать... К последнему сообщению

    Vitamin 25.04.2024 15:37
    zebest

    Вышла очередная версия ZXTune

    ну если ненормально , тогда получается следующий фокус:
    Если запускаю 5040 - нормально окно... К последнему сообщению

    zebest 25.04.2024 14:52
    Vitamin

    Вышла очередная версия ZXTune

    Похожи, но это какая-то модификация. У оригинала сигнатура занимает 20 байт, а тут 18 и 19, в... К последнему сообщению

    Vitamin 25.04.2024 12:20
    Shiny

    Вышла очередная версия ZXTune

    Кстати, а для Sam Coupe риппер нормально работает? Вот эти бинари, расположенные по адресу $8000 не... К последнему сообщению

    Shiny 25.04.2024 10:14
  • Последние сообщения

    goodboy

    BinaryBattle

    "Проснувшись вы обнаружили что ваш диск полон вирусов ! К сожалению там единственный

    goodboy 26.04.2024, 23:47 К последнему сообщению
    Titus

    Dizzy-4 48,128K - Classic edition+ 2024

    Эта музыка (заставочная) не интересная. Если она будет играть во время игры, она достанет)

    Titus 26.04.2024, 23:43 К последнему сообщению
    bychkov

    Планирую сделать FDD эмулятор на Atmega8

    Поддержка 8Мгц была убрана? Будет ли это работать если использовать MINICORE Internal 8Mhz?

    bychkov 26.04.2024, 23:08 К последнему сообщению
    Hammer

    Пишем игры под РК подобные

    Сквош для журнального РК, для РК SRAM версии Киселёва, для Апогея и Пальмиры.

    Hammer 26.04.2024, 23:05 К последнему сообщению
    ^m00h^

    Dizzy-4 48,128K - Classic edition+ 2024

    Можно сконвертировать музыку с с64: https://www.youtube.com/watch?v=Mc4knpoQhu0 - Tiboh в этом может помочь.

    ^m00h^ 26.04.2024, 22:52 К последнему сообщению
  • Статья на HYPE: Vortex Tracker. Моды и форки.

    Источник: HYPE
    Автор: mr287cc

    Уже не раз мы обсуждали на канальчике телеграмчика Vortex Tracker. Все pro и contra. Впрочем, каким бы не был VT неудобным, у него есть неоспоримое достоинство — это единственный трекер для AY/YM на PC. Поэтому выбирать не приходится.
    Однако, сколько бы я не предпринимал попыток освоить AYшные чиптюны, все эти попытки разбивались об очень убогое юзабилити вортекс трекера. Я понимаю, что грех на это жаловаться, Сергей Бульба даже при таком подходе проделал большую работу, но тем не менее VT ещё слишком сырой, чтобы считаться качественным, удобным продуктом, на уровне, например, Famitracker'а.
    Итак, ниже я перечислю некоторые недостатки трекера, которые подбешивают больше всего, и расскажу как их исправить и заточить под себя, ведь у нас есть исходные коды.

    1. Неудобные горячие клавиши навигации. Нельзя, я считаю, проигрывание биндить на F5-F8 а остановку проигрывания на Escape. Зачем разбивать play song from current row и play pattern from current row на две отдельные клавиши — я не понимаю, достаточно оставить первое, второе не нужно.
    Самой удобным я считаю реализацию в Impulse tracker. F5 — играть модуль. F6 — играть текущий паттерн. F7 — играть модуль с текущей позиции. F8 — стоп. Всё гениальное просто, под пятернёй вся навигация, и не нужно оголтело размахивать руками или раскорячивать пальцы, прыгая от F8 к Escape.

    2. Неудобная навигация между треками паттерна. Классический подход — TAB и shift-TAB а не ctrl-right и ctrl-left.

    3. В режиме turbo sound оба трека проигрываются вместе только в режиме «play song». Отдельно паттерн из двух модулей проиграть не получается — играет только один из них, текущий. Зачем — непонятно. Ведь отключить ненужные каналы можно соответствующими кнопками в окне модуля.

    Вообще реализация режима turbo sound вызывает больше всего досады. Ведь куда удобнее было бы одно окно с шестью треками а не сцеплять джва трёхканальных модуля. Полагаю, это связано с классом TTracks (собственно, три трека для записи нот), который Бульба предпочел унаследовать от TWinControl и реализовать в виде текста (отсюда и требование только моноширинного шрифта в настройках) и сохранение модуля в txt формате. Похоже, что на тот момент автор еще не задумывался о режиме турбосаунда достаточно глубоко, и решил задачу «в лоб». В идеале было бы лучше создать потомка от TGraphicControl, но, понимаю, хотелось прежде всего поддержать множество трехканальных форматов, не хотелось много и нудно кодить, а о турбосаунде думалось в последнюю очередь. Именно поэтому режим TS и был реализован костылём, в виде «сцепки» двух обычных модулей.

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



    Прежде всего, нам понадобится компилятор. На офсайте заявлено, что последняя версия трекера была подготовлена в Лазарусе, но я решил попробовать скомпилить тем, что было уже у меня установлено — Embarcadero Delphi XE5. Из-за несовместимости некоторых строковых типов переменных ничего хорошего после компиляции не вышло. Неверно сохранялись настройки в реестре, «плыл» нотный стан. В ход пошел другой инструмент — древний Borland Delphi 7. В нем всё скомпилилось и заработало с полтычка.

    Скачаем архив с исходниками и откроем его (VT.dpr) в Borland Delphi 7.

    1. Для начала разберемся с клавишами навигации.



    Все они лежат в компоненте Actionlist1, я отмечу его на скриншоте цифрой 1. Кликнем на нём дважды, открыв окно редактирования (отметка 2). В левой колонке этого окна выберем категорию Play (отметка 3), и в правой колонке увидим все экшены, связанные с проигрыванием трека и паттерна. Кликнем на первом (Play1), в окне Object inspector найдем свойство ShortCut (отметка 4). Поменяем F6 на F5. В экшене PlayFromPos1 заменим F5 на F7. Stop1 забиндим на F8 вместо Esc. PlayPat выставим F6. И у нас остается PlayPatFromLine, совершенно, как по мне, бесполезная клавиша, я её выставлю на Ctrl+F6.

    2. Теперь сделаем Tab и shift-Tab для переключения между колонками нот на треках.



    В Delphi на уровне формы клавиша Tab обрабатывается операционной системой. Поэтому нам нужно переопределить процедуру CMDialogKey у формы с модулем. Для этого нам нужно открыть её исходник: View -> Project Manager или комбинацией клавиш Ctrl+Alt+F11 и в окне Project manager (отметка 1) дважды кликнем на модуле Childwin. После чего откроется его форма (отметка 2) и его код (отметка 3). Нам нужен код. Ищем в нем строку «TMDIChild = class(TForm)» и листаем ниже до директивы private, после которой допишем ещё пару строк:

    procedure CMDialogKey(var msg:TCMDialogKey);
    message CM_DIALOGKEY
    ;

    Теперь где-нибудь после ключевого слова implementation разместим код процедуры:

    procedure TMDIChild.CMDialogKey(var msg:TCMDialogKey);
    begin
    if msg.Charcode<> VK_TAB then
    inherited
    ;
    end;

    Вот что вышло:




    Теперь найдем идущие друг за другом строки «VK_RIGHT:» и «DoCursorRight;» и допишем после них:

    VK_TAB:
    DoTabKey;

    А где-нибудь после процедуры DoRemoveLine вкопипастим нашу процедуру:

    procedure DoTabKey;
    begin
    RemSel;
    Tracks.ShowSelection(0);
    if ssShift inShiftthen
    begin
    ifTracks.CursorXin[22..34]thenTracks.CursorX:=8;
    ifTracks.CursorXin[36..48]thenTracks.CursorX:=22;
    end

    else
    begin
    ifTracks.CursorXin[22..34]thenTracks.CursorX:=36;
    ifTracks.CursorXin[8..22]thenTracks.CursorX:=22;
    ifTracks.CursorXin[0..7]thenTracks.CursorX:=8;
    end;

    Tracks.RecreateCaret;
    SetCaretPos(Tracks.CelW*(3+Tracks.CursorX),
    Tracks.CelH*Tracks.CursorY);
    Tracks.RemoveSelection(0,True)
    end;





    Всё, теперь мы можем переключаться между тремя «нотными» колонками каналов клавишами Tab и shift-Tab. Замечу, что ctrl+Вправо/Влево по-прежнему работают, перемещая курсор на следующую/предыдущую колонку треков.

    3. Осталось поправить ситуацию с проигрыванием текущего паттерна в режиме Turbo Sound.
    Для этого откроем код главного модуля (двойной щелчок в Project manager'e по модулю Main).

    Найдем такой код:

    procedure TMainForm.PlayPatExecute(Sender:TObject);
    begin
    ifMDIChildCount=0thenexit;
    ifIsPlayingthen
    begin
    StopPlaying;
    RestoreControls
    end;
    PlayMode:=PMPlayPattern;
    DisableControls;
    PlayingWindow[1].ValidatePattern2(PlayingWindow[1].PatNum);
    PlayingWindow[1].Tracks.RemoveSelection(0,False);
    Module_SetPointer(PlayingWindow[1].VTMP,1);
    Module_SetDelay(PlayingWindow[1].VTMP.Initial_Delay);
    PlVars[1].CurrentPosition:=65535;
    Module_SetCurrentPattern(PlayingWindow[1].PatNum);
    InitForAllTypes(False);
    StartWOThread
    end;

    И полностью заменим его на этот:

    procedure TMainForm.PlayPatExecute(Sender:TObject);
    var
    i
    : integer;
    begin
    ifMDIChildCount=0thenexit;
    ifIsPlayingthen
    begin
    StopPlaying;
    RestoreControls
    end;
    PlayMode:=PMPlayPattern;
    DisableControls;
    CheckSecondWindow;
    PlayingWindow[1].ValidatePattern2(PlayingWindow[1].PatNum);
    PlayingWindow[1].Tracks.RemoveSelection(0,False);
    for i :=1 to NumberOfSoundChipsdo
    begin
    Module_SetPointer(PlayingWindow[i].VTMP,i);
    Module_SetDelay(PlayingWindow[i].VTMP.Initial_Delay);
    PlVars[i].CurrentPosition:=65535;
    Module_SetCurrentPattern(PlayingWindow[i].PatNum);
    end;
    InitForAllTypes(False);
    StartWOThread
    end;

    Ну вот, мы и приблизили Vortex tracker ближе к трекеру своей мечты. Теперь жмём F9, проект скомпилируется и запустится. Исполняемый файл будет помещен в папку с исходниками.

    Скомпилированный вариант с указанными доработками можно скачать здесь: www.dropbox.com/s/1buz1ygl5piyc7n/VT.zip?dl=0

    UPD. Пересобрал на основе форка от oisee
    Добавил альтернативный Stop на клавишу Esc. Хуже не будет.
    Скачать: www.dropbox.com/s/ucb9zdo8soxcrxr/vti-init.rar?dl=0

    Если не будет сильно лень, запилю на досуге настраиваемые горячие клавиши проигрывания модуля/паттерна. Чтобы больше не спорить что удобнее — Esc, F8 или вообще F1.
    В идеале хочется выкинуть оттуда текстовую реализацию треков и запилить нормальный шестиканальный турбосаунд вместо двух трехканальных окошек, но сделать это [быстро] обещать не стану, поскольку довольно геморно.

  • Yandex.Direct

  • ZX Banner Ring

  • ВКонтакте