Цитата Сообщение от 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 байт каждого, прошил - и ничего не поменялось. Видимо нужно принять и смириться.