Тогда я уже торможу. :) Все пора домой.Цитата:
Сообщение от spensor
Нашел в ПрофПЗУ процедуру теста - разберу до конца потом кину.
Вид для печати
Тогда я уже торможу. :) Все пора домой.Цитата:
Сообщение от spensor
Нашел в ПрофПЗУ процедуру теста - разберу до конца потом кину.
Mick, ты не прав насчёт порта #D9BE. учитывай, что при outi/outd сначала уменьшается b, а потом bc используется в качестве адреса порта
Согласно datasheet на Z80Цитата:
Сообщение от SMT
OUTD (BC) <- (HL)
B = B-1
HL = HL -1
OUTI (BC) <- (HL)
B = B-1
HL = HL +1
А теперь смотрим пример
LAB_1C98: push hl
1c99 0ebe ld c,0beh
1c9b 11f9d9 ld de,0d9f9h ;старшие байты портов
1c9e af xor a
LAB_1C9F: ld b,d
1ca0 23 inc hl
1ca1 edab outd ;запись в порт 0d9beh - сигнал WR_HI
1ca3 43 ld b,e
1ca4 eda3 outi ;запись в порт 0f9beh HDD
1ca6 23 inc hl
1ca7 3d dec a ;повторяем 255 раз
1ca8 20f5 jr nz,LAB_1C9F
1caa e1 pop hl
1cab c9 ret
Ну и кто здесь не прав на счет 0d9beh
Цитата:
Сообщение от SMT
Так кто все-таки прав? Может STS'ом для правильности "обкатать" этот кусок?Цитата:
Сообщение от Mick
даташиты врут. это уже давно известный факт, что в командах outi/otir и outd/otdr сначала декрементируется B, а потом BC выставляется на ША в качестве номера порта.
Что все? Z80,Z180? Да фирма Zilog оказывается большой вруньей.Цитата:
Сообщение от jtn
А я верил :) .
Я хочу услышать тоже, мнение професионального программера. Есть такие?
Ну возмите, да STS'ом протрассируйте, то что оно правильно сработает сомнений не вызывет! Думаю, что профессионализм Stalker'а сомнений не вызывет?Цитата:
Сообщение от Mick
Продолжим разбираться на счет OUTD
Вот выдержка из статьи Ивана Рощина о влиянии флага переноса в процедуре OUTD
"При написании одной программы мне понадобилось наиболее оптимально (по объёму) реализовать запись данных в первые 11 регистров музыкального сопроцессора из области памяти #8000—#800A. Сначала я сделал это так:
LD HL,#800A
M1 LD BC,#FFFD
OUT (C),L
LD B,#BF
OUTD
BIT 7,L
JR Z,M1 "
Теперь обясните мне, в свете ваших утверждений каким образом он записывает в порт #BF.
И еще приведите мне документально всеми известный факт - иначе не поверю в вранье фирмы Zilog.
Alone Coder проверял на Z80 и КР1858ВМ1. так же он сообщал, что некий Т34ВМ1 реализует поведение outd/outi по даташитам (то есть неправильное)
Mick, порты #BFFD и #BEFD - одно и то же, A8 не участвует в дешифрации. не хочешь верить - проверь на живом спектруме, что ld bc,#80FD/OUTI нормально пишет в #7FFD
По твоей просьбе, spensor, вот еще пример из ПрофПЗУ процедуры работы с NRAM (смещение все тоже - 7 страница 1с000h)
Попытлся прокомментировать, что -то сам запутался. Короче там все как на схеме ни чего лишнего.
Еще нашел инициализацию контроллера прерываний. Если надо кину.