Dnes se Zilog uvolil a poslal na Speccy konferenci na Pandoře rutinku, která provádí Read/Write na IDE zařízení. S jeho svolením jí zde uveřejníme.
Zde je...
Vstupy:;HL = target address
;B = number of sectors
;E = sector (or LBA[7-0])
;D = cyl-low (or LBA[15-8])
;C = cyl-high (or LBA[23-16])
;A = head etc. (or LBA[28-24])
;bit A.7=A.5=1
;bit A.4=device (0=master, 1=slave)
;bit A.6=CHS/LBA (0=CHS, 1=LBA)
;CY=operation (1=write, 0=read)
Jen na objasněnou (to co mi nebylo hned jasné):
- bit 7 a 5 reg. 'a' musí být nastaveny na 1
- carry flagem se určuje read/write
- reg. 'b' určuje počet cektorů, které chceme najednou načíst
readsec: out ($bb),a
r1: in a,($bf)
bit 6,a
jr z,r1
ld a,b
out ($ab),a
ld a,e
out ($af),a
ld a,d
out ($b3),a
ld a,c
out ($b7),a
ld a,$20
jr nc,r2
ld a,$30
r2: out ($bf),a
push af
r3: in a,($bf)
and $c8
cp $48
jr nz,r3
pop af
push bc
ld bc,$a3
jr nc,r4
otir
otir
jr r5
r4: inir
inir
r5: pop bc
djnz r3
r6: in a,($bf)
rla
jr c,r6
ret
Tak a teď k aktuálnímu stavu prográmku
TrueWare.
Jelikož jsem celý program skoro celý přepsal jsem téměř na začátku.
Funguje:- načte se MBR sektor
- zjistí se info o první partition
- načte se první sektor FAT tabulky
- zjistí se první datový sektor
Chybí:- hledání volného clusteru ve FAT tabulce (rozpracováno, chybí táááákhle malinko :) )
- samotný zápis těla souboru
- zápis hlavičky soubru
- uložení FAT tabulky
Zítra snad budu mít první předvedení - schopnou verzi :)
Teď už snad vše půjde rychleji...