Товарищи гуру, помогите одолеть сумасшествие. Никак не могут понять смысла выделенных строк в нижеприведенном коде из РК ДОС.
Тут должен запускаться дисковод (SELECT) и ожидаться сигнал готовности (READY).
Также, разрешается буферный регистр DD6, для вывода управляющих сигналов на дисковод.
И все вроде нормально, если бы не анализ номера диска (нулевой - A, или не нулевой - B), и причем тут бит PC2 и его сигнал SIDE.
Сигнал SELECT_B находится на порту PC3, вроде бы. И "включается" он тоже нулем, по идее.
![]()
Вот дура. Если дисковод B, то A = 1 и 1 + 5 = 6 (0110b), и это PC3 в ноль!Код:FDC_CONTROL = 0F003h FDCPORT_CTRLIN = 0F1h ; ED2C DRVStart: call DRVStop lda DOSV_OPDRV ora a jnz MED38 mvi a, 05h MED38: adi a, 05h; 05h 0101b PC2 SIDE = 1; 06h 0110b PC3 SELECTB = 0 ; 0Ah 1010b PC5 SELECTA = 0 lxi h, FDC_CONTROL mov m, a mvi m, 0Fh ; 1111b PC7 DRIVEGATE = 1 (ENABLE) DRVReady: lxi h, 0 MED43: in FDCPORT_CTRLIN ani FDC_DRIVEREADY rz![]()
Разработчику (Седову) зачет за головоломки в коде. )





wtf
Ответить с цитированием