わくわくシステム2
(Version 2.1)

▼わくわくシステム2とは?▼

仮想VRAM上にキャラクタを1ドット単位で書き込んでい”配置”プログラムと、
仮想VRAMの表示、仮想VRAMのデータの消去のプログラムがセットになったサブルーチン集です。
なお、わくわくシステム2はG850シリーズ専用ですので4行表示のポケコンには使用しないでください。

「マシン語は何となく出来るんだけど、
 仮想VRAM表示プログラムを自分で作るのはめんどくさいなー。」という人にお勧めです。

▼わくわくシステム2の特徴▼

1.仮想VRAMはG850シリーズの画面と同じ144*48ドットです。
  (非表示部分も含めると158*48ドットになります。)
2.配置するキャラクタの大きさは、1*1ドット〜8*8ドットまでです。
3.マシン語のIOCSと同じ感覚で使えます。
4.やたらとでかいプログラムサイズ!(と言っても3分の2以上は仮想VRAMが占めています。)
5.仮想VRAMの表示範囲の設定機能付き。
6.仮想VRAMにキャラクタを配置しても、BC、DE、HLレジスタは保持されます。(地味に嬉しい。)
7.もちろんフリーウェアなので自由に使えます。改造もOK!(著作権は放棄しません。)

●アドレスマップ

アドレス内容種類ラベル
100H〜102H未使用(ご自由にお使いください) ‐SPA
103H〜1A0H仮想VRAM1段目(非表示部分含む)データV0
1A1H〜23EH仮想VRAM2段目(   〃   )データV2
23FH〜2DCH仮想VRAM3段目(   〃   )データV3
2DDH〜37AH仮想VRAM4段目(   〃   )データV4
37BH〜418H仮想VRAM5段目(   〃   )データV5
419H〜4B6H仮想VRAM6段目(   〃   )データV6
4B7H仮想VRAM1段目の表示ドット数データH1
4B8H仮想VRAM2段目の  〃データH2
4B9H仮想VRAM3段目の  〃データH3
4BAH仮想VRAM4段目の  〃データH4
4BBH仮想VRAM5段目の  〃データH5
4BCH仮想VRAM6段目の  〃データH6
4BDH〜59AH仮想VRAMにキャラクタを配置するサブルーチンMAI
59BH〜5A8H仮想VRAMの内容をクリアするサブルーチンCLE
5A9H〜5D1H仮想VRAMを表示するサブルーチンDIS
5D2H〜5DFH未使用(ご自由にお使いください) ‐SP2

●座標について

仮想VRAMの座標は、左上を(0,0)にして
X座標は0〜143、Y座標は0〜47となっています。

配置するキャラクタの座標は、そのキャラクタの左上のドットになります。
これは、BASICで使う『GCURSOR』とは異なる考え方なので注意してください。

●「わくわくシステム2」の使い方

 キャラクタを仮想VRAMに配置する 

Bレジスタ   配置するキャラクタの横の長さ(1〜8)
Eレジスタ   配置するキャラクタのX座標(0〜255)
Dレジスタ   配置するキャラクタのY座標(0〜255)
HLレジスタ  配置するキャラクタのデータの開始アドレス
実行アドレス  CALL 4BDH
例:モンスターを(10,25)の位置に配置する場合。



上のリストを実行すれば仮想VRAM上の(10,25)の位置にモンスターのデータが書き込まれます。
そして仮想VRAMを表示すると・・・

使い方としては、ポケコンに内蔵されているIOCSと同じ感覚で使えます。

●画面からはみ出す座標について

座標を指定するDレジスタとEレジスタは、0〜255の範囲で指定出来ますが、
画面からはみ出す座標(X座標なら144〜,Y座標なら48〜)を
指定した場合でも配置されないだけでエラーにはなりません。
また、下の表のように座標のデータが249〜255の場合だとその数値は
マイナスの座標としてシステムが認識します。

もとの座標システムが認識する座標
249(0F9H)−7
250(0FAH)−6
251(0FBH)−5
252(0FCH)−4
253(0FDH)−3
254(0FEH)−2
255(0FFH)−1

上図の様に、キャラクタの一部が画面の外にはみ出す配置も可能です。
(1)(2)(5)の様に、配置されるキャラクタの横の長さが短い時でも
Bレジスタの数値は、元のキャラクタの横の長さを指定して下さい。(この場合は”5”ですね。)

 仮想VRAMを表示する 

実行アドレス  CALL 5A9H

このアドレスを実行すると、仮想VRAMが表示されます。
初期設定(このプログラム)では、ポケコンの画面全体に仮想VRAMを表示するように
なっていますが、実際にゲームを作る場合にポケコンの画面全体に仮想VRAMが表示
されると、スコア等の表示が出来なくて困る場合があります。
そこで、仮想VRAMの表示範囲を設定します。

●横方向の表示範囲を決める

各段ごとに画面の左端から仮想VRAMを何ドット分表示させるか(1〜144)を決めて、
4B7H〜4BCHにその数値を入れます(『0』を入れた場合は表示されません)。
縦方向の表示範囲をドット単位で決める事は出来ません。

あらかじめ仮想VRAMには下の様なデータが入っているとします。


<例1>
4B7H(1段目)=144
4B8H(2段目)=144
4B9H(3段目)=144
4BAH(4段目)=144
4BBH(5段目)=144
4BCH(6段目)=144

仮想VRAMの内容を全て表示します。(デフォルトの設定)

<例2>
4B7H(1段目)=100
4B8H(2段目)=100
4B9H(3段目)=100
4BAH(4段目)=100
4BBH(5段目)=100
4BCH(6段目)=100

1段目〜6段目までを左から100ドット表示します。

<例3>
4B7H(1段目)=121
4B8H(2段目)=121
4B9H(3段目)=121
4BAH(4段目)=121
4BBH(5段目)=0
4BCH(6段目)=0

1段目〜4段目を左から121ドット表示します。
5段目と6段目は表示していません。

<例4>
4B7H(1段目)=95
4B8H(2段目)=128
4B9H(3段目)=100
4BAH(4段目)=73
4BBH(5段目)=125
4BCH(6段目)=117

1段目〜6段目までのドット表示数をばらばらにする事も出来ます。

 仮想VRAMの内容をクリアする 

実行アドレス  CALL 59BH

このアドレスを実行すると、仮想VRAMの内容が消去されます。
これについては、特に説明は要らないかと思います。
●内部的な話

仮想VRAMは1段が144バイト(ドット)ですが、実際には144バイトの
仮想VRAMの両端に7バイトずつ予備のスペースが設けてあります。

これは、配置するキャラクタが画面の外にはみ出した時のためのスペースなので
あまり気にしないで下さい。

●わくわくシステム2(Version 2.1)ソースリスト
コメントがなくて申し訳ない...
10      ORG   100H
20SPA:  DS    3
30V0:   DS    7
40V1:   DS    151
50V2:   DS    158
60V3:   DS    158
70V4:   DS    158
80V5:   DS    158
90V6:   DS    158
100H1:  DB    144
110H2:  DB    144
120H3:  DB    144
130H4:  DB    144
140H5:  DB    144
150H6:  DB    144
160MAI: PUSH  BC
170     PUSH  DE
180     PUSH  HL
190     LD    A,B
200     LD    (BOX),A
210     LD    A,D
220     ADD   A,10
230     LD    D,A
240     LD    A,E
250     ADD   A,10
260     LD    E,A
270     LD    (XZA),DE
280     LD    DE,UP
290     LD    BC,8
300     LDIR
310     LD    HL,UP
320     LD    C,8
330     LDIR
340     LD    A,(XZA)
350     CP    154
360     JP    NC,SA
370     LD    B,A
380     LD    A,(BOX)
390     ADD   A,B
400     CP    11
410     JP    C,SA
420     LD    A,(YZA)
430     CP    58
440     JP    NC,SA
450     CP    3
460     JR    C,SA
470     LD    DE,0
480     CP    10
490     JR    NC,NE3
500     SUB   2
510     DEC   D
520     JR    NE4
530NE3: SUB   10
540L1:  CP    8
550     JR    C,NE4
560     SUB   8
570     INC   D
580     JR    L1
590NE4: LD    E,A
600     OR    A
610     JR    Z,NE5
620     LD    B,E
630L2:  PUSH  BC
640     LD    B,8
650     LD    HL,UP
660L3:  SLA   (HL)
670     INC   HL
680     DJNZ  L3
690     POP   BC
700     DJNZ  L2
710NE5: LD    A,8
720     SUB   E
730     LD    B,A
740L4:  PUSH  BC
750     LD    B,8
760     LD    HL,DWN
770L5:  SRL   (HL)
780     INC   HL
790     DJNZ  L5
800     POP   BC
810     DJNZ  L4
820     LD    HL,V0
830     LD    A,D
840     CP    255
850     JR    NZ,NE6
860     LD    A,(XZA)
870     SUB   3
880     LD    E,A
890     LD    D,0
900     ADD   HL,DE
910     JR    KK
920NE6: OR    A
930     JR    Z,NE7
940     LD    B,D
950     LD    DE,158
960L6:  ADD   HL,DE
970     DJNZ  L6
980NE7: LD    A,(XZA)
990     SUB   3
1000     LD    E,A
1010    LD    D,0
1020    ADD   HL,DE
1030    LD    DE,UP
1040    PUSH  HL
1050    CALL  WOW
1060    POP   HL
1070    LD    A,(YZA)
1080    CP    50
1090    JR    NC,SA
1100    LD    DE,158
1110    ADD   HL,DE
1120KK: LD    DE,DWN
1130    CALL  WOW
1140SA: POP   HL
1150    POP   DE
1160    POP   BC
1170    RET
1180WOW:LD    A,(BOX)
1190    LD    B,A
1200L7: LD    A,(DE)
1210    OR    (HL)
1220    LD    (HL),A
1230    INC   DE
1240    INC   HL
1250    DJNZ  L7
1260    RET
1270BOX:DB    0
1280XZA:DB    0
1290YZA:DB    0
1300UP: DS    8
1310DWN:DS    8
1320CLE:LD    HL,V0
1330    LD    DE,V0+1
1340    LD    (HL),0
1350    LD    BC,947
1360    LDIR
1370    RET
1380DIS:LD    HL,V1
1390    LD    DE,0
1400    LD    BC,H1
1410L8: PUSH  BC
1420    PUSH  DE
1430    PUSH  HL
1440    LD    A,(BC)
1450    OR    A
1460    JR    Z,D3
1470    CP    144
1480    JR    C,D2
1490    LD    A,144
1500D2: LD    B,A
1510    CALL  0BFD0H
1520D3: POP   HL
1530    LD    DE,158
1540    ADD   HL,DE
1550    POP   DE
1560    INC   D
1570    POP   BC
1580    INC   BC
1590    LD    A,D
1600    CP    6
1610    JR    NZ,L8
1620    RET
1630SP2:DS    14
========================
  copyright(c)2002-2016 咳止組(咳めぐ)
========================


 FOR G850/G850S/G850V/G850VS  lzh形式   zip形式 
 FOR E200/G801/G802/G803/G805 
     G811/G813/G815/G820/G830 
非対応

ゲーム一覧に戻る  TOPページへ戻る
 
inserted by FC2 system