home *** CD-ROM | disk | FTP | other *** search
- ** The implementation-dependent Z80 instructions.
- ** (More or less just the label-defining mechanisms.)
-
- ** If the label GENERIC_OBJECT is defined, these instructions will be
- ** assumed defined in a separate object file. When for instance "In A,(n)"
- ** is executed, a jump will be made to the XREF:ed label "Z80_In_A_1n1".
- ** They will be about 12 clocks slower, but it provides more flexibility
- ** (and some more address space for the cache vectors).
- ** The file 'extern_instr.a' compiles to such an object file.
-
- ** If GENERIC_OBJECT is not defined, they will be inline expanded like
- ** normal instruction routines, the macros taken from a file named
- ** 'machine_macs.i'. (I expect the macros in 'generic_macs.i' will never
- ** be used for this purpose - if you compile for maximum speed, why use
- ** the non-optimised routines?) This will create a machine-specific object
- ** file, not needing any XREF:ed instructions, but clearly only useful for
- ** a single project. Note: There is nothing stopping you from making some
- ** (or even all, but why?) of the macros in 'machine_macs.i' jump to
- ** external labels, if you wish to create a "slightly more specialised"
- ** Z80 emulator object file.
-
- ** The macro names are made from the instruction labels with "_mac"
- ** appended, and the external labels are "Z80_" with the instruction
- ** labels appended.
- ** There must be a separate macro for each instruction label.
-
- ** Tests for self-modifying code should not be included in the macros!
- ** They are executed before the macro expansion/jump to label.
-
- ** ======================================================================
-
- IFD VERBOSE
- LIST
- ** Compiling the impldept.i file.
- NOLIST
- ENDC
-
-
- IFD GENERIC_OBJECT
-
-
- IFD VERBOSE
- LIST
- ** Creating a generic object file. Jumps to external labels are created
- ** for the implementation-dependent instruction routines.
- NOLIST
- ENDC
-
- ;Macro to cross-ref and jump
-
- IMPLDEPT MACRO ;Instruction_name, [ do_before_call ]
- XREF Z80_\1
- \1 \2
- jmp Z80_\1
- ENDM
-
-
- ELSE
-
-
- IFD VERBOSE
- LIST
- ** Using machine-specific macros from the file machine.i, and expanding
- ** the macros inline.
- NOLIST
- ENDC
-
- ;Get the instruction macros
-
- INCLUDE machine_macs.i
-
- ;Macro to inline expand instruction macro
-
- IMPLDEPT MACRO ;Instruction_name, [ do_before_call ]
- \1 \2
- \1_mac
- ENDM
-
- ENDC ;IFD GENERIC_OBJECT
-
-
- **
- ** The instruction labels begin here:
- **
-
- In_r_1C1 MACRO
- IMPLDEPT In_\1_1C1,opcode_2_bytes
- ENDM
- do_r In_r_1C1
-
- IMPLDEPT In_H_1C1,opcode_2_bytes
-
- IMPLDEPT In_xx_1C1,opcode_2_bytes ;undocumented
-
- IMPLDEPT In_A_1n1
-
- IMPLDEPT Ind,opcode_2_bytes
-
- IMPLDEPT Indr,opcode_2_bytes
-
- IMPLDEPT Ini,opcode_2_bytes
-
- IMPLDEPT Inir,opcode_2_bytes
-
- IMPLDEPT Ld_A_R,opcode_2_bytes
-
- IMPLDEPT Ld_R_A,opcode_2_bytes
-
- IMPLDEPT Otdr,opcode_2_bytes
-
- IMPLDEPT Otir,opcode_2_bytes
-
- Out_1C1_r MACRO
- IMPLDEPT Out_1C1_\1,opcode_2_bytes
- ENDM
- do_r Out_1C1_r
-
- IMPLDEPT Out_1C1_H,opcode_2_bytes
-
- IMPLDEPT Out_1C1_xx,opcode_2_bytes ;undocumented
-
- IMPLDEPT Out_1n1_A
-
- IMPLDEPT Outd,opcode_2_bytes
-
- IMPLDEPT Outi,opcode_2_bytes
-
- IMPLDEPT Reti,opcode_2_bytes
-
- IMPLDEPT Retn,opcode_2_bytes
-
- ** =====================================================================
-