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

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.1.3   root       20: #include "osdep/exectasks.h"
1.1       root       21: 
                     22: /* Commonly used autoconfig strings */
                     23: 
1.1.1.3   root       24: uaecptr EXPANSION_explibname, EXPANSION_doslibname, EXPANSION_uaeversion;
                     25: uaecptr EXPANSION_uaedevname, EXPANSION_explibbase = 0, EXPANSION_haveV36;
                     26: uaecptr EXPANSION_bootcode, EXPANSION_nullfunc;
1.1.1.10  root       27: uaecptr EXPANSION_cddevice;
1.1       root       28: 
                     29: /* ROM tag area memory access */
                     30: 
1.1.1.9   root       31: static uae_u8 *rtarea;
1.1       root       32: 
1.1.1.4   root       33: static uae_u32 rtarea_lget (uaecptr) REGPARAM;
                     34: static uae_u32 rtarea_wget (uaecptr) REGPARAM;
                     35: static uae_u32 rtarea_bget (uaecptr) REGPARAM;
                     36: static void rtarea_lput (uaecptr, uae_u32) REGPARAM;
                     37: static void rtarea_wput (uaecptr, uae_u32) REGPARAM;
                     38: static void rtarea_bput (uaecptr, uae_u32) REGPARAM;
                     39: static uae_u8 *rtarea_xlate (uaecptr) REGPARAM;
1.1       root       40: 
                     41: addrbank rtarea_bank = {
                     42:     rtarea_lget, rtarea_wget, rtarea_bget,
                     43:     rtarea_lput, rtarea_wput, rtarea_bput,
1.1.1.9   root       44:     rtarea_xlate, default_check, NULL
1.1       root       45: };
                     46: 
1.1.1.4   root       47: uae_u8 REGPARAM2 *rtarea_xlate (uaecptr addr)
1.1       root       48: {
                     49:     addr &= 0xFFFF;
                     50:     return rtarea + addr;
                     51: }
                     52: 
1.1.1.4   root       53: uae_u32 REGPARAM2 rtarea_lget (uaecptr addr)
1.1       root       54: {
1.1.1.7   root       55:     special_mem |= S_READ;
1.1       root       56:     addr &= 0xFFFF;
1.1.1.4   root       57:     return (uae_u32)(rtarea_wget (addr) << 16) + rtarea_wget (addr+2);
1.1       root       58: }
                     59: 
1.1.1.4   root       60: uae_u32 REGPARAM2 rtarea_wget (uaecptr addr)
1.1       root       61: {
1.1.1.7   root       62:     special_mem |= S_READ;
1.1       root       63:     addr &= 0xFFFF;
                     64:     return (rtarea[addr]<<8) + rtarea[addr+1];
                     65: }
                     66: 
1.1.1.4   root       67: uae_u32 REGPARAM2 rtarea_bget (uaecptr addr)
1.1       root       68: {
1.1.1.7   root       69:     special_mem |= S_READ;
1.1       root       70:     addr &= 0xFFFF;
                     71:     return rtarea[addr];
                     72: }
                     73: 
1.1.1.7   root       74: void REGPARAM2 rtarea_lput (uaecptr addr, uae_u32 value)
                     75: {
                     76:     special_mem |= S_WRITE;
                     77: }
                     78: 
                     79: void REGPARAM2 rtarea_wput (uaecptr addr, uae_u32 value)
                     80: {
                     81:     special_mem |= S_WRITE;
                     82: }
                     83: 
                     84: void REGPARAM2 rtarea_bput (uaecptr addr, uae_u32 value)
                     85: {
                     86:     special_mem |= S_WRITE;
                     87: }
1.1       root       88: 
                     89: /* some quick & dirty code to fill in the rt area and save me a lot of
                     90:  * scratch paper
                     91:  */
                     92: 
                     93: static int rt_addr = 0;
                     94: static int rt_straddr = 0xFF00 - 2;
                     95: 
1.1.1.4   root       96: uae_u32 addr (int ptr)
1.1       root       97: {
1.1.1.10  root       98:     return (uae_u32)ptr + RTAREA_BASE;
1.1       root       99: }
                    100: 
1.1.1.4   root      101: void db (uae_u8 data)
1.1.1.3   root      102: {
                    103:     rtarea[rt_addr++] = data;
                    104: }
                    105: 
1.1.1.4   root      106: void dw (uae_u16 data)
1.1       root      107: {
                    108:     rtarea[rt_addr++] = data >> 8;
                    109:     rtarea[rt_addr++] = data;
                    110: }
                    111: 
1.1.1.4   root      112: void dl (uae_u32 data)
1.1       root      113: {
                    114:     rtarea[rt_addr++] = data >> 24;
                    115:     rtarea[rt_addr++] = data >> 16;
                    116:     rtarea[rt_addr++] = data >> 8;
                    117:     rtarea[rt_addr++] = data;
                    118: }
                    119: 
                    120: /* store strings starting at the end of the rt area and working
                    121:  * backward.  store pointer at current address
                    122:  */
                    123: 
1.1.1.4   root      124: uae_u32 ds (char *str)
1.1       root      125: {
1.1.1.4   root      126:     int len = strlen (str) + 1;
1.1       root      127: 
                    128:     rt_straddr -= len;
1.1.1.4   root      129:     strcpy ((char *)rtarea + rt_straddr, str);
1.1.1.3   root      130: 
1.1.1.4   root      131:     return addr (rt_straddr);
1.1       root      132: }
                    133: 
1.1.1.4   root      134: void calltrap (uae_u32 n)
1.1       root      135: {
1.1.1.4   root      136:     dw (0xA000 + n);
1.1       root      137: }
                    138: 
1.1.1.4   root      139: void org (uae_u32 a)
1.1       root      140: {
1.1.1.10  root      141:     rt_addr = a - RTAREA_BASE;
1.1       root      142: }
                    143: 
1.1.1.4   root      144: uae_u32 here (void)
1.1       root      145: {
1.1.1.4   root      146:     return addr (rt_addr);
1.1       root      147: }
                    148: 
1.1.1.4   root      149: void align (int b)
1.1       root      150: {
1.1.1.4   root      151:     rt_addr = (rt_addr + b - 1) & ~(b - 1);
1.1       root      152: }
                    153: 
1.1.1.3   root      154: static uae_u32 nullfunc(void)
1.1       root      155: {
1.1.1.10  root      156:     write_log ("Null function called\n");
1.1.1.3   root      157:     return 0;
1.1.1.2   root      158: }
                    159: 
1.1.1.3   root      160: static uae_u32 getchipmemsize (void)
1.1.1.2   root      161: {
1.1.1.4   root      162:     return allocated_chipmem;
1.1       root      163: }
                    164: 
1.1.1.8   root      165: static uae_u32 uae_puts (void)
                    166: {
                    167:     puts (get_real_address (m68k_areg (regs, 0)));
                    168:     return 0;
                    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.4   root      181: void rtarea_init (void)
1.1       root      182: {
1.1.1.3   root      183:     uae_u32 a;
1.1       root      184:     char uaever[100];
1.1.1.9   root      185: 
                    186:     rtarea_init_mem ();
                    187: 
1.1.1.12! root      188:     sprintf (uaever, "uae-%s", PACKAGE_VERSION);
1.1       root      189: 
1.1.1.4   root      190:     EXPANSION_uaeversion = ds (uaever);
                    191:     EXPANSION_explibname = ds ("expansion.library");
                    192:     EXPANSION_doslibname = ds ("dos.library");
                    193:     EXPANSION_uaedevname = ds ("uae.device");
1.1       root      194: 
1.1.1.4   root      195:     deftrap (NULL); /* Generic emulator trap */
1.1       root      196: 
1.1.1.4   root      197:     EXPANSION_nullfunc = here ();
                    198:     calltrap (deftrap (nullfunc));
                    199:     dw (RTS);
1.1.1.3   root      200: 
1.1.1.2   root      201:     a = here();
1.1       root      202:     /* Standard "return from 68k mode" trap */
1.1.1.10  root      203:     org (RTAREA_BASE + 0xFF00);
1.1.1.3   root      204:     calltrap (deftrap2 (m68k_mode_return, TRAPFLAG_NO_RETVAL, ""));
                    205: 
1.1.1.10  root      206:     org (RTAREA_BASE + 0xFF80);
1.1.1.3   root      207:     calltrap (deftrap2 (getchipmemsize, TRAPFLAG_DORET, ""));
1.1.1.8   root      208: 
1.1.1.10  root      209:     org (RTAREA_BASE + 0xFF10);
1.1.1.8   root      210:     calltrap (deftrap2 (uae_puts, TRAPFLAG_NO_RETVAL, ""));
                    211:     dw (RTS);
                    212: 
1.1.1.4   root      213:     org (a);
1.1.1.2   root      214: 
1.1.1.3   root      215:     filesys_install_code ();
                    216: }
1.1.1.2   root      217: 
1.1.1.3   root      218: volatile int uae_int_requested = 0;
1.1.1.2   root      219: 
1.1.1.3   root      220: void set_uae_int_flag (void)
                    221: {
                    222:     rtarea[0xFFFB] = uae_int_requested;
1.1.1.2   root      223: }
                    224: 
                    225: void rtarea_setup(void)
                    226: {
                    227: }

unix.superglobalmegacorp.com

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