Hi!
I am also interested in this project, and therefore made some investigations.
After disassembling the HEX file, (not the exclusive version) here is what I have found out.
For the 18bit word 3 bytes are used: mem_56, mem_55, mem_54 (MSB-LSB)
Sub_100 makes the actual sending of the data.
mem_57 is the counter used for rotating the 3 bytes. As You can see, first the MSB (mem_56) is processed (the counter is loaded with 2), by checking bit 1, rotating to left and so on. Next the middle byte (counter=8) and the finally the lower byte.
Code:
sub_100
;
; called from: 0138
; called from: 013F
; called from: 0147
; called from: 01D8
; called from: 01DF
bcf PORTC, 1 ; 0100: 1087
bcf PORTC, 3 ; 0101: 1187
movlw 0x02 ; 0102: 3002
movwf mem_57 ; 0103: 00D7
loop_104
; jump here from: 010F
bcf PORTC, 1 ; 0104: 1087
btfss mem_56, 1 ; 0105: 1CD6
goto label_109 ; 0106: 2909
bsf PORTC, 2 ; 0107: 1507
goto label_10a ; 0108: 290A
label_109
; jump here from: 0106
bcf PORTC, 2 ; 0109: 1107
label_10a
; jump here from: 0108
call sub_12f ; 010A: 212F
rlf mem_56, f ; 010B: 0DD6
bsf PORTC, 1 ; 010C: 1487
call sub_12f ; 010D: 212F
decfsz mem_57, f ; 010E: 0BD7
goto loop_104 ; 010F: 2904
movlw 0x08 ; 0110: 3008
movwf mem_57 ; 0111: 00D7
loop_112
; jump here from: 011D
bcf PORTC, 1 ; 0112: 1087
btfss mem_55, 7 ; 0113: 1FD5
goto label_117 ; 0114: 2917
bsf PORTC, 2 ; 0115: 1507
goto label_118 ; 0116: 2918
label_117
; jump here from: 0114
bcf PORTC, 2 ; 0117: 1107
label_118
; jump here from: 0116
call sub_12f ; 0118: 212F
rlf mem_55, f ; 0119: 0DD5
bsf PORTC, 1 ; 011A: 1487
call sub_12f ; 011B: 212F
decfsz mem_57, f ; 011C: 0BD7
goto loop_112 ; 011D: 2912
movlw 0x08 ; 011E: 3008
movwf mem_57 ; 011F: 00D7
loop_120
; jump here from: 012B
bcf PORTC, 1 ; 0120: 1087
btfss mem_54, 7 ; 0121: 1FD4
goto label_125 ; 0122: 2925
bsf PORTC, 2 ; 0123: 1507
goto label_126 ; 0124: 2926
label_125
; jump here from: 0122
bcf PORTC, 2 ; 0125: 1107
label_126
; jump here from: 0124
call sub_12f ; 0126: 212F
rlf mem_54, f ; 0127: 0DD4
bsf PORTC, 1 ; 0128: 1487
call sub_12f ; 0129: 212F
decfsz mem_57, f ; 012A: 0BD7
goto loop_120 ; 012B: 2920
bsf PORTC, 3 ; 012C: 1587
call sub_12f ; 012D: 212F
return ; 012E: 0008
;
And here you find the register contents: (00, 58, 05 and 00, 02, 00)
Code:
movlw 0x00 ; 01D2: 3000
movwf mem_56 ; 01D3: 00D6
movlw 0x58 ; 01D4: 3058
movwf mem_55 ; 01D5: 00D5
movlw 0x05 ; 01D6: 3005
movwf mem_54 ; 01D7: 00D4
call sub_100 ; 01D8: 2100
movlw 0x00 ; 01D9: 3000
movwf mem_56 ; 01DA: 00D6
movlw 0x02 ; 01DB: 3002
movwf mem_55 ; 01DC: 00D5
movlw 0x00 ; 01DD: 3000
movwf mem_54 ; 01DE: 00D4
call sub_100 ; 01DF: 2100
First it puts the chip in TEST mode with N divider as output, then sets the B counter to 2, and A counter to 0.
Altough the datasheet stetes several times, that the minimum value for B is 3, it seems to work.
NOTES: Divide ratio: 3 to 1,023(Divide ratios less than 3 are prohibited)
I also find 3 more writes to the chip with really strange values,(0,0,A2; 0,0E,B8; 0,A3,09) and as far as i can tell, there is no way for the program to even jump there??? (maybe dummy stuff, or disassembler error? however tried with 2 different disassemblers)
(look after "return ; 0131: 0008")
Code:
sub_12f
;
; called from: 010A
; called from: 010D
; called from: 0118
; called from: 011B
; called from: 0126
; called from: 0129
; called from: 012D
movlw 0x80 ; 012F: 3080
call sub_023 ; 0130: 2023
return ; 0131: 0008
;
; end of sub_12f
;------------------------------------------------------------
movlw 0xa2 ; 0132: 30A2
movwf mem_54 ; 0133: 00D4
movlw 0x00 ; 0134: 3000
movwf mem_55 ; 0135: 00D5
movlw 0x00 ; 0136: 3000
movwf mem_56 ; 0137: 00D6
call sub_100 ; 0138: 2100
movlw 0xb8 ; 0139: 30B8
movwf mem_54 ; 013A: 00D4
movlw 0x0e ; 013B: 300E
movwf mem_55 ; 013C: 00D5
movlw 0x00 ; 013D: 3000
movwf mem_56 ; 013E: 00D6
call sub_100 ; 013F: 2100
call sub_34e ; 0140: 234E
movlw 0x09 ; 0141: 3009
movwf mem_54 ; 0142: 00D4
movlw 0xa3 ; 0143: 30A3
movwf mem_55 ; 0144: 00D5
movlw 0x00 ; 0145: 3000
movwf mem_56 ; 0146: 00D6
call sub_100 ; 0147: 2100
return ; 0148: 0008
;
; end of sub_12f