|
35 | 35 | #include "asmexception.h"
|
36 | 36 | #include "discimage.h"
|
37 | 37 | #include "BASIC.h"
|
| 38 | +#include "random.h" |
38 | 39 |
|
39 | 40 |
|
40 | 41 | using namespace std;
|
@@ -75,7 +76,8 @@ const LineParser::Token LineParser::m_gaTokenTable[] =
|
75 | 76 | { "MACRO", &LineParser::HandleMacro, &SourceFile::StartMacro },
|
76 | 77 | { "ENDMACRO", &LineParser::HandleEndMacro, &SourceFile::EndMacro },
|
77 | 78 | { "ERROR", &LineParser::HandleError, 0 },
|
78 |
| - { "COPYBLOCK", &LineParser::HandleCopyBlock, 0 } |
| 79 | + { "COPYBLOCK", &LineParser::HandleCopyBlock, 0 }, |
| 80 | + { "RANDOMIZE", &LineParser::HandleRandomize, 0 } |
79 | 81 | };
|
80 | 82 |
|
81 | 83 |
|
@@ -1986,3 +1988,38 @@ void LineParser::HandleCopyBlock()
|
1986 | 1988 | throw AsmException_SyntaxError_UnexpectedComma( m_line, m_column );
|
1987 | 1989 | }
|
1988 | 1990 | }
|
| 1991 | + |
| 1992 | + |
| 1993 | +/*************************************************************************************************/ |
| 1994 | +/** |
| 1995 | + LineParser::HandleRandomize() |
| 1996 | +*/ |
| 1997 | +/*************************************************************************************************/ |
| 1998 | +void LineParser::HandleRandomize() |
| 1999 | +{ |
| 2000 | + unsigned int value; |
| 2001 | + |
| 2002 | + try |
| 2003 | + { |
| 2004 | + value = EvaluateExpressionAsUnsignedInt(); |
| 2005 | + } |
| 2006 | + catch ( AsmException_SyntaxError_SymbolNotDefined& ) |
| 2007 | + { |
| 2008 | + if ( GlobalData::Instance().IsFirstPass() ) |
| 2009 | + { |
| 2010 | + value = 0; |
| 2011 | + } |
| 2012 | + else |
| 2013 | + { |
| 2014 | + throw; |
| 2015 | + } |
| 2016 | + } |
| 2017 | + |
| 2018 | + beebasm_srand( value ); |
| 2019 | + |
| 2020 | + if ( m_column < m_line.length() && m_line[ m_column ] == ',' ) |
| 2021 | + { |
| 2022 | + // Unexpected comma (remembering that an expression can validly end with a comma) |
| 2023 | + throw AsmException_SyntaxError_UnexpectedComma( m_line, m_column ); |
| 2024 | + } |
| 2025 | +} |
0 commit comments