mirror of
https://github.com/ondra-novak/gates_of_skeldal.git
synced 2025-07-15 02:36:40 -04:00
game folder "just" compiles (not link)
This commit is contained in:
parent
13d3908273
commit
1b0f7fe0c2
135 changed files with 2161 additions and 2336 deletions
137
libs/pcspeak.h
Normal file
137
libs/pcspeak.h
Normal file
|
@ -0,0 +1,137 @@
|
|||
#define SPK_MODE 1
|
||||
#define DAC_MODE 0
|
||||
|
||||
#define PORT_LPT1 0x378
|
||||
#define PORT_LPT2 0x278
|
||||
#define PORT_SPK 0x42
|
||||
|
||||
#define UWORD unsigned short
|
||||
|
||||
void rm_proc_set(UWORD bufseg,UWORD bufsel,UWORD port,UWORD mode);
|
||||
#pragma aux rm_proc_set parm [eax][edx][ecx][ebx] modify [esi edi]
|
||||
|
||||
char load_rm_proc(void);
|
||||
#pragma aux load_rm_proc modify [eax ebx ecx edx esi edi] value [al]
|
||||
|
||||
char purge_rm_proc(void);
|
||||
#pragma aux purge_rm_proc modify [edx eax] value [al]
|
||||
|
||||
void pc_speak_run(long s_freq,long sim_freq);
|
||||
#pragma aux pc_speak_run parm[eax][edx] modify [ecx ebx]
|
||||
|
||||
void pc_speak_stop(void);
|
||||
#pragma aux pc_speak_stop modify [eax ebx ecx edx]
|
||||
|
||||
void pc_speak_enable(void);
|
||||
#pragma aux pc_speak_enable modify [eax]
|
||||
|
||||
void pc_speak_disable(void);
|
||||
#pragma aux pc_speak_enable modify [eax]
|
||||
|
||||
long pc_speak_position(void);
|
||||
#pragma aux pc_speak_position modify[eax ebx] value [eax]
|
||||
|
||||
void pc_speak_set_proc(long *c);
|
||||
#pragma aux pc_speak_set_proc parm [edi]
|
||||
|
||||
/* Zde jsou nejake komentare */
|
||||
|
||||
/*
|
||||
|
||||
void rm_proc_set;
|
||||
Vstup: bufseg - segmen bufferu v konvenci realneho rezimu
|
||||
bufsel - selektor tohoto segmentu (protect rezim)
|
||||
port - cislo portu - je mozne vyuzit konstant PORT_LPT? nebo PORT_SPK
|
||||
mode - zde vyuzij konstant SPK_MODE nebo DAC_MODE podle zarizeni.
|
||||
Vystup: -
|
||||
Komentar: Podprogram nastavuje parametry rm procedury pro spravne prehravani
|
||||
Je nutne provest pred load_rm_proc.
|
||||
MODE musi korespondovat s PORTem, je-li PORT=PORT_SPK, pak
|
||||
MODE=SPK_MODE
|
||||
Nemusim doufam rikat ze bufseg a bufsel musi popisovat stejny
|
||||
segment.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
|
||||
void load_rm_proc;
|
||||
Vstup: -
|
||||
Vystup:nenulova hodnota v pripade nedostatku dolni pameti.
|
||||
Komentar: Funkce nahraje do realne pameti (do 1MB) rm_proc pro prehravani
|
||||
Rm_proc pak zajisti spravnou obsluhu preruseni v realnem rezimu
|
||||
|
||||
-------------------------------------------------------------------
|
||||
|
||||
void purge_rm_proc;
|
||||
vstup: -
|
||||
Vystup:nenulova hodnota oznamuje ze se nepodarilo rm_proc uvolnit z pameti.
|
||||
Komentar: Funkce uvolni pamet, ktera byla alokovana funkci load_rm_proc.
|
||||
Tim dojde ke zniceni rm_proc.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
|
||||
void pc_speak_run;
|
||||
vstup: s_freq - samplovaci frekvence v Hz (treba 22050)
|
||||
sim_freq - frekvence simulace INT 8. Bezne 18Hz. (frekvence je priblizna)
|
||||
vystup:zacne se prehravat
|
||||
Komentar: Funkce alokuje preruseni INT 8 a spusti ho rychlosti danou S_FREQ.
|
||||
pm_proc se navic simuluje puvodni INT 8 frekvenci sim_freq.
|
||||
simulace INT 8 neprobiha v realnem rezimu, pouze v chranennem.
|
||||
(pozor na DOS). Behem simulace je preruseni povolene (chranenne
|
||||
zavorou v pm_proc). Pokud chces pouzivat INT 8, nesmis zakazovat
|
||||
preruseni behem jeho zpracovavani, zabranis tak casovym ztratam
|
||||
na INT 8.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
|
||||
void pc_speak_stop;
|
||||
vstup: -
|
||||
vystup:-
|
||||
Komentar: Zastavi prehravani. Hodiny neobnovuje - spravny cas si
|
||||
musis nastavit sam (nejlepe z CMOS).
|
||||
|
||||
|
||||
-------------------------------------------------------------------
|
||||
|
||||
void pc_speak_enable;
|
||||
void pc_speak_disable;
|
||||
|
||||
enable - zapina PC SPEAKER v rezimu 6-bitoveho DAC.
|
||||
disable - vraci nastaveni PC SPEAKERu zpet do puvodniho rezimu.
|
||||
|
||||
|
||||
-------------------------------------------------------------------
|
||||
|
||||
long pc_speak_position(void);
|
||||
|
||||
Vstup: -
|
||||
Vystup: long offset do bufferu. Vraci prave preravanou pozici
|
||||
Komentar: sice vraci long, ale offset je v rozsahu <0-64Kb>. Vzhledem k
|
||||
casovym ztratam muze vracena pozice byt starsi uz v dobe
|
||||
predavani vysledku. Presnost zavisi na rychlosti pocitace.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
|
||||
void pc_speak_set_proc;
|
||||
Vstup: Ukazatel na ukazatel na void (ackoliv je tam long *)
|
||||
Vystup:-
|
||||
Komentar: Procedura modifikuje promennou kam ukazuje parametr tak aby
|
||||
obsahovala adresu na proceduru pc_speak_position.
|
||||
Volanim teto adresy lze pak docilit stejne funkce jako
|
||||
volanim primeho pc_speak_position.
|
||||
Oba zpusoby jsou rovnocenne.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
|
||||
|
||||
Doporuceny postup:
|
||||
|
||||
rm_proc_set(...);//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(...); //Zacni prehravat buffer
|
||||
......
|
||||
pc_speak_stop(); //Zastav prehravani
|
||||
pc_speak_disable(); //PCSPEAKER vrat do normalniho rezimu
|
||||
purge_rm_proc(); //vymaz rm_proc z dolni pameti
|
||||
|
||||
*/
|
Loading…
Add table
Add a link
Reference in a new issue