Coding - Баг в STS?

Scenergy #02
                Баг в STS?

 В   процессе   подготовки  ZXA  library к
публикации   я   столкнулся   со  странным
поведением STS при отладке примеров работы
с  библиотекой.  Я  не могу сказать точно:
баг  ли  это  в STS или просто особенность
работы, но все должны знать об этом, чтобы
не  искать  несуществующие  баги  в  своем
коде.
 Итак, отлаживался следующий кусок кода:

        CALL ZXA_DRAW_FRAME
INT_COUNTER EQU $+1
        LD A,00

А на прерываниях висел следующий фрагмент:

        LD HL,INT_COUNTER
        INC (HL)
 Причем   (важный  момент!)  время  работы
процедуры  ZXA_DRAW_FRAME  составляло чуть
более  прерывания, т.е. за время ее работы
прерывание приходило обязательно.
 Так  вот, если строка CALL ZXA_DRAW_FRAME
является  текущей (на нее установлен PC) и
если  пройти  в STS эту строку по SS+T, то
регистр  SP  ИЗМЕНИТ СВОЕ ЗНАЧЕНИЕ! Причем
его значение обязательно будет равно #FBxx
где xx - какое-нибудь число.

 Что  это:  баг или нет? Я не знаю... Знаю
только,  что  потратил  несколько часов на
поиски  ошибки  в  своем  коде  (ведь  код
работал, если  его запустишь, и не работал
при отладке в STS).

 Приведу   пример  программы,  при отладке
которой  можно  столкнуться  с проявлением
этой ошибки:
        DI
        LD HL,#6000
        LD DE,#6001
        LD BC,#100
        LD (HL),#61
        LDIR
        LD A,#C3
        LD (#6161),A
        LD HL,IM2
        LD (#6162),HL
        LD A,#60
        LD I,A
        IM 2
        EI
LOOP    HALT
        CALL PROC   ;***
INT_CNT LD A,00
        LD BC,#7FFE
        IN A,(C)
        AND 1
        JR NZ,LOOP
        IM 1
        RET

;HL=4000 чтобы время работы процедуры было
;равно примерно 1.5 прерываниям на
;Pentagon'е без турбо режима.
PROC    LD HL,4000
L1      DEC HL
        LD A,H
        OR L
        JR NZ,L1
        RET

IM2     PUSH HL
        LD HL,INT_CNT+1
        INC (HL)
        POP HL
        EI
        RET
 Наберите  эту  программу, откомпилируйте,
войдите  в  STS,  протрассируйте до строки
помеченной  '***'  и  на ней нажмите SS+T.
Затем  посмотрите  на  регистр SP - у меня
его  значение  после  всех  этих  действий
становится равным #FB00.
 А   вот   если  после  строки  CALL  PROC
добавить  несколько NOP'ов (столько, чтобы
команда  JP  x не накрывала переменную
INT_CNT), то все будет работать нормально.
Так что, по всей вероятности, эта проблема
возникает  из-за того, что STS при нажатии
SS+T  просто  ставит  после  команды точку
останова и запускает ее.
 Да, еще забыл сказать что это проверялось
в  STS v4.3, возможно в других версиях все
нормально.