home *** CD-ROM | disk | FTP | other *** search
- /*****************************************************************************/
- /* */
- /* */
- /* CP/M emulator version 0.1 */
- /* */
- /* written by Michael Bischoff (mbi@mo.math.nat.tu-bs.de) */
- /* June-1994 */
- /* */
- /* This file is distributed under the GNU COPYRIGHT */
- /* see COPYRIGHT.GNU for Copyright details */
- /* */
- /* */
- /*****************************************************************************/
- /* Opcodes ED xx ohne Flagbeeinflussung */
-
- .data
- jumptab2: .long EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2
- .long EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2
- .long EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2
- .long EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2
- .long EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2
- .long EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2
- .long EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2
- .long EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2
-
- .long EXIT2, EXIT2, ed42, ed43, ed44, EXIT2, EXIT2, ed47
- .long EXIT2, EXIT2, ed4a, ed4b, EXIT2, opc9, EXIT2, ed4f
- .long EXIT2, EXIT2, ed52, ed53, EXIT2, EXIT2, EXIT2, ed57
- .long EXIT2, EXIT2, ed5a, ed5b, EXIT2, EXIT2, EXIT2, ed5f
- .long EXIT2, EXIT2, ed62, ed63, EXIT2, EXIT2, EXIT2, ed67
- .long EXIT2, EXIT2, ed6a, ed6b, EXIT2, EXIT2, EXIT2, ed6f
- .long EXIT2, EXIT2, ed72, ed73, EXIT2, EXIT2, EXIT2, EXIT2
- .long EXIT2, EXIT2, ed7a, ed7b, EXIT2, EXIT2, EXIT2, EXIT2
-
- .long EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2
- .long EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2
- .long EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2
- .long EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2
- .long eda0, eda1, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2
- .long eda8, eda9, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2
- .long edb0, edb1, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2
- .long edb8, edb9, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2
-
- .long EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2
- .long EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2
- .long EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2
- .long EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2
- .long EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2
- .long EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2
- .long EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2
- .long EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2, EXIT2
-
- #define edcode(n) .align NALIGN,0x90
-
- edcode (0x42) /* SBC HL,BC */
- ed42: orb $2,%ah
- sahf
- sbbw %cx,%bx
- jmp setaddadc
-
- edcode (0x43) /* LD (nnnn),BC */
- ed43: movzwl (%esi,%ebp),%edi
- incl %esi
- incl %esi
- movw %cx,(%ebp,%edi)
- dispatch
-
- edcode (0x4a) /* ADC HL,BC */
- ed4a: andb $0xd5,%ah
- sahf
- adcw %cx,%bx
- jmp setaddadc
-
- edcode (0x4b) /* LD BC,(nnnn) */
- ed4b: movzwl (%esi,%ebp),%edi
- incl %esi
- incl %esi
- movw (%ebp,%edi),%cx
- dispatch
-
- edcode (0x52) /* SBC HL,DE */
- ed52: orb $2,%ah
- sahf
- sbbw %dx,%bx
- jmp setaddadc
-
- edcode (0x53) /* LD (nnnn),DE */
- ed53: movzwl (%esi,%ebp),%edi
- incl %esi
- incl %esi
- movw %dx,(%ebp,%edi)
- dispatch
-
- edcode (0x5a) /* ADC HL,DE */
- ed5a: andb $0xd5,%ah
- sahf
- adcw %dx,%bx
- jmp setaddadc
-
- edcode (0x5b) /* LD DE,(nnnn) */
- ed5b: movzwl (%esi,%ebp),%edi
- incl %esi
- incl %esi
- movw (%ebp,%edi),%dx
- dispatch
-
- edcode (0x62) /* SBC HL,HL */
- ed62: orb $2,%ah
- sahf
- sbbw %bx,%bx
- jmp setaddadc
-
- edcode (0x63) /* LD (nnnn),HL */
- ed63: movzwl (%esi,%ebp),%edi
- incl %esi
- incl %esi
- movw %bx,(%ebp,%edi)
- dispatch
-
- edcode (0x6a) /* ADC HL,HL */
- ed6a: andb $0xd5,%ah
- sahf
- adcw %bx,%bx
- jmp setaddadc
-
- edcode (0x6b) /* LD HL,(nnnn) */
- ed6b: movzwl (%esi,%ebp),%edi
- incl %esi
- incl %esi
- movw (%ebp,%edi),%bx
- dispatch
-
- edcode (0x72) /* SBC HL,SP */
- ed72: orb $2,%ah
- sahf
- sbbw _z80regs+4,%bx
- jmp setaddadc
-
- edcode (0x73) /* LD (nnnn),SP */
- ed73: movzwl (%esi,%ebp),%edi
- incl %esi
- incl %esi
- pushl %eax
- movw _z80regs+4,%ax
- movw %ax,(%ebp,%edi)
- popl %eax
- dispatch
-
- edcode (0x7a) /* ADC HL,SP */
- ed7a: andb $0xd5,%ah
- sahf
- adcw _z80regs+4,%bx
- jmp setaddadc
-
- edcode (0x7b) /* LD SP,(nnnn) */
- ed7b: movzwl (%esi,%ebp),%edi
- incl %esi
- incl %esi
- movw (%ebp,%edi),%di
- movw %di,_z80regs+4
- dispatch
-
-
- edcode (0x44) /* NEG */
- ed44: orb $2,%ah
- negb %al
- movl %eax,%edi
- lahf
- seto %al
- shlb $2,%al
- andb $0xd1,%ah
- orb %al,%ah
- andl $0x2ff,%edi
- xorb %al,%al
- orl %edi,%eax
- dispatch
-
- edcode (0x47) /* LD I,A */
- ed47: movb %al,_z80regs+25
- dispatch
- edcode (0x4f) /* LD R,A */
- ed4f: movb %al,_z80regs+24
- dispatch
- edcode (0x57) /* LD A,I */
- ed57: movb _z80regs+25,%al
- dispatch
- edcode (0x5f) /* LD A,R */
- ed5f: movb _z80regs+24,%al
- andb $0x7f,%al /* is NOT random */
- dispatch
-
-
-
- edcode (0xa0) /* LDI */
- eda0: pushl %eax
- movb (%ebp,%ebx),%al
- movb %al,(%ebp,%edx)
- incw %bx
- incw %dx
- decw %cx
- setnz %al
- shlb $2,%al
- andb $0xe9,%ah
- orb %al,%ah
- xorb %al,%al
- xchgl %eax,%edi
- popl %eax
- xorb %ah,%ah
- orl %edi,%eax
- dispatch
-
- edcode (0xa8) /* LDD */
- eda8: pushl %eax
- movb (%ebp,%ebx),%al
- movb %al,(%ebp,%edx)
- decw %bx
- decw %dx
- decw %cx
- setnz %al
- shlb $2,%al
- andb $0xe9,%ah
- orb %al,%ah
- xorb %al,%al
- xchgl %eax,%edi
- popl %eax
- xorb %ah,%ah
- orl %edi,%eax
- dispatch
-
- edcode (0xb0) /* LDIR */
- edb0: cld
- jmp do_ldir
-
- edcode (0xb8) /* LDDR */
- edb8: std
- do_ldir: pushl %edi
- pushl %esi
- movl %ebx,%esi
- movl %edx,%edi
- addl %ebp,%esi
- addl %ebp,%edi
- rep
- movsb
- subl %ebp,%esi
- subl %ebp,%edi
- movl %esi,%ebx
- movl %edi,%edx
- popl %esi
- popl %edi
- andb $0xe9,%ah
- cld
- dispatch
-
-
- edcode (0xb1) /* CPIR */
- edb1: movl %eax,%edi
- andw $0xbbff,%di
- cpirloop:
- cmpb (%ebp,%ebx),%al
- jz cpir1
- incw %bx
- decw %cx
- jnz cpirloop
- movb $0x06,%ah
- orw %di,%ax
- dispatch
- .align 2,0x90
- cpir1: incw %bx
- cpirdr: decw %cx
- setnz %ah
- shlb $2,%ah
- orb $0x42,%ah
- orw %di,%ax
- dispatch
-
- edcode (0xb9) /* CPDR */
- edb9: movl %eax,%edi
- andw $0xbbff,%di
- cpdrloop:
- cmpb (%ebp,%ebx),%al
- jz cpdr1
- decw %bx
- decw %cx
- jnz cpdrloop
- movb $0x06,%ah
- orw %di,%ax
- dispatch
- .align 2,0x90
- cpdr1: decw %bx
- jmp cpirdr
-
-
-
- edcode (0xa1) /* CPI */
- eda1: movl %eax,%edi
- andw $0x29ff,%di
- cmpb (%ebp,%ebx),%al
- lahf
- andb $0xd0,%ah
- incw %bx
- decw %cx
- setnz %al
- shlb $2,%al
- orb $0x02,%al
- orb %al,%ah
- xorb %al,%al
- orw %di,%ax
- dispatch
-
- edcode (0xa9) /* CPD */
- eda9: movl %eax,%edi
- andw $0x29ff,%di
- cmpb (%ebp,%ebx),%al
- lahf
- andb $0xd0,%ah
- decw %bx
- decw %cx
- setnz %al
- shlb $2,%al
- orb $0x02,%al
- orb %al,%ah
- xorb %al,%al
- orw %di,%ax
- dispatch
-
-
- edcode (0x67) /* RRD */
- ed67: movl %eax,%edi
- movb (%ebp,%ebx),%ah
- rorw $4,%ax
- rorb $4,%al
- movb %ah,(%ebp,%ebx)
- orb %al,%al
- lahf
- andb $0xc4,%ah
- andl $0x28ff,%edi
- orw %edi,%eax
- dispatch
-
- edcode (0x6f) /* RLD */
- ed6f: movl %eax,%edi
- movb (%ebp,%ebx),%ah
- rolb $4,%al
- rolw $4,%ax
- movb %ah,(%ebp,%ebx)
- orb %al,%al
- lahf
- andb $0xc4,%ah
- andl $0x28ff,%edi
- orw %edi,%eax
- dispatch