http://alexfreed.com/FPGApple/DE1_ZX/ay-8910.v
Вид для печати
I'm not sure, but...
// tone generator
cnt_a <= cnt_a + 1;
if(cnt_a==period_a) <-----
begin
out_a <= ~out_a;
cnt_a <= 0;
end
Is this correct? If next loaded period will be less than current cnt_a value, then cnt_a will count to maximum. Does real ay have this feature?
May be there need some shadow registers for period_a, etc... ?
а чем тебе код не понравился? все правильно -код внутри бегина будет выполнятся только в конце периода - будет менять состояние вывода на противоположное и сбрасывть счетчик этого самого периода. что именно тут тебе не понравилосЬ? тем более это код из работающего проекта.Цитата:
if(cnt_a==period_a) <-----
begin
out_a <= ~out_a;
cnt_a <= 0;
end
мне не понравилось то, что само значение period_a может быть поменяно в любой момент. представь, что оно было 512. счетчик досчитал только до 300, а программер вбил новое значение period_a=256. тогда счетчик будет считать аж до 4095. не думаю что это правильно и хорошо.
я же предлагаю сделать доп. регистр period_a_, который обновлять только в конце периода. либо, на самый крайний случай, поставить не ==, а >=.
тем более;))) не спорю, да, пищать и шипеть он будет:)
Пожалуйте кусочек анрила:
И кусочек эмулятора Бульбы:Код:if (++ta >= fa) ta = 0, bitA ^= -1;
if (++tb >= fb) tb = 0, bitB ^= -1;
if (++tc >= fc) tc = 0, bitC ^= -1;
Код:inc(Ton_Counter_A.Hi);
if Ton_Counter_A.Hi >= RegisterAY.TonA then
begin
Ton_Counter_A.Hi := 0;
Ton_A := Ton_A xor 1
end;
inc(Ton_Counter_B.Hi);
if Ton_Counter_B.Hi >= RegisterAY.TonB then
begin
Ton_Counter_B.Hi := 0;
Ton_B := Ton_B xor 1
end;
inc(Ton_Counter_C.Hi);
if Ton_Counter_C.Hi >= RegisterAY.TonC then
begin
Ton_Counter_C.Hi := 0;
Ton_C := Ton_C xor 1
end;
ну вот, так правильнее. если не теневой регистр (хз как по правде надо), то хотя бы сравнение не жесткое:)
Есть еще реализация от MikeJ на VHDL тут http://www.fpgaarcade.com/library.htm (точнее две реализации). Так вот, у меня почему-то музыка из Treasure Island Dizzy на всех этих трех реализациях играет не корректно, слышно только шум. Кто-то может это проверить у себя. Или намекнуть, чем эта музыка отличается от остальных.
Странно, неужели абсолютно идентичные сигналы на выходе у всех реализаций? Это наталкивает на мысль о том что какая-то часть схемы содрана у всех реализаций с одной. Возможно в самой схеме подключения AY-ка существует проблема и какая нибудь хакерская схема адресации AY-ка в этой Treasure Island Dizzy используется.
Сигналы на выходе просто похожи, не идентичны. Возможно глюк у меня в схеме, по-этому и прошу проверить. Во всех остальных играх, которые смотрел, все ок.