1
0
mirror of https://github.com/t-edson/P65Utils.git synced 2024-06-16 17:29:40 +00:00

Compare commits

...

3 Commits

Author SHA1 Message Date
Tito Hinostroza
b2ceec7441
Add files via upload 2022-03-03 11:21:24 -05:00
Tito Hinostroza
e3cf9218c2
Add files via upload 2022-03-03 11:06:22 -05:00
Tito Hinostroza
8229c68cde
Add files via upload 2022-03-03 11:04:54 -05:00
6 changed files with 321 additions and 226 deletions

View File

@ -28,7 +28,7 @@ type
TCPURamUsed = ( TCPURamUsed = (
ruUnused, //(NOT included in PRG output file) ruUnused, //(NOT included in PRG output file)
ruCode, //Used for code (included in PRG output file) ruCode, //Used for code (included in PRG output file)
ruData, //Used for variables (included in PRG output file) ruData, //Used for variables (included in PRG output file)
ruAbsData //Used for variables in absolute positions (NOT included in PRG output file) ruAbsData //Used for variables in absolute positions (NOT included in PRG output file)
); );
@ -207,17 +207,17 @@ var
i: Integer; i: Integer;
begin begin
for i:=0 to high(ram) do begin for i:=0 to high(ram) do begin
ram[i].dvalue := $00; ram[i].dvalue := $00;
ram[i].used := ruUnused; ram[i].used := ruUnused;
ram[i].name :=''; ram[i].name :='';
ram[i].shared := false; ram[i].shared := false;
ram[i].breakPnt := false; ram[i].breakPnt := false;
ram[i].topLabel := ''; ram[i].topLabel := '';
ram[i].sideComment:= ''; ram[i].sideComment:= '';
ram[i].topComment:= ''; ram[i].topComment := '';
ram[i].idFile := -1; //Not initialized. ram[i].idFile := -1; //Not initialized.
{Don't change the implementation. Because "state" must be defined just once at the {Don't change the implementation. Because "state" must be defined just once at the
First Pass when processing $CLEAR_STATE_RAM and $SET_STATE_RAM } beginning }
// ram[i].state := cs_impleGPR; // ram[i].state := cs_impleGPR;
end; end;
end; end;

View File

@ -3,6 +3,8 @@
04/09/2020: Se mueve el método FindOpcode() fuera del objeto TP6502Instruct. 04/09/2020: Se mueve el método FindOpcode() fuera del objeto TP6502Instruct.
22/10/2020: Se agrega protección de dirección excesiva, a TCPUCore.addTopLabel(). 22/10/2020: Se agrega protección de dirección excesiva, a TCPUCore.addTopLabel().
23/10/2020: Se crea la bandera pic.disableCodegen. 23/10/2020: Se crea la bandera pic.disableCodegen.
03/03/2022: Se agrega TP6502Instruct.HasOpcode(), se corrige TP6502.Decode() y se
modifica el tipo optCycles en TP6502Instruct.AddAddressMode().
0.4 0.4

View File

@ -22,17 +22,16 @@
<ResourceBaseClass Value="Form"/> <ResourceBaseClass Value="Form"/>
<UnitName Value="Unit1"/> <UnitName Value="Unit1"/>
<IsVisibleTab Value="True"/> <IsVisibleTab Value="True"/>
<TopLine Value="114"/> <TopLine Value="141"/>
<CursorPos X="22" Y="129"/> <CursorPos Y="170"/>
<UsageCount Value="75"/> <UsageCount Value="75"/>
<Loaded Value="True"/> <Loaded Value="True"/>
<LoadedDesigner Value="True"/>
</Unit1> </Unit1>
<Unit2> <Unit2>
<Filename Value="..\P6502utils.pas"/> <Filename Value="..\P6502utils.pas"/>
<EditorIndex Value="1"/> <EditorIndex Value="1"/>
<TopLine Value="1018"/> <TopLine Value="1394"/>
<CursorPos X="20" Y="1060"/> <CursorPos X="26" Y="1411"/>
<UsageCount Value="38"/> <UsageCount Value="38"/>
<Bookmarks Count="1"> <Bookmarks Count="1">
<Item0 Y="1208" ID="1"/> <Item0 Y="1208" ID="1"/>
@ -42,8 +41,8 @@
<Unit3> <Unit3>
<Filename Value="..\CPUCore.pas"/> <Filename Value="..\CPUCore.pas"/>
<EditorIndex Value="2"/> <EditorIndex Value="2"/>
<TopLine Value="121"/> <TopLine Value="35"/>
<CursorPos X="6" Y="155"/> <CursorPos X="14" Y="53"/>
<UsageCount Value="31"/> <UsageCount Value="31"/>
<Bookmarks Count="1"> <Bookmarks Count="1">
<Item0 Y="117" ID="3"/> <Item0 Y="117" ID="3"/>
@ -58,7 +57,7 @@
<UsageCount Value="9"/> <UsageCount Value="9"/>
</Unit4> </Unit4>
</Units> </Units>
<JumpHistory Count="11" HistoryIndex="10"> <JumpHistory Count="29" HistoryIndex="27">
<Position1> <Position1>
<Filename Value="..\p6502utils.pas"/> <Filename Value="..\p6502utils.pas"/>
<Caret Line="1085" Column="49" TopLine="1064"/> <Caret Line="1085" Column="49" TopLine="1064"/>
@ -101,10 +100,93 @@
<Filename Value="..\P6502utils.pas"/> <Filename Value="..\P6502utils.pas"/>
<Caret Line="61" Column="10" TopLine="43"/> <Caret Line="61" Column="10" TopLine="43"/>
</Position11> </Position11>
<Position12>
<Filename Value="unit1.pas"/>
<Caret Line="130" Column="25" TopLine="114"/>
</Position12>
<Position13>
<Filename Value="unit1.pas"/>
<Caret Line="123" Column="17" TopLine="104"/>
</Position13>
<Position14>
<Filename Value="unit1.pas"/>
<Caret Line="23" Column="10" TopLine="4"/>
</Position14>
<Position15>
<Filename Value="unit1.pas"/>
<Caret Line="98" Column="10" TopLine="79"/>
</Position15>
<Position16>
<Filename Value="unit1.pas"/>
<Caret Line="123" Column="16" TopLine="104"/>
</Position16>
<Position17>
<Filename Value="..\P6502utils.pas"/>
<Caret Line="236" TopLine="214"/>
</Position17>
<Position18>
<Filename Value="..\P6502utils.pas"/>
<Caret Line="237" TopLine="214"/>
</Position18>
<Position19>
<Filename Value="..\P6502utils.pas"/>
<Caret Line="238" TopLine="214"/>
</Position19>
<Position20>
<Filename Value="..\P6502utils.pas"/>
<Caret Line="239" TopLine="214"/>
</Position20>
<Position21>
<Filename Value="..\P6502utils.pas"/>
<Caret Line="240" TopLine="214"/>
</Position21>
<Position22>
<Filename Value="..\P6502utils.pas"/>
<Caret Line="247" TopLine="217"/>
</Position22>
<Position23>
<Filename Value="unit1.pas"/>
<Caret Line="170" Column="44" TopLine="140"/>
</Position23>
<Position24>
<Filename Value="..\P6502utils.pas"/>
<Caret Line="255" Column="30" TopLine="235"/>
</Position24>
<Position25>
<Filename Value="..\P6502utils.pas"/>
<Caret Line="1445" Column="24" TopLine="1440"/>
</Position25>
<Position26>
<Filename Value="unit1.pas"/>
<Caret Line="171" Column="58" TopLine="141"/>
</Position26>
<Position27>
<Filename Value="unit1.pas"/>
<Caret Line="170" Column="10" TopLine="141"/>
</Position27>
<Position28>
<Filename Value="..\P6502utils.pas"/>
<Caret Line="1411" Column="26" TopLine="1382"/>
</Position28>
<Position29>
<Filename Value="..\CPUCore.pas"/>
<Caret Line="53" Column="14" TopLine="35"/>
</Position29>
</JumpHistory> </JumpHistory>
<RunParams> <RunParams>
<FormatVersion Value="2"/> <FormatVersion Value="2"/>
<Modes Count="0" ActiveMode="default"/> <Modes Count="0" ActiveMode="default"/>
</RunParams> </RunParams>
</ProjectSession> </ProjectSession>
<Debugging>
<BreakPoints Count="1">
<Item1>
<Kind Value="bpkSource"/>
<WatchScope Value="wpsLocal"/>
<WatchKind Value="wpkWrite"/>
<Source Value="..\P6502utils.pas"/>
<Line Value="1408"/>
</Item1>
</BreakPoints>
</Debugging>
</CONFIG> </CONFIG>

View File

@ -1,55 +1,61 @@
object Form1: TForm1 object Form1: TForm1
Left = 265 Left = 265
Height = 368 Height = 460
Top = 159 Top = 159
Width = 530 Width = 662
Caption = 'Form1' Caption = 'Form1'
ClientHeight = 368 ClientHeight = 460
ClientWidth = 530 ClientWidth = 662
DesignTimePPI = 120
OnCreate = FormCreate OnCreate = FormCreate
OnDestroy = FormDestroy OnDestroy = FormDestroy
LCLVersion = '2.0.4.0' LCLVersion = '2.0.12.0'
object Memo1: TMemo object Memo1: TMemo
Left = 10 Left = 12
Height = 312 Height = 390
Top = 40 Top = 50
Width = 190 Width = 238
Lines.Strings = ( Lines.Strings = (
'LDA' 'LDA'
'STA $10' 'STA $10'
) )
ParentFont = False
TabOrder = 0 TabOrder = 0
end end
object Button1: TButton object Button1: TButton
Left = 216 Left = 270
Height = 25 Height = 31
Top = 40 Top = 50
Width = 88 Width = 110
Caption = 'Assemble>>' Caption = 'Assemble>>'
OnClick = Button1Click OnClick = Button1Click
ParentFont = False
TabOrder = 1 TabOrder = 1
end end
object Memo2: TMemo object Memo2: TMemo
Left = 320 Left = 400
Height = 312 Height = 390
Top = 40 Top = 50
Width = 190 Width = 238
ParentFont = False
TabOrder = 2 TabOrder = 2
end end
object Label1: TLabel object Label1: TLabel
Left = 10 Left = 12
Height = 15 Height = 20
Top = 10 Top = 12
Width = 31 Width = 39
Caption = 'CODE' Caption = 'CODE'
ParentColor = False ParentColor = False
ParentFont = False
end end
object Label2: TLabel object Label2: TLabel
Left = 328 Left = 410
Height = 15 Height = 20
Top = 10 Top = 12
Width = 46 Width = 58
Caption = 'HEX FILE' Caption = 'HEX FILE'
ParentColor = False ParentColor = False
ParentFont = False
end end
end end

View File

@ -120,8 +120,7 @@ begin
exit; exit;
end; end;
//Find mnemonic, and parameters //Find mnemonic, and parameters
idInst := pic.FindOpcode(Inst); if not FindOpcode(Inst, idInst) then begin
if idInst = i_Inval then begin
Application.MessageBox(PChar('Invalid Opcode: '+ Inst),''); Application.MessageBox(PChar('Invalid Opcode: '+ Inst),'');
exit; exit;
end; end;
@ -169,7 +168,7 @@ begin
end; end;
end; end;
pic.GenHex(Application.ExeName + '.hex'); pic.GenHex(Application.ExeName + '.hex');
Memo2.Lines.LoadFromFile(Application.ExeName + '.hex'); Memo2.Lines.LoadFromFile(Application.ExeName + '.hex'); //*** This is binary. Show nothing.
end; end;
procedure TForm1.FormCreate(Sender: TObject); procedure TForm1.FormCreate(Sender: TObject);

View File

@ -99,16 +99,19 @@ type //Instructions set
TP6502AddModes = set of TP6502AddMode; TP6502AddModes = set of TP6502AddMode;
//Instruction Information for each Address Mode //Instruction Information for each Address Mode
TInstructInform = record TInstructInform = record
Opcode: byte; //Code for instruction Opcode : byte; //Code for instruction
nBytes: byte; //Num. of bytes of the instruction. nBytes : byte; //Num. of bytes of the instruction.
Cycles: byte; //Num. of cycles the instruction takes. Cycles : byte; //Num. of cycles the instruction takes.
optCycles: string; //Extra options in Num. of cycles. optCycles: byte; {Extra options in Num. of cycles:
0 -> No aditional cycles.
1 -> Add 1 to cycles if page boundery is crossed
2 -> Add 1 to cycles if branch occurs on same page.
Add 2 to cycles if branch occurs to different page.
}
end; end;
//Record for a 6502 instruction
{ TP6502Instruct } { TP6502Instruct }
//Record for a 6502 instruction
TP6502Instruct = object TP6502Instruct = object
public public
//Name of the instruction //Name of the instruction
@ -120,7 +123,8 @@ type //Instructions set
public public
procedure Init(name0: string); procedure Init(name0: string);
procedure AddAddressMode(aMode: TP6502AddMode; Opcode, nBytes, nCycles: Byte; procedure AddAddressMode(aMode: TP6502AddMode; Opcode, nBytes, nCycles: Byte;
optCycles: string); optCycles: byte);
function HasOpcode(opc: byte; out adMod: TP6502AddMode): boolean;
end; end;
const //Constants of address and bit positions for some registers const //Constants of address and bit positions for some registers
@ -214,7 +218,7 @@ type
end; end;
var //Global variables var //Global variables
//mnemónico de las instrucciones //Instruction mnemonics.
PIC16InstName: array[low(TP6502Inst)..high(TP6502Inst)] of TP6502Instruct; PIC16InstName: array[low(TP6502Inst)..high(TP6502Inst)] of TP6502Instruct;
@ -252,14 +256,13 @@ begin
end; end;
procedure TP6502Instruct.AddAddressMode(aMode: TP6502AddMode; procedure TP6502Instruct.AddAddressMode(aMode: TP6502AddMode;
Opcode, nBytes, nCycles: Byte; Opcode, nBytes, nCycles: Byte;
optCycles: string); optCycles: byte);
{Add a new Address Mode including additional information. {Add a new Address Mode including additional information.
"optCycles" is a flag and indicate aditional considerations on cycles: "optCycles" is a flag and indicate aditional considerations on cycles:
0 -> No aditional considerations.
'*' -> Add 1 to cycles if page boundery is crossed 1 -> Add 1 to cycles if page boundery is crossed
2 -> Add 1 to cycles if branch occurs on same page.
'**' -> Add 1 to cycles if branch occurs on same page Add 2 to cycles if branch occurs to different page.
Add 2 to cycles if branch occurs to different page
} }
begin begin
addressModes := addressModes + [aMode]; //Register Mode addressModes := addressModes + [aMode]; //Register Mode
@ -269,7 +272,16 @@ begin
instrInform[aMode].Cycles:= nCycles; instrInform[aMode].Cycles:= nCycles;
instrInform[aMode].optCycles := optCycles; instrInform[aMode].optCycles := optCycles;
end; end;
function TP6502Instruct.HasOpcode(opc: byte; out adMod: TP6502AddMode
): boolean;
{Indicates if the Opcode "opc" exits in this instruction. If so, returns TRUE and
the address mode in "adMod".}
begin
for adMod in addressModes do begin //Test for all Address modes supported.
if instrInform[adMod].Opcode = opc then exit(true);
end;
exit(false);
end;
{ TP6502 } { TP6502 }
procedure TP6502.useRAMCode; procedure TP6502.useRAMCode;
{Set current position as used and increase the index iRam. If error;update "MsjError"} {Set current position as used and increase the index iRam. If error;update "MsjError"}
@ -507,20 +519,12 @@ If not found, returns "i_Inval" in "idIns".
} }
var var
i : TP6502Inst; i : TP6502Inst;
j : TP6502AddMode;
inst: TP6502Instruct;
iInfom: TInstructInform;
begin begin
//Search the Opcode //Search the Opcode
for i := low(TP6502Inst) to high(TP6502Inst) do begin for i := low(TP6502Inst) to high(TP6502Inst) do begin
inst := PIC16InstName[i]; if PIC16InstName[i].HasOpcode(opCode, modIns) then begin
for j := low(TP6502AddMode) to high(TP6502AddMode) do begin idIns := i;
iInfom := inst.instrInform[j]; exit;
if iInfom.Opcode = opCode then begin
idIns := i;
modIns := j;
exit;
end;
end; end;
end; end;
//Not found //Not found
@ -1427,221 +1431,223 @@ begin
inherited Destroy; inherited Destroy;
end; end;
procedure InitTables; procedure InitTables;
var
i : TP6502Inst;
j : TP6502AddMode;
begin begin
/////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////
////////////////// Set instructions information /////////////////// ////////////////// Set instructions information ///////////////////
// Based on the information from: // Based on the information from:
// http://www.masswerk.at/6502/6502_instruction_set.html // http://www.masswerk.at/6502/6502_instruction_set.html
/////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////
//////////////////////////////
////////////////////////////// ADC ////////////////////////////////
PIC16InstName[i_ADC].name := 'ADC'; //Add Memory to Accumulator with Carry PIC16InstName[i_ADC].name := 'ADC'; //Add Memory to Accumulator with Carry
PIC16InstName[i_ADC].AddAddressMode(aImmediat,$69,2,2,''); PIC16InstName[i_ADC].AddAddressMode(aImmediat,$69,2,2,0);
PIC16InstName[i_ADC].AddAddressMode(aZeroPage,$65,2,3,''); PIC16InstName[i_ADC].AddAddressMode(aZeroPage,$65,2,3,0);
PIC16InstName[i_ADC].AddAddressMode(aZeroPagX,$75,2,4,''); PIC16InstName[i_ADC].AddAddressMode(aZeroPagX,$75,2,4,0);
PIC16InstName[i_ADC].AddAddressMode(aAbsolute,$6D,3,4,''); PIC16InstName[i_ADC].AddAddressMode(aAbsolute,$6D,3,4,0);
PIC16InstName[i_ADC].AddAddressMode(aAbsolutX,$7D,3,4,'*'); PIC16InstName[i_ADC].AddAddressMode(aAbsolutX,$7D,3,4,1);
PIC16InstName[i_ADC].AddAddressMode(aAbsolutY,$79,3,4,'*'); PIC16InstName[i_ADC].AddAddressMode(aAbsolutY,$79,3,4,1);
PIC16InstName[i_ADC].AddAddressMode(aIndirecX,$61,2,6,''); PIC16InstName[i_ADC].AddAddressMode(aIndirecX,$61,2,6,0);
PIC16InstName[i_ADC].AddAddressMode(aIndirecY,$71,2,5,'*'); PIC16InstName[i_ADC].AddAddressMode(aIndirecY,$71,2,5,1);
PIC16InstName[i_AND].name := 'AND'; //AND Memory with Accumulator PIC16InstName[i_AND].name := 'AND'; //AND Memory with Accumulator
PIC16InstName[i_AND].AddAddressMode(aImmediat,$29,2,2,''); PIC16InstName[i_AND].AddAddressMode(aImmediat,$29,2,2,0);
PIC16InstName[i_AND].AddAddressMode(aZeroPage,$25,2,3,''); PIC16InstName[i_AND].AddAddressMode(aZeroPage,$25,2,3,0);
PIC16InstName[i_AND].AddAddressMode(aZeroPagX,$35,2,4,''); PIC16InstName[i_AND].AddAddressMode(aZeroPagX,$35,2,4,0);
PIC16InstName[i_AND].AddAddressMode(aAbsolute,$2D,3,4,''); PIC16InstName[i_AND].AddAddressMode(aAbsolute,$2D,3,4,0);
PIC16InstName[i_AND].AddAddressMode(aAbsolutX,$3D,3,4,'*'); PIC16InstName[i_AND].AddAddressMode(aAbsolutX,$3D,3,4,1);
PIC16InstName[i_AND].AddAddressMode(aAbsolutY,$39,3,4,'*'); PIC16InstName[i_AND].AddAddressMode(aAbsolutY,$39,3,4,1);
PIC16InstName[i_AND].AddAddressMode(aIndirecX,$21,2,6,''); PIC16InstName[i_AND].AddAddressMode(aIndirecX,$21,2,6,0);
PIC16InstName[i_AND].AddAddressMode(aIndirecY,$31,2,5,'*'); PIC16InstName[i_AND].AddAddressMode(aIndirecY,$31,2,5,1);
PIC16InstName[i_ASL].name := 'ASL'; //Shift Left One Bit (MemoryorAccumulator) PIC16InstName[i_ASL].name := 'ASL'; //Shift Left One Bit (MemoryorAccumulator)
PIC16InstName[i_ASL].AddAddressMode(aAcumulat,$0A,1,2,''); PIC16InstName[i_ASL].AddAddressMode(aAcumulat,$0A,1,2,0);
PIC16InstName[i_ASL].AddAddressMode(aZeroPage,$06,2,5,''); PIC16InstName[i_ASL].AddAddressMode(aZeroPage,$06,2,5,0);
PIC16InstName[i_ASL].AddAddressMode(aZeroPagX,$16,2,6,''); PIC16InstName[i_ASL].AddAddressMode(aZeroPagX,$16,2,6,0);
PIC16InstName[i_ASL].AddAddressMode(aAbsolute,$0E,3,6,''); PIC16InstName[i_ASL].AddAddressMode(aAbsolute,$0E,3,6,0);
PIC16InstName[i_ASL].AddAddressMode(aAbsolutX,$1E,3,7,''); PIC16InstName[i_ASL].AddAddressMode(aAbsolutX,$1E,3,7,0);
PIC16InstName[i_BCC].name := 'BCC'; //Branch on Carry Clear PIC16InstName[i_BCC].name := 'BCC'; //Branch on Carry Clear
PIC16InstName[i_BCC].AddAddressMode(aRelative,$90,2,2,'**'); PIC16InstName[i_BCC].AddAddressMode(aRelative,$90,2,2,2);
PIC16InstName[i_BCS].name := 'BCS'; //Branch on Carry Set PIC16InstName[i_BCS].name := 'BCS'; //Branch on Carry Set
PIC16InstName[i_BCS].AddAddressMode(aRelative,$B0,2,2,'**'); PIC16InstName[i_BCS].AddAddressMode(aRelative,$B0,2,2,2);
PIC16InstName[i_BEQ].name := 'BEQ'; //Branch on Result Zero PIC16InstName[i_BEQ].name := 'BEQ'; //Branch on Result Zero
PIC16InstName[i_BEQ].AddAddressMode(aRelative,$F0,2,2,'**'); PIC16InstName[i_BEQ].AddAddressMode(aRelative,$F0,2,2,2);
PIC16InstName[i_BIT].name := 'BIT'; //Test Bits in Memory with Accumulator PIC16InstName[i_BIT].name := 'BIT'; //Test Bits in Memory with Accumulator
PIC16InstName[i_BIT].AddAddressMode(aZeroPage,$24,2,3,''); PIC16InstName[i_BIT].AddAddressMode(aZeroPage,$24,2,3,0);
PIC16InstName[i_BIT].AddAddressMode(aAbsolute,$2C,3,4,''); PIC16InstName[i_BIT].AddAddressMode(aAbsolute,$2C,3,4,0);
PIC16InstName[i_BMI].name := 'BMI'; //Branch on Result Minus PIC16InstName[i_BMI].name := 'BMI'; //Branch on Result Minus
PIC16InstName[i_BMI].AddAddressMode(aRelative,$30,2,2,'**'); PIC16InstName[i_BMI].AddAddressMode(aRelative,$30,2,2,2);
PIC16InstName[i_BNE].name := 'BNE'; //Branch on Result not Zero PIC16InstName[i_BNE].name := 'BNE'; //Branch on Result not Zero
PIC16InstName[i_BNE].AddAddressMode(aRelative,$D0,2,2,'**'); PIC16InstName[i_BNE].AddAddressMode(aRelative,$D0,2,2,2);
PIC16InstName[i_BPL].name := 'BPL'; //Branch on Result Plus PIC16InstName[i_BPL].name := 'BPL'; //Branch on Result Plus
PIC16InstName[i_BPL].AddAddressMode(aRelative,$10,2,2,'**'); PIC16InstName[i_BPL].AddAddressMode(aRelative,$10,2,2,2);
PIC16InstName[i_BRK].name := 'BRK'; //Force Break PIC16InstName[i_BRK].name := 'BRK'; //Force Break
PIC16InstName[i_BRK].AddAddressMode(aImplicit,$00,1,7,''); PIC16InstName[i_BRK].AddAddressMode(aImplicit,$00,1,7,0);
PIC16InstName[i_BVC].name := 'BVC'; //Branch on Overflow Clear PIC16InstName[i_BVC].name := 'BVC'; //Branch on Overflow Clear
PIC16InstName[i_BVC].AddAddressMode(aRelative,$50,2,2,'**'); PIC16InstName[i_BVC].AddAddressMode(aRelative,$50,2,2,2);
PIC16InstName[i_BVS].name := 'BVS'; //Branch on Overflow Set PIC16InstName[i_BVS].name := 'BVS'; //Branch on Overflow Set
PIC16InstName[i_BVS].AddAddressMode(aRelative,$70,2,2,'**'); PIC16InstName[i_BVS].AddAddressMode(aRelative,$70,2,2,2);
PIC16InstName[i_CLC].name := 'CLC'; //Clear Carry Flag PIC16InstName[i_CLC].name := 'CLC'; //Clear Carry Flag
PIC16InstName[i_CLC].AddAddressMode(aImplicit,$18,1,2,''); PIC16InstName[i_CLC].AddAddressMode(aImplicit,$18,1,2,0);
PIC16InstName[i_CLD].name := 'CLD'; //Clear Decimal Mode PIC16InstName[i_CLD].name := 'CLD'; //Clear Decimal Mode
PIC16InstName[i_CLD].AddAddressMode(aImplicit,$D8,1,2,''); PIC16InstName[i_CLD].AddAddressMode(aImplicit,$D8,1,2,0);
PIC16InstName[i_CLI].name := 'CLI'; //Clear Interrupt Disable Bit PIC16InstName[i_CLI].name := 'CLI'; //Clear Interrupt Disable Bit
PIC16InstName[i_CLI].AddAddressMode(aImplicit,$58,1,2,''); PIC16InstName[i_CLI].AddAddressMode(aImplicit,$58,1,2,0);
PIC16InstName[i_CLV].name := 'CLV'; //Clear Overflow Flag PIC16InstName[i_CLV].name := 'CLV'; //Clear Overflow Flag
PIC16InstName[i_CLV].AddAddressMode(aImplicit,$B8,1,2,''); PIC16InstName[i_CLV].AddAddressMode(aImplicit,$B8,1,2,0);
PIC16InstName[i_CMP].name := 'CMP'; //Compare Memory with Accumulator PIC16InstName[i_CMP].name := 'CMP'; //Compare Memory with Accumulator
PIC16InstName[i_CMP].AddAddressMode(aImmediat,$C9,2,2,''); PIC16InstName[i_CMP].AddAddressMode(aImmediat,$C9,2,2,0);
PIC16InstName[i_CMP].AddAddressMode(aZeroPage,$C5,2,3,''); PIC16InstName[i_CMP].AddAddressMode(aZeroPage,$C5,2,3,0);
PIC16InstName[i_CMP].AddAddressMode(aZeroPagX,$D5,2,4,''); PIC16InstName[i_CMP].AddAddressMode(aZeroPagX,$D5,2,4,0);
PIC16InstName[i_CMP].AddAddressMode(aAbsolute,$CD,3,4,''); PIC16InstName[i_CMP].AddAddressMode(aAbsolute,$CD,3,4,0);
PIC16InstName[i_CMP].AddAddressMode(aAbsolutX,$DD,3,4,'*'); PIC16InstName[i_CMP].AddAddressMode(aAbsolutX,$DD,3,4,1);
PIC16InstName[i_CMP].AddAddressMode(aAbsolutY,$D9,3,4,'*'); PIC16InstName[i_CMP].AddAddressMode(aAbsolutY,$D9,3,4,1);
PIC16InstName[i_CMP].AddAddressMode(aIndirecX,$C1,2,6,''); PIC16InstName[i_CMP].AddAddressMode(aIndirecX,$C1,2,6,0);
PIC16InstName[i_CMP].AddAddressMode(aIndirecY,$D1,2,5,'*'); PIC16InstName[i_CMP].AddAddressMode(aIndirecY,$D1,2,5,1);
PIC16InstName[i_CPX].name := 'CPX'; //Compare Memory and Index X PIC16InstName[i_CPX].name := 'CPX'; //Compare Memory and Index X
PIC16InstName[i_CPX].AddAddressMode(aImmediat,$E0,2,2,''); PIC16InstName[i_CPX].AddAddressMode(aImmediat,$E0,2,2,0);
PIC16InstName[i_CPX].AddAddressMode(aZeroPage,$E4,2,3,''); PIC16InstName[i_CPX].AddAddressMode(aZeroPage,$E4,2,3,0);
PIC16InstName[i_CPX].AddAddressMode(aAbsolute,$EC,3,4,''); PIC16InstName[i_CPX].AddAddressMode(aAbsolute,$EC,3,4,0);
PIC16InstName[i_CPY].name := 'CPY'; //Compare Memory and Index Y PIC16InstName[i_CPY].name := 'CPY'; //Compare Memory and Index Y
PIC16InstName[i_CPY].AddAddressMode(aImmediat,$C0,2,2,''); PIC16InstName[i_CPY].AddAddressMode(aImmediat,$C0,2,2,0);
PIC16InstName[i_CPY].AddAddressMode(aZeroPage,$C4,2,3,''); PIC16InstName[i_CPY].AddAddressMode(aZeroPage,$C4,2,3,0);
PIC16InstName[i_CPY].AddAddressMode(aAbsolute,$CC,3,4,''); PIC16InstName[i_CPY].AddAddressMode(aAbsolute,$CC,3,4,0);
PIC16InstName[i_DEC].name := 'DEC'; //Decrement Memory by One PIC16InstName[i_DEC].name := 'DEC'; //Decrement Memory by One
PIC16InstName[i_DEC].AddAddressMode(aZeroPage,$C6,2,5,''); PIC16InstName[i_DEC].AddAddressMode(aZeroPage,$C6,2,5,0);
PIC16InstName[i_DEC].AddAddressMode(aZeroPagX,$D6,2,6,''); PIC16InstName[i_DEC].AddAddressMode(aZeroPagX,$D6,2,6,0);
PIC16InstName[i_DEC].AddAddressMode(aAbsolute,$CE,3,3,''); PIC16InstName[i_DEC].AddAddressMode(aAbsolute,$CE,3,3,0);
PIC16InstName[i_DEC].AddAddressMode(aAbsolutX,$DE,3,7,''); PIC16InstName[i_DEC].AddAddressMode(aAbsolutX,$DE,3,7,0);
PIC16InstName[i_DEX].name := 'DEX'; //Decrement Index X by One PIC16InstName[i_DEX].name := 'DEX'; //Decrement Index X by One
PIC16InstName[i_DEX].AddAddressMode(aImplicit,$CA,1,2,''); PIC16InstName[i_DEX].AddAddressMode(aImplicit,$CA,1,2,0);
PIC16InstName[i_DEY].name := 'DEY'; //Decrement Index Y by One PIC16InstName[i_DEY].name := 'DEY'; //Decrement Index Y by One
PIC16InstName[i_DEY].AddAddressMode(aImplicit,$88,1,2,''); PIC16InstName[i_DEY].AddAddressMode(aImplicit,$88,1,2,0);
PIC16InstName[i_EOR].name := 'EOR'; //Exclusive-OR Memory with Accumulator PIC16InstName[i_EOR].name := 'EOR'; //Exclusive-OR Memory with Accumulator
PIC16InstName[i_EOR].AddAddressMode(aImmediat,$49,2,2,''); PIC16InstName[i_EOR].AddAddressMode(aImmediat,$49,2,2,0);
PIC16InstName[i_EOR].AddAddressMode(aZeroPage,$45,2,3,''); PIC16InstName[i_EOR].AddAddressMode(aZeroPage,$45,2,3,0);
PIC16InstName[i_EOR].AddAddressMode(aZeroPagX,$55,2,4,''); PIC16InstName[i_EOR].AddAddressMode(aZeroPagX,$55,2,4,0);
PIC16InstName[i_EOR].AddAddressMode(aAbsolute,$4D,3,4,''); PIC16InstName[i_EOR].AddAddressMode(aAbsolute,$4D,3,4,0);
PIC16InstName[i_EOR].AddAddressMode(aAbsolutX,$5D,3,4,'*'); PIC16InstName[i_EOR].AddAddressMode(aAbsolutX,$5D,3,4,1);
PIC16InstName[i_EOR].AddAddressMode(aAbsolutY,$59,3,4,'*'); PIC16InstName[i_EOR].AddAddressMode(aAbsolutY,$59,3,4,1);
PIC16InstName[i_EOR].AddAddressMode(aIndirecX,$41,2,6,''); PIC16InstName[i_EOR].AddAddressMode(aIndirecX,$41,2,6,0);
PIC16InstName[i_EOR].AddAddressMode(aIndirecY,$51,2,5,'*'); PIC16InstName[i_EOR].AddAddressMode(aIndirecY,$51,2,5,1);
PIC16InstName[i_INC].name := 'INC'; //Increment Memory by One PIC16InstName[i_INC].name := 'INC'; //Increment Memory by One
PIC16InstName[i_INC].AddAddressMode(aZeroPage,$E6,2,5,''); PIC16InstName[i_INC].AddAddressMode(aZeroPage,$E6,2,5,0);
PIC16InstName[i_INC].AddAddressMode(aZeroPagX,$F6,2,6,''); PIC16InstName[i_INC].AddAddressMode(aZeroPagX,$F6,2,6,0);
PIC16InstName[i_INC].AddAddressMode(aAbsolute,$EE,3,6,''); PIC16InstName[i_INC].AddAddressMode(aAbsolute,$EE,3,6,0);
PIC16InstName[i_INC].AddAddressMode(aAbsolutX,$FE,3,7,''); PIC16InstName[i_INC].AddAddressMode(aAbsolutX,$FE,3,7,0);
PIC16InstName[i_INX].name := 'INX'; //Increment Index X by One PIC16InstName[i_INX].name := 'INX'; //Increment Index X by One
PIC16InstName[i_INX].AddAddressMode(aImplicit,$E8,1,2,''); PIC16InstName[i_INX].AddAddressMode(aImplicit,$E8,1,2,0);
PIC16InstName[i_INY].name := 'INY'; //Increment Index Y by One PIC16InstName[i_INY].name := 'INY'; //Increment Index Y by One
PIC16InstName[i_INY].AddAddressMode(aImplicit,$C8,1,2,''); PIC16InstName[i_INY].AddAddressMode(aImplicit,$C8,1,2,0);
PIC16InstName[i_JMP].name := 'JMP'; //Jump to New Location PIC16InstName[i_JMP].name := 'JMP'; //Jump to New Location
PIC16InstName[i_JMP].AddAddressMode(aAbsolute,$4C,3,3,''); PIC16InstName[i_JMP].AddAddressMode(aAbsolute,$4C,3,3,0);
PIC16InstName[i_JMP].AddAddressMode(aIndirect,$6C,3,5,''); PIC16InstName[i_JMP].AddAddressMode(aIndirect,$6C,3,5,0);
PIC16InstName[i_JSR].name := 'JSR'; //Jump to New Location Saving Return Address PIC16InstName[i_JSR].name := 'JSR'; //Jump to New Location Saving Return Address
PIC16InstName[i_JSR].AddAddressMode(aAbsolute,$20,3,6,''); PIC16InstName[i_JSR].AddAddressMode(aAbsolute,$20,3,6,0);
PIC16InstName[i_LDA].name := 'LDA'; //Load Accumulator with Memory PIC16InstName[i_LDA].name := 'LDA'; //Load Accumulator with Memory
PIC16InstName[i_LDA].AddAddressMode(aImmediat,$A9,2,2,''); PIC16InstName[i_LDA].AddAddressMode(aImmediat,$A9,2,2,0);
PIC16InstName[i_LDA].AddAddressMode(aZeroPage,$A5,2,3,''); PIC16InstName[i_LDA].AddAddressMode(aZeroPage,$A5,2,3,0);
PIC16InstName[i_LDA].AddAddressMode(aZeroPagX,$B5,2,4,''); PIC16InstName[i_LDA].AddAddressMode(aZeroPagX,$B5,2,4,0);
PIC16InstName[i_LDA].AddAddressMode(aAbsolute,$AD,3,4,''); PIC16InstName[i_LDA].AddAddressMode(aAbsolute,$AD,3,4,0);
PIC16InstName[i_LDA].AddAddressMode(aAbsolutX,$BD,3,4,'*'); PIC16InstName[i_LDA].AddAddressMode(aAbsolutX,$BD,3,4,1);
PIC16InstName[i_LDA].AddAddressMode(aAbsolutY,$B9,3,4,'*'); PIC16InstName[i_LDA].AddAddressMode(aAbsolutY,$B9,3,4,1);
PIC16InstName[i_LDA].AddAddressMode(aIndirecX,$A1,2,6,''); PIC16InstName[i_LDA].AddAddressMode(aIndirecX,$A1,2,6,0);
PIC16InstName[i_LDA].AddAddressMode(aIndirecY,$B1,2,5,'*'); PIC16InstName[i_LDA].AddAddressMode(aIndirecY,$B1,2,5,1);
PIC16InstName[i_LDX].name := 'LDX'; //Load Index X with Memory PIC16InstName[i_LDX].name := 'LDX'; //Load Index X with Memory
PIC16InstName[i_LDX].AddAddressMode(aImmediat,$A2,2,2,''); PIC16InstName[i_LDX].AddAddressMode(aImmediat,$A2,2,2,0);
PIC16InstName[i_LDX].AddAddressMode(aZeroPage,$A6,2,3,''); PIC16InstName[i_LDX].AddAddressMode(aZeroPage,$A6,2,3,0);
PIC16InstName[i_LDX].AddAddressMode(aZeroPagY,$B6,2,4,''); PIC16InstName[i_LDX].AddAddressMode(aZeroPagY,$B6,2,4,0);
PIC16InstName[i_LDX].AddAddressMode(aAbsolute,$AE,3,4,''); PIC16InstName[i_LDX].AddAddressMode(aAbsolute,$AE,3,4,0);
PIC16InstName[i_LDX].AddAddressMode(aAbsolutY,$BE,3,4,'*'); PIC16InstName[i_LDX].AddAddressMode(aAbsolutY,$BE,3,4,1);
PIC16InstName[i_LDY].name := 'LDY'; //Load Index Y with Memory PIC16InstName[i_LDY].name := 'LDY'; //Load Index Y with Memory
PIC16InstName[i_LDY].AddAddressMode(aImmediat,$A0,2,2,''); PIC16InstName[i_LDY].AddAddressMode(aImmediat,$A0,2,2,0);
PIC16InstName[i_LDY].AddAddressMode(aZeroPage,$A4,2,3,''); PIC16InstName[i_LDY].AddAddressMode(aZeroPage,$A4,2,3,0);
PIC16InstName[i_LDY].AddAddressMode(aZeroPagX,$B4,2,4,''); PIC16InstName[i_LDY].AddAddressMode(aZeroPagX,$B4,2,4,0);
PIC16InstName[i_LDY].AddAddressMode(aAbsolute,$AC,3,4,''); PIC16InstName[i_LDY].AddAddressMode(aAbsolute,$AC,3,4,0);
PIC16InstName[i_LDY].AddAddressMode(aAbsolutX,$BC,3,4,'*'); PIC16InstName[i_LDY].AddAddressMode(aAbsolutX,$BC,3,4,1);
PIC16InstName[i_LSR].name := 'LSR'; //Shift One Bit Right (Memory orAccumulator) PIC16InstName[i_LSR].name := 'LSR'; //Shift One Bit Right (Memory orAccumulator)
PIC16InstName[i_LSR].AddAddressMode(aAcumulat,$4A,1,2,''); PIC16InstName[i_LSR].AddAddressMode(aAcumulat,$4A,1,2,0);
PIC16InstName[i_LSR].AddAddressMode(aZeroPage,$46,2,5,''); PIC16InstName[i_LSR].AddAddressMode(aZeroPage,$46,2,5,0);
PIC16InstName[i_LSR].AddAddressMode(aZeroPagX,$56,2,6,''); PIC16InstName[i_LSR].AddAddressMode(aZeroPagX,$56,2,6,0);
PIC16InstName[i_LSR].AddAddressMode(aAbsolute,$4E,3,6,''); PIC16InstName[i_LSR].AddAddressMode(aAbsolute,$4E,3,6,0);
PIC16InstName[i_LSR].AddAddressMode(aAbsolutX,$5E,3,7,''); PIC16InstName[i_LSR].AddAddressMode(aAbsolutX,$5E,3,7,0);
PIC16InstName[i_NOP].name := 'NOP'; //No Operation PIC16InstName[i_NOP].name := 'NOP'; //No Operation
PIC16InstName[i_NOP].AddAddressMode(aImplicit,$EA,1,2,''); PIC16InstName[i_NOP].AddAddressMode(aImplicit,$EA,1,2,0);
PIC16InstName[i_ORA].name := 'ORA'; //OR Memory with Accumulator PIC16InstName[i_ORA].name := 'ORA'; //OR Memory with Accumulator
PIC16InstName[i_ORA].AddAddressMode(aImmediat,$09,2,2,''); PIC16InstName[i_ORA].AddAddressMode(aImmediat,$09,2,2,0);
PIC16InstName[i_ORA].AddAddressMode(aZeroPage,$05,2,3,''); PIC16InstName[i_ORA].AddAddressMode(aZeroPage,$05,2,3,0);
PIC16InstName[i_ORA].AddAddressMode(aZeroPagX,$15,2,4,''); PIC16InstName[i_ORA].AddAddressMode(aZeroPagX,$15,2,4,0);
PIC16InstName[i_ORA].AddAddressMode(aAbsolute,$0D,3,4,''); PIC16InstName[i_ORA].AddAddressMode(aAbsolute,$0D,3,4,0);
PIC16InstName[i_ORA].AddAddressMode(aAbsolutX,$1D,3,4,'*'); PIC16InstName[i_ORA].AddAddressMode(aAbsolutX,$1D,3,4,1);
PIC16InstName[i_ORA].AddAddressMode(aAbsolutY,$19,3,4,'*'); PIC16InstName[i_ORA].AddAddressMode(aAbsolutY,$19,3,4,1);
PIC16InstName[i_ORA].AddAddressMode(aIndirecX,$01,2,6,''); PIC16InstName[i_ORA].AddAddressMode(aIndirecX,$01,2,6,0);
PIC16InstName[i_ORA].AddAddressMode(aIndirecY,$11,2,5,'*'); PIC16InstName[i_ORA].AddAddressMode(aIndirecY,$11,2,5,1);
PIC16InstName[i_PHA].name := 'PHA'; //Push Accumulator on Stack PIC16InstName[i_PHA].name := 'PHA'; //Push Accumulator on Stack
PIC16InstName[i_PHA].AddAddressMode(aImplicit,$48,1,3,''); PIC16InstName[i_PHA].AddAddressMode(aImplicit,$48,1,3,0);
PIC16InstName[i_PHP].name := 'PHP'; //Push Processor Status on Stack PIC16InstName[i_PHP].name := 'PHP'; //Push Processor Status on Stack
PIC16InstName[i_PHP].AddAddressMode(aImplicit,$08,1,3,''); PIC16InstName[i_PHP].AddAddressMode(aImplicit,$08,1,3,0);
PIC16InstName[i_PLA].name := 'PLA'; //Pull Accumulator from Stack PIC16InstName[i_PLA].name := 'PLA'; //Pull Accumulator from Stack
PIC16InstName[i_PLA].AddAddressMode(aImplicit,$68,1,4,''); PIC16InstName[i_PLA].AddAddressMode(aImplicit,$68,1,4,0);
PIC16InstName[i_PLP].name := 'PLP'; //Pull Processor Status fromStack PIC16InstName[i_PLP].name := 'PLP'; //Pull Processor Status fromStack
PIC16InstName[i_PLP].AddAddressMode(aImplicit,$28,1,4,''); PIC16InstName[i_PLP].AddAddressMode(aImplicit,$28,1,4,0);
PIC16InstName[i_ROL].name := 'ROL'; //Rotate One Bit Left (Memory orAccumulator) PIC16InstName[i_ROL].name := 'ROL'; //Rotate One Bit Left (Memory orAccumulator)
PIC16InstName[i_ROL].AddAddressMode(aAcumulat,$2A,1,2,''); PIC16InstName[i_ROL].AddAddressMode(aAcumulat,$2A,1,2,0);
PIC16InstName[i_ROL].AddAddressMode(aZeroPage,$26,2,5,''); PIC16InstName[i_ROL].AddAddressMode(aZeroPage,$26,2,5,0);
PIC16InstName[i_ROL].AddAddressMode(aZeroPagX,$36,2,6,''); PIC16InstName[i_ROL].AddAddressMode(aZeroPagX,$36,2,6,0);
PIC16InstName[i_ROL].AddAddressMode(aAbsolute,$2E,3,6,''); PIC16InstName[i_ROL].AddAddressMode(aAbsolute,$2E,3,6,0);
PIC16InstName[i_ROL].AddAddressMode(aAbsolutX,$3E,3,7,''); PIC16InstName[i_ROL].AddAddressMode(aAbsolutX,$3E,3,7,0);
PIC16InstName[i_ROR].name := 'ROR'; //Rotate One Bit Right (Memory or Accumulator) PIC16InstName[i_ROR].name := 'ROR'; //Rotate One Bit Right (Memory or Accumulator)
PIC16InstName[i_ROR].AddAddressMode(aAcumulat,$6A,1,2,''); PIC16InstName[i_ROR].AddAddressMode(aAcumulat,$6A,1,2,0);
PIC16InstName[i_ROR].AddAddressMode(aZeroPage,$66,2,5,''); PIC16InstName[i_ROR].AddAddressMode(aZeroPage,$66,2,5,0);
PIC16InstName[i_ROR].AddAddressMode(aZeroPagX,$76,2,6,''); PIC16InstName[i_ROR].AddAddressMode(aZeroPagX,$76,2,6,0);
PIC16InstName[i_ROR].AddAddressMode(aAbsolute,$6E,3,6,''); PIC16InstName[i_ROR].AddAddressMode(aAbsolute,$6E,3,6,0);
PIC16InstName[i_ROR].AddAddressMode(aAbsolutX,$7E,3,7,''); PIC16InstName[i_ROR].AddAddressMode(aAbsolutX,$7E,3,7,0);
PIC16InstName[i_RTI].name := 'RTI'; //Return from Interrupt PIC16InstName[i_RTI].name := 'RTI'; //Return from Interrupt
PIC16InstName[i_RTI].AddAddressMode(aImplicit,$40,1,6,''); PIC16InstName[i_RTI].AddAddressMode(aImplicit,$40,1,6,0);
PIC16InstName[i_RTS].name := 'RTS'; //Return from Subroutine PIC16InstName[i_RTS].name := 'RTS'; //Return from Subroutine
PIC16InstName[i_RTS].AddAddressMode(aImplicit,$60,1,6,''); PIC16InstName[i_RTS].AddAddressMode(aImplicit,$60,1,6,0);
PIC16InstName[i_SBC].name := 'SBC'; //Subtract Memory from Accumulator withBorrow PIC16InstName[i_SBC].name := 'SBC'; //Subtract Memory from Accumulator withBorrow
PIC16InstName[i_SBC].AddAddressMode(aImmediat,$E9,2,2,''); PIC16InstName[i_SBC].AddAddressMode(aImmediat,$E9,2,2,0);
PIC16InstName[i_SBC].AddAddressMode(aZeroPage,$E5,2,3,''); PIC16InstName[i_SBC].AddAddressMode(aZeroPage,$E5,2,3,0);
PIC16InstName[i_SBC].AddAddressMode(aZeroPagX,$F5,2,4,''); PIC16InstName[i_SBC].AddAddressMode(aZeroPagX,$F5,2,4,0);
PIC16InstName[i_SBC].AddAddressMode(aAbsolute,$ED,3,4,''); PIC16InstName[i_SBC].AddAddressMode(aAbsolute,$ED,3,4,0);
PIC16InstName[i_SBC].AddAddressMode(aAbsolutX,$FD,3,4,'*'); PIC16InstName[i_SBC].AddAddressMode(aAbsolutX,$FD,3,4,1);
PIC16InstName[i_SBC].AddAddressMode(aAbsolutY,$F9,3,4,'*'); PIC16InstName[i_SBC].AddAddressMode(aAbsolutY,$F9,3,4,1);
PIC16InstName[i_SBC].AddAddressMode(aIndirecX,$E1,2,6,''); PIC16InstName[i_SBC].AddAddressMode(aIndirecX,$E1,2,6,0);
PIC16InstName[i_SBC].AddAddressMode(aIndirecY,$F1,2,5,'*'); PIC16InstName[i_SBC].AddAddressMode(aIndirecY,$F1,2,5,1);
PIC16InstName[i_SEC].name := 'SEC'; //Set Carry Flag PIC16InstName[i_SEC].name := 'SEC'; //Set Carry Flag
PIC16InstName[i_SEC].AddAddressMode(aImplicit,$38,1,2,''); PIC16InstName[i_SEC].AddAddressMode(aImplicit,$38,1,2,0);
PIC16InstName[i_SED].name := 'SED'; //Set Decimal Flag PIC16InstName[i_SED].name := 'SED'; //Set Decimal Flag
PIC16InstName[i_SED].AddAddressMode(aImplicit,$F8,1,2,''); PIC16InstName[i_SED].AddAddressMode(aImplicit,$F8,1,2,0);
PIC16InstName[i_SEI].name := 'SEI'; //Set Interrupt Disable Status PIC16InstName[i_SEI].name := 'SEI'; //Set Interrupt Disable Status
PIC16InstName[i_SEI].AddAddressMode(aImplicit,$78,1,2,''); PIC16InstName[i_SEI].AddAddressMode(aImplicit,$78,1,2,0);
PIC16InstName[i_STA].name := 'STA'; //Store Accumulator in Memory PIC16InstName[i_STA].name := 'STA'; //Store Accumulator in Memory
PIC16InstName[i_STA].AddAddressMode(aZeroPage,$85,2,3,''); PIC16InstName[i_STA].AddAddressMode(aZeroPage,$85,2,3,0);
PIC16InstName[i_STA].AddAddressMode(aZeroPagX,$95,2,4,''); PIC16InstName[i_STA].AddAddressMode(aZeroPagX,$95,2,4,0);
PIC16InstName[i_STA].AddAddressMode(aAbsolute,$8D,3,4,''); PIC16InstName[i_STA].AddAddressMode(aAbsolute,$8D,3,4,0);
PIC16InstName[i_STA].AddAddressMode(aAbsolutX,$9D,3,5,''); PIC16InstName[i_STA].AddAddressMode(aAbsolutX,$9D,3,5,0);
PIC16InstName[i_STA].AddAddressMode(aAbsolutY,$99,3,5,''); PIC16InstName[i_STA].AddAddressMode(aAbsolutY,$99,3,5,0);
PIC16InstName[i_STA].AddAddressMode(aIndirecX,$81,2,6,''); PIC16InstName[i_STA].AddAddressMode(aIndirecX,$81,2,6,0);
PIC16InstName[i_STA].AddAddressMode(aIndirecY,$91,2,6,''); PIC16InstName[i_STA].AddAddressMode(aIndirecY,$91,2,6,0);
PIC16InstName[i_STX].name := 'STX'; //Store Index X in Memory PIC16InstName[i_STX].name := 'STX'; //Store Index X in Memory
PIC16InstName[i_STX].AddAddressMode(aZeroPage,$86,2,3,''); PIC16InstName[i_STX].AddAddressMode(aZeroPage,$86,2,3,0);
PIC16InstName[i_STX].AddAddressMode(aZeroPagY,$96,2,4,''); PIC16InstName[i_STX].AddAddressMode(aZeroPagY,$96,2,4,0);
PIC16InstName[i_STX].AddAddressMode(aAbsolute,$8E,3,4,''); PIC16InstName[i_STX].AddAddressMode(aAbsolute,$8E,3,4,0);
PIC16InstName[i_STY].name := 'STY'; //Sore Index Y in Memory PIC16InstName[i_STY].name := 'STY'; //Sore Index Y in Memory
PIC16InstName[i_STY].AddAddressMode(aZeroPage,$84,2,3,''); PIC16InstName[i_STY].AddAddressMode(aZeroPage,$84,2,3,0);
PIC16InstName[i_STY].AddAddressMode(aZeroPagX,$94,2,4,''); PIC16InstName[i_STY].AddAddressMode(aZeroPagX,$94,2,4,0);
PIC16InstName[i_STY].AddAddressMode(aAbsolute,$8C,3,4,''); PIC16InstName[i_STY].AddAddressMode(aAbsolute,$8C,3,4,0);
PIC16InstName[i_TAX].name := 'TAX'; //Transfer Accumulator to IndexX PIC16InstName[i_TAX].name := 'TAX'; //Transfer Accumulator to IndexX
PIC16InstName[i_TAX].AddAddressMode(aImplicit,$AA,1,2,''); PIC16InstName[i_TAX].AddAddressMode(aImplicit,$AA,1,2,0);
PIC16InstName[i_TAY].name := 'TAY'; //Transfer Accumulator to IndexY PIC16InstName[i_TAY].name := 'TAY'; //Transfer Accumulator to IndexY
PIC16InstName[i_TAY].AddAddressMode(aImplicit,$A8,1,2,''); PIC16InstName[i_TAY].AddAddressMode(aImplicit,$A8,1,2,0);
PIC16InstName[i_TSX].name := 'TSX'; //Transfer Stack Pointer toIndex X PIC16InstName[i_TSX].name := 'TSX'; //Transfer Stack Pointer toIndex X
PIC16InstName[i_TSX].AddAddressMode(aImplicit,$BA,1,2,''); PIC16InstName[i_TSX].AddAddressMode(aImplicit,$BA,1,2,0);
PIC16InstName[i_TXA].name := 'TXA'; //Transfer Index X to Accumulator PIC16InstName[i_TXA].name := 'TXA'; //Transfer Index X to Accumulator
PIC16InstName[i_TXA].AddAddressMode(aImplicit,$8A,1,2,''); PIC16InstName[i_TXA].AddAddressMode(aImplicit,$8A,1,2,0);
PIC16InstName[i_TXS].name := 'TXS'; //Transfer Index X to StackRegister PIC16InstName[i_TXS].name := 'TXS'; //Transfer Index X to StackRegister
PIC16InstName[i_TXS].AddAddressMode(aImplicit,$9A,1,2,''); PIC16InstName[i_TXS].AddAddressMode(aImplicit,$9A,1,2,0);
PIC16InstName[i_TYA].name := 'TYA'; //Transfer Index Y to Accumulator PIC16InstName[i_TYA].name := 'TYA'; //Transfer Index Y to Accumulator
PIC16InstName[i_TYA].AddAddressMode(aImplicit,$98,1,2,''); PIC16InstName[i_TYA].AddAddressMode(aImplicit,$98,1,2,0);
PIC16InstName[i_Inval].name := 'Inv'; PIC16InstName[i_Inval].name := 'Inv';