Autor Tema: Get nibbles from a byte  (Leído 3480 veces)

0 Usuarios y 1 Visitante están viendo este tema.

jltursan

  • Karoshi Forum's Guru
  • *******
  • Mensajes: 1516
  • ¿Que es lo que has aprendido hoy?
    • JLTurSan's MSX Page
    • Email
Get nibbles from a byte
« en: 02 de Octubre de 2006, 08:22:05 pm »
This routine is great when you have a lot of byte packed data :

Código: [Seleccionar]
    ;------------------------------------------------------
    ;
    ; Description: Divide a byte in a pair of nibbles (4 bits)
    ; In: A=byte
    ; Out: A=high nibble, C=low nibble
    ; Modifies: AF,AF',C
    ;
    ;------------------------------------------------------
    GET_NIBBLES:
    ld c,a
    and $F0
    rrca
    rrca
    rrca
    rrca
    ex af,af'
    ld a,c
    and $0F
    ld c,a
    ex af,af'
    ret



Hope you find it useful!  :)
Doom dee doom dee doom

SapphiRe

  • Visitante
Re: Get nibbles from a byte
« Respuesta #1 en: 21 de Octubre de 2006, 01:03:05 pm »
Nice! But it can be done faster if original data is in RAM:

Código: [Seleccionar]
    ;------------------------------------------------------
    ; Input: hl = Pointer to data
    ; Output: d = high nibble, e = low nibble
    ; Modifies: a, d, e
    ;------------------------------------------------------
    GET_NIBBLES:
    xor a
    rrd
    ld e,a
    rrd
    ld d,a
    rrd
    ret

Ideal to use HL as a pointer to unpack the byte-packed data and BC as a counter. What do you think? ;)

Of course if data is not in RAM you can add this lines

Código: [Seleccionar]
    ;------------------------------------------------------
    ; Input: a = data
    ; Output: d = high nibble, e = low nibble
    ; Modifies: a, de, hl
    ;------------------------------------------------------
    GET_NIBBLESROM:
    ld hl,FREEBYTEINRAM ; you need to reserve a byte in ram to do this
    ld [hl],a
    jp GET_NIBBLES ; or place the appropriate code here
« Última modificación: 21 de Octubre de 2006, 01:07:29 pm por SapphiRe »