📄 calcmain.asl
字号:
+ 1 ;|---------------------------------------|
+ 2 ;|Program name : CalcMain.asm |
+ 3 ;|Use bady: 83137 |
+ 4 ;|Programer: Alton |
+ 5 ;| |
+ 6 ;|---------------------------------------|
+ 7
+B 00 01
+ 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
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
+B 00 02
+ 58 .area calcmain_date1(data,abs)
+ 59 .org 0xdd
+ 60
+ 61
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
+B 00 03
+ 74 .area calcmain_code(code,abs)
+ 75 .org 0x00 ;program start
0000 02 00 13 76 br .Main
+ 77 .org 0x06 ;interrupt 1
0006 25 78 reti
+ 79 .org 0x09 ;timer 1
0009 02 0A 4D 80 br .InterruptT1
+ 81 .org 0x0c ;timer 2
000C 02 0A 7F 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 00 94 lda #0h
0015 FC 58 95 sta PRT17
0017 F3 FF 96 lda #0xFF
0019 FC 32 97 sta PRTD
001B F0 32 98 lda PRTD
001D CB 0C 99 anda #.ATTest
001F A7 00 100 cmpe #0h
0021 06 0B F3 101 brz .ATTestMode
0024 F3 FF 102 lda #0ffh
0026 FC 18 103 sta SP
0028 20 0A 9C 104 call .Initial
002B 20 00 00 105 call ModeIcom
002E 20 0B 80 106 call .EI
0031 02 00 67 107 br .Start
0034 108 .Sleep::
0034 F3 FF 109 lda #0ffh
0036 FC 18 110 sta SP
0038 20 0B 48 111 call .IntoSleepMode
003B F3 01 112 lda #01h
003D F9 00 113 sta0 .KeyCnt
003F 20 0B 80 114 call .EI
0042 115 .Wakeup:
+ 116
0042 F5 00 117 lda0 .KeyCnt
0044 A7 00 118 cmpe #0h
0046 07 00 42 119 brnz .Wakeup
0049 F5 E1 120 lda0 .KeyCodeBuf
004B A7 66 121 cmpe #.ON
004D 07 00 34 122 brnz .Sleep
0050 123 .PowerOn:
0050 20 0B 79 124 call .DI
0053 20 0A D0 125 call .ClrData
0056 20 00 00 126 call ModeIcom ;Disp Icom
0059 20 0B 68 127 call .LcdcOn
005C 20 0B 80 128 call .EI
005F F3 00 129 lda #>.Count
0061 FC 28 130 sta PP
0063 F3 02 131 lda #.KeyDown
0065 FD 00 132 sta .Count
+ 133 ;-------------------------------------------
0067 134 .Start:
0067 20 0B 87 135 call .IdleMode
006A 136 .CheckCode:
006A F5 D3 137 lda0 .Sec
006C A7 F0 138 cmpe #.TimeOut ;(5.3)SEC*69(45h)=368sec=6Min
006E 04 00 34 139 brc .Sleep
0071 20 0B A9 140 call .KeyCheck
0074 F3 00 141 lda #>.Count
0076 FC 28 142 sta PP
0078 F1 00 143 lda .Count
007A A7 01 144 cmpe #.HaveKey
007C 06 00 9D 145 brz .ScanKey
007F 20 00 00 146 call T1chkblank ;Blankcheck
0082 F3 00 147 lda #>t1count
0084 FC 28 148 sta PP
0086 F1 00 149 lda t1count
0088 A7 00 150 cmpe #0
008A 07 00 6A 151 brnz .CheckCode
008D 20 0B 87 152 call .IdleMode
0090 F0 24 153 lda OP2
0092 CB 40 154 anda #40h
0094 06 00 6A 155 brz .CheckCode
0097 20 0B A0 156 call .NormalMode
009A 02 00 6A 157 br .CheckCode
+ 158 ;;;;;Show Icom and Blanking and judge have key press down
009D 159 .ScanKey:
009D F5 E1 160 lda0 .KeyCodeBuf
009F A7 00 161 cmpe #0h
00A1 06 00 6A 162 brz .CheckCode
00A4 F9 00 163 sta0 .KeyPos
00A6 F3 00 164 lda #>.Count
00A8 FC 28 165 sta PP
00AA F3 02 166 lda #02h
00AC FD 00 167 sta .Count
00AE F3 00 168 lda #>t1count
00B0 FC 28 169 sta PP
00B2 F3 00 170 lda #0h
00B4 FD 00 171 sta t1count
00B6 F9 D3 172 sta0 .Sec ;reset time out clock
00B8 20 0B 79 173 call .DI
+ 174 ;-------------------------------------------
00BB 175 .InputKeyHandle:
00BB F3 00 176 lda #>StateFlag
00BD FC 28 177 sta PP
00BF F1 00 178 lda StateFlag
00C1 CB 08 179 anda #08h
00C3 06 00 DD 180 brz .NormalGet
00C6 20 00 00 181 call BasenKeyCode
00C9 A7 01 182 cmpe #01h
00CB 06 00 DD 183 brz .NormalGet
00CE A7 02 184 cmpe #02h
00D0 06 00 E0 185 brz .BaseNkey
00D3 A7 03 186 cmpe #03h
00D5 06 00 E0 187 brz .BaseNkey
00D8 A7 04 188 cmpe #04h
00DA 06 00 DD 189 brz .NormalGet
00DD 190 .NormalGet:
00DD 20 00 00 191 call .GetKeyCode
00E0 192 .BaseNkey:
00E0 F5 00 193 lda0 ErrorFlag
00E2 A7 00 194 cmpe #0h
00E4 07 03 BF 195 brnz .DispDotMatrix
00E7 20 00 00 196 call BasenKeyChk
00EA F3 00 197 lda #>.SetFlag
00EC FC 28 198 sta PP
00EE F1 00 199 lda StateFlag
00F0 CB 08 200 anda #08h
00F2 07 09 C1 201 brnz .BaseN
00F5 202 .NotBaseN:
00F5 F1 00 203 lda .SetFlag
00F7 CB 03 204 anda #03h ;check (Rnd Eng)
00F9 A7 01 205 cmpe #01h
00FB 06 06 07 206 brz .DORnd
00FE A7 02 207 cmpe #02h
0100 06 06 2D 208 brz .SetDRG
0103 209 .EditModeInp:
0103 F5 00 210 lda0 .KeyPos
0105 A7 EE 211 cmpe #.Mode
0107 06 01 11 212 brz .FunctChoice
010A 213 .MemCheck:
010A F1 00 214 lda .SFlag
010C CB 30 215 anda #30h
010E 07 05 57 216 brnz .MemoryCK
+ 217 ;-------------------------------------------
+ 218 ; Function Area
+ 219 ;-------------------------------------------
0111 220 .FunctChoice:
0111 F5 00 221 lda0 .KeyPos
0113 A7 00 222 cmpe #0h
0115 A7 EE 223 cmpe #.Mode ;Mode set
0117 06 07 E5 224 brz .Modeadd
011A F5 DF 225 lda0 .ModeFlag
011C CB F0 226 anda #0f0h
011E 07 03 BF 227 brnz .DispDotMatrix
0121 F5 00 228 lda0 .KeyPos
0123 A7 B5 229 cmpe #.MADD
0125 06 01 C9 230 brz .GetValue
0128 A7 DF 231 cmpe #.MSUB
012A 06 01 C9 232 brz .GetValue
012D A7 F8 233 cmpe #0f8h ;drg
012F 06 06 8F 234 brz .DRG
0132 A7 C2 235 cmpe #.ENG ;eng
0134 06 03 BF 236 brz .DispDotMatrix
0137 A7 41 237 cmpe #41h ;shift eng
0139 06 03 BF 238 brz .DispDotMatrix
013C A7 60 239 cmpe #.RND
013E 06 05 D7 240 brz .SetRND
0141 A7 EE 241 cmpe #.Mode ;Mode set
0143 06 07 E5 242 brz .Modeadd
0146 F5 DF 243 lda0 .ModeFlag
0148 CB F0 244 anda #0f0h
014A 07 03 BF 245 brnz .DispDotMatrix
014D F5 00 246 lda0 .KeyPos
014F A7 65 247 cmpe #.DEL ;del
0151 06 03 BF 248 brz .DispDotMatrix
0154 A7 61 249 cmpe #.INS
0156 06 07 BD 250 brz .INSck ;ck ins
0159 F5 00 251 lda0 .KeyPos
015B A7 CC 252 cmpe #.LEFT
015D 06 07 9B 253 brz .CkLR
0160 A7 DD 254 cmpe #.RIGHT
0162 06 07 9B 255 brz .CkLR
0165 F3 01 256 lda #01h
0167 FC 28 257 sta PP
0169 F1 00 258 lda .SetFlag
016B CB 20 259 anda #20h ;check (Point Fract Dms)
016D 07 02 02 260 brnz .NoEquCalc ;.DislayMode ;.ModeDisp
0170 02 07 AF 261 br .CKIns
+ 262 ;===========================================
+ 263 ; .CalcResoult
+ 264 ;===========================================
+ 265 ;;;StateFlag 7 6 5 4 3 2 1 0
+ 266 ;;; Comp SD D R G ( LRMode )
0173 267 .CalcResoult:
+ 268
0173 F5 00 269 lda0 .KeyPos
0175 A7 00 270 cmpe #0h
0177 06 03 C2 271 brz .EmitKeyD
+ 272 ;call ChkDispAns ;stop blanking
017A F3 00 273 lda #>StateFlag
017C FC 28 274 sta PP
017E F1 00 275 lda StateFlag ;c0 judge CMPE SD MODE
0180 CB C0 276 anda #0c0h
0182 06 01 A6 277 brz .LrModeCk
0185 278 .CompSDMod:
0185 F5 00 279 lda0 .KeyPos
0187 A7 77 280 cmpe #.PercentEqu
0189 06 01 C9 281 brz .GetValue
018C A7 A3 282 cmpe #.Enter
018E 06 01 C9 283 brz .GetValue
0191 A7 B5 284 cmpe #.DT
0193 06 01 C9 285 brz .GetValue
0196 A7 DF 286 cmpe #.CL
0198 06 01 C9 287 brz .GetValue
019B A7 7B 288 cmpe #.CalcEqu
019D 06 01 C9 289 brz .GetValue
01A0 20 00 00 290 call ChkDispAns
01A3 02 03 81 291 br .SaveInputData
+ 292 ;;.CommaFlag=0 normal calc or .CommaFlag=ff data input (for SD REG Mode)
01A6 293 .LrModeCk:
01A6 F5 00 294 lda0 .CommaFlag
01A8 A7 00 295 cmpe #0h
01AA 06 01 85 296 brz .CompSDMod
01AD F5 00 297 lda0 .KeyPos
01AF A7 B5 298 cmpe #.DT ;For SD REG Mode
01B1 06 01 C9 299 brz .GetValue
01B4 A7 DF 300 cmpe #.CL
01B6 06 01 C9 301 brz .GetValue
01B9 A7 A3 302 cmpe #.Enter
01BB 06 03 73 303 brz .EnterErr
01BE A7 77 304 cmpe #.PercentEqu
01C0 06 03 73 305 brz .EnterErr
01C3 20 00 00 306 call ChkDispAns
01C6 02 03 81 307 br .SaveInputData
+ 308 ;;;;;;;;;;judge press Enter or Ac or Percent Enter
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -