Я тоже об этом подумал, поэтому ради эксперимента вставил нефиговую задержку между CALL conin и CALL conout, вот такую:
Это где-то больше секунды точно. И - все работает, медленно дичайше, но символы не портяться. То есть не в интерпритации дело..Код:; Clobbers A, B and C
ld bc,#0
1$:
bit #0,a ; 8
bit #0,a ; 8
bit #0,a ; 8
and a,#255 ; 7
dec bc ; 6
ld a,c ; 4
or a,b ; 4
jp nz,1$ ; 10, total = 55 states/iteration
Управление потоком - задействовано. Линия RTS дергается. Реально дергается, я смотрел овцелографом - когда войну и мир шлешь и буфер программный переполняется - она тормозит передачу и затем возобновляет.
Код скопировал в последнем эксперименте один в один вообще из монитора - в мониторе в лоадере портит символы, если грузить в память тестовую прогу и отключать ROM и переключаться на IM2 - не портит символы.
Нашел наверное перехлестывание областей памяти бейсика с монитором, уж обрадовался, что вот оно - а нифига, опять мимо. Бейсик свои переменные начинает с:
в то время как в мониторе работа с буферами ввода-вывода лежит вот здесь:Код:WRKSPC .EQU 4090H ; BASIC Work space
Получается вроде, что $40 + $40 + 32 = 160 байт, и они уже больше, чем $90 (144).Код:SER_BUFSIZE .EQU 40H
.ORG $4000
serABuf .ds SER_BUFSIZE
serAInPtr .ds 2
serARdPtr .ds 2
serABufUsed .ds 1
serBBuf .ds SER_BUFSIZE
serBInPtr .ds 2
serBRdPtr .ds 2
serBBufUsed .ds 1
primaryIO .ds 1
secNo .ds 1
dmaAddr .ds 2
stackSpace .ds 32
STACK .EQU $ ; Stack top
Но уменьшил размер буфера до 32 байт каждого, прошил - и ничего не поменялось. Видимо нужно принять и смириться.

