| \ ***************************************************************************** |
| \ * Copyright (c) 2004, 2008 IBM Corporation |
| \ * All rights reserved. |
| \ * This program and the accompanying materials |
| \ * are made available under the terms of the BSD License |
| \ * which accompanies this distribution, and is available at |
| \ * http://www.opensource.org/licenses/bsd-license.php |
| \ * |
| \ * Contributors: |
| \ * IBM Corporation - initial implementation |
| \ ****************************************************************************/ |
| |
| STRUCT |
| cell FIELD >r0 cell FIELD >r1 cell FIELD >r2 cell FIELD >r3 |
| cell FIELD >r4 cell FIELD >r5 cell FIELD >r6 cell FIELD >r7 |
| cell FIELD >r8 cell FIELD >r9 cell FIELD >r10 cell FIELD >r11 |
| cell FIELD >r12 cell FIELD >r13 cell FIELD >r14 cell FIELD >r15 |
| cell FIELD >r16 cell FIELD >r17 cell FIELD >r18 cell FIELD >r19 |
| cell FIELD >r20 cell FIELD >r21 cell FIELD >r22 cell FIELD >r23 |
| cell FIELD >r24 cell FIELD >r25 cell FIELD >r26 cell FIELD >r27 |
| cell FIELD >r28 cell FIELD >r29 cell FIELD >r30 cell FIELD >r31 |
| cell FIELD >cr cell FIELD >xer cell FIELD >lr cell FIELD >ctr |
| cell FIELD >srr0 cell FIELD >srr1 cell FIELD >dar cell FIELD >dsisr |
| CONSTANT ciregs-size |
| |
| |
| |
| : .16 10 0.r 3 spaces ; |
| : .8 8 spaces 8 0.r 3 spaces ; |
| : .4regs cr 4 0 DO dup @ .16 8 cells+ LOOP drop ; |
| : .fixed-regs |
| cr ." R0 .. R7 R8 .. R15 R16 .. R23 R24 .. R31" |
| dup 8 0 DO dup .4regs cell+ LOOP drop |
| ; |
| |
| : .special-regs |
| cr ." CR / XER LR / CTR SRR0 / SRR1 DAR / DSISR" |
| cr dup >cr @ .8 dup >lr @ .16 dup >srr0 @ .16 dup >dar @ .16 |
| cr dup >xer @ .16 dup >ctr @ .16 dup >srr1 @ .16 >dsisr @ .8 |
| ; |
| |
| : .regs |
| cr .fixed-regs |
| cr .special-regs |
| cr cr |
| ; |
| |
| : .hw-exception ( reason-code exception-nr -- ) |
| ." ( " dup . ." ) " |
| CASE |
| 200 OF ." Machine Check" ENDOF |
| 300 OF ." Data Storage" ENDOF |
| 380 OF ." Data Segment" ENDOF |
| 400 OF ." Instruction Storage" ENDOF |
| 480 OF ." Instruction Segment" ENDOF |
| 500 OF ." External" ENDOF |
| 600 OF ." Alignment" ENDOF |
| 700 OF ." Program" ENDOF |
| 800 OF ." Floating-point unavailable" ENDOF |
| 900 OF ." Decrementer" ENDOF |
| 980 OF ." Hypervisor Decrementer" ENDOF |
| C00 OF ." System Call" ENDOF |
| D00 OF ." Trace" ENDOF |
| F00 OF ." Performance Monitor" ENDOF |
| F20 OF ." VMX Unavailable" ENDOF |
| 1200 OF ." System Error" ENDOF |
| 1600 OF ." Maintenance" ENDOF |
| 1800 OF ." Thermal" ENDOF |
| dup OF ." Unknown" ENDOF |
| ENDCASE |
| ." Exception [ " . ." ]" |
| ; |
| |
| : .sw-exception ( exception-nr -- ) |
| ." Exception [ " . ." ] triggered by boot firmware." |
| ; |
| |
| \ this word gets also called for non-hardware exceptions. |
| : be-hw-exception ( [reason-code] exception-nr -- ) |
| cr cr |
| dup 0> IF .hw-exception ELSE .sw-exception THEN |
| cr eregs .regs |
| ; |
| ' be-hw-exception to hw-exception-handler |
| |
| : (boot-exception-handler) ( x1...xn exception-nr -- x1...xn) |
| dup IF |
| dup 0 > IF |
| negate cp 9 emit ." : " type |
| ELSE |
| CASE |
| -6d OF cr ." W3411: Client application returned." cr ENDOF |
| -6c OF cr ." E3400: It was not possible to boot from any device " |
| ." specified in the VPD." cr |
| ENDOF |
| -6b OF cr ." E3410: Boot list successfully read from VPD " |
| ." but no useful information received." cr |
| ENDOF |
| -6a OF cr ." E3420: Boot list could not be read from VPD." cr |
| ENDOF |
| -69 OF |
| cr ." E3406: Client application returned an error" |
| abort"-str @ count dup IF |
| ." : " type cr |
| ELSE |
| ." ." cr |
| 2drop |
| THEN |
| ENDOF |
| -68 OF cr ." E3405: No such device" cr ENDOF |
| -67 OF cr ." E3404: Not a bootable device!" cr ENDOF |
| -66 OF cr ." E3408: Failed to claim memory for the executable" cr |
| ENDOF |
| -65 OF cr ." E3407: Load failed" cr ENDOF |
| -64 OF cr ." E3403: Bad executable: " abort"-str @ count type cr |
| ENDOF |
| -63 OF cr ." E3409: Unknown FORTH Word" cr ENDOF |
| -2 OF cr ." E3401: Aborting boot, " abort"-str @ count type cr |
| ENDOF |
| dup OF ." E3402: Aborting boot, internal error" cr ENDOF |
| ENDCASE |
| THEN |
| ELSE |
| drop |
| THEN |
| ; |
| |
| ' (boot-exception-handler) to boot-exception-handler |
| |
| : throw-error ( error-code "error-string" -- ) |
| skipws 0a parse rot throw |
| ; |
| |
| \ Enable external interrupt in msr |
| |
| : enable-ext-int ( -- ) |
| msr@ 8000 or msr! |
| ; |
| |
| \ Disable external interrupt in msr |
| |
| : disable-ext-int ( -- ) |
| msr@ 8000 not and msr! |
| ; |
| |
| \ Generate external interrupt through Internal Interrupt Controller of BE |
| |
| : gen-ext-int ( -- ) |
| 7fffffff dec! \ Reset decrementer |
| enable-ext-int \ Enable interrupt |
| FF 20000508418 rx! \ Interrupt priority mask |
| 10 20000508410 rx! \ Interrupt priority |
| ; |
| |