/* Demonstracni program ke ctvrtemu dilu kursu
- zpozdovaci smycka */
#include <dos.h> // outportb(), inportb()
#include <conio.h> // kbhit(), getch()
#define HHrana 5000ul // Horni uvrat
#define DHrana 65000ul // Dolni uvrat
#define Rychlost 100u // Rychlost prouzku
#define Sirka 5000u // Sirka prouzku
/*
Protoze ladim na 486/66DX2, musel jsem dost zvysit konstanty,
takze jsem radeji pouzil unsigned a unsigned long typy.
*/
#define WRITE_COL 0x3C8 // port pro vyber zapisu barvy
#define RGB_COL 0x3C9 // port pro cteni/zapis barevnych
slozek
#define CGA_STAT 0x3DA // stavovy port zobrazovace
void CekejRet(void)
// Cekani na retrace.
{
while (inportb(CGA_STAT) & 0x8) // cekam na konec retrace
;
while (!(inportb(CGA_STAT) & 0x8)) // cekam na zacatek retrace
;
}
void Cervena(void)
// Nastavi barvu 0 jako cervenou.
{
outportb(WRITE_COL, 0);
outportb(RGB_COL, 63);
outportb(RGB_COL, 0);
outportb(RGB_COL, 0);
}
void Cerna(void)
// Nastavi barvu 0 jako cernou.
{
outportb(WRITE_COL, 0);
outportb(RGB_COL, 0);
outportb(RGB_COL, 0);
outportb(RGB_COL, 0);
}
void main(void)
{
unsigned Citac;
unsigned long Pozice;
Pozice = HHrana; // zacinam v horni uvrati
do { // hlavni, nekonecna smycka
do {
disable(); // zakazu preruseni
CekejRet(); // cekam na retrace a pocitam pauzu
for (Citac = 1; Citac <= Pozice; Citac++)
;
Cervena(); // zacnu cerveny pruh, pocitam sirku
for (Citac = 1; Citac <= Sirka; Citac++)
;
Cerna(); // koncim cerveny pruh
enable(); // povolim preruseni
Pozice += Rychlost; // vypocitam pristi polohu prouzku
} while (Pozice <= DHrana && !kbhit()); // az po dolni uvrat
do {
disable(); // zakaz preruseni
CekejRet();
for (Citac = 1; Citac <= Pozice; Citac++)
;
Cervena();
for (Citac = 1; Citac <= Sirka; Citac++)
;
Cerna();
enable();
Pozice -= Rychlost;
} while (Pozice >= HHrana && !kbhit()); // az po horni uvrat
} while (!kbhit());
if (getch() == 0) // radeji vyberu klavesu z bufferu
getch(); // pri rozsirenem kodu
}
/* Demonstracni program ke ctvrtemu dilu kursu -
zpozdeni pomoci delay() */
#include <dos.h> // outportb(), inportb(), delay()
#include <conio.h> // kbhit(), getch()
#define HHrana 1 // Horni uvrat
#define DHrana 12 // Dolni uvrat
#define Rychlost 1 // Rychlost prouzku
#define Sirka 1 // Sirka prouzku
#define WRITE_COL 0x3C8 // port pro vyber zapisu barvy
#define RGB_COL 0x3C9 // port pro cteni/zapis barevnych
slozek
#define CGA_STAT 0x3DA // stavovy port zobrazovace
void CekejRet(void)
// Cekani na retrace.
{
while (inportb(CGA_STAT) & 0x8) // cekam na konec retrace
;
while (!(inportb(CGA_STAT) & 0x8)) // cekam na zacatek retrace
;
}
void Cervena(void)
// Nastavi barvu 0 jako cervenou.
{
outportb(WRITE_COL, 0);
outportb(RGB_COL, 63);
outportb(RGB_COL, 0);
outportb(RGB_COL, 0);
}
void Cerna(void)
// Nastavi barvu 0 jako cernou.
{
outportb(WRITE_COL, 0);
outportb(RGB_COL, 0);
outportb(RGB_COL, 0);
outportb(RGB_COL, 0);
}
void main(void)
{
int Pozice;
Pozice = HHrana; // zacinam v horni uvrati
do { // hlavni, nekonecna smycka
do {
disable(); // zakazu preruseni
CekejRet(); // cekam na retrace a pocitam pauzu
delay(Pozice);
Cervena(); // zacnu cerveny pruh, pocitam sirku
delay(Sirka);
Cerna(); // koncim cerveny pruh
enable(); // povolim preruseni
Pozice += Rychlost; // vypocitam pristi polohu prouzku
} while (Pozice <= DHrana && !kbhit()); // az po dolni uvrat
do {
disable(); // zakaz preruseni
CekejRet();
delay(Pozice);
Cervena();
delay(Sirka);
Cerna();
enable();
Pozice -= Rychlost;
} while (Pozice >= HHrana && !kbhit()); // az po horni uvrat
} while (!kbhit());
if (getch() == 0) // radeji vyberu klavesu z bufferu
getch(); // pri rozsirenem kodu
}
/* Demonstracni program ke ctvrtemu dilu kursu
- zpozdeni pres HorSync, stinovani */
#include <dos.h> // outportb(), inportb(), delay()
#include <conio.h> // kbhit(), getch()
#define HHrana 1 // Horni uvrat
#define DHrana 250 // Dolni uvrat
#define Rychlost 1 // Rychlost prouzku
#define Sirka 63 // Sirka prouzku
#define WRITE_COL 0x3C8 // port pro vyber zapisu barvy
#define RGB_COL 0x3C9 // port pro cteni/zapis barevnych
slozek
#define CGA_STAT 0x3DA // stavovy port zobrazovace
void CekejRet(void)
// Cekani na retrace.
{
while (!(inportb(CGA_STAT) & 0x8)) // cekam na zacatek retrace
;
while (inportb(CGA_STAT) & 0x8) // cekam na konec retrace
;
}
void CekejHor(void)
{
while (inportb(CGA_STAT) & 0x9) // cekam na konec retrace
;
while (!(inportb(CGA_STAT) & 0x9)) // cekam na zacatek retrace
;
}
void Cervena(int Odstin)
// Nastavi barvu 0 jako cervenou.
{
outportb(WRITE_COL, 0);
outportb(RGB_COL, Odstin);
outportb(RGB_COL, 0);
outportb(RGB_COL, 0);
}
void Cerna(void)
// Nastavi barvu 0 jako cernou.
{
outportb(WRITE_COL, 0);
outportb(RGB_COL, 0);
outportb(RGB_COL, 0);
outportb(RGB_COL, 0);
}
void main(void)
{
int Pozice, Citac, Odstin;
Pozice = HHrana; // zacinam v horni uvrati
do { // hlavni, nekonecna smycka
do {
disable(); // zakazu preruseni
CekejRet(); // cekam na retrace a pocitam pauzu
for (Citac = 1; Citac <= Pozice; Citac++)
CekejHor();
for (Odstin = 0; Odstin <= Sirka; Odstin++)
{
CekejHor();
Cervena(Odstin);
}
for (Odstin = Sirka; Odstin >= 0; Odstin--)
{
CekejHor();
Cervena(Odstin);
}
enable(); // povolim preruseni
Pozice += Rychlost; // vypocitam pristi polohu prouzku
} while (Pozice <= DHrana && !kbhit()); // az po dolni uvrat
do {
disable(); // zakaz preruseni
CekejRet();
for (Citac = 1; Citac <= Pozice; Citac++)
CekejHor();
for (Odstin = 0; Odstin <= Sirka; Odstin++)
{
CekejHor();
Cervena(Odstin);
}
for (Odstin = Sirka; Odstin >= 0; Odstin--)
{
CekejHor();
Cervena(Odstin);
}
enable();
Pozice -= Rychlost;
} while (Pozice >= HHrana && !kbhit()); // az po horni uvrat
} while (!kbhit());
if (getch() == 0) // radeji vyberu klavesu z bufferu
getch(); // pri rozsirenem kodu
}
výheň