[OpenBIOS] r170 - openbios-devel/arch/sparc32

svn at openbios.org svn at openbios.org
Sat Sep 29 13:33:31 CEST 2007


Author: blueswirl
Date: 2007-09-29 13:33:31 +0200 (Sat, 29 Sep 2007)
New Revision: 170

Modified:
   openbios-devel/arch/sparc32/vectors.S
Log:
Fix exception handling and printout

Modified: openbios-devel/arch/sparc32/vectors.S
===================================================================
--- openbios-devel/arch/sparc32/vectors.S	2007-08-11 07:45:33 UTC (rev 169)
+++ openbios-devel/arch/sparc32/vectors.S	2007-09-29 11:33:31 UTC (rev 170)
@@ -26,8 +26,8 @@
 #define __ASSEMBLY
 #include "psr.h"
 #include "asi.h"
-#define ASI_BP ASI_M_BYPASS
-#define SER_ADDR 0x71100004
+#define SER_ADDR5  0x71100004
+#define SER_ADDR10 0xf1100004
 
         .section ".text.vectors", "ax"
         .align 16384
@@ -91,53 +91,50 @@
         rd      %psr, %g2
         andn    %g2, PSR_ET, %g2
         wr      %g2, %psr
-        ! Disable mmu
-        call    dump_exception
-         sta    %g0, [%g0] ASI_M_MMUREGS
-_forever:
-        /* Loop forever */
-        b       _forever                                  ;
-         nop
+        ! Disable mmu, re-enable boot mode
+        set     _start, %g3
+        set     dump_exception, %g2
+        sub     %g2, %g3, %g3
+        set     1<<14, %g2
+        jmp    %g3
+         sta    %g2, [%g0] ASI_M_MMUREGS
+
 outstr:
-        /* void outstr (unsigned long port, const unsigned char *str);
+        /* void outstr (unsigned long port5, unsigned long port10,
+         * const unsigned char *str);
          * Writes a string on an IO port.
          */
-1:      ldub    [%o1], %o3
+1:      lduba    [%o2] ASI_M_KERNELTXT, %o3
         cmp     %o3, 0
         be      2f
          nop
-        stba    %o3, [%o0] ASI_BP
+        stba    %o3, [%o0] ASI_M_BYPASS
+        stba    %o3, [%o1] ASI_M_CTL
         b       1b
-         inc    %o1
+         inc    %o2
 2:      retl
          nop
 
-outdigit:
-        /* void outdigit (unsigned long port, uint8_t digit);
-         * Dumps a single digit on serial port.
-         */
-        add     %o1, '0', %o1
-        retl
-         stba   %o1, [%o0] ASI_BP
-
 outhex:
-        /* void outhex (unsigned long port, uint32_t value);
+        /* void outhex (unsigned long port5, unsigned long port10,
+         * uint32_t value);
          * Dumps a 32 bits hex number on serial port
          */
-        mov     %o1, %o2
+        mov     %o2, %o4
         set     28, %o3
-        srl     %o2, %o3, %o1
-1:      and     %o1, 0xf, %o1
-        cmp     %o1, 9
+        srl     %o4, %o3, %o2
+1:      and     %o2, 0xf, %o2
+        cmp     %o2, 9
         bgt     2f
          nop
         b       3f
-         add    %o1, '0', %o1
-2:      add     %o1, 'a' - 10, %o1
-3:      stba    %o1, [%o0] ASI_BP
+         add    %o2, '0', %o2
+2:      add     %o2, 'a' - 10, %o2
+3:      stba    %o2, [%o0] ASI_M_BYPASS
+        stba    %o2, [%o1] ASI_M_CTL
         subcc   %o3, 4, %o3
         bge     1b
-         srl    %o2, %o3, %o1
+         srl    %o4, %o3, %o2
         retl
          nop
 
@@ -146,34 +143,37 @@
          * Dump a message when catching an exception
          */
 dump_exception:
-        set     SER_ADDR + 2, %o0
-        set     (_BUG_message_0), %o1
+        set     SER_ADDR5 + 2, %o0
+        set     SER_ADDR10 + 2, %o1
+        set     (_BUG_message_0), %o2
         call    outstr
          nop
 
         call    outhex
-         mov    %g1, %o1
+         mov    %g1, %o2
 
-        set     (_BUG_message_1), %o1
+        set     (_BUG_message_1), %o2
         call    outstr
          nop
 
         call    outhex
-         mov    %l1, %o1
+         mov    %l1, %o2
 
-        set     (_BUG_message_2), %o1
+        set     (_BUG_message_2), %o2
         call    outstr
          nop
 
         call    outhex
-         mov    %l2, %o1
+         mov    %l2, %o2
 
-        set     (_BUG_message_3), %o1
+        set     (_BUG_message_3), %o2
         call    outstr
          nop
+_forever:
+        /* Loop forever */
+        b       _forever                                  ;
+         nop
 
-        retl
-         nop
 /* Register window handlers */
 #include "wof.S"
 #include "wuf.S"
@@ -182,8 +182,8 @@
 _BUG_message_0:
         .string "Unhandled Exception 0x"
 _BUG_message_1:
-        .string "\nPC = 0x"
+        .string "\r\nPC = 0x"
 _BUG_message_2:
         .string " NPC = 0x"
 _BUG_message_3:
-        .string "\nStopping execution\n"
+        .string "\r\nStopping execution\r\n"




More information about the OpenBIOS mailing list