mirror of
https://github.com/forth-ev/VolksForth.git
synced 2024-06-15 07:29:47 +00:00
Old Ultraforth cleanup
This commit is contained in:
parent
71fb584a66
commit
352036bb6e
Binary file not shown.
|
@ -1,161 +0,0 @@
|
||||||
#include <stdio.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <ctype.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
|
|
||||||
void help(char *name)
|
|
||||||
{
|
|
||||||
printf("%s - BINARY to Intel HEX file convertor version 1.00\n"\
|
|
||||||
"(c)BCL Vysoke Myto 2001 (benedikt@lphard.cz)\n\n",name);
|
|
||||||
printf("Usage: %s [-option] binfile hexfile\n"\
|
|
||||||
" -l Bytes to read from binary file\n"\
|
|
||||||
" -i Binary file starting offset\n"\
|
|
||||||
" -o Output file offset (where HEX data starts)\n"\
|
|
||||||
" -t Exclude EOF record\n"\
|
|
||||||
" -a Append to end of existing HEX file\n"\
|
|
||||||
" -q Quiet mode (no statistics are printed)\n", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int argc,char *argv[])/*Main routine*/
|
|
||||||
{
|
|
||||||
char *ifile = NULL;
|
|
||||||
char *ofile = NULL;
|
|
||||||
char c;
|
|
||||||
FILE *inp, *outp;
|
|
||||||
int ch,csum;
|
|
||||||
int ofsa = 0;
|
|
||||||
int cnt = 0;
|
|
||||||
struct stat statbuf;
|
|
||||||
long int foffset = 0;
|
|
||||||
long int fsize = 0;
|
|
||||||
long int fsub;
|
|
||||||
long int fpoint = 0;
|
|
||||||
long int adrs = 0;
|
|
||||||
unsigned char quiet = 0;
|
|
||||||
unsigned char eofrec = 0;
|
|
||||||
unsigned char append = 0;
|
|
||||||
|
|
||||||
opterr = 0; //print error message if unknown option
|
|
||||||
|
|
||||||
while ((c = getopt (argc, argv, "l:i:o:taqv")) != -1)
|
|
||||||
switch (c) {
|
|
||||||
case 'l':
|
|
||||||
fsize = atol(optarg);
|
|
||||||
break;
|
|
||||||
case 'i':
|
|
||||||
foffset = atol(optarg);
|
|
||||||
break;
|
|
||||||
case 'o':
|
|
||||||
adrs = atol(optarg);
|
|
||||||
break;
|
|
||||||
case 't':
|
|
||||||
eofrec = 1;
|
|
||||||
break;
|
|
||||||
case 'a':
|
|
||||||
append = 1;
|
|
||||||
break;
|
|
||||||
case 'q':
|
|
||||||
quiet = 1;
|
|
||||||
break;
|
|
||||||
case 'v':
|
|
||||||
printf("%s - BINARY to Intel HEX file convertor version 1.00\n"\
|
|
||||||
"(c)BCL Vysoke Myto 2001 (benedikt@lphard.cz)\n",argv[0]);
|
|
||||||
return 0;
|
|
||||||
case '?':
|
|
||||||
help (argv[0]);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((argc - optind) != 2) {
|
|
||||||
printf("ERROR: Missing input/output file.\n");
|
|
||||||
help(argv[0]);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
ifile = argv[optind];
|
|
||||||
ofile = argv[optind+1];
|
|
||||||
|
|
||||||
/*Open file check*/
|
|
||||||
if((inp = fopen(ifile, "rb")) == NULL){
|
|
||||||
printf("ERROR: Cannot open input file.\n");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
fseek (inp, foffset, SEEK_SET);
|
|
||||||
|
|
||||||
if (append == 0) {
|
|
||||||
if((outp = fopen(ofile, "wt")) == NULL){
|
|
||||||
printf("ERROR: Cannot open output file.\n");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if((outp = fopen(ofile, "at")) == NULL){
|
|
||||||
printf("ERROR: Cannot re-open output file.\n");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
fseek (outp, 0, SEEK_END);
|
|
||||||
}
|
|
||||||
|
|
||||||
fstat(fileno(inp), &statbuf);
|
|
||||||
if (quiet == 0) printf("Input file size=%ld\n",statbuf.st_size);
|
|
||||||
if (foffset > statbuf.st_size) {
|
|
||||||
printf("ERROR: Input offset > input file length\n");
|
|
||||||
}
|
|
||||||
if ((fsize == 0) || (fsize > (statbuf.st_size - foffset)))
|
|
||||||
fsize = statbuf.st_size - foffset;
|
|
||||||
|
|
||||||
// fprintf(outp,":020000020000FC\n");/*Start Header*/
|
|
||||||
fsub = fsize - fpoint;
|
|
||||||
if (fsub > 0x20) {
|
|
||||||
fprintf(outp,":20%04X00",adrs);/*Hex line Header*/
|
|
||||||
csum = 0x20 + (adrs>>8) + (adrs & 0xFF);
|
|
||||||
adrs += 0x20;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
fprintf(outp, ":%02X%04X00", fsub,adrs);/*Hex line Header*/
|
|
||||||
csum = fsub + (adrs>>8) + (adrs & 0xFF);
|
|
||||||
adrs += fsub;
|
|
||||||
}
|
|
||||||
while (fsub > 0){
|
|
||||||
ch = fgetc(inp);
|
|
||||||
fprintf(outp,"%02X",ch);/*Put data*/
|
|
||||||
cnt++; fpoint++;
|
|
||||||
fsub = fsize - fpoint;
|
|
||||||
csum = ch + csum;
|
|
||||||
if((fsub == 0)||(cnt == 0x20)){
|
|
||||||
cnt = 0; csum = 0xFF & (~csum + 1);
|
|
||||||
fprintf(outp,"%02X\n",csum);/*Put checksum*/
|
|
||||||
if(fsub == 0) break;
|
|
||||||
if(adrs > 0xFFFF){
|
|
||||||
ofsa = 0x1000 + ofsa;
|
|
||||||
adrs = 0;
|
|
||||||
fprintf(outp,":02000002%04X",ofsa);/*Change offset address*/
|
|
||||||
csum = 0x02 + 0x02 + (ofsa>>8) + (ofsa & 0xFF);
|
|
||||||
csum = 0xFF & (~csum + 1);
|
|
||||||
fprintf(outp,"%02X\n", csum);
|
|
||||||
}
|
|
||||||
adrs = 0xFFFF & adrs;
|
|
||||||
if (fsub > 0x20) {
|
|
||||||
fprintf(outp,":20%04X00",adrs);/*Next Hex line Header*/
|
|
||||||
csum = 0x20 + (adrs>>8) + (adrs & 0xFF);
|
|
||||||
adrs += 0x20;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if(fsub > 0){
|
|
||||||
fprintf(outp, ":%02X%04X00", fsub,adrs);/*Next Hex line Header*/
|
|
||||||
csum = fsub + (adrs>>8) + (adrs & 0xFF);
|
|
||||||
adrs += fsub;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (eofrec == 0) fprintf(outp,":00000001FF\n");/*End footer*/
|
|
||||||
fflush (outp);
|
|
||||||
|
|
||||||
fstat(fileno(outp), &statbuf);
|
|
||||||
if (quiet == 0) printf("Output file size=%ld\n",statbuf.st_size);
|
|
||||||
|
|
||||||
fclose(inp);
|
|
||||||
fclose(outp);
|
|
||||||
return 0;
|
|
||||||
}
|
|
0
6502/UltraForth/CLV/DSK-GRF.487
Executable file → Normal file
0
6502/UltraForth/CLV/DSK-GRF.487
Executable file → Normal file
0
6502/UltraForth/CLV/DSK-GRF.txt
Executable file → Normal file
0
6502/UltraForth/CLV/DSK-GRF.txt
Executable file → Normal file
0
6502/UltraForth/CLV/EDIT
Executable file → Normal file
0
6502/UltraForth/CLV/EDIT
Executable file → Normal file
0
6502/UltraForth/CLV/EDIT.txt
Executable file → Normal file
0
6502/UltraForth/CLV/EDIT.txt
Executable file → Normal file
0
6502/UltraForth/CLV/EH-TERM.387
Executable file → Normal file
0
6502/UltraForth/CLV/EH-TERM.387
Executable file → Normal file
0
6502/UltraForth/CLV/EH-TERM.txt
Executable file → Normal file
0
6502/UltraForth/CLV/EH-TERM.txt
Executable file → Normal file
0
6502/UltraForth/CLV/MENUE
Executable file → Normal file
0
6502/UltraForth/CLV/MENUE
Executable file → Normal file
0
6502/UltraForth/CLV/MENUE.txt
Executable file → Normal file
0
6502/UltraForth/CLV/MENUE.txt
Executable file → Normal file
0
6502/UltraForth/CLV/convert.rx
Executable file → Normal file
0
6502/UltraForth/CLV/convert.rx
Executable file → Normal file
Binary file not shown.
BIN
archive/8080/CPM/volks4th.dsk
Normal file
BIN
archive/8080/CPM/volks4th.dsk
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user