aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Henderson <richard.henderson@linaro.org>2025-03-25 08:58:56 -0700
committerRichard Henderson <richard.henderson@linaro.org>2025-04-22 14:07:12 -0700
commita2860ff908da0d71ce25adcb02388fe26b467390 (patch)
treeb83ef49229ce5ac7a3157cdde3b2ca82d3536058
parent29bcd5a46a9de61587f490d92c5a5500b2684f22 (diff)
downloadqemu-a2860ff908da0d71ce25adcb02388fe26b467390.zip
qemu-a2860ff908da0d71ce25adcb02388fe26b467390.tar.gz
qemu-a2860ff908da0d71ce25adcb02388fe26b467390.tar.bz2
target/avr: Add defines for i/o port registers
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
-rw-r--r--target/avr/cpu.h10
-rw-r--r--target/avr/helper.c36
2 files changed, 28 insertions, 18 deletions
diff --git a/target/avr/cpu.h b/target/avr/cpu.h
index 84a8f5c..1a5a5b8 100644
--- a/target/avr/cpu.h
+++ b/target/avr/cpu.h
@@ -47,6 +47,16 @@
/* Number of IO registers accessible by ld/st/in/out */
#define NUMBER_OF_IO_REGISTERS 64
+/* CPU registers mapped into i/o ports 0x38-0x3f. */
+#define REG_38_RAMPD 0
+#define REG_38_RAMPX 1
+#define REG_38_RAMPY 2
+#define REG_38_RAMPZ 3
+#define REG_38_EIDN 4
+#define REG_38_SPL 5
+#define REG_38_SPH 6
+#define REG_38_SREG 7
+
/*
* Offsets of AVR memory regions in host memory space.
*
diff --git a/target/avr/helper.c b/target/avr/helper.c
index e5bf16c..f8ada8b 100644
--- a/target/avr/helper.c
+++ b/target/avr/helper.c
@@ -216,29 +216,29 @@ target_ulong helper_inb(CPUAVRState *env, uint32_t port)
{
target_ulong data = 0;
- switch (port) {
- case 0x38: /* RAMPD */
+ switch (port - 0x38) {
+ case REG_38_RAMPD:
data = 0xff & (env->rampD >> 16);
break;
- case 0x39: /* RAMPX */
+ case REG_38_RAMPX:
data = 0xff & (env->rampX >> 16);
break;
- case 0x3a: /* RAMPY */
+ case REG_38_RAMPY:
data = 0xff & (env->rampY >> 16);
break;
- case 0x3b: /* RAMPZ */
+ case REG_38_RAMPZ:
data = 0xff & (env->rampZ >> 16);
break;
- case 0x3c: /* EIND */
+ case REG_38_EIDN:
data = 0xff & (env->eind >> 16);
break;
- case 0x3d: /* SPL */
+ case REG_38_SPL:
data = env->sp & 0x00ff;
break;
- case 0x3e: /* SPH */
+ case REG_38_SPH:
data = env->sp >> 8;
break;
- case 0x3f: /* SREG */
+ case REG_38_SREG:
data = cpu_get_sreg(env);
break;
default:
@@ -265,39 +265,39 @@ void helper_outb(CPUAVRState *env, uint32_t port, uint32_t data)
{
data &= 0x000000ff;
- switch (port) {
- case 0x38: /* RAMPD */
+ switch (port - 0x38) {
+ case REG_38_RAMPD:
if (avr_feature(env, AVR_FEATURE_RAMPD)) {
env->rampD = (data & 0xff) << 16;
}
break;
- case 0x39: /* RAMPX */
+ case REG_38_RAMPX:
if (avr_feature(env, AVR_FEATURE_RAMPX)) {
env->rampX = (data & 0xff) << 16;
}
break;
- case 0x3a: /* RAMPY */
+ case REG_38_RAMPY:
if (avr_feature(env, AVR_FEATURE_RAMPY)) {
env->rampY = (data & 0xff) << 16;
}
break;
- case 0x3b: /* RAMPZ */
+ case REG_38_RAMPZ:
if (avr_feature(env, AVR_FEATURE_RAMPZ)) {
env->rampZ = (data & 0xff) << 16;
}
break;
- case 0x3c: /* EIDN */
+ case REG_38_EIDN:
env->eind = (data & 0xff) << 16;
break;
- case 0x3d: /* SPL */
+ case REG_38_SPL:
env->sp = (env->sp & 0xff00) | (data);
break;
- case 0x3e: /* SPH */
+ case REG_38_SPH:
if (avr_feature(env, AVR_FEATURE_2_BYTE_SP)) {
env->sp = (env->sp & 0x00ff) | (data << 8);
}
break;
- case 0x3f: /* SREG */
+ case REG_38_SREG:
cpu_set_sreg(env, data);
break;
default: