- Code: Select all
summ3216 ;сложение U32bit+U16bit=U32bit bcde+hl->bcde
add hl,de
ex hl,de
ld a,c
adc a,0
ld c,a
ld a,b
adc a,0
ld b,a
ret
mul16x8 ;умножение 16bit*8bit=24bit de*a->ahl
ld hl,0
ld c,0
add a,a
jr nc,$+4
ld h,d
ld l,e
dup 7
add hl,hl
rla
jr nc,$+4
add hl,de
adc a,c
edup
ret
;вычисляем адреса основных секторов
Init ld bc,0,de,0 ;читаем нулевой сектор
ld hl,SectorBuffer
call Sdspi.RDSINGL
ld de,(SectorBuffer+0x01c6) ;получаем адрес первого раздела
ld (Tabl+0),de
ld bc,(SectorBuffer+0x01c8)
ld (Tabl+2),bc
ld hl,SectorBuffer
call Sdspi.RDSINGL ;читаем сектор с FATrec
ld de,(Tabl+0)
ld bc,(Tabl+2)
;вычесляем начальный сектор с
ld hl,(SectorBuffer+0x0e) ;таблицей кластеров
call summ3216
ld (Tabl+0),de
ld (Tabl+2),bc
ld de,(SectorBuffer+0x16) ;вычисляем адрес корневой
ld a,(SectorBuffer+0x10) ;директории
call mul16x8
ld de,(Tabl+0)
ld bc,(Tabl+2)
exa
call summ3216
exa
ld h,0
ld l,a
add hl,bc
ld (DirKor+1),de
ld (DirKor+4),hl
ret