📄 postfix.asl
字号:
+ 1 ;/subrutine name : Postfix.asm
+ 2 ;/user bady : HE83137
+ 3 ;/fast clock : 4Mhz
+ 4 ;/slow clock : 32768khz
+ 5 ;/programer : Alton
0002 6 .INPP EQU 0x02
0002 7 .PSPP EQU 0x02
0050 8 .PosfixDP EQU 0x50
0003 9 .STPP EQU 0x03
00A4 10 .ADD EQU 0xa4
00A5 11 .DEC EQU 0xa5
00A6 12 .MUL EQU 0xa6
00A7 13 .DIV EQU 0xa7
00B2 14 .LC EQU 0xb2
00B3 15 .RC EQU 0xb3
00D3 16 .XY EQU 0xd3
00D7 17 .SQUX EQU 0xd7
00D0 18 .POL EQU 0xd0
00D6 19 .REC EQU 0xd6
00A1 20 .NUM EQU 0xa1
00B4 21 .Comma EQU 0xb4
00B7 22 .DMS EQU 0xb7
00C3 23 .Fract EQU 0xc3
00C9 24 .NCR EQU 0xc9
00D5 25 .NPR EQU 0xd5
00B1 26 .REG EQU 0xb1
00B6 27 .MCL EQU 0xb6
00AB 28 .Degree EQU 0xab
00AC 29 .Minute EQU 0xac
00AD 30 .Second EQU 0xad
00A0 31 .Point EQU 0xa0
00A8 32 .Negative EQU 0xa8
+B 00 01
+ 33 .area postfix(code)
0000 34 .Postfix::
0000 F5 00 35 lda0 .DataDP
0002 A7 00 36 cmpe #0h
0004 06 00 DD 37 brz .NoERROR
0007 20 0F DD 38 call .InitPsData
+ 39 ;===========================================
000A 40 .IN2PS:
000A F5 00 41 lda0 ErrorFlag
000C A7 00 42 cmpe #0h
000E 07 00 D1 43 brnz .PosFixEnd
0011 F3 00 44 lda #>.INDP
0013 FC 28 45 sta PP
0015 F5 00 46 lda0 .INDP
0017 A5 00 47 cmpe .DataDP
0019 06 00 54 48 brz .PopAllFunc
001C 49 .STPostfix:
001C F5 00 50 lda0 .PSDP
001E A7 F0 51 cmpe #0f0h
0020 04 00 4D 52 brc .StackErr
0023 F3 02 53 lda #.INPP
0025 FC 28 54 sta PP
0027 F5 00 55 lda0 .INDP
0029 FC 21 56 sta DP
002B F2 57 lda i
002C F9 00 58 sta0 .DataBuf
002E F9 00 59 sta0 Temp2
0030 18 60 incdp
0031 F0 21 61 lda DP
0033 F9 00 62 sta0 .INDP
0035 F5 00 63 lda0 .DataBuf
0037 A7 0A 64 cmpe #0ah
0039 04 01 00 65 brc .FunLCode
003C F5 00 66 lda0 .Buf1
003E A7 00 67 cmpe #0h
0040 07 01 14 68 brnz .CmpUpDown
0043 20 0D D8 69 call .StoPosfix
0046 F5 00 70 lda0 Temp2
0048 F9 00 71 sta0 .Buf1
004A 02 00 0A 72 br .IN2PS
004D 73 .StackErr:
004D F3 03 74 lda #03h
004F F9 00 75 sta0 ErrorFlag
0051 02 00 D1 76 br .PosFixEnd
+ 77 ;-------------------------------------------
0054 78 .PopAllFunc:
+ 79
0054 F3 02 80 lda #.PSPP
0056 FC 28 81 sta PP
0058 F5 00 82 lda0 .PSDP
005A FC 21 83 sta DP
005C 38 84 decdp
005D F0 21 85 lda DP
005F F2 86 lda i
0060 A7 FF 87 cmpe #0ffh
0062 06 00 68 88 brz .PopAllFunct
0065 20 0F BF 89 call .ClosEndPS
0068 90 .PopAllFunct:
0068 F3 02 91 lda #.PSPP
006A FC 28 92 sta PP
006C F3 50 93 lda #.PosfixDP ;posfix start dp addr
006E FC 21 94 sta DP
0070 F2 95 lda i
0071 A7 B6 96 cmpe #.MCL
0073 06 00 C5 97 brz .EndPostfix
0076 F3 03 98 lda #.STPP
0078 FC 28 99 sta PP
007A F5 00 100 lda0 .STDP
007C FC 21 101 sta DP
007E F0 21 102 lda DP
0080 A7 FF 103 cmpe #0ffh
0082 06 00 C5 104 brz .EndPostfix
0085 F2 105 lda i
0086 F9 00 106 sta0 .DataBuf
0088 F5 00 107 lda0 .FractCount
008A A7 01 108 cmpe #01h
008C 07 00 9A 109 brnz .NoFractcode
008F F5 00 110 lda0 .DataBuf
0091 A7 DF 111 cmpe #0dfh
0093 07 00 9A 112 brnz .NoFractcode
0096 F3 DE 113 lda #0deh
0098 F9 00 114 sta0 .DataBuf
009A 115 .NoFractcode:
009A F5 00 116 lda0 .DataBuf
009C A7 00 117 cmpe #0h
009E 06 00 C5 118 brz .EndPostfix
00A1 A7 B2 119 cmpe #.LC
00A3 06 00 BD 120 brz .NotC
00A6 A7 B3 121 cmpe #.RC
00A8 06 00 BD 122 brz .NotC
00AB A7 B1 123 cmpe #.REG
00AD 07 00 B7 124 brnz .ClsFont
00B0 F5 00 125 lda0 .CommaFlag
00B2 A7 FF 126 cmpe #0ffh
00B4 07 00 BD 127 brnz .NotC
00B7 128 .ClsFont:
00B7 20 0E 87 129 call .NoSignal
00BA 20 0F BF 130 call .ClosEndPS
00BD 131 .NotC:
00BD F5 00 132 lda0 .STDP
00BF 3F 133 deca
00C0 F9 00 134 sta0 .STDP
00C2 02 00 68 135 br .PopAllFunct
00C5 136 .EndPostfix:
00C5 F3 02 137 lda #.PSPP
00C7 FC 28 138 sta PP
00C9 F5 00 139 lda0 .PSDP
00CB FC 21 140 sta DP
00CD 38 141 decdp
00CE F3 EE 142 lda #0eeh ;EEH Posfix end code
00D0 FE 143 sta i
00D1 144 .PosFixEnd:
+ 145
00D1 F5 00 146 lda0 ErrorFlag
00D3 A7 00 147 cmpe #0h
00D5 06 00 DD 148 brz .NoERROR
00D8 F5 00 149 lda0 .INDP
00DA F9 00 150 sta0 .SFDP
00DC 24 151 ret
00DD 152 .NoERROR:
00DD F3 03 153 lda #03h
00DF FC 28 154 sta PP
00E1 F3 00 155 lda #0h
00E3 FC 21 156 sta DP
00E5 157 .CKloop:
00E5 F2 158 lda i
00E6 A7 00 159 cmpe #0h
00E8 06 00 FF 160 brz .EndFractCK
00EB A7 DF 161 cmpe #0dfh ;Fract 1
00ED 06 00 F4 162 brz .CKnext
00F0 18 163 incdp
00F1 02 00 E5 164 br .CKloop
00F4 165 .CKnext:
00F4 18 166 incdp
00F5 F2 167 lda i
00F6 A7 B2 168 cmpe #0b2h ;(
00F8 07 00 E5 169 brnz .CKloop
00FB F3 02 170 lda #02h
00FD F9 00 171 sta0 ErrorFlag
00FF 172 .EndFractCK:
00FF 24 173 ret
+ 174 ;-------------------------------------------
0100 175 .FunLCode::
+ 176
0100 F5 00 177 lda0 .DataBuf
0102 F9 01 178 sta0 .DataBuf+1
0104 20 0A 64 179 call .CheckPari
0107 20 0E F1 180 call .CheckMem
010A F5 00 181 lda0 .AfterPari
010C A7 01 182 cmpe #01h
010E 06 06 D7 183 brz .MemoryData
0111 02 01 C3 184 br .CmpFunct
+ 185 ;-------------------------------------------
0114 186 .CmpUpDown:
0114 F5 00 187 lda0 .Buf1
0116 F9 01 188 sta0 .DataBuf+1
0118 A7 AB 189 cmpe #.Degree ;#0aah
011A 06 01 A1 190 brz .SaveNum
011D A7 AC 191 cmpe #.Minute ;#0bbh
011F 06 01 A1 192 brz .SaveNum
0122 A7 AD 193 cmpe #.Second ;#0ceh
0124 06 01 A1 194 brz .SaveNum
0127 A7 A8 195 cmpe #.Negative
0129 06 01 A1 196 brz .SaveNum
012C A7 B4 197 cmpe #.Comma
012E 06 01 A1 198 brz .SaveNum
0131 A7 B0 199 cmpe #0b0h ;---5
0133 06 01 A1 200 brz .SaveNum ;---5
0136 A7 AE 201 cmpe #0aeh
0138 06 01 A1 202 brz .SaveNum
013B F5 00 203 lda0 .DataBuf
013D F9 00 204 sta0 .Buf1 ;.Buf1
013F F5 01 205 lda0 .DataBuf+1
0141 F9 00 206 sta0 .DataBuf
0143 20 0A 64 207 call .CheckPari
0146 F5 00 208 lda0 Temp2
0148 F9 00 209 sta0 .DataBuf
014A F3 02 210 lda #02h
014C FC 28 211 sta PP
014E F3 50 212 lda #.PosfixDP
0150 FC 21 213 sta DP
0152 F2 214 lda i
0153 A7 00 215 cmpe #0h
0155 06 01 A1 216 brz .SaveNum
0158 F5 00 217 lda0 .AfterPari
015A A7 00 218 cmpe #0h
015C 06 01 A1 219 brz .SaveNum
015F A7 01 220 cmpe #01h
0161 06 01 BC 221 brz .ErrorFlag
0164 A7 02 222 cmpe #02h
0166 06 01 A1 223 brz .SaveNum
0169 A7 03 224 cmpe #03h
016B 06 01 A1 225 brz .SaveNum
016E A7 04 226 cmpe #04h
0170 06 01 A1 227 brz .SaveNum
0173 A7 05 228 cmpe #05h ;cnr
0175 06 01 A1 229 brz .SaveNum
0178 A7 06 230 cmpe #06h ;05h
017A 06 01 A1 231 brz .SaveNum
017D A7 07 232 cmpe #07h ;06h
017F 06 01 A1 233 brz .SaveNum
0182 A7 08 234 cmpe #08h ;07
0184 06 01 A1 235 brz .SaveNum
0187 A7 09 236 cmpe #09h
0189 06 01 A1 237 brz .SaveNum
018C A7 0A 238 cmpe #0ah
018E 06 01 BC 239 brz .ErrorFlag
0191 A7 0B 240 cmpe #0bh
0193 06 01 A1 241 brz .SaveNum
0196 A7 0C 242 cmpe #0ch
0198 06 01 A1 243 brz .SaveNum
019B 02 00 0A 244 br .IN2PS
+ 245 ;-------------------------------------------
019E 246 .SaveNumCls:
019E 20 0F BF 247 call .ClosEndPS
01A1 248 .SaveNum:
01A1 F5 00 249 lda0 .DataBuf
01A3 A7 A0 250 cmpe #.Point ;Point
01A5 07 01 B2 251 brnz .NumSave
01A8 F5 00 252 lda0 .PointFlag
01AA 1F 253 inca
01AB F9 00 254 sta0 .PointFlag
01AD A7 02 255 cmpe #02h
01AF 04 01 BC 256 brc .ErrorFlag
01B2 257 .NumSave:
01B2 20 0D D8 258 call .StoPosfix
01B5 F5 00 259 lda0 Temp2
01B7 F9 00 260 sta0 .Buf1
01B9 02 00 0A 261 br .IN2PS
01BC 262 .ErrorFlag:
01BC F3 02 263 lda #02h
01BE F9 00 264 sta0 ErrorFlag
01C0 02 00 D1 265 br .PosFixEnd
+ 266
+ 267 ;===========================================
01C3 268 .CmpFunct:
+ 269
01C3 F5 00 270 lda0 .DataBuf
01C5 A7 D0 271 cmpe #.POL
01C7 06 02 83 272 brz .DoPolRec
01CA A7 D6 273 cmpe #.REC
01CC 06 02 83 274 brz .DoPolRec
01CF A7 B6 275 cmpe #.MCL
01D1 06 09 E0 276 brz .StoInPosfix
01D4 A7 B7 277 cmpe #.DMS
01D6 06 03 06 278 brz .DoDMS
01D9 A7 C3 279 cmpe #.Fract
01DB 06 03 63 280 brz .DoFract
01DE A7 A0 281 cmpe #.Point
01E0 06 01 A1 282 brz .SaveNum
01E3 A7 A8 283 cmpe #.Negative
01E5 06 05 34 284 brz .SetSignDec
01E8 A7 A4 285 cmpe #.ADD
01EA 06 03 D4 286 brz .SetADDEC
01ED A7 A5 287 cmpe #.DEC
01EF 06 03 D4 288 brz .SetADDEC
01F2 A7 A6 289 cmpe #.MUL
01F4 06 04 BA 290 brz .SetMulDiv
01F7 A7 A7 291 cmpe #.DIV
01F9 06 04 BA 292 brz .SetMulDiv
01FC A7 B2 293 cmpe #.LC
01FE 06 05 BE 294 brz .LeftC
0201 A7 B3 295 cmpe #.RC
0203 06 06 B5 296 brz .RightC
0206 A7 B4 297 cmpe #.Comma
0208 06 02 1A 298 brz .DoComma
020B A7 B0 299 cmpe #0b0h ;---5
020D 06 02 2C 300 brz .DoSime
0210 F5 00 301 lda0 .AfterPari
0212 A7 01 302 cmpe #01h
0214 06 06 D7 303 brz .MemoryData
0217 02 07 6E 304 br .FuncCheck
+ 305 ;-------------------------------------------
021A 306 .DoComma:
+ 307
021A F3 00 308 lda #0h
021C F9 00 309 sta0 .DmsCount
021E F9 00 310 sta0 .PointFlag
0220 20 0F BF 311 call .ClosEndPS
0223 20 0C 2A 312 call .PushData ;.StoFuncPS ;----219
0226 20 0F BF 313 call .ClosEndPS
0229 02 02 6D 314 br .EndComma ;219
022C 315 .DoSime:
+ 316
022C F3 00 317 lda #0h
022E F9 00 318 sta0 .PointFlag
0230 20 0F BF 319 call .ClosEndPS
0233 20 0C 2A 320 call .PushData ;.StoFuncPS ;----219
0236 20 0F BF 321 call .ClosEndPS
0239 F3 B0 322 lda #0b0h
023B F9 00 323 sta0 .Buf1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -