From bf6cf2109492de6d763191f3fc9933a7f1835c0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Revol?= Date: Sat, 23 Oct 2010 15:53:51 +0000 Subject: [PATCH] Fix AmigaOS calls : a6 is required to point to the library base, but our gcc uses it as frame pointer, so we must save it before calling. Fix the console and remove test panics. We now display the menu, although not in the best colors : http://revolf.free.fr/beos/shots/shot_haiku_loader_amiga_m68k_002.png (Yes, the mouse moves too :p) Amiga !!!! git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39074 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../boot/platform/amiga_m68k/console.cpp | 23 +- .../boot/platform/amiga_m68k/rom_calls.h | 204 +++++++++--------- src/system/boot/platform/amiga_m68k/start.cpp | 1 - 3 files changed, 105 insertions(+), 123 deletions(-) diff --git a/src/system/boot/platform/amiga_m68k/console.cpp b/src/system/boot/platform/amiga_m68k/console.cpp index b5bc41f54e..916327212b 100644 --- a/src/system/boot/platform/amiga_m68k/console.cpp +++ b/src/system/boot/platform/amiga_m68k/console.cpp @@ -70,9 +70,10 @@ ConsoleHandle::WriteAt(void */*cookie*/, off_t /*pos*/, const void *buffer, break; if (string[i] == '\n') { //Text(&sScreen->RastPort, &string[i - len], len); - fY = 0; - fX++; + fX = 0; + fY++; len = 0; + console_set_cursor(fX, fY); continue; } Text(&sScreen->RastPort, &string[i], 1); @@ -130,28 +131,10 @@ console_init(void) sFontHeight = sScreen->Font->ta_YSize; sFontWidth = font->tf_XSize; - ClearScreen(&sScreen->RastPort); - - //CloseScreen(sScreen); - //TODO - dbgerr = stdout = stderr = (FILE *)&sOutput; -//XXX: testing - Move(&sScreen->RastPort, 30, 30); - Text(&sScreen->RastPort, "kikou", 5); - -// those crash for the moment. Stack alignment issue ? -// sOutput.WriteAt(NULL, 0LL, "abcdefgh", 10); -// dprintf("kk\nbb\n"); - -//XXX - while (true) {} - - //panic("console_init done\n"); - return B_OK; } diff --git a/src/system/boot/platform/amiga_m68k/rom_calls.h b/src/system/boot/platform/amiga_m68k/rom_calls.h index 5e7938074e..dc8f51a182 100644 --- a/src/system/boot/platform/amiga_m68k/rom_calls.h +++ b/src/system/boot/platform/amiga_m68k/rom_calls.h @@ -43,10 +43,10 @@ extern "C" { register int _a0 __asm("a0"); \ register int _a1 __asm("a1"); \ register rt _##name##_re __asm("d0"); \ - register void *const _##name##_bn __asm("a6") = (bn); \ - __asm volatile ("jsr %%a6@(-"#offs":W)" \ + void *const _##name##_bn = (bn); \ + __asm volatile ("move.l %%a6,%%sp@-\n\tmove.l %[libbase],%%a6\n\tjsr %%a6@(-"#offs":W)\n\tmove.l %%sp@+,%%a6" \ : "=r" (_##name##_re), "=r" (_d1), "=r" (_a0), "=r" (_a1) \ - : "r" (_##name##_bn) \ + : [libbase] "a" (_##name##_bn) \ : "fp0", "fp1", "cc", "memory"); \ _##name##_re; \ }); \ @@ -59,10 +59,10 @@ extern "C" { register int _d1 __asm("d1"); \ register int _a0 __asm("a0"); \ register int _a1 __asm("a1"); \ - register void *const _##name##_bn __asm("a6") = (bn); \ - __asm volatile ("jsr %%a6@(-"#offs":W)" \ + void *const _##name##_bn = (bn); \ + __asm volatile ("move.l %%a6,%%sp@-\n\tmove.l %[libbase],%%a6\n\tjsr %%a6@(-"#offs":W)\n\tmove.l %%sp@+,%%a6" \ : "=r" (_d0), "=r" (_d1), "=r" (_a0), "=r" (_a1) \ - : "r" (_##name##_bn) \ + : [libbase] "a" (_##name##_bn) \ : "fp0", "fp1", "cc", "memory"); \ } \ }) @@ -75,11 +75,11 @@ extern "C" { register int _a0 __asm("a0"); \ register int _a1 __asm("a1"); \ register rt _##name##_re __asm("d0"); \ - register void *const _##name##_bn __asm("a6") = (bn); \ + void *const _##name##_bn = (bn); \ register t1 _n1 __asm(#r1) = _##name##_v1; \ - __asm volatile ("jsr %%a6@(-"#offs":W)" \ + __asm volatile ("move.l %%a6,%%sp@-\n\tmove.l %[libbase],%%a6\n\tjsr %%a6@(-"#offs":W)\n\tmove.l %%sp@+,%%a6" \ : "=r" (_##name##_re), "=r" (_d1), "=r" (_a0), "=r" (_a1) \ - : "r" (_##name##_bn), "rf"(_n1) \ + : [libbase] "a" (_##name##_bn), "rf"(_n1) \ : "fp0", "fp1", "cc", "memory"); \ _##name##_re; \ }); \ @@ -93,11 +93,11 @@ extern "C" { register int _d1 __asm("d1"); \ register int _a0 __asm("a0"); \ register int _a1 __asm("a1"); \ - register void *const _##name##_bn __asm("a6") = (bn); \ + void *const _##name##_bn = (bn); \ register t1 _n1 __asm(#r1) = _##name##_v1; \ - __asm volatile ("jsr %%a6@(-"#offs":W)" \ + __asm volatile ("move.l %%a6,%%sp@-\n\tmove.l %[libbase],%%a6\n\tjsr %%a6@(-"#offs":W)\n\tmove.l %%sp@+,%%a6" \ : "=r" (_d0), "=r" (_d1), "=r" (_a0), "=r" (_a1) \ - : "r" (_##name##_bn), "rf"(_n1) \ + : [libbase] "a" (_##name##_bn), "rf"(_n1) \ : "fp0", "fp1", "cc", "memory"); \ } \ }) @@ -111,11 +111,11 @@ extern "C" { register int _a0 __asm("a0"); \ register int _a1 __asm("a1"); \ register rt _##name##_re __asm("d0"); \ - register void *const _##name##_bn __asm("a6") = (bn); \ + void *const _##name##_bn = (bn); \ register t1 _n1 __asm(#r1) = _##name##_v1; \ - __asm volatile ("exg d7,a5\n\tjsr %%a6@(-"#offs":W)\n\texg d7,a5" \ + __asm volatile ("exg d7,a5\n\tmove.l %%a6,%%sp@-\n\tmove.l %[libbase],%%a6\n\tjsr %%a6@(-"#offs":W)\n\tmove.l %%sp@+,%%a6\n\texg d7,a5" \ : "=r" (_##name##_re), "=r" (_d1), "=r" (_a0), "=r" (_a1) \ - : "r" (_##name##_bn), "rf"(_n1) \ + : [libbase] "a" (_##name##_bn), "rf"(_n1) \ : "fp0", "fp1", "cc", "memory"); \ _##name##_re; \ }); \ @@ -130,11 +130,11 @@ extern "C" { register int _d1 __asm("d1"); \ register int _a0 __asm("a0"); \ register int _a1 __asm("a1"); \ - register void *const _##name##_bn __asm("a6") = (bn); \ + void *const _##name##_bn = (bn); \ register t1 _n1 __asm(#r1) = _##name##_v1; \ - __asm volatile ("exg d7,a5\n\tjsr %%a6@(-"#offs":W)\n\texg d7,a5" \ + __asm volatile ("exg d7,a5\n\tmove.l %%a6,%%sp@-\n\tmove.l %[libbase],%%a6\n\tjsr %%a6@(-"#offs":W)\n\tmove.l %%sp@+,%%a6\n\texg d7,a5" \ : "=r" (_d0), "=r" (_d1), "=r" (_a0), "=r" (_a1) \ - : "r" (_##name##_bn), "rf"(_n1) \ + : [libbase] "a" (_##name##_bn), "rf"(_n1) \ : "fp0", "fp1", "cc", "memory"); \ } \ }) @@ -149,11 +149,11 @@ extern "C" { register int _a0 __asm("a0"); \ register int _a1 __asm("a1"); \ register rt _##name##_re __asm("d0"); \ - register void *const _##name##_bn __asm("a6") = (bn); \ + void *const _##name##_bn = (bn); \ register t1 _n1 __asm(#r1) = _##name##_v1; \ - __asm volatile ("exg d7,a5\n\tjsr %%a6@(-"#offs":W)\n\texg d7,a5" \ + __asm volatile ("exg d7,a5\n\tmove.l %%a6,%%sp@-\n\tmove.l %[libbase],%%a6\n\tjsr %%a6@(-"#offs":W)\n\tmove.l %%sp@+,%%a6\n\texg d7,a5" \ : "=r" (_##name##_re), "=r" (_d1), "=r" (_a0), "=r" (_a1) \ - : "r" (_##name##_bn), "rf"(_n1) \ + : [libbase] "a" (_##name##_bn), "rf"(_n1) \ : "fp0", "fp1", "cc", "memory"); \ _##name##_re; \ }); \ @@ -168,12 +168,12 @@ extern "C" { register int _a0 __asm("a0"); \ register int _a1 __asm("a1"); \ register rt _##name##_re __asm("d0"); \ - register void *const _##name##_bn __asm("a6") = (bn); \ + void *const _##name##_bn = (bn); \ register t1 _n1 __asm(#r1) = _##name##_v1; \ register t2 _n2 __asm(#r2) = _##name##_v2; \ - __asm volatile ("jsr %%a6@(-"#offs":W)" \ + __asm volatile ("move.l %%a6,%%sp@-\n\tmove.l %[libbase],%%a6\n\tjsr %%a6@(-"#offs":W)\n\tmove.l %%sp@+,%%a6" \ : "=r" (_##name##_re), "=r" (_d1), "=r" (_a0), "=r" (_a1) \ - : "r" (_##name##_bn), "rf"(_n1), "rf"(_n2) \ + : [libbase] "a" (_##name##_bn), "rf"(_n1), "rf"(_n2) \ : "fp0", "fp1", "cc", "memory"); \ _##name##_re; \ }); \ @@ -188,12 +188,12 @@ extern "C" { register int _d1 __asm("d1"); \ register int _a0 __asm("a0"); \ register int _a1 __asm("a1"); \ - register void *const _##name##_bn __asm("a6") = (bn); \ + void *const _##name##_bn = (bn); \ register t1 _n1 __asm(#r1) = _##name##_v1; \ register t2 _n2 __asm(#r2) = _##name##_v2; \ - __asm volatile ("jsr %%a6@(-"#offs":W)" \ + __asm volatile ("move.l %%a6,%%sp@-\n\tmove.l %[libbase],%%a6\n\tjsr %%a6@(-"#offs":W)\n\tmove.l %%sp@+,%%a6" \ : "=r" (_d0), "=r" (_d1), "=r" (_a0), "=r" (_a1) \ - : "r" (_##name##_bn), "rf"(_n1), "rf"(_n2) \ + : [libbase] "a" (_##name##_bn), "rf"(_n1), "rf"(_n2) \ : "fp0", "fp1", "cc", "memory"); \ } \ }) @@ -210,7 +210,7 @@ extern "C" { register rt _##name##_re __asm("d0"); \ register t1 _n1 __asm(#r1) = _##name##_v1; \ register t2 _n2 __asm(#r2) = _##name##_v2; \ - __asm volatile ("jsr %%a6@(-"#offs":W)" \ + __asm volatile ("move.l %%a6,%%sp@-\n\tmove.l %[libbase],%%a6\n\tjsr %%a6@(-"#offs":W)\n\tmove.l %%sp@+,%%a6" \ : "=r" (_##name##_re), "=r" (_d1), "=r" (_a0), "=r" (_a1) \ : "r"(_n1), "rf"(_n2) \ : "fp0", "fp1", "cc", "memory"); \ @@ -229,12 +229,12 @@ extern "C" { register int _a0 __asm("a0"); \ register int _a1 __asm("a1"); \ register rt _##name##_re __asm("d0"); \ - register void *const _##name##_bn __asm("a6") = (bn); \ + void *const _##name##_bn = (bn); \ register t1 _n1 __asm(#r1) = _##name##_v1; \ register t2 _n2 __asm(#r2) = _##name##_v2; \ - __asm volatile ("jsr %%a6@(-"#offs":W)" \ + __asm volatile ("move.l %%a6,%%sp@-\n\tmove.l %[libbase],%%a6\n\tjsr %%a6@(-"#offs":W)\n\tmove.l %%sp@+,%%a6" \ : "=r" (_##name##_re), "=r" (_d1), "=r" (_a0), "=r" (_a1) \ - : "r" (_##name##_bn), "rf"(_n1), "rf"(_n2) \ + : [libbase] "a" (_##name##_bn), "rf"(_n1), "rf"(_n2) \ : "fp0", "fp1", "cc", "memory"); \ _##name##_re; \ }); \ @@ -250,13 +250,13 @@ extern "C" { register int _a0 __asm("a0"); \ register int _a1 __asm("a1"); \ register rt _##name##_re __asm("d0"); \ - register void *const _##name##_bn __asm("a6") = (bn); \ + void *const _##name##_bn = (bn); \ register t1 _n1 __asm(#r1) = _##name##_v1; \ register t2 _n2 __asm(#r2) = _##name##_v2; \ register t3 _n3 __asm(#r3) = _##name##_v3; \ - __asm volatile ("jsr %%a6@(-"#offs":W)" \ + __asm volatile ("move.l %%a6,%%sp@-\n\tmove.l %[libbase],%%a6\n\tjsr %%a6@(-"#offs":W)\n\tmove.l %%sp@+,%%a6" \ : "=r" (_##name##_re), "=r" (_d1), "=r" (_a0), "=r" (_a1) \ - : "r" (_##name##_bn), "rf"(_n1), "rf"(_n2), "rf"(_n3) \ + : [libbase] "a" (_##name##_bn), "rf"(_n1), "rf"(_n2), "rf"(_n3) \ : "fp0", "fp1", "cc", "memory"); \ _##name##_re; \ }); \ @@ -272,13 +272,13 @@ extern "C" { register int _d1 __asm("d1"); \ register int _a0 __asm("a0"); \ register int _a1 __asm("a1"); \ - register void *const _##name##_bn __asm("a6") = (bn); \ + void *const _##name##_bn = (bn); \ register t1 _n1 __asm(#r1) = _##name##_v1; \ register t2 _n2 __asm(#r2) = _##name##_v2; \ register t3 _n3 __asm(#r3) = _##name##_v3; \ - __asm volatile ("jsr %%a6@(-"#offs":W)" \ + __asm volatile ("move.l %%a6,%%sp@-\n\tmove.l %[libbase],%%a6\n\tjsr %%a6@(-"#offs":W)\n\tmove.l %%sp@+,%%a6" \ : "=r" (_d0), "=r" (_d1), "=r" (_a0), "=r" (_a1) \ - : "r" (_##name##_bn), "rf"(_n1), "rf"(_n2), "rf"(_n3) \ + : [libbase] "a" (_##name##_bn), "rf"(_n1), "rf"(_n2), "rf"(_n3) \ : "fp0", "fp1", "cc", "memory"); \ } \ }) @@ -297,7 +297,7 @@ extern "C" { register t1 _n1 __asm(#r1) = _##name##_v1; \ register t2 _n2 __asm(#r2) = _##name##_v2; \ register t3 _n3 __asm(#r3) = _##name##_v3; \ - __asm volatile ("jsr %%a6@(-"#offs":W)" \ + __asm volatile ("move.l %%a6,%%sp@-\n\tmove.l %[libbase],%%a6\n\tjsr %%a6@(-"#offs":W)\n\tmove.l %%sp@+,%%a6" \ : "=r" (_##name##_re), "=r" (_d1), "=r" (_a0), "=r" (_a1) \ : "r"(_n1), "rf"(_n2), "rf"(_n3) \ : "fp0", "fp1", "cc", "memory"); \ @@ -319,7 +319,7 @@ extern "C" { register t1 _n1 __asm(#r1) = _##name##_v1; \ register t2 _n2 __asm(#r2) = _##name##_v2; \ register t3 _n3 __asm(#r3) = _##name##_v3; \ - __asm volatile ("jsr %%a6@(-"#offs":W)" \ + __asm volatile ("move.l %%a6,%%sp@-\n\tmove.l %[libbase],%%a6\n\tjsr %%a6@(-"#offs":W)\n\tmove.l %%sp@+,%%a6" \ : "=r" (_d0), "=r" (_d1), "=r" (_a0), "=r" (_a1) \ : "r"(_n1), "rf"(_n2), "rf"(_n3) \ : "fp0", "fp1", "cc", "memory"); \ @@ -338,13 +338,13 @@ extern "C" { register int _a0 __asm("a0"); \ register int _a1 __asm("a1"); \ register rt _##name##_re __asm("d0"); \ - register void *const _##name##_bn __asm("a6") = (bn); \ + void *const _##name##_bn = (bn); \ register t1 _n1 __asm(#r1) = _##name##_v1; \ register t2 _n2 __asm(#r2) = _##name##_v2; \ register t3 _n3 __asm(#r3) = _##name##_v3; \ - __asm volatile ("jsr %%a6@(-"#offs":W)" \ + __asm volatile ("move.l %%a6,%%sp@-\n\tmove.l %[libbase],%%a6\n\tjsr %%a6@(-"#offs":W)\n\tmove.l %%sp@+,%%a6" \ : "=r" (_##name##_re), "=r" (_d1), "=r" (_a0), "=r" (_a1) \ - : "r" (_##name##_bn), "rf"(_n1), "rf"(_n2), "rf"(_n3) \ + : [libbase] "a" (_##name##_bn), "rf"(_n1), "rf"(_n2), "rf"(_n3) \ : "fp0", "fp1", "cc", "memory"); \ _##name##_re; \ }); \ @@ -362,13 +362,13 @@ extern "C" { register int _d1 __asm("d1"); \ register int _a0 __asm("a0"); \ register int _a1 __asm("a1"); \ - register void *const _##name##_bn __asm("a6") = (bn); \ + void *const _##name##_bn = (bn); \ register t1 _n1 __asm(#r1) = _##name##_v1; \ register t2 _n2 __asm(#r2) = _##name##_v2; \ register t3 _n3 __asm(#r3) = _##name##_v3; \ - __asm volatile ("jsr %%a6@(-"#offs":W)" \ + __asm volatile ("move.l %%a6,%%sp@-\n\tmove.l %[libbase],%%a6\n\tjsr %%a6@(-"#offs":W)\n\tmove.l %%sp@+,%%a6" \ : "=r" (_d0), "=r" (_d1), "=r" (_a0), "=r" (_a1) \ - : "r" (_##name##_bn), "rf"(_n1), "rf"(_n2), "rf"(_n3) \ + : [libbase] "a" (_##name##_bn), "rf"(_n1), "rf"(_n2), "rf"(_n3) \ : "fp0", "fp1", "cc", "memory"); \ } \ }) @@ -384,14 +384,14 @@ extern "C" { register int _a0 __asm("a0"); \ register int _a1 __asm("a1"); \ register rt _##name##_re __asm("d0"); \ - register void *const _##name##_bn __asm("a6") = (bn); \ + void *const _##name##_bn = (bn); \ register t1 _n1 __asm(#r1) = _##name##_v1; \ register t2 _n2 __asm(#r2) = _##name##_v2; \ register t3 _n3 __asm(#r3) = _##name##_v3; \ register t4 _n4 __asm(#r4) = _##name##_v4; \ - __asm volatile ("jsr %%a6@(-"#offs":W)" \ + __asm volatile ("move.l %%a6,%%sp@-\n\tmove.l %[libbase],%%a6\n\tjsr %%a6@(-"#offs":W)\n\tmove.l %%sp@+,%%a6" \ : "=r" (_##name##_re), "=r" (_d1), "=r" (_a0), "=r" (_a1) \ - : "r" (_##name##_bn), "rf"(_n1), "rf"(_n2), "rf"(_n3), "rf"(_n4) \ + : [libbase] "a" (_##name##_bn), "rf"(_n1), "rf"(_n2), "rf"(_n3), "rf"(_n4) \ : "fp0", "fp1", "cc", "memory"); \ _##name##_re; \ }); \ @@ -408,14 +408,14 @@ extern "C" { register int _d1 __asm("d1"); \ register int _a0 __asm("a0"); \ register int _a1 __asm("a1"); \ - register void *const _##name##_bn __asm("a6") = (bn); \ + void *const _##name##_bn = (bn); \ register t1 _n1 __asm(#r1) = _##name##_v1; \ register t2 _n2 __asm(#r2) = _##name##_v2; \ register t3 _n3 __asm(#r3) = _##name##_v3; \ register t4 _n4 __asm(#r4) = _##name##_v4; \ - __asm volatile ("jsr %%a6@(-"#offs":W)" \ + __asm volatile ("move.l %%a6,%%sp@-\n\tmove.l %[libbase],%%a6\n\tjsr %%a6@(-"#offs":W)\n\tmove.l %%sp@+,%%a6" \ : "=r" (_d0), "=r" (_d1), "=r" (_a0), "=r" (_a1) \ - : "r" (_##name##_bn), "rf"(_n1), "rf"(_n2), "rf"(_n3), "rf"(_n4) \ + : [libbase] "a" (_##name##_bn), "rf"(_n1), "rf"(_n2), "rf"(_n3), "rf"(_n4) \ : "fp0", "fp1", "cc", "memory"); \ } \ }) @@ -433,14 +433,14 @@ extern "C" { register int _a0 __asm("a0"); \ register int _a1 __asm("a1"); \ register rt _##name##_re __asm("d0"); \ - register void *const _##name##_bn __asm("a6") = (bn); \ + void *const _##name##_bn = (bn); \ register t1 _n1 __asm(#r1) = _##name##_v1; \ register t2 _n2 __asm(#r2) = _##name##_v2; \ register t3 _n3 __asm(#r3) = _##name##_v3; \ register t4 _n4 __asm(#r4) = _##name##_v4; \ - __asm volatile ("jsr %%a6@(-"#offs":W)" \ + __asm volatile ("move.l %%a6,%%sp@-\n\tmove.l %[libbase],%%a6\n\tjsr %%a6@(-"#offs":W)\n\tmove.l %%sp@+,%%a6" \ : "=r" (_##name##_re), "=r" (_d1), "=r" (_a0), "=r" (_a1) \ - : "r" (_##name##_bn), "rf"(_n1), "rf"(_n2), "rf"(_n3), "rf"(_n4) \ + : [libbase] "a" (_##name##_bn), "rf"(_n1), "rf"(_n2), "rf"(_n3), "rf"(_n4) \ : "fp0", "fp1", "cc", "memory"); \ _##name##_re; \ }); \ @@ -458,15 +458,15 @@ extern "C" { register int _a0 __asm("a0"); \ register int _a1 __asm("a1"); \ register rt _##name##_re __asm("d0"); \ - register void *const _##name##_bn __asm("a6") = (bn); \ + void *const _##name##_bn = (bn); \ register t1 _n1 __asm(#r1) = _##name##_v1; \ register t2 _n2 __asm(#r2) = _##name##_v2; \ register t3 _n3 __asm(#r3) = _##name##_v3; \ register t4 _n4 __asm(#r4) = _##name##_v4; \ register t5 _n5 __asm(#r5) = _##name##_v5; \ - __asm volatile ("jsr %%a6@(-"#offs":W)" \ + __asm volatile ("move.l %%a6,%%sp@-\n\tmove.l %[libbase],%%a6\n\tjsr %%a6@(-"#offs":W)\n\tmove.l %%sp@+,%%a6" \ : "=r" (_##name##_re), "=r" (_d1), "=r" (_a0), "=r" (_a1) \ - : "r" (_##name##_bn), "rf"(_n1), "rf"(_n2), "rf"(_n3), "rf"(_n4), "rf"(_n5) \ + : [libbase] "a" (_##name##_bn), "rf"(_n1), "rf"(_n2), "rf"(_n3), "rf"(_n4), "rf"(_n5) \ : "fp0", "fp1", "cc", "memory"); \ _##name##_re; \ }); \ @@ -484,15 +484,15 @@ extern "C" { register int _d1 __asm("d1"); \ register int _a0 __asm("a0"); \ register int _a1 __asm("a1"); \ - register void *const _##name##_bn __asm("a6") = (bn); \ + void *const _##name##_bn = (bn); \ register t1 _n1 __asm(#r1) = _##name##_v1; \ register t2 _n2 __asm(#r2) = _##name##_v2; \ register t3 _n3 __asm(#r3) = _##name##_v3; \ register t4 _n4 __asm(#r4) = _##name##_v4; \ register t5 _n5 __asm(#r5) = _##name##_v5; \ - __asm volatile ("jsr %%a6@(-"#offs":W)" \ + __asm volatile ("move.l %%a6,%%sp@-\n\tmove.l %[libbase],%%a6\n\tjsr %%a6@(-"#offs":W)\n\tmove.l %%sp@+,%%a6" \ : "=r" (_d0), "=r" (_d1), "=r" (_a0), "=r" (_a1) \ - : "r" (_##name##_bn), "rf"(_n1), "rf"(_n2), "rf"(_n3), "rf"(_n4), "rf"(_n5) \ + : [libbase] "a" (_##name##_bn), "rf"(_n1), "rf"(_n2), "rf"(_n3), "rf"(_n4), "rf"(_n5) \ : "fp0", "fp1", "cc", "memory"); \ } \ }) @@ -511,15 +511,15 @@ extern "C" { register int _a0 __asm("a0"); \ register int _a1 __asm("a1"); \ register rt _##name##_re __asm("d0"); \ - register void *const _##name##_bn __asm("a6") = (bn); \ + void *const _##name##_bn = (bn); \ register t1 _n1 __asm(#r1) = _##name##_v1; \ register t2 _n2 __asm(#r2) = _##name##_v2; \ register t3 _n3 __asm(#r3) = _##name##_v3; \ register t4 _n4 __asm(#r4) = _##name##_v4; \ register t5 _n5 __asm(#r5) = _##name##_v5; \ - __asm volatile ("jsr %%a6@(-"#offs":W)" \ + __asm volatile ("move.l %%a6,%%sp@-\n\tmove.l %[libbase],%%a6\n\tjsr %%a6@(-"#offs":W)\n\tmove.l %%sp@+,%%a6" \ : "=r" (_##name##_re), "=r" (_d1), "=r" (_a0), "=r" (_a1) \ - : "r" (_##name##_bn), "rf"(_n1), "rf"(_n2), "rf"(_n3), "rf"(_n4), "rf"(_n5) \ + : [libbase] "a" (_##name##_bn), "rf"(_n1), "rf"(_n2), "rf"(_n3), "rf"(_n4), "rf"(_n5) \ : "fp0", "fp1", "cc", "memory"); \ _##name##_re; \ }); \ @@ -538,15 +538,15 @@ extern "C" { register int _a0 __asm("a0"); \ register int _a1 __asm("a1"); \ register rt _##name##_re __asm("d0"); \ - register void *const _##name##_bn __asm("a6") = (bn); \ + void *const _##name##_bn = (bn); \ register t1 _n1 __asm(#r1) = _##name##_v1; \ register t2 _n2 __asm(#r2) = _##name##_v2; \ register t3 _n3 __asm(#r3) = _##name##_v3; \ register t4 _n4 __asm(#r4) = _##name##_v4; \ register t5 _n5 __asm(#r5) = _##name##_v5; \ - __asm volatile ("exg d7,a4\n\tjsr %%a6@(-"#offs":W)\n\texg d7,a4" \ + __asm volatile ("exg d7,a4\n\tmove.l %%a6,%%sp@-\n\tmove.l %[libbase],%%a6\n\tjsr %%a6@(-"#offs":W)\n\tmove.l %%sp@+,%%a6\n\texg d7,a4" \ : "=r" (_##name##_re), "=r" (_d1), "=r" (_a0), "=r" (_a1) \ - : "r" (_##name##_bn), "rf"(_n1), "rf"(_n2), "rf"(_n3), "rf"(_n4), "rf"(_n5) \ + : [libbase] "a" (_##name##_bn), "rf"(_n1), "rf"(_n2), "rf"(_n3), "rf"(_n4), "rf"(_n5) \ : "fp0", "fp1", "cc", "memory"); \ _##name##_re; \ }); \ @@ -565,16 +565,16 @@ extern "C" { register int _a0 __asm("a0"); \ register int _a1 __asm("a1"); \ register rt _##name##_re __asm("d0"); \ - register void *const _##name##_bn __asm("a6") = (bn); \ + void *const _##name##_bn = (bn); \ register t1 _n1 __asm(#r1) = _##name##_v1; \ register t2 _n2 __asm(#r2) = _##name##_v2; \ register t3 _n3 __asm(#r3) = _##name##_v3; \ register t4 _n4 __asm(#r4) = _##name##_v4; \ register t5 _n5 __asm(#r5) = _##name##_v5; \ register t6 _n6 __asm(#r6) = _##name##_v6; \ - __asm volatile ("jsr %%a6@(-"#offs":W)" \ + __asm volatile ("move.l %%a6,%%sp@-\n\tmove.l %[libbase],%%a6\n\tjsr %%a6@(-"#offs":W)\n\tmove.l %%sp@+,%%a6" \ : "=r" (_##name##_re), "=r" (_d1), "=r" (_a0), "=r" (_a1) \ - : "r" (_##name##_bn), "rf"(_n1), "rf"(_n2), "rf"(_n3), "rf"(_n4), "rf"(_n5), "rf"(_n6) \ + : [libbase] "a" (_##name##_bn), "rf"(_n1), "rf"(_n2), "rf"(_n3), "rf"(_n4), "rf"(_n5), "rf"(_n6) \ : "fp0", "fp1", "cc", "memory"); \ _##name##_re; \ }); \ @@ -593,16 +593,16 @@ extern "C" { register int _d1 __asm("d1"); \ register int _a0 __asm("a0"); \ register int _a1 __asm("a1"); \ - register void *const _##name##_bn __asm("a6") = (bn); \ + void *const _##name##_bn = (bn); \ register t1 _n1 __asm(#r1) = _##name##_v1; \ register t2 _n2 __asm(#r2) = _##name##_v2; \ register t3 _n3 __asm(#r3) = _##name##_v3; \ register t4 _n4 __asm(#r4) = _##name##_v4; \ register t5 _n5 __asm(#r5) = _##name##_v5; \ register t6 _n6 __asm(#r6) = _##name##_v6; \ - __asm volatile ("jsr %%a6@(-"#offs":W)" \ + __asm volatile ("move.l %%a6,%%sp@-\n\tmove.l %[libbase],%%a6\n\tjsr %%a6@(-"#offs":W)\n\tmove.l %%sp@+,%%a6" \ : "=r" (_d0), "=r" (_d1), "=r" (_a0), "=r" (_a1) \ - : "r" (_##name##_bn), "rf"(_n1), "rf"(_n2), "rf"(_n3), "rf"(_n4), "rf"(_n5), "rf"(_n6) \ + : [libbase] "a" (_##name##_bn), "rf"(_n1), "rf"(_n2), "rf"(_n3), "rf"(_n4), "rf"(_n5), "rf"(_n6) \ : "fp0", "fp1", "cc", "memory"); \ } \ }) @@ -621,7 +621,7 @@ extern "C" { register int _a0 __asm("a0"); \ register int _a1 __asm("a1"); \ register rt _##name##_re __asm("d0"); \ - register void *const _##name##_bn __asm("a6") = (bn); \ + void *const _##name##_bn = (bn); \ register t1 _n1 __asm(#r1) = _##name##_v1; \ register t2 _n2 __asm(#r2) = _##name##_v2; \ register t3 _n3 __asm(#r3) = _##name##_v3; \ @@ -629,9 +629,9 @@ extern "C" { register t5 _n5 __asm(#r5) = _##name##_v5; \ register t6 _n6 __asm(#r6) = _##name##_v6; \ register t7 _n7 __asm(#r7) = _##name##_v7; \ - __asm volatile ("jsr %%a6@(-"#offs":W)" \ + __asm volatile ("move.l %%a6,%%sp@-\n\tmove.l %[libbase],%%a6\n\tjsr %%a6@(-"#offs":W)\n\tmove.l %%sp@+,%%a6" \ : "=r" (_##name##_re), "=r" (_d1), "=r" (_a0), "=r" (_a1) \ - : "r" (_##name##_bn), "rf"(_n1), "rf"(_n2), "rf"(_n3), "rf"(_n4), "rf"(_n5), "rf"(_n6), "rf"(_n7) \ + : [libbase] "a" (_##name##_bn), "rf"(_n1), "rf"(_n2), "rf"(_n3), "rf"(_n4), "rf"(_n5), "rf"(_n6), "rf"(_n7) \ : "fp0", "fp1", "cc", "memory"); \ _##name##_re; \ }); \ @@ -651,7 +651,7 @@ extern "C" { register int _d1 __asm("d1"); \ register int _a0 __asm("a0"); \ register int _a1 __asm("a1"); \ - register void *const _##name##_bn __asm("a6") = (bn); \ + void *const _##name##_bn = (bn); \ register t1 _n1 __asm(#r1) = _##name##_v1; \ register t2 _n2 __asm(#r2) = _##name##_v2; \ register t3 _n3 __asm(#r3) = _##name##_v3; \ @@ -659,9 +659,9 @@ extern "C" { register t5 _n5 __asm(#r5) = _##name##_v5; \ register t6 _n6 __asm(#r6) = _##name##_v6; \ register t7 _n7 __asm(#r7) = _##name##_v7; \ - __asm volatile ("jsr %%a6@(-"#offs":W)" \ + __asm volatile ("move.l %%a6,%%sp@-\n\tmove.l %[libbase],%%a6\n\tjsr %%a6@(-"#offs":W)\n\tmove.l %%sp@+,%%a6" \ : "=r" (_d0), "=r" (_d1), "=r" (_a0), "=r" (_a1) \ - : "r" (_##name##_bn), "rf"(_n1), "rf"(_n2), "rf"(_n3), "rf"(_n4), "rf"(_n5), "rf"(_n6), "rf"(_n7) \ + : [libbase] "a" (_##name##_bn), "rf"(_n1), "rf"(_n2), "rf"(_n3), "rf"(_n4), "rf"(_n5), "rf"(_n6), "rf"(_n7) \ : "fp0", "fp1", "cc", "memory"); \ } \ }) @@ -681,7 +681,7 @@ extern "C" { register int _a0 __asm("a0"); \ register int _a1 __asm("a1"); \ register rt _##name##_re __asm("d0"); \ - register void *const _##name##_bn __asm("a6") = (bn); \ + void *const _##name##_bn = (bn); \ register t1 _n1 __asm(#r1) = _##name##_v1; \ register t2 _n2 __asm(#r2) = _##name##_v2; \ register t3 _n3 __asm(#r3) = _##name##_v3; \ @@ -689,9 +689,9 @@ extern "C" { register t5 _n5 __asm(#r5) = _##name##_v5; \ register t6 _n6 __asm(#r6) = _##name##_v6; \ register t7 _n7 __asm(#r7) = _##name##_v7; \ - __asm volatile ("exg d7,a4\n\tjsr %%a6@(-"#offs":W)\n\texg d7,a4" \ + __asm volatile ("exg d7,a4\n\tmove.l %%a6,%%sp@-\n\tmove.l %[libbase],%%a6\n\tjsr %%a6@(-"#offs":W)\n\tmove.l %%sp@+,%%a6\n\texg d7,a4" \ : "=r" (_##name##_re), "=r" (_d1), "=r" (_a0), "=r" (_a1) \ - : "r" (_##name##_bn), "rf"(_n1), "rf"(_n2), "rf"(_n3), "rf"(_n4), "rf"(_n5), "rf"(_n6), "rf"(_n7) \ + : [libbase] "a" (_##name##_bn), "rf"(_n1), "rf"(_n2), "rf"(_n3), "rf"(_n4), "rf"(_n5), "rf"(_n6), "rf"(_n7) \ : "fp0", "fp1", "cc", "memory"); \ _##name##_re; \ }); \ @@ -716,7 +716,7 @@ extern "C" { register int _a0 __asm("a0"); \ register int _a1 __asm("a1"); \ register rt _##name##_re __asm("d0"); \ - register void *const _##name##_bn __asm("a6") = (bn); \ + void *const _##name##_bn = (bn); \ register t1 _n1 __asm(#r1) = _##name##_v1; \ register t2 _n2 __asm(#r2) = _##name##_v2; \ register t3 _n3 __asm(#r3) = _##name##_v3; \ @@ -725,9 +725,9 @@ extern "C" { register t6 _n6 __asm(#r6) = _##name##_v6; \ register t7 _n7 __asm(#r7) = _##name##_v7; \ register t8 _n8 __asm(#r8) = _##name##_v8; \ - __asm volatile ("jsr %%a6@(-"#offs":W)" \ + __asm volatile ("move.l %%a6,%%sp@-\n\tmove.l %[libbase],%%a6\n\tjsr %%a6@(-"#offs":W)\n\tmove.l %%sp@+,%%a6" \ : "=r" (_##name##_re), "=r" (_d1), "=r" (_a0), "=r" (_a1) \ - : "r" (_##name##_bn), "rf"(_n1), "rf"(_n2), "rf"(_n3), "rf"(_n4), "rf"(_n5), "rf"(_n6), "rf"(_n7), "rf"(_n8) \ + : [libbase] "a" (_##name##_bn), "rf"(_n1), "rf"(_n2), "rf"(_n3), "rf"(_n4), "rf"(_n5), "rf"(_n6), "rf"(_n7), "rf"(_n8) \ : "fp0", "fp1", "cc", "memory"); \ _##name##_re; \ }); \ @@ -749,7 +749,7 @@ extern "C" { register int _d1 __asm("d1"); \ register int _a0 __asm("a0"); \ register int _a1 __asm("a1"); \ - register void *const _##name##_bn __asm("a6") = (bn); \ + void *const _##name##_bn = (bn); \ register t1 _n1 __asm(#r1) = _##name##_v1; \ register t2 _n2 __asm(#r2) = _##name##_v2; \ register t3 _n3 __asm(#r3) = _##name##_v3; \ @@ -758,9 +758,9 @@ extern "C" { register t6 _n6 __asm(#r6) = _##name##_v6; \ register t7 _n7 __asm(#r7) = _##name##_v7; \ register t8 _n8 __asm(#r8) = _##name##_v8; \ - __asm volatile ("jsr %%a6@(-"#offs":W)" \ + __asm volatile ("move.l %%a6,%%sp@-\n\tmove.l %[libbase],%%a6\n\tjsr %%a6@(-"#offs":W)\n\tmove.l %%sp@+,%%a6" \ : "=r" (_d0), "=r" (_d1), "=r" (_a0), "=r" (_a1) \ - : "r" (_##name##_bn), "rf"(_n1), "rf"(_n2), "rf"(_n3), "rf"(_n4), "rf"(_n5), "rf"(_n6), "rf"(_n7), "rf"(_n8) \ + : [libbase] "a" (_##name##_bn), "rf"(_n1), "rf"(_n2), "rf"(_n3), "rf"(_n4), "rf"(_n5), "rf"(_n6), "rf"(_n7), "rf"(_n8) \ : "fp0", "fp1", "cc", "memory"); \ } \ }) @@ -782,7 +782,7 @@ extern "C" { register int _a0 __asm("a0"); \ register int _a1 __asm("a1"); \ register rt _##name##_re __asm("d0"); \ - register void *const _##name##_bn __asm("a6") = (bn); \ + void *const _##name##_bn = (bn); \ register t1 _n1 __asm(#r1) = _##name##_v1; \ register t2 _n2 __asm(#r2) = _##name##_v2; \ register t3 _n3 __asm(#r3) = _##name##_v3; \ @@ -792,9 +792,9 @@ extern "C" { register t7 _n7 __asm(#r7) = _##name##_v7; \ register t8 _n8 __asm(#r8) = _##name##_v8; \ register t9 _n9 __asm(#r9) = _##name##_v9; \ - __asm volatile ("jsr %%a6@(-"#offs":W)" \ + __asm volatile ("move.l %%a6,%%sp@-\n\tmove.l %[libbase],%%a6\n\tjsr %%a6@(-"#offs":W)\n\tmove.l %%sp@+,%%a6" \ : "=r" (_##name##_re), "=r" (_d1), "=r" (_a0), "=r" (_a1) \ - : "r" (_##name##_bn), "rf"(_n1), "rf"(_n2), "rf"(_n3), "rf"(_n4), "rf"(_n5), "rf"(_n6), "rf"(_n7), "rf"(_n8), "rf"(_n9) \ + : [libbase] "a" (_##name##_bn), "rf"(_n1), "rf"(_n2), "rf"(_n3), "rf"(_n4), "rf"(_n5), "rf"(_n6), "rf"(_n7), "rf"(_n8), "rf"(_n9) \ : "fp0", "fp1", "cc", "memory"); \ _##name##_re; \ }); \ @@ -817,7 +817,7 @@ extern "C" { register int _d1 __asm("d1"); \ register int _a0 __asm("a0"); \ register int _a1 __asm("a1"); \ - register void *const _##name##_bn __asm("a6") = (bn); \ + void *const _##name##_bn = (bn); \ register t1 _n1 __asm(#r1) = _##name##_v1; \ register t2 _n2 __asm(#r2) = _##name##_v2; \ register t3 _n3 __asm(#r3) = _##name##_v3; \ @@ -827,9 +827,9 @@ extern "C" { register t7 _n7 __asm(#r7) = _##name##_v7; \ register t8 _n8 __asm(#r8) = _##name##_v8; \ register t9 _n9 __asm(#r9) = _##name##_v9; \ - __asm volatile ("jsr %%a6@(-"#offs":W)" \ + __asm volatile ("move.l %%a6,%%sp@-\n\tmove.l %[libbase],%%a6\n\tjsr %%a6@(-"#offs":W)\n\tmove.l %%sp@+,%%a6" \ : "=r" (_d0), "=r" (_d1), "=r" (_a0), "=r" (_a1) \ - : "r" (_##name##_bn), "rf"(_n1), "rf"(_n2), "rf"(_n3), "rf"(_n4), "rf"(_n5), "rf"(_n6), "rf"(_n7), "rf"(_n8), "rf"(_n9) \ + : [libbase] "a" (_##name##_bn), "rf"(_n1), "rf"(_n2), "rf"(_n3), "rf"(_n4), "rf"(_n5), "rf"(_n6), "rf"(_n7), "rf"(_n8), "rf"(_n9) \ : "fp0", "fp1", "cc", "memory"); \ } \ }) @@ -852,7 +852,7 @@ extern "C" { register int _a0 __asm("a0"); \ register int _a1 __asm("a1"); \ register rt _##name##_re __asm("d0"); \ - register void *const _##name##_bn __asm("a6") = (bn); \ + void *const _##name##_bn = (bn); \ register t1 _n1 __asm(#r1) = _##name##_v1; \ register t2 _n2 __asm(#r2) = _##name##_v2; \ register t3 _n3 __asm(#r3) = _##name##_v3; \ @@ -863,9 +863,9 @@ extern "C" { register t8 _n8 __asm(#r8) = _##name##_v8; \ register t9 _n9 __asm(#r9) = _##name##_v9; \ register t10 _n10 __asm(#r10) = _##name##_v10; \ - __asm volatile ("jsr %%a6@(-"#offs":W)" \ + __asm volatile ("move.l %%a6,%%sp@-\n\tmove.l %[libbase],%%a6\n\tjsr %%a6@(-"#offs":W)\n\tmove.l %%sp@+,%%a6" \ : "=r" (_##name##_re), "=r" (_d1), "=r" (_a0), "=r" (_a1) \ - : "r" (_##name##_bn), "rf"(_n1), "rf"(_n2), "rf"(_n3), "rf"(_n4), "rf"(_n5), "rf"(_n6), "rf"(_n7), "rf"(_n8), "rf"(_n9), "rf"(_n10) \ + : [libbase] "a" (_##name##_bn), "rf"(_n1), "rf"(_n2), "rf"(_n3), "rf"(_n4), "rf"(_n5), "rf"(_n6), "rf"(_n7), "rf"(_n8), "rf"(_n9), "rf"(_n10) \ : "fp0", "fp1", "cc", "memory"); \ _##name##_re; \ }); \ @@ -889,7 +889,7 @@ extern "C" { register int _d1 __asm("d1"); \ register int _a0 __asm("a0"); \ register int _a1 __asm("a1"); \ - register void *const _##name##_bn __asm("a6") = (bn); \ + void *const _##name##_bn = (bn); \ register t1 _n1 __asm(#r1) = _##name##_v1; \ register t2 _n2 __asm(#r2) = _##name##_v2; \ register t3 _n3 __asm(#r3) = _##name##_v3; \ @@ -900,9 +900,9 @@ extern "C" { register t8 _n8 __asm(#r8) = _##name##_v8; \ register t9 _n9 __asm(#r9) = _##name##_v9; \ register t10 _n10 __asm(#r10) = _##name##_v10; \ - __asm volatile ("jsr %%a6@(-"#offs":W)" \ + __asm volatile ("move.l %%a6,%%sp@-\n\tmove.l %[libbase],%%a6\n\tjsr %%a6@(-"#offs":W)\n\tmove.l %%sp@+,%%a6" \ : "=r" (_d0), "=r" (_d1), "=r" (_a0), "=r" (_a1) \ - : "r" (_##name##_bn), "rf"(_n1), "rf"(_n2), "rf"(_n3), "rf"(_n4), "rf"(_n5), "rf"(_n6), "rf"(_n7), "rf"(_n8), "rf"(_n9), "rf"(_n10) \ + : [libbase] "a" (_##name##_bn), "rf"(_n1), "rf"(_n2), "rf"(_n3), "rf"(_n4), "rf"(_n5), "rf"(_n6), "rf"(_n7), "rf"(_n8), "rf"(_n9), "rf"(_n10) \ : "fp0", "fp1", "cc", "memory"); \ } \ }) @@ -926,7 +926,7 @@ extern "C" { register int _a0 __asm("a0"); \ register int _a1 __asm("a1"); \ register rt _##name##_re __asm("d0"); \ - register void *const _##name##_bn __asm("a6") = (bn); \ + void *const _##name##_bn = (bn); \ register t1 _n1 __asm(#r1) = _##name##_v1; \ register t2 _n2 __asm(#r2) = _##name##_v2; \ register t3 _n3 __asm(#r3) = _##name##_v3; \ @@ -938,9 +938,9 @@ extern "C" { register t9 _n9 __asm(#r9) = _##name##_v9; \ register t10 _n10 __asm(#r10) = _##name##_v10; \ register t11 _n11 __asm(#r11) = _##name##_v11; \ - __asm volatile ("jsr %%a6@(-"#offs":W)" \ + __asm volatile ("move.l %%a6,%%sp@-\n\tmove.l %[libbase],%%a6\n\tjsr %%a6@(-"#offs":W)\n\tmove.l %%sp@+,%%a6" \ : "=r" (_##name##_re), "=r" (_d1), "=r" (_a0), "=r" (_a1) \ - : "r" (_##name##_bn), "rf"(_n1), "rf"(_n2), "rf"(_n3), "rf"(_n4), "rf"(_n5), "rf"(_n6), "rf"(_n7), "rf"(_n8), "rf"(_n9), "rf"(_n10), "rf"(_n11) \ + : [libbase] "a" (_##name##_bn), "rf"(_n1), "rf"(_n2), "rf"(_n3), "rf"(_n4), "rf"(_n5), "rf"(_n6), "rf"(_n7), "rf"(_n8), "rf"(_n9), "rf"(_n10), "rf"(_n11) \ : "fp0", "fp1", "cc", "memory"); \ _##name##_re; \ }); \ diff --git a/src/system/boot/platform/amiga_m68k/start.cpp b/src/system/boot/platform/amiga_m68k/start.cpp index 25b30c16ba..4158ab94ea 100644 --- a/src/system/boot/platform/amiga_m68k/start.cpp +++ b/src/system/boot/platform/amiga_m68k/start.cpp @@ -136,7 +136,6 @@ _start(void) console_init(); dprintf("ramtop = %p\n", NULL); cpu_init(); - panic("plop %d", 1234); mmu_init(); // wait a bit to give the user the opportunity to press a key