📄 oppotriangle_0225.asm
字号:
call .Z_trans_Buf
lda #03h
sta .IdFlag
br .EndChoiceX
.Id4:
lda #04h
sta .IdFlag
call .X_trans_Buf
.EndChoiceX:
ret
;-----------------------------------------------------
.DoZ3:
call .Buf_trans_X
call .X_Squ
call Multiplation
call .Z_trans_B ;Z-->B
ret
;-----------------------------------------------------
.DoW3:
call .B_trans_X
call .X_Squ
call Multiplation
call .Z_trans_S ;W-->S
ret
;------------------------------------------------------
.DoS1:
lda #At10
sta .M_Data_Offset ;At10*W
call .InpDataToT
call .S_trans_X
call Multiplation
lda #At8 ;At8+Z
sta .M_Data_Offset
call .InpDataToT
call .Z_trans_X
call Addition
call .S_trans_X ;Z*W
call .Z_trans_Y
call Multiplation
lda #At6 ;At6+Z
sta .M_Data_Offset
call .InpDataToT
call .Z_trans_X
call Addition
call .S_trans_X ;Z*W
call .Z_trans_Y
call Multiplation
lda #At4 ;At4+Z
sta .M_Data_Offset
call .InpDataToT
call .Z_trans_X
call Addition
call .S_trans_X ;Z*W
call .Z_trans_Y
call Multiplation
lda #At2 ;At2+Z
sta .M_Data_Offset
call .InpDataToT
call .Z_trans_X
call Addition
call .S_trans_X ;Z*W
call .Z_trans_Y
call Multiplation
lda #At0 ;At2+Z
sta .M_Data_Offset
call .InpDataToT
call .Z_trans_X
call Addition
call .B_trans_X
call .Z_trans_Y
call Multiplation
call .Z_trans_B ;S1->B
ret
;------------------------------------------------------
.DoS2:
lda #At9
sta .M_Data_Offset ;At9*W
call .InpDataToT
call .S_trans_X
call Multiplation
lda #At7 ;At7+Z
sta .M_Data_Offset
call .InpDataToT
call .Z_trans_X
call Addition
call .S_trans_X ;Z*W
call .Z_trans_Y
call Multiplation
lda #At5 ;At5+Z
sta .M_Data_Offset
call .InpDataToT
call .Z_trans_X
call Addition
call .S_trans_X ;Z*W
call .Z_trans_Y
call Multiplation
lda #At3 ;At3+Z
sta .M_Data_Offset
call .InpDataToT
call .Z_trans_X
call Addition
call .S_trans_X ;Z*W
call .Z_trans_Y
call Multiplation
lda #At1 ;At1+Z
sta .M_Data_Offset
call .InpDataToT
call .Z_trans_X
call Addition
call .S_trans_X ;Z*W
call .Z_trans_Y
call Multiplation
ret
;------------------------------------------------------
.DoW4:
call .B_trans_X
call .Z_trans_Y
call Addition
call .Buf_trans_X
call .Z_trans_Y
call Multiplation
call .Buf_trans_X
call .Z_trans_Y
call Subtration
ret
;------------------------------------------------------
.ResultAtan:
lda .IdFlag
cmpe #0h
brz .ResultId0
cmpe #1h
brz .ResultId1
cmpe #2h
brz .ResultId2
cmpe #3h
brz .ResultId3
br .EndResultAtan
.ResultId0:
lda #Id0
sta .M_Data_Offset
call .InpDataToT
call .Z_trans_X
call Addition
br .EndResultAtan
.ResultId1:
lda #Id1
sta .M_Data_Offset
call .InpDataToT
call .Z_trans_X
call Addition
br .EndResultAtan
.ResultId2:
lda #Id2
sta .M_Data_Offset
call .InpDataToT
call .Z_trans_X
call Addition
br .EndResultAtan
.ResultId3:
lda #Id3
sta .M_Data_Offset
call .InpDataToT
call .Z_trans_X
call Addition
br .EndResultAtan
.EndResultAtan:
lda .SignXBuf
cmpe #01h
brnz .EndSignAtan
lda #01h
sta SignZ
.EndSignAtan:
ret
;Input:OperandX,OperandY (n,r)
;Output:OperandZ
.NCR::
lda #0
sta PP
lda #0h
sta0 OperandX+7
call .X_trans_Z
call CheckOutData
call .Z_trans_X
lda #0h
sta0 OperandY+7
call .Y_trans_Z
call CheckOutData
call .Z_trans_Y
lda SignX
ora #0
brnz ErrorExit
lda PointX
cmpe #0
brz NCRStart
lda PointX
cmpe #88h
brnc ErrorExit
lda SignY
ora #0
brnz ErrorExit
lda PointY
cmpe #0
brz NCRStart
lda PointY
cmpe #88h
brnc ErrorExit
NCRStart:
call .X_trans_S ;n
Call .Y_trans_R ;r
call LineUp
lda #OperandX
sta Addr1
lda #OperandY
sta Addr2
lda #.CmpLen ;06 2002.02.21
sta DpCount
call CompareData
lda Temp1
cmpe #2 ;n<r
brz ErrorExit
cmpe #0
brnz 0$
call .Put_1_to_OperandX
call .X_trans_Z ; n==r
br EndCombNr
0$:
;call .S_trans_X
;call .R_trans_Y
call Subtration
call .Z_trans_X ;n-r
call .R_trans_Y ;r
call LineUp
lda #OperandX
sta Addr1
lda #OperandY
sta Addr2
lda #.CmpLen ;06 2002.02.21
sta DpCount
call CompareData
lda Temp1
cmpe #2
brnz CheckCombN ;n-r>=r
call .Z_trans_R ;n_r<r
CheckCombN:
call .S_trans_X
lda #COMBN20000
sta0 .M_Data_Offset
call .InpDataToOpY
call LineUp
lda #OperandX
sta Addr1
lda #OperandY
sta Addr2
lda #.CmpLen ;06 2002.02.21
sta DpCount
call CompareData
lda Temp1
cmpe #2
brz CheckCombRLimit ;n<20000
;n>=20000
CheckCombR:
call .R_trans_X
lda #COMBR24
sta .M_Data_Offset
call .InpDataToOpY
call LineUp
lda #OperandX
sta0 Addr1
lda #OperandY
sta0 Addr2
lda #.CmpLen ;06 2002.02.21
sta0 DpCount
call CompareData
lda0 Temp1
cmpe #2
brz UsingNrLoop ;r<24
CheckCombRLimit:
call .R_trans_X
lda #COMBR70
sta .M_Data_Offset
call .InpDataToOpY
call LineUp
lda #OperandX
sta0 Addr1
lda #OperandY
sta0 Addr2
lda #.CmpLen ;06 2002.02.21
sta0 DpCount
call CompareData
lda0 Temp1
cmpe #2
brz UsingNrLoop ;r<70
ErrorExit:
lda #1
sta0 ErrorFlag
br EndCombNr
;(n<20000 or r <24 )
UsingNrLoop:
lda #0
sta0 OpCnt
call .R_trans_X
call MoveData
call .X_trans_R
lda #>(Operand_r+6)
sta PP
lda Operand_r+6
ora #0
brnz 0$
call .Put_1_to_OperandX
call .X_trans_Z
br EndCombNr
0$:
sta0 OutputTemp
lda #1
sta PP
lda0 OutputTemp
sta .M_bcdbuf
call .bcdtohex
lda .M_bcdbuf
sta0 OpCntNo
lda #0
sta PP
call .Put_1_to_OperandX
1$:
call .S_trans_Y
call Multiplation
lda0 ErrorFlag
ora #0
brnz EndCombNr
call .Z_trans_Buf ;buf=n*x
call .S_trans_X
call Put_1_to_OperandY
call Subtration ;n-1
call .Z_Trans_S ;n=n-1
call .Buf_trans_X
lda0 OpCnt
inca
sta0 OpCnt
cmpe OpCntNo
brnc 1$
lda0 ErrorFlag
ora #0
brnz EndCombNr
call .R_trans_X
lda #0
sta0 OperandX+7
call .Factorial ; r!
call .Z_trans_Y
call .Buf_trans_X
call Division ;[n..(n-r+1)]/r!
br EndCombNr
EndCombNr:
ret
;Input:OperandX,OperandY
;Output:OperandZ
.NPR::
call .Y_trans_T
call .NCR
call .T_trans_X
call .Z_trans_B
lda0 ErrorFlag
ora #0
brnz 0$
lda #0
sta0 OperandX+7
call .Factorial
lda0 ErrorFlag
ora #0
brnz 0$
call .Z_trans_Y
call .B_trans_X
call Multiplation ;c(n,r)*r!
0$:
ret
Put_1_to_OperandY::
call .ClrY
lda #01h
sta0 OperandY+6
ret
;;;
.InpDataToOpY::
;lda OP1
;anda #~10h
;sta OP1
call .ClrY
lda #0h
sta TPP
lda #@(FactConst)
sta TableC+1
lda #<(FactConst)
adda .M_Data_Offset
sta TableC
lda TableC+1
addc #0
sta TableC+1
lda #0h
sta TPP
lda TableC+1
sta TPH
lda TableC
sta TPL
ldv
sta SignY
ldv
sta PointY
lda #OperandY
sta DP
.InpY0:
ldv
cmpe #0ffh
brz .End_InpY0
sta i
incdp
br .InpY0
.End_InpY0:
;lda OP1
;ora #10h
;sta OP1
ret
;------------------------------------------------------
SinCos:
DB 000h,00eh,016h,066h,066h,066h,066h,066h,066h,0ffh
DB 001h,00eh,032h,055h,065h,081h,086h,022h,040h,0ffh
DB 000h,00eh,020h,012h,012h,053h,021h,034h,086h,0ffh
DB 001h,00fh,040h,005h,055h,034h,050h,006h,079h,0ffh
DB 000h,011h,079h,015h,034h,099h,042h,089h,081h,0ffh
DB 000h,012h,034h,079h,033h,010h,075h,096h,002h,0ffh
DB 001h,00dh,024h,003h,039h,049h,011h,073h,044h,0ffh
DB 000h,00dh,020h,020h,094h,057h,060h,023h,035h,0ffh
DB 001h,00eh,068h,082h,083h,097h,016h,005h,045h,0ffh
DB 000h,00fh,077h,003h,081h,050h,055h,059h,001h,0ffh
DB 000h,00eh,070h,071h,006h,078h,011h,086h,054h,0ffh
DB 000h,00dh,015h,070h,079h,063h,026h,079h,048h,0ffh
DB 000h,001h,000h,000h,000h,000h,000h,000h,005h,0ffh
DB 000h,000h,000h,000h,000h,000h,000h,000h,002h,0ffh
DB 000h,00bh,000h,009h,099h,099h,099h,099h,099h,0ffh ;;;test data
DB 000h,000h,000h,000h,000h,000h,000h,000h,001h,0ffh
DB 000h,00ch,057h,029h,057h,079h,051h,030h,082h,0ffh
DB 000h,00fh,017h,045h,032h,092h,051h,099h,043h,0ffh
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,0ffh
DB 000h,000h,000h,000h,000h,000h,000h,000h,030h,0ffh
DB 000h,000h,000h,000h,000h,000h,000h,000h,060h,0ffh
DB 000h,000h,000h,000h,000h,000h,000h,000h,090h,0ffh
DB 000h,000h,000h,000h,000h,000h,000h,000h,045h,0ffh
DB 000h,000h,000h,000h,000h,000h,000h,001h,080h,0ffh
FactConst:
;n
FactInputNo:
DB 00h,00h,00h,00h,00h,00h,02h,00h,00h,0ffh ;20000
;r
FactInputR:
DB 00h,00h,00h,00h,00h,00h,00h,00h,24h,0ffh ;24
DB 00h,00h,00h,00h,00h,00h,00h,00h,70h,0ffh ;70
Atan:
DB 000h,00eh,046h,036h,047h,060h,090h,000h,082h,0ffh
DB 000h,00eh,078h,053h,098h,016h,033h,097h,044h,0ffh
DB 000h,00eh,098h,027h,093h,072h,032h,047h,032h,0ffh
DB 000h,00dh,015h,070h,079h,063h,026h,079h,048h,0ffh
;at
DB 000h,00eh,033h,033h,033h,033h,033h,033h,032h,0ffh
DB 001h,00eh,019h,099h,099h,099h,099h,098h,076h,0ffh
DB 000h,00eh,014h,028h,057h,014h,027h,025h,003h,0ffh
DB 001h,00eh,011h,011h,011h,010h,040h,054h,062h,0ffh
DB 000h,00fh,090h,090h,088h,071h,033h,043h,065h,0ffh
DB 001h,00fh,076h,091h,087h,062h,005h,044h,048h,0ffh
DB 000h,00fh,066h,061h,007h,031h,037h,038h,075h,0ffh
DB 001h,00fh,058h,033h,057h,001h,033h,079h,005h,0ffh
DB 000h,00fh,049h,076h,087h,079h,094h,061h,059h,0ffh
DB 001h,00fh,036h,053h,015h,072h,074h,042h,016h,0ffh
DB 000h,00fh,016h,028h,058h,020h,011h,053h,065h,0ffh
;num
DB 000h,004h,000h,000h,000h,000h,000h,043h,075h,0ffh ;0.4375
DB 000h,004h,000h,000h,000h,000h,001h,018h,075h,0ffh ;1.1875
DB 000h,004h,000h,000h,000h,000h,000h,068h,075h,0ffh ;0.6875
DB 000h,004h,000h,000h,000h,000h,002h,043h,075h,0ffh ;2.4375
DB 000h,000h,000h,000h,000h,000h,000h,000h,001h,0ffh
DB 000h,000h,000h,000h,000h,000h,000h,000h,002h,0ffh
DB 000h,001h,000h,000h,000h,000h,000h,000h,015h,0ffh
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -