getGAMAddress: reg 6/7 need special handling

This commit is contained in:
folkert van heusden 2023-03-18 12:28:43 +01:00
parent 3c81b4f9e8
commit 89435e48d6
Signed by untrusted user who does not match committer: folkert
GPG key ID: 6B6455EDFEED3BD1

12
cpu.cpp
View file

@ -418,11 +418,21 @@ uint16_t cpu::getGAMAddress(const uint8_t mode, const int reg, const bool word_m
uint16_t temp = 0;
int set = getBitPSW(11);
int run_mode = psw >> 14;
constexpr uint16_t sp_pointers[] = { ADDR_KERNEL_SP, ADDR_SV_SP, 0xffff, ADDR_USER_SP };
switch(mode) {
case 0:
printf("REG: %d\r\n", reg);
// registers are also mapped in memory
return 0177700 + reg;
if (reg < 6)
return (run_mode == 3 ? ADDR_USER_R : ADDR_KERNEL_R) + reg;
if (reg == 7)
return ADDR_PC;
return sp_pointers[run_mode];
case 1:
return getRegister(reg, set, prev_mode);
case 2: