diff options
author | Michael Pavone <pavone@retrodev.com> | 2014-02-19 00:22:27 -0800 |
---|---|---|
committer | Michael Pavone <pavone@retrodev.com> | 2014-02-19 00:22:27 -0800 |
commit | 9383ce79b4f1f006cb1a7f62f1fcc8016e31ad04 (patch) | |
tree | 8a70506e352fc1915ac630debeab3a03f5b55024 /runtime_32.S | |
parent | 33910344b7546f27baba85921c0c7bdd70b1b0a9 (diff) |
Apart from the Z80 core, BlastEm now supports 32-bit x86
Diffstat (limited to 'runtime_32.S')
-rw-r--r-- | runtime_32.S | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/runtime_32.S b/runtime_32.S new file mode 100644 index 0000000..1f0c503 --- /dev/null +++ b/runtime_32.S @@ -0,0 +1,74 @@ + + +invalid_msg: + .asciz "Invalid instruction at %X\n" + + .global m68k_invalid +m68k_invalid: + push %ecx + push invalid_msg + xor %eax, %eax + call printf + push $1 + call exit + + .global bcd_add +bcd_add: + xchg %eax, %edi + + mov %cl, %ch + mov %al, %ah + and $0xF, %ch + and $0xF, %ah + and $0xF0, %cl + and $0xF0, %al + add %ah, %ch + cmp $10, %ch + jb no_adjust + add $6, %ch +no_adjust: + add %ch, %al + add %al, %cl + mov $0, %ch + jc def_adjust + cmp $0xA0, %cl + jb no_adjust_h +def_adjust: + add $0x60, %cl + mov $1, %ch +no_adjust_h: + + mov %edi, %eax + ret + + .global bcd_sub +bcd_sub: + xchg %eax, %edi + + mov %cl, %ch + mov %al, %ah + and $0xF, %ch + and $0xF, %ah + and $0xF0, %cl + and $0xF0, %al + sub %ah, %ch + cmp $10, %ch + jb no_adjusts + sub $6, %ch +no_adjusts: + add %ch, %cl + sub %al, %cl + mov $0, %ch + jc def_adjusts + cmp $0xA0, %cl + jb no_adjust_hs +def_adjusts: + sub $0x60, %cl + mov $1, %ch +no_adjust_hs: + + mov %edi, %eax + ret + + + |