AYX-32 - звуковая карта в слоте АУ

Железо для спектрум-совместимых машин

Postby TS-Labs » Sat, 27.08.2016 00:44:23

Который год мы рубим лес...

Внешний вид прототипа:
overall view.jpg


Външните препратки:
- сорцы проекта,
- версия на 28 ног (совместима с AY-3-8912) от Kowalski
- справочные таблицы с кратким описанием,
- схемы/платы,
- флешер и конфигуратор со спека,
- тулза для сборки файла обновления,
- тулза для флешевания через компорт с РС,
- тестовые оцифровки (папка "ayx-32").

Характеристики (в программе-максимум):
- стоимость $15.
- 928кБ для загрузки модулей и сэмплов,
- работа как от внешнего клока платы, так и от внутренней PLL с произвольным выбором частоты (1.75, 1.775, 2.0, 1.0 и т.д. МГц),
- полная эмуляция PSG (AY-3-8910 и YM-2149F) с учетом особенностей каждого чипа,
- форм-фактор настоящих чипов (DIP-28, DIP-40) - можно вставлять в оригинальный 128к,
- одновременная эмуляция до 4 чипов, включая схему TurboSound (2xYM),
- эмуляция PSG на реальной разрешающей способности без интерполяции (записать 1 в рег частоты и осциллографом и увидишь меандр 109.375кГц),
- поддержка "диги" через ЦАПы PSG,
- консоль RS-232 с кучей менюшек и небесной красоты текстовым гуем,
- обновление прошивки 1) со спека (не вытаскивая из панельки), 2) при помощи UART, 3) через ST-Link2,
<мы находимся здесь>
- изменяемая скважность меандра тоногенераторов,
- загружаемые вейв-формы для тоновых генераторов,
- настраиваемые фильтры ВЧ, НЧ,
- 32 канала вейв-синтеза с выходом стерео, 12бит, 44кГц,
- встроенный плеер модулей XM (возможно, MOD),
- одновременная работа PSG и вейв-синтеза (что позволяет разбавлять музыку для AY цифровыми инструментами),
- генерация данных для отображения индикаторов, спектроанализаторов,
- возможно, какие-нибудь функции мат-сопроцессора,

Чего не планируется делать:
- поддержка FM-части от TSFM,
- эмуляция SID (и не просите).

-------------------------------------------------------------------------------------

FAQ
Прошивка.
Запустить утилиту, нажать "В", закоротить перемычку. Девайс зайдет в бутмоде.
Image
После прошивки нажать "R" для перезапуска в воркмоде.
User avatar
TS-Labs
 
Posts: 5222
Joined: Thu, 26.07.2012 01:29:56

Postby TS-Labs » Sat, 27.08.2016 01:17:58

Второе псто: про матан и как оно устроено.

1. Микроконтроллер.
Оборудован следующими штуками:
- ядро 168МГц, cortex-m4, DSP,
- 192кБ ОЗУ, 1МБ флэша, 1кБ кэша,
- стерео ЦАП 12 бит,
- DMA, PLL, таймеры.

2. Работа с шиной Z80.
Дабы избавиться от внешней обвязки, все обслуживание шины AY происходит "на лету".
Сигналы BC1, BDIR заведены на лапы внешних прерываний (EXTI). При срабатывании любого из них (переход из 0 в 1) вызывается процедура обработки.
Длина сигналов на частоте 7МГц (худший случай) длится 428нс, что соответствует 72 тактам ядра. Вылет на обработку ISR занимает 12 тактов, jitter срабатывания - еще 12 тактов, таким образом, мы имеем 48 гарантированных тактов, в течение которых можно успеть что-то сделать. Учитывая, что большинство инструкций ядра 1-тактовые, это немало. ISR шинных прерываний написаны на асме с целью оптимизации.

Нужно обработать 3 ситуации:
а) Запись номера регистра.
- снимаем с шины байт,
- записываем его в переменную номера регистра,
- вызываем процедуру "чтения" соответствующего регистра,
- записываем в регистр вывода IO (сам IO находится в состоянии входа, т.е. Z).
б) Запись регистра.
- снимаем с шины байт,
- записываем его в FIFO событий в формате: адрес рега, значение, отметка времени события - текущее значение 16-битного таймера, работающего на частоте аудиобуфера (218кГц).
ц) Чтение регистра.
- записываем в регистр режима IO состояние "вывод" (там уже лежит предварительно записанное значение),
- ждем, пока с шины не уберутся сигналы доступа к AY,
- переводим IO в Z.

Еще одна любопытная особенность: поскольку вывод звука и запись в регистры чипа происходят асинхронно, для корректного ридбэка записанных значений создается массив-копия регистров (с соответствующими масками), которые служат только для обманывания программы. Реальные же состояния генераторов хранятся в совсем другом месте и в другом формате.

Время срабатывания прерываний разное в зависимости от того, в какой памяти расположены таблица векторов и код прерываний.
Замеры на девайсе показали, следующее максимальное время реакции на сигналы управления:
Flash - 36 такта, 214нс
SRAM - 33 такта, 196нс
Кроме того, процесс записи флэша вызывает зависание ядра при выполнении кода из флэша. Это значит, что при выполнении любых операций, требующих записи во флэш, код шинных прерываний должен выполняться из SRAM.
Посему, код прерываний и таблица будут жить в SRAM.

3. Звуковой буфер.
STM32 оборудован многочисленными DMA, поэтому вывод в ЦАПы происходит аппаратно из 2-х буферов длиной по 500 сэмплов (2*2000 байт).
DMA настроена на кольцевое чтение из буферов. По достижении конца любого из них генерируется прерывание о том, что пора нарезать следующий кусок звука. Пока играет один буфер, рендерится другой.
Длина буфера выбрана не случайно: частота дискретизации для PSG должна быть 1750 / 8 = 218.75кГц, а вейвсинтез использует 1/5 этой частоты, т.е. 43.75кГц. Таким образом, в буфер помещается 100 сэмплов вейвсинтеза. Вторая причина: буфер должен быть небольшим, чтобы обеспечить минимальную задержку между записью в регистры чипа и откликом в динамиках. Длина в 500 выборок дает приемлимое время 2.285мс. Также, буфер достаточно велик для того, чтобы обеспечить баланс по производительности.

4. Рендеринг звука.
Как описано выше, звук нарезается асинхронно с его выводом в ЦАПы, что дает возможность балансировать нагрузку на алгоритм рендеринга.
Возникает проблема: как синхронизироваться с записью в регистры PSG? Оно как бы и не проблема для обычных 50Гц плееров, но с "дигой" все уплывет далеко и надолго.
Для решения это задачи используется 16-битный таймер, работающий на частоте ЦАПов. Чаще принимать изменение регистров все равно не имеет смысла, ибо вывести на ЦАПы изменение состояния мы не сможем. В реальных AY/YM запись в регистры амплитуд вызывает немедленное изменение напряжения на выходах ЦАПов. Рассчет на то, что качество звука в дигах и так говенное, вывод осуществляется на невысокой частоте. Заметных искажений быть не должно.

Итак, нулим аудиобуфер. Запускаем таймер и аудио ДМА. Пока играет буфер (изначально - тишину), от з80 могут приходить записи регистров, мы их запоминаем. Заканчивается буфер, идем рендерить. Момент запуска таймера соответствует началу буфера, который мы собираемся нарезать. Все записи в реги (события) либо попадают в диапазон 0-499 по таймеру, либо за этот диапазон выходят.
- определяем наличие события,
- проверяем, попадает ли оно в диапазон нашего буфера,
- рендерим все наши генераторы ДО этого события,
- вызываем обработку события, а именно модификацию состояния и параметров генераторов,
- повторяем рендеринг до конца буфера.

5. Генераторы.
Трех типов:
- тона,
- шума,
- огибающей.

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

Таким образом, последовательность действий следующая:
- генерация шума,
- генерация огибающей,
- генерация тона канала А,
- частотный фильтр канала А,
- микшер канала А,
- генерация тона канала В,
- частотный фильтр канала В,
- микшер канала В,
- генерация тона канала С,
- частотный фильтр канала С,
- микшер канала С.

Модуляция канала генераторами тона, шума и огибающей задается управляющими регистрами PSG.
Всего возможно 8 комбинаций:
- выключены все модуляции, на выходе канала постоянное напряжение, заданное в регистре амплитуды (режим "ЦАПа", используемый в дигах),
- включен тон - меандр с фиксированной амплитудой,
- включен шум с фиксированной амплитудой,
- включены тон и шум с фиксированной амплитудой (шум модулирует тон по логической функции "and" - напряжение на выходе будет только тогда, когда и в шуме, и в тоне единица),
- включена модуляция напряжения генератором огибающей,
- включена модуляция тона генератором огибающей - амплитуда меандра задается амплитудой огибающей,
- включена модуляция шума генератором огибающей,
- включена модуляция тона и шума генератором огибающей.

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

6. ЦАП через ФИФО.
Предусмотрена фича потокового проигрывания цифровых сэмплов через буфер.
Z80 может прочитать регистры свободного места в ФИФО ЦАП-а и заполненности. Он загружает в ФИФО звуковые данные с максимальной скоростью, а чип проигрывает их на нужном сэмплрейте. По мере проигрывания Z80 подгружает новые данные.
Отдельно задается формат сэмплов: моно/стерео, 8/16 бит, знаковость, сэмплрейт.

7. Регистр аптайма.
На чтение доступен 32-битный счетчик с временным разрешением 1 миллисекунда.
Из регистра можно читать то количество байт, которое необходимо. Например, если нужен 16-битный счетчик, достаточно прочитать 2 байта.

8. Консоль через COM-порт.
С девайсом можно общаться в интерактивном режиме при помощи ANSI-терминала (Putty, Hyper Terminal) через любой TTL RS-232 адаптер на скорости 115200 бит.
В терминале есть текстовый UI, из которого можно смотреть информацию о работе девайса и конфигурировать его.
МК принимает байты с UART-а, как ввод с клавиатуры и выдает на UART текст в формате ANSI, что позволяет его раскрашивать и управлять курсором.
Скорость "обновления экрана" ограничивается в основном скоростью последовательного порта (около 10кБ/с), но этого вполне достаточно, чтоб например в реальном времени наблюдать состояние внутренних регистров звукового процессора.

Программно консоль устроена в виде отдельного псевдо-треда, работающего с минимальным приоритетом.
Ресурсов процессора он потребляет очень мало.

9. Регистры процессора.
Карта регистров процессора выглядит следующим образом:
0x00..0x0F - регистры AY,
0x10..0xEF - регистры AYX-32,
0xF0..0xFF - регистры для переключения чипов по схеме Turbo-AY.

Регистры AY - штатные регистры AY. Записанные значения можно читать, как в обычном AY/YM.

Схема Turbo-AY предусматривает переключение на чип 0 при записи во все нечетные регистры (0xF1, 0xF3, ... 0xFF), и на чип 1 при записи в четные того же диапазона.
Если в настройках AYX-32 данный режим дешифрации отключен, запись в эти регистры игнорируется.

Регистры AYX-32 - это расширение функционала звукового процессора.
Подробнее о них - в описании программной архитектуры.
Регистры делятся на 2 вида: обычные и регистры данных.
Обычные работают примерно, как и в AY - записал/прочитал. При повторном чтении читается либо то же значение, либо изменяющийся статус. Суть: один регистр всегда указывает одну и ту же на 8-битную переменную.
Регистры данных служат для обмена массивами. Для начала приема/передачи необходимо записать номер регистра (OUT 0xFFFD). Весь массив данных принимается/передается через порт данных (OUT 0xBFFF / IN 0xFFFD). Длина данных либо известна заранее, либо задается явно, либо задана условием (в случае текстовых строк 0 - признак конца массива). После чтения всего массива будут читаться байты 0xFF, а записываемые байты игнорируются. Можно принимать не весь массив, если это не нужно. Например, регистр UPTIME имеет длину 4 байта, но если нужны только 16 бит из него, можно прочитать только первые 2. Суть: один регистр позволяет передать или принять большой массив.

10. Измерение загрузки процессора.
С целью диагностики полезно знать сколько %% ядро тратит на всякие полезные вещи, а сколько висит в холостом режиме.
Все полезные действия происходят либо в главном цикле main(), либо на ISR. Любые события в main() так или иначе связаны с прерываниями и выполняются после них. Поэтому, в main() можно повесить инструкцию WFI (Wait For Interrupt), которая выключает клок ядра до прихода прерывания. Используется один из таймеров, работающий на частоте, достаточной для обеспечения разрешающей способности измерителя. Значение таймера читается до и после WFI, а разница берется в качестве абстрактных единиц быстродействия, в течение которых ядро висело в бездействии. Данное значение прибавляется к счетчику. Раз в секунду значение счетчика читается, счетчик обнуляется, значение делится на число отсчетов таймера за секунду и множится на 100%. Таким образом, получаются %% всего рантайма, пока ядро бездействовало. Отнимаем полученное значение от 100 и получаем CPU load.

0. Прошивка.
Предусматривается 4 варианта прошивки девайса.

1. Полная прошивка флэша, для случаев нового МК либо раскирпичивания ушатанного.

1a. Через программатор ST-Link2.
Подключается через программаторный разъем к РС.
Сырой файл прошивки шьется утилитой ST-Link2.

1b. Через UART.
Подключается через последовательный порт к РС.
Закоротить перемычку BOOT0, включить девайс.
Сырой файл прошивки шьется утилитой при помощи фабричного бута в STM32.

2. Прошивка обновления с использованием бута.

2a. С ZX.
Закоротить перемычку PROG, включить ZX с девайсом.
Файл обновления шьется утилитой из TR-DOS.

2b. Через UART.
Подключается через последовательный порт к РС.
Закоротить перемычку PROG, включить девайс.
Файл обновления шьется утилитой из командлайна.
User avatar
TS-Labs
 
Posts: 5222
Joined: Thu, 26.07.2012 01:29:56

Postby Sergey78 » Sat, 27.08.2016 01:38:46

TS-Labs wrote:эмуляция SID (и не просите).

А нес apu?
Sergey78
 
Posts: 420
Joined: Wed, 05.09.2012 20:04:40

Postby TS-Labs » Sat, 27.08.2016 01:53:45

АВПС?
User avatar
TS-Labs
 
Posts: 5222
Joined: Thu, 26.07.2012 01:29:56

Postby solegstar » Sat, 27.08.2016 06:56:44

TS-Labs wrote:Внешний вид прототипа:

AYX-32 продолжение разработки wild sound от Robus`a, или полностью новая разработка?
solegstar
 
Posts: 12
Joined: Fri, 07.06.2013 13:49:28

Postby TS-Labs » Sat, 27.08.2016 11:43:28

Полностью новая. Но, вдохновленная ею =)
Разработка начата в 2013. Тогда только появилась серия STM32.
Архитектура сорцов менялась раза 4-5 по мере накопления опыта.
В 2015 я наконец сделал прототип.
User avatar
TS-Labs
 
Posts: 5222
Joined: Thu, 26.07.2012 01:29:56

Postby Eagle » Sat, 27.08.2016 14:02:35

Интересная штуковина, немалые возможности, и главное — размер!
User avatar
Eagle
 
Posts: 31
Joined: Tue, 07.04.2015 00:54:23
Location: Россия, Гусь-Хрустальный

Postby creator » Sat, 27.08.2016 15:26:32

TS-Labs wrote:можно вставлять в оригинальный 128к
Не влезет. Ну там типа 28-ногий "обрубок".
TS-Labs wrote:работа как от внешнего клока платы, так и от внутренней PLL с произвольным выбором частоты
Ходили слухи о каком-то там сбое синхронизации относительно бла-бла, но я на это ложил. А тут выбор. Очень хорошо.
TS-Labs wrote:Чего не будет:
поддержка IO на лапах (реги 14, 15)
Это типа принтер на AY не будет работать? Не особо и надо, но евойный D-SUB наружу я таки вывел. :)
Image

P.S. Но пиздец как круто.
P.P.S. Есть возможность замутить 28-ногую версию?
А, влип, очкарик!
User avatar
creator
 
Posts: 230
Joined: Wed, 11.02.2015 11:22:49
Location: nsk

Postby TS-Labs » Sat, 27.08.2016 15:54:40

creator wrote:Ну там типа 28-ногий "обрубок".

А, там AY-3-8912. Не знал. Ну, я разведу версию и под такую панельку.
creator wrote:Ходили слухи о каком-то там сбое синхронизации относительно бла-бла

А точнее?
creator wrote:Это типа принтер на AY не будет работать?

Дело в том, что на таком мелком текстолите проблемно развести 16 лап IOА/В. Я без проблем могу вывести сигналы на лапы МК, но развести не осилю.
User avatar
TS-Labs
 
Posts: 5222
Joined: Thu, 26.07.2012 01:29:56

Postby TS-Labs » Sat, 27.08.2016 20:17:50

creator wrote:Это типа принтер на AY не будет работать?

У 8912 разведен порт А? (Лень в даташит лезть.)
User avatar
TS-Labs
 
Posts: 5222
Joined: Thu, 26.07.2012 01:29:56

Postby LessNick » Sat, 27.08.2016 20:54:12

Очишуительно же! Ждём с нетерпением релиза и/или возможности посушать (хотя бы на ютабе)! :vodka: :ura:
(∩。•o•。)っ.゚☆。・ TS-Conf для PentEvo — это классический Pentagon 128k для тех кто хочет больше!
User avatar
LessNick
грей сашу — сашу грей
 
Posts: 936
Joined: Thu, 26.07.2012 15:00:53

Postby djspawn » Sat, 27.08.2016 23:13:59

Хочу-хочу-хочу!), Как-то можно приобрести сие чудо?)
ZX-Evolution rev.C+NeoGS+HDD+2xFDD3.5+FDD5.25
Pentagon 128K mod.2014 + RGB-VGA + FDD3.5
Байт128К+TR-DOS+YM+TURBO+FDD5.25
Scorpion ZS-256
AY STM Player https://www.youtube.com/watch?v=bPa2aLGzqPc&t=12s
AY AVR Player
User avatar
djspawn
 
Posts: 26
Joined: Tue, 08.03.2016 23:46:22

Postby TS-Labs » Sun, 28.08.2016 00:15:59

djspawn wrote:Как-то можно приобрести сие чудо?)

Чудо будет можно приобрести, когда будет реализована программа-минимум, а это 2 функционала:
- полная эмуляция чипов AY,
- поддержка обновления софта без внешних программаторов.
Таким образом, приобретшие девайс смогут беспроблемно обновлять прошивку по мере выхода новых версий.
Риалистик эстимейт - до полугода, оптимистик - 2 месяца.
Кроме того, я буду заказывать новые текстолиты, а значит надо переразвести прототип.
Надо изменить:
- стаб питания, а также добавить второй - для аналогового питания,
- возможно, развести порт А для принтера,
- развести версию для 28 ног (надеюсь, будет продаваться буржуям).

Кроме того, ожидается тулза для РС - редактор с использованием цифровых сэмплов, который сможет генерить выхлоп в виде дампа регистров. Это уже хоть что-то, для начала.
Имеется proof of concept в виде отрендеренной mp3. Его выложу попозже, для подогреву аппетитов =)
User avatar
TS-Labs
 
Posts: 5222
Joined: Thu, 26.07.2012 01:29:56

Postby creator » Sun, 28.08.2016 05:43:03

TS-Labs wrote:А точнее?

Да в ревюшке было нечто:
В ZX-FORUM на стр. 146 А. Герасимов пишет: "... и звук хороший...". Выходит, бывает и плохой? Действительно, бывает. И ещё какой плохой! Дело в том, что AY-3-8910(12) сбивается, если во время обращения к нему компьютера приходят тактовые импульсы. Поэтому тактовая частота должна быть либо синхронизированна с обращениями компьютера, либо запрещена во время них. Последнее и реализовано на рис. 4.

Image
А, влип, очкарик!
User avatar
creator
 
Posts: 230
Joined: Wed, 11.02.2015 11:22:49
Location: nsk

Postby TS-Labs » Sun, 28.08.2016 12:50:11

Ничосе, метастабы в железе. Ну прикольно, если это правда. В любом случае, в сабже это не проблема.
User avatar
TS-Labs
 
Posts: 5222
Joined: Thu, 26.07.2012 01:29:56

Postby evovxn » Sun, 28.08.2016 15:05:52

Офигенский девайс! TS-Labs, моё почтение, вот это мастерство - вложить в миниатюрный размер и копеечную стоимость огромадный потенциал!

Сразу прошу прощения за невежество, но хотел бы задать пару вопросов.
1. Девайс умеет быть AY/YM, TS и играть XM и MOD. Сможет ли он одновременно сосуществовать с ZXM- SoundCard Extreme и NGS? Насколько я понял, GS он косплеить не будет, да и FM и SAA тоже терять бы не хотелось.
2. 640 Kb 1 Mb памяти для модулей хватит всем? Вроде встречал XM-ки за полтора и более мегабайт...

Если чо, вопросы не для стёба, нутром чую - девайс будет бомба! :applause:
User avatar
evovxn
 
Posts: 278
Joined: Thu, 14.11.2013 12:31:23
Location: Kursk

Postby TS-Labs » Sun, 28.08.2016 15:23:03

1. Девайс висит на портах АУ, но использует регистры 16-247 для своих нужд, 248-255 для переключения чипов в турбосаунде. Следовательно, ни с чем не конфликтует.
2. Само собой, есть модули овер 1МБ. Но есть модули на 25кБ:
ARYX_debug.xm
(25.08 KiB) Downloaded 491 times

есть на 100кБ:
another worlds.xm
(97.66 KiB) Downloaded 466 times

Кто скажет, что 100кБ недостаточно для ХМ?
Мне например нравятся такие чиптюны:
universalnetwork2_real.xm
(92.84 KiB) Downloaded 500 times
User avatar
TS-Labs
 
Posts: 5222
Joined: Thu, 26.07.2012 01:29:56

Postby evovxn » Sun, 28.08.2016 15:41:37

Ага, последний модуль ваще отличный! Теперь понятно - девайс для качественного музона в играх/демах, а не просто XM плеер всех модулей. Что, в общем-то, логично - все XM можно на писюке послушать.
А вот по сожительству с экстрим карточкой Мика тогда спрошу проще - чего будет, если я запущу проигрывание AY/TS музончиков при обоих установленных девайсах в Эву? Играть будут оба девайса? Значит надо будет микшер мутить с отключением того, что в данный момент не нужно?
User avatar
evovxn
 
Posts: 278
Joined: Thu, 14.11.2013 12:31:23
Location: Kursk

Postby LessNick » Sun, 28.08.2016 16:01:59

TS-Labs wrote:Но есть модули…


Офигенно жи! Даёшь электрификацию XM-зацию всей страны! :vodka:
(∩。•o•。)っ.゚☆。・ TS-Conf для PentEvo — это классический Pentagon 128k для тех кто хочет больше!
User avatar
LessNick
грей сашу — сашу грей
 
Posts: 936
Joined: Thu, 26.07.2012 15:00:53

Postby TS-Labs » Sun, 28.08.2016 16:59:06

evovxn wrote: чего будет, если я запущу проигрывание AY/TS музончиков при обоих установленных девайсах в Эву?

Будет то же самое, что и с обычным АУ. Я не знаю, что будет в каждом конкретном случае - зависит от того, как на плате замикшен звук.
LessNick wrote: Даёшь электрификацию XM-зацию всей страны!

Чтобы ни у кого не возникло ощущения обманутых ожиданий, предупреждаю: девайс выйдет еще не завтра. Эстимейт я написал выше. Сам тред я создал только потому, что по ощущениям дело движется к победному концу, я решил рискнуть и объявить.
User avatar
TS-Labs
 
Posts: 5222
Joined: Thu, 26.07.2012 01:29:56

Postby LessNick » Sun, 28.08.2016 21:18:36

TS-Labs wrote: я решил рискнуть


Я думаю, что ни у кого уже не возникло глупых мыслей (претензий), после того как были доведены до ума другие девайсы.
(∩。•o•。)っ.゚☆。・ TS-Conf для PentEvo — это классический Pentagon 128k для тех кто хочет больше!
User avatar
LessNick
грей сашу — сашу грей
 
Posts: 936
Joined: Thu, 26.07.2012 15:00:53

Postby TS-Labs » Sun, 28.08.2016 22:13:59

:beer:
User avatar
TS-Labs
 
Posts: 5222
Joined: Thu, 26.07.2012 01:29:56

Postby djspawn » Mon, 29.08.2016 15:19:56

TS-Labs, Можно предварительно записаться в очередь на покупку?)
ZX-Evolution rev.C+NeoGS+HDD+2xFDD3.5+FDD5.25
Pentagon 128K mod.2014 + RGB-VGA + FDD3.5
Байт128К+TR-DOS+YM+TURBO+FDD5.25
Scorpion ZS-256
AY STM Player https://www.youtube.com/watch?v=bPa2aLGzqPc&t=12s
AY AVR Player
User avatar
djspawn
 
Posts: 26
Joined: Tue, 08.03.2016 23:46:22

Postby TS-Labs » Mon, 29.08.2016 15:33:00

1. Можно, но только на почту тслабс.инфо@гмейл.ком. Почта нужна для отслеживания заказов. Без почты - заказы не принимаются. Иначе я просто поеду крышей, пытаясь ничего не проебать.
2. Процесса это не ускорит.
3. Оплату я принимаю не ранее, чем могу выслать девайс.
4. Если некий условный диджей/программер/whoever ;) захочет принять участие в создании контента для девайса (музыка, демы, софты) - стоимость девайса для него уменьшается XD
User avatar
TS-Labs
 
Posts: 5222
Joined: Thu, 26.07.2012 01:29:56

Postby don » Mon, 29.08.2016 16:36:30

Ну снимаю шляпу :applause: , начинаю откладывать деньги на девайс.
don
 
Posts: 34
Joined: Tue, 07.08.2012 19:34:21

Next

Return to Hardware

Who is online

Users browsing this forum: No registered users and 3 guests

cron

x