Coding - Конверсия числа со стека калькулятора в символьную строку.

Deja Vu #09
(C) Морозов Илья/Death Moroz
__________________________________________


  Конверсия числа со стека калькулятора
           в символьную строку.


   При использовании встроенного калькуля-
тора результаты находятся на вершине каль-
куляторного  стека  в  интегральной форме.
Для   их  печати  существует  подпрограмма
Print_FP.Но она печатает стандартными сре-
дствами, которые в настоящее время исполь-
зуются  редко. Обычно программа работает с
собственной  процедурой  печати, например,
42 символа  в  строке. Ее можно связать  с
новым потоком. Но при этом необходимо  до-
вольно  тесное общение с операционной сис-
темой Спекки.Предпочтительней просто скон-
вертировать  это число в строку символов и
распоряжаться  ею по своему усмотрению. Но
программа  для такого преобразования будет
довольно  сложной и громоздкой. Проще вос-
пользоваться имеющимися в ПЗУ.
   Первое, что приходит в  голову - Print_
FP. Она печатает  число  с  вершины  стека
калькулятора в текущий поток. Значит нужно
подменить процедуру вывода символа на про-
цедуру  пересылки байта в память. Но слиш-
ком уж громоздко. Однако Print_FP при сво-
ей работе создает символьное представление
числа, и лишь затем вызывает процедуру пе-
чати. Буфер  находится  в  рабочей области
калькулятора по адресу #5CA1-#5CAA.Это две
ячейки  памяти  калькулятора  MEM3 и MEM4.
Теперь достаточно просто в качестве проце-
дуры  вывода  для  потока  поставить RET и
вызвать  Print_FP, чтобы считать строковое
представление  числа. Это  уже проще, хотя
все равно нужно возиться с каналами. Проще
всего  воспользоваться  для этого функцией
калькулятора  STR$. Конвертер  занимает  7
байт.

CONVERT RST     #28        ; вызов калькулятора
        DB      #2E,#38    ; Команды калькулятора:
                           ; STR$ преобразует число в стринг.
                           ; Теперь на стеке параметры этого
                           ; стринга. В DE-адрес, в BC-длина.
                           ; END_CALC - выход из калькулятора.
        CALL    #2BF1      ; Подпрограмма STK-FETCH переписы-
                           ; вает число со стека калькулятора
                           ; в регистры A,B,C,D,E. А так как
                           ; после операции STR$ в стеке нахо-
                           ; дятся параметры стринга, то они
                           ; переносятся в пары DE и BC.
        RET


   Вот и все. Осталось скопировать  строку
в более надежное место,чем рабочая область
интерпретатора.