石原 博の覚書

電子工作に関する日々の覚書を記載します

CP/M 68K高速化2

2024-01-21 11:56:36 | 日記
せっかくCP/M 68Kが動き始めたのに遅い。原因はSDカードのSPIアクセスにあることはわかっている。
すべて68Kのソフトウエアで行っているため。

そこで少しでも速くならないかと、さらにコードを見直した。

従来は読み込みと書き込みを一つのサブルーチンで行っている。spiの仕様的にはそうなのかもしれないが、
読みながら次のコマンドを書き込むなどは今回のプログラムでは行っていない。
なのに同時にすることで余計に時間がかかっている。
*
spi8r2:	move.b	#$ff,d0		*spi read (write $ff)
spi8w2:	moveq	#7,d5		*spi write
spiloop2:
	btst	d5,d0
	beq	lout2
	bset.b	d7,(a3)		*MOSI=H
	bra	spiout2
lout2:	bclr.b	d7,(a3)		*MOSI=L
spiout2:bset.b	d3,(a3)		*SCK=H
	btst.b	d4,(a3)		*MISO
	beq	lin2
	bset	d5,d0
	bra	spiin2
lin2:	bclr	d5,d0	
spiin2:	bclr.b	d3,(a3)		*SCK=L
	dbra	d5,spiloop2
	rts

そこで読み込みと書き込みを分離した。
*
spi8r2:	move.b	#$ff,d0		*spi read (write $ff)
	moveq	#7,d5
	bset.b	d7,(a3)		*MOSI=H
spiloop2r:
	bset.b	d3,(a3)		*SCK=H
	btst.b	d4,(a3)		*MISO
	beq	lin2
	bset	d5,d0
	bra	spiin2
lin2:	bclr	d5,d0	
spiin2:	bclr.b	d3,(a3)		*SCK=L
	dbra	d5,spiloop2r
	rts
*
spi8w2:	moveq	#7,d5		*spi write
spiloop2w:
	btst	d5,d0
	beq	lout2
	bset.b	d7,(a3)		*MOSI=H
	bra	spiout2
lout2:	bclr.b	d7,(a3)		*MOSI=L
spiout2:bset.b	d3,(a3)		*SCK=H
	bclr.b	d3,(a3)		*SCK=L
	dbra	d5,spiloop2w
	rts
*
結果
 1分13秒かかっていたCのコンパイルが52秒と少し速くなった。
 ロジックアナライザで確認すると、以前約150Kbps(読むのが0の時と1の時では時間が変わる)だったものが、
 266Kbps程度となった。

ロジックアナライザの結果



最新の画像もっと見る

コメントを投稿