1
0
mirror of https://github.com/catseye/SixtyPical.git synced 2024-11-29 18:49:22 +00:00

Give the "game" a "title screen" of sorts; click to begin.

This commit is contained in:
Chris Pressey 2017-12-12 10:58:59 +00:00
parent b3d2d0bfcf
commit 5e8f41307d
2 changed files with 65 additions and 24 deletions

View File

@ -46,10 +46,15 @@ Finish the little demo "game" where you can move a block around the screen with
the joystick (i.e. bring it up to par with the original demo game that was written the joystick (i.e. bring it up to par with the original demo game that was written
for SixtyPical) for SixtyPical)
### Self-reference in signatures ### `call` routines that are defined further down in the source code
A vector might store [the address of] a routine which changes the vector. Thus its We might have a graph of states that refer to each other and that want to `goto`
signature might look like `vector foo outputs foo`. Thus we need to support that. each other. Thus we need this. We have it for vectors, but we need it for `call`.
### Allow branches to diverge in what they touch
For example, if the routine inputs and outputs `foo`, and one branch of an `if`
sets `foo` and the other does not touch it, that should be OK.
### `vector table` type ### `vector table` type

View File

@ -3,7 +3,7 @@
// **************************** // ****************************
// ---------------------------------------------------------------- // ----------------------------------------------------------------
// Global Variables and System Locations // System Locations
// ---------------------------------------------------------------- // ----------------------------------------------------------------
byte vic_border @ 53280 byte vic_border @ 53280
@ -22,17 +22,22 @@ byte table colormap4 @ 56046
buffer[2048] screen @ 1024 buffer[2048] screen @ 1024
byte joy2 @ $dc00 byte joy2 @ $dc00
// ----------------------------------------------------------------
// Global Variables
// ----------------------------------------------------------------
pointer ptr @ 254 pointer ptr @ 254
word pos word pos
word delta word delta
byte button_down : 0 // effectively static-local to check_button
// //
// Points to the routine that implements the current game state. // Points to the routine that implements the current game state.
// //
vector dispatch_game_state vector dispatch_game_state
inputs joy2, pos inputs joy2, pos, button_down, dispatch_game_state
outputs delta, pos, screen, screen1, dispatch_game_state outputs delta, pos, screen, screen1, button_down, dispatch_game_state
trashes a, x, y, c, z, n, v, ptr trashes a, x, y, c, z, n, v, ptr
// //
@ -48,17 +53,16 @@ vector dispatch_game_state
// //
vector cinv vector cinv
inputs joy2, pos inputs joy2, pos, button_down, dispatch_game_state
outputs delta, pos, dispatch_game_state, screen, screen1 outputs delta, pos, screen, screen1, button_down, dispatch_game_state
trashes a, x, y, c, z, n, v, ptr trashes a, x, y, c, z, n, v, ptr
@ 788 @ 788
vector save_cinv vector save_cinv
inputs joy2, pos inputs joy2, pos, button_down, dispatch_game_state
outputs delta, pos, dispatch_game_state, screen, screen1 outputs delta, pos, screen, screen1, button_down, dispatch_game_state
trashes a, x, y, c, z, n, v, ptr trashes a, x, y, c, z, n, v, ptr
// ---------------------------------------------------------------- // ----------------------------------------------------------------
// Utility Routines // Utility Routines
// ---------------------------------------------------------------- // ----------------------------------------------------------------
@ -96,6 +100,37 @@ routine read_stick
} }
} }
// You can repeatedly (i.e. as part of actor logic or an IRQ handler)
// call this routine.
// Upon return, if carry is set, the button was pressed then released.
routine check_button
inputs joy2, button_down
outputs c, button_down
trashes a, z, n
{
ld a, button_down
if z {
ld a, joy2
and a, $10
if z {
ld a, 1
st a, button_down
}
st off, c
} else {
ld a, joy2
and a, $10
if not z {
ld a, 0
st a, button_down
st on, c
} else {
st off, c
}
}
}
routine clear_screen routine clear_screen
outputs screen1, screen2, screen3, screen4, colormap1, colormap2, colormap3, colormap4 outputs screen1, screen2, screen3, screen4, colormap1, colormap2, colormap3, colormap4
trashes a, y, c, n, z trashes a, y, c, n, z
@ -128,8 +163,8 @@ routine clear_screen
// //
routine game_state_play routine game_state_play
inputs joy2, pos inputs joy2, pos, button_down, dispatch_game_state
outputs delta, pos, dispatch_game_state, screen, screen1 outputs delta, pos, screen, screen1, button_down, dispatch_game_state
trashes a, x, y, c, z, n, v, ptr trashes a, x, y, c, z, n, v, ptr
{ {
call read_stick call read_stick
@ -148,27 +183,28 @@ routine game_state_play
} }
routine game_state_title_screen routine game_state_title_screen
inputs joy2, pos inputs joy2, pos, button_down, dispatch_game_state
outputs delta, pos, screen, screen1, dispatch_game_state outputs delta, pos, screen, screen1, button_down, dispatch_game_state
trashes a, x, y, c, z, n, v, ptr trashes a, x, y, c, z, n, v, ptr
{ {
ld y, 0 ld y, 10
repeat { repeat {
ld a, 82 ld a, 90
st a, screen1 + y st a, screen1 + y
inc y inc y
cmp y, 18 cmp y, 20
} until not z } until z
st off, c st off, c
// jsr check_button call check_button
if c { if c {
// call clear_screen // call clear_screen
// jsr init_game // call init_game
copy game_state_play, dispatch_game_state copy game_state_play, dispatch_game_state
} else { } else {
copy game_state_play, dispatch_game_state // This is sort of a hack. FIXME: let `if` branches diverge this much.
copy dispatch_game_state, dispatch_game_state
} }
goto save_cinv goto save_cinv
@ -179,8 +215,8 @@ routine game_state_title_screen
// ************************* // *************************
routine our_cinv routine our_cinv
inputs joy2, pos inputs joy2, pos, button_down, dispatch_game_state
outputs delta, pos, dispatch_game_state, screen, screen1 outputs delta, pos, screen, screen1, button_down, dispatch_game_state
trashes a, x, y, c, z, n, v, ptr trashes a, x, y, c, z, n, v, ptr
{ {
goto dispatch_game_state goto dispatch_game_state