From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id TNuqJzFEfF9wHgAAWB0awg (envelope-from ) for ; Tue, 06 Oct 2020 06:17:21 -0400 Received: by simark.ca (Postfix, from userid 112) id 9646A1EE0F; Tue, 6 Oct 2020 06:17:21 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-1.1 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,MAILING_LIST_MULTI,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.2 Received: from sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id 92B5B1E58E for ; Tue, 6 Oct 2020 06:17:19 -0400 (EDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 79DCF3850438; Tue, 6 Oct 2020 10:17:18 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 79DCF3850438 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1601979438; bh=6ITANE4MsxieJ42H9EzCE5FQnh1ECnEZPKXGyY0y0N8=; h=References:In-Reply-To:Date:Subject:To:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=MHji6aO7QMK98Tido36VR0qb4evz8AzUqeUS0rDIAgtadYv1R3y695j3gzPpkolpF upZy7l87veMs30Tr+y+17Z2/07Qj3KNoGCk7wDWjmfkCTkX4max5nBhPeT7M9tmNrO V+d9MQGLWhqiKpNCcgGD9SoIwGSScp9z3bAk3yH4= Received: from mail-qk1-x741.google.com (mail-qk1-x741.google.com [IPv6:2607:f8b0:4864:20::741]) by sourceware.org (Postfix) with ESMTPS id 812DF3857023 for ; Tue, 6 Oct 2020 10:17:15 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 812DF3857023 Received: by mail-qk1-x741.google.com with SMTP id z6so7432632qkz.4 for ; Tue, 06 Oct 2020 03:17:15 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=6ITANE4MsxieJ42H9EzCE5FQnh1ECnEZPKXGyY0y0N8=; b=OJ1LuH4C+/xx8LB3sfQIYIhZPTnb0cbCa8f258ZyXHi2GaCr6C1pJh9pHop8NftJwV ojXQsHTTd98kexXqLznA9NkFKBGmY2GrvSqaP3wwF5sSn7L1dpYB7e6vk2Kpuji7N9Lt XgqShjVQG4fXiHZoahci1rnj7z7HMNI0WBuhuahf6bY3AK7Hz5iR6YenP3mknvS+Quy+ eTytCh2+q9/uncgxpPXKD1YxaK6wt9Q1asR5CrQJuZnxM5CrDJoHmAcXRhfY3SAbe11A zoEdzW4qIQOWv7zFXuCGMyrFs9ZeDe031wK1asnh22bWO/phX3nC345z76Kunf8NAyJO PhgQ== X-Gm-Message-State: AOAM532HNIQhN62hgpDk1cSi78C5fEWMP7/+paPJ2DBOW3/opJkGPqUb kU4Vpl548javEiDx0w/OhjkX8bG0/iaKiPT/PIft2B7lpOA= X-Google-Smtp-Source: ABdhPJyLzmyzxIzdh7o+Psr7JHhNIrJo1R6vGr2d2/ULFNDvFL6B4OUymGyjsKVDjK2kr2TbawofNCyPidoaao2wYl0= X-Received: by 2002:a37:ac09:: with SMTP id e9mr4441797qkm.213.1601979434533; Tue, 06 Oct 2020 03:17:14 -0700 (PDT) MIME-Version: 1.0 References: <5a120c4d-630a-08f5-fb81-d35237267adb@simark.ca> <20200925114042.14337-1-Sergey.Belyashov@gmail.com> In-Reply-To: <20200925114042.14337-1-Sergey.Belyashov@gmail.com> Date: Tue, 6 Oct 2020 13:17:02 +0300 Message-ID: Subject: Re: [PATCH v4] [gdb] Add basic Z80 CPU support To: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary="00000000000022339b05b0fde7c5" X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Sergey Belyashov via Gdb-patches Reply-To: Sergey Belyashov Cc: Jakub Ladman Errors-To: gdb-patches-bounces@sourceware.org Sender: "Gdb-patches" --00000000000022339b05b0fde7c5 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, There is instruction from Jakub Ladman on how to debug programs on the Amstrad(Sinclair) ZX Spectrum +2B computer using GDB. Sources are attached as an archive to the email. howtouse.txt Created on: 4. 10. 2020 Author: ladmanj This is demonstration how to use Small Devices C Compiler, with GNU AS assembler and GDB to debug Z80 code Only assembler instructions stepping is possible at the time of writing this text, because SDCC can't provide the symbols (and maybe other information) in the way gdb needs. The code being debugged is compiled and linked together with GDB-STUB, which is relatively small piece of code running on the target machine and provides interface between it and the GDB itself. This presentation is performed on the Amstrad(Sinclair) ZX Spectrum +2B computer. The tools used are: z80-unknown-elf-as, z80-unknown-elf-ld z80-unknown-elf-objcopy from the Sergey Belyashov's source tree from https://github.com/b-s-a/binutils-gdb bin2tap from https://sourceforge.net/projects/zxspectrumutils/ taptoser From Pavel Vymet=C3=A1lek's https://vym.cz/download/taptoser.= tar.gz to be used with Paul Farrow's modified 48k ROM-RS232 http://www.fruitcake.plus.com which redirects tape in&out to one of the three possible (software emulated serial) ports. The taptoser and the modified ROM isn't needed, the GDB-STUB and the program to be debugged can also be loaded from the physical tape if you are not equipped with some user modifiable ROM cartridge, but because the serial connection has to be used anyway for the stub/gdb communication it's a shame not to use it also for the boot-up. The z80-stub.c file which comes from the gdb source tree is connected with the serial channel via extern int getDebugChar (void) and extern void putDebugChar (int ch) functions. These are in the thin wrapper file io.c, and from this place assembly routines for the RS-232 serial line are called. The serial routines used here (rs232.s) are from this site: https://cygnus.speccy.cz/download/zx128k_rs232/rs232_paul_farrow_57600= _data_sequence_with_cts_flow_control.html The binary file is built, converted to ZX Spectrum TAP file and loaded to the target machine: $ make upload Reset ZX spectrum with Paul Farrow's RS232 ROM Press any key to continue Now run LOAD "" taptoser gdbstub.tap -d /dev/ttyUSB0 Serial device: /dev/ttyUSB0, communication speed is: 57600 Bd Filename: gdbstub Flag: 0 Type: 0 =3D> program Program length: 93 bytes Runs from line 10 Length without variables: 93 bytes Proceed bytes: 95/ 95 [=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D] 100 % Filename: gdbstub Flag: 0 Type: 3 =3D> bytes Start address: 32768 Length: 3056 bytes 3rd param: 32768 Proceed bytes: 3058/ 3058 [=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D] 100 % The whole code is started by the code in mycrt0.s. The bin2tap utility has appended a machine code loader in basic to the tape file. The basic loader places the code at the address 0x8000 and there the machine code is run from, the ROM cartridge (if present) is then switched off, the whole code is copied from 0x8000 (bank 2 where we are running now) to 0xc000 (bank 0) the ZX Spectrum +2 memory is switched to all-ram mode in such way, the bank 0 is then at address 0x0000. Then the program jumps to address 0x0000 and is initialized as any other sdcc compiled program. After initialization but before thi final jump to _main (to C main function), the debug_exception function is called and there the gdb-stub is finally waiting for the connection of the gd= b. When the z80-unknown-elf-gdb is run, the .gdbinit file is examined and following commands are executed from it: set remoteflow on target remote /dev/ttyUSB0 Note: The software emulated serial port in the remote can't work without hardware handshake enabled on the PC side. The gdb prompt then looks like this: $ z80-unknown-elf-gdb GNU gdb (GDB) 10.0.50.20200317-git Copyright (C) 2020 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "--host=3Dx86_64-pc-linux-gnu --target=3Dz80-unknown-elf". Type "show configuration" for configuration details. For bug reporting instructions, please see: . Find the GDB manual and other documentation resources online at: . For help, type "help". Type "apropos word" to search for commands related to "word". warning: No executable has been specified and target does not support determining executable automatically. Try using the "file" command. 0x0000010d in ?? () (gdb) Then the memory can be examined this way: (gdb) x/20i 0x100 0x100: ld sp,0xff00 0x103: call 0x0146 0x106: ld hl,0x0005 0x109: push hl 0x10a: call 0x0210 =3D> 0x10d: call 0x0af2 0x110: jp 0x015a 0x113: nop 0x114: nop 0x115: nop 0x116: nop 0x117: nop 0x118: nop 0x119: nop 0x11a: nop 0x11b: nop 0x11c: nop 0x11d: nop 0x11e: nop 0x11f: nop Displaying of the current instruction can be switched on: (gdb) display/i $pc 1: x/i $pc =3D> 0x10d: call 0x0af2 And then the instruction by instruction can be performed: (gdb) si warning: Unable to determine inferior's software breakpoint type: couldn't find `_break_handler' function in the executable. Will be used default software breakpoint instruction RST 0x08. 0x00000af2 in ?? () 1: x/i $pc =3D> 0xaf2: call 0x0af8 (gdb) 0x00000af8 in ?? () 1: x/i $pc =3D> 0xaf8: ld b,0x00 (gdb) 0x00000afa in ?? () 1: x/i $pc =3D> 0xafa: ld a,b (gdb) 0x00000afb in ?? () 1: x/i $pc =3D> 0xafb: out (0xfe),a (gdb) 0x00000afd in ?? () 1: x/i $pc =3D> 0xafd: inc b (gdb) 0x00000afe in ?? () 1: x/i $pc =3D> 0xafe: xor a (gdb) 0x00000aff in ?? () 1: x/i $pc =3D> 0xaff: in a,(0xfe) (gdb) 0x00000b01 in ?? () 1: x/i $pc =3D> 0xb01: cpl (gdb) 0x00000b02 in ?? () 1: x/i $pc =3D> 0xb02: and 0x1f (gdb) 0x00000b04 in ?? () 1: x/i $pc =3D> 0xb04: jp z,0x0afa (gdb) 0x00000afa in ?? () 1: x/i $pc =3D> 0xafa: ld a,b (gdb) You can load your binary to any free location of the RAM and do the debugging. If you lose control of the program (and it didn't overwrite anything important), you can interrupt it by the NMI button, if your machine or ROM cartridge is equipped with o= ne. (gdb) c Continuing. Program received signal SIGTRAP, Trace/breakpoint trap. 0x00000aff in ?? () 1: x/i $pc =3D> 0xaff: in a,(0xfe) That's all folks! --00000000000022339b05b0fde7c5 Content-Type: application/gzip; name="z80_debug.tar.gz" Content-Disposition: attachment; filename="z80_debug.tar.gz" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kfxt5tbm0 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 fW6f2+f2uX1un9vn9vkveP4fyDxZlADwAAA= --00000000000022339b05b0fde7c5--