(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
Вот и все. Осталось скопировать строку
в более надежное место,чем рабочая область
интерпретатора.