*** icrt0.S.bak Fri Apr 10 21:52:18 2009 --- icrt0.S Sat Apr 25 21:17:11 2009 *************** *** 39,54 **** __reset: ldr pc, =start /* reset (long jump) */ .global undef_vector ! undef_vector: b undef_vector /* undefined operation */ .global swi_vector swi_vector: b swi_handler /* software interrupt */ .global prefetch_vector ! prefetch_vector: b prefetch_vector /* prefetch abort */ .global data_abort_vector ! data_abort_vector: b data_abort_vector /* data abort */ .global reserved_vector reserved_vector: --- 39,54 ---- __reset: ldr pc, =start /* reset (long jump) */ .global undef_vector ! //undef_vector: b undef_vector /* undefined operation */ .global swi_vector swi_vector: b swi_handler /* software interrupt */ .global prefetch_vector ! //prefetch_vector: b prefetch_vector /* prefetch abort */ .global data_abort_vector ! //data_abort_vector: b data_abort_vector /* data abort */ .global reserved_vector reserved_vector: *************** *** 246,250 **** --- 246,361 ---- ldr r3, [ip] /* r3 := vector[IRQ No.] */ mov lr, pc bx r3 + + .pool + + + undef_vector: + mov r0, #0x55 + b zzz_zzz + + prefetch_vector: + mov r0, #0x50 + b zzz_zzz + + data_abort_vector: + mov r0, #44 + b zzz_zzz + + zzz_zzz: + ldr r2, =0xe000c000 + ldr r3, =numtable + + str r0, [r2] + mov r0, #0x20 + str r0, [r2] + + mov r1, lr + bl yyy_yyy + + mrs r1, spsr + bl yyy_yyy + + die: + b die + + .global yyy_yyy + yyy_yyy: + stmfd sp!, {r0-r3} + + ldr r2, =0xe000c000 + + yyy_loop: + ldr r0, [r2, #0x14] + tst r0, #0x20 + beq yyy_loop + + ldr r3, =numtable + + #if 1 + mov r0, r1, lsr #28 + and r0, r0, #0x0f + ldrb r0, [r3, r0] + str r0, [r2] + + mov r0, r1, lsr #24 + and r0, r0, #0x0f + ldrb r0, [r3, r0] + str r0, [r2] + + mov r0, r1, lsr #20 + and r0, r0, #0x0f + ldrb r0, [r3, r0] + str r0, [r2] + + mov r0, r1, lsr #16 + and r0, r0, #0x0f + ldrb r0, [r3, r0] + str r0, [r2] + #endif + + mov r0, r1, lsr #12 + and r0, r0, #0x0f + ldrb r0, [r3, r0] + str r0, [r2] + + mov r0, r1, lsr #8 + and r0, r0, #0x0f + ldrb r0, [r3, r0] + str r0, [r2] + + mov r0, r1, lsr #4 + and r0, r0, #0x0f + ldrb r0, [r3, r0] + str r0, [r2] + + mov r0, r1, lsr #0 + and r0, r0, #0x0f + ldrb r0, [r3, r0] + str r0, [r2] + + mov r0, #0x20 + str r0, [r2] + + ldmfd sp!, {r0-r3} + bx lr + + numtable: + .byte '0' + .byte '1' + .byte '2' + .byte '3' + .byte '4' + .byte '5' + .byte '6' + .byte '7' + .byte '8' + .byte '9' + .byte 'a' + .byte 'b' + .byte 'c' + .byte 'd' + .byte 'e' + .byte 'f' .pool