
HLAS - Prográmek na syntézu řeči přes pípák
Nejlepší bude nastudovat jak přes DOS službu INT 21 a její funkce 35h a 25h (get interrupt vector, set interrupt vector) si přesměrovat obsluhu přerušení (nejlépe softwarovou 1C) na sebe a pak stačí mít jednu proměnnou, kterou budeš ve vlastní obsluze přerušení 18,2x za sec. třeba inkrementovat.
V hlavním programu pak budeš čekat až dosáhne určité hodnoty (pak ji vynuluješ pro znovu počítání).
Hlavně nezapomenout na konci programu vrátit pomocí Set interrupt vector obsluhu zpátky na původní hodnotu.
PS: je dobré ve vlastním obslužném programu volat ten původní podprogram, co když nějaký software si to již přesměroval.
PPS: Assembler pro PC jsem si vytáhl před mnoha lety jako otázku u maturity.
Powerack napsal(a)
Pošli přeloženej com soubor a já to checknu. Mám tady na stole svou 386, takže stačí jen zapnout...
Nedaří se mi to připojit sem, tak jsem to dal na github:
https://github.com/berk76/hlas/releases/tag/version_1.0.0
Je to v tom souboru Test.zip. Pokud to zafunguje tak se vrátí hned zpátky do příkazové řádky. Pokud ne tak zamrzne.
Tak to pro zajímavost vyzkoušej.
Díky
Tady je trošku srozumitelnej příklad na obsluhu přerušení:
http://faculty.kfupm.edu.sa/COE/aimane/assembly/pagegen-143.aspx.htm
MilasPce napsal(a)
Tady je trošku srozumitelnej příklad na obsluhu přerušení:http://faculty.kfupm.edu.sa/COE/aimane/assembly/pagegen-143.aspx.htm
Nevím proč, ale odkaz mi nefunguje. Zkusím ještě později jestli se nerozeběhne.
Tak mám první upravenou verzi.
Nainstaloval jsem vlastní interrupt handler jak navrhoval MilasPce a nastavil mu custom frekvenci. Původní kód založený na měření rychlosti cpu jsem vykostil.
https://github.com/berk76/hlas/blob/master/hlas.asm
Binárka je k dispozici zde. (hlas.com je původní verze, hlas_2.com je upravená)
https://github.com/berk76/hlas/releases/tag/version_1.0.0
V DosBoxu to funguje dobře, ale nedokážu otestovat na reálném železe a porovnat různě rychlé pc-čka.
Pokud to někdo dokážete otestovat a porovnat tak dejte vědět.
Úpravy jsou vidět zde:
https://github.com/berk76/hlas/commit/a3e843396c6097232bee0b42328a5dbd8bf8f958
Tak jsem vykrámoval železo a otestoval.
- Na 386 40Mhz fungují obě verze dobře
- Na PIII je verze 1 zcela nepoužitelná, verze 2 funguje stejně dobře jako na 386
https://github.com/berk76/hlas/releases
Mission complete :-)
Používal jsem časovač i když jsem programoval hry, aby běžely na všech PC stejně rychle. V jazyku C je to velice jednoduché:
#define IRQ8 0x08
unsigned int casovac;
void interrupt (*old_ctc1) ( void );
void interrupt far int_ctc1 ( void )
{ casovac++;
old_ctc1();
}
void ini_ctc ( void )
{ old_ctc1=getvect(IRQ8);
setvect(IRQ8,int_ctc1);
}
void vrat_ctc( void )
{ setvect(IRQ8,old_ctc1);
}
Nejvíce uživatelů online: 351
Právě online: Sledge
30 Host(é)
Statistiky uživatelů:
Hosté: 14
Členové: 713
Moderátoři: 0
Administrátoři: 1
Statistiky fóra:
Skupiny: 5
Fóra: 24
Témata: 1440
Příspěvky: 24053
Nejnovější uživatelé:
gjames, Martin Janočko, jakub crhák, retro, Vince Howerton, Standa, Libertarian771, Mastafos77, sleepingmouse, Fleet, SirKoki, awlo, Jiří Dobrý, Milsa, LogisofterAdministrátoři: Sledge: 5655