
Сообщение от
HardWareMan
Tronix, ну дык ты же эхо мгновенно отдаёшь, а барсик может чего-то интерпретировать пытается. Не пробовал управление потоком задействовать?
Я тоже об этом подумал, поэтому ради эксперимента вставил нефиговую задержку между 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
в то время как в мониторе работа с буферами ввода-вывода лежит вот здесь:
Код:
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
Получается вроде, что $40 + $40 + 32 = 160 байт, и они уже больше, чем $90 (144).
Но уменьшил размер буфера до 32 байт каждого, прошил - и ничего не поменялось. Видимо нужно принять и смириться.