OpenCores
URL https://opencores.org/ocsvn/igor/igor/trunk

Subversion Repositories igor

[/] [igor/] [trunk/] [simulator/] [regs.c] - Blame information for rev 4

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 4 atypic
#include <assert.h>
2
#include <stdio.h>
3
#include <err.h>
4
#include <errno.h>
5
#include <string.h>
6
 
7
#include "types.h"
8
#include "object.h"
9
#include "regs.h"
10
 
11
reg_t registers[N_REGS];
12
char status_flags[8] = { 'O', 'C', 'N', 'Z', 'B', 'U', 'U', 'U' };
13
 
14
void regs_load_from_file(char *regfile);
15
 
16
void
17
regs_init(char *regfile)
18
{
19
        int i;
20
        for (i = 0; i < N_REGS; i++)
21
                registers[i] = 0;
22
        if (regfile != NULL)
23
                regs_load_from_file(regfile);
24
}
25
 
26
void
27
regs_load_from_file(char *regfile)
28
{
29
        FILE *f = fopen(regfile, "r");
30
        if (f == NULL)
31
                errx(1, "could not open register file %s: %s",
32
                     regfile, strerror(errno));
33
 
34
        if (!object_read(registers, N_REGS, f))
35
                errx(1, "error reading register file %s: %s",
36
                     regfile, strerror(errno));
37
 
38
        printf("0x%X register objects read from %s\n",
39
               N_REGS, regfile);
40
 
41
        fclose(f);
42
}
43
 
44
void
45
reg_set(int reg, reg_t value)
46
{
47
        assert(reg >= 0 && reg < N_REGS);
48
        registers[reg] = value;
49
}
50
 
51
reg_t
52
reg_get(int reg)
53
{
54
        assert(reg >= 0 && reg < N_REGS);
55
        return registers[reg];
56
}
57
 
58
 
59
void
60
reg_dump(void)
61
{
62
        printf("Dumping registers:\n");
63
        for (int i = 0; i < N_REGS; i++) {
64
                printf("\tr%d: ", i);
65
                object_dump(registers[i]);
66
        }
67
}
68
 
69
 
70
int
71
get_status_flag(int flag)
72
{
73
        return (reg_get(REG_ST) >> flag) & 0x1;
74
}
75
 
76
void
77
set_status_flag(int flag, int value)
78
{
79
        reg_t stval;
80
        if (value != 0 && value != 1)
81
                errx(1, "Tried to set status flag %d to %d\n", flag, value);
82
        stval = reg_get(REG_ST);
83
        if (value)
84
                stval |= 1<<flag;
85
        else
86
                stval &= ~(1<<flag);
87
        reg_set(REG_ST, stval);
88
}
89
 
90
int
91
get_all_status_flags(void)
92
{
93
        return object_get_datum(reg_get(REG_ST));
94
}
95
 
96
int
97
get_flags(uint16_t mask)
98
{
99
        uint16_t masked_flags;
100
        masked_flags = mask & OBJECT_DATUM(reg_get(REG_ST));
101
        printf("get_flags: mask=%X, masked_flags=%X\n", mask, masked_flags);
102
        return (masked_flags != 0 ? 1 : 0);
103
}
104
 
105
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.