Здравия всем.
Вот, подталкиваемый jerri, я решил таки стряхнуть пыль с болдердаша. В связи с чем возник такой вопрос: в игре используются простые звуки на бипер, притом не в фоне, а занимающие время процессора. Сходу нарисовалось вот такое решение эпохи Hisoft Pascal:
В лоб, быстро, однако работает. Но тянет за собой длинное умножение, длинное деление, от чего хотелось бы избавиться. Есть соображения?Код:static void BEEPER (unsigned int a, unsigned int b) { __asm PUSH IX LD IX,#4 ADD IX,SP LD E,0(IX) LD D,1(IX) LD L,2(IX) LD H,3(IX) CALL #0x3B5 POP IX __endasm; } void Sound_Beep (unsigned int freq, unsigned int ms) { /* DE = freq * time ; freq (Hz), time (sec) = ms/1000 HL = 437500/freq-30.125 */ BEEPER(freq*ms/1000, 437500/freq-30); }
Также было бы полезно увидеть реализацию BEEP (freq, ms) для AY и даже для Windows (или SDL). Сам я ничего лучше не придумал, чем генерировать в памяти wav'ку и потом воспроизводить.




Ответить с цитированием
Размещение рекламы на форуме способствует его дальнейшему развитию 


