а это, тест под виндой, или досик в незащищенном режиме?
а это, тест под виндой, или досик в незащищенном режиме?
Куплю в СПб 5.25" Robotron или Teac
Последний раз редактировалось Tronix; 26.12.2013 в 16:38.
Vitamin, можеш прикрутить поддержку виртуального/реального COM порта ?
Идея в следующем - слать в COM порт пакеты по 14 байт + 2 байта "терминатор" ($80$7F),
первые 13 байт - значения регистров, 14-й байт значение огибающей (если менялся, то реальное значение, если неменялся то 255)
Устройство у меня такое собрано и нормально играет под виндой.
Здесь можно скачать актуальные версии Virtual Vector (VV)
Потестил, но увы - STACKER играется ровно так же, то есть проблема с огибающей видимо осталась. Фикшеный AYPLAYER ее играет гораздо четче (я уже давал ссылку).
AYPLAYER : https://soundcloud.com/tronix286/illusion-psg-normal
ZXTUNE: http://rghost.ru/51219767
---------- Post added at 19:00 ---------- Previous post was at 17:44 ----------
Смотрю вот схему http://ru.scribd.com/doc/103838815/L...taly-Mayatskih и вижу, что BDIR подключен к 1 пину LPT (Strobe). Но дальше авторы нигде его не контролируют. Или Strobe такой умный, что его сам контроллер выставляет? Не определюсь - BDIR на Strobe вешать или на 14 пин.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
вот еще вариант подключенного AY (а точнее tsfm) через усб: http://dlcorp.nedopc.com/viewtopic.p...&t=732&start=0
Подключил к Strobe 1 пин LPT. И ничего не понимаю. Пишу в порт 37A значение 0xF6 (11110110) Должно быть на стробе высокий уровень (нулевой бит, сигнал инвертирован), а на 16 пине - низкий. У меня наоборот, на первом - низкий, на 16 - высокий . Что за?
---------- Post added at 20:58 ---------- Previous post was at 20:37 ----------
Хм, почему то первый пин LPT оказывается контролируется первым битом, а не нулевым. Заиграл так:
Но щаз получается, что на BDIR у меня всегда высокий уровень. То есть по-сути как и было раньше. Когда его делать низким? После того как все записал, и адрес и данные?Код:void AD(unsigned char b) { outp(0xF9 | b << 2,LPT_PORT+2); } void R(unsigned char b) { outp(0xF5 | b << 3, LPT_PORT+2); } void ResetYM2149() { R(1); R(0); R(1); } void sreg(char reg, unsigned char dat) { AD(1); D(reg); AD(0); D(dat); }
---------- Post added at 21:40 ---------- Previous post was at 20:58 ----------
Ага, кажется понял. Сделал так:
Выкинул после фрейма записьКод:void AD(_UC b,_UC c) { outb((0xF9 | b << 2) | c << 1,LPT_PORT+2); //FB } void R(_UC b) { outb(0xF5 | b << 3,LPT_PORT+2); //F7 } void ResetYM2149() { R(1); R(0); R(1); } void sreg(char reg,_UC dat) { #ifdef LPT_PORT AD(1,0); // BC1=1, BDIR=1 D(reg); AD(0,0); //BC1=0, BDIR=1 D(dat); AD(0,1); //BC1=0, BDIR=0
Результат - играет так же, как и вариант с записью после фрейма. Видимо, это максимальное качествоКод:/* AD(1); D(0);*/
Правильно было бы при BC1=BDIR=0 выставить данные на шину данных, после чего выставить одновременно BC1 и BDIR в соответсвии с тем что пишем (адрес/данные), после чего сного выставить BC1=BDIR=0 и только после этого снимать данные с шины данных.
Здесь можно скачать актуальные версии Virtual Vector (VV)
Всмысле так?
AD(0,1); //BC1=0, BDIR=0
D(reg);
AD(1,0); // BC1=1, BDIR=1
D(reg);
AD(0,1); //BC1=0, BDIR=0
D(dat);
AD(0,0); //BC1=0, BDIR=1
D(dat);
AD(0,1); //BC1=0, BDIR=0
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)