📄 timers.lss
字号:
000003ce <gbTRYEERAM>:
gbTRYEERAM:
cpi r1l, 'e' ; if "e", set flag
3ce: 85 36 cpi r24, 0x65 ; 101
brne gbDONE
3d0: e9 f4 brne .+58 ; 0x40c
sbr tmp0, 1<<EEFLAG
3d2: 22 60 ori r18, 0x02 ; 2
000003d4 <gbCONTINUE>:
gbCONTINUE:
mov MonFlags, tmp0
3d4: b2 2e mov r11, r18
rcall GetHexWord ; Go for the address
3d6: 53 d1 rcall .+678 ; 0x67e
mov tmp0, MonFlags
3d8: 2b 2d mov r18, r11
brtc gbCHECKWORDFLAG
3da: 1e f4 brtc .+6 ; 0x3e2
cbr tmp0, 1<<WORDFLAG; Full address entered, no "w"
3dc: 2e 7f andi r18, 0xFE ; 254
mov MonFlags, tmp0
3de: b2 2e mov r11, r18
rjmp gbUPDATEADDRESS
3e0: 0c c0 rjmp .+24 ; 0x3fa
000003e2 <gbCHECKWORDFLAG>:
gbCHECKWORDFLAG:
cbr tmp0, 1<<WORDFLAG
3e2: 2e 7f andi r18, 0xFE ; 254
mov MonFlags, tmp0
3e4: b2 2e mov r11, r18
lds tmp1, _RxByte
3e6: 30 91 22 01 lds r19, 0x0122
cpi tmp1, 'w'
3ea: 37 37 cpi r19, 0x77 ; 119
brne gbCHECKFORWHITESPACE; Only "w" allowed if not address
3ec: 21 f4 brne .+8 ; 0x3f6
sbr tmp0, 1<<WORDFLAG
3ee: 21 60 ori r18, 0x01 ; 1
mov MonFlags, tmp0
3f0: b2 2e mov r11, r18
rcall GetHexWord ; Try again for address
3f2: 45 d1 rcall .+650 ; 0x67e
brts gbUPDATEADDRESS
3f4: 16 f0 brts .+4 ; 0x3fa
000003f6 <gbCHECKFORWHITESPACE>:
gbCHECKFORWHITESPACE:
rcall IsWhite
3f6: 5c d1 rcall .+696 ; 0x6b0
brtc gbDONE ; Error if not whitespace
3f8: 4e f4 brtc .+18 ; 0x40c
000003fa <gbUPDATEADDRESS>:
gbUPDATEADDRESS:
tst p2l ; see if any user input
3fa: 66 23 and r22, r22
breq gbDONE
3fc: 39 f0 breq .+14 ; 0x40c
sbrs MonFlags, EEFLAG
3fe: b1 fe sbrs r11, 1
rjmp gbAddress
400: 03 c0 rjmp .+6 ; 0x408
mov EEAddressl, p1l
402: 68 2e mov r6, r24
mov EEAddressh, p1h
404: 79 2e mov r7, r25
rjmp gbDONE
406: 02 c0 rjmp .+4 ; 0x40c
00000408 <gbAddress>:
gbAddress:
mov Addressl, p1l
408: 48 2e mov r4, r24
mov Addressh, p1h
40a: 59 2e mov r5, r25
0000040c <gbDONE>:
gbDONE:
mov p1l, Addressl ; Restore previous...
40c: 84 2d mov r24, r4
mov p1h, Addressh
40e: 95 2d mov r25, r5
sbrc MonFlags, EEFLAG
410: b1 fc sbrc r11, 1
mov p1l, EEAddressl
412: 86 2d mov r24, r6
sbrc MonFlags, EEFLAG
414: b1 fc sbrc r11, 1
mov p1h, EEAddressh
416: 97 2d mov r25, r7
ret
418: 08 95 ret
0000041a <_DumpMemory>:
_ENDFUNC
;
;---------------------------------------------
; void _DumpMemory(char, void *)
;
; Passed: p1 = Start Address
; p2 = number of bytes to dump
; Returns: Nothing
; Uses: MonFlags (register)
;
_FUNCTION(_DumpMemory)
_DumpMemory:
sbrs MonFlags, WORDFLAG
41a: b0 fe sbrs r11, 0
rjmp m10f
41c: 03 c0 rjmp .+6 ; 0x424
cbr p2l, 0x01 ; force even address to start.
41e: 6e 7f andi r22, 0xFE ; 254
sbrc p1l, 0x00 ; Add one for even count
420: 80 fd sbrc r24, 0
inc p1l
422: 83 95 inc r24
00000424 <m10f>:
m10f:
mov TempWl, p2l
424: c6 2e mov r12, r22
mov TempWh, p2h
426: d7 2e mov r13, r23
mov R1, p1l
428: 18 2e mov r1, r24
0000042a <m10c>:
m10c:
rcall PutCR
42a: d2 d0 rcall .+420 ; 0x5d0
mov p1h, TempWh ; Spit out address
42c: 9d 2d mov r25, r13
mov p1l, TempWl
42e: 8c 2d mov r24, r12
rcall PutHexWord
430: 63 d1 rcall .+710 ; 0x6f8
00000432 <m10d>:
m10d:
rcall PutSpace
432: d0 d0 rcall .+416 ; 0x5d4
rcall GetByteWord
434: 8b d0 rcall .+278 ; 0x54c
sbrc MonFlags, WORDFLAG
436: b0 fc sbrc r11, 0
rjmp m11
438: 04 c0 rjmp .+8 ; 0x442
rcall PutHexByte
43a: 60 d1 rcall .+704 ; 0x6fc
ldi p1l, lo8(1)
43c: 81 e0 ldi r24, 0x01 ; 1
ldi p1h, hi8(1)
43e: 90 e0 ldi r25, 0x00 ; 0
rjmp m12
440: 03 c0 rjmp .+6 ; 0x448
00000442 <m11>:
m11:
rcall PutHexWord
442: 5a d1 rcall .+692 ; 0x6f8
ldi p1l, lo8(2)
444: 82 e0 ldi r24, 0x02 ; 2
ldi p1h, hi8(2)
446: 90 e0 ldi r25, 0x00 ; 0
00000448 <m12>:
m12:
add TempWl, p1l
448: c8 0e add r12, r24
adc TempWh, p1h
44a: d9 1e adc r13, r25
sub R1, p1l
44c: 18 1a sub r1, r24
breq m10exit
44e: 21 f0 breq .+8 ; 0x458
00000450 <m10e>:
m10e:
mov Zl, TempWl
450: ec 2d mov r30, r12
cbr Zl, 0xF0
452: ef 70 andi r30, 0x0F ; 15
breq m10c ; New line every 16 bytes.
454: 51 f3 breq .-44 ; 0x42a
rjmp m10d
456: ed cf rjmp .-38 ; 0x432
00000458 <m10exit>:
m10exit:
ret
458: 08 95 ret
0000045a <_ModifyMemory>:
_ENDFUNC
;
; void _ModifyMemory(void *)
;
; PASSED: p1 = address
;
; Uses: MonFlags (register)
;
_FUNCTION(_ModifyMemory)
_ModifyMemory:
mov TempWl, p1l
45a: c8 2e mov r12, r24
mov TempWh, p1h
45c: d9 2e mov r13, r25
0000045e <_ModifyMemory_>:
_ModifyMemory_:
rcall PutCR
45e: b8 d0 rcall .+368 ; 0x5d0
mov p1l, TempWl
460: 8c 2d mov r24, r12
mov p1h, TempWh
462: 9d 2d mov r25, r13
rcall PutHexWord
464: 49 d1 rcall .+658 ; 0x6f8
rcall PutSpace
466: b6 d0 rcall .+364 ; 0x5d4
00000468 <_mmNEXT>:
_mmNEXT:
rcall GetByteWord
468: 71 d0 rcall .+226 ; 0x54c
sbrc MonFlags, WORDFLAG
46a: b0 fc sbrc r11, 0
rcall PutHexWord
46c: 45 d1 rcall .+650 ; 0x6f8
sbrs MonFlags, WORDFLAG
46e: b0 fe sbrs r11, 0
rcall PutHexByte
470: 45 d1 rcall .+650 ; 0x6fc
00000472 <_mmGETDATA>:
_mmGETDATA:
ldi p1l, '-'
472: 8d e2 ldi r24, 0x2D ; 45
rcall PutChar
474: d5 d0 rcall .+426 ; 0x620
sbrs MonFlags, WORDFLAG
476: b0 fe sbrs r11, 0
rcall GetHexByte
478: 04 d1 rcall .+520 ; 0x682
sbrc MonFlags, WORDFLAG
47a: b0 fc sbrc r11, 0
rcall GetHexWord
47c: 00 d1 rcall .+512 ; 0x67e
brtc _mmNODATA
47e: 66 f4 brtc .+24 ; 0x498
00000480 <_mmWRITE>:
_mmWRITE:
rcall PutByteWord
480: 76 d0 rcall .+236 ; 0x56e
rcall PutSpace
482: a8 d0 rcall .+336 ; 0x5d4
00000484 <_mmGOTONEXT>:
_mmGOTONEXT:
ldi Zl, lo8(1)
484: e1 e0 ldi r30, 0x01 ; 1
ldi Zh, hi8(1)
486: f0 e0 ldi r31, 0x00 ; 0
sbrc MonFlags, WORDFLAG
488: b0 fc sbrc r11, 0
adiw Zl, 1
48a: 31 96 adiw r30, 0x01 ; 1
add TempWl, Zl
48c: ce 0e add r12, r30
adc TempWh, Zh
48e: df 1e adc r13, r31
mov Zl, TempWl
490: ec 2d mov r30, r12
cbr Zl, 0xF0
492: ef 70 andi r30, 0x0F ; 15
breq _ModifyMemory_ ; Start a new line every 16 bytes
494: 21 f3 breq .-56 ; 0x45e
rjmp _mmNEXT
496: e8 cf rjmp .-48 ; 0x468
00000498 <_mmNODATA>:
_mmNODATA:
rcall IsWhite
498: 0b d1 rcall .+534 ; 0x6b0
brtc _mmDONE ; If not white, then error
49a: 36 f4 brtc .+12 ; 0x4a8
tst p2l
49c: 66 23 and r22, r22
brne _mmWRITE ; If some data entered, then write
49e: 81 f7 brne .-32 ; 0x480
lds tmp0, _RxByte
4a0: 20 91 22 01 lds r18, 0x0122
cpi tmp0, 0x0D ; if CR then exit
4a4: 2d 30 cpi r18, 0x0D ; 13
brne _mmGOTONEXT ; otherwize, just go to next byte
4a6: 71 f7 brne .-36 ; 0x484
000004a8 <_mmDONE>:
_mmDONE:
ret
4a8: 08 95 ret
000004aa <ctdt0>:
4aa: 0d 50 subi r16, 0x0D ; 13
4ac: 49 44 sbci r20, 0x49 ; 73
4ae: 20 46 sbci r18, 0x60 ; 96
4b0: 6c 67 ori r22, 0x7C ; 124
4b2: 20 50 subi r18, 0x00 ; 0
4b4: 72 69 ori r23, 0x92 ; 146
4b6: 20 46 sbci r18, 0x60 ; 96
4b8: 72 61 ori r23, 0x12 ; 18
4ba: 6d 65 ori r22, 0x5D ; 93
4bc: 20 53 subi r18, 0x30 ; 48
4be: 52 0d add r21, r2
...
000004c1 <ctdt1>:
4c1: 52 30 cpi r21, 0x02 ; 2
4c3: 20 20 and r2, r0
...
000004c6 <ctdt2>:
4c6: 52 31 cpi r21, 0x12 ; 18
4c8: 36 20 and r3, r6
...
000004cb <ctdt3>:
4cb: 0d 20 and r0, r13
4cd: 20 20 and r2, r0
4cf: 20 20 and r2, r0
4d1: 50 43 sbci r21, 0x30 ; 48
4d3: 20 20 and r2, r0
...
000004d6 <_PrintContext>:
_ENDFUNC
;----------------------------------------------
; void _PrintContext(ObjectID *)
;
; Prints a pretty picture of the context of a process.
;
; PASSED: nothing
; RETURNS:
; USES: ObjectID (register)
;
ctdt0: _DB "\rPID Flg Pri Frame SR\r"
ctdt1: _DB "R0 "
ctdt2: _DB "R16 "
ctdt3: _DB "\r PC "
_ALIGN
_FUNCTION(_PrintContext)
_PrintContext:
ldi p1h, hi8(ctdt0)
4d6: 94 e0 ldi r25, 0x04 ; 4
ldi p1l, lo8(ctdt0)
4d8: 8a ea ldi r24, 0xAA ; 170
rcall _PrintString
4da: 7e d0 rcall .+252 ; 0x5d8
mov p1l, ObjectIDl
4dc: 88 2d mov r24, r8
mov p1h, ObjectIDh
4de: 99 2d mov r25, r9
rcall PutHexWord ; Print PID
4e0: 0b d1 rcall .+534 ; 0x6f8
rcall PutSpace
4e2: 78 d0 rcall .+240 ; 0x5d4
mov Zl, ObjectIDl
4e4: e8 2d mov r30, r8
mov Zh, ObjectIDh
4e6: f9 2d mov r31, r9
ldd p1l, Z+PidState
4e8: 82 81 ldd r24, Z+2 ; 0x02
rcall PutHexByte
4ea: 08 d1 rcall .+528 ; 0x6fc
rcall PutSpace
4ec: 73 d0 rcall .+230 ; 0x5d4
mov Zl, ObjectIDl
4ee: e8 2d mov r30, r8
mov Zh, ObjectIDh
4f0: f9 2d mov r31, r9
ldd p1l, Z+PidPriority
4f2: 83 81 ldd r24, Z+3 ; 0x03
rcall PutHexByte
4f4: 03 d1 rcall .+518 ; 0x6fc
rcall PutSpace
4f6: 6e d0 rcall .+220 ; 0x5d4
rcall PutSpace
4f8: 6d d0 rcall .+218 ; 0x5d4
mov Zl, ObjectIDl
4fa: e8 2d mov r30, r8
mov Zh, ObjectIDh
4fc: f9 2d mov r31, r9
ldd Yl, Z+PidSP+NextL ; Z -> Frame
4fe: c4 81 ldd r28, Z+4 ; 0x04
ldd Yh, Z+PidSP+NextH
500: d5 81 ldd r29, Z+5 ; 0x05
mov p1l, Yl
502: 8c 2f mov r24, r28
mov p1h, Yh
504: 9d 2f mov r25, r29
rcall PutHexWord ; Print Frame Pointer
506: f8 d0 rcall .+496 ; 0x6f8
rcall PutSpace
508: 65 d0 rcall .+202 ; 0x5d4
rcall PutSpace
50a: 64 d0 rcall .+200 ; 0x5d4
adiw Yl, 1 ; Remember Stack are post dec!
50c: 21 96 adiw r28, 0x01 ; 1
ld p1l, Y+ ; SREG
50e: 89 91 ld r24, Y+
rcall PutHexByte
510: f5 d0 rcall .+490 ; 0x6fc
00000512 <Loop>:
;
; Print R0-R15
;
Loop:
rcall Print16RegPre
512: 0e d0 rcall .+28 ; 0x530
ldi p1h, hi8(ctdt1)
514: 94 e0 ldi r25, 0x04 ; 4
ldi p1l, lo8(ctdt1)
516: 81 ec ldi r24, 0xC1 ; 193
rcall Print16Reg
518: 10 d0 rcall .+32 ; 0x53a
rcall Print16RegPre
51a: 0a d0 rcall .+20 ; 0x530
ldi p1h, hi8(ctdt2)
51c: 94 e0 ldi r25, 0x04 ; 4
ldi p1l, lo8(ctdt2)
51e: 86 ec ldi r24, 0xC6 ; 198
rcall Print16Reg
520: 0c d0 rcall .+24 ; 0x53a
ldi p1h, hi8(ctdt3)
522: 94 e0 ldi r25, 0x04 ; 4
ldi p1l, lo8(ctdt3)
524: 8b ec ldi r24, 0xCB ; 203
rcall _PrintString
526: 58 d0 rcall .+176 ; 0x5d8
ld p1h, Y+
528: 99 91 ld r25, Y+
ld p1l, Y
52a: 88 81 ld r24, Y
rcall PutHexWord
52c: e5 d0 rcall .+458 ; 0x6f8
ret
52e: 08 95 ret
00000530 <Print16RegPre>:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -