mirror of
https://github.com/ondra-novak/gates_of_skeldal.git
synced 2025-07-16 03:06:45 -04:00
74 lines
1.8 KiB
C
74 lines
1.8 KiB
C
/*
|
|
PCSPEAKER TESTING
|
|
|
|
Tento program testuje knihovnu PCSPEAK.ASM.
|
|
Program alokuje 64Kb v dolni casti pameti. Pote zacne tento blok prehravat
|
|
stale dokola rychlosti 16000 Hz. Prehrava se nahodny obsah, takze by mel byt
|
|
slyset nejakej sum nebo neco podobneho.
|
|
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <conio.h>
|
|
#include <pcspeak.h>
|
|
#include <i86.h>
|
|
|
|
UWORD seg; //Segment bufferu
|
|
UWORD sel; //Selector na buffer
|
|
|
|
//Funkce pro alokaci v dolni casti pameti.
|
|
// Alloc dos memory
|
|
void dosalloc (unsigned para,unsigned short *rmseg,unsigned short *select)
|
|
{
|
|
union REGS regs;
|
|
|
|
regs.w.ax = 0x100;
|
|
regs.w.bx = para;
|
|
int386 (0x31,®s,®s);
|
|
*rmseg = regs.w.ax;
|
|
*select = regs.w.dx;
|
|
}
|
|
|
|
//Funkce pro uvolneni v dolni casti pameti.
|
|
// Free dos memory
|
|
void dosfree (unsigned short select)
|
|
{
|
|
union REGS regs;
|
|
|
|
regs.w.ax = 0x101;
|
|
regs.w.dx = select;
|
|
int386 (0x31,®s,®s);
|
|
}
|
|
|
|
void alloc_buffer() //nejprve se zaalokuje buffer
|
|
{
|
|
dosalloc(65536/16,&seg,&sel);
|
|
}
|
|
|
|
void dealloc_buffer() //dealokace
|
|
{
|
|
dosfree(sel);
|
|
}
|
|
|
|
void speaker_test()
|
|
{
|
|
puts("Init...");
|
|
rm_proc_set(seg,sel,PORT_SPK,SPK_MODE);//Nastav rm_proc
|
|
load_rm_proc(); //nahraj rm_proc do dolni pameti
|
|
pc_speak_enable(); //PCSPEAKER do modu DAC (pokud se hraje na spk)
|
|
pc_speak_run(19000,18); //Zacni prehravat buffer (18Hz emulacni frekvence)
|
|
puts("Running...");
|
|
getche(); //cekej na klavesu
|
|
puts("Stopping...");
|
|
pc_speak_stop(); //Zastav prehravani
|
|
pc_speak_disable(); //PCSPEAKER vrat do normalniho rezimu
|
|
purge_rm_proc(); //vymaz rm_proc z dolni pameti
|
|
puts("Ending...");
|
|
}
|
|
|
|
void main()
|
|
{
|
|
alloc_buffer(); //Alokuj buffer
|
|
speaker_test(); //Test
|
|
dealloc_buffer(); //Dealokuj buffer
|
|
}
|