URL
https://opencores.org/ocsvn/System09/System09/trunk
Subversion Repositories System09
Compare Revisions
- This comparison shows the changes necessary to convert path
/System09/trunk/Tools/s19tovhd
- from Rev 25 to Rev 66
- ↔ Reverse comparison
Rev 25 → Rev 66
/S19toVHD.exe
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
S19toVHD.exe
Property changes :
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: S19toVHD.cpp
===================================================================
--- S19toVHD.cpp (nonexistent)
+++ S19toVHD.cpp (revision 66)
@@ -0,0 +1,389 @@
+// S19toVHD.cpp : Defines the entry point for the console application.
+//
+
+/*
+* epedit
+*
+* binary file editer program
+*/
+#include
+#include
+#include
+/*
+* equates
+*/
+#define EPROM_MAX (1<<16)
+#define CMD_LINE_MAX 80
+#define FALSE 0
+#define TRUE !FALSE
+#define BINARY 0
+#define MOTOROLA 1
+#define INTEL 2
+#define SMAL32 3
+#define VHDL_BIN 4
+#define VHDL_BYTE 5
+#define VHDL_WORD 6
+
+/*
+* global variables
+*/
+FILE *cmdfp; /* command input pointer */
+char cmdbuff[CMD_LINE_MAX];
+unsigned char eprom_buff[EPROM_MAX]; /* eprom buffer */
+int eprom_top; /* top of EPROM buffer */
+int mod_flag; /* buffer has been modified */
+int auxflag; /* Auxillary input file specified */
+int count;
+int checksum;
+int offset; /* Eprom Buffer memory offset */
+int format_type; /* load / save format type */
+char *hex_str = "0123456789ABCDEF";
+
+
+/*
+* compare a string of specified length
+* return TRUE if a match
+* return FALSE if no match
+* ignore case
+*/
+int str_equal( char *s1, char *s2, int len )
+{
+ int i;
+
+ i = 0;
+ while( i
+*/
+
+int gethex( FILE *fp_in )
+{
+ int hex;
+
+ hex = fgetc( fp_in );
+ return( to_hexadecimal( hex ) );
+}
+
+int get2hex( FILE *fp_in )
+{
+ int hexhi, hexlo, byte;
+
+ hexhi = gethex( fp_in );
+ if( hexhi != -1 )
+ {
+ hexlo = gethex( fp_in );
+ if( hexlo != -1 )
+ {
+ byte = hexhi * 16 + hexlo;
+ checksum = (checksum + byte) & 0xff;
+ return byte;
+ }
+ }
+ return -1;
+}
+
+int get4hex( FILE *fp_in )
+{
+ int bytehi, bytelo, addr;
+
+ bytehi = get2hex( fp_in );
+ if( bytehi != -1 )
+ {
+ bytelo = get2hex( fp_in );
+ if( bytelo != -1 )
+ {
+ addr = (bytehi * 256) + bytelo;
+ return addr;
+ }
+ }
+ return -1;
+}
+
+int get6hex( FILE *fp_in )
+{
+ int bytehi, bytemid, bytelow, addr;
+
+ bytehi = get2hex( fp_in );
+ if( bytehi != -1 )
+ {
+ bytemid = get2hex( fp_in );
+ if( bytemid != -1 )
+ {
+ bytelow = get2hex( fp_in );
+ if( bytelow != -1 )
+ {
+ addr = (bytehi << 16) + (bytemid << 8) + bytelow;
+ return addr;
+ }
+ }
+ }
+ return -1;
+}
+
+long get8hex( FILE *fp_in )
+{
+ int wordhi, wordlow;
+ long addr;
+
+ wordhi = get4hex( fp_in );
+ if( wordhi != -1 )
+ {
+ wordlow = get4hex( fp_in );
+ if( wordlow != -1 )
+ {
+ addr = ((long)wordhi << 16) + (long)wordlow;
+ return addr;
+ }
+ }
+ return -1;
+}
+
+
+
+
+/*
+* load motorola formatted file
+*/
+
+void load_mot( char *fname_in )
+{
+ FILE *fp_in;
+ int byte, addr, i;
+
+ fp_in = fopen( fname_in, "r" );
+ if( !fp_in )
+ {
+ printf( "\nCan't open %s", fname_in );
+ return;
+ }
+
+ byte = 0;
+ addr = 0;
+
+ while( byte != -1 )
+ {
+ do {
+ byte = fgetc( fp_in);
+ } while( (byte != 'S') && (byte != -1) );
+
+ byte = fgetc( fp_in );
+ checksum = 0;
+ if( (byte == '1') || (byte == '2') )
+ {
+ count = get2hex( fp_in );
+ if( byte == '1' )
+ {
+ addr = get4hex( fp_in );
+ count -= 3;
+ }
+ else
+ {
+ addr = get6hex( fp_in );
+ count -= 4;
+ }
+ for( i=0; i>4;
+ i = fputc( (int)hex_str[hex], fp );
+ hex = (h & 0xf);
+ i = fputc( (int)hex_str[hex], fp );
+ checksum = (checksum + h) & 0xff;
+ return i;
+}
+
+int put4hex( FILE * fp, int h )
+{
+ int i;
+
+ i = put2hex( fp, (h & 0xff00 )>>8 );
+ i = put2hex( fp, (h & 0xff) );
+ return i;
+}
+
+
+/*
+* save VHDL hexadecimal file
+*/
+
+void save_vhdl_byte( FILE *fp_out, char *entity_name, int start_addr, int end_addr )
+{
+ int addr;
+ int i,j;
+ int byte;
+
+ j=0;
+ fprintf(fp_out, "library IEEE;\n");
+ fprintf(fp_out, " use IEEE.std_logic_1164.all;\n");
+ fprintf(fp_out, " use IEEE.std_logic_arith.all;\n");
+ fprintf(fp_out, "library unisim;\n");
+ fprintf(fp_out, " use unisim.vcomponents.all;\n");
+ fprintf(fp_out, "\n");
+ fprintf(fp_out, "entity %s is\n", entity_name);
+ fprintf(fp_out, " port(\n");
+ fprintf(fp_out, " clk : in std_logic;\n");
+ fprintf(fp_out, " rst : in std_logic;\n");
+ fprintf(fp_out, " cs : in std_logic;\n");
+ fprintf(fp_out, " rw : in std_logic;\n");
+ fprintf(fp_out, " addr : in std_logic_vector(10 downto 0);\n");
+ fprintf(fp_out, " rdata : out std_logic_vector(7 downto 0);\n");
+ fprintf(fp_out, " wdata : in std_logic_vector(7 downto 0)\n");
+ fprintf(fp_out, " );\n");
+ fprintf(fp_out, "end %s;\n", entity_name);
+ fprintf(fp_out, "\n");
+ fprintf(fp_out, "architecture rtl of %s is\n", entity_name);
+ fprintf(fp_out, " signal we : std_logic;\n");
+ fprintf(fp_out, " signal dp : std_logic;\n");
+ fprintf(fp_out, "begin\n");
+ fprintf(fp_out, " ROM: RAMB16_S9\n");
+ fprintf(fp_out, " generic map (\n");
+
+ for( addr=start_addr; addr<=end_addr; addr+=32 )
+ {
+ fprintf( fp_out, " INIT_%02x => x\"", j );
+ for(i=31; i>=0; i-- )
+ {
+ byte = (int)eprom_buff[(addr - offset + i) % EPROM_MAX];
+ putc( hex_str[(byte >>4) & 0xf], fp_out );
+ putc( hex_str[byte & 0xf], fp_out );
+ }
+ if (addr+32 < end_addr) {
+ fprintf( fp_out, "\",\n" );
+ } else {
+ fprintf( fp_out, "\"\n" );
+ }
+ j++;
+ }
+ fprintf(fp_out, " )\n");
+ fprintf(fp_out, " port map (\n");
+ fprintf(fp_out, " do => rdata,\n");
+ fprintf(fp_out, " dop(0) => dp,\n");
+ fprintf(fp_out, " addr => addr,\n");
+ fprintf(fp_out, " clk => clk,\n");
+ fprintf(fp_out, " di => wdata,\n");
+ fprintf(fp_out, " dip(0) => dp,\n");
+ fprintf(fp_out, " en => cs,\n");
+ fprintf(fp_out, " ssr => rst,\n");
+ fprintf(fp_out, " we => we\n");
+ fprintf(fp_out, " );\n");
+ fprintf(fp_out, " drive_we: process (rw)\n");
+ fprintf(fp_out, " begin\n");
+ fprintf(fp_out, " we <= not rw;\n");
+ fprintf(fp_out, " end process;\n");
+ fprintf(fp_out, "end architecture rtl;\n\n");
+
+}
+
+
+
+
+/*
+* epedit main program
+*/
+int main(int argc, char* argv[])
+{
+ int start_addr;
+ int end_addr;
+ int arglen;
+ char entity_name_buf[512];
+ char hdl_file_buf[1024];
+ char buf[1024];
+ char *curpos;
+ FILE *fp_out;
+
+ if (argc < 5) {
+ printf("Usage: s19tovhd [ ...]\n");
+ return(-1);
+ }
+ printf("Reading Motorola S19 from file '%s'\n", argv[1]);
+ printf("VHDL file name '%s'\n", argv[2]);
+ printf("Base RAM/ROM entity name is '%s'\n", argv[3]);
+ load_mot( argv[1] );
+ if( (fp_out = fopen( argv[2], "w" )) == NULL ) {
+ printf( "\nCan't open '%s' for write ", argv[2] );
+ return(-1);
+ }
+
+ for (int cnt=4; cnt