6 Commits

Author SHA1 Message Date
9931e89679 Update toolchain and add NLS converter
All checks were successful
Builds / XTchain (full, linux) (push) Successful in 1h41m44s
Builds / XTchain (full, windows) (push) Successful in 1h43m17s
Builds / XTchain (minimal, linux) (push) Successful in 1m46s
Builds / XTchain (minimal, windows) (push) Successful in 1m40s
2026-10-02 18:21:17 +02:00
43cb9f19de Update LLVM
All checks were successful
Builds / XTchain (minimal, linux) (push) Successful in 2m40s
Builds / XTchain (full, windows) (push) Successful in 1h30m56s
Builds / XTchain (minimal, windows) (push) Successful in 2m8s
Builds / XTchain (full, linux) (push) Successful in 2h13m28s
2026-05-21 23:24:21 +02:00
f707214d24 Update LLVM
All checks were successful
Builds / XTchain (full, linux) (push) Successful in 1h18m2s
Builds / XTchain (full, windows) (push) Successful in 1h19m8s
Builds / XTchain (minimal, linux) (push) Successful in -58m18s
Builds / XTchain (minimal, windows) (push) Successful in -58m19s
2026-05-14 17:46:05 +02:00
4c1cf7d02c Avoid macro redefinition conflicts by undefining symbols prior to definition
All checks were successful
Builds / XTchain (minimal, windows) (push) Successful in 2m12s
Builds / XTchain (minimal, linux) (push) Successful in 9m11s
Builds / XTchain (full, linux) (push) Successful in 1h0m9s
Builds / XTchain (full, windows) (push) Successful in 1h24m25s
2026-04-02 08:07:20 +02:00
94cef5522d Add xtadkgen tool and bump LLVM version to 22.1.2
All checks were successful
Builds / XTchain (minimal, windows) (push) Successful in 2m14s
Builds / XTchain (minimal, linux) (push) Successful in 2m34s
Builds / XTchain (full, linux) (push) Successful in 59m54s
Builds / XTchain (full, windows) (push) Successful in 1h24m50s
2026-04-01 22:50:52 +02:00
921e5b0b92 Bump LLVM
All checks were successful
Builds / XTchain (minimal, windows) (push) Successful in 2m30s
Builds / XTchain (minimal, linux) (push) Successful in 3m36s
Builds / XTchain (full, linux) (push) Successful in 1h1m15s
Builds / XTchain (full, windows) (push) Successful in 1h25m30s
2026-02-24 14:27:05 +01:00
6 changed files with 61006 additions and 138 deletions

View File

@@ -26,12 +26,12 @@ TARGET_SYSTEM=linux
# CMake Settings
CMAKEDIR="${SRCDIR}/cmake"
CMAKETAG="v4.2.0"
CMAKETAG="v4.4.3"
CMAKEVCS="https://gitlab.kitware.com/cmake/cmake.git"
# LLVM Settings
LLVMDIR="${SRCDIR}/llvm"
LLVMTAG="llvmorg-21.1.6"
LLVMTAG="llvmorg-23.1.2"
LLVMVCS="https://github.com/llvm/llvm-project.git"
# Mtools Settings
@@ -408,9 +408,9 @@ xtchain_build()
echo ">>> Building XTchain tools ..."
mkdir -p ${BINDIR}/bin
mkdir -p ${BINDIR}/lib/xtchain
for EXEC in bin2c diskimg exetool xtcspecc; do
for EXEC in bin2c diskimg exetool xtadkgen xtcspecc xtnlsc; do
if [ ! -e ${BINDIR}/bin/${EXEC} ]; then
${CCOMPILER} ${WRKDIR}/tools/${EXEC}.c -o ${BINDIR}/bin/${EXEC}
${CCOMPILER} -I${WRKDIR}/tools/includes ${WRKDIR}/tools/${EXEC}.c -o ${BINDIR}/bin/${EXEC}
fi
done
cp ${WRKDIR}/scripts/xtclib* ${BINDIR}/lib/xtchain/

55616
tools/includes/unicode.h Normal file

File diff suppressed because it is too large Load Diff

1803
tools/includes/xtchain.h Normal file

File diff suppressed because it is too large Load Diff

167
tools/xtadkgen.c Normal file
View File

@@ -0,0 +1,167 @@
/**
* PROJECT: XTchain
* LICENSE: See COPYING.md in the top level directory
* FILE: tools/xtadkgen.c
* DESCRIPTION: XT Assembly Development Kit generator
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/
#include "xtchain.h"
#define MAX_LINE_LEN 1024
#define MAGIC_MARKER "==> "
/* Prints usage */
void PrintUsage(const char* ProgramName)
{
/* Output usage instructions to stderr */
fprintf(stderr, "Usage: %s <input1.S> [input2.S ...] -o <output.h>\n", ProgramName);
}
/* Processes single .S file */
void ProcessSourceFile(FILE* InFile, FILE* OutFile)
{
char LineBuffer[MAX_LINE_LEN];
char SymbolName[256];
char ValueString[256];
char *ValuePointer;
char *Marker;
/* Iterate through the input stream until the end of the file */
while(fgets(LineBuffer, sizeof(LineBuffer), InFile))
{
Marker = strstr(LineBuffer, MAGIC_MARKER);
/* Search for the predefined translation marker */
if(Marker)
{
/* Extract the symbol identifier and its associated value */
if(sscanf(Marker, "==> %255s %255s", SymbolName, ValueString) == 2)
{
/* Initialize pointer for character-level cleanup */
ValuePointer = ValueString;
/* Strip architecture-specific immediate prefixes such as '$' (AT&T) or '#' (ARM) */
while(*ValuePointer == '$' || *ValuePointer == '#')
{
/* Advance pointer to the first alpha-numeric character */
ValuePointer++;
}
/* Generate the corresponding C-preprocessor macro definition */
fprintf(OutFile, "#undef %s\n", SymbolName);
fprintf(OutFile, "#define %s %s\n\n", SymbolName, ValuePointer);
}
}
}
}
/* Main function */
int main(int Argc, char* Argv[])
{
FILE* InFile;
FILE* OutFile = stdout;
const char* OutputName = NULL;
int FirstInputIndex = -1;
int InputCount = 0;
/* Validate that a minimum set of command-line arguments is present */
if(Argc < 2)
{
/* Display usage information and terminate on insufficient arguments */
PrintUsage(Argv[0]);
return 1;
}
/* Parse command-line arguments */
for(int Index = 1; Index < Argc; Index++)
{
/* Identify the output file switch */
if((strcmp(Argv[Index], "-o") == 0 || strcmp(Argv[Index], "-O") == 0) && Index + 1 < Argc)
{
/* Assign the designated output path and skip the next argument */
OutputName = Argv[++Index];
}
else
{
/* Track the first occurrence of an input file for the processing loop */
if(FirstInputIndex == -1)
{
/* Store the argument index for the subsequent file operations */
FirstInputIndex = Index;
}
/* Increment the total count of input files */
InputCount++;
}
}
/* Ensure at least one input source is available for processing */
if(InputCount == 0 || (OutputName == NULL && FirstInputIndex == -1))
{
/* Print usage and exit */
PrintUsage(Argv[0]);
return 1;
}
/* Initialize the output stream either to a file or default to stdout */
if(OutputName)
{
/* Attempt to open the specified output header for write access */
OutFile = fopen(OutputName, "w");
if(!OutFile)
{
/* Emit fatal error if the destination file cannot be accessed */
fprintf(stderr, "%s: Failed to open output file '%s'\n", Argv[0], OutputName);
return 1;
}
}
/* Write the auto-generation warning and inclusion guard */
fprintf(OutFile, "// FILE GENERATED AUTOMATICALLY BY '%s'. DO NOT EDIT!\n\n", Argv[0]);
fprintf(OutFile, "#ifndef __XTADK_H_\n");
fprintf(OutFile, "#define __XTADK_H_\n\n");
/* Loop through the arguments again to process each input file */
for(int Index = 1; Index < Argc; Index++)
{
/* Skip the output switch and its associated parameter */
if(strcmp(Argv[Index], "-o") == 0 || strcmp(Argv[Index], "-O") == 0)
{
/* Advance the loop counter and continue */
Index++;
continue;
}
/* Open the current assembly source file */
InFile = fopen(Argv[Index], "r");
if(!InFile)
{
/* Report error for the missing file and proceed to the next input file */
fprintf(stderr, "%s: Failed to open file '%s', skipping.\n", Argv[0], Argv[Index]);
continue;
}
/* Add source file data to the generated header */
fprintf(OutFile, "/* Source: %s */\n", Argv[Index]);
ProcessSourceFile(InFile, OutFile);
fprintf(OutFile, "\n");
/* Close the input file handle */
fclose(InFile);
}
/* Close the inclusion guard in the output */
fprintf(OutFile, "#endif /* __XTADK_H_ */\n");
/* Check if a file handle was utilized */
if(OutFile != stdout)
{
/* Commit buffered data and close the output file */
fclose(OutFile);
}
/* Return success */
return 0;
}

View File

@@ -1,134 +0,0 @@
/**
* PROJECT: XTchain
* LICENSE: See COPYING.md in the top level directory
* FILE: tools/xtchain.h
* DESCRIPTION: Common header for XTchain tools
* DEVELOPERS: Martin Storsjo <martin@martin.st>
* Rafal Kupiec <belliash@codingworkshop.eu.org>
*/
#include <dirent.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>
#ifdef _WIN32
#include <windows.h>
#define PATH_SEP '\\'
#else
#define PATH_SEP '/'
#endif
#define SECTOR_SIZE 512
#define _T(x) x
typedef struct MBR_PARTITION {
uint8_t BootFlag; // 0x80 = bootable, 0x00 = non-boot
uint8_t StartCHS [3]; // CHS address
uint8_t Type; // Partition type
uint8_t EndCHS[3]; // CHS address
uint32_t StartLBA; // Start sector
uint32_t Size; // Sectors count
} MBR_PARTITION, *PMBR_PARTITION;
typedef struct _RESERVED_SECTOR_INFO
{
int SectorNumber;
const char* Description;
} RESERVED_SECTOR_INFO, *PRESERVED_SECTOR_INFO;
static
inline
char *
_tcsrchrs(const char *str,
char char1,
char char2)
{
char *ptr1 = strrchr(str, char1);
char *ptr2 = strrchr(str, char2);
if(!ptr1)
{
return ptr2;
}
if(!ptr2)
{
return ptr1;
}
if(ptr1 < ptr2)
{
return ptr2;
}
return ptr1;
}
static
inline
void
split_argv(const char *argv0,
char **dir_ptr,
char **basename_ptr,
char **target_ptr,
char **exe_ptr)
{
const char *sep = _tcsrchrs(argv0, '/', '\\');
const char *basename_ptr_const = argv0;
char *dir = strdup(_T(""));
if(sep)
{
dir = strdup(argv0);
dir[sep + 1 - argv0] = '\0';
basename_ptr_const = sep + 1;
}
char *basename = strdup(basename_ptr_const);
char *period = strchr(basename, '.');
if(period)
{
*period = '\0';
}
char *target = strdup(basename);
char *dash = strrchr(target, '-');
char *exe = basename;
if(dash)
{
*dash = '\0';
exe = dash + 1;
}
else
{
target = NULL;
}
if(dir_ptr)
{
*dir_ptr = dir;
}
if(basename_ptr)
{
*basename_ptr = basename;
}
if(target_ptr)
{
*target_ptr = target;
}
if(exe_ptr)
{
*exe_ptr = exe;
}
}

3416
tools/xtnlsc.c Normal file

File diff suppressed because it is too large Load Diff