1
0
mirror of https://github.com/catseye/SixtyPical.git synced 2024-07-10 00:28:59 +00:00
SixtyPical/eg/game.60p
Cat's Eye Technologies af7d65ee09 Fix example programs; allow externals to be called.
--HG--
rename : eg/hi.60p => eg/hello-world.60p
2014-04-12 19:13:13 +01:00

166 lines
2.8 KiB
Plaintext

assign byte[256] screen $0400
assign byte[256] screen2 1274
assign byte[256] screen3 1524
assign byte[256] screen4 1774
assign byte[256] colormap 55296
assign byte[256] colormap2 55546
assign byte[256] colormap3 55796
assign byte[256] colormap4 56046
assign byte vic_border 53280
assign byte[4] vic_bg 53281
assign byte joy2 $dc00
assign vector cinv 788
/* --------- */
reserve vector save_cinv
assign word position $fb
assign word new_position $fd
reserve word delta
reserve byte value
reserve word compare_target
routine reset_position {
copy #$0400 position
}
routine advance_pos {
clc
lda <position
adc <delta
sta <new_position
lda >position
adc >delta
sta >new_position
}
routine install_new_position {
copy new_position position
}
routine compare_new_pos {
lda >new_position
cmp >compare_target
if beq {
lda <new_position
cmp <compare_target
} else {
}
}
routine check_new_position_in_bounds {
copy #$07e8 compare_target // just past bottom of screen
jsr compare_new_pos
if bcs {
clc
} else {
copy #$0400 compare_target
jsr compare_new_pos
if bcc {
clc
} else {
sec
}
}
}
routine clear_screen {
ldy #0
repeat bne {
lda #1
sta colormap, y
sta colormap2, y
sta colormap3, y
sta colormap4, y
lda #32
sta screen, y
sta screen2, y
sta screen3, y
sta screen4, y
iny
cpy #250
}
}
routine read_stick {
lda #0
sta <delta
sta >delta
ldx joy2
txa
and #1 // up
if beq {
lda #216 // -40
sta <delta
lda #255
sta >delta
} else {
txa
and #2 // down
if beq {
lda #40
sta <delta
} else {
txa
and #4 // left
if beq {
lda #255 // -1
sta <delta
lda #255
sta >delta
} else {
txa
and #8 // right
if beq {
lda #1
sta <delta
} else { }
}
}
}
}
routine our_cinv {
lda #32
ldy #0
sta (position), y
jsr read_stick
jsr advance_pos
jsr check_new_position_in_bounds
if bcs {
jsr install_new_position
} else { }
lda #81
ldy #0
sta (position), y
jmp (save_cinv)
}
routine main {
lda #5
sta vic_border
lda #0
sta vic_bg
jsr reset_position
jsr clear_screen
with sei {
copy cinv save_cinv
copy routine our_cinv to cinv
}
clc
repeat bcc { }
}