blob: dbf11fb4687189982b61a48888d846c92fbe8be2 [file] [log] [blame]
\ *****************************************************************************
\ * 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
;