при описании работы команд OUTI и OUTD
везде описывается одна и та же последовательность
Reads from (HL) and writes to the (C) port. HL is then incremented, and B is decremented.
перекинули содержимое (hl) в порт (c)
а только потом инкремент hl и декремент b
как в итоге оказалось
TRUЪ ПОСЛЕДОВАТЕЛЬНОСТЬ ВОТ ТАКАЯ!!!
А В EMUZWIN ОНО ИСПОЛНЯЕТСЯ НЕПРАВИЛЬНО!!!!!Код:B←B-1 (C)←(HL) HL←HL+1
но SIDBASICSP для вывода использует такую последовательность
bc = $C0FD ; $C0FD зеркало $FFFD
out (c),a
outi
то есть по логике оно должно 2 раза отправить данные в порт $C0FD
(что и происходит в emuzwin и он молчит (он прекрасно поддерживает зеркало $C0FD!!!!))
но даже на реальном железе оно работает
то есть декремент B происходит до вывода в порт
и данные успешно идут в порт $BFFD
(так же работает в куче эмуляторов (и в unreal тоже))
ВОПРОС ШОЗАНАХ?????
я убил кучу времени в попытке понять чего оно не работает
- - - Добавлено - - -
щас залезу в фирменный мануал
вот оно
при этом далее все описывается правильно(C) ← (HL), B ← B – 1, HL ← HL + 1
The contents of the HL register pair are placed on the address bus to select a location in
memory. The byte contained in this memory location is temporarily stored in the CPU.
Then, after the byte counter (B) is decremented, the contents of Register C are placed on
the bottom half (A0 through A7) of the address bus to select the I/O device at one of 256
possible ports. Register B can be used as a byte counter, and its decremented value is
placed on the top half (A8 through A15) of the address bus. The byte to be output is placed
on the data bus and written to a selected peripheral device. Finally, the register pair HL is
incremented.