cpu_misc.h

Go to the documentation of this file.
00001 /* ES40 emulator.
00002  * Copyright (C) 2007-2008 by the ES40 Emulator Project
00003  *
00004  * WWW    : http://sourceforge.net/projects/es40
00005  * E-mail : camiel@camicom.com
00006  * 
00007  * This program is free software; you can redistribute it and/or
00008  * modify it under the terms of the GNU General Public License
00009  * as published by the Free Software Foundation; either version 2
00010  * of the License, or (at your option) any later version.
00011  * 
00012  * This program is distributed in the hope that it will be useful,
00013  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00014  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00015  * GNU General Public License for more details.
00016  * 
00017  * You should have received a copy of the GNU General Public License
00018  * along with this program; if not, write to the Free Software
00019  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
00020  * 
00021  * Although this is not required, the author would appreciate being notified of, 
00022  * and receiving any modifications you may make to the source code that might serve
00023  * the general public.
00024  */
00025 
00073 #define DO_AMASK    state.r[REG_3] = V_2 &~CPU_AMASK;
00074 
00075 #define DO_CALL_PAL if(((function < 0x40) && ((state.cm != 0)))        \
00076                      || ((function > 0x3f) && (function < 0x80))       \
00077                      || (function > 0xbf))                             \
00078   {                                                                    \
00079     UNKNOWN2                                                           \
00080   }                                                                    \
00081   else                                                                 \
00082   {                                                                    \
00083     if(state.pal_vms)                                                  \
00084     {                                                                  \
00085       switch(function)                                                 \
00086       {                                                                \
00087       case 0x01:  /* CFLUSH */                                         \
00088         vmspal_call_cflush();                                          \
00089         break;                                                         \
00090                                                                 \
00091       case 0x02:  /* DRAINA */                                         \
00092         vmspal_call_draina();                                          \
00093         break;                                                         \
00094                                                                 \
00095       case 0x03:  /* LDQP */                                           \
00096         vmspal_call_ldqp();                                            \
00097         break;                                                         \
00098                                                                 \
00099       case 0x04:  /* STQP */                                           \
00100         vmspal_call_stqp();                                            \
00101         break;                                                         \
00102                                                                 \
00103       case 0x05:  /* SWPCTX */                                         \
00104         vmspal_call_swpctx();                                          \
00105         break;                                                         \
00106                                                                 \
00107       case 0x06:  /* MFPR_ASN */                                       \
00108         vmspal_call_mfpr_asn();                                        \
00109         break;                                                         \
00110                                                                 \
00111       case 0x07:  /* MTPR_ASTEN */                                     \
00112         vmspal_call_mtpr_asten();                                      \
00113         break;                                                         \
00114                                                                 \
00115       case 0x08:  /* MTPR_ASTSR */                                     \
00116         vmspal_call_mtpr_astsr();                                      \
00117         break;                                                         \
00118                                                                 \
00119       case 0x09:  /* CSERVE */                                         \
00120         vmspal_call_cserve();                                          \
00121         break;                                                         \
00122                                                                 \
00123       case 0x0b:  /* MFPR_FEN */                                       \
00124         vmspal_call_mfpr_fen();                                        \
00125         break;                                                         \
00126                                                                 \
00127       case 0x0c:  /* MTPR_FEN */                                       \
00128         vmspal_call_mtpr_fen();                                        \
00129         break;                                                         \
00130                                                                 \
00131       case 0x0e:  /* MFPR_IPL */                                       \
00132         vmspal_call_mfpr_ipl();                                        \
00133         break;                                                         \
00134                                                                 \
00135       case 0x0f:  /* MTPR_IPL */                                       \
00136         vmspal_call_mtpr_ipl();                                        \
00137         break;                                                         \
00138                                                                 \
00139       case 0x10:  /* MFPR_MCES */                                      \
00140         vmspal_call_mfpr_mces();                                       \
00141         break;                                                         \
00142                                                                 \
00143       case 0x11:  /* MTPR_MCES */                                      \
00144         vmspal_call_mtpr_mces();                                       \
00145         break;                                                         \
00146                                                                 \
00147       case 0x12:  /* MFPR_PCBB */                                      \
00148         vmspal_call_mfpr_pcbb();                                       \
00149         break;                                                         \
00150                                                                 \
00151       case 0x13:  /* MFPR_PRBR */                                      \
00152         vmspal_call_mfpr_prbr();                                       \
00153         break;                                                         \
00154                                                                 \
00155       case 0x14:  /* MTPR_PRBR */                                      \
00156         vmspal_call_mtpr_prbr();                                       \
00157         break;                                                         \
00158                                                                 \
00159       case 0x15:  /* MFPR_PTBR */                                      \
00160         vmspal_call_mfpr_ptbr();                                       \
00161         break;                                                         \
00162                                                                 \
00163       case 0x16:  /* MFPR_SCBB */                                      \
00164         vmspal_call_mfpr_scbb();                                       \
00165         break;                                                         \
00166                                                                 \
00167       case 0x17:  /* MTPR_SCBB */                                      \
00168         vmspal_call_mtpr_scbb();                                       \
00169         break;                                                         \
00170                                                                 \
00171       case 0x18:  /* MTPR_SIRR */                                      \
00172         vmspal_call_mtpr_sirr();                                       \
00173         break;                                                         \
00174                                                                 \
00175       case 0x19:  /* MFPR_SISR */                                      \
00176         vmspal_call_mfpr_sisr();                                       \
00177         break;                                                         \
00178                                                                 \
00179       case 0x1a:  /* MFPR_TBCHK */                                     \
00180         vmspal_call_mfpr_tbchk();                                      \
00181         break;                                                         \
00182                                                                 \
00183       case 0x1b:  /* MTPR_TBIA */                                      \
00184         vmspal_call_mtpr_tbia();                                       \
00185         break;                                                         \
00186                                                                 \
00187       case 0x1c:  /* MTPR_TBIAP */                                     \
00188         vmspal_call_mtpr_tbiap();                                      \
00189         break;                                                         \
00190                                                                 \
00191       case 0x1d:  /* MTPR_TBIS */                                      \
00192         vmspal_call_mtpr_tbis();                                       \
00193         break;                                                         \
00194                                                                 \
00195       case 0x1e:  /* MFPR_ESP */                                       \
00196         vmspal_call_mfpr_esp();                                        \
00197         break;                                                         \
00198                                                                 \
00199       case 0x1f:  /* MTPR_ESP */                                       \
00200         vmspal_call_mtpr_esp();                                        \
00201         break;                                                         \
00202                                                                 \
00203       case 0x20:  /* MFPR_SSP */                                       \
00204         vmspal_call_mfpr_ssp();                                        \
00205         break;                                                         \
00206                                                                 \
00207       case 0x21:  /* MTPR_SSP */                                       \
00208         vmspal_call_mtpr_ssp();                                        \
00209         break;                                                         \
00210                                                                 \
00211       case 0x22:  /* MFPR_USP */                                       \
00212         vmspal_call_mfpr_usp();                                        \
00213         break;                                                         \
00214                                                                 \
00215       case 0x23:  /* MTPR_USP */                                       \
00216         vmspal_call_mtpr_usp();                                        \
00217         break;                                                         \
00218                                                                 \
00219       case 0x24:  /* MTPR_TBISD */                                     \
00220         vmspal_call_mtpr_tbisd();                                      \
00221         break;                                                         \
00222                                                                 \
00223       case 0x25:  /* MTPR_TBISI */                                     \
00224         vmspal_call_mtpr_tbisi();                                      \
00225         break;                                                         \
00226                                                                 \
00227       case 0x26:  /* MFPR_ASTEN */                                     \
00228         vmspal_call_mfpr_asten();                                      \
00229         break;                                                         \
00230                                                                 \
00231       case 0x27:  /* MFPR_ASTSR */                                     \
00232         vmspal_call_mfpr_astsr();                                      \
00233         break;                                                         \
00234                                                                 \
00235       case 0x29:  /* MFPR_VPTB */                                      \
00236         vmspal_call_mfpr_vptb();                                       \
00237         break;                                                         \
00238                                                                 \
00239       case 0x2e:  /* MTPR_DATFX */                                     \
00240         vmspal_call_mtpr_datfx();                                      \
00241         break;                                                         \
00242                                                                 \
00243       case 0x3f:  /* MFPR_WHAMI */                                     \
00244         vmspal_call_mfpr_whami();                                      \
00245         break;                                                         \
00246                                                                 \
00247       case 0x86:  /* IMB */                                            \
00248         vmspal_call_imb();                                             \
00249         break;                                                         \
00250                                                                 \
00251       case 0x8f:  /* PROBER */                                         \
00252         vmspal_call_prober();                                          \
00253         break;                                                         \
00254                                                                 \
00255       case 0x90:  /* PROBEW */                                         \
00256         vmspal_call_probew();                                          \
00257         break;                                                         \
00258                                                                 \
00259       case 0x91:  /* RD_PS */                                          \
00260         vmspal_call_rd_ps();                                           \
00261         break;                                                         \
00262                                                                 \
00263       case 0x92:  /* REI */                                            \
00264         vmspal_call_rei();                                             \
00265         break;                                                         \
00266                                                                 \
00267       case 0x9b:  /* SWASTEN */                                        \
00268         vmspal_call_swasten();                                         \
00269         break;                                                         \
00270                                                                 \
00271       case 0x9c:  /* WR_PS_SW */                                       \
00272         vmspal_call_wr_ps_sw();                                        \
00273         break;                                                         \
00274                                                                 \
00275       case 0x9d:  /* RSCC */                                           \
00276         vmspal_call_rscc();                                            \
00277         break;                                                         \
00278                                                                 \
00279       case 0x9e:  /* READ_UNQ */                                       \
00280         vmspal_call_read_unq();                                        \
00281         break;                                                         \
00282                                                                 \
00283       case 0x9f:  /* WRITE_UNQ */                                      \
00284         vmspal_call_write_unq();                                       \
00285         break;                                                         \
00286                                                                 \
00287       default:                                                         \
00288         state.r[32 + 23] = state.pc;                                   \
00289         set_pc(state.pal_base | (1 << 13) | ((function & 0x80) << 5) | \
00290                  ((function & 0x3f) << 6) | 1);                        \
00291         TRC(true, false)                                               \
00292       }                                                                \
00293     }                                                                  \
00294     else                                                               \
00295     {                                                                  \
00296       state.r[32 + 23] = state.pc;                                     \
00297       set_pc(state.pal_base | (1 << 13) | ((function & 0x80) << 5) |   \
00298                ((function & 0x3f) << 6) | 1);                          \
00299       TRC(true, false)                                                 \
00300     }                                                                  \
00301   }
00302 
00303 #define DO_IMPLVER  state.r[REG_3] = CPU_IMPLVER;
00304 
00305 #define DO_RPCC     state.r[REG_1] = ((u64) state.cc_offset) << 32 | \
00306     (state.cc & U64(0xffffffff));
00307 
00308 // The following ops have no function right now (at least, not until multiple CPU's are supported).
00309 #define DO_TRAPB    ;
00310 #define DO_EXCB     ;
00311 #define DO_MB       ;
00312 #define DO_WMB      ;
00313 #define DO_FETCH    ;
00314 #define DO_FETCH_M  ;
00315 #define DO_ECB      ;
00316 #define DO_WH64     ;
00317 #define DO_WH64EN   ;

SourceForge.net Logo
Project space on SourceForge.net