Parallel Streaming

If you wish to check emulator in parallel mode use this sketch for arduino.

 

For new version of AY-Player (update 30.11.2015)

const int ad[8] = { 8, 9, 2, 3, 4, 5, 6, 7 }; // connect to DA0,1,...,7

const int pinBC1 = 10;
const int pinBDIR = 11;

//Fast pin switching macros
#define CLR(x,y) (x&=(~(1<<y)))
#define SET(x,y) (x|=(1<<y))
#define __BCPORT__ PORTB
#define __BC1__ 2
#define __BDIR__ 3

void setup() {
//init pins
for( int i=0; i < 8; i++)
pinMode(ad[i], OUTPUT);

pinMode(pinBC1, OUTPUT);
pinMode(pinBDIR, OUTPUT);

//inactive mode
digitalWrite(pinBC1, LOW);
digitalWrite(pinBDIR, LOW);

//serial init
Serial.begin(57600);
}

void send_data(unsigned char address, unsigned char data) {
//write address to pins
PORTB |= address & 0x03;
PORTD |= address & 0xFC;
//validate addess
__BCPORT__ |= (1 << __BDIR__) + (1 << __BC1__);
delayMicroseconds(1);
__BCPORT__ &= ~((1 << __BDIR__) + (1 << __BC1__));
PORTB &= ~(address & 0x03);
PORTD &= ~(address & 0xFC);

//write data to pins
PORTB |= data & 0x03;
PORTD |= data & 0xFC;
//validate data
SET(__BCPORT__,__BDIR__);
delayMicroseconds(1);
CLR(__BCPORT__,__BDIR__);
PORTB &= ~(data & 0x03);
PORTD &= ~(data & 0xFC);
}
void loop() {
byte reg;
while(1) {
do {
while(Serial.available() < 1) { delayMicroseconds(1); }
reg = Serial.read();
}
while( reg > 15 );

while(Serial.available() < 1) { delayMicroseconds(1); }
send_data(reg, Serial.read());
}
}

For old version of AY-Player

 

const int ad[8] = { 8, 9, 2, 3, 4, 5, 6, 7 }; // connect to DA0,1,...,7

const int pinBC1 = 10;
const int pinBDIR = 11;

//Fast pin switching macros
#define CLR(x,y) (x&=(~(1<<y)))
#define SET(x,y) (x|=(1<<y))
#define __BCPORT__ PORTB
#define __BC1__ 2
#define __BDIR__ 3

//const int ledPin = 13;

byte buf[16];
byte buf2[16];

void setup(){
//init pins
for( int i=0; i < 8; i++)
pinMode(ad[i], OUTPUT);

pinMode(pinBC1, OUTPUT);
pinMode(pinBDIR, OUTPUT);
//pinMode(ledPin, OUTPUT);

//inactive mode
digitalWrite(pinBC1, LOW);
digitalWrite(pinBDIR, LOW);

memset(buf,0,16);
memset(buf2,0,16);

//serial init
Serial.begin(19200);
}

void send_data(unsigned char address, unsigned char data)
{
//write address to pins
PORTB |= address & 0x03;
PORTD |= address & 0xFC;
delayMicroseconds(1);
//validate addess
__BCPORT__ |= (1 << __BDIR__) + (1 << __BC1__);
delayMicroseconds(1);
__BCPORT__ &= ~((1 << __BDIR__) + (1 << __BC1__));
PORTB &= ~(address & 0x03);
PORTD &= ~(address & 0xFC);

//write data to pins
PORTB |= data & 0x03;
PORTD |= data & 0xFC;
delayMicroseconds(1);
//validate data
SET(__BCPORT__,__BDIR__);
delayMicroseconds(1);
CLR(__BCPORT__,__BDIR__);
PORTB &= ~(data & 0x03);
PORTD &= ~(data & 0xFC);
}

byte bufcnt = 0;
byte prev = 0;

void loop() {
while(1)
{
while(Serial.available() < 1) { delayMicroseconds(1); }

byte data = Serial.read(); buf[bufcnt] = data;

if(bufcnt > 13 && data==0x7F && prev == 0x80)
{
bufcnt=0;
break;
}
else
{
if(bufcnt<16)
bufcnt++;
}

prev = data;
}

//digitalWrite(ledPin, HIGH);
//PORTB |= (1<<5);

for (int i = 0; i < 14; i++)
{
if( buf[i]!=buf2[i])
{
if(!(i==13 && buf[i] == 0xFF))
send_data(i, buf[i]);
}
}

memcpy(buf2,buf,16);

//digitalWrite(ledPin, LOW);
//PORTB &= ~(1<<5);
}

pinmap3ch

Data pins for parallel sending data 8,9,2,3,4,5,6,7 BC1 pin 10 BDIR pin 11 connect these pins according the figure above

10 thoughts on “Parallel Streaming

  1. Не могу понять как реализовать параллельную загрузку с ардуины на эмулятор, по какой схеме подключать, через что отсылать с плеера(даже если без ардуины – то через какой девайс необходимо отправлять данные с плеера?)? Не могли бы вы более подробно описать эти нюансы? Заранее благодарен.

  2. Пересылка с проигрывателя идет через переходник COM->TTL или USB->TTL, у переходника берется +5v, GND и TX, подключается к эмулятору, далее в проигрывателе выбирается COM порт и всё

    параллельная загрузка, тут всё аналогично AY-3-89XX, т.е. используются BC1/BDIR и шина данных, в скетче приведена функция отправки байта в определенный регистр

  3. Как я понял, с новой версией avr-ay player данный скетч уже не подойдет? Просто есть девайсина, построенная по этому принципу, но с использованием реального YM2149F, и хочется заставить её работать с новой версией плеера.
    Не могли бы вы подсказать как сего можно добиться?

      1. Да и сравнение будет немного не корректное. По скорости воспроизведения будет отличаться, у меня генератор на 1.84 МГц работает. 😉

        1. Добавил скетч со встроенным генератором на 2МГц, может будет чем-то полезен, да и вообще там скетч гораздо производительнее, генератор можно отключить, если не нужен 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *