No permission to create posts
RSS

HLAS - Prográmek na syntézu řeči přes pípák

18/02/2018 - 21:15
Avatar
MilasPce
Pardubice

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.

18/02/2018 - 22:06
Avatar

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

18/02/2018 - 22:09
Avatar

@MilasPce asi máš pravdu a povede to na to co popisuješ. Bude to pro mě ale trochu maturita :-)

19/02/2018 - 09:55
Avatar
Praha

Do souboru test.zip jsi dal asi špatnej com soubor. 66B místo 921B.

19/02/2018 - 10:44
Avatar
MilasPce
Pardubice

Tady je trošku srozumitelnej příklad na obsluhu přerušení:

http://faculty.kfupm.edu.sa/COE/aimane/assembly/pagegen-143.aspx.htm

19/02/2018 - 20:39
Avatar

Powerack napsal(a)
Do souboru test.zip jsi dal asi špatnej com soubor. 66B místo 921B.  

V tom com-u není celej program hlas, je to jen izolovaná část kódu co mi nefunguje. Zajímá mě jen zda na železe taky vythuhne nebo zda se vrátí do příkaz. řádky.

19/02/2018 - 20:40
Avatar

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.

19/02/2018 - 20:46
Avatar
MilasPce
Pardubice

už mi taky nefunguje, dneska mám na odkazy špatnej den.

21/02/2018 - 17:32
Avatar

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.

21/02/2018 - 18:32
Avatar
MilasPce
Pardubice

Dobrá práce, koukám, že příští soutěž v programovaní bude v asembleru. Zítra to zkusím na mašině.

21/02/2018 - 19:22
Avatar
MilasPce
Pardubice

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. 

21/02/2018 - 19:32
Avatar

Máš samozřejmě pravdu. Naopak by bylo vhodné sejvnout flagy.

21/02/2018 - 20:46
Avatar

berk napsal(a)
Máš samozřejmě pravdu. Naopak by bylo vhodné sejvnout flagy.  

IRET pops from stack: IP,CS and flags.

Takže flagy jsou sejvnutý v přerušení automaticky.

22/02/2018 - 21:57
Avatar

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 :-)

23/02/2018 - 09:18
Avatar
MilasPce
Pardubice

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ý.

23/02/2018 - 13:18
Avatar

Je to tak. Nicméně měření počtu cyklů za časový úsek není v případě moderních procesorů s funkcemi pipeline atp. ideální metoda. Ten tvůj nápad s timerem je spolehlivější.

23/02/2018 - 15:07
Avatar
MilasPce
Pardubice

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);
}

23/02/2018 - 19:35
Avatar

Jo, vzpomínám si když jsem zkoušel svoje první hry, tak běžely na každém počítači jinak rychle a za prase jsem nemohl přijít na to jak to vyladit aby to běželo všude stejně :-)

No permission to create posts
Časové pásmo: Europe/Prague

Nejvíce uživatelů online: 351

Právě online: Sledge
30 Host(é)

Nejaktivnejší uživatelé:

LubikCZ: 2166

MilasPce: 1512

Sany: 1498

Neny: 1136

Powerack: 967

Logout: 934

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, Logisofter

Administrátoři: Sledge: 5655

Podpořit finančním příspěvkem »

Podpořit high-voltage.cz na STARTOVAČI

20 patronů přispívá částkou 2348 Kč měsíčně

Je to malá dvacka pro čtenáře, ale velká vzpruha pro HV! ;)
Podpořit nákupem na e-shopu »
Retro podložka pod myš DIDAKTIK - 228x189x2mmRetro podložka pod myš DIDAKTIK - 228x189x2mm 197 Kč
Shadow bazar, retro herní džungle