Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Version 1.5.0 #7

Merged
merged 10 commits into from
Nov 25, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
# Change Log

## Version 1.5.0

Pull Request: https://github.com/suzukiplan/vgssdk-pico/pull/7

- ジョイパッドの入力をサポート
- bmp2img で 24 ビット Bitmap 形式をサポート

## Version 1.4.0

Pull Request: https://github.com/suzukiplan/vgssdk-pico/pull/6
Expand Down
60 changes: 59 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,20 @@ OBJECTS_IMAGE = image.o ${OBJECTS_SDK}
OBJECTS_SOUND = sound.o bgm.o small_font.o eff1.o eff2.o eff3.o ${OBJECTS_SDK}
OBJECTS_SANDSTORM = sandstorm.o ${OBJECTS_SDK}
OBJECTS_VDP = vdp_test.o small_font.o vram_ptn.o bgm.o eff1.o ${OBJECTS_SDK}
OBJECTS_JOYPAD = joypad.o img_joypad.o img_joypad_button_on.o img_joypad_cursor_on.o img_joypad_ctrl_on.o img_joypad_button_off.o img_joypad_cursor_off.o img_joypad_ctrl_off.o ${OBJECTS_SDK}
ASSET_SOURCE = example/assets/small_font.c\
example/assets/eff1.c\
example/assets/eff2.c\
example/assets/eff3.c\
example/assets/bgm.c\
example/assets/vram_ptn.c
example/assets/vram_ptn.c\
example/assets/img_joypad.c\
example/assets/img_joypad_ctrl_on.c\
example/assets/img_joypad_cursor_on.c\
example/assets/img_joypad_button_on.c\
example/assets/img_joypad_ctrl_off.c\
example/assets/img_joypad_cursor_off.c\
example/assets/img_joypad_button_off.c

all:
make roms
Expand All @@ -24,6 +32,7 @@ all:
make bin/sound
make bin/sandstorm
make bin/vdp
make bin/joypad

clean:
rm -f $(ASSET_SOURCE)
Expand Down Expand Up @@ -56,6 +65,27 @@ example/assets/bgm.c: example/assets/bgm.mml
example/assets/vram_ptn.c: example/assets/vram_ptn.bmp
./tools/bmp2img/bmp2img -t 8x8 ./example/assets/vram_ptn.bmp > ./example/assets/vram_ptn.c

example/assets/img_joypad.c: example/assets/joypad.bmp
./tools/bmp2img/bmp2img ./example/assets/joypad.bmp > ./example/assets/img_joypad.c

example/assets/img_joypad_ctrl_on.c: example/assets/joypad_ctrl_on.bmp
./tools/bmp2img/bmp2img ./example/assets/joypad_ctrl_on.bmp > ./example/assets/img_joypad_ctrl_on.c

example/assets/img_joypad_cursor_on.c: example/assets/joypad_cursor_on.bmp
./tools/bmp2img/bmp2img ./example/assets/joypad_cursor_on.bmp > ./example/assets/img_joypad_cursor_on.c

example/assets/img_joypad_button_on.c: example/assets/joypad_button_on.bmp
./tools/bmp2img/bmp2img ./example/assets/joypad_button_on.bmp > ./example/assets/img_joypad_button_on.c

example/assets/img_joypad_ctrl_off.c: example/assets/joypad_ctrl_off.bmp
./tools/bmp2img/bmp2img ./example/assets/joypad_ctrl_off.bmp > ./example/assets/img_joypad_ctrl_off.c

example/assets/img_joypad_cursor_off.c: example/assets/joypad_cursor_off.bmp
./tools/bmp2img/bmp2img ./example/assets/joypad_cursor_off.bmp > ./example/assets/img_joypad_cursor_off.c

example/assets/img_joypad_button_off.c: example/assets/joypad_button_off.bmp
./tools/bmp2img/bmp2img ./example/assets/joypad_button_off.bmp > ./example/assets/img_joypad_button_off.c

bin/rgb: $(OBJECTS_RGB)
g++ -o bin/rgb $(OBJECTS_RGB) -L/usr/local/lib -lSDL2

Expand All @@ -74,6 +104,9 @@ bin/sandstorm: ${OBJECTS_SANDSTORM}
bin/vdp: $(OBJECTS_VDP)
g++ -o bin/vdp $(OBJECTS_VDP) -L/usr/local/lib -lSDL2

bin/joypad: $(OBJECTS_JOYPAD)
g++ -o bin/joypad $(OBJECTS_JOYPAD) -L/usr/local/lib -lSDL2

bin:
mkdir bin

Expand All @@ -84,6 +117,7 @@ format:
make execute-format FILENAME=./example/sound/sound.cpp
make execute-format FILENAME=./example/sandstorm/sandstorm.cpp
make execute-format FILENAME=./example/vdp/vdp_test.cpp
make execute-format FILENAME=./example/joypad/joypad.cpp
make execute-format FILENAME=./src/FT6336U.hpp
make execute-format FILENAME=./src/vgssdk_sdl2.cpp
make execute-format FILENAME=./src/vgssdk_pico.cpp
Expand All @@ -104,6 +138,9 @@ touch.o: example/touch/touch.cpp src/vgssdk.h
vdp_test.o: example/vdp/vdp_test.cpp src/vgssdk.h
g++ $(CPPFLAGS) -I./src -c example/vdp/vdp_test.cpp

joypad.o: example/joypad/joypad.cpp src/vgssdk.h
g++ $(CPPFLAGS) -I./src -c example/joypad/joypad.cpp

sandstorm.o: example/sandstorm/sandstorm.cpp src/vgssdk.h
g++ $(CPPFLAGS) -I./src -c example/sandstorm/sandstorm.cpp

Expand Down Expand Up @@ -139,3 +176,24 @@ eff2.o: example/assets/eff2.c

eff3.o: example/assets/eff3.c
gcc $(CLAGS) -c example/assets/eff3.c

img_joypad.o: example/assets/img_joypad.c
gcc $(CLAGS) -c example/assets/img_joypad.c

img_joypad_button_on.o: example/assets/img_joypad_button_on.c
gcc $(CLAGS) -c example/assets/img_joypad_button_on.c

img_joypad_cursor_on.o: example/assets/img_joypad_cursor_on.c
gcc $(CLAGS) -c example/assets/img_joypad_cursor_on.c

img_joypad_ctrl_on.o: example/assets/img_joypad_ctrl_on.c
gcc $(CLAGS) -c example/assets/img_joypad_ctrl_on.c

img_joypad_button_off.o: example/assets/img_joypad_button_off.c
gcc $(CLAGS) -c example/assets/img_joypad_button_off.c

img_joypad_cursor_off.o: example/assets/img_joypad_cursor_off.c
gcc $(CLAGS) -c example/assets/img_joypad_cursor_off.c

img_joypad_ctrl_off.o: example/assets/img_joypad_ctrl_off.c
gcc $(CLAGS) -c example/assets/img_joypad_ctrl_off.c
84 changes: 68 additions & 16 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,42 @@ vgssdk-pico を用いることで、パソコン(Linux or macOS)のみで効

> スマホアプリを iOS のシミュレータ や Android のエミュレータで開発するようなイメージのものと思っていただければ大丈夫です。

## PIN assign

![./rp2040.png](./rp2040.png)

|RP2040 (SoC)|ILI9341 (LCD)|FT6336U (CTP)|UDA1334A (DAC)|Joypad|
|:-|:-|:-|:-|:-|
|4: `GPIO2`|-|-|-|`A button`|
|5: `GPIO3`|-|-|-|`B button`|
|6: `GPIO4`|-|`CTP_SDA`|-|-|
|7: `GPIO5`|-|`CTP_SCK`|-|-|
|9: `GPIO6`|-|-|-|`Down`|
|10: `GPIO7`|-|-|-|`Up`|
|11: `GPIO8`|-|-|-|`Left`|
|12: `GPIO9`|-|-|-|`Right`|
|13: `GND`|-|-|-|`GND`|
|14: `GPIO10`|-|-|-|`Start`|
|15: `GPIO11`|-|-|-|`Select`|
|17: `GPIO13`|-|-|`DIN`|-|
|18: `GND`|-|-|`GND`|-|
|19: `GPIO14`|-|-|`BCLK`|-|
|20: `GPIO15`|-|-|`WSEL`|-|
|21: `GPIO16`|`SDO (MISO)`|-|-|-|
|22: `GPIO17`|`LCD_CS`|-|-|-|
|24: `GPIO18`|`SCK`|-|-|-|
|25: `GPIO19`|`SDI (MOSI)`|-|-|-|
|26: `GPIO20`|-|`CTP_RST`|-|-|
|27: `GPIO21`|-|`CTP_INT`|-|-|
|29: `GPIO22`|`LCD_RST`|-|-|-|
|32: `GPIO27`|`LED`|-|-|-|
|34: `GPIO28`|`LCD_RS or LCD_DC`|-|-|-|
|36: `3.3V`|`VCC`|-|-|-|
|38: `GND`|`GND`|-|-|-|
|40: `VOUT (5V)`|-|-|`VIN`|-|

> `Joypad` の配線については [コチラの記事](https://note.com/suzukiplan/n/ncccafb305eae) を参照してください。

## How to build example app

[./example/README.md](./example/README.md) を参照してください。
Expand Down Expand Up @@ -578,9 +614,26 @@ void VGS::SoundEffect::setMasterVolume(int masterVolume);
1. タッチパネル(シングルタッチ)
2. 8ボタン(D-PAD + Start/Select + A/B)ジョイパッド <WIP>

> 現時点の [東方VGS実機版](https://github.com/suzukiplan/tohovgs-pico) ではジョイパッドの対応が行われていませんが、GPIO1〜8を用いて 8ボタン 形式のジョイパッドの入力をサポートすることができるものとします。
### `VGS::IO::touch structure`

```c++
struct VGS::IO::Touch {
bool on;
int x;
int y;
} touch;
```

- `on` : タッチ中は true
- `x` : タッチしている X 座標
- `y` : タッチしている Y 座標

NOTES:

- vgssdk-pico は本体がマルチタッチに対応していてもシングルタッチの状態のみ取得でき、マルチタッチ中は最も優先度が高いタッチ状態のみを取得するものとします
- PC (macOS, Linux) では マウス を用いてタッチを行うものとして左クリックと右クリックを区別しないものとします

### `VGS::IO::joypad structure` <WIP>
### `VGS::IO::joypad structure`

```c++
struct VGS::IO::Joypad {
Expand All @@ -595,24 +648,23 @@ struct VGS::IO::Joypad {
} joypad;
```

### `VGS::IO::touch structure`
NOTES:

```c++
struct VGS::IO::Touch {
bool on;
int x;
int y;
} touch;
```
- ジョイパッドの入力状態を参照できます
- `true` 押している
- `false` 押していない
- 参照を有効にするには [`vgs.io.setJoypadEnabled(true)`](#vgsiosetjoypadenabled-method) の実行が必要です

- `on` : タッチ中は true
- `x` : タッチしている X 座標
- `y` : タッチしている Y 座標
### `VGS::IO::setJoypadEnabled method`

NOTES:
```c++
void VGS::IO::setJoypadEnabled(bool enabled);
```

- vgssdk-pico は本体がマルチタッチに対応していてもシングルタッチの状態のみ取得でき、マルチタッチ中は最も優先度が高いタッチ状態のみを取得するものとします
- PC (macOS, Linux) では マウス を用いてタッチを行うものとして左クリックと右クリックを区別しないものとします
- `enabled` : ジョイパッドの入力有効化の設定
- `true` 有効
- `false` 無効(デフォルト)
- 有効にした場合 `vgs_loop` を呼び出す直前にジョイパッドの入力状態が取得されます

## Tools

Expand Down
1 change: 1 addition & 0 deletions example/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,4 @@ eff2.c
eff3.c
small_font.c
vram_ptn.c
assets/img_*.c
1 change: 1 addition & 0 deletions example/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
|[./sandstorm/sandstorm.cpp](./sandstorm/sandstorm.cpp)|![./sandstorm.png](./sandstorm.png)|砂嵐|
|[./sound/sound.cpp](./sound/sound.cpp)|![./sound.png](./sound.png)|BGMと効果音を再生|
|[./touch/touch.cpp](./touch/touch.cpp)|![./touch.png](./touch.png)|タッチで描画する簡易ペイント|
|[./joypad/joypad.cpp](./joypad/joypad.cpp)|![./joypad.png](./joypad.png)|ジョイパッドの入力テスト|

## How to Build

Expand Down
Binary file added example/assets/joypad.bmp
Binary file not shown.
Binary file added example/assets/joypad_button_off.bmp
Binary file not shown.
Binary file added example/assets/joypad_button_on.bmp
Binary file not shown.
Binary file added example/assets/joypad_ctrl_off.bmp
Binary file not shown.
Binary file added example/assets/joypad_ctrl_on.bmp
Binary file not shown.
Binary file added example/assets/joypad_cursor_off.bmp
Binary file not shown.
Binary file added example/assets/joypad_cursor_on.bmp
Binary file not shown.
7 changes: 7 additions & 0 deletions example/assets/roms.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,11 @@ extern "C" {
extern const short rom_eff3[4023];
extern const unsigned char rom_bgm[2229];
extern const unsigned short rom_vram_ptn[16384];
extern const unsigned short rom_joypad[14400];
extern const unsigned short rom_joypad_ctrl_on[196];
extern const unsigned short rom_joypad_cursor_on[144];
extern const unsigned short rom_joypad_button_on[576];
extern const unsigned short rom_joypad_ctrl_off[196];
extern const unsigned short rom_joypad_cursor_off[144];
extern const unsigned short rom_joypad_button_off[576];
}
Binary file added example/joypad.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
30 changes: 30 additions & 0 deletions example/joypad/joypad.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
#include "roms.hpp"
#include "vgssdk.h"

extern VGS vgs;

extern "C" void vgs_setup()
{
vgs.io.setJoypadEnabled(true);
vgs.gfx.startWrite();
vgs.gfx.clear(0);
vgs.gfx.setViewport(30, 40, 180, 80);
vgs.gfx.image(0, 0, 180, 80, rom_joypad);
vgs.gfx.endWrite();
vgs.setFrameRate(30);
}

extern "C" void vgs_loop()
{
vgs.gfx.startWrite();
vgs.gfx.setViewport(30, 40, 180, 80);
vgs.gfx.image(24, 32, 12, 12, vgs.io.joypad.up ? rom_joypad_cursor_on : rom_joypad_cursor_off);
vgs.gfx.image(24, 56, 12, 12, vgs.io.joypad.down ? rom_joypad_cursor_on : rom_joypad_cursor_off);
vgs.gfx.image(12, 44, 12, 12, vgs.io.joypad.left ? rom_joypad_cursor_on : rom_joypad_cursor_off);
vgs.gfx.image(36, 44, 12, 12, vgs.io.joypad.right ? rom_joypad_cursor_on : rom_joypad_cursor_off);
vgs.gfx.image(147, 47, 24, 24, vgs.io.joypad.a ? rom_joypad_button_on : rom_joypad_button_off);
vgs.gfx.image(121, 47, 24, 24, vgs.io.joypad.b ? rom_joypad_button_on : rom_joypad_button_off);
vgs.gfx.image(58, 61, 28, 7, vgs.io.joypad.select ? rom_joypad_ctrl_on : rom_joypad_ctrl_off);
vgs.gfx.image(86, 61, 28, 7, vgs.io.joypad.start ? rom_joypad_ctrl_on : rom_joypad_ctrl_off);
vgs.gfx.endWrite();
}
3 changes: 3 additions & 0 deletions pico/joypad/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
.pio
src
platformio.ini
32 changes: 32 additions & 0 deletions pico/joypad/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
all:
make copy
pio run -t upload

./src:
mkdir ./src

build: ./src
make copy
pio run


copy:
rm -rf ./src
mkdir ./src
cp -p ../platformio.ini ./
cp -p ../../src/lz4.c ./src
cp -p ../../src/lz4.h ./src
cp -p ../../src/vgsdecv.hpp ./src
cp -p ../../src/vgssdk_pico.cpp ./src
cp -p ../../src/vgssdk.h ./src
cp -p ../../src/vgstone.c ./src
cp -p ../../src/FT6336U.hpp ./src
cp -p ../../example/assets/img_joypad.c ./src
cp -p ../../example/assets/img_joypad_button_off.c ./src
cp -p ../../example/assets/img_joypad_button_on.c ./src
cp -p ../../example/assets/img_joypad_cursor_off.c ./src
cp -p ../../example/assets/img_joypad_cursor_on.c ./src
cp -p ../../example/assets/img_joypad_ctrl_off.c ./src
cp -p ../../example/assets/img_joypad_ctrl_on.c ./src
cp -p ../../example/assets/roms.hpp ./src
cp -p ../../example/joypad/joypad.cpp ./src
8 changes: 8 additions & 0 deletions pico/platformio.ini
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,14 @@ build_flags =
-DDAC_DIN=12
-DDAC_BCLK=14
-DDAC_WSEL=15
-DJOYPAD_UP_PIN=7
-DJOYPAD_DOWN_PIN=6
-DJOYPAD_LEFT_PIN=8
-DJOYPAD_RIGHT_PIN=9
-DJOYPAD_START_PIN=10
-DJOYPAD_SELECT_PIN=11
-DJOYPAD_A_PIN=2
-DJOYPAD_B_PIN=3
-DSPI_FREQUENCY=40000000
-DSPI_READ_FREQUENCY=20000000
-DSPI_TOUCH_FREQUENCY=2500000
Binary file added rp2040.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
24 changes: 15 additions & 9 deletions src/vgssdk.h
Original file line number Diff line number Diff line change
Expand Up @@ -296,17 +296,19 @@ class VGS

class IO
{
private:
bool enabledJoypad;

public:
// TODO: Joypad for tohovgs-pico is not implemented yet.
struct Joypad {
bool up; // TODO: Assuming GPIO1 assignment
bool down; // TODO: Assuming GPIO2 assignment
bool left; // TODO: Assuming GPIO3 assignment
bool right; // TODO: Assuming GPIO4 assignment
bool start; // TODO: Assuming GPIO5 assignment
bool select; // TODO: Assuming GPIO6 assignment
bool a; // TODO: Assuming GPIO7 assignment
bool b; // TODO: Assuming GPIO8 assignment
bool up; // GPIO7
bool down; // GPIO6
bool left; // GPIO8
bool right; // GPIO9
bool start; // GPIO10
bool select; // GPIO11
bool a; // GPIO2
bool b; // GPIO3
} joypad;

struct Touch {
Expand All @@ -319,7 +321,11 @@ class VGS
{
memset(&joypad, 0, sizeof(joypad));
memset(&touch, 0, sizeof(touch));
enabledJoypad = false;
}

void setJoypadEnabled(bool enabled) { enabledJoypad = enabled; }
bool isJoypadEnabled() { return enabledJoypad; }
};

bool halt;
Expand Down
Loading