OpenCores
URL https://opencores.org/ocsvn/8051/8051/trunk

Subversion Repositories 8051

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /8051/tags/rel_19/sw
    from Rev 185 to Rev 186
    Reverse comparison

Rev 185 → Rev 186

/source/p8051Rom.dof
0,0 → 1,75
[Compiler]
A=1
B=0
C=1
D=1
E=0
F=0
G=1
H=1
I=1
J=1
K=0
L=1
M=0
N=1
O=1
P=1
Q=0
R=0
S=0
T=0
U=0
V=1
W=0
X=1
Y=0
Z=1
ShowHints=1
ShowWarnings=1
UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
[Linker]
MapFile=0
OutputObjs=0
ConsoleApp=1
DebugInfo=0
MinStackSize=16384
MaxStackSize=1048576
ImageBase=4194304
ExeDescription=
[Directories]
OutputDir=
UnitOutputDir=
SearchPath=
Packages=IBEVNT30;VCLDB30;VCL30;VCLX30;VCLDBX30;VCLSMP30;QRPT30;TEEUI30;TEEDB30;TEE30
Conditionals=
DebugSourceDirs=
UsePackages=0
[Parameters]
RunParams=
HostApplication=
[Version Info]
IncludeVerInfo=0
AutoIncBuild=0
MajorVer=1
MinorVer=0
Release=0
Build=0
Debug=0
PreRelease=0
Special=0
Private=0
DLL=0
Locale=1060
CodePage=1250
[Version Info Keys]
CompanyName=
FileDescription=
FileVersion=1.0.0.0
InternalName=
LegalCopyright=
LegalTrademarks=
OriginalFilename=
ProductName=
ProductVersion=1.0.0.0
Comments=
/source/uMain.dcu
0,0 → 1,169
+.TSpeedButtonŠ×° g.TBitBtnj"4hcdExtCtrlsÇc&f TRadioGroup¾µ_jfTPanel02ag .TRadioGroup—†€.g.TPanel ßR%gTCustomRadioGroup.SetItemIndexïÂí#cdStdCtrlsÇc&fTEdit+úb.fTLabelèÐ>²fTMemoá+Ag.TEdit˃òg.TLabelÁ¡_vg.TMemoºüaÜcdDialogsÇc&f TOpenDialog=Åžf TSaveDialogé‡×}g .TOpenDialogÓåbg .TSaveDialogÂXøAgTOpenDialog.GetFileNameïÂí#g ShowMessage>f%ÔcdFormsÇc&fTFormH×Ë)g.TForm!¨ìígTCustomForm.AlignControlsïÂí#gTCustomForm.CreateParamsïÂí#gTCustomForm.CreateWindowHandleïÂí#gTCustomForm.CreateWndïÂí#gTCustomForm.DefaultHandlerïÂí#gTCustomForm.DefinePropertiesïÂí#gTCustomForm.DestroyWindowHandleïÂí#gTCustomForm.GetClientRectïÂí#gTCustomForm.LoadedïÂí#gTCustomForm.NotificationïÂí#gTCustomForm.PaintWindowïÂí#gTCustomForm.ReadStateïÂí#gTCustomForm.SetParentïÂí#gTCustomForm.ValidateRenameïÂí#gTCustomForm.WndProcïÂí#gTCustomForm.CreateïÂí#gTCustomForm.DestroyïÂí#gTCustomForm.SetFocusïÂí#gTCustomForm.WantChildKeyïÂí#gTCustomForm.CloseïÂí#cdControlsÇc&gTWinControl.CreateHandleïÂí#gTWinControl.DestroyWndïÂí#gTWinControl.GetClientOriginïÂí#gTWinControl.GetDeviceContextïÂí#gTWinControl.ShowControlïÂí#gTWinControl.InvalidateïÂí#gTWinControl.RepaintïÂí#gTWinControl.SetBoundsïÂí#gTWinControl.UpdateïÂí#gTControl.GetDragImagesïÂí#gTControl.SetDragModeïÂí#gTControl.SetNameïÂí#gTControl.GetTextïÂí#gTControl.SetTextïÂí#cdGraphicsÇc&cdClassesÇc&fTStringsÔ;¸ÃgTComponent.WriteStateïÂí#gTComponent.SafeCallExceptionïÂí#gTPersistent.AssignToïÂí#gTPersistent.AssignïÂí#f TStringListWùg .TStringList0Ê9ÔcdSysUtilsík…šf Exceptionæÿ_Ôg +.Exception¿Ð€˜g UpperCaseª™WCgStrToIntößogIntToStrößog DateToStr»T> gDate6—ög TimeToStr»T> gTime6—ög +FileExistsûÛ› M4,bytes*,str,@cL(@.G4F<ƒ@¨v,od1q,rgOut,edtIn ‘,edtOut ¡,Label1±,Label2Á,sbInÑ,sbOutá,btnMakeñ,btnExit,sd1,Panel1 +- sbInClickô!- +sbOutClickô-- +ýÜod1àrgOutäedtInèedtOutìLabel1ðLabel2ôsbInøsbOutübtnMakebtnExitsd1Panel1 Memo1 Button1Click btnExitClick btnMakeClick sbInClick +sbOutClick +FormCreate FormDestroyTForm1 TForm1@;uMainU‹ìjjS‹Ø3ÀUh]dÿ0d‰ ‹ƒÜ‹ÿR4„ÀtUø‹ƒÜè‹UøMü‹Ãè3ÀZYYd‰hdEøºèÃéëë[YY]ÃU‹ìƒÄÈSVW3Û‰]؉]Ô‰]Љ]̉]ȉ]ð‰]ì‰Mô‰Uø‰Eü‹Eøè3ÀUh`dÿ0d‰ 3ÒUhdÿ2d‰"²¡è‹ð‹Uø‹Æ‹ÿQXEðè3À‰Eä‹Æ‹ÿRH…ÀŒ¸@‰EÜ3ÛMÔ‹Ó‹Æ‹8ÿW ‹EÔŠPEØè‹UØ‹EüèÁàPMÔ‹Ó‹Æ‹8ÿW ‹EÔŠPEØè‹UØ‹EüèZЉUèMÔ‹Ó‹Æ‹8ÿW ‹EÔŠPEØè‹UØ‹EüèÁàPMÔ‹Ó‹Æ‹8ÿW ‹EÔŠPEØè‹UØ‹EüèÁàZÐRMÔ‹Ó‹Æ‹8ÿW ‹EÔŠPEØè‹UØ‹EüèÁàZÐRMÔ‹Ó‹Æ‹8ÿW ‹EÔŠPEØè‹UØ‹EüèZЉUà‹EàEè…ÀŽŠEÔPMЋӋƋ8ÿW ‹EйºèÿuÔEÐPMÌ‹Ó‹Æ‹8ÿW ‹E̹ºèÿuÐEÌPMÈ‹Ó‹Æ‹8ÿW ‹EÈ‹Mèɺ +èÿuÌEغè‹MØ‹Ó‹Æ‹8ÿW ë¹x‹Ó‹Æ‹ÿS ë +CÿMÜ…Nþÿÿ‹Æ‹ÿR|‹Æ‹ÿRH…ÀŒ”@‰EÜ3ÛMØ‹Ó‹Æ‹8ÿW ‹EØ€8x„vMÔ‹Ó‹Æ‹8ÿW ‹EÔŠPEØè‹UØ‹EüèÁàPMÔ‹Ó‹Æ‹8ÿW ‹EÔŠPEØè‹UØ‹EüèZЉUèMÔ‹Ó‹Æ‹8ÿW ‹EÔŠEØè‹UØ‹EüèÁà PMÔ‹Ó‹Æ‹8ÿW ‹EÔŠPEØè‹UØ‹EüèÁàZÐRMÔ‹Ó‹Æ‹8ÿW ‹EÔŠPEØè‹UØ‹EüèÁàZÐRMÔ‹Ó‹Æ‹8ÿW ‹EÔŠPEØè‹UØ‹EüèZЉUàEìè‹Eä;Eàt‹}à+}äO…ÿ|GE캄èOuðÿuðÿuìEØPMÔ‹Ó‹Æ‹8ÿW ‹EÔ‹MèɺèÿuØEðºè‹EàEè‰EäCÿMÜ…rþÿÿ‹ÆèMØ‹Uä‹Eüè‹UØ‹Eô‹Mðè3ÀZYYd‰ëé#‹@èè3ÀZYYd‰hgEȺèEìºèEøèÃéëÖ_^[‹å]Ãÿÿÿÿxÿÿÿÿ00U‹ìƒÄøS3ɉMø‰Uü‹Eüè3ÀUhdÿ0d‰ Uø‹Eüè‹Eøº,èu +» +é²Uø‹Eüè‹Eøº8èu +ëLUø‹Eüè‹Eøº\èu»ë+Uø‹Eüè‹Eøºhèu»ë +‹Eüè‹Ø3ÀZYYd‰hEøºèÃéëë‹Ã[YY]ÃÿÿÿÿAÿÿÿÿBÿÿÿÿCÿÿÿÿDÿÿÿÿEÿÿÿÿFU‹ìjSVW‹ù‹ò‹Ø‹Eè3ÀUh·dÿ0d‰ Eü‹UŠè‹Uü‹Ãèƒø~‹ÖÁâÓÆ„úƒèë‹ÖÁâÓÆ„úƒø~‹ÖÁâÓÆ„úƒèë‹ÖÁâÓÆ„úƒø~‹ÖÁâÓÆ„úƒèë‹ÖÁâÓÆ„úHu‹ÆÁàÃÆ„øë‹ÆÁàÃÆ„øEü‹UŠRè‹Uü‹Ãèƒø~‹ÖÁâÓÆ„úƒèë‹ÖÁâÓÆ„úƒø~‹ÖÁâÓÆ„úƒèë‹ÖÁâÓÆ„úƒø~‹ÖÁâÓÆ„úƒèë‹ÖÁâÓÆ„úHu‹ÆÁàÃÆ„øë‹ÆÁàÃÆ„ø3ÀZYYd‰h¾EüèEèÃéëè_^[Y]ÂU‹ìƒÄìSVW3ɉMì‰Uü‹ð3ÀUhdÿ0d‰ ‹Eü…ÀŒÎ@‰EðÇEø3Û3À‰Eô‹EøÁàÆ€¼(tƒEô‹EøÁàÆ€¼ tƒEô‹EøÁàÆ€¼tƒEô‹EøÁàÆ€¼tÿEô3À‹UøÁâÖÂÆ„@ƒøuæMì‹Uô‹Æè‹Uì‹}øÁçþ‹Œ˜0þ„˜0èCƒû…KÿÿÿÿEøÿMð…=ÿÿÿ3ÀZYYd‰hEìèÃéëð_^[‹å]ÃSV‹ñ‹Ú‹ÃƒÀöƒøwyÿ$…zk\M>/‹Æº è^[Ëƺ¬è^[Ëƺ¸è^[ËƺÄè^[ËƺÐè^[ËƺÜè^[Ë֋Ãè^[ÃÿÿÿÿfÿÿÿÿeÿÿÿÿdÿÿÿÿcÿÿÿÿbÿÿÿÿaU‹ìjjjjjjjSVW‹Ù‰Uø‰Eü‹Eøè3ÀUh|dÿ0d‰ ‹Ã‹ÿR@3ҋËÿQ4º”‹Ã‹ÿQ4º ‹Ã‹ÿQ4ºÈ‹Ã‹ÿQ4º”‹Ã‹ÿQ4Uè‹Eü‹€äè‹MèEìºè‹Uì‹Ã‹ÿQ4èƒÄøÝ$›Eäè‹MäEìºè‹Uì‹Ã‹ÿQ4èƒÄøÝ$›Eäè‹MäEìº0è‹Uì‹Ã‹ÿQ4º”‹Ã‹ÿQ43ҋËÿQ4ºD‹Ã‹ÿQ43ҋËÿQ4hEäP¹º‹Eøè‹EäèUäèÿuäh°Eìºè‹Uì‹Ã‹ÿQ43ҋËÿQ4º¼‹Ã‹ÿQ4ºÔ‹Ã‹ÿQ4ºð‹Ã‹ÿQ4º‹Ã‹ÿQ4º4‹Ã‹ÿQ4ºH‹Ã‹ÿQ4ºp‹Ã‹ÿQ4º”‹Ã‹ÿQ43ҋËÿQ4º¨‹Ã‹ÿQ43ҋËÿQ4º¼‹Ã‹ÿQ43ҋËÿQ4ºè‹Ã‹ÿQ4ºø‹Ã‹ÿQ4º‹Ã‹ÿQ4º0‹Ã‹ÿQ4ºP‹Ã‹ÿQ43ҋËÿQ4EøP‹Eøè‹Èƒéº‹Eøè‹EøèÑøyƒÐH…ÀŒ@‰Eð3ÿEôº\èMì‹×…ÒyÂÿÁú ‹Eüè‹UìEôè‹÷æÿ€yNÎðÿÿFMì‹Ö…ÒyÂÿÁú‹Eüè‹UìEôèæÿ€yNÎÿÿÿFÿuôhtMì‹Ö…ÒyƒÂÁú‹EüèÿuìMä‹Öâ€yJƒÊðB‹EüèÿuäEôºèEôº€èÿuôEìP‹×ÒB¹‹Eøèÿuìh°Eôºè‹Uô‹Ã‹ÿQ4GÿMð…ìþÿÿº‹Ã‹ÿQ43ҋËÿQ4ºœ‹Ã‹ÿQ4ºø‹Ã‹ÿQ4º¼‹Ã‹ÿQ4ºà‹Ã‹ÿQ4º‹Ã‹ÿQ4º‹Ã‹ÿQ43ҋËÿQ4º0‹Ã‹ÿQ4º`‹Ã‹ÿQ4ºt‹Ã‹ÿQ4º”‹Ã‹ÿQ43ҋËÿQ4º¸‹Ã‹ÿQ43ÀZYYd‰hƒEäèEèèEìèEôºèÃéëÓ_^[‹å]Ãÿÿÿÿ///ÿÿÿÿ/// created by oc8051 rom makerÿÿÿÿ./// author: Simon Teran (simont@opencores.org)ÿÿÿÿ/// source file: ÿÿÿÿ +/// date: ÿÿÿÿ +/// time: ÿÿÿÿ@module oc8051_rom (rst, clk, addr, ea_int, data1, data2, data3);ÿÿÿÿparameter INT_ROM_WID= ÿÿÿÿ;ÿÿÿÿinput rst, clk;ÿÿÿÿinput [15:0] addr;ÿÿÿÿoutput ea_int;ÿÿÿÿ!output [7:0] data1, data2, data3;ÿÿÿÿ reg ea_int;ÿÿÿÿreg [7:0] data1, data2, data3;ÿÿÿÿreg [7:0] buff [65535:0];ÿÿÿÿ +integer i;ÿÿÿÿwire ea;ÿÿÿÿ#assign ea = | addr[15:INT_ROM_WID];ÿÿÿÿinitialÿÿÿÿbeginÿÿÿÿ for (i=0; i<65536; i=i+1)ÿÿÿÿ buff [i] = 8'h00;ÿÿÿÿ#2ÿÿÿÿ buff [16'hÿÿÿÿ_ÿÿÿÿ] = 8'hÿÿÿÿendÿÿÿÿalways @(posedge clk)ÿÿÿÿ data1 <= #1 buff [addr];ÿÿÿÿ data2 <= #1 buff [addr+1];ÿÿÿÿ data3 <= #1 buff [addr+2];ÿÿÿÿ$always @(posedge clk or posedge rst)ÿÿÿÿ if (rst)ÿÿÿÿ ea_int <= #1 1'b1;ÿÿÿÿ else ea_int <= #1 !ea;ÿÿÿÿ endmoduleU‹ìQ¹jjIuùQ‡MüSVW‹ñ‰Uø‰Eü‹Eøè3ÀUhü dÿ0d‰ 3Ò‹Æ‹ÿQ4º +‹Æ‹ÿQ4º +‹Æ‹ÿQ4ºH +‹Æ‹ÿQ4º +‹Æ‹ÿQ4UÜ‹Eü‹€äè‹MÜE຀ +è‹Uà‹Æ‹ÿQ4èƒÄøÝ$›EØè‹MØEຜ +è‹Uà‹Æ‹ÿQ4èƒÄøÝ$›EØè‹MØEະ +è‹Uà‹Æ‹ÿQ4º +‹Æ‹ÿQ43Ò‹Æ‹ÿQ4EèèEàP¹º‹Eøè‹EàèH‰EôºÄ +‹Æ‹ÿQ4‹Uôƒê‹EüèHƒèŒ•@‰EäÇEðhUØ‹EðèÿuØh,UÔ‹EðèÿuÔh<UЋEôèÿuÐhTUÌ‹EôƒèèÿuÌh`UÈ‹EðèÿuÈhxEຠè‹Uà‹Æ‹ÿQ4ÿEðÿMä…vÿÿÿ3Ò‹Æ‹ÿQ4º„‹Æ‹ÿQ4º ‹Æ‹ÿQ4º°‹Æ‹ÿQ4hÌUØ‹EôèÿuØhTUÔ‹]ôƒë‹ÃèÿuÔhìEàºè‹Uà‹Æ‹ÿQ4º‹Æ‹ÿQ4hÌUØ‹EôèÿuØhTUÔ‹ÃèÿuÔhEàºè‹Uà‹Æ‹ÿQ4º‹Æ‹ÿQ43Ò‹Æ‹ÿQ4º(‹Æ‹ÿQ4º4‹Æ‹ÿQ4º\‹Æ‹ÿQ4º ‹Æ‹ÿQ4h|UØ‹]ôƒë‹ÃèÿuØh”Eàºè‹Uà‹Æ‹ÿQ4‹Ó‹EüèH…ÀŒ%@‰EäÇEðh¤UØ‹EôƒèèÿuØh´UÔ‹EðèÿuÔhÀEàºè‹Uà‹Æ‹ÿQ4hÐUØ‹EðèÿuØhL Eàºè‹Uà‹Æ‹ÿQ4hô‹]ôƒë‹Ó‹EüèP‹Eð@Z‹Ê™÷ù‹ÂUØèÿuØhL Eàºè‹Uà‹Æ‹ÿQ4h‹Ó‹EüèP‹EðƒÀZ‹Ê™÷ù‹ÂUØèÿuØhL Eàºè‹Uà‹Æ‹ÿQ4º<‹Æ‹ÿQ4ÿEðÿMä…æþÿÿºL‹Æ‹ÿQ4ºh‹Æ‹ÿQ4ºŒ‹Æ‹ÿQ4º°‹Æ‹ÿQ4º<‹Æ‹ÿQ4ºÔ‹Æ‹ÿQ4º‹Æ‹ÿQ43Ò‹Æ‹ÿQ4ºè‹Æ‹ÿQ4º‹Æ‹ÿQ4º,‹Æ‹ÿQ4ºL‹Æ‹ÿQ43Ò‹Æ‹ÿQ4ºX ‹Æ‹ÿQ43Ò‹Æ‹ÿQ43Ò‹Æ‹ÿQ4EøP‹Eøè‹Èƒéº‹Eøè‹Uôƒê‹EüèH…À|+@‰Eä3ÿ3Û‹ÇÁà‹Uü„˜0èCƒûuãGÿMäuÛ3ÿ3Û‹EøèÑøyƒÐH…ÀŒŠ@‰EäÇEðEàP‹UðÒB¹‹Eøè‹EàP‹Ë‹×‹Eüèƒûu2‹Uôƒê‹EüèH;øu‹Uôƒê‹Eüè‹ÐJ‹Eüè3ÿ3Ûë‹Uôƒê‹EüèH;øuC3ÿëGÿEðÿMäu‹Uôƒê‹Eüè‹ÐJ‹EüèEèè‹Eü‹€0èƒø‰EðEèºpèÿEðƒ}ðuêEìè3À‰Eðÿuìh|Uà‹EðèÿuàhˆEìºèÿEðƒ}ðuÏ‹Uôƒê‹EüèH…ÀŒù@‰Eä3ÿUØ‹Çè‹MØEດè‹Uà‹Æ‹ÿQ4h¤UØ‹ÇèÿuØh¸Eàºè‹Uà‹Æ‹ÿQ4ºÈ‹Æ‹ÿQ4ºà‹Æ‹ÿQ43ÛhøUØ‹ÃèÿuØh UÔ‹ÃèÿuÔhˆÿuìhÿuè‹ÇÁà‹UüÂÿ´˜0hDEຠ+ÿÿÿ3ÀZYYd‰h +EȺèEÜèEàèEèºèEøèÃéëÆ_^[‹å]Ãÿÿÿÿ///ÿÿÿÿ/// created by oc8051 rom makerÿÿÿÿ./// author: Simon Teran (simont@opencores.org)ÿÿÿÿ/// source file: ÿÿÿÿ +/// date: ÿÿÿÿ +/// time: ÿÿÿÿXmodule ROM32X1(O, A0, A1, A2, A3, A4); // synthesis syn_black_box syn_resources="luts=2"ÿÿÿÿ output O;ÿÿÿÿinput Aÿÿÿÿ;ÿÿÿÿ endmoduleÿÿÿÿ//rom for 8051 processorÿÿÿÿ@module oc8051_rom (rst, clk, addr, ea_int, data1, data2, data3);ÿÿÿÿparameter INT_ROM_WID= ÿÿÿÿinput rst, clk;ÿÿÿÿinput [15:0] addr;ÿÿÿÿoutput ea_int;ÿÿÿÿ!output [7:0] data1, data2, data3;ÿÿÿÿ reg ea_int;ÿÿÿÿreg [4:0] addr01;ÿÿÿÿreg [7:0] data1, data2, data3;ÿÿÿÿwire ea;ÿÿÿÿwire [15:0] addr_rst;ÿÿÿÿ5wire [7:0] int_data0, int_data1, int_data2, int_data3ÿÿÿÿ +, int_dataÿÿÿÿ#assign ea = | addr[15:INT_ROM_WID];ÿÿÿÿ(assign addr_rst = rst ? 16'h0000 : addr;ÿÿÿÿ) rom0 rom_0 (.a(addr01), .o(int_data0));ÿÿÿÿ) rom1 rom_1 (.a(addr01), .o(int_data1));ÿÿÿÿ romÿÿÿÿ rom_ÿÿÿÿ (.a(addr_rst[ÿÿÿÿ:ÿÿÿÿ]), .o(int_dataÿÿÿÿ));ÿÿÿÿalways @(addr_rst)ÿÿÿÿbeginÿÿÿÿ if (addr_rst[1])ÿÿÿÿ addr01= addr_rst[ÿÿÿÿ]+ 5'h1;ÿÿÿÿ elseÿÿÿÿ];ÿÿÿÿendÿÿÿÿ//ÿÿÿÿ// always read tree bits in rowÿÿÿÿalways @(posedge clk)ÿÿÿÿ case(addr[ÿÿÿÿ:0])ÿÿÿÿ ÿÿÿÿ'dÿÿÿÿ: beginÿÿÿÿ data1 <= #1 int_dataÿÿÿÿ data2 <= #1 int_dataÿÿÿÿ data3 <= #1 int_dataÿÿÿÿ endÿÿÿÿ default: beginÿÿÿÿ data1 <= #1 8'h00;ÿÿÿÿ data2 <= #1 8'h00;ÿÿÿÿ data3 <= #1 8'h00;ÿÿÿÿ endcaseÿÿÿÿ$always @(posedge clk or posedge rst)ÿÿÿÿ if (rst)ÿÿÿÿ ea_int <= #1 1'b1;ÿÿÿÿ else ea_int <= #1 !ea;ÿÿÿÿ0ÿÿÿÿ,a[ÿÿÿÿ]ÿÿÿÿ//romÿÿÿÿ +module romÿÿÿÿ (o,a);ÿÿÿÿinput [4:0] a;ÿÿÿÿoutput [7:0] o;ÿÿÿÿ ROM32X1 uÿÿÿÿ (o[ÿÿÿÿ) /* synthesis xc_props="INIT=ÿÿÿÿ" */;èÃU‹ìjjjSV‹Ø3ÀUhSdÿ0d‰ Uø‹ƒäè‹Eøè„Àu$4F))F@5)Ð Ò5Zà55  +Ö(âjäi<äi@äi<äiBäiBäilÚJÚJÚ æ&5Èäi<äi>äi<äiBäiBäiâ85 +èVÚ æ4Þ9êì¦5B +î5ÐÐâ ÒNi&ài"¨i +ò.¨i +ò.¨i +ò(¨i +ò(¨i +ò(¨i +ò"ªiÐ Òªy$ày&äiÅäiÁyââ Ò‘.‘­DêF‘â Ò­&­­­­­­­­ +ø­ +ø­ +ø­ +ø­ +ø­ +ø¬¤½@à½6½½½½0Œ½ +ê°®½ +ê´²½ +ê½*½*½,Úª¬½æ0½½½½½½½½*½*½*½½½½½8ü$Úü<½ +ø4­èX­è0½.­:­ æ½ +è2Ú½æ2½*½½½½½½*½½½½*½(½âââÐ ÒÙFàÙ(ÙÙÙÙ0ŒÙ +ê°®Ù +ê´²Ù +êÙ0â,ÚªÙÙ"Ù¬Ùæ0Ù*Ù*Ù*Ù,Úª¬Ùæ0ÙÙÙÙÙÙÙ*ÙÙÙ +øI2Ù¬ æ Ùê0Ù*Ù*ÙÙ*I4٬٬٬٬٬ÙæHÙÙÙÙ¬Ù ¬ÙæÙ٬٬ÙæÙ*ÙÙÙÙÙ ¬Ùæ(I2٬٬ÙæÙ¬ÙæÙ I*¬ÙæÙI.¬ÙæÙ0ÙÙÙÙÙÙÙ*ÙÙÙÙ*ÙJü$ÚIHâ0üdÚ y&I&I‘(IBI‘âü Ù +è"âÙ¬Ùæ.I2¬Ù +êÙ¬ÙæÙÙ٬٬ÙÙ4Ùæ*ÙNÙÐââÐâ Ò=!p +æ¦ +¸ +¦ +¸ +  +Ö Œ5H½Ù}Œ"Þ + +âââ Ò¸!!N@ŽB@ü$@Ú! +èŽ(@ü$@Ú! +èŽ!Ð ÒL--F@Ž-â Ò9ì9 +ø9 +ø9 +ø9 +ø9 +ø9 +ø9 +ø9 +ø9 +ø9 +øþI0]]] +] +] +Ž] +] +Ž] +] &] +] +"Þ]â ÒÔmmm + Œm +mŒm +m$m +mÞmâ ÒÐ}4à}$}}}}*Œ} +ê°®} +ê´²} +ê}&ü$ÚüZÚ:}ââââ Òý‘‘%‘ Ò•% •É~ +0z +~ +,¨±)î,0¨­þpènˆBJHHBBBB\šH. +  +  +  +  +  + $ 0 +  +  +  +  +  + $jB, +...,8^îêL R œdV\\”<<J$J ˜\ì +Œ jV\\D +þd ””4FþŽ‚h<Š^’Šô<2.ü +ø +FN02&è +2Xl:H\Äü +ì %! + +6¬T600n¬0&8®î@,rà +ö +$.&JJ@PHÈ.&FF<HÄXP\\<<þHp¹‘E’.4$F“”ø)@-0-Èþ5 pprE¶U!U¹þUÁUéþU] U•þE±þi 2yÀp2}HH…H +vñþÙÝþ}ùþùþ…ùþ‘`(p•B¡r¡¹þ•]þ­€0µ ¹ µ^þµ%µIþ¹Iþ½€8p2ÉdÍ) + +þÙÁpp2åjñY +õaõÕþñíþñõ +õýõ…þñ…þññ +õ ñM þña +õ… þñ… þñ%# +(þ@ +`06¥qþþ!@%0%‘þ-@1,1¼þ9`EAAæþEõþI`QU +U.þQ.þ]`0a.iTañþiþm`0q.yTq9þyÉþ}`(02‰XX-þ‰-þ‘ • a \ No newline at end of file
/source/uMain.pas
0,0 → 1,528
unit uMain;
 
interface
 
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, Buttons, inifiles;
 
type
tbytes = array [0..3] of array [0..7] of boolean;
tstr = array [0..7] of string;
tRom = record
bytes: tbytes;
str: tstr;
end;
 
TForm1 = class(TForm)
od1: TOpenDialog;
rgOut: TRadioGroup;
edtIn: TEdit;
edtOut: TEdit;
Label1: TLabel;
Label2: TLabel;
sbIn: TSpeedButton;
sbOut: TSpeedButton;
btnMake: TBitBtn;
btnExit: TBitBtn;
sd1: TSaveDialog;
Panel1: TPanel;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
procedure btnExitClick(Sender: TObject);
procedure btnMakeClick(Sender: TObject);
procedure sbInClick(Sender: TObject);
procedure sbOutClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
roms: array [0..2047] of tRom;
function makeV(hFile:string): string;
function hexToInt (hex:string):integer;
function intToHex (int:integer):string;
function inToBits (int:integer): string;
procedure addB(rom, byt: integer; num:string);
procedure addS(romN:integer);
procedure simul (hex: string; str: tstrings);
procedure simulIn (hex: string; str: tstrings);
procedure syn (hex: string; str: tstrings);
function n2 (n: integer):integer;
public
{ Public declarations }
end;
 
var
Form1: TForm1;
 
implementation
 
{$R *.DFM}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
if od1.Execute then
makeV(od1.FileName);
end;
 
//
function TForm1.makeV(hFile:string): string;
var str: TstringList;
res, s: string;
j, i, byts: integer;
oaddr, naddr: longint;
begin
try
str:= tstringlist.create;
str.LoadFromFile(hFile);
res:= '';
oaddr:=0;
 
for i:=0 to str.Count-1 do begin
byts:=(hexToInt(str[i][2])*16)+hexToInt(str[i][3]);
naddr:=(hexToInt(str[i][4])*64)+(hexToInt(str[i][5])*32)+(hexToInt(str[i][6])*16)+hexToInt(str[i][7]);
if ((naddr+byts)>0) then
str[i]:=copy(str[i], 4, 4)+copy(str[i], 2, 2)+copy(str[i], 10,byts*2)
else begin
str[i]:='x';
break;
end;
end;
str.sort;
 
for i:=0 to str.Count-1 do begin
if str[i][1]='x' then break;
byts:=(hexToInt(str[i][5])*16)+hexToInt(str[i][6]);
naddr:=(hexToInt(str[i][1])*4096)+(hexToInt(str[i][2])*256)+(hexToInt(str[i][3])*16)+hexToInt(str[i][4]);
s:='';
if oaddr<>naddr then begin
for j:=0 to naddr-oaddr-1 do begin
s:= s+'00';
end;
end;
res:=res+s+copy(str[i], 7,byts*2);
oaddr:= naddr+byts
end;
str.free;
result:=inToBits(oaddr)+res;
except
on e:exception do showmessage(e.message)
end
end;
 
function TForm1.hexToInt (hex:string):integer;
begin
if UpperCase(hex)='A' then begin result:= 10; exit end;
if UpperCase(hex)='B' then begin result:= 11; exit end;
if UpperCase(hex)='C' then begin result:= 12; exit end;
if UpperCase(hex)='D' then begin result:= 13; exit end;
if UpperCase(hex)='E' then begin result:= 14; exit end;
if UpperCase(hex)='F' then begin result:= 15; exit end;
result:= strToInt(hex)
end;
 
procedure TForm1.addB(rom, byt: integer; num:string);
var int: integer;
begin
 
int:=hexToInt(num[1]);
if int>7 then begin
roms[rom].bytes[byt][7]:=true;
int:= int-8;
end else
roms[rom].bytes[byt][7]:=false;
if int>3 then begin
roms[rom].bytes[byt][6]:=true;
int:= int-4;
end else
roms[rom].bytes[byt][6]:=false;
if int>1 then begin
roms[rom].bytes[byt][5]:=true;
int:= int-2;
end else
roms[rom].bytes[byt][5]:=false;
if int=1 then begin
roms[rom].bytes[byt][4]:=true;
end else
roms[rom].bytes[byt][4]:=false;
 
int:=hexToInt(num[2]);
if int>7 then begin
roms[rom].bytes[byt][3]:=true;
int:= int-8;
end else
roms[rom].bytes[byt][3]:=false;
if int>3 then begin
roms[rom].bytes[byt][2]:=true;
int:= int-4;
end else
roms[rom].bytes[byt][2]:=false;
if int>1 then begin
roms[rom].bytes[byt][1]:=true;
int:= int-2;
end else
roms[rom].bytes[byt][1]:=false;
if int=1 then begin
roms[rom].bytes[byt][0]:=true;
end else
roms[rom].bytes[byt][0]:=false;
 
end;
 
procedure TForm1.addS(romN:integer);
var r, i, j, num: integer;
begin
for r:=0 to romN do begin
for i:=0 to 7 do begin
num:=0;
if roms[r].bytes[3][i] then num:=num+8;
if roms[r].bytes[2][i] then num:=num+4;
if roms[r].bytes[1][i] then num:=num+2;
if roms[r].bytes[0][i] then num:=num+1;
for j:=0 to 3 do roms[r].bytes[j][i]:= false;
//if r=0 then memo1.lines.add(intToHex(num));
roms[r].Str[i]:=intToHex(num)+roms[r].Str[i];
end;
end;
end;
 
function TForm1.intToHex (int:integer):string;
begin
case int of
15: result:='f';
14: result:='e';
13: result:='d';
12: result:='c';
11: result:='b';
10: result:='a';
else
result:=IntToStr(int);
end;
end;
 
procedure TForm1.simul (hex: string; str: tstrings);
var i, j: integer;
// str: tstrings;
s: string;
begin
str.Clear;
 
str.Add('');
str.Add('///');
str.Add('/// created by oc8051 rom maker');
str.Add('/// author: Simon Teran (simont@opencores.org)');
str.Add('///');
str.Add('/// source file: '+edtIn.Text);
str.Add('/// date: '+ datetoStr(date));
str.Add('/// time: '+ timeToStr(time));
str.Add('///');
str.Add('');
str.Add('module oc8051_rom (rst, clk, addr, ea_int, data1, data2, data3);');
str.Add('');
str.Add('parameter INT_ROM_WID= '+intToStr(strToInt(copy(hex,1,2))) +';');
str.Add('');
str.Add('input rst, clk;');
str.Add('input [15:0] addr;');
str.Add('output ea_int;');
str.Add('output [7:0] data1, data2, data3;');
str.Add('reg ea_int;');
str.Add('reg [7:0] data1, data2, data3;');
str.Add('reg [7:0] buff [65535:0];');
str.Add('integer i;');
str.Add('');
str.Add('wire ea;');
str.Add('');
str.Add('assign ea = | addr[15:INT_ROM_WID];');
str.Add('');
str.Add('initial');
str.Add('begin');
str.Add(' for (i=0; i<65536; i=i+1)');
str.Add(' buff [i] = 8''h00;');
str.Add('#2');
str.Add('');
 
hex := copy(hex,3,length(hex)-2);
for i:=0 to (length(hex) div 2)-1 do begin
s:=' buff [16''h';
s:=s+intToHex(i div 4096);
j:=i mod 4096;
s:=s+intToHex(j div 256);
j:=j mod 256;
s:=s+'_'+intToHex(j div 16)+intToHex(j mod 16);
S:=s+'] = 8''h';
S:=s+copy(Hex,(i*2)+1,2)+';';
str.Add(s);
end;
 
str.Add('end');
str.Add('');
str.Add('always @(posedge clk)');
str.Add('begin');
str.Add(' data1 <= #1 buff [addr];');
str.Add(' data2 <= #1 buff [addr+1];');
str.Add(' data3 <= #1 buff [addr+2];');
str.Add('end');
str.Add('');
str.Add('always @(posedge clk or posedge rst)');
str.Add(' if (rst)');
str.Add(' ea_int <= #1 1''b1;');
str.Add(' else ea_int <= #1 !ea;');
str.Add('');
str.Add('endmodule');
 
// memo1.Lines.Clear;
// memo1.Lines.AddStrings(str);
 
end;
 
procedure TForm1.syn (hex: string; str: tstrings);
var addrw, i, cntR, cntB:integer;
tmp, astr: string;
// str:tstrings;
begin
str.Add('');
str.Add('///');
str.Add('/// created by oc8051 rom maker');
str.Add('/// author: Simon Teran (simont@opencores.org)');
str.Add('///');
str.Add('/// source file: '+edtIn.Text);
str.Add('/// date: '+ datetoStr(date));
str.Add('/// time: '+ timeToStr(time));
str.Add('///');
str.Add('');
astr:= '';
addrw:=strToInt(copy(hex,1,2))-1;
str.add('module ROM32X1(O, A0, A1, A2, A3, A4); // synthesis syn_black_box syn_resources="luts=2"');
str.add('output O;');
for i:= 0 to 4 do
str.add('input A'+IntToStr(i)+';');
str.add('endmodule');
str.add('');
str.add('//rom for 8051 processor');
str.add('');
 
str.Add('module oc8051_rom (rst, clk, addr, ea_int, data1, data2, data3);');
str.Add('');
str.Add('parameter INT_ROM_WID= '+intToStr(strToInt(copy(hex,1,2))) +';');
str.Add('');
str.Add('input rst, clk;');
str.Add('input [15:0] addr;');
str.Add('output ea_int;');
str.Add('output [7:0] data1, data2, data3;');
str.Add('reg ea_int;');
str.add('reg [4:0] addr01;');
str.Add('reg [7:0] data1, data2, data3;');
str.Add('');
str.Add('wire ea;');
str.add('wire [15:0] addr_rst;');
tmp := 'wire [7:0] int_data0, int_data1, int_data2, int_data3';
for i:= 4 to n2(addrw-5)-1 do tmp:= tmp+', int_data'+intToStr(i);
str.add(tmp+';');
str.Add('');
str.Add('assign ea = | addr[15:INT_ROM_WID];');
str.add('');
str.add('assign addr_rst = rst ? 16''h0000 : addr;');
str.add('');
str.add(' rom0 rom_0 (.a(addr01), .o(int_data0));');
str.add(' rom1 rom_1 (.a(addr01), .o(int_data1));');
for i:=2 to n2(addrw-5)-1 do
str.add(' rom'+IntToStr(i)+' rom_'+IntToStr(i)+' (.a(addr_rst['+IntToStr(addrw)+':'+IntToStr(addrw-4)+']), .o(int_data'+IntToStr(i)+'));');
str.add('');
str.add('always @(addr_rst)');
str.add('begin');
str.add(' if (addr_rst[1])');
str.add(' addr01= addr_rst['+IntToStr(addrw)+':'+IntToStr(addrw-4)+']+ 5''h1;');
str.add(' else');
str.add(' addr01= addr_rst['+IntToStr(addrw)+':'+IntToStr(addrw-4)+'];');
str.add('end');
str.add('');
str.add('//');
str.add('// always read tree bits in row');
str.add('always @(posedge clk)');
str.add('begin');
str.add(' case(addr['+IntToStr(addrw-5)+':0])');
for i:=0 to n2(addrw-5)-1 do begin
str.add(' '+IntToStr(addrw-4)+'''d'+intToStr(i)+': begin');
str.add(' data1 <= #1 int_data'+intToStr(i)+';');
str.add(' data2 <= #1 int_data'+intToStr((i+1) mod n2(addrw-5))+';');
str.add(' data3 <= #1 int_data'+intToStr((i+2) mod n2(addrw-5))+';');
str.add(' end');
end;
str.add(' default: begin');
str.add(' data1 <= #1 8''h00;');
str.add(' data2 <= #1 8''h00;');
str.add(' data3 <= #1 8''h00;');
str.add(' end');
str.add(' endcase');
str.add('end');
str.add('');
str.Add('always @(posedge clk or posedge rst)');
str.Add(' if (rst)');
str.Add(' ea_int <= #1 1''b1;');
str.Add(' else ea_int <= #1 !ea;');
str.Add('');
str.add('endmodule');
str.add('');
str.add('');
 
hex := copy(hex,3,length(hex)-2);
 
//init roms
for cntR:= 0 to n2(addrw-5)-1 do begin
for cntB:= 0 to 7 do begin
roms[cntR].str[cntB]:='';
end;
end;
 
cntR:=0;
cntB:=0;
for i:=0 to (length(Hex) div 2)-1 do begin
AddB(cntR, cntB, copy(Hex,(i*2)+1,2));
if (cntB=3) and (cntR=n2(addrw-5)-1) then begin
addS(n2(addrw-5)-1);
cntR:=0;
cntB:=0;
end else begin
if (cntR=n2(addrw-5)-1) then begin
inc(cntB);
cntR:=0;
end else inc(cntR);
end;
end;
addS(n2(addrw-5)-1);
 
 
astr:='';
for i:=length(roms[0].str[0]) to 7 do astr := astr+'0';
 
 
tmp:='';
for i:=0 to 4 do tmp:=tmp+',a['+IntToStr(i)+']';
 
for cntR:= 0 to n2(addrw-5)-1 do begin
str.add('//rom'+intToStr(cntR));
str.add('module rom'+intToStr(cntR)+' (o,a);');
str.add('input [4:0] a;');
str.add('output [7:0] o;');
for cntB:= 0 to 7 do begin
str.add('ROM32X1 u'+intToStr(cntB)+' (o['+intToStr(cntB)+']'+tmp+') /* synthesis xc_props="INIT='+astr+roms[cntR].str[cntB]+'" */;');
end;
str.add('endmodule');
str.add('');
end;
 
end;
 
procedure TForm1.btnExitClick(Sender: TObject);
begin
close;
end;
 
procedure TForm1.btnMakeClick(Sender: TObject);
var str:tstrings;
s: string;
begin
if not fileexists(edtIn.Text) then raise exception.Create('File '''+edtIn.Text+''' don''t exist!!');
if edtOut.Text='' then raise exception.Create('Output file not....');
 
str:= tstringlist.Create;
 
s:=makeV(edtIn.Text);
case rgout.ItemIndex of
0: simul(s, str);
1: syn(s, str);
2: simulIn(s, str);
end;
 
str.SaveToFile(edtOut.Text);
str.free;
 
showmessage('OK');
end;
 
procedure TForm1.sbInClick(Sender: TObject);
begin
if od1.Execute then begin
edtIn.Text:= od1.FileName;
if rgOut.ItemIndex=2 then
edtOut.Text:= copy(od1.FileName, 1, length(od1.FileName)-3)+'in'
else
edtOut.Text:= copy(od1.FileName, 1, length(od1.FileName)-3)+'v';
end
end;
 
procedure TForm1.sbOutClick(Sender: TObject);
begin
if sd1.Execute then
edtOut.Text:= sd1.FileName;
end;
 
function TForm1.inToBits (int:integer): string;
begin
case int of
0..127: result := '07';
128..255: result := '08';
256..511: result := '09';
512..1023: result := '10';
1024..2047: result := '11';
2048..4095: result := '12';
4096..8191: result := '13';
8192..16383: result := '14';
16384..32767: result := '15';
else result := '16';
end;
end;
 
function TForm1.n2 (n: integer):integer;
var i: integer;
begin
result:=1;
for i:=0 to n do result:= result * 2;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
var ini: tInifile;
begin
ini := TIniFile.Create('RomMaker.ini');
edtIn.text:= ini.ReadString('settings', 'inFile', '');
edtOut.text:= ini.ReadString('settings', 'OutFile', '');
RgOut.ItemIndex:= ini.ReadInteger('settings', 'Select', 0);
od1.FileName:=ini.ReadString('settings', 'inFile', '');
ini.free;
end;
 
procedure TForm1.FormDestroy(Sender: TObject);
var ini: tInifile;
begin
ini := TIniFile.Create('RomMaker.ini');
ini.WriteString('settings', 'inFile', edtIn.text);
ini.WriteString('settings', 'OutFile', edtOut.text);
ini.WriteInteger('settings', 'Select', RgOut.ItemIndex);
ini.free;
end;
 
procedure TForm1.simulIn (hex: string; str: tstrings);
var i: integer;
begin
str.Clear;
str.Add('///');
str.Add('/// created by oc8051 rom maker');
str.Add('/// author: Simon Teran (simont@opencores.org)');
str.Add('///');
str.Add('/// source file: '+edtIn.Text);
str.Add('/// date: '+ datetoStr(date));
str.Add('/// time: '+ timeToStr(time));
str.Add('///');
 
hex := copy(hex,3,length(hex)-2);
for i:=0 to (length(hex) div 2)-1 do
str.Add(copy(Hex,(i*2)+1,2));
// for i:=(length(hex) div 2) to 65535 do
// str.Add('00');
 
// memo1.Lines.Clear;
// memo1.Lines.AddStrings(str);
 
end;
 
end.
/source/uMain.dfm
0,0 → 1,17
 
 
biMinimize BorderStylebsSingleCaptionoc8051 Rom Maker ClientHeight ClientWidthO Font.CharsetDEFAULT_CHARSET
+MS Sans Serif +Font.Style Icon.Data +þ è( @€€€€€€€€€€€€€ÀÀÀÿÿÿÿÿÿÿÿÿÿÿÿ3w;pp»€p°pp3p;ppp»€°ppp3p;pp»€°ppw3p€3;p3»€€»»°pp °3p€3;ppp3»€€»»°pp °p€3ppwp3‡€»»ww °€€3wp3€€»» °€€33€€»» °ÿÿ3ÿÿÿ!ÿÿÿÿÿûÿó?ÿòÿðÿ°ÿ0ÿ ÿûóòð°90 Ÿÿÿÿ€9ÿÀÿàÿðÿøŸÿüÿÿþÿÿÿÿÿÿ¹ÿÿOnCreate +PixelsPerInch` +Caption &Output file TSpeedButtonsbInLeft,Top WidthHeightCaption***Flat OnClick sbInClick TSpeedButtonsbOutLeft,Top$WidthHeightCaption***Flat OnClick +Items.Strings SimulatorVirtexSimulatror .inTabOrderTEditedtInLeftPTop WidthÙHeightTabOrderTextG:\tmp\lcall.hexTEditedtOutLeftPTop$WidthÙHeightTabOrderTextG:\tmp\lcall.vTBitBtnbtnMakeLeftðTopDWidthKHeightCaptionMakeTabOrderOnClick btnMakeClickTBitBtnbtnExitLeftðTop`WidthKHeightCaptionExitTabOrderOnClick btnExitClickTPanelPanel1LeftTopˆWidth9Heighty +Lines.Stringsoc8051 Rom Maker v2.2date: 22.10.20026This program will convert .hex files in verilog files.For use in oc8051 core./Project homepage: www.opencores.org/cores/8051/*author: Simon Teran (simont@opencores.org)&Please report me any bugs you'll find.TabOrder TOpenDialogod1Filter,hex files|*.hex|ihx file|*.ihx|all files|*.*Left TopŒ TSaveDialogsd1Left(Top¸ \ No newline at end of file
/source/p8051Rom.dpr
0,0 → 1,14
program p8051Rom;
 
uses
Forms,
uMain in 'uMain.pas' {Form1};
 
{$R *.RES}
 
begin
Application.Initialize;
Application.Title := 'oc8051 rom maker';
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
/source/p8051Rom.res
0,0 → 1,14
 
/oc8051_Rom_Maker.exe Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream
oc8051_Rom_Maker.exe Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: read.me =================================================================== --- read.me (nonexistent) +++ read.me (revision 186) @@ -0,0 +1,3 @@ + +program for converting intel .hex files to .v or .in files +

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.