Mercurial > hg > ede
view emu52/mem.lst @ 42:792da050d8c4 tip
more dox
author | james <jb302@eecs.qmul.ac.uk> |
---|---|
date | Tue, 22 Apr 2014 14:25:14 +0100 |
parents | 8205f1734ff2 |
children |
line wrap: on
line source
C51 COMPILER V9.02 MEM 04/17/2014 15:17:34 PAGE 1 C51 COMPILER V9.02, COMPILATION OF MODULE MEM OBJECT MODULE PLACED IN mem.obj COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE src\mem.c OMF2 BROWSE DEBUG PRINT(.\mem.lst) OBJECT(mem.obj) line level source 1 /* mem.c 2 * functions for accessing emulator memory */ 3 #include "mem.h" 4 5 /* get flag value 6 * if invalid flag is requested value is 0 */ 7 BYTE 8 get_flag(BYTE flag) { 9 1 if (flag > 7) { 10 2 return 0; 11 2 } 12 1 else { 13 2 return GBIT(flags, flag); 14 2 } 15 1 } 16 17 /* set flag to 0 if on == 0 18 * otherwise set flag to 1 */ 19 void 20 set_flag(BYTE flag, BYTE on) { 21 1 if (flag <= 7) { 22 2 if (on == 0x00) { 23 3 flags = CBIT(flags, flag); 24 3 } 25 2 else { 26 3 flags = SBIT(flags, flag); 27 3 } 28 2 } 29 1 } 30 31 /* sets zero and parity flags based on content of byte */ 32 void 33 set_zp(BYTE val){ 34 1 if (val == 0) { 35 2 set_flag(Z, 1); 36 2 set_flag(P, 0); 37 2 } 38 1 else { 39 2 /* check parity 40 2 * think of this as folding */ 41 2 val ^= val >> 4; 42 2 val ^= val >> 2; 43 2 val ^= val >> 1; 44 2 val &= 1; 45 2 if (val == 0) { 46 3 set_flag(P, 1); 47 3 } 48 2 else { 49 3 set_flag(P, 0); 50 3 } 51 2 } 52 1 } 53 54 WIDE 55 get_wide(BYTE reg) { C51 COMPILER V9.02 MEM 04/17/2014 15:17:34 PAGE 2 56 1 /* high, low */ 57 1 return MWIDE(regs[reg + 4], regs[reg + 12]); 58 1 } 59 60 void 61 set_wide(BYTE reg, WIDE val) { 62 1 regs[reg + 4] = GHIGH(val); /* high */ 63 1 regs[reg + 12] = GLOW(val); /* low */ 64 1 } 65 66 void 67 inc_pc(BYTE n) { 68 1 if ((regs[PCL] + n) > 0xFF) { 69 2 regs[PCH]++; 70 2 } 71 1 regs[PCL] += n; 72 1 } 73 74 BYTE 75 fetch(void) { 76 1 BYTE val = mem[get_wide(PC)]; 77 1 inc_pc(1); 78 1 return val; 79 1 } 80 81 WIDE 82 fetch_wide(void) { 83 1 WIDE val = MWIDE(mem[get_wide(PC)], mem[get_wide(PC) + 1]); 84 1 inc_pc(2); 85 1 return val; 86 1 } 87 88 /* 0b000 = R0 89 * 0b001 = R1 90 * 0b010 = R2 91 * 0b011 = R3 92 * 0b100 = DPH 93 * 0b101 = DPL 94 * 0b110 = SPH 95 * 0b111 = SPL */ 96 BYTE 97 get_reg(BYTE reg) { 98 1 if (reg < 4) { 99 2 return regs[reg | (get_flag(BS) << 3)]; 100 2 } 101 1 else { 102 2 switch (reg) { 103 3 104 3 case 4: 105 3 return regs[DPH]; 106 3 case 5: 107 3 return regs[DPL]; 108 3 case 6: 109 3 return regs[SPH]; 110 3 case 7: 111 3 return regs[SPL]; 112 3 default: 113 3 return 0; 114 3 } 115 2 } 116 1 } 117 C51 COMPILER V9.02 MEM 04/17/2014 15:17:34 PAGE 3 118 void 119 set_reg(BYTE reg, BYTE val) { 120 1 if (reg < 4) { 121 2 regs[reg | (get_flag(BS) << 3)] = val; 122 2 } 123 1 else { 124 2 switch (reg) { 125 3 126 3 case 4: 127 3 regs[DPH] = val; 128 3 break; 129 3 case 5: 130 3 regs[DPL] = val; 131 3 break; 132 3 case 6: 133 3 regs[SPH] = val; 134 3 break; 135 3 case 7: 136 3 regs[SPL] = val; 137 3 break; 138 3 default: 139 3 break; 140 3 } 141 2 } 142 1 } MODULE INFORMATION: STATIC OVERLAYABLE CODE SIZE = 369 ---- CONSTANT SIZE = ---- ---- XDATA SIZE = ---- ---- PDATA SIZE = ---- ---- DATA SIZE = ---- ---- IDATA SIZE = ---- ---- BIT SIZE = ---- ---- EDATA SIZE = ---- ---- HDATA SIZE = ---- ---- XDATA CONST SIZE = ---- ---- FAR CONST SIZE = ---- ---- END OF MODULE INFORMATION. C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)