📄 syntax.asl
字号:
+ 1 ;/subrutine name : Syntax.asm
+ 2 ;/user bady : HE83137
+ 3 ;/fast clock : 4Mhz
+ 4 ;/slow clock : 32768khz
+ 5 ;/programer : Alton
0002 6 .INPP EQU 0x02
007B 7 .Calc EQU 0x7b
+B 00 01
+ 8 .area Syntaxc(code)
0000 9 .Syntax::
+ 10
0000 F3 00 11 lda #0h
0002 F9 00 12 sta0 .LRcnt
0004 F9 00 13 sta0 .BeforePari
0006 F9 00 14 sta0 .DmsCount
0008 F9 00 15 sta0 .AfterPari
000A F9 00 16 sta0 ErrorFlag ;ErrorFlag=1 ma error
000C F9 00 17 sta0 .INDP ;ErrorFlag=2 syntax error
000E F9 00 18 sta0 .CommaFlag ;ErrorFlag=3 stack error
0010 F9 00 19 sta0 .SimeFlag
0012 F5 00 20 lda0 .FormulaFlag ;IF flag=1 belong to formula mode
0014 A7 01 21 cmpe #01h
0016 07 00 1D 22 brnz .SyntaxCK
0019 F3 02 23 lda #02h
001B F9 00 24 sta0 .INDP
+ 25 ;----------------.EndSyntaxCK---------------------------
001D 26 .SyntaxCK:
001D F3 00 27 lda #0h
001F FC 28 28 sta PP
0021 F5 00 29 lda0 .DataDP
0023 A7 00 30 cmpe #0h
0025 06 02 7E 31 brz .EndSymbor
0028 A5 00 32 cmpe .INDP
002A 06 01 78 33 brz .EndSyntaxCK
+ 34 ;-------------------------------------------
002D 35 .StartCK:
002D F5 00 36 lda0 ErrorFlag
002F A7 02 37 cmpe #02h
0031 06 02 7E 38 brz .EndSymbor
0034 F3 02 39 lda #.INPP
0036 FC 28 40 sta PP
0038 F5 00 41 lda0 .INDP
003A FC 21 42 sta DP
003C F2 43 lda i
003D F9 00 44 sta0 .DataBuf
003F F9 01 45 sta0 .DataBuf+1
0041 F5 00 46 lda0 .INDP
0043 1F 47 inca
0044 F9 00 48 sta0 .INDP
0046 02 00 49 49 br .Complier
+ 50
+ 51 ;-------------------------------------------
0049 52 .Complier::
0049 F5 00 53 lda0 ErrorFlag
004B A7 02 54 cmpe #02h
004D 06 00 6F 55 brz .ErrorSym
0050 20 00 82 56 call .SymborCK
0053 F5 00 57 lda0 .BeforePari
0055 A7 00 58 cmpe #0h
0057 07 00 5A 59 brnz .StartCmp
+ 60
005A 61 .StartCmp:
005A 20 02 7F 62 call .StackCk
005D F5 00 63 lda0 ErrorFlag
005F A7 02 64 cmpe #02h
0061 06 00 6F 65 brz .ErrorSym
0064 66 .EndComplier:
0064 F5 00 67 lda0 .AfterPari
0066 F9 00 68 sta0 .BeforePari
0068 F5 00 69 lda0 .DataBuf
006A F9 00 70 sta0 .Buf1
006C 02 00 7F 71 br .EndSyntax
006F 72 .ErrorSym:
006F F3 02 73 lda #02h
0071 F9 00 74 sta0 ErrorFlag
0073 F3 00 75 lda #0h
0075 F9 00 76 sta0 .TFlag
0077 F5 00 77 lda0 .INDP
0079 3F 78 deca
007A F9 00 79 sta0 .SFDP
007C 02 00 2D 80 br .StartCK
007F 81 .EndSyntax:
007F 02 00 1D 82 br .SyntaxCK
+ 83 ;-------------------------------------------
0082 84 .SymborCK:
0082 20 06 37 85 call .FunctCode
0085 F5 00 86 lda0 .AfterPari
0087 A7 08 87 cmpe #08h
0089 06 02 7E 88 brz .EndSymbor
008C F5 00 89 lda0 .DataBuf
008E A7 7A 90 cmpe #07ah
0090 06 00 6F 91 brz .ErrorSym
0093 A7 D0 92 cmpe #0d0h
0095 06 04 BF 93 brz .EnPolRec
0098 A7 D6 94 cmpe #0d6h
009A 06 04 BF 95 brz .EnPolRec
009D A7 B0 96 cmpe #0b0h
009F 06 01 61 97 brz .Semicolon
00A2 A7 A4 98 cmpe #0a4h
00A4 06 01 01 99 brz .IsADD
00A7 A7 A5 100 cmpe #0a5h
00A9 06 01 08 101 brz .IsDEC
00AC A7 A6 102 cmpe #0a6h
00AE 06 01 0F 103 brz .IsMUL
00B1 A7 A7 104 cmpe #0a7h
00B3 06 01 16 105 brz .IsDIV
00B6 A7 B2 106 cmpe #0b2h
00B8 06 01 1D 107 brz .IsLC
00BB A7 B3 108 cmpe #0b3h
00BD 06 01 24 109 brz .IsRC
00C0 A7 AA 110 cmpe #0aah
00C2 06 01 2B 111 brz .IsDRG
00C5 A7 BB 112 cmpe #0bbh
00C7 06 01 2B 113 brz .IsDRG
00CA A7 CE 114 cmpe #0ceh
00CC 06 01 2B 115 brz .IsDRG
00CF A7 A8 116 cmpe #0a8h
00D1 06 01 39 117 brz .IsSignDec
00D4 A7 B6 118 cmpe #0b6h
00D6 06 01 40 119 brz .IsMemoryClr
00D9 A7 B4 120 cmpe #0b4h
00DB 06 01 47 121 brz .Comma
00DE A7 C3 122 cmpe #0c3h
00E0 06 01 53 123 brz .Fraction
00E3 A7 B7 124 cmpe #0b7h
00E5 06 01 5A 125 brz .Dms
00E8 A7 A0 126 cmpe #0a0h
00EA 06 01 32 127 brz .IsPoint
00ED 05 00 FA 128 brnc .IsNum
00F0 20 06 66 129 call .CkMemory
00F3 F5 00 130 lda0 .AfterPari
00F5 A7 00 131 cmpe #0h
00F7 07 02 7E 132 brnz .EndSymbor
+ 133 ;-------------------------------------------
00FA 134 .IsNum:
00FA F3 01 135 lda #01h
00FC F9 00 136 sta0 .AfterPari
00FE 02 02 7E 137 br .EndSymbor
0101 138 .IsADD:
0101 F3 02 139 lda #02h
0103 F9 00 140 sta0 .AfterPari
0105 02 02 7E 141 br .EndSymbor
0108 142 .IsDEC:
0108 F3 03 143 lda #03h
010A F9 00 144 sta0 .AfterPari
010C 02 02 7E 145 br .EndSymbor
010F 146 .IsMUL:
010F F3 04 147 lda #04h
0111 F9 00 148 sta0 .AfterPari
0113 02 02 7E 149 br .EndSymbor
0116 150 .IsDIV:
0116 F3 05 151 lda #05h
0118 F9 00 152 sta0 .AfterPari
011A 02 02 7E 153 br .EndSymbor
011D 154 .IsLC:
011D F3 06 155 lda #06h
011F F9 00 156 sta0 .AfterPari
0121 02 02 7E 157 br .EndSymbor
0124 158 .IsRC:
0124 F3 07 159 lda #07h
0126 F9 00 160 sta0 .AfterPari
0128 02 02 7E 161 br .EndSymbor
012B 162 .IsDRG:
012B F3 0A 163 lda #0ah
012D F9 00 164 sta0 .AfterPari
012F 02 02 7E 165 br .EndSymbor
0132 166 .IsPoint:
0132 F3 09 167 lda #09h
0134 F9 00 168 sta0 .AfterPari
0136 02 02 7E 169 br .EndSymbor
0139 170 .IsSignDec:
0139 F3 0B 171 lda #0bh
013B F9 00 172 sta0 .AfterPari
013D 02 02 7E 173 br .EndSymbor
0140 174 .IsMemoryClr:
0140 F3 0C 175 lda #0ch
0142 F9 00 176 sta0 .AfterPari
0144 02 02 7E 177 br .EndSymbor
0147 178 .Comma:
0147 F3 0F 179 lda #0fh
0149 F9 00 180 sta0 .AfterPari
014B F5 00 181 lda0 .CommaFlag
014D 3F 182 deca
014E F9 00 183 sta0 .CommaFlag
0150 02 02 7E 184 br .EndSymbor
0153 185 .Fraction:
0153 F3 10 186 lda #10h
0155 F9 00 187 sta0 .AfterPari
0157 02 02 7E 188 br .EndSymbor
015A 189 .Dms:
015A F3 11 190 lda #11h
015C F9 00 191 sta0 .AfterPari
015E 02 02 7E 192 br .EndSymbor
0161 193 .Semicolon:
0161 F3 12 194 lda #12h
0163 F9 00 195 sta0 .AfterPari
0165 02 02 7E 196 br .EndSymbor
0168 197 .OtherFunc:
0168 F3 02 198 lda #02h
016A F9 00 199 sta0 ErrorFlag
016C F3 00 200 lda #0h ;set error site
016E F9 00 201 sta0 .TFlag
0170 F5 00 202 lda0 .INDP
0172 3F 203 deca
0173 F9 00 204 sta0 .SFDP
0175 02 02 7E 205 br .EndSymbor
+ 206 ;-------------------------------------------
0178 207 .EndSyntaxCK:
0178 F5 00 208 lda0 .DmsCount
017A A7 00 209 cmpe #0h
017C 06 01 89 210 brz .ChkSimeflag
017F F5 00 211 lda0 .DataBuf
0181 A7 B7 212 cmpe #0b7h ;dms
0183 06 01 89 213 brz .ChkSimeflag
0186 02 02 71 214 br .SyntaxError
0189 215 .ChkSimeflag:
0189 F5 00 216 lda0 .CommaFlag
018B A7 00 217 cmpe #0h
018D 06 01 9C 218 brz .CheckSime
0190 F5 00 219 lda0 .KeyPos
0192 A7 B5 220 cmpe #0b5h
0194 06 01 9C 221 brz .CheckSime
0197 A7 DF 222 cmpe #0dfh
0199 07 02 71 223 brnz .SyntaxError
019C 224 .CheckSime:
019C F5 00 225 lda0 .SimeFlag
019E A7 01 226 cmpe #01h
01A0 07 01 E5 227 brnz .CkCommaFlag
01A3 F5 00 228 lda0 .KeyPos
01A5 A7 B5 229 cmpe #0b5h
01A7 06 01 AF 230 brz .3$
01AA A7 DF 231 cmpe #0dfh
01AC 07 02 71 232 brnz .SyntaxError
01AF 233 .3$:
01AF F3 02 234 lda #02h
01B1 FC 28 235 sta PP
01B3 F3 00 236 lda #0h
01B5 FC 21 237 sta DP
01B7 F2 238 lda i
01B8 A7 B0 239 cmpe #0b0h ;bo is Simecolon ";"
01BA 06 02 14 240 brz .CkCommaFlagFirst
01BD F3 00 241 lda #>StateFlag
01BF FC 28 242 sta PP
01C1 F1 00 243 lda StateFlag
01C3 CB 40 244 anda #40h ;check SDmode
01C5 A7 40 245 cmpe #40h
01C7 06 01 D4 246 brz .CheckSDmd
01CA F1 00 247 lda StateFlag
01CC CB 07 248 anda #07h ;check SDmode
01CE 07 01 DE 249 brnz .CheckLRmd
01D1 02 02 71 250 br .SyntaxError
01D4 251 .CheckSDmd:
01D4 F5 00 252 lda0 .CommaFlag
01D6 A7 00 253 cmpe #0h
01D8 06 02 3A 254 brz .Endck
01DB 02 02 71 255 br .SyntaxError
01DE 256 .CheckLRmd:
01DE F5 00 257 lda0 .CommaFlag
01E0 A7 FF 258 cmpe #0ffh
01E2 07 02 71 259 brnz .SyntaxError
01E5 260 .CkCommaFlag:
01E5 F5 00 261 lda0 .SimeFlag
01E7 A7 02 262 cmpe #02h
01E9 04 02 71 263 brc .SyntaxError
01EC F3 00 264 lda #>StateFlag
01EE FC 28 265 sta PP
01F0 F1 00 266 lda StateFlag
01F2 CB 07 267 anda #07h
01F4 06 02 1E 268 brz .CompSDmode
01F7 F5 00 269 lda0 .KeyPos
01F9 A7 B5 270 cmpe #0b5h
01FB 06 02 03 271 brz .4$
01FE A7 DF 272 cmpe #0dfh
0200 07 02 1E 273 brnz .CompSDmode
+ 274 ;br .Endck
0203 275 .4$:
0203 F5 00 276 lda0 .CommaFlag
0205 A7 FF 277 cmpe #0ffh
0207 06 02 3A 278 brz .Endck
020A F5 00 279 lda0 .SimeFlag
020C A7 01 280 cmpe #01h
020E 06 02 3A 281 brz .Endck
0211 02 06 29 282 br .SynError
0214 283 .CkCommaFlagFirst:
0214 F5 00 284 lda0 .CommaFlag
0216 A7 00 285 cmpe #0h
0218 07 06 29 286 brnz .SynError
021B 02 02 3A 287 br .Endck
021E 288 .CompSDmode:
021E F5 00 289 lda0 .CommaFlag
0220 A7 00 290 cmpe #0h
0222 06 02 3A 291 brz .Endck
0225 F3 00 292 lda #>StateFlag
0227 FC 28 293 sta PP
0229 F1 00 294 lda StateFlag
022B CB 07 295 anda #07h ;check LRmode
022D 06 06 29 296 brz .SynError
0230 F5 00 297 lda0 .CommaFlag
0232 A7 FF 298 cmpe #0ffh
0234 06 02 3A 299 brz .Endck
0237 02 06 29 300 br .SynError
023A 301 .Endck:
023A F3 01 302 lda #01h
023C FC 28 303 sta PP
023E F3 00 304 lda #^(.DataEndCheck)
0240 FC 54 305 sta TPP
0242 F3 09 306 lda #@(.DataEndCheck)
0244 FC 02 307 sta TPH
0246 F3 B8 308 lda #<(.DataEndCheck)
0248 FC 01 309 sta TPL
024A 310 .SearchEnd:
024A F8 311 ldv
024B F9 01 312 sta0 .DataBuf+1
024D A7 FF 313 cmpe #0ffh
024F 06 02 60 314 brz .Endend
0252 F3 00 315 lda #0h
0254 FC 28 316 sta PP
0256 F5 01 317 lda0 .DataBuf+1
0258 A5 00 318 cmpe .DataBuf
025A 07 02 4A 319 brnz .SearchEnd
025D 02 02 7E 320 br .EndSymbor
0260 321 .Endend:
0260 F5 00 322 lda0 .DataBuf
0262 A7 0A 323 cmpe #0ah
0264 04 02 71 324 brc .SyntaxError
0267 F5 00 325 lda0 .DmsCount
0269 A7 00 326 cmpe #0h
026B 06 02 7E 327 brz .EndSymbor
026E 02 02 7E 328 br .EndSymbor
0271 329 .SyntaxError:
0271 F3 02 330 lda #02h
0273 F9 00 331 sta0 ErrorFlag
0275 F3 00 332 lda #0h ;set error site
0277 F9 00 333 sta0 .TFlag
0279 F5 00 334 lda0 .INDP
027B 3F 335 deca
027C F9 00 336 sta0 .SFDP
027E 337 .EndSymbor:
027E 24 338 ret
+ 339
+ 340 ;-------------------------------------------
027F 341 .StackCk:
+ 342
027F F5 00 343 lda0 .BeforePari
0281 A7 00 344 cmpe #0h
0283 06 02 E0 345 brz .HeadCodCK
0286 F5 00 346 lda0 .AfterPari
0288 A7 01 347 cmpe #01h
028A 06 03 26 348 brz .NumCK
028D A7 02 349 cmpe #02h
028F 06 03 7A 350 brz .AddDecCK
0292 A7 03 351 cmpe #03h
0294 06 03 7A 352 brz .AddDecCK
0297 A7 04 353 cmpe #04h
0299 06 03 BE 354 brz .MulDivCK
029C A7 05 355 cmpe #05h
029E 06 03 BE 356 brz .MulDivCK
02A1 A7 06 357 cmpe #06h
02A3 06 03 EE 358 brz .LCCK
02A6 A7 07 359 cmpe #07h
02A8 06 03 F6 360 brz .RCCK
02AB A7 08 361 cmpe #08h
02AD 06 04 4D 362 brz .FuncCK
02B0 A7 09 363 cmpe #09h
02B2 06 04 C7 364 brz .PointCK
02B5 A7 0A 365 cmpe #0ah
02B7 06 05 1B 366 brz .DRGCK
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -