%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