====== wswan (WonderSwan/WonderWitch) ====== The wswan target provides support for targetting the Bandai WonderSwan console. In addition, experimental support is provided for targetting the WonderWitch abstraction layer. Currently supported languages include: * **assembly** - via binutils-ia16's GNU assembler, using Intel-style opcodes and syntax; * **C** - via gcc-ia16, supporting up to the C11 standard with GNU extensions. ===== Overview ===== * [[wswan:platform_overview|Platform overview]] * [[wswan:bugs|Known bugs]] ===== Packages ===== * ''target-wswan'' - basic support metapackage ===== Subtargets ===== The wswan target features multiple subtargets: * ''wswan/medium'' - create a ROM with multiple code segments, the default; * ''wswan/small'' - create a ROM with one code segment, slightly faster code but 64KB maximum code limit; * ''wswan/bootfriend'' - special subtarget for creating [[https://wonderful.asie.pl/ws/bootfriend/|BootFriend]] executables which execute from RAM. In addition, there exists an [[wswan:wwitch|experimental subtarget]] ''wwitch'' for targeting the Freya abstraction layer used by the WonderWitch platform. ===== Libraries ===== * [[https://wonderful.asie.pl/doc/libws/|libws]] - low-level hardware library * [[https://wonderful.asie.pl/doc/libwsx/|libwsx]] - high-level utility library * [[https://wonderful.asie.pl/doc/libww/|libww]] - WonderWitch API library * [[https://wonderful.asie.pl/doc/libwwcl/|libwwcl]] - WonderWitch compatibility layer ===== Guides ===== * These might become a tutorial one day (very work-in-progress): * [[wswan:tutorial:development_environment|Development environment]] * [[wswan:tutorial:hello_display|Hello, Display!]] * [[wswan:guide:porting_wwitch|Porting WonderWitch applications to standalone programs]] - the ''libwwcl'' WonderWitch compatibility layer * [[wswan:guide:memory_management|Memory management]] - working with banks and segmentation, controlling memory locations * [[wswan:guide:optimization_v30mz|Optimizing for the NEC V30MZ CPU]] * [[wswan:guide:interrupt_handlers|Writing interrupt handlers]] * [[wswan:guide:c_assembly|Writing assembly]] - using the GNU assembler * [[wswan:guide:c_calling_convention|C calling convention]] * [[wswan:guide:c_inline_assembly|Writing inline C assembly]] * [[wswan:guide:wfconfig|wfconfig.toml]] - configuring the ROM header ===== Other documentation ===== * [[https://wonderful.asie.pl/doc/binutils-ia16/|binutils-ia16]] * [[https://wonderful.asie.pl/doc/binutils-ia16/as.html|as Assembler]] * [[https://wonderful.asie.pl/doc/binutils-ia16/ld.html|ld Linker]] * [[https://wonderful.asie.pl/doc/gcc-ia16/gcc-6.3.0/gcc/|gcc-ia16 6.3.0]] - C compiler * [[https://wonderful.asie.pl/doc/gcc-ia16/gcc-6.3.0/gcc/IA_002d16-Options.html|IA-16 Options]] * [[https://wonderful.asie.pl/doc/gcc-ia16/gcc-6.3.0/gcc/Named-Address-Spaces.html#IA_002d16-Named-Address-Spaces-1|IA-16 Named Address Spaces]] * [[https://wonderful.asie.pl/doc/gcc-ia16/gcc-6.3.0/gcc/IA_002d16-Function-Attributes.html|IA-16 Function Attributes]] * [[https://wonderful.asie.pl/doc/gcc-ia16/gcc-6.3.0/gcc/IA_002d16-Built_002din-Functions.html|IA-16 Built-in Functions]] ===== Other sources ===== * [[https://ws.nesdev.org/wiki/Main_Page|WSdev Wiki]] - hardware documentation * [[https://github.com/WonderfulToolchain/awesome-wsdev|awesome-wsdev]] - link hub for WonderSwan-related homebrew projects