Skip to content

Commit

Permalink
IBM1130: Fix address computation overflow
Browse files Browse the repository at this point in the history
In sim_instr(), the effective address is computed; for the case of TAG
(index register addressing), the contents of the specified index register
is added to the effective address, but the result is not masked to 16
bits as per the hardware functionality.

Adding a a 16 bit mask operation fixes the issue.
  • Loading branch information
charlesUnixPro authored and pkoning2 committed Jun 17, 2024
1 parent f1fb14d commit aea2634
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion Ibm1130/ibm1130_cpu.c
Original file line number Diff line number Diff line change
Expand Up @@ -653,7 +653,7 @@ t_stat sim_instr (void)

eaddr = word2; /* assume standard addressing & compute effective address */
if (TAG) /* if indexed */
eaddr += ReadIndex(TAG); /* add index register value */
eaddr = (eaddr + ReadIndex(TAG)) & 0xFFFF; /* add index register value */
if (INDIR) /* if indirect addressing */
eaddr = ReadW(eaddr); /* pick up referenced address */

Expand Down

0 comments on commit aea2634

Please sign in to comment.