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
|
||||
def next_word_plus_register_value(c, code):
|
||||
"""[next word + register]"""
|
||||
c.pc += 1
|
||||
v = "c.m[0x%04X + c.r[0x%01X]]" % (c.m[c.pc], code-0x0F)
|
||||
if c.debug: log(v)
|
||||
c.pc = (c.pc + 1) & wmask
|
||||
return v
|
||||
|
||||
@valcode(0x18)
|
||||
|
|
@ -208,8 +208,8 @@ def next_word_plus_register_value(c, code):
|
|||
def pop(c):
|
||||
"""POP / [SP++]"""
|
||||
v = "c.m[0x%04X]" % c.sp
|
||||
c.sp += 1
|
||||
if c.debug: log(v)
|
||||
c.sp = (c.sp + 1) & wmask
|
||||
return v
|
||||
|
||||
@valcode(0x19)
|
||||
|
|
@ -224,7 +224,7 @@ def peek(c):
|
|||
@pointerize
|
||||
def push(c):
|
||||
"""PUSH / [--SP]"""
|
||||
c.sp -= 1
|
||||
c.sp = (c.sp - 1) & wmask
|
||||
v = "c.m[0x%04X]" % c.sp
|
||||
if c.debug: log(v)
|
||||
return v
|
||||
|
|
@ -258,7 +258,7 @@ def overflow(c):
|
|||
def next_word_value(c):
|
||||
"""[next_word]"""
|
||||
v = "c.m[0x%04X]" % c.m[c.pc]
|
||||
c.pc += 1
|
||||
c.pc = (c.pc + 1) & wmask
|
||||
if c.debug: log(v)
|
||||
return v
|
||||
|
||||
|
|
@ -267,7 +267,7 @@ def next_word_value(c):
|
|||
def next_word(c):
|
||||
"""next_word (literal)"""
|
||||
v = "c.m[0x%04X]" % c.pc
|
||||
c.pc += 1
|
||||
c.pc = (c.pc + 1) & wmask
|
||||
if c.debug: log(v)
|
||||
return v
|
||||
|
||||
|
|
@ -375,8 +375,8 @@ class CPU(object):
|
|||
def step(c):
|
||||
"""start handling [PC]"""
|
||||
word = c.m[c.pc]
|
||||
c.pc += 1
|
||||
opcode = word & 0xF
|
||||
c.pc = (c.pc + 1) & wmask
|
||||
try:
|
||||
op = opcode_map[(opcode,)]
|
||||
if c.debug: log(op.__name__)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue