Zaczynam powoli wracać między żywych, i postanowiłem wrócić do mojego projektu. Jako że ostatnio miałem więcej czasu żeby programować a mniej siły żeby lutować, zabrałem się za aspekt software'owy, a mianowicie sportowałem na mój komputer CP/M-a. Na załączonym zdjęciu widać jak pracuje. Nie robi póki co za wiele, jedynie narzeka że nie ma dysku, ale działa. Dysk zorganizuję na karcie CF, tylko muszę ją zakupić. 8MB wystarczy po wszystkie czasy na wszystkie moje obecne i przyszłe maszyny z CP/M-em.
Komputer 8-bitowy
Moderatorzy: gsmok, tszczesn, Romekd, Einherjer, OTLamp
- jethrotull
- moderator
- Posty: 3998
- Rejestracja: sob, 3 czerwca 2006, 21:51
- Lokalizacja: Poznań
- jethrotull
- moderator
- Posty: 3998
- Rejestracja: sob, 3 czerwca 2006, 21:51
- Lokalizacja: Poznań
Re: Komputer 8-bitowy
Mam pewien kłopot z kartami Compact Flash.
Spośród trzech moich kart jedna działa zgodnie z założeniami, a dwie pozostałe (różnych producentów i różnych rozmiarów) zapisują jedynie trzy na cztery bajty, a co czwarty bajt nie jest zapisywany. Odczyt działa prawidłowo. Nie sądzę aby była to kwestia prędkości, próbowałem opóźnić każdą operację zapisu o 10ms, bez skutku.
mój kod:
Czy ktoś się może spotkał z takim problemem?
Spośród trzech moich kart jedna działa zgodnie z założeniami, a dwie pozostałe (różnych producentów i różnych rozmiarów) zapisują jedynie trzy na cztery bajty, a co czwarty bajt nie jest zapisywany. Odczyt działa prawidłowo. Nie sądzę aby była to kwestia prędkości, próbowałem opóźnić każdą operację zapisu o 10ms, bez skutku.
mój kod:
Kod: Zaznacz cały
cf_writeSector:
PUSH AF
PUSH BC
CALL cf_waitCmd ; wait till the cf card is ready for command
LD A, CF_WRITE ; prepare the write command
OUT (CF_CMD), A ; send the write command
LD B, 0 ; write 512 bytes, 2 bytes per loop iteration
.loop:
CALL cf_waitDat
LD A, (HL)
OUT (CF_DAT), A ; write a byte of data
INC HL
CALL cf_waitDat
LD A, (HL)
OUT (CF_DAT), A ; write a byte of data
INC HL
DJNZ .loop
POP BC
POP AF
RET
cf_waitCmd:
PUSH AF
.loop:
IN A, (CF_STATUS) ; read the cf status word
BIT 7, A
JR NZ, .loop ; busy bit (D7) should be 0
BIT 6, A
JR Z, .loop ; drvrdy (D6) should be 1
POP AF
RET
cf_waitDat:
PUSH AF
.loop:
IN A, (CF_STATUS) ; read the cf status word
BIT 7, A
JR NZ, .loop ; busy bit (D7) should be 0
BIT 3, A
JR Z, .loop ; drq bit (D3) should be 1
POP AF
RET
- Tomasz Gumny
- 1875...2499 postów
- Posty: 2288
- Rejestracja: pn, 1 stycznia 2007, 23:18
- Lokalizacja: Trzcianka/Poznań
- Kontakt:
- jethrotull
- moderator
- Posty: 3998
- Rejestracja: sob, 3 czerwca 2006, 21:51
- Lokalizacja: Poznań
- jethrotull
- moderator
- Posty: 3998
- Rejestracja: sob, 3 czerwca 2006, 21:51
- Lokalizacja: Poznań
Re: Komputer 8-bitowy
Jako że wiem o kartach CF, że są hałaśliwe, dodałem duży kondensator elektrolityczny żeby filtrował zasilanie przy gnieździe taśmy dysku na płycie głównej, i kolejny kondensator ceramiczny 1uF bezpośrednio przy karcie (na płytce adaptera). Jeśli to nie przyniesie efektów, dodam jeszcze dławik między tymi dwoma kondensatorami.
Ostatecznie, CP/M potrzebuje jedynie 128 bajtów na sektor, spośród 512 oferowanych przez kartę CF, więc w najgorszym wypadku będę programowo "omijał" niedziałające bajty, chociaż takie rozwiązanie trudno nazwać eleganckim.
Może też kupię więcej kart tego typu/producenta, który u mnie działa.
Ostatecznie, CP/M potrzebuje jedynie 128 bajtów na sektor, spośród 512 oferowanych przez kartę CF, więc w najgorszym wypadku będę programowo "omijał" niedziałające bajty, chociaż takie rozwiązanie trudno nazwać eleganckim.
Może też kupię więcej kart tego typu/producenta, który u mnie działa.