---
# System prepended metadata

title: 'Projekt: Produkcja demoscenowa'

---

# Projekt: Produkcja demoscenowa

## Konspekt zajęć

### Warsztaty 1: Konfiguracja środowiska pracy

**8 października 2021**

Na zajęcia należy przygotować środwisko z system Debian Linux/GNU 11. Środowisko może pracować na innych dystrybucjach i systemie macOS, ale na pewno **nie działa** pod Windowsem włączając w to WSL.

 * kompilator, linker, asembler, debugger i emulator fs-uae
 * budowanie, uruchamianie i debugowanie efektu
 * struktura efektu
 * drukowanie komunikatów diagnostycznych
 * system budowania
 * konwertery danych i inne narzędzia [tools](https://github.com/cahirwpz/demoscene/tree/master/tools)

#### Zadanie domowe

1. Przygotuj środowisko pracy, zmodyfikuj jakiś efekt i uruchom go. Sprawdź czy jesteś go w stanie debugować. Prześlij zrzut ekranu z działającym efektem i `gdb-dashboard`.
2. Przyjrzyj się światu dookoła, znajdź w nim ciekawe zjawisko lub rzecz, która może służyć za inspirację na efekt. Dostarcz zdjęcie lub krótki filmik.

### Warsztaty 2: Optymalizacja pod M68000

**15 października 2021**

 * omówienie modelu programowania (rejestry, stos, instrukcje)
 * podglądanie kodu wynikowego
 * zliczanie cykli instrukcji
 * profilowanie fragmentów kodu
 * zastępowanie kosztownych operacji
 * rozwijanie pętli
 * generowanie kodu - procedura [MakeUVMapRenderCode](https://github.com/cahirwpz/demoscene/blob/master/effects/uvmap/uvmap.c#L55)
 * wstawki asemblerowe
 * tablicowanie wyników
 * obliczenia fixed-point
 * szybkie generowanie liczb pseudolosowych
 * łączenie C z asemblerem i konwencja wołania procedur
 * zasady wyrównywania adresów i rejestr SP
 * omówienie pętli głównej efektu [uvmap](https://github.com/cahirwpz/demoscene/blob/master/effects/uvmap)

#### Zadanie domowe:

Praca domowa 2 (termin 22.10.2021)

1. Zainstaluj środowisko `Processing` i uruchom jeden z prototypów w katalogu `prototypes`. Prześlij zrzut ekranu z działającym prototypem efektu.
2. Zmodyfikuj prototyp efektu `uvmap`. Dopisz nowy generator mapy w `generators.pde` i podczep go do tablicy generators w pliku `distortions.pde`. Prześlij krótki filmik z działania efektu. Za to zadanie można dostać punkty bonusowe!

<!---
1. Policz ile cykli procesora per piksel zaoszczędziło generowanie kodu w `uvmap`.
--->

### Warsztaty 3: Układy specjalizowane, raster i copper

**22 października 2021**

 * specyfikacja komputera Amiga 500
 * omówienie funkcji układów specjalizowanych Amigi
 * pamięć CHIP vs FAST
 * czym jest raster?
 * pozycja promienia rastra (color clock)
 * timingi dla sygnału PAL (v-blank, h-blank)
 * instrukcje coppera MOVE, WAIT i SKIP
 * copper lista: tworzenie, modyfikacja, terminacja
 * włączanie i wyłączanie coppera (DMA)
 * obchodzenie ograniczeń instrukcji coppera (linie ≤ 256)
 * podwójne buforowanie
 * najczęstsze scenariusze użycia coppera
 * omówienie wyświetlania grafiki w efekcie [stripes](https://github.com/cahirwpz/demoscene/blob/master/effects/stripes/stripes.c)

#### Zadanie domowe:

**TODO**

### Warsztaty 4: Grafika bitmapowa 

**29 października 2021**

 * reprezentacja grafiki bitmapowej w pamięci
 * reprezentacja przepleciona (_interleaved_)
 * konfiguracja okna wyświetlania
 * konfiguracja układu pobierającego bitplany: start, stop, modulo
 * przypisywanie kolorów do wartości pikseli
 * scrolling poziomy i pionowy
 * tryb _hold-and-modify_ i _extra-halfbrite_
 * split-screen na przykładzie [blurred](https://github.com/cahirwpz/demoscene/blob/master/effects/blurred/blurred.c) i [highway](https://github.com/cahirwpz/demoscene/blob/master/effects/highway/highway.c)
 * tryb _dual playfield_ – efekt [credits](https://github.com/cahirwpz/demoscene/blob/master/effects/credits/credits.c)
 * lustrzane odbicie – efekt [blurred3d](https://github.com/cahirwpz/demoscene/blob/master/effects/blurred3d/blurred3d.c)
 * przygotowanie palety – efekt aberracji chromatycznej [glitch](https://github.com/cahirwpz/demoscene/blob/master/effects/glitch/glitch.c) i przezroczystości [transparency](https://github.com/cahirwpz/demoscene/blob/master/effects/transparency/transparency.c)
 * symulacja ruchu przy pomocy rotacji palety – efekt [neons](https://github.com/cahirwpz/demoscene/blob/master/effects/neons/neons.c)
 * wyświetlanie grafiki większej niż ekran – efekt [tiles16](https://github.com/cahirwpz/demoscene/blob/master/effects/tiles16/tiles16.c)

#### Zadanie domowe:

**TODO**

### Warsztaty 5: Blitter

**5 listopada 2021**

 * najczęstsze scenariusze użycia blittera
 * reprezentacja danych dla blittera
 * projektowanie funkcji blittera przy użyciu mintermów
 * właściwości i konfiguracja kanałów blittera
 * maski i przesunięcia
 * tryby pracy: w przód i w tył
 * wystartowanie operacji i oczekiwanie na zakończenie
 * [diagram](http://amigadev.elowar.com/read/ADCD_2.1/Hardware_Manual_guide/node02DD.html) architektury blittera
 * kopiowanie obszarów [BlitterCopy](https://github.com/cahirwpz/demoscene/blob/master/lib/libblit/BlitterCopy.c)
 * cookie-cut [BlitterCopyMasked](https://github.com/cahirwpz/demoscene/blob/master/lib/libblit/BlitterCopyMasked.c)
 * rysowanie krawędzi i linii [BlitterLine](https://github.com/cahirwpz/demoscene/blob/master/lib/libblit/BlitterLine.c)
 * wypełnianie obszarów [BlitterFillArea](https://github.com/cahirwpz/demoscene/blob/master/lib/libblit/BlitterFillArea.c) – efekt [anim](https://github.com/cahirwpz/demoscene/blob/master/effects/anim/anim.c)

<small>Można przypomnieć [algorytm Bresenhama](https://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm) służący do rysowania linii.</small>

#### Zadanie domowe:

**TODO**

**UWAGA!!!** To jest dobry moment, żeby studenci zaczęli szperać za inspiracjami do efektów!

### Warsztaty 6: Duszki aka sprajty

**19 listopada 2021**

 * rozmiar i kolory sprajtów
 * reprezentacja sprajtów w pamięci
 * priorytety wyświetlania warstw
 * programowanie kanałów DMA sprajtów
 * zmiana pozycji sprajta
 * ponowne używanie kanału DMA sprajta
 * tryb ręczny i zwielokrotnianie sprajta
 * wykrywanie kolizji między sprajtami i playfield'em
 * rendering do sprajtów – efekt [ball](https://github.com/cahirwpz/demoscene/blob/master/effects/ball/ball.c)
 
#### Zadanie domowe:

**TODO**

### Warsztaty 7: Zaawansowane techniki renderingu

**26 listopada 2021**

 * copper-chunky: skoki i pętle w programie copper'a – efekt [plasma](https://github.com/cahirwpz/demoscene/blob/master/effects/plasma/plasma.c) i [tiles8](https://github.com/cahirwpz/demoscene/blob/master/effects/tiles8/tiles8.c)
 * copper: generowanie przerwań i czekanie na blittera
 * wyświetlanie w trybie HAM6 – efekt [bumpmap-rgb](https://github.com/cahirwpz/demoscene/blob/master/effects/bumpmap-rgb/bumpmap-rgb.c)
 * wymiana kolorów co linię rastra – efekt [showpchg](https://github.com/cahirwpz/demoscene/blob/master/effects/showpchg/showpchg.c)
 * symulacja [motion blur](https://en.wikipedia.org/wiki/Motion_blur) na podstawie efektu [anim](https://github.com/cahirwpz/demoscene/blob/master/effects/anim/anim.c) i [shapes](https://github.com/cahirwpz/demoscene/blob/master/effects/shapes/shapes.c)
 * składanie rastra z prerenderowanych linii – efekt [prisms](https://github.com/cahirwpz/demoscene/blob/master/effects/prisms/prisms.c) i [twister-rgb](https://github.com/cahirwpz/demoscene/blob/master/effects/twister-rgb/twister-rgb.c)
 * kolorowanie semi-statycznych obrazów – efekt [floor](https://github.com/cahirwpz/demoscene/blob/master/effects/floor/floor.c), [multipipe](https://github.com/cahirwpz/demoscene/blob/master/effects/multipipe/multipipe.c), [butterfly-gears](https://github.com/cahirwpz/demoscene/blob/master/effects/butterfly-gears/butterfly-gears.c)
 
#### Zadanie domowe:

**TODO**

### Warsztaty 8: Zaawansowane użycia blittera

**3 grudnia 2021**

 * chunky to planar:
   * naiwne rozwiązanie
   * metoda dziel i zwyciężaj
   * implementacja przy użyciu procesora [c2p_1x1_4.asm](https://github.com/cahirwpz/demoscene/blob/master/lib/libgfx/c2p_1x1_4.asm)
   * implementacja przy użyciu blittera
   * unikanie obliczeń dzięki bit-scrambling 
   * omówienie implementacji w efekcie [uvmap](https://github.com/cahirwpz/demoscene/blob/master/effects/uvmap/uvmap.c#L80)
 * dodawanie z nasyceniem:
   * sumator z przeniesieniami szeregowymi
   * obsłużenie nasycenia
   * omówienie implementacji na blitter [BitmapAddSaturated](https://github.com/cahirwpz/demoscene/blob/master/lib/libblit/BitmapAddSaturated.c)
   * omówienie efektu [metaballs](https://github.com/cahirwpz/demoscene/blob/master/effects/metaballs/metaballs.c) i [highway](https://github.com/cahirwpz/demoscene/blob/master/effects/highway/highway.c) 
 * mapa przepływu:
   * generowanie mapy przesunięć
   * przesunięcia kafli
   * rozmywanie przez zaszumianie
   * omówienie efektu [tilezoomer](https://github.com/cahirwpz/demoscene/blob/master/effects/tilezoomer/tilezoomer.c)
   
#### Zadanie domowe:

1. Poeksperymentować z mapą przesunięć kafli.
2. **TODO**

### Warsztaty 9: Rysowanie grafiki wektorowej

**10 grudnia 2021**

  * grafika 2D
    * reprezentacja obiektów 2D w pamięci
    * właściwości przekształceń geometrycznych
    * rotacja, skalowanie, przesunięcie w 2D
    * obcinanie odcinków do okna wyświetlania – algorytm  [Lianga-Barsky'ego](https://en.wikipedia.org/wiki/Liang%E2%80%93Barsky_algorithm)
    * obcinanie wielokątów – procedura [ClipPolygon2D](https://github.com/cahirwpz/demoscene/blob/master/lib/lib2d/ClipPolygon2D.c)
    * rasteryzacja wielokątów przy użyciu Blittera
    * omówienie efektu [shapes](https://github.com/cahirwpz/demoscene/blob/master/effects/shapes/shapes.c)
  * grafika 3D
    * potok graficzny
    * współrzędne obiektu, świata, kamery i ekranu
    * transformacje i projekcja
    * obcinanie do [bryły widzenia](https://en.wikipedia.org/wiki/Viewing_frustum)
    * [odrzucanie tylnych ścian](https://en.wikipedia.org/wiki/Back-face_culling)
    * rasteryzacja: algorytm [malarza](https://en.wikipedia.org/wiki/Painter%27s_algorithm), [przeglądania linii](https://en.wikipedia.org/wiki/Scanline_rendering)
    * omówienie efektu [flatshade](https://github.com/cahirwpz/demoscene/blob/master/effects/flatshade/flatshade.c) (i jego nieintuicyjnych optymalizacji)
  
#### Zadanie domowe:

**TODO**

### Warsztaty 10: Dźwięk i muzyka

**17 grudnia 2021**

 * reprezentacja instrumentu w pamięci
 * właściwości kanałów dźwiekowych Amigi
 * zmiana głośności kanału
 * programowanie kanałów dźwiękowych [audio.h](https://github.com/cahirwpz/demoscene/blob/master/include/audio.h)
 * muzyka [tracker](https://en.wikipedia.org/wiki/Music_tracker)-owa
 * reprezentacja zapisu nutowego, efekty i polecenia odtwarzacza muzyki
 * obsługa odtwarzaczy najpopularniejszych formatów [ahx](https://github.com/cahirwpz/demoscene/blob/master/effects/playahx/playahx.c), [cinter](https://github.com/cahirwpz/demoscene/blob/master/effects/playctr/playctr.c) i [the player 6.1](https://github.com/cahirwpz/demoscene/blob/master/effects/playp61/playp61.c)
 * efekty bazujące na bieżąco odtwarzanym dźwięku
 
#### Zadanie domowe:

**TODO**

### Warsztaty 11: Studenci prezentują prototypy efektów

**7 stycznia 2022**

**TODO**
 
### Warsztaty 12: Infrastruktura do uruchamiania efektów

**14 stycznia 2022**

 * architektura dema
 * procedury obsługi przerwań i ich rejestracja [interrupt.h](https://github.com/cahirwpz/demoscene/blob/master/include/interrupt.h)
 * sterowanie efektem przy pomocy klatek kluczowych [sync.h](https://github.com/cahirwpz/demoscene/blob/master/loader/sync.h)
 * abstrakcja pliku [file.h](https://github.com/cahirwpz/demoscene/blob/master/include/file.h)
 * doładowywanie danych z dysku [filesys.h](https://github.com/cahirwpz/demoscene/blob/master/include/filesys.h)
 * doładowywanie efektów z dysku [amigahunk.h](https://github.com/cahirwpz/demoscene/blob/master/include/amigahunk.h)
 * dynamiczny przydział pamięci [memory.h](https://github.com/cahirwpz/demoscene/blob/master/include/memory.h)
 * obsługa zadań i synchronizacja [task.h](https://github.com/cahirwpz/demoscene/blob/master/include/task.h)
 * interakcja przy pomocy myszki i klawiatury: [event.h](https://github.com/cahirwpz/demoscene/blob/master/include/event.h), [keyboard.h](https://github.com/cahirwpz/demoscene/blob/master/include/keyboard.h) i [mouse.h](https://github.com/cahirwpz/demoscene/blob/master/include/mouse.h)
 
### Warsztaty 13: Wykorzystanie przepustowości pamięci

**21 stycznia 2022**

 * klasyfikacja cykli pamięci CHIP – według [diagramu](http://amigadev.elowar.com/read/ADCD_2.1/Hardware_Manual_guide/node02D4.html)
 * raport wykorzystania cykli pamięci z emulatora fs-uae
 * priorytety kanałów DMA
 * liczba bitplanów, a copper i sprajty
 * cykle pamięciowe blittera – według [diagramu](http://amigadev.elowar.com/read/ADCD_2.1/Hardware_Manual_guide/node0127.html)
 * ustalanie priorytetu Blittera nad procesorem
 
### Warsztaty 14: Prowadzący pomaga w optymalizacji efektów

**28 stycznia 2022**

**TODO**

### Podsumowanie: Prezentacja efektów do dema

**4 lutego 2022**

**Pomysł!** Czy tutaj zaprosić "lożę szyderców" do oceny efektów?

## Zadania domowe

### Lista produkcji do obejrzenia

Jako zadanie domowe studenci będą mieli za zadanie wspólnie dokonać analizę dema pod względem estetycznym i technicznym (z naciskiem na to drugie).

1. [Sushi Boyz](https://www.pouet.net/prod.php?which=65405) by Ghostown (PL)
2. [Sunglasses at Night](https://www.pouet.net/prod.php?which=64106)  by Ghostown & Whelpz (PL)
3. [Zener Drive](https://www.pouet.net/prod.php?which=71996) by Altair (PL)
4. [Rule 30](https://www.pouet.net/prod.php?which=89365) by Andromeda
5. [Fisherhawk Dr.](https://www.pouet.net/prod.php?which=88651) by Melon Dezign
6. [Eon](https://www.pouet.net/prod.php?which=81094) by The Black Lotus
7. [Rink a Dink: REDUX](https://www.pouet.net/prod.php?which=61182) by Lemon
8. [The Fall](https://www.pouet.net/prod.php?which=75773) by The Deadliners & Lemon
9. [Boogietown](https://www.pouet.net/prod.php?which=59144) by Ghostown
10. [Superoriginal](https://www.pouet.net/prod.php?which=54388) by Supergroup
11. [Gagrakacka Mind Zones](https://www.pouet.net/prod.php?which=65778) by Disaster Area
12. [Emperor of the North Pole](https://www.pouet.net/prod.php?which=63769) by Spaceballs
13. [Lemonade](https://www.pouet.net/prod.php?which=78514) by Lemon 
14. [e255](https://www.pouet.net/prod.php?which=67956) by Bomb & Sanity & Dreamdealers
15. [Chillobits](https://www.pouet.net/prod.php?which=85300) by Offence 
16. [15 Years of Fame](https://www.pouet.net/prod.php?which=61034) by Up Rough
17. [Abstractica](https://www.pouet.net/prod.php?which=88628) by Nah-Kolor
18. [Way Too Rude](https://www.pouet.net/prod.php?which=85248) by Logicoma & Loonies
19. ...