;Zadatak:
;  Treba napisati program RLEcompress koji kompresira ulazni niz podataka.
;  Koristi se RLE (run length encoding) kompresija koja zamjenjuje niz
;  jedinica i nula sa nizom brojeva koji pokazuju koliko puta se ponavlja
;  nula ili jedinica.
;  Ulazni podaci su okteti koji mogu biti samo jedan ili nula, počinju od
;  adrese 0x800 i zauzimaju slijedećih 400 okteta. Izlazni podaci su okteti
;  koji govore koliko puta treba ponoviti jedinicu ili nulu i spremaju se 
;  od adrese 0x1200. Pretpostavlja se da ulazni niz ne može imati više od
;  255 uzastopnih nula ili jedinica. 
;  Ako ulazni niz ne počinje nulom, tada kompresirani niz počinje odmah 
;  nulom.

;****************
;* RLE compress *
;****************
        `ORG    0
        MOV     R5, #8<8        ;adresa izvornog niza (0x800)
        MOV     R6, #12<8       ;adresa odredista (0x1200)
        MOV     R7, #%D 19      ;broj podataka (19)
        MOV     R1, #0          ;brojac istih podataka
        MOV     R2, #0          ;trenutni element (0 ili 1)

loop    LDRb    R0, [R5], #1    ;ucitaj podatak (1 byte)
        CMP     R2, R0          ;usporedi s trenutnim elementom
        Bne     change          ;promjeni trenutni element
        ADD     R1, R1, #1      ;povecaj brojac istih podataka

deccnt  SUBs    R7, R7, #1      ;smanji broj preostalih podataka u bloku
        Bne     loop
        STRb    R1, [R6], #1    ;pospremi kompresiranu vrijednost
        HALT

change  EOR     R2, R2, #1      ;promjeni 0 <-> 1
        STRb    R1, [R6], #1    ;pospremi kompresiranu vrijednost
        MOV     R1, #1          ; R1 = 1 jer vec imamo 1 podatak druge vrste
        B       deccnt          ;skoci na dio koji smanjuje brojac

        `ORG    800
        `DW     0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1
        `ORG    1200
        `DS     50
        `END