07/04/15 11:35:47
べーしっ君だとプログラムを組むのに限界がある上に、
作ったソフトを配布するなら相手もべーしっ君を持っていないといけないので、
機会があれば機械語に是非挑戦してもらいたいものだけど。
Z80はシンプルなので、考え方は難しくない。
PCG定義など時間のかかる処理を一部機械語に任せるだけでも劇的に違う。
10 DEFINT A-Z:SCREEN 1,2,0:KEY OFF:WIDTH 32
20 SPRITE$(0)=STRING$(32,255)
30 PUTSPRITE 0,(100,100),15,0
40 GOSUB 1000
100 A=USR(0):GOTO 100
1000 '
1010 FOR I=0 TO &H75
1020 READ A$
1030 POKE &HD000+I,VAL("&H"+A$)
1040 NEXT
1050 DEFUSR=&HD000
1060 RETURN
1070 DATA 3e,00,cd,d5,00,47,3e,01, c5,cd,d5,00,c1,80,47,21
1080 DATA 64,d0,7d,80,6f,7e,4f,21, 00,1b,cd,4a,00,81,57,79
1090 DATA fe,02,20,07,7a,fe,b0,28, 10,18,0a,79,fe,fe,20,09
1100 DATA 7a,fe,fe,28,04,7a,cd,4d, 00,21,6d,d0,7d,80,6f,7e
1110 DATA 4f,21,01,1b,cd,4a,00,81, 57,79,fe,02,20,07,7a,fe
1120 DATA f2,28,10,18,0a,79,fe,fe, 20,09,7a,fe,fe,28,04,7a
1130 DATA cd,4d,00,c9,00,fe,fe,00, 02,02,02,00,fe,00,00,02
1140 DATA 02,02,00,fe,fe,fe
>>461のプログラムのスティック判断部分・移動部分・画面外に行かないように
判定する部分・スプライト表示部分を機械語化すると、こうなる。
この例では1回1回ベーシックに戻っているが、完全機械語化すると
爆速過ぎて、60分の1秒ごとに動くようにウエイトを掛けなければいけない。