; *********************************************** ; * * ; * MB Maniax 2008 - 2009 * ; * * ; *********************************************** ; Zapis na Fat16 ; ; start+2 .......... pocatecni adresa ; lenght .......... delka bloku ; name ............. jmeno souboru cpu Z80UNDOC RELAXED ON org 32768 ld hl,(lenght) ;nacteni MBR ld hl,BUFFER ;kam nacist push hl ld b,1 ;nacist jen jeden sector ld de,0 ld c,0 xor a ;LBA sec = 0 ld a,%11100000 or a ;nastav LBA, master a read call read_sec ;precti sector ; dodelat osetreni erroru pop ix inc ixu inc ixu ; + 512 ld e,(ix-58) ; info o prvni partition zacina na $1BE ld d,(ix-57) ex de,hl ; v hl je cislo sectoru kde zacina boot prvni par. ld (bootsec+1),hl ; schovame cislo bootsectoru pro vypocet ;nacteni BOOT sectoru prvni partition ld e,l ld d,h ld c,0 ld a,d ld b,1 ;precti pouze jeden sector ld hl,BUFFER push hl ld a,%11100000 or a ;nastav LBA, master a read call read_sec ; dodelat osetreni erroru pop ix bootsec ld hl,0 ld a,(ix+$d) ;Pocet sektoru na cluster !!!!!!!!!!!!! ld (cluster),a ld e,(ix+14) ; pricteme sectory pred FAT ld d,(ix+15) add hl,de ld (sector_fat),hl ;v reg. 'hl' je prvni sektor FAT tabulky push hl push ix ld e,(ix+16) ; pocet FAT ld d,0 ld l,(ix+22) ; pocet sektoru ve FAT ld h,(ix+23) call nasobeniHLDE ; vysledek v IXHL pop ix pop de add hl,de ; pricteme jen spodnich 16 bitu ld (root),hl ;v reg. HL je oblast korenoveho adresare. !!! ld e,(ix+17) ; pocet polozek v ROOTu ld d,(ix+18) ; vydelime 16; predpokladame velikost sec. 512 a 32bytu v root polozce ld b,4 ctyrikrat1 srl d rr e djnz ctyrikrat1 add hl,de ;v reg. hl je nyni prvni datovy sector ld d,0 ld e,d ld ix,data_sector ld (ix+0),l ld (ix+1),h ld (ix+2),e ld (ix+3),d ;je potreba nacist aktualni sektor FAT ;najit volny sector ;nacist ret sector_fat dw 0 ;aktualni sektor FAT root dw 0 data_sector dw 0,0 ;aktualni datovy sektor cluster db 0 ;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]) ;cedb= 28 bit lba sector;c-sectornumber,e-cylinderlow,d-cylinderhigh,b-head - podle stare rutinky ;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) 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 inc32 inc hl ld a,h or l jr z,i32 inc de i32 ret nasobeniHLDE nasob ld b,16 ld a,h ld c,l ld ix,0 ld hl,0 nasob2 add ix,ix add hl,hl jr nc,nasob4 inc ix nasob4 rl c rla jr nc,nasob3 add hl,de jr nc,nasob3 inc ix nasob3 djnz nasob2 ret name db "screen " ;jmeno db "scr" ;pripona db 0 dw 0,0,0,0,0 ;rezervovano time__create dw 0 ;cas vytvoreni change dw 0 ;cas posledni zmeny enter_dir db 0,0 ;prvni cluster lenght dw 6912 ;delka buffer ds 512 buffer_end