Annotation of uae/src/autoconf.c, revision 1.1.1.13

1.1.1.3   root        1:  /*
1.1       root        2:   * UAE - The Un*x Amiga Emulator
1.1.1.3   root        3:   *
1.1       root        4:   * AutoConfig devices
                      5:   *
1.1.1.2   root        6:   * Copyright 1995, 1996 Bernd Schmidt
                      7:   * Copyright 1996 Ed Hanway
1.1       root        8:   */
                      9: 
                     10: #include "sysconfig.h"
                     11: #include "sysdeps.h"
                     12: 
                     13: #include "options.h"
1.1.1.3   root       14: #include "uae.h"
1.1       root       15: #include "memory.h"
                     16: #include "custom.h"
                     17: #include "newcpu.h"
                     18: #include "autoconf.h"
1.1.1.12  root       19: #include "traps.h"
1.1       root       20: 
                     21: /* Commonly used autoconfig strings */
                     22: 
1.1.1.3   root       23: uaecptr EXPANSION_explibname, EXPANSION_doslibname, EXPANSION_uaeversion;
                     24: uaecptr EXPANSION_uaedevname, EXPANSION_explibbase = 0, EXPANSION_haveV36;
                     25: uaecptr EXPANSION_bootcode, EXPANSION_nullfunc;
1.1.1.10  root       26: uaecptr EXPANSION_cddevice;
1.1       root       27: 
                     28: /* ROM tag area memory access */
                     29: 
1.1.1.13! root       30: uae_u8 *rtarea;
1.1       root       31: 
1.1.1.4   root       32: static uae_u32 rtarea_lget (uaecptr) REGPARAM;
                     33: static uae_u32 rtarea_wget (uaecptr) REGPARAM;
                     34: static uae_u32 rtarea_bget (uaecptr) REGPARAM;
                     35: static void rtarea_lput (uaecptr, uae_u32) REGPARAM;
                     36: static void rtarea_wput (uaecptr, uae_u32) REGPARAM;
                     37: static void rtarea_bput (uaecptr, uae_u32) REGPARAM;
                     38: static uae_u8 *rtarea_xlate (uaecptr) REGPARAM;
1.1       root       39: 
1.1.1.13! root       40: static uae_u8 REGPARAM2 *rtarea_xlate (uaecptr addr)
1.1       root       41: {
                     42:     addr &= 0xFFFF;
                     43:     return rtarea + addr;
                     44: }
                     45: 
1.1.1.13! root       46: static uae_u32 REGPARAM2 rtarea_lget (uaecptr addr)
1.1       root       47: {
                     48:     addr &= 0xFFFF;
1.1.1.4   root       49:     return (uae_u32)(rtarea_wget (addr) << 16) + rtarea_wget (addr+2);
1.1       root       50: }
                     51: 
1.1.1.13! root       52: static uae_u32 REGPARAM2 rtarea_wget (uaecptr addr)
1.1       root       53: {
                     54:     addr &= 0xFFFF;
                     55:     return (rtarea[addr]<<8) + rtarea[addr+1];
                     56: }
                     57: 
1.1.1.13! root       58: static uae_u32 REGPARAM2 rtarea_bget (uaecptr addr)
1.1       root       59: {
                     60:     addr &= 0xFFFF;
                     61:     return rtarea[addr];
                     62: }
                     63: 
1.1.1.13! root       64: static void REGPARAM2 rtarea_lput (uaecptr addr, uae_u32 value)
1.1.1.7   root       65: {
                     66: }
                     67: 
1.1.1.13! root       68: static void REGPARAM2 rtarea_wput (uaecptr addr, uae_u32 value)
1.1.1.7   root       69: {
                     70: }
                     71: 
1.1.1.13! root       72: static void REGPARAM2 rtarea_bput (uaecptr addr, uae_u32 value)
1.1.1.7   root       73: {
                     74: }
1.1       root       75: 
1.1.1.13! root       76: addrbank rtarea_bank = {
        !            77:     rtarea_lget, rtarea_wget, rtarea_bget,
        !            78:     rtarea_lput, rtarea_wput, rtarea_bput,
        !            79:     rtarea_xlate, default_check, NULL, "UAE Boot ROM"
        !            80: };
        !            81: 
1.1       root       82: /* some quick & dirty code to fill in the rt area and save me a lot of
                     83:  * scratch paper
                     84:  */
                     85: 
                     86: static int rt_addr = 0;
                     87: static int rt_straddr = 0xFF00 - 2;
                     88: 
1.1.1.4   root       89: uae_u32 addr (int ptr)
1.1       root       90: {
1.1.1.10  root       91:     return (uae_u32)ptr + RTAREA_BASE;
1.1       root       92: }
                     93: 
1.1.1.4   root       94: void db (uae_u8 data)
1.1.1.3   root       95: {
                     96:     rtarea[rt_addr++] = data;
                     97: }
                     98: 
1.1.1.4   root       99: void dw (uae_u16 data)
1.1       root      100: {
                    101:     rtarea[rt_addr++] = data >> 8;
                    102:     rtarea[rt_addr++] = data;
                    103: }
                    104: 
1.1.1.4   root      105: void dl (uae_u32 data)
1.1       root      106: {
                    107:     rtarea[rt_addr++] = data >> 24;
                    108:     rtarea[rt_addr++] = data >> 16;
                    109:     rtarea[rt_addr++] = data >> 8;
                    110:     rtarea[rt_addr++] = data;
                    111: }
                    112: 
                    113: /* store strings starting at the end of the rt area and working
                    114:  * backward.  store pointer at current address
                    115:  */
                    116: 
1.1.1.4   root      117: uae_u32 ds (char *str)
1.1       root      118: {
1.1.1.4   root      119:     int len = strlen (str) + 1;
1.1       root      120: 
                    121:     rt_straddr -= len;
1.1.1.4   root      122:     strcpy ((char *)rtarea + rt_straddr, str);
1.1.1.3   root      123: 
1.1.1.4   root      124:     return addr (rt_straddr);
1.1       root      125: }
                    126: 
1.1.1.4   root      127: void calltrap (uae_u32 n)
1.1       root      128: {
1.1.1.4   root      129:     dw (0xA000 + n);
1.1       root      130: }
                    131: 
1.1.1.4   root      132: void org (uae_u32 a)
1.1       root      133: {
1.1.1.10  root      134:     rt_addr = a - RTAREA_BASE;
1.1       root      135: }
                    136: 
1.1.1.4   root      137: uae_u32 here (void)
1.1       root      138: {
1.1.1.4   root      139:     return addr (rt_addr);
1.1       root      140: }
                    141: 
1.1.1.4   root      142: void align (int b)
1.1       root      143: {
1.1.1.4   root      144:     rt_addr = (rt_addr + b - 1) & ~(b - 1);
1.1       root      145: }
                    146: 
1.1.1.13! root      147: static uae_u32 nullfunc (TrapContext *dummy)
1.1       root      148: {
1.1.1.10  root      149:     write_log ("Null function called\n");
1.1.1.3   root      150:     return 0;
1.1.1.2   root      151: }
                    152: 
1.1.1.13! root      153: static uae_u32 getchipmemsize (TrapContext *dummy)
1.1.1.2   root      154: {
1.1.1.4   root      155:     return allocated_chipmem;
1.1       root      156: }
                    157: 
1.1.1.13! root      158: static uae_u32 uae_puts (TrapContext *dummy)
1.1.1.8   root      159: {
                    160:     puts (get_real_address (m68k_areg (regs, 0)));
                    161:     return 0;
                    162: }
                    163: 
1.1.1.13! root      164: /* Used to keep the m68k emulation sane when we hit a call to
        !           165:  * default_xlate.  */
        !           166: static void m68k_infinite_loop (void)
        !           167: {
        !           168:     m68k_setpc (0xF0FFC0);
        !           169: }
        !           170: 
1.1.1.9   root      171: static void rtarea_init_mem (void)
                    172: {
                    173:     rtarea = mapped_malloc (0x10000, "rtarea");
                    174:     if (!rtarea) {
                    175:        write_log ("virtual memory exhausted (rtarea)!\n");
                    176:        abort ();
                    177:     }
                    178:     rtarea_bank.baseaddr = rtarea;
                    179: }
                    180: 
1.1.1.13! root      181: 
1.1.1.4   root      182: void rtarea_init (void)
1.1       root      183: {
1.1.1.3   root      184:     uae_u32 a;
1.1       root      185:     char uaever[100];
1.1.1.9   root      186: 
                    187:     rtarea_init_mem ();
                    188: 
1.1.1.12  root      189:     sprintf (uaever, "uae-%s", PACKAGE_VERSION);
1.1       root      190: 
1.1.1.4   root      191:     EXPANSION_uaeversion = ds (uaever);
                    192:     EXPANSION_explibname = ds ("expansion.library");
                    193:     EXPANSION_doslibname = ds ("dos.library");
                    194:     EXPANSION_uaedevname = ds ("uae.device");
1.1       root      195: 
1.1.1.4   root      196:     deftrap (NULL); /* Generic emulator trap */
1.1       root      197: 
1.1.1.4   root      198:     EXPANSION_nullfunc = here ();
                    199:     calltrap (deftrap (nullfunc));
                    200:     dw (RTS);
1.1.1.3   root      201: 
1.1.1.2   root      202:     a = here();
1.1.1.13! root      203:     /* Dummy trap - removing this breaks the filesys emulation. */
1.1.1.10  root      204:     org (RTAREA_BASE + 0xFF00);
1.1.1.13! root      205:     calltrap (deftrap2 (nullfunc, TRAPFLAG_NO_RETVAL, ""));
1.1.1.3   root      206: 
1.1.1.10  root      207:     org (RTAREA_BASE + 0xFF80);
1.1.1.3   root      208:     calltrap (deftrap2 (getchipmemsize, TRAPFLAG_DORET, ""));
1.1.1.8   root      209: 
1.1.1.10  root      210:     org (RTAREA_BASE + 0xFF10);
1.1.1.8   root      211:     calltrap (deftrap2 (uae_puts, TRAPFLAG_NO_RETVAL, ""));
                    212:     dw (RTS);
                    213: 
1.1.1.13! root      214:     org (RTAREA_BASE + 0xFFC0);
        !           215:     calltrap (deftrap2 (m68k_infinite_loop, TRAPFLAG_NO_RETVAL, ""));
        !           216: 
1.1.1.4   root      217:     org (a);
1.1.1.2   root      218: 
1.1.1.3   root      219:     filesys_install_code ();
1.1.1.13! root      220: 
        !           221:     uae_boot_rom_size = here() - RTAREA_BASE;
        !           222:     init_extended_traps ();
1.1.1.3   root      223: }
1.1.1.2   root      224: 
1.1.1.3   root      225: volatile int uae_int_requested = 0;
1.1.1.2   root      226: 
1.1.1.3   root      227: void set_uae_int_flag (void)
                    228: {
                    229:     rtarea[0xFFFB] = uae_int_requested;
1.1.1.2   root      230: }
                    231: 
1.1.1.13! root      232: void rtarea_setup (void)
1.1.1.2   root      233: {
                    234: }

unix.superglobalmegacorp.com

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