Add full compiler toolchain, libc, examples and reference docs
First substantive commit: the entire Sprinter C compiler tree on top of
the bare README+gitignore initial commit.
What's in here:
bin/sprinter-cc — driver script invoking SDCC + linker + mkexe
libc/ — Sprinter-specific libc layer over ESTEX/BIOS
(conio, gfx, io, mem, stdio + headers)
runtime/ — crt0 variants (default/small/banked/minimal)
+ heap + bank trampolines
toolchain/ — mkexe (SprintEXE packer, C + tests)
examples/ — 30 demo programs (gfx, file I/O, env, time, …)
lib/Makefile — builds the libc archive (sprinter.lib)
docs/ — converted Sprinter manuals + asm reference samples
third_party/ — solid-c reference compiler dump + sdcc setup script
release_docs/ — packaging / release notes
gitignore overhaul:
• Drop dangerous blanket patterns: *.asm (would hide docs/samples/*.asm)
and *.exe (case-insensitive match was hiding third_party/solid-c/*.EXE
on macOS APFS). Replaced with examples/*/*.{asm,exe,…} and lib/*.lib.
• Restore tracking of toolchain/mkexe/tests/{one,big}.bin — those are
INPUT fixtures, not build outputs.
• Collapse the duplicated SDCC/C/Sdcc sections into one section per
concern (build outputs / vendored / OS-junk).
• Add .sprinter-cc-*/, build/ (catches lib/build/ too), .claude/.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Vendored
+393
@@ -0,0 +1,393 @@
|
||||
/*
|
||||
MM> �®á¬®âà¨â¥, ¯«¨§ ã ᥡï, ¬®¦¥â ã ª®£®-¨âì ¥áâì ®¯¨á ¨¥ ¬¥â®¤®¢
|
||||
MM> á®àâ¨à®¢ª¨ (quick sort, buble sort, ŠŒ� ¨ â.¤.). ˆå â ¬ ¯à¨¬¥à® 6
|
||||
MM> ¥áâì. ˆâ¥à¥áãîâ ¨¬¬¥® «£®à¨â¬ë á ®¯¨á ¨¥¬, ª®â®àë¥ ï ¨á¯®«ì§ãî
|
||||
MM> ¯®â®¬ ¤«ï ªãàᮢ®© à ¡®âë. Š¨â¥ ¬¥, ¯¦ «áâ , ¨«¨ ¯®¤¥«¨â¥áì url¨ª®¬.
|
||||
MM> ‘¯ ᨡ®!
|
||||
|
||||
EI> ޝ¨è¨â¥ c ¯p¨¬¥p ¬¨ ¯ cª «¥, ¯®¦ «ã©câ , ®c®¢ë¥ ¬¥â®¤ë
|
||||
EI> c®pâ¨p®¢ª¨,
|
||||
EI> 祬 ¡®«ìè¥ â¥¬ «ãçè¥, ¢c¥¬ § p ¥¥ ®£p®¬®¥ c¯ c¨¡®«
|
||||
|
||||
H . H® C (â ¬ ᪮«ìª® ï ¯®ï« £« ¢®¥ «£®à¨â¬ë ã¦ë). Ÿ ¯¨á « ¨
|
||||
ª®¬¯¨«¨« ¯®¤ BC3.1. �।áâ ¢«ï¥â ᮡ®© ¯à®£ã ¯® á¡®àã áâ â¨á⨪¨ íä䥪⨢-
|
||||
®á⨠«£®à¨â¬®¢.
|
||||
�à®èã ¯®ªà¨â¨ª®¢ âì :) (å®âï ®¯ïâì ¦¥ á ¡¦ ¡ë« ¯¥à¢®¬ ªãàá¥).
|
||||
----------------
|
||||
*/
|
||||
|
||||
#include<stdio.h>
|
||||
#include<stdlib.h>
|
||||
#include<conio.h>
|
||||
|
||||
#define SIZE 15
|
||||
|
||||
/* Prototypes */
|
||||
void Binsort();
|
||||
void Choise();
|
||||
void Include();
|
||||
void Bubble();
|
||||
void Quick();
|
||||
void Shell();
|
||||
void Join();
|
||||
void Prn();
|
||||
void Test();
|
||||
|
||||
unsigned ITERATION, // Š®«¨ç¥á⢮ ¯à®©¤¥ëå æ¨ª«®¢
|
||||
EXCHANGES, // ®¡¬¥®¢ ï祥ª
|
||||
CONDITIONS; // ¯à®©¤¥ëå ãá«®¢¨©
|
||||
|
||||
int Mass[SIZE];
|
||||
|
||||
int i, NumElem;
|
||||
char key;
|
||||
|
||||
|
||||
/* ÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞ */
|
||||
int main()
|
||||
{
|
||||
|
||||
NumElem = sizeof(Mass) / sizeof(Mass[0]);
|
||||
clrscr();
|
||||
|
||||
do {
|
||||
for(i=0; i < NumElem; i++) Mass[i] = rand() % 100 - 50;
|
||||
clrscr();
|
||||
puts("Œ¥î:\n");
|
||||
puts(" 1. ‘®àâ¨à®¢ª ®¡¬¥ ¬¨ (¬¥â®¤ ¯ã§ëàìª )");
|
||||
puts(" 2. ‘®àâ¨à®¢ª ¢ë¡®à®¬");
|
||||
puts(" 3. ‘®àâ¨à®¢ª ¯à®áâ묨 ¢áâ ¢ª ¬¨");
|
||||
puts(" 4. ‘®àâ¨à®¢ª ¡¨ à묨 ¢áâ ¢ª ¬¨ (¢áâ ¢ª ¤¥«¥¨¥¬ ¯®¯®« ¬)");
|
||||
puts(" 5. ‘®àâ¨à®¢ª ¬¥â®¤®¬ ˜¥«« ");
|
||||
puts(" 6. ‘®àâ¨à®¢ª ¡ëáâàë¬ ¬¥â®¤®¬\n");
|
||||
puts(" 7. ‘«¨ï¨¥ á®àâ¨à®¢ ëå ¬ áᨢ®¢");
|
||||
puts(" 8. ’¥á⠯ந§¢®¤¨â¥«ì®áâì\n");
|
||||
puts(" ESC. ‚ë室\n\n->");
|
||||
if ((key=getch()) == 27)
|
||||
goto done;
|
||||
|
||||
clrscr();
|
||||
if (key >= '0' && key <= '6')
|
||||
{
|
||||
cprintf("\nŒ áᨢ (®à¨£¨ «):");
|
||||
Prn(Mass, NumElem);
|
||||
}
|
||||
|
||||
ITERATION=EXCHANGES=CONDITIONS=0;
|
||||
|
||||
switch(key)
|
||||
{
|
||||
case '1': Bubble(Mass, NumElem); break;
|
||||
case '2': Choise(Mass, NumElem); break;
|
||||
case '3': Include(Mass, NumElem); break;
|
||||
case '4': Binsort(Mass, NumElem); break;
|
||||
case '5': Shell(Mass, NumElem); break;
|
||||
case '6': Quick(Mass, 0, NumElem); break;
|
||||
case '7': Join(); continue;
|
||||
case '8': Test(Mass, NumElem); continue;
|
||||
default : continue;
|
||||
}
|
||||
cprintf("\n(á®àâ¨à®¢ ë©):");
|
||||
Prn(Mass, NumElem);
|
||||
cprintf("\n\n\n�ਠá®àâ¨à®¢ª¥ ¯®âॡ®¢ «®áì ¨â¥à 権: %d\n",ITERATION);
|
||||
cprintf(" ¯à®¨§¢¥¤¥® ®¡¬¥®¢ ï祥ª: %d\n",EXCHANGES);
|
||||
cprintf(" ¯à®©¤¥® ãá«®¢¨©: %d\n",CONDITIONS);
|
||||
puts("\n\n\nAny key...");
|
||||
getch();
|
||||
} while(1);
|
||||
|
||||
done:
|
||||
puts("\n\nSee you... ;)");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*.......................................................................*/
|
||||
void Prn(PtrMass, count)
|
||||
int *PtrMass, count;
|
||||
{
|
||||
int i;
|
||||
cprintf("\n[");
|
||||
for (i=0; i < count; i++)
|
||||
cprintf(" %3d", PtrMass[i]);
|
||||
puts("]");
|
||||
}
|
||||
|
||||
|
||||
/*.......................................................................*/
|
||||
void Test(PtrMass, count)
|
||||
int *PtrMass, count;
|
||||
{
|
||||
|
||||
uint ITERATION1, EXCHANGES1, CONDITIONS1, ITERATION2,
|
||||
EXCHANGES2, CONDITIONS2, ITERATION3, EXCHANGES3,
|
||||
CONDITIONS3, ITERATION4, EXCHANGES4, CONDITIONS4,
|
||||
ITERATION5, EXCHANGES5, CONDITIONS5, i, j;
|
||||
|
||||
ITERATION1=EXCHANGES1=CONDITIONS1=ITERATION2=EXCHANGES2=CONDITIONS2=0;
|
||||
ITERATION3=EXCHANGES3=CONDITIONS3=ITERATION4=EXCHANGES4=CONDITIONS4=0;
|
||||
ITERATION5=EXCHANGES5=CONDITIONS5=0;
|
||||
|
||||
clrscr();
|
||||
puts("‘®àâ¨à®¢ª ®¡¬¥ ¬¨: ¯à®©¤¥ëå æ¨ª«®¢ =");
|
||||
puts(" ®¡¬¥®¢ ï祩ª ¬¨ =");
|
||||
puts(" ¯®áâ ¢«¥ëå ãá«®¢¨© =\n");
|
||||
puts("‘®àâ¨à®¢ª ¢ë¡®à®¬: ¯à®©¤¥ëå æ¨ª«®¢ =");
|
||||
puts(" ®¡¬¥®¢ ï祩ª ¬¨ =");
|
||||
puts(" ¯®áâ ¢«¥ëå ãá«®¢¨© =\n");
|
||||
puts("‘®àâ¨à®¢ª ¯à®áâ묨 ¢áâ ¢ª ¬¨: ¯à®©¤¥ëå æ¨ª«®¢ =");
|
||||
puts(" ®¡¬¥®¢ ï祩ª ¬¨ =");
|
||||
puts(" ¯®áâ ¢«¥ëå ãá«®¢¨© =\n");
|
||||
puts("‘®àâ¨à®¢ª ¡¨ à묨 ¢áâ ¢ª ¬¨: ¯à®©¤¥ëå æ¨ª«®¢ =");
|
||||
puts(" ®¡¬¥®¢ ï祩ª ¬¨ =");
|
||||
puts(" ¯®áâ ¢«¥ëå ãá«®¢¨© =\n");
|
||||
puts("‘®àâ¨à®¢ª ¬¥â®¤®¬ ˜¥«« : ¯à®©¤¥ëå æ¨ª«®¢ =");
|
||||
puts(" ®¡¬¥®¢ ï祩ª ¬¨ =");
|
||||
puts(" ¯®áâ ¢«¥ëå ãá«®¢¨© =\n");
|
||||
puts("‘®àâ¨à®¢ª ¡ëáâàë¬ ¬¥â®¤®¬: ¯à®©¤¥ëå æ¨ª«®¢ =");
|
||||
puts(" ®¡¬¥®¢ ï祩ª ¬¨ =");
|
||||
puts(" ¯®áâ ¢«¥ëå ãá«®¢¨© =");
|
||||
|
||||
for(j=1; j <= 100; j++)
|
||||
{
|
||||
ITERATION=EXCHANGES=CONDITIONS=0;
|
||||
for (i=0; i < count; i++) PtrMass[i] = rand() % 100 - 50;
|
||||
Bubble(PtrMass ,count);
|
||||
ITERATION1+=ITERATION; EXCHANGES1+=EXCHANGES; CONDITIONS1+=CONDITIONS;
|
||||
gotoxy(52,1); cprintf("%d ",ITERATION1/j);
|
||||
gotoxy(52,2); cprintf("%d ",EXCHANGES1/j);
|
||||
gotoxy(52,3); cprintf("%d ",CONDITIONS1/j);
|
||||
|
||||
ITERATION=EXCHANGES=CONDITIONS=0;
|
||||
for (i=0; i < count; i++) PtrMass[i] = rand() % 100 - 50;
|
||||
Choise(PtrMass ,count);
|
||||
ITERATION2+=ITERATION; EXCHANGES2+=EXCHANGES; CONDITIONS2+=CONDITIONS;
|
||||
gotoxy(52,5); cprintf("%d ",ITERATION2/j);
|
||||
gotoxy(52,6); cprintf("%d ",EXCHANGES2/j);
|
||||
gotoxy(52,7); cprintf("%d ",CONDITIONS2/j);
|
||||
|
||||
ITERATION=EXCHANGES=CONDITIONS=0;
|
||||
for (i=0; i < count; i++) PtrMass[i] = rand() % 100 - 50;
|
||||
Include(PtrMass ,count);
|
||||
ITERATION3+=ITERATION; EXCHANGES3+=EXCHANGES; CONDITIONS3+=CONDITIONS;
|
||||
gotoxy(52,9); cprintf("%d ",ITERATION3/j);
|
||||
gotoxy(52,10); cprintf("%d ",EXCHANGES3/j);
|
||||
gotoxy(52,11); cprintf("%d ",CONDITIONS3/j);
|
||||
|
||||
ITERATION=EXCHANGES=CONDITIONS=0;
|
||||
for (i=0; i < count; i++) PtrMass[i] = rand() % 100 - 50;
|
||||
Binsort(PtrMass ,count);
|
||||
ITERATION4+=ITERATION; EXCHANGES4+=EXCHANGES; CONDITIONS4+=CONDITIONS;
|
||||
gotoxy(52,13); cprintf("%d ",ITERATION4/j);
|
||||
gotoxy(52,14); cprintf("%d ",EXCHANGES4/j);
|
||||
gotoxy(52,15); cprintf("%d ",CONDITIONS4/j);
|
||||
|
||||
ITERATION=EXCHANGES=CONDITIONS=0;
|
||||
for (i=0; i < count; i++) PtrMass[i] = rand() % 100 - 50;
|
||||
Shell(PtrMass ,count);
|
||||
ITERATION5+=ITERATION; EXCHANGES5+=EXCHANGES; CONDITIONS5+=CONDITIONS;
|
||||
gotoxy(52,17); cprintf("%d ",ITERATION5/j);
|
||||
gotoxy(52,18); cprintf("%d ",EXCHANGES5/j);
|
||||
gotoxy(52,19); cprintf("%d ",CONDITIONS5/j);
|
||||
|
||||
ITERATION=EXCHANGES=CONDITIONS=0;
|
||||
for (i=0; i < count; i++) PtrMass[i] = rand() % 100 - 50;
|
||||
Quick(PtrMass , 0, count);
|
||||
ITERATION5+=ITERATION; EXCHANGES5+=EXCHANGES; CONDITIONS5+=CONDITIONS;
|
||||
gotoxy(52,21); cprintf("%d ",ITERATION5/j);
|
||||
gotoxy(52,22); cprintf("%d ",EXCHANGES5/j);
|
||||
gotoxy(52,23); cprintf("%d ",CONDITIONS5/j);
|
||||
}
|
||||
puts("\n\n\nOk...");
|
||||
getch();
|
||||
}
|
||||
|
||||
|
||||
/*.......................................................................*/
|
||||
void Include(PtrMass, count)
|
||||
int *PtrMass, count;
|
||||
{
|
||||
int i, j, temp;
|
||||
|
||||
for (i=1; i< count; ++i)
|
||||
{
|
||||
temp=PtrMass[i];
|
||||
for (j=i-1; j>=0 && temp<PtrMass[j]; j--)
|
||||
{
|
||||
ITERATION++;
|
||||
EXCHANGES++;
|
||||
PtrMass[j+1]=PtrMass[j];
|
||||
}
|
||||
ITERATION++;
|
||||
PtrMass[j+1]=temp;
|
||||
}
|
||||
ITERATION -= count-1;
|
||||
}
|
||||
|
||||
|
||||
/*.......................................................................*/
|
||||
void Binsort(PtrMass, count)
|
||||
int *PtrMass, count;
|
||||
{
|
||||
int i, j, pos, a, b, middle, num;
|
||||
|
||||
for (i=1; i < count; i++)
|
||||
{
|
||||
a=0; /* H¨¦ïï £à ¨æ ¯®¨áª = 1-¬ã í«-âã */
|
||||
b=i; /* ‚¥àåïï = á® 2 ¯® count */
|
||||
EXCHANGES++;
|
||||
num=PtrMass[i]; /* —¨á«® ¤«ï ª®â. 㦮 ©â¨ ¬¥áâ® */
|
||||
|
||||
while ( a!=b ) /* ...¯®ª £à ¨æë ¥ ᫨«¨áì... */
|
||||
{
|
||||
middle=(a+b)/2; /* –¥« ï ç áâì áà. à¨ä¬. áã¬¬ë £à ¨æ */
|
||||
|
||||
if (num > PtrMass[middle]) /* ..¥á«¨ ç¨á«® >ç¨á« áâ®ïé.¯®¤ */
|
||||
{ /* ®¬¥à®¬ middle â®: */
|
||||
a=middle+1; /* ¨¦. £à . = æ¥âàã+1 */
|
||||
} /* */
|
||||
else /* ¨«¨ */
|
||||
{ /* */
|
||||
b = middle; /* ¢¥àåïï £à ¨æ = æ¥âàã... */
|
||||
}
|
||||
CONDITIONS++;
|
||||
ITERATION++;
|
||||
}
|
||||
pos=a; /* ‘®¤¥à¦¨â ©¤¥ãî ¯®§¨æ¨î ª®â. */
|
||||
/* 㦮 ¯®áâ ¢¨âì ç¨á«® */
|
||||
|
||||
for (j=i; j > pos; j--)
|
||||
{ /* �®¤¢¨£ ¥¬ ( 1 ¢¯à ¢®) í«-âë */
|
||||
PtrMass[j]=PtrMass[j-1]; /* ¬ áᨢ «¥¦ 騥 ¯¥à¥¤ í«¥¬¥â®¬, */
|
||||
EXCHANGES++;
|
||||
ITERATION++; /* ¤«ï ª®â®à®£® ¨é¥âáï ¬¥áâ® ®á¢®- */
|
||||
} /* ¡®¦¤ ï 1 ¬¥áâ® */
|
||||
|
||||
PtrMass[pos]=num; /* “áâ ¢«¨¢ ¥¬ í«¥¬¥â ¬¥áâ® */
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*.......................................................................*/
|
||||
void Bubble(PtrMass, count)
|
||||
int *PtrMass, count;
|
||||
{
|
||||
int i,j;
|
||||
for (i=0; i<count; i++)
|
||||
for (j=i+1; j<count; j++)
|
||||
{
|
||||
if (PtrMass[i] > PtrMass[j])
|
||||
{
|
||||
PtrMass[i]+=PtrMass[j];
|
||||
PtrMass[j]= PtrMass[i] - PtrMass[j];
|
||||
PtrMass[i]-=PtrMass[j];
|
||||
EXCHANGES++;
|
||||
CONDITIONS++;
|
||||
}
|
||||
ITERATION++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*.......................................................................*/
|
||||
void Choise(PtrMass, count)
|
||||
int *PtrMass, count;
|
||||
{
|
||||
int i,j;
|
||||
|
||||
for (i=0; i<count; i++)
|
||||
for (j=0; j<count-1; j++)
|
||||
{
|
||||
if(PtrMass[j]>PtrMass[j+1])
|
||||
{
|
||||
PtrMass[j]+=PtrMass[j+1];
|
||||
PtrMass[j+1]=PtrMass[j]-PtrMass[j+1];
|
||||
PtrMass[j]-=PtrMass[j+1];
|
||||
EXCHANGES++;
|
||||
CONDITIONS++;
|
||||
}
|
||||
ITERATION++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int A[]={-1,1,2,3,3}, B[]={-2,0,2,4,4};
|
||||
|
||||
/*.......................................................................*/
|
||||
/* ‘«¨ï¨¥ ¤¢ãå ®âá®àâ¨à®¢ ëå ¢¥ªâ®à®¢ ¢ ®¤¨ */
|
||||
void Join()
|
||||
{
|
||||
int C[10], i,j,k;
|
||||
|
||||
for (i=j=k=0; k < 10; k++)
|
||||
{
|
||||
if (A[i] <= B[j])
|
||||
{ C[k]=A[i]; i++; }
|
||||
else
|
||||
{ C[k]=B[j]; j++; }
|
||||
}
|
||||
cprintf("\nŒ áᨢ A[]:");
|
||||
Prn(A, sizeof(A) / sizeof(A[0]));
|
||||
cprintf("\nŒ áᨢ B[]:");
|
||||
Prn(B, sizeof(B) / sizeof(B[0]));
|
||||
cprintf("\nŒ áᨢ C[]:");
|
||||
Prn(C, sizeof(C) / sizeof(C[0]));
|
||||
puts("\n\n\nAny key...");
|
||||
getch();
|
||||
}
|
||||
|
||||
|
||||
|
||||
int aa[]={9,5,3,2,1};
|
||||
|
||||
/*.......................................................................*/
|
||||
void Shell(PtrMass, count)
|
||||
int *PtrMass, count;
|
||||
{
|
||||
int i, j, gap, k, x;
|
||||
|
||||
for(k=0; k < 5; k++)
|
||||
{
|
||||
gap = aa[k];
|
||||
for(i=gap; i < count; ++i)
|
||||
{
|
||||
x=PtrMass[i];
|
||||
for(j=i-gap; x < PtrMass[j] && j >= 0; j = j-gap)
|
||||
{
|
||||
PtrMass[j+gap]=PtrMass[j];
|
||||
ITERATION++;
|
||||
EXCHANGES++;
|
||||
}
|
||||
PtrMass[j+gap]=x;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*.......................................................................*/
|
||||
void Quick(PtrMass, left, right)
|
||||
int *PtrMass, left, right;
|
||||
{
|
||||
int x, y, i, j;
|
||||
i = left;
|
||||
j = right;
|
||||
x = PtrMass[(left+right) / 2];
|
||||
do {
|
||||
while(PtrMass[i] < x && i < right) { i++; ITERATION++; }
|
||||
while(x < PtrMass[j] && j > left) { j--; ITERATION++; }
|
||||
|
||||
if(i <= j)
|
||||
{
|
||||
y=PtrMass[i];
|
||||
PtrMass[i]=PtrMass[j];
|
||||
PtrMass[j]=y;
|
||||
i++;
|
||||
j--;
|
||||
EXCHANGES++;
|
||||
CONDITIONS++;
|
||||
}
|
||||
} while(i <= j);
|
||||
|
||||
if(left < j) Quick(PtrMass,left,j);
|
||||
if(i < right) Quick(PtrMass,i,right);
|
||||
}
|
||||
Reference in New Issue
Block a user