/* 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ň