add debug_protocol.hpp

This commit is contained in:
Zack Buhman 2024-11-16 14:18:16 -06:00
parent d32bd87baa
commit 9933d945bf
6 changed files with 244 additions and 0 deletions

10
debug/debug.txt Normal file
View File

@ -0,0 +1,10 @@
dreamcast | pc
break 1 → [break state]
← ackn 1
regs 2 →
← ackn 2
← regs -1
regs -1 →

59
debug/debug_protocol.hpp Normal file
View File

@ -0,0 +1,59 @@
#include <stdint.h>
#include <stddef.h>
namespace debug_protocol {
consteval uint32_t gen_cmd(const char * s)
{
uint32_t x = 0
| s[0] << 0
| s[1] << 8
| s[2] << 16
| s[3] << 24;
x ^= x << 13;
x ^= x >> 17;
x ^= x << 5;
return x;
}
template <typename T>
struct frame {
uint32_t command;
uint32_t sequence;
T data;
uint32_t crc;
};
static_assert((sizeof (frame<char[0]>)) == 4 * 3);
static_assert((offsetof (frame<char[0]>, crc)) == 4 * 2);
struct register_state {
uint32_t r[16];
uint32_t sr;
uint32_t gbr;
uint32_t mach;
uint32_t macl;
uint32_t pr;
uint32_t pc;
};
struct read_u32 {
uint32_t start;
uint32_t length;
};
namespace command {
constexpr uint32_t _register_state = gen_cmd("REGS");
constexpr uint32_t _read_u32 = gen_cmd("RU32");
}
namespace reply {
constexpr uint32_t _register_state = gen_cmd("regs");
constexpr uint32_t _read_u32 = gen_cmd("ru32");
constexpr uint32_t _acknowledge = gen_cmd("ackn");
}
}

View File

@ -643,3 +643,10 @@ SHEIK_VQ_OBJ = \
example/sheik_vq.elf: LDSCRIPT = $(LIB)/main.lds
example/sheik_vq.elf: $(START_OBJ) $(SHEIK_VQ_OBJ)
VGA_TIMING_OBJ = \
example/vga_timing.o \
holly/video_output.o
example/vga_timing.elf: LDSCRIPT = $(LIB)/main.lds
example/vga_timing.elf: $(START_OBJ) $(VGA_TIMING_OBJ)

View File

@ -59,18 +59,28 @@ void dbr()
uint32_t spc;
uint32_t ssr;
uint32_t sgr;
uint32_t r15;
asm volatile ("stc spc,%0" : "=r" (spc) );
asm volatile ("stc ssr,%0" : "=r" (ssr) );
asm volatile ("stc sgr,%0" : "=r" (sgr) );
asm volatile ("mov r15,%0" : "=r" (r15) );
serial::string("spc ");
serial::integer(spc);
serial::string("ssr ");
serial::integer(ssr);
serial::string("sgr ");
serial::integer(sgr);
serial::string("r15 ");
serial::integer(r15);
uint32_t sr;
asm volatile ("stc sr,%0" : "=r" (sr) );
serial::string("sr ");
serial::integer(sr);
while (1);
return;
}
@ -178,6 +188,10 @@ void main()
serial::string("brcr ");
serial::integer(sh7091.UBC.BRCR);
uint32_t r15;
asm volatile ("mov r15,%0" : "=r" (r15) );
serial::string("r15 ");
serial::integer(r15);
int res = do_stuff(1, 2);
(void)res;

21
example/vga_timing.cpp Normal file
View File

@ -0,0 +1,21 @@
#include "holly/video_output.hpp"
#include "holly/texture_memory_alloc.hpp"
#include "holly/holly.hpp"
#include "memorymap.hpp"
void main()
{
video_output::set_mode_vga();
uint32_t frame_address = texture_memory_alloc::framebuffer[0].start;
volatile uint16_t * framebuffer = reinterpret_cast<volatile uint16_t*>(&texture_memory32[frame_address/4]);
for (int i = 0; i < 640 * 480; i++) {
if (i % 2)
framebuffer[i] = 31 << 11;
else
framebuffer[i] = 0;
}
holly.FB_R_SOF1 = frame_address;
}

133
ftdi.conf Normal file
View File

@ -0,0 +1,133 @@
#see http://developer.intra2net.com/git/?p=libftdi;a=blob;f=src/ftdi.c
#and http://developer.intra2net.com/git/?p=libftdi;a=blob;f=src/ftdi.h
#and http://developer.intra2net.com/git/?p=libftdi;a=tree;f=ftdi_eeprom
#and http://developer.intra2net.com/git/?p=libftdi;a=blob;f=ftdi_eeprom/example.conf
#and http://developer.intra2net.com/git/?p=libftdi;a=blob;f=ftdi_eeprom/main.c
############
# Filename #
############
filename=eeprom.new # Filename of the EE file to be generated. Leave empty to skip file writing
#flash_raw=false # Boolean:
## Include another config file?
#include
############
# IDs #
############
# Future Technology Devices International, Ltd FT232H Single HS USB-UART/FIFO IC
vendor_id="0x0403"
product_id="0x6014"
##############################
# Device and Serial Strings #
##############################
manufacturer="FTDI" # String: Manufacturer. FT245R factory default FTDI
product="FT232H Single HS USB-UART/FIFO" # String: Product. FT245R factory default FT245R USB FIFO
serial="00-00"
use_serial=true
############
# Options #
############
max_power=500 # Integer: Max. power consumption: value * 2 mA(?). Use 0 if self_powered = true. FT245R factory default 90
self_powered=false # Boolean: Turn this off for bus powered
remote_wakeup=true # Boolean: Turn this on for remote wakeup feature
# Normally you don't have to change one of these flags
#in_is_isochronous=false # Boolean: In Endpoint is Isochronous
#out_is_isochronous=false # Boolean: Out Endpoint is Isochronous
#suspend_pull_downs=false # Boolean: Enable suspend pull downs for lower power
#change_usb_version=false # Boolean: Change USB Version
#usb_version=0x00 # Integer: Only used when change_usb_version is enabled
#default_pid=0x6001 # Integer: Default Pid.
eeprom_type=6 # Integer: Chip Type / EEPROM Type. Corresponds to ftdi_chip_type struct in ftdi.h
#high_current=false # Boolean: High Current Drive
##Type_R chips
# Only used on FT-R chips (when omitted, use chip defaults)
# Possible values correspond to enum ftdi_cbus_func in ftdi.h and strings are defined in function parse_cbus in ftdi_eeprom/main.c
# Values in the struct are (see current ftid.h for an up to date list):
# CBUS_TXDEN = 0, CBUS_PWREN = 1, CBUS_RXLED = 2, CBUS_TXLED = 3, CBUS_TXRXLED = 4, CBUS_SLEEP = 5, CBUS_CLK48 = 6, CBUS_CLK24 = 7, CBUS_CLK12 = 8, CBUS_CLK6 = 9, CBUS_IOMODE = 0xa, CBUS_BB_WR = 0xb, CBUS_BB_RD = 0xc
# Strings to be used here are:
# "TXDEN", "PWREN", "RXLED", "TXLED", "TXRXLED", "SLEEP", "CLK48", "CLK24", "CLK12", "CLK6", "IOMODE", "BB_WR", "BB_RD"
#cbus0=TXLED # String parsed to integer: FT245R factory default TXLED
#cbus1=RXLED # String parsed to integer: FT245R factory default RXLED
#cbus2=TXDEN # String parsed to integer: FT245R factory default TXDEN
#cbus3=PWREN # String parsed to integer: FT245R factory default PWREN
#cbus4=SLEEP # String parsed to integer: FT245R factory default SLEEP
## Only used on FT232H chips (when omitted, use chip defaults)
# Possible values correspond to enum ftdi_cbush_func in ftdi.h and strings are defined in function parse_cbush in ftdi_eeprom/main.c.
# Values are (see current ftid.h for an up to date list):
# CBUSH_TRISTATE = 0, CBUSH_TXLED = 1, CBUSH_RXLED = 2, CBUSH_TXRXLED = 3, CBUSH_PWREN = 4, CBUSH_SLEEP = 5, CBUSH_DRIVE_0 = 6, CBUSH_DRIVE1 = 7, CBUSH_IOMODE = 8, CBUSH_TXDEN = 9, CBUSH_CLK30 = 10, CBUSH_CLK15 = 11, CBUSH_CLK7_5 = 12
# Strings to be used in this config file are:
# "TRISTATE", "TXLED", "RXLED", "TXRXLED", "PWREN", "SLEEP", "DRIVE_0", "DRIVE1", "IOMODE", "TXDEN", "CLK30", "CLK15", "CLK7_5"
##Type_232H Chips
#cbush0=TRISTATE # String parsed to integer:
#cbush1=TRISTATE # String parsed to integer:
#cbush2=TRISTATE # String parsed to integer:
#cbush3=TRISTATE # String parsed to integer:
#cbush4=TRISTATE # String parsed to integer:
#cbush5=TRISTATE # String parsed to integer:
#cbush6=TRISTATE # String parsed to integer:
#cbush7=TRISTATE # String parsed to integer:
cbush8=TXLED # String parsed to integer:
cbush9=RXLED # String parsed to integer:
# Group Drive
# Strings to be used in this config file are:
# "4MA", "8MA", "12MA", "16MA"
#group0_drive # Integer:
# Only used on FT230X chips (when omitted, use chip defaults)
# Possible values correspond to enum ftdi_cbusx_func in ftdi.h and strings are defined in function parse_cbusx in ftdi_eeprom/main.c.
# Values are (see current ftid.h for an up to date list):
# CBUSX_TRISTATE = 0, CBUSX_TXLED = 1, CBUSX_RXLED = 2, CBUSX_TXRXLED = 3, CBUSX_PWREN = 4, CBUSX_SLEEP = 5, CBUSX_DRIVE_0 = 6, CBUSX_DRIVE1 = 7, CBUSX_IOMODE = 8, CBUSX_TXDEN = 9, CBUSX_CLK24 = 10, CBUSX_CLK12 = 11, CBUSX_CLK6 = 12, CBUSX_BAT_DETECT = 13, CBUSX_BAT_DETECT_NEG = 14, CBUSX_I2C_TXE = 15, CBUSX_I2C_RXF = 16, CBUSX_VBUS_SENSE = 17, CBUSX_BB_WR = 18, CBUSX_BB_RD = 19, CBUSX_TIME_STAMP = 20, CBUSX_AWAKE = 21
# Strings to be used in this config file are:
# "TRISTATE", "TXLED", "RXLED", "TXRXLED", "PWREN", "SLEEP", "DRIVE_0", "DRIVE1", "IOMODE", "TXDEN", "CLK24", "CLK12", "CLK6", "BAT_DETECT", "BAT_DETECT_NEG", "I2C_TXE", "I2C_RXF", "VBUS_SENSE", "BB_WR", "BB_RD", "TIME_STAMP", "AWAKE"
#cbusx0=TXDEN # String parsed to integer:
#cbusx1=RXLED # String parsed to integer:
#cbusx2=TXLED # String parsed to integer:
#cbusx3=SLEEP # String parsed to integer:
########
# Misc #
########
## Pin Configuration
#invert_txd # Boolean: Invert TXD signal
#invert_rxd # Boolean: Invert RXD signal
#invert_rts # Boolean: Invert RTS signal
#invert_cts # Boolean: Invert CTS signal
#invert_dtr # Boolean: Invert DTR signal
#invert_dsr # Boolean: Invert DSR signal
#invert_dcd # Boolean: Invert DCD signal
#invert_ri # Boolean: Invert RI signal
## Channel Types and Drivers
# Possible values are (see current ftid.h (Interface Mode macros) and ftdi.c "channel_mode" for an up to date list). They are parsed in fucntion parse_chtype in ftdi_eeprom/main.c.
# (from ftid.h): UART= 0x0, FIFO = 0x1, OPTO = 0x2, CPU = 0x4, FT1284 = 0x8, RS485 = 0x10
# (from ftdi.c): UART = 0x0, FIOF = 0x1, CPU = 0x2, OPTO = 0x3, FT1284 = 0x3
# Strings to be used in this config file are:
# "UART", "FIFO", "OPTO", "CPU", "FT1284"
cha_type=UART
# String parsed to integer:
#chb_type
# String parsed to integer:
cha_vcp=false # Boolean:
#chb_vcp=false # Boolean:
#chc_vcp=false # Boolean:
#chd_vcp=false # Boolean:
#cha_rs485 # Boolean:
#chb_rs485 # Boolean:
#chc_rs485 # Boolean:
#chd_rs485 # Boolean:
## Include user defined binary data into the the eeprom at address?
#user_data_addr # Integer:
#user_data_file # String: Filename of the data file to be used