Перейти к содержимому



AY-8910 / AY-3-8910 / AY-3-8912 Emulator on Atmega8 (Эмулятор музыкального сопроцессора)

Atmega8 Emulator Эмулятор AVR AY-8910 AY-3-8910 AY-3-8912 ZX-Spectrum Speccy

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 3

#1 admin

admin

    Администратор

  • Администраторы
  • 76 сообщений

Отправлено 16 Январь 2014 - 23:43

Эмулятор музыкального сопроцессора AY-8910 / AY-3-8910 / AY-3-8912 на Atmega8
(Как в ZX-Spectrum и т.д.) AY-8910 Atmega8 AVR Emulator

3 CHANNEL VERSION!!! SEE NEXT POST!!!

VERSION 12.4 RELEASED! 15.09.2014

VISIT OUR NEW SITE MADE ESPECIALLY FOR EMULATOR! WWW.AVRAY.RU

ALL NEW VERSIONS FROM 10.4 WILL BE ON OUR NEW SITE!!!

NEW! Surround 3-Channel version! See next post!

V9.5+ Works in real ZX-Spectrum!!! :)

Current (3 channel) Version 12.4 (15.09.2014)
Current (2 channel) Version 12.4 (15.09.2014)

Current AY-Player Version 5.2 (26.08.2014)

If it is usefull, please leave your comment here or on youtube, thanks!


Начну с того, что нашел в сети проект данного эмулятора (в настоящее время ссылка недоступна, link is unavailable now) (http://www.vector06c...od.ru/emul.html самая нижняя ссылка) реализованный в Algoritm Builder (http://algrom.net/)
Данный проект изначально разрабатывался для процессоров Atmega16/32, но в архиве был проект и для Atmega8.
Я обрадовался, ведь у меня валялась кучка Atmega8-16PU купленных у китайцев )
Несколько дней неудач, необходимость паять AVR FuseBit Doctor (http://www.getchip.n...fusebit-doctor/) из-за запоротых фьюзов (как оказалось позже, их вообще не надо было трогать).

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

Результат оказался очень неплохим, оптимизировав код я получил быстродействие на 16Mhz выше чем автор на разогнанном чипе до 28Mhz. Попутно было исправлено несколько ошибок, из-за которых звук сильно искажался.


В подтверждение выкладываю видео с кварцем 25MHz, качество звука на видео конечно не очень, но вы можете послушать прилагаемые ниже файлы. (Example Video with 25MHz oscillator)



HOW'S IT WORK? (КАК ЭТО РАБОТАЕТ?)
pwm.PNG



New Output Circuit!!!
output.png
These RC-Filters cuts frequences below 20 Hz and above 48 kHz, so you can simply connect it to your sound card or amplifier.
(Данные RC фильтры обрезают частоты ниже 20 Гц и выше 48 кГц, так что вы можете спокойно подключить эту схему к звуковой карте или усилителю, в оригинальной схеме RC фильтр был построен неправильно).
This circuit generates about 50mV output.
15nF = 153
Прикрепленный файл  Схема_4_Mega8.pdf   29,28К   420 Количество загрузок: Original Circuit (Оригинальная схема из исходного эмулятора)

You can use headphones without RC Filter!!!

BETTER SOLUTION IS: USING TWO OPTOCOUPLERS INSTEAD OF RC-FILTER!!!


Прошивка прошивается с помощью avrdude и USBAsp программатора стандартным способом
Строка для запуска (How to upload firmware)

For every oscillator except internal
avrdude -b 19200 -p atmega8 -c USBasp -U flash:w:emul25mhz.hex -U lfuse:w:0x7e:m -U hfuse:w:0xc5:m

или
For oscillators <= 16MHz for powersave
avrdude -b 19200 -p atmega8 -c USBasp -U flash:w:emul25mhz.hex -U lfuse:w:0x7e:m -U hfuse:w:0xd5:m

For 8MHz internal oscillator use
avrdude -b 19200 -p atmega8 -c USBasp -U flash:w:emul8mhz.hex -U lfuse:w:0x24:m -U hfuse:w:0xc5:m

Прикрепленный файл  avrdude.zip   499,29К   158 Количество загрузок: or download it from site http://download.sava...leases/avrdude/

Внимание! Не все микроконтроллеры удается разогнать выше 24 МГц!!!



Варианты прошивок для кварцев с разными частотами
(Firmware for Atmega8) If it's possible, try to use 25 or 27 MHz versions (24MHz also good)
All sounds recorded using Line-in on PC
.................. - Means all generators work at normal frequency
.................. - Means all generators work at normal frequency but somtimes missing timer interrupt
.................. - Means all generators work at frequency divided by 2
.................. - Means all generators work at frequency divided by 4

Version 10.1 (15.07.2014) Final version!!!
Прикрепленный файл  AY_Emul_Version10_1__2ch.zip   4,23К   234 Количество загрузок: (24MHz, 25MHz, 27MHz)
- Noise mixer reverted to ver 9.6 (better noise as on real chip)
- Random number generator (of the noise generator) again moved from timer interrupt to main loop (completely different noise as in real chip!)
- Improvements in envelope generator
- Fixed small mistake in noise generator
- Optimized mixer code

Version 9.8 (14.04.2014)
Прикрепленный файл  AY_Emul_Version9_8__2ch.zip   4,15К   138 Количество загрузок: (24MHz, 25MHz, 27MHz)
- Improved noise generator & moved again to interrupt code
- Some improvements in tone & envelope generators
Examples of the sound
Прикрепленный файл  sound01v98_27mhz_2ch.wma   1013,35К   207 Количество загрузок: (V9.8 COM PORT 27MHz)
Прикрепленный файл  sound02v98_27mhz_2ch.wma   1,7МБ   149 Количество загрузок: (V9.8 COM PORT 27MHz)
Прикрепленный файл  sound03v98_27mhz_2ch.wma   2,15МБ   138 Количество загрузок: (V9.8 COM PORT 27MHz)
Прикрепленный файл  sound04v98_27mhz_2ch.wma   2,5МБ   144 Количество загрузок: (V9.8 COM PORT 27MHz)
Прикрепленный файл  sound05v98_27mhz_2ch.wma   1,98МБ   126 Количество загрузок: (V9.8 COM PORT 27MHz)

Version 9.7 (06.04.2014)
Прикрепленный файл  AY_Emul_Version9_7__2ch.zip   7,14К   107 Количество загрузок: (24MHz, 25MHz, 27MHz, 30MHz, 32MHz)
- Better noise generation
- Fixed mixer to provide more realistic sound
Examples of the sound
Прикрепленный файл  sound01v97_25mhz_2ch.wma   3,42МБ   118 Количество загрузок: (V9.7 COM PORT 25MHz)
Прикрепленный файл  sound02v97_25mhz_2ch.wma   1,53МБ   111 Количество загрузок: (V9.7 COM PORT 25MHz)
Прикрепленный файл  sound03v97_25mhz_2ch.wma   2,93МБ   108 Количество загрузок: (V9.7 COM PORT 25MHz)

Version 9.6 (20.03.2014)
Прикрепленный файл  AY_Emul_Version9_6__2ch.zip   10,18К   113 Количество загрузок: (20MHz, 24MHz, 25MHz, 27MHz, 30MHz, 32MHz, 40MHz)
- Noise Generator moved from timer interrupt to main loop (better noise, faster timer interrupt)
- Noise not affected tone (more clear tone)
- Only alternate volume table as it is better
Examples of the sound
Прикрепленный файл  sound01v96_25mhz_2ch.wma   969,5К   107 Количество загрузок: (V9.6 COM PORT 25MHz)
Прикрепленный файл  sound02v96_25mhz_2ch.wma   1017,74К   108 Количество загрузок: (V9.6 COM PORT 25MHz)
Прикрепленный файл  sound03v96_25mhz_2ch.wma   2,19МБ   112 Количество загрузок: (V9.6 COM PORT 25MHz)
Прикрепленный файл  sound04v96_25mhz_2ch.wma   3,47МБ   110 Количество загрузок: (V9.6 COM PORT 25MHz)
Прикрепленный файл  sound05v96_25mhz_2ch.wma   2,93МБ   111 Количество загрузок: (V9.6 COM PORT 25MHz)

Version 9.5 (14.03.2014)
Прикрепленный файл  AY_Emul_Version9_5__2ch.zip   10,25К   112 Количество загрузок: (20MHz, 24MHz, 25MHz, 27MHz, 30MHz, 32MHz, 40MHz)
Прикрепленный файл  AY_Emul_Version9_5__2ch_alt.zip   8,77К   105 Количество загрузок: alternate (better) volume table (24MHz, 25MHz, 27MHz, 30MHz, 32MHz, 40MHz)
- fixed mistake in parallel mode with distorting 6,7 bits of data, checked all modes, everything is ok now.
- New method of mixing noise channel, now it is in antiphase instead of doubling amplitude (clear sound)
- Noise generator completely reworked, compared with real chip - same!!!
- Now channel B is in antiphase with channels A and C for best mixing! (clear sound)
- Now it fast generates envelopes on the fly and not using 256 bytes of SRAM
- OMG, all counters (except tone generator) when receive 0 think that it is 1..... f...k....
- Improved, fixed, optimized receiving data in parallel mode (not using additional buffer, writes directly to PSG)
- optimization again :)
Examples of the sound
Прикрепленный файл  sound06v95_25mhz_2ch_serial_alt.mp3   5,17МБ   557 Количество загрузок: (V9.5 COM PORT 25MHz) ALT VOL TABLE, last AY-Player
Прикрепленный файл  sound01v95_25mhz_2ch_serial.wma   1,49МБ   102 Количество загрузок: (V9.5 COM PORT 25MHz)
Прикрепленный файл  sound02v95_25mhz_2ch_serial.wma   1,36МБ   112 Количество загрузок: (V9.5 COM PORT 25MHz)
Прикрепленный файл  sound03v95_25mhz_2ch_serial_alt.wma   478,41К   105 Количество загрузок: (V9.5 COM PORT 25MHz) ALT VOL TABLE
Прикрепленный файл  sound04v95_25mhz_2ch_serial_alt.wma   1,06МБ   102 Количество загрузок: (V9.5 COM PORT 25MHz) ALT VOL TABLE
Прикрепленный файл  sound05v95_25mhz_2ch_serial_alt.wma   877,42К   112 Количество загрузок: (V9.5 COM PORT 25MHz) ALT VOL TABLE

I connected this version of the emulator to real ZX-Spectrum computer replacing YM2149...
Found some bugs in playing on it...
And after that recorded the sound... It's nice!!! The first version which is working on the real hardware!!!!!
connect.jpg
Прикрепленный файл  sound01v95_25mhz_2ch_zx-spectrum.mp3.wma   991,43К   135 Количество загрузок: (V9.5 REAL ZX-SPECTRUM 25MHz)
Прикрепленный файл  sound02v95_25mhz_2ch_zx-spectrum.mp3.wma   864,27К   129 Количество загрузок: (V9.5 REAL ZX-SPECTRUM 25MHz)
Прикрепленный файл  sound03v95_25mhz_2ch_zx-spectrum.mp3.wma   1,4МБ   121 Количество загрузок: (V9.5 REAL ZX-SPECTRUM 25MHz)
Прикрепленный файл  sound04v95_25mhz_2ch_zx-spectrum.mp3.wma   759,04К   119 Количество загрузок: (V9.5 REAL ZX-SPECTRUM 25MHz)
Прикрепленный файл  sound05v95_25mhz_2ch_zx-spectrum.mp3.wma   671,34К   92 Количество загрузок: (V9.5 REAL ZX-SPECTRUM 25MHz)
Прикрепленный файл  sound06v95_25mhz_2ch_zx-spectrum.mp3.wma   969,5К   107 Количество загрузок: (V9.5 REAL ZX-SPECTRUM 25MHz)

Version 9.4 (08.03.2014)
Прикрепленный файл  AY_Emul_Version9_4__2ch.zip   10,8К   97 Количество загрузок: (20MHz, 24MHz, 25MHz, 27MHz, 30MHz, 32MHz, 40MHz)
Прикрепленный файл  AY_Emul_Version9_4__2ch_altmixer.zip   6,24К   112 Количество загрузок: Alternate,better mixer (25MHz, 27MHz, 30MHz, 32MHz)
Прикрепленный файл  AY_Emul_Version9_4__2ch_altmixer2.zip   3,07К   99 Количество загрузок: Same but not missing low level sound (25MHz, 27MHz)
mixer.png
- Fixed envelope generator
- Optimized Noise generator
- Optimized Envelope generator
- Optimized Tone generator
- Now envelope generator works only when it is needed (more clean sound)
- Now it sounds exactly as real AY/YM chip!
Examples of the sound
Прикрепленный файл  sound01v94_27mhz_2ch.wma   3,45МБ   99 Количество загрузок: (V9.4 COM PORT 27MHz, [SUMMER.ym])
Прикрепленный файл  sound02v94_27mhz_2ch.wma   649,42К   95 Количество загрузок: (V9.4 COM PORT 27MHz, [DRIVER_C.ym])
Прикрепленный файл  sound03v94_27mhz_2ch.wma   855,5К   108 Количество загрузок: (V9.4 COM PORT 27MHz, [ANTHRAX.ym])

Version 7.0 (18.02.2014)
Прикрепленный файл  AY_Emul_Version7_0__2ch.zip   8,85К   110 Количество загрузок: (8MHz, 16 MHz, 20MHz, 24 MHz, 27 MHz, 30 MHz, 32 MHz, 40 MHz )
- Rewritten Noise Generator
- FIXED HUGE BUG IN NOISE GENERATOR
- Fixed Mixer Problems
- Optimized Code
Examples of the sound
Прикрепленный файл  sound01v70_40mhz_2ch.wma   816,04К   120 Количество загрузок: (V7.0 COM PORT 40MHz)
Прикрепленный файл  sound02v70_40mhz_2ch.wma   1,37МБ   113 Количество загрузок: (V7.0 COM PORT 40MHz)
Прикрепленный файл  sound03v70_40mhz_2ch.wma   1,17МБ   106 Количество загрузок: (V7.0 COM PORT 40MHz)
Прикрепленный файл  sound04v70_40mhz_2ch.wma   3,56МБ   117 Количество загрузок: (V7.0 COM PORT 40MHz) Compare with ym_zx2.wma

Sound from the real ZX-Spectrum
You can compare the sound of emulator witn the sound of real YM2149
Прикрепленный файл  ym_zx4.wma   3,09МБ   139 Количество загрузок: Запись реального YM с ZX-Spectrum (Real YM on ZX-Spectrum)
Прикрепленный файл  ym_zx3.wma   1,16МБ   110 Количество загрузок: Запись реального YM с ZX-Spectrum (Real YM on ZX-Spectrum)
Прикрепленный файл  ym_zx2.wma   1,29МБ   115 Количество загрузок: Запись реального YM с ZX-Spectrum (Real YM on ZX-Spectrum)
Прикрепленный файл  ym_zx.wma   2,13МБ   111 Количество загрузок: Запись реального YM с ZX-Spectrum (Real YM on ZX-Spectrum)



YM Player for this Device (For serial interface loading)
Written in C# (.Net Framework 3.5+)
Just connect TX pin of USB to serial ttl converter to RX pin of Atmega8
Прикрепленный файл  AYPlayer_v4.zip   1,12МБ   164 Количество загрузок: 15.04.2014 version 4.2 + sound examples collection
ayplayer4.png
Current version 4 supports following file formats
YM (3,4,5,6 packed/unpacked), PSG, EPSG, VTX, (RSF,YRG:Custom formats)
Current version 4 supports converting to following formats: PSG, RSF, YRG

Прикрепленный файл  AYPlayer_v3.zip   1,24МБ   124 Количество загрузок: 20.03.2014 version 3.1 + sound examples collection
ayplayer.png
Current version 3 supports following file formats
YM (3,4,5,6 packed/unpacked), PSG, EPSG, VTX, (RSF,YRG:Custom formats)
Current version 3 supports converting to following formats: PSG, RSF, YRG

Changelog
Version 4.2
- removed path from converting filename (fixed problem with saving to different folder)
Version 4.1
- Removed DUMP button. added conversion to listbox context menu
- Improved adding elements to playlist (fast)
- added handler for refreshing com port list if USB device connected to PC
- fixed opening file (now in read only mode)
- added buttons for playing next/prev items
- added support for saving/loading playlist
- playlist stored between closing/opening application
- improved user interface
Version 4.0
- support playlist (without saving)
- improved user interface
Version 3.1
- support YM 3, YM 4 files
- added more I/O error handlers
Version 3.0
- support YM 5 files
- support packed YM files
- support VTX files
- improved user interface, added some checks for errors
Version 2.3
- fixed timer speed for 100Hz files
Version 2.2
- improved user interface
Version 2.1
- improved algorithm of sending data to AVR
- added new file format RSF (my format)
- fixed timer speed
Version 2.0
- support save dump to PSG file
- fixed mistake in saving PSG
- uses 5-10x lower of PC resourses & support opening dump files, PSG, EPSG
Version 1.0
- initial release

Additional music collections
Прикрепленный файл  newmusic01.zip   619,46К   136 Количество загрузок: Additional Music Collection №1 (Packed YM6 Format)
Прикрепленный файл  newmusic02.zip   441,42К   115 Количество загрузок: Additional Music Collection №2 (Packed YM6 Format)
Прикрепленный файл  newmusic03.zip   2,1МБ   116 Количество загрузок: Additional Music Collection №3 (RSF Format)
Прикрепленный файл  newmusic04.zip   8,62МБ   122 Количество загрузок: Additional Music Collection №4 (VTX Format, 3512 files!!!)


RSF format is smaller than PSG, contains text information about file and easy to stream it using atmega & so on...
RSF (Registers Stream Flow)

Format description:
HEADER:
Offset  | SIZE | Type or content
00...........3........Signature "RSF"
03...........1........Version (current is 1)
04...........1........Frame rate (interrupt frequency) usually 50(Hz)
05...........4........UInt32, frameCount (total frames of the song)
09...........4........UInt32, loopFrame (frame for loop)
13...........X........Null terminated string containing Title
XX...........X........Null terminated string containing Author
XX...........X........Null terminated string containing Comment

SONG DATA:
first check for 3 special values
FF - interrupt, dont send registers to the chip (just skip sending one time)
FE,XX - number of interrupts XX * 16 without changing of registers (just skip sending XX*16 times)
FD,XX - number of interrupts XX * 2 without changing of registers (just skip sending XX*2 times)

register values is for registers 0-13 (registers 14,15 ignored in this format) that changed from previous interrupt
XX1, XX2,REG0,REG5,REG7 (depends on register mask)

Register mask
XX1 - HI value of register mask
XX2 - LO value of register mask

if register mask bit contains 1, register value should follow the register mask

Example

0x00,0x03,REG0,REG1 (XX1=00000000 XX2=00000011)
0x03,0x02,REG1,REG8,REG9 (XX1=00000011 XX2=00000010)

Example of RSF file
Прикрепленный файл  dizzy5.zip   8,14К   126 Количество загрузок:


EMULATOR PIN MAPPING TO AY-3-8910
pin_mapping.png



Пример скетча для Arduino для параллельной отправки данных на эмулятор.
If you wish to check emulator in parallel mode use this sketch for arduino
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);
}

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

#2 admin

admin

    Администратор

  • Администраторы
  • 76 сообщений

Отправлено 11 Февраль 2014 - 00:59

New 3 Channel Version!!!
It is really completely different sound!!!


So you can use this version of emulator as a real AY-3-8910, AY-3-8912, YM2149 CHIP or instead of real CHIP in any circuits!!!



Pinout according to the real chip is

pin_mapping3.png



Output Circuit For 3 Channel Version
output3.png


Version 10.3 (3 channel) 14.08.2014 (Standard & Surround versions)
Прикрепленный файл  AY_Emul_Version10_3__3ch_standard.zip   5,65К   122 Количество загрузок:  (20MHz, 24MHz, 25MHz, 27MHz) Standard version
Прикрепленный файл  AY_Emul_Version10_3__3ch_surround.zip   5,69К   123 Количество загрузок: (20MHz, 24MHz, 25MHz, 27MHz) Surround version
ATTENTION! This version has CHANNEL B on PB3, CHANNEL C on PB2!!!
- Improved noise generator
- Improved Envelope generator
Difference of surround version is:
- Volume of channel B increased by 2
- Channel A mixed with 25% of channel C
- Channel C mixed with 25% of channel A
Examples of the sound
Прикрепленный файл  sound01v103_25mhz_3ch_standard.wma   2,72МБ   120 Количество загрузок: (V10.3 COM Port 25 MHz Standard version)
Прикрепленный файл  sound01v103_25mhz_3ch_surround.wma   2,72МБ   114 Количество загрузок: (V10.3 COM Port 25 MHz Surround version)
Прикрепленный файл  sound02v103_27mhz_3ch_surround.wma   1,71МБ   111 Количество загрузок: (V10.3 COM Port 27 MHz Surround version)
Прикрепленный файл  sound03v103_27mhz_3ch_surround.wma   1,44МБ   99 Количество загрузок: (V10.3 COM Port 27 MHz Surround version)
Прикрепленный файл  sound04v103_27mhz_3ch_surround.wma   2,94МБ   96 Количество загрузок: (V10.3 COM Port 27 MHz Surround version)
Прикрепленный файл  sound05v103_27mhz_3ch_surround.wma   1,2МБ   112 Количество загрузок: (V10.3 COM Port 27 MHz Surround version)


Version 10.1 (3 channel) 15.07.2014
Прикрепленный файл  AY_Emul_Version10_1__3ch.zip   4,2К   110 Количество загрузок: (24MHz, 25MHz, 27MHz)
ATTENTION! This version has CHANNEL B on PB3, CHANNEL C on PB2!!!
- Fixed small mistake in noise generator
- Optimized mixer code
- Very small improvement in envelope generator
I think it is finished and now it is nothing to do more with this emulator.


Version 10.0 (3 channel) 03.07.2014
Прикрепленный файл  AY_Emul_Version10_0__3ch.zip   4,21К   93 Количество загрузок: (24MHz, 25MHz, 27MHz)
ATTENTION! This version has CHANNEL B on PB3, CHANNEL C on PB2!!!
- Increased volume of channel B
- Random number generator (of the noise generator) again moved from timer interrupt to main loop (completely different noise as in real chip!)
- Small improvement in envelope generator
Examples of the sound
Прикрепленный файл  sound01v10_27mhz_3ch.wma   2,09МБ   119 Количество загрузок: (V10.0 COM Port 27 MHz)
Прикрепленный файл  sound02v10_27mhz_3ch.wma   2,05МБ   85 Количество загрузок: (V10.0 COM Port 27 MHz)
Прикрепленный файл  sound03v10_27mhz_3ch.wma   2МБ   96 Количество загрузок: (V10.0 COM Port 27 MHz)
Прикрепленный файл  sound04v10_27mhz_3ch.wma   1,26МБ   98 Количество загрузок: (V10.0 COM Port 27 MHz)
Прикрепленный файл  sound05v10_27mhz_3ch.wma   934,43К   97 Количество загрузок: (V10.0 COM Port 27 MHz)
Прикрепленный файл  sound06v10_27mhz_3ch.wma   2,06МБ   96 Количество загрузок: (V10.0 COM Port 27 MHz)
Прикрепленный файл  sound07v10_27mhz_3ch.wma   3,12МБ   105 Количество загрузок: (V10.0 COM Port 27 MHz)
Прикрепленный файл  sound08v10_27mhz_3ch.wma   5,64МБ   101 Количество загрузок: (V10.0 COM Port 27 MHz)
Прикрепленный файл  sound09v10_27mhz_3ch.wma   2,12МБ   96 Количество загрузок: (V10.0 COM Port 27 MHz)
Прикрепленный файл  sound10v10_27mhz_3ch.wma   583,65К   88 Количество загрузок: (V10.0 COM Port 27 MHz)
Прикрепленный файл  sound11v10_27mhz_3ch.wma   1,35МБ   115 Количество загрузок: (V10.0 COM Port 27 MHz)
Прикрепленный файл  sound12v10_27mhz_3ch.wma   2,38МБ   105 Количество загрузок: (V10.0 COM Port 27 MHz)


Version 9.9 (3 channel) 20.06.2014
Прикрепленный файл  AY_Emul_Version9_9__3ch.zip   1,39К   86 Количество загрузок: (27MHz only)
ATTENTION! This version has CHANNEL B on PB3, CHANNEL C on PB2!!!
- Noise mixer reverted to ver 9.6 (better noise as on real chip)
- Changed volume table according to 3 channel version
Examples of the sound
Прикрепленный файл  sound01v99_27mhz_3ch.wma   1,61МБ   96 Количество загрузок: (V9.9 COM Port 27 MHz)
Прикрепленный файл  sound02v99_27mhz_3ch.wma   2,81МБ   97 Количество загрузок: (V9.9 COM Port 27 MHz)
Прикрепленный файл  sound03v99_27mhz_3ch.wma   1,32МБ   96 Количество загрузок: (V9.9 COM Port 27 MHz)


Version 9.8 (3 channel) 03.06.2014
Прикрепленный файл  AY_Emul_Version9_8__3ch.zip   1,39К   100 Количество загрузок: (27MHz only)
ATTENTION! This version has CHANNEL B on PB3, CHANNEL C on PB2!!!
All improvements as in 2 channel version
The quality of the channel B depends on oscillator.
Examples of the sound
Прикрепленный файл  sound01v98_27mhz_3ch.wma   2,39МБ   101 Количество загрузок: (V9.8 COM Port 27 MHz)
Прикрепленный файл  sound02v98_27mhz_3ch.wma   1,41МБ   113 Количество загрузок: (V9.8 COM Port 27 MHz)


Version 9.4 (3 channel) 10.03.2014
Прикрепленный файл  AY_Emul_Version9_4__3ch.zip   7,58К   113 Количество загрузок: (24MHz, 25MHz, 27MHz, 30MHz, 32MHz)
All improvements as in 2 channel version
The quality of the channel C depends on oscillator, so choose one which you feel better.
Examples of the sound
Прикрепленный файл  sound01v94_27mhz_3ch.wma   780,96К   103 Количество загрузок: (V9.4 COM Port 27 MHz [ANTHRAX.ym])
Прикрепленный файл  sound02v94_27mhz_3ch.wma   2,03МБ   116 Количество загрузок: (V9.4 COM Port 27 MHz [rElaTed_mEmor!es.ym])


Version 7.0 (3 channel) 18.02.2014 (fixed all)
Прикрепленный файл  AY_Emul_Version7_0__3ch.zip   8,82К   111 Количество загрузок: (8MHz, 16MHz, 20MHz, 24MHz, 27MHz, 30MHz, 32MHz, 40MHz)
- Rewritten noise generator
- Repaired Mixer
- Optimized code
- Fixed Huge bug in noise generator
- All versions synchronized

Examples of the sound
Прикрепленный файл  sound01v70_40mhz_3ch.wma   934,43К   120 Количество загрузок: (V7.1 COM Port 40 MHz)
Прикрепленный файл  sound02v70_40mhz_3ch.wma   1,35МБ   110 Количество загрузок: (V7.1 COM Port 40 MHz)
Прикрепленный файл  sound03v70_40mhz_3ch.wma   1,17МБ   119 Количество загрузок: (V7.1 COM Port 40 MHz)
Прикрепленный файл  sound04v70_40mhz_3ch.wma   2,6МБ   112 Количество загрузок: (V7.1 COM Port 40 MHz)
Прикрепленный файл  sound05v70_40mhz_3ch.wma   2,96МБ   129 Количество загрузок: (V7.1 COM Port 40 MHz)
Прикрепленный файл  sound06v70_40mhz_3ch.wma   1,11МБ   117 Количество загрузок: (V7.1 COM Port 40 MHz)
Прикрепленный файл  sound07v70_40mhz_3ch.wma   2,19МБ   117 Количество загрузок: (V7.1 COM Port 40 MHz)
40MHz it's not a joke, I have one Atmega8 which starts at 40MHz, but it is only one :(



A small example of PCB with smd components
scheme.JPG

#3 admin

admin

    Администратор

  • Администраторы
  • 76 сообщений

Отправлено 07 Апрель 2014 - 20:16

Just to show you the difference in source code of original emulator & code of my version 9.7 I providing these pictures

Original code

Variables initialization
orig1.png

Envelope & noise generator
orig2.png

External interrupt code
orig3.png

My code

Variables initialization
my1.png

Envelope generator
my21.png

Noise generator
my22.png

External interrupt code
my3.png

#4 admin

admin

    Администратор

  • Администраторы
  • 76 сообщений

Отправлено 07 Август 2014 - 19:04

An example how to play RSF files from EEPROM (Arduino example)

The structure of image for EEPROM is
offset size    description
0 1 byte    number of songs

1 2 byte    offset of song 1
3 2 byte    number of frames of song 1

5 2 byte    offset song 2
7 2 byte    frames of song 2
.....

X 2 byte    offset song N
X 2 byte    frames song N

X RSFFile 1

X RSFFile 2

X RSFFile 3
....

X RSFFile N

Initialization and play

Цитата

Wire.begin();
songs = readEEPROM(disk1, 0);
Serial.begin(19200);
for(int i=0; i<songs; i++) playsong(i);


Functions

Цитата

byte readEEPROM(int deviceaddress, unsigned int eeaddress )
{
  byte rdata = 0;
  Wire.beginTransmission(deviceaddress);
  Wire.write((int)(eeaddress >> 8));   // MSB
  Wire.write((int)(eeaddress & 0xFF)); // LSB
  Wire.endTransmission();
  Wire.requestFrom(deviceaddress,1);
  if (Wire.available()) rdata = Wire.read();
  return rdata;
}

void playsong(byte num)
{
  int offset = readEEPROM(disk1, 1 + num*4) + readEEPROM(disk1, 1 + num*4 + 1)*256;
  int frames = readEEPROM(disk1, 1 + num*4 + 2) + readEEPROM(disk1, 1 + num*4 + 3)*256;

  offset += 16; //RSF header

  int frame = 0;
  byte tmp;

  byte writebuf[16];
  memset(writebuf,0,14);
  writebuf[14] = 0x80;
  writebuf[15] = 0x7F;


  unsigned int tmp2, skip;

  while( frame < frames )
  {
skip = 1;
tmp = readEEPROM(disk1, offset++);
if(tmp == 0xFE)
{
  tmp = readEEPROM(disk1, offset++);
  skip = tmp * 16;
}
else if(tmp == 0xFD)
{
  tmp = readEEPROM(disk1, offset++);
  skip = tmp * 2;
}
else if(tmp != 0xFF)
{
  tmp2 = tmp * 256;
  tmp2 += readEEPROM(disk1, offset++);
  byte reg = 0;
  writebuf[13] = 0xFF;
  while(tmp2 > 0 && reg < 14)
  {
  if(tmp2 & 1 == 1)
  {
writebuf[reg] = readEEPROM(disk1, offset++);
  }
  tmp2 >>= 1;
  reg++;
  }
  Serial.write(writebuf,16);
}
for(int i = 1; i <= skip; i++) delay(20);

frame += skip;
  }
  //stop
  memset(writebuf,0,14);
  writebuf[7] = 63;
  Serial.write(writebuf,16);
  Serial.write(writebuf,16);
}







Темы с аналогичным тегами Atmega8, Emulator, Эмулятор, AVR, AY-8910, AY-3-8910, AY-3-8912, ZX-Spectrum, Speccy

Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 скрытых пользователей

Рейтинг@Mail.ru