diff --git a/include/stdio.c b/include/stdio.c index 3bdf8ed..c6b0984 100644 --- a/include/stdio.c +++ b/include/stdio.c @@ -556,6 +556,17 @@ int sprintf(char * str, const char * fmt, ...) return d - str; } +void vprintf(const char * fmt, va_list vlist) +{ + char buff[50]; + sformat(buff, fmt, (int *)vlist, true); +} + +int vsprintf(char * str, const char * fmt, va_list vlist) +{ + char * d = sformat(str, fmt, (int *)vlist, false); + return d - str; +} static inline bool isspace(char c) { diff --git a/include/stdio.h b/include/stdio.h index bc1702d..cd82089 100644 --- a/include/stdio.h +++ b/include/stdio.h @@ -3,6 +3,7 @@ #include #include +#include void putchar(char c); @@ -18,6 +19,10 @@ void printf(const char * fmt, ...); int sprintf(char * str, const char * fmt, ...); +void vprintf(const char * fmt, va_list vlist); + +int vsprintf(char * str, const char * fmt, va_list vlist); + int scanf(const char * fmt, ...); int sscanf(const char * str, const char * fmt, ...); diff --git a/include/stdlib.c b/include/stdlib.c index 2e9a08e..edd3c7b 100644 --- a/include/stdlib.c +++ b/include/stdlib.c @@ -544,7 +544,7 @@ unsigned heapfree(void) } #if 0 -struct Heap { +struct Heap {q unsigned int size; Heap * next; } * freeHeap; diff --git a/oscar64/NativeCodeGenerator.cpp b/oscar64/NativeCodeGenerator.cpp index 28e050e..1ab7e58 100644 --- a/oscar64/NativeCodeGenerator.cpp +++ b/oscar64/NativeCodeGenerator.cpp @@ -8462,10 +8462,20 @@ NativeCodeBasicBlock * NativeCodeBasicBlock::CopyValue(InterCodeProcedure* proc, { for (int i = 0; i < size; i++) { - mIns.Push(NativeCodeInstruction(ins, ASMIT_LDY, ASMIM_IMMEDIATE, si)); - mIns.Push(NativeCodeInstruction(ins, ASMIT_LDA, ASMIM_INDIRECT_Y, sreg)); - mIns.Push(NativeCodeInstruction(ins, ASMIT_LDY, ASMIM_IMMEDIATE, di)); - mIns.Push(NativeCodeInstruction(ins, ASMIT_STA, ASMIM_INDIRECT_Y, dreg)); + if (ins->mSrc[0].mTemp < 0 && ins->mSrc[0].mMemory == IM_FPARAM) + mIns.Push(NativeCodeInstruction(ins, ASMIT_LDA, ASMIM_ZERO_PAGE, BC_REG_FPARAMS + ins->mSrc[0].mVarIndex + ins->mSrc[0].mIntConst + i)); + else + { + mIns.Push(NativeCodeInstruction(ins, ASMIT_LDY, ASMIM_IMMEDIATE, si)); + mIns.Push(NativeCodeInstruction(ins, ASMIT_LDA, ASMIM_INDIRECT_Y, sreg)); + } + if (ins->mSrc[1].mTemp < 0 && ins->mSrc[1].mMemory == IM_FFRAME) + mIns.Push(NativeCodeInstruction(ins, ASMIT_STA, ASMIM_ZERO_PAGE, BC_REG_FPARAMS + ins->mSrc[1].mVarIndex + ins->mSrc[1].mIntConst + i)); + else + { + mIns.Push(NativeCodeInstruction(ins, ASMIT_LDY, ASMIM_IMMEDIATE, di)); + mIns.Push(NativeCodeInstruction(ins, ASMIT_STA, ASMIM_INDIRECT_Y, dreg)); + } si += sstride; di += dstride; @@ -54640,7 +54650,7 @@ void NativeCodeProcedure::Compile(InterCodeProcedure* proc) mInterProc->mLinkerObject->mNativeProc = this; - CheckFunc = !strcmp(mIdent->mString, "main"); + CheckFunc = !strcmp(mIdent->mString, "mbox::configure_animations"); int nblocks = proc->mBlocks.Size(); tblocks = new NativeCodeBasicBlock * [nblocks];