/trunk/HT46F47.pas |
---|
0,0 → 1,552 |
unit HT46F47; |
interface |
type |
Nibble = 0..15; |
TRom = array[0..$FF] of byte; |
TWaitEvent = procedure(milliseconds: integer) of object; |
THT46F47 = class(TObject) |
strict private |
procedure WaitMs(milliseconds: integer); |
strict protected |
FOnWait: TWaitEvent; |
// ROM |
// Registers |
FPC: byte; |
FReturnAddress: byte; |
FPage: Nibble; |
FRegA: Nibble; |
FRegB: Nibble; |
FRegC: Nibble; |
FRegD: Nibble; |
FCalledOnce: boolean; |
// In |
FS1: boolean; |
FS2: boolean; |
FDIn: Nibble; |
FAD1: Nibble; |
FAD2: Nibble; |
// Out |
FPWM: Nibble; |
FPortOut: Nibble; |
public |
// ROM |
ROM: TRom; |
property FROM: TRom read ROM; |
// Registers |
property PC: byte read FPC; |
property ReturnAddress: byte read FReturnAddress; |
property Page: Nibble read FPage; |
property RegA: Nibble read FRegA; |
property RegB: Nibble read FRegB; |
property RegC: Nibble read FRegC; |
property RegD: Nibble read FRegD; |
// In |
property S1: boolean read FS1 write FS1; |
property S2: boolean read FS2 write FS2; |
property DIn: Nibble read FDIn write FDIn; |
property AD1: Nibble read FAD1 write FAD1; |
property AD2: Nibble read FAD2 write FAD2; |
// Out |
property PWM: Nibble read FPWM; |
property PortOut: Nibble read FPortOut; |
// Functions |
property OnWait: TWaitEvent read FOnWait write FOnWait; |
constructor Create; |
procedure Step; |
procedure Reset; |
end; |
implementation |
uses |
SysUtils, Forms; |
{ THT46F47 } |
constructor THT46F47.Create; |
var |
i: integer; |
begin |
for i := Low(FROM) to High(FROM) do |
begin |
ROM[i] := $00; |
end; |
Reset; |
end; |
procedure THT46F47.Reset; |
begin |
// Internal |
FPC := 0; |
FReturnAddress := 0; |
FPage := 0; |
FRegA := 0; // Note: The registers don't seem to be reset in the actual chip, if a "soft reset" is done |
FRegB := 0; |
FRegC := 0; |
FRegD := 0; |
FCalledOnce := false; |
// In |
FS1 := false; |
FS2 := false; |
FDIn := 0; |
FAD1 := 0; |
FAD2 := 0; |
// Out |
FPWM := 0; |
FPortOut := 0; |
end; |
procedure THT46F47.Step; |
var |
Instruction: byte; |
ProgramCounterNext: Byte; |
ProgramCounterCurrent: Byte; |
begin |
Instruction := FROM[FPC]; |
ProgramCounterCurrent := FPC; |
ProgramCounterNext := FPC+1; |
try |
(* |
---------------------------------------------------- |
Code Assembly Alternative Comment |
---------------------------------------------------- |
10 LED 0000 PORT 0 |
11 LED 0001 PORT 1 |
12 LED 0010 PORT 2 |
13 LED 0011 PORT 3 |
14 LED 0100 PORT 4 |
15 LED 0101 PORT 5 |
16 LED 0110 PORT 6 |
17 LED 0111 PORT 7 |
18 LED 1000 PORT 8 |
19 LED 1001 PORT 9 |
1A LED 1010 PORT 10 |
1B LED 1011 PORT 11 |
1C LED 1100 PORT 12 |
1D LED 1101 PORT 13 |
1E LED 1110 PORT 14 |
1F LED 1111 PORT 15 |
*) |
if (Instruction >= $10) and (Instruction <= $1F) then |
begin |
FPortOut := Instruction and $F; |
end; |
(* |
---------------------------------------------------- |
Code Assembly Alternative Comment |
---------------------------------------------------- |
20 WAIT 1ms |
21 WAIT 2ms |
22 WAIT 5ms |
23 WAIT 10ms |
24 WAIT 20ms |
25 WAIT 50ms |
26 WAIT 100ms |
27 WAIT 200ms |
28 WAIT 500ms |
29 WAIT 1s |
2A WAIT 2s |
2B WAIT 5s |
2C WAIT 10s |
2D WAIT 20s |
2E WAIT 30s |
2F WAIT 60s |
*) |
case Instruction of |
$20: WaitMs(1); // WAIT 1ms |
$21: WaitMs(2); // WAIT 2ms |
$22: WaitMs(5); // WAIT 5ms |
$23: WaitMs(10); // WAIT 10ms |
$24: WaitMs(20); // WAIT 20ms |
$25: WaitMs(50); // WAIT 50ms |
$26: WaitMs(100); // WAIT 100ms |
$27: WaitMs(200); // WAIT 200ms |
$28: WaitMs(500); // WAIT 500ms |
$29: WaitMs(1000); // WAIT 1s |
$2A: WaitMs(2000); // WAIT 2s |
$2B: WaitMs(5000); // WAIT 5s |
$2C: WaitMs(10000); // WAIT 10s |
$2D: WaitMs(20000); // WAIT 20s |
$2E: WaitMs(30000); // WAIT 30s |
$2F: WaitMs(60000); // WAIT 60s |
end; |
(* |
---------------------------------------------------- |
Code Assembly Alternative Comment |
---------------------------------------------------- |
30 JUMP -0 HALT |
31 JUMP -1 |
32 JUMP -2 |
33 JUMP -3 |
34 JUMP -4 |
35 JUMP -5 |
36 JUMP -6 |
37 JUMP -7 |
38 JUMP -8 |
39 JUMP -9 |
3A JUMP -10 |
3B JUMP -11 |
3C JUMP -12 |
3D JUMP -13 |
3E JUMP -14 |
3F JUMP -15 |
*) |
if (Instruction >= $30) and (Instruction <= $3F) then |
begin |
ProgramCounterNext := ProgramCounterCurrent - (Instruction and $F); |
end; |
(* |
---------------------------------------------------- |
Code Assembly Alternative Comment |
---------------------------------------------------- |
40 SET A=0 |
41 SET A=1 |
42 SET A=2 |
43 SET A=3 |
44 SET A=4 |
45 SET A=5 |
46 SET A=6 |
47 SET A=7 |
48 SET A=8 |
49 SET A=9 |
4A SET A=10 |
4B SET A=11 |
4C SET A=12 |
4D SET A=13 |
4E SET A=14 |
4F SET A=15 |
*) |
if (Instruction >= $40) and (Instruction <= $4F) then |
begin |
FRegA := Instruction and $F; |
end; |
(* |
---------------------------------------------------- |
Code Assembly Alternative Comment |
---------------------------------------------------- |
50 |
51 SET B=A |
52 SET C=A |
53 SET D=A |
54 SET Dout=A |
55 SET Dout.0=A.0 |
56 SET Dout.1=A.0 |
57 SET Dout.2=A.0 |
58 SET Dout.3=A.0 |
59 SET PWM=A |
5A |
5B |
5C |
5D |
5E |
5F |
*) |
case Instruction of |
$51: FRegB := FRegA; // SET B=A |
$52: FRegC := FRegA; // SET C=A |
$53: FRegD := FRegA; // SET D=A |
$54: FPortOut := FRegA; // SET Dout=A |
$55: FPortOut := ((FRegA and 1) shl 0) + (PortOut and 14); // SET Dout.0=A.0 |
$56: FPortOut := ((FRegA and 1) shl 1) + (PortOut and 13); // SET Dout.1=A.0 |
$57: FPortOut := ((FRegA and 1) shl 2) + (PortOut and 11); // SET Dout.2=A.0 |
$58: FPortOut := ((FRegA and 1) shl 3) + (PortOut and 7); // SET Dout.3=A.0 |
$59: FPWM := FRegA; // SET PWM=A |
end; |
(* |
---------------------------------------------------- |
Code Assembly Alternative Comment |
---------------------------------------------------- |
60 |
61 SET A=B |
62 SET A=C |
63 SET A=D |
64 SET A=Din |
65 SET A=Din.0 |
66 SET A=Din.1 |
67 SET A=Din.2 |
68 SET A=Din.3 |
69 SET A=AD1 |
6A SET A=AD2 |
6B |
6C |
6D |
6E |
6F |
*) |
case Instruction of |
$61: FRegA := FRegB; // SET A=B |
$62: FRegA := FRegC; // SET A=C |
$63: FRegA := FRegD; // SET A=D |
$64: FRegA := DIn; // SET A=Din |
$65: FRegA := (DIn and 1) shr 0; // SET A=Din.0 |
$66: FRegA := (DIn and 2) shr 1; // SET A=Din.1 |
$67: FRegA := (DIn and 4) shr 1; // SET A=Din.2 |
$68: FRegA := (DIn and 8) shr 1; // SET A=Din.3 |
$69: FRegA := AD1; |
$6A: FRegA := AD2; |
end; |
(* |
---------------------------------------------------- |
Code Assembly Alternative Comment |
---------------------------------------------------- |
70 |
71 SET A=A+1 |
72 SET A=A-1 |
73 SET A=A+B |
74 SET A=A-B |
75 SET A=A*B |
76 SET A=A/B |
77 SET A=A&B AND |
78 SET A=A|B OR |
79 SET A=A^B XOR |
7A SET A=~A NOT |
7B |
7C |
7D |
7E |
7F |
*) |
case Instruction of |
$71: FRegA := FRegA + 1; // SET A=A+1 |
$72: FRegA := FRegA - 1; // SET A=A-1 |
$73: FRegA := FRegA + FRegB; // SET A=A+B |
$74: FRegA := FRegA - FRegB; // SET A=A-B |
$75: FRegA := FRegA * FRegB; // SET A=A*B |
$76: begin |
if FRegB = 0 then |
FRegA := $F // this is the actual behavior of the microchip (program 40 51 45 76 54 30) |
else |
FRegA := FRegA div FRegB; // SET A=A/B |
end; |
$77: FRegA := FRegA and FRegB; // SET A=A&B AND |
$78: FRegA := FRegA or FRegB; // SET A=A|B OR |
$79: FRegA := FRegA xor FRegB; // SET A=A^B XOR |
$7A: FRegA := not FRegA; // SET A=~A NOT |
end; |
(* |
---------------------------------------------------- |
Code Assembly Alternative Comment |
---------------------------------------------------- |
80 PAGE 0 Page is used by JUMP, CALL, CTIMES and DTIMES |
81 PAGE 1 |
82 PAGE 2 |
83 PAGE 3 |
84 PAGE 4 |
85 PAGE 5 |
86 PAGE 6 |
87 PAGE 7 |
88 PAGE 8 |
89 PAGE 9 |
8A PAGE A |
8B PAGE B |
8C PAGE C |
8D PAGE D |
8E PAGE E |
8F PAGE F |
*) |
if (Instruction >= $80) and (Instruction <= $8F) then |
begin |
FPage := Instruction and $F; |
end; |
(* |
---------------------------------------------------- |
Code Assembly Alternative Comment |
---------------------------------------------------- |
90 JUMP <PAGE>0 |
91 JUMP <PAGE>1 |
92 JUMP <PAGE>2 |
93 JUMP <PAGE>3 |
94 JUMP <PAGE>4 |
95 JUMP <PAGE>5 |
96 JUMP <PAGE>6 |
97 JUMP <PAGE>7 |
98 JUMP <PAGE>8 |
99 JUMP <PAGE>9 |
9A JUMP <PAGE>A |
9B JUMP <PAGE>B |
9C JUMP <PAGE>C |
9D JUMP <PAGE>D |
9E JUMP <PAGE>E |
9F JUMP <PAGE>F |
*) |
if (Instruction >= $90) and (Instruction <= $9F) then |
begin |
ProgramCounterNext := (FPage shl 4) + (Instruction and $F); |
end; |
(* |
---------------------------------------------------- |
Code Assembly Alternative Comment |
---------------------------------------------------- |
A0 CTIMES <PAGE>0 IF C>0 THEN ( C=C-1 ; JUMP <PAGE>X ) ELSE CONTINUE |
A1 CTIMES <PAGE>1 |
A2 CTIMES <PAGE>2 |
A3 CTIMES <PAGE>3 |
A4 CTIMES <PAGE>4 |
A5 CTIMES <PAGE>5 |
A6 CTIMES <PAGE>6 |
A7 CTIMES <PAGE>7 |
A8 CTIMES <PAGE>8 |
A9 CTIMES <PAGE>9 |
AA CTIMES <PAGE>A |
AB CTIMES <PAGE>B |
AC CTIMES <PAGE>C |
AD CTIMES <PAGE>D |
AE CTIMES <PAGE>E |
AF CTIMES <PAGE>F |
*) |
if (Instruction >= $A0) and (Instruction <= $AF) then |
begin |
if FRegC > 0 then |
begin |
Dec(FRegC); |
FReturnAddress := ProgramCounterCurrent; |
ProgramCounterNext := (FPage shl 4) + (Instruction and $F); |
end; |
end; |
(* |
---------------------------------------------------- |
Code Assembly Alternative Comment |
---------------------------------------------------- |
B0 DTIMES <PAGE>0 IF D>0 THEN ( D=D-1 ; JUMP <PAGE>X ) ELSE CONTINUE |
B1 DTIMES <PAGE>1 |
B2 DTIMES <PAGE>2 |
B3 DTIMES <PAGE>3 |
B4 DTIMES <PAGE>4 |
B5 DTIMES <PAGE>5 |
B6 DTIMES <PAGE>6 |
B7 DTIMES <PAGE>7 |
B8 DTIMES <PAGE>8 |
B9 DTIMES <PAGE>9 |
BA DTIMES <PAGE>A |
BB DTIMES <PAGE>B |
BC DTIMES <PAGE>C |
BD DTIMES <PAGE>D |
BE DTIMES <PAGE>E |
BF DTIMES <PAGE>F |
*) |
if (Instruction >= $B0) and (Instruction <= $BF) then |
begin |
if FRegD > 0 then |
begin |
Dec(FRegD); |
FReturnAddress := ProgramCounterCurrent; |
ProgramCounterNext := (FPage shl 4) + (Instruction and $F); |
end; |
end; |
(* |
---------------------------------------------------- |
Code Assembly Alternative Comment |
---------------------------------------------------- |
C0 |
C1 SKIP_IF A>B |
C2 SKIP_IF A<B |
C3 SKIP_IF A=B |
C4 SKIP_IF Din.0=1 |
C5 SKIP_IF Din.1=1 |
C6 SKIP_IF Din.2=1 |
C7 SKIP_IF Din.3=1 |
C8 SKIP_IF Din.0=0 |
C9 SKIP_IF Din.1=0 |
CA SKIP_IF Din.2=0 |
CB SKIP_IF Din.3=0 |
CC SKIP_IF S1=0 |
CD SKIP_IF S2=0 |
CE SKIP_IF S1=1 |
CF SKIP_IF S2=1 |
*) |
case Instruction of |
$C1: if FRegA > FRegB then Inc(ProgramCounterNext); |
$C2: if FRegA < FRegB then Inc(ProgramCounterNext); |
$C3: if FRegA = FRegB then Inc(ProgramCounterNext); |
$C4: if ((Din and 1) shr 0) = 1 then Inc(ProgramCounterNext); |
$C5: if ((Din and 2) shr 1) = 1 then Inc(ProgramCounterNext); |
$C6: if ((Din and 4) shr 2) = 1 then Inc(ProgramCounterNext); |
$C7: if ((Din and 8) shr 3) = 1 then Inc(ProgramCounterNext); |
$C8: if ((Din and 1) shr 0) = 0 then Inc(ProgramCounterNext); |
$C9: if ((Din and 2) shr 1) = 0 then Inc(ProgramCounterNext); |
$CA: if ((Din and 4) shr 2) = 0 then Inc(ProgramCounterNext); |
$CB: if ((Din and 8) shr 3) = 0 then Inc(ProgramCounterNext); |
$CC: if S1 = false then Inc(ProgramCounterNext); |
$CD: if S2 = false then Inc(ProgramCounterNext); |
$CE: if S1 = true then Inc(ProgramCounterNext); |
$CF: if S2 = true then Inc(ProgramCounterNext); |
end; |
(* |
---------------------------------------------------- |
Code Assembly Alternative Comment |
---------------------------------------------------- |
D0 CALL <PAGE>0 |
D1 CALL <PAGE>1 |
D2 CALL <PAGE>2 |
D3 CALL <PAGE>3 |
D4 CALL <PAGE>4 |
D5 CALL <PAGE>5 |
D6 CALL <PAGE>6 |
D7 CALL <PAGE>7 |
D8 CALL <PAGE>8 |
D9 CALL <PAGE>9 |
DA CALL <PAGE>A |
DB CALL <PAGE>B |
DC CALL <PAGE>C |
DD CALL <PAGE>D |
DE CALL <PAGE>E |
DF CALL <PAGE>F |
*) |
if (Instruction >= $D0) and (Instruction <= $DF) then |
begin |
FCalledOnce := true; |
FReturnAddress := ProgramCounterNext; |
ProgramCounterNext := (FPage shl 4) + (Instruction and $F) |
end; |
(* |
---------------------------------------------------- |
Code Assembly Alternative Comment |
---------------------------------------------------- |
E0 RET |
*) |
if Instruction = $E0 then |
begin |
if not FCalledOnce then |
begin |
// "Freeze" is the behavior of the actual chip (see test program 41 54 27 42 54 27 E0 7A 27 54 33) |
ProgramCounterNext := ProgramCounterCurrent; |
end |
else |
begin |
ProgramCounterNext := FReturnAddress; |
end; |
end; |
finally |
FPC := ProgramCounterNext; |
end; |
end; |
procedure THT46F47.WaitMs(milliseconds: integer); |
begin |
if Assigned(FOnWait) then |
FOnWait(milliseconds) |
else |
Sleep(milliseconds); |
end; |
end. |
/trunk/HT46F47Sim.dpr |
---|
0,0 → 1,15 |
program HT46F47Sim; |
uses |
Vcl.Forms, |
MainForm in 'MainForm.pas' {Form2}, |
HT46F47 in 'HT46F47.pas'; |
{$R *.res} |
begin |
Application.Initialize; |
Application.MainFormOnTaskbar := True; |
Application.CreateForm(TForm2, Form2); |
Application.Run; |
end. |
/trunk/HT46F47Sim.dproj |
---|
0,0 → 1,976 |
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
<PropertyGroup> |
<ProjectGuid>{EF6EEC64-3E5A-47B6-96B4-3B59B467291A}</ProjectGuid> |
<ProjectVersion>19.5</ProjectVersion> |
<FrameworkType>VCL</FrameworkType> |
<MainSource>HT46F47Sim.dpr</MainSource> |
<Base>True</Base> |
<Config Condition="'$(Config)'==''">Release</Config> |
<Platform Condition="'$(Platform)'==''">Win32</Platform> |
<TargetedPlatforms>1</TargetedPlatforms> |
<AppType>Application</AppType> |
</PropertyGroup> |
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''"> |
<Base>true</Base> |
</PropertyGroup> |
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''"> |
<Base_Win32>true</Base_Win32> |
<CfgParent>Base</CfgParent> |
<Base>true</Base> |
</PropertyGroup> |
<PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Base)'=='true') or '$(Base_Win64)'!=''"> |
<Base_Win64>true</Base_Win64> |
<CfgParent>Base</CfgParent> |
<Base>true</Base> |
</PropertyGroup> |
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_1)'!=''"> |
<Cfg_1>true</Cfg_1> |
<CfgParent>Base</CfgParent> |
<Base>true</Base> |
</PropertyGroup> |
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_1)'=='true') or '$(Cfg_1_Win32)'!=''"> |
<Cfg_1_Win32>true</Cfg_1_Win32> |
<CfgParent>Cfg_1</CfgParent> |
<Cfg_1>true</Cfg_1> |
<Base>true</Base> |
</PropertyGroup> |
<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_2)'!=''"> |
<Cfg_2>true</Cfg_2> |
<CfgParent>Base</CfgParent> |
<Base>true</Base> |
</PropertyGroup> |
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_2)'=='true') or '$(Cfg_2_Win32)'!=''"> |
<Cfg_2_Win32>true</Cfg_2_Win32> |
<CfgParent>Cfg_2</CfgParent> |
<Cfg_2>true</Cfg_2> |
<Base>true</Base> |
</PropertyGroup> |
<PropertyGroup Condition="'$(Base)'!=''"> |
<DCC_DcuOutput>.\$(Platform)\$(Config)</DCC_DcuOutput> |
<DCC_ExeOutput>.\$(Platform)\$(Config)</DCC_ExeOutput> |
<DCC_E>false</DCC_E> |
<DCC_N>false</DCC_N> |
<DCC_S>false</DCC_S> |
<DCC_F>false</DCC_F> |
<DCC_K>false</DCC_K> |
<DCC_Namespace>System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace)</DCC_Namespace> |
<Icon_MainIcon>$(BDS)\bin\delphi_PROJECTICON.ico</Icon_MainIcon> |
<UWP_DelphiLogo44>$(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png</UWP_DelphiLogo44> |
<UWP_DelphiLogo150>$(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png</UWP_DelphiLogo150> |
<SanitizedProjectName>HT46F47Sim</SanitizedProjectName> |
</PropertyGroup> |
<PropertyGroup Condition="'$(Base_Win32)'!=''"> |
<DCC_UsePackage>DBXSqliteDriver;IndyIPCommon;RESTComponents;bindcompdbx;DBXInterBaseDriver;vcl;IndyIPServer;vclactnband;vclFireDAC;IndySystem;tethering;svnui;dsnapcon;FireDACADSDriver;FireDACMSAccDriver;fmxFireDAC;vclimg;FireDAC;vcltouch;vcldb;bindcompfmx;svn;FireDACSqliteDriver;FireDACPgDriver;inetdb;soaprtl;DbxCommonDriver;fmx;FireDACIBDriver;fmxdae;xmlrtl;soapmidas;fmxobj;vclwinx;rtl;DbxClientDriver;CustomIPTransport;vcldsnap;dbexpress;IndyCore;vclx;bindcomp;appanalytics;dsnap;FireDACCommon;IndyIPClient;bindcompvcl;RESTBackendComponents;VCLRESTComponents;soapserver;dbxcds;VclSmp;adortl;vclie;bindengine;DBXMySQLDriver;CloudService;dsnapxml;FireDACMySQLDriver;dbrtl;IndyProtocols;inetdbxpress;FireDACCommonODBC;FireDACCommonDriver;inet;fmxase;$(DCC_UsePackage)</DCC_UsePackage> |
<DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace> |
<BT_BuildType>Debug</BT_BuildType> |
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo> |
<VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=</VerInfo_Keys> |
<VerInfo_Locale>1033</VerInfo_Locale> |
<Manifest_File>$(BDS)\bin\default_app.manifest</Manifest_File> |
</PropertyGroup> |
<PropertyGroup Condition="'$(Base_Win64)'!=''"> |
<DCC_UsePackage>DBXSqliteDriver;IndyIPCommon;RESTComponents;bindcompdbx;DBXInterBaseDriver;vcl;IndyIPServer;vclactnband;vclFireDAC;IndySystem;tethering;dsnapcon;FireDACADSDriver;FireDACMSAccDriver;fmxFireDAC;vclimg;FireDAC;vcltouch;vcldb;bindcompfmx;FireDACSqliteDriver;FireDACPgDriver;inetdb;soaprtl;DbxCommonDriver;fmx;FireDACIBDriver;fmxdae;xmlrtl;soapmidas;fmxobj;vclwinx;rtl;DbxClientDriver;CustomIPTransport;vcldsnap;dbexpress;IndyCore;vclx;bindcomp;appanalytics;dsnap;FireDACCommon;IndyIPClient;bindcompvcl;RESTBackendComponents;VCLRESTComponents;soapserver;dbxcds;VclSmp;adortl;vclie;bindengine;DBXMySQLDriver;CloudService;dsnapxml;FireDACMySQLDriver;dbrtl;IndyProtocols;inetdbxpress;FireDACCommonODBC;FireDACCommonDriver;inet;fmxase;$(DCC_UsePackage)</DCC_UsePackage> |
</PropertyGroup> |
<PropertyGroup Condition="'$(Cfg_1)'!=''"> |
<DCC_Define>DEBUG;$(DCC_Define)</DCC_Define> |
<DCC_DebugDCUs>true</DCC_DebugDCUs> |
<DCC_Optimize>false</DCC_Optimize> |
<DCC_GenerateStackFrames>true</DCC_GenerateStackFrames> |
<DCC_DebugInfoInExe>true</DCC_DebugInfoInExe> |
<DCC_RemoteDebug>true</DCC_RemoteDebug> |
</PropertyGroup> |
<PropertyGroup Condition="'$(Cfg_1_Win32)'!=''"> |
<DCC_RemoteDebug>false</DCC_RemoteDebug> |
<AppEnableRuntimeThemes>true</AppEnableRuntimeThemes> |
<AppDPIAwarenessMode>PerMonitorV2</AppDPIAwarenessMode> |
<DCC_DcuOutput>.</DCC_DcuOutput> |
<DCC_ExeOutput>.</DCC_ExeOutput> |
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo> |
<VerInfo_Locale>1033</VerInfo_Locale> |
</PropertyGroup> |
<PropertyGroup Condition="'$(Cfg_2)'!=''"> |
<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols> |
<DCC_Define>RELEASE;$(DCC_Define)</DCC_Define> |
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo> |
<DCC_DebugInformation>0</DCC_DebugInformation> |
</PropertyGroup> |
<PropertyGroup Condition="'$(Cfg_2_Win32)'!=''"> |
<AppEnableRuntimeThemes>true</AppEnableRuntimeThemes> |
<AppDPIAwarenessMode>PerMonitorV2</AppDPIAwarenessMode> |
<DCC_DcuOutput>.</DCC_DcuOutput> |
<DCC_ExeOutput>.</DCC_ExeOutput> |
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo> |
<VerInfo_Locale>1033</VerInfo_Locale> |
<VerInfo_Keys>CompanyName=ViaThinkSoft;FileDescription=HT46F47 Simulator;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=</VerInfo_Keys> |
</PropertyGroup> |
<ItemGroup> |
<DelphiCompile Include="$(MainSource)"> |
<MainSource>MainSource</MainSource> |
</DelphiCompile> |
<DCCReference Include="MainForm.pas"> |
<Form>Form2</Form> |
<FormType>dfm</FormType> |
</DCCReference> |
<DCCReference Include="HT46F47.pas"/> |
<BuildConfiguration Include="Base"> |
<Key>Base</Key> |
</BuildConfiguration> |
<BuildConfiguration Include="Debug"> |
<Key>Cfg_1</Key> |
<CfgParent>Base</CfgParent> |
</BuildConfiguration> |
<BuildConfiguration Include="Release"> |
<Key>Cfg_2</Key> |
<CfgParent>Base</CfgParent> |
</BuildConfiguration> |
</ItemGroup> |
<ProjectExtensions> |
<Borland.Personality>Delphi.Personality.12</Borland.Personality> |
<Borland.ProjectType>Application</Borland.ProjectType> |
<BorlandProject> |
<Delphi.Personality> |
<Source> |
<Source Name="MainSource">HT46F47Sim.dpr</Source> |
</Source> |
<Excluded_Packages> |
<Excluded_Packages Name="$(BDSBIN)\dcloffice2k260.bpl">Microsoft Office 2000 Beispiele für gekapselte Komponenten für Automatisierungsserver</Excluded_Packages> |
<Excluded_Packages Name="$(BDSBIN)\dclofficexp260.bpl">Microsoft Office XP Beispiele für gekapselte Komponenten für Automation Server</Excluded_Packages> |
</Excluded_Packages> |
</Delphi.Personality> |
<Deployment Version="4"> |
<DeployFile LocalName="Win32\Debug\HT46F47Sim.exe" Configuration="Debug" Class="ProjectOutput"/> |
<DeployClass Name="AdditionalDebugSymbols"> |
<Platform Name="iOSSimulator"> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="OSX32"> |
<RemoteDir>Contents\MacOS</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="Win32"> |
<Operation>0</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="AndroidClasses"> |
<Platform Name="Android"> |
<RemoteDir>classes</RemoteDir> |
<Operation>64</Operation> |
</Platform> |
<Platform Name="Android64"> |
<RemoteDir>classes</RemoteDir> |
<Operation>64</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="AndroidFileProvider"> |
<Platform Name="Android"> |
<RemoteDir>res\xml</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="Android64"> |
<RemoteDir>res\xml</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="AndroidGDBServer"> |
<Platform Name="Android"> |
<RemoteDir>library\lib\armeabi-v7a</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="AndroidLibnativeArmeabiFile"> |
<Platform Name="Android"> |
<RemoteDir>library\lib\armeabi</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="Android64"> |
<RemoteDir>library\lib\armeabi</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="AndroidLibnativeArmeabiv7aFile"> |
<Platform Name="Android64"> |
<RemoteDir>library\lib\armeabi-v7a</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="AndroidLibnativeMipsFile"> |
<Platform Name="Android"> |
<RemoteDir>library\lib\mips</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="Android64"> |
<RemoteDir>library\lib\mips</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="AndroidServiceOutput"> |
<Platform Name="Android"> |
<RemoteDir>library\lib\armeabi-v7a</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="Android64"> |
<RemoteDir>library\lib\arm64-v8a</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="AndroidServiceOutput_Android32"> |
<Platform Name="Android64"> |
<RemoteDir>library\lib\armeabi-v7a</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="AndroidSplashImageDef"> |
<Platform Name="Android"> |
<RemoteDir>res\drawable</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="Android64"> |
<RemoteDir>res\drawable</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="AndroidSplashStyles"> |
<Platform Name="Android"> |
<RemoteDir>res\values</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="Android64"> |
<RemoteDir>res\values</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="AndroidSplashStylesV21"> |
<Platform Name="Android"> |
<RemoteDir>res\values-v21</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="Android64"> |
<RemoteDir>res\values-v21</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="Android_Colors"> |
<Platform Name="Android"> |
<RemoteDir>res\values</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="Android64"> |
<RemoteDir>res\values</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="Android_DefaultAppIcon"> |
<Platform Name="Android"> |
<RemoteDir>res\drawable</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="Android64"> |
<RemoteDir>res\drawable</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="Android_LauncherIcon144"> |
<Platform Name="Android"> |
<RemoteDir>res\drawable-xxhdpi</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="Android64"> |
<RemoteDir>res\drawable-xxhdpi</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="Android_LauncherIcon192"> |
<Platform Name="Android"> |
<RemoteDir>res\drawable-xxxhdpi</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="Android64"> |
<RemoteDir>res\drawable-xxxhdpi</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="Android_LauncherIcon36"> |
<Platform Name="Android"> |
<RemoteDir>res\drawable-ldpi</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="Android64"> |
<RemoteDir>res\drawable-ldpi</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="Android_LauncherIcon48"> |
<Platform Name="Android"> |
<RemoteDir>res\drawable-mdpi</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="Android64"> |
<RemoteDir>res\drawable-mdpi</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="Android_LauncherIcon72"> |
<Platform Name="Android"> |
<RemoteDir>res\drawable-hdpi</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="Android64"> |
<RemoteDir>res\drawable-hdpi</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="Android_LauncherIcon96"> |
<Platform Name="Android"> |
<RemoteDir>res\drawable-xhdpi</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="Android64"> |
<RemoteDir>res\drawable-xhdpi</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="Android_NotificationIcon24"> |
<Platform Name="Android"> |
<RemoteDir>res\drawable-mdpi</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="Android64"> |
<RemoteDir>res\drawable-mdpi</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="Android_NotificationIcon36"> |
<Platform Name="Android"> |
<RemoteDir>res\drawable-hdpi</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="Android64"> |
<RemoteDir>res\drawable-hdpi</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="Android_NotificationIcon48"> |
<Platform Name="Android"> |
<RemoteDir>res\drawable-xhdpi</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="Android64"> |
<RemoteDir>res\drawable-xhdpi</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="Android_NotificationIcon72"> |
<Platform Name="Android"> |
<RemoteDir>res\drawable-xxhdpi</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="Android64"> |
<RemoteDir>res\drawable-xxhdpi</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="Android_NotificationIcon96"> |
<Platform Name="Android"> |
<RemoteDir>res\drawable-xxxhdpi</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="Android64"> |
<RemoteDir>res\drawable-xxxhdpi</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="Android_SplashImage426"> |
<Platform Name="Android"> |
<RemoteDir>res\drawable-small</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="Android64"> |
<RemoteDir>res\drawable-small</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="Android_SplashImage470"> |
<Platform Name="Android"> |
<RemoteDir>res\drawable-normal</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="Android64"> |
<RemoteDir>res\drawable-normal</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="Android_SplashImage640"> |
<Platform Name="Android"> |
<RemoteDir>res\drawable-large</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="Android64"> |
<RemoteDir>res\drawable-large</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="Android_SplashImage960"> |
<Platform Name="Android"> |
<RemoteDir>res\drawable-xlarge</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="Android64"> |
<RemoteDir>res\drawable-xlarge</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="Android_Strings"> |
<Platform Name="Android"> |
<RemoteDir>res\values</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="Android64"> |
<RemoteDir>res\values</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="DebugSymbols"> |
<Platform Name="iOSSimulator"> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="OSX32"> |
<RemoteDir>Contents\MacOS</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="Win32"> |
<Operation>0</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="DependencyFramework"> |
<Platform Name="OSX32"> |
<RemoteDir>Contents\MacOS</RemoteDir> |
<Operation>1</Operation> |
<Extensions>.framework</Extensions> |
</Platform> |
<Platform Name="OSX64"> |
<RemoteDir>Contents\MacOS</RemoteDir> |
<Operation>1</Operation> |
<Extensions>.framework</Extensions> |
</Platform> |
<Platform Name="OSXARM64"> |
<RemoteDir>Contents\MacOS</RemoteDir> |
<Operation>1</Operation> |
<Extensions>.framework</Extensions> |
</Platform> |
<Platform Name="Win32"> |
<Operation>0</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="DependencyModule"> |
<Platform Name="iOSDevice32"> |
<Operation>1</Operation> |
<Extensions>.dylib</Extensions> |
</Platform> |
<Platform Name="iOSDevice64"> |
<Operation>1</Operation> |
<Extensions>.dylib</Extensions> |
</Platform> |
<Platform Name="iOSSimARM64"> |
<Operation>1</Operation> |
<Extensions>.dylib</Extensions> |
</Platform> |
<Platform Name="OSX32"> |
<RemoteDir>Contents\MacOS</RemoteDir> |
<Operation>1</Operation> |
<Extensions>.dylib</Extensions> |
</Platform> |
<Platform Name="OSX64"> |
<RemoteDir>Contents\MacOS</RemoteDir> |
<Operation>1</Operation> |
<Extensions>.dylib</Extensions> |
</Platform> |
<Platform Name="OSXARM64"> |
<RemoteDir>Contents\MacOS</RemoteDir> |
<Operation>1</Operation> |
<Extensions>.dylib</Extensions> |
</Platform> |
<Platform Name="Win32"> |
<Operation>0</Operation> |
<Extensions>.dll;.bpl</Extensions> |
</Platform> |
</DeployClass> |
<DeployClass Required="true" Name="DependencyPackage"> |
<Platform Name="iOSDevice32"> |
<Operation>1</Operation> |
<Extensions>.dylib</Extensions> |
</Platform> |
<Platform Name="iOSDevice64"> |
<Operation>1</Operation> |
<Extensions>.dylib</Extensions> |
</Platform> |
<Platform Name="iOSSimARM64"> |
<Operation>1</Operation> |
<Extensions>.dylib</Extensions> |
</Platform> |
<Platform Name="OSX32"> |
<RemoteDir>Contents\MacOS</RemoteDir> |
<Operation>1</Operation> |
<Extensions>.dylib</Extensions> |
</Platform> |
<Platform Name="OSX64"> |
<RemoteDir>Contents\MacOS</RemoteDir> |
<Operation>1</Operation> |
<Extensions>.dylib</Extensions> |
</Platform> |
<Platform Name="OSXARM64"> |
<RemoteDir>Contents\MacOS</RemoteDir> |
<Operation>1</Operation> |
<Extensions>.dylib</Extensions> |
</Platform> |
<Platform Name="Win32"> |
<Operation>0</Operation> |
<Extensions>.bpl</Extensions> |
</Platform> |
</DeployClass> |
<DeployClass Name="File"> |
<Platform Name="Android"> |
<Operation>0</Operation> |
</Platform> |
<Platform Name="Android64"> |
<Operation>0</Operation> |
</Platform> |
<Platform Name="iOSDevice32"> |
<Operation>0</Operation> |
</Platform> |
<Platform Name="iOSDevice64"> |
<Operation>0</Operation> |
</Platform> |
<Platform Name="iOSSimARM64"> |
<Operation>0</Operation> |
</Platform> |
<Platform Name="OSX32"> |
<RemoteDir>Contents\Resources\StartUp\</RemoteDir> |
<Operation>0</Operation> |
</Platform> |
<Platform Name="OSX64"> |
<RemoteDir>Contents\Resources\StartUp\</RemoteDir> |
<Operation>0</Operation> |
</Platform> |
<Platform Name="OSXARM64"> |
<RemoteDir>Contents\Resources\StartUp\</RemoteDir> |
<Operation>0</Operation> |
</Platform> |
<Platform Name="Win32"> |
<Operation>0</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="ProjectAndroidManifest"> |
<Platform Name="Android"> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="Android64"> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="ProjectOSXDebug"> |
<Platform Name="OSX64"> |
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="OSXARM64"> |
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="ProjectOSXEntitlements"> |
<Platform Name="OSX32"> |
<RemoteDir>..\</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="OSX64"> |
<RemoteDir>..\</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="OSXARM64"> |
<RemoteDir>..\</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="ProjectOSXInfoPList"> |
<Platform Name="OSX32"> |
<RemoteDir>Contents</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="OSX64"> |
<RemoteDir>Contents</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="OSXARM64"> |
<RemoteDir>Contents</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="ProjectOSXResource"> |
<Platform Name="OSX32"> |
<RemoteDir>Contents\Resources</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="OSX64"> |
<RemoteDir>Contents\Resources</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="OSXARM64"> |
<RemoteDir>Contents\Resources</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Required="true" Name="ProjectOutput"> |
<Platform Name="Android"> |
<RemoteDir>library\lib\armeabi-v7a</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="Android64"> |
<RemoteDir>library\lib\arm64-v8a</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="iOSDevice32"> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="iOSDevice64"> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="iOSSimARM64"> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="Linux64"> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="OSX32"> |
<RemoteDir>Contents\MacOS</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="OSX64"> |
<RemoteDir>Contents\MacOS</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="OSXARM64"> |
<RemoteDir>Contents\MacOS</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="Win32"> |
<Operation>0</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="ProjectOutput_Android32"> |
<Platform Name="Android64"> |
<RemoteDir>library\lib\armeabi-v7a</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="ProjectUWPManifest"> |
<Platform Name="Win32"> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="Win64"> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="ProjectiOSDeviceDebug"> |
<Platform Name="iOSDevice32"> |
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="iOSDevice64"> |
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="iOSSimARM64"> |
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="ProjectiOSEntitlements"> |
<Platform Name="iOSDevice32"> |
<RemoteDir>..\</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="iOSDevice64"> |
<RemoteDir>..\</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="iOSSimARM64"> |
<RemoteDir>..\</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="ProjectiOSInfoPList"> |
<Platform Name="iOSDevice32"> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="iOSDevice64"> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="iOSSimARM64"> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="ProjectiOSLaunchScreen"> |
<Platform Name="iOSDevice64"> |
<RemoteDir>..\$(PROJECTNAME).launchscreen</RemoteDir> |
<Operation>64</Operation> |
</Platform> |
<Platform Name="iOSSimARM64"> |
<RemoteDir>..\$(PROJECTNAME).launchscreen</RemoteDir> |
<Operation>64</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="ProjectiOSResource"> |
<Platform Name="iOSDevice32"> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="iOSDevice64"> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="iOSSimARM64"> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="UWP_DelphiLogo150"> |
<Platform Name="Win32"> |
<RemoteDir>Assets</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="Win64"> |
<RemoteDir>Assets</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="UWP_DelphiLogo44"> |
<Platform Name="Win32"> |
<RemoteDir>Assets</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="Win64"> |
<RemoteDir>Assets</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="iOS_AppStore1024"> |
<Platform Name="iOSDevice64"> |
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="iOSSimARM64"> |
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="iPad_AppIcon152"> |
<Platform Name="iOSDevice64"> |
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="iOSSimARM64"> |
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="iPad_AppIcon167"> |
<Platform Name="iOSDevice64"> |
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="iOSSimARM64"> |
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="iPad_Launch2x"> |
<Platform Name="iOSDevice64"> |
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="iOSSimARM64"> |
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="iPad_LaunchDark2x"> |
<Platform Name="iOSDevice64"> |
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="iOSSimARM64"> |
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="iPad_Notification40"> |
<Platform Name="iOSDevice64"> |
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="iOSSimARM64"> |
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="iPad_Setting58"> |
<Platform Name="iOSDevice64"> |
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="iOSSimARM64"> |
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="iPad_SpotLight80"> |
<Platform Name="iOSDevice64"> |
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="iOSSimARM64"> |
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="iPhone_AppIcon120"> |
<Platform Name="iOSDevice64"> |
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="iOSSimARM64"> |
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="iPhone_AppIcon180"> |
<Platform Name="iOSDevice64"> |
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="iOSSimARM64"> |
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="iPhone_Launch2x"> |
<Platform Name="iOSDevice64"> |
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="iOSSimARM64"> |
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="iPhone_Launch3x"> |
<Platform Name="iOSDevice64"> |
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="iOSSimARM64"> |
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="iPhone_LaunchDark2x"> |
<Platform Name="iOSDevice64"> |
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="iOSSimARM64"> |
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="iPhone_LaunchDark3x"> |
<Platform Name="iOSDevice64"> |
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="iOSSimARM64"> |
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="iPhone_Notification40"> |
<Platform Name="iOSDevice64"> |
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="iOSSimARM64"> |
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="iPhone_Notification60"> |
<Platform Name="iOSDevice64"> |
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="iOSSimARM64"> |
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="iPhone_Setting58"> |
<Platform Name="iOSDevice64"> |
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="iOSSimARM64"> |
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="iPhone_Setting87"> |
<Platform Name="iOSDevice64"> |
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="iOSSimARM64"> |
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="iPhone_Spotlight120"> |
<Platform Name="iOSDevice64"> |
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="iOSSimARM64"> |
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="iPhone_Spotlight80"> |
<Platform Name="iOSDevice64"> |
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="iOSSimARM64"> |
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<ProjectRoot Platform="Android" Name="$(PROJECTNAME)"/> |
<ProjectRoot Platform="Android64" Name="$(PROJECTNAME)"/> |
<ProjectRoot Platform="iOSDevice32" Name="$(PROJECTNAME).app"/> |
<ProjectRoot Platform="iOSDevice64" Name="$(PROJECTNAME).app"/> |
<ProjectRoot Platform="iOSSimARM64" Name="$(PROJECTNAME).app"/> |
<ProjectRoot Platform="iOSSimulator" Name="$(PROJECTNAME).app"/> |
<ProjectRoot Platform="Linux64" Name="$(PROJECTNAME)"/> |
<ProjectRoot Platform="OSX32" Name="$(PROJECTNAME).app"/> |
<ProjectRoot Platform="OSX64" Name="$(PROJECTNAME).app"/> |
<ProjectRoot Platform="OSXARM64" Name="$(PROJECTNAME).app"/> |
<ProjectRoot Platform="Win32" Name="$(PROJECTNAME)"/> |
<ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/> |
</Deployment> |
<Platforms> |
<Platform value="Win32">True</Platform> |
<Platform value="Win64">False</Platform> |
</Platforms> |
</BorlandProject> |
<ProjectFileVersion>12</ProjectFileVersion> |
</ProjectExtensions> |
<Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/> |
<Import Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj" Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')"/> |
<Import Project="$(MSBuildProjectName).deployproj" Condition="Exists('$(MSBuildProjectName).deployproj')"/> |
</Project> |
/trunk/HT46F47Sim.exe |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/trunk/HT46F47Sim.res |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/trunk/LICENSE |
---|
0,0 → 1,202 |
Apache License |
Version 2.0, January 2004 |
http://www.apache.org/licenses/ |
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION |
1. Definitions. |
"License" shall mean the terms and conditions for use, reproduction, |
and distribution as defined by Sections 1 through 9 of this document. |
"Licensor" shall mean the copyright owner or entity authorized by |
the copyright owner that is granting the License. |
"Legal Entity" shall mean the union of the acting entity and all |
other entities that control, are controlled by, or are under common |
control with that entity. For the purposes of this definition, |
"control" means (i) the power, direct or indirect, to cause the |
direction or management of such entity, whether by contract or |
otherwise, or (ii) ownership of fifty percent (50%) or more of the |
outstanding shares, or (iii) beneficial ownership of such entity. |
"You" (or "Your") shall mean an individual or Legal Entity |
exercising permissions granted by this License. |
"Source" form shall mean the preferred form for making modifications, |
including but not limited to software source code, documentation |
source, and configuration files. |
"Object" form shall mean any form resulting from mechanical |
transformation or translation of a Source form, including but |
not limited to compiled object code, generated documentation, |
and conversions to other media types. |
"Work" shall mean the work of authorship, whether in Source or |
Object form, made available under the License, as indicated by a |
copyright notice that is included in or attached to the work |
(an example is provided in the Appendix below). |
"Derivative Works" shall mean any work, whether in Source or Object |
form, that is based on (or derived from) the Work and for which the |
editorial revisions, annotations, elaborations, or other modifications |
represent, as a whole, an original work of authorship. For the purposes |
of this License, Derivative Works shall not include works that remain |
separable from, or merely link (or bind by name) to the interfaces of, |
the Work and Derivative Works thereof. |
"Contribution" shall mean any work of authorship, including |
the original version of the Work and any modifications or additions |
to that Work or Derivative Works thereof, that is intentionally |
submitted to Licensor for inclusion in the Work by the copyright owner |
or by an individual or Legal Entity authorized to submit on behalf of |
the copyright owner. For the purposes of this definition, "submitted" |
means any form of electronic, verbal, or written communication sent |
to the Licensor or its representatives, including but not limited to |
communication on electronic mailing lists, source code control systems, |
and issue tracking systems that are managed by, or on behalf of, the |
Licensor for the purpose of discussing and improving the Work, but |
excluding communication that is conspicuously marked or otherwise |
designated in writing by the copyright owner as "Not a Contribution." |
"Contributor" shall mean Licensor and any individual or Legal Entity |
on behalf of whom a Contribution has been received by Licensor and |
subsequently incorporated within the Work. |
2. Grant of Copyright License. Subject to the terms and conditions of |
this License, each Contributor hereby grants to You a perpetual, |
worldwide, non-exclusive, no-charge, royalty-free, irrevocable |
copyright license to reproduce, prepare Derivative Works of, |
publicly display, publicly perform, sublicense, and distribute the |
Work and such Derivative Works in Source or Object form. |
3. Grant of Patent License. Subject to the terms and conditions of |
this License, each Contributor hereby grants to You a perpetual, |
worldwide, non-exclusive, no-charge, royalty-free, irrevocable |
(except as stated in this section) patent license to make, have made, |
use, offer to sell, sell, import, and otherwise transfer the Work, |
where such license applies only to those patent claims licensable |
by such Contributor that are necessarily infringed by their |
Contribution(s) alone or by combination of their Contribution(s) |
with the Work to which such Contribution(s) was submitted. If You |
institute patent litigation against any entity (including a |
cross-claim or counterclaim in a lawsuit) alleging that the Work |
or a Contribution incorporated within the Work constitutes direct |
or contributory patent infringement, then any patent licenses |
granted to You under this License for that Work shall terminate |
as of the date such litigation is filed. |
4. Redistribution. You may reproduce and distribute copies of the |
Work or Derivative Works thereof in any medium, with or without |
modifications, and in Source or Object form, provided that You |
meet the following conditions: |
(a) You must give any other recipients of the Work or |
Derivative Works a copy of this License; and |
(b) You must cause any modified files to carry prominent notices |
stating that You changed the files; and |
(c) You must retain, in the Source form of any Derivative Works |
that You distribute, all copyright, patent, trademark, and |
attribution notices from the Source form of the Work, |
excluding those notices that do not pertain to any part of |
the Derivative Works; and |
(d) If the Work includes a "NOTICE" text file as part of its |
distribution, then any Derivative Works that You distribute must |
include a readable copy of the attribution notices contained |
within such NOTICE file, excluding those notices that do not |
pertain to any part of the Derivative Works, in at least one |
of the following places: within a NOTICE text file distributed |
as part of the Derivative Works; within the Source form or |
documentation, if provided along with the Derivative Works; or, |
within a display generated by the Derivative Works, if and |
wherever such third-party notices normally appear. The contents |
of the NOTICE file are for informational purposes only and |
do not modify the License. You may add Your own attribution |
notices within Derivative Works that You distribute, alongside |
or as an addendum to the NOTICE text from the Work, provided |
that such additional attribution notices cannot be construed |
as modifying the License. |
You may add Your own copyright statement to Your modifications and |
may provide additional or different license terms and conditions |
for use, reproduction, or distribution of Your modifications, or |
for any such Derivative Works as a whole, provided Your use, |
reproduction, and distribution of the Work otherwise complies with |
the conditions stated in this License. |
5. Submission of Contributions. Unless You explicitly state otherwise, |
any Contribution intentionally submitted for inclusion in the Work |
by You to the Licensor shall be under the terms and conditions of |
this License, without any additional terms or conditions. |
Notwithstanding the above, nothing herein shall supersede or modify |
the terms of any separate license agreement you may have executed |
with Licensor regarding such Contributions. |
6. Trademarks. This License does not grant permission to use the trade |
names, trademarks, service marks, or product names of the Licensor, |
except as required for reasonable and customary use in describing the |
origin of the Work and reproducing the content of the NOTICE file. |
7. Disclaimer of Warranty. Unless required by applicable law or |
agreed to in writing, Licensor provides the Work (and each |
Contributor provides its Contributions) on an "AS IS" BASIS, |
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or |
implied, including, without limitation, any warranties or conditions |
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A |
PARTICULAR PURPOSE. You are solely responsible for determining the |
appropriateness of using or redistributing the Work and assume any |
risks associated with Your exercise of permissions under this License. |
8. Limitation of Liability. In no event and under no legal theory, |
whether in tort (including negligence), contract, or otherwise, |
unless required by applicable law (such as deliberate and grossly |
negligent acts) or agreed to in writing, shall any Contributor be |
liable to You for damages, including any direct, indirect, special, |
incidental, or consequential damages of any character arising as a |
result of this License or out of the use or inability to use the |
Work (including but not limited to damages for loss of goodwill, |
work stoppage, computer failure or malfunction, or any and all |
other commercial damages or losses), even if such Contributor |
has been advised of the possibility of such damages. |
9. Accepting Warranty or Additional Liability. While redistributing |
the Work or Derivative Works thereof, You may choose to offer, |
and charge a fee for, acceptance of support, warranty, indemnity, |
or other liability obligations and/or rights consistent with this |
License. However, in accepting such obligations, You may act only |
on Your own behalf and on Your sole responsibility, not on behalf |
of any other Contributor, and only if You agree to indemnify, |
defend, and hold each Contributor harmless for any liability |
incurred by, or claims asserted against, such Contributor by reason |
of your accepting any such warranty or additional liability. |
END OF TERMS AND CONDITIONS |
APPENDIX: How to apply the Apache License to your work. |
To apply the Apache License to your work, attach the following |
boilerplate notice, with the fields enclosed by brackets "[]" |
replaced with your own identifying information. (Don't include |
the brackets!) The text should be enclosed in the appropriate |
comment syntax for the file format. We also recommend that a |
file or class name and description of purpose be included on the |
same "printed page" as the copyright notice for easier |
identification within third-party archives. |
Copyright 2018 Daniel Marschall, ViaThinkSoft |
Licensed under the Apache License, Version 2.0 (the "License"); |
you may not use this file except in compliance with the License. |
You may obtain a copy of the License at |
http://www.apache.org/licenses/LICENSE-2.0 |
Unless required by applicable law or agreed to in writing, software |
distributed under the License is distributed on an "AS IS" BASIS, |
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
See the License for the specific language governing permissions and |
limitations under the License. |
/trunk/MainForm.dfm |
---|
0,0 → 1,591 |
object Form2: TForm2 |
Left = 0 |
Top = 0 |
BorderIcons = [biSystemMenu, biMinimize] |
BorderStyle = bsSingle |
Caption = 'HT46F47 Simulator' |
ClientHeight = 662 |
ClientWidth = 851 |
Color = clBtnFace |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clWindowText |
Font.Height = -11 |
Font.Name = 'Tahoma' |
Font.Style = [] |
Position = poScreenCenter |
OnShow = FormShow |
TextHeight = 13 |
object Label20: TLabel |
Left = 24 |
Top = 392 |
Width = 100 |
Height = 13 |
Caption = 'Command Reference' |
end |
object BtnStart: TButton |
Left = 728 |
Top = 253 |
Width = 115 |
Height = 49 |
Caption = 'Run' |
TabOrder = 0 |
OnClick = BtnStartClick |
end |
object BtnStop: TButton |
Left = 728 |
Top = 312 |
Width = 115 |
Height = 49 |
Caption = 'Stop' |
Enabled = False |
TabOrder = 1 |
OnClick = BtnStopClick |
end |
object GroupBox1: TGroupBox |
Left = 728 |
Top = 37 |
Width = 113 |
Height = 169 |
Caption = 'Internal state' |
TabOrder = 2 |
object Label7: TLabel |
Left = 7 |
Top = 24 |
Width = 13 |
Height = 13 |
Caption = 'PC' |
end |
object Label14: TLabel |
Left = 51 |
Top = 138 |
Width = 6 |
Height = 13 |
Caption = '0' |
end |
object Label13: TLabel |
Left = 8 |
Top = 138 |
Width = 29 |
Height = 13 |
Caption = 'Reg D' |
end |
object Label12: TLabel |
Left = 51 |
Top = 119 |
Width = 6 |
Height = 13 |
Caption = '0' |
end |
object Label11: TLabel |
Left = 8 |
Top = 119 |
Width = 29 |
Height = 13 |
Caption = 'Reg C' |
end |
object Label10: TLabel |
Left = 51 |
Top = 100 |
Width = 6 |
Height = 13 |
Caption = '0' |
end |
object Label9: TLabel |
Left = 7 |
Top = 100 |
Width = 28 |
Height = 13 |
Caption = 'Reg B' |
end |
object Label8: TLabel |
Left = 51 |
Top = 24 |
Width = 12 |
Height = 13 |
Caption = '00' |
end |
object Label6: TLabel |
Left = 51 |
Top = 81 |
Width = 6 |
Height = 13 |
Caption = '0' |
end |
object Label5: TLabel |
Left = 7 |
Top = 81 |
Width = 29 |
Height = 13 |
Caption = 'Reg A' |
end |
object Label4: TLabel |
Left = 51 |
Top = 62 |
Width = 12 |
Height = 13 |
Caption = '00' |
end |
object Label3: TLabel |
Left = 7 |
Top = 62 |
Width = 17 |
Height = 13 |
Caption = 'Ret' |
end |
object Label2: TLabel |
Left = 51 |
Top = 43 |
Width = 6 |
Height = 13 |
Caption = '0' |
end |
object Label1: TLabel |
Left = 7 |
Top = 43 |
Width = 28 |
Height = 13 |
Caption = 'Page:' |
end |
end |
object BtnRandom: TButton |
Left = 24 |
Top = 25 |
Width = 75 |
Height = 25 |
Caption = 'Rnd' |
TabOrder = 3 |
OnClick = BtnRandomClick |
end |
object GroupBox2: TGroupBox |
Left = 483 |
Top = 25 |
Width = 225 |
Height = 149 |
Caption = 'Input' |
TabOrder = 4 |
object Label15: TLabel |
Left = 24 |
Top = 67 |
Width = 20 |
Height = 13 |
Caption = 'AD1' |
end |
object Label16: TLabel |
Left = 95 |
Top = 67 |
Width = 20 |
Height = 13 |
Caption = 'AD2' |
end |
object Label17: TLabel |
Left = 24 |
Top = 22 |
Width = 42 |
Height = 13 |
Caption = 'Digital In' |
end |
object CheckBox1: TCheckBox |
Left = 24 |
Top = 36 |
Width = 33 |
Height = 17 |
Caption = '1' |
TabOrder = 0 |
end |
object CheckBox2: TCheckBox |
Left = 63 |
Top = 36 |
Width = 33 |
Height = 17 |
Caption = '2' |
TabOrder = 1 |
end |
object CheckBox3: TCheckBox |
Left = 102 |
Top = 36 |
Width = 33 |
Height = 17 |
Caption = '4' |
TabOrder = 2 |
end |
object CheckBox4: TCheckBox |
Left = 141 |
Top = 36 |
Width = 33 |
Height = 17 |
Caption = '8' |
TabOrder = 3 |
end |
object SpinEdit2: TSpinEdit |
Left = 95 |
Top = 80 |
Width = 65 |
Height = 22 |
MaxValue = 15 |
MinValue = 0 |
TabOrder = 5 |
Value = 0 |
end |
object SpinEdit1: TSpinEdit |
Left = 24 |
Top = 80 |
Width = 65 |
Height = 22 |
MaxValue = 15 |
MinValue = 0 |
TabOrder = 4 |
Value = 0 |
end |
object CheckBox5: TCheckBox |
Left = 24 |
Top = 111 |
Width = 41 |
Height = 17 |
Caption = 'S1' |
TabOrder = 6 |
end |
object CheckBox6: TCheckBox |
Left = 88 |
Top = 111 |
Width = 41 |
Height = 17 |
Caption = 'S2' |
TabOrder = 7 |
end |
end |
object GroupBox3: TGroupBox |
Left = 483 |
Top = 180 |
Width = 225 |
Height = 181 |
Caption = 'Digital Out' |
TabOrder = 5 |
object Label18: TLabel |
Left = 16 |
Top = 24 |
Width = 50 |
Height = 13 |
Caption = 'Digital Out' |
end |
object Label19: TLabel |
Left = 16 |
Top = 90 |
Width = 24 |
Height = 13 |
Caption = 'PWM' |
end |
object Panel1: TPanel |
Left = 16 |
Top = 43 |
Width = 41 |
Height = 41 |
Caption = '1' |
Color = clWhite |
ParentBackground = False |
TabOrder = 0 |
end |
object Panel2: TPanel |
Left = 63 |
Top = 43 |
Width = 41 |
Height = 41 |
Caption = '2' |
Color = clWhite |
ParentBackground = False |
TabOrder = 1 |
end |
object Panel3: TPanel |
Left = 110 |
Top = 43 |
Width = 41 |
Height = 41 |
Caption = '4' |
Color = clWhite |
ParentBackground = False |
TabOrder = 2 |
end |
object Panel4: TPanel |
Left = 157 |
Top = 43 |
Width = 41 |
Height = 41 |
Caption = '8' |
Color = clWhite |
ParentBackground = False |
TabOrder = 3 |
end |
object SpinEdit3: TSpinEdit |
Left = 16 |
Top = 104 |
Width = 65 |
Height = 22 |
TabStop = False |
MaxValue = 15 |
MinValue = 0 |
ReadOnly = True |
TabOrder = 4 |
Value = 0 |
end |
end |
object Memo1: TMemo |
Left = 24 |
Top = 408 |
Width = 433 |
Height = 233 |
Font.Charset = ANSI_CHARSET |
Font.Color = clWindowText |
Font.Height = -11 |
Font.Name = 'Courier New' |
Font.Style = [] |
Lines.Strings = ( |
' 10'#9'LED 0000'#9'PORT 0' |
' 11'#9'LED 0001'#9'PORT 1' |
' 12'#9'LED 0010'#9'PORT 2' |
' 13'#9'LED 0011'#9'PORT 3' |
' 14'#9'LED 0100'#9'PORT 4' |
' 15'#9'LED 0101'#9'PORT 5' |
' 16'#9'LED 0110'#9'PORT 6' |
' 17'#9'LED 0111'#9'PORT 7' |
' 18'#9'LED 1000'#9'PORT 8' |
' 19'#9'LED 1001'#9'PORT 9' |
' 1A'#9'LED 1010'#9'PORT 10' |
' 1B'#9'LED 1011'#9'PORT 11' |
' 1C'#9'LED 1100'#9'PORT 12' |
' 1D'#9'LED 1101'#9'PORT 13' |
' 1E'#9'LED 1110'#9'PORT 14' |
' 1F'#9'LED 1111'#9'PORT 15' |
'' |
' 20'#9'WAIT 1ms' |
' 21'#9'WAIT 2ms' |
' 22'#9'WAIT 5ms' |
' 23'#9'WAIT 10ms' |
' 24'#9'WAIT 20ms' |
' 25'#9'WAIT 50ms' |
' 26'#9'WAIT 100ms' |
' 27'#9'WAIT 200ms' |
' 28'#9'WAIT 500ms' |
' 29'#9'WAIT 1s' |
' 2A'#9'WAIT 2s' |
' 2B'#9'WAIT 5s' |
' 2C'#9'WAIT 10s' |
' 2D'#9'WAIT 20s' |
' 2E'#9'WAIT 30s' |
' 2F'#9'WAIT 60s' |
'' |
' 30'#9'JUMP -0'#9#9'HALT' |
' 31'#9'JUMP -1' |
' 32'#9'JUMP -2' |
' 33'#9'JUMP -3' |
' 34'#9'JUMP -4' |
' 35'#9'JUMP -5' |
' 36'#9'JUMP -6' |
' 37'#9'JUMP -7' |
' 38'#9'JUMP -8' |
' 39'#9'JUMP -9' |
' 3A'#9'JUMP -10' |
' 3B'#9'JUMP -11' |
' 3C'#9'JUMP -12' |
' 3D'#9'JUMP -13' |
' 3E'#9'JUMP -14' |
' 3F'#9'JUMP -15' |
'' |
' 40'#9'SET A=0' |
' 41'#9'SET A=1' |
' 42'#9'SET A=2' |
' 43'#9'SET A=3' |
' 44'#9'SET A=4' |
' 45'#9'SET A=5' |
' 46'#9'SET A=6' |
' 47'#9'SET A=7' |
' 48'#9'SET A=8' |
' 49'#9'SET A=9' |
' 4A'#9'SET A=10' |
' 4B'#9'SET A=11' |
' 4C'#9'SET A=12' |
' 4D'#9'SET A=13' |
' 4E'#9'SET A=14' |
' 4F'#9'SET A=15' |
'' |
' 50' |
' 51'#9'SET B=A' |
' 52'#9'SET C=A' |
' 53'#9'SET D=A' |
' 54'#9'SET Dout=A' |
' 55'#9'SET Dout.0=A.0' |
' 56'#9'SET Dout.1=A.0' |
' 57'#9'SET Dout.2=A.0' |
' 58'#9'SET Dout.3=A.0' |
' 59'#9'SET PWM=A' |
' 5A' |
' 5B' |
' 5C' |
' 5D' |
' 5E' |
' 5F' |
'' |
' 60' |
' 61'#9'SET A=B' |
' 62'#9'SET A=C' |
' 63'#9'SET A=D' |
' 64'#9'SET A=Din' |
' 65'#9'SET A=Din.0' |
' 66'#9'SET A=Din.1' |
' 67'#9'SET A=Din.2' |
' 68'#9'SET A=Din.3' |
' 69'#9'SET A=AD1' |
' 6A'#9'SET A=AD2' |
' 6B' |
' 6C' |
' 6D' |
' 6E' |
' 6F' |
'' |
' 70' |
' 71'#9'SET A=A+1' |
' 72'#9'SET A=A-1' |
' 73'#9'SET A=A+B' |
' 74'#9'SET A=A-B' |
' 75'#9'SET A=A*B' |
' 76'#9'SET A=A/B' |
' 77'#9'SET A=A&B'#9#9#9'AND' |
' 78'#9'SET A=A|B'#9#9#9'OR' |
' 79'#9'SET A=A^B'#9#9#9'XOR' |
' 7A'#9'SET A=~A'#9#9#9'NOT' |
' 7B' |
' 7C' |
' 7D' |
' 7E' |
' 7F' |
'' |
' 80'#9'PAGE 0'#9#9#9#9'Page is used by JUMP, CALL, CTIMES and DTIMES' |
' 81'#9'PAGE 1' |
' 82'#9'PAGE 2' |
' 83'#9'PAGE 3' |
' 84'#9'PAGE 4' |
' 85'#9'PAGE 5' |
' 86'#9'PAGE 6' |
' 87'#9'PAGE 7' |
' 88'#9'PAGE 8' |
' 89'#9'PAGE 9' |
' 8A'#9'PAGE A' |
' 8B'#9'PAGE B' |
' 8C'#9'PAGE C' |
' 8D'#9'PAGE D' |
' 8E'#9'PAGE E' |
' 8F'#9'PAGE F' |
'' |
' 90'#9'JUMP <PAGE>0' |
' 91'#9'JUMP <PAGE>1' |
' 92'#9'JUMP <PAGE>2' |
' 93'#9'JUMP <PAGE>3' |
' 94'#9'JUMP <PAGE>4' |
' 95'#9'JUMP <PAGE>5' |
' 96'#9'JUMP <PAGE>6' |
' 97'#9'JUMP <PAGE>7' |
' 98'#9'JUMP <PAGE>8' |
' 99'#9'JUMP <PAGE>9' |
' 9A'#9'JUMP <PAGE>A' |
' 9B'#9'JUMP <PAGE>B' |
' 9C'#9'JUMP <PAGE>C' |
' 9D'#9'JUMP <PAGE>D' |
' 9E'#9'JUMP <PAGE>E' |
' 9F'#9'JUMP <PAGE>F' |
'' |
' A0'#9'CTIMES <PAGE>0'#9#9#9'IF C>0 THEN ( C=C-1 ; JUMP <PAGE>X ) ELSE C' + |
'ONTINUE' |
' A1'#9'CTIMES <PAGE>1' |
' A2'#9'CTIMES <PAGE>2' |
' A3'#9'CTIMES <PAGE>3' |
' A4'#9'CTIMES <PAGE>4' |
' A5'#9'CTIMES <PAGE>5' |
' A6'#9'CTIMES <PAGE>6' |
' A7'#9'CTIMES <PAGE>7' |
' A8'#9'CTIMES <PAGE>8' |
' A9'#9'CTIMES <PAGE>9' |
' AA'#9'CTIMES <PAGE>A' |
' AB'#9'CTIMES <PAGE>B' |
' AC'#9'CTIMES <PAGE>C' |
' AD'#9'CTIMES <PAGE>D' |
' AE'#9'CTIMES <PAGE>E' |
' AF'#9'CTIMES <PAGE>F' |
'' |
' B0'#9'DTIMES <PAGE>0'#9#9#9'IF D>0 THEN ( D=D-1 ; JUMP <PAGE>X ) ELSE C' + |
'ONTINUE' |
' B1'#9'DTIMES <PAGE>1' |
' B2'#9'DTIMES <PAGE>2' |
' B3'#9'DTIMES <PAGE>3' |
' B4'#9'DTIMES <PAGE>4' |
' B5'#9'DTIMES <PAGE>5' |
' B6'#9'DTIMES <PAGE>6' |
' B7'#9'DTIMES <PAGE>7' |
' B8'#9'DTIMES <PAGE>8' |
' B9'#9'DTIMES <PAGE>9' |
' BA'#9'DTIMES <PAGE>A' |
' BB'#9'DTIMES <PAGE>B' |
' BC'#9'DTIMES <PAGE>C' |
' BD'#9'DTIMES <PAGE>D' |
' BE'#9'DTIMES <PAGE>E' |
' BF'#9'DTIMES <PAGE>F' |
'' |
' C0' |
' C1'#9'SKIP_IF A>B' |
' C2'#9'SKIP_IF A<B' |
' C3'#9'SKIP_IF A=B' |
' C4'#9'SKIP_IF Din.0=1' |
' C5'#9'SKIP_IF Din.1=1' |
' C6'#9'SKIP_IF Din.2=1' |
' C7'#9'SKIP_IF Din.3=1' |
' C8'#9'SKIP_IF Din.0=0' |
' C9'#9'SKIP_IF Din.1=0' |
' CA'#9'SKIP_IF Din.2=0' |
' CB'#9'SKIP_IF Din.3=0' |
' CC'#9'SKIP_IF S1=0' |
' CD'#9'SKIP_IF S2=0' |
' CE'#9'SKIP_IF S1=1' |
' CF'#9'SKIP_IF S2=1' |
'' |
' D0'#9'CALL <PAGE>0' |
' D1'#9'CALL <PAGE>1' |
' D2'#9'CALL <PAGE>2' |
' D3'#9'CALL <PAGE>3' |
' D4'#9'CALL <PAGE>4' |
' D5'#9'CALL <PAGE>5' |
' D6'#9'CALL <PAGE>6' |
' D7'#9'CALL <PAGE>7' |
' D8'#9'CALL <PAGE>8' |
' D9'#9'CALL <PAGE>9' |
' DA'#9'CALL <PAGE>A' |
' DB'#9'CALL <PAGE>B' |
' DC'#9'CALL <PAGE>C' |
' DD'#9'CALL <PAGE>D' |
' DE'#9'CALL <PAGE>E' |
' DF'#9'CALL <PAGE>F' |
'' |
' E0'#9'RET') |
ParentFont = False |
ReadOnly = True |
ScrollBars = ssBoth |
TabOrder = 6 |
end |
object Memo2: TMemo |
Left = 24 |
Top = 56 |
Width = 433 |
Height = 313 |
Font.Charset = ANSI_CHARSET |
Font.Color = clWindowText |
Font.Height = -11 |
Font.Name = 'Courier New' |
Font.Style = [] |
Lines.Strings = ( |
'80 42 52 1F 26 27 10 26 27 A3 42 52 18 27 14 27' |
'12 27 11 27 12 27 14 27 AC 18 27 10 27 91') |
ParentFont = False |
ReadOnly = True |
ScrollBars = ssVertical |
TabOrder = 7 |
WantTabs = True |
end |
end |
/trunk/MainForm.pas |
---|
0,0 → 1,209 |
unit MainForm; |
interface |
uses |
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, |
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls, Vcl.ExtCtrls, |
Vcl.Samples.Spin; |
type |
TForm2 = class(TForm) |
BtnStart: TButton; |
BtnStop: TButton; |
GroupBox1: TGroupBox; |
Label7: TLabel; |
Label14: TLabel; |
Label13: TLabel; |
Label12: TLabel; |
Label11: TLabel; |
Label10: TLabel; |
Label9: TLabel; |
Label8: TLabel; |
Label6: TLabel; |
Label5: TLabel; |
Label4: TLabel; |
Label3: TLabel; |
Label2: TLabel; |
Label1: TLabel; |
BtnRandom: TButton; |
GroupBox2: TGroupBox; |
CheckBox1: TCheckBox; |
CheckBox2: TCheckBox; |
CheckBox3: TCheckBox; |
CheckBox4: TCheckBox; |
GroupBox3: TGroupBox; |
Panel1: TPanel; |
Panel2: TPanel; |
Panel3: TPanel; |
Panel4: TPanel; |
Label15: TLabel; |
Label16: TLabel; |
SpinEdit2: TSpinEdit; |
SpinEdit1: TSpinEdit; |
Label17: TLabel; |
Label18: TLabel; |
SpinEdit3: TSpinEdit; |
Label19: TLabel; |
CheckBox5: TCheckBox; |
CheckBox6: TCheckBox; |
Memo1: TMemo; |
Label20: TLabel; |
Memo2: TMemo; |
procedure BtnStartClick(Sender: TObject); |
procedure BtnStopClick(Sender: TObject); |
procedure FormShow(Sender: TObject); |
procedure BtnRandomClick(Sender: TObject); |
private |
PleaseStop: boolean; |
procedure ResetGui; |
procedure WaitMs(milliseconds: integer); |
end; |
var |
Form2: TForm2; |
implementation |
{$R *.dfm} |
uses |
HT46F47; |
type |
ECodeTooLong = class(Exception); |
{ TForm2 } |
procedure TForm2.WaitMs(milliseconds: integer); |
var |
i: integer; |
begin |
for i := 0 to milliseconds div 10 do |
begin |
Sleep(10); |
Application.ProcessMessages; |
if PleaseStop or Application.Terminated then break; |
end; |
end; |
procedure TForm2.BtnStartClick(Sender: TObject); |
var |
x: THT46F47; |
i, ci: Integer; |
s: string; |
tmp_din: integer; |
resourcestring |
SCodeTooLong = 'Code too long. Max 256 Bytes.'; |
begin |
BtnStart.Enabled := false; |
BtnStop.Enabled := true; |
Memo2.Enabled := false; |
BtnRandom.Enabled := false; |
x := THT46F47.Create; |
try |
x.OnWait := WaitMs; |
s := ''; |
ci := 0; |
for i := 1 to Length(Memo2.Text) do |
begin |
{$IFDEF UNICODE} |
if CharInSet(Memo2.Text[i], ['a'..'f', 'A'..'F', '0'..'9']) then |
{$ELSE} |
if Memo2.Text[i] in ['a'..'f', 'A'..'F', '0'..'9'] then |
{$ENDIF} |
begin |
s := s + Memo2.Text[i]; |
end; |
if Length(s) = 2 then |
begin |
if ci > $FF then raise ECodeTooLong.Create(SCodeTooLong); |
x.ROM[ci] := StrToInt('$'+s); |
s := ''; |
Inc(ci); |
end; |
end; |
while true do |
begin |
{$REGION 'Input stuff'} |
tmp_din := 0; |
if CheckBox1.Checked then Inc(tmp_din, 1); |
if CheckBox2.Checked then Inc(tmp_din, 2); |
if CheckBox3.Checked then Inc(tmp_din, 4); |
if CheckBox4.Checked then Inc(tmp_din, 8); |
x.DIn := tmp_din; |
x.AD1 := SpinEdit1.Value; |
x.AD2 := SpinEdit2.Value; |
x.S1 := CheckBox5.Checked; |
x.S2 := CheckBox6.Checked; |
{$ENDREGION} |
x.Step; |
{$REGION 'Show output stuff (LEDs)'} |
if ((x.PortOut and 1) shr 0) = 1 then Panel1.Color := clRed else Panel1.Color := clMaroon; |
if ((x.PortOut and 2) shr 1) = 1 then Panel2.Color := clRed else Panel2.Color := clMaroon; |
if ((x.PortOut and 4) shr 2) = 1 then Panel3.Color := clRed else Panel3.Color := clMaroon; |
if ((x.PortOut and 8) shr 3) = 1 then Panel4.Color := clRed else Panel4.Color := clMaroon; |
SpinEdit3.Value := x.PWM; |
{$ENDREGION} |
{$REGION 'Debug output: Internal state'} |
Label8.Caption := IntToHex(x.PC, 2); |
Label2.Caption := IntToHex(x.Page, 1); |
Label4.Caption := IntToHex(x.ReturnAddress, 2); |
Label6.Caption := IntToHex(x.RegA, 1); |
Label10.Caption := IntToHex(x.RegB, 1); |
Label12.Caption := IntToHex(x.RegC, 1); |
Label14.Caption := IntToHex(x.RegD, 1); |
{$ENDREGION} |
Application.ProcessMessages; |
if Application.Terminated or PleaseStop then |
begin |
PleaseStop := false; |
Break; |
end; |
end; |
Memo2.Enabled := true; |
BtnRandom.Enabled := true; |
BtnStart.Enabled := true; |
ResetGui; |
finally |
FreeAndNil(x); |
end; |
end; |
procedure TForm2.BtnStopClick(Sender: TObject); |
begin |
BtnStop.Enabled := false; |
PleaseStop := true; |
end; |
procedure TForm2.BtnRandomClick(Sender: TObject); |
var |
i: integer; |
begin |
Memo2.Text := ''; |
for i := $00 to $FF do |
begin |
Memo2.Text := Memo2.Text + IntToHex(Random($100),2) + ' '; |
end; |
Memo2.Text := Trim(Memo2.Text); |
end; |
procedure TForm2.FormShow(Sender: TObject); |
begin |
ResetGui; |
end; |
procedure TForm2.ResetGui; |
begin |
Panel1.Color := clMaroon; |
Panel2.Color := clMaroon; |
Panel3.Color := clMaroon; |
Panel4.Color := clMaroon; |
end; |
end. |
/trunk/Project2.res |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/trunk/README.md |
---|
0,0 → 1,14 |
# HT46F47 programmer for RaspberryPi and Windows simulator |
This repository contains a simulator for the HT46F47 micro chip (only Windows) |
as well as a circuit and Python program how to program the chip using a Raspberry Pi. |
## Raspberry Pi programmer |
More information [here](https://github.com/danielmarschall/ht46f47_simulator/tree/master/RaspberryPi). |
## Simulator download |
[Download for Windows](https://github.com/danielmarschall/ht46f47_simulator/raw/master/HT46F47Sim.exe) |
![Screenshot](https://raw.githubusercontent.com/danielmarschall/ht46f47_simulator/master/Screenshot.png) |
/trunk/RaspberryPi/YouTube_Video.txt |
---|
0,0 → 1,2 |
https://www.youtube.com/watch?v=E8km71o1_8c |
/trunk/RaspberryPi/circuit.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/trunk/RaspberryPi/ht46f47_assembly.txt |
---|
0,0 → 1,257 |
=================================================== |
HT46F47 TPS "Assembly" language by Daniel Marschall |
=================================================== |
---------------------------------------------------- |
Code Assembly Alternative Comment |
---------------------------------------------------- |
10 LED 0000 PORT 0 |
11 LED 0001 PORT 1 |
12 LED 0010 PORT 2 |
13 LED 0011 PORT 3 |
14 LED 0100 PORT 4 |
15 LED 0101 PORT 5 |
16 LED 0110 PORT 6 |
17 LED 0111 PORT 7 |
18 LED 1000 PORT 8 |
19 LED 1001 PORT 9 |
1A LED 1010 PORT 10 |
1B LED 1011 PORT 11 |
1C LED 1100 PORT 12 |
1D LED 1101 PORT 13 |
1E LED 1110 PORT 14 |
1F LED 1111 PORT 15 |
---------------------------------------------------- |
Code Assembly Alternative Comment |
---------------------------------------------------- |
20 WAIT 1ms |
21 WAIT 2ms |
22 WAIT 5ms |
23 WAIT 10ms |
24 WAIT 20ms |
25 WAIT 50ms |
26 WAIT 100ms |
27 WAIT 200ms |
28 WAIT 500ms |
29 WAIT 1s |
2A WAIT 2s |
2B WAIT 5s |
2C WAIT 10s |
2D WAIT 20s |
2E WAIT 30s |
2F WAIT 60s |
---------------------------------------------------- |
Code Assembly Alternative Comment |
---------------------------------------------------- |
30 JUMP -0 HALT |
31 JUMP -1 |
32 JUMP -2 |
33 JUMP -3 |
34 JUMP -4 |
35 JUMP -5 |
36 JUMP -6 |
37 JUMP -7 |
38 JUMP -8 |
39 JUMP -9 |
3A JUMP -10 |
3B JUMP -11 |
3C JUMP -12 |
3D JUMP -13 |
3E JUMP -14 |
3F JUMP -15 |
---------------------------------------------------- |
Code Assembly Alternative Comment |
---------------------------------------------------- |
40 SET A=0 |
41 SET A=1 |
42 SET A=2 |
43 SET A=3 |
44 SET A=4 |
45 SET A=5 |
46 SET A=6 |
47 SET A=7 |
48 SET A=8 |
49 SET A=9 |
4A SET A=10 |
4B SET A=11 |
4C SET A=12 |
4D SET A=13 |
4E SET A=14 |
4F SET A=15 |
---------------------------------------------------- |
Code Assembly Alternative Comment |
---------------------------------------------------- |
50 |
51 SET B=A |
52 SET C=A |
53 SET D=A |
54 SET Dout=A |
55 SET Dout.0=A.0 |
56 SET Dout.1=A.0 |
57 SET Dout.2=A.0 |
58 SET Dout.3=A.0 |
59 SET PWM=A |
5A |
5B |
5C |
5D |
5E |
5F |
---------------------------------------------------- |
Code Assembly Alternative Comment |
---------------------------------------------------- |
60 |
61 SET A=B |
62 SET A=C |
63 SET A=D |
64 SET A=Din |
65 SET A=Din.0 |
66 SET A=Din.1 |
67 SET A=Din.2 |
68 SET A=Din.3 |
69 SET A=AD1 |
6A SET A=AD2 |
6B |
6C |
6D |
6E |
6F |
---------------------------------------------------- |
Code Assembly Alternative Comment |
---------------------------------------------------- |
70 |
71 SET A=A+1 |
72 SET A=A-1 |
73 SET A=A+B |
74 SET A=A-B |
75 SET A=A*B |
76 SET A=A/B |
77 SET A=A&B AND |
78 SET A=A|B OR |
79 SET A=A^B XOR |
7A SET A=~A NOT |
7B |
7C |
7D |
7E |
7F |
---------------------------------------------------- |
Code Assembly Alternative Comment |
---------------------------------------------------- |
80 PAGE 0 Page is used by JUMP, CALL, CTIMES and DTIMES |
81 PAGE 1 |
82 PAGE 2 |
83 PAGE 3 |
84 PAGE 4 |
85 PAGE 5 |
86 PAGE 6 |
87 PAGE 7 |
88 PAGE 8 |
89 PAGE 9 |
8A PAGE A |
8B PAGE B |
8C PAGE C |
8D PAGE D |
8E PAGE E |
8F PAGE F |
---------------------------------------------------- |
Code Assembly Alternative Comment |
---------------------------------------------------- |
90 JUMP <PAGE>0 |
91 JUMP <PAGE>1 |
92 JUMP <PAGE>2 |
93 JUMP <PAGE>3 |
94 JUMP <PAGE>4 |
95 JUMP <PAGE>5 |
96 JUMP <PAGE>6 |
97 JUMP <PAGE>7 |
98 JUMP <PAGE>8 |
99 JUMP <PAGE>9 |
9A JUMP <PAGE>A |
9B JUMP <PAGE>B |
9C JUMP <PAGE>C |
9D JUMP <PAGE>D |
9E JUMP <PAGE>E |
9F JUMP <PAGE>F |
---------------------------------------------------- |
Code Assembly Alternative Comment |
---------------------------------------------------- |
A0 CTIMES <PAGE>0 IF C>0 THEN ( C=C-1 ; JUMP <PAGE>X ) ELSE CONTINUE |
A1 CTIMES <PAGE>1 |
A2 CTIMES <PAGE>2 |
A3 CTIMES <PAGE>3 |
A4 CTIMES <PAGE>4 |
A5 CTIMES <PAGE>5 |
A6 CTIMES <PAGE>6 |
A7 CTIMES <PAGE>7 |
A8 CTIMES <PAGE>8 |
A9 CTIMES <PAGE>9 |
AA CTIMES <PAGE>A |
AB CTIMES <PAGE>B |
AC CTIMES <PAGE>C |
AD CTIMES <PAGE>D |
AE CTIMES <PAGE>E |
AF CTIMES <PAGE>F |
---------------------------------------------------- |
Code Assembly Alternative Comment |
---------------------------------------------------- |
B0 DTIMES <PAGE>0 IF D>0 THEN ( D=D-1 ; JUMP <PAGE>X ) ELSE CONTINUE |
B1 DTIMES <PAGE>1 |
B2 DTIMES <PAGE>2 |
B3 DTIMES <PAGE>3 |
B4 DTIMES <PAGE>4 |
B5 DTIMES <PAGE>5 |
B6 DTIMES <PAGE>6 |
B7 DTIMES <PAGE>7 |
B8 DTIMES <PAGE>8 |
B9 DTIMES <PAGE>9 |
BA DTIMES <PAGE>A |
BB DTIMES <PAGE>B |
BC DTIMES <PAGE>C |
BD DTIMES <PAGE>D |
BE DTIMES <PAGE>E |
BF DTIMES <PAGE>F |
---------------------------------------------------- |
Code Assembly Alternative Comment |
---------------------------------------------------- |
C0 |
C1 SKIP_IF A>B |
C2 SKIP_IF A<B |
C3 SKIP_IF A=B |
C4 SKIP_IF Din.0=1 |
C5 SKIP_IF Din.1=1 |
C6 SKIP_IF Din.2=1 |
C7 SKIP_IF Din.3=1 |
C8 SKIP_IF Din.0=0 |
C9 SKIP_IF Din.1=0 |
CA SKIP_IF Din.2=0 |
CB SKIP_IF Din.3=0 |
CC SKIP_IF S1=0 |
CD SKIP_IF S2=0 |
CE SKIP_IF S1=1 |
CF SKIP_IF S2=1 |
---------------------------------------------------- |
Code Assembly Alternative Comment |
---------------------------------------------------- |
D0 CALL <PAGE>0 |
D1 CALL <PAGE>1 |
D2 CALL <PAGE>2 |
D3 CALL <PAGE>3 |
D4 CALL <PAGE>4 |
D5 CALL <PAGE>5 |
D6 CALL <PAGE>6 |
D7 CALL <PAGE>7 |
D8 CALL <PAGE>8 |
D9 CALL <PAGE>9 |
DA CALL <PAGE>A |
DB CALL <PAGE>B |
DC CALL <PAGE>C |
DD CALL <PAGE>D |
DE CALL <PAGE>E |
DF CALL <PAGE>F |
---------------------------------------------------- |
Code Assembly Alternative Comment |
---------------------------------------------------- |
E0 RET |
FF NONE |
/trunk/RaspberryPi/ht46f47_factoryreset.py |
---|
0,0 → 1,91 |
#!/usr/bin/python3 |
# HT46F47 TPS micro controller programmer in Python |
# by Daniel Marschall |
# Revision 23 May 2020 |
# Licensed under the terms of the Apache 2.0 license |
# This script helps you programming the HT46F47 TPS micro controller |
# The PINs Reset, S1 and S2 are connected to the collectors of transistors, |
# where the emitter is connected to ground and the base is connected to a GPIO pin. |
# Therefore, the Raspberry Pi can control the reset, S1 and S2 functionalities |
# to automatically program the micro controller. |
# Note: If the programming fails, you could try increasing the sleep times. |
# The following values did work for me, but for larger programs, there could be |
# an asynchronity during the programming. |
import RPi.GPIO as GPIO |
import time |
GPIO_S1 = 13 |
GPIO_S2 = 19 |
GPIO_RES = 26 |
GPIO.setwarnings(False) |
GPIO.setmode(GPIO.BCM) |
GPIO.setup(GPIO_S1, GPIO.OUT) |
GPIO.setup(GPIO_S2, GPIO.OUT) |
GPIO.setup(GPIO_RES, GPIO.OUT) |
def do_exit(): |
GPIO.output(GPIO_S1, GPIO.LOW) |
GPIO.output(GPIO_S2, GPIO.LOW) |
GPIO.output(GPIO_RES, GPIO.LOW) |
def signal_handler(signal, frame): |
do_exit() |
sys.exit(0) |
def pressButton(pin): |
# 0.025 ist zu gering... da kommt der controller nicht hinterher |
# 0.050 funktioniert |
GPIO.output(pin, GPIO.HIGH) |
time.sleep(0.050) |
GPIO.output(pin, GPIO.LOW) |
time.sleep(0.050) |
def writeCommandDataPair(befehl, daten): |
#time.sleep(0.050) # Sicherheits-Puffer |
time.sleep(0.300) # Adresse (untere vier Bit) anzeigen, 300ms |
time.sleep(0.300) # Anzeige aus, 300ms |
#time.sleep(0.050) # Befehl anzeigen (Sicherheits-Puffer) |
pressButton(GPIO_S1) # Programmiermodus starten |
for dummy in range(0, befehl): |
pressButton(GPIO_S1) # Befehl eingeben |
pressButton(GPIO_S2) # Weiter zu den Daten |
#time.sleep(0.050) # Daten anzeigen (Sicherheits-Puffer) |
pressButton(GPIO_S1) # Programmiermodus starten |
for dummy in range(0, daten): |
pressButton(GPIO_S1) # Daten eingeben |
pressButton(GPIO_S2) # Fortfahren |
time.sleep(0.600) # Byte einprogrammieren, 600ms |
#time.sleep(0.050) # Sicherheits-Puffer |
def writeByte(byte): |
befehl = byte >> 4 |
daten = byte & 0xF |
writeCommandDataPair(befehl, daten) |
def startProgrammingMode(): |
#time.sleep(0.050) # Sicherheits-Puffer |
GPIO.output(GPIO_S2, GPIO.HIGH); |
pressButton(GPIO_RES) |
time.sleep(0.500) # "etwa eine halbe Sekunde" (Handbuch Seite 19) |
#time.sleep(0.050) # Sicherheits-Puffer |
GPIO.output(GPIO_S2, GPIO.LOW); |
#time.sleep(0.050) # Sicherheits-Puffer |
def resetController(): |
pressButton(GPIO_RES) |
# -------------------------------------------------------------------- |
startProgrammingMode() |
writeByte(0xFF) |
writeByte(0xFF) |
resetController() # Reset controller to run program |
do_exit() |
/trunk/RaspberryPi/ht46f47_program1.py |
---|
0,0 → 1,119 |
#!/usr/bin/python3 |
# HT46F47 TPS micro controller programmer in Python |
# by Daniel Marschall |
# Revision 23 May 2020 |
# Licensed under the terms of the Apache 2.0 license |
# This script helps you programming the HT46F47 TPS micro controller |
# The PINs Reset, S1 and S2 are connected to the collectors of transistors, |
# where the emitter is connected to ground and the base is connected to a GPIO pin. |
# Therefore, the Raspberry Pi can control the reset, S1 and S2 functionalities |
# to automatically program the micro controller. |
# Note: If the programming fails, you could try increasing the sleep times. |
# The following values did work for me, but for larger programs, there could be |
# an asynchronity during the programming. |
import RPi.GPIO as GPIO |
import time |
GPIO_S1 = 13 |
GPIO_S2 = 19 |
GPIO_RES = 26 |
GPIO.setwarnings(False) |
GPIO.setmode(GPIO.BCM) |
GPIO.setup(GPIO_S1, GPIO.OUT) |
GPIO.setup(GPIO_S2, GPIO.OUT) |
GPIO.setup(GPIO_RES, GPIO.OUT) |
def do_exit(): |
GPIO.output(GPIO_S1, GPIO.LOW) |
GPIO.output(GPIO_S2, GPIO.LOW) |
GPIO.output(GPIO_RES, GPIO.LOW) |
def signal_handler(signal, frame): |
do_exit() |
sys.exit(0) |
def pressButton(pin): |
# 0.025 ist zu gering... da kommt der controller nicht hinterher |
# 0.050 funktioniert |
GPIO.output(pin, GPIO.HIGH) |
time.sleep(0.050) |
GPIO.output(pin, GPIO.LOW) |
time.sleep(0.050) |
def writeCommandDataPair(befehl, daten): |
#time.sleep(0.050) # Sicherheits-Puffer |
time.sleep(0.300) # Adresse (untere vier Bit) anzeigen, 300ms |
time.sleep(0.300) # Anzeige aus, 300ms |
#time.sleep(0.050) # Befehl anzeigen (Sicherheits-Puffer) |
pressButton(GPIO_S1) # Programmiermodus starten |
for dummy in range(0, befehl): |
pressButton(GPIO_S1) # Befehl eingeben |
pressButton(GPIO_S2) # Weiter zu den Daten |
#time.sleep(0.050) # Daten anzeigen (Sicherheits-Puffer) |
pressButton(GPIO_S1) # Programmiermodus starten |
for dummy in range(0, daten): |
pressButton(GPIO_S1) # Daten eingeben |
pressButton(GPIO_S2) # Fortfahren |
time.sleep(0.600) # Byte einprogrammieren, 600ms |
#time.sleep(0.050) # Sicherheits-Puffer |
def writeByte(byte): |
befehl = byte >> 4 |
daten = byte & 0xF |
writeCommandDataPair(befehl, daten) |
def startProgrammingMode(): |
#time.sleep(0.050) # Sicherheits-Puffer |
GPIO.output(GPIO_S2, GPIO.HIGH); |
pressButton(GPIO_RES) |
time.sleep(0.500) # "etwa eine halbe Sekunde" (Handbuch Seite 19) |
#time.sleep(0.050) # Sicherheits-Puffer |
GPIO.output(GPIO_S2, GPIO.LOW); |
#time.sleep(0.050) # Sicherheits-Puffer |
def resetController(): |
pressButton(GPIO_RES) |
# -------------------------------------------------------------------- |
startProgrammingMode() |
writeByte(0x80) # 00 PAGE 0 |
writeByte(0x42) # 01(@1) SET A=2 ; "2" means blink 3 times |
writeByte(0x52) # 02 SET C=A |
writeByte(0x1F) # 03(@2) LED 1111 |
writeByte(0x26) # 04 WAIT 100ms |
writeByte(0x27) # 05 WAIT 200ms |
writeByte(0x10) # 06 LED 0000 |
writeByte(0x26) # 07 WAIT 100ms |
writeByte(0x27) # 08 WAIT 200ms |
writeByte(0xA3) # 09 CTIMES <PAGE>3(@2) |
writeByte(0x42) # 0A SET A=2 ; "2" means wander 3 times |
writeByte(0x52) # 0B SET C=A |
writeByte(0x18) # 0C(@3) LED 1000 |
writeByte(0x27) # 0D WAIT 200ms |
writeByte(0x14) # 0E LED 0100 |
writeByte(0x27) # 0F WAIT 200ms |
writeByte(0x12) # 10 LED 0010 |
writeByte(0x27) # 11 WAIT 200ms |
writeByte(0x11) # 12 LED 0001 |
writeByte(0x27) # 13 WAIT 200ms |
writeByte(0x12) # 14 LED 0010 |
writeByte(0x27) # 15 WAIT 200ms |
writeByte(0x14) # 16 LED 0100 |
writeByte(0x27) # 17 WAIT 200ms |
writeByte(0xAC) # 18 CTIMES <PAGE>C(@3) |
writeByte(0x18) # 19 LED 1000 |
writeByte(0x27) # 1A WAIT 200ms |
writeByte(0x10) # 1B LED 0000 |
writeByte(0x27) # 1C WAIT 200ms |
writeByte(0x91) # 1D JUMP <PAGE>1(@1) |
resetController() # Reset controller to run program |
do_exit() |
/trunk/RaspberryPi/ht46f47_reset.py |
---|
0,0 → 1,32 |
#!/usr/bin/python |
import RPi.GPIO as GPIO |
import datetime |
import time |
import sys |
import signal |
import os |
import subprocess |
GPIO_RST = 26 |
GPIO.setwarnings(False) |
GPIO.setmode(GPIO.BCM) |
GPIO.setup(GPIO_RST, GPIO.OUT) |
def do_exit(): |
GPIO.output(GPIO_RST, GPIO.LOW) |
GPIO.cleanup() |
def signal_handler(signal, frame): |
do_exit() |
sys.exit(0) |
signal.signal(signal.SIGINT, signal_handler) |
GPIO.output(GPIO_RST, GPIO.HIGH) |
time.sleep(0.1) |
GPIO.output(GPIO_RST, GPIO.LOW) |
do_exit() |
/trunk/Screenshot.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/trunk/Test.txt |
---|
0,0 → 1,95 |
Testprogramme um Implementierungsdetails zu klären |
================================================== |
# Testprogramm 1: |
# 1. Mit welchem Wert wird A initialisiert? |
# Anzeige fängt mit 0, 1, 2, 4, ... an? Dann wird A mit 0 initialisiert |
# 2. Wird ProgramCounter nach $FF auf $00 zurückspringen? |
# => Anzeige zählt langsam hoch => Überlauf, PC beginnt wieder bei 0 |
# |
# 00: 29 WAIT 1s |
# 01: 71 SET A=A+1 |
# 02: 54 SET Dout=A |
# 03: 00... |
# |
import re |
data='29 71 54 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00' |
data = re.sub(r'[^0-9a-fA-F]+','', data) |
for b in [int(data[i:i+2],16) for i in range(0,len(data),2)]: |
programmiereByte(b) |
------------------ |
# Testprogramm 2: |
# Was passiert bei RET, wenn man bereits gesprungen ist? |
# => Anzeige zählt langsam hoch => RET bleibt gleich (man kommt zum letzten CALL) |
# Anzeige blinkt => RET gilt als NOP |
# Anzeige bleibt bei "1" => RET gilt als 0 |
# |
# 00: 40 SET A=0 |
# 01: DF CALL <PAGE>F |
# 02: 71 SET A=A+1 |
# 03: 29 WAIT 1s |
# 04: 54 SET Dout=A |
# 05: E0 RET |
# 06: 7A SET A=~A |
# 07: 27 WAIT 200ms |
# 08: 54 SET Dout=A |
# 09: 33 JUMP -3 |
# 0A: 00 |
# 0B: 00 |
# 0C: 00 |
# 0D: 00 |
# 0E: 00 |
# 0F: E0 RET |
# |
import re |
data='40 DF 71 29 54 E0 7A 27 54 33 00 00 00 00 00 E0' |
data = re.sub(r'[^0-9a-fA-F]+','', data) |
for b in [int(data[i:i+2],16) for i in range(0,len(data),2)]: |
programmiereByte(b) |
------------------ |
# Testprogramm 3: |
# Was passiert mit RET wenn man nie einen CALL gemacht hat? |
# => Anzeige bleibt bei Zahl 2 => RET wird zu "freeze" |
# Anzeige wechselt zwischen 1 und 2 => RET springt zu adresse 0 |
# Anzeige blinkt => RET wird ignoriert und gilt als NOP |
# |
# 00: 41 SET A=1 |
# 01: 54 SET Dout=A |
# 02: 27 WAIT 200ms |
# 03: 42 SET A=2 |
# 04: 54 SET Dout=A |
# 05: 27 WAIT 200ms |
# 06: E0 RET |
# 07: 7A SET A=~A |
# 08: 27 WAIT 200ms |
# 09: 54 SET Dout=A |
# 0A: 33 JUMP -3 |
# |
import re |
data='41 54 27 42 54 27 E0 7A 27 54 33' |
data = re.sub(r'[^0-9a-fA-F]+','', data) |
for b in [int(data[i:i+2],16) for i in range(0,len(data),2)]: |
programmiereByte(b) |
------------------ |
# Testprogramm 4: |
# Was passiert bei Division durch 0? |
# |
# 40 SET A=0 |
# 51 SET B=A |
# 45 SET A=5 |
# 76 SET A=A/B |
# 54 SET Dout=A |
# 30 JUMP -0 HALT |
# |
import re |
data='40 51 45 76 54 30' |
data = re.sub(r'[^0-9a-fA-F]+','', data) |
for b in [int(data[i:i+2],16) for i in range(0,len(data),2)]: |
programmiereByte(b) |
/trunk/. |
---|
Property changes: |
Added: svn:global-ignores |
+__history |
+*.dcu |
+*.local |
+*.identcache |