Mark Cave-Ayland wrote:
[...] Stepping through with the debugger shows that it is now dying in the very last line of exec-file which reads:
" to load-base init-program" evaluate
So it looks as if we're very nearly there. My guess would be that OpenBIOS is dying somewhere within init-program. Does anyone know anything about what init-program should be doing under SPARC64? Has it ever been tested before?
In Sun's openboot, that's in go.fth (lives in obp/ach/sun4u/go.fth), and it does an execute-buffer on whatever's in load-base, followed by initializing the registers, trap-table and stack for the client interface. Specifically (I can include this because it has been open-sourced):
: (init-program) ( -- )
cif-64 \ 64-Bit IEEE 1275 Client Interface
init-c-stack \ Erase any previous C stack state
\ Zero all the general registers. 0w 0 to %g0 0 to %o0 0 to %l0 0 to %i0 0 to %g1 0 to %o1 0 to %l1 0 to %i1 0 to %g2 0 to %o2 0 to %l2 0 to %i2 0 to %g3 0 to %o3 0 to %l3 0 to %i3 0 to %g4 0 to %o4 0 to %l4 0 to %i4 0 to %g5 0 to %o5 0 to %l5 0 to %i5 0 to %g6 0 to %o6 0 to %l6 0 to %i6 0 to %g7 0 to %o7 0 to %l7 0 to %i7
cif-func() to %o4 \ IEEE 1275 Client Services Handler %o6@ to %o6 \ C stack pointer
trap-table to %tba \ Set trap table
h# 0 to %y h# 4 to %fprs h# 16 to %pstate h# 0d to %pil
7 to %cleanwin 0 to %otherwin 0 to %wstate 0 to %canrestore 6 to %cansave 0 to %cwp
h# 16 8 lshift to %tstate-c
load-base set-pc
[ifdef] SUN4V \ Since we are initializing a stack, make sure we clear out previous saved \ state indications. This affects ultra4v/savecpu.fth:restore-cpu-state, \ which is invoked shortly after this.
0 to full-save? [then]
sp@ saved-sp ! rp@ saved-rp ! \ Needed for later callbacks into Forth
state-valid on restartable? on true to already-go? [ifdef] Starcat? RELEASE-SLAVE-INVALID release-slaves? l! [then] ;
\ ..... other stuff ....
: init-program ( -- ) load-base file-size @ 'execute-buffer execute (init-program) ;