MSX VRAM (2)


screen 2でカラーとパターンジェネレータを登録する。
参考:z88dk\examples\msx\ex2.c

  • MSX-BASIC
smile2.bas
100 defint a-z
110 dim g(7)
120 for i=0 to 7:read d$:g(i)=val("&b"+d$):next
130 data 00111100
140 data 01000010
150 data 10100101
160 data 10000001
170 data 10100101
180 data 10011001
190 data 01000010
200 data 00111100
210 color 15,1,14:screen 2
220 for k=0 to 2
230  c=(2+k*3)*&h10+1
240  for j=0 to 255
250   p=(k*256+j)*8
260   for i=0 to 7:vpoke &h2000+p+i,c:next
270   for i=0 to 7:vpoke p+i,g(i):next
280 next j,k
290 if strig(0)=0 then 290
300 p=&h2000+int(rnd(1)*768)*8
310 c=int(rnd(1)*16)*&h10+1
320 for i=0 to 7:vpoke p+i,c:next
330 goto 300
  • z88dk
smile2.c
/*
zcc +msx -lndos -create-app smile2.c
bload"cas:",r
*/

#include <msx/gfx.h>

#define BYTE unsigned char

void main()
{
    BYTE g[] = {0x3c, 0x42, 0xa5, 0x81, 0xa5, 0x99, 0x42, 0x3c};

    set_color(15, 1, 1);
    set_mode(mode_2);

    // パターンジェネレータ
    for (int i = 0; i < MODE2_MAX; i += 8) {
        vwrite(g, i, 8);
    }

    while (! get_trigger(0)) {
        int c = rand() & 15;
        int addr = (rand() % MODE2_MAX) & ~(7);
        fill(MODE2_ATTR + addr, c << 4, 8);
    }
}

ROMカートリッジ版
http://webmsx.org/?rom=http://www.maroon.dti.ne.jp/lance/file/smile2.rom

MSX-BASICの実行例