Add basic Z80 CPU support
Supported ISAs: - Z80 (all undocumented instructions) - Z180 - eZ80 (Z80 mode only) Datasheets: Z80: https://www.zilog.com/manage_directlink.php?filepath=docs/z80/um0080&extn=.pdf Z180: https://www.zilog.com/manage_directlink.php?filepath=docs/z180/ps0140&extn=.pdf eZ80: http://www.zilog.com/force_download.php?filepath=YUhSMGNEb3ZMM2QzZHk1NmFXeHZaeTVqYjIwdlpHOWpjeTlWVFRBd056Y3VjR1Jt To debug Z80 programs using GDB you must configure and embed z80-stub.c to your program (SDCC compiler is required). Or you may use some simulator with GDB support. gdb/ChangeLog: * Makefile.in (ALL_TARGET_OBS): Add z80-tdep.c. * NEWS: Mention z80 support. * configure.tgt: Handle z80*. * features/Makefile (XMLTOC): Add z80.xml. * features/z80-cpu.xml: New. * features/z80.c: Generate. * features/z80.xml: New. * z80-tdep.c: New file. * z80-tdep.h: New file. gdb/stubs/ChangeLog: * z80-stub.c: New file. Change-Id: Id0b7a6e210c3f93c6853c5e3031b7bcee47d0db9
This commit is contained in:
parent
12be796ca8
commit
3dab9e15d3
10 changed files with 2966 additions and 2 deletions
|
@ -853,7 +853,8 @@ ALL_TARGET_OBS = \
|
||||||
xstormy16-tdep.o \
|
xstormy16-tdep.o \
|
||||||
xtensa-config.o \
|
xtensa-config.o \
|
||||||
xtensa-linux-tdep.o \
|
xtensa-linux-tdep.o \
|
||||||
xtensa-tdep.o
|
xtensa-tdep.o \
|
||||||
|
z80-tdep.o
|
||||||
|
|
||||||
# The following native-target dependent variables are defined on
|
# The following native-target dependent variables are defined on
|
||||||
# configure.nat.
|
# configure.nat.
|
||||||
|
|
1
gdb/NEWS
1
gdb/NEWS
|
@ -429,6 +429,7 @@ alias [-a] [--] ALIAS = COMMAND [DEFAULT-ARGS...]
|
||||||
|
|
||||||
GNU/Linux/RISC-V (gdbserver) riscv*-*-linux*
|
GNU/Linux/RISC-V (gdbserver) riscv*-*-linux*
|
||||||
BPF bpf-unknown-none
|
BPF bpf-unknown-none
|
||||||
|
Z80 z80-unknown-*
|
||||||
|
|
||||||
* Python API
|
* Python API
|
||||||
|
|
||||||
|
|
|
@ -761,6 +761,10 @@ xtensa*-*-*linux*)
|
||||||
# Target: GNU/Linux Xtensa
|
# Target: GNU/Linux Xtensa
|
||||||
gdb_target_obs="xtensa-linux-tdep.o symfile-mem.o linux-tdep.o"
|
gdb_target_obs="xtensa-linux-tdep.o symfile-mem.o linux-tdep.o"
|
||||||
;;
|
;;
|
||||||
|
z80*)
|
||||||
|
# Target: Z80
|
||||||
|
gdb_target_obs="z80-tdep.o"
|
||||||
|
;;
|
||||||
|
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
|
|
@ -170,7 +170,8 @@ XMLTOC = \
|
||||||
s390x-tevx-linux64.xml \
|
s390x-tevx-linux64.xml \
|
||||||
s390x-vx-linux64.xml \
|
s390x-vx-linux64.xml \
|
||||||
s390-gs-linux64.xml \
|
s390-gs-linux64.xml \
|
||||||
s390x-gs-linux64.xml
|
s390x-gs-linux64.xml \
|
||||||
|
z80.xml
|
||||||
|
|
||||||
TDESC_CFILES = $(patsubst %.xml,%.c,$(XMLTOC))
|
TDESC_CFILES = $(patsubst %.xml,%.c,$(XMLTOC))
|
||||||
GDB = false
|
GDB = false
|
||||||
|
|
33
gdb/features/z80-cpu.xml
Normal file
33
gdb/features/z80-cpu.xml
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<!-- Copyright (C) 2020 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
Copying and distribution of this file, with or without modification,
|
||||||
|
are permitted in any medium without royalty provided the copyright
|
||||||
|
notice and this notice are preserved. -->
|
||||||
|
|
||||||
|
<!DOCTYPE feature SYSTEM "gdb-target.dtd">
|
||||||
|
<feature name="org.gnu.gdb.z80.cpu">
|
||||||
|
<flags id="af_flags" size="2">
|
||||||
|
<field name="C" start="0" end="0"/>
|
||||||
|
<field name="N" start="1" end="1"/>
|
||||||
|
<field name="P/V" start="2" end="2"/>
|
||||||
|
<field name="F3" start="3" end="3"/>
|
||||||
|
<field name="H" start="4" end="4"/>
|
||||||
|
<field name="F5" start="5" end="5"/>
|
||||||
|
<field name="Z" start="6" end="6"/>
|
||||||
|
<field name="S" start="7" end="7"/>
|
||||||
|
</flags>
|
||||||
|
<reg name="af" bitsize="16" type="af_flags"/>
|
||||||
|
<reg name="bc" bitsize="16" type="uint16"/>
|
||||||
|
<reg name="de" bitsize="16" type="data_ptr"/>
|
||||||
|
<reg name="hl" bitsize="16" type="data_ptr"/>
|
||||||
|
<reg name="sp" bitsize="16" type="data_ptr" />
|
||||||
|
<reg name="pc" bitsize="32" type="code_ptr" />
|
||||||
|
<reg name="ix" bitsize="16" type="data_ptr"/>
|
||||||
|
<reg name="iy" bitsize="16" type="data_ptr"/>
|
||||||
|
<reg name="af'" bitsize="16" type="af_flags"/>
|
||||||
|
<reg name="bc'" bitsize="16" type="uint16"/>
|
||||||
|
<reg name="de'" bitsize="16" type="data_ptr"/>
|
||||||
|
<reg name="hl'" bitsize="16" type="data_ptr"/>
|
||||||
|
<reg name="ir" bitsize="16" type="uint16"/>
|
||||||
|
</feature>
|
44
gdb/features/z80.c
Normal file
44
gdb/features/z80.c
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
/* THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi:set ro:
|
||||||
|
Original: z80.xml */
|
||||||
|
|
||||||
|
#include "defs.h"
|
||||||
|
#include "osabi.h"
|
||||||
|
#include "target-descriptions.h"
|
||||||
|
|
||||||
|
struct target_desc *tdesc_z80;
|
||||||
|
static void
|
||||||
|
initialize_tdesc_z80 (void)
|
||||||
|
{
|
||||||
|
target_desc_up result = allocate_target_description ();
|
||||||
|
set_tdesc_architecture (result.get (), bfd_scan_arch ("z80"));
|
||||||
|
|
||||||
|
struct tdesc_feature *feature;
|
||||||
|
|
||||||
|
feature = tdesc_create_feature (result.get (), "org.gnu.gdb.z80.cpu");
|
||||||
|
tdesc_type_with_fields *type_with_fields;
|
||||||
|
type_with_fields = tdesc_create_flags (feature, "af_flags", 2);
|
||||||
|
tdesc_add_flag (type_with_fields, 0, "C");
|
||||||
|
tdesc_add_flag (type_with_fields, 1, "N");
|
||||||
|
tdesc_add_flag (type_with_fields, 2, "P/V");
|
||||||
|
tdesc_add_flag (type_with_fields, 3, "F3");
|
||||||
|
tdesc_add_flag (type_with_fields, 4, "H");
|
||||||
|
tdesc_add_flag (type_with_fields, 5, "F5");
|
||||||
|
tdesc_add_flag (type_with_fields, 6, "Z");
|
||||||
|
tdesc_add_flag (type_with_fields, 7, "S");
|
||||||
|
|
||||||
|
tdesc_create_reg (feature, "af", 0, 1, NULL, 16, "af_flags");
|
||||||
|
tdesc_create_reg (feature, "bc", 1, 1, NULL, 16, "uint16");
|
||||||
|
tdesc_create_reg (feature, "de", 2, 1, NULL, 16, "data_ptr");
|
||||||
|
tdesc_create_reg (feature, "hl", 3, 1, NULL, 16, "data_ptr");
|
||||||
|
tdesc_create_reg (feature, "sp", 4, 1, NULL, 16, "data_ptr");
|
||||||
|
tdesc_create_reg (feature, "pc", 5, 1, NULL, 32, "code_ptr");
|
||||||
|
tdesc_create_reg (feature, "ix", 6, 1, NULL, 16, "data_ptr");
|
||||||
|
tdesc_create_reg (feature, "iy", 7, 1, NULL, 16, "data_ptr");
|
||||||
|
tdesc_create_reg (feature, "af'", 8, 1, NULL, 16, "af_flags");
|
||||||
|
tdesc_create_reg (feature, "bc'", 9, 1, NULL, 16, "uint16");
|
||||||
|
tdesc_create_reg (feature, "de'", 10, 1, NULL, 16, "data_ptr");
|
||||||
|
tdesc_create_reg (feature, "hl'", 11, 1, NULL, 16, "data_ptr");
|
||||||
|
tdesc_create_reg (feature, "ir", 12, 1, NULL, 16, "uint16");
|
||||||
|
|
||||||
|
tdesc_z80 = result.release ();
|
||||||
|
}
|
12
gdb/features/z80.xml
Normal file
12
gdb/features/z80.xml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<!-- Copyright (C) 2020 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
Copying and distribution of this file, with or without modification,
|
||||||
|
are permitted in any medium without royalty provided the copyright
|
||||||
|
notice and this notice are preserved. -->
|
||||||
|
|
||||||
|
<!DOCTYPE target SYSTEM "gdb-target.dtd">
|
||||||
|
<target>
|
||||||
|
<architecture>z80</architecture>
|
||||||
|
<xi:include href="z80-cpu.xml"/>
|
||||||
|
</target>
|
1355
gdb/stubs/z80-stub.c
Normal file
1355
gdb/stubs/z80-stub.c
Normal file
File diff suppressed because it is too large
Load diff
1461
gdb/z80-tdep.c
Normal file
1461
gdb/z80-tdep.c
Normal file
File diff suppressed because it is too large
Load diff
52
gdb/z80-tdep.h
Normal file
52
gdb/z80-tdep.h
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
/* Target-dependent code for the Z80.
|
||||||
|
|
||||||
|
Copyright (C) 2002-2021 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GDB.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef Z80_TDEP_H
|
||||||
|
#define Z80_TDEP_H
|
||||||
|
|
||||||
|
/* Register pair constants
|
||||||
|
Order optimized for gdb-stub implementation
|
||||||
|
Most of register pairs are 16 bit length on Z80 and
|
||||||
|
24 bit on eZ80 in ADL or MADL modes */
|
||||||
|
enum z80_regnum
|
||||||
|
{
|
||||||
|
Z80_AF_REGNUM,
|
||||||
|
Z80_BC_REGNUM,
|
||||||
|
Z80_DE_REGNUM,
|
||||||
|
Z80_HL_REGNUM,
|
||||||
|
Z80_SP_REGNUM, /* SPL on eZ80 CPU */
|
||||||
|
Z80_PC_REGNUM,
|
||||||
|
Z80_IX_REGNUM,
|
||||||
|
Z80_IY_REGNUM,
|
||||||
|
Z80_AFA_REGNUM,
|
||||||
|
Z80_BCA_REGNUM,
|
||||||
|
Z80_DEA_REGNUM,
|
||||||
|
Z80_HLA_REGNUM,
|
||||||
|
Z80_IR_REGNUM,
|
||||||
|
/* eZ80 only registers */
|
||||||
|
Z80_SPS_REGNUM /* SPS register of eZ80 CPU */
|
||||||
|
};
|
||||||
|
|
||||||
|
#define Z80_NUM_REGS 13
|
||||||
|
#define Z80_REG_BYTES (Z80_NUM_REGS*2)
|
||||||
|
|
||||||
|
#define EZ80_NUM_REGS (Z80_NUM_REGS + 1)
|
||||||
|
#define EZ80_REG_BYTES (EZ80_NUM_REGS*3)
|
||||||
|
|
||||||
|
#endif /* z80-tdep.h */
|
Loading…
Add table
Add a link
Reference in a new issue