Comments for documentation
This commit is contained in:
10
.gitignore
vendored
10
.gitignore
vendored
@@ -5,6 +5,7 @@ cmake-*
|
||||
build
|
||||
.DS_Store
|
||||
*.pdf
|
||||
docs
|
||||
|
||||
### CMake ###
|
||||
CMakeLists.txt.user
|
||||
@@ -45,3 +46,12 @@ _deps
|
||||
elf2uf2
|
||||
generated
|
||||
pico-sdk
|
||||
pioasm
|
||||
*.bin
|
||||
*.elf
|
||||
*.elf.map
|
||||
*.hex
|
||||
*.dis
|
||||
*.uf2
|
||||
vga.pio.h
|
||||
Makefile
|
||||
|
||||
280
CMakeDoxyfile.in
Normal file
280
CMakeDoxyfile.in
Normal file
@@ -0,0 +1,280 @@
|
||||
#
|
||||
# DO NOT EDIT! THIS FILE WAS GENERATED BY CMAKE!
|
||||
#
|
||||
|
||||
DOXYFILE_ENCODING = @DOXYGEN_DOXYFILE_ENCODING@
|
||||
PROJECT_NAME = @DOXYGEN_PROJECT_NAME@
|
||||
PROJECT_NUMBER = @DOXYGEN_PROJECT_NUMBER@
|
||||
PROJECT_BRIEF = @DOXYGEN_PROJECT_BRIEF@
|
||||
PROJECT_LOGO = @DOXYGEN_PROJECT_LOGO@
|
||||
OUTPUT_DIRECTORY = @DOXYGEN_OUTPUT_DIRECTORY@
|
||||
CREATE_SUBDIRS = @DOXYGEN_CREATE_SUBDIRS@
|
||||
ALLOW_UNICODE_NAMES = @DOXYGEN_ALLOW_UNICODE_NAMES@
|
||||
OUTPUT_LANGUAGE = @DOXYGEN_OUTPUT_LANGUAGE@
|
||||
OUTPUT_TEXT_DIRECTION = @DOXYGEN_OUTPUT_TEXT_DIRECTION@
|
||||
BRIEF_MEMBER_DESC = @DOXYGEN_BRIEF_MEMBER_DESC@
|
||||
REPEAT_BRIEF = @DOXYGEN_REPEAT_BRIEF@
|
||||
ABBREVIATE_BRIEF = @DOXYGEN_ABBREVIATE_BRIEF@
|
||||
ALWAYS_DETAILED_SEC = @DOXYGEN_ALWAYS_DETAILED_SEC@
|
||||
INLINE_INHERITED_MEMB = @DOXYGEN_INLINE_INHERITED_MEMB@
|
||||
FULL_PATH_NAMES = @DOXYGEN_FULL_PATH_NAMES@
|
||||
STRIP_FROM_PATH = @DOXYGEN_STRIP_FROM_PATH@
|
||||
STRIP_FROM_INC_PATH = @DOXYGEN_STRIP_FROM_INC_PATH@
|
||||
SHORT_NAMES = @DOXYGEN_SHORT_NAMES@
|
||||
JAVADOC_AUTOBRIEF = @DOXYGEN_JAVADOC_AUTOBRIEF@
|
||||
JAVADOC_BANNER = @DOXYGEN_JAVADOC_BANNER@
|
||||
QT_AUTOBRIEF = @DOXYGEN_QT_AUTOBRIEF@
|
||||
MULTILINE_CPP_IS_BRIEF = @DOXYGEN_MULTILINE_CPP_IS_BRIEF@
|
||||
INHERIT_DOCS = @DOXYGEN_INHERIT_DOCS@
|
||||
SEPARATE_MEMBER_PAGES = @DOXYGEN_SEPARATE_MEMBER_PAGES@
|
||||
TAB_SIZE = @DOXYGEN_TAB_SIZE@
|
||||
ALIASES = @DOXYGEN_ALIASES@
|
||||
TCL_SUBST = @DOXYGEN_TCL_SUBST@
|
||||
OPTIMIZE_OUTPUT_FOR_C = @DOXYGEN_OPTIMIZE_OUTPUT_FOR_C@
|
||||
OPTIMIZE_OUTPUT_JAVA = @DOXYGEN_OPTIMIZE_OUTPUT_JAVA@
|
||||
OPTIMIZE_FOR_FORTRAN = @DOXYGEN_OPTIMIZE_FOR_FORTRAN@
|
||||
OPTIMIZE_OUTPUT_VHDL = @DOXYGEN_OPTIMIZE_OUTPUT_VHDL@
|
||||
OPTIMIZE_OUTPUT_SLICE = @DOXYGEN_OPTIMIZE_OUTPUT_SLICE@
|
||||
EXTENSION_MAPPING = @DOXYGEN_EXTENSION_MAPPING@
|
||||
MARKDOWN_SUPPORT = @DOXYGEN_MARKDOWN_SUPPORT@
|
||||
TOC_INCLUDE_HEADINGS = @DOXYGEN_TOC_INCLUDE_HEADINGS@
|
||||
AUTOLINK_SUPPORT = @DOXYGEN_AUTOLINK_SUPPORT@
|
||||
BUILTIN_STL_SUPPORT = @DOXYGEN_BUILTIN_STL_SUPPORT@
|
||||
CPP_CLI_SUPPORT = @DOXYGEN_CPP_CLI_SUPPORT@
|
||||
SIP_SUPPORT = @DOXYGEN_SIP_SUPPORT@
|
||||
IDL_PROPERTY_SUPPORT = @DOXYGEN_IDL_PROPERTY_SUPPORT@
|
||||
DISTRIBUTE_GROUP_DOC = @DOXYGEN_DISTRIBUTE_GROUP_DOC@
|
||||
GROUP_NESTED_COMPOUNDS = @DOXYGEN_GROUP_NESTED_COMPOUNDS@
|
||||
SUBGROUPING = @DOXYGEN_SUBGROUPING@
|
||||
INLINE_GROUPED_CLASSES = @DOXYGEN_INLINE_GROUPED_CLASSES@
|
||||
INLINE_SIMPLE_STRUCTS = @DOXYGEN_INLINE_SIMPLE_STRUCTS@
|
||||
TYPEDEF_HIDES_STRUCT = @DOXYGEN_TYPEDEF_HIDES_STRUCT@
|
||||
LOOKUP_CACHE_SIZE = @DOXYGEN_LOOKUP_CACHE_SIZE@
|
||||
EXTRACT_ALL = @DOXYGEN_EXTRACT_ALL@
|
||||
EXTRACT_PRIVATE = @DOXYGEN_EXTRACT_PRIVATE@
|
||||
EXTRACT_PRIV_VIRTUAL = @DOXYGEN_EXTRACT_PRIV_VIRTUAL@
|
||||
EXTRACT_PACKAGE = @DOXYGEN_EXTRACT_PACKAGE@
|
||||
EXTRACT_STATIC = @DOXYGEN_EXTRACT_STATIC@
|
||||
EXTRACT_LOCAL_CLASSES = @DOXYGEN_EXTRACT_LOCAL_CLASSES@
|
||||
EXTRACT_LOCAL_METHODS = @DOXYGEN_EXTRACT_LOCAL_METHODS@
|
||||
EXTRACT_ANON_NSPACES = @DOXYGEN_EXTRACT_ANON_NSPACES@
|
||||
HIDE_UNDOC_MEMBERS = @DOXYGEN_HIDE_UNDOC_MEMBERS@
|
||||
HIDE_UNDOC_CLASSES = @DOXYGEN_HIDE_UNDOC_CLASSES@
|
||||
HIDE_FRIEND_COMPOUNDS = @DOXYGEN_HIDE_FRIEND_COMPOUNDS@
|
||||
HIDE_IN_BODY_DOCS = @DOXYGEN_HIDE_IN_BODY_DOCS@
|
||||
INTERNAL_DOCS = @DOXYGEN_INTERNAL_DOCS@
|
||||
CASE_SENSE_NAMES = @DOXYGEN_CASE_SENSE_NAMES@
|
||||
HIDE_SCOPE_NAMES = @DOXYGEN_HIDE_SCOPE_NAMES@
|
||||
HIDE_COMPOUND_REFERENCE= @DOXYGEN_HIDE_COMPOUND_REFERENCE@
|
||||
SHOW_INCLUDE_FILES = @DOXYGEN_SHOW_INCLUDE_FILES@
|
||||
SHOW_GROUPED_MEMB_INC = @DOXYGEN_SHOW_GROUPED_MEMB_INC@
|
||||
FORCE_LOCAL_INCLUDES = @DOXYGEN_FORCE_LOCAL_INCLUDES@
|
||||
INLINE_INFO = @DOXYGEN_INLINE_INFO@
|
||||
SORT_MEMBER_DOCS = @DOXYGEN_SORT_MEMBER_DOCS@
|
||||
SORT_BRIEF_DOCS = @DOXYGEN_SORT_BRIEF_DOCS@
|
||||
SORT_MEMBERS_CTORS_1ST = @DOXYGEN_SORT_MEMBERS_CTORS_1ST@
|
||||
SORT_GROUP_NAMES = @DOXYGEN_SORT_GROUP_NAMES@
|
||||
SORT_BY_SCOPE_NAME = @DOXYGEN_SORT_BY_SCOPE_NAME@
|
||||
STRICT_PROTO_MATCHING = @DOXYGEN_STRICT_PROTO_MATCHING@
|
||||
GENERATE_TODOLIST = @DOXYGEN_GENERATE_TODOLIST@
|
||||
GENERATE_TESTLIST = @DOXYGEN_GENERATE_TESTLIST@
|
||||
GENERATE_BUGLIST = @DOXYGEN_GENERATE_BUGLIST@
|
||||
GENERATE_DEPRECATEDLIST= @DOXYGEN_GENERATE_DEPRECATEDLIST@
|
||||
ENABLED_SECTIONS = @DOXYGEN_ENABLED_SECTIONS@
|
||||
MAX_INITIALIZER_LINES = @DOXYGEN_MAX_INITIALIZER_LINES@
|
||||
SHOW_USED_FILES = @DOXYGEN_SHOW_USED_FILES@
|
||||
SHOW_FILES = @DOXYGEN_SHOW_FILES@
|
||||
SHOW_NAMESPACES = @DOXYGEN_SHOW_NAMESPACES@
|
||||
FILE_VERSION_FILTER = @DOXYGEN_FILE_VERSION_FILTER@
|
||||
LAYOUT_FILE = @DOXYGEN_LAYOUT_FILE@
|
||||
CITE_BIB_FILES = @DOXYGEN_CITE_BIB_FILES@
|
||||
QUIET = @DOXYGEN_QUIET@
|
||||
WARNINGS = @DOXYGEN_WARNINGS@
|
||||
WARN_IF_UNDOCUMENTED = @DOXYGEN_WARN_IF_UNDOCUMENTED@
|
||||
WARN_IF_DOC_ERROR = @DOXYGEN_WARN_IF_DOC_ERROR@
|
||||
WARN_NO_PARAMDOC = @DOXYGEN_WARN_NO_PARAMDOC@
|
||||
WARN_AS_ERROR = @DOXYGEN_WARN_AS_ERROR@
|
||||
WARN_FORMAT = @DOXYGEN_WARN_FORMAT@
|
||||
WARN_LOGFILE = @DOXYGEN_WARN_LOGFILE@
|
||||
INPUT = @DOXYGEN_INPUT@
|
||||
INPUT_ENCODING = @DOXYGEN_INPUT_ENCODING@
|
||||
FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@
|
||||
RECURSIVE = @DOXYGEN_RECURSIVE@
|
||||
EXCLUDE = @DOXYGEN_EXCLUDE@
|
||||
EXCLUDE_SYMLINKS = @DOXYGEN_EXCLUDE_SYMLINKS@
|
||||
EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@
|
||||
EXCLUDE_SYMBOLS = @DOXYGEN_EXCLUDE_SYMBOLS@
|
||||
EXAMPLE_PATH = @DOXYGEN_EXAMPLE_PATH@
|
||||
EXAMPLE_PATTERNS = @DOXYGEN_EXAMPLE_PATTERNS@
|
||||
EXAMPLE_RECURSIVE = @DOXYGEN_EXAMPLE_RECURSIVE@
|
||||
IMAGE_PATH = @DOXYGEN_IMAGE_PATH@
|
||||
INPUT_FILTER = @DOXYGEN_INPUT_FILTER@
|
||||
FILTER_PATTERNS = @DOXYGEN_FILTER_PATTERNS@
|
||||
FILTER_SOURCE_FILES = @DOXYGEN_FILTER_SOURCE_FILES@
|
||||
FILTER_SOURCE_PATTERNS = @DOXYGEN_FILTER_SOURCE_PATTERNS@
|
||||
USE_MDFILE_AS_MAINPAGE = @DOXYGEN_USE_MDFILE_AS_MAINPAGE@
|
||||
SOURCE_BROWSER = @DOXYGEN_SOURCE_BROWSER@
|
||||
INLINE_SOURCES = @DOXYGEN_INLINE_SOURCES@
|
||||
STRIP_CODE_COMMENTS = @DOXYGEN_STRIP_CODE_COMMENTS@
|
||||
REFERENCED_BY_RELATION = @DOXYGEN_REFERENCED_BY_RELATION@
|
||||
REFERENCES_RELATION = @DOXYGEN_REFERENCES_RELATION@
|
||||
REFERENCES_LINK_SOURCE = @DOXYGEN_REFERENCES_LINK_SOURCE@
|
||||
SOURCE_TOOLTIPS = @DOXYGEN_SOURCE_TOOLTIPS@
|
||||
USE_HTAGS = @DOXYGEN_USE_HTAGS@
|
||||
VERBATIM_HEADERS = @DOXYGEN_VERBATIM_HEADERS@
|
||||
CLANG_ASSISTED_PARSING = @DOXYGEN_CLANG_ASSISTED_PARSING@
|
||||
CLANG_OPTIONS = @DOXYGEN_CLANG_OPTIONS@
|
||||
CLANG_DATABASE_PATH = @DOXYGEN_CLANG_DATABASE_PATH@
|
||||
ALPHABETICAL_INDEX = @DOXYGEN_ALPHABETICAL_INDEX@
|
||||
COLS_IN_ALPHA_INDEX = @DOXYGEN_COLS_IN_ALPHA_INDEX@
|
||||
IGNORE_PREFIX = @DOXYGEN_IGNORE_PREFIX@
|
||||
GENERATE_HTML = @DOXYGEN_GENERATE_HTML@
|
||||
HTML_OUTPUT = @DOXYGEN_HTML_OUTPUT@
|
||||
HTML_FILE_EXTENSION = @DOXYGEN_HTML_FILE_EXTENSION@
|
||||
HTML_HEADER = @DOXYGEN_HTML_HEADER@
|
||||
HTML_FOOTER = @DOXYGEN_HTML_FOOTER@
|
||||
HTML_STYLESHEET = @DOXYGEN_HTML_STYLESHEET@
|
||||
HTML_EXTRA_STYLESHEET = @DOXYGEN_HTML_EXTRA_STYLESHEET@
|
||||
HTML_EXTRA_FILES = @DOXYGEN_HTML_EXTRA_FILES@
|
||||
HTML_COLORSTYLE_HUE = @DOXYGEN_HTML_COLORSTYLE_HUE@
|
||||
HTML_COLORSTYLE_SAT = @DOXYGEN_HTML_COLORSTYLE_SAT@
|
||||
HTML_COLORSTYLE_GAMMA = @DOXYGEN_HTML_COLORSTYLE_GAMMA@
|
||||
HTML_TIMESTAMP = @DOXYGEN_HTML_TIMESTAMP@
|
||||
HTML_DYNAMIC_MENUS = @DOXYGEN_HTML_DYNAMIC_MENUS@
|
||||
HTML_DYNAMIC_SECTIONS = @DOXYGEN_HTML_DYNAMIC_SECTIONS@
|
||||
HTML_INDEX_NUM_ENTRIES = @DOXYGEN_HTML_INDEX_NUM_ENTRIES@
|
||||
GENERATE_DOCSET = @DOXYGEN_GENERATE_DOCSET@
|
||||
DOCSET_FEEDNAME = @DOXYGEN_DOCSET_FEEDNAME@
|
||||
DOCSET_BUNDLE_ID = @DOXYGEN_DOCSET_BUNDLE_ID@
|
||||
DOCSET_PUBLISHER_ID = @DOXYGEN_DOCSET_PUBLISHER_ID@
|
||||
DOCSET_PUBLISHER_NAME = @DOXYGEN_DOCSET_PUBLISHER_NAME@
|
||||
GENERATE_HTMLHELP = @DOXYGEN_GENERATE_HTMLHELP@
|
||||
CHM_FILE = @DOXYGEN_CHM_FILE@
|
||||
HHC_LOCATION = @DOXYGEN_HHC_LOCATION@
|
||||
GENERATE_CHI = @DOXYGEN_GENERATE_CHI@
|
||||
CHM_INDEX_ENCODING = @DOXYGEN_CHM_INDEX_ENCODING@
|
||||
BINARY_TOC = @DOXYGEN_BINARY_TOC@
|
||||
TOC_EXPAND = @DOXYGEN_TOC_EXPAND@
|
||||
GENERATE_QHP = @DOXYGEN_GENERATE_QHP@
|
||||
QCH_FILE = @DOXYGEN_QCH_FILE@
|
||||
QHP_NAMESPACE = @DOXYGEN_QHP_NAMESPACE@
|
||||
QHP_VIRTUAL_FOLDER = @DOXYGEN_QHP_VIRTUAL_FOLDER@
|
||||
QHP_CUST_FILTER_NAME = @DOXYGEN_QHP_CUST_FILTER_NAME@
|
||||
QHP_CUST_FILTER_ATTRS = @DOXYGEN_QHP_CUST_FILTER_ATTRS@
|
||||
QHP_SECT_FILTER_ATTRS = @DOXYGEN_QHP_SECT_FILTER_ATTRS@
|
||||
QHG_LOCATION = @DOXYGEN_QHG_LOCATION@
|
||||
GENERATE_ECLIPSEHELP = @DOXYGEN_GENERATE_ECLIPSEHELP@
|
||||
ECLIPSE_DOC_ID = @DOXYGEN_ECLIPSE_DOC_ID@
|
||||
DISABLE_INDEX = @DOXYGEN_DISABLE_INDEX@
|
||||
GENERATE_TREEVIEW = @DOXYGEN_GENERATE_TREEVIEW@
|
||||
ENUM_VALUES_PER_LINE = @DOXYGEN_ENUM_VALUES_PER_LINE@
|
||||
TREEVIEW_WIDTH = @DOXYGEN_TREEVIEW_WIDTH@
|
||||
EXT_LINKS_IN_WINDOW = @DOXYGEN_EXT_LINKS_IN_WINDOW@
|
||||
FORMULA_FONTSIZE = @DOXYGEN_FORMULA_FONTSIZE@
|
||||
FORMULA_TRANSPARENT = @DOXYGEN_FORMULA_TRANSPARENT@
|
||||
FORMULA_MACROFILE = @DOXYGEN_FORMULA_MACROFILE@
|
||||
USE_MATHJAX = @DOXYGEN_USE_MATHJAX@
|
||||
MATHJAX_FORMAT = @DOXYGEN_MATHJAX_FORMAT@
|
||||
MATHJAX_RELPATH = @DOXYGEN_MATHJAX_RELPATH@
|
||||
MATHJAX_EXTENSIONS = @DOXYGEN_MATHJAX_EXTENSIONS@
|
||||
MATHJAX_CODEFILE = @DOXYGEN_MATHJAX_CODEFILE@
|
||||
SEARCHENGINE = @DOXYGEN_SEARCHENGINE@
|
||||
SERVER_BASED_SEARCH = @DOXYGEN_SERVER_BASED_SEARCH@
|
||||
EXTERNAL_SEARCH = @DOXYGEN_EXTERNAL_SEARCH@
|
||||
SEARCHENGINE_URL = @DOXYGEN_SEARCHENGINE_URL@
|
||||
SEARCHDATA_FILE = @DOXYGEN_SEARCHDATA_FILE@
|
||||
EXTERNAL_SEARCH_ID = @DOXYGEN_EXTERNAL_SEARCH_ID@
|
||||
EXTRA_SEARCH_MAPPINGS = @DOXYGEN_EXTRA_SEARCH_MAPPINGS@
|
||||
GENERATE_LATEX = @DOXYGEN_GENERATE_LATEX@
|
||||
LATEX_OUTPUT = @DOXYGEN_LATEX_OUTPUT@
|
||||
LATEX_CMD_NAME = @DOXYGEN_LATEX_CMD_NAME@
|
||||
MAKEINDEX_CMD_NAME = @DOXYGEN_MAKEINDEX_CMD_NAME@
|
||||
LATEX_MAKEINDEX_CMD = @DOXYGEN_LATEX_MAKEINDEX_CMD@
|
||||
COMPACT_LATEX = @DOXYGEN_COMPACT_LATEX@
|
||||
PAPER_TYPE = @DOXYGEN_PAPER_TYPE@
|
||||
EXTRA_PACKAGES = @DOXYGEN_EXTRA_PACKAGES@
|
||||
LATEX_HEADER = @DOXYGEN_LATEX_HEADER@
|
||||
LATEX_FOOTER = @DOXYGEN_LATEX_FOOTER@
|
||||
LATEX_EXTRA_STYLESHEET = @DOXYGEN_LATEX_EXTRA_STYLESHEET@
|
||||
LATEX_EXTRA_FILES = @DOXYGEN_LATEX_EXTRA_FILES@
|
||||
PDF_HYPERLINKS = @DOXYGEN_PDF_HYPERLINKS@
|
||||
USE_PDFLATEX = @DOXYGEN_USE_PDFLATEX@
|
||||
LATEX_BATCHMODE = @DOXYGEN_LATEX_BATCHMODE@
|
||||
LATEX_HIDE_INDICES = @DOXYGEN_LATEX_HIDE_INDICES@
|
||||
LATEX_SOURCE_CODE = @DOXYGEN_LATEX_SOURCE_CODE@
|
||||
LATEX_BIB_STYLE = @DOXYGEN_LATEX_BIB_STYLE@
|
||||
LATEX_TIMESTAMP = @DOXYGEN_LATEX_TIMESTAMP@
|
||||
LATEX_EMOJI_DIRECTORY = @DOXYGEN_LATEX_EMOJI_DIRECTORY@
|
||||
GENERATE_RTF = @DOXYGEN_GENERATE_RTF@
|
||||
RTF_OUTPUT = @DOXYGEN_RTF_OUTPUT@
|
||||
COMPACT_RTF = @DOXYGEN_COMPACT_RTF@
|
||||
RTF_HYPERLINKS = @DOXYGEN_RTF_HYPERLINKS@
|
||||
RTF_STYLESHEET_FILE = @DOXYGEN_RTF_STYLESHEET_FILE@
|
||||
RTF_EXTENSIONS_FILE = @DOXYGEN_RTF_EXTENSIONS_FILE@
|
||||
RTF_SOURCE_CODE = @DOXYGEN_RTF_SOURCE_CODE@
|
||||
GENERATE_MAN = @DOXYGEN_GENERATE_MAN@
|
||||
MAN_OUTPUT = @DOXYGEN_MAN_OUTPUT@
|
||||
MAN_EXTENSION = @DOXYGEN_MAN_EXTENSION@
|
||||
MAN_SUBDIR = @DOXYGEN_MAN_SUBDIR@
|
||||
MAN_LINKS = @DOXYGEN_MAN_LINKS@
|
||||
GENERATE_XML = @DOXYGEN_GENERATE_XML@
|
||||
XML_OUTPUT = @DOXYGEN_XML_OUTPUT@
|
||||
XML_PROGRAMLISTING = @DOXYGEN_XML_PROGRAMLISTING@
|
||||
XML_NS_MEMB_FILE_SCOPE = @DOXYGEN_XML_NS_MEMB_FILE_SCOPE@
|
||||
GENERATE_DOCBOOK = @DOXYGEN_GENERATE_DOCBOOK@
|
||||
DOCBOOK_OUTPUT = @DOXYGEN_DOCBOOK_OUTPUT@
|
||||
DOCBOOK_PROGRAMLISTING = @DOXYGEN_DOCBOOK_PROGRAMLISTING@
|
||||
GENERATE_AUTOGEN_DEF = @DOXYGEN_GENERATE_AUTOGEN_DEF@
|
||||
GENERATE_PERLMOD = @DOXYGEN_GENERATE_PERLMOD@
|
||||
PERLMOD_LATEX = @DOXYGEN_PERLMOD_LATEX@
|
||||
PERLMOD_PRETTY = @DOXYGEN_PERLMOD_PRETTY@
|
||||
PERLMOD_MAKEVAR_PREFIX = @DOXYGEN_PERLMOD_MAKEVAR_PREFIX@
|
||||
ENABLE_PREPROCESSING = @DOXYGEN_ENABLE_PREPROCESSING@
|
||||
MACRO_EXPANSION = @DOXYGEN_MACRO_EXPANSION@
|
||||
EXPAND_ONLY_PREDEF = @DOXYGEN_EXPAND_ONLY_PREDEF@
|
||||
SEARCH_INCLUDES = @DOXYGEN_SEARCH_INCLUDES@
|
||||
INCLUDE_PATH = @DOXYGEN_INCLUDE_PATH@
|
||||
INCLUDE_FILE_PATTERNS = @DOXYGEN_INCLUDE_FILE_PATTERNS@
|
||||
PREDEFINED = @DOXYGEN_PREDEFINED@
|
||||
EXPAND_AS_DEFINED = @DOXYGEN_EXPAND_AS_DEFINED@
|
||||
SKIP_FUNCTION_MACROS = @DOXYGEN_SKIP_FUNCTION_MACROS@
|
||||
TAGFILES = @DOXYGEN_TAGFILES@
|
||||
GENERATE_TAGFILE = @DOXYGEN_GENERATE_TAGFILE@
|
||||
ALLEXTERNALS = @DOXYGEN_ALLEXTERNALS@
|
||||
EXTERNAL_GROUPS = @DOXYGEN_EXTERNAL_GROUPS@
|
||||
EXTERNAL_PAGES = @DOXYGEN_EXTERNAL_PAGES@
|
||||
CLASS_DIAGRAMS = @DOXYGEN_CLASS_DIAGRAMS@
|
||||
DIA_PATH = @DOXYGEN_DIA_PATH@
|
||||
HIDE_UNDOC_RELATIONS = @DOXYGEN_HIDE_UNDOC_RELATIONS@
|
||||
HAVE_DOT = @DOXYGEN_HAVE_DOT@
|
||||
DOT_NUM_THREADS = @DOXYGEN_DOT_NUM_THREADS@
|
||||
DOT_FONTNAME = @DOXYGEN_DOT_FONTNAME@
|
||||
DOT_FONTSIZE = @DOXYGEN_DOT_FONTSIZE@
|
||||
DOT_FONTPATH = @DOXYGEN_DOT_FONTPATH@
|
||||
CLASS_GRAPH = @DOXYGEN_CLASS_GRAPH@
|
||||
COLLABORATION_GRAPH = @DOXYGEN_COLLABORATION_GRAPH@
|
||||
GROUP_GRAPHS = @DOXYGEN_GROUP_GRAPHS@
|
||||
UML_LOOK = @DOXYGEN_UML_LOOK@
|
||||
UML_LIMIT_NUM_FIELDS = @DOXYGEN_UML_LIMIT_NUM_FIELDS@
|
||||
TEMPLATE_RELATIONS = @DOXYGEN_TEMPLATE_RELATIONS@
|
||||
INCLUDE_GRAPH = @DOXYGEN_INCLUDE_GRAPH@
|
||||
INCLUDED_BY_GRAPH = @DOXYGEN_INCLUDED_BY_GRAPH@
|
||||
CALL_GRAPH = @DOXYGEN_CALL_GRAPH@
|
||||
CALLER_GRAPH = @DOXYGEN_CALLER_GRAPH@
|
||||
GRAPHICAL_HIERARCHY = @DOXYGEN_GRAPHICAL_HIERARCHY@
|
||||
DIRECTORY_GRAPH = @DOXYGEN_DIRECTORY_GRAPH@
|
||||
DOT_IMAGE_FORMAT = @DOXYGEN_DOT_IMAGE_FORMAT@
|
||||
INTERACTIVE_SVG = @DOXYGEN_INTERACTIVE_SVG@
|
||||
DOT_PATH = @DOXYGEN_DOT_PATH@
|
||||
DOTFILE_DIRS = @DOXYGEN_DOTFILE_DIRS@
|
||||
MSCFILE_DIRS = @DOXYGEN_MSCFILE_DIRS@
|
||||
DIAFILE_DIRS = @DOXYGEN_DIAFILE_DIRS@
|
||||
PLANTUML_JAR_PATH = @DOXYGEN_PLANTUML_JAR_PATH@
|
||||
PLANTUML_CFG_FILE = @DOXYGEN_PLANTUML_CFG_FILE@
|
||||
PLANTUML_INCLUDE_PATH = @DOXYGEN_PLANTUML_INCLUDE_PATH@
|
||||
DOT_GRAPH_MAX_NODES = @DOXYGEN_DOT_GRAPH_MAX_NODES@
|
||||
MAX_DOT_GRAPH_DEPTH = @DOXYGEN_MAX_DOT_GRAPH_DEPTH@
|
||||
DOT_TRANSPARENT = @DOXYGEN_DOT_TRANSPARENT@
|
||||
DOT_MULTI_TARGETS = @DOXYGEN_DOT_MULTI_TARGETS@
|
||||
GENERATE_LEGEND = @DOXYGEN_GENERATE_LEGEND@
|
||||
DOT_CLEANUP = @DOXYGEN_DOT_CLEANUP@
|
||||
672
CMakeDoxygenDefaults.cmake
Normal file
672
CMakeDoxygenDefaults.cmake
Normal file
@@ -0,0 +1,672 @@
|
||||
#
|
||||
# DO NOT EDIT! THIS FILE WAS GENERATED BY CMAKE!
|
||||
#
|
||||
|
||||
if(NOT DEFINED DOXYGEN_DOXYFILE_ENCODING)
|
||||
set(DOXYGEN_DOXYFILE_ENCODING UTF-8)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_PROJECT_NAME)
|
||||
set(DOXYGEN_PROJECT_NAME "My Project")
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_CREATE_SUBDIRS)
|
||||
set(DOXYGEN_CREATE_SUBDIRS NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_ALLOW_UNICODE_NAMES)
|
||||
set(DOXYGEN_ALLOW_UNICODE_NAMES NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_OUTPUT_LANGUAGE)
|
||||
set(DOXYGEN_OUTPUT_LANGUAGE English)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_OUTPUT_TEXT_DIRECTION)
|
||||
set(DOXYGEN_OUTPUT_TEXT_DIRECTION None)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_BRIEF_MEMBER_DESC)
|
||||
set(DOXYGEN_BRIEF_MEMBER_DESC YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_REPEAT_BRIEF)
|
||||
set(DOXYGEN_REPEAT_BRIEF YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_ABBREVIATE_BRIEF)
|
||||
set(DOXYGEN_ABBREVIATE_BRIEF "The $name class"
|
||||
"The $name widget"
|
||||
"The $name file"
|
||||
is
|
||||
provides
|
||||
specifies
|
||||
contains
|
||||
represents
|
||||
a
|
||||
an
|
||||
the)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_ALWAYS_DETAILED_SEC)
|
||||
set(DOXYGEN_ALWAYS_DETAILED_SEC NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_INLINE_INHERITED_MEMB)
|
||||
set(DOXYGEN_INLINE_INHERITED_MEMB NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_FULL_PATH_NAMES)
|
||||
set(DOXYGEN_FULL_PATH_NAMES YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_SHORT_NAMES)
|
||||
set(DOXYGEN_SHORT_NAMES NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_JAVADOC_AUTOBRIEF)
|
||||
set(DOXYGEN_JAVADOC_AUTOBRIEF NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_JAVADOC_BANNER)
|
||||
set(DOXYGEN_JAVADOC_BANNER NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_QT_AUTOBRIEF)
|
||||
set(DOXYGEN_QT_AUTOBRIEF NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_MULTILINE_CPP_IS_BRIEF)
|
||||
set(DOXYGEN_MULTILINE_CPP_IS_BRIEF NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_INHERIT_DOCS)
|
||||
set(DOXYGEN_INHERIT_DOCS YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_SEPARATE_MEMBER_PAGES)
|
||||
set(DOXYGEN_SEPARATE_MEMBER_PAGES NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_TAB_SIZE)
|
||||
set(DOXYGEN_TAB_SIZE 4)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_OPTIMIZE_OUTPUT_FOR_C)
|
||||
set(DOXYGEN_OPTIMIZE_OUTPUT_FOR_C NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_OPTIMIZE_OUTPUT_JAVA)
|
||||
set(DOXYGEN_OPTIMIZE_OUTPUT_JAVA NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_OPTIMIZE_FOR_FORTRAN)
|
||||
set(DOXYGEN_OPTIMIZE_FOR_FORTRAN NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_OPTIMIZE_OUTPUT_VHDL)
|
||||
set(DOXYGEN_OPTIMIZE_OUTPUT_VHDL NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_OPTIMIZE_OUTPUT_SLICE)
|
||||
set(DOXYGEN_OPTIMIZE_OUTPUT_SLICE NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_MARKDOWN_SUPPORT)
|
||||
set(DOXYGEN_MARKDOWN_SUPPORT YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_TOC_INCLUDE_HEADINGS)
|
||||
set(DOXYGEN_TOC_INCLUDE_HEADINGS 5)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_AUTOLINK_SUPPORT)
|
||||
set(DOXYGEN_AUTOLINK_SUPPORT YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_BUILTIN_STL_SUPPORT)
|
||||
set(DOXYGEN_BUILTIN_STL_SUPPORT NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_CPP_CLI_SUPPORT)
|
||||
set(DOXYGEN_CPP_CLI_SUPPORT NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_SIP_SUPPORT)
|
||||
set(DOXYGEN_SIP_SUPPORT NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_IDL_PROPERTY_SUPPORT)
|
||||
set(DOXYGEN_IDL_PROPERTY_SUPPORT YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_DISTRIBUTE_GROUP_DOC)
|
||||
set(DOXYGEN_DISTRIBUTE_GROUP_DOC NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_GROUP_NESTED_COMPOUNDS)
|
||||
set(DOXYGEN_GROUP_NESTED_COMPOUNDS NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_SUBGROUPING)
|
||||
set(DOXYGEN_SUBGROUPING YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_INLINE_GROUPED_CLASSES)
|
||||
set(DOXYGEN_INLINE_GROUPED_CLASSES NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_INLINE_SIMPLE_STRUCTS)
|
||||
set(DOXYGEN_INLINE_SIMPLE_STRUCTS NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_TYPEDEF_HIDES_STRUCT)
|
||||
set(DOXYGEN_TYPEDEF_HIDES_STRUCT NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_LOOKUP_CACHE_SIZE)
|
||||
set(DOXYGEN_LOOKUP_CACHE_SIZE 0)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_EXTRACT_ALL)
|
||||
set(DOXYGEN_EXTRACT_ALL NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_EXTRACT_PRIVATE)
|
||||
set(DOXYGEN_EXTRACT_PRIVATE NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_EXTRACT_PRIV_VIRTUAL)
|
||||
set(DOXYGEN_EXTRACT_PRIV_VIRTUAL NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_EXTRACT_PACKAGE)
|
||||
set(DOXYGEN_EXTRACT_PACKAGE NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_EXTRACT_STATIC)
|
||||
set(DOXYGEN_EXTRACT_STATIC NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_EXTRACT_LOCAL_CLASSES)
|
||||
set(DOXYGEN_EXTRACT_LOCAL_CLASSES YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_EXTRACT_LOCAL_METHODS)
|
||||
set(DOXYGEN_EXTRACT_LOCAL_METHODS NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_EXTRACT_ANON_NSPACES)
|
||||
set(DOXYGEN_EXTRACT_ANON_NSPACES NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_HIDE_UNDOC_MEMBERS)
|
||||
set(DOXYGEN_HIDE_UNDOC_MEMBERS NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_HIDE_UNDOC_CLASSES)
|
||||
set(DOXYGEN_HIDE_UNDOC_CLASSES NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_HIDE_FRIEND_COMPOUNDS)
|
||||
set(DOXYGEN_HIDE_FRIEND_COMPOUNDS NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_HIDE_IN_BODY_DOCS)
|
||||
set(DOXYGEN_HIDE_IN_BODY_DOCS NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_INTERNAL_DOCS)
|
||||
set(DOXYGEN_INTERNAL_DOCS NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_CASE_SENSE_NAMES)
|
||||
set(DOXYGEN_CASE_SENSE_NAMES YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_HIDE_SCOPE_NAMES)
|
||||
set(DOXYGEN_HIDE_SCOPE_NAMES NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_HIDE_COMPOUND_REFERENCE)
|
||||
set(DOXYGEN_HIDE_COMPOUND_REFERENCE NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_SHOW_INCLUDE_FILES)
|
||||
set(DOXYGEN_SHOW_INCLUDE_FILES YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_SHOW_GROUPED_MEMB_INC)
|
||||
set(DOXYGEN_SHOW_GROUPED_MEMB_INC NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_FORCE_LOCAL_INCLUDES)
|
||||
set(DOXYGEN_FORCE_LOCAL_INCLUDES NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_INLINE_INFO)
|
||||
set(DOXYGEN_INLINE_INFO YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_SORT_MEMBER_DOCS)
|
||||
set(DOXYGEN_SORT_MEMBER_DOCS YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_SORT_BRIEF_DOCS)
|
||||
set(DOXYGEN_SORT_BRIEF_DOCS NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_SORT_MEMBERS_CTORS_1ST)
|
||||
set(DOXYGEN_SORT_MEMBERS_CTORS_1ST NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_SORT_GROUP_NAMES)
|
||||
set(DOXYGEN_SORT_GROUP_NAMES NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_SORT_BY_SCOPE_NAME)
|
||||
set(DOXYGEN_SORT_BY_SCOPE_NAME NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_STRICT_PROTO_MATCHING)
|
||||
set(DOXYGEN_STRICT_PROTO_MATCHING NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_GENERATE_TODOLIST)
|
||||
set(DOXYGEN_GENERATE_TODOLIST YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_GENERATE_TESTLIST)
|
||||
set(DOXYGEN_GENERATE_TESTLIST YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_GENERATE_BUGLIST)
|
||||
set(DOXYGEN_GENERATE_BUGLIST YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_GENERATE_DEPRECATEDLIST)
|
||||
set(DOXYGEN_GENERATE_DEPRECATEDLIST YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_MAX_INITIALIZER_LINES)
|
||||
set(DOXYGEN_MAX_INITIALIZER_LINES 30)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_SHOW_USED_FILES)
|
||||
set(DOXYGEN_SHOW_USED_FILES YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_SHOW_FILES)
|
||||
set(DOXYGEN_SHOW_FILES YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_SHOW_NAMESPACES)
|
||||
set(DOXYGEN_SHOW_NAMESPACES YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_QUIET)
|
||||
set(DOXYGEN_QUIET NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_WARNINGS)
|
||||
set(DOXYGEN_WARNINGS YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_WARN_IF_UNDOCUMENTED)
|
||||
set(DOXYGEN_WARN_IF_UNDOCUMENTED YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_WARN_IF_DOC_ERROR)
|
||||
set(DOXYGEN_WARN_IF_DOC_ERROR YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_WARN_NO_PARAMDOC)
|
||||
set(DOXYGEN_WARN_NO_PARAMDOC NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_WARN_AS_ERROR)
|
||||
set(DOXYGEN_WARN_AS_ERROR NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_WARN_FORMAT)
|
||||
set(DOXYGEN_WARN_FORMAT "$file:$line: $text")
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_INPUT_ENCODING)
|
||||
set(DOXYGEN_INPUT_ENCODING UTF-8)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_FILE_PATTERNS)
|
||||
set(DOXYGEN_FILE_PATTERNS *.c
|
||||
*.cc
|
||||
*.cxx
|
||||
*.cpp
|
||||
*.c++
|
||||
*.java
|
||||
*.ii
|
||||
*.ixx
|
||||
*.ipp
|
||||
*.i++
|
||||
*.inl
|
||||
*.idl
|
||||
*.ddl
|
||||
*.odl
|
||||
*.h
|
||||
*.hh
|
||||
*.hxx
|
||||
*.hpp
|
||||
*.h++
|
||||
*.cs
|
||||
*.d
|
||||
*.php
|
||||
*.php4
|
||||
*.php5
|
||||
*.phtml
|
||||
*.inc
|
||||
*.m
|
||||
*.markdown
|
||||
*.md
|
||||
*.mm
|
||||
*.dox
|
||||
*.doc
|
||||
*.txt
|
||||
*.py
|
||||
*.pyw
|
||||
*.f90
|
||||
*.f95
|
||||
*.f03
|
||||
*.f08
|
||||
*.f
|
||||
*.for
|
||||
*.tcl
|
||||
*.vhd
|
||||
*.vhdl
|
||||
*.ucf
|
||||
*.qsf
|
||||
*.ice)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_RECURSIVE)
|
||||
set(DOXYGEN_RECURSIVE NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_EXCLUDE_SYMLINKS)
|
||||
set(DOXYGEN_EXCLUDE_SYMLINKS NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_EXAMPLE_PATTERNS)
|
||||
set(DOXYGEN_EXAMPLE_PATTERNS *)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_EXAMPLE_RECURSIVE)
|
||||
set(DOXYGEN_EXAMPLE_RECURSIVE NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_FILTER_SOURCE_FILES)
|
||||
set(DOXYGEN_FILTER_SOURCE_FILES NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_SOURCE_BROWSER)
|
||||
set(DOXYGEN_SOURCE_BROWSER NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_INLINE_SOURCES)
|
||||
set(DOXYGEN_INLINE_SOURCES NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_STRIP_CODE_COMMENTS)
|
||||
set(DOXYGEN_STRIP_CODE_COMMENTS YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_REFERENCED_BY_RELATION)
|
||||
set(DOXYGEN_REFERENCED_BY_RELATION NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_REFERENCES_RELATION)
|
||||
set(DOXYGEN_REFERENCES_RELATION NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_REFERENCES_LINK_SOURCE)
|
||||
set(DOXYGEN_REFERENCES_LINK_SOURCE YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_SOURCE_TOOLTIPS)
|
||||
set(DOXYGEN_SOURCE_TOOLTIPS YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_USE_HTAGS)
|
||||
set(DOXYGEN_USE_HTAGS NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_VERBATIM_HEADERS)
|
||||
set(DOXYGEN_VERBATIM_HEADERS YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_CLANG_ASSISTED_PARSING)
|
||||
set(DOXYGEN_CLANG_ASSISTED_PARSING NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_ALPHABETICAL_INDEX)
|
||||
set(DOXYGEN_ALPHABETICAL_INDEX YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_COLS_IN_ALPHA_INDEX)
|
||||
set(DOXYGEN_COLS_IN_ALPHA_INDEX 5)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_GENERATE_HTML)
|
||||
set(DOXYGEN_GENERATE_HTML YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_HTML_OUTPUT)
|
||||
set(DOXYGEN_HTML_OUTPUT html)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_HTML_FILE_EXTENSION)
|
||||
set(DOXYGEN_HTML_FILE_EXTENSION .html)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_HTML_COLORSTYLE_HUE)
|
||||
set(DOXYGEN_HTML_COLORSTYLE_HUE 220)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_HTML_COLORSTYLE_SAT)
|
||||
set(DOXYGEN_HTML_COLORSTYLE_SAT 100)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_HTML_COLORSTYLE_GAMMA)
|
||||
set(DOXYGEN_HTML_COLORSTYLE_GAMMA 80)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_HTML_TIMESTAMP)
|
||||
set(DOXYGEN_HTML_TIMESTAMP NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_HTML_DYNAMIC_MENUS)
|
||||
set(DOXYGEN_HTML_DYNAMIC_MENUS YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_HTML_DYNAMIC_SECTIONS)
|
||||
set(DOXYGEN_HTML_DYNAMIC_SECTIONS NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_HTML_INDEX_NUM_ENTRIES)
|
||||
set(DOXYGEN_HTML_INDEX_NUM_ENTRIES 100)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_GENERATE_DOCSET)
|
||||
set(DOXYGEN_GENERATE_DOCSET NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_DOCSET_FEEDNAME)
|
||||
set(DOXYGEN_DOCSET_FEEDNAME "Doxygen generated docs")
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_DOCSET_BUNDLE_ID)
|
||||
set(DOXYGEN_DOCSET_BUNDLE_ID org.doxygen.Project)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_DOCSET_PUBLISHER_ID)
|
||||
set(DOXYGEN_DOCSET_PUBLISHER_ID org.doxygen.Publisher)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_DOCSET_PUBLISHER_NAME)
|
||||
set(DOXYGEN_DOCSET_PUBLISHER_NAME Publisher)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_GENERATE_HTMLHELP)
|
||||
set(DOXYGEN_GENERATE_HTMLHELP NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_GENERATE_CHI)
|
||||
set(DOXYGEN_GENERATE_CHI NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_BINARY_TOC)
|
||||
set(DOXYGEN_BINARY_TOC NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_TOC_EXPAND)
|
||||
set(DOXYGEN_TOC_EXPAND NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_GENERATE_QHP)
|
||||
set(DOXYGEN_GENERATE_QHP NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_QHP_NAMESPACE)
|
||||
set(DOXYGEN_QHP_NAMESPACE org.doxygen.Project)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_QHP_VIRTUAL_FOLDER)
|
||||
set(DOXYGEN_QHP_VIRTUAL_FOLDER doc)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_GENERATE_ECLIPSEHELP)
|
||||
set(DOXYGEN_GENERATE_ECLIPSEHELP NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_ECLIPSE_DOC_ID)
|
||||
set(DOXYGEN_ECLIPSE_DOC_ID org.doxygen.Project)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_DISABLE_INDEX)
|
||||
set(DOXYGEN_DISABLE_INDEX NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_GENERATE_TREEVIEW)
|
||||
set(DOXYGEN_GENERATE_TREEVIEW NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_ENUM_VALUES_PER_LINE)
|
||||
set(DOXYGEN_ENUM_VALUES_PER_LINE 4)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_TREEVIEW_WIDTH)
|
||||
set(DOXYGEN_TREEVIEW_WIDTH 250)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_EXT_LINKS_IN_WINDOW)
|
||||
set(DOXYGEN_EXT_LINKS_IN_WINDOW NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_FORMULA_FONTSIZE)
|
||||
set(DOXYGEN_FORMULA_FONTSIZE 10)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_FORMULA_TRANSPARENT)
|
||||
set(DOXYGEN_FORMULA_TRANSPARENT YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_USE_MATHJAX)
|
||||
set(DOXYGEN_USE_MATHJAX NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_MATHJAX_FORMAT)
|
||||
set(DOXYGEN_MATHJAX_FORMAT HTML-CSS)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_MATHJAX_RELPATH)
|
||||
set(DOXYGEN_MATHJAX_RELPATH https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_SEARCHENGINE)
|
||||
set(DOXYGEN_SEARCHENGINE YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_SERVER_BASED_SEARCH)
|
||||
set(DOXYGEN_SERVER_BASED_SEARCH NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_EXTERNAL_SEARCH)
|
||||
set(DOXYGEN_EXTERNAL_SEARCH NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_SEARCHDATA_FILE)
|
||||
set(DOXYGEN_SEARCHDATA_FILE searchdata.xml)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_GENERATE_LATEX)
|
||||
set(DOXYGEN_GENERATE_LATEX YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_LATEX_OUTPUT)
|
||||
set(DOXYGEN_LATEX_OUTPUT latex)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_MAKEINDEX_CMD_NAME)
|
||||
set(DOXYGEN_MAKEINDEX_CMD_NAME makeindex)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_LATEX_MAKEINDEX_CMD)
|
||||
set(DOXYGEN_LATEX_MAKEINDEX_CMD makeindex)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_COMPACT_LATEX)
|
||||
set(DOXYGEN_COMPACT_LATEX NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_PAPER_TYPE)
|
||||
set(DOXYGEN_PAPER_TYPE a4)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_PDF_HYPERLINKS)
|
||||
set(DOXYGEN_PDF_HYPERLINKS YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_USE_PDFLATEX)
|
||||
set(DOXYGEN_USE_PDFLATEX YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_LATEX_BATCHMODE)
|
||||
set(DOXYGEN_LATEX_BATCHMODE NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_LATEX_HIDE_INDICES)
|
||||
set(DOXYGEN_LATEX_HIDE_INDICES NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_LATEX_SOURCE_CODE)
|
||||
set(DOXYGEN_LATEX_SOURCE_CODE NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_LATEX_BIB_STYLE)
|
||||
set(DOXYGEN_LATEX_BIB_STYLE plain)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_LATEX_TIMESTAMP)
|
||||
set(DOXYGEN_LATEX_TIMESTAMP NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_GENERATE_RTF)
|
||||
set(DOXYGEN_GENERATE_RTF NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_RTF_OUTPUT)
|
||||
set(DOXYGEN_RTF_OUTPUT rtf)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_COMPACT_RTF)
|
||||
set(DOXYGEN_COMPACT_RTF NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_RTF_HYPERLINKS)
|
||||
set(DOXYGEN_RTF_HYPERLINKS NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_RTF_SOURCE_CODE)
|
||||
set(DOXYGEN_RTF_SOURCE_CODE NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_GENERATE_MAN)
|
||||
set(DOXYGEN_GENERATE_MAN NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_MAN_OUTPUT)
|
||||
set(DOXYGEN_MAN_OUTPUT man)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_MAN_EXTENSION)
|
||||
set(DOXYGEN_MAN_EXTENSION .3)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_MAN_LINKS)
|
||||
set(DOXYGEN_MAN_LINKS NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_GENERATE_XML)
|
||||
set(DOXYGEN_GENERATE_XML NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_XML_OUTPUT)
|
||||
set(DOXYGEN_XML_OUTPUT xml)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_XML_PROGRAMLISTING)
|
||||
set(DOXYGEN_XML_PROGRAMLISTING YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_XML_NS_MEMB_FILE_SCOPE)
|
||||
set(DOXYGEN_XML_NS_MEMB_FILE_SCOPE NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_GENERATE_DOCBOOK)
|
||||
set(DOXYGEN_GENERATE_DOCBOOK NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_DOCBOOK_OUTPUT)
|
||||
set(DOXYGEN_DOCBOOK_OUTPUT docbook)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_DOCBOOK_PROGRAMLISTING)
|
||||
set(DOXYGEN_DOCBOOK_PROGRAMLISTING NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_GENERATE_AUTOGEN_DEF)
|
||||
set(DOXYGEN_GENERATE_AUTOGEN_DEF NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_GENERATE_PERLMOD)
|
||||
set(DOXYGEN_GENERATE_PERLMOD NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_PERLMOD_LATEX)
|
||||
set(DOXYGEN_PERLMOD_LATEX NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_PERLMOD_PRETTY)
|
||||
set(DOXYGEN_PERLMOD_PRETTY YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_ENABLE_PREPROCESSING)
|
||||
set(DOXYGEN_ENABLE_PREPROCESSING YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_MACRO_EXPANSION)
|
||||
set(DOXYGEN_MACRO_EXPANSION NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_EXPAND_ONLY_PREDEF)
|
||||
set(DOXYGEN_EXPAND_ONLY_PREDEF NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_SEARCH_INCLUDES)
|
||||
set(DOXYGEN_SEARCH_INCLUDES YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_SKIP_FUNCTION_MACROS)
|
||||
set(DOXYGEN_SKIP_FUNCTION_MACROS YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_ALLEXTERNALS)
|
||||
set(DOXYGEN_ALLEXTERNALS NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_EXTERNAL_GROUPS)
|
||||
set(DOXYGEN_EXTERNAL_GROUPS YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_EXTERNAL_PAGES)
|
||||
set(DOXYGEN_EXTERNAL_PAGES YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_CLASS_DIAGRAMS)
|
||||
set(DOXYGEN_CLASS_DIAGRAMS YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_HIDE_UNDOC_RELATIONS)
|
||||
set(DOXYGEN_HIDE_UNDOC_RELATIONS YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_HAVE_DOT)
|
||||
set(DOXYGEN_HAVE_DOT YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_DOT_NUM_THREADS)
|
||||
set(DOXYGEN_DOT_NUM_THREADS 0)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_DOT_FONTNAME)
|
||||
set(DOXYGEN_DOT_FONTNAME Helvetica)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_DOT_FONTSIZE)
|
||||
set(DOXYGEN_DOT_FONTSIZE 10)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_CLASS_GRAPH)
|
||||
set(DOXYGEN_CLASS_GRAPH YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_COLLABORATION_GRAPH)
|
||||
set(DOXYGEN_COLLABORATION_GRAPH YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_GROUP_GRAPHS)
|
||||
set(DOXYGEN_GROUP_GRAPHS YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_UML_LOOK)
|
||||
set(DOXYGEN_UML_LOOK NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_UML_LIMIT_NUM_FIELDS)
|
||||
set(DOXYGEN_UML_LIMIT_NUM_FIELDS 10)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_TEMPLATE_RELATIONS)
|
||||
set(DOXYGEN_TEMPLATE_RELATIONS NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_INCLUDE_GRAPH)
|
||||
set(DOXYGEN_INCLUDE_GRAPH YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_INCLUDED_BY_GRAPH)
|
||||
set(DOXYGEN_INCLUDED_BY_GRAPH YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_CALL_GRAPH)
|
||||
set(DOXYGEN_CALL_GRAPH NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_CALLER_GRAPH)
|
||||
set(DOXYGEN_CALLER_GRAPH NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_GRAPHICAL_HIERARCHY)
|
||||
set(DOXYGEN_GRAPHICAL_HIERARCHY YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_DIRECTORY_GRAPH)
|
||||
set(DOXYGEN_DIRECTORY_GRAPH YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_DOT_IMAGE_FORMAT)
|
||||
set(DOXYGEN_DOT_IMAGE_FORMAT png)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_INTERACTIVE_SVG)
|
||||
set(DOXYGEN_INTERACTIVE_SVG NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_DOT_GRAPH_MAX_NODES)
|
||||
set(DOXYGEN_DOT_GRAPH_MAX_NODES 50)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_MAX_DOT_GRAPH_DEPTH)
|
||||
set(DOXYGEN_MAX_DOT_GRAPH_DEPTH 0)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_DOT_TRANSPARENT)
|
||||
set(DOXYGEN_DOT_TRANSPARENT NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_DOT_MULTI_TARGETS)
|
||||
set(DOXYGEN_DOT_MULTI_TARGETS NO)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_GENERATE_LEGEND)
|
||||
set(DOXYGEN_GENERATE_LEGEND YES)
|
||||
endif()
|
||||
if(NOT DEFINED DOXYGEN_DOT_CLEANUP)
|
||||
set(DOXYGEN_DOT_CLEANUP YES)
|
||||
endif()
|
||||
@@ -14,6 +14,8 @@ add_compile_options(-Wall
|
||||
-Wno-maybe-uninitialized
|
||||
)
|
||||
|
||||
set(EXECUTABLE_OUTPUT_PATH "build")
|
||||
|
||||
# Since this is the picovga project set to the path to this directory
|
||||
set(PICOVGA_PATH ${CMAKE_CURRENT_LIST_DIR})
|
||||
# Include the picovga.cmake to add the add_picovga() macro
|
||||
|
||||
35
Index.md
Normal file
35
Index.md
Normal file
@@ -0,0 +1,35 @@
|
||||
# Introduction {#mainpage}
|
||||
|
||||
## About this Fork
|
||||
This is a fork of the [PicoVGA project](https://github.com/Panda381/PicoVGA) created by Miroslav Nemecek (Panda38@seznam.cz). It has been altered from the original to use the standard Linux-based Pico SDK.
|
||||
|
||||
This fork was created to support the Pico W hardware not supported by SDK included in the original PicoVGA project.
|
||||
|
||||
## About PicoVGA
|
||||
|
||||
The PicoVGA library enables the Raspberry Pico to output to a VGA monitor or PAL/NTSC TV with ease, making it ideal for technical and gaming applications. It provides four graphic overlay layers with transparency and supports nearly 30 frame buffer formats that can be freely combined while using limited RAM memory. The output is limited to 8 bits, which helps to save on RAM.
|
||||
|
||||
The RP2040 processor has 264 KB of RAM, which is insufficient for higher resolution image output. Therefore, it's essential to use RAM sparingly. For technical practice and retro games (as the processor cannot handle more advanced games), 8-bit graphics output in R3G3B2 format (red 3 bits, green 3 bits, and blue 2 bits) is adequate. Outputting in 16 or 24 bits is not practical since the Raspberry Pico does not have enough memory or power to handle such large amounts of data, except for short demos. The dithering technique can be used to achieve interesting display results even with 8-bit output.
|
||||
|
||||
To try out the library, the simplest approach is to take 8 resistors and connect them to outputs GP0 to GP7 and the RGB connector of a VGA or SCART TV. Then, connect HSync (CSync) to GP8, headphones to GP19, and load the demo program via USB. The library package comes with pre-compiled programs. If keyboard control is needed, a console program such as begPutty can be used, but most programs work without a keyboard.
|
||||
|
||||

|
||||
|
||||
*License terms*: The PicoVGA library source code and the PicoVGA library sample programs are freely available for further use and modifications. This does not apply to certain graphics and sounds (such as the sounds in Pac-Man) and scene definitions in Sokoban, as these are subject to third party copyrights and may be subject to different distribution terms.
|
||||
|
||||
## Features
|
||||
|
||||
* 1 base layer and 3 overlay layers with transparency, using the PIO0 module
|
||||
* 8-bit output in R3G3B2 format
|
||||
* VGA monitor output in 256x192 to 1280x960 resolution output to a TV in PAL or NTSC interlaced mode at resolutions up to 1024x576 or 848x480
|
||||
* Nearly 30 frame buffer formats: 8/4/2/1 bit graphics, tiles, text, special formats (charts)
|
||||
* Colour palettes for text modes and graphics formats with limited bit depth
|
||||
* Frame buffers of different formats can be combined together in strips and segments in the image
|
||||
* RLE image compression (suitable for drawings)
|
||||
* Transparency modes with selectable key colour
|
||||
* Hardware sprites in overlay layers
|
||||
* Layer output only to designated output pins (color planes)
|
||||
* Automatic configuration of the video mode according to the specified resolution and timing
|
||||
* Automatic overclocking of the processor according to the desired resolution
|
||||
* The library uses the 2nd core of the processor, the 1st core is reserved for the main program
|
||||
* Additional PWM audio output (not required)
|
||||
58
Readme.md
Normal file
58
Readme.md
Normal file
@@ -0,0 +1,58 @@
|
||||
# PicoVGA Library - VGA/TV display on Raspberry Pico
|
||||
|
||||
## About this Fork
|
||||
This is a fork of the [PicoVGA project](https://github.com/Panda381/PicoVGA) created by Miroslav Nemecek (Panda38@seznam.cz). It has been altered from the original to use the standard Linux-based Pico SDK.
|
||||
|
||||
This fork was created to support the Pico W hardware not supported by SDK included in the original PicoVGA project.
|
||||
|
||||
## About PicoVGA
|
||||
|
||||
The PicoVGA library enables the Raspberry Pico to output to a VGA monitor or PAL/NTSC TV with ease, making it ideal for technical and gaming applications. It provides four graphic overlay layers with transparency and supports nearly 30 frame buffer formats that can be freely combined while using limited RAM memory. The output is limited to 8 bits, which helps to save on RAM.
|
||||
|
||||
The RP2040 processor has 264 KB of RAM, which is insufficient for higher resolution image output. Therefore, it's essential to use RAM sparingly. For technical practice and retro games (as the processor cannot handle more advanced games), 8-bit graphics output in R3G3B2 format (red 3 bits, green 3 bits, and blue 2 bits) is adequate. Outputting in 16 or 24 bits is not practical since the Raspberry Pico does not have enough memory or power to handle such large amounts of data, except for short demos. The dithering technique can be used to achieve interesting display results even with 8-bit output.
|
||||
|
||||
To try out the library, the simplest approach is to take 8 resistors and connect them to outputs GP0 to GP7 and the RGB connector of a VGA or SCART TV. Then, connect HSync (CSync) to GP8, headphones to GP19, and load the demo program via USB. The library package comes with pre-compiled programs. If keyboard control is needed, a console program such as begPutty can be used, but most programs work without a keyboard.
|
||||
|
||||

|
||||
|
||||
*License terms*: The PicoVGA library source code and the PicoVGA library sample programs are freely available for further use and modifications. This does not apply to certain graphics and sounds (such as the sounds in Pac-Man) and scene definitions in Sokoban, as these are subject to third party copyrights and may be subject to different distribution terms.
|
||||
|
||||
## Features
|
||||
|
||||
* 1 base layer and 3 overlay layers with transparency, using the PIO0 module
|
||||
* 8-bit output in R3G3B2 format
|
||||
* VGA monitor output in 256x192 to 1280x960 resolution output to a TV in PAL or NTSC interlaced mode at resolutions up to 1024x576 or 848x480
|
||||
* Nearly 30 frame buffer formats: 8/4/2/1 bit graphics, tiles, text, special formats (charts)
|
||||
* Colour palettes for text modes and graphics formats with limited bit depth
|
||||
* Frame buffers of different formats can be combined together in strips and segments in the image
|
||||
* RLE image compression (suitable for drawings)
|
||||
* Transparency modes with selectable key colour
|
||||
* Hardware sprites in overlay layers
|
||||
* Layer output only to designated output pins (color planes)
|
||||
* Automatic configuration of the video mode according to the specified resolution and timing
|
||||
* Automatic overclocking of the processor according to the desired resolution
|
||||
* The library uses the 2nd core of the processor, the 1st core is reserved for the main program
|
||||
* Additional PWM audio output (not required)
|
||||
|
||||
## Documentation
|
||||
|
||||
|
||||
## Usage rules
|
||||
|
||||
Generating images on the Raspberry Pico is limited by the processor's utilization, and other processor activities must be given lower priority. When using the PicoVGA library, there are several principles to keep in mind:
|
||||
|
||||
The library always runs on the second core of the processor while the program runs on the first core. Rendering the image can overload the CPU core and make it unusable for other purposes. However, separating core functions has the advantage of preventing mutual interference between cores, which eliminates the need for mutual locking. The first core simply writes to the frame buffers, while the second core displays the contents of the frame buffers without any communication between them. This makes the overall work easier and faster.
|
||||
|
||||
If the second core is not very busy (e.g. when displaying 8-bit graphics that are simply transferred using DMA transfer), it can also be used for the main program work. However, some limitations should be taken into account - the program in the second core should not use interrupts (it would interfere with the rendering function), the interpolation unit should be used with caution (the rendering function does not save its state) and it must not disable interrupts.
|
||||
|
||||
An important rule is that all data to be accessed by the PicoVGA library must be stored in RAM. External flash memory is slow and cannot be used for rendering functions. For example, if an image in the flash is to be displayed, it must first be copied to a buffer in RAM, and then a pointer to the RAM copy of the image should be passed to the rendering function. If a pointer to the image in flash were passed to it, slow access to flash would cause video dropouts. In addition to images, this also applies to fonts and tile patterns, for example.
|
||||
|
||||
The limited rendering speed must be taken into account when scheduling screen layout. Some modes render very fast (e.g. 8-bit graphics are just transferred from the frame buffer using DMA) and some modes are very rendering intensive - e.g. rendering sprites in slow mode. When using demanding rendering, some video lines may not render fast enough in the required time and the video image will break (drop out of sync). In such cases, it is necessary to use another mode, or to reduce the rendered area (add other modes, faster ones - e.g. add tile controls on the sides of the screen), reduce the screen resolution or increase the CPU clock speed. Video lines are rendered separately and therefore it is always just content on one video line about, video lines do not affect each other. For example, you can test the speed of sprite rendering by placing all the sprites horizontally next to each other (the most challenging case) and check if the video synchronization fails.
|
||||
|
||||
Care must also be taken when using DMA transfer. DMA is used to transfer data to the PIO. Although the transfer uses a FIFO cache, using a different DMA channel may cause the render DMA channel to be delayed and thus cause the video to drop out. A DMA overload can occur, for example, when a large block of data in RAM is transferred quickly. However, the biggest load is the DMA transfer of data from flash memory. In this case, the DMA channel waits for data to be read from flash via QSPI and thus blocks the DMA render channel.
|
||||
|
||||
The CPU clock frequency must also be subordinated to the image generator. Before initializing the video node, the library calculates the required system clock frequency so that the timing matches the requirements and the processor speed is sufficient for the required image resolution. It is a good idea to initially print out the calculated clock frequency for checking on the console. It is possible to prohibit the library from changing the system clock, or to prescribe only a certain range, in which case some modes may be unreachable (or the video image may break up).
|
||||
|
||||
Image buffers must be aligned to 4 bytes (32-bit CPU word) and image segments must be horizontally aligned to 4 pixels - this refers to the horizontal position of the segment, its width, alignment (wrapx) and offset (offx). Alignment does not apply to the vertical direction. This restriction is necessary because the image information is transferred to the PIO controller using a 32-bit DMA transfer, and this must be aligned to a 32-bit word. One 32-bit word contains 4 pixels (1 pixel has 8 bits), so the horizontal data in the image must also be aligned to 4 pixels. So you cannot do fine horizontal scrolling of the image in 1 pixel increments (the restriction does not apply to vertical scrolling), but only in 4 pixel increments. The exception to this is slow sprites, which are software rendered to the video line and can therefore be scrolled in 1 pixel increments. Similarly, the restriction does not apply to software rendering to framebuffer (e.g. rendering an image to video memory can be done to any coordinate).
|
||||
|
||||
cmake . -Bbuild -DCMAKE_BUILD_TYPE=Debug
|
||||
2405
doxygen-awesome.css
Normal file
2405
doxygen-awesome.css
Normal file
File diff suppressed because it is too large
Load Diff
2581
doxygen.cfg
Normal file
2581
doxygen.cfg
Normal file
File diff suppressed because it is too large
Load Diff
@@ -12,6 +12,9 @@
|
||||
#ifndef _PICOVGA_H
|
||||
#define _PICOVGA_H
|
||||
|
||||
//!@addtogroup VideoInit Video Initialization
|
||||
//!@addtogroup VideoMode Video mode configuration
|
||||
//!@addtogroup Screen Screen layout
|
||||
|
||||
typedef signed char s8;
|
||||
typedef unsigned char u8;
|
||||
|
||||
@@ -1058,9 +1058,7 @@ void VgaCore()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Starts the VGA core on core1
|
||||
*/
|
||||
// Starts the VGA core on core1
|
||||
void StartVgaCore()
|
||||
{
|
||||
// stop VGA core
|
||||
|
||||
49
src/vga.h
49
src/vga.h
@@ -114,22 +114,59 @@ void ScanlineTypePrint(const u8* scan, int lines);
|
||||
// - All layer modes must use same layer program (LAYERMODE_BASE = overlapped layers are OFF)
|
||||
void VgaInit(const sVmode* vmode); //, u8 layer1mode=LAYERMODE_BASE, u8 layer2mode=LAYERMODE_BASE, u8 layer3mode=LAYERMODE_BASE);
|
||||
|
||||
// Start the VGA processing on core1
|
||||
//!@addtogroup VideoInit Video Initialization
|
||||
//!@brief Functions for initialzing the library
|
||||
//!@{
|
||||
|
||||
/**
|
||||
* @brief Start the VGA processing on core1
|
||||
* @details The first function that should be called in the project. Starts the second processor core with the PicoVGA library.
|
||||
*/
|
||||
void StartVgaCore();
|
||||
|
||||
// request to initialize VGA videomode, NULL=only stop driver (wait to initialization completes)
|
||||
/**
|
||||
* @brief Request to initialize VGA videomode
|
||||
* @details This function passes the library a pointer to the format descriptor generated by the VgaCfg function.
|
||||
* This function does not actually initialize the video mode, it just passes the pointer to the library in the 2nd
|
||||
* processor core and then waits for confirmation that the initialization is complete. If the video mode needs to
|
||||
* be changed (this refers to changing the timing of the video signal and changing the type of overlay layers), it
|
||||
* is necessary to first stop the video generation by calling the VgaInitReq function with the NULL parameter, and
|
||||
* only then call the function with the new video mode setting.
|
||||
* @param vmode Video format description generated by VgaCfg or NULL to stop driver.
|
||||
*/
|
||||
void VgaInitReq(const sVmode* vmode);
|
||||
|
||||
// execute core 1 remote function
|
||||
//!@}
|
||||
|
||||
//!@addtogroup Core Second core
|
||||
//!@brief Execute functions on the second core
|
||||
//!@details If the 2nd core is not too busy generating the video, it can be passed a request to perform the function.
|
||||
//! This does not affect the video generation, it may just happen that the requested function runs slowly when the
|
||||
//! generator is heavily loaded. The function cannot use interrupts, cannot disable interrupts, and may be restricted
|
||||
//! from using the hardware interpolator (video interrupt does not save its state).
|
||||
//!@{
|
||||
|
||||
/**
|
||||
* @brief Execute remote function on second core
|
||||
* @param fnc Function to execute on the second core
|
||||
*/
|
||||
void Core1Exec(void (*fnc)());
|
||||
|
||||
// check if core 1 is busy (executing remote function)
|
||||
/**
|
||||
* @brief Check if core 1 is busy executing remote function
|
||||
*/
|
||||
Bool Core1Busy();
|
||||
|
||||
// wait if core 1 is busy (executing remote function)
|
||||
/**
|
||||
* @brief Wait for core 1 finish executing remote function
|
||||
*/
|
||||
void Core1Wait();
|
||||
|
||||
// wait for VSync scanline
|
||||
//!@}
|
||||
|
||||
/**
|
||||
* @brief Wait for VSync scanline
|
||||
*/
|
||||
void WaitVSync();
|
||||
|
||||
#endif // _VGA_H
|
||||
|
||||
443
src/vga_screen.h
443
src/vga_screen.h
@@ -8,201 +8,368 @@
|
||||
#ifndef _VGA_SCREEN_H
|
||||
#define _VGA_SCREEN_H
|
||||
|
||||
// video segment (on change update SSEGM_* in define.h)
|
||||
//!@addtogroup Screen Screen layout
|
||||
//!@brief Defining the layout of the display
|
||||
//!@details When displaying screen image, the default pointer is pScreen for the library. It points to the sScreen structure that
|
||||
//!describes the contents of the display. The Raspberry Pico has a limited RAM size and cannot accommodate a high resolution image. Therefore, the image must be composed of smaller segments to minimize the memory-intensive parts.
|
||||
//!@note The following descriptions of the image format only apply to the base image layer 0. It is the only one that can contain
|
||||
//!segments in different formats. Overlay layers 1 through 3 are independent of the base layer format, sharing only the total
|
||||
//!screen area with the base layer but using their own image format.
|
||||
//!@{
|
||||
|
||||
//! Video segment (on change update SSEGM_* in define.h)
|
||||
typedef struct {
|
||||
u16 width; // SSEGM_WIDTH width of this video segment in pixels (must be multiple of 4, 0=inactive segment)
|
||||
u16 wb; // SSEGM_WB pitch - number of bytes between lines
|
||||
s16 offx; // SSEGM_OFFX display offset at X direction (must be multiple of 4)
|
||||
s16 offy; // SSEGM_OFFY display offset at Y direction
|
||||
u16 wrapx; // SSEGM_WRAPX wrap width in X direction (number of pixels, must be multiply of 4 and > 0)
|
||||
// text modes: wrapx must be multiply of 8
|
||||
u16 wrapy; // SSEGM_WRAPY wrap width in Y direction (number of lines, cannot be 0)
|
||||
const void* data; // SSEGM_DATA pointer to video buffer with image data
|
||||
u8 form; // SSEGM_FORM graphics format GF_*
|
||||
bool dbly; // SSEGM_DBLY double Y (2 scanlines per 1 image line)
|
||||
u16 par3; // SSEGM_PAR3 parameter 3
|
||||
u32 par; // SSEGM_PAR parameter 1
|
||||
u32 par2; // SSEGM_PAR2 parameter 2
|
||||
u16 width; //!< SSEGM_WIDTH width of this video segment in pixels (must be multiple of 4, 0=inactive segment)
|
||||
u16 wb; //!< SSEGM_WB pitch - number of bytes between lines
|
||||
s16 offx; //!< SSEGM_OFFX display offset at X direction (must be multiple of 4)
|
||||
s16 offy; //!< SSEGM_OFFY display offset at Y direction
|
||||
u16 wrapx; //!< SSEGM_WRAPX wrap width in X direction (number of pixels, must be multiply of 4 and > 0)
|
||||
//!< text modes: wrapx must be multiply of 8
|
||||
u16 wrapy; //!< SSEGM_WRAPY wrap width in Y direction (number of lines, cannot be 0)
|
||||
const void* data; //!< SSEGM_DATA pointer to video buffer with image data
|
||||
u8 form; //!< SSEGM_FORM graphics format GF_*
|
||||
bool dbly; //!< SSEGM_DBLY double Y (2 scanlines per 1 image line)
|
||||
u16 par3; //!< SSEGM_PAR3 parameter 3
|
||||
u32 par; //!< SSEGM_PAR parameter 1
|
||||
u32 par2; //!< SSEGM_PAR2 parameter 2
|
||||
} sSegm;
|
||||
|
||||
// video strip (on change update SSTRIP_* in define.h)
|
||||
//! Video strip (on change update SSTRIP_* in define.h)
|
||||
typedef struct {
|
||||
u16 height; // SSTRIP_HEIGHT height of this strip in number of scanlines
|
||||
u16 num; // SSTRIP_NUM number of video segments
|
||||
sSegm seg[SEGMAX]; // SSTRIP_SEG list of video segments
|
||||
u16 height; //!< SSTRIP_HEIGHT height of this strip in number of scanlines
|
||||
u16 num; //!< SSTRIP_NUM number of video segments
|
||||
sSegm seg[SEGMAX]; //!< SSTRIP_SEG list of video segments
|
||||
} sStrip;
|
||||
|
||||
// video screen (on change update SSCREEN_* in define.h)
|
||||
//! Video screen (on change update SSCREEN_* in define.h)
|
||||
typedef struct {
|
||||
u16 num; // SSCREEN_NUM number of video strips
|
||||
u16 backup; // SSCREEN_BACKUP backup number of video strips during display OFF
|
||||
sStrip strip[STRIPMAX]; // SSCREEN_STRIP list of video strips
|
||||
u16 num; //!< SSCREEN_NUM number of video strips
|
||||
u16 backup; //!< SSCREEN_BACKUP backup number of video strips during display OFF
|
||||
sStrip strip[STRIPMAX]; //!< SSCREEN_STRIP list of video strips
|
||||
} sScreen;
|
||||
|
||||
// current video screen
|
||||
extern sScreen Screen; // default video screen
|
||||
extern sScreen* pScreen; // pointer to current video screen
|
||||
extern sScreen Screen; //!< Default video screen
|
||||
extern sScreen* pScreen; //!< Pointer to current video screen
|
||||
|
||||
// clear screen (set 0 strips, does not modify sprites)
|
||||
/**
|
||||
* @brief Clear screen (set 0 strips, does not modify sprites)
|
||||
* @details Resets the display handler structures, clearing the display. At a minimum, this function should be called
|
||||
* before initializing the videmode. It initializes the display content descriptor structure pointed to by pScreen
|
||||
* (usually the default structure Screen of the library) by setting the number of segments to 0. The screen will be black
|
||||
* until we fill it with content descriptors
|
||||
* @param s Pointer to screen to clear
|
||||
*/
|
||||
void ScreenClear(sScreen* s);
|
||||
|
||||
// add empty strip to the screen (returns pointer to the strip)
|
||||
/**
|
||||
* @brief Add empty strip to the screen
|
||||
* @details This function adds a new horizontal bar of the specified number of video lines to the end of the screen definition.
|
||||
* The maximum number of stripes is specified by the STRIPMAX constant (8 by default) in the vga_config.h file. Without added
|
||||
* segments, the bar is empty (black).
|
||||
* @param s The screen to add strip
|
||||
* @param height The number of video lines in the strip
|
||||
* @returns Pointer to the new strip
|
||||
*/
|
||||
sStrip* ScreenAddStrip(sScreen* s, int height);
|
||||
|
||||
// add empty segment to video strip (returns pointer to the segment and initialises is to defaults)
|
||||
/**
|
||||
* @brief Add empty segment to video strip; returns pointer to the segment and initialises it to defaults
|
||||
* @details This function adds a new image segment of the specified width to the end of the strip. The segment will contain
|
||||
* one image format. For the vast majority of formats, the width must be a multiple of 4 (a multiple of 4 pixels).
|
||||
* @param strip The strip to add the segment to
|
||||
* @param width The width of the segment in pixels (for many formats must be a multiple of 4)
|
||||
* @returns Pointer to new segment initialized to defaults
|
||||
*/
|
||||
sSegm* ScreenAddSegm(sStrip* strip, int width);
|
||||
|
||||
// set video segment to simple color format GF_COLOR
|
||||
// col1 = color pattern 4-pixels even line (use macro MULTICOL)
|
||||
// col2 = color pattern 4-pixels odd line (use macro MULTICOL)
|
||||
/**
|
||||
* @brief Set video segment to simple color format GF_COLOR
|
||||
* @param segm Segment to configure
|
||||
* @param col1 Color pattern 4-pixels even line (use macro MULTICOL)
|
||||
* @param col2 Color pattern 4-pixels odd line (use macro MULTICOL)
|
||||
*/
|
||||
void ScreenSegmColor(sSegm* segm, u32 col1, u32 col2);
|
||||
|
||||
// set video segment to gradient with 1 line
|
||||
// data = pointer to data buffer with gradient
|
||||
// wb = pitch - length of buffer
|
||||
// To scroll gradient, set virtual dimension wrapx, then shift offx
|
||||
/**
|
||||
* @brief Set video segment to gradient with 1 line
|
||||
* @details The segment will be filled with a color gradient (GF_GRAD1). The gradient is 1 line of 8-bit pixels.
|
||||
* @note The gradient can be scrolled horizontally with the offx parameter.
|
||||
* @param segm Segment to configure
|
||||
* @param data Pointer to data buffer with gradient
|
||||
* @param wb Length of buffer
|
||||
*/
|
||||
void ScreenSegmGrad1(sSegm* segm, const void* data, int wb);
|
||||
|
||||
// set video segment to gradient with 2 lines
|
||||
// data = pointer to data buffer with gradient
|
||||
// wb = pitch - lenght of buffer
|
||||
// To scroll gradient, set virtual dimension wrapx, then shift offx
|
||||
/**
|
||||
* @brief Set video segment to gradient with 2 lines
|
||||
* @details Gradient with 2 lines, even and odd (GF_GRAD2).
|
||||
* @note To scroll gradient, set virtual dimension wrapx, then shift offx
|
||||
* @param segm Segment to configure
|
||||
* @param data Pointer to data buffer with gradient
|
||||
* @param wb Length of buffer
|
||||
*/
|
||||
void ScreenSegmGrad2(sSegm* segm, const void* data, int wb);
|
||||
|
||||
// set video segment to native 8-bit graphics (R3G3B2)
|
||||
// data = pointer to data buffer
|
||||
// wb = pitch - number of bytes between lines
|
||||
// To scroll image, set virtual dimension wrapx and wrapy, then shift offx and offy.
|
||||
/**
|
||||
* @brief Set video segment to native 8-bit graphics (R3G3B2)
|
||||
* @details 8-bit graphics 256 colors (GF_GRAPH8). Each pixel is 1 byte. This mode is one of the fastest, the data is simply sent
|
||||
* from the frame buffer to the PIO controller using a DMA transfer. However, it is also one of the most memory intensive.
|
||||
* Really, the memory can hold a maximum image resolution of 512x400 pixels (EGA video mode).
|
||||
* @note To scroll image, set virtual dimension wrapx and wrapy, then shift offx and offy.
|
||||
* @param segm Segment to configure
|
||||
* @param data Pointer to data buffer
|
||||
* @param wb Line length in bytes
|
||||
*/
|
||||
void ScreenSegmGraph8(sSegm* segm, const void* data, int wb);
|
||||
|
||||
// generate 16-color palette translation table
|
||||
// trans = pointer to destination palette translation table (u16 trans[256])
|
||||
// pal = pointer to source palette of 16 colors (u8 pal[16])
|
||||
/**
|
||||
* @brief Generate 16-color palette translation table
|
||||
* @details Generates a palette translation table for the @link ScreenSegmGraph4() function. The translation table is 256 entries of
|
||||
* 16 bits, so it takes 512 bytes in memory. The table is used during display for internal purposes, must be aligned to 4 bytes,
|
||||
* and must be available for the entire time the segment is displayed. The input to the function is the palette table, which is
|
||||
* 16 color entries of 1 byte.
|
||||
* @param trans Pointer to destination palette translation table (u16 trans[256])
|
||||
* @param pal Pointer to source palette of 16 colors (u8 pal[16])
|
||||
*/
|
||||
void GenPal16Trans(u16* trans, const u8* pal);
|
||||
|
||||
// set video segment to 4-bit palette graphics
|
||||
// data = pointer to data buffer
|
||||
// trans = pointer to 16-color palette translation table (generated with GenPal16Trans function)
|
||||
// wb = pitch - number of bytes between lines
|
||||
// To scroll image, set virtual dimension wrapx and wrapy, then shift offx and offy.
|
||||
/**
|
||||
* @brief Set video segment to 4-bit palette graphics
|
||||
* @details 4-bit palette graphics 16 colors (GF_GRAPH4). There are 2 pixels in 1 byte (the first pixel is in the higher 4 bits
|
||||
* of the byte). The function requires a palette translation table.
|
||||
* @note To scroll image, set virtual dimension wrapx and wrapy, then shift offx and offy.
|
||||
* @param segm Segment to configure
|
||||
* @param data Pointer to data buffer
|
||||
* @param trans Pointer to 16-color palette translation table (generated with GenPal16Trans function)
|
||||
* @param wb The line length in bytes
|
||||
*/
|
||||
void ScreenSegmGraph4(sSegm* segm, const void* data, const void* trans, int wb);
|
||||
|
||||
// generate palette 4 translation table for function ScreenSegmGraph2
|
||||
// trans = pointer to destination palette translation table (u32 trans[256])
|
||||
// pal = pointer to source palette of 4 colors (u8 pal[4])
|
||||
/**
|
||||
* @brief Generate palette 4 translation table for function
|
||||
* @details Generate a palette translation table for the @link ScreenSegmGraph2() function. The translation table is 256 entries with
|
||||
* a size of 32 bits, so it takes 1024 bytes in memory. The table is used during display for internal purposes, must be aligned
|
||||
* to 4 bytes, and must be available for the entire time the segment is displayed. The input to the function is the palette table,
|
||||
* which is 4 color entries of 1 byte.
|
||||
* @param trans Pointer to destination palette translation table (u32 trans[256])
|
||||
* @param pal Pointer to source palette of 4 colors (u8 pal[4])
|
||||
*/
|
||||
void GenPal4Trans(u32* trans, const u8* pal);
|
||||
|
||||
// set video segment to 2-bit palette graphics
|
||||
// data = pointer to data buffer
|
||||
// trans = pointer to 4-color palette translation table (generated with GenPal4Trans function)
|
||||
// wb = pitch - number of bytes between lines
|
||||
// To scroll image, set virtual dimension wrapx and wrapy, then shift offx and offy.
|
||||
/**
|
||||
* @brief Set video segment to 2-bit palette graphics
|
||||
* @details
|
||||
* @note To scroll image, set virtual dimension wrapx and wrapy, then shift offx and offy.
|
||||
* @param segm Segment to configure
|
||||
* @param data Pointer to data buffer
|
||||
* @param trans Pointer to 4-color palette translation table (generated with GenPal4Trans function)
|
||||
* @param wb The line length in bytes
|
||||
*/
|
||||
void ScreenSegmGraph2(sSegm* segm, const void* data, const void* trans, int wb);
|
||||
|
||||
// set video segment to 1-bit palette graphics
|
||||
// data = pointer to data buffer
|
||||
// bg = background color
|
||||
// fg = foreground color
|
||||
// wb = pitch - number of bytes between lines
|
||||
// To scroll image, set virtual dimension wrapx and wrapy, then shift offx and offy.
|
||||
/**
|
||||
* @brief Set video segment to 1-bit palette graphics
|
||||
* @details 1-bit mono graphics 2 colors (GF_GRAPH1). There are 8 pixels in 1 byte (first pixel in the highest bit). The function requires background color
|
||||
* and foreground color.
|
||||
* @note To scroll image, set virtual dimension wrapx and wrapy, then shift offx and offy.
|
||||
* @param segm Segment to configure
|
||||
* @param data Pointer to data buffer
|
||||
* @param bg Background color
|
||||
* @param fg Foreground color
|
||||
* @param wb The line length in bytes
|
||||
*/
|
||||
void ScreenSegmGraph1(sSegm* segm, const void* data, u8 bg, u8 fg, int wb);
|
||||
|
||||
// set video segment to 8-pixel mono text
|
||||
// data = pointer to text buffer
|
||||
// font = pointer to 1-bit font of 256 characters of width 8 (total width of image 2048 pixels)
|
||||
// fontheight = font height
|
||||
// bg = background color
|
||||
// fg = foreground color
|
||||
// wb = pitch - number of bytes between text lines
|
||||
/**
|
||||
* @brief Set video segment to 8-pixel mono text
|
||||
* @details Mono text (GF_MTEXT). For mono text, the foreground and background color is valid for the entire segment.
|
||||
* In the display memory there are single characters, 1 byte is one character.
|
||||
* @param segm Segment to configure
|
||||
* @param data Pointer to text buffer
|
||||
* @param font Pointer to 1-bit font of 256 characters of width 8 (total width of image 2048 pixels)
|
||||
* @param fontheight Font height
|
||||
* @param bg Background color
|
||||
* @param fg Foregound color
|
||||
* @param wb The line length in bytes
|
||||
*/
|
||||
void ScreenSegmMText(sSegm* segm, const void* data, const void* font, u16 fontheight, u8 bg, u8 fg, int wb);
|
||||
|
||||
// set video segment to 8-pixel attribute text
|
||||
// data = pointer to text buffer (character + 2x4 bit attributes)
|
||||
// font = pointer to 1-bit font of 256 characters of width 8 (total width of image 2048 pixels)
|
||||
// fontheight = font height
|
||||
// pal = pointer to palette of 16 colors
|
||||
// wb = pitch - number of bytes between text lines
|
||||
/**
|
||||
* @brief Set video segment to 8-pixel attribute text
|
||||
* @details Attribute text (GF_ATEXT). In attribute text, each character is a pair of bytes. The first byte is the ASCII
|
||||
* value of the character, the second byte is the color attribute. The higher 4 bits of the attribute represent the background
|
||||
* color, the lower 4 bits of the attribute represent the foreground color. The colors are translated from a palette table of
|
||||
* 16 colors.
|
||||
* @param segm Segment to configure
|
||||
* @param data Pointer to text buffer (character + 2x4 bit attributes)
|
||||
* @param font Pointer to 1-bit font of 256 characters of width 8 (total width of image 2048 pixels)
|
||||
* @param fontheight Font height
|
||||
* @param pal Pointer to palette of 16 colors
|
||||
* @param wb The line length in bytes
|
||||
*/
|
||||
void ScreenSegmAText(sSegm* segm, const void* data, const void* font, u16 fontheight, const void* pal, int wb);
|
||||
|
||||
// set video segment to 8-pixel foreground color text
|
||||
// data = pointer to text buffer (character + foreground color)
|
||||
// font = pointer to 1-bit font of 256 characters of width 8 (total width of image 2048 pixels)
|
||||
// fontheight = font height
|
||||
// bg = background color
|
||||
// wb = pitch - number of bytes between text lines
|
||||
/**
|
||||
* @brief Set video segment to 8-pixel foreground color text
|
||||
* @details Text with foreground color (GF_FTEXT). In text with foreground, each character is represented by a pair of bytes.
|
||||
* The first byte is ASCII value of the character, the second byte is foreground color. The background color is common, specified
|
||||
* by the 'bg' parameter.
|
||||
* @note Library's default fonts include an inverted lower half of the font in the upper half (bit 7 set) - this can provide a
|
||||
* character with an optional background color.
|
||||
* @param segm Segment to configure
|
||||
* @param data Pointer to text buffer (character + foreground color)
|
||||
* @param font Pointer to 1-bit font of 256 characters of width 8 (total width of image 2048 pixels)
|
||||
* @param fontheight Font height
|
||||
* @param bg Background color
|
||||
* @param wb The line length in bytes
|
||||
*/
|
||||
void ScreenSegmFText(sSegm* segm, const void* data, const void* font, u16 fontheight, u8 bg, int wb);
|
||||
|
||||
// set video segment to 8-pixel color text
|
||||
// data = pointer to text buffer (character + background color + foreground color)
|
||||
// font = pointer to 1-bit font of 256 characters of width 8 (total width of image 2048 pixels)
|
||||
// fontheight = font height
|
||||
// wb = pitch - number of bytes between text lines
|
||||
/**
|
||||
* @brief Set video segment to 8-pixel color text
|
||||
* @details Text with color (GF_CTEXT). For text with color, each character occupies 3 bytes. The first byte is the ASCII value
|
||||
* of the character, the second byte is the background color, and the third byte is the foreground color.
|
||||
* @param segm Segment to configure
|
||||
* @param data Pointer to text buffer (character + background color + foreground color)
|
||||
* @param font Pointer to 1-bit font of 256 characters of width 8 (total width of image 2048 pixels)
|
||||
* @param fontheight Font height
|
||||
* @param wb The line length in bytes
|
||||
*/
|
||||
void ScreenSegmCText(sSegm* segm, const void* data, const void* font, u16 fontheight, int wb);
|
||||
|
||||
// set video segment to 8-pixel gradient color text
|
||||
// data = pointer to text buffer (character + foreground color)
|
||||
// font = pointer to 1-bit font of 256 characters of width 8 (total width of image 2048 pixels)
|
||||
// fontheight = font height
|
||||
// bg = background color
|
||||
// grad = pointer to array of gradient colors
|
||||
// wb = pitch - number of bytes between text lines
|
||||
/**
|
||||
* @brief Set video segment to 8-pixel gradient color text
|
||||
* @details Text with gradient (GF_GTEXT). In this mode, each character is represented by 1 byte in memory and the background
|
||||
* color is specified by the 'bg' parameter, similar to the mono text. Instead of the foreground color, there is a parameter
|
||||
* 'grad', which is a pointer to a color gradient of length equal to the graphic length of the line of text (e.g. for 40
|
||||
* characters, the gradient is 320 bytes). The foreground color for each pixel of the character is taken from the gradient table.
|
||||
* @param segm Segment to configure
|
||||
* @param data Pointer to text buffer (character + foreground color)
|
||||
* @param font Pointer to 1-bit font of 256 characters of width 8 (total width of image 2048 pixels)
|
||||
* @param fontheight Font height
|
||||
* @param bg Background color
|
||||
* @param grad Pointer to array of gradient colors
|
||||
* @param wb The line length in bytes
|
||||
*/
|
||||
void ScreenSegmGText(sSegm* segm, const void* data, const void* font, u8 fontheight, u8 bg, const void* grad, int wb);
|
||||
|
||||
// set video segment to 8-pixel double gradient color text
|
||||
// data = pointer to text buffer (character + foreground color)
|
||||
// font = pointer to 1-bit font of 256 characters of width 8 (total width of image 2048 pixels)
|
||||
// fontheight = font height
|
||||
// bg = background color
|
||||
// grad = pointer to array of gradient colors
|
||||
// wb = pitch - number of bytes between text lines
|
||||
/**
|
||||
* @brief Set video segment to 8-pixel double gradient color text
|
||||
* @details Double gradient text (GF_DTEXT). The function is identical to the previous function, except that each character pixel
|
||||
* is generated as 2 image pixels. Thus, the character has twice the width. It is the only text mode that allows displaying
|
||||
* characters with double width. The color gradient works similarly here, but 1 byte of the gradient represents 1 pixel of the
|
||||
* character (as in the previous function), not 1 pixel displayed. Thus a line of 40 characters again requires a gradient of
|
||||
* 320 bytes.
|
||||
* @param segm Segment to configure
|
||||
* @param data Pointer to text buffer (character + foreground color)
|
||||
* @param font Pointer to 1-bit font of 256 characters of width 8 (total width of image 2048 pixels)
|
||||
* @param fontheight Font height
|
||||
* @param bg Background color
|
||||
* @param grad Pointer to array of gradient colors
|
||||
* @param wb The line length in bytes
|
||||
*/
|
||||
void ScreenSegmDText(sSegm* segm, const void* data, const void* font, u8 fontheight, u8 bg, const void* grad, int wb);
|
||||
|
||||
// set video segment to tiles
|
||||
// data = pointer to tile map buffer (with tile indices)
|
||||
// tiles = pointer to 1 column of tiles, 1 pixel = 8 bits
|
||||
// w = tile width (must be multiple of 4)
|
||||
// h = tile height
|
||||
// wb = pitch - number of bytes between tile map rows
|
||||
/**
|
||||
* @brief Set video segment to tiles
|
||||
* @details Tiles in column (GF_TILE). Tiles are image segments of the specified size (tile width and height are 'w' and 'h').
|
||||
* The tile patterns are arranged in a single image. In this case, into a column of width 1 tile. The 'tiles' parameter is a
|
||||
* pointer to the image of the tile column. The 'data' parameter is a pointer to an array of bytes, where each byte represents
|
||||
* number of displayed tile. Thus, there can be a maximum of 256 tiles. The 'wb' parameter refers to the length of the row of
|
||||
* the index array (not the length of the tile image). The width of a tile must be a multiple of 4, at least 8. Tiles allow
|
||||
* efficient display of image information by allowing the image to repeat. Thus, high image resolution can be achieved with
|
||||
* low memory requirements.
|
||||
* @param segm Segment to configure
|
||||
* @param data Pointer to tile map buffer (with tile indices)
|
||||
* @param tiles Pointer to 1 column of tiles, 1 pixel = 8 bits
|
||||
* @param w tile width (must be multiple of 4)
|
||||
* @param h tile height
|
||||
* @param wb Number of bytes between tile map rows
|
||||
*/
|
||||
void ScreenSegmTile(sSegm* segm, const void* data, const void* tiles, int w, int h, int wb);
|
||||
|
||||
// set video segment to alternate tiles
|
||||
// data = pointer to tile map buffer (with tile indices)
|
||||
// tiles = pointer to 1 row of tiles, 1 pixel = 8 bits
|
||||
// w = tile width (must be multiple of 4)
|
||||
// h = tile height
|
||||
// tilewb = tile width bytes (usually tile width * number of tiles)
|
||||
// wb = pitch - number of bytes between tile map rows
|
||||
/**
|
||||
* @brief Set video segment to alternate tiles
|
||||
* @details Tiles in a row (GF_TILE2). This function is an alternative to @link ScreenSegmTile(), except that the tile patterns
|
||||
* are arranged in a single row in the image. This may be more convenient when creating a tile image, however, you must
|
||||
* additionally specify the parameter 'tilewb' representing the line length of the tile image.
|
||||
* Usually tilewb = number of tiles * tile width.
|
||||
* @param segm Segment to configure
|
||||
* @param data Pointer to tile map buffer (with tile indices)
|
||||
* @param tiles Pointer to 1 row of tiles, 1 pixel = 8 bits
|
||||
* @param w tile width (must be multiple of 4)
|
||||
* @param h tile height
|
||||
* @param tilewb Tile width bytes (usually tile width * number of tiles)
|
||||
* @param wb Number of bytes between tile map rows
|
||||
*/
|
||||
void ScreenSegmTile2(sSegm* segm, const void* data, const void* tiles, int w, int h, int tilewb, int wb);
|
||||
|
||||
// set video segment to level graph GF_LEVEL
|
||||
// data = pointer to buffer with line samples 0..255
|
||||
// zero = Y zero level
|
||||
// bg = background color
|
||||
// fg = foreground color
|
||||
/**
|
||||
* @brief Set video segment to level graph GF_LEVEL
|
||||
* @details Level display segment (GF_LEVEL). This segment is used to display graphs. The input is an array of 'data' bytes of
|
||||
* length corresponding to the width of the array in pixels. The byte value represents the height of the graph at the given X
|
||||
* coordinate. The display will show a foreground or background color depending on whether the displayed pixel lies above or
|
||||
* below the value from the data array. The 'zero' parameter specifies the height of the reference zero. Zero does not imply
|
||||
* negative numbers in the data, the numbers are still given as unsigned (with zero at the bottom). Starting from reference zero,
|
||||
* the background and foreground colour is swapped. This results in the graph looking visually symmetrical around the reference
|
||||
* zero. You can see the appearance of the segment in the Oscilloscope sample program (lower curve).
|
||||
* @param segm Segment to configure
|
||||
* @param data Pointer to buffer with line samples 0..255
|
||||
* @param zero Y zero level
|
||||
* @param bg Background color
|
||||
* @param fg Foregound color
|
||||
*/
|
||||
void ScreenSegmLevel(sSegm* segm, const void* data, u8 zero, u8 bg, u8 fg);
|
||||
|
||||
// set video segment to leve gradient graph GF_LEVELGRAD
|
||||
// data = pointer to buffer with values 0..255 of 4-pixels in rows
|
||||
// sample1 = scanline sample < data
|
||||
// sample2 = scanline sample >= data
|
||||
/**
|
||||
* @brief Set video segment to leve gradient graph GF_LEVELGRAD
|
||||
* @details Level display segment with gradient (GF_LEVELGRAD). This segment is used to display graphs, similar to the previous
|
||||
* function. It differs in that the color is given as a vertical gradient with a height corresponding to the height of the segment.
|
||||
* If a pixel lies below the data value, the color from the first gradient is used. Otherwise, the second gradient is used.
|
||||
* An example use case can be seen in the Level Meter sample program, to display the spectrum.
|
||||
* @param segm Segment to configure
|
||||
* @param data Pointer to buffer with values 0..255 of 4-pixels in rows
|
||||
* @param sample1 Scanline sample < data
|
||||
* @param sample2 Scanline sample >= data
|
||||
*/
|
||||
void ScreenSegmLevelGrad(sSegm* segm, const void* data, const void* sample1, const void* sample2);
|
||||
|
||||
// set video segment to oscilloscope 1-pixel graph GF_OSCIL
|
||||
// data = pointer to buffer with line samples 0..255
|
||||
// bg = background color
|
||||
// fg = foreground color
|
||||
// pixh = height of pixels - 1
|
||||
/**
|
||||
* @brief Set video segment to oscilloscope 1-pixel graph GF_OSCIL
|
||||
* @details Oscilloscope waveform display segment (GF_OSCIL). The segment is similar in function to the level display segment.
|
||||
* It differs in that the curve is displayed as a line of 'pixh' pixel thickness. This function is already more demanding and
|
||||
* may not be able to service the full width of the image.
|
||||
* @param segm Segment to configure
|
||||
* @param data Pointer to buffer with line samples 0..255
|
||||
* @param bg Background color
|
||||
* @param fg Foregound color
|
||||
* @param pixh Height of pixels - 1
|
||||
*/
|
||||
void ScreenSegmOscil(sSegm* segm, const void* data, u8 bg, u8 fg, int pixh);
|
||||
|
||||
// set video segment to oscilloscope line graph GF_OSCLINE
|
||||
// data = pointer to buffer with line samples 0..255
|
||||
// bg = background color
|
||||
// fg = foreground color
|
||||
/**
|
||||
* @brief Set video segment to oscilloscope line graph GF_OSCLIN
|
||||
* @details Oscilloscope continuous waveform segment (GF_OSCLINE). The curve is displayed as a continuous line with a thickness
|
||||
* of 1 pixel. This mode is already very demanding to render and is therefore accelerated by halving the horizontal resolution
|
||||
* (renders points 2 pixels wide).
|
||||
* @param segm Segment to configure
|
||||
* @param data Pointer to buffer with line samples 0..255
|
||||
* @param bg Background color
|
||||
* @param fg Foregound color
|
||||
*/
|
||||
void ScreenSegmOscLine(sSegm* segm, const void* data, u8 bg, u8 fg);
|
||||
|
||||
// generate palette 4-color translation table for function ScreenSegmPlane2
|
||||
// trans = pointer to destination palette translation table (u32 trans[256])
|
||||
// pal = pointer to source palette of 4 colors (u8 pal[4])
|
||||
/**
|
||||
* @brief Generate palette 4-color translation table for function @link ScreenSegmPlane2()
|
||||
* @details Generate a palette translation table for the @link ScreenSegmPlane2() function. The translation table is 256 entries of
|
||||
* 32 bits, so it takes 1024 bytes in memory. The table is used during display for internal purposes, must be aligned to 4 bytes,
|
||||
* and must be available for the entire time the segment is displayed. The input to the function is the palette table, which is
|
||||
* 4 color entries of 1 byte. Although there is no program in the PicoVGA library utilities that prepares an image in 2-plane
|
||||
* mode, there is an internal function Plane2Conv that converts a 4-color image to 2-plane mode. Thus, the image is attached to
|
||||
* the program as a 4-color image, and the conversion function is used to prepare a copy in RAM.
|
||||
* @param trans Pointer to destination palette translation table (u32 trans[256])
|
||||
* @param pal Pointer to source palette of 4 colors (u8 pal[4])
|
||||
*/
|
||||
void GenPal4Plane(u32* trans, const u8* pal);
|
||||
|
||||
// set video segment to 4-color on 2-planes graphics
|
||||
@@ -304,4 +471,6 @@ void ScreenSegmTilePersp3(sSegm* segm, const u8* map, const u8* tiles, const int
|
||||
void ScreenSegmTilePersp4(sSegm* segm, const u8* map, const u8* tiles, const int* mat,
|
||||
u8 mapwbits, u8 maphbits, u8 tilebits, s8 horizon);
|
||||
|
||||
//!@}
|
||||
|
||||
#endif // _VGA_SCREEN_H
|
||||
|
||||
311
src/vga_vmode.h
311
src/vga_vmode.h
@@ -8,230 +8,265 @@
|
||||
#ifndef _VGA_VMODE_H
|
||||
#define _VGA_VMODE_H
|
||||
|
||||
#define VIDEO_NAME_LEN 5 // length of video timing name
|
||||
//!@addtogroup VideoMode Video mode configuration
|
||||
//!@brief Structures and functions for video modes
|
||||
//!@details The video mode can be initialized either simply by the Video function or in more detail by the other functions.
|
||||
//!@{
|
||||
|
||||
// video timings
|
||||
#define VIDEO_NAME_LEN 5 //!< length of video timing name
|
||||
|
||||
//! Video timings structure
|
||||
typedef struct {
|
||||
// horizontal
|
||||
float htot; // total scanline in [us]
|
||||
float hfront; // H front porch (after image, before HSYNC) in [us]
|
||||
float hsync; // H sync pulse in [us]
|
||||
float hback; // H back porch (after HSYNC, before image) in [us]
|
||||
float hfull; // H full visible in [us] (corresponding to 'wfull' pixels)
|
||||
float htot; //!< Horizontal total scanline in [us]
|
||||
float hfront; //!< Horizontal front porch (after image, before HSYNC) in [us]
|
||||
float hsync; //!< Horizontal sync pulse in [us]
|
||||
float hback; //!< Horizontal back porch (after HSYNC, before image) in [us]
|
||||
float hfull; //!< Horizontal full visible in [us] (corresponding to 'wfull' pixels)
|
||||
|
||||
// vertical
|
||||
u16 vtot; // total scanlines (both subframes)
|
||||
u16 vmax; // maximal height
|
||||
u16 vtot; //!< Vertical total scanlines (both subframes)
|
||||
u16 vmax; //!< Vertical maximal height
|
||||
|
||||
// subframe 1
|
||||
u16 vsync1; // V sync (half-)pulses on subframe 1
|
||||
u16 vpost1; // V sync post half-pulses on subframe 1
|
||||
u16 vback1; // V back porch (after VSYNC, before image) on subframe 1
|
||||
u16 vact1; // active visible scanlines, subframe 1
|
||||
u16 vfront1; // V front porch (after image, before VSYNC) on subframe 1
|
||||
u16 vpre1; // V sync pre half-pulses on subframe 1
|
||||
u16 vsync1; //!< V sync (half-)pulses on subframe 1
|
||||
u16 vpost1; //!< V sync post half-pulses on subframe 1
|
||||
u16 vback1; //!< V back porch (after VSYNC, before image) on subframe 1
|
||||
u16 vact1; //!< active visible scanlines, subframe 1
|
||||
u16 vfront1; //!< V front porch (after image, before VSYNC) on subframe 1
|
||||
u16 vpre1; //!< V sync pre half-pulses on subframe 1
|
||||
|
||||
// subframe 2 (ignored if not interlaced)
|
||||
u16 vsync2; // V sync half-pulses on subframe 2
|
||||
u16 vpost2; // V sync post half-pulses on subframe 2
|
||||
u16 vback2; // V back porch (after VSYNC, before image) on subframe 2
|
||||
u16 vact2; // active visible scanlines, subframe 2
|
||||
u16 vfront2; // V front porch (after image, before VSYNC) on subframe 2
|
||||
u16 vpre2; // V sync pre half-pulses on subframe 2
|
||||
u16 vsync2; //!< V sync half-pulses on subframe 2
|
||||
u16 vpost2; //!< V sync post half-pulses on subframe 2
|
||||
u16 vback2; //!< V back porch (after VSYNC, before image) on subframe 2
|
||||
u16 vact2; //!< active visible scanlines, subframe 2
|
||||
u16 vfront2; //!< V front porch (after image, before VSYNC) on subframe 2
|
||||
u16 vpre2; //!< V sync pre half-pulses on subframe 2
|
||||
|
||||
// name
|
||||
const char* name; // video timing name (VIDEO_NAME_LEN characters + terminating 0)
|
||||
const char* name; //!< video timing name (VIDEO_NAME_LEN characters + terminating 0)
|
||||
|
||||
// flags
|
||||
bool inter; // interlaced (use subframes)
|
||||
bool psync; // positive synchronization
|
||||
bool odd; // first sub-frame is odd lines 1, 3, 5,... (PAL)
|
||||
bool inter; //!< interlaced (use subframes)
|
||||
bool psync; //!< positive synchronization
|
||||
bool odd; //!< first sub-frame is odd lines 1, 3, 5,... (PAL)
|
||||
} sVideo;
|
||||
|
||||
|
||||
// === TV videomodes
|
||||
|
||||
// TV PAL interlaced 5:4 720x576 (4:3 768x576, 16:9 1024x576)
|
||||
//! TV PAL interlaced 5:4 720x576 (4:3 768x576, 16:9 1024x576)
|
||||
extern const sVideo VideoPAL;
|
||||
|
||||
// TV PAL progressive 5:4 360x288 (4:3 384x288, 16:9 512x288)
|
||||
//! TV PAL progressive 5:4 360x288 (4:3 384x288, 16:9 512x288)
|
||||
extern const sVideo VideoPALp;
|
||||
|
||||
// TV NTSC interlaced 4:3 640x480 (5:4 600x480, 16:9 848x480)
|
||||
//! TV NTSC interlaced 4:3 640x480 (5:4 600x480, 16:9 848x480)
|
||||
extern const sVideo VideoNTSC;
|
||||
|
||||
// TV NTSC progressive 4:3 320x240 (5:4 300x240, 16:9 424x240)
|
||||
//! TV NTSC progressive 4:3 320x240 (5:4 300x240, 16:9 424x240)
|
||||
extern const sVideo VideoNTSCp;
|
||||
|
||||
// === Monitor videomodes
|
||||
|
||||
// EGA 8:5 640x400 (5:4 500x400, 4:3 528x400, 16:9 704x400), vert. 70 Hz, hor. 31.4685 kHz, pixel clock 25.175 MHz
|
||||
//! EGA 8:5 640x400 (5:4 500x400, 4:3 528x400, 16:9 704x400), vert. 70 Hz, hor. 31.4685 kHz, pixel clock 25.175 MHz
|
||||
extern const sVideo VideoEGA;
|
||||
|
||||
// VGA 4:3 640x480 (16:9 848x480), vert. 60 Hz, hor. 31.4685 kHz, pixel clock 25.175 MHz
|
||||
//! VGA 4:3 640x480 (16:9 848x480), vert. 60 Hz, hor. 31.4685 kHz, pixel clock 25.175 MHz
|
||||
extern const sVideo VideoVGA;
|
||||
|
||||
// SVGA 4:3 800x600 (16:9 1064x600), vert. 60 Hz, hor. 37.897 kHz, pixel clock 40 MHz
|
||||
//! SVGA 4:3 800x600 (16:9 1064x600), vert. 60 Hz, hor. 37.897 kHz, pixel clock 40 MHz
|
||||
extern const sVideo VideoSVGA;
|
||||
|
||||
// XGA 4:3 1024x768 (16:9 1360x768), vert. 60 Hz, hor. 48.36310 kHz, pixel clock 65 MHz
|
||||
//! XGA 4:3 1024x768 (16:9 1360x768), vert. 60 Hz, hor. 48.36310 kHz, pixel clock 65 MHz
|
||||
extern const sVideo VideoXGA;
|
||||
|
||||
// VESA 4:3 1152x864, vert. 60 Hz, hor. 53.697 kHz, pixel clock 81.62 MHz
|
||||
//! VESA 4:3 1152x864, vert. 60 Hz, hor. 53.697 kHz, pixel clock 81.62 MHz
|
||||
extern const sVideo VideoVESA;
|
||||
|
||||
// HD 4:3 1280x960, vert. 53 Hz, hor. 51.858 kHz, pixel clock 102.1 MHz
|
||||
//! HD 4:3 1280x960, vert. 53 Hz, hor. 51.858 kHz, pixel clock 102.1 MHz
|
||||
extern const sVideo VideoHD;
|
||||
|
||||
// required configuration to initialize VGA output
|
||||
//! Required configuration to initialize VGA output
|
||||
typedef struct {
|
||||
u16 width; // width in pixels
|
||||
u16 height; // height in lines
|
||||
u16 wfull; // width of full screen, corresponding to 'hfull' time (0=use 'width' parameter)
|
||||
const sVideo* video; // used video timings
|
||||
u32 freq; // required minimal system frequency in kHz (real frequency can be higher)
|
||||
u32 fmax; // maximal system frequency in kHz (limit resolution if needed)
|
||||
u8 mode[LAYERS_MAX]; // modes of overlapped layers 0..3 LAYERMODE_* (LAYERMODE_BASE = layer is off)
|
||||
// - mode of layer 0 is ignored (always use LAYERMODE_BASE)
|
||||
// - all overlapped layers must use same layer program
|
||||
bool dbly; // double in Y direction
|
||||
bool lockfreq; // lock required frequency, do not change it
|
||||
u16 width; //!< Width in pixels
|
||||
u16 height; //!< Height in lines
|
||||
u16 wfull; //!< Width of full screen, corresponding to 'hfull' time (0=use 'width' parameter)
|
||||
const sVideo* video; //!< Used video timings
|
||||
u32 freq; //!< Required minimal system frequency in kHz (real frequency can be higher)
|
||||
u32 fmax; //!< Maximal system frequency in kHz (limit resolution if needed)
|
||||
u8 mode[LAYERS_MAX]; //!< Modes of overlapped layers 0..3 LAYERMODE_* (LAYERMODE_BASE = layer is off)
|
||||
//!< - mode of layer 0 is ignored (always use LAYERMODE_BASE)
|
||||
//!< - all overlapped layers must use same layer program
|
||||
bool dbly; //!< double in Y direction
|
||||
bool lockfreq; //!< Lock required frequency, do not change it
|
||||
} sVgaCfg;
|
||||
|
||||
// videomode table - used to setup video driver
|
||||
//! Videomode table - used to setup video driver
|
||||
typedef struct {
|
||||
// screen resolution
|
||||
u16 width; // width in pixels
|
||||
u16 height; // height in lines
|
||||
u16 wfull; // width of full screen (corresponding to 'hfull' time)
|
||||
u16 wmax; // maximal width (corresponding to 'hmax' time)
|
||||
u16 width; //!< Screen width in pixels
|
||||
u16 height; //!< Screen height in lines
|
||||
u16 wfull; //!< Screen width of full screen (corresponding to 'hfull' time)
|
||||
u16 wmax; //!< Screen maximal width (corresponding to 'hmax' time)
|
||||
|
||||
// setup PLL system clock
|
||||
u32 freq; // system clock frequency in kHz
|
||||
u32 vco; // VCO frequency in kHz
|
||||
u16 fbdiv; // fbdiv PLL divider
|
||||
u8 pd1; // postdiv1
|
||||
u8 pd2; // postdiv2
|
||||
u32 freq; //!< system clock frequency in kHz
|
||||
u32 vco; //!< VCO frequency in kHz
|
||||
u16 fbdiv; //!< fbdiv PLL divider
|
||||
u8 pd1; //!< postdiv1
|
||||
u8 pd2; //!< postdiv2
|
||||
|
||||
// setup PIO state machine
|
||||
u16 div; // divide base state machine clock
|
||||
u16 cpp; // state machine clocks per pixel
|
||||
u8 prog; // layer program LAYERPROG_*
|
||||
u8 mode[LAYERS_MAX]; // mode of layer 0..3 LAYERMODE_* (LAYERMODE_BASE = layer is off or base layer)
|
||||
u16 div; //!< PIO divide base state machine clock
|
||||
u16 cpp; //!< State machine clocks per pixel
|
||||
u8 prog; //!< Layer program LAYERPROG_*
|
||||
u8 mode[LAYERS_MAX]; //!< mode of layer 0..3 LAYERMODE_* (LAYERMODE_BASE = layer is off or base layer)
|
||||
|
||||
// horizontal timings
|
||||
u16 htot; // total state machine clocks per line
|
||||
u16 hfront; // H front porch in state machine clocks (min. 2)
|
||||
u16 hsync; // H sync pulse in state machine clocks (min. 4)
|
||||
u16 hback; // H back porch in state machine clocks (min. 13)
|
||||
float hfreq; // horizontal frequency in [Hz]
|
||||
u16 htot; //!< Total state machine clocks per line
|
||||
u16 hfront; //!< H front porch in state machine clocks (min. 2)
|
||||
u16 hsync; //!< H sync pulse in state machine clocks (min. 4)
|
||||
u16 hback; //!< H back porch in state machine clocks (min. 13)
|
||||
float hfreq; //!< Horizontal frequency in [Hz]
|
||||
|
||||
// vertical timings
|
||||
u16 vtot; // total scanlines (both sub-frames)
|
||||
u16 vmax; // maximal height
|
||||
float vfreq; // vertical frequency in [Hz]
|
||||
u16 vtot; //!< Total scanlines (both sub-frames)
|
||||
u16 vmax; //!< Maximal height
|
||||
float vfreq; //!< Vertical frequency in [Hz]
|
||||
|
||||
// subframe 1
|
||||
u16 vsync1; // V sync (half-)pulses on subframe 1
|
||||
u16 vpost1; // V sync post (half-)pulses on subframe 1
|
||||
u16 vback1; // V back porch (after VSYNC, before image) on subframe 1
|
||||
u16 vact1; // active visible scanlines, subframe 1
|
||||
u16 vfront1; // V front porch (after image, before VSYNC) on subframe 1
|
||||
u16 vpre1; // V sync pre (half-)pulses on subframe 1
|
||||
u16 vfirst1; // first active scanline, subframe 1
|
||||
u16 vsync1; //!< V sync (half-)pulses on subframe 1
|
||||
u16 vpost1; //!< V sync post (half-)pulses on subframe 1
|
||||
u16 vback1; //!< V back porch (after VSYNC, before image) on subframe 1
|
||||
u16 vact1; //!< active visible scanlines, subframe 1
|
||||
u16 vfront1; //!< V front porch (after image, before VSYNC) on subframe 1
|
||||
u16 vpre1; //!< V sync pre (half-)pulses on subframe 1
|
||||
u16 vfirst1; //!< first active scanline, subframe 1
|
||||
|
||||
// subframe 2 (ignored if not interlaced)
|
||||
u16 vsync2; // V sync half-pulses on subframe 2
|
||||
u16 vpost2; // V sync post half-pulses on subframe 2
|
||||
u16 vback2; // V back porch (after VSYNC, before image) on subframe 2
|
||||
u16 vact2; // active visible scanlines, subframe 2
|
||||
u16 vfront2; // V front porch (after image, before VSYNC) on subframe 2
|
||||
u16 vpre2; // V sync pre half-pulses on subframe 2
|
||||
u16 vfirst2; // first active scanline, subframe 2
|
||||
u16 vsync2; //!< V sync half-pulses on subframe 2
|
||||
u16 vpost2; //!< V sync post half-pulses on subframe 2
|
||||
u16 vback2; //!< V back porch (after VSYNC, before image) on subframe 2
|
||||
u16 vact2; //!< active visible scanlines, subframe 2
|
||||
u16 vfront2; //!< V front porch (after image, before VSYNC) on subframe 2
|
||||
u16 vpre2; //!< V sync pre half-pulses on subframe 2
|
||||
u16 vfirst2; //!< first active scanline, subframe 2
|
||||
|
||||
// name
|
||||
const char* name; // video timing name (VIDEO_NAME_LEN characters + terminating 0)
|
||||
const char* name; //!< Video timing name (VIDEO_NAME_LEN characters + terminating 0)
|
||||
|
||||
// flags
|
||||
bool lockfreq; // lock current frequency, do not change it
|
||||
bool dbly; // double scanlines
|
||||
bool inter; // interlaced (use sub-frames)
|
||||
bool psync; // positive synchronization
|
||||
bool odd; // first sub-frame is odd lines 1, 3, 5,... (PAL)
|
||||
bool lockfreq; //!< Lock current frequency, do not change it
|
||||
bool dbly; //!< Double scanlines
|
||||
bool inter; //!< Interlaced (use sub-frames)
|
||||
bool psync; //!< Positive synchronization
|
||||
bool odd; //!< First sub-frame is odd lines 1, 3, 5,... (PAL)
|
||||
} sVmode;
|
||||
|
||||
// output device
|
||||
//! Output device
|
||||
enum {
|
||||
DEV_PAL = 0, // PAL TV
|
||||
DEV_NTSC, // NTSC TV
|
||||
DEV_VGA, // VGA monitor
|
||||
DEV_PAL = 0, //!< PAL TV
|
||||
DEV_NTSC, //!< NTSC TV
|
||||
DEV_VGA, //!< VGA monitor
|
||||
|
||||
DEV_MAX
|
||||
};
|
||||
|
||||
// preset videomode resolution
|
||||
//! Preset videomode resolution
|
||||
enum {
|
||||
RES_ZX = 0, // 256x192
|
||||
RES_CGA, // 320x200
|
||||
RES_QVGA, // 320x240
|
||||
RES_EGA, // 512x400
|
||||
RES_VGA, // 640x480
|
||||
RES_SVGA, // 800x600 (not for TV device)
|
||||
RES_XGA, // 1024x768 (not for TV device)
|
||||
RES_HD, // 1280x960 (not for TV device)
|
||||
RES_ZX = 0, //!< 256x192
|
||||
RES_CGA, //!< 320x200
|
||||
RES_QVGA, //!< 320x240
|
||||
RES_EGA, //!< 512x400
|
||||
RES_VGA, //!< 640x480
|
||||
RES_SVGA, //!< 800x600 (not for TV device)
|
||||
RES_XGA, //!< 1024x768 (not for TV device)
|
||||
RES_HD, //!< 1280x960 (not for TV device)
|
||||
|
||||
RES_MAX
|
||||
};
|
||||
|
||||
// graphics formats
|
||||
//! Graphics formats
|
||||
enum {
|
||||
FORM_8BIT = 0, // 8-bit pixel graphics (up to EGA resolution)
|
||||
FORM_4BIT, // 4-bit pixel graphics (up to SVGA graphics)
|
||||
FORM_MONO, // 1-bit pixel graphics
|
||||
FORM_TILE8, // 8x8 tiles
|
||||
FORM_TILE12, // 12x12 tiles
|
||||
FORM_TILE16, // 16x16 tiles
|
||||
FORM_TILE24, // 24x24 tiles
|
||||
FORM_TILE32, // 32x32 tiles
|
||||
FORM_TILE48, // 48x48 tiles
|
||||
FORM_TILE64, // 64x64 tiles
|
||||
FORM_MTEXT8, // mono text with font 8x8
|
||||
FORM_MTEXT16, // mono text with font 8x16
|
||||
FORM_TEXT8, // attribute text with font 8x8
|
||||
FORM_TEXT16, // attribute text with font 8x16
|
||||
FORM_RLE, // images with RLE compression (on overlapped layer 1)
|
||||
FORM_8BIT = 0, //!< 8-bit pixel graphics (up to EGA resolution)
|
||||
FORM_4BIT, //!< 4-bit pixel graphics (up to SVGA graphics)
|
||||
FORM_MONO, //!< 1-bit pixel graphics
|
||||
FORM_TILE8, //!< 8x8 tiles
|
||||
FORM_TILE12, //!< 12x12 tiles
|
||||
FORM_TILE16, //!< 16x16 tiles
|
||||
FORM_TILE24, //!< 24x24 tiles
|
||||
FORM_TILE32, //!< 32x32 tiles
|
||||
FORM_TILE48, //!< 48x48 tiles
|
||||
FORM_TILE64, //!< 64x64 tiles
|
||||
FORM_MTEXT8, //!< mono text with font 8x8
|
||||
FORM_MTEXT16, //!< mono text with font 8x16
|
||||
FORM_TEXT8, //!< attribute text with font 8x8
|
||||
FORM_TEXT16, //!< attribute text with font 8x16
|
||||
FORM_RLE, //!< images with RLE compression (on overlapped layer 1)
|
||||
|
||||
FORM_MAX
|
||||
};
|
||||
|
||||
extern sVmode Vmode; // videomode setup
|
||||
extern sVgaCfg Cfg; // required configuration
|
||||
extern sCanvas Canvas; // canvas of draw box
|
||||
extern sVmode Vmode; //!< Videomode setup
|
||||
extern sVgaCfg Cfg; //!< Required configuration
|
||||
extern sCanvas Canvas; //!< Canvas of draw box
|
||||
|
||||
// 16-color palette translation table
|
||||
//! 16-color palette translation table
|
||||
extern u16 Pal16Trans[256];
|
||||
|
||||
// initialize default VGA configuration
|
||||
/**
|
||||
* @brief Initialize configuration structure to VGA defaults
|
||||
* @details The function presets the structure to the default parameters: 640x480 resolution, VGA display,
|
||||
* processor frequency 120 to 270 MHz.
|
||||
* @param cfg Configuration to modify
|
||||
*/
|
||||
void VgaCfgDef(sVgaCfg* cfg);
|
||||
|
||||
// debug print videomode setup
|
||||
/**
|
||||
* @brief Debug print videomode setup
|
||||
* @param vmode Video mode table
|
||||
*/
|
||||
void VgaPrintCfg(const sVmode* vmode);
|
||||
|
||||
// calculate videomode setup
|
||||
// cfg ... required configuration
|
||||
// vmode ... destination videomode setup for driver
|
||||
/**
|
||||
* @brief Calculate the structure for setting up the video mode.
|
||||
* @details The sVgaCfg structure contains the required properties of the video mode: the display resolution,
|
||||
* the minimum processor frequency and the timing of the sVideo signal, possibly also the required overlay mode.
|
||||
* You can first call the VgaCfgDef function, which presets the structure to the default parameters. The VgaCfg
|
||||
* function prepares the sVmode descriptor structure, which is later passed to the init function.
|
||||
* At this point no operations are taking place only the necessary settings are being calculated. After the calculation,
|
||||
* some items of the sVmode structure can be adjusted. In the library there are global structures Cfg and Vmode that can
|
||||
* be used for the function. The required screen resolution and signal timing are two independent properties.
|
||||
* For timing, you are limited only by the number of video lines of the image, but otherwise you can set any screen resolution
|
||||
* within them. For example, for PAL and NTSC video, you can set a VGA video resolution. To make the program versatile so that
|
||||
* it can be run on both a VGA monitor and a TV, use a VGA resolution of 640x480 or 320x240 (or 512x400 and 256x192, due to RAM
|
||||
* limitations). When changing the display, just select VGA/PAL or NTSC timing, the resolution does not change for the program.
|
||||
* @param cfg Source configuration structure
|
||||
* @param vmode Destination videomode setup for driver
|
||||
*/
|
||||
void VgaCfg(const sVgaCfg* cfg, sVmode* vmode);
|
||||
|
||||
// initialize videomode
|
||||
// dev ... device DEV_*
|
||||
// res ... resolution RES_*
|
||||
// form ... format FORM_*
|
||||
// buf ... pointer to frame buffer (must be aligned to 4-bites, use ALIGNED attribute)
|
||||
// buf2 ...pointer to additional buffer:
|
||||
// FORM_TILE*: pointer to column of tiles 32x32 in 8-bit graphics
|
||||
// FORM_TEXT: pointer to font 8x16 or 8x8 (size 4 KB or 2 KB, ALIGNED attribute, should be in RAM)
|
||||
// - copy font to 4KB or 2 KB RAM buffer with ALIGNED attribute
|
||||
// - text uses color attributes PC_*
|
||||
// FORM_RLE: pointer to image rows (ALIGNED attribute, should be in RAM)
|
||||
/**
|
||||
* @brief Simplified initialization of the video mode
|
||||
* @details This function incorporates all the video initialization and configuration functions -- this one call initializes the
|
||||
* video mode and starts the library.
|
||||
* It supports only 1 display segment and has a limited repertoire of formats and resolutions, but may be sufficient in some cases.
|
||||
* The function only needs to pass a pointer to the frame buffer, which is a u8 array of sufficient size for the image data.
|
||||
* The function uses the library's default global structures (Cfg, Vmode, Canvas), otherwise the program can use the default global
|
||||
* structures arbitrarily. When using the Video function, the initialization functions are not needed.
|
||||
* @param dev Output device
|
||||
* @param res Resolution
|
||||
* @param form Graphics format
|
||||
* @param buf Pointer to frame buffer (must be aligned to 4-bites, use ALIGNED attribute)
|
||||
* @param buf2 Pointer to additional buffer:<br>
|
||||
* <b>FORM_TILE*:</b> Pointer to column of tiles 32x32 in 8-bit graphics<br>
|
||||
* <b>FORM_TEXT:</b> Pointer to font 8x16 or 8x8 (size 4 KB or 2 KB, ALIGNED attribute, should be in RAM) copy font to 4KB or 2 KB RAM buffer with ALIGNED attribute text uses color attributes PC_*<br>
|
||||
* <b>FORM_RLE:</b> Pointer to image rows (ALIGNED attribute, should be in RAM)
|
||||
*/
|
||||
void Video(u8 dev, u8 res, u8 form, u8* buf, const void* buf2 = FontBoldB8x16);
|
||||
|
||||
//!@}
|
||||
|
||||
#endif // _VGA_VMODE_H
|
||||
|
||||
Reference in New Issue
Block a user