; Fil: BINTOHEX.ASM
; Av:  Kristoffer Eriksson, "SKE" <5357>, 1986.
;
;-Ver--/-Datum----/-Sign-/-Kommentar----------------------------------
; 1.00 / 86-08-21 / SKE  / BINTOHEX
;
; En liten rutin som omvandlar en str{ng med bin{ra data till en annan str{ng
; med hexsiffror. Tv} hexsiffror per byte. I HL returneras en 16-bittars summa
; av bin{rdatat. Anv{nds i FILTOHEX-programmet.
; Kompileras till POKE, relativ POKE elle relativ str{ng.
; Nedan anv{nds HL som m}lpekare, och DE som k{llpekare.

Start:      LD    HL,0                ; VAROOT(Bin{rstr{ng$)
            INC   HL
            INC   HL
            LD    E,(HL)              ; DE <- Pekare till bin{rstr{ng.
            INC   HL
            LD    D,(HL)
            INC   HL
            LD    C,(HL)              ; BC <- L{ngd av bin{rstr{ngen.
            INC   HL
            LD    B,(HL)
            LD    HL,0                ; VAROOT(M}lstr{ng$)
            INC   HL
            INC   HL
            LD    A,(HL)              ; HL <- M}ladress
            INC   HL
            PUSH  HL
            LD    H,(HL)
            LD    L,A
            PUSH  HL
            EXX
            LD    HL,0                ; Kontrollsummastart.
            EXX
NextByte:   LD    A,C
            OR    B
            JR    Z,Avsluta
            LD    A,(DE)
            EXX
            LD    E,A
            LD    D,0
            ADD   HL,DE               ; \ka p} kontrollsumman.
            EXX
            RRC   A                   ; Skifta ned den h|ga nibblen.
            RRC   A
            RRC   A
            RRC   A
            CALL  PutDig              ; H|ga hexsiffran.
            LD    A,(DE)
            CALL  PutDig              ; L}ga hexsiffran.
            INC   DE
            DEC   BC
            JR    NextByte

Avsluta:    POP   DE
            AND   A
            SBC   HL,DE               ; Ber{kna resultatets l{ngd.
            EX    DE,HL
            POP   HL
            INC   HL
            LD    (HL),E              ; Lagra resultatets l{ngd i str{ng-
            INC   HL                  ;   huvudet.
            LD    (HL),D
            EXX                       ; Kontrollsumman i HL returneras.
            RET

;*  Omvandlar l}g nibble i A till en HEX-siffra, och placerar de i utstr{ngen.
;*
PutDig:     AND   15
            ADD   '0'
            CP    '9'+ 1
            JR    C,PutPut
            ADD   'A'-'9'-1
PutPut:     LD    (HL),A
            INC   HL
            RET
