С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
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
Amiga 1200+Blizzard 1260 72 Mb+Mtek 68030,Compozit 128, Leningrad 2,
Atari STE 1040,ZX Spectrum +2,Pentagon 48, Speccy2007 - 2 , ATAS 256k.
ZX Evo 4Mb- в строю.
Speccy2010 v1
Специалист (пока готовлюсь к восстановлению).
Это все мое!
Родное!
Все люблю на свете я! Это родина моя!
мне не понравилось то, что само значение period_a может быть поменяно в любой момент. представь, что оно было 512. счетчик досчитал только до 300, а программер вбил новое значение period_a=256. тогда счетчик будет считать аж до 4095. не думаю что это правильно и хорошо.
я же предлагаю сделать доп. регистр period_a_, который обновлять только в конце периода. либо, на самый крайний случай, поставить не ==, а >=.
тем более)) не спорю, да, пищать и шипеть он будет
Последний раз редактировалось psb; 17.02.2010 в 11:34.
Пожалуйте кусочек анрила:
И кусочек эмулятора Бульбы:Код: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;
Последний раз редактировалось molodcov_alex; 17.02.2010 в 11:16.
ZX Spectrum forever!
ну вот, так правильнее. если не теневой регистр (хз как по правде надо), то хотя бы сравнение не жесткое
Amiga 1200+Blizzard 1260 72 Mb+Mtek 68030,Compozit 128, Leningrad 2,
Atari STE 1040,ZX Spectrum +2,Pentagon 48, Speccy2007 - 2 , ATAS 256k.
ZX Evo 4Mb- в строю.
Speccy2010 v1
Специалист (пока готовлюсь к восстановлению).
Это все мое!
Родное!
Все люблю на свете я! Это родина моя!
Есть еще реализация от MikeJ на VHDL тут http://www.fpgaarcade.com/library.htm (точнее две реализации). Так вот, у меня почему-то музыка из Treasure Island Dizzy на всех этих трех реализациях играет не корректно, слышно только шум. Кто-то может это проверить у себя. Или намекнуть, чем эта музыка отличается от остальных.
Speccy2007 v1.06
Speccy2010 v1.00
Странно, неужели абсолютно идентичные сигналы на выходе у всех реализаций? Это наталкивает на мысль о том что какая-то часть схемы содрана у всех реализаций с одной. Возможно в самой схеме подключения AY-ка существует проблема и какая нибудь хакерская схема адресации AY-ка в этой Treasure Island Dizzy используется.
Сигналы на выходе просто похожи, не идентичны. Возможно глюк у меня в схеме, по-этому и прошу проверить. Во всех остальных играх, которые смотрел, все ок.
Speccy2007 v1.06
Speccy2010 v1.00
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)