[[gmini_boot_sequence]]
 

Code at 0000

See: loader_analysis

Code at 6100

Disable exceptions

006100:( 078) 9E80     : CLRSR FE
006102:( 078) 9E81     : CLRSR IE
006104:( 078) 9E82     : CLRSR TE

R2 is a parameter: pointer to flasher function.

R1 = R2 > 100; if (R1) {overwrite R2 with value from memory;}

006106:( 002) 1501     : LD R5, #1H
006108:( 059) 89F2 0100: CMPGT R2, #100H
00610C:( 160) D804     : BRT rel_006116
00610E:( 137) A9A0 7FA0: LD A9, #data_207FA0
006112:( 005) 4210     : LDW R2, @[A9 + 0H]
006114:( 002) 1500     : LD R5, #0H
rel_006116:   0x00610C(R)
006116:( 002) 1300     : LD R3, #0H
006118:( 137) ADBF 00B1: LD A13, #UCON          ;       UCON: UART control register                    Reset=00H RW=R/W
00611C:( 013) 7350     : LDB @[A13 + 0H], R3
00611E:( 137) ADBF 00B2: LD A13, #USSR          ;       USSR: UART status register                     Reset=C0H RW=R
006122:( 013) 7350     : LDB @[A13 + 0H], R3
006124:( 137) ADBF 0000: LD A13, #IO_BASE          ;    Memory mapped IO base address
006128:( 129) A335 0140: LDB R3, @[A13 + 140H]
00612C:( 055) 85F3 002F: OR R3, #002FH
006130:( 130) A33D 0140: LDB @[A13 + 140H], R3
006134:( 081) 9E98     : NOP
006136:( 081) 9E98     : NOP
006138:( 081) 9E98     : NOP
rel_00613A:   0x006146(R)
00613A:( 137) ADBF 0140: LD A13, #CACHECON          ;   CACHECON: CACHE Control register               Reset=00H RW=R/W
00613E:( 009) 6350     : LDB R3, @[A13 + 0H]
006140:( 054) 84F3 0040: AND R3, #0040H
006144:( 065) 9300     : CMPEQ R3, #0H
006146:( 158) D3F9     : BRF rel_00613A
006148:( 081) 9E98     : NOP
00614A:( 081) 9E98     : NOP

Clear TCC730 internal memory.

00614C:( 137) ACA0 6000: LD A12, #TCC730_INTERNAL
006150:( 063) 8DF6 0FFF: LD R6, #fffH
006154:( 002) 1900     : LD R9, #0H
rel_006156:   0x00615A(R)
006156:( 007) 5940     : LDW @[A12 + 0], R9
006158:( 134) AC42     : ADD A12, #2H
00615A:( 154) C67D     : BNZD R6, rel_006156
00615C:( 081) 9E98     : NOP

Fix 207FA0, that we’ve just cleared.

00615E:( 137) A9A0 7FA0: LD A9, #data_207FA0
006162:( 007) 5210     : LDW @[A9 + 0], R2

NOP

Init memory at 002000.

memcpy(to=002000, from=code(069BE2), len=0012FE);

006164:( 137) A980 12FE: LD A9, #data_0012FE
006168:( 136) A180 0000: CMPEQ A9, #ZERO
00616C:( 160) D812     : BRT rel_006192
00616E:( 123) A611     : LD R6, E9            
006170:( 137) AB86 9BE2: LD A11, #data_069BE2
006174:( 137) A880 2000: LD A8, #data_002000
rel_006178:   0x00618A(R), 0x006190(R)
006178:( 121) A203     : LDC R2, @A11
00617A:( 007) 5200     : LDW @[A8 + 0], R2
00617C:( 134) AB42     : ADD A11, #2H
00617E:( 134) A842     : ADD A8, #2H
006180:( 001) 0982     : SUB R9, #2H
006182:( 053) 83F6 0000: SBC R6, #0H
006186:( 061) 8BF6 0000: CMPUGT R6, #0H
00618A:( 160) DBF6     : BRT rel_006178
00618C:( 061) 8BF9 0000: CMPUGT R9, #0H
006190:( 160) DBF3     : BRT rel_006178

Init memory at 002000.

memset(to=0032FE, what=0, len=06A120);

rel_006192:   0x00616C(R)
006192:( 137) A986 A120: LD A9, #data_06A120
006196:( 136) A180 0000: CMPEQ A9, #ZERO
00619A:( 160) D80F     : BRT rel_0061BA
00619C:( 123) A611     : LD R6, E9
00619E:( 002) 1400     : LD R4, #0H
0061A0:( 137) A880 32FE: LD A8, #data_0032FE
rel_0061A4:   0x0061B2(R), 0x0061B8(R)
0061A4:( 007) 5400     : LDW @[A8 + 0], R4
0061A6:( 134) A842     : ADD A8, #2H
0061A8:( 001) 0982     : SUB R9, #2H
0061AA:( 053) 83F6 0000: SBC R6, #0H
0061AE:( 061) 8BF6 0000: CMPUGT R6, #0H
0061B2:( 160) DBF8     : BRT rel_0061A4
0061B4:( 061) 8BF9 0000: CMPUGT R9, #0H
0061B8:( 160) DBF5     : BRT rel_0061A4

Set stack pointer. Will grow to lower addresses.

rel_0061BA:   0x00619A(R)
0061BA:( 137) AF87 FFFE: LD A15, #data_07FFFE

*(u32*)002614 = *(u32*)06D41E

0061BE:( 137) A986 D41E: LD A9, #data_06D41E
0061C2:( 137) A880 2614: LD A8, #data_002614
0061C6:( 007) 5901     : LDW @[A8 + 2], R9
0061C8:( 123) A411     : LD R4, E9
0061CA:( 007) 5400     : LDW @[A8 + 0], R4
0061CC:( 063) 8DF4 F800: LD R4, #f800H
0061D0:( 050) 81F1 0800: ADD A9, #0800H
0061D4:( 021) 8944     : AND R9, R4
0061D6:( 137) A880 2624: LD A8, #data_002624
0061DA:( 007) 5901     : LDW @[A8 + 2], R9
0061DC:( 123) A411     : LD R4, E9
0061DE:( 007) 5400     : LDW @[A8 + 0], R4
0061E0:( 137) A880 2618: LD A8, #data_002618
0061E4:( 005) 4902     : LDW R9, @[A8 + 4H]
0061E6:( 005) 4400     : LDW R4, @[A8 + 0H]
0061E8:( 124) A419     : LD E9, R4
0061EA:( 135) A962     : SUB A9, #2H
0061EC:( 137) A880 2618: LD A8, #data_002618
0061F0:( 007) 5901     : LDW @[A8 + 2], R9
0061F2:( 123) A411     : LD R4, E9
0061F4:( 007) 5400     : LDW @[A8 + 0], R4
0061F6:( 126) AF19     : LD A15, A9
0061F8:( 063) 8DF4 CAFE: LD R4, #cafeH
0061FC:( 137) A880 2620: LD A8, #data_002620
006200:( 005) 4600     : LDW R6, @[A8 + 0H]
006202:( 035) 84E6     : SR R6
rel_006204:   0x00620E(R)
006204:( 007) 5410     : LDW @[A9 + 0], R4
006206:( 135) A962     : SUB A9, #2H
006208:( 001) 0681     : SUB R6, #1H
00620A:( 061) 8BF6 0000: CMPUGT R6, #0H
00620E:( 160) DBFA     : BRT rel_006204
006210:( 134) A942     : ADD A9, #2H
006212:( 137) A880 261C: LD A8, #data_00261C
006216:( 007) 5901     : LDW @[A8 + 2], R9
006218:( 123) A411     : LD R4, E9
00621A:( 007) 5400     : LDW @[A8 + 0], R4
00621C:( 137) A880 2624: LD A8, #data_002624
006220:( 005) 4B01     : LDW R11, @[A8 + 2H]
006222:( 005) 4400     : LDW R4, @[A8 + 0H]
006224:( 123) A611     : LD R6, E9
006226:( 018) 891B     : SUB R9, R11
006228:( 020) 8634     : SBC R6, R4
00622A:( 135) A974     : SUB A9, #14H
00622C:( 053) 83F6 0000: SBC R6, #0H
006230:( 124) A619     : LD E9, R6
006232:( 063) 8DF4 F800: LD R4, #f800H
006236:( 021) 8944     : AND R9, R4
006238:( 137) A880 2628: LD A8, #data_002628
00623C:( 007) 5901     : LDW @[A8 + 2], R9
00623E:( 123) A411     : LD R4, E9
006240:( 007) 5400     : LDW @[A8 + 0], R4
006242:( 137) A980 2000: LD A9, #data_002000
006246:( 002) 1900     : LD R9, #0H
006248:( 137) A8BF 0000: LD A8, #IO_BASE          ;    Memory mapped IO base address

Load interrupt handlers.

00624C:( 120) 9FC4 B570: JSR loadInterruptHandlers
006250:( 081) 9E98     : NOP
006252:( 081) 9E98     : NOP

Copy R5 to 00262C. So,

*00262C == 0 iff we didn’t recieve flasher function in R2.

006254:( 137) AC80 262C: LD A12, #data_00262C
006258:( 007) 5540     : LDW @[A12 + 0], R5

Proceed.

00625A:( 120) 9FC3 B444: JSR powerON
00625E:( 081) 9E98     : NOP
006260:( 039) 87E6     : JMP A14 (Return)
 
  gmini_boot_sequence.txt · Last modified: 2004/12/10 11:09
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki