nothing changes but becomes another

12.12.2012
"ОЧЕНЬ тяжело менять, ничего не меняя , но мы будем ... " М.М.Жванецкий Иные меня сочувственно спрашивали : "Нет ли возможности отползти на более быстрый компьютер?" --- " Ну естественно есть - рядом стоит восьмиядерный " Предлагали и так : Программно или/и с помощью перемычек джамперов разогнать процессор, а для охлаждения процессора к его радиатору прикладывать мокрую тряпочку ))) Вариант с заменой процессора я не рассматриваю вообще Многие говорили , что это impossible , квадрат частоты типа нужен и т.п. Итак : цель --- не касаясь железа убыстрить синтезатор речи, дабы все лицезрели, як добро побеждает зло , а мысль --- железо) The Goal---without touching the hardware to speed up the synthesizer of speech, so that all contemplate, how Good conquers evil, and thought --- hardware) Во избежание путаницы все пункты пронумерованы одиНакого:) 1.Было выяснено , что для генерации звука важен в основном младший байт, применена ассемблерная команда табличного преобразования Xlat 1.Настраивается частота выполнения таймерного прерывания MOV AX,77h;OUT 1000000B,AL;MOV AL,AH; OUT 1000000B,AL; И способ пересылки в Звуковой Порт MOV AL,90h; OUT 1000011B,AL; И тогда пересылать в Звуковой Порт будем 1 Байт:OUT 1000010B,AL; 1.Используется два буфера для вывода на PCspeaker размерами по 64 kB, заполняемый , как ни странно ассемблерной командой операций со стеком Push. При этом в одновременно работающих прерываниях и подпрограммах постоянно выполняются эти команды операций со стеком Push-POP , но путаницы тем не менее не происходит.Т.е. организуется 2 собственных стека.Вычитывается из буфера(Он же стек) обычным способом:SUB DI,2; MOV AL,[DI]; OUT 1000010B,Al; ВОЛЕЮ судеб DI,это регистр процессора,в оригинальной версии Синтезатора Речи не оказался задействован.С помощью POP вычитывать нельзя точно!!! There are two buffers for output on PCspeaker in the size of 64 kB, filled, oddly enough by an assembler command operations with the Push stack. At the same time, interrupts and subroutines run simultaneously 1.Пока заполняется командой один буфер командой Push, другой звучит (данные последовательно по системе Fifo идут на PCspeaker) Затем, после проговаривания одного слова из текста , эти буферы меняются ролями --- происходит их переключение. В этой ситуации пользоваться лишь одним буфером --- писать в него и одновременно читать из него --- нельзя. Происходят "заикания" , так как чтение из буфера равномерно во времени (изохронно), а запись в этот буфер --- не изохронно . И происходят "проскальзывания" , т.е. чтение и озвучивание ещё не записанных данных, а озвучивание оставшихся от прежнего озвучивания данных (в нашем случае одного слова из текста). И как результат --- "заикание" 1.При запуске программы выполняется последовательность приказов mov al , 11h out 20h, al mov al , 08h out 21h, al mov al , 04h out 21h, al mov al , 07h out 21h, al для выполнения таймерного прерывания без команд mov al , 20h out 20h, al (остаётся лишь Iret) Приложение по начальному пун

Похожие видео

Показать еще