Annotation of XNU/osfmk/ppc/Firmware.s, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
                      3:  *
                      4:  * @APPLE_LICENSE_HEADER_START@
                      5:  * 
                      6:  * The contents of this file constitute Original Code as defined in and
                      7:  * are subject to the Apple Public Source License Version 1.1 (the
                      8:  * "License").  You may not use this file except in compliance with the
                      9:  * License.  Please obtain a copy of the License at
                     10:  * http://www.apple.com/publicsource and read it before using this file.
                     11:  * 
                     12:  * This Original Code and all software distributed under the License are
                     13:  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
                     14:  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
                     15:  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
                     16:  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
                     17:  * License for the specific language governing rights and limitations
                     18:  * under the License.
                     19:  * 
                     20:  * @APPLE_LICENSE_HEADER_END@
                     21:  */
                     22: /*
                     23:  * @OSF_FREE_COPYRIGHT@
                     24:  */
                     25: /*
                     26:  * @APPLE_FREE_COPYRIGHT@
                     27:  */
                     28:        
                     29: /*                                                                                                                                                                                     
                     30:        Firmware.s 
                     31: 
                     32:        Handle things that should be treated as an extension of the hardware
                     33: 
                     34:        Lovingly crafted by Bill Angell using traditional methods and only natural or recycled materials.
                     35:        No animal products are used other than rendered otter bile and deep fried pork lard.
                     36: 
                     37: */
                     38: 
                     39: #include <cpus.h>
                     40: #include <ppc/asm.h>
                     41: #include <ppc/proc_reg.h>
                     42: #include <ppc/POWERMAC/mp/MPPlugIn.h>
                     43: #include <ppc/exception.h>
                     44: #include <mach/machine/vm_param.h>
                     45: #include <assym.s>
                     46: 
                     47: 
                     48: /*
                     49:  *                     Here we generate the table of supported firmware calls 
                     50:  */
                     51:  
                     52: 
                     53:        
                     54: #ifdef __ELF__
                     55:                        .section ".data"
                     56: #else
                     57:                        .data
                     58: #endif
                     59:                        .align  5                                                               /* Line up on cache line */
                     60:                        
                     61:                        .globl  EXT(FWtable)
                     62: 
                     63: #ifdef __ELF__
                     64:                        .type  EXT(FWtable),@object
                     65: #endif
                     66: EXT(FWtable):
                     67: 
                     68:                        .globl  CutTrace                                                /* Let everyone know 'bout it */
                     69:                        .set    CutTrace,(.-EXT(FWtable))/4|0x80000000  /* Call number for CutTrace */
                     70:                        .long   callUnimp                                               /* This was already handled in lowmem_vectors */
                     71: 
                     72: #include       <ppc/FirmwareCalls.h>
                     73:  
                     74:                        .set    EXT(FirmwareCnt), (.-EXT(FWtable))/4    /* Get the top number */
                     75: 
                     76:                        .text
                     77:                        
                     78: #define SIMPLESCC 1
                     79: #define NOTQUITEASSIMPLE 1
                     80: /*
                     81:  *                     This routine handles the firmware call routine. It must be entered with IR and DR off,
                     82:  *                     interruptions disabled, and in supervisor state. 
                     83:  *
                     84:  *                     When we enter, we expect R0 to have call number, and LR
                     85:  *                     to point to the return.  Also, all registers saved in savearea in R13.
                     86:  *                     R3 is as passed in by the user.  All others must be gotten from the save area
                     87:  */
                     88: 
                     89: ENTRY(FirmwareCall, TAG_NO_FRAME_USED)
                     90:                
                     91:                        rlwinm  r1,r0,2,1,29                                    /* Clear out bit 0 and multiply by 4 */
                     92:                        lis             r12,HIGH_ADDR(EXT(FWtable))             /* Get the high part of the firmware call table */
                     93:                        cmplwi  r1,EXT(FirmwareCnt)*4                   /* Is it a valid firmware call number */
                     94:                        mflr    r11                                                             /* Save the return */
                     95:                        ori             r12,r12,LOW_ADDR(EXT(FWtable))  /* Now the low part */
                     96:                        ble+    goodCall                                                /* Yeah, it is... */
                     97:                        
                     98:                        li              r3,T_SYSTEM_CALL                                /* Tell the vector handler that we know nothing */
                     99:                        blr                                                                             /* Return for errors... */
                    100:                        
                    101: goodCall:      mfsprg  r10,0                                                   /* Make sure about the per_proc block */
                    102:                        lwzx    r1,r1,r12                                               /* Pick up the address of the routine */
                    103:                        lwz             r4,saver4(r13)                                  /* Pass in caller's R4 */
                    104:                        lwz             r5,saver5(r13)                                  /* Pass in caller's R5 */
                    105:                        rlwinm. r1,r1,0,0,29                                    /* Make sure the flag bits are clear */
                    106:                        stw             r11,PP_TEMPWORK1(r10)                   /* Save our return point */
                    107: 
                    108:                        mtlr    r1                                                              /* Put it in the LR */
                    109:                        beq-    callUnimp                                               /* This one was unimplimented... */
                    110: 
                    111:                        blrl                                                                    /* Call the routine... */
                    112: 
                    113:                        mfsprg  r10,0                                                   /* Make sure about the per_proc again */
                    114:                        stw             r3,saver3(r13)                                  /* Pass back the return code to caller */
                    115:                        lwz             r11,PP_TEMPWORK1(r10)                   /* Get our return point */
                    116:                        li              r3,T_IN_VAIN                                    /* Tell the vector handler that we took care of it */
                    117:                        mtlr    r11                                                             /* Set the return */
                    118:                        blr                                                                             /* Bye, dudes... */
                    119:        
                    120: callUnimp:     lwz             r11,PP_TEMPWORK1(r10)                   /* Restore the return address */
                    121:                        li              r3,T_SYSTEM_CALL                                /* Tell the vector handler that we know nothing */
                    122:                        mtlr    r11                                                             /* Restore the LR */
                    123:                        blr                                                                             /* Return for errors... */
                    124: 
                    125: /*
                    126:  *                     This routine is used to store using a real address. It stores parmeter1 at parameter2.
                    127:  */
                    128: 
                    129: ENTRY(StoreReal, TAG_NO_FRAME_USED)
                    130: 
                    131:                        lis             r0,HIGH_ADDR(StoreRealCall)             /* Get the top part of the SC number */
                    132:                        ori             r0,r0,LOW_ADDR(StoreRealCall)   /* and the bottom part */
                    133:                        sc                                                                              /* Do it to it */
                    134:                        blr                                                                             /* Bye bye, Birdie... */
                    135:                        
                    136: ENTRY(StoreRealLL, TAG_NO_FRAME_USED)
                    137: 
                    138:                        stw             r3,0(r4)                                                /* Store the word */
                    139:                        blr                                                                             /* Leave... */
                    140: 
                    141: /*
                    142:  *                     This routine is used to clear a range of physical pages.
                    143:  */
                    144: 
                    145: ENTRY(ClearReal, TAG_NO_FRAME_USED)
                    146: 
                    147:                        lis             r0,HIGH_ADDR(ClearRealCall)             /* Get the top part of the SC number */
                    148:                        ori             r0,r0,LOW_ADDR(ClearRealCall)   /* and the bottom part */
                    149:                        sc                                                                              /* Do it to it */
                    150:                        blr                                                                             /* Bye bye, Birdie... */
                    151:                        
                    152: ENTRY(ClearRealLL, TAG_NO_FRAME_USED)
                    153: 
                    154: /*
                    155:  *                     We take the first parameter as a physical address.  The second is the length in bytes.
                    156:  *                     Being crazy, I'll round the address down, and the length up.  We could end up clearing
                    157:  *                     an extra page at the start and one at the end, but we don't really care.  If someone
                    158:  *                     is stupid enough to give me unaligned addresses and lengths, I am just arrogant enough
                    159:  *                     to take them at their word and to hell with them.
                    160:  */
                    161: 
                    162:                        neg             r5,r3                                                   /* Negate the address */ 
                    163:                        addi    r4,r4,4095                                              /* Round length up */
                    164:                        rlwinm  r5,r5,0,20,31                                   /* Save extra length */
                    165:                        rlwinm  r3,r3,0,0,19                                    /* Round the page on down */
                    166:                        add             r4,r4,r5                                                /* Add up all extra lengths */
                    167:                        li              r6,32                                                   /* Get a displacement */
                    168:                        rlwinm  r4,r4,0,0,19                                    /* Round the length back down */
                    169:                        
                    170: clrloop:       subi    r4,r4,32                                                /* Back off a cache line */
                    171:                        dcbz    0,r3                                                    /* Do the even line */
                    172:                        sub.    r4,r4,r6                                                /* Back off a second time (we only do this to generate a CR */
                    173:                        dcbz    r6,r3                                                   /* Clear the even line */
                    174:                        addi    r3,r3,64                                                /* Move up to every other line */
                    175:                        bgt+    clrloop                                                 /* Go until we've done it all... */
                    176: 
                    177:                        blr                                                                             /* Leave... */
                    178: /*
                    179:  *                     This routine will read in 32 byte of real storage.
                    180:  */
                    181:  
                    182: ENTRY(ReadReal, TAG_NO_FRAME_USED)
                    183: 
                    184:                        mfmsr   r0                                                              /* Get the MSR */
                    185:                        rlwinm  r5,r0,0,28,26                                   /* Clear DR bit */
                    186:                        rlwinm  r5,r5,0,17,15                                   /* Clear EE bit */
                    187:                        mtmsr   r5                                                              /* Disable EE and DR */
                    188:                        isync                                                                   /* Just make sure about it */
                    189:                        
                    190:                        lwz             r5,0(r3)                                                /* Get word 0 */
                    191:                        lwz             r6,4(r3)                                                /* Get word 1 */
                    192:                        lwz             r7,8(r3)                                                /* Get word 2 */
                    193:                        lwz             r8,12(r3)                                               /* Get word 3 */
                    194:                        lwz             r9,16(r3)                                               /* Get word 4 */
                    195:                        lwz             r10,20(r3)                                              /* Get word 5 */
                    196:                        lwz             r11,24(r3)                                              /* Get word 6 */
                    197:                        lwz             r12,28(r3)                                              /* Get word 7 */
                    198:                        
                    199:                        mtmsr   r0                                                              /* Restore original machine state */
                    200:                        isync                                                                   /* Insure goodness */
                    201:                        
                    202:                        stw             r5,0(r4)                                                /* Set word 0 */
                    203:                        stw             r6,4(r4)                                                /* Set word 1 */
                    204:                        stw             r7,8(r4)                                                /* Set word 2 */
                    205:                        stw             r8,12(r4)                                               /* Set word 3 */
                    206:                        stw             r9,16(r4)                                               /* Set word 4 */
                    207:                        stw             r10,20(r4)                                              /* Set word 5 */
                    208:                        stw             r11,24(r4)                                              /* Set word 6 */
                    209:                        stw             r12,28(r4)                                              /* Set word 7 */
                    210:                        
                    211:                        blr
                    212:                        
                    213: 
                    214: /*
                    215:  *                     This routine is used to load all 4 DBATs.
                    216:  */
                    217: 
                    218: ENTRY(LoadDBATs, TAG_NO_FRAME_USED)
                    219: 
                    220:                        lis             r0,HIGH_ADDR(LoadDBATsCall)             /* Top half of LoadDBATsCall firmware call number */
                    221:                        ori             r0,r0,LOW_ADDR(LoadDBATsCall)   /* Bottom half */
                    222:                        sc                                                                              /* Do it to it */
                    223: 
                    224:                        blr                                                                             /* Bye bye, Birdie... */
                    225:                        
                    226: ENTRY(xLoadDBATsLL, TAG_NO_FRAME_USED)
                    227: 
                    228:                        lwz             r4,0(r3)                                                /* Get DBAT 0 high */
                    229:                        lwz             r5,4(r3)                                                /* Get DBAT 0 low */
                    230:                        lwz             r6,8(r3)                                                /* Get DBAT 1 high */
                    231:                        lwz             r7,12(r3)                                               /* Get DBAT 1 low */
                    232:                        lwz             r8,16(r3)                                               /* Get DBAT 2 high */
                    233:                        lwz             r9,20(r3)                                               /* Get DBAT 2 low */
                    234:                        lwz             r10,24(r3)                                              /* Get DBAT 3 high */
                    235:                        lwz             r11,28(r3)                                              /* Get DBAT 3 low */
                    236:                        
                    237:                        sync                                                                    /* Common decency and the state law require you to wash your hands */
                    238:                        mtdbatu 0,r4                                                    /* Load DBAT 0 high */
                    239:                        mtdbatl 0,r5                                                    /* Load DBAT 0 low */
                    240:                        mtdbatu 1,r6                                                    /* Load DBAT 1 high */
                    241:                        mtdbatl 1,r7                                                    /* Load DBAT 1 low */
                    242:                        mtdbatu 2,r8                                                    /* Load DBAT 2 high */
                    243:                        mtdbatl 2,r9                                                    /* Load DBAT 2 low */
                    244:                        mtdbatu 3,r10                                                   /* Load DBAT 3 high */
                    245:                        mtdbatl 3,r11                                                   /* Load DBAT 3 low */
                    246:                        sync                                                                    /* Make sure it's done */
                    247:                        isync                                                                   /* Toss out anything new */
                    248: 
                    249:                        blr                                                                             /* Leave... */
                    250: 
                    251: /*
                    252:  *                     This routine is used to load all 4 IBATs.
                    253:  */
                    254: 
                    255: ENTRY(LoadIBATs, TAG_NO_FRAME_USED)
                    256: 
                    257:                        lis             r0,HIGH_ADDR(LoadIBATsCall)             /* Top half of CreateFakeIO firmware call number */
                    258:                        ori             r0,r0,LOW_ADDR(LoadIBATsCall)   /* Bottom half */
                    259:                        sc                                                                              /* Do it to it */
                    260:                        blr                                                                             /* Bye bye, Birdie... */
                    261:                        
                    262: ENTRY(xLoadIBATsLL, TAG_NO_FRAME_USED)
                    263: 
                    264:                        lwz             r4,0(r3)                                                /* Get IBAT 0 high */
                    265:                        lwz             r5,4(r3)                                                /* Get IBAT 0 low */
                    266:                        lwz             r6,8(r3)                                                /* Get IBAT 1 high */
                    267:                        lwz             r7,12(r3)                                               /* Get IBAT 1 low */
                    268:                        lwz             r8,16(r3)                                               /* Get IBAT 2 high */
                    269:                        lwz             r9,20(r3)                                               /* Get IBAT 2 low */
                    270:                        lwz             r10,24(r3)                                              /* Get IBAT 3 high */
                    271:                        lwz             r11,28(r3)                                              /* Get IBAT 3 low */
                    272:                        
                    273:                        sync                                                                    /* Common decency and the state law require you to wash your hands */
                    274:                        mtibatu 0,r4                                                    /* Load IBAT 0 high */
                    275:                        mtibatl 0,r5                                                    /* Load IBAT 0 low */
                    276:                        mtibatu 1,r6                                                    /* Load IBAT 1 high */
                    277:                        mtibatl 1,r7                                                    /* Load IBAT 1 low */
                    278:                        mtibatu 2,r8                                                    /* Load IBAT 2 high */
                    279:                        mtibatl 2,r9                                                    /* Load IBAT 2 low */
                    280:                        mtibatu 3,r10                                                   /* Load IBAT 3 high */
                    281:                        mtibatl 3,r11                                                   /* Load IBAT 3 low */
                    282:                        sync                                                                    /* Make sure it's done */
                    283:                        isync                                                                   /* Toss out anything new */
                    284:                        
                    285:                        blr                                                                             /* Leave... */
                    286: 
                    287: 
                    288: /*
                    289:  *                     This is the glue to call the CutTrace firmware call
                    290:  */
                    291:  
                    292: ENTRY(dbgTrace, TAG_NO_FRAME_USED)
                    293:                        
                    294:                        lis             r0,HIGH_ADDR(CutTrace)                  /* Top half of CreateFakeIO firmware call number */
                    295:                        ori             r0,r0,LOW_ADDR(CutTrace)                /* Bottom half */
                    296:                        sc                                                                              /* Do it to it */
                    297:                        blr                                                                             /* Bye bye, Birdie... */
                    298: 
                    299: 
                    300: 
                    301: /*
                    302:  *                     This is the glue to create a fake I/O interruption
                    303:  */
                    304:  
                    305: ENTRY(CreateFakeIO, TAG_NO_FRAME_USED)
                    306:                        
                    307:                        lis             r0,HIGH_ADDR(CreateFakeIOCall)  /* Top half of CreateFakeIO firmware call number */
                    308:                        ori             r0,r0,LOW_ADDR(CreateFakeIOCall)        /* Bottom half */
                    309:                        sc                                                                              /* Do it to it */
                    310:                        blr                                                                             /* Bye bye, Birdie... */
                    311: 
                    312: /* 
                    313:  *                     Used to initialize the SCC for debugging output
                    314:  */
                    315: 
                    316: 
                    317: ENTRY(fwSCCinit, TAG_NO_FRAME_USED)
                    318:                
                    319:                        mfmsr   r8                                                                              /* Save the MSR */
                    320:                        mr.             r3,r3                                                                   /* See if printer or modem */
                    321:                        rlwinm  r12,r8,0,28,25                                                  /* Turn off translation */
                    322:                        lis             r10,0xF301                                                              /* Set the top part */
                    323:                        rlwinm  r12,r12,0,17,15                                                 /* Turn off interruptions */
                    324: #if 0
                    325:                        mtmsr   r12                                                                             /* Smash the MSR */
                    326:                        isync                                                                                   /* Make it clean */
                    327: #endif
                    328: 
                    329:                        ori             r10,r10,0x2000                                                  /* Assume the printer (this is the normal one) */
                    330:                        beq+    fwSCCprnt                                                               /* It sure are... */
                    331:                        ori             r10,r10,0x0002                                                  /* Move it over to the modem port */
                    332: 
                    333: fwSCCprnt:     dcbf    0,r10                                                                   /* Insure it is out */
                    334:                        sync
                    335:                        eieio
                    336:                        dcbi    0,r10                                                                   /* Toss it */
                    337:                        sync
                    338: 
                    339: 
                    340:                        li              r7,0x09                                                                 /* Set the register */
                    341:                        stb             r7,0(r10)                                                               /* Set the register */
                    342:                        dcbf    0,r10                                                                   /* Force it out */
                    343:                        sync                                                                                    /* Make sure it's out there */
                    344:                        dcbi    0,r10
                    345:                        eieio
                    346: 
                    347:                        li              r7,0x80                                                                 /* Reset channel A */
                    348:                        stb             r7,0(r10)                                                               /* Set the register */
                    349:                        dcbf    0,r10                                                                   /* Force it out */
                    350:                        sync                                                                                    /* Make sure it's out there */
                    351:                        dcbi    0,r10
                    352:                        eieio
                    353: 
                    354:                        li              r7,0x04                                                                 /* Set the register */
                    355:                        stb             r7,0(r10)                                                               /* Set the register */
                    356:                        dcbf    0,r10                                                                   /* Force it out */
                    357:                        sync                                                                                    /* Make sure it's out there */
                    358:                        dcbi    0,r10
                    359:                        eieio
                    360: 
                    361:                        li              r7,0x44                                                                 /* x16 clock, 1 stop bit */
                    362:                        stb             r7,0(r10)                                                               /* Set the register */
                    363:                        dcbf    0,r10                                                                   /* Force it out */
                    364:                        sync                                                                                    /* Make sure it's out there */
                    365:                        dcbi    0,r10
                    366:                        eieio
                    367: 
                    368:                        li              r7,0x03                                                                 /* Set the register */
                    369:                        stb             r7,0(r10)                                                               /* Set the register */
                    370:                        dcbf    0,r10                                                                   /* Force it out */
                    371:                        sync                                                                                    /* Make sure it's out there */
                    372:                        dcbi    0,r10
                    373:                        eieio
                    374: 
                    375:                        li              r7,0xC0                                                                 /* 8 bits per char */
                    376:                        stb             r7,0(r10)                                                               /* Set the register */
                    377:                        dcbf    0,r10                                                                   /* Force it out */
                    378:                        sync                                                                                    /* Make sure it's out there */
                    379:                        dcbi    0,r10
                    380:                        eieio
                    381: 
                    382:                        li              r7,0x05                                                                 /* Set the register */
                    383:                        stb             r7,0(r10)                                                               /* Set the register */
                    384:                        dcbf    0,r10                                                                   /* Force it out */
                    385:                        sync                                                                                    /* Make sure it's out there */
                    386:                        dcbi    0,r10
                    387:                        eieio
                    388: 
                    389:                        li              r7,0xE2                                                                 /* DTR mode, 8bit/char */
                    390:                        stb             r7,0(r10)                                                               /* Set the register */
                    391:                        dcbf    0,r10                                                                   /* Force it out */
                    392:                        sync                                                                                    /* Make sure it's out there */
                    393:                        dcbi    0,r10
                    394:                        eieio
                    395: 
                    396:                        li              r7,0x02                                                                 /* Set the register */
                    397:                        stb             r7,0(r10)                                                               /* Set the register */
                    398:                        dcbf    0,r10                                                                   /* Force it out */
                    399:                        sync                                                                                    /* Make sure it's out there */
                    400:                        dcbi    0,r10
                    401:                        eieio
                    402: 
                    403:                        li              r7,0x00                                                                 /* Vector 0 */
                    404:                        stb             r7,0(r10)                                                               /* Set the register */
                    405:                        dcbf    0,r10                                                                   /* Force it out */
                    406:                        sync                                                                                    /* Make sure it's out there */
                    407:                        dcbi    0,r10
                    408:                        eieio
                    409: 
                    410:                        li              r7,0x0A                                                                 /* Set the register */
                    411:                        stb             r7,0(r10)                                                               /* Set the register */
                    412:                        dcbf    0,r10                                                                   /* Force it out */
                    413:                        sync                                                                                    /* Make sure it's out there */
                    414:                        dcbi    0,r10
                    415:                        eieio
                    416: 
                    417:                        li              r7,0x00                                                                 /* Clear misc controls */
                    418:                        stb             r7,0(r10)                                                               /* Set the register */
                    419:                        dcbf    0,r10                                                                   /* Force it out */
                    420:                        sync                                                                                    /* Make sure it's out there */
                    421:                        dcbi    0,r10
                    422:                        eieio
                    423: 
                    424:                        li              r7,0x0B                                                                 /* Set the register */
                    425:                        stb             r7,0(r10)                                                               /* Set the register */
                    426:                        dcbf    0,r10                                                                   /* Force it out */
                    427:                        sync                                                                                    /* Make sure it's out there */
                    428:                        dcbi    0,r10
                    429:                        eieio
                    430: 
                    431:                        li              r7,0x50                                                                 /* B/R gen T/R */
                    432:                        stb             r7,0(r10)                                                               /* Set the register */
                    433:                        dcbf    0,r10                                                                   /* Force it out */
                    434:                        sync                                                                                    /* Make sure it's out there */
                    435:                        dcbi    0,r10
                    436:                        eieio
                    437: 
                    438:                        li              r7,0x0C                                                                 /* Set the register */
                    439:                        stb             r7,0(r10)                                                               /* Set the register */
                    440:                        dcbf    0,r10                                                                   /* Force it out */
                    441:                        sync                                                                                    /* Make sure it's out there */
                    442:                        dcbi    0,r10
                    443:                        eieio
                    444: 
                    445:                        li              r7,0x0A                                                                 /* 9600 baud low */
                    446:                        stb             r7,0(r10)                                                               /* Set the register */
                    447:                        dcbf    0,r10                                                                   /* Force it out */
                    448:                        sync                                                                                    /* Make sure it's out there */
                    449:                        dcbi    0,r10
                    450:                        eieio
                    451: 
                    452:                        li              r7,0x0D                                                                 /* Set the register */
                    453:                        stb             r7,0(r10)                                                               /* Set the register */
                    454:                        dcbf    0,r10                                                                   /* Force it out */
                    455:                        sync                                                                                    /* Make sure it's out there */
                    456:                        dcbi    0,r10
                    457:                        eieio
                    458: 
                    459:                        li              r7,0x00                                                                 /* 9600 baud high */
                    460:                        stb             r7,0(r10)                                                               /* Set the register */
                    461:                        dcbf    0,r10                                                                   /* Force it out */
                    462:                        sync                                                                                    /* Make sure it's out there */
                    463:                        dcbi    0,r10
                    464:                        eieio
                    465: 
                    466:                        li              r7,0x03                                                                 /* Set the register */
                    467:                        stb             r7,0(r10)                                                               /* Set the register */
                    468:                        dcbf    0,r10                                                                   /* Force it out */
                    469:                        sync                                                                                    /* Make sure it's out there */
                    470:                        dcbi    0,r10
                    471:                        eieio
                    472: 
                    473:                        li              r7,0xC1                                                                 /* 8 bits/char, Rx enable */
                    474:                        stb             r7,0(r10)                                                               /* Set the register */
                    475:                        dcbf    0,r10                                                                   /* Force it out */
                    476:                        sync                                                                                    /* Make sure it's out there */
                    477:                        dcbi    0,r10
                    478:                        eieio
                    479: 
                    480:                        li              r7,0x05                                                                 /* Set the register */
                    481:                        stb             r7,0(r10)                                                               /* Set the register */
                    482:                        dcbf    0,r10                                                                   /* Force it out */
                    483:                        sync                                                                                    /* Make sure it's out there */
                    484:                        dcbi    0,r10
                    485:                        eieio
                    486: 
                    487:                        li              r7,0xEA                                                                 /* 8 bits/char, Tx enable */
                    488:                        stb             r7,0(r10)                                                               /* Set the register */
                    489:                        dcbf    0,r10                                                                   /* Force it out */
                    490:                        sync                                                                                    /* Make sure it's out there */
                    491:                        dcbi    0,r10
                    492:                        eieio
                    493: 
                    494:                        li              r7,0x0E                                                                 /* Set the register */
                    495:                        stb             r7,0(r10)                                                               /* Set the register */
                    496:                        dcbf    0,r10                                                                   /* Force it out */
                    497:                        sync                                                                                    /* Make sure it's out there */
                    498:                        dcbi    0,r10
                    499:                        eieio
                    500: 
                    501:                        li              r7,0x01                                                                 /* BR rate gen enable */
                    502:                        stb             r7,0(r10)                                                               /* Set the register */
                    503:                        dcbf    0,r10                                                                   /* Force it out */
                    504:                        sync                                                                                    /* Make sure it's out there */
                    505:                        dcbi    0,r10
                    506:                        eieio
                    507: 
                    508:                        li              r7,0x0F                                                                 /* Set the register */
                    509:                        stb             r7,0(r10)                                                               /* Set the register */
                    510:                        dcbf    0,r10                                                                   /* Force it out */
                    511:                        sync                                                                                    /* Make sure it's out there */
                    512:                        dcbi    0,r10
                    513:                        eieio
                    514: 
                    515:                        li              r7,0x00                                                                 /* ints off */
                    516:                        stb             r7,0(r10)                                                               /* Set the register */
                    517:                        dcbf    0,r10                                                                   /* Force it out */
                    518:                        sync                                                                                    /* Make sure it's out there */
                    519:                        dcbi    0,r10
                    520:                        eieio
                    521: 
                    522:                        li              r7,0x10                                                                 /* Reset ext/stat ints */
                    523:                        stb             r7,0(r10)                                                               /* Set the register */
                    524:                        dcbf    0,r10                                                                   /* Force it out */
                    525:                        sync                                                                                    /* Make sure it's out there */
                    526:                        dcbi    0,r10
                    527:                        eieio
                    528: 
                    529:                        li              r7,0x10                                                                 /* Reset ext/stat ints */
                    530:                        stb             r7,0(r10)                                                               /* Set the register */
                    531:                        dcbf    0,r10                                                                   /* Force it out */
                    532:                        sync                                                                                    /* Make sure it's out there */
                    533:                        dcbi    0,r10
                    534:                        eieio
                    535: 
                    536:                        li              r7,0x01                                                                 /* Set the register */
                    537:                        stb             r7,0(r10)                                                               /* Set the register */
                    538:                        dcbf    0,r10                                                                   /* Force it out */
                    539:                        sync                                                                                    /* Make sure it's out there */
                    540:                        dcbi    0,r10
                    541:                        eieio
                    542: 
                    543:                        li              r7,0x10                                                                 /* int on Rx, no Tx int enable */
                    544:                        stb             r7,0(r10)                                                               /* Set the register */
                    545:                        dcbf    0,r10                                                                   /* Force it out */
                    546:                        sync                                                                                    /* Make sure it's out there */
                    547:                        dcbi    0,r10
                    548:                        eieio
                    549: 
                    550:                        li              r7,0x09                                                                 /* Set the register */
                    551:                        stb             r7,0(r10)                                                               /* Set the register */
                    552:                        dcbf    0,r10                                                                   /* Force it out */
                    553:                        sync                                                                                    /* Make sure it's out there */
                    554:                        dcbi    0,r10
                    555:                        eieio
                    556: 
                    557:                        li              r7,0x0A                                                                 /* int on Rx, Tx int enable */
                    558:                        stb             r7,0(r10)                                                               /* Set the register */
                    559:                        dcbf    0,r10                                                                   /* Force it out */
                    560:                        sync                                                                                    /* Master enable, no vector */
                    561:                        dcbi    0,r10
                    562:                        eieio
                    563: 
                    564:                        li              r7,0x09                                                                 /* Set the register */
                    565:                        stb             r7,0(r10)                                                               /* Set the register */
                    566:                        dcbf    0,r10                                                                   /* Force it out */
                    567:                        sync                                                                                    /* Make sure it's out there */
                    568:                        dcbi    0,r10
                    569:                        eieio
                    570: 
                    571:                        li              r7,0x02                                                                 /* No vector */
                    572:                        stb             r7,0(r10)                                                               /* Set the register */
                    573:                        dcbf    0,r10                                                                   /* Force it out */
                    574:                        sync                                                                                    /* Master enable, no vector */
                    575:                        dcbi    0,r10
                    576:                        eieio
                    577:                        
                    578:                        lbz             r7,0(r10)                                                               /* Clear interrupts */
                    579:                        sync                                                                                    /* Master enable, no vector */
                    580:                        dcbi    0,r10
                    581:                        eieio
                    582: 
                    583: wSCCrdy:       eieio                                                                                   /* Barricade it */
                    584:                        lbz             r7,0(r10)                                                               /* Get current status */
                    585:                        dcbi    0,r10
                    586:                        sync
                    587:                        andi.   r7,r7,0x04                                                              /* Is transmitter empty? */
                    588:                        beq             wSCCrdy                                                                 /* Nope... */
                    589: 
                    590:                        eieio
                    591: 
                    592: #if 0
                    593:                        mtmsr   r8                                                                              /* Restore 'rupts and TR */
                    594:                        isync
                    595: #endif
                    596:                        blr                                                                                             /* Leave... */
                    597: 
                    598: /*
                    599:  *                     This routine is used to write debug output to either the modem or printer port.
                    600:  *                     parm 1 is printer (0) or modem (1); parm 2 is ID (printed directly); parm 3 converted to hex
                    601:  */
                    602: 
                    603: ENTRY(dbgDisp, TAG_NO_FRAME_USED)
                    604: 
                    605:                        mr              r12,r0                                                                  /* Keep R0 pristene */
                    606:                        lis             r0,HIGH_ADDR(dbgDispCall)                               /* Top half of dbgDispCall firmware call number */
                    607:                        ori             r0,r0,LOW_ADDR(dbgDispCall)                             /* Bottom half */
                    608: 
                    609:                        sc                                                                                              /* Go display the stuff */
                    610: 
                    611:                        mr              r0,r12                                                                  /* Restore R0 */
                    612:                        blr                                                                                             /* Return... */
                    613:                        
                    614: /*                     Here's the low-level part of dbgDisp                    */
                    615: 
                    616: ENTRY(dbgDispLL, TAG_NO_FRAME_USED)
                    617: 
                    618: dbgDispInt:    mfmsr   r8                                                                              /* Save the MSR */
                    619: 
                    620: #if 0
                    621:                        lis             r10,0xF301                      /* (TEST/DEBUG) */
                    622:                        ori             r10,r10,0x2002          /* (TEST/DEBUG) */
                    623:                        dcbf    0,r10                           /* (TEST/DEBUG) */
                    624:                        sync                                            /* (TEST/DEBUG) */
                    625:                        dcbi    0,r10                           /* (TEST/DEBUG) */
                    626:                        eieio                                           /* (TEST/DEBUG) */
                    627:                        li              r7,0x35                         /* (TEST/DEBUG) */
                    628:                        stb             r7,4(r10)                       /* (TEST/DEBUG) */
                    629:                        
                    630:                        lis             r7,10                           /* (TEST/DEBUG) */
                    631: spw6:          addi    r7,r7,-1                        /* (TEST/DEBUG) */
                    632:                        mr.             r7,r7                           /* (TEST/DEBUG) */
                    633:                        bne-    spw6                            /* (TEST/DEBUG) */
                    634:                        dcbf    0,r10                           /* (TEST/DEBUG) */
                    635:                        sync                                            /* (TEST/DEBUG) */
                    636:                        dcbi    0,r10                           /* (TEST/DEBUG) */
                    637:                        eieio                                           /* (TEST/DEBUG) */
                    638: #endif
                    639: 
                    640:                        rlwinm  r12,r8,0,28,25                                                  /* Turn off translation */
                    641:                        rlwinm  r12,r12,0,17,15                                                 /* Turn off interruptions */
                    642: 
                    643:                        mflr    r11                                                                             /* Save the link register */
                    644: 
                    645: #if 0
                    646:                        mr              r7,r12                          /* (TEST/DEBUG) */
                    647:                        bl              dumpr7                          /* (TEST/DEBUG) */
                    648: #endif
                    649: 
                    650:                        mr.             r3,r3                                                                   /* See if printer or modem */
                    651:                        lis             r10,0xF301                                                              /* Set the top part */
                    652:                        mr              r3,r4                                                                   /* Copy the ID parameter */
                    653:                        
                    654: #if 0
                    655:                        mr              r9,r12                          /* (TEST/DEBUG) */
                    656:                        
                    657:                        mtmsr   r12                                     /* (TEST/DEBUG) */
                    658:                        isync                                           /* (TEST/DEBUG) */
                    659: 
                    660: #if 0
                    661:                        mtmsr   r8                                      /* (TEST/DEBUG) */
                    662:                        isync                                           /* (TEST/DEBUG) */
                    663: #endif
                    664: 
                    665:                        lis             r12,0xF301                      /* (TEST/DEBUG) */
                    666:                        ori             r12,r12,0x2002          /* (TEST/DEBUG) */
                    667: #if 1
                    668:                        dcbf    0,r12                           /* (TEST/DEBUG) */
                    669:                        sync                                            /* (TEST/DEBUG) */
                    670:                        dcbi    0,r12                           /* (TEST/DEBUG) */
                    671: #endif
                    672: 
                    673: xqrw1:         eieio                                           /* (TEST/DEBUG) */
                    674:                        lbz             r7,0(r12)                       /* (TEST/DEBUG) */
                    675:                        dcbi    0,r12                           /* (TEST/DEBUG) */
                    676:                        sync                                            /* (TEST/DEBUG) */
                    677:                        andi.   r7,r7,0x04                      /* (TEST/DEBUG) */
                    678:                        beq             xqrw1                           /* (TEST/DEBUG) */
                    679:                        
                    680:                        eieio                                           /* (TEST/DEBUG) */
                    681:                        li              r7,0x36                         /* (TEST/DEBUG) */
                    682:                        stb             r7,4(r12)                       /* (TEST/DEBUG) */
                    683:                        eieio
                    684:                        dcbf    0,r12                           /* (TEST/DEBUG) */
                    685:                        sync                                            /* (TEST/DEBUG) */
                    686:                        dcbi    0,r12                           /* (TEST/DEBUG) */
                    687:                        eieio                                           /* (TEST/DEBUG) */
                    688:                        
                    689:                        
                    690:                        lis             r7,10                           /* (TEST/DEBUG) */
                    691: spw7:          addi    r7,r7,-1                        /* (TEST/DEBUG) */
                    692:                        mr.             r7,r7                           /* (TEST/DEBUG) */
                    693:                        bne-    spw7                            /* (TEST/DEBUG) */
                    694:                        dcbf    0,r12                           /* (TEST/DEBUG) */
                    695:                        sync                                            /* (TEST/DEBUG) */
                    696:                        dcbi    0,r12                           /* (TEST/DEBUG) */
                    697:                        eieio                                           /* (TEST/DEBUG) */
                    698:                        mr              r12,r9                          /* (TEST/DEBUG) */
                    699: #endif
                    700: 
                    701:                        mtmsr   r12                                                                             /* Smash the MSR */
                    702:                        isync                                                                                   /* Make it clean */
                    703: 
                    704:                        
                    705: #if SIMPLESCC && !NOTQUITEASSIMPLE
                    706:                        ori             r10,r10,0x3010                                                  /* Assume the printer (this is the normal one) */
                    707: #else
                    708:                        ori             r10,r10,0x2000                                                  /* Assume the printer (this is the normal one) */
                    709: #endif
                    710:                        beq+    dbgDprintr                                                              /* It sure are... */
                    711: #if SIMPLESCC && !NOTQUITEASSIMPLE
                    712:                        ori             r10,r10,0x0020                                                  /* Move it over to the modem port */
                    713: #else
                    714:                        ori             r10,r10,0x0002                                                  /* Move it over to the modem port */
                    715: 
                    716: #if !NOTQUITEASSIMPLE
                    717:                        lis             r7,0xF300                                                               /* Address of SCC rounded to 128k */
                    718:                        ori             r7,r7,0x0032                                                    /* Make it cache inhibited */
                    719:                        mtdbatl 3,r7                                                                    /* Load DBAT 3 low */
                    720:                        lis             r7,0xF300                                                               /* Address of SCC rounded to 128k */
                    721:                        ori             r7,r7,0x0002                                                    /* Make it supervisor only */
                    722:                        mtdbatu 3,r7                                                                    /* Load DBAT 3 high */
                    723:                        ori             r12,r12,0x0010                                                  /* Turn on DR */
                    724:                        mtmsr   r12                                                                             /* Smash the MSR */
                    725:                        isync                                                                                   /* Make it clean */
                    726: 
                    727: #endif
                    728: #endif
                    729:                        
                    730: dbgDprintr:    sync
                    731: #if 0
                    732:                        mr              r7,r10                                                                  /* (TEST/DEBUG) */
                    733:                        bl              dumpr7                                                                  /* (TEST/DEBUG) */
                    734: #endif
                    735:                        
                    736:                        dcbi    0,r10                                                                   /* Toss it */
                    737:                        eieio
                    738:                        
                    739: #if 0
                    740:                        lis             r12,0xF301                      /* (TEST/DEBUG) */
                    741:                        ori             r12,r12,0x2002          /* (TEST/DEBUG) */
                    742:                        dcbf    0,r12                           /* (TEST/DEBUG) */
                    743:                        sync                                            /* (TEST/DEBUG) */
                    744:                        dcbi    0,r12                           /* (TEST/DEBUG) */
                    745:                        eieio                                           /* (TEST/DEBUG) */
                    746:                        li              r7,0x37                         /* (TEST/DEBUG) */
                    747:                        stb             r7,4(r12)                       /* (TEST/DEBUG) */
                    748:                        
                    749:                        lis             r7,12                           /* (TEST/DEBUG) */
                    750: spw8:          addi    r7,r7,-1                        /* (TEST/DEBUG) */
                    751:                        mr.             r7,r7                           /* (TEST/DEBUG) */
                    752:                        bne-    spw8                            /* (TEST/DEBUG) */
                    753:                        dcbf    0,r12                           /* (TEST/DEBUG) */
                    754:                        sync                                            /* (TEST/DEBUG) */
                    755:                        dcbi    0,r12                           /* (TEST/DEBUG) */
                    756:                        eieio                                           /* (TEST/DEBUG) */
                    757: #endif
                    758: 
                    759: 
                    760: /*                     Print the ID parameter                                                  */
                    761:                        
                    762:                        lis             r12,HIGH_ADDR(fwdisplock)                               /* Get the display locker outer */
                    763:                        ori             r12,r12,LOW_ADDR(fwdisplock)                    /* Last part */
                    764:                        
                    765:                        lwarx   r7,0,r12                                                                ; ?
                    766: 
                    767: ddwait0:       lwarx   r7,0,r12                                                                /* Get the lock */
                    768:                        mr.             r7,r7                                                                   /* Is it locked? */
                    769:                        bne-    ddwait0                                                                 /* Yup... */
                    770:                        stwcx.  r12,0,r12                                                               /* Try to get it */
                    771:                        bne-    ddwait0                                                                 /* Nope, start all over... */
                    772: 
                    773: #if 0
                    774:                        dcbf    0,r10                           /* (TEST/DEBUG) */
                    775:                        sync                                            /* (TEST/DEBUG) */
                    776:                        dcbi    0,r10                           /* (TEST/DEBUG) */
                    777:                        eieio                                           /* (TEST/DEBUG) */
                    778:                        li              r7,0x38                         /* (TEST/DEBUG) */
                    779:                        stb             r7,6(r10)                       /* (TEST/DEBUG) */
                    780:                        
                    781:                        lis             r7,10                           /* (TEST/DEBUG) */
                    782: spwa:          addi    r7,r7,-1                        /* (TEST/DEBUG) */
                    783:                        mr.             r7,r7                           /* (TEST/DEBUG) */
                    784:                        bne-    spwa                            /* (TEST/DEBUG) */
                    785:                        dcbf    0,r10                           /* (TEST/DEBUG) */
                    786:                        sync                                            /* (TEST/DEBUG) */
                    787:                        dcbi    0,r10                           /* (TEST/DEBUG) */
                    788:                        eieio                                           /* (TEST/DEBUG) */
                    789: #endif
                    790:                        
                    791:                        rlwinm  r3,r3,8,0,31                                                    /* Get the first character */
                    792:                        bl              dbgDchar                                                                /* Print it */
                    793:                        rlwinm  r3,r3,8,0,31                                                    /* Get the second character */
                    794:                        bl              dbgDchar                                                                /* Print it */
                    795:                        rlwinm  r3,r3,8,0,31                                                    /* Get the third character */
                    796:                        bl              dbgDchar                                                                /* Print it */
                    797:                        rlwinm  r3,r3,8,0,31                                                    /* Get the fourth character */
                    798:                        bl              dbgDchar                                                                /* Print it */
                    799:                        
                    800:                        li              r3,0x20                                                                 /* Get a space for a separator */
                    801:                        bl              dbgDchar                                                                /* Print it */
                    802:                        bl              dbg4byte                                                                /* Print register 5 in hex */                   
                    803: 
                    804:                        li              r3,0x0A                                                                 /* Linefeed */
                    805:                        bl              dbgDchar                                                                /* Send it */
                    806:                        li              r3,0x0D                                                                 /* Carriage return */
                    807:                        bl              dbgDchar                                                                /* Send it */
                    808:                        
                    809:                        mtlr    r11                                                                             /* Get back the return */
                    810: #if !SIMPLESCC && !NOTQUITEASSIMPLE
                    811:                        li              r7,0                                                                    /* Get a zero */
                    812:                        mtdbatu 3,r7                                                                    /* Invalidate DBAT 3 upper */
                    813:                        mtdbatl 3,r7                                                                    /* Invalidate DBAT 3 lower */
                    814: #endif
                    815:                        lis             r12,HIGH_ADDR(fwdisplock)                               /* Get the display locker outer */
                    816:                        li              r7,0                                                                    /* Get a zero */
                    817:                        ori             r12,r12,LOW_ADDR(fwdisplock)                    /* Last part */
                    818:                        dcbi    0,r10                                                                   /* ? */
                    819:                        stw             r7,0(r12)                                                               /* Release the display lock */
                    820:                        mtmsr   r8                                                                              /* Restore the MSR */
                    821:                        isync                                                                                   /* Wait for it */
                    822:                        blr                                                                                             /* Leave... */
                    823:                        
                    824: 
                    825: dbg4byte:      mflr    r12                                                                             /* Save the return */
                    826: 
                    827:                        lis             r4,HIGH_ADDR(hexTab)                                    /* Point to the top of table */
                    828:                        li              r6,8                                                                    /* Set number of hex digits to dump */
                    829:                        ori             r4,r4,LOW_ADDR(hexTab)                                  /* Point to the bottom of table */
                    830:                                                
                    831: dbgDnext:      rlwinm  r5,r5,4,0,31                                                    /* Rotate a nybble */
                    832:                        subi    r6,r6,1                                                                 /* Back down the count */
                    833:                        rlwinm  r3,r5,0,28,31                                                   /* Isolate the last nybble */
                    834:                        lbzx    r3,r4,r3                                                                /* Convert to ascii */
                    835:                        bl              dbgDchar                                                                /* Print it */
                    836:                        mr.             r6,r6                                                                   /* Any more? */
                    837:                        bne+    dbgDnext                                                                /* Convert 'em all... */
                    838: 
                    839:                        li              r3,0x20                                                                 /* Space */
                    840:                        bl              dbgDchar                                                                /* Send it */
                    841:                        mtlr    r12                                                                             /* Restore LR */
                    842:                        blr                                                                                             /* Return... */
                    843:                        
                    844: /*                     Write to whichever serial port.  Try to leave it clean, but not too hard (this is a hack) */
                    845:                        
                    846: dbgDchar:      
                    847: #if SIMPLESCC && !NOTQUITEASSIMPLE             
                    848:                        stb             r3,0(r10)                                                               /* ? */
                    849:                        dcbf    0,r10                                                                   /* Force it out */
                    850:                        sync                                                                                    /* Make sure it's out there */
                    851: 
                    852:                        lis             r7,3                                                                    /* Get enough for about 1ms */
                    853: 
                    854: dbgDchar0:     addi    r7,r7,-1                                                                /* Count down */
                    855:                        mr.             r7,r7                                                                   /* Waited long enough? */
                    856:                        bgt+    dbgDchar0                                                               /* Nope... */
                    857: #endif
                    858: #if NOTQUITEASSIMPLE
                    859: #if 0
                    860:                        li              r7,0x01                                                                 /* ? */
                    861:                        stb             r7,0(r10)                                                               /* ? */
                    862:                        dcbf    0,r10                                                                   /* Force it out */
                    863:                        sync                                                                                    /* Make sure it's out there */
                    864:                        dcbi    0,r10
                    865:                        eieio
                    866: 
                    867:                        lbz             r7,0(r10)                                                               /* ? */
                    868:                        dcbi    0,r10                                                                   /* Force it out */
                    869:                        sync                                                                                    /* kill it off */
                    870:                        eieio
                    871: 
                    872:                        li              r7,0x00                                                                 /* ? */
                    873:                        stb             r7,0(r10)                                                               /* ? */
                    874:                        dcbf    0,r10                                                                   /* Force it out */
                    875:                        sync                                                                                    /* Make sure it's out there */
                    876:                        dcbi    0,r10
                    877:                        eieio
                    878: 
                    879:                        lbz             r7,0(r10)                                                               /* ? */
                    880:                        dcbi    0,r10                                                                   /* Force it out */
                    881:                        sync                                                                                    /* kill it off */
                    882:                        eieio
                    883: #endif
                    884:                
                    885: qrw1:          eieio                                                                                   /* Barricade it */
                    886:                        lbz             r7,0(r10)                                                               /* ? */
                    887:                        dcbi    0,r10
                    888:                        sync
                    889:                        andi.   r7,r7,0x04                                                              /* ? */
                    890:                        beq             qrw1                                                                    /* Nope... */
                    891: 
                    892:                        eieio
                    893: 
                    894:                        stb             r3,4(r10)                                                               /* ? */
                    895:                        dcbf    0,r10                                                                   /* Force it out */
                    896:                        sync                                                                                    /* Make sure it's out there */
                    897:                        dcbi    0,r10
                    898:                        eieio
                    899: 
                    900: qrw2:          eieio                                                                                   /* Barricade it */
                    901:                        lbz             r7,0(r10)                                                               /* ? */
                    902:                        dcbi    0,r10
                    903:                        sync
                    904:                        andi.   r7,r7,0x04                                                              /* ? */
                    905:                        beq             qrw2                                                                    /* Nope... */
                    906: 
                    907: #if 0
                    908:                        eieio
                    909:                        li              r7,0x10                                                                 /* ? */
                    910:                        stb             r7,0(r10)                                                               /* ? */
                    911:                        dcbf    0,r10                                                                   /* Force it out */
                    912:                        sync                                                                                    /* Make sure it's out there */
                    913:                        dcbi    0,r10
                    914:                        eieio
                    915: 
                    916:                        lbz             r7,0(r10)                                                               /* ? */
                    917:                        dcbi    0,r10                                                                   /* Force it out */
                    918:                        sync                                                                                    /* kill it off */
                    919:                        eieio
                    920: #endif         
                    921:                        
                    922:                        lis             r7,0x0080                                                               /* ? */
                    923:                        lis             r9,0xF300                                                               /* ? */
                    924:                        ori             r7,r7,0x010F                                                    /* ? */
                    925:                        stw             r7,0x28(r9)                                                             /* ? */
                    926:                        dcbf    0,r10                                                                   /* Force it out */
                    927:                        sync                                                                                    /* Make sure it's out there */
                    928:                        dcbi    0,r10
                    929:                        eieio
                    930:                        
                    931: #endif
                    932: #if !SIMPLESCC && !NOTQUITEASSIMPLE
                    933:                        rlwinm  r9,r10,0,0,29                                                   /* Get channel a */
                    934:                        eieio                                                                                   /* Barricade it */
                    935:                
                    936:                        li              r7,0x03                                                                 /* ? */
                    937:                        stb             r7,0(r9)                                                                /* ? */
                    938:                        eieio                                                                                   /* Barricade it */
                    939: 
                    940:                        lbz             r7,0(r9)                                                                /* ? */
                    941:                
                    942:                        eieio                                                                                   /* Barricade it */
                    943:                        lbz             r7,0(r9)                                                                /* ? */
                    944:                        
                    945: dchrw1:                eieio                                                                                   /* Barricade it */
                    946:                        lbz             r7,0(r10)                                                               /* ? */
                    947:                        andi.   r7,r7,0x04                                                              /* ? */
                    948:                        beq             dchrw1                                                                  /* Nope... */
                    949:                        
                    950:                        stb             r3,4(r10)                                                               /* ? */
                    951:                        sync                                                                                    /* Make sure it's there */
                    952:                        eieio                                                                                   /* Don't get confused */
                    953: 
                    954: dchrw2:                eieio                                                                                   /* Barricade it */
                    955:                        lbz             r7,0(r10)                                                               /* ? */
                    956:                        andi.   r7,r7,0x04                                                              /* ? */
                    957:                        beq             dchrw2                                                                  /* Nope... */
                    958:        
                    959:                        eieio                                                                                   /* Avoid confusion */
                    960:                        lbz             r7,0(r10)                                                               /* ? */
                    961:                        andi.   r7,r7,0x40                                                              /* ? */
                    962:                        beq+    nounder                                                                 /* Nope... */
                    963: 
                    964:                        eieio                                                                                   /* Avoid confusion */
                    965:                        li              r7,0xC0                                                                 /* ? */
                    966:                        stb             r7,0(r10)                                                               /* ? */
                    967: 
                    968: nounder:       eieio                                                                                   /* Avoid confusion */
                    969:                        li              r7,0x10                                                                 /* ? */
                    970:                        stb             r7,0(r10)                                                               /* ? */
                    971: 
                    972:                        eieio                                                                                   /* Avoid confusion */
                    973:                        li              r7,0x38                                                                 /* ? */
                    974:                        stb             r7,0(r9)                                                                /* ? */
                    975:                
                    976:                        eieio                                                                                   /* Avoid confusion */
                    977:                        li              r7,0x30                                                                 /* ? */
                    978:                        stb             r7,0(r10)                                                               /* ? */
                    979: 
                    980:                        eieio                                                                                   /* Avoid confusion */
                    981:                        li              r7,0x20                                                                 /* ? */
                    982:                        stb             r7,0(r10)                                                               /* ? */
                    983:                        eieio                                                                                   /* Avoid confusion */
                    984:                        sync
                    985: 
                    986: #endif
                    987:                        blr                                                                                             /* Return */
                    988: 
                    989:                        .globl hexTab
                    990: 
                    991: #ifdef __ELF__
                    992:                        .type  hexTab,@object
                    993: #endif
                    994:                                                                
                    995: hexTab:                STRINGD "0123456789ABCDEF"                                              /* Convert hex numbers to printable hex */                      
                    996:                        
                    997: 
                    998: /*
                    999:  *                     Dumps all the registers in the savearea in R13
                   1000:  */
                   1001:  
                   1002: 
                   1003: ENTRY(dbgRegsLL, TAG_NO_FRAME_USED)
                   1004: 
                   1005:                        li              r3,0                                                                    /* ? */
                   1006:                        bl              dbgRegsCm                                                               /* Join on up... */
                   1007: 
                   1008: /*
                   1009:  *                     Note that we bypass the normal return 'cause we don't wanna mess up R3
                   1010:  */
                   1011:                        mfsprg  r11,0                                                                   /* Get the per_proc */
                   1012:                        lwz             r11,PP_TEMPWORK1(r11)                                   /* Get our return point */
                   1013:                        li              r3,T_IN_VAIN                                                    /* Tell the vector handler that we took care of it */
                   1014:                        mtlr    r11                                                                             /* Set the return */
                   1015:                        blr                                                                                             /* Bye, dudes... */
                   1016:                        
                   1017: ENTRY(dbgRegs, TAG_NO_FRAME_USED)
                   1018: 
                   1019: dbgRegsCm:     mfmsr   r8                                                                              /* Save the MSR */
                   1020:                        mr.             r3,r3                                                                   /* ? */
                   1021:                        rlwinm  r12,r8,0,28,25                                                  /* Turn off translation */
                   1022:                        lis             r10,0xF301                                                              /* Set the top part */
                   1023:                        rlwinm  r12,r12,0,17,15                                                 /* Turn off interruptions */
                   1024:                        mtmsr   r12                                                                             /* Smash the MSR */
                   1025:                        isync                                                                                   /* Make it clean */
                   1026: #if SIMPLESCC && !NOTQUITEASSIMPLE
                   1027:                        ori             r10,r10,0x3010                                                  /* ? */
                   1028: #else
                   1029:                        ori             r10,r10,0x2000                                                  /* ? */
                   1030: #endif
                   1031:                        mflr    r11                                                                             /* Save the link register */
                   1032:                        beq+    dbgDprints                                                              /* It sure are... */
                   1033: #if SIMPLESCC && !NOTQUITEASSIMPLE
                   1034:                        ori             r10,r10,0x0020                                                  /* ? */
                   1035: #else
                   1036:                        ori             r10,r10,0x0002                                                  /* ? */
                   1037: 
                   1038:                        dcbf    0,r10                                                                   /* Insure it is out */
                   1039:                        sync
                   1040:                        dcbi    0,r10                                                                   /* Toss it */
                   1041: #if !NOTQUITEASSIMPLE
                   1042:                        lis             r7,0xF300                                                               /* ? */
                   1043:                        ori             r7,r7,0x0032                                                    /* ? */
                   1044:                        mtdbatl 3,r7                                                                    /* ? */
                   1045:                        lis             r7,0xF300                                                               /* ? */
                   1046:                        ori             r7,r7,0x0002                                                    /* ? */
                   1047:                        mtdbatu 3,r7                                                                    /* ? */
                   1048:                        ori             r12,r12,0x0010                                                  /* ? */
                   1049:                        mtmsr   r12                                                                             /* ? */
                   1050:                        isync                                                                                   /* ? */
                   1051: #endif
                   1052: #endif
                   1053: 
                   1054: dbgDprints:    
                   1055:                        lis             r3,HIGH_ADDR(fwdisplock)                                /* Get the display locker outer */
                   1056:                        ori             r3,r3,LOW_ADDR(fwdisplock)                              /* Last part */
                   1057:                        
                   1058:                        lwarx   r5,0,r3                                                                 ; ?
                   1059: ddwait1:       lwarx   r5,0,r3                                                                 /* Get the lock */
                   1060:                        mr.             r5,r5                                                                   /* Is it locked? */
                   1061:                        bne-    ddwait1                                                                 /* Yup... */
                   1062:                        stwcx.  r3,0,r3                                                                 /* Try to get it */
                   1063:                        bne-    ddwait1                                                                 /* Nope, start all over... */
                   1064:                        
                   1065:                        li              r3,0x52                                                                 /* Print eyecatcher */
                   1066:                        bl              dbgDchar                                                                /* Send it */
                   1067:                        li              r3,0x65                                                                 /* Print eyecatcher */
                   1068:                        bl              dbgDchar                                                                /* Send it */
                   1069:                        li              r3,0x67                                                                 /* Print eyecatcher */
                   1070:                        bl              dbgDchar                                                                /* Send it */
                   1071:                        li              r3,0x73                                                                 /* Print eyecatcher */
                   1072:                        bl              dbgDchar                                                                /* Send it */
                   1073:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1074:                        bl              dbgDchar                                                                /* Send it */
                   1075: 
                   1076:                        lwz             r5,saver0(r13)                                                  /* Do register */
                   1077:                        bl              dbg4byte                                                                /* Print */                     
                   1078:                        lwz             r5,saver1(r13)                                                  /* Do register */
                   1079:                        bl              dbg4byte                                                                /* Print */                     
                   1080:                        lwz             r5,saver2(r13)                                                  /* Do register */
                   1081:                        bl              dbg4byte                                                                /* Print */                     
                   1082:                        lwz             r5,saver3(r13)                                                  /* Do register */
                   1083:                        bl              dbg4byte                                                                /* Print */                     
                   1084:                        li              r3,0x0A                                                                 /* Linefeed */
                   1085:                        bl              dbgDchar                                                                /* Send it */
                   1086:                        li              r3,0x0D                                                                 /* Carriage return */
                   1087:                        bl              dbgDchar                                                                /* Send it */
                   1088: 
                   1089:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1090:                        bl              dbgDchar                                                                /* Send it */
                   1091:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1092:                        bl              dbgDchar                                                                /* Send it */
                   1093:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1094:                        bl              dbgDchar                                                                /* Send it */
                   1095:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1096:                        bl              dbgDchar                                                                /* Send it */
                   1097:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1098:                        bl              dbgDchar                                                                /* Send it */
                   1099:                        lwz             r5,saver4(r13)                                                  /* Do register */
                   1100:                        bl              dbg4byte                                                                /* Print */                     
                   1101:                        lwz             r5,saver5(r13)                                                  /* Do register */
                   1102:                        bl              dbg4byte                                                                /* Print */                     
                   1103:                        lwz             r5,saver6(r13)                                                  /* Do register */
                   1104:                        bl              dbg4byte                                                                /* Print */                     
                   1105:                        lwz             r5,saver7(r13)                                                  /* Do register */
                   1106:                        bl              dbg4byte                                                                /* Print */                     
                   1107:                        li              r3,0x0A                                                                 /* Linefeed */
                   1108:                        bl              dbgDchar                                                                /* Send it */
                   1109:                        li              r3,0x0D                                                                 /* Carriage return */
                   1110:                        bl              dbgDchar                                                                /* Send it */
                   1111: 
                   1112:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1113:                        bl              dbgDchar                                                                /* Send it */
                   1114:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1115:                        bl              dbgDchar                                                                /* Send it */
                   1116:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1117:                        bl              dbgDchar                                                                /* Send it */
                   1118:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1119:                        bl              dbgDchar                                                                /* Send it */
                   1120:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1121:                        bl              dbgDchar                                                                /* Send it */
                   1122:                        lwz             r5,saver8(r13)                                                  /* Do register */
                   1123:                        bl              dbg4byte                                                                /* Print */                     
                   1124:                        lwz             r5,saver9(r13)                                                  /* Do register */
                   1125:                        bl              dbg4byte                                                                /* Print */                     
                   1126:                        lwz             r5,saver10(r13)                                                 /* Do register */
                   1127:                        bl              dbg4byte                                                                /* Print */                     
                   1128:                        lwz             r5,saver11(r13)                                                 /* Do register */
                   1129:                        bl              dbg4byte                                                                /* Print */                     
                   1130:                        li              r3,0x0A                                                                 /* Linefeed */
                   1131:                        bl              dbgDchar                                                                /* Send it */
                   1132:                        li              r3,0x0D                                                                 /* Carriage return */
                   1133:                        bl              dbgDchar                                                                /* Send it */
                   1134: 
                   1135:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1136:                        bl              dbgDchar                                                                /* Send it */
                   1137:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1138:                        bl              dbgDchar                                                                /* Send it */
                   1139:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1140:                        bl              dbgDchar                                                                /* Send it */
                   1141:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1142:                        bl              dbgDchar                                                                /* Send it */
                   1143:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1144:                        bl              dbgDchar                                                                /* Send it */
                   1145:                        lwz             r5,saver12(r13)                                                 /* Do register */
                   1146:                        bl              dbg4byte                                                                /* Print */                     
                   1147:                        lwz             r5,saver13(r13)                                                 /* Do register */
                   1148:                        bl              dbg4byte                                                                /* Print */                     
                   1149:                        lwz             r5,saver14(r13)                                                 /* Do register */
                   1150:                        bl              dbg4byte                                                                /* Print */                     
                   1151:                        lwz             r5,saver15(r13)                                                 /* Do register */
                   1152:                        bl              dbg4byte                                                                /* Print */                     
                   1153:                        li              r3,0x0A                                                                 /* Linefeed */
                   1154:                        bl              dbgDchar                                                                /* Send it */
                   1155:                        li              r3,0x0D                                                                 /* Carriage return */
                   1156:                        bl              dbgDchar                                                                /* Send it */
                   1157: 
                   1158:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1159:                        bl              dbgDchar                                                                /* Send it */
                   1160:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1161:                        bl              dbgDchar                                                                /* Send it */
                   1162:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1163:                        bl              dbgDchar                                                                /* Send it */
                   1164:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1165:                        bl              dbgDchar                                                                /* Send it */
                   1166:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1167:                        bl              dbgDchar                                                                /* Send it */
                   1168:                        lwz             r5,saver16(r13)                                                 /* Do register */
                   1169:                        bl              dbg4byte                                                                /* Print */                     
                   1170:                        lwz             r5,saver17(r13)                                                 /* Do register */
                   1171:                        bl              dbg4byte                                                                /* Print */                     
                   1172:                        lwz             r5,saver18(r13)                                                 /* Do register */
                   1173:                        bl              dbg4byte                                                                /* Print */                     
                   1174:                        lwz             r5,saver19(r13)                                                 /* Do register */
                   1175:                        bl              dbg4byte                                                                /* Print */                     
                   1176:                        li              r3,0x0A                                                                 /* Linefeed */
                   1177:                        bl              dbgDchar                                                                /* Send it */
                   1178:                        li              r3,0x0D                                                                 /* Carriage return */
                   1179:                        bl              dbgDchar                                                                /* Send it */
                   1180: 
                   1181:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1182:                        bl              dbgDchar                                                                /* Send it */
                   1183:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1184:                        bl              dbgDchar                                                                /* Send it */
                   1185:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1186:                        bl              dbgDchar                                                                /* Send it */
                   1187:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1188:                        bl              dbgDchar                                                                /* Send it */
                   1189:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1190:                        bl              dbgDchar                                                                /* Send it */
                   1191:                        lwz             r5,saver20(r13)                                                 /* Do register */
                   1192:                        bl              dbg4byte                                                                /* Print */                     
                   1193:                        lwz             r5,saver21(r13)                                                 /* Do register */
                   1194:                        bl              dbg4byte                                                                /* Print */                     
                   1195:                        lwz             r5,saver22(r13)                                                 /* Do register */
                   1196:                        bl              dbg4byte                                                                /* Print */                     
                   1197:                        lwz             r5,saver23(r13)                                                 /* Do register */
                   1198:                        bl              dbg4byte                                                                /* Print */                     
                   1199:                        li              r3,0x0A                                                                 /* Linefeed */
                   1200:                        bl              dbgDchar                                                                /* Send it */
                   1201:                        li              r3,0x0D                                                                 /* Carriage return */
                   1202:                        bl              dbgDchar                                                                /* Send it */
                   1203: 
                   1204:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1205:                        bl              dbgDchar                                                                /* Send it */
                   1206:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1207:                        bl              dbgDchar                                                                /* Send it */
                   1208:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1209:                        bl              dbgDchar                                                                /* Send it */
                   1210:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1211:                        bl              dbgDchar                                                                /* Send it */
                   1212:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1213:                        bl              dbgDchar                                                                /* Send it */
                   1214:                        lwz             r5,saver24(r13)                                                 /* Do register */
                   1215:                        bl              dbg4byte                                                                /* Print */                     
                   1216:                        lwz             r5,saver25(r13)                                                 /* Do register */
                   1217:                        bl              dbg4byte                                                                /* Print */                     
                   1218:                        lwz             r5,saver26(r13)                                                 /* Do register */
                   1219:                        bl              dbg4byte                                                                /* Print */                     
                   1220:                        lwz             r5,saver27(r13)                                                 /* Do register */
                   1221:                        bl              dbg4byte                                                                /* Print */                     
                   1222:                        li              r3,0x0A                                                                 /* Linefeed */
                   1223:                        bl              dbgDchar                                                                /* Send it */
                   1224:                        li              r3,0x0D                                                                 /* Carriage return */
                   1225:                        bl              dbgDchar                                                                /* Send it */
                   1226: 
                   1227:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1228:                        bl              dbgDchar                                                                /* Send it */
                   1229:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1230:                        bl              dbgDchar                                                                /* Send it */
                   1231:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1232:                        bl              dbgDchar                                                                /* Send it */
                   1233:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1234:                        bl              dbgDchar                                                                /* Send it */
                   1235:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1236:                        bl              dbgDchar                                                                /* Send it */
                   1237:                        lwz             r5,saver28(r13)                                                 /* Do register */
                   1238:                        bl              dbg4byte                                                                /* Print */                     
                   1239:                        lwz             r5,saver29(r13)                                                 /* Do register */
                   1240:                        bl              dbg4byte                                                                /* Print */                     
                   1241:                        lwz             r5,saver30(r13)                                                 /* Do register */
                   1242:                        bl              dbg4byte                                                                /* Print */                     
                   1243:                        lwz             r5,saver31(r13)                                                 /* Do register */
                   1244:                        bl              dbg4byte                                                                /* Print */                     
                   1245:                        li              r3,0x0A                                                                 /* Linefeed */
                   1246:                        bl              dbgDchar                                                                /* Send it */
                   1247:                        li              r3,0x0D                                                                 /* Carriage return */
                   1248:                        bl              dbgDchar                                                                /* Send it */
                   1249: 
                   1250: /*                     Segment registers */
                   1251: 
                   1252:                        li              r3,0x53                                                                 /* Print eyecatcher */
                   1253:                        bl              dbgDchar                                                                /* Send it */
                   1254:                        li              r3,0x65                                                                 /* Print eyecatcher */
                   1255:                        bl              dbgDchar                                                                /* Send it */
                   1256:                        li              r3,0x67                                                                 /* Print eyecatcher */
                   1257:                        bl              dbgDchar                                                                /* Send it */
                   1258:                        li              r3,0x73                                                                 /* Print eyecatcher */
                   1259:                        bl              dbgDchar                                                                /* Send it */
                   1260:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1261:                        bl              dbgDchar                                                                /* Send it */
                   1262: 
                   1263:                        lwz             r5,savesr0(r13)                                                 /* Do register */
                   1264:                        bl              dbg4byte                                                                /* Print */                     
                   1265:                        lwz             r5,savesr1(r13)                                                 /* Do register */
                   1266:                        bl              dbg4byte                                                                /* Print */                     
                   1267:                        lwz             r5,savesr2(r13)                                                 /* Do register */
                   1268:                        bl              dbg4byte                                                                /* Print */                     
                   1269:                        lwz             r5,savesr3(r13)                                                 /* Do register */
                   1270:                        bl              dbg4byte                                                                /* Print */                     
                   1271:                        li              r3,0x0A                                                                 /* Linefeed */
                   1272:                        bl              dbgDchar                                                                /* Send it */
                   1273:                        li              r3,0x0D                                                                 /* Carriage return */
                   1274:                        bl              dbgDchar                                                                /* Send it */
                   1275: 
                   1276:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1277:                        bl              dbgDchar                                                                /* Send it */
                   1278:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1279:                        bl              dbgDchar                                                                /* Send it */
                   1280:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1281:                        bl              dbgDchar                                                                /* Send it */
                   1282:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1283:                        bl              dbgDchar                                                                /* Send it */
                   1284:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1285:                        bl              dbgDchar                                                                /* Send it */
                   1286:                        lwz             r5,savesr4(r13)                                                 /* Do register */
                   1287:                        bl              dbg4byte                                                                /* Print */                     
                   1288:                        lwz             r5,savesr5(r13)                                                 /* Do register */
                   1289:                        bl              dbg4byte                                                                /* Print */                     
                   1290:                        lwz             r5,savesr6(r13)                                                 /* Do register */
                   1291:                        bl              dbg4byte                                                                /* Print */                     
                   1292:                        lwz             r5,savesr7(r13)                                                 /* Do register */
                   1293:                        bl              dbg4byte                                                                /* Print */                     
                   1294:                        li              r3,0x0A                                                                 /* Linefeed */
                   1295:                        bl              dbgDchar                                                                /* Send it */
                   1296:                        li              r3,0x0D                                                                 /* Carriage return */
                   1297:                        bl              dbgDchar                                                                /* Send it */
                   1298: 
                   1299:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1300:                        bl              dbgDchar                                                                /* Send it */
                   1301:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1302:                        bl              dbgDchar                                                                /* Send it */
                   1303:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1304:                        bl              dbgDchar                                                                /* Send it */
                   1305:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1306:                        bl              dbgDchar                                                                /* Send it */
                   1307:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1308:                        bl              dbgDchar                                                                /* Send it */
                   1309:                        lwz             r5,savesr8(r13)                                                 /* Do register */
                   1310:                        bl              dbg4byte                                                                /* Print */                     
                   1311:                        lwz             r5,savesr9(r13)                                                 /* Do register */
                   1312:                        bl              dbg4byte                                                                /* Print */                     
                   1313:                        lwz             r5,savesr10(r13)                                                /* Do register */
                   1314:                        bl              dbg4byte                                                                /* Print */                     
                   1315:                        lwz             r5,savesr11(r13)                                                /* Do register */
                   1316:                        bl              dbg4byte                                                                /* Print */                     
                   1317:                        li              r3,0x0A                                                                 /* Linefeed */
                   1318:                        bl              dbgDchar                                                                /* Send it */
                   1319:                        li              r3,0x0D                                                                 /* Carriage return */
                   1320:                        bl              dbgDchar                                                                /* Send it */
                   1321: 
                   1322:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1323:                        bl              dbgDchar                                                                /* Send it */
                   1324:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1325:                        bl              dbgDchar                                                                /* Send it */
                   1326:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1327:                        bl              dbgDchar                                                                /* Send it */
                   1328:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1329:                        bl              dbgDchar                                                                /* Send it */
                   1330:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1331:                        bl              dbgDchar                                                                /* Send it */
                   1332:                        lwz             r5,savesr12(r13)                                                /* Do register */
                   1333:                        bl              dbg4byte                                                                /* Print */                     
                   1334:                        lwz             r5,savesr13(r13)                                                /* Do register */
                   1335:                        bl              dbg4byte                                                                /* Print */                     
                   1336:                        lwz             r5,savesr14(r13)                                                /* Do register */
                   1337:                        bl              dbg4byte                                                                /* Print */                     
                   1338:                        lwz             r5,savesr15(r13)                                                /* Do register */
                   1339:                        bl              dbg4byte                                                                /* Print */                     
                   1340:                        li              r3,0x0A                                                                 /* Linefeed */
                   1341:                        bl              dbgDchar                                                                /* Send it */
                   1342:                        li              r3,0x0D                                                                 /* Carriage return */
                   1343:                        bl              dbgDchar                                                                /* Send it */
                   1344:                        
                   1345:                        li              r3,0x30                                                                 /* Print eyecatcher */
                   1346:                        bl              dbgDchar                                                                /* Send it */
                   1347:                        li              r3,0x31                                                                 /* Print eyecatcher */
                   1348:                        bl              dbgDchar                                                                /* Send it */
                   1349:                        li              r3,0x64                                                                 /* Print eyecatcher */
                   1350:                        bl              dbgDchar                                                                /* Send it */
                   1351:                        li              r3,0x64                                                                 /* Print eyecatcher */
                   1352:                        bl              dbgDchar                                                                /* Send it */
                   1353:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1354:                        bl              dbgDchar                                                                /* Send it */
                   1355:                        lwz             r5,savesrr0(r13)                                                /* Do register */
                   1356:                        bl              dbg4byte                                                                /* Print */                     
                   1357:                        lwz             r5,savesrr1(r13)                                                /* Do register */
                   1358:                        bl              dbg4byte                                                                /* Print */                     
                   1359:                        lwz             r5,savedar(r13)                                                 /* Do register */
                   1360:                        bl              dbg4byte                                                                /* Print */                     
                   1361:                        lwz             r5,savedsisr(r13)                                               /* Do register */
                   1362:                        bl              dbg4byte                                                                /* Print */                     
                   1363:                        li              r3,0x0A                                                                 /* Linefeed */
                   1364:                        bl              dbgDchar                                                                /* Send it */
                   1365:                        li              r3,0x0D                                                                 /* Carriage return */
                   1366:                        bl              dbgDchar                                                                /* Send it */
                   1367:                        
                   1368:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1369:                        bl              dbgDchar                                                                /* Send it */
                   1370:                        li              r3,0x6C                                                                 /* Print eyecatcher */
                   1371:                        bl              dbgDchar                                                                /* Send it */
                   1372:                        li              r3,0x63                                                                 /* Print eyecatcher */
                   1373:                        bl              dbgDchar                                                                /* Send it */
                   1374:                        li              r3,0x63                                                                 /* Print eyecatcher */
                   1375:                        bl              dbgDchar                                                                /* Send it */
                   1376:                        li              r3,0x20                                                                 /* Print eyecatcher */
                   1377:                        bl              dbgDchar                                                                /* Send it */
                   1378:                        lwz             r5,savelr(r13)                                                  /* Do register */
                   1379:                        bl              dbg4byte                                                                /* Print */                     
                   1380:                        lwz             r5,savecr(r13)                                                  /* Do register */
                   1381:                        bl              dbg4byte                                                                /* Print */                     
                   1382:                        lwz             r5,savectr(r13)                                                 /* Do register */
                   1383:                        bl              dbg4byte                                                                /* Print */                     
                   1384:                        li              r3,0x0A                                                                 /* Linefeed */
                   1385:                        bl              dbgDchar                                                                /* Send it */
                   1386:                        li              r3,0x0D                                                                 /* Carriage return */
                   1387:                        bl              dbgDchar                                                                /* Send it */
                   1388:                        mtlr    r11                                                                             /* Get back the return */
                   1389:                        dcbi    0,r10                                                                   /* ? */
                   1390: #if !SIMPLESCC && !NOTQUITEASSIMPLE
                   1391:                        li              r7,0                                                                    /* Get a zero */
                   1392:                        mtdbatu 3,r7                                                                    /* Invalidate DBAT 3 upper */
                   1393:                        mtdbatl 3,r7                                                                    /* Invalidate DBAT 3 lower */
                   1394: #endif
                   1395:                        lis             r3,HIGH_ADDR(fwdisplock)                                /* Get the display locker outer */
                   1396:                        li              r7,0                                                                    /* Get a zero */
                   1397:                        ori             r3,r3,LOW_ADDR(fwdisplock)                              /* Last part */
                   1398:                        stw             r7,0(r3)                                                                /* Clear display lock */
                   1399:                        mtmsr   r8                                                                              /* Restore the MSR */
                   1400:                        isync                                                                                   /* Wait for it */
                   1401:                        blr                                                                                             /* Leave... */
                   1402:                        
                   1403:                        
                   1404: /*
                   1405:  *                     Used for debugging to leave stuff in 0x380-0x3FF (128 bytes).
                   1406:  *                     Mapping is V=R.  Stores and loads are real.
                   1407:  */
                   1408: 
                   1409: ENTRY(dbgCkpt, TAG_NO_FRAME_USED)
                   1410: 
                   1411:                        mr              r12,r0                                                                  /* Keep R0 pristene */
                   1412:                        lis             r0,HIGH_ADDR(dbgCkptCall)                               /* Top half of dbgCkptCall firmware call number */
                   1413:                        ori             r0,r0,LOW_ADDR(dbgCkptCall)                             /* Bottom half */
                   1414: 
                   1415:                        sc                                                                                              /* Go stash the stuff */
                   1416: 
                   1417:                        mr              r0,r12                                                                  /* Restore R0 */
                   1418:                        blr                                                                                             /* Return... */
                   1419:                        
                   1420: /*                     Here's the low-level part of dbgCkpt                    */
                   1421: 
                   1422: ENTRY(dbgCkptLL, TAG_NO_FRAME_USED)
                   1423: 
                   1424:                        li              r12,0x380                                                               /* Point to output area */
                   1425:                        li              r1,32                                                                   /* Get line size */
                   1426:                        dcbz    0,r12                                                                   /* Make sure we don't fetch a cache line */
                   1427: 
                   1428:                        lwz             r4,0x00(r3)                                                             /* Load up storage to checkpoint */
                   1429:                        
                   1430:                        dcbt    r1,r3                                                                   /* Start in the next line */
                   1431:                        
                   1432:                        lwz             r5,0x04(r3)                                                             /* Load up storage to checkpoint */
                   1433:                        lwz             r6,0x08(r3)                                                             /* Load up storage to checkpoint */
                   1434:                        lwz             r7,0x0C(r3)                                                             /* Load up storage to checkpoint */
                   1435:                        lwz             r8,0x10(r3)                                                             /* Load up storage to checkpoint */
                   1436:                        lwz             r9,0x14(r3)                                                             /* Load up storage to checkpoint */
                   1437:                        lwz             r10,0x18(r3)                                                    /* Load up storage to checkpoint */
                   1438:                        lwz             r11,0x1C(r3)                                                    /* Load up storage to checkpoint */
                   1439:                        
                   1440:                        add             r3,r3,r1                                                                /* Bump input */
                   1441:                        
                   1442:                        stw             r4,0x00(r12)                                                    /* Store it */
                   1443:                        stw             r5,0x04(r12)                                                    /* Store it */
                   1444:                        stw             r6,0x08(r12)                                                    /* Store it */
                   1445:                        stw             r7,0x0C(r12)                                                    /* Store it */
                   1446:                        stw             r8,0x10(r12)                                                    /* Store it */
                   1447:                        stw             r9,0x14(r12)                                                    /* Store it */
                   1448:                        stw             r10,0x18(r12)                                                   /* Store it */
                   1449:                        stw             r11,0x1C(r12)                                                   /* Store it */
                   1450:                        
                   1451:                        dcbz    r1,r12                                                                  /* Clear the next line */
                   1452:                        add             r12,r12,r1                                                              /* Point to next output line */
                   1453: 
                   1454:                        lwz             r4,0x00(r3)                                                             /* Load up storage to checkpoint */
                   1455:                        lwz             r5,0x04(r3)                                                             /* Load up storage to checkpoint */
                   1456:                        lwz             r6,0x08(r3)                                                             /* Load up storage to checkpoint */
                   1457:                        lwz             r7,0x0C(r3)                                                             /* Load up storage to checkpoint */
                   1458:                        lwz             r8,0x10(r3)                                                             /* Load up storage to checkpoint */
                   1459:                        lwz             r9,0x14(r3)                                                             /* Load up storage to checkpoint */
                   1460:                        lwz             r10,0x18(r3)                                                    /* Load up storage to checkpoint */
                   1461:                        lwz             r11,0x1C(r3)                                                    /* Load up storage to checkpoint */
                   1462:                        
                   1463:                        dcbt    r1,r3                                                                   /* Touch the next line */
                   1464:                        add             r3,r3,r1                                                                /* Point to next input line */
                   1465:                                
                   1466:                        stw             r4,0x00(r12)                                                    /* Store it */
                   1467:                        stw             r5,0x04(r12)                                                    /* Store it */
                   1468:                        stw             r6,0x08(r12)                                                    /* Store it */
                   1469:                        stw             r7,0x0C(r12)                                                    /* Store it */
                   1470:                        stw             r8,0x10(r12)                                                    /* Store it */
                   1471:                        stw             r9,0x14(r12)                                                    /* Store it */
                   1472:                        stw             r10,0x18(r12)                                                   /* Store it */
                   1473:                        stw             r11,0x1C(r12)                                                   /* Store it */
                   1474: 
                   1475:                        dcbz    r1,r12                                                                  /* Clear the next line */
                   1476:                        add             r12,r12,r1                                                              /* Point to next output line */
                   1477: 
                   1478:                        lwz             r4,0x00(r3)                                                             /* Load up storage to checkpoint */
                   1479:                        lwz             r5,0x04(r3)                                                             /* Load up storage to checkpoint */
                   1480:                        lwz             r6,0x08(r3)                                                             /* Load up storage to checkpoint */
                   1481:                        lwz             r7,0x0C(r3)                                                             /* Load up storage to checkpoint */
                   1482:                        lwz             r8,0x10(r3)                                                             /* Load up storage to checkpoint */
                   1483:                        lwz             r9,0x14(r3)                                                             /* Load up storage to checkpoint */
                   1484:                        lwz             r10,0x18(r3)                                                    /* Load up storage to checkpoint */
                   1485:                        lwz             r11,0x1C(r3)                                                    /* Load up storage to checkpoint */
                   1486:                        
                   1487:                        dcbt    r1,r3                                                                   /* Touch the next line */
                   1488:                        add             r3,r3,r1                                                                /* Point to next input line */
                   1489:                                
                   1490:                        stw             r4,0x00(r12)                                                    /* Store it */
                   1491:                        stw             r5,0x04(r12)                                                    /* Store it */
                   1492:                        stw             r6,0x08(r12)                                                    /* Store it */
                   1493:                        stw             r7,0x0C(r12)                                                    /* Store it */
                   1494:                        stw             r8,0x10(r12)                                                    /* Store it */
                   1495:                        stw             r9,0x14(r12)                                                    /* Store it */
                   1496:                        stw             r10,0x18(r12)                                                   /* Store it */
                   1497:                        stw             r11,0x1C(r12)                                                   /* Store it */
                   1498: 
                   1499:                        dcbz    r1,r12                                                                  /* Clear the next line */
                   1500:                        add             r12,r12,r1                                                              /* Point to next output line */
                   1501: 
                   1502:                        lwz             r4,0x00(r3)                                                             /* Load up storage to checkpoint */
                   1503:                        lwz             r5,0x04(r3)                                                             /* Load up storage to checkpoint */
                   1504:                        lwz             r6,0x08(r3)                                                             /* Load up storage to checkpoint */
                   1505:                        lwz             r7,0x0C(r3)                                                             /* Load up storage to checkpoint */
                   1506:                        lwz             r8,0x10(r3)                                                             /* Load up storage to checkpoint */
                   1507:                        lwz             r9,0x14(r3)                                                             /* Load up storage to checkpoint */
                   1508:                        lwz             r10,0x18(r3)                                                    /* Load up storage to checkpoint */
                   1509:                        lwz             r11,0x1C(r3)                                                    /* Load up storage to checkpoint */
                   1510:                        
                   1511:                        stw             r4,0x00(r12)                                                    /* Store it */
                   1512:                        stw             r5,0x04(r12)                                                    /* Store it */
                   1513:                        stw             r6,0x08(r12)                                                    /* Store it */
                   1514:                        stw             r7,0x0C(r12)                                                    /* Store it */
                   1515:                        stw             r8,0x10(r12)                                                    /* Store it */
                   1516:                        stw             r9,0x14(r12)                                                    /* Store it */
                   1517:                        stw             r10,0x18(r12)                                                   /* Store it */
                   1518:                        stw             r11,0x1C(r12)                                                   /* Store it */
                   1519:                        
                   1520:                        blr
                   1521: 
                   1522:                        
                   1523: /*
                   1524:  *                     Do Preemption.  Forces a T_PREEMPT trap to allow a preemption to occur.
                   1525:  */
                   1526: 
                   1527: ENTRY(DoPreemptLL, TAG_NO_FRAME_USED)
                   1528: 
                   1529:                        mfsprg  r11,0                                                   /* Get the per_proc address */
                   1530:                        lwz             r11,PP_TEMPWORK1(r11)                   /* Restore the return address */
                   1531:                        li              r3,T_PREEMPT                                    /* Set preemption interrupt value */
                   1532:                        mtlr    r11                                                             /* Restore the LR */
                   1533:                        stw             r3,saveexception(r13)                   /* Modify the exception type to preemption */
                   1534:                        blr                                                                             /* Return to interrupt handler */
                   1535: 
                   1536:                        
                   1537: /*
                   1538:  *                     Force 'rupt handler to dispatch with new context
                   1539:  *                     R3 at the call contains the new savearea.
                   1540:  *                     R4 at the call contains a return code to pass back in R3.
                   1541:  *                     Forces a T_CSWITCH
                   1542:  */
                   1543: 
                   1544: ENTRY(SwitchContextLL, TAG_NO_FRAME_USED)
                   1545: 
                   1546:                        mfsprg  r11,0                                                   /* Get the per_proc address */
                   1547:                        lwz             r11,PP_TEMPWORK1(r11)                   /* Restore the return address */
                   1548:                        li              r3,T_CSWITCH                                    /* Set context switch value */
                   1549:                        mtlr    r11                                                             /* Restore the LR */
                   1550:                        stw             r3,saveexception(r13)                   /* Modify the exception type to switch context */
                   1551:                        blr                                                                             /* Return to interrupt handler */
                   1552: 
                   1553:                        
                   1554: /*
                   1555:  *                     Create a fake I/O 'rupt.  
                   1556:  *                     Forces a T_INTERRUPT trap to pretend that an actual I/O interrupt occurred.
                   1557:  */
                   1558: 
                   1559: ENTRY(CreateFakeIOLL, TAG_NO_FRAME_USED)
                   1560: 
                   1561:                        mfsprg  r11,0                                                   /* Get the per_proc address */
                   1562:                        lwz             r11,PP_TEMPWORK1(r11)                   /* Restore the return address */
                   1563:                        li              r3,T_INTERRUPT                                  /* Set external interrupt value */
                   1564:                        mtlr    r11                                                             /* Restore the LR */
                   1565:                        stw             r3,saveexception(r13)                   /* Modify the exception type to external */
                   1566:                        blr                                                                             /* Return to interrupt handler */
                   1567:                        
                   1568: /*
                   1569:  *                     Create a fake decrementer 'rupt.  
                   1570:  *                     Forces a T_DECREMENTER trap to pretend that an actual decrementer interrupt occurred.
                   1571:  */
                   1572: 
                   1573: ENTRY(CreateFakeDECLL, TAG_NO_FRAME_USED)
                   1574: 
                   1575:                        mfsprg  r11,0                                                   /* Get the per_proc address */
                   1576:                        lwz             r11,PP_TEMPWORK1(r11)                   /* Restore the return address */
                   1577:                        li              r3,T_DECREMENTER                                /* Set decrementer interrupt value */
                   1578:                        mtlr    r11                                                             /* Restore the LR */
                   1579:                        stw             r3,saveexception(r13)                   /* Modify the exception type to external */
                   1580:                        blr                                                                             /* Return to interrupt handler */
                   1581: 
                   1582: /*
                   1583:  *                     Choke the system.  This is just a dummy for now,
                   1584:  *                     but we'll eventually do something.
                   1585:  */
                   1586: 
                   1587: ENTRY(DoChokeLL, TAG_NO_FRAME_USED)
                   1588: 
                   1589:                        BREAKPOINT_TRAP                                                 /* Dummy for now */
                   1590: 
                   1591: /*
                   1592:  *                     Set the low level trace flags 
                   1593:  */
                   1594:  
                   1595: ENTRY(LLTraceSet, TAG_NO_FRAME_USED)
                   1596: 
                   1597:                        mfmsr   r12                                                             /* Get the MSR */
                   1598:                        mr              r4,r3                                                   /* Save the new value */
                   1599:                        andi.   r11,r12,0x01C0                                  /* Clear interrupts and translation */
                   1600:                        mtmsr   r11                                                             /* Set 'em all off */
                   1601:                        isync
                   1602:                        
                   1603:                        lwz             r3,0x180(br0)                                   /* Get the old trace flags to pass back */
                   1604:                        stw             r4,0x180(br0)                                   /* Replace with the new ones */
                   1605:                        
                   1606:                        mtmsr   r12                                                             /* Restore the MSR */
                   1607:                        isync
                   1608:                        
                   1609:                        blr                                                                             /* Leave... */
                   1610: 
                   1611: #if 1
                   1612:        
                   1613: /*
                   1614: ; ***************************************************************************
                   1615: ;
                   1616: ;                      ----------------- Grateful Deb ----------------
                   1617: ;
                   1618: ;                      Debugging: direct draw into main screen menu bar
                   1619: ;
                   1620: ;                      Takes R4 value, converts it to hex characters and displays it.
                   1621: ;
                   1622: ;                      Gotta make sure the DCBST is done to force the pixels from the cache.
                   1623: ;
                   1624: ;                      Position is taken as column, row (0 based) from R3.
                   1625: ;                      Characters are from hexfont, and are 16x16 pixels. 
                   1626: ;
                   1627: ;                      Only works with two processors so far
                   1628: ;
                   1629: ;
                   1630: ; ***************************************************************************
                   1631: */
                   1632: 
                   1633: #define GDfromright 20
                   1634: #define GDfontsize 16
                   1635: 
                   1636: ENTRY(GratefulDeb,TAG_NO_FRAME_USED)
                   1637:                        mfspr   r6,pir                                                  /* Get the PIR */
                   1638:                        lis             r5,HIGH_ADDR(EXT(GratefulDebWork))      /* Point to our work area */
                   1639:                        rlwinm  r6,r6,8,23,23                                   /* Get part of the offset to our processors area */
                   1640:                        ori             r5,r5,LOW_ADDR(EXT(GratefulDebWork))    /* Start building the address */
                   1641:                        rlwimi  r6,r6,2,21,21                                   /* Get the rest of the offset to our processors area */
                   1642:                        add             r6,r6,r5                                                /* Point at our CPU's work area */
                   1643:                        mfmsr   r5                                                              /* Get that MSR */
                   1644:                        stmw    r0,GDsave(r6)                                   /* Save all registers */
                   1645:                        lwz             r10,GDready(r6)                                 /* See if we're all ready to go */
                   1646:                        ori             r0,r5,0x2000                                    /* Turn on the floating point */
                   1647:                        mr              r31,r6                                                  /* Get a more sane base register */
                   1648:                        mr.             r10,r10                                                 /* Are we all set? */
                   1649:                        mtmsr   r0                                                              /* Enable floating point */
                   1650:                        isync
                   1651:                        
                   1652:                        stfd    f0,GDfp0(r31)                                   /* Save FP */
                   1653:                        stfd    f1,GDfp1(r31)                                   /* Save FP */
                   1654:                        stfd    f2,GDfp2(r31)                                   /* Save FP */
                   1655:                        stfd    f3,GDfp3(r31)                                   /* Save FP */
                   1656:                
                   1657:                        beq-    GDbailout                                               /* Go and bail... */
                   1658:                        
                   1659:                        rlwinm  r25,r3,0,16,31                                  /* Isolate just the row number */
                   1660:                        lwz             r28,GDtopleft(r31)                              /* Get the physical address of our line 0 */
                   1661:                        rlwinm  r3,r3,16,16,31                                  /* Isolate the column number */
                   1662:                        lwz             r27,GDrowbytes(r31)                             /* Get the number of bytes per row */
                   1663:                        lwz             r9,GDrowchar(r31)                               /* Get the number of bytes per row of full leaded charactrers */
                   1664:                        lwz             r26,GDdepth(r31)                                /* Get the bit depth */
                   1665:                        mullw   r25,r25,r9                                              /* get offset to the row to write in bytes */
                   1666:                        lwz             r24,GDcollgn(r31)                               /* Get the size of columns in bytes */
                   1667:                        add             r25,r28,r25                                             /* Physical address of row */
                   1668:                        mullw   r3,r3,r24                                               /* Get byte offset to first output column */
                   1669:                        
                   1670:                        li              r9,32                                                   /* Get the initial shift calc */
                   1671:                        
                   1672:                        lis             r20,HIGH_ADDR(hexfont)                  /* Point to the font */
                   1673:                        
                   1674:                        li              r18,GDfontsize                                  /* Get the number of rows in the font */
                   1675:                        ori             r20,r20,LOW_ADDR(hexfont)               /* Point to the low part */
                   1676:                        add             r21,r25,r3                                              /* Physical address of top left output pixel */
                   1677:                        sub             r9,r9,r26                                               /* Get right shift justifier for pixel size */
                   1678:                        li              r7,32                                                   /* Number of bits per word */
                   1679: 
                   1680: startNybble:
                   1681:                        la              r6,GDrowbuf1(r31)                               /* Point to the row buffer */
                   1682:                        li              r19,8                                                   /* Get the number of characters in a row */
                   1683:                        
                   1684: getNybble:     rlwinm  r10,r4,9,23,26                                  /* Get the top nybble * 32 */
                   1685:                        rlwinm  r4,r4,4,0,31                                    /* Rotate a nybble */
                   1686:                        add             r10,r20,r10                                             /* Point to the character in the font */
                   1687:                        
                   1688:                        rlwinm  r16,r26,4,0,27                                  /* Width of row in actual bits */
                   1689:                        lhz             r15,0(r10)                                              /* Get the next row of the font */
                   1690:                        
                   1691: rendrow:       rlwinm  r17,r15,16,0,0                                  /* Get the next font pixel in the row */
                   1692:                        rlwinm  r15,r15,1,16,31                                 /* Move in the next font pixel */
                   1693:                        srawi   r17,r17,31                                              /* Fill with 1s if black and 0s if white (reversed) */
                   1694:                        
                   1695:                        slw             r14,r14,r26                                             /* Make room for our pixel in a register */
                   1696:                        srw             r17,r17,r9                                              /* Isolate one pixels worth of black or white */
                   1697:                        sub.    r7,r7,r26                                               /* See how may bits are left */
                   1698:                        sub             r16,r16,r26                                             /* Count how many bits are left to store for this row */
                   1699:                        or              r14,r14,r17                                             /* Put in the pixel */
                   1700:                        bne+    notfull                                                 /* Finish rendering this word */
                   1701:                        
                   1702:                        not             r14,r14                                                 /* Invert to black on white */
                   1703:                        stw             r14,0(r6)                                               /* Write out the word */
                   1704:                        li              r7,32                                                   /* Bit per word count */
                   1705:                        addi    r6,r6,4                                                 /* Point to the next word */
                   1706:                        
                   1707: notfull:       mr.             r16,r16                                                 /* Have we finished the whole character row? */                 
                   1708:                        bne+    rendrow                                                 /* Finish rendering the row */
                   1709:                
                   1710:                        addic.  r19,r19,-1                                              /* Are we finished with a whole display row yet? */
                   1711:                        bne+    getNybble                                               /* Not yet... */
                   1712:                        
                   1713:                        la              r6,GDrowbuf1(r31)                               /* Point to the row buffer */
                   1714:                        rlwinm  r19,r26,31,0,29                                 /* Number of cache lines (depth/2) */
                   1715:                        mr              r14,r21                                                 /* Get the frame buffer address */
                   1716:                        
                   1717: //                     BREAKPOINT_TRAP
                   1718: 
                   1719: blitrow:       lfd             f0,0(r6)                                                /* Load a line */
                   1720:                        lfd             f1,8(r6)                                        
                   1721:                        lfd             f2,16(r6)                                       
                   1722:                        lfd             f3,24(r6)                                       
                   1723:                        
                   1724:                        stfd    f0,0(r14)                                               /* Blit a line */
                   1725:                        stfd    f1,8(r14)                                       
                   1726:                        stfd    f2,16(r14)                                      
                   1727:                        stfd    f3,24(r14)      
                   1728:                        
                   1729:                        addi    r6,r6,32                                                /* Next buffered line */
                   1730:                        
                   1731:                        dcbst   0,r14                                                   /* Force the line to the screen */
                   1732:                        sync                                                                    /* Make sure the line is on it's way */
                   1733:                        eieio                                                                   /* Make sure we beat the invalidate */
                   1734:                        dcbi    0,r14                                                   /* Make sure we leave no paradox */
                   1735:                        
                   1736:                        addic.  r19,r19,-1                                              /* Done all lines yet? */
                   1737:                        addi    r14,r14,32                                              /* Point to the next output */
                   1738:                        bne+    blitrow                                                 /* Nope, do it some more... */
                   1739:                        
                   1740:                        addic.  r18,r18,-1                                              /* Have we done all the rows in character yet? */
                   1741:                        addi    r20,r20,2                                               /* Offset the font to the next row */
                   1742:                        add             r21,r21,r27                                             /* Point to start of next row */
                   1743:                        bne+    startNybble                                             /* Nope, go through the word one more time... */
                   1744:                                        
                   1745: GDbailout:     mr              r1,r31                                                  /* Move the workarea base */
                   1746:        
                   1747:                        lfd             f0,GDfp0(r31)                                   /* Restore FP */
                   1748:                        lfd             f1,GDfp1(r31)                                   /* Restore FP */
                   1749:                        lfd             f2,GDfp2(r31)                                   /* Restore FP */
                   1750:                        lfd             f3,GDfp3(r31)                                   /* Restore FP */
                   1751:                        
                   1752:                        mtmsr   r5                                                              /* Disable floating point */
                   1753:                        isync
                   1754:                        
                   1755:                        lmw             r3,GDsave+12(r1)                                /* Restore most registers */
                   1756:                        lwz             r0,GDsave(r1)                                   /* Restore R0 */
                   1757:                        lwz             r1,GDsave+4(r1)                                 /* Finally, R1 */
                   1758:                        blr                                                                             /* Leave... */
                   1759:                        
                   1760: 
                   1761: /*
                   1762:  *                     void GratefulDebDisp(unsigned int coord, unsigned int data);
                   1763:  */
                   1764: 
                   1765: 
                   1766: ENTRY(GratefulDebDisp,TAG_NO_FRAME_USED)
                   1767: 
                   1768:                        mfmsr   r9                                                              /* Save the current MSR */
                   1769:                        mflr    r7                                                              /* Save the return */
                   1770:                        andi.   r8,r9,0x7FCF                                    /* Clear interrupt and translation */
                   1771:                        mtmsr   r8                                                              /* Turn 'em really off */
                   1772:                        isync                                                                   /* Make sure about the translation part */
                   1773:                        bl              EXT(GratefulDeb)                                /* Display it */
                   1774:                        mtmsr   r9                                                              /* Restore interrupt and translation */
                   1775:                        mtlr    r7                                                              /* Restore return */
                   1776:                        isync                                                                   /* Make sure */
                   1777:                        blr
                   1778: 
                   1779:                        
                   1780: #endif
                   1781: 
                   1782: /*
                   1783:  *                     void checkNMI(void);
                   1784:  */
                   1785: 
                   1786: 
                   1787: ENTRY(checkNMI,TAG_NO_FRAME_USED)
                   1788:                
                   1789:                        mfmsr   r9                                                              /* Save it */
                   1790:                        andi.   r8,r9,0x7FCF                                    /* Clear it */
                   1791:                        mtmsr   r8                                                              /* Disable it */
                   1792:                        isync                                                                   /* Fence it */
                   1793:                        lis             r7,0xF300                                               /* Find it */
                   1794:                        ori             r7,r7,0x0020                                    /* Find it */
                   1795:                        dcbi    0,r7                                                    /* Toss it */
                   1796:                        sync                                                                    /* Sync it */
                   1797:                        eieio                                                                   /* Get it */
                   1798:                        lwz             r6,0x000C(r7)                                   /* Check it */
                   1799:                        eieio                                                                   /* Fence it */
                   1800:                        dcbi    0,r7                                                    /* Toss it */
                   1801:                        rlwinm. r4,r6,0,19,19                                   /* Check it */
                   1802:                        rlwinm  r6,r6,0,20,18                                   /* Clear it */
                   1803:                        sync                                                                    /* Sync it */
                   1804:                        eieio                                                                   /* Fence it */
                   1805:                        beq+    xnonmi                                                  /* Branch on it */
                   1806: 
                   1807:                        stw             r6,0x0008(r7)                                   /* Reset it */
                   1808:                        sync                                                                    /* Sync it */
                   1809:                        dcbi    0,r6                                                    /* Toss it */
                   1810:                        eieio                                                                   /* Fence it */
                   1811: 
                   1812:                        mtmsr   r9                                                              /* Restore it */
                   1813:                        isync                                                                   /* Hold it */
                   1814: 
                   1815:                        BREAKPOINT_TRAP                                                 /* Kill it */
                   1816:                        blr                                                                             /* Return from it */
                   1817: 
                   1818: xnonmi:                                                                                                /* Label it */
                   1819:                        mtmsr   r9                                                              /* Restore it */
                   1820:                        isync                                                                   /* Hold it */
                   1821:                        blr                                                                             /* Return from it */
                   1822: 
                   1823: 
                   1824: /*
                   1825:  *                     Early debug code
                   1826:  */
                   1827:  
                   1828: dumpr7:                lis             r9,HIGH_ADDR(hexTab)    /* (TEST/DEBUG) */
                   1829:                        li              r5,8                                    /* (TEST/DEBUG) */
                   1830:                        ori             r9,r9,LOW_ADDR(hexTab)  /* (TEST/DEBUG) */
                   1831: 
                   1832: dumpr7n:       rlwinm  r7,r7,4,0,31            /* (TEST/DEBUG) */
                   1833:                        mr              r6,r7                           /* (TEST/DEBUG) */
                   1834:                        andi.   r6,r6,15                        /* (TEST/DEBUG) */
                   1835:                        lbzx    r6,r9,r6                        /* (TEST/DEBUG) */
                   1836:                        lis             r10,0xF301                      /* (TEST/DEBUG) */
                   1837:                        ori             r10,r10,0x2000          /* (TEST/DEBUG) */
                   1838: 
                   1839: #if 0
                   1840: xqrw2:         eieio                                           /* (TEST/DEBUG) */
                   1841:                        lbz             r7,0(r10)                       /* (TEST/DEBUG) */
                   1842:                        dcbi    0,r10                           /* (TEST/DEBUG) */
                   1843:                        sync                                            /* (TEST/DEBUG) */
                   1844:                        andi.   r7,r7,0x04                      /* (TEST/DEBUG) */
                   1845:                        beq             xqrw2                           /* (TEST/DEBUG) */
                   1846: #endif
                   1847:                        
                   1848:                        dcbf    0,r10                           /* (TEST/DEBUG) */
                   1849:                        sync                                            /* (TEST/DEBUG) */
                   1850:                        dcbi    0,r10                           /* (TEST/DEBUG) */
                   1851:                        eieio                                           /* (TEST/DEBUG) */
                   1852:                        stb             r6,4(r10)                       /* (TEST/DEBUG) */
                   1853:                        
                   1854:                        lis             r6,10                           /* (TEST/DEBUG) */
                   1855: dumpr7d:       addi    r6,r6,-1                        /* (TEST/DEBUG) */
                   1856:                        mr.             r6,r6                           /* (TEST/DEBUG) */
                   1857:                        bne-    dumpr7d                         /* (TEST/DEBUG) */
                   1858:                        dcbf    0,r10                           /* (TEST/DEBUG) */
                   1859:                        sync                                            /* (TEST/DEBUG) */
                   1860:                        dcbi    0,r10                           /* (TEST/DEBUG) */
                   1861:                        eieio                                           /* (TEST/DEBUG) */
                   1862:                
                   1863:                        addic.  r5,r5,-1                        /* (TEST/DEBUG) */
                   1864:                        bne+    dumpr7n                         /* (TEST/DEBUG) */
                   1865: 
                   1866:                        blr                                                     /* (TEST/DEBUG) */
                   1867: 
                   1868: ;                      
                   1869: ;                      Log a special entry in physical memory.
                   1870: ;                      This assumes that memory size has been significantly lowered using
                   1871: ;                      the maxmem boot option. The buffer starts just after the end of mem_size.
                   1872: ;
                   1873: ;                      This is absolutely for special tracing cases. Do not ever leave in...
                   1874: ;
                   1875: 
                   1876: ENTRY(dbgLog,TAG_NO_FRAME_USED)
                   1877: 
                   1878:                        li              r11,0                           ; Clear callers callers callers return
                   1879:                        li              r10,0                           ; Clear callers callers callers callers return
                   1880:                        li              r9,0                            ; Clear callers callers callers callers callers return
                   1881:                        lwz             r2,0(r1)                        ; Get callers callers stack frame
                   1882:                        lis             r0,0x4000                       ; First invalid address
                   1883:                        lwz             r12,8(r2)                       ; Get our callers return
                   1884:                        lwz             r2,0(r2)                        ; Back chain
                   1885: 
                   1886:                        mr.             r2,r2                           ; End of chain?
                   1887:                        cmplw   cr1,r2,r0                       ; Valid kernel address?
                   1888:                        beq-    nosavehere                      ; Yes, end of chain...
                   1889:                        bge-    cr1,nosavehere          ; No...
                   1890:                        lwz             r11,8(r2)                       ; Get our callers return
                   1891:                        lwz             r2,0(r2)                        ; Back chain
                   1892: 
                   1893:                        mr.             r2,r2                           ; End of chain?
                   1894:                        cmplw   cr1,r2,r0                       ; Valid kernel address?
                   1895:                        beq-    nosavehere                      ; Yes, end of chain...
                   1896:                        bge-    cr1,nosavehere          ; No...
                   1897:                        lwz             r10,8(r2)                       ; Get our callers return
                   1898:                        lwz             r2,0(r2)                        ; Back chain
                   1899: 
                   1900:                        mr.             r2,r2                           ; End of chain?
                   1901:                        cmplw   cr1,r2,r0                       ; Valid kernel address?
                   1902:                        beq-    nosavehere                      ; Yes, end of chain...
                   1903:                        bge-    cr1,nosavehere          ; No...
                   1904:                        lwz             r9,8(r2)                        ; Get our callers return
                   1905: 
                   1906: nosavehere:    mfmsr   r8                                      ; Get the MSR   
                   1907:                        lis             r2,hi16(EXT(DebugWork)) ; High part of area
                   1908:                        lis             r7,hi16(EXT(mem_actual))        ; High part of actual
                   1909:                        andi.   r0,r8,0x7FCF            ; Interrupts and translation off
                   1910:                        ori             r2,r2,lo16(EXT(DebugWork))      ; Get the entry
                   1911:                        mtmsr   r0                                      ; Turn stuff off
                   1912:                        ori             r7,r7,lo16(EXT(mem_actual))     ; Get the actual
                   1913:                        isync
                   1914:                
                   1915:                        lwz             r0,4(r2)                        ; Get the flag
                   1916:                        mr.             r0,r0                           ; Should we log?
                   1917:                        lwz             r0,0(r7)                        ; Get the end of memory
                   1918:                        lwz             r7,0(r2)                        ; Get the position
                   1919:                        bne-    waytoofar                       ; No logging...
                   1920:                        mr.             r7,r7                           ; Is this the first? 
                   1921:                        bne+    gotspot                         ; Nope...
                   1922:                        
                   1923:                        lis             r7,hi16(EXT(mem_size))  ; High part of defined memory
                   1924:                        ori             r7,r7,lo16(EXT(mem_size))       ; Low part of defined memory
                   1925:                        lwz             r7,0(r7)                        ; Make it end of defined
                   1926:                        
                   1927: gotspot:       cmplw   r7,r0                           ; Do we fit in memory
                   1928:                        addi    r0,r7,0x0020            ; Next slot
                   1929:                        bge-    waytoofar                       ; No fit...
                   1930:                        
                   1931:                        stw             r0,0(r2)                        ; Set next time slot
                   1932:                        dcbz    0,r7                            ; Zap it
                   1933:                        
                   1934:                        stw             r3,0(r7)                        ; First data
                   1935:                        li              r3,32                           ; Disp to next line
                   1936:                        stw             r4,4(r7)                        ; Second data
                   1937:                        dcbz    r3,r7                           ; Zap it
                   1938:                        stw             r5,8(r7)                        ; Third data
                   1939:                        stw             r6,12(r7)                       ; Fourth data
                   1940:                        
                   1941:                        stw             r12,16(r7)                      ; Callers callers
                   1942:                        stw             r11,20(r7)                      ; Callers callers caller
                   1943:                        stw             r10,24(r7)                      ; Callers callers callers caller
                   1944:                        stw             r9,28(r7)                       ; Callers callers callers callers caller
                   1945: 
                   1946: waytoofar:     mtmsr   r8                                      ; Back to normal
                   1947:                        isync
                   1948:                        blr
                   1949: 
                   1950: ;
                   1951: ;                      Same as the other, but no traceback and 16 byte entry
                   1952: ;                      Trashes R0, R2, R10, R12
                   1953: ;
                   1954: 
                   1955:                        .align  5
                   1956:                        .globl  EXT(dbgLog2)
                   1957: 
                   1958: LEXT(dbgLog2)
                   1959: 
                   1960: 
                   1961:                        mfmsr   r10                                     ; Get the MSR   
                   1962:                        lis             r2,hi16(EXT(DebugWork)) ; High part of area
                   1963:                        lis             r12,hi16(EXT(mem_actual))       ; High part of actual
                   1964:                        andi.   r0,r10,0x7FCF           ; Interrupts and translation off
                   1965:                        ori             r2,r2,lo16(EXT(DebugWork))      ; Get the entry
                   1966:                        mtmsr   r0                                      ; Turn stuff off
                   1967:                        ori             r12,r12,lo16(EXT(mem_actual))   ; Get the actual
                   1968:                        isync
                   1969:                
                   1970:                        lwz             r0,4(r2)                        ; Get the flag
                   1971:                        mr.             r0,r0                           ; Should we log?
                   1972:                        lwz             r0,0(r12)                       ; Get the end of memory
                   1973:                        lwz             r12,0(r2)                       ; Get the position
                   1974:                        bne-    waytoofar2                      ; No logging...
                   1975:                        mr.             r12,r12                         ; Is this the first? 
                   1976:                        bne+    gotspot2                        ; Nope...
                   1977:                        
                   1978:                        lis             r12,hi16(EXT(mem_size)) ; High part of defined memory
                   1979:                        ori             r12,r12,lo16(EXT(mem_size))     ; Low part of defined memory
                   1980:                        lwz             r12,0(r12)                      ; Make it end of defined
                   1981:                        
                   1982: gotspot2:      cmplw   cr1,r12,r0                      ; Do we fit in memory
                   1983:                        rlwinm. r0,r12,0,27,27          ; Are we on a new line?
                   1984:                        bge-    cr1,waytoofar2          ; No fit...
                   1985:                        addi    r0,r12,0x0010           ; Next slot
                   1986:                        
                   1987:                        bne+    nonewline                       ; Not on a new line...
                   1988:                        dcbz    br0,r12                         ; Clear it so we do not fetch it
                   1989:                        
                   1990: nonewline:     cmplwi  r3,68                           ; Special place for time stamp?
                   1991:                        
                   1992:                        stw             r0,0(r2)                        ; Set next time slot
                   1993:                        bne+    nospcts                         ; Nope...
                   1994: 
                   1995:                        lwz             r0,0x17C(br0)           ; Get special saved time stamp
                   1996:                        b               nospctt                         ; Skip...
                   1997:                        
                   1998: nospcts:       mftb    r0                                      ; Get the current time
                   1999:                                                
                   2000: nospctt:       stw             r3,4(r12)                       ; First data
                   2001:                        stw             r4,8(r12)                       ; Second data
                   2002:                        stw             r5,12(r12)                      ; Third data
                   2003:                        stw             r0,0(r12)                       ; Time stamp
                   2004: 
                   2005: waytoofar2:    mtmsr   r10                                     ; Back to normal
                   2006:                        isync
                   2007:                        blr
                   2008: 
                   2009: 
                   2010: ;
                   2011: ;                      Saves floating point registers
                   2012: ;
                   2013: 
                   2014:                        .align  5
                   2015:                        .globl  EXT(stFloat)
                   2016: 
                   2017: LEXT(stFloat)
                   2018: 
                   2019:                        mfmsr   r0                                      ; Save the MSR
                   2020:                        rlwinm  r4,r0,0,MSR_EE_BIT,MSR_EE_BIT   ; Turn off interruptions
                   2021:                        ori             r4,r4,lo16(MASK(MSR_FP))        ; Enable floating point
                   2022:                        mtmsr   r4
                   2023:                        isync
                   2024:                        
                   2025:                        stfd    f0,0x00(r3)
                   2026:                        stfd    f1,0x08(r3)
                   2027:                        stfd    f2,0x10(r3)
                   2028:                        stfd    f3,0x18(r3)
                   2029:                        stfd    f4,0x20(r3)
                   2030:                        stfd    f5,0x28(r3)
                   2031:                        stfd    f6,0x30(r3)
                   2032:                        stfd    f7,0x38(r3)
                   2033:                        stfd    f8,0x40(r3)
                   2034:                        stfd    f9,0x48(r3)
                   2035:                        stfd    f10,0x50(r3)
                   2036:                        stfd    f11,0x58(r3)
                   2037:                        stfd    f12,0x60(r3)
                   2038:                        stfd    f13,0x68(r3)
                   2039:                        stfd    f14,0x70(r3)
                   2040:                        stfd    f15,0x78(r3)
                   2041:                        stfd    f16,0x80(r3)
                   2042:                        stfd    f17,0x88(r3)
                   2043:                        stfd    f18,0x90(r3)
                   2044:                        stfd    f19,0x98(r3)
                   2045:                        stfd    f20,0xA0(r3)
                   2046:                        stfd    f21,0xA8(r3)
                   2047:                        stfd    f22,0xB0(r3)
                   2048:                        stfd    f23,0xB8(r3)
                   2049:                        stfd    f24,0xC0(r3)
                   2050:                        stfd    f25,0xC8(r3)
                   2051:                        stfd    f26,0xD0(r3)
                   2052:                        stfd    f27,0xD8(r3)
                   2053:                        stfd    f28,0xE0(r3)
                   2054:                        stfd    f29,0xE8(r3)
                   2055:                        stfd    f30,0xF0(r3)
                   2056:                        stfd    f31,0xF8(r3)
                   2057:                        mffs    f0
                   2058:                        stfd    f0,0x100(r3)
                   2059:                        lfd             f0,0x00(r3)
                   2060:                        mtmsr   r0
                   2061:                        isync
                   2062:                        blr
                   2063:                        
                   2064: 
                   2065: ;
                   2066: ;                      Saves vector registers.  Returns 0 if non-Altivec machine.
                   2067: ;
                   2068: 
                   2069:                        .align  5
                   2070:                        .globl  EXT(stVectors)
                   2071: 
                   2072: LEXT(stVectors)
                   2073: 
                   2074:                        mfpvr   r6                                      ; Get machine type
                   2075:                        mr              r5,r3                           ; Save area address
                   2076:                        rlwinm  r6,r6,16,16,31          ; Rotate on it
                   2077:                        li              r3,0                            ; Assume failure
                   2078:                        cmplwi  r6,PROCESSOR_VERSION_Max        ; Do we have Altivec?
                   2079:                        bltlr+                                          ; No...
                   2080:                        
                   2081:                        mfmsr   r0                                      ; Save the MSR
                   2082:                        rlwinm  r4,r0,0,MSR_EE_BIT,MSR_EE_BIT   ; Turn off interruptions
                   2083:                        oris    r4,r4,hi16(MASK(MSR_VEC))       ; Enable vectors
                   2084:                        mtmsr   r4
                   2085:                        isync
                   2086:                        
                   2087:                        stvxl   v0,0,r5
                   2088:                        addi    r5,r5,16
                   2089:                        stvxl   v1,0,r5
                   2090:                        addi    r5,r5,16
                   2091:                        stvxl   v2,0,r5
                   2092:                        addi    r5,r5,16
                   2093:                        stvxl   v3,0,r5
                   2094:                        addi    r5,r5,16
                   2095:                        stvxl   v4,0,r5
                   2096:                        addi    r5,r5,16
                   2097:                        stvxl   v5,0,r5
                   2098:                        addi    r5,r5,16
                   2099:                        stvxl   v6,0,r5
                   2100:                        addi    r5,r5,16
                   2101:                        stvxl   v7,0,r5
                   2102:                        addi    r5,r5,16
                   2103:                        stvxl   v8,0,r5
                   2104:                        addi    r5,r5,16
                   2105:                        stvxl   v9,0,r5
                   2106:                        addi    r5,r5,16
                   2107:                        stvxl   v10,0,r5
                   2108:                        addi    r5,r5,16
                   2109:                        stvxl   v11,0,r5
                   2110:                        addi    r5,r5,16
                   2111:                        stvxl   v12,0,r5
                   2112:                        addi    r5,r5,16
                   2113:                        stvxl   v13,0,r5
                   2114:                        addi    r5,r5,16
                   2115:                        stvxl   v14,0,r5
                   2116:                        addi    r5,r5,16
                   2117:                        stvxl   v15,0,r5
                   2118:                        addi    r5,r5,16
                   2119:                        stvxl   v16,0,r5
                   2120:                        addi    r5,r5,16
                   2121:                        stvxl   v17,0,r5
                   2122:                        addi    r5,r5,16
                   2123:                        stvxl   v18,0,r5
                   2124:                        addi    r5,r5,16
                   2125:                        stvxl   v19,0,r5
                   2126:                        addi    r5,r5,16
                   2127:                        stvxl   v20,0,r5
                   2128:                        addi    r5,r5,16
                   2129:                        stvxl   v21,0,r5
                   2130:                        addi    r5,r5,16
                   2131:                        stvxl   v22,0,r5
                   2132:                        addi    r5,r5,16
                   2133:                        stvxl   v23,0,r5
                   2134:                        addi    r5,r5,16
                   2135:                        stvxl   v24,0,r5
                   2136:                        addi    r5,r5,16
                   2137:                        stvxl   v25,0,r5
                   2138:                        addi    r5,r5,16
                   2139:                        stvxl   v26,0,r5
                   2140:                        addi    r5,r5,16
                   2141:                        stvxl   v27,0,r5
                   2142:                        addi    r5,r5,16
                   2143:                        stvxl   v28,0,r5
                   2144:                        addi    r5,r5,16
                   2145:                        stvxl   v29,0,r5
                   2146:                        addi    r5,r5,16
                   2147:                        stvxl   v30,0,r5
                   2148:                        addi    r5,r5,16
                   2149:                        stvxl   v31,0,r5
                   2150:                        mfvscr  v31
                   2151:                        addi    r6,r5,16
                   2152:                        stvxl   v31,0,r6
                   2153:                        li              r3,1
                   2154:                        lvxl    v31,0,r5
                   2155:                        mtmsr   r0
                   2156:                        isync
                   2157:                        blr
                   2158: 
                   2159: 
                   2160: ;
                   2161: ;                      Saves yet more registers
                   2162: ;
                   2163: 
                   2164:                        .align  5
                   2165:                        .globl  EXT(stSpecrs)
                   2166: 
                   2167: LEXT(stSpecrs)
                   2168: 
                   2169:                        mfmsr   r0                                      ; Save the MSR
                   2170:                        rlwinm  r4,r0,0,MSR_EE_BIT,MSR_EE_BIT   ; Turn off interruptions
                   2171:                        mtmsr   r4
                   2172:                        isync
                   2173:                        
                   2174:                        mfspr   r4,pir
                   2175:                        stw             r4,0(r3)
                   2176:                        
                   2177:                        mfpvr   r4
                   2178:                        stw             r4,4(r3)
                   2179: 
                   2180:                        mfdbatu r4,0
                   2181:                        mfdbatl r5,0
                   2182:                        mfdbatu r6,1
                   2183:                        mfdbatl r7,1
                   2184:                        mfdbatu r8,2
                   2185:                        mfdbatl r9,2
                   2186:                        mfdbatu r10,3
                   2187:                        mfdbatl r11,3
                   2188:                        stw             r4,8(r3)
                   2189:                        stw             r5,12(r3)
                   2190:                        stw             r6,16(r3)
                   2191:                        stw             r7,20(r3)
                   2192:                        stw             r8,24(r3)
                   2193:                        stw             r9,28(r3)
                   2194:                        stw             r10,32(r3)
                   2195:                        stw             r11,36(r3)
                   2196: 
                   2197:                        mfibatu r4,0
                   2198:                        mfibatl r5,0
                   2199:                        mfibatu r6,1
                   2200:                        mfibatl r7,1
                   2201:                        mfibatu r8,2
                   2202:                        mfibatl r9,2
                   2203:                        mfibatu r10,3
                   2204:                        mfibatl r11,3
                   2205:                        stw             r4,40(r3)
                   2206:                        stw             r5,44(r3)
                   2207:                        stw             r6,48(r3)
                   2208:                        stw             r7,52(r3)
                   2209:                        stw             r8,56(r3)
                   2210:                        stw             r9,60(r3)
                   2211:                        stw             r10,64(r3)
                   2212:                        stw             r11,68(r3)
                   2213:                        
                   2214:                        mfsprg  r4,0
                   2215:                        mfsprg  r5,1
                   2216:                        mfsprg  r6,2
                   2217:                        mfsprg  r7,3
                   2218:                        stw             r4,72(r3)
                   2219:                        stw             r5,76(r3)
                   2220:                        stw             r6,80(r3)
                   2221:                        stw             r7,84(r3)
                   2222:                        
                   2223:                        mfsdr1  r4
                   2224:                        stw             r4,88(r3)
                   2225:                        
                   2226:                        la              r4,92(r3)
                   2227:                        li              r5,0
                   2228:                        
                   2229: stSnsr:                mfsrin  r6,r5
                   2230:                        addis   r5,r5,0x1000
                   2231:                        stw             r6,0(r4)
                   2232:                        mr.             r5,r5
                   2233:                        addi    r4,r4,4
                   2234:                        bne+    stSnsr
                   2235:                        
                   2236:                        mtmsr   r0
                   2237:                        isync
                   2238:                        blr

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.