📄 calctools.asl
字号:
+ 1
+ 2 ;/subrutine name : calc.asm
+ 3 ;/user bady : HE84770
+ 4 ;/fast clock : 4Mhz
+ 5 ;/slow clock : 32768khz
+ 6 ;/programer : Alton
+ 7
+ 8
+ 9
+ 10 ;-------------------------------------------
+ 11 .area calc_data(data,ABS)
+ 12 .org 0xd6
0007 13 Length EQU 0x07
+B 00 01
00D6 14 .PointFlag::
00D6 15 .Hbuf::
00D6 16 .M_exp_Y:: .ds 1
00D7 17 .Lbuf::
00D7 18 .RandCnt:: .ds 1
+ 19 .area calc_data1(data,abs)
+ 20 .org 0x64
+B 00 02
0064 21 .DmsCount::
+ 22 ;.KeyBuf1::
0064 23 .PFlag:: .ds 1
0065 24 .PYPP::
0065 25 .PSDP:: .ds 1
0066 26 .INDP:: .ds 1
0067 27 .CommaFlag::
0067 28 .IFlag:: .ds 1
0068 29 .STDP:: .ds 1
0069 30 .FractDP::
0069 31 .Buf1:: .ds 1
006A 32 .InputDP::
006A 33 .Buf2:: .ds 1
006B 34 .LRcnt::
006B 35 .Buf3::
006B 36 .SymFlag:: .ds 1
006C 37 .SFDP:: .ds 1
006D 38 .Buf4::
+ 39
006D 40 .Cnter::
006D 41 .DecFlag:: .ds 1
+ 42
006E 43 .ErrorCnt::
006E 44 .FractTrsCnt::
006E 45 .ReleaseCnt::
006E 46 .TFlag:: .ds 1
006F 47 .Cnter2::
006F 48 .PXPP::
006F 49 .BeforePari:: .ds 1
0070 50 .RCFlag::
+ 51 ;.KeyBuf::
0070 52 .AfterPari:: .ds 1
+ 53
0071 54 .Temp:: .ds 1
0072 55 .CntIndex:: .ds 1
0073 56 .FormulaFlag::
0073 57 .PosFlag:: .ds 1
0074 58 .KeyPos:: .ds 1
0075 59 .DataBuf:: .ds 2
0077 60 .FractCount::
0077 61 .DispFlag::
0077 62 .ZeroFlag::
0077 63 .PXDP:: .ds 1
+ 64
+ 65
0078 66 .PYDP:: .ds 1
+ 67
0079 68 .Counter:: .ds 1
007A 69 .SimeFlag::
007A 70 .Data:: .ds 1
+ 71 .area calc_data3(data,abs)
+ 72 .org 0x13a
0008 73 .CntByte EQU 0x08 ;07
+B 00 03
013A 74 Sign_buf:: .ds 1
013B 75 Point_buf:: .ds 1
013C 76 Operand_buf:: .ds .CntByte
0144 77 Sign_b:: .ds 1
0145 78 Point_b:: .ds 1
0146 79 Operand_b:: .ds .CntByte
014E 80 Sign_s:: .ds 1
014F 81 Point_s:: .ds 1
0150 82 Operand_s:: .ds .CntByte
0158 83 Sign_r:: .ds 1
0159 84 Point_r:: .ds 1
015A 85 Operand_r:: .ds .CntByte
+ 86
0162 87 Sign_i:: .ds 1
0163 88 Point_i:: .ds 1
0164 89 Operand_i:: .ds .CntByte
+ 90 .area calc(code)
+ 91 ;--------------(.percent_add)----------------------
+B 00 04
0000 92 .Percent_Add::
+ 93
0000 20 09 28 94 call .Y_trans_Buf
0003 20 00 00 95 call Addition
0006 20 00 00 96 call CheckOutData
0009 20 09 F0 97 call .Z_trans_X
000C 20 0A A4 98 call .Buf_trans_Y
000F 20 00 00 99 call Division
0012 20 00 00 100 call CheckOutData
0015 20 09 F0 101 call .Z_trans_X
0018 20 05 F7 102 call .Put_100_to_OperandY
001B 20 00 00 103 call Multiplation
001E 24 104 ret
+ 105 ;-------------------(.percent_dec )-------------
001F 106 .Percent_Dec::
001F 20 09 28 107 call .Y_trans_Buf
0022 20 00 00 108 call Subtration
0025 20 00 00 109 call CheckOutData
0028 20 09 F0 110 call .Z_trans_X
002B 20 0A A4 111 call .Buf_trans_Y
002E 20 00 00 112 call Division
0031 20 00 00 113 call CheckOutData
0034 20 09 F0 114 call .Z_trans_X
0037 20 05 F7 115 call .Put_100_to_OperandY
003A 20 00 00 116 call Multiplation
003D 24 117 ret
+ 118 ;-------------------(.percent_mul )-------------
003E 119 .Percent_Mul::
+ 120
003E 20 00 00 121 call Multiplation
0041 20 00 00 122 call CheckOutData
0044 20 09 F0 123 call .Z_trans_X
0047 20 05 F7 124 call .Put_100_to_OperandY
004A 20 00 00 125 call Division
004D 24 126 ret
+ 127
+ 128 ;-------------------( .percent_div )-------------
004E 129 .Percent_Div::
+ 130
+ 131
004E 20 00 00 132 call Division
0051 20 00 00 133 call CheckOutData
0054 20 09 F0 134 call .Z_trans_X
0057 20 05 F7 135 call .Put_100_to_OperandY
005A 20 00 00 136 call Multiplation
+ 137
005D 24 138 ret
+ 139
+ 140 ;-----------------------( ReciX 1/X )----------------------
005E 141 .ReciX::
005E 20 06 0F 142 call .X_Squ
0061 20 05 D3 143 call .ClrX
0064 20 06 07 144 call .Put_1_to_OperandX
0067 20 00 00 145 call Division
006A 24 146 ret
+ 147 ;-----------------------( Log )----------------------
006B 148 .Log::
006B 20 00 00 149 call Ln
006E 20 0A 18 150 call .Z_trans_Buf
0071 20 05 EB 151 call .ClrZ
0074 20 05 DF 152 call .ClrY
0077 20 05 D3 153 call .ClrX
007A 20 05 FF 154 call .Put_10_to_OperandX
007D 20 00 00 155 call Ln
0080 20 0A 04 156 call .Z_trans_Y
0083 20 0A 90 157 call .Buf_trans_X
0086 20 00 00 158 call Division
0089 24 159 ret
+ 160
+ 161 ;-----------------------( X ^2 )-----------------------
008A 162 .XSqu::
008A 20 06 0F 163 call .X_Squ
008D 20 00 00 164 call Multiplation
0090 24 165 ret
+ 166 ;-----------------------( X ^3 )-----------------------
0091 167 .XCube::
0091 20 08 4C 168 call .X_trans_Buf
0094 20 06 0F 169 call .X_Squ
0097 20 00 00 170 call Multiplation
009A 20 0A 90 171 call .Buf_trans_X
009D 20 0A 04 172 call .Z_trans_Y
00A0 20 00 00 173 call Multiplation
00A3 24 174 ret
+ 175
+ 176 ;-------------------------------------------
00A4 177 .Factorial::
00A4 F5 00 178 lda0 ErrorFlag ;N!
00A6 07 01 5F 179 brnz .EndFactorial
00A9 F3 00 180 lda #0h
00AB F9 07 181 sta0 OperandX+7
00AD 20 08 38 182 call .X_trans_Z
00B0 20 00 00 183 call CheckOutData
00B3 20 09 F0 184 call .Z_trans_X
00B6 20 08 9C 185 call .X_trans_R
00B9 F5 00 186 lda0 SignX
00BB A7 01 187 cmpe #01h
00BD 06 01 5B 188 brz .DataError
00C0 F5 00 189 lda0 PointX
00C2 A7 00 190 cmpe #0h
00C4 07 01 5B 191 brnz .DataError
00C7 F5 05 192 lda0 OperandX+5
00C9 A7 00 193 cmpe #0h
00CB 07 01 5B 194 brnz .DataError
00CE 20 05 DF 195 call .ClrY
00D1 F3 70 196 lda #70h ;Max69!
00D3 F9 06 197 sta0 OperandY+6
00D5 F3 00 198 lda #0h
00D7 FC 28 199 sta PP
00D9 20 00 00 200 call Subtration
00DC F5 00 201 lda0 SignZ
00DE A7 00 202 cmpe #0h
00E0 06 01 5B 203 brz .DataError
00E3 20 0B A8 204 call .R_trans_X
00E6 F3 00 205 lda #0h
00E8 FC 28 206 sta PP
00EA 20 05 DF 207 call .ClrY
00ED F3 08 208 lda #08h
00EF F9 06 209 sta0 OperandY+6
00F1 20 00 00 210 call Multiplation
00F4 F3 01 211 lda #01h
00F6 FC 28 212 sta PP
00F8 F5 05 213 lda0 OperandZ+5
00FA FD 00 214 sta .M_bcdbuf
00FC F5 06 215 lda0 OperandZ+6
00FE FD 01 216 sta .M_bcdbuf+1
0100 20 00 00 217 call .Bcd2Hex
0103 F3 00 218 lda #^(Order_tab)
0105 F9 02 219 sta0 TableC+2
0107 F3 0C 220 lda #@(Order_tab)
0109 F9 01 221 sta0 TableC+1
010B F3 85 222 lda #<(Order_tab)
010D F9 00 223 sta0 TableC
010F F5 01 224 lda0 TableC+1
0111 99 00 225 addc .M_hexbuf
0113 F9 01 226 sta0 TableC+1
0115 F5 00 227 lda0 TableC
0117 99 01 228 addc .M_hexbuf+1
0119 F9 00 229 sta0 TableC
011B 05 01 23 230 brnc .GetDataTable
011E F5 01 231 lda0 TableC+1
0120 1F 232 inca
0121 F9 01 233 sta0 TableC+1
0123 234 .GetDataTable:
0123 F5 02 235 lda0 TableC+2
0125 FC 54 236 sta TPP
0127 F5 01 237 lda0 TableC+1
0129 FC 02 238 sta TPH
012B F5 00 239 lda0 TableC
012D FC 01 240 sta TPL
012F F3 00 241 lda #>OperandZ
0131 FC 28 242 sta PP
0133 F3 00 243 lda #<OperandZ
0135 FC 21 244 sta DP
0137 F3 07 245 lda #07h
0139 F9 00 246 sta0 .NumCnt
013B 247 .SaveTbData:
013B F5 00 248 lda0 .NumCnt
013D A7 00 249 cmpe #0h
013F 06 01 4D 250 brz .EndSaveTbData
0142 F8 251 ldv
0143 FE 252 sta i
0144 18 253 incdp
0145 F5 00 254 lda0 .NumCnt
0147 3F 255 deca
0148 F9 00 256 sta0 .NumCnt
014A 02 01 3B 257 br .SaveTbData
014D 258 .EndSaveTbData:
014D F8 259 ldv
014E F9 00 260 sta0 PointZ
0150 F3 01 261 lda #>Sign_r
0152 FC 28 262 sta PP
0154 F1 58 263 lda Sign_r
0156 F9 00 264 sta0 SignZ
0158 02 01 5F 265 br .EndFactorial
015B 266 .DataError:
015B F3 01 267 lda #01h
015D F9 00 268 sta0 ErrorFlag
015F 269 .EndFactorial:
015F 24 270 ret
+ 271 ;--------------------------------------------
0160 272 .InputCheck::
0160 F3 00 273 lda #0h
0162 F9 00 274 sta0 ErrorFlag
0164 20 00 00 275 call CheckOutData
0167 F5 00 276 lda0 PointZ
0169 A7 00 277 cmpe #0h
016B 07 01 7D 278 brnz .ErrData
016E F5 05 279 lda0 OperandZ+5
0170 A7 00 280 cmpe #0h
0172 07 01 7D 281 brnz .ErrData
0175 F5 06 282 lda0 OperandZ+6
0177 A7 70 283 cmpe #70h
0179 05 01 7D 284 brnc .ErrData
017C 24 285 ret
+ 286
017D 287 .ErrData:
017D F3 01 288 lda #01h
017F F9 00 289 sta0 ErrorFlag
0181 24 290 ret
+ 291 ;-------------------------------------------
0182 292 .CKNear_1::
+ 293
0182 20 05 DF 294 call .ClrY
0185 F3 99 295 lda #99h
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -