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
....................................
....####...#####...##..##...####....
...##..##..##..##..##.##...##..##...
...##..##..#####...####....##..##...
...######..##.##...##.##...##..##...
...##..##..##..##..##..##...####....
....................................
..####....####....####....####..##..
.##..##..##.###..##.###..##.....##..
...###...###.##..###.##..#####..##..
..##.....##..##..##..##..##..##.##..
.######...####....####....####...##.
....................................
....................................
....................................
....................................
....................................
....................................