.include common.inc .globl SCROLL .globl GND__INIT .globl __scroll_speed_flag .even *-------------------- SCROLL *() sSUPER M , M , @@: sub #1,__GSy BSR DRAW_GR * BSR PUT_BG ~no_y_scroll__SCROLL: m , lea _CRTC_GS0_SCx,a0 move.l __GSxy,(a0)+ move.l __GSxy,(a0)+ * move.l __GSxy,(a0)+ * move.l __GSxy,(a0)+ sUSER RTS () *--------------------- DRAW_GR *() M , BSR READ_地形CODE *() move #$10,__16dot_ctr move #$A,__BACKを10回に分けて描くCOUNTER *6回は休み M , move #$20,__GND2関係 PUSH D0/A0 lea __地形table&,a0 m , , IFn NE, , move D0,__area2 m , , sub.l #$a0000,a0 add.l #__地形table&,a0 m , POP D0/A0 @@; M , PUSH D0-D1/A0-A1 m , m , m , m , M , m , IFn CC, , move.l A0,__gr_pointer @@; POP D0-D1/A0-A1 EXIT__DRAW_GR RTS () *-- SUB__DRAW_GR *( A0:__gr_pointer , A1 ) 85AB4 move (A1)+,D1 m , , , m , BSR DRAW_GR_16×16DOT RTS ( a1 ) *-- DRAW_GR_16×16DOT *( A0:__gr_pointer , D0 , D1 ) 85D7E PUSH D0-D1/A0-A1 m , , , lsl.b #4,D1 REPT 16 m , , ENDM REPT 15 add.l #$3E0,A0 REPT 16 m , , ENDM ENDM *計16*16 POP D0-D1/A0-A1 RTS *------------------ READ_地形CODE *() PUSH D0-D2/A0-A1 m , , ~LOOP__READ_地形CODE @@ move (A1)+,D0 M , M , move D0,(A0)+ dbF D1,@B BRA EXIT__READ_地形CODE @@: lsr #2,D0 * 最下位bitが1の時 move (A1)+,D2 @@ move D2,(A0)+ * loop{ M , *  dbF代わり&break M , * } BRA ~LOOP__READ_地形CODE ~FLAG_ON__READ_地形CODE; * 第一bitが1の時 M , move #-1,__no_縦scroll_flag BRA ~LOOP__READ_地形CODE *   continue @@: move #-1,__on_the_GND_flag * addq.w #1,$86688 BRA ~LOOP__READ_地形CODE *   continue *~} EXIT__READ_地形CODE move.l #__buf_地形code,__地形code_buf内のpointer move.l A1,__ptr_地形table POP D0-D2/A0-A1 RTS *----------------- GND__INIT sSUPER lea _CRTC_GS0_SCx,A1 * move.l #$200100,D0 *032,256 move.l #((_offset_x-16)<<16)+(_offset_y+128),d0 m , m , move.l D0,__GSxy lea __地形table&,A0 m , <*move __area2,D0> *初期化時に0にされて…… m , , sub.l #$a0000,a1 add.l #__地形table&,a1 lea $C7C000,A0 move #$10,D7 ~LOOP1__GND__INIT: move #$13,D6 ~~LOOP2_GND__INIT: move (A1)+,D1 M , *continue M , *別の内容のLOOPへ m , dbF D6,~~LOOP2_GND__INIT sub.l #$4280,A0 dbF D7,~LOOP1__GND__INIT BRA EXIT__GND__INIT *break L85B2E m , , move (A1)+,D1 @@ m , M , *break dbF D5,@B BRA.s ~~LOOP2_GND__INIT L85B48 sub.l #$4280,A0 dbF D7,~LOOP1__GND__INIT * BRA EXIT__GND__INIT EXIT__GND__INIT m , move.l A0,__gr_pointer move #$A,__BACKを10回に分けて描くCOUNTER move #$10,__16dot_ctr move.b #$F,__GND2関係 sUSER RTS *-- SUB__GND__INIT *85B7E move D1,-(A7) m , , , m , BSR DRAW_GR_16×16DOT move (A7)+,D1 RTS *--------------------- .bss __BACKを10回に分けて描くCOUNTER .ds.w 1 __地形code_buf内のpointer .ds.l 1 __ptr_地形table .ds.l 1 __buf_地形code .ds.w $14 __GND2関係 .ds.w 1 __GSxy: __GSx .ds.w 1 __GSy .ds.w 1 __scroll_speed_flag .ds.w 1 .data __gr_pointer .dc.l $C7C000 *G_PAGE1の半分の所 __GNDy .dc.w $100 __16dot_ctr .dc.w 1 __area2 .dc.w 0