📄 oppotriangle_0225.asl
字号:
+ 1 ;/subrutine name : oppotriangle.asm
+ 2 ;/user bady : HE84770
+ 3 ;/fast clock : 4Mhz
+ 4 ;/slow clock : 32768khz
+ 5 ;/programer : Alton
+ 6 ;|---------------------------------------------------|
+ 7 ;| Program:Asin ,Acos ,Atan |
+ 8 ;| Format: |
+ 9 ;| ex: Asin 0.88 |
+ 10 ;| Input: |
+ 11 ;| Input data to OperandX |
+ 12 ;| call .Asin |
+ 13 ;| result: OperandZ |
+ 14 ;| Acos Atan Atan asame |
+ 15 ;| |
+ 16 ;| ps(if ErrorFlag =1 data is Error) |
+ 17 ;|---------------------------------------------------|
+ 18
+ 19 ;
0000 20 pS0 EQU 0X00
000A 21 pS1 EQU pS0+0X0a
0014 22 pS2 EQU pS1+0X0a
001E 23 pS3 EQU pS2+0X0a
0028 24 pS4 EQU pS3+0X0a
0032 25 pS5 EQU pS4+0X0a
003C 26 qS1 EQU pS5+0X0a
0046 27 qS2 EQU qS1+0X0a
0050 28 qS3 EQU qS2+0X0a
005A 29 qS4 EQU qS3+0X0a
0064 30 c_hsqrt2 EQU qS4+0X0a
006E 31 H_PI EQU c_hsqrt2+0X0a
0078 32 Point5 EQU H_PI+0X0A
0082 33 Int2 EQU Point5+0X0a
008C 34 X EQU Int2+0X0a
0096 35 Int1 EQU X+0x0a
00A0 36 R180DivPi EQU Int1+0X0a
00AA 37 PiDiv180 EQU R180DivPi+0X0a
00B4 38 Int0 EQU PiDiv180+0X0a
00BE 39 Int30 EQU Int0+0X0a
00C8 40 Int60 EQU Int30+0X0a
00D2 41 Int90 EQU Int60+0X0a
00DC 42 Int45 EQU Int90+0X0a
00E6 43 INT180 equ Int45+0X0a
+ 44 ;;Golden added
0000 45 COMBN20000 equ 0x0
000A 46 COMBR24 equ COMBN20000+0x0a
0014 47 COMBR70 equ COMBR24+0x0a
+ 48
+ 49 ;;
0000 50 Id0 EQU 0X00
000A 51 Id1 EQU Id0+0X0a
0014 52 Id2 EQU Id1+0X0a
001E 53 Id3 EQU Id2+0X0a
0028 54 At0 EQU Id3+0X0a
0032 55 At1 EQU At0+0X0a
003C 56 At2 EQU At1+0X0a
0046 57 At3 EQU At2+0X0a
0050 58 At4 EQU At3+0X0a
005A 59 At5 EQU At4+0X0a
0064 60 At6 EQU At5+0X0a
006E 61 At7 EQU At6+0X0a
0078 62 At8 EQU At7+0X0a
0082 63 At9 EQU At8+0X0a
008C 64 At10 EQU At9+0X0a
0096 65 Num1 EQU At10+0X0a
00A0 66 Num2 EQU Num1+0X0a
00AA 67 Num3 EQU Num2+0X0a
00B4 68 Num4 EQU Num3+0X0a
00BE 69 Int1T EQU Num4+0X0a
00C8 70 Int2T EQU Int1T+0X0a
00D2 71 Int1p5 EQU Int2T+0X0a
0007 72 .CmpLen EQU 0x07
+ 73 ;-----------------------------------------------
+ 74 .area asin_data(data,ABS)
+ 75 .org 0xd8
+B 00 01
00D8 76 .KeyC::
00D8 77 .M_Data_Offset:: .ds 1
00D9 78 .IdFlag:: .ds 1 ;ID=0,1,2,3,(4=-1)
00DA 79 .KeyD::
00DA 80 .SignXBuf: .ds 1
00DB 81 .KeyCnt::
00DB 82 .SpecialFlag:: .ds 1
00DC 83 .DPBuf:: .ds 1
+ 84
+ 85 .area asin_code(code)
+ 86 ;-----------------------------------------------
+B 00 02
0000 87 .Asin::
+ 88
0000 F1 00 89 lda SignX
0002 FD DA 90 sta .SignXBuf
0004 F3 00 91 lda #0h
0006 FD 00 92 sta SignX
0008 20 00 00 93 call .X_trans_Buf
000B 20 03 0F 94 call .CheckData
000E F1 00 95 lda ErrorFlag
0010 A7 01 96 cmpe #01h
0012 06 00 A8 97 brz .ErrorDataAsin
0015 20 02 89 98 call .SpecialDegree
0018 F1 DB 99 lda .SpecialFlag
001A A7 00 100 cmpe #0h
001C 06 00 2E 101 brz .NotSpeicalDegree
001F A7 01 102 cmpe #01h
0021 06 00 60 103 brz .Degree30Asin
0024 A7 02 104 cmpe #02h
0026 06 00 78 105 brz .Degree90Asin
0029 A7 03 106 cmpe #03h
002B 06 00 90 107 brz .Degree0Asin
+ 108
002E 109 .NotSpeicalDegree:
+ 110
002E F3 78 111 lda #Point5
0030 FD D8 112 sta .M_Data_Offset
0032 20 04 B9 113 call .InpDataToY
0035 20 00 00 114 call LineUp
0038 F3 00 115 lda #OperandX
003A FD 00 116 sta Addr1
003C F3 00 117 lda #OperandY
003E FD 00 118 sta Addr2
0040 F3 07 119 lda #.CmpLen ;06
0042 FD 00 120 sta DpCount
0044 20 00 00 121 call CompareData
0047 F1 00 122 lda Temp1
0049 A7 01 123 cmpe #1h
004B 06 00 57 124 brz .SinXBeyondPoint5
004E 20 00 00 125 call .Buf_trans_X ;2002 7/12
0051 20 03 3D 126 call .Condition1
0054 02 00 AB 127 br .AddSymbols
0057 128 .SinXBeyondPoint5:
0057 20 00 00 129 call .Buf_trans_X ;2002 7/12
005A 20 03 50 130 call .Condition2
005D 02 00 AB 131 br .AddSymbols
0060 132 .Degree30Asin:
0060 F3 BE 133 lda #Int30
0062 FD D8 134 sta .M_Data_Offset
0064 20 04 7E 135 call .InpData
0067 20 00 00 136 call .ClrZ
006A 20 00 00 137 call .X_trans_Z
006D F3 05 138 lda #05h
006F FD D9 139 sta .IdFlag
0071 F3 00 140 lda #0h
0073 FD 00 141 sta PointZ
0075 02 00 AB 142 br .AddSymbols
0078 143 .Degree90Asin:
0078 F3 D2 144 lda #Int90
007A FD D8 145 sta .M_Data_Offset
007C 20 04 7E 146 call .InpData
007F 20 00 00 147 call .ClrZ
0082 20 00 00 148 call .X_trans_Z
0085 F3 05 149 lda #05h
0087 FD D9 150 sta .IdFlag
0089 F3 00 151 lda #0h
008B FD 00 152 sta PointZ
008D 02 00 AB 153 br .AddSymbols
0090 154 .Degree0Asin:
0090 F3 B4 155 lda #Int0
0092 FD D8 156 sta .M_Data_Offset
0094 20 04 7E 157 call .InpData
0097 20 00 00 158 call .ClrZ
009A 20 00 00 159 call .X_trans_Z
009D F3 05 160 lda #05h
009F FD D9 161 sta .IdFlag
00A1 F3 00 162 lda #0h
00A3 FD 00 163 sta PointZ
00A5 02 00 AB 164 br .AddSymbols
00A8 165 .ErrorDataAsin:
00A8 20 00 00 166 call .ClrZ
00AB 167 .AddSymbols:
00AB F1 D9 168 lda .IdFlag
00AD A7 05 169 cmpe #05h
00AF 06 00 BA 170 brz .EndDegreeAsin
00B2 A7 0C 171 cmpe #0ch
00B4 06 00 BA 172 brz .EndDegreeAsin
00B7 20 02 46 173 call .Degree
00BA 174 .EndDegreeAsin:
00BA F3 00 175 lda #0h
00BC FD D9 176 sta .IdFlag
+ 177 ;Added by Golden
00BE F1 DA 178 lda .SignXBuf
00C0 A7 00 179 cmpe #00h
00C2 06 00 C7 180 brz 0$
00C5 FD 00 181 sta SignZ
+ 182 0$:
+ 183
00C7 24 184 ret
+ 185 ;-----------------------------------------------
00C8 186 .Acos::
00C8 F5 00 187 lda0 SignX
00CA F9 00 188 sta0 SignT
00CC F1 00 189 lda ErrorFlag
00CE A7 01 190 cmpe #01h
00D0 06 01 8B 191 brz .EndAcos
00D3 20 00 00 192 call .X_trans_Buf ;2002 7/12
00D6 20 02 89 193 call .SpecialDegree
00D9 F1 DB 194 lda .SpecialFlag
00DB A7 00 195 cmpe #0h
00DD 06 00 EF 196 brz .NotSpeicalDegreeAcos
00E0 A7 01 197 cmpe #01h
00E2 06 01 18 198 brz .Degree60Acos
00E5 A7 02 199 cmpe #02h
00E7 06 01 34 200 brz .Degree0Acos
00EA A7 03 201 cmpe #03h
00EC 06 01 50 202 brz .Degree90Acos
+ 203
00EF 204 .NotSpeicalDegreeAcos:
00EF F3 0C 205 lda #0ch
00F1 FD D9 206 sta .IdFlag
00F3 20 00 00 207 call .Asin
00F6 F1 00 208 lda ErrorFlag
00F8 A7 01 209 cmpe #01h
00FA 06 01 8B 210 brz .EndAcos
00FD F3 00 211 lda #0h
00FF FD 00 212 sta SignZ
0101 F1 DA 213 lda .SignXBuf
0103 A7 00 214 cmpe #00h
0105 06 01 7E 215 brz .XBeyond0
0108 F3 6E 216 lda #H_PI
010A FD D8 217 sta .M_Data_Offset
010C 20 04 7E 218 call .InpData
010F 20 00 00 219 call .Z_trans_Y
0112 20 00 00 220 call Addition
0115 02 01 8B 221 br .EndAcos
0118 222 .Degree60Acos:
+ 223
0118 F3 C8 224 lda #Int60
011A FD D8 225 sta .M_Data_Offset
011C 20 04 7E 226 call .InpData
011F F1 00 227 lda SignT
0121 DB 00 228 ora #0
0123 07 01 65 229 brnz NegValue
0126 20 00 00 230 call .X_trans_Z
0129 F3 05 231 lda #05h
012B FD D9 232 sta .IdFlag
012D F3 00 233 lda #0h
012F FD 00 234 sta PointZ
0131 02 01 8B 235 br .EndAcos
0134 236 .Degree0Acos:
0134 F3 B4 237 lda #Int0
0136 FD D8 238 sta .M_Data_Offset
0138 20 04 7E 239 call .InpData
+ 240 ;added by golden
013B F1 00 241 lda SignT
013D DB 00 242 ora #0
013F 07 01 65 243 brnz NegValue
0142 20 00 00 244 call .X_trans_Z
0145 F3 05 245 lda #05h
0147 FD D9 246 sta .IdFlag
0149 F3 00 247 lda #0h
014B FD 00 248 sta PointZ
014D 02 01 8B 249 br .EndAcos
0150 250 .Degree90Acos:
0150 F3 D2 251 lda #Int90
0152 FD D8 252 sta .M_Data_Offset
0154 20 04 7E 253 call .InpData
0157 20 00 00 254 call .X_trans_Z
015A F3 05 255 lda #05h
015C FD D9 256 sta .IdFlag
015E F3 00 257 lda #0h
0160 FD 00 258 sta PointZ
0162 02 01 8B 259 br .EndAcos
+ 260 ;added by golden
0165 261 NegValue:
0165 20 00 00 262 call .X_trans_Z
0168 F3 E6 263 lda #Int180
016A FD D8 264 sta .M_Data_Offset
016C 20 04 7E 265 call .InpData
016F 20 00 00 266 call .Z_trans_Y
0172 20 00 00 267 call Subtration
0175 F3 00 268 lda #0h
0177 FD 00 269 sta PointZ
0179 FD 00 270 sta SignZ
017B 02 01 95 271 br .EndDegreeAcos
017E 272 .XBeyond0:
017E F3 6E 273 lda #H_PI
0180 FD D8 274 sta .M_Data_Offset
0182 20 04 7E 275 call .InpData
0185 20 00 00 276 call .Z_trans_Y
0188 20 00 00 277 call Subtration
018B 278 .EndAcos:
018B F1 D9 279 lda .IdFlag
018D A7 05 280 cmpe #05h
018F 06 01 95 281 brz .EndDegreeAcos
0192 20 02 46 282 call .Degree
0195 283 .EndDegreeAcos:
0195 F3 00 284 lda #0h
0197 FD D9 285 sta .IdFlag
0199 24 286 ret
+ 287
+ 288 ;------------------------------------------------
019A 289 .Atan::
019A F1 00 290 lda ErrorFlag
019C A7 01 291 cmpe #01h
019E 06 07 06 292 brz .EndChoiceX
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -