ISA-8 контроллер SD карт (XT-SD) (Создалась тут меж делом железка....)

Описания, советы, ремонт, эксплуатация старых IBM PC-совместимых ПК
Аватара пользователя
Tronix
Advanced Member
Сообщения: 3625
Зарегистрирован: 15.01.2008,11:00
Откуда: Москва

Вклад в сообщество

ISA-8 контроллер SD карт (XT-SD)

Сообщение Tronix » 10.12.2017,13:42

Создалась тут меж делом железка....

В принципе, проблемы как таковой нет. Есть XT-IDE и есть китай-переходники IDE->SD. Вот и все что нужно для работы с SD-картой на XT. У меня оно так и работает.

Но решил сделать отдельную железку. Не то, что бы офигеть как надо, скорее просто нужно было куда-то утилизировать валяющуюся CPLD EPM3032 уже лет 5 как. Суть идеи проста - разгрузить процессор от ногодрыга, переложив это в CPLD. Байт в порт послали - он последовательно выдался на SPI. Из порта прочитали уже готовый байт.

Изображение

На плате мы видим 2 (две) микросхемы - это 1533ИД7 в роли дешифратора порта и, собственно, CPLD EPM3032ALC44-10. Это вообщем то и все. Есть еще линейный стабилизатор 1117 (5в -> 3.3в) и немножко рассыпухи из блокировочных конденсаторов и пары-тройки сопротивлений на подтяжку SPI.

В порт данных пишутся или читаются данные. Порт управления и статуса объединен. При записи используются только 3 младших бита - бит 0 - установка скорости SPI, бит 1 - выбор CS, бит 2 - выбор CS2 или управление светодиодом. При чтении этого порта в 6 бите есть признак занятости BUSY (если CPLD сдвигает байт). В бите 7 есть признак наличия карты INSERT.

В качестве софта пока выступает слегка модифицированный драйвер SDPP .

Изображение

Железяка проверена на Поиск-2, 386, Pentium 1. Полет нормальный.

Гость

Сообщение Гость » 10.12.2017,14:21

У меня есть кучка адаптеров "толстых" с CF на SD - ни с одной не смог загрузиться :( SD карты разные, от 16MB.

Кстати, а реально ли сделать не массовую реплику SCSI2SD дешевле оригинала?

Аватара пользователя
Tronix
Advanced Member
Сообщения: 3625
Зарегистрирован: 15.01.2008,11:00
Откуда: Москва

Вклад в сообщество

Сообщение Tronix » 10.12.2017,14:30

CF не люблю, потому что цены какие-то нереальные. И не пользую. Да и вообще зачем переходник CF -> SD, если и то и то - флешка? Где вы CF этот взяли в качестве интерфейса?

А XT-IDE, что в Поиске, что в XT прекрасно работает у меня с такого типа переходником: https://ru.aliexpress.com/item/Free-Shi ... eLevelAB=0

Гость

Сообщение Гость » 10.12.2017,17:34

Tronix
У меня переходники несколько иные. Уж не помню откуда достались, но их много и по прямому назначению они бесполезны, ибо толще чем обычные CF - никуда не лезут :(

Дешевыми CF на небольшие объёмы закупился здесь же, всё-таки пассивный переходник радует - сам могу наколотить со второго раза переходник с CF на IDE :)

Но вот с дивайсами что по ссылке выше и с имеющимися небольшими SD (4-16MB из комплектров к старым фотикам) диск удаётся форматнуть, но не загрузиться с него нет :(

Аватара пользователя
Tronix
Advanced Member
Сообщения: 3625
Зарегистрирован: 15.01.2008,11:00
Откуда: Москва

Вклад в сообщество

Сообщение Tronix » 10.12.2017,17:41

В общем случае достаточно затереть нулевой сектор (MBR) нулями, например в WinHex, дальше на целевой машине (например на XT или 386 или что там у вас) делаем все как с обычным HDD - fdisk, format c:, sys a: c:.
Залог успеха - не размечать флешку на винде. Размечать только на целевой машине.

Гость

Сообщение Гость » 10.12.2017,17:57

Это потолочная скорость обмена?
Больше выжать нельзя?

Аватара пользователя
Tronix
Advanced Member
Сообщения: 3625
Зарегистрирован: 15.01.2008,11:00
Откуда: Москва

Вклад в сообщество

Сообщение Tronix » 10.12.2017,18:20

andyTh писал(а):Это потолочная скорость обмена?
Больше выжать нельзя?
Это DOS драйвер, написанный на C. Драйвер несет сам по себе высокую избыточность в необходимых телодвижениях. Плюс код на чистом C, без ассемблерных вставок. Вызов каждой процедуры это боль и страдание для 8088. Взгляните на это:

Код: Выделить всё

/* Single byte SPI transaction */
static
BYTE xchg_spi (BYTE dat)
{
	outp(OUTPORT,dat);
        while (inp(CONTROLPORT) & 0x40);
	return inp(OUTPORT);	/* Get received byte */
}
Превращается в эту махину:

Код: Выделить всё

   ;	
   ;	BYTE xchg_spi (BYTE dat)
   ;	
	assume	cs:_TEXT
xchg_spi	proc	near
	push	bp
	mov	bp,sp
   ;	
   ;	{
   ;		outp(OUTPORT,dat);
   ;	
	mov	dx,word ptr DGROUP:_OUTPORT
	mov	al,byte ptr [bp+4]
	out	dx,al
@5@58:
   ;	
   ;	        while (inp(CONTROLPORT) & 0x40);
   ;	
	mov	dx,word ptr DGROUP:_CONTROLPORT
	in	al,dx
	mov	ah,0
	test	ax,64
	jne	short @5@58
   ;	
   ;		return inp(OUTPORT);	/* Get received byte */
   ;	
	mov	dx,word ptr DGROUP:_OUTPORT
	in	al,dx
   ;	
   ;	}
   ;	
	pop	bp
	ret	
Поэтому отвечая на вопрос - нет, это скорость скорее плинтусная, чем потолочная.
Но этот драйвер позволил в кратчайшие сроки проверить просто работоспособность идеи "в целом". В дальнейшем, к карте планируется собственный BIOS, естественно на ассемблере, который будет позволять загружаться с карты, работать с ней прозрачно, и не жрать память как в случае с ДОС-драйвером.

Гость

Сообщение Гость » 10.12.2017,18:31

Даёшь NVME SSD на XT?! :biggrin:

Ну, а если серьёзно, будет ли в дальнейшем доступно для приобретения сие устройство?

Посредственный пользователь
Advanced Member
Сообщения: 1460
Зарегистрирован: 04.07.2014,16:01
Откуда: $pb

Сообщение Посредственный пользователь » 10.12.2017,18:54

IdeaFix писал(а):SD карты разные, от 16MB
Я меньше 2гб в руках не держал. Что за sd-мелкие карты по объёму?
Ищу: FlexOs v1.0-2.33 ,Flexos286, Flexos386 ,ConcurrentDos v5, ConcurrentDos286, EgaPaint ,Qunix, Supersoft Fortran66, Prospero Fortran, ansi-66 Fortran Dynacomp software, Venix 2.0 for pc/xt

Аватара пользователя
Tronix
Advanced Member
Сообщения: 3625
Зарегистрирован: 15.01.2008,11:00
Откуда: Москва

Вклад в сообщество

Сообщение Tronix » 10.12.2017,18:58

Посредственный пользователь писал(а):Что за sd-мелкие карты по объёму?
Реально 16 Мб. Темная эра технологий :)

Изображение

Гость

Сообщение Гость » 10.12.2017,19:03

Tronix Это MMC, у меня именно SD, тоже кэнон кстати. Думаю, нет смысла выкладывать фото.

Ответить