1
0
mirror of https://github.com/prirun/p50em.git synced 2026-04-28 13:07:31 +00:00

added "# of register sets" array, enabled multi-register set code ("ors") +

moved dispatch tables to global variable structure
This commit is contained in:
Jim
2007-09-12 00:00:00 -04:00
parent c4f7df2944
commit 0948124f29
4 changed files with 125 additions and 56 deletions

View File

@@ -37,17 +37,17 @@
#define MRPRIMEIX(primeop) (((primeop) >> 4) | ((primeop) & 3))
#define MRGEN(opcode, name, target) \
disp_mr[MRPRIMEIX(opcode)] = &⌖ \
gvp->disp_mr[MRPRIMEIX(opcode)] = &⌖ \
/* printf("MR opcode %05o (%s), ix=%0d\n", opcode, name, MRPRIMEIX(opcode)); */ \
if ((opcode & 01700) != 01500) { \
disp_mr[MRPRIMEIX(opcode | 02000)] = &⌖ \
gvp->disp_mr[MRPRIMEIX(opcode | 02000)] = &⌖ \
/* printf("MR opcode %05o (%s), ix=%0d\n", opcode | 02000, name, MRPRIMEIX(opcode | 02000)); */ \
}
/* initialize table to "bad memory reference instruction" */
for (i=0; i < 128; i++)
disp_mr[i] = &&d_badmr;
gvp->disp_mr[i] = &&d_badmr;
MRGEN(00100, "JMP", d_jmp);
MRGEN(00101, "EAL", d_ealeaa);
@@ -111,13 +111,13 @@ MRGEN(03503, "JSX", d_jsx);
#define GENIX(inst) ((inst>>4) & 06000) | (inst & 01777)
#define DIGEN(opcode, name, target) \
disp_gen[GENIX(opcode)] = &&target; \
gvp->disp_gen[GENIX(opcode)] = &&target; \
//printf("Opcode %06o (%s), ix=%0o\n", opcode, name, GENIX(opcode))
/* initialize entire table to jump to bad generic label */
for (i=0; i < 010000; i++) {
disp_gen[i] = &&d_badgen;
gvp->disp_gen[i] = &&d_badgen;
}
/* initialize class 0 generics (first 2 bits are zero) */
@@ -230,14 +230,14 @@ DIGEN(001324, "MDIW", d_mdxx);
/* initialize class 1 generics (shift group) */
for (i = 02000; i < 04000; i++) {
disp_gen[i] = &&d_gen1;
gvp->disp_gen[i] = &&d_gen1;
}
/* initialize class 2 generics (skip group) */
#if 0
for (i = 04000; i < 06000; i++) {
disp_gen[i] = &&d_gen2;
gvp->disp_gen[i] = &&d_gen2;
}
#endif