CGA и CF IDE адаптер на Altera MAX10

16-битные ПЦ-совместимые компьютеры с процессорами 8086/8088/80286 работающие под управлением ДОС

Moderator: Shaos

Vic3Dexe
Doomed
Posts: 370
Joined: 16 Dec 2014 11:58
Location: Киев

Re: CGA и CF IDE адаптер на Altera MAX10

Post by Vic3Dexe »

Tronix wrote:А если будет /MWR ?
А как разница? Либо то, либо се. А еще есть /IORD, /IOWR, их тоже не забыть.
Tronix wrote:Если спад ALE и MEMRn в нуле, то ждем фронта MEMRn и генерим ALE
Зачем его генерить заново? Адрес стробируется по спаду ALE. Значит, этот самый спад надо просто подтянуть куда следует.

Т.е., есть регистр, такт по фронту ALE, D=1. Далее предусматриваем регистру асинхронный сброс:
- либо на шине CPU, тогда сброс по MIO_CYCLE = (~/MRD | ~/MWR | ~/IORD | ~/IORW) = ~(/MRD & /MWR & /IORD & /IOWR), т.е. по спаду любого из этих сигналов.
- либо на шине кто-то еще, тогда сброс по MIO_CYCLE, но как только шину получит CPU.

Итого получаем ALE_RESET = MIO_CYCLE & CPU_HAS_BUS.
Нужен D-триггер с асинхронным сбросом - 1 шт., 4И-НЕ - 1 шт., И - 1 шт.
Ну и на формирование CPU_HAS_BUS чего-то по мелочи.

Что меня вымораживает, ALE и BALE - одно и тоже, т.е. адрес шины проца стробируется в латчи, и ЭТИМ же сигналом ВЫХОД этих латчей типа должен стробироваться в карточке.
Т.е. латчи настолько суровы, что пока ALE долетает до карточки, они уже устаканили данные на выходе...

В общем бред этот ALE, /MRD и остальные - наше все.
newold86 wrote:наглухо зависает...
MS-DOS loading - грузится msdos.sys (после io.sys).
Сложно что-то посоветовать, телепат из меня хреновый. Вангую ошибки в передаче данных.
Я ловил самым простым и тупым путем - делал слепок какого-либо сектора, например boot, закидывал в bios. Дальше bios в цикле читал этот сектор, сравнивал с оригиналом, и отваливался, если были расхождения, причем выводил на экран текст сектора, а отличия маркировал красным.
Так как у вас сама плата, похоже, работает нормально, вероятно проблема опять в шине.
Поэтому есть смысл читать сектор в RAM, а не в MAX, и сравнивать образ в биосе с образом в раме.
newold86
Devil
Posts: 716
Joined: 30 Nov 2013 11:08
Location: WWW

Re: CGA и CF IDE адаптер на Altera MAX10

Post by newold86 »

Vic3Dexe wrote: MS-DOS loading - грузится msdos.sys (после io.sys).
Сложно что-то посоветовать, телепат из меня хреновый. Вангую ошибки в передаче данных.
Я ловил самым простым и тупым путем - делал слепок какого-либо сектора, например boot, закидывал в bios. Дальше bios в цикле читал этот сектор, сравнивал с оригиналом, и отваливался, если были расхождения, причем выводил на экран текст сектора, а отличия маркировал красным.
Так как у вас сама плата, похоже, работает нормально, вероятно проблема опять в шине.
Поэтому есть смысл читать сектор в RAM, а не в MAX, и сравнивать образ в биосе с образом в раме.
Думаю, что в данном случае шина и прочее железо вообще не при чем - тем более, в XTC3 эта же плата работает нормально. И сектора, в конечном итоге, читаются в RAM, а не в MAX. Мало того, они еще и нормально выполняются оттуда - но только до определенного момента.
Думаю, что я крайне некорректно поступаю с объяснением BIOS’у (а он потом - DOS’у) того, что дисководов вдруг уже нет, зато есть жесткий диск, с которого и нужно грузиться.
В «своем» BIOS’е я подсмотрел, что куда нужно записать, а здесь, похоже, этого недостаточно... Как корректно сделать, нужно думать...
newold86
Devil
Posts: 716
Joined: 30 Nov 2013 11:08
Location: WWW

Re: CGA и CF IDE адаптер на Altera MAX10

Post by newold86 »

Vic3Dexe wrote:Что меня вымораживает, ALE и BALE - одно и тоже, т.е. адрес шины проца стробируется в латчи, и ЭТИМ же сигналом ВЫХОД этих латчей типа должен стробироваться в карточке.
Т.е. латчи настолько суровы, что пока ALE долетает до карточки, они уже устаканили данные на выходе...
Вроде не совсем так - защелки прозрачные, поэтому после появления ALE адрес уже начинает проникать сквозь них, а по спаду ALE адрес нужно защелкивать, но к этому моменту он (адрес) уже давно сквозь защелки прошел.
newold86
Devil
Posts: 716
Joined: 30 Nov 2013 11:08
Location: WWW

Re: CGA и CF IDE адаптер на Altera MAX10

Post by newold86 »

Блин, помогите с очередным глупым вопросом (совсем все забыл)... Есть такой кусок кода:

Code: Select all

MD_STRUC	STRUC
MD_SPEC1	DB	?	; SRT=D, HD UNLOAD=0F - 1ST SPECIFY BYTE
MD_SPEC2	DB	?	; HD LOAD=1, MODE=DMA - 2ND SPECIFY BYTE
MD_OFF_TIM	DB	?	; WAIT TIME AFTER OPERATION TILL MOTOR OFF
MD_BYT_SEC	DB	?	; 512 BYTES/SECTOR
MD_SEC_TRK	DB	?	; EOT ( LAST SECTOR ON TRACK)
MD_GAP		DB	?	; GAP LENGTH
MD_DTL		DB	?	; DTL
MD_GAP3 	DB	?	; GAP LENGTH FOR FORMAT
MD_FIL_BYT	DB	?	; FILL BYTE FOR FORMAT
MD_HD_TIM	DB	?	; HEAD SETTLE TIME (MILLISECONDS)
MD_STR_TIM	DB	?	; MOTOR START TIME (1/8 SECONDS)
MD_MAX_TRK	DB	?	; MAX. TRACK NUMBER
MD_RATE 	DB	?	; DATA TRANSFER RATE
MD_STRUC	ENDS


	ASSUME	CS:CODE,DS:DATA,ES:DATA

DISK_PARMS	PROC	NEAR

	MOV	CL,CS:[BX].MD_SEC_TRK	; GET SECTOR/TRACK
Почему MASM 6.14 ругается на него - "error A2006: undefined symbol : MD_SEC_TRK" ???
newold86
Devil
Posts: 716
Joined: 30 Nov 2013 11:08
Location: WWW

Re: CGA и CF IDE адаптер на Altera MAX10

Post by newold86 »

newold86 wrote:Почему MASM 6.14 ругается на него - "error A2006: undefined symbol : MD_SEC_TRK" ???
Потому, что в MASM 6.1 нужно еще и имя структуры указывать, блин...
Vic3Dexe
Doomed
Posts: 370
Joined: 16 Dec 2014 11:58
Location: Киев

Re: CGA и CF IDE адаптер на Altera MAX10

Post by Vic3Dexe »

newold86 wrote:прочее железо вообще не при чем - тем более, в XTC3 эта же плата работает нормально. И сектора, в конечном итоге, читаются в RAM, а не в MAX. Мало того, они еще и нормально выполняются оттуда - но только до определенного момента.
Нормально, если чтение организует int13 биоса XTC3. Если это ваш int13 или биос от сименса - уже ненормально.
Ошибка может быть как в коде, так и в железе.
Еще раз - убедитесь, что сектора читаются в RAM без ошибок в 100% случаев. Исключите железный фактор, потом ковыряйте код.
newold86 wrote:Думаю, что я крайне некорректно поступаю с объяснением BIOS’у (а он потом - DOS’у) того, что дисководов вдруг уже нет, зато есть жесткий диск, с которого и нужно грузиться.
Вы учтите, что ДОС натыкивает свои обертки для int13, плюс довольно свободно обращается с полями BDA, которые касаются дисков.
newold86 wrote:но к этому моменту он (адрес) уже давно сквозь защелки прошел
Да, точно. Вечно рассматриваю латчи как Д-триггеры.
newold86
Devil
Posts: 716
Joined: 30 Nov 2013 11:08
Location: WWW

Re: CGA и CF IDE адаптер на Altera MAX10

Post by newold86 »

Vic3Dexe wrote:Нормально, если чтение организует int13 биоса XTC3. Если это ваш int13 или биос от сименса - уже ненормально.
В обеих случаях - это мой собственный Int 13 (что с платой Siemens, что с XTC3)
Vic3Dexe wrote:Еще раз - убедитесь, что сектора читаются в RAM без ошибок в 100% случаев. Исключите железный фактор, потом ковыряйте код.
Ну верю я :), что дело в данном случае не в железе - проходит больше 10-ти обращений к Int 13, каждый раз по одной и той же схеме (при этом считанный код запускается и отрабатывает), и только в одном конкретном месте вдруг умирает...
Vic3Dexe
Doomed
Posts: 370
Joined: 16 Dec 2014 11:58
Location: Киев

Re: CGA и CF IDE адаптер на Altera MAX10

Post by Vic3Dexe »

newold86 wrote:проходит больше 10-ти обращений к Int 13
:ebiggrin: :lol:
У меня и дос с волковым иногда умудрялись загрузиться, это сколько обращений к инт13? А потом начинались чудеса...
Ладно, смотрите сами, заставить все равно же не получится :)

Если сименсу воткнуть биос от XTC3? Или скопировать int13 из XTC3 и воткнуть в MAX?
newold86
Devil
Posts: 716
Joined: 30 Nov 2013 11:08
Location: WWW

Re: CGA и CF IDE адаптер на Altera MAX10

Post by newold86 »

Vic3Dexe wrote:Если сименсу воткнуть биос от XTC3?
Такая мысль у меня есть, собирался пробовать
Vic3Dexe wrote:Или скопировать int13 из XTC3 и воткнуть в MAX?
У XTC3 мое собственное Int 13, которое и работает в MAX'е
newold86
Devil
Posts: 716
Joined: 30 Nov 2013 11:08
Location: WWW

Re: CGA и CF IDE адаптер на Altera MAX10

Post by newold86 »

Vic3Dexe wrote:Если сименсу воткнуть биос от XTC3?
Из-за исчерпания других идей воткнул - было немножко непросто ужать 2 штуки 32К ROM BIOS от PC/XT в одну 8K ROM BIOS от Siemens'а, но справился :)
Результат - все отлично работает, даже прогнал Checkit от начала до конца. Как и ожидал, проблема не с железом... Что, наверное, слегка хуже - больше возни разбираться... Я уже сравнивал все, что пришло в голову (типа BIOS data area) с моим BIOS'ом (вернее, PC/XT) и BIOS'ом Siemens - ну не вижу реальных отличий на момент начала загрузки, а вот виснет, зараза...
Tronix
Doomed
Posts: 662
Joined: 18 Nov 2013 02:38
Location: Москва

Re: CGA и CF IDE адаптер на Altera MAX10

Post by Tronix »

newold86 wrote: виснет, зараза...
Меня иногда в подобных ситуациях выручают сорцы доса. Не в плане компильнуть и бряков понаставить в виде printf, а в плане просто посмотреть на код в предпологаемом месте падения беглым взглядом....

UPD: Хотя может быть можно и компильнуть, я не пробовал. Да и в большинстве случаев незачем.
newold86
Devil
Posts: 716
Joined: 30 Nov 2013 11:08
Location: WWW

Re: CGA и CF IDE адаптер на Altera MAX10

Post by newold86 »

Да мне что-то очень лень напрягаться, пытаюсь придумать оптимальный способ, чтобы минимизировать телодвижения, но проблему решить :)
Vic3Dexe
Doomed
Posts: 370
Joined: 16 Dec 2014 11:58
Location: Киев

Re: CGA и CF IDE адаптер на Altera MAX10

Post by Vic3Dexe »

newold86 wrote:Результат - все отлично работает
Битый/багованый биос у сименса? В части какого-то другого прерывания, которые начинает юзать дос. Либо в части "понимания" HDD.
newold86
Devil
Posts: 716
Joined: 30 Nov 2013 11:08
Location: WWW

Re: CGA и CF IDE адаптер на Altera MAX10

Post by newold86 »

Vic3Dexe wrote:
newold86 wrote:Результат - все отлично работает
Битый/багованый биос у сименса? В части какого-то другого прерывания, которые начинает юзать дос. Либо в части "понимания" HDD.
Не думаю - он совершенно нормально грузится как с FDD, так и с моей собственной предыдущей платы (вариация на тему CF-IDE, но там я использую чужой CF-IDE BIOS).
Как и раньше, думаю, что я некорректно объясняю системе, что с определенного момента появился HDD, и работать нужно с ним...
Tronix
Doomed
Posts: 662
Joined: 18 Nov 2013 02:38
Location: Москва

Re: CGA и CF IDE адаптер на Altera MAX10

Post by Tronix »

Vic3Dexe wrote: Т.е., есть регистр, такт по фронту ALE, D=1. Далее предусматриваем регистру асинхронный сброс:
- либо на шине CPU, тогда сброс по MIO_CYCLE = (~/MRD | ~/MWR | ~/IORD | ~/IORW) = ~(/MRD & /MWR & /IORD & /IOWR), т.е. по спаду любого из этих сигналов.
- либо на шине кто-то еще, тогда сброс по MIO_CYCLE, но как только шину получит CPU.

Итого получаем ALE_RESET = MIO_CYCLE & CPU_HAS_BUS.
Нужен D-триггер с асинхронным сбросом - 1 шт., 4И-НЕ - 1 шт., И - 1 шт.
Ну и на формирование CPU_HAS_BUS чего-то по мелочи.
ТМ2 подойдет в качестве триггера? А CPU_HAS_BUS - это когда AEN=0 и что еще? REFRESH?