解析しました.
(2020年1月28日更新: コードの読み間違いが原因のactivation * 3 とその後の不明の 3 bits を削除)
;ADCD3001 A.III memory base 128 driver ;bits |send data |meaning ;10 |0001_0101_01|activation ;1 |p |set operation read or write ;10 |aaaa_aaaa_aa|memory address bit 16:7; address bit6:0 = 7'h00 ;20 |l *20 |memory data bit length ;lengt|x *length |(read) memory read data ;lengt|d *length |(write) memory write data ;(legend) 0:low, 1:high, x:don't care, p:operation, a:address, l:length, d:write data ;---- main routine ---- ;initialize -> send read command -> check memory signature ed7ff: jsr ld789 ;rts only (?) jsr ld7b8 ;get activation code (A=0:ng, A=1:ok) cmp #$00 bne ld81d lda #$01 jsr ld885 ;send R/W(=A.1, 1:read, 0:write), address (10 bits), length (20 bits) ld80e: jsr ld863 ;read data lda $36e5 sta ($21) jsr ld6f9 bcc ld80e cla clc ld81d: jsr ld78a jsr ld901 rts ;address 0x1ff000 assignments for memory base 128 ;w0 serial write data ;w1 serial clock ;r3 always 0 ;r2 memory base detection serial data ;r1 always 0 ;r0 memory data ;I'm not sure how to reset serial clock count??? ld7b8: clx ld7b9: ; old -> new ;sd 0001_0101_01 ;sr xxxx_xxxx_01 ;sd:serial data (when serial clock sets 0->1, mb128 latch 0x1ff000.w0) ;sr:r2 = detection data, bit3, 1 and 0 must be 0 lda #$A8 ;serial data lsb->msb ldy #$08 ;bitcount jsr ld8d4 cla jsr ld8b7 ;send 1bit (A.0) lda $1000 ;get activation reply and #$0F tay lda #$01 jsr ld8b7 lda $1000 and #$0F cmp #$04 bne ld7e1 tya cmp #$00 bne ld7e1 ;activation ok clc cla bra ld7ec ld7e1: ;retry max 3 times inx cpx #$03 bne ld7b9 ;error! jsr ld7ed sec lda #$01 ld7ec: rts ld7ed: ;sd 000 cla ldy #$03 jsr ld8d4 jsr ld901 ;wait some clocks lda #$01 sta $1000 jsr ld901 rts ld885: jsr ld730 ;tai $D91D,$36E1,$0004; rts jsr ld8b7 ;send 1 bit; data=A.0 jsr ld738 lda $36d9 ldy #$08 jsr ld8d4 ;send 8bits lda $36da ldy #$02 jsr ld8d4 ;send 2bits lda $36dd ldy #$08 jsr ld8d4 ;send 8bits lda $36de ldy #$08 jsr ld8d4 ;send 8bits lda $36df ldy #$04 jsr ld8d4 ;send 4bits rts