📄 oppotriangle_0225.asl
字号:
+ 1175 ;------------------------------------------------------
0822 1176 .ResultAtan:
+ 1177
0822 F1 D9 1178 lda .IdFlag
0824 A7 00 1179 cmpe #0h
0826 06 08 3B 1180 brz .ResultId0
0829 A7 01 1181 cmpe #1h
082B 06 08 4B 1182 brz .ResultId1
082E A7 02 1183 cmpe #2h
0830 06 08 5B 1184 brz .ResultId2
0833 A7 03 1185 cmpe #3h
0835 06 08 6B 1186 brz .ResultId3
0838 02 08 7B 1187 br .EndResultAtan
+ 1188
083B 1189 .ResultId0:
083B F3 00 1190 lda #Id0
083D FD D8 1191 sta .M_Data_Offset
083F 20 04 F4 1192 call .InpDataToT
0842 20 00 00 1193 call .Z_trans_X
0845 20 00 00 1194 call Addition
0848 02 08 7B 1195 br .EndResultAtan
+ 1196
084B 1197 .ResultId1:
084B F3 0A 1198 lda #Id1
084D FD D8 1199 sta .M_Data_Offset
084F 20 04 F4 1200 call .InpDataToT
0852 20 00 00 1201 call .Z_trans_X
0855 20 00 00 1202 call Addition
0858 02 08 7B 1203 br .EndResultAtan
085B 1204 .ResultId2:
085B F3 14 1205 lda #Id2
085D FD D8 1206 sta .M_Data_Offset
085F 20 04 F4 1207 call .InpDataToT
0862 20 00 00 1208 call .Z_trans_X
0865 20 00 00 1209 call Addition
0868 02 08 7B 1210 br .EndResultAtan
086B 1211 .ResultId3:
086B F3 1E 1212 lda #Id3
086D FD D8 1213 sta .M_Data_Offset
086F 20 04 F4 1214 call .InpDataToT
0872 20 00 00 1215 call .Z_trans_X
0875 20 00 00 1216 call Addition
0878 02 08 7B 1217 br .EndResultAtan
+ 1218
+ 1219
087B 1220 .EndResultAtan:
087B F1 DA 1221 lda .SignXBuf
087D A7 01 1222 cmpe #01h
087F 07 08 86 1223 brnz .EndSignAtan
0882 F3 01 1224 lda #01h
0884 FD 00 1225 sta SignZ
0886 1226 .EndSignAtan:
0886 24 1227 ret
+ 1228 ;Input:OperandX,OperandY (n,r)
+ 1229 ;Output:OperandZ
0887 1230 .NCR::
0887 F3 00 1231 lda #0
0889 FC 28 1232 sta PP
088B F3 00 1233 lda #0h
088D F9 07 1234 sta0 OperandX+7
088F 20 00 00 1235 call .X_trans_Z
0892 20 00 00 1236 call CheckOutData
0895 20 00 00 1237 call .Z_trans_X
0898 F3 00 1238 lda #0h
089A F9 07 1239 sta0 OperandY+7
089C 20 00 00 1240 call .Y_trans_Z
089F 20 00 00 1241 call CheckOutData
08A2 20 00 00 1242 call .Z_trans_Y
08A5 F1 00 1243 lda SignX
08A7 DB 00 1244 ora #0
08A9 07 09 8A 1245 brnz ErrorExit
08AC F1 00 1246 lda PointX
08AE A7 00 1247 cmpe #0
08B0 06 08 CF 1248 brz NCRStart
08B3 F1 00 1249 lda PointX
08B5 A7 88 1250 cmpe #88h
08B7 05 09 8A 1251 brnc ErrorExit
08BA F1 00 1252 lda SignY
08BC DB 00 1253 ora #0
08BE 07 09 8A 1254 brnz ErrorExit
08C1 F1 00 1255 lda PointY
08C3 A7 00 1256 cmpe #0
08C5 06 08 CF 1257 brz NCRStart
08C8 F1 00 1258 lda PointY
08CA A7 88 1259 cmpe #88h
08CC 05 09 8A 1260 brnc ErrorExit
+ 1261
08CF 1262 NCRStart:
08CF 20 00 00 1263 call .X_trans_S ;n
08D2 20 00 00 1264 Call .Y_trans_R ;r
08D5 20 00 00 1265 call LineUp
08D8 F3 00 1266 lda #OperandX
08DA FD 00 1267 sta Addr1
08DC F3 00 1268 lda #OperandY
08DE FD 00 1269 sta Addr2
08E0 F3 07 1270 lda #.CmpLen ;06 2002.02.21
08E2 FD 00 1271 sta DpCount
08E4 20 00 00 1272 call CompareData
08E7 F1 00 1273 lda Temp1
08E9 A7 02 1274 cmpe #2 ;n<r
08EB 06 09 8A 1275 brz ErrorExit
08EE A7 00 1276 cmpe #0
08F0 07 08 FC 1277 brnz 0$
08F3 20 00 00 1278 call .Put_1_to_OperandX
08F6 20 00 00 1279 call .X_trans_Z ; n==r
08F9 02 0A 10 1280 br EndCombNr
+ 1281 0$:
+ 1282 ;call .S_trans_X
+ 1283 ;call .R_trans_Y
08FC 20 00 00 1284 call Subtration
08FF 20 00 00 1285 call .Z_trans_X ;n-r
0902 20 00 00 1286 call .R_trans_Y ;r
0905 20 00 00 1287 call LineUp
0908 F3 00 1288 lda #OperandX
090A FD 00 1289 sta Addr1
090C F3 00 1290 lda #OperandY
090E FD 00 1291 sta Addr2
0910 F3 07 1292 lda #.CmpLen ;06 2002.02.21
0912 FD 00 1293 sta DpCount
0914 20 00 00 1294 call CompareData
0917 F1 00 1295 lda Temp1
0919 A7 02 1296 cmpe #2
091B 07 09 21 1297 brnz CheckCombN ;n-r>=r
091E 20 00 00 1298 call .Z_trans_R ;n_r<r
0921 1299 CheckCombN:
0921 20 00 00 1300 call .S_trans_X
0924 F3 00 1301 lda #COMBN20000
0926 F9 D8 1302 sta0 .M_Data_Offset
0928 20 0A 44 1303 call .InpDataToOpY
092B 20 00 00 1304 call LineUp
092E F3 00 1305 lda #OperandX
0930 FD 00 1306 sta Addr1
0932 F3 00 1307 lda #OperandY
0934 FD 00 1308 sta Addr2
0936 F3 07 1309 lda #.CmpLen ;06 2002.02.21
0938 FD 00 1310 sta DpCount
093A 20 00 00 1311 call CompareData
093D F1 00 1312 lda Temp1
093F A7 02 1313 cmpe #2
0941 06 09 67 1314 brz CheckCombRLimit ;n<20000
+ 1315 ;n>=20000
0944 1316 CheckCombR:
0944 20 00 00 1317 call .R_trans_X
0947 F3 0A 1318 lda #COMBR24
0949 FD D8 1319 sta .M_Data_Offset
094B 20 0A 44 1320 call .InpDataToOpY
094E 20 00 00 1321 call LineUp
0951 F3 00 1322 lda #OperandX
0953 F9 00 1323 sta0 Addr1
0955 F3 00 1324 lda #OperandY
0957 F9 00 1325 sta0 Addr2
0959 F3 07 1326 lda #.CmpLen ;06 2002.02.21
095B F9 00 1327 sta0 DpCount
095D 20 00 00 1328 call CompareData
0960 F5 00 1329 lda0 Temp1
0962 A7 02 1330 cmpe #2
0964 06 09 91 1331 brz UsingNrLoop ;r<24
0967 1332 CheckCombRLimit:
0967 20 00 00 1333 call .R_trans_X
096A F3 14 1334 lda #COMBR70
096C FD D8 1335 sta .M_Data_Offset
096E 20 0A 44 1336 call .InpDataToOpY
0971 20 00 00 1337 call LineUp
0974 F3 00 1338 lda #OperandX
0976 F9 00 1339 sta0 Addr1
0978 F3 00 1340 lda #OperandY
097A F9 00 1341 sta0 Addr2
097C F3 07 1342 lda #.CmpLen ;06 2002.02.21
097E F9 00 1343 sta0 DpCount
0980 20 00 00 1344 call CompareData
0983 F5 00 1345 lda0 Temp1
0985 A7 02 1346 cmpe #2
0987 06 09 91 1347 brz UsingNrLoop ;r<70
098A 1348 ErrorExit:
098A F3 01 1349 lda #1
098C F9 00 1350 sta0 ErrorFlag
098E 02 0A 10 1351 br EndCombNr
+ 1352 ;(n<20000 or r <24 )
0991 1353 UsingNrLoop:
0991 F3 00 1354 lda #0
0993 F9 00 1355 sta0 OpCnt
0995 20 00 00 1356 call .R_trans_X
0998 20 00 00 1357 call MoveData
099B 20 00 00 1358 call .X_trans_R
099E F3 00 1359 lda #>(Operand_r+6)
09A0 FC 28 1360 sta PP
09A2 F1 06 1361 lda Operand_r+6
09A4 DB 00 1362 ora #0
09A6 07 09 B2 1363 brnz 0$
09A9 20 00 00 1364 call .Put_1_to_OperandX
09AC 20 00 00 1365 call .X_trans_Z
09AF 02 0A 10 1366 br EndCombNr
+ 1367 0$:
09B2 F9 00 1368 sta0 OutputTemp
09B4 F3 01 1369 lda #1
09B6 FC 28 1370 sta PP
09B8 F5 00 1371 lda0 OutputTemp
09BA FD 00 1372 sta .M_bcdbuf
09BC 20 00 00 1373 call .bcdtohex
09BF F1 00 1374 lda .M_bcdbuf
09C1 F9 00 1375 sta0 OpCntNo
09C3 F3 00 1376 lda #0
09C5 FC 28 1377 sta PP
09C7 20 00 00 1378 call .Put_1_to_OperandX
+ 1379 1$:
09CA 20 00 00 1380 call .S_trans_Y
09CD 20 00 00 1381 call Multiplation
09D0 F5 00 1382 lda0 ErrorFlag
09D2 DB 00 1383 ora #0
09D4 07 0A 10 1384 brnz EndCombNr
09D7 20 00 00 1385 call .Z_trans_Buf ;buf=n*x
09DA 20 00 00 1386 call .S_trans_X
09DD 20 0A 3C 1387 call Put_1_to_OperandY
09E0 20 00 00 1388 call Subtration ;n-1
09E3 20 00 00 1389 call .Z_Trans_S ;n=n-1
09E6 20 00 00 1390 call .Buf_trans_X
09E9 F5 00 1391 lda0 OpCnt
09EB 1F 1392 inca
09EC F9 00 1393 sta0 OpCnt
09EE A5 00 1394 cmpe OpCntNo
09F0 05 09 CA 1395 brnc 1$
09F3 F5 00 1396 lda0 ErrorFlag
09F5 DB 00 1397 ora #0
09F7 07 0A 10 1398 brnz EndCombNr
09FA 20 00 00 1399 call .R_trans_X
09FD F3 00 1400 lda #0
09FF F9 07 1401 sta0 OperandX+7
0A01 20 00 00 1402 call .Factorial ; r!
0A04 20 00 00 1403 call .Z_trans_Y
0A07 20 00 00 1404 call .Buf_trans_X
0A0A 20 00 00 1405 call Division ;[n..(n-r+1)]/r!
0A0D 02 0A 10 1406 br EndCombNr
0A10 1407 EndCombNr:
0A10 24 1408 ret
+ 1409
+ 1410 ;Input:OperandX,OperandY
+ 1411 ;Output:OperandZ
0A11 1412 .NPR::
0A11 20 00 00 1413 call .Y_trans_T
0A14 20 08 87 1414 call .NCR
0A17 20 00 00 1415 call .T_trans_X
0A1A 20 00 00 1416 call .Z_trans_B
0A1D F5 00 1417 lda0 ErrorFlag
0A1F DB 00 1418 ora #0
0A21 07 0A 3B 1419 brnz 0$
0A24 F3 00 1420 lda #0
0A26 F9 07 1421 sta0 OperandX+7
0A28 20 00 00 1422 call .Factorial
0A2B F5 00 1423 lda0 ErrorFlag
0A2D DB 00 1424 ora #0
0A2F 07 0A 3B 1425 brnz 0$
0A32 20 00 00 1426 call .Z_trans_Y
0A35 20 00 00 1427 call .B_trans_X
0A38 20 00 00 1428 call Multiplation ;c(n,r)*r!
+ 1429 0$:
0A3B 24 1430 ret
0A3C 1431 Put_1_to_OperandY::
0A3C 20 00 00 1432 call .ClrY
0A3F F3 01 1433 lda #01h
0A41 F9 06 1434 sta0 OperandY+6
0A43 24 1435 ret
+ 1436
+ 1437 ;;;
0A44 1438 .InpDataToOpY::
+ 1439 ;lda OP1
+ 1440 ;anda #~10h
+ 1441 ;sta OP1
0A44 20 00 00 1442 call .ClrY
0A47 F3 00 1443 lda #0h
0A49 FC 54 1444 sta TPP
0A4B F3 0B 1445 lda #@(FactConst)
0A4D FD 01 1446 sta TableC+1
0A4F F3 6D 1447 lda #<(FactConst)
0A51 89 D8 1448 adda .M_Data_Offset
0A53 FD 00 1449 sta TableC
0A55 F1 01 1450 lda TableC+1
0A57 9B 00 1451 addc #0
0A59 FD 01 1452 sta TableC+1
+ 1453
0A5B F3 00 1454 lda #0h
0A5D FC 54 1455 sta TPP
0A5F F1 01 1456 lda TableC+1
0A61 FC 02 1457 sta TPH
0A63 F1 00 1458 lda TableC
0A65 FC 01 1459 sta TPL
0A67 F8 1460 ldv
0A68 FD 00 1461 sta SignY
0A6A F8 1462 ldv
0A6B FD 00 1463 sta PointY
0A6D F3 00 1464 ld
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -