diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..052fd31 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +main.asm +*.prg +*.sym +sprites.bin diff --git a/main.ras b/main.ras new file mode 100644 index 0000000..100a3e8 --- /dev/null +++ b/main.ras @@ -0,0 +1,94 @@ +program MyProgram; +var + index: byte; + // sprite_x is an integer since x values range between 0 and 320 + sprite_x : integer = 160; + sprite_y : byte = 100; + // joystick_dir is used to display either left or right-pointing sprite + joystick_dir : byte; + // sprite location is where we keep the sprite in the memory. + // also used for setspriteloc that needs this value divided by 64 + @define spriteLoc $2000 + // In this tuturial, we use sprite "0" as the default one + @define useSprite 0 + // Use joystick port 2 + @define joystickPort 2 + @define useBank 0 + // Include the sprite binary file. The original + // image is located under sprites/sprites.flf + + sprites:incbin("sprites.bin", @spriteLoc); + +// This method initializes the screen +procedure InitScreen(); +begin + screen_bg_col:=purple; + screen_fg_col:=black; + clearscreen(key_space, screen_char_loc); + moveto(1,23,hi(screen_char_loc)); + printstring("JOYSTICK IN PORT 2 TO MOVE",0,40); +end; + +// This method initializes the sprites +procedure InitSprites(); +begin + // Set all sprites to be multicolor + //sprite_multicolor:=$ff; + // Set common sprite multicolor #1 + //sprite_multicolor_reg1:=green; + // Set common sprite multicolor #2 + //sprite_multicolor_reg2:=white; + // Set sprite "0" individual color value + sprite_color[@useSprite]:=light_red; + // Turn on sprite 0 (or @useSprite) + togglebit(sprite_bitmask,@useSprite,1); +end; + +// This method is called one time per raster cycle +procedure UpdateSprite(); +begin + // Update sprite position based on joystick values + sprite_x:=sprite_x + joystickright - joystickleft; + sprite_y:=sprite_y + joystickdown - joystickup; + // Update the sprite position on screen for sprite number @useSprite + SpritePos(sprite_x, sprite_y, @useSprite); + + // Set left/right offset pointer for sprite + if (joystickright) then + joystick_dir := 1; + if (joystickleft) then + joystick_dir := 0; + + // Set the sprite pointer to point to the sprite data + direction offset + SetSpriteLoc(@useSprite, @spriteLoc/64 + joystick_dir, @useBank); + + // If any movement is detected, play a random sound + if ((joystickright+joystickleft) or (joystickup+joystickdown)) then + PlaySound(sid_channel1, + 13, // Volume + 20+Random()/16, // Hi byte frequency + 0*16+0, // Attack voice 1 + 3*16 + 3, // Sustain = 16*15 + release=6 + 1 +sid_saw, // Waveform + sid_saw); // waveform + +end; + +// This interrupt is triggered one time pr raster cycle +interrupt MainRaster(); +begin + startirq(1); + // Update joystick here + Joystick(@joystickPort); + // Update sprites + UpdateSprite(); + closeirq(); +end; + +// Main program +begin + InitScreen(); + InitSprites(); + StartRasterChain(MainRaster(),0,1); + Loop(); +end. diff --git a/sns.trse b/sns.trse new file mode 100644 index 0000000..0b87ec1 --- /dev/null +++ b/sns.trse @@ -0,0 +1,39 @@ +project_path = D:/git/C64/SNS/ +zeropages = ,$02, $04, $08, $16, $0B, $0D, $10, $12, $22, $24, $68 +temp_zeropages = ,$54, $56, $58, $5A +zeropage_screenmemory = $fe +zeropage_decrunch1 = $47 +zeropage_decrunch2 = $48 +zeropage_decrunch3 = $4a +zeropage_decrunch4 = $4b +pascal_settings_use_local_variables = 0 +system = C64 +main_ras_file = main.ras +zeropage_internal1 = $4c +zeropage_internal2 = $4e +zeropage_internal3 = $50 +zeropage_internal4 = $52 +post_optimizer_passlda = 1 +post_optimizer_passjmp = 1 +post_optimizer_passldatax = 1 +post_optimizer_passstalda = 1 +post_optimizer_passldx = 1 +post_optimizer_passcmp = 1 +post_optimizer_passphapla = 1 +machine_state = $35 +border_color = 0 +background_color = 0 +override_target_settings = 0 +override_target_settings_org = $810 +override_target_settings_ignore_sys = 0 +override_target_settings_ignore_prg = 0 +output_debug_symbols = 1 +open_files = ,main.ras +current_file = main.ras +global_defines = , +output_type = prg +d64_paw_file = none +d64_paw_file_disk2 = none +override_target_settings_sys = 0 +override_target_settings_prg = 0 +build_list = , diff --git a/sprites.flf b/sprites.flf new file mode 100644 index 0000000..415d9cd --- /dev/null +++ b/sprites.flf Binary files differ