ARKO: PROJEKT – MIPS (0-10 pkt.) 14.03.2006
Transkrypt
ARKO: PROJEKT – MIPS (0-10 pkt.) 14.03.2006
ARKO: PROJEKT – MIPS (0-10 pkt.) 14.03.2006 – 11.04.2006. (Temat 1) Temat: Skalowanie obrazu. Zaimplementować w języku maszynowym procesora MIPS (dla środowiska emulatora SPIM) algorytm przeskalowywania obrazu. Założenia: • obraz wejściowy i wyjściowy jest nieskompresowany, a każdy piksel kodowany jest przez jeden bajt (znak), • działanie algorytmu ma się sprowadzać do równomiernego dodawania/usuwania odpowiednich/zbędnych kolumn i wierszy pikseli (to sformułowanie nie narzuca konkretnego sposobu implementacji), • obraz może być skalowany niezależnie w obydwu osiach, • wejściowy i wyjściowy format pliku – dowolny, prosty format obsługiwany przez GIMPa – np. *.bmp, *.pgm, *.cel lub tekstowy format zaproponowany w załączniku. Wejście: • parametry podane przez użytkownika po uruchomieniu programu: • nazwa pliku wejściowego i wyjściowego, • nowa szerokość i wysokość obrazu w pikselach, • plik z obrazem. Wyjście: • plik z obrazem po przeskalowaniu. ARKO: PROJEKT – MIPS (0-10 pkt.) 14.03.2006 – 11.04.2006. (Temat 2) Temat: Rysowanie odcinka. Zaimplementować w języku maszynowym procesora MIPS (dla środowiska emulatora SPIM) algorytm rysowania odcinka. Założenia: • obraz wyjściowy jest nieskompresowany, a każdy piksel kodowany jest przez jeden bajt (znak), • można założyć, że odcinek w całości mieści się w obrazie, zaś lewy górny róg obrazu ma współrzędne (0,0) • wyjściowy format pliku – dowolny, prosty format obsługiwany przez GIMPa – np. *.bmp, *.pgm, *.cel lub tekstowy format zaproponowany w załączniku. Wejście: • parametry podane przez użytkownika po uruchomieniu programu: • nazwa pliku wyjściowego, • szerokość i wysokość obrazu w pikselach, • dwie pary współrzędnych (x,y) dla dwóch końców odcinka. Wyjście: • plik z obrazem zawierającym narysowany odcinek. ARKO: PROJEKT – MIPS (0-10 pkt.) 14.03.2006 – 11.04.2006. (Temat 3) Temat: Kompresja RLE ciągu bitów. Zaimplementować w języku maszynowym procesora MIPS (dla środowiska emulatora SPIM) algorytm kompresji RLE ciągu bitów. Założenia: • kompresji będą poddawane pliki zawierające obrazy dwukolorowe w formacie binarnym podanym w załączniku. Wejście: • parametry podane przez użytkownika po uruchomieniu programu: • nazwa pliku wejściowego i wyjściowego, • plik w nieskompresowanym formacie binarnym podanym w załączniku. Wyjście: • plik w skompresowanym formacie binarnym podanym w załączniku. ARKO: PROJEKT – MIPS (0-10 pkt.) 14.03.2006 – 11.04.2006. (Temat 4) Temat: Dekompresja RLE ciągu bitów. Zaimplementować w języku maszynowym procesora MIPS (dla środowiska emulatora SPIM) algorytm dekompresji RLE ciągu bitów. Założenia: • dekompresji będą poddawane pliki zawierające obrazy dwukolorowe w formacie binarnym podanym w załączniku. Wejście: • parametry podane przez użytkownika po uruchomieniu programu: • nazwa pliku wejściowego i wyjściowego, • plik w skompresowanym formacie binarnym podanym w załączniku. Wyjście: • plik w nieskompresowanym formacie binarnym podanym w załączniku. ARKO: PROJEKT – MIPS (0-10 pkt.) 14.03.2006 – 11.04.2006. (Temat 5) Temat: Kompresja RLE ciągu bajtów. Zaimplementować w języku maszynowym procesora MIPS (dla środowiska emulatora SPIM) algorytm kompresji RLE ciągu bajtów. Założenia: • kompresji będą poddawane pliki zawierające obrazy wielokolorowe w formacie binarnym podanym w załączniku. Wejście: • parametry podane przez użytkownika po uruchomieniu programu: • nazwa pliku wejściowego i wyjściowego, • plik w nieskompresowanym formacie binarnym podanym w załączniku. Wyjście: • plik w skompresowanym formacie binarnym podanym w załączniku. ARKO: PROJEKT – MIPS (0-10 pkt.) 14.03.2006 – 11.04.2006. (Temat 6) Temat: Dekompresja RLE ciągu bajtów. Zaimplementować w języku maszynowym procesora MIPS (dla środowiska emulatora SPIM) algorytm dekompresji RLE ciągu bajtów. Założenia: • dekompresji będą poddawane pliki zawierające obrazy wielokolorowe w formacie binarnym podanym w załączniku. Wejście: • parametry podane przez użytkownika po uruchomieniu programu: • nazwa pliku wejściowego i wyjściowego, • plik w skompresowanym formacie binarnym podanym w załączniku. Wyjście: • plik w nieskompresowanym formacie binarnym podanym w załączniku. ARKO: PROJEKT – MIPS (0-10 pkt.) 14.03.2006 – 11.04.2006. (Temat 7) Temat: Konwerter obrazka w formacie tekstowym na binarny. Zaimplementować w języku maszynowym procesora MIPS (dla środowiska emulatora SPIM) konwerter obrazka z formatu tekstowego na binarny. Założenia: • konwersji będą poddawane dwu- lub wielo-kolorowe pliki w formacie tekstowym podanym w załączniku Wejście: • parametry podane przez użytkownika po uruchomieniu programu: • nazwa pliku wejściowego i wyjściowego, • plik w formacie tekstowym. Wyjście: • plik w nieskompresowanym formacie binarnym podanym w załączniku. ARKO: PROJEKT – MIPS (0-10 pkt.) 14.03.2006 – 11.04.2006. (Temat 8) Temat: Konwerter obrazka w formacie binanym na tekstowy. Zaimplementować w języku maszynowym procesora MIPS (dla środowiska emulatora SPIM) konwerter obrazka w formacie binanego na tekstowy. Założenia: • konwersji będą poddawane dwu- lub wielo-kolorowe pliki w nieskompresowanym formacie binarnym podanym w załączniku. Wejście: • parametry podane przez użytkownika po uruchomieniu programu: • nazwa pliku wejściowego i wyjściowego, • plik w formacie binarnym. Wyjście: • plik w formacie tekstowym podanym w załączniku. ARKO: PROJEKT – MIPS (0-10 pkt.) 14.03.2006 – 11.04.2006. ZAŁĄCZNIK 1. Uwagi ogólne: • w kodzie należy wyodrębnić funkcje i zastosować odpowiednią dla procesorów MIPS konwencję wołania (właściwy skok ze śladem, prawidłowo przekazywane argumenty i wartości zwracane, zachowywanie wartości odpowiednich rejestrów), • podział na funkcje powinien być zgodny ze zdroworozsądkowym kompromisem pomiędzy modularnością i wydajnością kodu, • należy minimalizować liczbę zapisów/odczytów z pliku, • program nie musi być idiotoodporny, • może zdarzyć się, że po kompresji uzyskane dane będą zajmować więcej miejsca niż przed. 2. Punktacja: Ocena jest wyznaczana jako: q·c-d. Na wartość q (0-10) w następujących częściach składają się: • 50% optymalizacja kodu, • 30% właściwe stosowanie konwencji wołania, zachowywania rejestrów i podział na funkcje, • 20% czytelność kodu i komentarze. Wartość c (0-1) określa stopnień poprawnego działania programu. Wartość d jest wartością całkowitą oznaczającą liczbę rozpoczętych dwutygodniowych kwantów opóźnienia w oddaniu projektu względem przewidzianego terminu. 3. Format obrazka w pliku tekstowym – zawartość kolejnych pól (projekty 1,2,7,8): • szerokość obrazu w pikselach podana jako czteroznakowa liczba heksadecymalna z wiodącymi zerami (4 znaki/bajty), • wysokość obrazu w pikselach podana jako czteroznakowa liczba heksadecymalna z wiodącymi zerami (4 znaki/bajty), • czy obraz jest dwu- czy wielo-kolorowy: znak 'm' – wielokolorowy, 'b' – dwukolorowy (1 bajt), • znak przejścia do następnej linii (jednobajtowy – tzn. w formacie UNIX/Linux), • kolejne linie zawierające znakową reprezentację obrazka zakończone znakiem przejścia do następnej linii (w formacie UNIX/Linux). W przypadku obrazu dwukolorowego dopuszczalne jest użycie do kodowania dwóch dowolnych znaków różniących się najmniej znaczącym bitem, np. znaku '#' (ASCII: 0x23) i znaku '.' (ASCII: 0x2E), gdyż przy konwersji na postać binarną tylko ten bit ma być brany pod uwagę. 4. Format pliku binarnego – zawartość kolejnych pól (dotyczy projektów 3,4,5,6,7,8): • szerokość w pikselach (słowo 16 bitowe) • wysokość w pikselach (słowo 16 bitowe) • znaczniki – flagi (słowo 32 bitowe): • obraz skompresowany RLE (bit 0 – ustawienie go oznacza zastosowanie kompresji), • format danych (bit 1 – ustawienie go oznacza 1bajt na piksel czyli obraz wielokolorowy, nieustawienie – 1bit na piksel czyli obraz dwukolorowy), • dane reprezentujące obraz w formacie zależnym od wartości znaczników (skompresowany lub nieskompresowany ciąg bitów lub bajtów – patrz pkt. 4.1, 4.2, 4.3). Dane powinny być wyrównane do 4 bajtów, to znaczy, że jeśli np. informacja o obrazie zawiera się w 165 bitach to długość danych powinna wynosić 192 bity czyli 24 bajty. Zawartość dopełniających bitów/bajtów może być dowolna. Należy przyjąć konwencję, że w ciągu bitów obowiązuje kolejność od najstarszego do najmłodszego bitu z kolejnych bajtów, tzn. np. ciąg bitów 0,0,0,0,1,1,1,1,1,0,0,0,1,0,0,0 zapisany bajtami to: 15, 136. 4.1.Dane nieskompresowane w pliku binarnym (dotyczy projektów 3,4,5,6,7,8): Dane nieskompresowane są zapisanymi kolejno od góry do dołu liniami obrazu, każda od lewej do prawej bez zaznaczania w żaden sposób przejścia do następnej linii. Przykładowo dwukolorowy obraz: ....... ..###.. ..###.. ....... Powinien zostać zapisany bitowo jako (* - dowolna wartość): 0,0,0,0,0,0,0,0, 0,1,1,1,0,0,0,0, 1,1,1,0,0,0,0,0, 0,0,0,0,*,*,*,* czyli bajtami np. jako: 0, 112, 224, 0 W przypadku obrazów wielokolorowych ciąg bajtów nie różni się niczym względem formatu tekstowego oprócz braku znaków przejścia do następnej linii. 4.2.Kompresja RLE dla ciągu bitów (dotyczy projektów: 3,4): Skompresowany ciąg danych powinien wyglądać następująco: • długość skompresowaego ciągu w bajtach (słowo 32 bitowe), • kolejne bajty kodujące liczbę kolejnych wystąpień wartości bitów. Najbardziej znaczący bit w bajcie określa o którą wartość bitu chodzi (0 czy 1), pozostałe 7 bitów określa liczbę wystąpień kolejnych bitów o tej wartości. Przykładowo ciąg bitów: 0,0,0,0,0,1,1,1, 1,0,1,0,0,0,0,0, 0,0,0,0,0,0,0,0 zostanie zapisany jako: 5, 5, 132, 1, 129, 13, *, *, * Znak '*' oznacza bajty dopełniające o dowolnej wartości. 4.3.Kompresja RLE dla ciągu bajtów (dotyczy projektów 5,6): Skompresowany ciąg danych powinien wyglądać następująco: • długość skompresowaego ciągu w bajtach (słowo 32 bitowe), • ciąg bajtów: • jeśli bit 7 w bajcie jest ustawiony, pozostałe 7 bitów oznacza liczbę następnych bajtów nieskompresowanych (bo nie opłacało ich się kompresować), które wystąpią za tym bajtem, • jeśli bit 7 nie jest ustawiony pozostałe 7 bitów oznacza liczbę wystąpień następnego bajtu. Przykładowo ciąg bajtów: 5, 5, 5, 5, 5, 3, 2, 1, 1, 1, 1, 3, 2, 5, 5, 1, 1, 1, 1, 1, 1 może zostać poprawnie skompresowany jako: 14, 5, 5, 130, 3, 2, 4, 1, 130, 3, 2, 2, 5, 6, 1, *, * lub np.: 14, 5, 5, 130, 3, 2, 4, 1, 132, 3, 2, 5, 5, 6, 1, *, * lub (przypadek ignoranctwa i najmniejszej linii oporu – niezalecane): 22, 149, 5, 5, 5, 5, 5, 3, 2, 1, 1, 1, 1, 3, 2, 5, 5, 1, 1, 1, 1, 1, 1, *, * Znak '*' oznacza bajty dopełniające o dowolnej wartości. Przykład obrazków w formacie tekstowym (wielokolorowy i dwukolorowy): 002A0012m :::::::::::::::::::::::::::::::::::::::::: ::::::::::-'''''"-:::::::::::::::::::::::: ::::::::' '::::::::::::::::::::::: :::::::' ':::::::::::::::::::::: ::::::: :::::::::::::::::::::: ::::::: ''''''''''-:::::::::::: ::::::::. d@MZ#%z.X.':::::::::: ::::::::::,.... %D6kX7"!#M".'::' ':: :::::::::::::: '@MRMX9$b?'Rc'> " :: ::::::---::::: #M5M?""&) ' . :: :::' '': ..... ^%D&. "HM<@Mx..d': :: HI@MD6@huXM5@8$@XS@MI@l:: :: )6@R#^"7MBMMR6@RB6NI6@F,:: :: 'M5@d5x"5@RI@@IM@$B@*),::: ::. ,, "M8@RI@n""*R5@MR*?',::::: :::. ':::,.*R6*E#> ,.:::::::: :::::,,....,::::::::,,::.": _ .~,::::::::: ::::::::::::::::::::::::::,,..,::::::::::: 00240012b .................................... ....####...#####...##..##...####.... ...##..##..##..##..##.##...##..##... ...##..##..#####...####....##..##... ...######..##.##...##.##...##..##... ...##..##..##..##..##..##...####.... .................................... ..####....####....####....####..##.. .##..##..##.###..##.###..##.....##.. ...###...###.##..###.##..#####..##.. ..##.....##..##..##..##..##..##.##.. .######...####....####....####...##. .................................... .................................... .................................... .................................... .................................... ....................................