SlothPC (8080A)
Moderator: Shaos
SlothPC (8080A)
У меня уже какое-то время имеется голая плата "ISA 8-Bit Backplane" от Сергея Киселёва:
https://github.com/skiselev/isa8_backplane
И я подумал, а почему бы не сделать для неё процессорную плату на 8080A (КР580ВМ80А) раз уж все нужные напряжения тут уже имеются?
Пусть такой концепт называется SlothPC
Мне гугловский AI Gemini даже предложил девиз для этого концепта: Relax, it's a SlothPC
SlothPC можно будет использовать в качестве отладочного стенда для ISA-плат типа Sprinternet-а или каких-то новодельных звуковух...
https://github.com/skiselev/isa8_backplane
И я подумал, а почему бы не сделать для неё процессорную плату на 8080A (КР580ВМ80А) раз уж все нужные напряжения тут уже имеются?
Пусть такой концепт называется SlothPC
Мне гугловский AI Gemini даже предложил девиз для этого концепта: Relax, it's a SlothPC
SlothPC можно будет использовать в качестве отладочного стенда для ISA-плат типа Sprinternet-а или каких-то новодельных звуковух...
Я тут за главного - если что шлите мыло на me собака shaos точка net
Re: SlothPC (8080A)
нуууууу, не прошло и 2х лет как
в теме по z80 или 180 или 280 я уже предлагал такой вариант
но все сказали - нафиг надо
в теме по z80 или 180 или 280 я уже предлагал такой вариант
но все сказали - нафиг надо
Re: SlothPC (8080A)
да ничо не сказалиimsushka wrote:нуууууу, не прошло и 2х лет как
в теме по z80 или 180 или 280 я уже предлагал такой вариант
но все сказали - нафиг надо
viewtopic.php?p=170737#p170737
наоборот человек как раз и начал городить всё на этой ISA8 плате
Я тут за главного - если что шлите мыло на me собака shaos точка net
Re: SlothPC (8080A)
Память этого компика можно совсем по простому разбить:
#0000...#7FFF - RAM 32KB
#8000...#9FFF - Cartridge nedoMem (RAM/ROM/etc)
#A000...#BFFF - ROM 8KB
#C000...#FFFF - ISA-bus (подключение как в Спринтере через окно 16KB)
Если воткнуть туда SRAM-картридж, то объём сплошного ОЗУ будет 40КБ (причём область картриджа сможет переключаться страницами по 8КБ и в пределе допускать наличие до полумега памяти). Вывод можно сделать через nedoText/SX (текст 80x25 на NTSC телек) - скажем с помощью отдельной ISA-платки. Ввод - через PC-клаву подцепленную к микроконтроллеру PIC (PS/2 или USB). Но для начала можно последовательный порт на 6850 типа как в RC2014 организовать.
При старте всё адресное пространство будет занимать копии ПЗУ 8KB, в первых трёх байтах которого будет прошито C3 03 A0 (JMP #A003) - при передаче управления на адрес #A003 (по факту перехода A15 из 0 в 1) триггер начального старта будет сброшен в нормальное состояние (типа как на РК) и карта памяти будет установлена в том виде, как описано выше. Можно сделать на мелкой логике выборку IO/MEM и на порты повесить 6850, а также пару регистров задающих старшие биты адреса для nedoMem (A13...A18) и ISA (A14...A19), которые также будут управлять индикацией на двух 7-сегментных индикаторах (пусть будет). А можно и в общее адресное пространство их воткнуть - скажем в конец области ПЗУ...
P.S. Вместо обычного срама 32КБ можно поставить энергонезависимую память M48T35 с часами где в конце сидят:
#0000...#7FFF - RAM 32KB
#8000...#9FFF - Cartridge nedoMem (RAM/ROM/etc)
#A000...#BFFF - ROM 8KB
#C000...#FFFF - ISA-bus (подключение как в Спринтере через окно 16KB)
Если воткнуть туда SRAM-картридж, то объём сплошного ОЗУ будет 40КБ (причём область картриджа сможет переключаться страницами по 8КБ и в пределе допускать наличие до полумега памяти). Вывод можно сделать через nedoText/SX (текст 80x25 на NTSC телек) - скажем с помощью отдельной ISA-платки. Ввод - через PC-клаву подцепленную к микроконтроллеру PIC (PS/2 или USB). Но для начала можно последовательный порт на 6850 типа как в RC2014 организовать.
При старте всё адресное пространство будет занимать копии ПЗУ 8KB, в первых трёх байтах которого будет прошито C3 03 A0 (JMP #A003) - при передаче управления на адрес #A003 (по факту перехода A15 из 0 в 1) триггер начального старта будет сброшен в нормальное состояние (типа как на РК) и карта памяти будет установлена в том виде, как описано выше. Можно сделать на мелкой логике выборку IO/MEM и на порты повесить 6850, а также пару регистров задающих старшие биты адреса для nedoMem (A13...A18) и ISA (A14...A19), которые также будут управлять индикацией на двух 7-сегментных индикаторах (пусть будет). А можно и в общее адресное пространство их воткнуть - скажем в конец области ПЗУ...
P.S. Вместо обычного срама 32КБ можно поставить энергонезависимую память M48T35 с часами где в конце сидят:
https://www.digikey.com/en/products/detail/stmicroelectronics/M48T35-70PC1/606269 (тут просят $33.73 за один чип)#7FF8 - управление (Write-bit,Read-bit,Sign-bit,Calibration)
#7FF9 - секунды в BCD (STOP-bit,seconds/10,seconds%10)
#7FFA - минуты в BCD (0,minutes/10,minutes%10)
#7FFB - часы в BCD (0,0,hours/10,hours%10)
#7FFC - век и день недели (0, FT-must be 0, Century Enable Bit, Century Bit, 0, day 1-7)
#7FFD - день месяца в BCD (0,0,day/10,day%10)
#7FFE - месяц в BCD (0,0,0,month/10,month%10)
#7FFF - год в BCD (year/10,year%10)
Я тут за главного - если что шлите мыло на me собака shaos точка net
Re: SlothPC (8080A)
68B50 занимает 2 байта на чтение и запись
регистры для задания старших адресов картриджа и ISA можно сделать только на запись - ещё 2 байта
ещё наверное понадобится чтение состояния IRQ-ов (IRQ2-IRQ7), а режим DMA мы пока проигнорируем - ещё 1 байт (можно совместить с одним из тех, что на запись)
чтобы получить скорость в COM-порту 115200 бод частота для 68B50 должна быть 7.3728МГц (как в RC2014)
кроме этого на шине ISA должна быть частота 14.1818МГц (например для AdLib, который делит эту частоту на 4, чтобы подать затем на OPL2 чип)
частоту для проца можно получить от частоты, идущей на 68B50 - скажем можно взять осциллятор 14.7456МГц и поделить его частоту на 2 для 68B50, а для 8080 поделить на 6, сформировав "красивые" непересекающиеся фазы на счётчике считающем до 6:я знаю можно проще, но тогда будет деление входной частоты на 4, а хотелось бы на 6, чтобы получить частоту процессора близкую к идеальной - 2.4576МГц (по всем длинам и отступам сюда отлично вписывается не только старый-добрый КР580ВМ80А, но и классический 8080A-1 и может быть даже чуть более медленный 8080A-2)
P.S. Наверно можно эти же 14.7456МГц подать на OSC вход ISA шины, но AdLib без коррекции при этом станет фальшивить на 4% (сдвиг между соседними нотами напомню составляет 5.95%) так что наверное для ISA надо будет отдельно стоящий осциллятор 14.1818МГц воткнуть (либо программировать OPL2 с учётом изменённой частоты)...
регистры для задания старших адресов картриджа и ISA можно сделать только на запись - ещё 2 байта
ещё наверное понадобится чтение состояния IRQ-ов (IRQ2-IRQ7), а режим DMA мы пока проигнорируем - ещё 1 байт (можно совместить с одним из тех, что на запись)
чтобы получить скорость в COM-порту 115200 бод частота для 68B50 должна быть 7.3728МГц (как в RC2014)
кроме этого на шине ISA должна быть частота 14.1818МГц (например для AdLib, который делит эту частоту на 4, чтобы подать затем на OPL2 чип)
частоту для проца можно получить от частоты, идущей на 68B50 - скажем можно взять осциллятор 14.7456МГц и поделить его частоту на 2 для 68B50, а для 8080 поделить на 6, сформировав "красивые" непересекающиеся фазы на счётчике считающем до 6:
Code: Select all
|0|1|2|3|4|5|
_
F1 / \_________
_____
F2 ____/ \_
P.S. Наверно можно эти же 14.7456МГц подать на OSC вход ISA шины, но AdLib без коррекции при этом станет фальшивить на 4% (сдвиг между соседними нотами напомню составляет 5.95%) так что наверное для ISA надо будет отдельно стоящий осциллятор 14.1818МГц воткнуть (либо программировать OPL2 с учётом изменённой частоты)...
Я тут за главного - если что шлите мыло на me собака shaos точка net
Re: SlothPC (8080A)
есть 14,1818 стандарт для исы
вот и используй ее для уарта, ну будет не 115200 и 115100 и что ?
на вс современых чипах подстройка скорости
я на пике 675 делал программый уарт и все читалось без проблем
вот и используй ее для уарта, ну будет не 115200 и 115100 и что ?
на вс современых чипах подстройка скорости
я на пике 675 делал программый уарт и все читалось без проблем
Re: SlothPC (8080A)
на 115200 программно делал? и кстати при 14.1818 МГц оно будет 110795...
Я тут за главного - если что шлите мыло на me собака shaos точка net
Re: SlothPC (8080A)
нет канешно, 19200 или гдето там рядомShaos wrote:на 115200 программно делал? и кстати при 14.1818 МГц оно будет 110795...
3% ошибки не проблема
Re: SlothPC (8080A)
Ну вот, а мне 115200 надо
Я тут за главного - если что шлите мыло на me собака shaos точка net
Re: SlothPC (8080A)
Ещё такая идея есть, что хочется из старья иметь только сам проц, а все остальные микрухи будут относительно новыми (90e-00e), поэтому никакого другого околоинтеловского барахла типа ГФ24, ВК28, ВН59 и т.д. тут не будет. Для прерываний наверное надо на мелкой логике каких-то триггерочков нагородить, чтобы они ловили запросы на прерывания по IRQ-ам и защёлкивали, пока проц не дойдёт до их обработки - на проц в итоге может идти одно прерывание по #FF (RST 7) и обработчик уже сам будет смотреть какие битики опрокинулись (причём INTA из слова состояния мне доставать не очень хочется поэтому триггерочки можно сбрасывать по INTE) - вобщем как-то так...
Я тут за главного - если что шлите мыло на me собака shaos точка net
Re: SlothPC (8080A)
Интересная схема формирования фаз на мелкой логике попалась мне в старом интеловском мануале:
Тут счёт начинается с 3 и перезагрузка происходит синхронно на счёте 12, т.е. считаются 10 тактов:Красиво
В моём случае можно начинать с 5 и считать до 10 - при этом старший бит счётчика сразу становится F2, а F1 должен быть в единице только при 0110:При частоте 14.7456 МГц длительность активной части F1 (а также пауза между F1 и F2 и пауза между F2 и F1) в данном случае будет составлять 67.8 нс, а длительность активной части F2 - 203.5 нс (т.е. частота процессора будет 2.46 МГц), что подпадает под тайминги 8080A-1, но чуть-чуть выходит за пределы таймингов 8080A-2 и 8080A:
P.S. Если считать не 6 тактов, а 5 (убрав паузу между F1 и F2), то частота процессора поднимется до 2.95 МГц, но 8080A скорее всего выпадет т.к. TD3 тоже станет 67.8 нс и F2 перестанет быть чисто симметричным, что некрасиво...
Тут счёт начинается с 3 и перезагрузка происходит синхронно на счёте 12, т.е. считаются 10 тактов:
Code: Select all
XOR1 XOR2 NAND1 NAND2 F1 F2
0011 (3) 0 0 00=1 1 0 0
0100 (4) 0 0 10=1 1 0 0
0101 (5) 1 0 11=0 1 1 0
0110 (6) 1 0 11=0 1 1 0
0111 (7) 0 0 10=1 1 0 0
1000 (8) 0 1 00=1 0 0 1
1001 (9) 1 1 01=1 0 0 1
1010 (10) 1 1 01=1 0 0 1
1011 (11) 0 1 00=1 0 0 1
1100 (12) 0 1 10=1 0 0 1
В моём случае можно начинать с 5 и считать до 10 - при этом старший бит счётчика сразу становится F2, а F1 должен быть в единице только при 0110:
Code: Select all
F1 F2
0101 (5) 0 0
0110 (6) 1 0
0111 (7) 0 0
1000 (8) 0 1
1001 (9) 0 1
1010 (10) 0 1
Code: Select all
SlothPC 8080A 8080A-2 8080A-1
TF1 67.8 min 60 min 60 min 50 - front F1 to fall F1
TF2 203.5 min 220 min 175 min 145 - front F2 to fall F2
TD1 67.8 min 0 min 0 min 0 - fall F1 to front F2
TD2 67.8 min 70 min 70 min 60 - fall F2 to front F1
TD3 135.6 min 80 min 70 min 60 - front F1 to front F2
Я тут за главного - если что шлите мыло на me собака shaos точка net
Re: SlothPC (8080A)
Можно ещё сделать прерывание от кнопки (назовём его IRQ0) и от встроенного RS232-контроллера 68B50 (назовём его IRQ1), а контроллер клавы (и мыши?) сделать отдельной ISA-платкой и соответственно оно задействует одно из прерываний ISA-шины (IRQ2-IRQ7). Также сделать отдельной ISA-платкой текстовый видеовыход nedoText/SX, который тоже задействует одно из прерываний. В итоге у нас получается 8 "виртуальных" прерываний IRQ0-IRQ7, которые можно будет побитно маскировать.Shaos wrote:Ещё такая идея есть, что хочется из старья иметь только сам проц, а все остальные микрухи будут относительно новыми (90e-00e), поэтому никакого другого околоинтеловского барахла типа ГФ24, ВК28, ВН59 и т.д. тут не будет. Для прерываний наверное надо на мелкой логике каких-то триггерочков нагородить, чтобы они ловили запросы на прерывания по IRQ-ам и защёлкивали, пока проц не дойдёт до их обработки - на проц в итоге может идти одно прерывание по #FF (RST 7) и обработчик уже сам будет смотреть какие битики опрокинулись (причём INTA из слова состояния мне доставать не очень хочется поэтому триггерочки можно сбрасывать по INTE) - вобщем как-то так...
По поводу управления моей выводилкой текста 80x25: viewtopic.php?p=77766#p77766
Надо превратить это в работу по прерыванию (полинг тоже можно оставить) - можно сделать так, что OFLAG=1 будет сбрасывать IFLAG автоматически - в итоге программе ничего не надо будет делать при переходе OFLAG из 0 в 1, а прерывание будет срабатывать по переходу OFLAG из 1 в 0 (т.е. IRQn=!OFLAG). Поллинг может вычитывать бит OFLAG из порта статуса (чтобы можно было без прерываний работать чисто программно) и если он 0, то программа засылает байт в порт данных - можно сделать так, что IFLAG при этом автоматически установится в 1, а изменившийся из 0 в 1 OFLAG этот IFLAG автоматически сбросит - далее изменение из 1 в 0 сигнала OFLAG приведёт к вызову прерывания (если оно не замаскировано) - такую платку даже можно будет потом в PC XT новоделах задействовать, поправив ихний опенсорсный BIOS!Shaos wrote:Взаимодействие с девайсом предпологается осуществлять по 10 сигналам (плюс земля): D0, D1, D2, D3, D4, D5, D6, D7, IFLAG, OFLAG (из них выходной только OFLAG, а все остальные - входы).
Внешнее устройство ждёт когда OFLAG=0, затем выводит в D0...D7 нужный код и взводит IFLAG=1, далее ждём когда OFLAG=1 и сбрасываем IFLAG=0. Пока не станет OFLAG=0 новый код засылать нельзя.
Разбиение такого компа на несколько плат упростит разработку и отладку, причём главная плата SlothPC сможет работать сама по себе - даже без ISA-шины, т.к. там кроме процессора уже будет ОЗУ, ПЗУ и COM-порт. Можно джамперами выбирать как пускаться - с использованием встроенного COM-порта или с использованием ввода-вывода по ISA-шине (можно зарезервировать специальные порты и прерывания под это дело - типа для nedoText/SX взять порты 220h/221h и прерывание IRQ2, а для самодельной клавиатуры - порты 110h/111h и прерывание IRQ5?). Ну и плюс уже существующие PC-платы можно будет тут же задействовать - главное следить, чтобы оно друг с другом не конфликтовало (например AdLib разрешает выбирать прерывания IRQ2, IRQ3 или IRQ5).
Я тут за главного - если что шлите мыло на me собака shaos точка net
Re: SlothPC (8080A)
Можно уже готовую плату найти на 6-8 isa16 разъемов используя неисправную чипсетную материнку 286/386. Типа М219/TD70AN/M396 и подобную просто обрезав лишние проводники и удалив чипсет с процессором и обвязкой.
Re: SlothPC (8080A)
А ещё интересна схема БП, формирующая 2 доп. напряжения из +5-ти... Почему такая любовь к 8080? Ну работай с тем же z80, как с 8080, чем плохо? Или даже с 8085. Всяко лучше.Shaos wrote:Интересная схема формирования фаз на мелкой логике попалась мне в старом интеловском мануале...
Re: SlothPC (8080A)
в z80 много лишнего и некоторые программы написанные для 8080 неправильно работают на z80, к тому же он теперь такой же труп как и 8080/8085 - так зачем же тогда отходить от истоков?…
P.S. блок питания ATX уже имеет все напряжения, а если вдруг -5 отсутствует, то на плате Киселёва есть преобразователь из -12 в -5...
P.S. блок питания ATX уже имеет все напряжения, а если вдруг -5 отсутствует, то на плате Киселёва есть преобразователь из -12 в -5...
Я тут за главного - если что шлите мыло на me собака shaos точка net