506 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			506 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
%include macros/gigatron.i
 | 
						|
 | 
						|
 | 
						|
; ===========================================
 | 
						|
; FROG STROLL
 | 
						|
; ===========================================
 | 
						|
 | 
						|
; --- mem layout ---
 | 
						|
vars            EQU     0x0030
 | 
						|
consts          EQU     0x0082                  ; skip 0x80 - reserved!!
 | 
						|
data            EQU     0x0300
 | 
						|
tiles           EQU     0x5C00                  ; after loader app mem.
 | 
						|
entry_point     EQU     0x0200
 | 
						|
subroutines0    EQU     0x0400
 | 
						|
subroutines1    EQU     0x0500
 | 
						|
subroutines2    EQU     0x0600
 | 
						|
 | 
						|
scratch         EQU     vars + 0x00
 | 
						|
scratch2        EQU     vars + 0x02
 | 
						|
x0              EQU     vars + 0x04
 | 
						|
y0              EQU     vars + 0x05
 | 
						|
xy0             EQU     x0
 | 
						|
 | 
						|
tile0           EQU     vars + 0x06
 | 
						|
tile1           EQU     vars + 0x08
 | 
						|
tile2           EQU     vars + 0x0A
 | 
						|
tileslice0      EQU     vars + 0x0C
 | 
						|
tileslice1      EQU     vars + 0x0D
 | 
						|
tileslice2      EQU     vars + 0x0E
 | 
						|
 | 
						|
wave_line       EQU     vars + 0x10
 | 
						|
wave_anim       EQU     vars + 0x12
 | 
						|
 | 
						|
frog_x          EQU     vars + 0x14
 | 
						|
frog_y          EQU     vars + 0x16
 | 
						|
frog_xy         EQU     vars + 0x18
 | 
						|
frog_speedx     EQU     vars + 0x1A
 | 
						|
frog_speedy     EQU     vars + 0x1C
 | 
						|
 | 
						|
new_x0          EQU     vars + 0x1E
 | 
						|
 | 
						|
vb_PrevFrame    EQU     vars + 0x20
 | 
						|
 | 
						|
_dw_a           EQU     vars + 0x28
 | 
						|
_dw_b           EQU     vars + 0x2A
 | 
						|
 | 
						|
_dt_data        EQU     vars + 0x28
 | 
						|
 | 
						|
pattern0        EQU     0x1005	' 2 pix ligne 1
 | 
						|
pattern1        EQU     0x0510  ' 2 pix ligne 2
 | 
						|
buttonRight     EQU     1
 | 
						|
buttonLeft      EQU     2
 | 
						|
buttonDown      EQU     4
 | 
						|
buttonUp        EQU     8
 | 
						|
buttonStart     EQU     16
 | 
						|
buttonSelect    EQU     32
 | 
						|
buttonB         EQU     64
 | 
						|
buttonA         EQU     128
 | 
						|
 | 
						|
cst_videoTable  EQU     consts
 | 
						|
cst_videoTable  DW      $100                    ; giga_videoTable-1
 | 
						|
cst_xscroll     DW      $101+10*2
 | 
						|
cst_0404        DW      $0404
 | 
						|
cst_0410        DW      $0410
 | 
						|
cst_1004        DW      $1004
 | 
						|
cst_0504        DW      $0504
 | 
						|
cst_0405        DW      $0405
 | 
						|
cst_0505        DW      $0505
 | 
						|
 | 
						|
pattern         EQU     data
 | 
						|
pattern         DB      1 2 3
 | 
						|
persp_table     DB      1 3 5 8 10 12 14 15 17 19 21 23 24 26 28 29 31 33 34 36 37      ; = 60-(120*(40-x)/(80+x))  (with 80 = 120*40/60)
 | 
						|
                DB      38 40 41 43 44 45 46 48 49 50 51 52 54 55 56 57 58 59 60
 | 
						|
wave_table      DB      1 1 0 0 255 255 0 0
 | 
						|
;wave_table     DB      1 1 0 0 255 255 0 0     ; 1. without skew
 | 
						|
;wave_table     DB      2 2 1 255 254 254 255 1 ; 3. without skew
 | 
						|
 | 
						|
 | 
						|
entry_point     LDI     0
 | 
						|
 | 
						|
;               BRA     mirror_done
 | 
						|
 | 
						|
                STW     y0
 | 
						|
mirror_loop     LD      y0
 | 
						|
                SUBI    40
 | 
						|
                BEQ     mirror_done
 | 
						|
                LDWI    0x0100+75*2
 | 
						|
                ADDW    y0
 | 
						|
                ADDW    y0
 | 
						|
                STW     scratch
 | 
						|
                LDWI    persp_table
 | 
						|
                ADDW    y0
 | 
						|
                PEEK
 | 
						|
                STW     scratch2
 | 
						|
                LDI     0x08+75
 | 
						|
                SUBW    scratch2
 | 
						|
                POKE    scratch
 | 
						|
                INC     y0
 | 
						|
                BRA     mirror_loop
 | 
						|
 | 
						|
mirror_done     LDWI    tile_clearsky
 | 
						|
                STW     tile0
 | 
						|
                STW     tile1
 | 
						|
                LDWI    tile_ground
 | 
						|
                STW     tile2
 | 
						|
                LDI     -1
 | 
						|
                ST      tileslice2
 | 
						|
                ST      tileslice1
 | 
						|
                LDI     6               ; unalign the clouds
 | 
						|
                ST      tileslice0
 | 
						|
 | 
						|
                LDI     0
 | 
						|
                STW     wave_line
 | 
						|
                STW     wave_anim
 | 
						|
 | 
						|
                LDWI    20*256
 | 
						|
                STW     frog_x
 | 
						|
                LDI     0
 | 
						|
                STW     frog_y
 | 
						|
                STW     xy0
 | 
						|
                STW     frog_speedx
 | 
						|
                STW     frog_speedy
 | 
						|
                LDWI    giga_vram+180
 | 
						|
                STW     frog_xy
 | 
						|
 | 
						|
                LDI     160
 | 
						|
                ST      new_x0
 | 
						|
 | 
						|
mainloop        CALL    waitVBlank
 | 
						|
 | 
						|
                CALL    wavesanim
 | 
						|
 | 
						|
; ==== 0 - 10  scores =====
 | 
						|
 | 
						|
; draw next 2-pixels vertical slice
 | 
						|
next_slice      LDI     0
 | 
						|
                ST      y0
 | 
						|
                LD      new_x0
 | 
						|
                SUBW    x0
 | 
						|
                BEQ     slice_done
 | 
						|
                INC     x0
 | 
						|
                LD      x0
 | 
						|
                ANDI    1
 | 
						|
                BNE     next_slice
 | 
						|
 | 
						|
; ==== 10 - 15  sky =====
 | 
						|
                LDI     0x08+10
 | 
						|
                ST      y0
 | 
						|
                CALL    drawsky
 | 
						|
 | 
						|
; ==== 15-75 2 tiles =====
 | 
						|
                LDI     0x08+15
 | 
						|
                ST      y0
 | 
						|
                CALL    draw3tiles
 | 
						|
 | 
						|
; ==== 75-115 water reflection ====
 | 
						|
 | 
						|
; ==== 115-120 grass ====
 | 
						|
                LDI     0x08+115
 | 
						|
                ST      y0
 | 
						|
                CALL    drawgrass
 | 
						|
 | 
						|
                BRA     next_slice
 | 
						|
 | 
						|
; draw the frog and scroll
 | 
						|
slice_done      LDW     frog_speedy
 | 
						|
                BNE     jumping_restore
 | 
						|
                LDW     frog_xy
 | 
						|
                CALL    frogdown_restore
 | 
						|
                BRA     doinputs
 | 
						|
jumping_restore LDW     frog_xy
 | 
						|
                CALL    frogup_restore
 | 
						|
 | 
						|
doinputs        CALL    applyinputs
 | 
						|
 | 
						|
                LDW     frog_speedy
 | 
						|
                BNE     jumping_draw
 | 
						|
standing_draw   LDW     frog_xy
 | 
						|
                CALL    frogdown_draw
 | 
						|
                BRA     xscroll
 | 
						|
jumping_draw    LDW     frog_xy
 | 
						|
                CALL    frogup_draw
 | 
						|
                CALL    frogup_draw0
 | 
						|
 | 
						|
xscroll         LD      frog_x+1
 | 
						|
                SUBI    20
 | 
						|
                POKE    cst_xscroll
 | 
						|
                ADDI    160
 | 
						|
                ST      new_x0
 | 
						|
 | 
						|
                BRA     mainloop
 | 
						|
 | 
						|
subroutines0	RET
 | 
						|
 | 
						|
waitVBlank      LD      giga_frameCount
 | 
						|
                SUBW    vb_PrevFrame
 | 
						|
                BEQ     waitVBlank
 | 
						|
                LD      giga_frameCount
 | 
						|
                STW     vb_PrevFrame
 | 
						|
                RET
 | 
						|
 | 
						|
wavesanim       PUSH
 | 
						|
                LDI     0x08+75
 | 
						|
                ST      y0
 | 
						|
                INC     wave_line
 | 
						|
                LD      wave_line
 | 
						|
                SUBI    10
 | 
						|
                BLT     wave_ok
 | 
						|
                LDI     0
 | 
						|
                STW     wave_line
 | 
						|
                INC     wave_anim
 | 
						|
wave_ok         LDI     0
 | 
						|
                CALL    drawwaves
 | 
						|
                CALL    drawwaves
 | 
						|
                CALL    drawwaves
 | 
						|
                CALL    drawwaves
 | 
						|
                POP
 | 
						|
                RET
 | 
						|
 | 
						|
NextRandomTile  STW     scratch
 | 
						|
                ADDW    giga_rand1
 | 
						|
                ANDi    7
 | 
						|
                LSLW
 | 
						|
                ADDW    scratch
 | 
						|
                DEEK
 | 
						|
                RET
 | 
						|
 | 
						|
drawgrass       LDWI    $1A1A    ; grass
 | 
						|
                DOKE    xy0
 | 
						|
                INC     y0
 | 
						|
                DOKE    xy0
 | 
						|
                INC     y0
 | 
						|
                DOKE    xy0
 | 
						|
                INC     y0
 | 
						|
                DOKE    xy0
 | 
						|
                INC     y0
 | 
						|
                DOKE    xy0
 | 
						|
                INC     y0
 | 
						|
                RET
 | 
						|
 | 
						|
drawtileslice   STW     _dt_data
 | 
						|
                DEEK
 | 
						|
                DOKE    xy0
 | 
						|
                INC     y0
 | 
						|
                INC     _dt_data
 | 
						|
                INC     _dt_data
 | 
						|
                LDW     _dt_data
 | 
						|
                DEEK
 | 
						|
                DOKE    xy0
 | 
						|
                INC     y0
 | 
						|
                INC     _dt_data
 | 
						|
                INC     _dt_data
 | 
						|
                LDW     _dt_data
 | 
						|
                DEEK
 | 
						|
                DOKE    xy0
 | 
						|
                INC     y0
 | 
						|
                INC     _dt_data
 | 
						|
                INC     _dt_data
 | 
						|
                LDW     _dt_data
 | 
						|
                DEEK
 | 
						|
                DOKE    xy0
 | 
						|
                INC     y0
 | 
						|
                INC     _dt_data
 | 
						|
                INC     _dt_data
 | 
						|
                LDW     _dt_data
 | 
						|
                DEEK
 | 
						|
                DOKE    xy0
 | 
						|
                INC     y0
 | 
						|
                INC     _dt_data
 | 
						|
                INC     _dt_data
 | 
						|
                LDW     _dt_data
 | 
						|
                DEEK
 | 
						|
                DOKE    xy0
 | 
						|
                INC     y0
 | 
						|
                INC     _dt_data
 | 
						|
                INC     _dt_data
 | 
						|
                LDW     _dt_data
 | 
						|
                DEEK
 | 
						|
                DOKE    xy0
 | 
						|
                INC     y0
 | 
						|
                INC     _dt_data
 | 
						|
                INC     _dt_data
 | 
						|
                LDW     _dt_data
 | 
						|
                DEEK
 | 
						|
                DOKE    xy0
 | 
						|
                INC     y0
 | 
						|
                INC     _dt_data
 | 
						|
                INC     _dt_data
 | 
						|
                LDW     _dt_data
 | 
						|
                DEEK
 | 
						|
                DOKE    xy0
 | 
						|
                INC     y0
 | 
						|
                INC     _dt_data
 | 
						|
                INC     _dt_data
 | 
						|
                LDW     _dt_data
 | 
						|
                DEEK
 | 
						|
                DOKE    xy0
 | 
						|
                INC     y0
 | 
						|
                INC     _dt_data
 | 
						|
                INC     _dt_data
 | 
						|
                LDW     _dt_data
 | 
						|
                RET
 | 
						|
 | 
						|
drawsky         LDWI    $3939    ; skycolor
 | 
						|
                DOKE    xy0
 | 
						|
                INC     y0
 | 
						|
                DOKE    xy0
 | 
						|
                INC     y0
 | 
						|
                DOKE    xy0
 | 
						|
                INC     y0
 | 
						|
                DOKE    xy0
 | 
						|
                INC     y0
 | 
						|
                DOKE    xy0
 | 
						|
                INC     y0
 | 
						|
                RET
 | 
						|
 | 
						|
subroutines1    RET
 | 
						|
 | 
						|
draw3tiles      PUSH
 | 
						|
; tile0
 | 
						|
; DrawTile tileslice0 tile0 _tile0a _tile0b tile_cloud
 | 
						|
                LD      tileslice0
 | 
						|
                SUBI    5
 | 
						|
                BLT     _tile0b
 | 
						|
                BEQ     _tile0a
 | 
						|
                SUBI    4
 | 
						|
                BLT     _tile0b
 | 
						|
                LDWI    randomtile0
 | 
						|
                CALL    NextRandomTile
 | 
						|
                STW     tile0
 | 
						|
                LDI     $FF
 | 
						|
                ST      tileslice0
 | 
						|
                BRA     _tile0b
 | 
						|
_tile0a         LD      tile0
 | 
						|
                ADDI    16 ;256-(20*12)
 | 
						|
                ST      tile0
 | 
						|
                INC     tile0+1
 | 
						|
_tile0b         INC     tileslice0
 | 
						|
                LDW     tile0
 | 
						|
                CALL    drawtileslice
 | 
						|
                CALL    drawtileslice
 | 
						|
                STW     tile0
 | 
						|
 | 
						|
 | 
						|
; tile1
 | 
						|
; DrawTile tileslice1 tile1 _tile1a _tile1b tile_cloud
 | 
						|
                LD      tileslice1
 | 
						|
                SUBI    5
 | 
						|
                BLT     _tile1b
 | 
						|
                BEQ     _tile1a
 | 
						|
                SUBI    4
 | 
						|
                BLT     _tile1b
 | 
						|
                LDWI    randomtile1
 | 
						|
                CALL    NextRandomTile
 | 
						|
                STW     tile1
 | 
						|
                LDI     $FF
 | 
						|
                ST      tileslice1
 | 
						|
                BRA     _tile1b
 | 
						|
_tile1a         LD      tile1
 | 
						|
                ADDI    16 ;256-(20*12)
 | 
						|
                ST      tile1
 | 
						|
                INC     tile1+1
 | 
						|
_tile1b         INC     tileslice1
 | 
						|
                LDW     tile1
 | 
						|
                CALL    drawtileslice
 | 
						|
                CALL    drawtileslice
 | 
						|
                STW     tile1
 | 
						|
 | 
						|
 | 
						|
; tile2
 | 
						|
; DrawTile tileslice2 tile2 _tile2a _tile2b tile_cloud
 | 
						|
                LD      tileslice2
 | 
						|
                SUBI    5
 | 
						|
                BLT     _tile2b
 | 
						|
                BEQ     _tile2a
 | 
						|
                SUBI    4
 | 
						|
                BLT     _tile2b
 | 
						|
                LDWI    tile_ground
 | 
						|
                STW     tile2
 | 
						|
                LDI     $FF
 | 
						|
                ST      tileslice2
 | 
						|
                BRA     _tile2b
 | 
						|
_tile2a         LD      tile2
 | 
						|
                ADDI    16 ;256-(20*12)
 | 
						|
                ST      tile2
 | 
						|
                INC     tile2+1
 | 
						|
_tile2b         INC     tileslice2
 | 
						|
                LDW     tile2
 | 
						|
                CALL    drawtileslice
 | 
						|
                CALL    drawtileslice
 | 
						|
                STW     tile2
 | 
						|
 | 
						|
                POP
 | 
						|
                RET
 | 
						|
 | 
						|
drawwaves       LD      y0
 | 
						|
                SUBI    0x08
 | 
						|
                ADDW    wave_line
 | 
						|
                STW     scratch
 | 
						|
                ADDW    wave_anim
 | 
						|
                ANDI    7
 | 
						|
                STW     scratch2
 | 
						|
                LDWI    0x0100+1
 | 
						|
                ADDW    scratch
 | 
						|
                ADDW    scratch
 | 
						|
                STW     scratch
 | 
						|
                LDWI    wave_table
 | 
						|
                ADDW    scratch2
 | 
						|
                PEEK
 | 
						|
                STW     _dw_a
 | 
						|
                LDW     scratch
 | 
						|
                PEEK
 | 
						|
                SUBW    _dw_a
 | 
						|
                STW     _dw_b
 | 
						|
                LDW     _dw_a
 | 
						|
                POKE    scratch
 | 
						|
                INC     scratch
 | 
						|
                INC     scratch
 | 
						|
                LDW     scratch
 | 
						|
                PEEK
 | 
						|
                AddW    _dw_b
 | 
						|
                POKE    scratch
 | 
						|
                LD      y0
 | 
						|
                ADDI    10
 | 
						|
                ST      y0
 | 
						|
                RET
 | 
						|
 | 
						|
subroutines2    RET
 | 
						|
applyinputs     LDW     frog_speedy
 | 
						|
                BNE     _ai_wasmoving
 | 
						|
 | 
						|
_ai_wasstill    LD      giga_buttonState
 | 
						|
                ANDI    buttonA
 | 
						|
                BEQ     _ai_jump
 | 
						|
                LDWI    -50
 | 
						|
                ADDW    frog_speedx
 | 
						|
                BGT     _ai_0
 | 
						|
                LDI     0
 | 
						|
_ai_0           STW     frog_speedx
 | 
						|
                BRA     _ai_move
 | 
						|
_ai_jump        LDWI    -512
 | 
						|
                STW     frog_speedy
 | 
						|
                LDWI    200
 | 
						|
                ADDW    frog_speedx
 | 
						|
 | 
						|
                STW     frog_speedx
 | 
						|
                LDWI    512
 | 
						|
                SUBW    frog_speedx
 | 
						|
                BGT     _ai_move
 | 
						|
                LDWI    512
 | 
						|
                STW     frog_speedx
 | 
						|
                BRA     _ai_move
 | 
						|
 | 
						|
_ai_wasmoving   LD      giga_buttonState
 | 
						|
                ANDI    buttonA
 | 
						|
                BNE     _ai_released
 | 
						|
_ai_pressed     LDWI    20
 | 
						|
                BRA     _ai_accely
 | 
						|
_ai_released    LDWI    100
 | 
						|
_ai_accely      ADDW    frog_speedy
 | 
						|
                STW     frog_speedy
 | 
						|
 | 
						|
_ai_move        LDW     frog_x
 | 
						|
                ADDW    frog_speedx
 | 
						|
                STW     frog_x
 | 
						|
 | 
						|
                LDW     frog_y
 | 
						|
                ADDW    frog_speedy
 | 
						|
                STW     frog_y
 | 
						|
                BLT     _ai_xy
 | 
						|
                LDI     0
 | 
						|
                STW     frog_y
 | 
						|
                STW     frog_speedy
 | 
						|
 | 
						|
_ai_xy          LD      frog_y+1
 | 
						|
                ADDI    0x08+48
 | 
						|
                ST      frog_xy+1
 | 
						|
                LD      frog_x+1
 | 
						|
                ST      frog_xy
 | 
						|
                RET
 | 
						|
 | 
						|
 | 
						|
_startAddress_      EQU     entry_point
 | 
						|
_callTable_         EQU     0x00EE
 | 
						|
_singleStepWatch_   EQU     giga_frameCount
 | 
						|
_cpuUsageAddressA_  EQU     subroutines0
 | 
						|
_cpuUsageAddressB_  EQU     subroutines0+0x10	; waitVBlank
 | 
						|
 | 
						|
tile_box        EQU     tiles
 | 
						|
%include tileset.i
 | 
						|
randomtile0     DW      tile_cloud  tile_clearsky tile_cloud tile_clearsky  tile_clearsky  tile_clearsky tile_clearsky  tile_clearsky
 | 
						|
randomtile1     DW      tile_box  tile_barrier tile_mushrom tile_cactus tile_grass tile_bush tile_clearsky tile_clearsky
 | 
						|
 | 
						|
frogup_bak        EQU   tiles+0x1500
 | 
						|
frogdown_bak      EQU   frogup_bak+50
 | 
						|
frogup_draw       EQU   tiles+0x1600
 | 
						|
frogup_draw0      EQU   tiles+0x1700
 | 
						|
frogup_restore    EQU   tiles+0x1800
 | 
						|
frogdown_draw     EQU   tiles+0x1900
 | 
						|
frogdown_restore  EQU   tiles+0x1A00
 | 
						|
 | 
						|
%include frog_8.i
 | 
						|
 | 
						|
header_image      EQU   giga_vram
 | 
						|
%include headerimg.i
 |