📄 base.asl
字号:
0008 1 HEX_DIGITS equ 8
000A 2 BIN_DIGITS equ 10
000A 3 OCT_DIGITS equ 10
+ 4
+ 5
+ 6 .area base_code(code,rel)
+ 7 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ 8 ;
+ 9 ; Public functions
+ 10 ;
+ 11 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ 12
+ 13 ;Base-10 -> Base-2
+ 14 ;Input:OperandX (Dec)
+ 15 ;Output:OperandZ (Bin)
+B 00 01
0000 16 Base_Dec2Bin::
0000 F5 00 17 lda0 SignX
0002 F9 00 18 sta0 SignTmp
0004 DB 00 19 ora #0
0006 06 00 56 20 brz 1$
0009 F3 00 21 lda #0
000B F9 00 22 sta0 SignX
000D 20 00 00 23 call .X_trans_R
0010 20 00 00 24 call .ClrY
0013 F3 05 25 lda #05h
0015 F9 05 26 sta0 OperandY+5
0017 F3 13 27 lda #13h
0019 F9 06 28 sta0 OperandY+6
001B 20 00 00 29 call LineUp
001E F3 00 30 lda #OperandX
0020 FD 00 31 sta Addr1
0022 F3 00 32 lda #OperandY
0024 FD 00 33 sta Addr2
0026 F3 07 34 lda #07h
0028 FD 00 35 sta DpCount
002A 20 00 00 36 call CompareData
002D F1 00 37 lda Temp1
002F A7 02 38 cmpe #2
0031 06 00 3B 39 brz 0$
0034 F3 01 40 lda #1
0036 F9 00 41 sta0 ErrorFlag
0038 02 00 8A 42 br 3$
+ 43 ;OperandX<0
+ 44 0$:
003B 20 00 00 45 call .R_trans_X
003E F5 00 46 lda0 SignTmp
0040 F9 00 47 sta0 SignX
0042 20 00 00 48 call .ClrY
0045 F3 10 49 lda #10h
0047 F9 05 50 sta0 OperandY+5
0049 F3 24 51 lda #24h
004B F9 06 52 sta0 OperandY+6
004D 20 00 00 53 call Addition
0050 20 00 00 54 call .Z_trans_X
0053 02 00 87 55 br 2$
+ 56 1$:
0056 20 00 00 57 call .X_trans_R
0059 20 00 00 58 call .ClrY
005C F3 05 59 lda #05h
005E F9 05 60 sta0 OperandY+5
0060 F3 12 61 lda #12h
0062 F9 06 62 sta0 OperandY+6
0064 20 00 00 63 call LineUp
0067 F3 00 64 lda #OperandX
0069 FD 00 65 sta Addr1
006B F3 00 66 lda #OperandY
006D FD 00 67 sta Addr2
006F F3 07 68 lda #07h
0071 FD 00 69 sta DpCount
0073 20 00 00 70 call CompareData
0076 F1 00 71 lda Temp1
0078 A7 02 72 cmpe #2
007A 06 00 84 73 brz 22$
007D F3 01 74 lda #1
007F F9 00 75 sta0 ErrorFlag
0081 02 00 8A 76 br 3$
+ 77 22$:
0084 20 00 00 78 call .R_trans_X
+ 79 2$:
0087 20 03 48 80 call Dec2Bin
+ 81 3$:
008A 24 82 ret
+ 83
+ 84 ;Base-10 -> Base-8
+ 85 ;Input:OperandX (Dec)
+ 86 ;Output:OperandZ (Oct)
008B 87 Base_Dec2Oct::
008B F5 00 88 lda0 SignX
008D F9 00 89 sta0 SignTmp
008F DB 00 90 ora #0
0091 06 00 F6 91 brz 1$
0094 F3 00 92 lda #0
0096 F9 00 93 sta0 SignX
0098 20 00 00 94 call .X_trans_R
009B 20 00 00 95 call .ClrY
009E F3 05 96 lda #05h
00A0 F9 02 97 sta0 OperandY+2
00A2 F3 36 98 lda #36h
00A4 F9 03 99 sta0 OperandY+3
00A6 F3 87 100 lda #87h
00A8 F9 04 101 sta0 OperandY+4
00AA F3 09 102 lda #09h
00AC F9 05 103 sta0 OperandY+5
00AE F3 13 104 lda #13h
00B0 F9 06 105 sta0 OperandY+6
00B2 20 00 00 106 call LineUp
00B5 F3 00 107 lda #OperandX
00B7 FD 00 108 sta Addr1
00B9 F3 00 109 lda #OperandY
00BB FD 00 110 sta Addr2
00BD F3 07 111 lda #07h
00BF FD 00 112 sta DpCount
00C1 20 00 00 113 call CompareData
00C4 F1 00 114 lda Temp1
00C6 A7 02 115 cmpe #2
00C8 06 00 D2 116 brz 0$
00CB F3 01 117 lda #1
00CD F9 00 118 sta0 ErrorFlag
00CF 02 00 F9 119 br 2$
+ 120 ;OperandX<0
+ 121 0$:
00D2 20 00 00 122 call .R_trans_X
00D5 F5 00 123 lda0 SignTmp
00D7 F9 00 124 sta0 SignX
00D9 20 00 00 125 call .ClrY
00DC F3 10 126 lda #10h
00DE F9 02 127 sta0 OperandY+2
00E0 F3 73 128 lda #73h
00E2 F9 03 129 sta0 OperandY+3
00E4 F3 74 130 lda #74h
00E6 F9 04 131 sta0 OperandY+4
00E8 F3 18 132 lda #18h
00EA F9 05 133 sta0 OperandY+5
00EC F3 24 134 lda #24h
00EE F9 06 135 sta0 OperandY+6
00F0 20 00 00 136 call Addition
00F3 20 00 00 137 call .Z_trans_X
+ 138 1$:
00F6 20 03 60 139 call Dec2Oct
+ 140 2$:
00F9 24 141 ret
+ 142
+ 143 ;Base-10 -> Base-16
+ 144 ;Input:OperandX (Dec)
+ 145 ;Output:OperandZ (Hex)
00FA 146 Base_Dec2Hex::
00FA F5 00 147 lda0 SignX
00FC F9 00 148 sta0 SignTmp
00FE 20 02 42 149 call CheckDecLimit
0101 F5 00 150 lda0 ErrorFlag
0103 A7 01 151 cmpe #1
0105 04 01 33 152 brc 2$
0108 F5 00 153 lda0 SignTmp
010A DB 00 154 ora #0
010C 06 01 30 155 brz 1$
+ 156 ;OperandX<0
+ 157 0$:
010F F5 00 158 lda0 SignTmp
0111 F9 00 159 sta0 SignX
0113 20 00 00 160 call .ClrY
0116 F3 42 161 lda #42h
0118 F9 02 162 sta0 OperandY+2
011A F3 94 163 lda #94h
011C F9 03 164 sta0 OperandY+3
011E F3 96 165 lda #96h
0120 F9 04 166 sta0 OperandY+4
0122 F3 72 167 lda #72h
0124 F9 05 168 sta0 OperandY+5
0126 F3 96 169 lda #96h
0128 F9 06 170 sta0 OperandY+6
012A 20 00 00 171 call Addition
012D 20 00 00 172 call .Z_trans_X
+ 173 1$:
0130 20 03 54 174 call Dec2Hex
+ 175 2$:
0133 24 176 ret
+ 177
+ 178 ;Input:OperandX (Hex)
+ 179 ;Output:OperandZ (Bin)
0134 180 Base_Hex2Bin::
0134 20 01 48 181 call Base_Hex2Dec
0137 20 00 00 182 call .Z_trans_X
013A 20 00 00 183 call Base_Dec2Bin
013D 24 184 ret
+ 185
+ 186 ;Input:OperandX (Hex)
+ 187 ;Output:OperandZ (Oct)
013E 188 Base_Hex2Oct::
013E 20 01 48 189 call Base_Hex2Dec
0141 20 00 00 190 call .Z_trans_X
0144 20 00 8B 191 call Base_Dec2Oct
0147 24 192 ret
+ 193
+ 194 ;Input:OperandX (Hex)
+ 195 ;Output:OperandZ (Dec)
0148 196 Base_Hex2Dec::
0148 F3 00 197 lda #0
014A FC 28 198 sta PP
014C 20 02 CE 199 call CheckHexLimit
014F F5 00 200 lda0 ErrorFlag
0151 A7 01 201 cmpe #1
0153 04 01 91 202 brc 3$
0156 F3 08 203 lda #HEX_DIGITS
0158 F9 00 204 sta0 BufferZ
015A F3 06 205 lda #@Hex2DecTab
015C FD 01 206 sta BufferZ+1
015E F3 DD 207 lda #<Hex2DecTab
0160 FD 02 208 sta BufferZ+2
0162 20 03 AD 209 call HBO2DecBase
0165 F5 03 210 lda0 Buffer+3
0167 CB F0 211 anda #0xf0
0169 7F 212 rorc
016A 7F 213 rorc
016B 7F 214 rorc
016C 7F 215 rorc
016D CB 0F 216 anda #0x0f
016F A7 08 217 cmpe #8
0171 05 01 91 218 brnc 3$
0174 20 00 00 219 call .Z_trans_X
0177 20 00 00 220 call .ClrY
017A F3 42 221 lda #42h
017C F9 02 222 sta0 OperandY+2
017E F3 94 223 lda #94h
0180 F9 03 224 sta0 OperandY+3
0182 F3 96 225 lda #96h
0184 F9 04 226 sta0 OperandY+4
0186 F3 72 227 lda #72h
0188 F9 05 228 sta0 OperandY+5
018A F3 96 229 lda #96h
018C F9 06 230 sta0 OperandY+6
018E 20 00 00 231 call Subtration
+ 232 3$:
0191 24 233 ret
+ 234
+ 235 ;Input:OperandX (Bin)
+ 236 ;Output:OperandZ (Oct)
0192 237 Base_Bin2Oct::
0192 20 01 A6 238 call Base_Bin2Dec
0195 20 00 00 239 call .Z_trans_X
0198 20 00 8B 240 call Base_Dec2Oct
019B 24 241 ret
+ 242
+ 243 ;Input:OperandX (Bin)
+ 244 ;Output:OperandZ (Hex)
019C 245 Base_Bin2Hex::
019C 20 01 A6 246 call Base_Bin2Dec
019F 20 00 00 247 call .Z_trans_X
01A2 20 00 FA 248 call Base_Dec2Hex
01A5 24 249 ret
+ 250
+ 251 ;Input:OperandX (Bin)
+ 252 ;Output:OperandZ (Decimal)
01A6 253 Base_Bin2Dec::
01A6 F3 00 254 lda #0
01A8 FC 28 255 sta PP
01AA 20 02 DA 256 call CheckBinLimit
01AD F5 00 257 lda0 ErrorFlag
01AF A7 01 258 cmpe #1
01B1 04 01 E3 259 brc 3$
01B4 F3 0A 260 lda #BIN_DIGITS
01B6 F9 00 261 sta0 BufferZ
01B8 F3 06 262 lda #@Bin2DecTab
01BA FD 01 263 sta BufferZ+1
01BC F3 15 264 lda #<Bin2DecTab
01BE FD 02 265 sta BufferZ+2
01C0 20 03 AD 266 call HBO2DecBase
01C3 F5 02 267 lda0 Buffer+2
01C5 CB F0 268 anda #0xf0
01C7 7F 269 rorc
01C8 7F 270 rorc
01C9 7F 271 rorc
01CA 7F 272 rorc
01CB CB 0F 273 anda #0x0f
01CD A7 01 274 cmpe #1
01CF 05 01 E3 275 brnc 3$
01D2 20 00 00 276 call .Z_trans_X
01D5 20 00 00 277 call .ClrY
01D8 F3 10 278 lda #10h
01DA F9 05 279 sta0 OperandY+5
01DC F3 24 280 lda #24h
01DE F9 06 281 sta0 OperandY+6
01E0 20 00 00 282 call Subtration
+ 283 3$:
01E3 24 284 ret
+ 285
+ 286 ;Input:OperandX (Oct)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -