カシオ VX-4(ポケコン)のページ



2008年頃,秋葉原で永らく販売中止だったカシオのポケコン VX-4の新品が大量に放出されていました。 私のポケコン収集スタイルは,やみくもに収集するのでなく,機械語等の技術資料も収集するというスタイルなので, カシオのポケコンは,FX-890P/Z-1以前の8ビット機の書籍の存在をその時知らず,もしかしたらヤフオクで入手できるかも?という淡い期待を込めて, 若松通商で4台ほど購入しました。
 それから,VX-4の書籍調べましたが,ネット検索してもヒットせず,ヤフオクにも出ずに困って, 2ちゃんねるのポケコンのスレッドで聞いたところ,ポケコンジャーナルに出ていたと教えてもらい, さらに目次をPDF化したものまで頂きました。そのとき,FX-870P,VX-4関連の成書はなく,1990年前後に発行されていた雑誌のポケコンジャーナル(PJ)に情報が記事として発表されていたことを知ることが出来ました。
 おかげで,2010年初めにVX-4関連の情報を国会図書館から複写サービスで入手することが出来ました。
このページは,そういう感謝も込めて,FX-870P,VX-4の情報をネットに提供するためのものです。

コンテンツ






VX-4の32KB化

VX-4は,FX-870Pの学校教育用モデルで,メモリーをFX-870Pの32KBから8KBに削減してあります。 システムエリアで約3.3KB消費してフリーエリアは4KB強しかなく,変数領域とか考えたら,ろくなプログラムは作れません。 したがって,それなりのプログラムやゲームをするには,メモリー増設が必須になります。
 真っ当なメモリー増設方法は,オプションの32KBの増設RAM,RP-33を取りつけることで40KBにできますが, RP-33は非常に入手難なので,VX-4のメモリーをすげ替えることが一般的となってます。
 VX-4の32KB化は,Jun Amano氏の『CASIO PB-1000 FOREVER!』に『VX-4 内蔵メモリを32KB(FX-870P相当)に!』という記事があり, 多数の報告例があります。
 私も試みましたが,基板からICを引き剥がすのが苦手で,見事に配線パターンの銅箔の幾つかを一緒に剥がしてしまいました。ということで,自分自身で実行することを諦めて,他の方法を検討した結果, 高松製作所の改造サービスで出来ることが分かりました。 高松製作所のサービスのメニュー欄には出ていませんが,代金4,500円(2009年時)です。また,パターンを引き剥がしたものも+4,000円の修理代追加で修理・32KB化できました。 下の写真は,壊したVX-4を高松製作所様に修理・32KB化してもらったものの修理個所(メモリー交換部)の写真です。 自分で改造する自信がない人や,面倒な人は高松製作所に依頼するのも一考です。


   

 なお,高松製作所さんは,RP-33相当品の製品化も検討しているとのことですが,一体いつになることやら・・・


(2010.10.24)






ファイル・ダウンロード

 ここで,カシオ VX-4(ポケコン)のページのファイルをダウンロードできます。
なお,FX-870P / VX-4 のマニュアルで例示したプログラムも,ここでダウンロードできます。 ただし,マニュアルでコーピーして,エディタにペーストしても出来ます。


(2010.11.03)






LCD制御テストプログラム

 Jun Amano氏のHP『CASIO PB-1000 FOREVER!』に,HD61700クロスアセンブラ開発者の あお氏による『LCD制御プロトコル(PB-1000/C,FX-870P,VX-3,VX-4,AI-1000用)』という記事があり, その中に,
   ①グラフィックパターン転送
   ②キャラクタコード転送による文字表示
   ③LCDのコントラスト調整
のサンプル機械語ルーチンが例示されていますが,実行形式は用意されていません。そこで,FX-870P,32KB化VX-4用の実行プログラムを作成しました。

   LCDTEST1.zipのダウンロードはここをクリックしてください。

ただし,ZIPファイル中のLCDTEST1.BASのプログラムは機械語をバンク1の0000~FFFH内に配置するため,未改造のVX-4はRP-33で増設しても実行できません。 また,プログラムでは上記機械語ルーチンの先頭の2つの転送・表示ルーチンだけをテストします。 最後のコントラスト調整ルーチンは,現在のコントラストを台無しにしてしまうので,テストしません。
 一応,ベーシックプログラムと機械語のソースのリストをそれぞれ示します。機械語ソースファイルLCDTEST1.ASMは,前述のクロスアセンブラを用いて,
     ..¥HD61 LCDTEST1.ASM /QL
という感じでアセンブルして得られたデータをベーシックのプログラムに組み込みました。
 最後に,写真1はグラフィック・パターン表示ルーチン(LCDTEST1.ASM の DSPGR)を実行したときのものです。

リスト. LCDTEST1.BAS
100 ' LCDTEST1.BAS
110 ' LCD test program for FX-870P
120 ' machine codes presented at PB-1000 forever
130 ' programed by LF
140 ' since 25th,Sep.,2010
150 '
160 ' cannot run by VX-4 with only 8KB RAM
170 '
200 CLS:GOSUB 1030
210 'display graphic
220 PRINT"DISPLAY GRAPHIC"
230 GOSUB 510
240 CLS:MODE110(0)
250 LOCATE 0,1:PRINT"DISPLAY CHARACTER"
260 GOSUB 510
270 MODE110(&H28)
280 GOSUB 510
290 END
500 '*WTINKEY
510 IF INKEY$="" THEN 510
520 RETURN
1000 '*LDBIN
1010 ' allocate binary codes at 0000-0fffh
1020 ' not supported VX-4 with 8KB-ram
1030 RESTORE
1040 READ STADR,EDADR,EXADR:'addresses of start,end,execution
1050 IF EDADR>&H0FFF THEN PRINT"CANNOT ALLOCATE MEMORY!!":END
1060 'put machine codes
1070 DCNT=1
1080 READ QWE$
1090 '
1100 FOR I=STADR TO EDADR
1110 POKE I,VAL("&H"+MID$(QWE$,2*DCNT-1,2))
1120 DCNT=DCNT+1
1130 IF DCNT>6 AND I<EDADR THEN DCNT=1:READ QWE$:LOCATE 0,2:PRINT"BLOAD:";I-STADR+1;"bytes";CHR$(&H0D);
1140 NEXT
1150 LOCATE 0,2:PRINT"BLOAD:";EDADR-STADR+1;"bytes -- COMPLETED."
1160 RETURN
1900 FOR I=0 TO 86:PRINT RIGHT$(HEX$(PEEK(I)),2);:NEXT:END
2000 DATA 0,86,0
2010 DATA 420082420100,4202005400DF,D200405400DE,D6002000E800
2020 DATA E0D200E05660,54F7042224F8,D42402004203,144200834201
2030 DATA 004202005400,DFD200405400,DE1203566054,F7420000D101
2040 DATA 00004E000C54,00C3D2004056,6054F7000000,000000000000
2040 DATA 00004E000C54,00C3D2004056,6054F7000000,000000000000
2050 'end of program
リスト. LCDTEST1.ASM
;
; LCD test codes in PB-1000 forever
;
BASE: EQU &H0000
ORG BASE
START DSPGR
;
; display routine for graphic
;
DSPGR: LD $0,&H82 ;グラフィック表示モードにする
LD $1,0 ;桁位置 0
LD $2,0 ;行位置 0
PPO &HDF ;LCDコマンドレジスタを指定する
STLM $0,3 ;制御コマンド設定
PPO &HDE ;LCDデータ書き込み指定
PRE IX,DATA
LDM $0,(IX+$31),8 ;表示データ読み込み
STLM $0,8 ;グラフィック表示
PST UA,&H54 ;
RTN
DATA: DB &H04,&H22,&H24,&HF8,&HD4,&H24,&H02,&H00 ;グラフィックデータ
;・・・**・・・
;・・・**・・・
;・***・*・・
;・・・**・・・
;・・・*・・・・
;*・*・**・・
;・*・・・・*・
;・・・・・・・・
;
; display routine for one character 'A'
;
DSPCH: LD $3,&H14 ;表示キャラクタ"A"(&H41)をセット
LD $0,&H83 ;キャラクタ表示モードにする
LD $1,0 ;桁位置 0 を指定
LD $2,0 ;行位置 0 を指定
PPO &HDF ;LCDコマンドレジスタを指定する
STLM $0,3 ;(制御コマンド設定)
PPO &HDE ;LCDデータ書き込み指定
STL $3 ;1文字表示
PST UA,&H54 ;set BANK0 for PC
RTN
;
; set contrast to zero
;
LD $0,0 ;コントラストデータ(=0)を設定
LDW $1,0
OR $0,12 ;コントラストモード(=12固定)を設定
PPO &HC3 ;コントラスト制御指定
STLM $0,3 ;コントラストデータ書き込み
PST UA,&H54 ;(FX-870P/VX-4のみ追加)
RTN
; end of program


写真 1.グラフィック・パターン表示結果


(2010.10.25)






LCD制御テストプログラム(その2)

 HP『CASIO PB-1000 FOREVER!』にあったHD61700クロスアセンブラ開発者の あお氏による『LCD制御プロトコル(PB-1000/C,FX-870P,VX-3,VX-4,AI-1000用)』という記事で VX-4でのLCD制御の概要が分かったので,全画面分のデータをLCDに転送・表示するテストプログラムを作ろうとしましたが, クロスアセンブラ HD61にLCD.sというLCD制御のドキュメントファイルにほぼずばりの表示ルーチンがあったので,流用させていただきました。前回同様,FX-870Pおよび32KB化VX-4用です。

   LCDTEST2.zipのダウンロードはここをクリックしてください。

ZIPファイル中のLCDTEST2.BASのプログラムは機械語をバンク1の0000~FFFH内に配置するため,未改造のVX-4はRP-33で増設しても実行できません。
BASICのプログラムは基本的に前回のLCDTEST1.BASと同じなのでリストの表示は省略して,機械語のソースリストのみを示します。
 コードの詳細な解説は省略しますが,簡単にコメントすると以下の通り。

また,下の写真1は表示結果です。グラフィック・データは,カシオのポケコンZ-1GRを用いて,BASICでグラフィック表示させて,ファイルエリアにVX-4用データを出力したものです。

リスト. LCDTEST2.HDS
;------------------------------------------------------------
; DISPLCD
; transfer user graphic data to LCD
; programed by LF
; since 26th, Sep., 2010.
; INPUT : none
; USE REGISTER : $0 - $9 , IX
;------------------------------------------------------------
BASE: EQU &H0000
ORG BASE ;
START DISPLCD
DISPLCD:
PPO &HDF ;Set LCD (Select command register)
LDW $0,&H82 ;Set Bitimage mode(OR:&HA2,XOR:&H22),LCD1
XR $2,$2 ;Set LCD Address = 0,0
STLM $0,3 ;(write lcd register)
PPO &HDF ;Set LCD (Select command register)
LDW $0,&H92 ;Set Bitimage mode(OR:&HA2,XOR:&H22),LCD2
XR $2,$2 ;Set LCD Address = 0,0
STLM $0,3 ;(write lcd register)
PRE IX,GRPIMG ;IX = GRPIMG
LD $8,4 ;Set LCD line( = 4 )
LOOP:
PPO &HDF ;Set LCD (Select command register)
STL &H82 ;select LCD1(left part of lcd)
CAL DISPL ;GRPIMG --> LCD1( 96 byte )
PPO &HDF ;Set LCD (Select command register)
STL &H92 ;select LCD2(right part of lcd)
CAL DISPL ;GRPIMG --> LCD2( 96 byte )
SB $8,$30 ;$8--
JR NZ,LOOP ;
PST UA,&H54 ;return to BASIC
RTN ;
;----------------------------------
; display lcd
; input: IX <- pointer of graphic
;----------------------------------
DISPL:
PPO &HDE ;Set LCD (Select data ram)
LD $9,12 ;Set half line ( 12*8 = 96byte )
DSPLL:
LDIM $0,(IX+$31),8 ;Read bit data ( 8byte )
STLM $0,8 ;Display LCD ( 8byte )
SB $9,$30 ;$9--
JR NZ,DSPLL ;
RTN
;
; Graphic Image
; 192*4=768byte
;
GRPIMG: DB &H11,&H11,&H21,&HC2,&H02,&H04,&H18,&HE0
DB &H01,&H02,&H0C,&HF0,&H00,&H01,&H0E,&HF0
DB &H00,&H00,&H07,&HF8,&H00,&H00,&H07,&HF8
DB &H00,&H00,&H03,&HFC,&H00,&H00,&H03,&HFC
DB &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00
DB &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00
DB &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00
DB &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00
DB &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00
DB &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00
DB &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00
DB &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00
DB &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00
DB &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00
DB &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00
DB &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00
DB &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00
DB &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00
DB &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00
DB &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00
DB &HFF,&H80,&H80,&H80,&H8F,&H88,&H88,&H88
DB &H88,&H88,&H88,&H88,&H88,&H88,&H88,&H88
DB v&H88,&H88,&H88,&H88,&H88,&H88,&H88,&H88
DB &H89,&H8A,&H8C,&H88,&H91,&HA2,&HC4,0 ; '最後のデータ:192列目
DB &H11,&H11,&H11,&H11,&H22,&H22,&H42,&H84
DB &H84,&H08,&H10,&H21,&H41,&H82,&H04,&H18
DB &H20,&HC1,&H02,&H04,&H18,&H60,&H81,&H02
DB &H0C,&H70,&H80,&H01,&H06,&H38,&HC0,&H00
DB &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00
DB &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00
DB &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00
DB &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00
DB &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00
DB &H00,&H00,&H00,&H00,&H00,&H00,&H7C,&H82
DB &H82,&H82,&H44,&H00,&H7E,&H90,&H90,&H90
DB &H7E,&H00,&H64,&H92,&H92,&H92,&H4C,&H00
DB &H00,&H82,&HFE,&H82,&H00,&H00,&H7C,&H82
DB &H82,&H82,&H7C,&H00,&H00,&H00,&H00,&H00
DB &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00
DB &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00
DB &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00
DB &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00
DB &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00
DB &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00
DB &HFF,&H00,&H00,&H00,&HFF,&H00,&H00,&H00
DB &HFF,&H80,&H80,&H80,&H8F,&H88,&H88,&H88
DB &H89,&H8A,&H8C,&H88,&H91,&HA2,&HC4,&H88
DB &H11,&H22,&H44,&H88,&H11,&H22,&H44,0 ; '最後のデータ:192列目


写真1.表示結果

リスト. LCDTEST2.HDS(続き)
DUMMY:
DB &H11,&H11,&H11,&H11,&H11,&H22,&H22,&H22
DB &H42,&H44,&H84,&H08,&H08,&H10,&H21,&H42
DB &H42,&H84,&H08,&H10,&H20,&H41,&H82,&H04
DB &H18,&H20,&H40,&H80,&H00,&H00,&H00,&H00
DB &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00
DB &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00
DB &HFE,&H90,&H90,&H90,&H60,&H00,&H7C,&H82
DB &H82,&H82,&H7C,&H00,&H7C,&H82,&H82,&H82
DB &H44,&H00,&HFE,&H10,&H28,&H44,&H82,&H00
DB &HFE,&H92,&H92,&H92,&H82,&H00,&H80,&H80
DB &HFE,&H80,&H80,&H00,&H00,&H00,&H00,&H00
DB &H00,&H00,&H7C,&H82,&H82,&H82,&H44,&H00
DB &H7C,&H82,&H82,&H82,&H7C,&H00,&HFE,&H40
DB &H30,&H40,&HFE,&H00,&HFE,&H90,&H90,&H90
DB &H60,&H00,&HFC,&H02,&H02,&H02,&HFC,&H00
DB &H80,&H80,&HFE,&H80,&H80,&H00,&HFE,&H92
DB &H92,&H92,&H82,&H00,&HFE,&H90,&H98,&H94
DB &H62,&H00,&H00,&H00,&H00,&H00,&H00,&H00
DB &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00
DB &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00
DB &HFF,&H00,&H00,&H00,&HFF,&H00,&H00,&H00
DB &HFF,&H02,&H04,&H08,&HF9,&H22,&H44,&H88
DB &H11,&H22,&H44,&H88,&H11,&H22,&H44,&H88
DB &H11,&H22,&H44,&H88,&H11,&H22,&H44,0 ; '最後のデータ:192列目
DB &H11,&H11,&H11,&H11,&H11,&H11,&H22,&H22
DB &H22,&H42,&H44,&H44,&H84,&H88,&H08,&H10
DB &H10,&H20,&H40,&H80,&H80,&H00,&H00,&H00
DB &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00
DB &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00
DB &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00
DB &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00
DB &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00
DB &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00
DB &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00
DB &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00
DB &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00
DB &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00
DB &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00
DB &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00
DB &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00
DB &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00
DB &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00
DB &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00
DB &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00
DB &HFF,&H02,&H04,&H08,&HF9,&H22,&H44,&H88
DB &H91,&H22,&H44,&H88,&H11,&H22,&H44,&H88
DB &H11,&H22,&H44,&H88,&H11,&H22,&H44,&H88
DB &H11,&H22,&H44,&H88,&H11,&H22,&H44,0 ; '最後のデータ:192列目
; end of program


(2010.10.25)






拡張CLEAR命令CLEAR-ZERO

 CLEAR-ZERO,クリア-ゼロと言っても,日本で今流行りのアルコール分0のビールではありません。
FX-870Pおよび32KB化VX-4用の拡張CLEAR命令プログラムです。 RAMのアドレス0番地に配置する拡張CLEAR命令(機械語エリア割り当て機能付き)で実行アドレスが0なのが,この名前の由来です。 なお,未改造の32KB化していないVX-4は,バンク1の先頭の4KBにRAMがないため,動作対象外です。

   clr0.zipのダウンロードはここをクリックしてください。

 Jun Amano氏のHP『CASIO PB-1000 FOREVER!』にある,あお氏の拡張CLEAR命令が有名ですが, 拡張クリアの機械語プログラムをシステムエリアのCALCに配置するので,32文字以上の数式をINキーで数式記憶させると拡張CLEARが破壊されるという制限があります。 そこで,システムが未使用のバンク1の先頭に配置することで,以下のメリットが得られます。

 プログラム自体は,あお氏の拡張CLEARの開始アドレスを0番地にして, 機械語の最後にCLEAR-ZEROチェック用の"CLR0"(119~122番地,123番地はnull)という文字列を入れただけなので,開発したと言うのもおこがましく, 単純に改造して語呂の良い命名をしただけというのが実情です。実際,ソースリストを読んで,改造・テストした時間も10分とか20分とかいう感じでした。
 使用方法は,まずCLR0.BASをFX-870Pおよび相当品にロードして,RUNさせます。すると,RAMの先頭にCLEAR-ZEROが配置されるので, CLR0.BASは不要となり,後はCLEAR-ZEROのある0番地~123番地のRAMの内容を壊すようなプログラムを実行しない限り,CLEAR-ZEROは常駐します。 CLEAR-ZEROの使用方法は,以下の通り。 添付ファイルには英語版の説明書clr0_e.txtがあり,そっちの方が日本語版のclr0_j.txtより読みやすいでしょう。 日本語版はあお氏のReadme.txtに継げ足しをおこなったので,却って読みにくいかと思います。

P.S.
あお氏の拡張CLEARの機械語ローダーは,ユーザー定義文字領域に置いた機械語転送ローダーを表示ドットバッファに自らを転送して, その後,転送された機械語転送ローダーのブロック転送命令の転送先アドレスを変更して使い,ユーザー定義文字領域に順次書き込んだ機械語を転送させるという技法を使用していて,動作を知ったとき,まさに orz でした。
 しかし,分かりにくい分高速(1秒程度で,たぶんクイックローダーと呼ばれるもの)です。私のは理解しやすいようにALL-BASICですが,10秒以上かかります(途中の転送バイト数を表示して,終了まで待つ不安を減らすようにしてますが)。
可読性を考えると,高速性を犠牲にしても機械語ローダーは避けたいので,ALL-BASICで高速化の検討もしましたが,現時点で10秒を切ることはできていません。なにしろ,VX-4 初心者ですから,古の賢者の智慧などとても超えられません。

P.S.2
あってもおかしくない名前だけど,なんと,カルピスにクリアゼロがあったとは!!orz


(2010.10.26)






リンク

『Casio PB-1000 FOREVER!』 : Jun Amano氏の主宰する,PB-1000(C)を中心にカシオの8ビットポケコン AI-1000,FX-870P,VX-3,VX-4等に関する総本山のようなサイト。
『HD61700 SPIRITS』 : あお(BLUE)氏の主宰するカシオの8ビットポケコンのCPU HD61700に関するサイト。ここで,HD61700クロスアセンブラ,VX-Menuのような素晴らしい開発ソフトやユーティリティをDLできます。
PB-prog : T.Matsu氏の主宰するポケコンに関するサイト。カシオの8ビット系に関して,FX-860PVC解析情報・FX-870P解析情報が掲載されています。


(2010.11.09)






123