mirror of
https://github.com/bobbimanners/EightBall.git
synced 2024-05-31 15:41:28 +00:00
v0.78: VM performance improvement, removed debug printout on error
This commit is contained in:
parent
8765cfce25
commit
86e517a6eb
BIN
bin/8ball20.prg
BIN
bin/8ball20.prg
Binary file not shown.
BIN
bin/8ball64.prg
BIN
bin/8ball64.prg
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
bin/disass
BIN
bin/disass
Binary file not shown.
BIN
bin/disass20.prg
BIN
bin/disass20.prg
Binary file not shown.
BIN
bin/disass64.prg
BIN
bin/disass64.prg
Binary file not shown.
BIN
bin/eightball
BIN
bin/eightball
Binary file not shown.
BIN
bin/eightballvm
BIN
bin/eightballvm
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -400,9 +400,6 @@ void error(unsigned char errcode)
|
||||||
{
|
{
|
||||||
printchar('?');
|
printchar('?');
|
||||||
print(errmsgs[errcode - ERR_FIRST]);
|
print(errmsgs[errcode - ERR_FIRST]);
|
||||||
print(" \"");
|
|
||||||
print(txtPtr);
|
|
||||||
print("\"\n");
|
|
||||||
}
|
}
|
||||||
#ifdef A2E
|
#ifdef A2E
|
||||||
#pragma code-name (pop)
|
#pragma code-name (pop)
|
||||||
|
|
|
@ -37,7 +37,7 @@
|
||||||
/* */
|
/* */
|
||||||
/**************************************************************************/
|
/**************************************************************************/
|
||||||
|
|
||||||
#define VERSIONSTR "0.77"
|
#define VERSIONSTR "0.78"
|
||||||
|
|
||||||
void print(char *str);
|
void print(char *str);
|
||||||
|
|
||||||
|
|
370
eightballvm.c
370
eightballvm.c
|
@ -180,9 +180,6 @@ unsigned char *memory = 0;
|
||||||
#define CHECKSTACKOVERFLOW(bytes)
|
#define CHECKSTACKOVERFLOW(bytes)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Handler for unsupported bytecode */
|
|
||||||
#define UNSUPPORTED() unsupported()
|
|
||||||
|
|
||||||
#ifdef STACKCHECKS
|
#ifdef STACKCHECKS
|
||||||
/*
|
/*
|
||||||
* Check for evaluation stack underflow.
|
* Check for evaluation stack underflow.
|
||||||
|
@ -1084,76 +1081,264 @@ typedef void (*func)(void);
|
||||||
* Must be in same order as enum bytecode.
|
* Must be in same order as enum bytecode.
|
||||||
*/
|
*/
|
||||||
func jumptbl[] = {
|
func jumptbl[] = {
|
||||||
vm_end,
|
vm_end,
|
||||||
vm_ldimm,
|
vm_ldimm,
|
||||||
vm_ldaword,
|
vm_ldaword,
|
||||||
vm_ldawordimm,
|
vm_ldawordimm,
|
||||||
vm_ldabyte,
|
vm_ldabyte,
|
||||||
vm_ldabyteimm,
|
vm_ldabyteimm,
|
||||||
vm_staword,
|
vm_staword,
|
||||||
vm_stawordimm,
|
vm_stawordimm,
|
||||||
vm_stabyte,
|
vm_stabyte,
|
||||||
vm_stabyteimm,
|
vm_stabyteimm,
|
||||||
vm_ldrword,
|
vm_ldrword,
|
||||||
vm_ldrwordimm,
|
vm_ldrwordimm,
|
||||||
vm_ldrbyte,
|
vm_ldrbyte,
|
||||||
vm_ldrbyteimm,
|
vm_ldrbyteimm,
|
||||||
vm_strword,
|
vm_strword,
|
||||||
vm_strwordimm,
|
vm_strwordimm,
|
||||||
vm_strbyte,
|
vm_strbyte,
|
||||||
vm_strbyteimm,
|
vm_strbyteimm,
|
||||||
vm_swap,
|
vm_swap,
|
||||||
vm_dup,
|
vm_dup,
|
||||||
vm_dup2,
|
vm_dup2,
|
||||||
vm_drop,
|
vm_drop,
|
||||||
vm_over,
|
vm_over,
|
||||||
vm_pick,
|
vm_pick,
|
||||||
vm_popword,
|
vm_popword,
|
||||||
vm_popbyte,
|
vm_popbyte,
|
||||||
vm_pshword,
|
vm_pshword,
|
||||||
vm_pshbyte,
|
vm_pshbyte,
|
||||||
vm_discard,
|
vm_discard,
|
||||||
vm_sptofp,
|
vm_sptofp,
|
||||||
vm_fptosp,
|
vm_fptosp,
|
||||||
vm_ator,
|
vm_ator,
|
||||||
vm_rtoa,
|
vm_rtoa,
|
||||||
vm_inc,
|
vm_inc,
|
||||||
vm_dec,
|
vm_dec,
|
||||||
vm_add,
|
vm_add,
|
||||||
vm_sub,
|
vm_sub,
|
||||||
vm_mul,
|
vm_mul,
|
||||||
vm_div,
|
vm_div,
|
||||||
vm_mod,
|
vm_mod,
|
||||||
vm_neg,
|
vm_neg,
|
||||||
vm_gt,
|
vm_gt,
|
||||||
vm_gte,
|
vm_gte,
|
||||||
vm_lt,
|
vm_lt,
|
||||||
vm_lte,
|
vm_lte,
|
||||||
vm_eql,
|
vm_eql,
|
||||||
vm_neql,
|
vm_neql,
|
||||||
vm_and,
|
vm_and,
|
||||||
vm_or,
|
vm_or,
|
||||||
vm_not,
|
vm_not,
|
||||||
vm_bitand,
|
vm_bitand,
|
||||||
vm_bitor,
|
vm_bitor,
|
||||||
vm_bitxor,
|
vm_bitxor,
|
||||||
vm_bitnot,
|
vm_bitnot,
|
||||||
vm_lsh,
|
vm_lsh,
|
||||||
vm_rsh,
|
vm_rsh,
|
||||||
vm_jmp,
|
vm_jmp,
|
||||||
vm_jmpimm,
|
vm_jmpimm,
|
||||||
vm_brnch,
|
vm_brnch,
|
||||||
vm_brnchimm,
|
vm_brnchimm,
|
||||||
vm_jsr,
|
vm_jsr,
|
||||||
vm_jsrimm,
|
vm_jsrimm,
|
||||||
vm_rts,
|
vm_rts,
|
||||||
vm_prdec,
|
vm_prdec,
|
||||||
vm_prhex,
|
vm_prhex,
|
||||||
vm_prch,
|
vm_prch,
|
||||||
vm_prstr,
|
vm_prstr,
|
||||||
vm_prmsg,
|
vm_prmsg,
|
||||||
vm_kbdch,
|
vm_kbdch,
|
||||||
vm_kbdln};
|
vm_kbdln,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported,
|
||||||
|
unsupported /* Should be at least 255 lines long */
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Fetch, decode and execute a VM instruction.
|
* Fetch, decode and execute a VM instruction.
|
||||||
|
@ -1255,7 +1440,46 @@ void execute()
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef A2E
|
||||||
jumptbl[MEM(pc)]();
|
jumptbl[MEM(pc)]();
|
||||||
|
#else
|
||||||
|
#if 0
|
||||||
|
/* Slight speedup versus the code emitted by cc65 */
|
||||||
|
__asm__("ml: lda (_pc)");
|
||||||
|
__asm__(" stz tmp1");
|
||||||
|
__asm__(" asl a");
|
||||||
|
__asm__(" rol tmp1");
|
||||||
|
__asm__(" clc");
|
||||||
|
__asm__(" adc #<(_jumptbl)");
|
||||||
|
__asm__(" sta ptr1");
|
||||||
|
__asm__(" lda tmp1");
|
||||||
|
__asm__(" adc #>(_jumptbl)");
|
||||||
|
__asm__(" sta ptr1+1");
|
||||||
|
__asm__(" ldy #$01");
|
||||||
|
__asm__(" lda (ptr1),y");
|
||||||
|
__asm__(" tax");
|
||||||
|
__asm__(" lda (ptr1)");
|
||||||
|
__asm__(" jsr callax");
|
||||||
|
__asm__(" bra ml");
|
||||||
|
#else
|
||||||
|
/* This version assumes (_pc) < 128, saves a few more cycles */
|
||||||
|
/* Slight speedup versus the code emitted by cc65 */
|
||||||
|
__asm__("ml: lda (_pc)");
|
||||||
|
__asm__(" asl a");
|
||||||
|
__asm__(" clc");
|
||||||
|
__asm__(" adc #<(_jumptbl)");
|
||||||
|
__asm__(" sta ptr1");
|
||||||
|
__asm__(" lda #$00");
|
||||||
|
__asm__(" adc #>(_jumptbl)");
|
||||||
|
__asm__(" sta ptr1+1");
|
||||||
|
__asm__(" ldy #$01");
|
||||||
|
__asm__(" lda (ptr1),y");
|
||||||
|
__asm__(" tax");
|
||||||
|
__asm__(" lda (ptr1)");
|
||||||
|
__asm__(" jsr callax");
|
||||||
|
__asm__(" bra ml");
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue
Block a user