📄 calcmain.asl
字号:
+ 1 ;|---------------------------------------|
+ 2 ;|Program name : CalcMain.asm |
+ 3 ;|Use bady: 83137 |
+ 4 ;|Programer: Alton |
+ 5 ;| |
+ 6 ;|---------------------------------------|
+ 7
+ 8 .area calcmain_date(data,abs)
+ 9 .org 0xd0
+ 10
000C 11 .SetT1H EQU 0x0c ;(32768/10)-1=0x0ccb
00CB 12 .SetT1L EQU 0xcb
0068 13 .SetT2H EQU 0x68 ;(4M/1.5/100)-1=0x682a
002A 14 .SetT2L EQU 0x2a
007C 15 .DecM EQU 0x7c
007D 16 .HexM EQU 0x7d
007E 17 .BinM EQU 0x7e
007F 18 .OctM EQU 0x7f
0061 19 .INS EQU 0x61
0065 20 .DEL EQU 0x65
00EE 21 .MODE EQU 0xee
00CC 22 .LEFT EQU 0xcc
00DD 23 .RIGHT EQU 0xdd
0060 24 .RND EQU 0x60
00A2 25 .ANS EQU 0xa2
00C2 26 .ENG EQU 0xc2
00B5 27 .MADD EQU 0xb5
00DF 28 .MSUB EQU 0xdf
00DF 29 .CL EQU 0xdf
0014 30 .ShiftL EQU 0x14
0015 31 .ShiftR EQU 0x15
0077 32 .PercentEqu EQU 0x77
00B5 33 .DT EQU 0xb5
00A3 34 .Enter EQU 0xa3
00BD 35 .DaltaX EQU 0xbd
00BE 36 .DaltaY EQU 0xbe
0052 37 .StoCode EQU 0x52
0053 38 .RclCode EQU 0x53
007B 39 .CalcEqu EQU 0x7b
0066 40 .ON EQU 0x66
00F0 41 .TimeOut EQU 0xf0 ;Time Out 6Min(69*16)/3=368sec
0032 42 .RealseTime EQU 0x32
0002 43 .KeyDown EQU 0x02
0000 44 .NoKey EQU 0x00
0001 45 .HaveKey EQU 0x01
0008 46 .TimeRels EQU 0x08
00C0 47 .KBTest EQU 0xc0 ;PRTD76
000C 48 .ATTest EQU 0x0c ;PRTD32
+ 49 ;.KeyC:: .ds 1
+ 50 ;.KeyD:: .ds 1
+B 00 01
00D0 51 .TempA:: .ds 1
00D1 52 .PPTemp:: .ds 1
00D2 53 .OP1Temp:: .ds 1
00D3 54 .Sec:: .ds 1
00D4 55 .DataDP:: .ds 1
00D5 56 .FinFlag:: .ds 1
+ 57
+ 58 .area calcmain_date1(data,abs)
+ 59 .org 0xdd
+ 60
+ 61
+B 00 02
00DD 62 .KeyBuf1:: .ds 1
00DE 63 .KeyBuf:: .ds 1
+ 64 ;.KeyCnt:: .ds 1
+ 65 ;.KeyCodeBuf:: .ds 1
00DF 66 .ModeFlag:: .ds 1
00E0 67 .StoFlag:: .ds 1
00E1 68 .KeyCodeBuf:: .ds 1
00E2 69 .KeyTimeCnt:: .ds 1
00E3 70 .TurboCnt::
00E3 71 .NumCnt:: .ds 1
00E4 72 .FormulaDP:: .ds 1
00E5 73 .ForData:: .ds 1
+ 74 .area calcmain_code(code,abs)
+ 75 .org 0x00 ;program start
+B 00 03
0000 02 00 13 76 br .Main
+ 77 .org 0x06 ;interrupt 1
0006 25 78 reti
+ 79 .org 0x09 ;timer 1
0009 02 0A 8E 80 br .InterruptT1
+ 81 .org 0x0c ;timer 2
000C 02 0A C0 82 br .InterruptT2
+ 83 .org 0x0f ;interrupt 2
000F 25 84 reti
+ 85 .org 0x12 ;TimeBase
+ 86
0012 25 87 reti
+ 88
+ 89 ;===========================================
+ 90 ; .Main
+ 91 ;===========================================
0013 92 .Main::
+ 93
0013 F3 FF 94 lda #0ffh
0015 FC 18 95 sta SP
0017 96 testcalculator:
0017 F3 00 97 lda #0
0019 F9 00 98 sta0 SignX
001B F9 00 99 sta0 PointX
001D F3 00 100 lda #0
001F F9 00 101 sta0 OperandX+0
0021 F9 01 102 sta0 OperandX+1
0023 F3 00 103 lda #0h
0025 F9 02 104 sta0 OperandX+2
0027 F3 00 105 lda #0h
0029 F9 03 106 sta0 OperandX+3
002B F3 00 107 lda #0h
002D F9 04 108 sta0 OperandX+4
002F F3 00 109 lda #0h
0031 F9 05 110 sta0 OperandX+5
0033 F3 01 111 lda #01h
0035 F9 06 112 sta0 OperandX+6
+ 113
0037 F3 00 114 lda #0
0039 F9 00 115 sta0 SignY
003B F9 00 116 sta0 PointY
003D F3 00 117 lda #0
003F F9 00 118 sta0 OperandY+0
0041 F9 01 119 sta0 OperandY+1
0043 F3 00 120 lda #0h
0045 F9 02 121 sta0 OperandY+2
0047 F3 00 122 lda #0h
0049 F9 03 123 sta0 OperandY+3
004B F3 00 124 lda #0h
004D F9 04 125 sta0 OperandY+4
004F F3 00 126 lda #0h
0051 F9 05 127 sta0 OperandY+5
0053 F3 01 128 lda #01h
0055 F9 06 129 sta0 OperandY+6
0057 20 00 00 130 call Addition
005A 00 131 nop
005B 20 00 00 132 call Subtration
005E 00 133 nop
005F 20 00 00 134 call Multiplation
0062 00 135 nop
0063 20 00 00 136 call Division
+ 137
0066 02 00 17 138 br testcalculator
+ 139
+ 140
+ 141
+ 142
+ 143
+ 144
+ 145
+ 146
+ 147
+ 148
+ 149
+ 150
0069 20 0A DD 151 call .Initial
006C 20 00 00 152 call ModeIcom
006F 20 0B C1 153 call .EI
0072 02 00 A8 154 br .Start
0075 155 .Sleep::
0075 F3 FF 156 lda #0ffh
0077 FC 18 157 sta SP
0079 20 0B 89 158 call .IntoSleepMode
007C F3 01 159 lda #01h
007E F9 00 160 sta0 .KeyCnt
0080 20 0B C1 161 call .EI
0083 162 .Wakeup:
+ 163
0083 F5 00 164 lda0 .KeyCnt
0085 A7 00 165 cmpe #0h
0087 07 00 83 166 brnz .Wakeup
008A F5 E1 167 lda0 .KeyCodeBuf
008C A7 66 168 cmpe #.ON
008E 07 00 75 169 brnz .Sleep
0091 170 .PowerOn:
0091 20 0B BA 171 call .DI
0094 20 0B 11 172 call .ClrData
0097 20 00 00 173 call ModeIcom ;Disp Icom
009A 20 0B A9 174 call .LcdcOn
009D 20 0B C1 175 call .EI
00A0 F3 00 176 lda #>.Count
00A2 FC 28 177 sta PP
00A4 F3 02 178 lda #.KeyDown
00A6 FD 00 179 sta .Count
+ 180 ;-------------------------------------------
00A8 181 .Start:
00A8 20 0B C8 182 call .IdleMode
00AB 183 .CheckCode:
00AB F5 D3 184 lda0 .Sec
00AD A7 F0 185 cmpe #.TimeOut ;(5.3)SEC*69(45h)=368sec=6Min
00AF 04 00 75 186 brc .Sleep
00B2 20 0B EA 187 call .KeyCheck
00B5 F3 00 188 lda #>.Count
00B7 FC 28 189 sta PP
00B9 F1 00 190 lda .Count
00BB A7 01 191 cmpe #.HaveKey
00BD 06 00 DE 192 brz .ScanKey
00C0 20 00 00 193 call T1chkblank ;Blankcheck
00C3 F3 00 194 lda #>t1count
00C5 FC 28 195 sta PP
00C7 F1 00 196 lda t1count
00C9 A7 00 197 cmpe #0
00CB 07 00 AB 198 brnz .CheckCode
00CE 20 0B C8 199 call .IdleMode
00D1 F0 24 200 lda OP2
00D3 CB 40 201 anda #40h
00D5 06 00 AB 202 brz .CheckCode
00D8 20 0B E1 203 call .NormalMode
00DB 02 00 AB 204 br .CheckCode
+ 205 ;;;;;Show Icom and Blanking and judge have key press down
00DE 206 .ScanKey:
00DE F5 E1 207 lda0 .KeyCodeBuf
00E0 A7 00 208 cmpe #0h
00E2 06 00 AB 209 brz .CheckCode
00E5 F9 00 210 sta0 .KeyPos
00E7 F3 00 211 lda #>.Count
00E9 FC 28 212 sta PP
00EB F3 02 213 lda #02h
00ED FD 00 214 sta .Count
00EF F3 00 215 lda #>t1count
00F1 FC 28 216 sta PP
00F3 F3 00 217 lda #0h
00F5 FD 00 218 sta t1count
00F7 F9 D3 219 sta0 .Sec ;reset time out clock
00F9 20 0B BA 220 call .DI
+ 221 ;-------------------------------------------
00FC 222 .InputKeyHandle:
00FC F3 00 223 lda #>StateFlag
00FE FC 28 224 sta PP
0100 F1 00 225 lda StateFlag
0102 CB 08 226 anda #08h
0104 06 01 1E 227 brz .NormalGet
0107 20 00 00 228 call BasenKeyCode
010A A7 01 229 cmpe #01h
010C 06 01 1E 230 brz .NormalGet
010F A7 02 231 cmpe #02h
0111 06 01 21 232 brz .BaseNkey
0114 A7 03 233 cmpe #03h
0116 06 01 21 234 brz .BaseNkey
0119 A7 04 235 cmpe #04h
011B 06 01 1E 236 brz .NormalGet
011E 237 .NormalGet:
011E 20 00 00 238 call .GetKeyCode
0121 239 .BaseNkey:
0121 F5 00 240 lda0 ErrorFlag
0123 A7 00 241 cmpe #0h
0125 07 04 00 242 brnz .DispDotMatrix
0128 20 00 00 243 call BasenKeyChk
012B F3 00 244 lda #>.SetFlag
012D FC 28 245 sta PP
012F F1 00 246 lda StateFlag
0131 CB 08 247 anda #08h
0133 07 0A 02 248 brnz .BaseN
0136 249 .NotBaseN:
0136 F1 00 250 lda .SetFlag
0138 CB 03 251 anda #03h ;check (Rnd Eng)
013A A7 01 252 cmpe #01h
013C 06 06 48 253 brz .DORnd
013F A7 02 254 cmpe #02h
0141 06 06 6E 255 brz .SetDRG
0144 256 .EditModeInp:
0144 F5 00 257 lda0 .KeyPos
0146 A7 EE 258 cmpe #.Mode
0148 06 01 52 259 brz .FunctChoice
014B 260 .MemCheck:
014B F1 00 261 lda .SFlag
014D CB 30 262 anda #30h
014F 07 05 98 263 brnz .MemoryCK
+ 264 ;-------------------------------------------
+ 265 ; Function Area
+ 266 ;-------------------------------------------
0152 267 .FunctChoice:
0152 F5 00 268 lda0 .KeyPos
0154 A7 00 269 cmpe #0h
0156 A7 EE 270 cmpe #.Mode ;Mode set
0158 06 08 26 271 brz .Modeadd
015B F5 DF 272 lda0 .ModeFlag
015D CB F0 273 anda #0f0h
015F 07 04 00 274 brnz .DispDotMatrix
0162 F5 00 275 lda0 .KeyPos
0164 A7 B5 276 cmpe #.MADD
0166 06 02 0A 277 brz .GetValue
0169 A7 DF 278 cmpe #.MSUB
016B 06 02 0A 279 brz .GetValue
016E A7 F8 280 cmpe #0f8h ;drg
0170 06 06 D0 281 brz .DRG
0173 A7 C2 282 cmpe #.ENG ;eng
0175 06 04 00 283 brz .DispDotMatrix
0178 A7 41 284 cmpe #41h ;shift eng
017A 06 04 00 285 brz .DispDotMatrix
017D A7 60 286 cmpe #.RND
017F 06 06 18 287 brz .SetRND
0182 A7 EE 288 cmpe #.Mode ;Mode set
0184 06 08 26 289 brz .Modeadd
0187 F5 DF 290 lda0 .ModeFlag
0189 CB F0 291 anda #0f0h
018B 07 04 00 292 brnz .DispDotMatrix
018E F5 00 293 lda0 .KeyPos
0190 A7 65 294 cmpe #.DEL ;del
0192 06 04 00 295 brz .DispDotMatrix
0195 A7 61 296 cmpe #.INS
0197 06 07 FE 297 brz .INSck ;ck ins
019A F5 00 298 lda0 .KeyPos
019C A7 CC 299 cmpe #.LEFT
019E 06 07 DC 300 brz .CkLR
01A1 A7 DD 301 cmpe #.RIGHT
01A3 06 07 DC 302 brz .CkLR
01A6 F3 01 303 lda #01h
01A8 FC 28 304 sta PP
01AA F1 00 305 lda .SetFlag
01AC CB 20 306 anda #20h ;check (Point Fract Dms)
01AE 07 02 43 307 brnz .NoEquCalc ;.DislayMode ;.ModeDisp
01B1 02 07 F0 308 br .CKIns
+ 309 ;===========================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -