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.
Praxe znamená, že vše funguje, ale nevíme proč. Teorie znamená, že vše víme, ale nic nefunguje.
Někdy je teorie spojena s praxí. Znamená to, že nic nefunguje a nikdo neví proč ...
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
Do souboru test.zip jsi dal asi špatnej com soubor. 66B místo 921B.
3x 486: MB: 486PIO-3, CPU: Am5x86 P75 @133, RAM: 64MB EDO (!), HDD: 4GB CF, VGA: S3 ViRGE/DX 375 4MB (30ns), OS: Windows 98 SE SP2
WWW: Doupě
Tady je trošku srozumitelnej příklad na obsluhu přerušení:
http://faculty.kfupm.edu.sa/COE/aimane/assembly/pagegen-143.aspx.htm
Praxe znamená, že vše funguje, ale nevíme proč. Teorie znamená, že vše víme, ale nic nefunguje.
Někdy je teorie spojena s praxí. Znamená to, že nic nefunguje a nikdo neví proč ...
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
Ještě promysli zda je nutné v rutině int_h schovávat a pak obnovovat všechny registry asi by tam šlo nějaký čas ušetřit. Třeba BX CX DX SI když se tak děje 22000 za sec. tak by to pomalým PC dost ulevilo.
Praxe znamená, že vše funguje, ale nevíme proč. Teorie znamená, že vše víme, ale nic nefunguje.
Někdy je teorie spojena s praxí. Znamená to, že nic nefunguje a nikdo neví proč ...
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 :-)
PIII už je na ten program v1 tak rychlý že při měření rychlosti přeteče čítač a počítá znova dokola . Musel by být na více Bajtů aby to fungovalo. Takže je i při přehrávání nepoužitelný.
Praxe znamená, že vše funguje, ale nevíme proč. Teorie znamená, že vše víme, ale nic nefunguje.
Někdy je teorie spojena s praxí. Znamená to, že nic nefunguje a nikdo neví proč ...
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);
}
Praxe znamená, že vše funguje, ale nevíme proč. Teorie znamená, že vše víme, ale nic nefunguje.
Někdy je teorie spojena s praxí. Znamená to, že nic nefunguje a nikdo neví proč ...
Nejvíce uživatelů online: 351
Právě online:
179 Host(é)
Právě prohlíží tuto stránku:
1 Host(é)
Statistiky uživatelů:
Hosté: 14
Členové: 684
Moderátoři: 0
Administrátoři: 1
Statistiky fóra:
Skupiny: 5
Fóra: 24
Témata: 1415
Příspěvky: 23914
Nejnovější uživatelé:
Pluto, Brbla, VasilijP, Snnsnsnn, Franta, pepapantak, isidor, Wolis, Martin Rulf, bujny, Pavel Pavel, LEON Pilot, Jan “Druid” Schicho, POLÁŠEK TOMÁŠ, StanosAdministrátoři: Sledge: 5644