Komputer 8-bitowy

Komputery retro, konsole do gier itd.

Moderatorzy: gsmok, tszczesn, Romekd, Einherjer, OTLamp

Awatar użytkownika
jethrotull
3125...6249 postów
3125...6249 postów
Posty: 4013
Rejestracja: sob, 3 czerwca 2006, 21:51
Lokalizacja: Poznań

Re: Komputer 8-bitowy

Post autor: jethrotull »

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.
20241021_211657.jpg
Awatar użytkownika
jethrotull
3125...6249 postów
3125...6249 postów
Posty: 4013
Rejestracja: sob, 3 czerwca 2006, 21:51
Lokalizacja: Poznań

Re: Komputer 8-bitowy

Post autor: jethrotull »

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:

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
Czy ktoś się może spotkał z takim problemem?
Awatar użytkownika
Tomasz Gumny
1875...2499 postów
1875...2499 postów
Posty: 2297
Rejestracja: pn, 1 stycznia 2007, 23:18
Lokalizacja: Trzcianka/Poznań
Kontakt:

Re: Komputer 8-bitowy

Post autor: Tomasz Gumny »

DJNZ .loop kiedy się kończy? INC HL nie ustawia znaczników.
Tomek
Awatar użytkownika
jethrotull
3125...6249 postów
3125...6249 postów
Posty: 4013
Rejestracja: sob, 3 czerwca 2006, 21:51
Lokalizacja: Poznań

Re: Komputer 8-bitowy

Post autor: jethrotull »

Rejestr B jest licznikiem pętli.
Awatar użytkownika
jethrotull
3125...6249 postów
3125...6249 postów
Posty: 4013
Rejestracja: sob, 3 czerwca 2006, 21:51
Lokalizacja: Poznań

Re: Komputer 8-bitowy

Post autor: jethrotull »

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.
Awatar użytkownika
jethrotull
3125...6249 postów
3125...6249 postów
Posty: 4013
Rejestracja: sob, 3 czerwca 2006, 21:51
Lokalizacja: Poznań

Re: Komputer 8-bitowy

Post autor: jethrotull »

Żeby nie było że tylko zaczynam nowe projekty i nie kończę starych, oto mój komputer na 8085 w zaimprowizowanej obudowie:
20250309_155439.jpg
20250309_155441.jpg
20250309_155456.jpg
A pamiętacie karty CF, które zapisywały (lub odczytywały, trudno stwierdzić) tylko trzy bajty na każde cztery, a czwarty bajt ignorowały?
Otóż okazało się że moje pozostałe karty, które uważałem za w pełni sprawne/kompatybilne, nie zapisują (lub nie odczytują) ostatnich dwóch bajtów każdego sektora.

Próbowałem różnych sztuczek z opóźnianiem sygnału IORD opisanych tu: https://www.vtsys.pl/interface-compact-flash/
ale bez powodzenia. W końcu, w akcie desperacji, zmniejszyłem rozmiar logicznego sektora do 256 bajtów, a drugą połowę sektora ignoruję. W sumie to dałoby się tak zapisywać sektory, żeby mieć 256 bajtów na sektor i jednocześnie obsługować karty z oboma rodzajami problemu, wystarczyłoby używać dwóch pierwszych bajtów z każdych czterech.
ODPOWIEDZ