doc: add howto

This commit is contained in:
Zack Buhman 2025-01-14 22:10:46 -06:00
parent eea12064e0
commit 198c7637f7
8 changed files with 764 additions and 5 deletions

View File

@ -1,7 +1,11 @@
make4ht entry.tex "pic-m,pic-equation,svg"
set -eux
mv entry.html index.html
mv entry.css index.css
make4ht $1 "pic-m,pic-equation,svg"
css="$(basename ${1%.tex}.css)"
mv "$(basename ${1%.tex}.html)" index.html
mv "${css}" index.css
echo 'img[alt="PIC"] { width: 100%; }' >> index.css
echo '.cmtt-10 { font-size: 0.9em; }' >> index.css
@ -9,7 +13,8 @@ echo 'img[src="index3x.svg"] { height: 2.5em; }' >> index.css
echo 'object[class="graphics"] { width: 100% }' >> index.css
sed -i '/prefers-color-scheme/d' index.css
sed -i 's| </span>|</span> |g' index.html
sed -i 's/entry.css/index.css/g' index.html
sed -i 's/1.5157em/1.3157em/g' index.css
sed -i 's/1.3195em/1.0195em/g' index.css
sed -i 's| </span>|</span> |g' index.html
sed -i "s/${css}/index.css/g" index.html

206
doc/howto/howto.tex Normal file
View File

@ -0,0 +1,206 @@
\documentclass[20pt]{article}
\usepackage{hyperref}
\hypersetup{
colorlinks=true,
linkcolor=blue,
filecolor=magenta,
urlcolor=cyan,
pdftitle={Dreamcast},
pdfpagemode=FullScreen,
}
\usepackage{graphicx}
\graphicspath{ {./images/} }
\title{Building and running the Dreamcast JVM}
\date{}
\setcounter{secnumdepth}{0}
\begin{document}
\maketitle
\tableofcontents
\section{Introduction}
The \texttt{jvm} project's Dreamcast build system depends on the
\texttt{dreamcast} project. This dependency is limited mostly to sharing Make
rules. Clone both of these as siblings of the same parent directory, as in:
\begin{verbatim}
git clone https://github.com/buhman/dreamcast
git clone https://github.com/buhman/jvm
\end{verbatim}
If you would like to use a \texttt{.cdi} image, the build process also depends
on \texttt{cdi4dc}. It is assumed that this tool exists in the same directory
that contains the \texttt{dreamcast} and \texttt{jvm} directories. On Linux, do:
\begin{verbatim}
curl -LO https://files.dcemulation.org/software/pctools/cdi4dc/cdi4dc_02b_linux.zip
unzip cdi4dc_02b_linux.zip
chmod +x cdi4dc
\end{verbatim}
To build everything, do the following:
\begin{verbatim}
cd jvm
sh generate_classpath.sh
rm -f main.bin main.elf jvm.iso
make -f Makefile.dreamcast.mk TARGET=sh-elf- jvm.iso
../cdi4dc jvm.iso jvm.cdi
\end{verbatim}
You should change the value of \texttt{TARGET=sh-elf-} to whatever matches your
GCC SH installation. If for example your GCC is named \texttt{sh4-none-elf-gcc}
then the correct \texttt{TARGET} value would be \texttt{TARGET=sh4-none-elf-}
(including the trailing hyphen).
You can then run the generated \texttt{jvm.cdi} on Dreamcast hardware or
emulators.
\section{Additional notes}
\subsection{Generate classpath}
The \texttt{generate\_classpath.sh} script is terrible. It is a ``quick hack''
to work around \hyperref[sec:unsolved]{multiple unsolved problems}.
If you wish to modify the build process to include newly-written classes, you
should append them to the \texttt{application\_classes} array in
\texttt{generate\_classpath.sh}.
\subsection{Flycast settings}
I recommend the following Flycast settings:
\begin{itemize}
\item Video → Transparent Sorting → Per Pixel (selected)
\item Video → Rendering Options → Full Framebuffer Emulation (checked)
\item Video → Advanced → Copy Rendered Textures to VRAM (checked)
\item Advanced → Other → Serial Console (checked)
\end{itemize}
\subsection{Run the Dreamcast JVM on Linux/Windows/macOS}
The Dreamcast JVM can also run as a application on a PC operating system. This
can be useful for testing general Java features independently of running on a
Dreamcast.
\begin{verbatim}
make clean
make main
\end{verbatim}
You should run \texttt{make clean} any time you wish to swap between the PC and
Dreamcast versions of the JVM.
Compile one of the tests as an example:
\begin{verbatim}
make classes/test/TestIntegerBitCount.class
\end{verbatim}
Run the Dreamcast JVM like this:
\begin{verbatim}
cd classes
# ../main [entry_class_name] [class_file...]
../main test/TestIntegerBitCount test/*.class java/lang/*.class java/io/*.class
\end{verbatim}
Note that for no specific reason, the Dreamcast JVM main method declaration is
\begin{verbatim}
public static void main()
\end{verbatim}
rather than the standard
\begin{verbatim}
public static void main(String[] args)
\end{verbatim}
I may change this in the future (it is not hard to support either, or even
both).
\subsection{JVM debug print}
\texttt{DEBUG\_PRINT} is \textbf{very slow} and unintelligibly verbose for
non-trivial programs. It is mostly useful for doing low-level debugging of the
JVM itself for very simple programs.
This can be disabled/enabled in either \texttt{Makefile} or
\texttt{Makefile.dreamcast.mk} by commenting/uncommenting the line
\begin{verbatim}
CFLAGS += -DDEBUG_PRINT
\end{verbatim}
When changing \texttt{CFLAGS}, remove all previously-built object files with the
command:
\begin{verbatim}
make clean
\end{verbatim}
\section{Unsolved problems}
\label{sec:unsolved}
There are a few issues that currently cause the build process to be uglier than
I'd like it to be. I welcome any suggestions regarding any of these topics:
\subsection{Boot class path}
The Dreamcast JVM includes its own versions the classes from
\texttt{java.lang}. The OpenJDK \texttt{javac}, however, will attempt to link
against OpenJDK's own version of \texttt{java.lang}.
In many cases, this will coincidentally not cause issues. However, it is better
to explicitly reference the Dreamcast JVM's version of \texttt{java.lang} to be
able to catch any linking errors as early as possible (\texttt{javac}'s error
messages are also much better than those you'd get from \texttt{jvm.bin}).
However, \texttt{javac} doesn't appear to support this in a convenient way. The
best invocation I've found so far is:
\begin{verbatim}
cd jvm/classes
javac -Xlint:-options --source 8 --target 8 --boot-class-path . path/to/YourClass.java
\end{verbatim}
This does limit you to Java 8 language features, but this appears to be the only
way to enable the \texttt{--boot-class-path} option, for which there is no clear
replacement in newer versions.
\subsection{Nested class filenames contain the dollar-sign character}
I have not managed to make my Make rules tolerant of \texttt{\$} characters in
filenames. This is the main reason why \texttt{generate\_classpath.sh} exists,
and it's also the reason why it's terrible.
\subsection{Unused class/method removal}
It would be nice to have a build process/tool that works like this:
\begin{itemize}
\item give the name of the ``main''/entrypoint class as a command-line argument
\item automatically/recursively calculate the minimum set of
classes/methods/fields that ``main'' depends on
\item from the full library of available classes, emit a reduced/minimal set of
(compiled) class files that only contain the methods and fields that are
reachable via ``main''.
\end{itemize}
I will create this tool at some point.
\end{document}

149
doc/howto/howto0x.svg Normal file
View File

@ -0,0 +1,149 @@
<?xml version='1.0' encoding='UTF-8'?>
<!-- This file was generated by dvisvgm 3.2 -->
<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='724.518783pt' height='13.713265pt' viewBox='.571856 399.358398 724.518783 13.713265'>
<defs>
<path id='g4-48' d='M2.022416-3.291656C2.078207-3.410212 2.085181-3.466002 2.085181-3.514819C2.085181-3.731009 1.889913-3.898381 1.673724-3.898381C1.408717-3.898381 1.325031-3.682192 1.290162-3.57061L.369614-.550934C.36264-.536986 .334745-.446326 .334745-.439352C.334745-.355666 .550934-.285928 .606725-.285928C.655542-.285928 .662516-.299875 .711333-.404483L2.022416-3.291656Z'/>
<path id='g2-46' d='M3.237858-.617684C3.237858-.986301 2.938979-1.24533 2.620174-1.24533C2.241594-1.24533 1.992528-.936488 1.992528-.627646C1.992528-.259029 2.291407 0 2.610212 0C2.988792 0 3.237858-.308842 3.237858-.617684Z'/>
<path id='g2-97' d='M3.646326-.318804C3.865504-.009963 4.343711 0 4.722291 0C5.001245 0 5.220423 0 5.220423-.308842C5.220423-.607721 4.971357-.607721 4.821918-.607721C4.403487-.607721 4.303861-.657534 4.224159-.687422V-2.839352C4.224159-3.5467 3.686177-4.383562 2.251557-4.383562C1.823163-4.383562 .806974-4.383562 .806974-3.656289C.806974-3.35741 1.016189-3.198007 1.255293-3.198007C1.404732-3.198007 1.683686-3.287671 1.693649-3.656289C1.693649-3.73599 1.703611-3.745953 1.902864-3.765878C2.042341-3.775841 2.171856-3.775841 2.261519-3.775841C3.01868-3.775841 3.536737-3.466999 3.536737-2.759651C1.77335-2.729763 .547945-2.231631 .547945-1.275218C.547945-.587796 1.175592 .059776 2.191781 .059776C2.560399 .059776 3.178082-.009963 3.646326-.318804ZM3.536737-2.171856V-1.334994C3.536737-1.105853 3.536737-.896638 3.148194-.71731C2.789539-.547945 2.34122-.547945 2.261519-.547945C1.643836-.547945 1.235367-.886675 1.235367-1.275218C1.235367-1.763387 2.092154-2.132005 3.536737-2.171856Z'/>
<path id='g2-99' d='M4.64259-1.085928C4.64259-1.364882 4.353674-1.364882 4.293898-1.364882C4.134496-1.364882 4.034869-1.344956 3.965131-1.145704C3.905355-1.016189 3.716065-.547945 2.978829-.547945C2.132005-.547945 1.414695-1.24533 1.414695-2.15193C1.414695-2.630137 1.693649-3.775841 3.038605-3.775841C3.247821-3.775841 3.636364-3.775841 3.636364-3.686177C3.646326-3.337484 3.835616-3.198007 4.07472-3.198007S4.523039-3.367372 4.523039-3.656289C4.523039-4.383562 3.486924-4.383562 3.038605-4.383562C1.325031-4.383562 .727273-3.028643 .727273-2.15193C.727273-.956413 1.663761 .059776 2.919054 .059776C4.303861 .059776 4.64259-.916563 4.64259-1.085928Z'/>
<path id='g2-101' d='M4.224159-1.902864C4.433375-1.902864 4.622665-1.902864 4.622665-2.271482C4.622665-3.407223 3.985056-4.383562 2.689913-4.383562C1.504359-4.383562 .547945-3.387298 .547945-2.161893C.547945-.946451 1.554172 .059776 2.839352 .059776C4.154421 .059776 4.622665-.836862 4.622665-1.085928C4.622665-1.364882 4.333748-1.364882 4.273973-1.364882C4.094645-1.364882 4.014944-1.334994 3.945205-1.145704C3.726027-.637609 3.188045-.547945 2.909091-.547945C2.161893-.547945 1.414695-1.046077 1.255293-1.902864H4.224159ZM1.265255-2.500623C1.404732-3.227895 1.992528-3.775841 2.689913-3.775841C3.20797-3.775841 3.825654-3.526775 3.915318-2.500623H1.265255Z'/>
<path id='g2-103' d='M2.321295-1.753425C1.783313-1.753425 1.364882-2.221669 1.364882-2.749689C1.364882-3.317559 1.803238-3.755915 2.321295-3.755915C2.859278-3.755915 3.277709-3.287671 3.277709-2.759651C3.277709-2.191781 2.839352-1.753425 2.321295-1.753425ZM1.424658-1.404732C1.454545-1.384807 1.833126-1.155666 2.321295-1.155666C3.237858-1.155666 3.965131-1.872976 3.965131-2.759651C3.965131-3.058531 3.875467-3.347447 3.706102-3.626401C3.915318-3.745953 4.154421-3.785803 4.283935-3.795766C4.343711-3.526775 4.572852-3.457036 4.672478-3.457036C4.841843-3.457036 5.070984-3.576588 5.070984-3.865504C5.070984-4.094645 4.881694-4.403487 4.343711-4.403487C4.234122-4.403487 3.745953-4.393524 3.287671-4.054795C3.128269-4.164384 2.779577-4.353674 2.321295-4.353674C1.384807-4.353674 .67746-3.606476 .67746-2.759651C.67746-2.331258 .846824-2.002491 .996264-1.8132C.886675-1.653798 .797011-1.43462 .797011-1.135741C.797011-.787049 .936488-.537983 1.026152-.418431C.288917 .029888 .288917 .707347 .288917 .816936C.288917 1.673724 1.334994 2.281445 2.610212 2.281445S4.931507 1.663761 4.931507 .816936C4.931507 .448319 4.752179-.049813 4.244085-.318804C4.11457-.388543 3.696139-.607721 2.799502-.607721H2.102117C2.022416-.607721 1.892902-.607721 1.8132-.627646C1.663761-.627646 1.603985-.627646 1.484433-.767123C1.374844-.9066 1.364882-1.105853 1.364882-1.125778C1.364882-1.165629 1.384807-1.305106 1.424658-1.404732ZM2.610212 1.683686C1.613948 1.683686 .86675 1.255293 .86675 .816936C.86675 .637609 .956413 .318804 1.275218 .119552C1.524284-.039851 1.613948-.039851 2.34122-.039851C3.227895-.039851 4.353674-.039851 4.353674 .816936C4.353674 1.255293 3.606476 1.683686 2.610212 1.683686Z'/>
<path id='g2-104' d='M4.254047-2.919054C4.254047-3.92528 3.745953-4.353674 2.958904-4.353674C2.291407-4.353674 1.843088-4.014944 1.653798-3.825654V-5.678705C1.653798-5.987547 1.594022-6.087173 1.255293-6.087173H.52802C.368618-6.087173 .119552-6.087173 .119552-5.778331C.119552-5.479452 .37858-5.479452 .518057-5.479452H.966376V-.607721H.52802C.368618-.607721 .119552-.607721 .119552-.298879C.119552 0 .37858 0 .518057 0H2.102117C2.241594 0 2.500623 0 2.500623-.298879C2.500623-.607721 2.251557-.607721 2.092154-.607721H1.653798V-2.371108C1.653798-3.367372 2.391034-3.745953 2.899128-3.745953C3.427148-3.745953 3.566625-3.466999 3.566625-2.86924V-.607721H3.178082C3.01868-.607721 2.769614-.607721 2.769614-.298879C2.769614 0 3.038605 0 3.178082 0H4.702366C4.841843 0 5.100872 0 5.100872-.298879C5.100872-.607721 4.851806-.607721 4.692403-.607721H4.254047V-2.919054Z'/>
<path id='g2-108' d='M2.958904-5.678705C2.958904-5.987547 2.899128-6.087173 2.560399-6.087173H.986301C.826899-6.087173 .577833-6.087173 .577833-5.778331C.577833-5.479452 .836862-5.479452 .976339-5.479452H2.271482V-.607721H.986301C.826899-.607721 .577833-.607721 .577833-.298879C.577833 0 .836862 0 .976339 0H4.254047C4.403487 0 4.652553 0 4.652553-.298879C4.652553-.607721 4.41345-.607721 4.254047-.607721H2.958904V-5.678705Z'/>
<path id='g2-110' d='M1.653798-3.825654C1.653798-4.144458 1.653798-4.293898 1.255293-4.293898H.52802C.368618-4.293898 .119552-4.293898 .119552-3.985056C.119552-3.686177 .37858-3.686177 .518057-3.686177H.966376V-.607721H.52802C.368618-.607721 .119552-.607721 .119552-.298879C.119552 0 .37858 0 .518057 0H2.102117C2.241594 0 2.500623 0 2.500623-.298879C2.500623-.607721 2.251557-.607721 2.092154-.607721H1.653798V-2.371108C1.653798-3.367372 2.391034-3.745953 2.899128-3.745953C3.427148-3.745953 3.566625-3.466999 3.566625-2.86924V-.607721H3.178082C3.01868-.607721 2.769614-.607721 2.769614-.298879C2.769614 0 3.038605 0 3.178082 0H4.702366C4.841843 0 5.100872 0 5.100872-.298879C5.100872-.607721 4.851806-.607721 4.692403-.607721H4.254047V-2.919054C4.254047-3.92528 3.745953-4.353674 2.958904-4.353674C2.291407-4.353674 1.843088-4.014944 1.653798-3.825654Z'/>
<path id='g2-112' d='M1.653798-2.630137C1.653798-3.217933 2.231631-3.745953 2.859278-3.745953C3.596513-3.745953 4.174346-3.01868 4.174346-2.15193C4.174346-1.195517 3.476961-.547945 2.779577-.547945C2.002491-.547945 1.653798-1.424658 1.653798-1.902864V-2.630137ZM1.653798-.448319C2.062267-.029888 2.49066 .059776 2.809465 .059776C3.895392 .059776 4.861768-.886675 4.861768-2.15193C4.861768-3.377335 3.975093-4.353674 2.919054-4.353674C2.440847-4.353674 1.992528-4.174346 1.653798-3.865504C1.653798-4.154421 1.633873-4.293898 1.255293-4.293898H.52802C.368618-4.293898 .119552-4.293898 .119552-3.985056C.119552-3.686177 .37858-3.686177 .518057-3.686177H.966376V1.603985H.52802C.368618 1.603985 .119552 1.603985 .119552 1.912827C.119552 2.211706 .37858 2.211706 .518057 2.211706H2.102117C2.241594 2.211706 2.500623 2.211706 2.500623 1.912827C2.500623 1.603985 2.251557 1.603985 2.092154 1.603985H1.653798V-.448319Z'/>
<path id='g2-114' d='M2.211706-1.853051C2.211706-2.789539 2.799502-3.745953 4.004981-3.745953C4.014944-3.506849 4.184309-3.307597 4.433375-3.307597C4.652553-3.307597 4.851806-3.466999 4.851806-3.73599C4.851806-3.935243 4.732254-4.353674 3.905355-4.353674C3.39726-4.353674 2.759651-4.174346 2.211706-3.5467V-3.88543C2.211706-4.194271 2.15193-4.293898 1.8132-4.293898H.71731C.56787-4.293898 .318804-4.293898 .318804-3.995019C.318804-3.686177 .557908-3.686177 .71731-3.686177H1.524284V-.607721H.71731C.56787-.607721 .318804-.607721 .318804-.308842C.318804 0 .557908 0 .71731 0H3.317559C3.466999 0 3.726027 0 3.726027-.298879C3.726027-.607721 3.466999-.607721 3.317559-.607721H2.211706V-1.853051Z'/>
<path id='g2-115' d='M2.968867-2.540473C2.739726-2.580324 2.540473-2.610212 2.291407-2.660025C2.002491-2.699875 1.325031-2.819427 1.325031-3.20797C1.325031-3.466999 1.643836-3.775841 2.590286-3.775841C3.417186-3.775841 3.556663-3.476961 3.58655-3.217933C3.596513-3.048568 3.616438-2.879203 3.92528-2.879203C4.273973-2.879203 4.273973-3.088418 4.273973-3.287671V-3.975093C4.273973-4.134496 4.273973-4.383562 3.975093-4.383562C3.73599-4.383562 3.696139-4.244085 3.676214-4.174346C3.237858-4.383562 2.799502-4.383562 2.610212-4.383562C.946451-4.383562 .71731-3.566625 .71731-3.20797C.71731-2.291407 1.763387-2.122042 2.67995-1.982565C3.16812-1.902864 3.965131-1.77335 3.965131-1.24533C3.965131-.876712 3.596513-.547945 2.689913-.547945C2.221669-.547945 1.663761-.657534 1.414695-1.43462C1.364882-1.613948 1.325031-1.723537 1.066002-1.723537C.71731-1.723537 .71731-1.514321 .71731-1.315068V-.348692C.71731-.18929 .71731 .059776 1.016189 .059776C1.105853 .059776 1.265255 .049813 1.384807-.318804C1.872976 .039851 2.400996 .059776 2.67995 .059776C4.254047 .059776 4.572852-.767123 4.572852-1.24533C4.572852-2.281445 3.287671-2.49066 2.968867-2.540473Z'/>
<path id='g2-116' d='M2.211706-3.686177H3.845579C3.995019-3.686177 4.244085-3.686177 4.244085-3.985056C4.244085-4.293898 4.004981-4.293898 3.845579-4.293898H2.211706V-5.110834C2.211706-5.300125 2.211706-5.519303 1.872976-5.519303C1.524284-5.519303 1.524284-5.310087 1.524284-5.110834V-4.293898H.657534C.498132-4.293898 .249066-4.293898 .249066-3.985056C.249066-3.686177 .498132-3.686177 .647572-3.686177H1.524284V-1.255293C1.524284-.298879 2.201743 .059776 2.929016 .059776C3.666252 .059776 4.473225-.368618 4.473225-1.255293C4.473225-1.43462 4.473225-1.643836 4.124533-1.643836C3.795766-1.643836 3.785803-1.43462 3.785803-1.265255C3.775841-.647572 3.20797-.547945 2.978829-.547945C2.211706-.547945 2.211706-1.066002 2.211706-1.315068V-3.686177Z'/>
<path id='g5-58' d='M1.912827-.52802C1.912827-.816936 1.673724-1.05604 1.384807-1.05604S.856787-.816936 .856787-.52802S1.09589 0 1.384807 0S1.912827-.239103 1.912827-.52802Z'/>
<path id='g5-59' d='M2.022416-.009963C2.022416-.667497 1.77335-1.05604 1.384807-1.05604C1.05604-1.05604 .856787-.806974 .856787-.52802C.856787-.259029 1.05604 0 1.384807 0C1.504359 0 1.633873-.039851 1.733499-.129514C1.763387-.14944 1.77335-.159402 1.783313-.159402S1.803238-.14944 1.803238-.009963C1.803238 .727273 1.454545 1.325031 1.125778 1.653798C1.016189 1.763387 1.016189 1.783313 1.016189 1.8132C1.016189 1.882939 1.066002 1.92279 1.115816 1.92279C1.225405 1.92279 2.022416 1.155666 2.022416-.009963Z'/>
<path id='g5-84' d='M4.254047-6.047323C4.323786-6.326276 4.363636-6.386052 4.483188-6.41594C4.572852-6.435866 4.901619-6.435866 5.110834-6.435866C6.117061-6.435866 6.56538-6.396015 6.56538-5.618929C6.56538-5.469489 6.525529-5.080946 6.485679-4.821918C6.475716-4.782067 6.455791-4.662516 6.455791-4.632628C6.455791-4.572852 6.485679-4.503113 6.575342-4.503113C6.684932-4.503113 6.704857-4.582814 6.724782-4.732254L6.993773-6.465753C7.003736-6.505604 7.013699-6.60523 7.013699-6.635118C7.013699-6.744707 6.914072-6.744707 6.744707-6.744707H1.215442C.976339-6.744707 .966376-6.734745 .896638-6.545455L.298879-4.79203C.288917-4.772105 .239103-4.632628 .239103-4.612702C.239103-4.552927 .288917-4.503113 .358655-4.503113C.458281-4.503113 .468244-4.552927 .52802-4.712329C1.066002-6.256538 1.325031-6.435866 2.799502-6.435866H3.188045C3.466999-6.435866 3.466999-6.396015 3.466999-6.316314C3.466999-6.256538 3.437111-6.136986 3.427148-6.107098L2.092154-.787049C2.002491-.418431 1.972603-.308842 .9066-.308842C.547945-.308842 .488169-.308842 .488169-.119552C.488169 0 .597758 0 .657534 0C.926526 0 1.205479-.019925 1.474471-.019925C1.753425-.019925 2.042341-.029888 2.321295-.029888S2.879203-.019925 3.148194-.019925C3.437111-.019925 3.73599 0 4.014944 0C4.11457 0 4.234122 0 4.234122-.199253C4.234122-.308842 4.154421-.308842 3.895392-.308842C3.646326-.308842 3.516812-.308842 3.257783-.328767C2.968867-.358655 2.889166-.388543 2.889166-.547945C2.889166-.557908 2.889166-.607721 2.929016-.757161L4.254047-6.047323Z'/>
<path id='g5-97' d='M3.716065-3.765878C3.536737-4.134496 3.247821-4.403487 2.799502-4.403487C1.633873-4.403487 .398506-2.938979 .398506-1.484433C.398506-.547945 .946451 .109589 1.723537 .109589C1.92279 .109589 2.420922 .069738 3.01868-.637609C3.098381-.219178 3.447073 .109589 3.92528 .109589C4.273973 .109589 4.503113-.119552 4.662516-.438356C4.83188-.797011 4.961395-1.404732 4.961395-1.424658C4.961395-1.524284 4.871731-1.524284 4.841843-1.524284C4.742217-1.524284 4.732254-1.484433 4.702366-1.344956C4.533001-.697385 4.353674-.109589 3.945205-.109589C3.676214-.109589 3.646326-.368618 3.646326-.56787C3.646326-.787049 3.666252-.86675 3.775841-1.305106C3.88543-1.723537 3.905355-1.823163 3.995019-2.201743L4.353674-3.596513C4.423412-3.875467 4.423412-3.895392 4.423412-3.935243C4.423412-4.104608 4.303861-4.204234 4.134496-4.204234C3.895392-4.204234 3.745953-3.985056 3.716065-3.765878ZM3.068493-1.185554C3.01868-1.006227 3.01868-.986301 2.86924-.816936C2.430884-.268991 2.022416-.109589 1.743462-.109589C1.24533-.109589 1.105853-.657534 1.105853-1.046077C1.105853-1.544209 1.424658-2.769614 1.653798-3.227895C1.96264-3.815691 2.410959-4.184309 2.809465-4.184309C3.457036-4.184309 3.596513-3.367372 3.596513-3.307597S3.576588-3.188045 3.566625-3.138232L3.068493-1.185554Z'/>
<path id='g5-98' d='M2.381071-6.804483C2.381071-6.814446 2.381071-6.914072 2.251557-6.914072C2.022416-6.914072 1.295143-6.834371 1.036115-6.814446C.956413-6.804483 .846824-6.794521 .846824-6.615193C.846824-6.495641 .936488-6.495641 1.085928-6.495641C1.564134-6.495641 1.58406-6.425903 1.58406-6.326276C1.58406-6.256538 1.494396-5.917808 1.444583-5.708593L.627646-2.460772C.508095-1.96264 .468244-1.803238 .468244-1.454545C.468244-.508095 .996264 .109589 1.733499 .109589C2.909091 .109589 4.134496-1.374844 4.134496-2.809465C4.134496-3.716065 3.606476-4.403487 2.809465-4.403487C2.351183-4.403487 1.942715-4.11457 1.643836-3.805729L2.381071-6.804483ZM1.444583-3.038605C1.504359-3.257783 1.504359-3.277709 1.594022-3.387298C2.082192-4.034869 2.530511-4.184309 2.789539-4.184309C3.148194-4.184309 3.417186-3.88543 3.417186-3.247821C3.417186-2.660025 3.088418-1.514321 2.909091-1.135741C2.580324-.468244 2.122042-.109589 1.733499-.109589C1.39477-.109589 1.066002-.37858 1.066002-1.115816C1.066002-1.305106 1.066002-1.494396 1.225405-2.122042L1.444583-3.038605Z'/>
<path id='g5-99' d='M3.945205-3.785803C3.785803-3.785803 3.646326-3.785803 3.506849-3.646326C3.347447-3.496887 3.327522-3.327522 3.327522-3.257783C3.327522-3.01868 3.506849-2.909091 3.696139-2.909091C3.985056-2.909091 4.254047-3.148194 4.254047-3.5467C4.254047-4.034869 3.785803-4.403487 3.078456-4.403487C1.733499-4.403487 .408468-2.978829 .408468-1.574097C.408468-.67746 .986301 .109589 2.022416 .109589C3.447073 .109589 4.283935-.946451 4.283935-1.066002C4.283935-1.125778 4.224159-1.195517 4.164384-1.195517C4.11457-1.195517 4.094645-1.175592 4.034869-1.09589C3.247821-.109589 2.161893-.109589 2.042341-.109589C1.414695-.109589 1.145704-.597758 1.145704-1.195517C1.145704-1.603985 1.344956-2.570361 1.683686-3.188045C1.992528-3.755915 2.540473-4.184309 3.088418-4.184309C3.427148-4.184309 3.805729-4.054795 3.945205-3.785803Z'/>
<path id='g5-100' d='M5.140722-6.804483C5.140722-6.814446 5.140722-6.914072 5.011208-6.914072C4.861768-6.914072 3.915318-6.824408 3.745953-6.804483C3.666252-6.794521 3.606476-6.744707 3.606476-6.615193C3.606476-6.495641 3.696139-6.495641 3.845579-6.495641C4.323786-6.495641 4.343711-6.425903 4.343711-6.326276L4.313823-6.127024L3.716065-3.765878C3.536737-4.134496 3.247821-4.403487 2.799502-4.403487C1.633873-4.403487 .398506-2.938979 .398506-1.484433C.398506-.547945 .946451 .109589 1.723537 .109589C1.92279 .109589 2.420922 .069738 3.01868-.637609C3.098381-.219178 3.447073 .109589 3.92528 .109589C4.273973 .109589 4.503113-.119552 4.662516-.438356C4.83188-.797011 4.961395-1.404732 4.961395-1.424658C4.961395-1.524284 4.871731-1.524284 4.841843-1.524284C4.742217-1.524284 4.732254-1.484433 4.702366-1.344956C4.533001-.697385 4.353674-.109589 3.945205-.109589C3.676214-.109589 3.646326-.368618 3.646326-.56787C3.646326-.806974 3.666252-.876712 3.706102-1.046077L5.140722-6.804483ZM3.068493-1.185554C3.01868-1.006227 3.01868-.986301 2.86924-.816936C2.430884-.268991 2.022416-.109589 1.743462-.109589C1.24533-.109589 1.105853-.657534 1.105853-1.046077C1.105853-1.544209 1.424658-2.769614 1.653798-3.227895C1.96264-3.815691 2.410959-4.184309 2.809465-4.184309C3.457036-4.184309 3.596513-3.367372 3.596513-3.307597S3.576588-3.188045 3.566625-3.138232L3.068493-1.185554Z'/>
<path id='g5-101' d='M1.863014-2.30137C2.15193-2.30137 2.889166-2.321295 3.387298-2.530511C4.084682-2.82939 4.134496-3.417186 4.134496-3.556663C4.134496-3.995019 3.755915-4.403487 3.068493-4.403487C1.96264-4.403487 .458281-3.437111 .458281-1.693649C.458281-.67746 1.046077 .109589 2.022416 .109589C3.447073 .109589 4.283935-.946451 4.283935-1.066002C4.283935-1.125778 4.224159-1.195517 4.164384-1.195517C4.11457-1.195517 4.094645-1.175592 4.034869-1.09589C3.247821-.109589 2.161893-.109589 2.042341-.109589C1.265255-.109589 1.175592-.946451 1.175592-1.265255C1.175592-1.384807 1.185554-1.693649 1.334994-2.30137H1.863014ZM1.39477-2.520548C1.783313-4.034869 2.809465-4.184309 3.068493-4.184309C3.536737-4.184309 3.805729-3.895392 3.805729-3.556663C3.805729-2.520548 2.211706-2.520548 1.803238-2.520548H1.39477Z'/>
<path id='g5-102' d='M3.656289-3.985056H4.513076C4.712329-3.985056 4.811955-3.985056 4.811955-4.184309C4.811955-4.293898 4.712329-4.293898 4.542964-4.293898H3.716065L3.92528-5.429639C3.965131-5.638854 4.104608-6.346202 4.164384-6.465753C4.254047-6.655044 4.423412-6.804483 4.632628-6.804483C4.672478-6.804483 4.931507-6.804483 5.120797-6.625156C4.682441-6.585305 4.582814-6.236613 4.582814-6.087173C4.582814-5.858032 4.762142-5.738481 4.951432-5.738481C5.210461-5.738481 5.499377-5.957659 5.499377-6.336239C5.499377-6.794521 5.041096-7.023661 4.632628-7.023661C4.293898-7.023661 3.666252-6.844334 3.367372-5.858032C3.307597-5.648817 3.277709-5.549191 3.038605-4.293898H2.351183C2.161893-4.293898 2.052304-4.293898 2.052304-4.104608C2.052304-3.985056 2.141968-3.985056 2.331258-3.985056H2.988792L2.241594-.049813C2.062267 .916563 1.892902 1.823163 1.374844 1.823163C1.334994 1.823163 1.085928 1.823163 .896638 1.643836C1.354919 1.613948 1.444583 1.255293 1.444583 1.105853C1.444583 .876712 1.265255 .757161 1.075965 .757161C.816936 .757161 .52802 .976339 .52802 1.354919C.52802 1.803238 .966376 2.042341 1.374844 2.042341C1.92279 2.042341 2.321295 1.454545 2.500623 1.075965C2.819427 .448319 3.048568-.757161 3.058531-.826899L3.656289-3.985056Z'/>
<path id='g5-104' d='M2.859278-6.804483C2.859278-6.814446 2.859278-6.914072 2.729763-6.914072C2.500623-6.914072 1.77335-6.834371 1.514321-6.814446C1.43462-6.804483 1.325031-6.794521 1.325031-6.615193C1.325031-6.495641 1.414695-6.495641 1.564134-6.495641C2.042341-6.495641 2.062267-6.425903 2.062267-6.326276L2.032379-6.127024L.587796-.388543C.547945-.249066 .547945-.229141 .547945-.169365C.547945 .059776 .747198 .109589 .836862 .109589C.996264 .109589 1.155666-.009963 1.205479-.14944L1.39477-.9066L1.613948-1.803238C1.673724-2.022416 1.733499-2.241594 1.783313-2.470735C1.803238-2.530511 1.882939-2.859278 1.892902-2.919054C1.92279-3.008717 2.231631-3.566625 2.570361-3.835616C2.789539-3.995019 3.098381-4.184309 3.526775-4.184309S4.064757-3.845579 4.064757-3.486924C4.064757-2.948941 3.686177-1.863014 3.447073-1.255293C3.367372-1.026152 3.317559-.9066 3.317559-.707347C3.317559-.239103 3.666252 .109589 4.134496 .109589C5.070984 .109589 5.439601-1.344956 5.439601-1.424658C5.439601-1.524284 5.349938-1.524284 5.32005-1.524284C5.220423-1.524284 5.220423-1.494396 5.17061-1.344956C5.021171-.816936 4.702366-.109589 4.154421-.109589C3.985056-.109589 3.915318-.209215 3.915318-.438356C3.915318-.687422 4.004981-.926526 4.094645-1.145704C4.254047-1.574097 4.702366-2.759651 4.702366-3.337484C4.702366-3.985056 4.303861-4.403487 3.556663-4.403487C2.929016-4.403487 2.450809-4.094645 2.082192-3.636364L2.859278-6.804483Z'/>
<path id='g5-105' d='M2.82939-6.22665C2.82939-6.425903 2.689913-6.585305 2.460772-6.585305C2.191781-6.585305 1.92279-6.326276 1.92279-6.057285C1.92279-5.867995 2.062267-5.69863 2.30137-5.69863C2.530511-5.69863 2.82939-5.927771 2.82939-6.22665ZM2.072229-2.480697C2.191781-2.769614 2.191781-2.789539 2.291407-3.058531C2.371108-3.257783 2.420922-3.39726 2.420922-3.58655C2.420922-4.034869 2.102117-4.403487 1.603985-4.403487C.667497-4.403487 .288917-2.958904 .288917-2.86924C.288917-2.769614 .388543-2.769614 .408468-2.769614C.508095-2.769614 .518057-2.789539 .56787-2.948941C.836862-3.88543 1.235367-4.184309 1.574097-4.184309C1.653798-4.184309 1.823163-4.184309 1.823163-3.865504C1.823163-3.656289 1.753425-3.447073 1.713574-3.347447C1.633873-3.088418 1.185554-1.932752 1.026152-1.504359C.926526-1.24533 .797011-.916563 .797011-.707347C.797011-.239103 1.135741 .109589 1.613948 .109589C2.550436 .109589 2.919054-1.334994 2.919054-1.424658C2.919054-1.524284 2.82939-1.524284 2.799502-1.524284C2.699875-1.524284 2.699875-1.494396 2.650062-1.344956C2.470735-.71731 2.141968-.109589 1.633873-.109589C1.464508-.109589 1.39477-.209215 1.39477-.438356C1.39477-.687422 1.454545-.826899 1.683686-1.43462L2.072229-2.480697Z'/>
<path id='g5-108' d='M2.570361-6.804483C2.570361-6.814446 2.570361-6.914072 2.440847-6.914072C2.211706-6.914072 1.484433-6.834371 1.225405-6.814446C1.145704-6.804483 1.036115-6.794521 1.036115-6.60523C1.036115-6.495641 1.135741-6.495641 1.285181-6.495641C1.763387-6.495641 1.77335-6.405978 1.77335-6.326276L1.743462-6.127024L.488169-1.145704C.458281-1.036115 .438356-.966376 .438356-.806974C.438356-.239103 .876712 .109589 1.344956 .109589C1.673724 .109589 1.92279-.089664 2.092154-.448319C2.271482-.826899 2.391034-1.404732 2.391034-1.424658C2.391034-1.524284 2.30137-1.524284 2.271482-1.524284C2.171856-1.524284 2.161893-1.484433 2.132005-1.344956C1.96264-.697385 1.77335-.109589 1.374844-.109589C1.075965-.109589 1.075965-.428394 1.075965-.56787C1.075965-.806974 1.085928-.856787 1.135741-1.046077L2.570361-6.804483Z'/>
<path id='g5-109' d='M.876712-.587796C.846824-.438356 .787049-.209215 .787049-.159402C.787049 .019925 .926526 .109589 1.075965 .109589C1.195517 .109589 1.374844 .029888 1.444583-.169365C1.454545-.18929 1.574097-.657534 1.633873-.9066L1.853051-1.803238C1.912827-2.022416 1.972603-2.241594 2.022416-2.470735C2.062267-2.6401 2.141968-2.929016 2.15193-2.968867C2.30137-3.277709 2.82939-4.184309 3.775841-4.184309C4.224159-4.184309 4.313823-3.815691 4.313823-3.486924C4.313823-3.237858 4.244085-2.958904 4.164384-2.660025L3.88543-1.504359L3.686177-.747198C3.646326-.547945 3.556663-.209215 3.556663-.159402C3.556663 .019925 3.696139 .109589 3.845579 .109589C4.154421 .109589 4.214197-.139477 4.293898-.458281C4.433375-1.016189 4.801993-2.470735 4.891656-2.859278C4.921544-2.988792 5.449564-4.184309 6.535492-4.184309C6.963885-4.184309 7.073474-3.845579 7.073474-3.486924C7.073474-2.919054 6.655044-1.783313 6.455791-1.255293C6.366127-1.016189 6.326276-.9066 6.326276-.707347C6.326276-.239103 6.674969 .109589 7.143213 .109589C8.079701 .109589 8.448319-1.344956 8.448319-1.424658C8.448319-1.524284 8.358655-1.524284 8.328767-1.524284C8.229141-1.524284 8.229141-1.494396 8.179328-1.344956C8.029888-.816936 7.711083-.109589 7.163138-.109589C6.993773-.109589 6.924035-.209215 6.924035-.438356C6.924035-.687422 7.013699-.926526 7.103362-1.145704C7.292653-1.663761 7.711083-2.769614 7.711083-3.337484C7.711083-3.985056 7.312578-4.403487 6.56538-4.403487S5.310087-3.965131 4.941469-3.437111C4.931507-3.566625 4.901619-3.905355 4.622665-4.144458C4.373599-4.353674 4.054795-4.403487 3.805729-4.403487C2.909091-4.403487 2.420922-3.765878 2.251557-3.536737C2.201743-4.104608 1.783313-4.403487 1.334994-4.403487C.876712-4.403487 .687422-4.014944 .597758-3.835616C.418431-3.486924 .288917-2.899128 .288917-2.86924C.288917-2.769614 .388543-2.769614 .408468-2.769614C.508095-2.769614 .518057-2.779577 .577833-2.998755C.747198-3.706102 .946451-4.184309 1.305106-4.184309C1.464508-4.184309 1.613948-4.104608 1.613948-3.726027C1.613948-3.516812 1.58406-3.407223 1.454545-2.889166L.876712-.587796Z'/>
<path id='g5-110' d='M.876712-.587796C.846824-.438356 .787049-.209215 .787049-.159402C.787049 .019925 .926526 .109589 1.075965 .109589C1.195517 .109589 1.374844 .029888 1.444583-.169365C1.454545-.18929 1.574097-.657534 1.633873-.9066L1.853051-1.803238C1.912827-2.022416 1.972603-2.241594 2.022416-2.470735C2.062267-2.6401 2.141968-2.929016 2.15193-2.968867C2.30137-3.277709 2.82939-4.184309 3.775841-4.184309C4.224159-4.184309 4.313823-3.815691 4.313823-3.486924C4.313823-2.86924 3.825654-1.594022 3.666252-1.165629C3.576588-.936488 3.566625-.816936 3.566625-.707347C3.566625-.239103 3.915318 .109589 4.383562 .109589C5.32005 .109589 5.688667-1.344956 5.688667-1.424658C5.688667-1.524284 5.599004-1.524284 5.569116-1.524284C5.469489-1.524284 5.469489-1.494396 5.419676-1.344956C5.220423-.667497 4.891656-.109589 4.403487-.109589C4.234122-.109589 4.164384-.209215 4.164384-.438356C4.164384-.687422 4.254047-.926526 4.343711-1.145704C4.533001-1.673724 4.951432-2.769614 4.951432-3.337484C4.951432-4.004981 4.523039-4.403487 3.805729-4.403487C2.909091-4.403487 2.420922-3.765878 2.251557-3.536737C2.201743-4.094645 1.793275-4.403487 1.334994-4.403487S.687422-4.014944 .587796-3.835616C.428394-3.496887 .288917-2.909091 .288917-2.86924C.288917-2.769614 .388543-2.769614 .408468-2.769614C.508095-2.769614 .518057-2.779577 .577833-2.998755C.747198-3.706102 .946451-4.184309 1.305106-4.184309C1.504359-4.184309 1.613948-4.054795 1.613948-3.726027C1.613948-3.516812 1.58406-3.407223 1.454545-2.889166L.876712-.587796Z'/>
<path id='g5-111' d='M4.672478-2.719801C4.672478-3.755915 3.975093-4.403487 3.078456-4.403487C1.743462-4.403487 .408468-2.988792 .408468-1.574097C.408468-.587796 1.075965 .109589 2.002491 .109589C3.327522 .109589 4.672478-1.265255 4.672478-2.719801ZM2.012453-.109589C1.58406-.109589 1.145704-.418431 1.145704-1.195517C1.145704-1.683686 1.404732-2.759651 1.723537-3.267746C2.221669-4.034869 2.789539-4.184309 3.068493-4.184309C3.646326-4.184309 3.945205-3.706102 3.945205-3.108344C3.945205-2.719801 3.745953-1.673724 3.367372-1.026152C3.01868-.448319 2.470735-.109589 2.012453-.109589Z'/>
<path id='g5-114' d='M.876712-.587796C.846824-.438356 .787049-.209215 .787049-.159402C.787049 .019925 .926526 .109589 1.075965 .109589C1.195517 .109589 1.374844 .029888 1.444583-.169365C1.464508-.209215 1.803238-1.564134 1.843088-1.743462C1.92279-2.072229 2.102117-2.769614 2.161893-3.038605C2.201743-3.16812 2.480697-3.636364 2.719801-3.855542C2.799502-3.92528 3.088418-4.184309 3.516812-4.184309C3.775841-4.184309 3.92528-4.064757 3.935243-4.064757C3.636364-4.014944 3.417186-3.775841 3.417186-3.516812C3.417186-3.35741 3.526775-3.16812 3.795766-3.16812S4.343711-3.39726 4.343711-3.755915C4.343711-4.104608 4.024907-4.403487 3.516812-4.403487C2.86924-4.403487 2.430884-3.915318 2.241594-3.636364C2.161893-4.084682 1.803238-4.403487 1.334994-4.403487C.876712-4.403487 .687422-4.014944 .597758-3.835616C.418431-3.496887 .288917-2.899128 .288917-2.86924C.288917-2.769614 .388543-2.769614 .408468-2.769614C.508095-2.769614 .518057-2.779577 .577833-2.998755C.747198-3.706102 .946451-4.184309 1.305106-4.184309C1.474471-4.184309 1.613948-4.104608 1.613948-3.726027C1.613948-3.516812 1.58406-3.407223 1.454545-2.889166L.876712-.587796Z'/>
<path id='g5-115' d='M3.895392-3.726027C3.616438-3.716065 3.417186-3.496887 3.417186-3.277709C3.417186-3.138232 3.506849-2.988792 3.726027-2.988792S4.184309-3.158157 4.184309-3.5467C4.184309-3.995019 3.755915-4.403487 2.998755-4.403487C1.683686-4.403487 1.315068-3.387298 1.315068-2.948941C1.315068-2.171856 2.052304-2.022416 2.34122-1.96264C2.859278-1.863014 3.377335-1.753425 3.377335-1.205479C3.377335-.946451 3.148194-.109589 1.952677-.109589C1.8132-.109589 1.046077-.109589 .816936-.637609C1.195517-.587796 1.444583-.886675 1.444583-1.165629C1.444583-1.39477 1.285181-1.514321 1.075965-1.514321C.816936-1.514321 .518057-1.305106 .518057-.856787C.518057-.288917 1.085928 .109589 1.942715 .109589C3.556663 .109589 3.945205-1.09589 3.945205-1.544209C3.945205-1.902864 3.755915-2.15193 3.636364-2.271482C3.367372-2.550436 3.078456-2.600249 2.6401-2.689913C2.281445-2.769614 1.882939-2.839352 1.882939-3.287671C1.882939-3.576588 2.122042-4.184309 2.998755-4.184309C3.247821-4.184309 3.745953-4.11457 3.895392-3.726027Z'/>
<path id='g5-116' d='M2.052304-3.985056H2.988792C3.188045-3.985056 3.287671-3.985056 3.287671-4.184309C3.287671-4.293898 3.188045-4.293898 3.008717-4.293898H2.132005C2.49066-5.708593 2.540473-5.907846 2.540473-5.967621C2.540473-6.136986 2.420922-6.236613 2.251557-6.236613C2.221669-6.236613 1.942715-6.22665 1.853051-5.877958L1.464508-4.293898H.52802C.328767-4.293898 .229141-4.293898 .229141-4.104608C.229141-3.985056 .308842-3.985056 .508095-3.985056H1.384807C.667497-1.155666 .627646-.986301 .627646-.806974C.627646-.268991 1.006227 .109589 1.544209 .109589C2.560399 .109589 3.128269-1.344956 3.128269-1.424658C3.128269-1.524284 3.048568-1.524284 3.008717-1.524284C2.919054-1.524284 2.909091-1.494396 2.859278-1.384807C2.430884-.348692 1.902864-.109589 1.564134-.109589C1.354919-.109589 1.255293-.239103 1.255293-.56787C1.255293-.806974 1.275218-.876712 1.315068-1.046077L2.052304-3.985056Z'/>
<path id='g5-119' d='M4.60274-3.377335C4.652553-3.596513 4.752179-3.965131 4.752179-4.024907C4.752179-4.204234 4.612702-4.293898 4.463263-4.293898C4.343711-4.293898 4.164384-4.214197 4.094645-4.014944C4.064757-3.945205 3.596513-2.042341 3.526775-1.783313C3.457036-1.484433 3.437111-1.305106 3.437111-1.125778C3.437111-1.016189 3.437111-.996264 3.447073-.946451C3.217933-.418431 2.919054-.109589 2.530511-.109589C1.733499-.109589 1.733499-.846824 1.733499-1.016189C1.733499-1.334994 1.783313-1.723537 2.251557-2.948941C2.361146-3.247821 2.420922-3.387298 2.420922-3.58655C2.420922-4.034869 2.092154-4.403487 1.603985-4.403487C.657534-4.403487 .288917-2.958904 .288917-2.86924C.288917-2.769614 .388543-2.769614 .408468-2.769614C.508095-2.769614 .518057-2.789539 .56787-2.948941C.836862-3.875467 1.225405-4.184309 1.574097-4.184309C1.663761-4.184309 1.823163-4.174346 1.823163-3.855542C1.823163-3.606476 1.713574-3.327522 1.643836-3.158157C1.205479-1.982565 1.085928-1.524284 1.085928-1.145704C1.085928-.239103 1.753425 .109589 2.500623 .109589C2.669988 .109589 3.138232 .109589 3.536737-.587796C3.795766 .049813 4.483188 .109589 4.782067 .109589C5.529265 .109589 5.967621-.518057 6.22665-1.115816C6.56538-1.892902 6.884184-3.227895 6.884184-3.706102C6.884184-4.254047 6.615193-4.403487 6.445828-4.403487C6.196762-4.403487 5.947696-4.144458 5.947696-3.92528C5.947696-3.795766 6.007472-3.73599 6.097136-3.656289C6.206725-3.5467 6.455791-3.287671 6.455791-2.809465C6.455791-2.470735 6.166874-1.494396 5.907846-.986301C5.648817-.458281 5.300125-.109589 4.811955-.109589C4.343711-.109589 4.07472-.408468 4.07472-.976339C4.07472-1.255293 4.144458-1.564134 4.184309-1.703611L4.60274-3.377335Z'/>
<path id='g5-120' d='M3.327522-3.008717C3.387298-3.267746 3.616438-4.184309 4.313823-4.184309C4.363636-4.184309 4.60274-4.184309 4.811955-4.054795C4.533001-4.004981 4.333748-3.755915 4.333748-3.516812C4.333748-3.35741 4.443337-3.16812 4.712329-3.16812C4.931507-3.16812 5.250311-3.347447 5.250311-3.745953C5.250311-4.26401 4.662516-4.403487 4.323786-4.403487C3.745953-4.403487 3.39726-3.875467 3.277709-3.646326C3.028643-4.303861 2.49066-4.403487 2.201743-4.403487C1.165629-4.403487 .597758-3.118306 .597758-2.86924C.597758-2.769614 .697385-2.769614 .71731-2.769614C.797011-2.769614 .826899-2.789539 .846824-2.879203C1.185554-3.935243 1.843088-4.184309 2.181818-4.184309C2.371108-4.184309 2.719801-4.094645 2.719801-3.516812C2.719801-3.20797 2.550436-2.540473 2.181818-1.145704C2.022416-.52802 1.673724-.109589 1.235367-.109589C1.175592-.109589 .946451-.109589 .737235-.239103C.986301-.288917 1.205479-.498132 1.205479-.777086C1.205479-1.046077 .986301-1.125778 .836862-1.125778C.537983-1.125778 .288917-.86675 .288917-.547945C.288917-.089664 .787049 .109589 1.225405 .109589C1.882939 .109589 2.241594-.587796 2.271482-.647572C2.391034-.278954 2.749689 .109589 3.347447 .109589C4.373599 .109589 4.941469-1.175592 4.941469-1.424658C4.941469-1.524284 4.851806-1.524284 4.821918-1.524284C4.732254-1.524284 4.712329-1.484433 4.692403-1.414695C4.363636-.348692 3.686177-.109589 3.367372-.109589C2.978829-.109589 2.819427-.428394 2.819427-.767123C2.819427-.986301 2.879203-1.205479 2.988792-1.643836L3.327522-3.008717Z'/>
<path id='g5-121' d='M4.841843-3.795766C4.881694-3.935243 4.881694-3.955168 4.881694-4.024907C4.881694-4.204234 4.742217-4.293898 4.592777-4.293898C4.493151-4.293898 4.333748-4.234122 4.244085-4.084682C4.224159-4.034869 4.144458-3.726027 4.104608-3.5467C4.034869-3.287671 3.965131-3.01868 3.905355-2.749689L3.457036-.956413C3.417186-.806974 2.988792-.109589 2.331258-.109589C1.823163-.109589 1.713574-.547945 1.713574-.916563C1.713574-1.374844 1.882939-1.992528 2.221669-2.86924C2.381071-3.277709 2.420922-3.387298 2.420922-3.58655C2.420922-4.034869 2.102117-4.403487 1.603985-4.403487C.657534-4.403487 .288917-2.958904 .288917-2.86924C.288917-2.769614 .388543-2.769614 .408468-2.769614C.508095-2.769614 .518057-2.789539 .56787-2.948941C.836862-3.88543 1.235367-4.184309 1.574097-4.184309C1.653798-4.184309 1.823163-4.184309 1.823163-3.865504C1.823163-3.616438 1.723537-3.35741 1.653798-3.16812C1.255293-2.11208 1.075965-1.544209 1.075965-1.075965C1.075965-.18929 1.703611 .109589 2.291407 .109589C2.67995 .109589 3.01868-.059776 3.297634-.33873C3.16812 .179328 3.048568 .667497 2.650062 1.195517C2.391034 1.534247 2.012453 1.823163 1.554172 1.823163C1.414695 1.823163 .966376 1.793275 .797011 1.404732C.956413 1.404732 1.085928 1.404732 1.225405 1.285181C1.325031 1.195517 1.424658 1.066002 1.424658 .876712C1.424658 .56787 1.155666 .52802 1.05604 .52802C.826899 .52802 .498132 .687422 .498132 1.175592C.498132 1.673724 .936488 2.042341 1.554172 2.042341C2.580324 2.042341 3.606476 1.135741 3.88543 .009963L4.841843-3.795766Z'/>
</defs>
<g id='page1' transform='matrix(1.4 0 0 1.4 0 0)'>
<use x='0' y='292.769743' xlink:href='#g5-99'/>
<use x='4.311397' y='292.769743' xlink:href='#g5-104'/>
<use x='10.051466' y='292.769743' xlink:href='#g5-97'/>
<use x='15.31762' y='292.769743' xlink:href='#g5-114'/>
<use x='20.089108' y='292.769743' xlink:href='#g5-97'/>
<use x='25.355262' y='292.769743' xlink:href='#g5-99'/>
<use x='29.666658' y='292.769743' xlink:href='#g5-116'/>
<use x='33.264293' y='292.769743' xlink:href='#g5-101'/>
<use x='37.903165' y='292.769743' xlink:href='#g5-114'/>
<use x='42.674653' y='292.769743' xlink:href='#g5-115'/>
<use x='47.34464' y='292.769743' xlink:href='#g5-105'/>
<use x='50.776898' y='292.769743' xlink:href='#g5-110'/>
<use x='56.756824' y='292.769743' xlink:href='#g5-102'/>
<use x='62.706771' y='292.769743' xlink:href='#g5-105'/>
<use x='66.139029' y='292.769743' xlink:href='#g5-108'/>
<use x='69.307723' y='292.769743' xlink:href='#g5-101'/>
<use x='73.946594' y='292.769743' xlink:href='#g5-110'/>
<use x='79.92652' y='292.769743' xlink:href='#g5-97'/>
<use x='85.192673' y='292.769743' xlink:href='#g5-109'/>
<use x='93.940007' y='292.769743' xlink:href='#g5-101'/>
<use x='98.578878' y='292.769743' xlink:href='#g5-115'/>
<use x='103.248866' y='292.769743' xlink:href='#g5-58'/>
<use x='106.016274' y='292.769743' xlink:href='#g5-84'/>
<use x='113.221917' y='292.769743' xlink:href='#g5-104'/>
<use x='118.961987' y='292.769743' xlink:href='#g5-105'/>
<use x='122.394245' y='292.769743' xlink:href='#g5-115'/>
<use x='127.064233' y='292.769743' xlink:href='#g5-105'/>
<use x='130.496491' y='292.769743' xlink:href='#g5-115'/>
<use x='135.166479' y='292.769743' xlink:href='#g5-116'/>
<use x='138.764114' y='292.769743' xlink:href='#g5-104'/>
<use x='144.504183' y='292.769743' xlink:href='#g5-101'/>
<use x='149.143055' y='292.769743' xlink:href='#g5-109'/>
<use x='157.890388' y='292.769743' xlink:href='#g5-97'/>
<use x='163.156542' y='292.769743' xlink:href='#g5-105'/>
<use x='166.588801' y='292.769743' xlink:href='#g5-110'/>
<use x='172.568726' y='292.769743' xlink:href='#g5-114'/>
<use x='177.340214' y='292.769743' xlink:href='#g5-101'/>
<use x='181.979085' y='292.769743' xlink:href='#g5-97'/>
<use x='187.245239' y='292.769743' xlink:href='#g5-115'/>
<use x='191.915227' y='292.769743' xlink:href='#g5-111'/>
<use x='196.744348' y='292.769743' xlink:href='#g5-110'/>
<use x='202.724273' y='292.769743' xlink:href='#g5-119'/>
<use x='210.124786' y='292.769743' xlink:href='#g5-104'/>
<use x='215.864856' y='292.769743' xlink:href='#g5-121'/>
<use x='221.106799' y='292.769743' xlink:href='#g2-103'/>
<use x='226.337143' y='292.769743' xlink:href='#g2-101'/>
<use x='231.567487' y='292.769743' xlink:href='#g2-110'/>
<use x='236.797832' y='292.769743' xlink:href='#g2-101'/>
<use x='242.028176' y='292.769743' xlink:href='#g2-114'/>
<use x='247.25852' y='292.769743' xlink:href='#g2-97'/>
<use x='252.488864' y='292.769743' xlink:href='#g2-116'/>
<use x='257.719209' y='292.769743' xlink:href='#g2-101'/>
<use x='262.949553' y='292.769743' xlink:href='#g2-99'/>
<use x='268.179897' y='292.769743' xlink:href='#g2-108'/>
<use x='273.410241' y='292.769743' xlink:href='#g2-97'/>
<use x='278.640586' y='292.769743' xlink:href='#g2-115'/>
<use x='283.87093' y='292.769743' xlink:href='#g2-115'/>
<use x='289.101274' y='292.769743' xlink:href='#g2-112'/>
<use x='294.331618' y='292.769743' xlink:href='#g2-97'/>
<use x='299.561963' y='292.769743' xlink:href='#g2-116'/>
<use x='304.792307' y='292.769743' xlink:href='#g2-104'/>
<use x='310.022651' y='292.769743' xlink:href='#g2-46'/>
<use x='315.252995' y='292.769743' xlink:href='#g2-115'/>
<use x='320.48334' y='292.769743' xlink:href='#g2-104'/>
<use x='325.713608' y='292.769743' xlink:href='#g5-101'/>
<use x='330.352479' y='292.769743' xlink:href='#g5-120'/>
<use x='336.046411' y='292.769743' xlink:href='#g5-105'/>
<use x='339.47867' y='292.769743' xlink:href='#g5-115'/>
<use x='344.148657' y='292.769743' xlink:href='#g5-116'/>
<use x='347.746292' y='292.769743' xlink:href='#g5-115'/>
<use x='352.41628' y='292.769743' xlink:href='#g5-59'/>
<use x='356.844088' y='292.769743' xlink:href='#g5-97'/>
<use x='362.110242' y='292.769743' xlink:href='#g5-110'/>
<use x='368.090167' y='292.769743' xlink:href='#g5-100'/>
<use x='373.275599' y='292.769743' xlink:href='#g5-105'/>
<use x='376.707858' y='292.769743' xlink:href='#g5-116'/>
<use x='380.305492' y='289.15438' xlink:href='#g4-48'/>
<use x='383.100568' y='292.769743' xlink:href='#g5-115'/>
<use x='387.770556' y='292.769743' xlink:href='#g5-97'/>
<use x='393.03671' y='292.769743' xlink:href='#g5-108'/>
<use x='396.205403' y='292.769743' xlink:href='#g5-115'/>
<use x='400.875391' y='292.769743' xlink:href='#g5-111'/>
<use x='405.704513' y='292.769743' xlink:href='#g5-116'/>
<use x='409.302147' y='292.769743' xlink:href='#g5-104'/>
<use x='415.042217' y='292.769743' xlink:href='#g5-101'/>
<use x='419.681088' y='292.769743' xlink:href='#g5-114'/>
<use x='424.452576' y='292.769743' xlink:href='#g5-101'/>
<use x='429.091448' y='292.769743' xlink:href='#g5-97'/>
<use x='434.357602' y='292.769743' xlink:href='#g5-115'/>
<use x='439.027589' y='292.769743' xlink:href='#g5-111'/>
<use x='443.856711' y='292.769743' xlink:href='#g5-110'/>
<use x='449.836636' y='292.769743' xlink:href='#g5-119'/>
<use x='457.237149' y='292.769743' xlink:href='#g5-104'/>
<use x='462.977218' y='292.769743' xlink:href='#g5-121'/>
<use x='468.219161' y='292.769743' xlink:href='#g5-105'/>
<use x='471.65142' y='292.769743' xlink:href='#g5-116'/>
<use x='475.249055' y='289.15438' xlink:href='#g4-48'/>
<use x='478.04413' y='292.769743' xlink:href='#g5-115'/>
<use x='482.714118' y='292.769743' xlink:href='#g5-116'/>
<use x='486.311753' y='292.769743' xlink:href='#g5-101'/>
<use x='490.950624' y='292.769743' xlink:href='#g5-114'/>
<use x='495.722112' y='292.769743' xlink:href='#g5-114'/>
<use x='500.4936' y='292.769743' xlink:href='#g5-105'/>
<use x='503.925858' y='292.769743' xlink:href='#g5-98'/>
<use x='508.201493' y='292.769743' xlink:href='#g5-108'/>
<use x='511.370186' y='292.769743' xlink:href='#g5-101'/>
<use x='516.009058' y='292.769743' xlink:href='#g5-58'/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 40 KiB

146
doc/howto/index.css Normal file
View File

@ -0,0 +1,146 @@
/* start css.sty */
.cmr-17{font-size:170%;}
.cmtt-10{font-family: monospace,monospace;}
.cmbx-10{ font-weight: bold;}
.tctt-1000{font-family: monospace,monospace;}
p{margin-top:0;margin-bottom:0}
p.indent{text-indent:0;}
p + p{margin-top:1em;}
p + div, p + pre {margin-top:1em;}
div + p, pre + p {margin-top:1em;}
a { overflow-wrap: break-word; word-wrap: break-word; word-break: break-word; hyphens: auto; }
@media print {div.crosslinks {visibility:hidden;}}
table.tabular{border-collapse: collapse; border-spacing: 0;}
a img { border-top: 0; border-left: 0; border-right: 0; }
center { margin-top:1em; margin-bottom:1em; }
td center { margin-top:0em; margin-bottom:0em; }
.Canvas { position:relative; }
img.math{vertical-align:middle;}
div.par-math-display, div.math-display{text-align:center;}
body{ margin:1em auto; max-width:80ch; padding:0 .62em; }
h1,h2,h3,h4,h5 { line-height:1.2; }
@media print{ body{ max-width:none } }
.partHead, .likepartHead { font-size: 2em; }
.chapterHead, .likechapterHead { font-size: 1.7411em; }
.sectionHead, .likesectionHead { font-size: 1.3157em; }
.subsectionHead, .likesubsectionHead { font-size: 1.0195em; }
.subsubsectionHead, .likesubsubsectionHead { font-size: 1.1487em; }
li p.indent { text-indent: 0em }
li p:first-child{ margin-top:0em; }
li p:last-child, li div:last-child { margin-bottom:0.5em; }
li p:first-child{ margin-bottom:0; }
li p~ul:last-child, li p~ol:last-child{ margin-bottom:0.5em; }
.enumerate1 {list-style-type:decimal;}
.enumerate2 {list-style-type:lower-alpha;}
.enumerate3 {list-style-type:lower-roman;}
.enumerate4 {list-style-type:upper-alpha;}
div.newtheorem { margin-bottom: 2em; margin-top: 2em;}
div.newtheorem .head{font-weight: bold;}
.obeylines-h,.obeylines-v {white-space: nowrap; }
div.obeylines-v p { margin-top:0; margin-bottom:0; }
.overline{ text-decoration:overline; }
.overline img{ border-top: 1px solid black; }
td.displaylines {text-align:center; white-space:nowrap;}
.centerline {text-align:center;}
.rightline {text-align:right;}
pre.verbatim {font-family: monospace,monospace; text-align:left; clear:both; }
.fbox {padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; }
div.fbox {display:table}
div.center div.fbox {text-align:center; clear:both; padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; }
div.minipage{width:100%;}
div.center, div.center div.center {text-align: center; margin-left:1em; margin-right:1em;}
div.center div {text-align: left;}
div.flushright, div.flushright div.flushright {text-align: right;}
div.flushright div {text-align: left;}
div.flushleft {text-align: left;}
.underline{ text-decoration:underline; }
.underline img{ border-bottom: 1px solid black; margin-bottom:1pt; }
.framebox-c, .framebox-l, .framebox-r { padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; }
.framebox-c {text-align:center;}
.framebox-l {text-align:left;}
.framebox-r {text-align:right;}
span.thank-mark{ vertical-align: super }
span.footnote-mark sup.textsuperscript, span.footnote-mark a sup.textsuperscript{ font-size:80%; }
code.verb{font-family:monospace,monospace;}
div.tabular, div.center div.tabular {text-align: center; margin-top:0.5em; margin-bottom:0.5em; }
table.tabular td p{margin-top:0em;}
table.tabular {margin-left: auto; margin-right: auto;}
td p:first-child{ margin-top:0em; }
td p:last-child{ margin-bottom:0em; }
div.td00{ margin-left:0pt; margin-right:0pt; }
div.td01{ margin-left:0pt; margin-right:5pt; }
div.td10{ margin-left:5pt; margin-right:0pt; }
div.td11{ margin-left:5pt; margin-right:5pt; }
table[rules] {border-left:solid black 0.4pt; border-right:solid black 0.4pt; }
td.td00{ padding-left:0pt; padding-right:0pt; }
td.td01{ padding-left:0pt; padding-right:5pt; }
td.td10{ padding-left:5pt; padding-right:0pt; }
td.td11{ padding-left:5pt; padding-right:5pt; }
table[rules] {border-left:solid black 0.4pt; border-right:solid black 0.4pt; }
.hline hr, .cline hr{ height : 0px; margin:0px; }
.hline td, .cline td{ padding: 0; }
.hline hr, .cline hr{border:none;border-top:1px solid black;}
.hline {border-top: 1px solid black;}
.hline + .vspace:last-child{display:none;}
.hline:first-child{border-bottom:1px solid black;border-top:none;}
.tabbing-right {text-align:right;}
div.float, div.figure {margin-left: auto; margin-right: auto;}
div.float img {text-align:center;}
div.figure img {text-align:center;}
.marginpar,.reversemarginpar {width:20%; float:right; text-align:left; margin-left:auto; margin-top:0.5em; font-size:85%; text-decoration:underline;}
.marginpar p,.reversemarginpar p{margin-top:0.4em; margin-bottom:0.4em;}
.reversemarginpar{float:left;}
table.equation {width:100%;}
.equation td{text-align:center; }
td.equation { margin-top:1em; margin-bottom:1em; }
td.equation-label { width:5%; text-align:center; }
td.eqnarray4 { width:5%; white-space: normal; }
td.eqnarray2 { width:5%; }
table.eqnarray-star, table.eqnarray {width:100%;}
div.eqnarray{text-align:center;}
div.array {text-align:center;}
div.pmatrix {text-align:center;}
table.pmatrix {width:100%;}
span.pmatrix img{vertical-align:middle;}
div.pmatrix {text-align:center;}
table.pmatrix {width:100%;}
span.bar-css {text-decoration:overline;}
img.cdots{vertical-align:middle;}
.partToc a, .partToc, .likepartToc a, .likepartToc {line-height: 200%; font-weight:bold; font-size:110%;}
.index-item, .index-subitem, .index-subsubitem {display:block}
div.caption {text-indent:-2em; margin-left:3em; margin-right:1em; text-align:left;}
div.caption span.id{font-weight: bold; white-space: nowrap; }
h1.partHead{text-align: center}
p.bibitem { text-indent: -2em; margin-left: 2em; margin-top:0.6em; margin-bottom:0.6em; }
p.bibitem-p { text-indent: 0em; margin-left: 2em; margin-top:0.6em; margin-bottom:0.6em; }
.subsubsectionHead, .likesubsubsectionHead { font-size: 1em; }
.paragraphHead, .likeparagraphHead { margin-top:2em; font-weight: bold;}
.subparagraphHead, .likesubparagraphHead { font-weight: bold;}
.verse{white-space:nowrap; margin-left:2em}
div.maketitle {text-align:center;}
h2.titleHead{text-align:center;}
div.maketitle{ margin-bottom: 2em; }
div.author, div.date {text-align:center;}
div.thanks{text-align:left; margin-left:10%; font-size:85%; font-style:italic; }
div.author{white-space: nowrap;}
div.abstract p {margin-left:5%; margin-right:5%;}
div.abstract {width:100%;}
.abstracttitle{text-align:center;margin-bottom:1em;}
.subsectionToc, .likesubsectionToc {margin-left:1em;}
.subsubsectionToc, .likesubsubsectionToc {margin-left:2em;}
.paragraphToc, .likeparagraphToc {margin-left:3em;}
.subparagraphToc, .likesubparagraphToc {margin-left:4em;}
figure.float, div.figure {margin-left: auto; margin-right: auto;}
figure.figure {text-align:center;}
figcaption.caption {text-indent:-2em; margin-left:3em; margin-right:1em; text-align:center;}
figcaption.caption span.id{font-weight: bold; white-space: nowrap; }
p + figcaption, img + figcaption{margin-top: 1em;}
.abstract{margin:1em;}
.rotatebox{display: inline-block;}
/* end css.sty */
img[alt="PIC"] { width: 100%; }
.cmtt-10 { font-size: 0.9em; }
img[src="index3x.svg"] { height: 2.5em; }
object[class="graphics"] { width: 100% }

253
doc/howto/index.html Normal file
View File

@ -0,0 +1,253 @@
<!DOCTYPE html>
<html lang='en-US' xml:lang='en-US'>
<head><title>Building and running the Dreamcast JVM</title>
<meta charset='utf-8' />
<meta content='TeX4ht (https://tug.org/tex4ht/)' name='generator' />
<meta content='width=device-width,initial-scale=1' name='viewport' />
<link href='index.css' rel='stylesheet' type='text/css' />
<meta content='howto.tex' name='src' />
</head><body>
<div class='maketitle'>
<h2 class='titleHead'>Building and running the Dreamcast JVM</h2>
<div class='author'></div><br />
<div class='date'></div>
</div>
<h3 class='likesectionHead'><a id='x1-1000'></a>Contents</h3>
<div class='tableofcontents'>
<span class='sectionToc'><a href='#x1-2000' id='QQ2-1-2'>Introduction</a></span>
<br /> <span class='sectionToc'><a href='#x1-3000' id='QQ2-1-3'>Additional notes</a></span>
<br /> <span class='subsectionToc'><a href='#x1-4000' id='QQ2-1-4'>Generate classpath</a></span>
<br /> <span class='subsectionToc'><a href='#x1-5000' id='QQ2-1-5'>Flycast settings</a></span>
<br /> <span class='subsectionToc'><a href='#x1-6000' id='QQ2-1-6'>Run the Dreamcast JVM on Linux/Windows/macOS</a></span>
<br /> <span class='subsectionToc'><a href='#x1-7000' id='QQ2-1-7'>JVM debug print</a></span>
<br /> <span class='sectionToc'><a href='#x1-8000' id='QQ2-1-8'>Unsolved problems</a></span>
<br /> <span class='subsectionToc'><a href='#x1-9000' id='QQ2-1-9'>Boot class path</a></span>
<br /> <span class='subsectionToc'><a href='#x1-10000' id='QQ2-1-10'>Nested class filenames contain the dollar-sign character</a></span>
<br /> <span class='subsectionToc'><a href='#x1-11000' id='QQ2-1-11'>Unused class/method removal</a></span>
</div>
<h3 class='sectionHead'><a id='x1-2000'></a>Introduction</h3>
<!-- l. 28 --><p class='noindent'>The <span class='cmtt-10'>jvm</span> project’s Dreamcast build system depends on the <span class='cmtt-10'>dreamcast</span> project. This
dependency is limited mostly to sharing Make rules. Clone both of these as siblings of
the same parent directory, as in:
</p>
<pre class='verbatim' id='verbatim-1'>
git clone https://github.com/buhman/dreamcast
git clone https://github.com/buhman/jvm
</pre>
<!-- l. 36 --><p class='nopar'>
</p><!-- l. 38 --><p class='indent'> If you would like to use a <span class='cmtt-10'>.cdi</span> image, the build process also depends on <span class='cmtt-10'>cdi4dc</span>.
It is assumed that this tool exists in the same directory that contains the <span class='cmtt-10'>dreamcast</span>
and <span class='cmtt-10'>jvm</span> directories. On Linux, do:
</p>
<pre class='verbatim' id='verbatim-2'>
curl -LO https://files.dcemulation.org/software/pctools/cdi4dc/cdi4dc_02b_linux.zip
unzip cdi4dc_02b_linux.zip
chmod +x cdi4dc
</pre>
<!-- l. 48 --><p class='nopar'>
</p><!-- l. 50 --><p class='indent'> To build everything, do the following:
</p>
<pre class='verbatim' id='verbatim-3'>
cd jvm
sh generate_classpath.sh
rm -f main.bin main.elf jvm.iso
make -f Makefile.dreamcast.mk TARGET=sh-elf- jvm.iso
../cdi4dc jvm.iso jvm.cdi
</pre>
<!-- l. 62 --><p class='nopar'>
</p><!-- l. 64 --><p class='indent'> You should change the value of <span class='cmtt-10'>TARGET=sh-elf-</span> to whatever matches your GCC
SH installation. If for example your GCC is named <span class='cmtt-10'>sh4-none-elf-gcc</span> then the
correct <span class='cmtt-10'>TARGET</span> value would be <span class='cmtt-10'>TARGET=sh4-none-elf-</span> (including the trailing
hyphen).
</p><!-- l. 69 --><p class='indent'> You can then run the generated <span class='cmtt-10'>jvm.cdi</span> on Dreamcast hardware or
emulators.
</p><!-- l. 72 --><p class='noindent'>
</p>
<h3 class='sectionHead'><a id='x1-3000'></a>Additional notes</h3>
<!-- l. 74 --><p class='noindent'>
</p>
<h4 class='subsectionHead'><a id='x1-4000'></a>Generate classpath</h4>
<!-- l. 76 --><p class='noindent'>The <span class='cmtt-10'>generate_classpath.sh</span> script is terrible. It is a “quick hack” to work around
<a href='#x1-8000doc'>multiple unsolved problems</a>.
</p><!-- l. 79 --><p class='indent'> If you wish to modify the build process to include newly-written classes, you
should append them to the <span class='cmtt-10'>application_classes</span> array in <span class='cmtt-10'>generate_classpath.sh</span>.
</p><!-- l. 83 --><p class='noindent'>
</p>
<h4 class='subsectionHead'><a id='x1-5000'></a>Flycast settings</h4>
<!-- l. 85 --><p class='noindent'>I recommend the following Flycast settings:
</p>
<ul class='itemize1'>
<li class='itemize'>Video <span class='tcrm-1000'></span> Transparent Sorting <span class='tcrm-1000'></span> Per Pixel (selected)
</li>
<li class='itemize'>Video <span class='tcrm-1000'></span> Rendering Options <span class='tcrm-1000'></span> Full Framebuffer Emulation (checked)
</li>
<li class='itemize'>Video <span class='tcrm-1000'></span> Advanced <span class='tcrm-1000'></span> Copy Rendered Textures to VRAM (checked)
</li>
<li class='itemize'>Advanced <span class='tcrm-1000'></span> Other <span class='tcrm-1000'></span> Serial Console (checked)</li></ul>
<!-- l. 94 --><p class='noindent'>
</p>
<h4 class='subsectionHead'><a id='x1-6000'></a>Run the Dreamcast JVM on Linux/Windows/macOS</h4>
<!-- l. 96 --><p class='noindent'>The Dreamcast JVM can also run as a application on a PC operating system. This
can be useful for testing general Java features independently of running on a
Dreamcast.
</p>
<pre class='verbatim' id='verbatim-4'>
make clean
make main
</pre>
<!-- l. 104 --><p class='nopar'>
</p><!-- l. 106 --><p class='indent'> You should run <span class='cmtt-10'>make clean</span> any time you wish to swap between the PC and
Dreamcast versions of the JVM.
</p><!-- l. 109 --><p class='indent'> Compile one of the tests as an example:
</p>
<pre class='verbatim' id='verbatim-5'>
make classes/test/TestIntegerBitCount.class
</pre>
<!-- l. 113 --><p class='nopar'>
</p><!-- l. 115 --><p class='indent'> Run the Dreamcast JVM like this:
</p>
<pre class='verbatim' id='verbatim-6'>
cd classes
# ../main [entry_class_name] [class_file...]
../main test/TestIntegerBitCount test/*.class java/lang/*.class java/io/*.class
</pre>
<!-- l. 123 --><p class='nopar'>
</p><!-- l. 125 --><p class='indent'> Note that for no specific reason, the Dreamcast JVM main method declaration
is
</p>
<pre class='verbatim' id='verbatim-7'>
public static void main()
</pre>
<!-- l. 128 --><p class='nopar'> rather than the standard
</p>
<pre class='verbatim' id='verbatim-8'>
public static void main(String[] args)
</pre>
<!-- l. 132 --><p class='nopar'> I may change this in the future (it is not hard to support either, or even
both).
</p><!-- l. 136 --><p class='noindent'>
</p>
<h4 class='subsectionHead'><a id='x1-7000'></a>JVM debug print</h4>
<!-- l. 138 --><p class='noindent'><span class='cmtt-10'>DEBUG_PRINT</span> is <span class='cmbx-10'>very slow</span> and unintelligibly verbose for non-trivial programs. It is
mostly useful for doing low-level debugging of the JVM itself for very simple
programs.
</p><!-- l. 142 --><p class='indent'> This can be disabled/enabled in either <span class='cmtt-10'>Makefile</span> or <span class='cmtt-10'>Makefile.dreamcast.mk</span> by
commenting/uncommenting the line
</p>
<pre class='verbatim' id='verbatim-9'>
CFLAGS += -DDEBUG_PRINT
</pre>
<!-- l. 146 --><p class='nopar'>
</p><!-- l. 148 --><p class='indent'> When changing <span class='cmtt-10'>CFLAGS</span>, remove all previously-built object files with the
command:
</p>
<pre class='verbatim' id='verbatim-10'>
make clean
</pre>
<!-- l. 153 --><p class='nopar'>
</p><!-- l. 155 --><p class='noindent'>
</p>
<h3 class='sectionHead'><a id='x1-8000'></a>Unsolved problems</h3>
<p><a id='x1-8000doc'></a>
</p><!-- l. 158 --><p class='noindent'>There are a few issues that currently cause the build process to be uglier than I’d like
it to be. I welcome any suggestions regarding any of these topics:
</p><!-- l. 161 --><p class='noindent'>
</p>
<h4 class='subsectionHead'><a id='x1-9000'></a>Boot class path</h4>
<!-- l. 163 --><p class='noindent'>The Dreamcast JVM includes its own versions the classes from <span class='cmtt-10'>java.lang</span>. The
OpenJDK <span class='cmtt-10'>javac</span>, however, will attempt to link against OpenJDK’s own version of
<span class='cmtt-10'>java.lang</span>.
</p><!-- l. 167 --><p class='indent'> In many cases, this will coincidentally not cause issues. However, it is better to
explicitly reference the Dreamcast JVM’s version of <span class='cmtt-10'>java.lang</span> to be able to catch
any linking errors as early as possible (<span class='cmtt-10'>javac</span>’s error messages are also much better
than those you’d get from <span class='cmtt-10'>jvm.bin</span>).
</p><!-- l. 172 --><p class='indent'> However, <span class='cmtt-10'>javac</span> doesn’t appear to support this in a convenient way. The best
invocation I’ve found so far is:
</p>
<pre class='verbatim' id='verbatim-11'>
cd jvm/classes
javac -Xlint:-options --source 8 --target 8 --boot-class-path . path/to/YourClass.java
</pre>
<!-- l. 179 --><p class='nopar'>
</p><!-- l. 181 --><p class='indent'> This does limit you to Java 8 language features, but this appears to be the only
way to enable the <span class='cmtt-10'>--boot-class-path</span> option, for which there is no clear
replacement in newer versions.
</p><!-- l. 185 --><p class='noindent'>
</p>
<h4 class='subsectionHead'><a id='x1-10000'></a>Nested class filenames contain the dollar-sign character</h4>
<!-- l. 187 --><p class='noindent'>I have not managed to make my Make rules tolerant of <span class='tctt-1000'>$</span> characters in filenames.
This is the main reason why <span class='cmtt-10'>generate_classpath.sh</span> exists, and it’s also the reason
why it’s terrible.
</p><!-- l. 191 --><p class='noindent'>
</p>
<h4 class='subsectionHead'><a id='x1-11000'></a>Unused class/method removal</h4>
<!-- l. 193 --><p class='noindent'>It would be nice to have a build process/tool that works like this:
</p>
<ul class='itemize1'>
<li class='itemize'>give the name of the “main”/entrypoint class as a command-line argument
</li>
<li class='itemize'>automatically/recursively calculate the minimum set of
classes/methods/fields that “main” depends on
</li>
<li class='itemize'>from the full library of available classes, emit a reduced/minimal set of
(compiled) class files that only contain the methods and fields that are
reachable via “main”.</li></ul>
<!-- l. 204 --><p class='indent'> I will create this tool at some point.
</p>
</body>
</html>

View File

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 10 KiB