📄 calctools.asm
字号:
lda .M_exp_Y
sta PointZ
call CheckOutData
lda #OperandZ
sta Addr1
call CheckData
lda DpCount
deca
sta Temp1
brnc .38$
lda PointZ
suba Temp1
cmpe #99
brnc .38$
brz .38$
lda PointZ
suba Temp1
cmpe #(256-99)
brc .38$
.ErrFlag:
lda #02
sta ErrorFlag
.38$:
ret
;---------------------------------------------------------
; ENG
;---------------------------------------------------------
.ENG::
call .Z_trans_X
lda #0h
sta PP
sta0 SignY
sta0 PointY
call .ClrY
lda #10h
sta0 OperandY+5
call Division
ret
;---------------------------------------------------------
.OPZ2RND::
lda #0h
sta PP
lda0 PointZ
sta0 .Buf2
call .GetDpCount
lda0 DpCount
sta0 .Buf1
lda #01h
sta PP
lda pzdispbf
sta0 OperandZ
lda pzdispbf+1
sta0 OperandZ+1
lda pzdispbf+2
sta0 OperandZ+2
lda pzdispbf+3
sta0 OperandZ+3
lda pzdispbf+4
sta0 OperandZ+4
lda pzdispbf+5
sta0 OperandZ+5
lda pzdispbf+6
sta0 OperandZ+6
lda #0h
sta PP
call .GetDpCount
lda0 .Buf1
suba DpCount
sta0 .Buf1
lda0 .Buf2
suba .Buf1
sta0 PointZ
.if 0
lda #0h
sta PP
call .GetDpCount
lda0 DpCount
sta0 .Buf2
lda #01h
sta PP
lda DispFlag
anda #0fh
sta0 .Buf1
lda DispFlag
anda #0f0h
cmpe #40h ;Fix
brnz 1$
call .ClrX
lda #01h
sta0 OperandZ+6
call .Z_trans_Y
call Subtration
lda0 SignZ
cmpe #01h
brz 1$
lda0 .Buf1
inca
sta0 .Buf1
1$:
lda #0h
sta PP
call .I_trans_Z
call .ShiftZdata
ret
.ShiftZdata:
lda0 .Buf2
cmpe .Buf1
brz .Endshiftz
call ShiftToR
lda0 PointZ
deca
sta0 PointZ
lda0 .Buf2
deca
sta0 .Buf2
br .ShiftZdata
.Endshiftz:
lda0 OperandZ+7
anda #0f0h
cmpe #50h
brnc 2$
lda #0h
sta0 OperandZ+7
call .ClrX
lda #01h
sta0 OperandX+6
lda0 PointZ
sta0 PointX
lda0 SignZ
sta0 SignX
call .Z_trans_Y
call Addition
2$:
.endif
ret
;-------------------------------------------
.CopyData::
lda #0ah ;09 2002 3 5
sta0 .Counter
.DataCopy:
lda0 .Counter
cmpe #0h
brz .EndCopy
lda0 .PXPP
sta PP
lda0 .PXDP
sta DP
lda i
sta0 .Data
lda0 .PXDP
inca
sta0 .PXDP
lda0 .PYPP
sta PP
lda0 .PYDP
sta DP
lda0 .Data
sta i
lda0 .PYDP
inca
sta0 .PYDP
lda0 .Counter
deca
sta0 .Counter
br .DataCopy
.EndCopy:
lda #0h
sta PP
ret
;-------------------------------------------
.ClearData::
lda0 .PXPP
sta PP
lda0 .PXDP
sta DP
lda #0ah ;ah
sta0 .Counter
.DataClr:
lda0 .Counter
cmpe #0h
brz .EndClr
lda #0h
sta i
incdp
lda0 .Counter
deca
sta0 .Counter
br .DataClr
.EndClr:
ret
;-------------------------------------------
.Input2Formula::
lda #02h
sta0 .PXPP
lda #01h
sta0 .PYPP
lda #0h
sta0 .PXDP
lda #0b0h
sta0 .PYDP
call .Copyformula
ret
;-------------------------------------------
.Formula2Input::
lda #01h
sta0 .PXPP
lda #02h
sta0 .PYPP
lda #0b0h
sta0 .PXDP
lda #0h
sta0 .PYDP
call .Copyformula
ret
;-------------------------------------------
.Copyformula::
lda #79
sta0 .Counter
.formulaCopy:
lda0 .Counter
cmpe #0h
brz .EndCopyformula
lda0 .PXPP
sta PP
lda0 .PXDP
sta DP
lda i
sta0 .Data
lda0 .PXDP
inca
sta0 .PXDP
lda0 .PYPP
sta PP
lda0 .PYDP
sta DP
lda0 .Data
sta i
lda0 .PYDP
inca
sta0 .PYDP
lda0 .Counter
deca
sta0 .Counter
br .DataCopy
.EndCopyformula:
lda #0h
sta PP
ret
;/*-----(clear operand X)-----------------*/
.ClrFa::
lda #>SignFa
sta0 .PXPP
lda #<SignFa
sta0 .PXDP
call .ClearData
ret
;/*-----(clear operand X)-----------------*/
.ClrX::
lda #>SignX
sta0 .PXPP
lda #<SignX
sta0 .PXDP
call .ClearData
ret
;/*-----(clear operand Y)-----------------*/
.ClrY::
lda #>SignY
sta0 .PXPP
lda #<SignY
sta0 .PXDP
call .ClearData
ret
;/*-----(clear operand Z)-----------------*/
.ClrZ::
lda #>SignZ
sta0 .PXPP
lda #<SignZ
sta0 .PXDP
call .ClearData
ret
;/*-----(PUT 100 TO OperandY)-------------*/
.Put_100_to_OperandY:
call .ClrY
lda #01h
sta0 OperandY+5
ret
;/*-----(PUT 10 TO OperandX log 10)--------*/
.Put_10_to_OperandX:
call .ClrX
lda #10h
sta0 OperandX+6
ret
;/*-----(PUT 1 TO OperandX 1/X)-------------*/
.Put_1_to_OperandX::
call .ClrX
lda #01h
sta0 OperandX+6
ret
;-------(X_Squ )----------------------------
.X_Squ::
lda #<SignX
sta0 .PXDP
lda #<SignY
sta0 .PYDP
lda #>SignX
sta0 .PXPP
lda #>SignY
sta0 .PYPP
call .CopyData
ret
;----------------------------------------------
.ClearInt::
lda #>PointY
sta PP
lda #0eh
sta PointY
lda0 PointZ
cmpe #0fh
brc .NoPoint
lda #OperandZ
sta DP
.DelInt:
lda PointY
cmpe PointZ
brz .EndGetPoint
lda PointY
deca
sta PointY
lda i
anda #0fh
sta i
lda PointY
cmpe PointZ
brz .EndGetPoint
lda PointY
deca
sta PointY
lda i
anda #0f0h
sta i
incdp
br .DelInt
.NoPoint:
call .ClrZ
ret
.EndGetPoint:
ret
;------------------------------------------
.DelPoint::
lda #>PointY
sta PP
lda0 PointZ
cmpe #156
brc .NoInt
cmpe #0fh
brnc .Under14
call .ClrZ
br .NoInt
.Under14:
lda #0fh
sta PointY
lda #OperandZ
deca
sta DP
.ClearPoint:
lda PointY
cmpe PointZ
brc .IsInteven
lda i
anda #0fh
sta i
lda PointY
cmpe #0ffh
brz .NoInt
.IsInteven:
lda PointY
deca
sta PointY
lda PointY
cmpe PointZ
brc .IsIntodd
lda PointY
cmpe #0ffh
brz .NoInt
lda i
anda #0f0h
sta i
.IsIntodd:
lda PointY
deca
sta PointY
cmpe #0ffh
brz .NoInt
incdp
br .ClearPoint
.NoInt:
lda #0h
sta0 OperandZ+7
call CheckOutData
ret
;-------------------------------------------
.Random::
lda0 .RandCnt
cmpe #0ffh
brnz .AddCnt
lda #0h
sta0 .RandCnt
.AddCnt:
lda0 .RandCnt
adda #80h
sta0 .RandCnt
.ProduceRandom::
call .ClrX
lda #01h
sta PP
lda #0h
sta .M_hexbuf
lda0 .RandCnt
sta .M_hexbuf+1
call .Hex2Bcd
lda .M_bcdbuf
sta0 OperandX+.CntByte-3
lda .M_bcdbuf+1
sta0 OperandX+.CntByte-2
lda #0h
sta0 PointX
sta0 SignX
sta0 PointY
sta0 SignY
call .ClrY
lda #07H
sta0 OperandY+.CntByte-3
lda #89H
sta0 OperandY+.CntByte-2
lda #0h
sta PP
call Division
lda #03h
sta PointZ
call .ClearInt
ret
;------------------------------------------
.CheckQuadrant::
lda0 SignX
cmpe #0h
brz .EndQuadrant
lda0 SignY
cmpe #0h
brz .QuadrantII
call .ClrY
lda #01h
sta0 OperandY+5
lda #80h
sta0 OperandY+6
call .Z_trans_X
call Subtration
ret
.QuadrantII:
call .ClrX
lda #01h
sta0 OperandX+5
lda #80h
sta0 OperandX+6
call .Z_trans_Y
call Addition
ret
.EndQuadrant:
ret
;------------------------------------------
.GetDpCount::
lda #OperandZ
br .addr
.GetDpCountX::
lda #OperandX
br .addr
.GetDpCountY::
lda #OperandY
.addr:
sta Addr1
call CheckData
ret
;-------------------------------------------
.LimitCarry::
.Carry::
lda #>StateFlag
sta PP
lda StateFlag
anda #08h
brnz .EndLimit10
call .Y_trans_Xn ;T
call CheckOutData
call .GetDpCount
lda0 DpCount
sta0 .Temp
.ShiftR1:
lda0 .Temp
cmpe #0bh
brnc .EndLimitCarry
brz .CkCarry
call ShiftToR
lda0 PointZ
deca
sta0 PointZ
lda0 .Temp
deca
sta0 .Temp
br .ShiftR1
.CkCarry:
lda0 OperandZ+6
anda #0fh
cmpe #05h
brnc .AdjusTotem
lda0 OperandZ+6
anda #0f0h
sta0 OperandZ+6
call .Z_trans_X
call .ClrY
lda PointX
sta PointY
lda SignX
sta SignY
lda #10h
sta0 OperandY+6
call Addition
.AdjusTotem:
call ShiftToR
lda0 PointZ
deca
sta0 PointZ
.EndLimitCarry:
lda #0h
sta0 OperandZ+7
call .Xn_trans_Y
ret
;-------------------------------------------
.GetDataLimit10::
lda #>StateFlag
sta PP
lda StateFlag
anda #08h
brnz .EndLimit10
call .X_trans_Z
call .LimitCarry
call CheckOutData
call .Z_trans_B
call .Y_trans_Z
call .LimitCarry
call CheckOutData
lda #0h
sta OperandZ+7
call .Z_trans_Y
call .B_trans_Z
lda #0h
sta OperandZ+7
call .Z_trans_X
.EndLimit10:
ret
;-------------------------------------------
.GetTabVal::
lda TableC
adda .M_Data_Offset
sta TableC
brnc .Tpl_NoT_Carry
lda TableC+1
inca
sta TableC+1
.Tpl_NoT_Carry:
lda #0h
sta TPP
lda TableC+1
sta TPH
lda TableC
sta TPL
ldv
sta SignZ
ldv
sta PointZ
lda #>SignZ
sta PP
lda #<OperandZ
sta DP
.InpNum:
ldv
cmpe #0ffh
brz .End_InpNum
sta i
incdp
br .InpNum
.End_InpNum:
lda #0h
sta OperandZ+7
call CheckOutData
ret
;------------(X_COPY_Y,Z,Buf,b,s)-----------
.X_trans_Y::
lda #<SignX
sta0 .PXDP
lda #<SignY
sta0 .PYDP
lda #>SignX
sta0 .PXPP
lda #>SignY
sta0 .PYPP
call .CopyData
ret
.X_trans_Z::
lda #<SignX
sta0 .PXDP
lda #<SignZ
sta0 .PYDP
lda #>SignX
sta0 .PXPP
lda #>SignZ
sta0 .PYPP
call .CopyData
ret
.X_trans_Buf::
lda #<SignX
sta0 .PXDP
lda #<Sign_buf
sta0 .PYDP
lda #>SignX
sta0 .PXPP
lda #>Sign_buf
sta0 .PYPP
call .CopyData
ret
.X_trans_B::
lda #<SignX
sta0 .PXDP
lda #<Sign_b
sta0 .PYDP
lda #>SignX
sta0 .PXPP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -