From c0ebf023b795036f6f0d8bcf887b3af27c90e85e Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Thu, 13 Jan 2000 15:06:24 +0000 Subject: New patch from Eric Norum plus some minor mods by Joel. --- c/src/lib/libbsp/m68k/gen68360/bsp_specs | 3 +- c/src/lib/libbsp/m68k/gen68360/start/start.S | 563 ++++++++++----------- c/src/lib/libbsp/m68k/gen68360/startup/Makefile.in | 4 +- c/src/lib/libbsp/m68k/gen68360/startup/bspstart.c | 31 +- c/src/lib/libbsp/m68k/gen68360/startup/init68360.c | 18 +- c/src/lib/libbsp/m68k/gen68360/startup/linkcmds | 48 +- .../libbsp/m68k/gen68360/startup/linkcmds.bootp | 2 +- .../lib/libbsp/m68k/gen68360/startup/linkcmds.prom | 2 +- 8 files changed, 310 insertions(+), 361 deletions(-) (limited to 'c/src/lib/libbsp/m68k/gen68360') diff --git a/c/src/lib/libbsp/m68k/gen68360/bsp_specs b/c/src/lib/libbsp/m68k/gen68360/bsp_specs index 078f4054fb..9c5b2f39bf 100644 --- a/c/src/lib/libbsp/m68k/gen68360/bsp_specs +++ b/c/src/lib/libbsp/m68k/gen68360/bsp_specs @@ -17,11 +17,10 @@ %{!qrtems: %(old_startfile)} %{qrtems: \ %{!qrtems_debug: start.o%s} \ %{qrtems_debug: start_g.o%s} \ -crti.o%s crtbegin.o%s} +crti.o%s crtbegin.o%s } *link: %{!qrtems: %(old_link)} %{qrtems: -dc -dp -N -e start} *endfile: %{!qrtems: %(old_endfile)} %{qrtems: crtend.o%s crtn.o%s} - diff --git a/c/src/lib/libbsp/m68k/gen68360/start/start.S b/c/src/lib/libbsp/m68k/gen68360/start/start.S index c3110c9780..c5f76ec803 100644 --- a/c/src/lib/libbsp/m68k/gen68360/start/start.S +++ b/c/src/lib/libbsp/m68k/gen68360/start/start.S @@ -1,7 +1,6 @@ /* * * This file contains the entry point for the application. - * The name of this entry point is compiler dependent. * It jumps to the BSP which is responsible for performing * all initialization. * @@ -31,278 +30,278 @@ BEGIN_CODE * Step 1: Decide on Reset Stack Pointer and Initial Program Counter */ Entry: - .long SYM(m360)+1024 | 0: Initial SSP + .long m360+1024 | 0: Initial SSP .long start | 1: Initial PC - .long SYM(_uhoh) | 2: Bus error - .long SYM(_uhoh) | 3: Address error - .long SYM(_uhoh) | 4: Illegal instruction - .long SYM(_uhoh) | 5: Zero division - .long SYM(_uhoh) | 6: CHK, CHK2 instruction - .long SYM(_uhoh) | 7: TRAPcc, TRAPV instructions - .long SYM(_uhoh) | 8: Privilege violation - .long SYM(_uhoh) | 9: Trace - .long SYM(_uhoh) | 10: Line 1010 emulator - .long SYM(_uhoh) | 11: Line 1111 emulator - .long SYM(_uhoh) | 12: Hardware breakpoint - .long SYM(_uhoh) | 13: Reserved for coprocessor violation - .long SYM(_uhoh) | 14: Format error - .long SYM(_uhoh) | 15: Uninitialized interrupt - .long SYM(_uhoh) | 16: Unassigned, reserved - .long SYM(_uhoh) | 17: - .long SYM(_uhoh) | 18: - .long SYM(_uhoh) | 19: - .long SYM(_uhoh) | 20: - .long SYM(_uhoh) | 21: - .long SYM(_uhoh) | 22: - .long SYM(_uhoh) | 23: - .long SYM(_spuriousInterrupt) | 24: Spurious interrupt - .long SYM(_uhoh) | 25: Level 1 interrupt autovector - .long SYM(_uhoh) | 26: Level 2 interrupt autovector - .long SYM(_uhoh) | 27: Level 3 interrupt autovector - .long SYM(_uhoh) | 28: Level 4 interrupt autovector - .long SYM(_uhoh) | 29: Level 5 interrupt autovector - .long SYM(_uhoh) | 30: Level 6 interrupt autovector - .long SYM(_uhoh) | 31: Level 7 interrupt autovector - .long SYM(_uhoh) | 32: Trap instruction (0-15) - .long SYM(_uhoh) | 33: - .long SYM(_uhoh) | 34: - .long SYM(_uhoh) | 35: - .long SYM(_uhoh) | 36: - .long SYM(_uhoh) | 37: - .long SYM(_uhoh) | 38: - .long SYM(_uhoh) | 39: - .long SYM(_uhoh) | 40: - .long SYM(_uhoh) | 41: - .long SYM(_uhoh) | 42: - .long SYM(_uhoh) | 43: - .long SYM(_uhoh) | 44: - .long SYM(_uhoh) | 45: - .long SYM(_uhoh) | 46: - .long SYM(_uhoh) | 47: - .long SYM(_uhoh) | 48: Reserved for coprocessor - .long SYM(_uhoh) | 49: - .long SYM(_uhoh) | 50: - .long SYM(_uhoh) | 51: - .long SYM(_uhoh) | 52: - .long SYM(_uhoh) | 53: - .long SYM(_uhoh) | 54: - .long SYM(_uhoh) | 55: - .long SYM(_uhoh) | 56: - .long SYM(_uhoh) | 57: - .long SYM(_uhoh) | 58: - .long SYM(_uhoh) | 59: Unassigned, reserved - .long SYM(_uhoh) | 60: - .long SYM(_uhoh) | 61: - .long SYM(_uhoh) | 62: - .long SYM(_uhoh) | 63: - .long SYM(_uhoh) | 64: User defined vectors (192) - .long SYM(_uhoh) | 65: - .long SYM(_uhoh) | 66: - .long SYM(_uhoh) | 67: - .long SYM(_uhoh) | 68: - .long SYM(_uhoh) | 69: - .long SYM(_uhoh) | 70: - .long SYM(_uhoh) | 71: - .long SYM(_uhoh) | 72: - .long SYM(_uhoh) | 73: - .long SYM(_uhoh) | 74: - .long SYM(_uhoh) | 75: - .long SYM(_uhoh) | 76: - .long SYM(_uhoh) | 77: - .long SYM(_uhoh) | 78: - .long SYM(_uhoh) | 79: - .long SYM(_uhoh) | 80: - .long SYM(_uhoh) | 81: - .long SYM(_uhoh) | 82: - .long SYM(_uhoh) | 83: - .long SYM(_uhoh) | 84: - .long SYM(_uhoh) | 85: - .long SYM(_uhoh) | 86: - .long SYM(_uhoh) | 87: - .long SYM(_uhoh) | 88: - .long SYM(_uhoh) | 89: - .long SYM(_uhoh) | 90: - .long SYM(_uhoh) | 91: - .long SYM(_uhoh) | 92: - .long SYM(_uhoh) | 93: - .long SYM(_uhoh) | 94: - .long SYM(_uhoh) | 95: - .long SYM(_uhoh) | 96: - .long SYM(_uhoh) | 97: - .long SYM(_uhoh) | 98: - .long SYM(_uhoh) | 99: - .long SYM(_uhoh) | 100: - .long SYM(_uhoh) | 101: - .long SYM(_uhoh) | 102: - .long SYM(_uhoh) | 103: - .long SYM(_uhoh) | 104: - .long SYM(_uhoh) | 105: - .long SYM(_uhoh) | 106: - .long SYM(_uhoh) | 107: - .long SYM(_uhoh) | 108: - .long SYM(_uhoh) | 109: - .long SYM(_uhoh) | 110: - .long SYM(_uhoh) | 111: - .long SYM(_uhoh) | 112: - .long SYM(_uhoh) | 113: - .long SYM(_uhoh) | 114: - .long SYM(_uhoh) | 115: - .long SYM(_uhoh) | 116: - .long SYM(_uhoh) | 117: - .long SYM(_uhoh) | 118: - .long SYM(_uhoh) | 119: - .long SYM(_uhoh) | 120: - .long SYM(_uhoh) | 121: - .long SYM(_uhoh) | 122: - .long SYM(_uhoh) | 123: - .long SYM(_uhoh) | 124: - .long SYM(_uhoh) | 125: - .long SYM(_uhoh) | 126: - .long SYM(_uhoh) | 127: - .long SYM(_uhoh) | 128: - .long SYM(_uhoh) | 129: - .long SYM(_uhoh) | 130: - .long SYM(_uhoh) | 131: - .long SYM(_uhoh) | 132: - .long SYM(_uhoh) | 133: - .long SYM(_uhoh) | 134: - .long SYM(_uhoh) | 135: - .long SYM(_uhoh) | 136: - .long SYM(_uhoh) | 137: - .long SYM(_uhoh) | 138: - .long SYM(_uhoh) | 139: - .long SYM(_uhoh) | 140: - .long SYM(_uhoh) | 141: - .long SYM(_uhoh) | 142: - .long SYM(_uhoh) | 143: - .long SYM(_uhoh) | 144: - .long SYM(_uhoh) | 145: - .long SYM(_uhoh) | 146: - .long SYM(_uhoh) | 147: - .long SYM(_uhoh) | 148: - .long SYM(_uhoh) | 149: - .long SYM(_uhoh) | 150: - .long SYM(_uhoh) | 151: - .long SYM(_uhoh) | 152: - .long SYM(_uhoh) | 153: - .long SYM(_uhoh) | 154: - .long SYM(_uhoh) | 155: - .long SYM(_uhoh) | 156: - .long SYM(_uhoh) | 157: - .long SYM(_uhoh) | 158: - .long SYM(_uhoh) | 159: - .long SYM(_uhoh) | 160: - .long SYM(_uhoh) | 161: - .long SYM(_uhoh) | 162: - .long SYM(_uhoh) | 163: - .long SYM(_uhoh) | 164: - .long SYM(_uhoh) | 165: - .long SYM(_uhoh) | 166: - .long SYM(_uhoh) | 167: - .long SYM(_uhoh) | 168: - .long SYM(_uhoh) | 169: - .long SYM(_uhoh) | 170: - .long SYM(_uhoh) | 171: - .long SYM(_uhoh) | 172: - .long SYM(_uhoh) | 173: - .long SYM(_uhoh) | 174: - .long SYM(_uhoh) | 175: - .long SYM(_uhoh) | 176: - .long SYM(_uhoh) | 177: - .long SYM(_uhoh) | 178: - .long SYM(_uhoh) | 179: - .long SYM(_uhoh) | 180: - .long SYM(_uhoh) | 181: - .long SYM(_uhoh) | 182: - .long SYM(_uhoh) | 183: - .long SYM(_uhoh) | 184: - .long SYM(_uhoh) | 185: - .long SYM(_uhoh) | 186: - .long SYM(_uhoh) | 187: - .long SYM(_uhoh) | 188: - .long SYM(_uhoh) | 189: - .long SYM(_uhoh) | 190: - .long SYM(_uhoh) | 191: - .long SYM(_uhoh) | 192: - .long SYM(_uhoh) | 193: - .long SYM(_uhoh) | 194: - .long SYM(_uhoh) | 195: - .long SYM(_uhoh) | 196: - .long SYM(_uhoh) | 197: - .long SYM(_uhoh) | 198: - .long SYM(_uhoh) | 199: - .long SYM(_uhoh) | 200: - .long SYM(_uhoh) | 201: - .long SYM(_uhoh) | 202: - .long SYM(_uhoh) | 203: - .long SYM(_uhoh) | 204: - .long SYM(_uhoh) | 205: - .long SYM(_uhoh) | 206: - .long SYM(_uhoh) | 207: - .long SYM(_uhoh) | 208: - .long SYM(_uhoh) | 209: - .long SYM(_uhoh) | 210: - .long SYM(_uhoh) | 211: - .long SYM(_uhoh) | 212: - .long SYM(_uhoh) | 213: - .long SYM(_uhoh) | 214: - .long SYM(_uhoh) | 215: - .long SYM(_uhoh) | 216: - .long SYM(_uhoh) | 217: - .long SYM(_uhoh) | 218: - .long SYM(_uhoh) | 219: - .long SYM(_uhoh) | 220: - .long SYM(_uhoh) | 221: - .long SYM(_uhoh) | 222: - .long SYM(_uhoh) | 223: - .long SYM(_uhoh) | 224: - .long SYM(_uhoh) | 225: - .long SYM(_uhoh) | 226: - .long SYM(_uhoh) | 227: - .long SYM(_uhoh) | 228: - .long SYM(_uhoh) | 229: - .long SYM(_uhoh) | 230: - .long SYM(_uhoh) | 231: - .long SYM(_uhoh) | 232: - .long SYM(_uhoh) | 233: - .long SYM(_uhoh) | 234: - .long SYM(_uhoh) | 235: - .long SYM(_uhoh) | 236: - .long SYM(_uhoh) | 237: - .long SYM(_uhoh) | 238: - .long SYM(_uhoh) | 239: - .long SYM(_uhoh) | 240: - .long SYM(_uhoh) | 241: - .long SYM(_uhoh) | 242: - .long SYM(_uhoh) | 243: - .long SYM(_uhoh) | 244: - .long SYM(_uhoh) | 245: - .long SYM(_uhoh) | 246: - .long SYM(_uhoh) | 247: - .long SYM(_uhoh) | 248: - .long SYM(_uhoh) | 249: - .long SYM(_uhoh) | 250: - .long SYM(_uhoh) | 251: - .long SYM(_uhoh) | 252: - .long SYM(_uhoh) | 253: - .long SYM(_uhoh) | 254: - .long SYM(_uhoh) | 255: + .long _uhoh | 2: Bus error + .long _uhoh | 3: Address error + .long _uhoh | 4: Illegal instruction + .long _uhoh | 5: Zero division + .long _uhoh | 6: CHK, CHK2 instruction + .long _uhoh | 7: TRAPcc, TRAPV instructions + .long _uhoh | 8: Privilege violation + .long _uhoh | 9: Trace + .long _uhoh | 10: Line 1010 emulator + .long _uhoh | 11: Line 1111 emulator + .long _uhoh | 12: Hardware breakpoint + .long _uhoh | 13: Reserved for coprocessor violation + .long _uhoh | 14: Format error + .long _uhoh | 15: Uninitialized interrupt + .long _uhoh | 16: Unassigned, reserved + .long _uhoh | 17: + .long _uhoh | 18: + .long _uhoh | 19: + .long _uhoh | 20: + .long _uhoh | 21: + .long _uhoh | 22: + .long _uhoh | 23: + .long _spuriousInterrupt | 24: Spurious interrupt + .long _uhoh | 25: Level 1 interrupt autovector + .long _uhoh | 26: Level 2 interrupt autovector + .long _uhoh | 27: Level 3 interrupt autovector + .long _uhoh | 28: Level 4 interrupt autovector + .long _uhoh | 29: Level 5 interrupt autovector + .long _uhoh | 30: Level 6 interrupt autovector + .long _uhoh | 31: Level 7 interrupt autovector + .long _uhoh | 32: Trap instruction (0-15) + .long _uhoh | 33: + .long _uhoh | 34: + .long _uhoh | 35: + .long _uhoh | 36: + .long _uhoh | 37: + .long _uhoh | 38: + .long _uhoh | 39: + .long _uhoh | 40: + .long _uhoh | 41: + .long _uhoh | 42: + .long _uhoh | 43: + .long _uhoh | 44: + .long _uhoh | 45: + .long _uhoh | 46: + .long _uhoh | 47: + .long _uhoh | 48: Reserved for coprocessor + .long _uhoh | 49: + .long _uhoh | 50: + .long _uhoh | 51: + .long _uhoh | 52: + .long _uhoh | 53: + .long _uhoh | 54: + .long _uhoh | 55: + .long _uhoh | 56: + .long _uhoh | 57: + .long _uhoh | 58: + .long _uhoh | 59: Unassigned, reserved + .long _uhoh | 60: + .long _uhoh | 61: + .long _uhoh | 62: + .long _uhoh | 63: + .long _uhoh | 64: User defined vectors (192) + .long _uhoh | 65: + .long _uhoh | 66: + .long _uhoh | 67: + .long _uhoh | 68: + .long _uhoh | 69: + .long _uhoh | 70: + .long _uhoh | 71: + .long _uhoh | 72: + .long _uhoh | 73: + .long _uhoh | 74: + .long _uhoh | 75: + .long _uhoh | 76: + .long _uhoh | 77: + .long _uhoh | 78: + .long _uhoh | 79: + .long _uhoh | 80: + .long _uhoh | 81: + .long _uhoh | 82: + .long _uhoh | 83: + .long _uhoh | 84: + .long _uhoh | 85: + .long _uhoh | 86: + .long _uhoh | 87: + .long _uhoh | 88: + .long _uhoh | 89: + .long _uhoh | 90: + .long _uhoh | 91: + .long _uhoh | 92: + .long _uhoh | 93: + .long _uhoh | 94: + .long _uhoh | 95: + .long _uhoh | 96: + .long _uhoh | 97: + .long _uhoh | 98: + .long _uhoh | 99: + .long _uhoh | 100: + .long _uhoh | 101: + .long _uhoh | 102: + .long _uhoh | 103: + .long _uhoh | 104: + .long _uhoh | 105: + .long _uhoh | 106: + .long _uhoh | 107: + .long _uhoh | 108: + .long _uhoh | 109: + .long _uhoh | 110: + .long _uhoh | 111: + .long _uhoh | 112: + .long _uhoh | 113: + .long _uhoh | 114: + .long _uhoh | 115: + .long _uhoh | 116: + .long _uhoh | 117: + .long _uhoh | 118: + .long _uhoh | 119: + .long _uhoh | 120: + .long _uhoh | 121: + .long _uhoh | 122: + .long _uhoh | 123: + .long _uhoh | 124: + .long _uhoh | 125: + .long _uhoh | 126: + .long _uhoh | 127: + .long _uhoh | 128: + .long _uhoh | 129: + .long _uhoh | 130: + .long _uhoh | 131: + .long _uhoh | 132: + .long _uhoh | 133: + .long _uhoh | 134: + .long _uhoh | 135: + .long _uhoh | 136: + .long _uhoh | 137: + .long _uhoh | 138: + .long _uhoh | 139: + .long _uhoh | 140: + .long _uhoh | 141: + .long _uhoh | 142: + .long _uhoh | 143: + .long _uhoh | 144: + .long _uhoh | 145: + .long _uhoh | 146: + .long _uhoh | 147: + .long _uhoh | 148: + .long _uhoh | 149: + .long _uhoh | 150: + .long _uhoh | 151: + .long _uhoh | 152: + .long _uhoh | 153: + .long _uhoh | 154: + .long _uhoh | 155: + .long _uhoh | 156: + .long _uhoh | 157: + .long _uhoh | 158: + .long _uhoh | 159: + .long _uhoh | 160: + .long _uhoh | 161: + .long _uhoh | 162: + .long _uhoh | 163: + .long _uhoh | 164: + .long _uhoh | 165: + .long _uhoh | 166: + .long _uhoh | 167: + .long _uhoh | 168: + .long _uhoh | 169: + .long _uhoh | 170: + .long _uhoh | 171: + .long _uhoh | 172: + .long _uhoh | 173: + .long _uhoh | 174: + .long _uhoh | 175: + .long _uhoh | 176: + .long _uhoh | 177: + .long _uhoh | 178: + .long _uhoh | 179: + .long _uhoh | 180: + .long _uhoh | 181: + .long _uhoh | 182: + .long _uhoh | 183: + .long _uhoh | 184: + .long _uhoh | 185: + .long _uhoh | 186: + .long _uhoh | 187: + .long _uhoh | 188: + .long _uhoh | 189: + .long _uhoh | 190: + .long _uhoh | 191: + .long _uhoh | 192: + .long _uhoh | 193: + .long _uhoh | 194: + .long _uhoh | 195: + .long _uhoh | 196: + .long _uhoh | 197: + .long _uhoh | 198: + .long _uhoh | 199: + .long _uhoh | 200: + .long _uhoh | 201: + .long _uhoh | 202: + .long _uhoh | 203: + .long _uhoh | 204: + .long _uhoh | 205: + .long _uhoh | 206: + .long _uhoh | 207: + .long _uhoh | 208: + .long _uhoh | 209: + .long _uhoh | 210: + .long _uhoh | 211: + .long _uhoh | 212: + .long _uhoh | 213: + .long _uhoh | 214: + .long _uhoh | 215: + .long _uhoh | 216: + .long _uhoh | 217: + .long _uhoh | 218: + .long _uhoh | 219: + .long _uhoh | 220: + .long _uhoh | 221: + .long _uhoh | 222: + .long _uhoh | 223: + .long _uhoh | 224: + .long _uhoh | 225: + .long _uhoh | 226: + .long _uhoh | 227: + .long _uhoh | 228: + .long _uhoh | 229: + .long _uhoh | 230: + .long _uhoh | 231: + .long _uhoh | 232: + .long _uhoh | 233: + .long _uhoh | 234: + .long _uhoh | 235: + .long _uhoh | 236: + .long _uhoh | 237: + .long _uhoh | 238: + .long _uhoh | 239: + .long _uhoh | 240: + .long _uhoh | 241: + .long _uhoh | 242: + .long _uhoh | 243: + .long _uhoh | 244: + .long _uhoh | 245: + .long _uhoh | 246: + .long _uhoh | 247: + .long _uhoh | 248: + .long _uhoh | 249: + .long _uhoh | 250: + .long _uhoh | 251: + .long _uhoh | 252: + .long _uhoh | 253: + .long _uhoh | 254: + .long _uhoh | 255: /* * Default trap handler * With an oscilloscope you can see AS* stop */ PUBLIC (_uhoh) -SYM(_uhoh): nop | Leave spot for breakpoint +_uhoh: nop | Leave spot for breakpoint stop #0x2700 | Stop with interrupts disabled - bra.l SYM(_uhoh) | Stuck forever + bra.l _uhoh | Stuck forever /* * Log, but otherwise ignore, spurious interrupts */ PUBLIC (_spuriousInterrupt) -SYM(_spuriousInterrupt): - addql #1,SYM(_M68kSpuriousInterruptCount) +_spuriousInterrupt: + addql #1,_M68kSpuriousInterruptCount rte /* @@ -342,40 +341,39 @@ start: movec dfc,d1 | Save destination register moveq #7,d0 | CPU-space funcction code movec d0,dfc | Set destination function code register - movel #SYM(m360)+0x101,d0 | MBAR value (mask CPU space accesses) + movel #m360+0x101,d0 | MBAR value (mask CPU space accesses) movesl d0,0x3FF00 | Set MBAR movec d1,dfc | Restore destination register /* * Step 5: Verify a dual-port RAM location */ - lea SYM(m360),a0 | Point a0 to first DPRAM location + lea m360,a0 | Point a0 to first DPRAM location moveb #0x33,d0 | Set the test value moveb d0,a0@ | Set the memory location cmpb a0@,d0 | Does it read back? - bne SYM(_uhoh) | If not, bad news! + bne _uhoh | If not, bad news! notb d0 | Flip bits moveb d0,a0@ | Set the memory location cmpb a0@,d0 | Does it read back? - bne SYM(_uhoh) | If not, bad news! + bne _uhoh | If not, bad news! /* * Remaining steps are handled by C code */ - jmp SYM(_Init68360) | Start C code (which never returns) + jmp _Init68360 | Start C code (which never returns) /* - * Copy DATA segment, clear BSS segment, set up real stack, - * initialize heap, start C program. + * Copy DATA segment, clear BSS segment, set up real stack, start C program. * Assume that DATA and BSS sizes are multiples of 4. */ PUBLIC (_CopyDataClearBSSAndStart) -SYM(_CopyDataClearBSSAndStart): - lea copy_start,a0 | Get start of DATA in RAM - lea SYM(etext),a2 | Get start of DATA in ROM +_CopyDataClearBSSAndStart: + lea _copy_start,a0 | Get start of DATA in RAM + lea etext,a2 | Get start of DATA in ROM cmpl a0,a2 | Are they the same? beq.s NOCOPY | Yes, no copy necessary - lea copy_end,a1 | Get end of DATA in RAM + lea _copy_end,a1 | Get end of DATA in RAM bra.s COPYLOOPTEST | Branch into copy loop COPYLOOP: movel a2@+,a0@+ | Copy word from ROM to RAM @@ -384,8 +382,8 @@ COPYLOOPTEST: bcs.s COPYLOOP | No, skip NOCOPY: - lea clear_start,a0 | Get start of BSS - lea clear_end,a1 | Get end of BSS + lea _clear_start,a0 | Get start of BSS + lea _clear_end,a1 | Get end of BSS clrl d0 | Value to set bra.s ZEROLOOPTEST | Branch into clear loop ZEROLOOP: @@ -394,36 +392,32 @@ ZEROLOOPTEST: cmpl a1,a0 | Done? bcs.s ZEROLOOP | No, skip + movel 4(a7),_RamSize | Set RAM size + movel #_stack_init,a7 | set master stack pointer pea env | envp pea arg | argv movel d0,a7@- | argc - jsr SYM(boot_card) | Call C main + jsr boot_card | Call C main PUBLIC (_mainDone) -SYM(_mainDone): +_mainDone: nop | Leave spot for breakpoint movew #1,a7 | Force a double bus error movel d0,a7@- | This should cause a RESET stop #0x2700 | Stop with interrupts disabled - bra.l SYM(_mainDone) | Stuck forever + bra.l _mainDone | Stuck forever .align 2 - PUBLIC (_HeapSize) -SYM (_HeapSize): - .long HeapSize - PUBLIC (_StackSize) -SYM (_StackSize): - .long StackSize END_CODE BEGIN_DATA_DCL .align 2 PUBLIC (environ) -SYM (environ): +environ: .long env PUBLIC (_M68kSpuriousInterruptCount) -SYM (_M68kSpuriousInterruptCount): +_M68kSpuriousInterruptCount: .long 0 END_DATA_DCL @@ -433,4 +427,3 @@ arg: .long 0 END_BSS END - diff --git a/c/src/lib/libbsp/m68k/gen68360/startup/Makefile.in b/c/src/lib/libbsp/m68k/gen68360/startup/Makefile.in index 771c89f5cb..81165e4564 100644 --- a/c/src/lib/libbsp/m68k/gen68360/startup/Makefile.in +++ b/c/src/lib/libbsp/m68k/gen68360/startup/Makefile.in @@ -16,8 +16,8 @@ VPATH = @srcdir@:@srcdir@/../../shared:@srcdir@/../../../shared PGM = ${ARCH}/startup.rel # C source names, if any, go here -- minus the .c -C_PIECES = alloc360 bspclean bsplibc bsppost bspstart init68360 bootcard \ - main sbrk setvec gnatinstallhandler +C_PIECES = alloc360 bspclean bsplibc bsppost m68kpretaskinghook \ + bspstart init68360 bootcard main sbrk setvec gnatinstallhandler C_FILES = $(C_PIECES:%=%.c) C_O_FILES = $(C_PIECES:%=${ARCH}/%.o) diff --git a/c/src/lib/libbsp/m68k/gen68360/startup/bspstart.c b/c/src/lib/libbsp/m68k/gen68360/startup/bspstart.c index aa3f48bf01..9279cf6cd1 100644 --- a/c/src/lib/libbsp/m68k/gen68360/startup/bspstart.c +++ b/c/src/lib/libbsp/m68k/gen68360/startup/bspstart.c @@ -28,6 +28,7 @@ extern rtems_configuration_table Configuration; rtems_configuration_table BSP_Configuration; +unsigned long _RamSize; rtems_cpu_table Cpu_table; @@ -39,33 +40,8 @@ char *rtems_progname; void bsp_postdriver_hook(void); void bsp_libc_init( void *, unsigned32, int ); +void bsp_pretasking_hook(void); /* m68k version */ -/* - * Function: bsp_pretasking_hook - * Created: 95/03/10 - * - * Description: - * BSP pretasking hook. Called just before drivers are initialized. - * Used to setup libc and install any BSP extensions. - * - * NOTES: - * Must not use libc (to do io) from here, since drivers are - * not yet initialized. - * - */ - -void bsp_pretasking_hook(void) -{ - extern void *_HeapStart; - extern rtems_unsigned32 _HeapSize; - - bsp_libc_init(&_HeapStart, _HeapSize, 0); - -#ifdef RTEMS_DEBUG - rtems_debug_enable( RTEMS_DEBUG_ALL_MASK ); -#endif -} - /* * bsp_start * @@ -83,9 +59,6 @@ void bsp_start( void ) * typically done by stock BSPs) by subtracting the required amount * of work space from the last physical address on the CPU board. */ -#if 0 - Cpu_table.interrupt_vector_table = (mc68000_isr *) 0/*&M68Kvec*/; -#endif /* * Need to "allocate" the memory for the RTEMS Workspace and diff --git a/c/src/lib/libbsp/m68k/gen68360/startup/init68360.c b/c/src/lib/libbsp/m68k/gen68360/startup/init68360.c index 91297db5eb..8a68524766 100644 --- a/c/src/lib/libbsp/m68k/gen68360/startup/init68360.c +++ b/c/src/lib/libbsp/m68k/gen68360/startup/init68360.c @@ -42,7 +42,8 @@ void _Init68360 (void) { int i; m68k_isr_entry *vbr; - extern void _CopyDataClearBSSAndStart (void); + unsigned long ramSize; + extern void _CopyDataClearBSSAndStart (unsigned long ramSize); #if (defined (__mc68040__)) /* @@ -138,6 +139,7 @@ void _Init68360 (void) * Wait for chips to power up * Perform 8 read cycles */ + ramSize = 1 * 1024 * 1024; m360.memc[1].or = M360_MEMC_OR_TCYC(0) | M360_MEMC_OR_1MB | M360_MEMC_OR_DRAM; @@ -275,6 +277,7 @@ void _Init68360 (void) /* * Step 12: Initialize the system RAM */ + ramSize = 2 * 1024 * 1024; /* first bank 1MByte DRAM */ m360.memc[1].or = M360_MEMC_OR_TCYC(2) | M360_MEMC_OR_1MB | M360_MEMC_OR_PGME | M360_MEMC_OR_DRAM; @@ -334,7 +337,7 @@ void _Init68360 (void) * Disable timers during FREEZE * Enable bus monitor during FREEZE * BCLRO* arbitration level 3 - */ + */ #elif (defined (GEN68360_WITH_SRAM)) /* @@ -417,6 +420,7 @@ void _Init68360 (void) * 512Kx32 SRAM on CS1* * 0 wait states */ + ramSize = 1 * 1024 * 1024; m360.memc[1].br = (unsigned long)&_RamBase | M360_MEMC_BR_V; m360.memc[1].or = M360_MEMC_OR_WAITS(0) | M360_MEMC_OR_2MB | M360_MEMC_OR_32BIT; @@ -606,6 +610,12 @@ void _Init68360 (void) */ m360.memc[1].br |= M360_MEMC_BR_PAREN; } + switch (m360.gmr & 0x001C0000) { + default: ramSize = 4 * 1024 * 1024; break; + case M360_GMR_PGS(1): ramSize = 1 * 1024 * 1024; break; + case M360_GMR_PGS(3): ramSize = 4 * 1024 * 1024; break; + case M360_GMR_PGS(5): ramSize = 16 * 1024 * 1024; break; + } /* * Step 13: Copy the exception vector table to system RAM @@ -650,6 +660,8 @@ void _Init68360 (void) /* * Copy data, clear BSS, switch stacks and call main() + * Must pass ramSize as argument since the data/bss segment + * may be overwritten. */ - _CopyDataClearBSSAndStart (); + _CopyDataClearBSSAndStart (ramSize); } diff --git a/c/src/lib/libbsp/m68k/gen68360/startup/linkcmds b/c/src/lib/libbsp/m68k/gen68360/startup/linkcmds index c72364b9d3..39f4c8dbd3 100644 --- a/c/src/lib/libbsp/m68k/gen68360/startup/linkcmds +++ b/c/src/lib/libbsp/m68k/gen68360/startup/linkcmds @@ -13,9 +13,10 @@ /* * Declare some sizes. + * A heap size of 0 means `use all available memory for the heap'. */ -HeapSize = DEFINED(HeapSize) ? HeapSize : 0x10000; -StackSize = DEFINED(StackSize) ? StackSize : 0x1000; +_HeapSize = DEFINED(_HeapSize) ? _HeapSize : 0x0; +_StackSize = DEFINED(_StackSize) ? _StackSize : 0x1000; /* * Declare on-board memory. @@ -57,18 +58,6 @@ SECTIONS { /* * Initialization and finalization code. - * - * Various files can provide initialization and finalization - * functions. crtbegin.o and crtend.o are two instances. The - * body of these functions are in .init and .fini sections. We - * accumulate the bodies here, and prepend function prologues - * from crti.o and function epilogues from crtn.o. crti.o must - * be linked first; crtn.o must be linked last. Because these - * are wildcards, it doesn't matter if the user does not - * actually link against crti.o and crtn.o; the linker won't - * look for a file to match a wildcard. The wildcard also - * means that it doesn't matter which directory crti.o and - * crtn.o are in. */ PROVIDE (_init = .); *crti.o(.init) @@ -81,15 +70,6 @@ SECTIONS { /* * C++ constructors/destructors - * - * gcc uses crtbegin.o to find the start of the constructors - * and destructors so we make sure it is first. Because this - * is a wildcard, it doesn't matter if the user does not - * actually link against crtbegin.o; the linker won't look for - * a file to match a wildcard. The wildcard also means that - * it doesn't matter which directory crtbegin.o is in. The - * constructor and destructor list are terminated in - * crtend.o. The same comments apply to it. */ . = ALIGN (16); *crtbegin.o(.ctors) @@ -117,33 +97,27 @@ SECTIONS { PROVIDE (etext = .); } >ram .data : { - copy_start = .; + _copy_start = .; *(.data) *(.gnu.linkonce.d*) *(.gcc_except_table) . = ALIGN (16); - PROVIDE (_edata = .); - copy_end = .; + PROVIDE (edata = .); + _copy_end = .; } >ram .bss : { M68Kvec = .; - _M68Kvec = .; . += (256 * 4); - clear_start = .; + _clear_start = .; *(.bss) *(COMMON) . = ALIGN (16); PROVIDE (end = .); - . += StackSize; - PROVIDE (_stack_init = .); - + . += _StackSize; . = ALIGN (16); - PROVIDE (_HeapStart = .); - . += HeapSize; - PROVIDE (_HeapEnd = .); - - PROVIDE (_clear_end = .); + _stack_init = .; + _clear_end = .; _WorkspaceBase = .; } >ram @@ -153,8 +127,6 @@ SECTIONS { */ dpram : { m360 = .; - _m360 = .; . += (8 * 1024); - } >dpram } diff --git a/c/src/lib/libbsp/m68k/gen68360/startup/linkcmds.bootp b/c/src/lib/libbsp/m68k/gen68360/startup/linkcmds.bootp index 6661fc2c2a..ff49004bc7 100644 --- a/c/src/lib/libbsp/m68k/gen68360/startup/linkcmds.bootp +++ b/c/src/lib/libbsp/m68k/gen68360/startup/linkcmds.bootp @@ -117,7 +117,7 @@ SECTIONS { *(.bss) *(COMMON) . = ALIGN (16); - PROVIDE (end = .); + _end = .; _HeapStart = .; . += HeapSize; diff --git a/c/src/lib/libbsp/m68k/gen68360/startup/linkcmds.prom b/c/src/lib/libbsp/m68k/gen68360/startup/linkcmds.prom index 522bea54ca..0903e00e4a 100644 --- a/c/src/lib/libbsp/m68k/gen68360/startup/linkcmds.prom +++ b/c/src/lib/libbsp/m68k/gen68360/startup/linkcmds.prom @@ -116,7 +116,7 @@ SECTIONS { *(.bss) *(COMMON) . = ALIGN (16); - PROVIDE (end = .); + _end = .; _HeapStart = .; . += HeapSize; -- cgit v1.2.3