From f506144bd8dd6cd75cd8042c6d05d10ddd6cfce7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20Fr=C3=B6schle?= Date: Mon, 29 Sep 2014 22:42:38 +0000 Subject: [PATCH] implemented check if running on EmuTOS --- BaS_gcc/tos/bascook/sources/bascook.c | 51 ++++++++++++++++----------- 1 file changed, 31 insertions(+), 20 deletions(-) diff --git a/BaS_gcc/tos/bascook/sources/bascook.c b/BaS_gcc/tos/bascook/sources/bascook.c index 2ae050c..aa57172 100644 --- a/BaS_gcc/tos/bascook/sources/bascook.c +++ b/BaS_gcc/tos/bascook/sources/bascook.c @@ -105,37 +105,48 @@ int main(int argc, char *argv[]) struct driver_table *dt; void *ssp; void *old_vector; + char **sysbase = (char **) 0x4f2; (void) Cconws("retrieve BaS driver interface\r\n"); - ssp = (void *) Super(0L); + ssp = (void *) Super(0L); /* go to supervisor mode, we are doing dirty tricks */ - old_vector = Setexc(0x20, my_own_trap0_handler); /* set our own temporarily */ - dt = get_bas_drivers(); /* trap #1 */ - (void) Setexc(0x20, old_vector); /* restore original vector */ - - if (dt) + /* + * first check if we are on EmuTOS, FireTOS want's to do everything itself + */ + if (* (long *)(*sysbase + 0x2c) == 0x45544f53) { - struct generic_interface *ifc = &dt->interfaces[0]; + old_vector = Setexc(0x20, my_own_trap0_handler); /* set our own temporarily */ + dt = get_bas_drivers(); /* trap #1 */ + (void) Setexc(0x20, old_vector); /* restore original vector */ - printf("BaS driver table found at %p, BaS version is %d.%d\r\n", dt, - dt->bas_version, dt->bas_revision); - - while (ifc->type != END_OF_DRIVERS) + if (dt) { - printf("driver \"%s (%s)\" found,\r\n" - "interface type is %d (%s),\r\n" - "version %d.%d\r\n\r\n", - ifc->name, ifc->description, ifc->type, dt_to_str(ifc->type), - ifc->version, ifc->revision); - if (ifc->type == MCD_DRIVER) + struct generic_interface *ifc = &dt->interfaces[0]; + + printf("BaS driver table found at %p, BaS version is %d.%d\r\n", dt, + dt->bas_version, dt->bas_revision); + + while (ifc->type != END_OF_DRIVERS) { - setcookie(COOKIE_DMAC, (uint32_t) ifc->interface.dma); - printf("\r\nDMAC cookie set to %p\r\n", ifc->interface.dma); + printf("driver \"%s (%s)\" found,\r\n" + "interface type is %d (%s),\r\n" + "version %d.%d\r\n\r\n", + ifc->name, ifc->description, ifc->type, dt_to_str(ifc->type), + ifc->version, ifc->revision); + if (ifc->type == MCD_DRIVER) + { + setcookie(COOKIE_DMAC, (uint32_t) ifc->interface.dma); + printf("\r\nDMAC cookie set to %p\r\n", ifc->interface.dma); + } + ifc++; } - ifc++; } } + else + { + printf("not running on EmuTOS, exiting\r\n"); + } Super(ssp); while (Cconis()) Cconin(); /* eat keys */