See http://launch.groups.yahoo.com/group/CZsynth/message/4111

Code segment from C-64 [6502/6510 processor] program
--shows nybblizing process of 8-bit data 
--comments added 8/11/09

; 2. Send sequencer data to CZ
                ldy #$00
send.more:      jsr wait.to.send
                lda ($fb),y		; Using a pointer to the data to be sent, load the accumulator 
                and #$0f		; Just keep the bottom 4 bits
                sta dw		; Send it to the midi port
                inc temp1  ;odd	
                jsr wait.to.send
                lda ($fb),y            	; Reload the data to be sent because the accululator was changed             
                lsr a			; Logical Shift Right [divides by 2]
                lsr a			; Divide by 2 again
                lsr a			; and again
                lsr a			; and again (dividing by 16 moves the upper 4 bits into the botttom) 
                and #$0f		; Make sure the upper 4 bits are 0000
                sta dw		; Send it to the midi port
                iny
                bne skip.update
                inc $fc
skip.update:    inc temp1  ;even
                beq test.for.f7
                jmp send.more

NOTE: Why, you might ask did I use lsr? Because it is very efficient in terms of clock cycles used. 

Code segment from C-64 [6502/6510 processor] program
--shows reverse nybblizing process of 8-bit data 
--comments added 8/11/09

; 2. Get data from MT-32
                ldy #$00
get.more:       jsr wait.to.get
                lda dr		; Get data (1st 8-bit word) from the midi port
                jsr test.end.block
                sta ($fb),y		; Store it
                jsr wait.to.get
                lda dr		; Get data (2nd 8-bit word) from the midi port
                jsr test.end.block
                and #$0f		; Just take the bottom 4 bits
                asl a			; and multiply by 2
                asl a			; and again
                asl a			; and again
                asl a			; and again so that the bottom 4 bits are in the top 4
                ora ($fb),y		; take on 1st 8-bit word, which is really just the bottom 4 bits
                sta ($fb),y		; store the reassembled two halves 
                iny
                beq update.pointer
                jmp get.more
update.pointer: inc $fc
                jmp get.more