--- uae/src/uaelib.c 2018/04/24 16:40:06 1.1.1.3 +++ uae/src/uaelib.c 2018/04/24 17:16:44 1.1.1.12 @@ -14,13 +14,11 @@ #include #include -#include "config.h" #include "options.h" -#include "threaddep/penguin.h" +#include "threaddep/thread.h" #include "uae.h" #include "include/memory.h" #include "custom.h" -#include "readcpu.h" #include "newcpu.h" #include "xwin.h" #include "autoconf.h" @@ -29,26 +27,30 @@ #include "gensound.h" #include "picasso96.h" +/* We don't get a numerical version from autoconf, but this is the only place + that wants it, and it doesn't matter - so cheat. */ +#define UAEVERSION 0x0826 + /* * Returns UAE Version */ -static uae_u32 emulib_GetVersion(void) +static uae_u32 emulib_GetVersion (void) { - return version; + return UAEVERSION; } /* * Resets your amiga */ -static uae_u32 emulib_HardReset(void) +static uae_u32 emulib_HardReset (void) { - uae_reset(); + uae_reset(1); return 0; } -static uae_u32 emulib_Reset(void) +static uae_u32 emulib_Reset (void) { - uae_reset(); + uae_reset(0); return 0; } @@ -69,7 +71,8 @@ static uae_u32 emulib_EnableSound (uae_u */ static uae_u32 emulib_EnableJoystick (uae_u32 val) { - currprefs.fake_joystick = val; + currprefs.jport0 = val & 255; + currprefs.jport1 = (val >> 8) & 255; return 1; } @@ -83,7 +86,7 @@ static uae_u32 emulib_SetFrameRate (uae_ else if (val > 20) return 0; else { - currprefs.framerate = val; + currprefs.gfx_framerate = val; return 1; } } @@ -93,7 +96,7 @@ static uae_u32 emulib_SetFrameRate (uae_ */ static uae_u32 emulib_ChangeLanguage (uae_u32 which) { - if (which > 5) + if (which > 6) return 0; else { switch (which) { @@ -101,18 +104,21 @@ static uae_u32 emulib_ChangeLanguage (ua currprefs.keyboard_lang = KBD_LANG_US; break; case 1: - currprefs.keyboard_lang = KBD_LANG_DE; + currprefs.keyboard_lang = KBD_LANG_DK; break; case 2: - currprefs.keyboard_lang = KBD_LANG_SE; + currprefs.keyboard_lang = KBD_LANG_DE; break; case 3: - currprefs.keyboard_lang = KBD_LANG_FR; + currprefs.keyboard_lang = KBD_LANG_SE; break; case 4: - currprefs.keyboard_lang = KBD_LANG_IT; + currprefs.keyboard_lang = KBD_LANG_FR; break; case 5: + currprefs.keyboard_lang = KBD_LANG_IT; + break; + case 6: currprefs.keyboard_lang = KBD_LANG_ES; break; default: @@ -132,12 +138,12 @@ static uae_u32 emulib_ChgCMemSize (uae_u if (memsize != 0x80000 && memsize != 0x100000 && memsize != 0x200000) { memsize = 0x200000; - fprintf(stderr, "Unsupported chipmem size!\n"); + write_log ("Unsupported chipmem size!\n"); } - m68k_dreg(regs, 0) = 0; + m68k_dreg (regs, 0) = 0; - chipmem_size = memsize; - uae_reset(); + currprefs.chipmem_size = memsize; + uae_reset(0); return 1; } @@ -150,12 +156,12 @@ static uae_u32 emulib_ChgSMemSize (uae_u if (memsize != 0x80000 && memsize != 0x100000 && memsize != 0x180000 && memsize != 0x1C0000) { memsize = 0; - fprintf(stderr, "Unsupported bogomem size!\n"); + write_log ("Unsupported bogomem size!\n"); } - m68k_dreg(regs, 0) = 0; - bogomem_size = memsize; - uae_reset(); + m68k_dreg (regs, 0) = 0; + currprefs.bogomem_size = memsize; + uae_reset (0); return 1; } @@ -168,18 +174,18 @@ static uae_u32 emulib_ChgFMemSize (uae_u if (memsize != 0x100000 && memsize != 0x200000 && memsize != 0x400000 && memsize != 0x800000) { memsize = 0; - fprintf(stderr, "Unsupported fastmem size!\n"); + write_log ("Unsupported fastmem size!\n"); } m68k_dreg(regs, 0) = 0; - fastmem_size = memsize; - uae_reset(); + currprefs.fastmem_size = memsize; + uae_reset (0); return 0; } /* * Inserts a disk */ -static uae_u32 emulib_InsertDisk(uaecptr name, uae_u32 drive) +static uae_u32 emulib_InsertDisk (uaecptr name, uae_u32 drive) { int i = 0; char real_name[256]; @@ -201,7 +207,7 @@ static uae_u32 emulib_InsertDisk(uaecptr /* * Exits the emulator */ -static uae_u32 emulib_ExitEmu(void) +static uae_u32 emulib_ExitEmu (void) { uae_quit (); return 1; @@ -210,40 +216,40 @@ static uae_u32 emulib_ExitEmu(void) /* * Gets UAE Configuration */ -static uae_u32 emulib_GetUaeConfig(uaecptr place) +static uae_u32 emulib_GetUaeConfig (uaecptr place) { int i,j; - put_long(place , version); - put_long(place + 4, chipmem_size); - put_long(place + 8, bogomem_size); - put_long(place + 12, fastmem_size); - put_long(place + 16, currprefs.framerate); - put_long(place + 20, currprefs.produce_sound); - put_long(place + 24, currprefs.fake_joystick); - put_long(place + 28, currprefs.keyboard_lang); - if (disk_empty(0)) - put_byte(place + 32, 0); + put_long (place, UAEVERSION); + put_long (place + 4, allocated_chipmem); + put_long (place + 8, allocated_bogomem); + put_long (place + 12, allocated_fastmem); + put_long (place + 16, currprefs.gfx_framerate); + put_long (place + 20, currprefs.produce_sound); + put_long (place + 24, currprefs.jport0 | (currprefs.jport1 << 8)); + put_long (place + 28, currprefs.keyboard_lang); + if (disk_empty (0)) + put_byte (place + 32, 0); else - put_byte(place + 32, 1); - if (disk_empty(1)) - put_byte(place + 33, 0); + put_byte (place + 32, 1); + if (disk_empty (1)) + put_byte (place + 33, 0); else - put_byte(place + 33, 1); + put_byte (place + 33, 1); if (disk_empty(2)) - put_byte(place + 34, 0); + put_byte (place + 34, 0); else - put_byte(place + 34, 1); + put_byte (place + 34, 1); if (disk_empty(3)) - put_byte(place + 35, 0); + put_byte (place + 35, 0); else - put_byte(place + 35, 1); + put_byte (place + 35, 1); for (i = 0; i < 256; i++) { - put_byte((place + 36 + i), currprefs.df[0][i]); - put_byte((place + 36 + i + 256), currprefs.df[1][i]); - put_byte((place + 36 + i + 512), currprefs.df[2][i]); - put_byte((place + 36 + i + 768), currprefs.df[3][i]); + put_byte ((place + 36 + i), currprefs.df[0][i]); + put_byte ((place + 36 + i + 256), currprefs.df[1][i]); + put_byte ((place + 36 + i + 512), currprefs.df[2][i]); + put_byte ((place + 36 + i + 768), currprefs.df[3][i]); } return 1; } @@ -253,7 +259,7 @@ static uae_u32 emulib_GetUaeConfig(uaecp * * NOT IMPLEMENTED YET */ -static uae_u32 emulib_SetUaeConfig(uaecptr place) +static uae_u32 emulib_SetUaeConfig (uaecptr place) { return 1; } @@ -261,7 +267,7 @@ static uae_u32 emulib_SetUaeConfig(uaecp /* * Gets the name of the disk in the given drive */ -static uae_u32 emulib_GetDisk(uae_u32 drive, uaecptr name) +static uae_u32 emulib_GetDisk (uae_u32 drive, uaecptr name) { int i; if (drive > 3) @@ -276,7 +282,7 @@ static uae_u32 emulib_GetDisk(uae_u32 dr /* * Enter debugging state */ -static uae_u32 emulib_Debug(void) +static uae_u32 emulib_Debug (void) { activate_debugger (); return 1; @@ -286,6 +292,13 @@ static uae_u32 emulib_Debug(void) * and add that offset to the base address of the object. Now we've got code to execute. * * @@@ Brian: does anything actually use this yet? + * @@@ Bernd: Not yet. It needs to get much better. Should spawn off a seperate task to handle the + * function, and then somehow "signal" the Amiga caller that completion or error has + * occurred. I don't know how to do that, so right now it is a synchronous call. Yuck! + * Would be nice to implement jpg decompression functionality for the Amiga which used + * the UAE Host to do all the work, for example. + * @@@ Brian: I disabled it to prevent people from starting to use it - if that happens, we're + * stuck with this. */ static uae_u32 FindFunctionInObject (uae_u8 *objectptr) { @@ -305,22 +318,23 @@ static uae_u32 FindFunctionInObject (uae #define CALL_NATIVE_FUNC( d1,d2,d3,d4,d5,d6,d7,a1,a2,a3,a4,a5,a6 ) if(native_func) native_func( d1,d2,d3,d4,d5,d6,d7,a1,a2,a3,a4,a5,a6 ) /* A0 - Contains a ptr to the native .obj data. This ptr is Amiga-based. */ /* We simply find the first function in this .obj data, and execute it. */ -static uae_u32 emulib_ExecuteNativeCode(void) +static uae_u32 emulib_ExecuteNativeCode (void) { - uaecptr object_AAM = m68k_areg( regs, 0 ); - uae_u32 d1 = m68k_dreg( regs, 1 ); - uae_u32 d2 = m68k_dreg( regs, 2 ); - uae_u32 d3 = m68k_dreg( regs, 3 ); - uae_u32 d4 = m68k_dreg( regs, 4 ); - uae_u32 d5 = m68k_dreg( regs, 5 ); - uae_u32 d6 = m68k_dreg( regs, 6 ); - uae_u32 d7 = m68k_dreg( regs, 7 ); - uae_u32 a1 = m68k_areg( regs, 1 ); - uae_u32 a2 = m68k_areg( regs, 2 ); - uae_u32 a3 = m68k_areg( regs, 3 ); - uae_u32 a4 = m68k_areg( regs, 4 ); - uae_u32 a5 = m68k_areg( regs, 5 ); - uae_u32 a6 = m68k_areg( regs, 6 ); +#if 0 + uaecptr object_AAM = m68k_areg (regs, 0); + uae_u32 d1 = m68k_dreg (regs, 1); + uae_u32 d2 = m68k_dreg (regs, 2); + uae_u32 d3 = m68k_dreg (regs, 3); + uae_u32 d4 = m68k_dreg (regs, 4); + uae_u32 d5 = m68k_dreg (regs, 5); + uae_u32 d6 = m68k_dreg (regs, 6); + uae_u32 d7 = m68k_dreg (regs, 7); + uae_u32 a1 = m68k_areg (regs, 1); + uae_u32 a2 = m68k_areg (regs, 2); + uae_u32 a3 = m68k_areg (regs, 3); + uae_u32 a4 = m68k_areg (regs, 4); + uae_u32 a5 = m68k_areg (regs, 5); + uae_u32 a6 = m68k_areg (regs, 6); uae_u8* object_UAM = NULL; CREATE_NATIVE_FUNC_PTR; @@ -334,6 +348,8 @@ static uae_u32 emulib_ExecuteNativeCode( CALL_NATIVE_FUNC( d1, d2, d3, d4, d5, d6, d7, a1, a2, a3, a4, a5, a6); } return 1; +#endif + return 0; } static uae_u32 uaelib_demux (void) @@ -363,28 +379,28 @@ static uae_u32 uaelib_demux (void) case 15: return emulib_Debug (); #ifdef PICASSO96 - case 16: return picasso_FindCard(); - case 17: return picasso_FillRect(); - case 18: return picasso_SetSwitch(); - case 19: return picasso_SetColorArray(); - case 20: return picasso_SetDAC(); - case 21: return picasso_SetGC(); - case 22: return picasso_SetPanning(); - case 23: return picasso_CalculateBytesPerRow(); - case 24: return picasso_BlitPlanar2Chunky(); - case 25: return picasso_BlitRect(); - case 26: return picasso_SetDisplay(); - case 27: return picasso_BlitTemplate(); - case 28: return picasso_BlitRectNoMaskComplete(); - case 29: return picasso_InitCard(); - case 30: return picasso_BlitPattern(); - case 31: return picasso_InvertRect(); - case 32: return picasso_BlitPlanar2Direct(); - case 34: return picasso_WaitVerticalSync(); - case 35: return gfxmem_size ? 1 : 0; + case 16: return picasso_FindCard (); + case 17: return picasso_FillRect (); + case 18: return picasso_SetSwitch (); + case 19: return picasso_SetColorArray (); + case 20: return picasso_SetDAC (); + case 21: return picasso_SetGC (); + case 22: return picasso_SetPanning (); + case 23: return picasso_CalculateBytesPerRow (); + case 24: return picasso_BlitPlanar2Chunky (); + case 25: return picasso_BlitRect (); + case 26: return picasso_SetDisplay (); + case 27: return picasso_BlitTemplate (); + case 28: return picasso_BlitRectNoMaskComplete (); + case 29: return picasso_InitCard (); + case 30: return picasso_BlitPattern (); + case 31: return picasso_InvertRect (); + case 32: return picasso_BlitPlanar2Direct (); + case 34: return picasso_WaitVerticalSync (); + case 35: return allocated_gfxmem ? 1 : 0; #endif - case 69: return emulib_ExecuteNativeCode(); + case 69: return emulib_ExecuteNativeCode (); } return 0; } @@ -392,10 +408,10 @@ static uae_u32 uaelib_demux (void) /* * Installs the UAE LIBRARY */ -void emulib_install(void) +void emulib_install (void) { uaecptr a = here (); - org (0xF0FF60); + org (RTAREA_BASE + 0xFF60); calltrap (deftrap (uaelib_demux)); dw (RTS); org (a);