PicoPicoを無料で遊んでみる

iOS用のアプリ「PicoPico」がアップデートして、CM対応ゲームが追加されました。CM対応とはCMを観たら無料でゲームが遊べる機能のことです。

f:id:nicotakuya:20210501110143p:plain

PicoPico

▲メニュー画面です。プラットホームは「ファミコン/NES」と「MSX」と「PC」ですね。MSXのゲームがiOSで遊べるのが驚きです。有料のほうにはゲームギアもあります。

ゲームは大きく分けて「無料ゲーム(FREE/CM)」と「月額550円で遊べるゲーム」が2種類あります。無料ゲームはプロジェクトEGGとけっこう被ってるので、プロジェクトEGGに加入してパソコンで遊ぶという手もあります。「CM」と書かれているゲームは、広告を一度観ると遊べます。 

昨日まではスペランカーが無料で遊べたのですが、リストから消えてますね。ラインナップが変化するんでしょうか

 

f:id:nicotakuya:20210501110249j:plain

広告を観る

▲ここでは例として「魔王ゴルベリアス」を選んでみました。「CMを視聴してプレイ」ボタンをタップ。

 

f:id:nicotakuya:20210501110356j:plain

広告を再生中

▲これはiPhoneで実行した場合。広告が流れます。

もう、いかにもな広告。

古いゲームを遊ぶために最新ゲームの広告を見ないといけないってのは、シュールですね。課金してる人に感謝です。

 

f:id:nicotakuya:20210501110453j:plain

魔王ゴルベリアスを実行中

 ▲ゲームが動きました。

起動時に一瞬だけ青い画面で「MSX system version1.0 Copyright 1983 by Microsoft」という文字が表示されます。「MSX」のロゴマークは出ません。

「魔王ゴルベリアス」はコンパイルが1987年2月頃発売したアクションRPGです。当時の価格は5900円。タイトル画面の「BY PAC FUJISHIMA」は作者の藤島聡(PAC)さんのこと。ゼルダっぽいものを目指して作ったのでしょうか。

昔、5900円もしたゲームが無料で遊べてしまうってのは凄いことだと思います。この手のアプリはソフトの提供者側が「タダでもいいから遊んで下さい」という姿勢を見せないと遊んでくれない。しかし、タダで遊ぶようなユーザーさんと、こういうガチなゲームとは相性が良くない気がします。プレイして3分で投げ出すんじゃないかという心配があります。

あと、このアプリに限らないのですが、画面のタップだとアクションゲームは遊びにくいですね。

ゲームパッドが必須だと思います。

ベーマガとチャレアベ本の修復

手持ちの古い雑誌や本がどんどん劣化していくので、修理してみました。

f:id:nicotakuya:20210420181724j:plain

破れたベーマガ(1986年)

▲たとえば、こちらは簡単な例。35年前のベーマガ

表紙が破れてますが、ノリで貼り直しました。

 

f:id:nicotakuya:20210420182447j:plain

バラバラになったページ

▲もっと激しく壊れた例。これは背の一部が剥がれたり、裏表紙が丸ごと取れてしまってます。

背の部分はノリで貼り付けました。アラビックヤマトだと、貼った部分が茶色になってしまうので良くないかもしれません。

裏表紙は丈夫に付ける必要があるので、木工用ボンドで貼りました。

 

f:id:nicotakuya:20210420182532j:plain

ページの破れ

▲続いて、裏表紙が破れた場合。

これは難しいですね。セロハンテープは劣化するので厳禁です。PP(ポリプロピレン)テープは見た目が良くないので、使いたくありません。

 

f:id:nicotakuya:20210421082253j:plain

カバーを被せた様子

▲そこで、透明ブックカバーをかぶせて対処しました。写真だとわかりにくいですが、フィルムをかぶせてます。

 

f:id:nicotakuya:20210420182544j:plain

透明ブックカバーB5サイズ

▲使ったカバーはこれです。 東急ハンズで352円。

 

f:id:nicotakuya:20210421230617j:plain

 粘着テープまみれの「チャレンジ!!パソコンAVGRPG(1986年)」

▲これは難物です。

3年前に中古で買ったチャレアベ本です。お値段、なんと4000円。

あちらこちらに粘着テープが貼られてます。

 

f:id:nicotakuya:20210421151309j:plain

本を開いただけで2つに分かれる

▲驚くのはその劣化ぶり。

本を開くと、こんな感じで2つに分かれてしまいます。本の「背」がつながっていなくて、粘着テープだけでどうにか形を保っている状態。

f:id:nicotakuya:20210423063925j:plain

変色したセロハンテープ

この本、「ザナドゥ」のマップが載っているページだけ劣化が激しいです。だいたい20ページに渡ってページが外れていて、閉じ部分にセロハンテープがびっしりと貼られてます。

このマップって、閉じ部分の根本まで印刷しているのが困りもの。それを無理して読もうとするので、結果として本を破壊してしまいます。

 

f:id:nicotakuya:20210421151722j:plain

鉛筆の書き込み

▲本の前の持ち主さんは熱心なザナドゥのプレイヤーだったみたいです。

あちこちに鉛筆の書き込みがありました。「G」とか「R」は敵の種類か?

これは消しゴムをかけると、印刷が消えちゃいそうなので、そのままにしておきます。

 

f:id:nicotakuya:20210421230145j:plain

ページの折れ

▲ページが豪快に折れてます。1ページずつ指で真っ直ぐにします。

 

f:id:nicotakuya:20210421151637j:plain

ドライヤーで温めながら、テープをはがす

▲セロハンテープが茶色に変色しているので、剝がして捨てます。

ただし、そのまま剥がそうとすると、ページが破れる可能性が非常に高い。そこで、ドライヤーで温めながらゆっくりと剥がします。指をヤケドしないように、剥がす瞬間はドライヤーを切らないといけないので、手間がかかります。

あと、セロハンテープは色が移ってしまって、剥がしても紙に茶色の痕が残ってしまいます。困りますが、どうにもなりません。

 

f:id:nicotakuya:20210422141612j:plain

セロハンテープとPPテープの二重攻撃

▲難所。セロハンテープの上に、幅4センチくらいの太いPPテープがガッチリと貼ってあります。PPテープは変色してないのですが、中のセロハンテープは茶色になっているので、すべて剥がします。根気を使います。

f:id:nicotakuya:20210421151515j:plain

表紙にも粘着テープがいっぱい

▲最大の難所。先ほどと同じく、2重に粘着テープが貼ってあります。背の部分はすでに細かく破れているので、テープを剥がそうとすると、さらに破れる可能性があります。これは修復不能では、、、?

 

f:id:nicotakuya:20210421230258j:plain

PPテープの引き剥がしに成功

▲粘着テープと格闘を続けること数日。

諦めかけていたのですが、根気よく剥がしていったら、やっと取れました。

背の部分がボロボロです。カラープリンタで同じようなものを印刷して取り換えるという方法もありますが、できるだけ現物のままでいきます。 

 

f:id:nicotakuya:20210422121118j:plain

剥がした粘着テープ

▲本から剥がした粘着テープです。かつおぶしじゃありません。

合計で50枚くらいテープが貼られていました。

、、、よくもまあ、中古ショップの人はこれを4000円で売ろうと思ったな!?

 

f:id:nicotakuya:20210422121312j:plain

背にボンドを塗る

▲普通紙を木工用ボンドで貼って、本の背にします。

バラバラだったページを合体させます。

ボンドが多すぎると、余計にくっ付いて悲惨なことになるので、薄く伸ばしておきます。

 

f:id:nicotakuya:20210422120804j:plain

表紙を接着

▲表紙を貼り合わせ。

 

f:id:nicotakuya:20210422120925j:plain

透明カバーをかぶせて完成

▲ボンドが乾いたら、透明ブックカバーを付けます。

 

f:id:nicotakuya:20210422120555j:plain

修復に成功

▲修理が終わりました。やっと本らしく扱うことができます。

裂けるのが怖いので、全力で本を開けません。

1.77インチ カラー液晶の表示テスト(AE-ATM0177B3A)

TFT液晶表示

とりあえず動きましたというレベルですが、マイコン(Arduino)を使って1.77インチ カラー液晶に表示してみました。
16bitモードで、RGB+グレースケールをグラデーション表示します。
使用した部品は以下のとおりです。
マイコン「Seeeduino XIAO」580円。
・1.77インチ カラーグラフィックTFT LCD 評価キット「AE-ATM0177B3A」1200円。
昔は32bitマイコンもカラー液晶も高くて手が出なかったのですが、今だと手軽に買えてしまいます。便利な世の中になりました。
Arduino IDEでSeeeduino XIAOを使う方法については、こちらのページで紹介されています。
https://wiki.seeedstudio.com/Seeeduino-XIAO/#software
接続図は以下の通りです。3.3Vで動かします。

接続方法

GPIO番号を書き換えれば、他のマイコンでも動くと思います。

液晶の初期設定のパラメータはMax MC Costa(sumotoy)さんの「TFT_ILI9163C」を使わせて頂きました。ガンマの設定はよくわからないので削っています。

プログラムには間違いがある可能性があります。間違いを見つけた場合は直して使ってみてください。

(2021/07/24)
GitHubに置いてみました。
github.com

nicotakuya.hatenablog.com

M5StickCのキャプチャ実験

f:id:nicotakuya:20210226153653j:plain
M5StickCのキャプチャ

M5StickCのキャプチャできないか試してみました。まだ実験中です。
こちらの記事を参考にさせて頂きました。
raspberrypi.mongonta.com
これによると、ライブラリの「In_eSPI_Setup.h」というファイルを修正すると、「readPixel」が使えるようになるとのこと。readPixelは指定座標の画面のカラーコードを読み取るための関数です。
具体的な手順は以下のとおり。
「C:\Users\(ユーザー名)\Documents\Arduino\libraries\M5StickC\src\utility」フォルダの中にある「In_eSPI_Setup.h」をテキストエディタで開いて、次の2点を修正します。

f:id:nicotakuya:20210226151729p:plain
修正1

(修正1)「TFT_SDA_READ」の左側にある「//」を削除する。

f:id:nicotakuya:20210226151808p:plain
修正2

(修正2)「SPI_READ_FREQUENCY」の値を変更する。適切な値がわかりませんが「4000000」にしました。ビットレートが大きいと通信に失敗するようです。

↓が実験用のプログラムです。M5StickCに書き込むArduinoのスケッチです。Aボタン(M5ボタン)が押されたら、画面のデータをシリアルポートから出力します。

// capture
#include <M5StickC.h>

void capture(void){
  unsigned int color;
  int x,y;

  if(digitalRead(M5_BUTTON_HOME) == HIGH)return;
  while(digitalRead(M5_BUTTON_HOME) == LOW);

  for(y=0; y<80; y++){
    for(x=0; x<160; x++){
        color = M5.Lcd.readPixel(x,y);
        Serial.write((unsigned char)(color & 0xff));
        Serial.write((unsigned char)(color >> 8));
        Serial.flush();  // シリアル出力完了を待つ
    }  
  }  
}

void setup() {
  M5.begin();
  M5.Lcd.setRotation(3);
  M5.Lcd.setTextSize(3);
  M5.Lcd.setTextColor(RED);
  M5.Lcd.print("HELLO WORLD");
  M5.Lcd.setTextColor(BLUE);
  M5.Lcd.print("HELLO WORLD");
  M5.Lcd.setTextColor(GREEN);
  M5.Lcd.print("HELLO WORLD");
}

void loop() {
  capture();
}

そして、
↓がパソコン側の受信用のプログラムです。HSP3(Windows)で動きます。シリアルポートから受信した内容を画面に描画します。

//---------------------------------------------------------
//  for HSP 3   by takuya matsubara
// ・M5StickCのキャプチャを受信
//---------------------------------------------------------
#include "hspext.as"

#define LEDWIDTH  160	//width pixel
#define LEDHEIGHT 80	//height pixel
#define OFFSETX 0
#define OFFSETY 0
#define DOTSZ 3
#define BAUDRATE 115200

sdim livebuf,LEDWIDTH*LEDHEIGHT
screen 0,800,512,0,0,0
dispw = DOTSZ*LEDWIDTH
disph = DOTSZ*LEDHEIGHT
flag_comm =0
objsize 70,25
pos 0,400
button gosub "Open",*connect
pos 70*3+10,400
print "COMM"
pos 70*3+50,400
comnum=0
combox comnum,150,"com\ncom1\ncom2\ncom3\ncom4\ncom5\ncom6\ncom7\ncom8\ncom9\ncom10\n"
pos 70*6,400
button gosub "Save BMP",*savegrp

x1=OFFSETX
y1=OFFSETY
ptr=0
colordata=0
repeat
	if(flag_comm==0){
		wait 1
	}else{
		//recv
		repeat
			comgetc btn	//recv 1byte
			if(stat != 0){
				if(ptr==0):colordata = btn
				if(ptr==1):colordata = (btn<<8)+colordata
				ptr = (ptr+1) \ 2
				if(ptr==0){
					red  = (colordata >> (5+6)) & $1f	//32諧調
					green= (colordata >> 5) & $3f	//64諧調
					blue = colordata & $1f	//32諧調
					x2 = x1+DOTSZ-1
					y2 = y1+DOTSZ-1
					red = red*255/$1f
					green = green*255/$3f
					blue = blue*255/$1f

					//暗いので2倍にする(原因不明)
					red*=2
					green*=2
					blue*=2
					if red>255:red=255
					if green>255:green=255
					if blue>255:blue=255
					color red,green,blue
					boxf x1,y1,x2,y2
					
					x1 += DOTSZ
					if(x1 >= ((DOTSZ*LEDWIDTH)+OFFSETX)){
						x1=OFFSETX
						y1+=DOTSZ
						if(y1 >= ((DOTSZ*LEDHEIGHT)+OFFSETY)){
							y1 = OFFSETY
						}
					}
				}
			}else{
				redraw 1
				wait 1	//no data
				redraw 0
			}
		loop
	}
loop	
end

//-------------
*savegrp
gosub *connect_close
dialog "bmp",17,"BMPファイル"
if stat==0:return
filename=refstr
screen 1,LEDWIDTH*DOTSZ,LEDHEIGHT*DOTSZ
gsel 1,1
pos 0,0
gcopy 0,0,0,LEDWIDTH*DOTSZ,LEDHEIGHT*DOTSZ
bmpsave filename
gsel 1,-1
gsel 0,0
return
	
*connect_open
	if(flag_comm = 0){
		comopen comnum,"baud="+str(BAUDRATE)+" parity=N data=8 stop=1"
		if stat : dialog "COM"+comnum+"は使えません" : end
		flag_comm=1

		repeat
			comgetc btn	//recv 1byte
			if(stat == 0):break
		loop
		ptr=0
		x1=OFFSETX
		y1=OFFSETY
	}
	return

*connect_close
	if(flag_comm = 1){
		comclose
		flag_comm=0
	}
	return

*connect
	if(flag_comm =0){
		gosub *connect_open
		title "OPEN COMM"+str(comnum)
		wait 150	//必須
	}else{
		gosub *connect_close
		title "CLOSE COMM"
	}
	return

M5StickCをパソコンのUSBポートに接続してある状態で上記のプログラムを実行します。

f:id:nicotakuya:20210226151149p:plain
実行結果

画面の「OPEN」ボタンを押してシリアルポートの回線を開きます。M5StickCのAボタン(M5ボタン)を押すと、画像データが転送されます。通信速度は115200bpsです。
未解決の問題ですが、受信したカラーコードはすべて、想定の半分になってしまいます。ここままだと画像が暗くなってしまうので、受信した直後に2倍にして描画しています。各色ずつ1bit足りないので、16bitカラーではなく、13bitカラーになっていると思います。

ファミコン用マルチタップの自作version2

f:id:nicotakuya:20210225183004j:plain

マルチタップversion1

上の写真が以前作ったファミコン用マルチタップです。今のところ、くにおくんの大運動会で使うしか意味のない周辺機器です。

作ったのは良いんですが、ファミコン用パッドが入手できなかったので、このようにスーファミ用パッドを変換して接続してました。これがちょっと無駄に感じます。

 

f:id:nicotakuya:20210225183133j:plain

マルチタップversion2(動作未確認)

そこで、新バージョンでは、基板に最初からスーファミのコネクタを取り付けてみました。ただ、このコネクタを付けると、今度はdsub 15pinが付けられなくなります。2種類組み立てたらいいんじゃないでしょうか。もしくは裏側にハンダ付けするか。

 

f:id:nicotakuya:20200717031158j:plain

スーファミ用コネクタ

スーファミ用のコネクタです。基板取り付け用。

 

f:id:nicotakuya:20210225183349j:plain

14x4cm基板

基板サイズは14x4にして、秋月製のユニバーサル基板を底に付けられるようにしました。

以下のページでCADデータを公開中です。動作未確認なので、ご注意ください。

sites.google.com