
Сообщение от
rw6hrm
Цена дешевизны
А также неоптимального программирования. Сейчас п/п чтения байта выполняется 1025 тактов, после первой же попытки ускорить 747 тактов (почти на 30% быстрее):
Код:
;********************************************* READING BYTE *****************************************
sd_read_byte:
push bc
ld b,8 ; will read 8 bits
sd_read_byte_read_bit:
ld a,3 ; CS= 0, data=1, clock=1
out (SD_PORT),a ;Should be read at Falling edge, but this is a rising one?
in a,(SD_PORT)
and $10
sub b ; If a=0 set cy=1, inverted input (b is always >0)
rl c ; shift cy in register c
ld a,2 ; CS=0, data=1,clock=0
out (SD_PORT),a
djnz sd_read_byte_read_bit
ld a,c ; helding result in a
ifdef DTZDEBUGREADTOO
push af
call outstringinline
db "RB: ",0
pop af
push af
call outbytehex
pop af
endif ; DTZDEBUGREADTOO
pop bc
ret
Что можно ещё сделать:
- развернуть цикл (выигрыш незначительный)
- воспользоваться командой out (c),d (потребуются регистры d,e для чисел 2,3, лишние push/pop/ld de, но в целом я думаю выигрыш будет)