1 #ifndef YACASL2_EXEC_H_INCLUDED 2 #define YACASL2_EXEC_H_INCLUDED 3 4 #include <stdbool.h> 5 #include <stdio.h> 6 #include <assert.h> 7 #include <time.h> 8 #include "struct.h" 9 #include "word.h" 10 #include "cmem.h" 11 #include "cerr.h" 12 #include "monitor.h" 13 #include "disassemble.h" 14 15 enum { 16 INSIZE = 256 /**<IN命令の、入力領域 */ 17 }; 18 19 /** 20 * @brief 実行エラーをエラーリストに追加する 21 */ 22 void addcerrlist_exec(); 23 24 /** 25 * @class Exec 26 * @brief execから関数ポインタで呼び出される関数 27 * @relatesalso exec 28 **/ 29 30 /** 31 * @brief COMET II仮想マシンを実行する 32 * 33 * @relatesalso Exec 34 * 35 * @return なし 36 */ 37 void exec(); 38 39 /** 40 * @brief NOP命令。語長1(OPのみ) 41 * @relatesalso Exec 42 * 43 * @return なし 44 */ 45 void nop(); 46 47 /** 48 * @brief LD命令 - オペランドr,adr,x。語長2 49 * @relatesalso Exec 50 * 51 * @return なし 52 */ 53 void ld_r_adr_x(); 54 55 /** 56 * @brief LD命令 - オペランドr1,r2。語長1 57 * @relatesalso Exec 58 * 59 * @return なし 60 */ 61 void ld_r1_r2(); 62 63 /** 64 * @brief ST命令。語長2 65 * @relatesalso Exec 66 * 67 * @return なし 68 */ 69 void st(); 70 71 /** 72 * @brief LAD命令。語長2 73 * @relatesalso Exec 74 * 75 * @return なし 76 */ 77 void lad(); 78 79 /** 80 * @brief ADDA命令 - オペランドr,adr,x。語長2 81 * @relatesalso Exec 82 * 83 * @return なし 84 */ 85 void adda_r_adr_x(); 86 87 /** 88 * @brief ADDA命令 - オペランドr1,r2。語長1 89 * @relatesalso Exec 90 * 91 * @return なし 92 */ 93 void adda_r1_r2(); 94 95 /** 96 * @brief SUBA命令 - オペランドr,adr,x。語長2 97 * @relatesalso Exec 98 * 99 * @return なし 100 */ 101 void suba_r_adr_x(); 102 103 /** 104 * @brief SUBA命令 - オペランドr1,r2。語長1 105 * @relatesalso Exec 106 * 107 * @return なし 108 */ 109 void suba_r1_r2(); 110 111 /** 112 * @brief ADDL命令 - オペランドr,adr,x。語長2 113 * @relatesalso Exec 114 * 115 * @return なし 116 */ 117 void addl_r_adr_x(); 118 119 /** 120 * @brief ADDL命令 - オペランドr1,r2。語長1 121 * @relatesalso Exec 122 * 123 * @return なし 124 */ 125 void addl_r1_r2(); 126 127 /** 128 * @brief SUBL命令 - オペランドr,adr,x。語長2 129 * @relatesalso Exec 130 * 131 * @return なし 132 */ 133 void subl_r_adr_x(); 134 135 /** 136 * @brief SUBL命令 - オペランドr1,r2。語長1 137 * @relatesalso Exec 138 * 139 * @return なし 140 */ 141 void subl_r1_r2(); 142 143 /** 144 * @brief AND命令 - オペランドr,adr,x。語長2 145 * @relatesalso Exec 146 * 147 * @return なし 148 */ 149 void and_r_adr_x(); 150 151 /** 152 * @brief AND命令 - オペランドr1,r2。語長1 153 * @relatesalso Exec 154 * 155 * @return なし 156 */ 157 void and_r1_r2(); 158 159 /** 160 * @brief OR命令 - オペランドr,adr,x。語長2 161 * @relatesalso Exec 162 * 163 * @return なし 164 */ 165 void or_r_adr_x(); 166 167 /** 168 * @brief OR命令 - オペランドr1,r2。語長1 169 * @relatesalso Exec 170 * 171 * @return なし 172 */ 173 void or_r1_r2(); 174 175 /** 176 * @brief XOR命令 - オペランドr,adr,x。語長2 177 * @relatesalso Exec 178 * 179 * @return なし 180 */ 181 void xor_r_adr_x(); 182 183 /** 184 * @brief XOR命令 - オペランドr1,r2。語長1 185 * @relatesalso Exec 186 * 187 * @return なし 188 */ 189 void xor_r1_r2(); 190 191 /** 192 * @brief CPA命令 - オペランドr,adr,x。語長2 193 * @relatesalso Exec 194 * 195 * @return なし 196 */ 197 void cpa_r_adr_x(); 198 199 /** 200 * @brief CPA命令 - オペランドr1,r2。語長1 201 * @relatesalso Exec 202 * 203 * @return なし 204 */ 205 void cpa_r1_r2(); 206 207 /** 208 * @brief CPL命令 - オペランドr,adr,x。語長2 209 * @relatesalso Exec 210 * 211 * @return なし 212 */ 213 void cpl_r_adr_x(); 214 215 /** 216 * @brief CPL命令 - オペランドr1,r2。語長1 217 * @relatesalso Exec 218 * 219 * @return なし 220 */ 221 void cpl_r1_r2(); 222 223 /** 224 * @brief SLA命令 - オペランドr,adr,x。語長2 225 * 226 * 算術演算なので、第15ビットは送り出されない 227 * @relatesalso Exec 228 * 229 * @return なし 230 */ 231 void sla(); 232 233 /** 234 * @brief SRA命令 - オペランドr,adr,x。語長2 235 * 236 * 算術演算なので、第15ビットは送り出されない 237 * 空いたビット位置には符号と同じものが入る 238 * @relatesalso Exec 239 * 240 * @return なし 241 */ 242 void sra(); 243 244 /** 245 * @brief SLL命令 - オペランドr,adr,x。語長2 246 * @relatesalso Exec 247 * 248 * @return なし 249 */ 250 void sll(); 251 252 /** 253 * @brief SRL命令 - オペランドr,adr,x。語長2 254 * @relatesalso Exec 255 * 256 * @return なし 257 */ 258 void srl(); 259 260 /** 261 * @brief JPL命令。語長2 262 * @relatesalso Exec 263 * 264 * @return なし 265 */ 266 void jpl(); 267 268 /** 269 * @brief JMI命令。語長2 270 * @relatesalso Exec 271 * 272 * @return なし 273 */ 274 void jmi(); 275 276 /** 277 * @brief JNZ命令。語長2 278 * @relatesalso Exec 279 * 280 * @return なし 281 */ 282 void jnz(); 283 284 /** 285 * @brief JZE命令。語長2 286 * @relatesalso Exec 287 * 288 * @return なし 289 */ 290 void jze(); 291 292 /** 293 * @brief JOV命令。語長2 294 * @relatesalso Exec 295 * 296 * @return なし 297 */ 298 void jov(); 299 300 /** 301 * @brief JUMP命令。語長2 302 * @relatesalso Exec 303 * 304 * @return なし 305 */ 306 void jump(); 307 308 /** 309 * @brief PUSH命令。語長2 310 * @relatesalso Exec 311 * 312 * @return なし 313 */ 314 void push(); 315 316 /** 317 * @brief POP命令。語長1 318 * @relatesalso Exec 319 * 320 * @return なし 321 */ 322 void pop(); 323 324 /** 325 * @brief CALL命令。語長2 326 * @relatesalso Exec 327 * 328 * @return なし 329 */ 330 void call(); 331 332 /** 333 * @brief RET命令。語長1(OPのみ) 334 * @relatesalso Exec 335 * 336 * @return なし 337 */ 338 void ret(); 339 340 /** 341 * @brief SVC命令。語長2 342 * @relatesalso Exec 343 * 344 * @return なし 345 */ 346 void svc(); 347 348 /** 349 * @brief COMET IIのメモリを表示する 350 * 351 * @return なし 352 * 353 * @param start 表示の開始アドレス 354 * @param end 表示の終了アドレス 355 */ 356 void dumpmemory(WORD start, WORD end); 357 358 /** 359 * @brief COMET IIのレジスタを表示する 360 * 361 * @return なし 362 */ 363 void dspregister(); 364 365 #endif