上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
--.--.-- -- l スポンサー広告 l top
マシン語の使い方がわかってきたのでスターウォーズ風の3D画面を作ってみました。




まずマシン語コード。これをSAVE0として保存します。


1 poke#700,#f7,#b5,#2e,#4f,#90,#22,#80,#24,#cf,#19,#12,#01,#24,#01,#01,#97,#8e,#18,#0b,#19
2 poke#714,#5a,#78,#9d,#78,#18,#3a,#6a,#43,#19,#78,#20,#39,#69,#43,#12,#11,#18,#32,#12,#04
3 poke#728,#12,#0c,#14,#04,#49,#11,#24,#14,#20,#31,#e7,#0f,#09,#04,#09,#0c,#3f,#19,#7f,#10
4 poke#73c,#0c,#04,#7f,#01,#24,#14,#00,#97,#e7,#0f,#bc,#46,#64,#44,#67,#10,#00,#9c,#e7,#19
5 poke#750,#01,#24,#22,#40,#21,#40,#a2,#40,#3f,#04,#89,#18,#3f,#0c,#8c,#40,#01,#28,#0c,#d1
6 poke#764,#3f,#04,#3f,#14,#f7,#19,#3d,#78,#2a,#06,#00,#2a,#1b,#dc,#0f,#21,#0c,#1b,#25,#40
7 poke#778,#80,#24,#64,#42,#0b,#e0,#02,#28,#0c,#d1,#3f,#04,#3f,#14,#f7,#19,#3d,#78,#2a,#06
8 poke#78c,#00,#2a,#0c,#dc,#80,#21,#49,#42,#0c,#43,#25,#43,#3d,#70,#06,#e0,#03,#28,#04,#d1
9 poke#7a0,#03,#35,#20,#2d,#00,#dd,#0a,#25,#9d,#70,#01,#9f,#03,#33,#bb,#42,#b0,#d1,#0c,#20
10 poke#7b4,#fe,#bc,#02,#bc,#08,#47,#c0,#46,#57,#08,#00,#00


次がメインプログラム。これをSAVE1で保存します。

10 CLS
20 FORI=1TO8
30 LCI,I:?CHR$(26):LC31-I,I:?CHR$(25)
40 LCI,22-I:?CHR$(25):LC31-I,22-I:?CHR$(26)
50 NEXT
100 FORI=0TO29
120 POKE#800+I*3,RND(64),24-13+RND(26),10+RND(30)
130 NEXT
200 A=USR(#700,1)
210 A=USR(#700,3)
220 A=USR(#700,2)
225 IF INKEY()=32 GOTO 500
230 WAIT5
240 GOTO200
500 '*** warp ***
510 LC13,12:?"WARP!"
515 I=0
520 A=USR(#700,3)
530 A=USR(#700,2)
535 WAIT 5
536 IF (I%8)=0 THEN FORJ=0TO29:POKE#800+J*3,RND(64),24-13+RND(26),10+RND(30):NEXT
540 I=I+1:IFI<50GOTO520
550 GOTO10


こうしてLRUN0、LRUN1とすると3D画面もどきが出ます。


スペースキーでワープです。いまはこれしかできません。。。。。メモリ制限がきついです。

C言語ソースは以下の通りです。これをIJBIN2POKEにかけると最初のPOKE文ができます。
これでほぼ256BYTE,プログラマブルキャラクタ領域を一杯に使っています。
キー操作による上下左右スクロールを入れたいのですが、今のところ入る場所が有りません。
マシン語領域を分割するしかないのかな?

#include
#define VRAM_ADR 0x900
#define WORK_ADR 0x800

uint16_t stars(uint16_t c, uint8_t* m_p, uint8_t* f_p)
{
int16_t x,y,v,w,z,x0,y0,z0,i,j,k;
uint8_t* w_p = m_p + WORK_ADR;
uint8_t* v_p = m_p + VRAM_ADR;

//***** ERASE/MOVE/DISP STARS ************
for (i=0;i<29;i++) {
j=i*3;
x=w_p[j];y=w_p[j+1];z0=w_p[j+2];
x0=( (z0*(x-32)) >> 5)+32;
y0=( (z0*(y-24)) >> 4) + 24;
w=(y0/2)*32+(x0/2);
z= 1 <<( (x0&1)+((y0&1)<<1)) ;
k= v_p[w] | 0x80;
if ( (v_p[w]>=0x80) ||(v_p[w]==0) ) {
if (c==1) {
v_p [w]= k & (0x0f - z) ;
}
if (c==2) {
v_p [w]= k | z ;
}
}
if (c>=3) {
z0+=3;if (z0>32) {z0=10;}
w_p[j+2] = z0;
}
}
return 0;
}


とりあえず今回の休みはここまで。

次はいつできるか不明です。
2016.06.19 Sun l ICHIGOJAM l コメント (0) l top

コメント

コメントの投稿












上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。