public void Init(U8 bank, RAM remainder) { Bank = bank; ModuleMem = remainder; Ram = remainder?.Ram ?? NES.ram; Zp = remainder?.Zp ?? NES.zp; }
public Condition Equals(U8 v) { if (v != 0 || Flags.Zero.LastReg != this) { CPU6502.CPX(v); } return(Condition.EqualsZero); }
public Condition NotEquals(U8 v) { if (v != 0 || Flags.Zero.LastReg != this) { CMP(v); } return(Condition.NotEqualsZero); }
//private int _writeIndex = 0; public Bank(U8 id, int size, U16 origin, bool isFixed = false) { Id = id; Origin = origin; Fixed = isFixed; Rom = new byte[size != 0 ? size : 65536]; Size = size; for (var i = 0; i < size; i++) { Rom[i] = 0xFF; } }
public RegisterA Xor(U8 v) => A.Set(this).Xor(v);
public RegisterA And(U8 v) => A.Set(this).And(v);
public RegisterA Or(U8 v) => A.Set(this).Or(v);
public RegisterA STA(U8 o) => STA((IOperand)o);
public RegisterA Subtract(U8 v) => A.Set(this).Subtract(v);
public Condition GreaterThan(U8 v) => A.Set(this).GreaterThan(v);
public Condition LessThan(U8 v) => A.Set(this).LessThan(v);
public RegisterX Set(U8 v) => Set((IOperand)v);
public RegisterA ADC(U8 o) => ADC((IOperand)o);
public Condition LessThan(U8 v) => LessThan((IOperand)v);
//public Condition LessThanOrEqualTo(U8 v) => LessThanOrEqualTo((IOperand)v); public Condition LessThanOrEqualTo(U8 v) => LessThanOrEqualTo((IOperand)v);
public Condition GreaterThanOrEqualTo(U8 v) { CMP(v); return(Condition.IsGreaterThanOrEqualTo); }
public Condition GreaterThan(U8 v) { Temp[0].Set(A); A.Set(v).CMP(Temp[0]); return(Condition.IsGreaterThan); }
public RegisterA BIT(U8 o) => BIT((IOperand)o);
public Condition Equals(U8 v) => A.Set(this).Equals(v);
public VByte Set(U8 u8) => Set((IOperand)u8);
public Condition NotEquals(U8 v) => A.Set(this).NotEquals(v);
public static void SetPointer(U8 v) { //TODO: if x is preserved, throw an exception X.Set(v); CPU6502.TXS(); }
public Condition GreaterThanOrEqualTo(U8 v) => A.Set(this).GreaterThanOrEqualTo(v);
public RegisterA Xor(U8 o) => Xor((IOperand)o);
public Condition LessThanOrEqualTo(U8 v) => A.Set(this).LessThanOrEqualTo(v);
public RegisterA SBC(U8 o) => SBC((IOperand)o);
//TODO: maybe only allow VByte indexing if struct.length is a power of two? or just do the damn multiply /* * TODO: * * Indexing won't be useful with AOS. Instead, maybe there should be some iteration helpers: * * //Iterate(numTimes, bodyFunc) * aosInstance.Iterate(5, sObj => { * sObj.X.Set(5); * }); * //Iterate(numTimes, initFunc, incrementFunc, bodyFunc) * aosInstance.Iterate(5, Y.Set(5), () => Y.Increment(), sObj => { * sObj.X.Set(5); * }); * * Standalone Iterator class? * */ //struct gets copied and not referenced, so Indexes don't hang around public StructType this[U8 offset] => _makeCopy(_structs[offset], null);
public static ShiftRight ShiftRight(this IResolvable <Address> addr, U8 bits) => new ShiftRight(addr, bits);
public virtual Address Set(U8 v) { A.Set(v).STA(this); return(this); }
public ShiftRight(IResolvable <Address> addr, U8 shiftAmt) { _addr = addr; _shiftAmt = shiftAmt; }