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('?');
|
||||
print(errmsgs[errcode - ERR_FIRST]);
|
||||
print(" \"");
|
||||
print(txtPtr);
|
||||
print("\"\n");
|
||||
}
|
||||
#ifdef A2E
|
||||
#pragma code-name (pop)
|
||||
|
|
|
@ -37,7 +37,7 @@
|
|||
/* */
|
||||
/**************************************************************************/
|
||||
|
||||
#define VERSIONSTR "0.77"
|
||||
#define VERSIONSTR "0.78"
|
||||
|
||||
void print(char *str);
|
||||
|
||||
|
|
370
eightballvm.c
370
eightballvm.c
|
@ -180,9 +180,6 @@ unsigned char *memory = 0;
|
|||
#define CHECKSTACKOVERFLOW(bytes)
|
||||
#endif
|
||||
|
||||
/* Handler for unsupported bytecode */
|
||||
#define UNSUPPORTED() unsupported()
|
||||
|
||||
#ifdef STACKCHECKS
|
||||
/*
|
||||
* Check for evaluation stack underflow.
|
||||
|
@ -1084,76 +1081,264 @@ typedef void (*func)(void);
|
|||
* Must be in same order as enum bytecode.
|
||||
*/
|
||||
func jumptbl[] = {
|
||||
vm_end,
|
||||
vm_ldimm,
|
||||
vm_ldaword,
|
||||
vm_ldawordimm,
|
||||
vm_ldabyte,
|
||||
vm_ldabyteimm,
|
||||
vm_staword,
|
||||
vm_stawordimm,
|
||||
vm_stabyte,
|
||||
vm_stabyteimm,
|
||||
vm_ldrword,
|
||||
vm_ldrwordimm,
|
||||
vm_ldrbyte,
|
||||
vm_ldrbyteimm,
|
||||
vm_strword,
|
||||
vm_strwordimm,
|
||||
vm_strbyte,
|
||||
vm_strbyteimm,
|
||||
vm_swap,
|
||||
vm_dup,
|
||||
vm_dup2,
|
||||
vm_drop,
|
||||
vm_over,
|
||||
vm_pick,
|
||||
vm_popword,
|
||||
vm_popbyte,
|
||||
vm_pshword,
|
||||
vm_pshbyte,
|
||||
vm_discard,
|
||||
vm_sptofp,
|
||||
vm_fptosp,
|
||||
vm_ator,
|
||||
vm_rtoa,
|
||||
vm_inc,
|
||||
vm_dec,
|
||||
vm_add,
|
||||
vm_sub,
|
||||
vm_mul,
|
||||
vm_div,
|
||||
vm_mod,
|
||||
vm_neg,
|
||||
vm_gt,
|
||||
vm_gte,
|
||||
vm_lt,
|
||||
vm_lte,
|
||||
vm_eql,
|
||||
vm_neql,
|
||||
vm_and,
|
||||
vm_or,
|
||||
vm_not,
|
||||
vm_bitand,
|
||||
vm_bitor,
|
||||
vm_bitxor,
|
||||
vm_bitnot,
|
||||
vm_lsh,
|
||||
vm_rsh,
|
||||
vm_jmp,
|
||||
vm_jmpimm,
|
||||
vm_brnch,
|
||||
vm_brnchimm,
|
||||
vm_jsr,
|
||||
vm_jsrimm,
|
||||
vm_rts,
|
||||
vm_prdec,
|
||||
vm_prhex,
|
||||
vm_prch,
|
||||
vm_prstr,
|
||||
vm_prmsg,
|
||||
vm_kbdch,
|
||||
vm_kbdln};
|
||||
vm_end,
|
||||
vm_ldimm,
|
||||
vm_ldaword,
|
||||
vm_ldawordimm,
|
||||
vm_ldabyte,
|
||||
vm_ldabyteimm,
|
||||
vm_staword,
|
||||
vm_stawordimm,
|
||||
vm_stabyte,
|
||||
vm_stabyteimm,
|
||||
vm_ldrword,
|
||||
vm_ldrwordimm,
|
||||
vm_ldrbyte,
|
||||
vm_ldrbyteimm,
|
||||
vm_strword,
|
||||
vm_strwordimm,
|
||||
vm_strbyte,
|
||||
vm_strbyteimm,
|
||||
vm_swap,
|
||||
vm_dup,
|
||||
vm_dup2,
|
||||
vm_drop,
|
||||
vm_over,
|
||||
vm_pick,
|
||||
vm_popword,
|
||||
vm_popbyte,
|
||||
vm_pshword,
|
||||
vm_pshbyte,
|
||||
vm_discard,
|
||||
vm_sptofp,
|
||||
vm_fptosp,
|
||||
vm_ator,
|
||||
vm_rtoa,
|
||||
vm_inc,
|
||||
vm_dec,
|
||||
vm_add,
|
||||
vm_sub,
|
||||
vm_mul,
|
||||
vm_div,
|
||||
vm_mod,
|
||||
vm_neg,
|
||||
vm_gt,
|
||||
vm_gte,
|
||||
vm_lt,
|
||||
vm_lte,
|
||||
vm_eql,
|
||||
vm_neql,
|
||||
vm_and,
|
||||
vm_or,
|
||||
vm_not,
|
||||
vm_bitand,
|
||||
vm_bitor,
|
||||
vm_bitxor,
|
||||
vm_bitnot,
|
||||
vm_lsh,
|
||||
vm_rsh,
|
||||
vm_jmp,
|
||||
vm_jmpimm,
|
||||
vm_brnch,
|
||||
vm_brnchimm,
|
||||
vm_jsr,
|
||||
vm_jsrimm,
|
||||
vm_rts,
|
||||
vm_prdec,
|
||||
vm_prhex,
|
||||
vm_prch,
|
||||
vm_prstr,
|
||||
vm_prmsg,
|
||||
vm_kbdch,
|
||||
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.
|
||||
|
@ -1255,7 +1440,46 @@ void execute()
|
|||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef A2E
|
||||
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