mirror of
https://github.com/lloeki/python-dcpu_16.git
synced 2025-12-06 09:54:39 +01:00
guarding against PC/SP overflow
This commit is contained in:
parent
6d5a40d6ac
commit
7f97d50ce0
1 changed files with 6 additions and 6 deletions
12
dcpu_16.py
12
dcpu_16.py
|
|
@ -198,9 +198,9 @@ def register_value(c, code):
|
||||||
@pointerize
|
@pointerize
|
||||||
def next_word_plus_register_value(c, code):
|
def next_word_plus_register_value(c, code):
|
||||||
"""[next word + register]"""
|
"""[next word + register]"""
|
||||||
c.pc += 1
|
|
||||||
v = "c.m[0x%04X + c.r[0x%01X]]" % (c.m[c.pc], code-0x0F)
|
v = "c.m[0x%04X + c.r[0x%01X]]" % (c.m[c.pc], code-0x0F)
|
||||||
if c.debug: log(v)
|
if c.debug: log(v)
|
||||||
|
c.pc = (c.pc + 1) & wmask
|
||||||
return v
|
return v
|
||||||
|
|
||||||
@valcode(0x18)
|
@valcode(0x18)
|
||||||
|
|
@ -208,8 +208,8 @@ def next_word_plus_register_value(c, code):
|
||||||
def pop(c):
|
def pop(c):
|
||||||
"""POP / [SP++]"""
|
"""POP / [SP++]"""
|
||||||
v = "c.m[0x%04X]" % c.sp
|
v = "c.m[0x%04X]" % c.sp
|
||||||
c.sp += 1
|
|
||||||
if c.debug: log(v)
|
if c.debug: log(v)
|
||||||
|
c.sp = (c.sp + 1) & wmask
|
||||||
return v
|
return v
|
||||||
|
|
||||||
@valcode(0x19)
|
@valcode(0x19)
|
||||||
|
|
@ -224,7 +224,7 @@ def peek(c):
|
||||||
@pointerize
|
@pointerize
|
||||||
def push(c):
|
def push(c):
|
||||||
"""PUSH / [--SP]"""
|
"""PUSH / [--SP]"""
|
||||||
c.sp -= 1
|
c.sp = (c.sp - 1) & wmask
|
||||||
v = "c.m[0x%04X]" % c.sp
|
v = "c.m[0x%04X]" % c.sp
|
||||||
if c.debug: log(v)
|
if c.debug: log(v)
|
||||||
return v
|
return v
|
||||||
|
|
@ -258,7 +258,7 @@ def overflow(c):
|
||||||
def next_word_value(c):
|
def next_word_value(c):
|
||||||
"""[next_word]"""
|
"""[next_word]"""
|
||||||
v = "c.m[0x%04X]" % c.m[c.pc]
|
v = "c.m[0x%04X]" % c.m[c.pc]
|
||||||
c.pc += 1
|
c.pc = (c.pc + 1) & wmask
|
||||||
if c.debug: log(v)
|
if c.debug: log(v)
|
||||||
return v
|
return v
|
||||||
|
|
||||||
|
|
@ -267,7 +267,7 @@ def next_word_value(c):
|
||||||
def next_word(c):
|
def next_word(c):
|
||||||
"""next_word (literal)"""
|
"""next_word (literal)"""
|
||||||
v = "c.m[0x%04X]" % c.pc
|
v = "c.m[0x%04X]" % c.pc
|
||||||
c.pc += 1
|
c.pc = (c.pc + 1) & wmask
|
||||||
if c.debug: log(v)
|
if c.debug: log(v)
|
||||||
return v
|
return v
|
||||||
|
|
||||||
|
|
@ -375,8 +375,8 @@ class CPU(object):
|
||||||
def step(c):
|
def step(c):
|
||||||
"""start handling [PC]"""
|
"""start handling [PC]"""
|
||||||
word = c.m[c.pc]
|
word = c.m[c.pc]
|
||||||
c.pc += 1
|
|
||||||
opcode = word & 0xF
|
opcode = word & 0xF
|
||||||
|
c.pc = (c.pc + 1) & wmask
|
||||||
try:
|
try:
|
||||||
op = opcode_map[(opcode,)]
|
op = opcode_map[(opcode,)]
|
||||||
if c.debug: log(op.__name__)
|
if c.debug: log(op.__name__)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue