КР по АВМИC / prg
.docSEG0 EQU $B800 адрес 1го сегмета
SEG1 EQU $B801 2й
SEG2 EQU $B802 3й
SEG3 EQU $B803 4й
PORTINF EQU $1030 Флаг ADCTL
PORT1 EQU $1031 adr1
PORT2 EQU $1032 adr2
PORT3 EQU $1033 adr3
BEG_ADR EQU $7000 начало ОЗУ
END_ADR EQU $B3FF конец ОЗУ
CUR_ADR FDB #$0000 текущий адрес
X1 FCB #$00 хранение х1
X2 FCB #$00 -//- х2
X3 FCB #$00 -//- х3
XKUB FDB #$0000 х3 ^ 3
XKV FDB #$0000 x1 ^ 2
Y_INT FDB #$0000 целая часть
Y_DEC FDB #$0000 дробная
MAXVAL FDB #$FFFF макс. значение
ORG $2000
LDAA PORTINF Текущие настройки порта Е
ANDAA $CF MULT=0, SCAN=0
ORAA $10 MULT=1
STAA PORTINF Установка флага
BEGIN:
LDD BEG_ADR В регистр D начальный адрес
L1: STD CUR_ADR сохранить тек. адрес
CPD END_ADD если адрес конечный
BHI BEGIN обновляем адрес
JSR GETVALUE получить значения
JSR SAVEMEM сохранить в памяти
JSR SAVEDIOD вывести на сегменты
LDD CUR_ADR D=тек. адрес
JMP L1
GETVALUE:
LDAA PORTINF Тек. настройки порта
ANDAA 128 проверка бита SPIF
BEQ GETVALUE если ноль, ждем…
LDAA PORT1 А из 1го порта
STAA X1 сохранить
LDAA PORT2 А из 2го порта
STAA X2 сохранить
LDAA PORT3 А из третьего порта
STAA X3 сохранить
GETY:
INCA A+1
DECA A-1
BEQ ERRVAL
LDAB X3 B=A
PSHB В в стек
MUL D=A*B (x3*x3)
PULB В из стека
MUL D=A*B (x3*x3*x3)
STD XKUB сохранить D
LDAA X1 А=Х1
LDAB X1 В=Х1
MUL D=A*B
STD XKV сохранить D
ADDD X2 D=D+x2
LDX XKUB IX=x1^2
IDIV D/IX
STX Y_INT сохранить IX (целая часть)
STD Y_DEC сохранить D (дробная часть)
RTS
SAVEMEM:
LDX Y_INT IX = целая часть
LDD Y_DEC D = дробная
STX CUR_ADR сохранить в ОЗУ IX
INC CUR_ADR адрес+2
INC CUR_ADR
STD CUR_ADR сохранить в ОЗУ D
INC CUR_ADR адрес+2
INC CUR_ADR
RTS
SAVEDIOD:
LDD Y_INT D=целая часть (а младший, в-старший)
STA SEG0 А на 1й сегмент
STB SEG1 В на 2й
LDD Y_DEC D=дробная часть
STA SEG2 А на 3й сегмент
STB SEG3 В на 4й
RTS