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

    asve79

    Чекпоинт. Планы-планы.

    Всем привет!

    Давно не появлялся в блоге с весомыми новостями, и, к сожалению рассказать о чем-то готовом пока нечего.
    По моим оценкам работы с зифи модулем нужно примерно недели три в режиме "час...

    asve79 17.06.2019 09:00
    SKcorp.

    Я и моя ДВК-3М в сюжете о Тетрисе.

    Я и моя ДВК-3М в сюжете о Тетрисе.

    Там только из-за "магии монтажа" получилось как будто длинная палка и есть Тетрис.
    И ведущий почему-то сказал это, а не про то, как из Пентамино получилось...

    SKcorp. 15.06.2019 22:00
    pinny

    IRC клиент для ZX-Uno

    Ну в рамках моего забега по написанию сетевого софта под ZX-Uno у нас появился IRC-клиент.

    В принципе, его легко портировать под TSConf, другой клон спека или фирменный спек с WiFi модемом, да...

    pinny 13.06.2019 00:20
    pinny

    Полноценный platoTerm под ZXUno

    Вайфаефикация спектрумов идет полным ходом и было бы просто дичайшим упущением не сделать доступ к plato-серверам ZX-Uno.

    Это что то похожее на графические BBS-ки и это дело очень любят...

    pinny 09.06.2019 15:31
    pinny

    Немного интернетов для ZX-Uno

    Есть такой прекрасный испанский FPGA клон спектрума, как ZX-Uno(еще есть ZX-Uno XL и ZX-GO+ под корпуса фирменных машин).

    К ним есть донгл с ESP8266 и корка с UART.

    Уже до меня был FTP-клиент,...

    pinny 08.06.2019 16:23
  • Последние комментарии статей

    NEO SPECTRUMAN

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

    :v2_dizzy_facepalm:

    ...я за новостями щас не слежу К последнему сообщению

    NEO SPECTRUMAN 17.06.2019 17:02
    Vitamin

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

    Свято место пусто не бывает. Вон хуавей ход конем сделал и свой форк выкатил. К последнему сообщению

    Vitamin 17.06.2019 16:52
    NEO SPECTRUMAN

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

    просто вангую чего они таки хотят

    потом ВНЕЗАПНО пропадет "разрешить установку из левых... К последнему сообщению

    NEO SPECTRUMAN 17.06.2019 16:04
    Vitamin

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

    Это ты каким образом эту глубокую мысль из моих слов вынул? К последнему сообщению

    Vitamin 17.06.2019 15:43
    NEO SPECTRUMAN

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

    другими словами
    если у устройства закончилось время поддержки
    все пакеты для него автоматически... К последнему сообщению

    NEO SPECTRUMAN 17.06.2019 15:33
  • Последние сообщения

    xolod

    ATM-turbo 2+ v7.10 - Ремонт.

    Нет, я же тоже написал, что была битая D41(ИР23). С ОЗУ все хорошо, все тесты проходит.

    xolod 17.06.2019, 19:02 К последнему сообщению
    Максагор

    ATM-turbo 2+ v7.10 - Ремонт.

    Все ясно. Микросхемы адресации ОЗУ вылетели. У меня такое же было.
    Более того, я

    Максагор 17.06.2019, 18:58 К последнему сообщению
    Lethargeek

    BattleCity демо-недоделка

    просто твой пример уже мало отличаться будет по сложности от универсального блиттера

    Lethargeek 17.06.2019, 18:48 К последнему сообщению
    Lapu-Leen

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

    Пока нет возможности проверить контроллер дисковода, пробовал менял КР1818ВГ93- не помогло.

    Lapu-Leen 17.06.2019, 18:29 К последнему сообщению
    xolod

    ATM-turbo 2+ v7.10 - Ремонт.

    Отлично! еще одна битая МС D96(КП13) и палитра нормализовались!

    - - - Добавлено - - -

    Но и это еще не все. Теперь

    xolod 17.06.2019, 18:23 К последнему сообщению
  • Статья на 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.
    В идеале хочется выкинуть оттуда текстовую реализацию треков и запилить нормальный шестиканальный турбосаунд вместо двух трехканальных окошек, но сделать это [быстро] обещать не стану, поскольку довольно геморно.