OldComp.cz

Komunitní diskuzní fórum pro fanoušky historických počítačů


Právě je 29.03.2024, 09:14

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 6 ] 
Autor Zpráva
 Předmět příspěvku: Ovladače divMMC/dicIDE
PříspěvekNapsal: 18.10.2020, 13:47 
Offline
Kecálek

Registrován: 06.04.2020, 16:24
Příspěvky: 222
Bydliště: Opava
Has thanked: 31 times
Been thanked: 70 times
Máte někdo zkušenosti z lowlevel ovladači pro divmmc?
Lze využít hotového software pro divide s pouhou změnou portů? Nebo je to řadičově úplně jinak (jiné commandy pro read/write sector, jiný význam na status registrech...)?

divide má toto:
;základní ide příkazy
C_READ equ #20
C_WRITE equ #30
C_IDENT equ #EC
;porty
REG_DATA equ 163
REG_STAT equ 191
REG_ERR equ 167
REG_SECN equ 171
REG_LBAL equ 175
REG_LBAH equ 179
REG_LBAD equ 183
REG_LBAE equ 187


Nahoru
 Profil  
 
 Předmět příspěvku: Re: divmmc vs. divide
PříspěvekNapsal: 18.10.2020, 15:14 
Offline
Radil
Uživatelský avatar

Registrován: 19.07.2013, 14:21
Příspěvky: 258
Bydliště: Košice
Has thanked: 143 times
Been thanked: 380 times
Tu asi doslo k celkovemu nepochopeniu rozdielu medzi IDE a MMC.

Ano, je pravda, ze to "Div" v nazve odkazuje na memory paging port #E3, ktory je az na par detailov (ktore Prato nepoznal) kompatibiliny s DivIDE (a rozdiel je, ze sa vyuziva vsetkych 6 bitov, lebo 8kB stranok je az 64).
Ziadny z tychto IDE portov, ktore spominas neexistuju. Existuje iba port #E7, ktorym sa vybera aktualna SD karta a zakladny #EB port, ktorym sa vstupno/vystupne komunikuje pomocou SPI protokolu s MMC (SD kartou v tomto rezime). SPI protokol je pomerne netrivialny, komunikacia prebieha cez commandy, kazdopadne, cely si ho musis v pocitaci implementovat. Viac info: http://elm-chan.org/docs/mmc/mmc_e.html
Tymito commandami sa daju citat potom rozne velke bloky z SD karty. Pracu s filesystemom na particiach si potom opat musis implementovat sam.

O historii vzniku DivMMC: https://spectrumforeveryone.com/feature ... mmc-enjoy/

EDIT: Nepresnosti z hlavy v prispevku opravene.
PS: Inak mam sen, ze RAZ, raz naozaj Miguel vyda zdrojaky ESXDOSu, aspon tej zakladnej casti, ktora implementuje SPI protokol a zakladnu pracu sa FATkou, aby tu ludia nemuseli znovu-objavovat koleso twl. :suicide:
Nic viac by netrebalo a stavim sa s kymkolvek, ze do polroka by na DivMMC bola portnuta vacsina povodnych firmwarov.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Ovladače divMMC/dicIDE
PříspěvekNapsal: 18.03.2024, 10:07 
Offline
Kecálek

Registrován: 06.04.2020, 16:24
Příspěvky: 222
Bydliště: Opava
Has thanked: 31 times
Been thanked: 70 times
Nějaké roky uběhly.... Znovu tedy položím otázku:
Existují někde komentované zdrojové výpisy pro práci s divMMC?
Disassembloval jsem ESXMMC.bin i ESXIDE.bin a porovnal je. Liší se celkem minimálně a to právě v těch lowlevel R/W operacích (práce s řadičem). Rád bych nějakou ukázku jak přečíst/zapsat sektor (512 bajtů) z/na MMC. Obdobně jako to měl popsané Zilog u divIDE. Z toho ESXMMC.bin sice lze vidět jak to funguje, ale komentovaný zdroják by byl hezčí.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Ovladače divMMC/dicIDE
PříspěvekNapsal: 18.03.2024, 11:34 
Offline
Profík

Registrován: 06.02.2019, 11:47
Příspěvky: 898
Has thanked: 51 times
Been thanked: 230 times
MTs píše:
Nějaké roky uběhly.... Znovu tedy položím otázku:
Existují někde komentované zdrojové výpisy pro práci s divMMC?
Rád bych nějakou ukázku jak přečíst/zapsat sektor (512 bajtů) z/na MMC. Obdobně jako to měl popsané Zilog u divIDE. Z toho ESXMMC.bin sice lze vidět jak to funguje, ale komentovaný zdroják by byl hezčí.


V takej forme, ako by si chcel, na webe nenájdeš. Existuje riedko komentovaný disasembling UNIDOSu (začni cez ZXFILES).
Prikladám niečo z mojho disassemblingu ESXDOSu.

Kód:
SD_ACT:         
                PUSH AF         ; save ACC
                IN A,(SPI)      ; dummy read
                LD A,($3DFE)    ; read SD1/SD2 flag
                OUT (SDCS),A    ; activate selected SD 
                POP AF          ; restore ACC           
                RET
SD_DEACT:       
                PUSH AF         ; save CF as error flag
                LD A,$FF        ; disable CS           
                OUT (SDCS),A    ;                       
                POP AF          ; restore CF           
                RET             ; end of init

Kód:
SD_RD_BLK:     
                LD A,(IY+1)     ; SD/SDHC?
                AND $40         ; A.6                   
                CALL Z,MUL512_BCDE      ; convert addr for old SD cards
                LD A,(IY+0)                     
                LD IXH,A                               
                LD A,IXL        ; memory mapping       
                OUT (MEMPAGE),A ; map memory           
                LD A,IXH        ;                       
                CALL SD_CARDSEL ; select SD card slot                     
                LD A,$51        ; CMD51 (block read)   
                CALL SD_ANYCMD  ; send command         
                JR NC,SD_RD_BLK1  ; cmd OK             
SD_READERR:     
                LD A,$06        ; error code
                JR SD_FIN       ; disable CS and end   
SD_RD_BLK1:     
                CALL SD_R1B     ; wait for token
                JR C,SD_READERR ; no token, error       
                CALL READ2E8E   ; check esx var
                JR NZ,SD_RD_BLK2  ; do not read data
                LD BC,$00EB     ; read 256 + 256       
                INIR            ; 512 bytes from       
                INIR            ; SD card to memory     
SD_RD_BLK2:     
                CALL NZ,CALL26B0;
                NOP             ;                       
                IN A,(SPI)      ; read CRC1             
                NOP             ;                       
                IN A,(SPI)      ; read CRC2             
                OR A            ; clear CF, ZF, ret 00 
                JR SD_FIN       ; deactivate CS, remap
SD_FIN:
                CALL SD_DEACT   ; deactivate CS line
                LD IXL,A        ; save return code     
                LD A,$00        ; remap page 00         
                OUT (MEMPAGE),A ;                       
                LD A,IXL        ; restore return code   
                RET             ;


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Ovladače divMMC/dicIDE
PříspěvekNapsal: 18.03.2024, 13:22 
Offline
Kecálek

Registrován: 06.04.2020, 16:24
Příspěvky: 222
Bydliště: Opava
Has thanked: 31 times
Been thanked: 70 times
Martin1 píše:
Prikladám niečo z mojho disassemblingu ESXDOSu.

Díky. Ano, toto je hned čitelnější :). Princip je mi celkem jasný, nevypadá to složitě. Je to určitý druh sériového přenosu.
Když na to ale tak koukám, tak by mě zajímalo, jak jsou řešeny errory, především CRC error. Pracuje se s tím, anebo se spoléhá, že bylo načteno správně? Protože mi přijde, že se sice hodnoty vyčtou, ale kontrola nikde...

Trošku odbočím zpět k divIDE. Co jsem koukal na ESXDOS a divIDE rutiny, tak tam se také ty GAL zákmity, na které já jsem bohužel narazil, nijak neřeší. Chápu, že každý počítá s tím, že HW je ve 100% stavu a funguje, ale mě to přijde jako naivní představa a jistota je prostě jistota. Zvláště když k tomu stačí (v případě divIDE) tak málo:
Kód:
ld bc,163
inir
dec b
dec b
inir
in a,(191)
ini
ini
bit 3,a
jr z,je to v hajzlu nastal zákmit, načti to znova


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Ovladače divMMC/dicIDE
PříspěvekNapsal: 18.03.2024, 13:39 
Offline
Profík

Registrován: 06.02.2019, 11:47
Příspěvky: 898
Has thanked: 51 times
Been thanked: 230 times
MTs píše:
Je to určitý druh sériového přenosu.
Když na to ale tak koukám, tak by mě zajímalo, jak jsou řešeny errory, především CRC error. Pracuje se s tím, anebo se spoléhá, že bylo načteno správně? Protože mi přijde, že se sice hodnoty vyčtou, ale kontrola nikde...

Sériový prenos zabezpečuje HW. Dáta do ZX už idú paralelne. CRC sa pri SPI móde nerieši, lebo je to pomalý prenos oproti natívnemu módu.
V ESXDOSe sa nerieši veľa chybových stavov. Nie je to jadrová elektráreň, tak sa čo-to dá tolerovať.
m.


Nahoru
 Profil  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 6 ] 

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 2 návštevníků


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete přikládat soubory v tomto fóru

Hledat:
Přejít na:  
Založeno na phpBB® Forum Software © phpBB Group
Český překlad – phpBB.cz