Merge branch 'master' of https://github.com/deater/dos33fsprogs into master
@ -58,7 +58,9 @@ monkey.o: monkey.s zp.inc hardware.inc common_defines.inc \
|
||||
monkey_actions.s update_bottom.s \
|
||||
guy.brush \
|
||||
monkey_lookout.s monkey_poster.s monkey_dock.s monkey_bar.s \
|
||||
monkey_town.s monkey_map.s
|
||||
monkey_town.s monkey_map.s monkey_church.s monkey_mansion_path.s \
|
||||
monkey_mansion.s monkey_zipline.s \
|
||||
monkey_bar_inside1.s monkey_bar_inside2.s
|
||||
ca65 -o monkey.o monkey.s -l monkey.lst
|
||||
|
||||
graphics/graphics.inc:
|
||||
|
27
monkey/TODO
@ -1,7 +1,28 @@
|
||||
game:
|
||||
+ click on verbs
|
||||
+ actions for all the nouns
|
||||
overall:
|
||||
+ have big/small/tiny guybrush
|
||||
+ better bounds checking on paths
|
||||
|
||||
hook up actions:
|
||||
+ scumm bar1
|
||||
|
||||
animations:
|
||||
+ fire in scumm bar
|
||||
+ impt pirate drinking
|
||||
+ guy on chandelier
|
||||
+ dog?
|
||||
|
||||
hookup rooms:
|
||||
+ church
|
||||
+ path to mansion
|
||||
+ mansion
|
||||
+ voodoo lady
|
||||
|
||||
cutscenes:
|
||||
+ chapter intro
|
||||
+ lechuck
|
||||
|
||||
zipline:
|
||||
+ if you use pole you climb the ladder
|
||||
|
||||
|
||||
bigger changes:
|
||||
|
@ -12,19 +12,17 @@ VERB_PUSH = 7
|
||||
VERB_PULL = 8
|
||||
VERB_WALK = 9
|
||||
|
||||
|
||||
|
||||
;===============================================
|
||||
; level data structure definitions
|
||||
;===============================================
|
||||
|
||||
LOCATION_BACKGROUND=0 ; background
|
||||
LOCATION_WALK_X_LEFT=2
|
||||
LOCATION_WALK_X_RIGHT=3
|
||||
LOCATION_WALK_Y_TOP=4
|
||||
LOCATION_WALK_Y_BOTTOM=5
|
||||
LOCATION_NUM_AREAS=6
|
||||
LOCATION_AREAS=7 ; each area 8 in size
|
||||
LOCATION_DESTINATION = 2
|
||||
LOCATION_EXIT = 4
|
||||
LOCATION_BOUNDS = 6
|
||||
LOCATION_SIZE = 8
|
||||
LOCATION_NUM_AREAS=9
|
||||
LOCATION_AREAS=10 ; each area 8 in size
|
||||
|
||||
|
||||
;================================
|
||||
@ -46,3 +44,9 @@ MONKEY_DOCK = 2
|
||||
MONKEY_BAR = 3
|
||||
MONKEY_TOWN = 4
|
||||
MONKEY_MAP = 5
|
||||
MONKEY_BAR_INSIDE1 = 6
|
||||
MONKEY_BAR_INSIDE2 = 7
|
||||
MONKEY_CHURCH = 8
|
||||
MONKEY_MANSION_PATH = 9
|
||||
MONKEY_MANSION = 10
|
||||
MONKEY_ZIPLINE = 11
|
||||
|
@ -10,7 +10,8 @@ all: graphics.inc
|
||||
|
||||
graphics.inc: \
|
||||
lookout.lzsa poster.lzsa dock.lzsa bar.lzsa town.lzsa map.lzsa \
|
||||
bar_inside1.lzsa bar_inside2.lzsa
|
||||
bar_inside1.lzsa bar_inside2.lzsa zipline.lzsa \
|
||||
church.lzsa mansion.lzsa mansion_path.lzsa
|
||||
echo "lookout_lzsa: .incbin \"lookout.lzsa\"" > graphics.inc
|
||||
echo "poster_lzsa: .incbin \"poster.lzsa\"" >> graphics.inc
|
||||
echo "dock_lzsa: .incbin \"dock.lzsa\"" >> graphics.inc
|
||||
@ -19,6 +20,10 @@ graphics.inc: \
|
||||
echo "map_lzsa: .incbin \"map.lzsa\"" >> graphics.inc
|
||||
echo "bar_inside1_lzsa: .incbin \"bar_inside1.lzsa\"" >> graphics.inc
|
||||
echo "bar_inside2_lzsa: .incbin \"bar_inside2.lzsa\"" >> graphics.inc
|
||||
echo "zipline_lzsa: .incbin \"zipline.lzsa\"" >> graphics.inc
|
||||
echo "church_lzsa: .incbin \"church.lzsa\"" >> graphics.inc
|
||||
echo "mansion_lzsa: .incbin \"mansion.lzsa\"" >> graphics.inc
|
||||
echo "mansion_path_lzsa: .incbin \"mansion_path.lzsa\"" >> graphics.inc
|
||||
|
||||
%.gr: %.png
|
||||
$(PNG2GR) $< $@
|
||||
|
BIN
monkey/graphics/church.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
monkey/graphics/mansion.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
monkey/graphics/mansion_path.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
monkey/graphics/zipline.png
Normal file
After Width: | Height: | Size: 14 KiB |
@ -1,5 +1,5 @@
|
||||
5 HOME
|
||||
10 PRINT "LOADING MONKEY V0.02"
|
||||
10 PRINT "LOADING MONKEY V0.03"
|
||||
20 PRINT:PRINT
|
||||
40 PRINT "CONTROLS: "
|
||||
42 PRINT " MOVE CURSOR : ARROWS OR WASD"
|
||||
|
@ -428,41 +428,8 @@ destination_y_is_positive:
|
||||
and #$FE ; has to be even
|
||||
sta DESTINATION_Y
|
||||
|
||||
|
||||
; FIXME: this should be a jump table
|
||||
lda LOCATION
|
||||
cmp #MONKEY_LOOKOUT
|
||||
beq set_destination_lookout
|
||||
cmp #MONKEY_POSTER
|
||||
beq set_destination_poster
|
||||
cmp #MONKEY_DOCK
|
||||
beq set_destination_dock
|
||||
cmp #MONKEY_BAR
|
||||
beq set_destination_bar
|
||||
cmp #MONKEY_TOWN
|
||||
beq set_destination_town
|
||||
cmp #MONKEY_MAP
|
||||
beq set_destination_map
|
||||
|
||||
set_destination_lookout:
|
||||
jsr lookout_adjust_destination
|
||||
jmp done_set_destination
|
||||
set_destination_poster:
|
||||
jsr poster_adjust_destination
|
||||
jmp done_set_destination
|
||||
set_destination_dock:
|
||||
jsr dock_adjust_destination
|
||||
jmp done_set_destination
|
||||
set_destination_bar:
|
||||
jsr bar_adjust_destination
|
||||
jmp done_set_destination
|
||||
set_destination_town:
|
||||
jsr town_adjust_destination
|
||||
jmp done_set_destination
|
||||
set_destination_map:
|
||||
jsr map_adjust_destination
|
||||
jmp done_set_destination
|
||||
|
||||
set_destination_smc:
|
||||
jsr $0000
|
||||
|
||||
done_set_destination:
|
||||
rts
|
||||
@ -478,10 +445,12 @@ change_location:
|
||||
; reset graphics
|
||||
bit SET_GR
|
||||
|
||||
; reset pointer to not visible, centered
|
||||
; reset pointer to not visible
|
||||
lda #0
|
||||
sta ANIMATE_FRAME
|
||||
sta CURSOR_VISIBLE
|
||||
|
||||
; don't center?
|
||||
; lda #20
|
||||
; sta CURSOR_X
|
||||
; sta CURSOR_Y
|
||||
@ -500,10 +469,39 @@ change_location:
|
||||
sta LOCATION_STRUCT_H
|
||||
|
||||
|
||||
;==========================
|
||||
; update level info
|
||||
|
||||
ldy #LOCATION_DESTINATION
|
||||
lda (LOCATION_STRUCT_L),Y
|
||||
sta set_destination_smc+1
|
||||
iny
|
||||
lda (LOCATION_STRUCT_L),Y
|
||||
sta set_destination_smc+2
|
||||
|
||||
ldy #LOCATION_EXIT
|
||||
lda (LOCATION_STRUCT_L),Y
|
||||
sta check_exit_smc+1
|
||||
iny
|
||||
lda (LOCATION_STRUCT_L),Y
|
||||
sta check_exit_smc+2
|
||||
|
||||
ldy #LOCATION_BOUNDS
|
||||
lda (LOCATION_STRUCT_L),Y
|
||||
sta keep_in_bounds_smc+1
|
||||
iny
|
||||
lda (LOCATION_STRUCT_L),Y
|
||||
sta keep_in_bounds_smc+2
|
||||
|
||||
|
||||
ldy #LOCATION_SIZE
|
||||
lda (LOCATION_STRUCT_L),Y
|
||||
sta GUYBRUSH_SIZE
|
||||
|
||||
;==========================
|
||||
; load new background
|
||||
|
||||
ldy #0
|
||||
ldy #LOCATION_BACKGROUND
|
||||
|
||||
lda (LOCATION_STRUCT_L),Y
|
||||
sta LZSA_SRC_LO
|
||||
|
@ -4,13 +4,17 @@
|
||||
|
||||
locations:
|
||||
.word location0,location1,location2,location3
|
||||
.word location4,location5
|
||||
.word location4,location5,location6,location7
|
||||
.word location8,location9,location10,location11
|
||||
|
||||
|
||||
; MONKEY_LOOKOUT -- lookout tower
|
||||
location0:
|
||||
.word lookout_lzsa ; background
|
||||
.byte 18,40 ; walking range X
|
||||
.byte 16,48 ; walking range Y
|
||||
.word lookout_adjust_destination ; destination
|
||||
.word lookout_check_exit ; exit
|
||||
.word lookout_check_bounds ; bounds check
|
||||
.byte GUYBRUSH_BIG ; size
|
||||
.byte 3 ; num areas
|
||||
|
||||
.byte 12,15 ; x
|
||||
@ -31,8 +35,10 @@ location0:
|
||||
; MONKEY_POSTER -- house with poster
|
||||
location1:
|
||||
.word poster_lzsa ; background
|
||||
.byte 18,40 ; walking range X
|
||||
.byte 16,48 ; walking range Y
|
||||
.word poster_adjust_destination ; destination
|
||||
.word poster_check_exit ; exit
|
||||
.word lookout_check_bounds ; bounds check
|
||||
.byte GUYBRUSH_BIG ; size
|
||||
.byte 2 ; num areas
|
||||
|
||||
.byte 0,5 ; x
|
||||
@ -48,8 +54,10 @@ location1:
|
||||
; MONKEY_DOCK -- dock
|
||||
location2:
|
||||
.word dock_lzsa ; background
|
||||
.byte 18,40 ; walking range X
|
||||
.byte 16,48 ; walking range Y
|
||||
.word dock_adjust_destination ; destination
|
||||
.word dock_check_exit ; exit
|
||||
.word lookout_check_bounds ; bounds check
|
||||
.byte GUYBRUSH_BIG ; size
|
||||
.byte 1 ; num areas
|
||||
|
||||
.byte 12,16 ; x
|
||||
@ -60,20 +68,30 @@ location2:
|
||||
; MONKEY_BAR -- scumm bar
|
||||
location3:
|
||||
.word bar_lzsa ; background
|
||||
.byte 18,40 ; walking range X
|
||||
.byte 16,48 ; walking range Y
|
||||
.byte 1 ; num areas
|
||||
.word bar_adjust_destination ; destination
|
||||
.word bar_check_exit ; exit
|
||||
.word bar_keep_in_bounds ; bounds check
|
||||
.byte GUYBRUSH_BIG ; size
|
||||
.byte 2 ; num areas
|
||||
|
||||
.byte 9,14 ; x
|
||||
.byte 20,32 ; y
|
||||
.word door_string ; name
|
||||
.word door_action-1 ; action
|
||||
|
||||
.byte 36,40 ; x
|
||||
.byte 14,34 ; y
|
||||
.word archway_string ; name
|
||||
.word archway_action-1 ; action
|
||||
|
||||
|
||||
; MONKEY_TOWN -- downtown
|
||||
location4:
|
||||
.word town_lzsa ; background
|
||||
.byte 18,40 ; walking range X
|
||||
.byte 16,48 ; walking range Y
|
||||
.word town_adjust_destination ; destination
|
||||
.word town_check_exit ; exit
|
||||
.word lookout_check_bounds ; bounds check
|
||||
.byte GUYBRUSH_BIG ; size
|
||||
.byte 8 ; num areas
|
||||
|
||||
.byte 33,38 ; x
|
||||
@ -120,8 +138,10 @@ location4:
|
||||
; MONKEY_MAP -- melee map
|
||||
location5:
|
||||
.word map_lzsa ; background
|
||||
.byte 18,40 ; walking range X
|
||||
.byte 16,48 ; walking range Y
|
||||
.word map_adjust_destination ; destination
|
||||
.word map_check_exit ; exit
|
||||
.word lookout_check_bounds ; bounds check
|
||||
.byte GUYBRUSH_TINY ; size
|
||||
.byte 7 ; num areas
|
||||
|
||||
.byte 32,33 ; x
|
||||
@ -159,7 +179,170 @@ location5:
|
||||
.word village_string ; name
|
||||
.word map_action-1 ; action
|
||||
|
||||
string_data:
|
||||
|
||||
; MONKEY_BAR_INSIDE1 -- inside bar, lots going on
|
||||
location6:
|
||||
.word bar_inside1_lzsa ; background
|
||||
.word bar_inside1_adjust_destination ; destination
|
||||
.word bar_inside1_check_exit ; exit
|
||||
.word lookout_check_bounds ; bounds check
|
||||
.byte GUYBRUSH_BIG ; size
|
||||
.byte 7 ; num areas
|
||||
|
||||
.byte 0,10 ; x
|
||||
.byte 34,40 ; y
|
||||
.word pirate_string ; name
|
||||
.word bar1_pirate_action-1 ; action
|
||||
|
||||
.byte 4,9 ; x
|
||||
.byte 16,32 ; y
|
||||
.word door_string ; name
|
||||
.word bar1_door_action-1 ; action
|
||||
|
||||
.byte 10,15 ; x
|
||||
.byte 22,32 ; y
|
||||
.word pirate_string ; name
|
||||
.word bar1_pirate_action-1 ; action
|
||||
|
||||
.byte 16,20 ; x
|
||||
.byte 22,34 ; y
|
||||
.word pirates_string ; name
|
||||
.word bar1_pirate_action-1 ; action
|
||||
|
||||
.byte 21,35 ; x
|
||||
.byte 22,38 ; y
|
||||
.word pirate_string ; name
|
||||
.word bar1_pirate_action-1 ; action
|
||||
|
||||
.byte 37,40 ; x
|
||||
.byte 14,30 ; y
|
||||
.word curtain_string ; name
|
||||
.word curtain_action-1 ; action
|
||||
|
||||
.byte 35,40 ; x
|
||||
.byte 30,38 ; y
|
||||
.word dog_string ; name
|
||||
.word bar1_dog_action-1 ; action
|
||||
|
||||
|
||||
|
||||
|
||||
; MONKEY_BAR_INSIDE2 -- three pirates
|
||||
location7:
|
||||
.word bar_inside2_lzsa ; background
|
||||
.word bar_inside2_adjust_destination ; destination
|
||||
.word bar_inside2_check_exit ; exit
|
||||
.word bar_inside2_check_bounds ; bounds check
|
||||
.byte GUYBRUSH_BIG ; size
|
||||
.byte 4 ; num areas
|
||||
|
||||
.byte 0,3 ; x
|
||||
.byte 12,34 ; y
|
||||
.word curtain_string ; name
|
||||
.word curtain_action-1 ; action
|
||||
|
||||
.byte 7,20 ; x
|
||||
.byte 22,32 ; y
|
||||
.word impt_pirate_string ; name
|
||||
.word impt_pirate_action-1 ; action
|
||||
|
||||
.byte 23,28 ; x
|
||||
.byte 20,28 ; y
|
||||
.word fireplace_string ; name
|
||||
.word fireplace_action-1 ; action
|
||||
|
||||
.byte 34,38 ; x
|
||||
.byte 18,36 ; y
|
||||
.word door_string ; name
|
||||
.word bar2_door_action-1 ; action
|
||||
|
||||
; MONKEY_CHURCH -- outside the church
|
||||
location8:
|
||||
.word church_lzsa ; background
|
||||
.word church_adjust_destination ; destination
|
||||
.word church_check_exit ; exit
|
||||
.word lookout_check_bounds ; bounds check
|
||||
.byte GUYBRUSH_BIG ; size
|
||||
.byte 1 ; num areas
|
||||
|
||||
.byte 9,14 ; x
|
||||
.byte 20,32 ; y
|
||||
.word door_string ; name
|
||||
.word door_action-1 ; action
|
||||
|
||||
; MONKEY_MANSION_PATH -- path to the mansion
|
||||
location9:
|
||||
.word mansion_path_lzsa ; background
|
||||
.word mansion_path_adjust_destination ; destination
|
||||
.word mansion_path_check_exit ; exit
|
||||
.word lookout_check_bounds ; bounds check
|
||||
.byte GUYBRUSH_BIG ; size
|
||||
.byte 1 ; num areas
|
||||
|
||||
.byte 9,14 ; x
|
||||
.byte 20,32 ; y
|
||||
.word door_string ; name
|
||||
.word door_action-1 ; action
|
||||
|
||||
; MONKEY_MANSION -- governor's mansion
|
||||
location10:
|
||||
.word mansion_lzsa ; background
|
||||
.word mansion_adjust_destination ; destination
|
||||
.word mansion_check_exit ; exit
|
||||
.word lookout_check_bounds ; bounds check
|
||||
.byte GUYBRUSH_BIG ; size
|
||||
.byte 1 ; num areas
|
||||
|
||||
.byte 9,14 ; x
|
||||
.byte 20,32 ; y
|
||||
.word door_string ; name
|
||||
.word door_action-1 ; action
|
||||
|
||||
; MONKEY_ZIPLINE -- hook's zipline
|
||||
location11:
|
||||
.word zipline_lzsa ; background
|
||||
.word zipline_adjust_destination ; destination
|
||||
.word zipline_check_exit ; exit
|
||||
.word lookout_check_bounds ; bounds check
|
||||
.byte GUYBRUSH_BIG ; size
|
||||
.byte 3 ; num areas
|
||||
|
||||
.byte 30,36 ; x
|
||||
.byte 10,36 ; y
|
||||
.word pole_string ; name
|
||||
.word pole_action-1 ; action
|
||||
|
||||
.byte 19,30 ; x
|
||||
.byte 4,16 ; y
|
||||
.word cable_string ; name
|
||||
.word cable_action-1 ; action
|
||||
|
||||
.byte 0,15 ; x
|
||||
.byte 4,28 ; y
|
||||
.word sign_string ; name
|
||||
.word sign_action-1 ; action
|
||||
|
||||
; common strings
|
||||
|
||||
door_string: .byte 20,20,"DOOR",0
|
||||
pirate_string: .byte 20,20,"PIRATE",0
|
||||
pirates_string: .byte 20,20,"PIRATES",0
|
||||
|
||||
; zipline strings
|
||||
pole_string: .byte 20,20,"POLE",0
|
||||
cable_string: .byte 20,20,"CABLE",0
|
||||
sign_string: .byte 20,20,"SIGN",0
|
||||
|
||||
; bar strings
|
||||
|
||||
; lookout strings
|
||||
|
||||
lookout_string: .byte 20,20,"LOOKOUT",0
|
||||
path_string: .byte 20,20,"PATH",0
|
||||
stairs_string: .byte 20,20,"STAIRS",0
|
||||
|
||||
; map strings
|
||||
|
||||
house_string: .byte 18,20,"HOUSE",0
|
||||
lights_string: .byte 17,20,"LIGHTS",0
|
||||
clearing_string:.byte 16,20,"CLEARING",0
|
||||
@ -168,16 +351,25 @@ shore_string: .byte 18,20,"SHORE",0
|
||||
lookout_point_string: .byte 13,20,"LOOKOUT POINT",0
|
||||
village_string: .byte 16,20,"VILLAGE",0
|
||||
|
||||
lookout_string: .byte 20,20,"LOOKOUT",0
|
||||
path_string: .byte 20,20,"PATH",0
|
||||
stairs_string: .byte 20,20,"STAIRS",0
|
||||
; inside_bar2 strings
|
||||
dog_string: .byte 20,20,"DOG",0
|
||||
|
||||
; inside_bar2 strings
|
||||
|
||||
curtain_string: .byte 20,20,"CURTAIN",0
|
||||
impt_pirate_string: .byte 20,20,"IMPORTANT PIRATES",0
|
||||
fireplace_string: .byte 20,20,"FIREPLACE",0
|
||||
|
||||
; poster strings
|
||||
|
||||
cliffside_string: .byte 20,20,"CLIFFSIDE",0
|
||||
poster_string: .byte 20,20,"POSTER",0
|
||||
poster_string: .byte 20,20,"POSTER",0
|
||||
|
||||
; dock strings
|
||||
|
||||
moon_string: .byte 20,20,"MOON",0
|
||||
|
||||
door_string: .byte 20,20,"DOOR",0
|
||||
; town strings
|
||||
|
||||
archway_string: .byte 20,20,"ARCHWAY",0
|
||||
clock_string: .byte 20,20,"CLOCK",0
|
||||
|
@ -50,6 +50,7 @@ monkey_start:
|
||||
|
||||
; set up initial location
|
||||
|
||||
; lda #MONKEY_BAR_INSIDE2
|
||||
lda #MONKEY_LOOKOUT
|
||||
sta LOCATION
|
||||
|
||||
@ -93,6 +94,8 @@ game_loop:
|
||||
beq animate_flame
|
||||
cmp #MONKEY_BAR
|
||||
beq do_draw_bar_door
|
||||
cmp #MONKEY_ZIPLINE
|
||||
beq do_draw_sign
|
||||
|
||||
jmp nothing_special
|
||||
|
||||
@ -104,6 +107,10 @@ do_draw_bar_door:
|
||||
jsr draw_bar_door
|
||||
jmp nothing_special
|
||||
|
||||
do_draw_sign:
|
||||
jsr draw_sign
|
||||
jmp nothing_special
|
||||
|
||||
nothing_special:
|
||||
|
||||
|
||||
@ -211,6 +218,8 @@ really_draw_guybrush:
|
||||
beq do_draw_wall
|
||||
cmp #MONKEY_POSTER
|
||||
beq do_draw_house
|
||||
cmp #MONKEY_BAR
|
||||
beq do_draw_building
|
||||
|
||||
jmp nothing_foreground
|
||||
|
||||
@ -222,6 +231,11 @@ do_draw_house:
|
||||
jsr draw_house
|
||||
jmp nothing_foreground
|
||||
|
||||
do_draw_building:
|
||||
jsr draw_bar_fg_building
|
||||
jmp nothing_foreground
|
||||
|
||||
|
||||
nothing_foreground:
|
||||
|
||||
|
||||
@ -255,46 +269,20 @@ nothing_foreground:
|
||||
|
||||
jsr handle_keypress
|
||||
|
||||
;====================================
|
||||
; keep in bounds
|
||||
;====================================
|
||||
|
||||
keep_in_bounds_smc:
|
||||
jsr $0000
|
||||
|
||||
;====================================
|
||||
; check if exiting room
|
||||
;====================================
|
||||
|
||||
; FIXME: this should be a jump table
|
||||
check_exit_smc:
|
||||
jsr $0000
|
||||
|
||||
lda LOCATION
|
||||
cmp #MONKEY_LOOKOUT
|
||||
beq check_exit_lookout
|
||||
cmp #MONKEY_POSTER
|
||||
beq check_exit_poster
|
||||
cmp #MONKEY_DOCK
|
||||
beq check_exit_dock
|
||||
cmp #MONKEY_BAR
|
||||
beq check_exit_bar
|
||||
cmp #MONKEY_TOWN
|
||||
beq check_exit_town
|
||||
cmp #MONKEY_MAP
|
||||
beq check_exit_map
|
||||
|
||||
check_exit_lookout:
|
||||
jsr lookout_check_exit
|
||||
jmp done_check_exit
|
||||
check_exit_poster:
|
||||
jsr poster_check_exit
|
||||
jmp done_check_exit
|
||||
check_exit_dock:
|
||||
jsr dock_check_exit
|
||||
jmp done_check_exit
|
||||
check_exit_bar:
|
||||
jsr bar_check_exit
|
||||
jmp done_check_exit
|
||||
check_exit_town:
|
||||
jsr town_check_exit
|
||||
jmp done_check_exit
|
||||
check_exit_map:
|
||||
jsr map_check_exit
|
||||
jmp done_check_exit
|
||||
|
||||
done_check_exit:
|
||||
;====================================
|
||||
; inc frame count
|
||||
;====================================
|
||||
@ -342,12 +330,20 @@ really_exit:
|
||||
.include "common_sprites.inc"
|
||||
.include "guy.brush"
|
||||
|
||||
; Locations
|
||||
|
||||
.include "monkey_lookout.s"
|
||||
.include "monkey_poster.s"
|
||||
.include "monkey_dock.s"
|
||||
.include "monkey_bar.s"
|
||||
.include "monkey_town.s"
|
||||
.include "monkey_map.s"
|
||||
.include "monkey_church.s"
|
||||
.include "monkey_zipline.s"
|
||||
.include "monkey_mansion.s"
|
||||
.include "monkey_mansion_path.s"
|
||||
.include "monkey_bar_inside1.s"
|
||||
.include "monkey_bar_inside2.s"
|
||||
|
||||
.include "monkey_actions.s"
|
||||
.include "update_bottom.s"
|
||||
|
@ -126,6 +126,8 @@ cant_pick_up:
|
||||
.byte 10,21,"I CAN'T PICK THAT UP.",0
|
||||
not_special:
|
||||
.byte 1,21,"I DON'T SEE ANYTHING SPECIAL ABOUT IT.",0
|
||||
for_what:
|
||||
.byte 15,21,"FOR WHAT?",0
|
||||
|
||||
;=============================
|
||||
; can't do anything with path
|
||||
|
@ -1,5 +1,12 @@
|
||||
; if x<5 goto DOCK at 34,20
|
||||
|
||||
;===========================
|
||||
; check if exit bar screen
|
||||
;===========================
|
||||
; if x<5 goto DOCK at 34,20
|
||||
; if x>35 goto TOWN
|
||||
; if 9<x<14 and y<20 and door open, BAR_INSIDE1
|
||||
|
||||
bar_check_exit:
|
||||
|
||||
lda GUYBRUSH_X
|
||||
@ -7,7 +14,30 @@ bar_check_exit:
|
||||
bcc bar_to_dock
|
||||
cmp #35
|
||||
bcs bar_to_town
|
||||
|
||||
cmp #9
|
||||
bcc bar_no_exit
|
||||
cmp #14
|
||||
bcs bar_no_exit
|
||||
|
||||
bar_to_inside:
|
||||
lda GUYBRUSH_Y
|
||||
cmp #20
|
||||
bcs bar_no_exit
|
||||
|
||||
lda BAR_DOOR_OPEN
|
||||
beq bar_no_exit
|
||||
|
||||
lda #MONKEY_BAR_INSIDE1
|
||||
sta LOCATION
|
||||
lda #5
|
||||
sta GUYBRUSH_X
|
||||
sta DESTINATION_X
|
||||
lda #20
|
||||
sta GUYBRUSH_Y
|
||||
sta DESTINATION_Y
|
||||
jsr change_location
|
||||
jmp bar_no_exit
|
||||
|
||||
bar_to_dock:
|
||||
lda #MONKEY_DOCK
|
||||
@ -39,42 +69,93 @@ bar_to_town:
|
||||
bar_no_exit:
|
||||
rts
|
||||
|
||||
|
||||
;===========================
|
||||
; adjust bounds
|
||||
;===========================
|
||||
bar_keep_in_bounds:
|
||||
|
||||
br_force_x:
|
||||
lda GUYBRUSH_X
|
||||
cmp #25
|
||||
bcs br_gb_x_far_right
|
||||
cmp #21
|
||||
bcs br_gb_x_right
|
||||
cmp #9
|
||||
bcc br_gb_x_left
|
||||
cmp #14
|
||||
bcc br_gb_doorway
|
||||
bcs br_gb_x_left
|
||||
|
||||
br_gb_doorway:
|
||||
lda GUYBRUSH_Y
|
||||
cmp #20
|
||||
bcc br_gb_x_right
|
||||
bcs br_gb_x_left
|
||||
|
||||
br_gb_x_far_right:
|
||||
lda #16
|
||||
bne done_br_gb_adjust
|
||||
|
||||
br_gb_x_right:
|
||||
lda #18
|
||||
bne done_br_gb_adjust
|
||||
|
||||
br_gb_x_left:
|
||||
lda #20
|
||||
|
||||
done_br_gb_adjust:
|
||||
sta GUYBRUSH_Y
|
||||
sta DESTINATION_Y
|
||||
rts
|
||||
|
||||
|
||||
|
||||
;===========================
|
||||
; adjust walking destination
|
||||
;===========================
|
||||
|
||||
bar_adjust_destination:
|
||||
|
||||
; if x<21, y=20
|
||||
; if x<25, y=18
|
||||
; else y=`6
|
||||
; just keep Y whatever is in bounds
|
||||
; *except* in doorway 9<x<14
|
||||
; then allow it to be 18
|
||||
|
||||
br_check_x:
|
||||
lda DESTINATION_X
|
||||
cmp #25
|
||||
bcs br_x_too_big
|
||||
cmp #21
|
||||
bcc br_x_small
|
||||
bcs br_x_medium
|
||||
lda GUYBRUSH_X
|
||||
cmp #9
|
||||
bcc bar_adjust_force_y
|
||||
cmp #14
|
||||
bcs bar_adjust_force_y
|
||||
|
||||
br_x_too_big:
|
||||
; lda #25
|
||||
; sta DESTINATION_X
|
||||
lda #16
|
||||
sta DESTINATION_Y
|
||||
bne done_br_adjust
|
||||
lda CURSOR_X
|
||||
cmp #9
|
||||
bcc done_br_adjust
|
||||
cmp #14
|
||||
bcs done_br_adjust
|
||||
|
||||
lda CURSOR_Y
|
||||
cmp #28
|
||||
bcs done_br_adjust
|
||||
|
||||
br_x_medium:
|
||||
lda #18
|
||||
sta GUYBRUSH_Y
|
||||
sta DESTINATION_Y
|
||||
bne done_br_adjust
|
||||
|
||||
br_x_small:
|
||||
lda #20
|
||||
bar_adjust_force_y:
|
||||
lda GUYBRUSH_Y
|
||||
sta DESTINATION_Y
|
||||
|
||||
|
||||
done_br_adjust:
|
||||
rts
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
;=====================
|
||||
; draw bar door
|
||||
;=====================
|
||||
draw_bar_door:
|
||||
|
||||
lda BAR_DOOR_OPEN
|
||||
@ -103,4 +184,34 @@ door_sprite:
|
||||
.byte $5d,$5D
|
||||
|
||||
|
||||
draw_bar_fg_building:
|
||||
|
||||
; only draw it if we're that side of screeen
|
||||
lda GUYBRUSH_X
|
||||
cmp #24
|
||||
bcc done_draw_bar_fg_building
|
||||
|
||||
lda #<building_sprite
|
||||
sta INL
|
||||
lda #>building_sprite
|
||||
sta INH
|
||||
|
||||
lda #27
|
||||
sta XPOS
|
||||
lda #16
|
||||
sta YPOS
|
||||
|
||||
jsr put_sprite_crop
|
||||
|
||||
done_draw_bar_fg_building:
|
||||
rts
|
||||
|
||||
building_sprite:
|
||||
.byte 13,7
|
||||
.byte $77,$22,$9d,$00,$9d,$00,$22,$22,$22,$00,$00,$00,$0A
|
||||
.byte $77,$25,$25,$25,$25,$25,$22,$22,$22,$00,$00,$00,$00
|
||||
.byte $77,$22,$22,$22,$22,$22,$22,$22,$02,$00,$00,$90,$90
|
||||
.byte $A7,$72,$02,$02,$02,$00,$00,$00,$00,$00,$00,$09,$09
|
||||
.byte $AA,$77,$00,$00,$00,$00,$00,$00,$00,$60,$60,$d9,$dd
|
||||
.byte $AA,$77,$00,$00,$00,$00,$60,$00,$60,$06,$00,$66,$dd
|
||||
.byte $AA,$77,$00,$60,$26,$66,$02,$06,$00,$00,$60,$22,$00
|
||||
|
112
monkey/monkey_bar_inside1.s
Normal file
@ -0,0 +1,112 @@
|
||||
; stuff regarding 1st room in scumm bar
|
||||
|
||||
; if x<5 goto MONKEY_BAR at 10,20
|
||||
; if x>35 goto MONKEY_BAR_INSIDE2 at 5,20
|
||||
|
||||
bar_inside1_check_exit:
|
||||
|
||||
lda GUYBRUSH_X
|
||||
cmp #5
|
||||
bcc bar_inside1_to_bar
|
||||
cmp #35
|
||||
bcs bar_inside1_to_bar_inside2
|
||||
bcc bar_inside1_no_exit
|
||||
|
||||
bar_inside1_to_bar:
|
||||
lda #MONKEY_BAR
|
||||
sta LOCATION
|
||||
lda #10
|
||||
sta GUYBRUSH_X
|
||||
sta DESTINATION_X
|
||||
lda #20
|
||||
sta GUYBRUSH_Y
|
||||
sta DESTINATION_Y
|
||||
lda #DIR_DOWN
|
||||
sta GUYBRUSH_DIRECTION
|
||||
jsr change_location
|
||||
jmp bar_inside1_no_exit
|
||||
|
||||
bar_inside1_to_bar_inside2:
|
||||
lda #MONKEY_BAR_INSIDE2
|
||||
sta LOCATION
|
||||
lda #3
|
||||
sta GUYBRUSH_X
|
||||
sta DESTINATION_X
|
||||
lda #20
|
||||
sta GUYBRUSH_Y
|
||||
lda #24
|
||||
sta DESTINATION_Y
|
||||
jsr change_location
|
||||
jmp bar_inside1_no_exit
|
||||
|
||||
bar_inside1_no_exit:
|
||||
rts
|
||||
|
||||
|
||||
|
||||
;=================================
|
||||
;=================================
|
||||
; bar_inside1 adjust destination
|
||||
;=================================
|
||||
;=================================
|
||||
bar_inside1_adjust_destination:
|
||||
; just make Y always 20
|
||||
|
||||
mb1_check_y:
|
||||
; if x < 28, Y must be between 16 and 18
|
||||
; if x < 35, Y must be between 8 and 28
|
||||
|
||||
mb1_y_too_small:
|
||||
lda #20
|
||||
sta DESTINATION_Y
|
||||
|
||||
done_mb1_adjust:
|
||||
rts
|
||||
|
||||
|
||||
|
||||
|
||||
;draw_house:
|
||||
|
||||
; lda #<wall_sprite
|
||||
; sta INL
|
||||
; lda #>wall_sprite
|
||||
; sta INH
|
||||
|
||||
; lda #18
|
||||
; sta XPOS
|
||||
; lda #22
|
||||
; sta YPOS
|
||||
|
||||
; jsr put_sprite_crop
|
||||
|
||||
; rts
|
||||
|
||||
;house_sprite:
|
||||
|
||||
|
||||
;===================================
|
||||
;===================================
|
||||
; actions
|
||||
;===================================
|
||||
;===================================
|
||||
|
||||
;=============================
|
||||
bar1_pirate_action:
|
||||
lda #VERB_WALK
|
||||
sta CURRENT_VERB
|
||||
rts
|
||||
|
||||
;=============================
|
||||
bar1_door_action:
|
||||
lda #VERB_WALK
|
||||
sta CURRENT_VERB
|
||||
rts
|
||||
|
||||
;=============================
|
||||
bar1_dog_action:
|
||||
lda #VERB_WALK
|
||||
sta CURRENT_VERB
|
||||
rts
|
||||
|
||||
|
203
monkey/monkey_bar_inside2.s
Normal file
@ -0,0 +1,203 @@
|
||||
; stuff regarding 2nd room of scumm bar
|
||||
|
||||
; if x<4 goto MONKEY_BAR_INSIDE1 at 34,20
|
||||
|
||||
bar_inside2_check_exit:
|
||||
|
||||
lda GUYBRUSH_X
|
||||
cmp #4
|
||||
bcc bar_inside2_to_bar_inside1
|
||||
; cmp #35
|
||||
; bcs bar_inside2_to_bar
|
||||
bcs bar_inside2_no_exit
|
||||
|
||||
|
||||
bar_inside2_to_bar_inside1:
|
||||
lda GUYBRUSH_DIRECTION
|
||||
cmp #DIR_LEFT
|
||||
bne bar_inside2_no_exit
|
||||
|
||||
lda #MONKEY_BAR_INSIDE1
|
||||
sta LOCATION
|
||||
lda #34
|
||||
sta GUYBRUSH_X
|
||||
sta DESTINATION_X
|
||||
lda #20
|
||||
sta GUYBRUSH_Y
|
||||
sta DESTINATION_Y
|
||||
jsr change_location
|
||||
jmp bar_inside2_no_exit
|
||||
|
||||
bar_inside2_no_exit:
|
||||
rts
|
||||
|
||||
;================================
|
||||
;================================
|
||||
; bar_inside2 adjust destination
|
||||
;================================
|
||||
;================================
|
||||
bar_inside2_adjust_destination:
|
||||
; just make Y always 24
|
||||
|
||||
lda #24
|
||||
sta DESTINATION_Y
|
||||
|
||||
lda DESTINATION_X
|
||||
cmp #33
|
||||
bcc done_mb2_adjust
|
||||
|
||||
lda #33
|
||||
sta DESTINATION_X
|
||||
|
||||
|
||||
done_mb2_adjust:
|
||||
rts
|
||||
|
||||
|
||||
;================================
|
||||
;================================
|
||||
; bar_inside2 check bounds
|
||||
;================================
|
||||
;================================
|
||||
bar_inside2_check_bounds:
|
||||
; just make Y always 20
|
||||
|
||||
rts
|
||||
|
||||
;draw_house:
|
||||
|
||||
; lda #<wall_sprite
|
||||
; sta INL
|
||||
; lda #>wall_sprite
|
||||
; sta INH
|
||||
|
||||
; lda #18
|
||||
; sta XPOS
|
||||
; lda #22
|
||||
; sta YPOS
|
||||
|
||||
; jsr put_sprite_crop
|
||||
|
||||
; rts
|
||||
|
||||
;house_sprite:
|
||||
|
||||
|
||||
;===================================
|
||||
;===================================
|
||||
; actions
|
||||
;===================================
|
||||
;===================================
|
||||
|
||||
|
||||
;=============================
|
||||
bar2_door_action:
|
||||
bar2_door_nothing:
|
||||
lda #VERB_WALK
|
||||
sta CURRENT_VERB
|
||||
rts
|
||||
|
||||
|
||||
;=============================
|
||||
fireplace_action:
|
||||
lda CURRENT_VERB
|
||||
asl
|
||||
tay
|
||||
|
||||
lda fireplace_actions,Y
|
||||
cmp #$ff
|
||||
beq fireplace_nothing
|
||||
|
||||
sta MESSAGE_L
|
||||
lda fireplace_actions+1,Y
|
||||
sta MESSAGE_H
|
||||
|
||||
jmp do_display_message
|
||||
|
||||
fireplace_nothing:
|
||||
lda #VERB_WALK
|
||||
sta CURRENT_VERB
|
||||
rts
|
||||
|
||||
fireplace_actions:
|
||||
.word $FFFF ; give
|
||||
.word doesnt_open ; open
|
||||
.word doesnt_work ; close
|
||||
.word cant_pick_up ; pick_up
|
||||
.word fireplace_look ; look_at
|
||||
.word $FFFF ; talk_to
|
||||
.word for_what ; use
|
||||
.word icant_move ; push
|
||||
.word icant_move ; pull
|
||||
|
||||
fireplace_look:
|
||||
.byte 18,21,"COZY.",0
|
||||
|
||||
|
||||
;=============================
|
||||
impt_pirate_action:
|
||||
lda CURRENT_VERB
|
||||
asl
|
||||
tay
|
||||
|
||||
lda impt_pirate_actions,Y
|
||||
cmp #$ff
|
||||
beq impt_pirate_nothing
|
||||
|
||||
sta MESSAGE_L
|
||||
lda impt_pirate_actions+1,Y
|
||||
sta MESSAGE_H
|
||||
|
||||
jmp do_display_message
|
||||
|
||||
impt_pirate_nothing:
|
||||
lda #VERB_WALK
|
||||
sta CURRENT_VERB
|
||||
rts
|
||||
|
||||
impt_pirate_actions:
|
||||
.word $FFFF ; give
|
||||
.word $FFFF ; open
|
||||
.word $FFFF ; close
|
||||
.word $FFFF ; pick_up
|
||||
.word impt_pirate_look ; look_at
|
||||
.word impt_pirate_look ; talk_to
|
||||
.word $FFFF ; use
|
||||
.word $FFFF ; push
|
||||
.word $FFFF ; pull
|
||||
|
||||
impt_pirate_look:
|
||||
.byte 8,21,"WHAT BE YE WANTIN' BOY?",0
|
||||
|
||||
;=============================
|
||||
curtain_action:
|
||||
lda CURRENT_VERB
|
||||
asl
|
||||
tay
|
||||
|
||||
lda curtain_actions,Y
|
||||
cmp #$ff
|
||||
beq curtain_nothing
|
||||
|
||||
sta MESSAGE_L
|
||||
lda curtain_actions+1,Y
|
||||
sta MESSAGE_H
|
||||
|
||||
jmp do_display_message
|
||||
|
||||
curtain_nothing:
|
||||
lda #VERB_WALK
|
||||
sta CURRENT_VERB
|
||||
rts
|
||||
|
||||
curtain_actions:
|
||||
.word $FFFF ; give
|
||||
.word doesnt_open ; open
|
||||
.word doesnt_work ; close
|
||||
.word cant_pick_up ; pick_up
|
||||
.word not_special ; look_at
|
||||
.word $FFFF ; talk_to
|
||||
.word for_what ; use
|
||||
.word icant_move ; push
|
||||
.word icant_move ; pull
|
||||
|
84
monkey/monkey_church.s
Normal file
@ -0,0 +1,84 @@
|
||||
; stuff regarding the church
|
||||
|
||||
|
||||
; if x<4 goto MONKEY_MANSION_PATH at
|
||||
; if x>35 goto MONKEY_CHURCH at
|
||||
|
||||
church_check_exit:
|
||||
|
||||
lda GUYBRUSH_X
|
||||
cmp #4
|
||||
bcc church_to_mansion_path
|
||||
cmp #35
|
||||
bcs church_to_town
|
||||
bcc church_no_exit
|
||||
|
||||
church_to_mansion_path:
|
||||
lda #MONKEY_MANSION_PATH
|
||||
sta LOCATION
|
||||
lda #34
|
||||
sta GUYBRUSH_X
|
||||
sta DESTINATION_X
|
||||
lda #20
|
||||
sta GUYBRUSH_Y
|
||||
sta DESTINATION_Y
|
||||
jsr change_location
|
||||
jmp church_no_exit
|
||||
|
||||
church_to_town:
|
||||
lda #MONKEY_TOWN
|
||||
sta LOCATION
|
||||
lda #5
|
||||
sta GUYBRUSH_X
|
||||
sta DESTINATION_X
|
||||
lda #20
|
||||
sta GUYBRUSH_Y
|
||||
sta DESTINATION_Y
|
||||
jsr change_location
|
||||
jmp church_no_exit
|
||||
|
||||
church_no_exit:
|
||||
rts
|
||||
|
||||
|
||||
|
||||
;==========================
|
||||
;==========================
|
||||
; church adjust destination
|
||||
;==========================
|
||||
;==========================
|
||||
church_adjust_destination:
|
||||
; just make Y always 20
|
||||
|
||||
ch_check_y:
|
||||
; if x < 28, Y must be between 16 and 18
|
||||
; if x < 35, Y must be between 8 and 28
|
||||
|
||||
ch_y_too_small:
|
||||
lda #20
|
||||
sta DESTINATION_Y
|
||||
|
||||
done_ch_adjust:
|
||||
rts
|
||||
|
||||
|
||||
|
||||
|
||||
;draw_house:
|
||||
|
||||
; lda #<wall_sprite
|
||||
; sta INL
|
||||
; lda #>wall_sprite
|
||||
; sta INH
|
||||
|
||||
; lda #18
|
||||
; sta XPOS
|
||||
; lda #22
|
||||
; sta YPOS
|
||||
|
||||
; jsr put_sprite_crop
|
||||
|
||||
; rts
|
||||
|
||||
;house_sprite:
|
||||
|
@ -102,6 +102,10 @@ done_ld_adjust:
|
||||
|
||||
|
||||
|
||||
lookout_check_bounds:
|
||||
rts
|
||||
|
||||
|
||||
draw_fire:
|
||||
lda FRAMEL
|
||||
and #$18
|
||||
|
68
monkey/monkey_mansion.s
Normal file
@ -0,0 +1,68 @@
|
||||
; stuff regarding the governor's mansion
|
||||
|
||||
; if x>35 goto MONKEY_MANSION_PATH at
|
||||
|
||||
mansion_check_exit:
|
||||
|
||||
lda GUYBRUSH_X
|
||||
cmp #35
|
||||
bcs mansion_to_mansion_path
|
||||
bcc mansion_no_exit
|
||||
|
||||
mansion_to_mansion_path:
|
||||
lda #MONKEY_MANSION_PATH
|
||||
sta LOCATION
|
||||
lda #5
|
||||
sta GUYBRUSH_X
|
||||
sta DESTINATION_X
|
||||
lda #20
|
||||
sta GUYBRUSH_Y
|
||||
sta DESTINATION_Y
|
||||
jsr change_location
|
||||
jmp mansion_no_exit
|
||||
|
||||
mansion_no_exit:
|
||||
rts
|
||||
|
||||
|
||||
|
||||
;==========================
|
||||
;==========================
|
||||
; mansion adjust destination
|
||||
;==========================
|
||||
;==========================
|
||||
mansion_adjust_destination:
|
||||
; just make Y always 20
|
||||
|
||||
mn_check_y:
|
||||
; if x < 28, Y must be between 16 and 18
|
||||
; if x < 35, Y must be between 8 and 28
|
||||
|
||||
mn_y_too_small:
|
||||
lda #20
|
||||
sta DESTINATION_Y
|
||||
|
||||
done_mn_adjust:
|
||||
rts
|
||||
|
||||
|
||||
|
||||
|
||||
;draw_house:
|
||||
|
||||
; lda #<wall_sprite
|
||||
; sta INL
|
||||
; lda #>wall_sprite
|
||||
; sta INH
|
||||
|
||||
; lda #18
|
||||
; sta XPOS
|
||||
; lda #22
|
||||
; sta YPOS
|
||||
|
||||
; jsr put_sprite_crop
|
||||
|
||||
; rts
|
||||
|
||||
;house_sprite:
|
||||
|
84
monkey/monkey_mansion_path.s
Normal file
@ -0,0 +1,84 @@
|
||||
; stuff regarding path to mansion
|
||||
|
||||
|
||||
; if x<4 goto MONKEY_MANSION
|
||||
; if x>35 goto MONKEY_CHURCH
|
||||
|
||||
mansion_path_check_exit:
|
||||
|
||||
lda GUYBRUSH_X
|
||||
cmp #4
|
||||
bcc mansion_path_to_mansion
|
||||
cmp #35
|
||||
bcs mansion_path_to_church
|
||||
bcc mansion_path_no_exit
|
||||
|
||||
mansion_path_to_mansion:
|
||||
lda #MONKEY_MANSION
|
||||
sta LOCATION
|
||||
lda #34
|
||||
sta GUYBRUSH_X
|
||||
sta DESTINATION_X
|
||||
lda #20
|
||||
sta GUYBRUSH_Y
|
||||
sta DESTINATION_Y
|
||||
jsr change_location
|
||||
jmp mansion_path_no_exit
|
||||
|
||||
mansion_path_to_church:
|
||||
lda #MONKEY_CHURCH
|
||||
sta LOCATION
|
||||
lda #5
|
||||
sta GUYBRUSH_X
|
||||
sta DESTINATION_X
|
||||
lda #20
|
||||
sta GUYBRUSH_Y
|
||||
sta DESTINATION_Y
|
||||
jsr change_location
|
||||
jmp mansion_path_no_exit
|
||||
|
||||
mansion_path_no_exit:
|
||||
rts
|
||||
|
||||
|
||||
|
||||
;==========================
|
||||
;==========================
|
||||
; mansion_path adjust destination
|
||||
;==========================
|
||||
;==========================
|
||||
mansion_path_adjust_destination:
|
||||
; just make Y always 20
|
||||
|
||||
mh_check_y:
|
||||
; if x < 28, Y must be between 16 and 18
|
||||
; if x < 35, Y must be between 8 and 28
|
||||
|
||||
mh_y_too_small:
|
||||
lda #20
|
||||
sta DESTINATION_Y
|
||||
|
||||
done_mh_adjust:
|
||||
rts
|
||||
|
||||
|
||||
|
||||
|
||||
;draw_house:
|
||||
|
||||
; lda #<wall_sprite
|
||||
; sta INL
|
||||
; lda #>wall_sprite
|
||||
; sta INH
|
||||
|
||||
; lda #18
|
||||
; sta XPOS
|
||||
; lda #22
|
||||
; sta YPOS
|
||||
|
||||
; jsr put_sprite_crop
|
||||
|
||||
; rts
|
||||
|
||||
;house_sprite:
|
||||
|
@ -1,13 +1,22 @@
|
||||
; 11, 22 = lookout
|
||||
; 10, 24 = poster
|
||||
; 25, 4 = zipline
|
||||
|
||||
map_check_exit:
|
||||
lda GUYBRUSH_X
|
||||
cmp #11
|
||||
bne map_no_exit
|
||||
beq check_lookout
|
||||
cmp #10
|
||||
beq check_poster
|
||||
cmp #25
|
||||
beq check_zipline
|
||||
|
||||
rts
|
||||
|
||||
check_lookout:
|
||||
lda GUYBRUSH_Y
|
||||
cmp #22
|
||||
bne map_no_exit
|
||||
|
||||
map_to_lookout:
|
||||
lda #MONKEY_LOOKOUT
|
||||
sta LOCATION
|
||||
@ -22,9 +31,48 @@ map_to_lookout:
|
||||
sta GUYBRUSH_DIRECTION
|
||||
jsr change_location
|
||||
|
||||
check_poster:
|
||||
lda GUYBRUSH_Y
|
||||
cmp #24
|
||||
bne map_no_exit
|
||||
map_to_poster:
|
||||
lda #MONKEY_POSTER
|
||||
sta LOCATION
|
||||
lda #4
|
||||
sta GUYBRUSH_X
|
||||
sta DESTINATION_X
|
||||
lda #20
|
||||
sta GUYBRUSH_Y
|
||||
sta DESTINATION_Y
|
||||
lda #DIR_DOWN
|
||||
sta GUYBRUSH_DIRECTION
|
||||
jsr change_location
|
||||
|
||||
check_zipline:
|
||||
lda GUYBRUSH_Y
|
||||
cmp #4
|
||||
bne map_no_exit
|
||||
map_to_zipline:
|
||||
lda #MONKEY_ZIPLINE
|
||||
sta LOCATION
|
||||
lda #4
|
||||
sta GUYBRUSH_X
|
||||
sta DESTINATION_X
|
||||
lda #26
|
||||
sta GUYBRUSH_Y
|
||||
sta DESTINATION_Y
|
||||
lda #DIR_RIGHT
|
||||
sta GUYBRUSH_DIRECTION
|
||||
jsr change_location
|
||||
|
||||
map_no_exit:
|
||||
rts
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
map_adjust_destination:
|
||||
|
||||
; x between 6 and 30
|
||||
|
@ -1,7 +1,16 @@
|
||||
; right side of downtown village
|
||||
|
||||
;=======================
|
||||
; check exit
|
||||
;=======================
|
||||
;
|
||||
|
||||
town_check_exit:
|
||||
|
||||
lda GUYBRUSH_X
|
||||
cmp #5 ; temporary
|
||||
bcc town_to_church
|
||||
|
||||
cmp #32
|
||||
bcc town_no_exit
|
||||
|
||||
@ -26,10 +35,29 @@ town_to_bar:
|
||||
lda #DIR_LEFT
|
||||
sta GUYBRUSH_DIRECTION
|
||||
jsr change_location
|
||||
jmp town_no_exit
|
||||
|
||||
town_to_church:
|
||||
lda #MONKEY_CHURCH
|
||||
sta LOCATION
|
||||
lda #34
|
||||
sta GUYBRUSH_X
|
||||
sta DESTINATION_X
|
||||
lda #20
|
||||
sta GUYBRUSH_Y
|
||||
sta DESTINATION_Y
|
||||
|
||||
lda #DIR_LEFT
|
||||
sta GUYBRUSH_DIRECTION
|
||||
jsr change_location
|
||||
|
||||
town_no_exit:
|
||||
rts
|
||||
|
||||
;=======================
|
||||
; adjust destination
|
||||
;=======================
|
||||
|
||||
town_adjust_destination:
|
||||
|
||||
; if x<32, y must be >22
|
||||
@ -62,6 +90,11 @@ done_tn_adjust:
|
||||
rts
|
||||
|
||||
|
||||
;=======================
|
||||
; adjust bounds
|
||||
;=======================
|
||||
town_check_bounds:
|
||||
rts
|
||||
|
||||
|
||||
;draw_town_door:
|
||||
|
189
monkey/monkey_zipline.s
Normal file
@ -0,0 +1,189 @@
|
||||
; stuff regarding the zipline
|
||||
|
||||
; if x<4 goto MONKEY_MAP at 23,4
|
||||
|
||||
zipline_check_exit:
|
||||
|
||||
lda GUYBRUSH_X
|
||||
cmp #4
|
||||
bcc zipline_to_map
|
||||
bcs zipline_no_exit
|
||||
|
||||
zipline_to_map:
|
||||
lda #MONKEY_MAP
|
||||
sta LOCATION
|
||||
lda #23
|
||||
sta GUYBRUSH_X
|
||||
sta DESTINATION_X
|
||||
lda #4
|
||||
sta GUYBRUSH_Y
|
||||
sta DESTINATION_Y
|
||||
jsr change_location
|
||||
|
||||
zipline_no_exit:
|
||||
rts
|
||||
|
||||
|
||||
|
||||
;==========================
|
||||
;==========================
|
||||
; zipline adjust destination
|
||||
;==========================
|
||||
;==========================
|
||||
zipline_adjust_destination:
|
||||
; just make Y always 26
|
||||
|
||||
zp_check_y:
|
||||
|
||||
zp_y_too_small:
|
||||
lda #26
|
||||
sta DESTINATION_Y
|
||||
|
||||
done_zp_adjust:
|
||||
rts
|
||||
|
||||
|
||||
draw_sign:
|
||||
lda FRAMEL
|
||||
and #$10
|
||||
beq done_draw_sign
|
||||
|
||||
|
||||
lda #<sign_sprite
|
||||
sta INL
|
||||
lda #>sign_sprite
|
||||
sta INH
|
||||
|
||||
lda #0
|
||||
sta XPOS
|
||||
lda #4
|
||||
sta YPOS
|
||||
|
||||
jsr put_sprite_crop
|
||||
done_draw_sign:
|
||||
rts
|
||||
|
||||
sign_sprite:
|
||||
.byte 16,11
|
||||
.byte $dA,$1A,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$d1,$AA,$AA,$AA
|
||||
.byte $AA,$AA,$Ad,$A1,$Ad,$A1,$dA,$1A,$AA,$AA,$AA,$AA,$1A,$Ad,$1A,$AA
|
||||
.byte $AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$Ad,$A1,$dA,$1A,$Ad,$AA,$Ad,$1A
|
||||
.byte $AA,$Ad,$1A,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$dA
|
||||
.byte $AA,$AA,$Ad,$dA,$1A,$dA,$1A,$dA,$AA,$AA,$AA,$AA,$AA,$dA,$1A,$AA
|
||||
.byte $A1,$Ad,$A1,$1A,$dA,$1A,$AA,$AA,$A1,$Ad,$A1,$Ad,$1A,$AA,$AA,$AA
|
||||
.byte $AA,$AA,$1d,$AA,$AA,$AA,$1d,$AA,$AA,$dA,$1A,$Ad,$AA,$AA,$AA,$AA
|
||||
.byte $AA,$AA,$Ad,$A1,$dA,$A1,$Ad,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA
|
||||
.byte $AA,$A1,$Ad,$AA,$1A,$Ad,$A1,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA
|
||||
.byte $AA,$dA,$AA,$AA,$AA,$AA,$1d,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA
|
||||
.byte $AA,$1A,$dA,$A1,$Ad,$1A,$dA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA
|
||||
|
||||
;=============================
|
||||
|
||||
sign_action:
|
||||
lda CURRENT_VERB
|
||||
asl
|
||||
tay
|
||||
|
||||
lda sign_actions,Y
|
||||
cmp #$ff
|
||||
beq sign_nothing
|
||||
|
||||
sta MESSAGE_L
|
||||
lda sign_actions+1,Y
|
||||
sta MESSAGE_H
|
||||
|
||||
jmp do_display_message
|
||||
|
||||
sign_nothing:
|
||||
lda #VERB_WALK
|
||||
sta CURRENT_VERB
|
||||
rts
|
||||
|
||||
|
||||
sign_actions:
|
||||
.word $FFFF ; give
|
||||
.word doesnt_open ; open
|
||||
.word doesnt_work ; close
|
||||
.word cant_pick_up ; pick_up
|
||||
.word sign_look ; look_at
|
||||
.word $FFFF ; talk_to
|
||||
.word doesnt_work ; use
|
||||
.word icant_move ; push
|
||||
.word icant_move ; pull
|
||||
|
||||
|
||||
|
||||
sign_look: .byte 2,21,"GAUDY BUT IN A CHEERFUL SORT OF WAY",0
|
||||
|
||||
;=============================
|
||||
|
||||
cable_action:
|
||||
lda CURRENT_VERB
|
||||
asl
|
||||
tay
|
||||
|
||||
lda cable_actions,Y
|
||||
cmp #$ff
|
||||
beq cable_nothing
|
||||
|
||||
sta MESSAGE_L
|
||||
lda cable_actions+1,Y
|
||||
sta MESSAGE_H
|
||||
|
||||
jmp do_display_message
|
||||
|
||||
cable_nothing:
|
||||
lda #VERB_WALK
|
||||
sta CURRENT_VERB
|
||||
rts
|
||||
|
||||
|
||||
cable_actions:
|
||||
.word $FFFF ; give
|
||||
.word doesnt_open ; open
|
||||
.word doesnt_work ; close
|
||||
.word cant_pick_up ; pick_up
|
||||
.word cable_look ; look_at
|
||||
.word $FFFF ; talk_to
|
||||
.word $FFFF ; use
|
||||
.word icant_move ; push
|
||||
.word icant_move ; pull
|
||||
|
||||
cable_look: .byte 1,21,"HMM I THINK IT COULD SUPPORT MY WEIGHT",0
|
||||
|
||||
;=============================
|
||||
|
||||
pole_action:
|
||||
lda CURRENT_VERB
|
||||
asl
|
||||
tay
|
||||
|
||||
lda pole_actions,Y
|
||||
cmp #$ff
|
||||
beq pole_nothing
|
||||
|
||||
sta MESSAGE_L
|
||||
lda pole_actions+1,Y
|
||||
sta MESSAGE_H
|
||||
|
||||
jmp do_display_message
|
||||
|
||||
pole_nothing:
|
||||
lda #VERB_WALK
|
||||
sta CURRENT_VERB
|
||||
rts
|
||||
|
||||
|
||||
pole_actions:
|
||||
.word $FFFF ; give
|
||||
.word doesnt_open ; open
|
||||
.word doesnt_work ; close
|
||||
.word cant_pick_up ; pick_up
|
||||
.word pole_look ; look_at
|
||||
.word $FFFF ; talk_to
|
||||
.word $FFFF ; use ; FIXME, use pool climbs ladder
|
||||
.word icant_move ; push
|
||||
.word icant_move ; pull
|
||||
|
||||
|
||||
pole_look: .byte 6,21,"IT'S JUST LIKE THE OTHER ONE",0
|
@ -110,6 +110,11 @@ DISPLAY_MESSAGE = $95
|
||||
MESSAGE_L = $96
|
||||
MESSAGE_H = $97
|
||||
|
||||
GUYBRUSH_SIZE = $98
|
||||
GUYBRUSH_BIG = 0
|
||||
GUYBRUSH_SMALL = 1
|
||||
GUYBRUSH_TINY = 2
|
||||
|
||||
; done game puzzle state
|
||||
|
||||
|
||||
|
41
tfv/Makefile
@ -8,39 +8,15 @@ ARTDIR = ./art
|
||||
|
||||
all: tfv.dsk
|
||||
|
||||
$(PNG2RLE):
|
||||
cd ../gr-utils && make
|
||||
|
||||
$(DOS33):
|
||||
cd ../dos33fs-utils && make
|
||||
|
||||
tfv.dsk: $(DOS33) TFV
|
||||
tfv.dsk: $(DOS33) TFV HELLO
|
||||
$(DOS33) -y tfv.dsk SAVE A HELLO
|
||||
$(DOS33) -y tfv.dsk BSAVE -a 0x1000 TFV
|
||||
# $(DOS33) -y tfv.dsk BSAVE -a 0x2000 HIGHWIND.ED
|
||||
# $(DOS33) -y tfv.dsk BSAVE -a 0x2000 FIGHTING.ED
|
||||
|
||||
|
||||
tfv_backgrounds.inc: $(PNG2RLE) \
|
||||
$(ARTDIR)/title.png $(ARTDIR)/map.png \
|
||||
$(ARTDIR)/landing.png $(ARTDIR)/harfco.png \
|
||||
$(ARTDIR)/belair.png \
|
||||
$(ARTDIR)/math_office.png $(ARTDIR)/video_hr.png \
|
||||
$(ARTDIR)/collegep.png \
|
||||
$(ARTDIR)/umcp.png \
|
||||
$(ARTDIR)/dining.png $(ARTDIR)/metro.png $(ARTDIR)/talbot.png
|
||||
$(PNG2RLE) asm $(ARTDIR)/title.png title_rle > tfv_backgrounds.inc
|
||||
$(PNG2RLE) asm $(ARTDIR)/map.png map_rle >> tfv_backgrounds.inc
|
||||
$(PNG2RLE) asm $(ARTDIR)/landing.png landing_rle >> tfv_backgrounds.inc
|
||||
$(PNG2RLE) asm $(ARTDIR)/harfco.png harfco_rle >> tfv_backgrounds.inc
|
||||
$(PNG2RLE) asm $(ARTDIR)/belair.png belair_rle >> tfv_backgrounds.inc
|
||||
$(PNG2RLE) asm $(ARTDIR)/math_office.png math_office_rle >> tfv_backgrounds.inc
|
||||
$(PNG2RLE) asm $(ARTDIR)/video_hr.png video_hr_rle >> tfv_backgrounds.inc
|
||||
$(PNG2RLE) asm $(ARTDIR)/collegep.png collegep_rle >> tfv_backgrounds.inc
|
||||
$(PNG2RLE) asm $(ARTDIR)/umcp.png umcp_rle >> tfv_backgrounds.inc
|
||||
$(PNG2RLE) asm $(ARTDIR)/dining.png dining_rle >> tfv_backgrounds.inc
|
||||
$(PNG2RLE) asm $(ARTDIR)/metro.png metro_rle >> tfv_backgrounds.inc
|
||||
$(PNG2RLE) asm $(ARTDIR)/talbot.png talbot_rle >> tfv_backgrounds.inc
|
||||
|
||||
###
|
||||
|
||||
TFV: tfv.o
|
||||
@ -49,9 +25,9 @@ TFV: tfv.o
|
||||
tfv.o: tfv.s \
|
||||
tfv_flying.s tfv_info.s tfv_opener.s tfv_title.s \
|
||||
tfv_textentry.s tfv_worldmap.s \
|
||||
tfv_backgrounds.inc tfv_sprites.inc tfv_zp.inc \
|
||||
graphics_map/tfv_backgrounds.inc tfv_sprites.inc tfv_zp.inc \
|
||||
../asm_routines/multiply_fast.s \
|
||||
../asm_routines/gr_fast_clear.s \
|
||||
gr_fast_clear.s \
|
||||
../asm_routines/pageflip.s \
|
||||
../asm_routines/gr_setpage.s \
|
||||
../asm_routines/keypress.s \
|
||||
@ -63,7 +39,16 @@ tfv.o: tfv.s \
|
||||
../asm_routines/gr_unrle.s
|
||||
ca65 -o tfv.o tfv.s -l tfv.lst
|
||||
|
||||
graphics_map/tfv_backgrounds.inc:
|
||||
cd graphics_map && make
|
||||
|
||||
###
|
||||
|
||||
HELLO: hello.bas
|
||||
../asoft_basic-utils/tokenize_asoft < hello.bas > HELLO
|
||||
|
||||
|
||||
###
|
||||
|
||||
clean:
|
||||
rm -f *~ TITLE.GR *.o *.lst ED TFV
|
||||
|
Before Width: | Height: | Size: 9.5 KiB |
370
tfv/decompress_fast_v2.s
Normal file
@ -0,0 +1,370 @@
|
||||
; note -- modified by Vince Weaver to assemble with ca65
|
||||
; in this case, A = page to decompress to
|
||||
; getsrc_smc+1, getsrc_smc+2 is src location
|
||||
|
||||
; -----------------------------------------------------------------------------
|
||||
; Decompress raw LZSA2 block.
|
||||
; Create one with lzsa -r -f2 <original_file> <compressed_file>
|
||||
;
|
||||
; in:
|
||||
; * LZSA_SRC_LO and LZSA_SRC_HI contain the compressed raw block address
|
||||
; * LZSA_DST_LO and LZSA_DST_HI contain the destination buffer address
|
||||
;
|
||||
; out:
|
||||
; * LZSA_DST_LO and LZSA_DST_HI contain the last decompressed byte address, +1
|
||||
;
|
||||
; -----------------------------------------------------------------------------
|
||||
; Backward decompression is also supported, use lzsa -r -b -f2 <original_file> <compressed_file>
|
||||
; To use it, also define BACKWARD_DECOMPRESS=1 before including this code!
|
||||
;
|
||||
; in:
|
||||
; * LZSA_SRC_LO/LZSA_SRC_HI must contain the address of the last byte of compressed data
|
||||
; * LZSA_DST_LO/LZSA_DST_HI must contain the address of the last byte of the destination buffer
|
||||
;
|
||||
; out:
|
||||
; * LZSA_DST_LO/LZSA_DST_HI contain the last decompressed byte address, -1
|
||||
;
|
||||
; -----------------------------------------------------------------------------
|
||||
;
|
||||
; Copyright (C) 2019 Emmanuel Marty, Peter Ferrie
|
||||
;
|
||||
; This software is provided 'as-is', without any express or implied
|
||||
; warranty. In no event will the authors be held liable for any damages
|
||||
; arising from the use of this software.
|
||||
;
|
||||
; Permission is granted to anyone to use this software for any purpose,
|
||||
; including commercial applications, and to alter it and redistribute it
|
||||
; freely, subject to the following restrictions:
|
||||
;
|
||||
; 1. The origin of this software must not be misrepresented; you must not
|
||||
; claim that you wrote the original software. If you use this software
|
||||
; in a product, an acknowledgment in the product documentation would be
|
||||
; appreciated but is not required.
|
||||
; 2. Altered source versions must be plainly marked as such, and must not be
|
||||
; misrepresented as being the original software.
|
||||
; 3. This notice may not be removed or altered from any source distribution.
|
||||
; -----------------------------------------------------------------------------
|
||||
|
||||
;NIBCOUNT = $FC ; zero-page location for temp offset
|
||||
|
||||
decompress_lzsa2_fast:
|
||||
|
||||
sta LZSA_DST_HI
|
||||
|
||||
ldy #$00
|
||||
sty LZSA_DST_LO
|
||||
sty NIBCOUNT
|
||||
|
||||
decode_token:
|
||||
jsr getsrc ; read token byte: XYZ|LL|MMM
|
||||
pha ; preserve token on stack
|
||||
|
||||
and #$18 ; isolate literals count (LL)
|
||||
beq no_literals ; skip if no literals to copy
|
||||
cmp #$18 ; LITERALS_RUN_LEN_V2?
|
||||
bcc prepare_copy_literals ; if less, count is directly embedded in token
|
||||
|
||||
jsr getnibble ; get extra literals length nibble
|
||||
; add nibble to len from token
|
||||
adc #$02 ; (LITERALS_RUN_LEN_V2) minus carry
|
||||
cmp #$12 ; LITERALS_RUN_LEN_V2 + 15 ?
|
||||
bcc prepare_copy_literals_direct ; if less, literals count is complete
|
||||
|
||||
jsr getsrc ; get extra byte of variable literals count
|
||||
; the carry is always set by the CMP above
|
||||
; GETSRC doesn't change it
|
||||
sbc #$EE ; overflow?
|
||||
jmp prepare_copy_literals_direct
|
||||
|
||||
prepare_copy_literals_large:
|
||||
; handle 16 bits literals count
|
||||
; literals count = directly these 16 bits
|
||||
jsr getlargesrc ; grab low 8 bits in X, high 8 bits in A
|
||||
tay ; put high 8 bits in Y
|
||||
bcs prepare_copy_literals_high ; (*same as JMP PREPARE_COPY_LITERALS_HIGH but shorter)
|
||||
|
||||
prepare_copy_literals:
|
||||
lsr ; shift literals count into place
|
||||
lsr
|
||||
lsr
|
||||
|
||||
prepare_copy_literals_direct:
|
||||
tax
|
||||
bcs prepare_copy_literals_large ; if so, literals count is large
|
||||
|
||||
prepare_copy_literals_high:
|
||||
txa
|
||||
beq copy_literals
|
||||
iny
|
||||
|
||||
copy_literals:
|
||||
jsr getput ; copy one byte of literals
|
||||
dex
|
||||
bne copy_literals
|
||||
dey
|
||||
bne copy_literals
|
||||
|
||||
no_literals:
|
||||
pla ; retrieve token from stack
|
||||
pha ; preserve token again
|
||||
asl
|
||||
bcs repmatch_or_large_offset ; 1YZ: rep-match or 13/16 bit offset
|
||||
|
||||
asl ; 0YZ: 5 or 9 bit offset
|
||||
bcs offset_9_bit
|
||||
|
||||
; 00Z: 5 bit offset
|
||||
|
||||
ldx #$FF ; set offset bits 15-8 to 1
|
||||
|
||||
jsr getcombinedbits ; rotate Z bit into bit 0, read nibble for bits 4-1
|
||||
ora #$E0 ; set bits 7-5 to 1
|
||||
bne got_offset_lo ; go store low byte of match offset and prepare match
|
||||
|
||||
offset_9_bit: ; 01Z: 9 bit offset
|
||||
;;asl ; shift Z (offset bit 8) in place
|
||||
rol
|
||||
rol
|
||||
and #$01
|
||||
eor #$FF ; set offset bits 15-9 to 1
|
||||
bne got_offset_hi ; go store high byte, read low byte of match offset and prepare match
|
||||
; (*same as JMP GOT_OFFSET_HI but shorter)
|
||||
|
||||
repmatch_or_large_offset:
|
||||
asl ; 13 bit offset?
|
||||
bcs repmatch_or_16bit ; handle rep-match or 16-bit offset if not
|
||||
|
||||
; 10Z: 13 bit offset
|
||||
|
||||
jsr getcombinedbits ; rotate Z bit into bit 8, read nibble for bits 12-9
|
||||
adc #$DE ; set bits 15-13 to 1 and substract 2 (to substract 512)
|
||||
bne got_offset_hi ; go store high byte, read low byte of match offset and prepare match
|
||||
; (*same as JMP GOT_OFFSET_HI but shorter)
|
||||
|
||||
repmatch_or_16bit: ; rep-match or 16 bit offset
|
||||
;;ASL ; XYZ=111?
|
||||
bmi rep_match ; reuse previous offset if so (rep-match)
|
||||
|
||||
; 110: handle 16 bit offset
|
||||
jsr getsrc ; grab high 8 bits
|
||||
got_offset_hi:
|
||||
tax
|
||||
jsr getsrc ; grab low 8 bits
|
||||
got_offset_lo:
|
||||
sta OFFSLO ; store low byte of match offset
|
||||
stx OFFSHI ; store high byte of match offset
|
||||
|
||||
rep_match:
|
||||
.ifdef BACKWARD_DECOMPRESS
|
||||
|
||||
; Backward decompression - substract match offset
|
||||
|
||||
sec ; add dest + match offset
|
||||
lda putdst+1 ; low 8 bits
|
||||
OFFSLO = *+1
|
||||
sbc #$AA
|
||||
sta copy_match_loop+1 ; store back reference address
|
||||
lda putdst+2
|
||||
OFFSHI = *+1
|
||||
sbc #$AA ; high 8 bits
|
||||
sta copy_match_loop+2 ; store high 8 bits of address
|
||||
sec
|
||||
|
||||
.else
|
||||
|
||||
; Forward decompression - add match offset
|
||||
|
||||
clc ; add dest + match offset
|
||||
lda putdst+1 ; low 8 bits
|
||||
OFFSLO = *+1
|
||||
adc #$AA
|
||||
sta copy_match_loop+1 ; store back reference address
|
||||
OFFSHI = *+1
|
||||
lda #$AA ; high 8 bits
|
||||
adc putdst+2
|
||||
sta copy_match_loop+2 ; store high 8 bits of address
|
||||
.endif
|
||||
|
||||
pla ; retrieve token from stack again
|
||||
and #$07 ; isolate match len (MMM)
|
||||
adc #$01 ; add MIN_MATCH_SIZE_V2 and carry
|
||||
cmp #$09 ; MIN_MATCH_SIZE_V2 + MATCH_RUN_LEN_V2?
|
||||
bcc prepare_copy_match ; if less, length is directly embedded in token
|
||||
|
||||
jsr getnibble ; get extra match length nibble
|
||||
; add nibble to len from token
|
||||
adc #$08 ; (MIN_MATCH_SIZE_V2 + MATCH_RUN_LEN_V2) minus carry
|
||||
cmp #$18 ; MIN_MATCH_SIZE_V2 + MATCH_RUN_LEN_V2 + 15?
|
||||
bcc prepare_copy_match ; if less, match length is complete
|
||||
|
||||
jsr getsrc ; get extra byte of variable match length
|
||||
; the carry is always set by the CMP above
|
||||
; GETSRC doesn't change it
|
||||
sbc #$E8 ; overflow?
|
||||
|
||||
prepare_copy_match:
|
||||
tax
|
||||
bcc prepare_copy_match_y ; if not, the match length is complete
|
||||
beq decompression_done ; if EOD code, bail
|
||||
|
||||
; Handle 16 bits match length
|
||||
jsr getlargesrc ; grab low 8 bits in X, high 8 bits in A
|
||||
tay ; put high 8 bits in Y
|
||||
|
||||
prepare_copy_match_y:
|
||||
txa
|
||||
beq copy_match_loop
|
||||
iny
|
||||
|
||||
copy_match_loop:
|
||||
lda $AAAA ; get one byte of backreference
|
||||
jsr putdst ; copy to destination
|
||||
|
||||
.ifdef BACKWARD_DECOMPRESS
|
||||
|
||||
; Backward decompression -- put backreference bytes backward
|
||||
|
||||
lda copy_match_loop+1
|
||||
beq getmatch_adj_hi
|
||||
getmatch_done:
|
||||
dec copy_match_loop+1
|
||||
|
||||
.else
|
||||
|
||||
; Forward decompression -- put backreference bytes forward
|
||||
|
||||
inc copy_match_loop+1
|
||||
beq getmatch_adj_hi
|
||||
getmatch_done:
|
||||
|
||||
.endif
|
||||
|
||||
dex
|
||||
bne copy_match_loop
|
||||
dey
|
||||
bne copy_match_loop
|
||||
jmp decode_token
|
||||
|
||||
.ifdef BACKWARD_DECOMPRESS
|
||||
|
||||
getmatch_adj_hi:
|
||||
dec copy_match_loop+2
|
||||
jmp getmatch_done
|
||||
|
||||
.else
|
||||
|
||||
getmatch_adj_hi:
|
||||
inc copy_match_loop+2
|
||||
jmp getmatch_done
|
||||
.endif
|
||||
|
||||
getcombinedbits:
|
||||
eor #$80
|
||||
asl
|
||||
php
|
||||
|
||||
jsr getnibble ; get nibble into bits 0-3 (for offset bits 1-4)
|
||||
plp ; merge Z bit as the carry bit (for offset bit 0)
|
||||
combinedbitz:
|
||||
rol ; nibble -> bits 1-4; carry(!Z bit) -> bit 0 ; carry cleared
|
||||
decompression_done:
|
||||
rts
|
||||
|
||||
getnibble:
|
||||
NIBBLES = *+1
|
||||
lda #$AA
|
||||
lsr NIBCOUNT
|
||||
bcc need_nibbles
|
||||
and #$0F ; isolate low 4 bits of nibble
|
||||
rts
|
||||
|
||||
need_nibbles:
|
||||
inc NIBCOUNT
|
||||
jsr getsrc ; get 2 nibbles
|
||||
sta NIBBLES
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
sec
|
||||
rts
|
||||
|
||||
.ifdef BACKWARD_DECOMPRESS
|
||||
|
||||
; Backward decompression -- get and put bytes backward
|
||||
|
||||
getput:
|
||||
jsr getsrc
|
||||
putdst:
|
||||
LZSA_DST_LO = *+1
|
||||
LZSA_DST_HI = *+2
|
||||
sta $AAAA
|
||||
lda putdst+1
|
||||
beq putdst_adj_hi
|
||||
dec putdst+1
|
||||
rts
|
||||
|
||||
putdst_adj_hi:
|
||||
dec putdst+2
|
||||
dec putdst+1
|
||||
rts
|
||||
|
||||
getlargesrc:
|
||||
jsr getsrc ; grab low 8 bits
|
||||
tax ; move to X
|
||||
; fall through grab high 8 bits
|
||||
|
||||
getsrc:
|
||||
LZSA_SRC_LO = *+1
|
||||
LZSA_SRC_HI = *+2
|
||||
lda $AAAA
|
||||
pha
|
||||
lda getsrc+1
|
||||
beq getsrc_adj_hi
|
||||
dec getsrc+1
|
||||
pla
|
||||
rts
|
||||
|
||||
getsrc_adj_hi:
|
||||
dec getsrc+2
|
||||
dec getsrc+1
|
||||
pla
|
||||
rts
|
||||
|
||||
.else
|
||||
|
||||
; Forward decompression -- get and put bytes forward
|
||||
|
||||
getput:
|
||||
jsr getsrc
|
||||
putdst:
|
||||
LZSA_DST_LO = *+1
|
||||
LZSA_DST_HI = *+2
|
||||
sta $AAAA
|
||||
inc putdst+1
|
||||
beq putdst_adj_hi
|
||||
rts
|
||||
|
||||
putdst_adj_hi:
|
||||
inc putdst+2
|
||||
rts
|
||||
|
||||
getlargesrc:
|
||||
jsr getsrc ; grab low 8 bits
|
||||
tax ; move to X
|
||||
; fall through grab high 8 bits
|
||||
|
||||
getsrc:
|
||||
getsrc_smc:
|
||||
LZSA_SRC_LO = *+1
|
||||
LZSA_SRC_HI = *+2
|
||||
lda $AAAA
|
||||
inc getsrc+1
|
||||
beq getsrc_adj_hi
|
||||
rts
|
||||
|
||||
getsrc_adj_hi:
|
||||
inc getsrc+2
|
||||
rts
|
||||
.endif
|
||||
|
201
tfv/gr_fast_clear.s
Normal file
@ -0,0 +1,201 @@
|
||||
clear_screens:
|
||||
;===================================
|
||||
; Clear top/bottom of page 0
|
||||
;===================================
|
||||
|
||||
lda #$0
|
||||
sta DRAW_PAGE
|
||||
jsr clear_top
|
||||
jsr clear_bottom
|
||||
|
||||
;===================================
|
||||
; Clear top/bottom of page 1
|
||||
;===================================
|
||||
|
||||
lda #$4
|
||||
sta DRAW_PAGE
|
||||
jsr clear_top
|
||||
jsr clear_bottom
|
||||
|
||||
rts
|
||||
|
||||
|
||||
|
||||
|
||||
;=========================================================
|
||||
; clear_top
|
||||
;=========================================================
|
||||
; clear DRAW_PAGE
|
||||
; original = 14,558 cycles(?) 15ms, 70Hz
|
||||
; OPTIMIZED MAX (page0,48rows): 45*120+4+6 = 5410 = 5.4ms 185Hz
|
||||
; (pageX,40rows): 50*120+4+6 = 6010 = 6.0ms 166Hz
|
||||
; 50*120+4+6+37 = 6055 = 6.0ms 166Hz
|
||||
clear_top:
|
||||
lda #0 ; 2
|
||||
clear_top_a:
|
||||
sta COLOR ; 3
|
||||
clc ; 2
|
||||
lda DRAW_PAGE ; 3
|
||||
|
||||
adc #4 ; 2
|
||||
sta __ctf+2 ; 3
|
||||
sta __ctf+5 ; 3
|
||||
adc #1 ; 2
|
||||
sta __ctf+8 ; 3
|
||||
sta __ctf+11 ; 3
|
||||
adc #1 ; 2
|
||||
sta __ctf2+2 ; 3
|
||||
sta __ctf2+5 ; 3
|
||||
adc #1 ; 2
|
||||
sta __ctf2+8 ; 3
|
||||
sta __ctf2+11 ; 3
|
||||
|
||||
|
||||
ldy #120 ; 2
|
||||
lda COLOR ; 3
|
||||
clear_top_fast_loop:
|
||||
__ctf:
|
||||
sta $400,Y ; 5
|
||||
sta $480,Y ; 5
|
||||
sta $500,Y ; 5
|
||||
sta $580,Y ; 5
|
||||
|
||||
cpy #80 ; 2
|
||||
bpl no_draw_bottom ; 2nt/3
|
||||
__ctf2:
|
||||
sta $600,Y ; 5
|
||||
sta $680,Y ; 5
|
||||
sta $700,Y ; 5
|
||||
sta $780,Y ; 5
|
||||
no_draw_bottom:
|
||||
|
||||
dey ; 2
|
||||
bpl clear_top_fast_loop ; 2nt/3
|
||||
|
||||
rts ; 6
|
||||
|
||||
|
||||
|
||||
|
||||
;=========================================================
|
||||
; clear_bottom
|
||||
;=========================================================
|
||||
; clear bottom of draw page
|
||||
|
||||
clear_bottom:
|
||||
clc ; 2
|
||||
lda DRAW_PAGE ; 3
|
||||
|
||||
adc #6 ; 2
|
||||
sta __cbf2+2 ; 3
|
||||
sta __cbf2+5 ; 3
|
||||
adc #1 ; 2
|
||||
sta __cbf2+8 ; 3
|
||||
sta __cbf2+11 ; 3
|
||||
|
||||
|
||||
ldy #120 ; 2
|
||||
lda #$a0 ; Normal Space ; 2
|
||||
clear_bottom_fast_loop:
|
||||
__cbf2:
|
||||
sta $600,Y ; 5
|
||||
sta $680,Y ; 5
|
||||
sta $700,Y ; 5
|
||||
sta $780,Y ; 5
|
||||
|
||||
dey ; 2
|
||||
cpy #80 ; 2
|
||||
bpl clear_bottom_fast_loop ; 2nt/3
|
||||
|
||||
rts ; 6
|
||||
|
||||
|
||||
;clear_screens_notext:
|
||||
;===================================
|
||||
; Clear top/bottom of page 0
|
||||
;===================================
|
||||
|
||||
; lda #$0
|
||||
; sta DRAW_PAGE
|
||||
; jsr clear_all
|
||||
|
||||
;===================================
|
||||
; Clear top/bottom of page 1
|
||||
;===================================
|
||||
|
||||
; lda #$4
|
||||
; sta DRAW_PAGE
|
||||
; jsr clear_all
|
||||
|
||||
; rts
|
||||
|
||||
|
||||
clear_bottoms:
|
||||
|
||||
lda DRAW_PAGE
|
||||
pha
|
||||
|
||||
;===================================
|
||||
; Clear bottom of page 0
|
||||
;===================================
|
||||
|
||||
lda #$0
|
||||
sta DRAW_PAGE
|
||||
jsr clear_bottom
|
||||
|
||||
;===================================
|
||||
; Clear bottom of page 1
|
||||
;===================================
|
||||
|
||||
lda #$4
|
||||
sta DRAW_PAGE
|
||||
jsr clear_bottom
|
||||
|
||||
pla
|
||||
sta DRAW_PAGE
|
||||
|
||||
rts
|
||||
|
||||
|
||||
;=========================================================
|
||||
; clear_all
|
||||
;=========================================================
|
||||
; clear 48 rows
|
||||
|
||||
clear_all:
|
||||
clc ; 2
|
||||
lda DRAW_PAGE ; 3
|
||||
|
||||
adc #4 ; 2
|
||||
sta __caf+2 ; 3
|
||||
sta __caf+5 ; 3
|
||||
adc #1 ; 2
|
||||
sta __caf+8 ; 3
|
||||
sta __caf+11 ; 3
|
||||
adc #1 ; 2
|
||||
sta __caf2+2 ; 3
|
||||
sta __caf2+5 ; 3
|
||||
adc #1 ; 2
|
||||
sta __caf2+8 ; 3
|
||||
sta __caf2+11 ; 3
|
||||
|
||||
|
||||
ldy #120 ; 2
|
||||
clear_all_color:
|
||||
lda #' '|$80 ; 2
|
||||
clear_all_fast_loop:
|
||||
__caf:
|
||||
sta $400,Y ; 5
|
||||
sta $480,Y ; 5
|
||||
sta $500,Y ; 5
|
||||
sta $580,Y ; 5
|
||||
__caf2:
|
||||
sta $600,Y ; 5
|
||||
sta $680,Y ; 5
|
||||
sta $700,Y ; 5
|
||||
sta $780,Y ; 5
|
||||
|
||||
dey ; 2
|
||||
bpl clear_all_fast_loop ; 2nt/3
|
||||
|
||||
rts ; 6
|
33
tfv/graphics_map/Makefile
Normal file
@ -0,0 +1,33 @@
|
||||
include ../../Makefile.inc
|
||||
|
||||
PNG2RLE = ../../gr-utils/png2rle
|
||||
PNG2GR = ../../gr-utils/png2gr
|
||||
LZSA = ~/research/lzsa/lzsa/lzsa
|
||||
|
||||
tfv_backgrounds.inc: \
|
||||
title.lzsa map.lzsa landing.lzsa harfco.lzsa \
|
||||
belair.lzsa math_office.lzsa video_hr.lzsa \
|
||||
collegep.lzsa umcp.lzsa dining.lzsa metro.lzsa \
|
||||
talbot.lzsa
|
||||
echo "title_lzsa: .incbin \"title.lzsa\"" > tfv_backgrounds.inc
|
||||
echo "map_lzsa: .incbin \"map.lzsa\"" >> tfv_backgrounds.inc
|
||||
echo "landing_lzsa: .incbin \"landing.lzsa\"" >> tfv_backgrounds.inc
|
||||
echo "harfco_lzsa: .incbin \"harfco.lzsa\"" >> tfv_backgrounds.inc
|
||||
echo "belair_lzsa: .incbin \"belair.lzsa\"" >> tfv_backgrounds.inc
|
||||
echo "math_office_lzsa: .incbin \"math_office.lzsa\"" >> tfv_backgrounds.inc
|
||||
echo "video_hr_lzsa: .incbin \"video_hr.lzsa\"" >> tfv_backgrounds.inc
|
||||
echo "collegep_lzsa: .incbin \"collegep.lzsa\"" >> tfv_backgrounds.inc
|
||||
echo "umcp_lzsa: .incbin \"umcp.lzsa\"" >> tfv_backgrounds.inc
|
||||
echo "dining_lzsa: .incbin \"dining.lzsa\"" >> tfv_backgrounds.inc
|
||||
echo "metro_lzsa: .incbin \"metro.lzsa\"" >> tfv_backgrounds.inc
|
||||
echo "talbot_lzsa: .incbin \"talbot.lzsa\"" >> tfv_backgrounds.inc
|
||||
|
||||
%.gr: %.png
|
||||
$(PNG2GR) $< $@
|
||||
|
||||
%.lzsa: %.gr
|
||||
$(LZSA) -r -f2 $< $@
|
||||
|
||||
clean:
|
||||
rm -f *~ tfv_backgrounds.inc
|
||||
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 6.5 KiB After Width: | Height: | Size: 6.5 KiB |
Before Width: | Height: | Size: 515 B After Width: | Height: | Size: 515 B |
Before Width: | Height: | Size: 507 B After Width: | Height: | Size: 507 B |
Before Width: | Height: | Size: 7.7 KiB After Width: | Height: | Size: 7.7 KiB |
Before Width: | Height: | Size: 527 B After Width: | Height: | Size: 527 B |
Before Width: | Height: | Size: 6.8 KiB After Width: | Height: | Size: 6.8 KiB |
Before Width: | Height: | Size: 356 B After Width: | Height: | Size: 356 B |
Before Width: | Height: | Size: 7.9 KiB After Width: | Height: | Size: 7.9 KiB |
Before Width: | Height: | Size: 384 B After Width: | Height: | Size: 384 B |
Before Width: | Height: | Size: 448 B After Width: | Height: | Size: 448 B |
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 5.6 KiB |
Before Width: | Height: | Size: 368 B After Width: | Height: | Size: 368 B |
Before Width: | Height: | Size: 532 B After Width: | Height: | Size: 532 B |
Before Width: | Height: | Size: 402 B After Width: | Height: | Size: 402 B |
Before Width: | Height: | Size: 493 B After Width: | Height: | Size: 493 B |
Before Width: | Height: | Size: 8.6 KiB After Width: | Height: | Size: 8.6 KiB |
Before Width: | Height: | Size: 7.0 KiB After Width: | Height: | Size: 7.0 KiB |
Before Width: | Height: | Size: 6.8 KiB After Width: | Height: | Size: 6.8 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 566 B After Width: | Height: | Size: 566 B |
BIN
tfv/graphics_map/title.png
Normal file
After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 541 B After Width: | Height: | Size: 541 B |
Before Width: | Height: | Size: 508 B After Width: | Height: | Size: 508 B |
Before Width: | Height: | Size: 548 B After Width: | Height: | Size: 548 B |
98
tfv/hardware.inc
Normal file
@ -0,0 +1,98 @@
|
||||
;; HARDWARE LOCATIONS
|
||||
|
||||
KEYPRESS = $C000
|
||||
KEYRESET = $C010
|
||||
|
||||
;; SOFT SWITCHES
|
||||
CLR80COL = $C000 ; PAGE0/PAGE1 normal
|
||||
SET80COL = $C001 ; PAGE0/PAGE1 switches PAGE0 in Aux instead
|
||||
EIGHTYCOLOFF = $C00C
|
||||
EIGHTYCOLON = $C00D
|
||||
TBCOLOR = $C022 ; IIgs text foreground / background colors
|
||||
NEWVIDEO = $C029 ; IIgs graphics modes
|
||||
SPEAKER = $C030
|
||||
CLOCKCTL = $C034 ; bits 0-3 are IIgs border color
|
||||
SET_GR = $C050
|
||||
SET_TEXT = $C051
|
||||
FULLGR = $C052
|
||||
TEXTGR = $C053
|
||||
PAGE0 = $C054
|
||||
PAGE1 = $C055
|
||||
LORES = $C056 ; Enable LORES graphics
|
||||
HIRES = $C057 ; Enable HIRES graphics
|
||||
AN3 = $C05E ; Annunciator 3
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
PADDLE_BUTTON0 = $C061
|
||||
PADDL0 = $C064
|
||||
PTRIG = $C070
|
||||
|
||||
;; BASIC ROUTINES
|
||||
|
||||
NORMAL = $F273
|
||||
|
||||
;; MONITOR ROUTINES
|
||||
|
||||
HLINE = $F819 ;; HLINE Y,$2C at A
|
||||
VLINE = $F828 ;; VLINE A,$2D at Y
|
||||
CLRSCR = $F832 ;; Clear low-res screen
|
||||
CLRTOP = $F836 ;; clear only top of low-res screen
|
||||
SETCOL = $F864 ;; COLOR=A
|
||||
ROM_TEXT2COPY = $F962 ;; iigs
|
||||
TEXT = $FB36
|
||||
TABV = $FB5B ;; VTAB to A
|
||||
ROM_MACHINEID = $FBB3 ;; iigs
|
||||
BELL = $FBDD ;; ring the bell
|
||||
BASCALC = $FBC1 ;;
|
||||
VTAB = $FC22 ;; VTAB to CV
|
||||
HOME = $FC58 ;; Clear the text screen
|
||||
WAIT = $FCA8 ;; delay 1/2(26+27A+5A^2) us
|
||||
CROUT1 = $FD8B
|
||||
SETINV = $FE80 ;; INVERSE
|
||||
SETNORM = $FE84 ;; NORMAL
|
||||
COUT = $FDED ;; output A to screen
|
||||
COUT1 = $FDF0 ;; output A to screen
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
COLOR_BLACK = 0
|
||||
COLOR_RED = 1
|
||||
COLOR_DARKBLUE = 2
|
||||
COLOR_PURPLE = 3
|
||||
COLOR_DARKGREEN = 4
|
||||
COLOR_GREY = 5
|
||||
COLOR_MEDIUMBLUE = 6
|
||||
COLOR_LIGHTBLUE = 7
|
||||
COLOR_BROWN = 8
|
||||
COLOR_ORANGE = 9
|
||||
COLOR_GREY2 = 10
|
||||
COLOR_PINK = 11
|
||||
COLOR_LIGHTGREEN = 12
|
||||
COLOR_YELLOW = 13
|
||||
COLOR_AQUA = 14
|
||||
COLOR_WHITE = 15
|
||||
|
||||
COLOR_BOTH_BLACK = $00
|
||||
COLOR_BOTH_RED = $11
|
||||
COLOR_BOTH_DARKBLUE = $22
|
||||
COLOR_BOTH_DARKGREEN = $44
|
||||
COLOR_BOTH_GREY = $55
|
||||
COLOR_BOTH_MEDIUMBLUE = $66
|
||||
COLOR_BOTH_LIGHTBLUE = $77
|
||||
COLOR_BOTH_BROWN = $88
|
||||
COLOR_BOTH_ORANGE = $99
|
||||
COLOR_BOTH_PINK = $BB
|
||||
COLOR_BOTH_LIGHTGREEN = $CC
|
||||
COLOR_BOTH_YELLOW = $DD
|
||||
COLOR_BOTH_AQUA = $EE
|
||||
COLOR_BOTH_WHITE = $FF
|
||||
|
351
tfv/multiply_fast.s
Normal file
@ -0,0 +1,351 @@
|
||||
; Fast mutiply
|
||||
|
||||
|
||||
; Note for our purposes we only care about 8.8 x 8.8 fixed point
|
||||
; with 8.8 result, which means we only care about the middle two bytes
|
||||
; of the 32 bit result. So we disable generation of the high and low byte
|
||||
; to save some cycles.
|
||||
|
||||
;
|
||||
; The old routine took around 700 cycles for a 16bitx16bit=32bit mutiply
|
||||
; This routine, at an expense of 2kB of looku tables, takes around 250
|
||||
; If you reuse a term the next time this drops closer to 200
|
||||
|
||||
; This routine was described by Stephen Judd and found
|
||||
; in The Fridge and in the C=Hacking magazine
|
||||
; http://codebase64.org/doku.php?id=base:seriously_fast_multiplication
|
||||
|
||||
; The key thing to note is that
|
||||
; (a+b)^2 (a-b)^2
|
||||
; a*b = ------- - --------
|
||||
; 4 4
|
||||
; So if you have tables of the squares of 0..511 you can lookup and subtract
|
||||
; instead of multiplying.
|
||||
|
||||
; Table generation: I:0..511
|
||||
; square1_lo = <((I*I)/4)
|
||||
; square1_hi = >((I*I)/4)
|
||||
; square2_lo = <(((I-255)*(I-255))/4)
|
||||
; square2_hi = >(((I-255)*(I-255))/4)
|
||||
|
||||
; Note: DOS3.3 starts at $9600
|
||||
|
||||
.ifndef square1_lo
|
||||
square1_lo = $8E00
|
||||
square1_hi = $9000
|
||||
square2_lo = $9200
|
||||
square2_hi = $9400
|
||||
.endif
|
||||
|
||||
; for(i=0;i<512;i++) {
|
||||
; square1_lo[i]=((i*i)/4)&0xff;
|
||||
; square1_hi[i]=(((i*i)/4)>>8)&0xff;
|
||||
; square2_lo[i]=( ((i-255)*(i-255))/4)&0xff;
|
||||
; square2_hi[i]=(( ((i-255)*(i-255))/4)>>8)&0xff;
|
||||
; }
|
||||
|
||||
init_multiply_tables:
|
||||
|
||||
; Build the add tables
|
||||
|
||||
ldx #$00
|
||||
txa
|
||||
.byte $c9 ; CMP #immediate - skip TYA and clear carry flag
|
||||
lb1: tya
|
||||
adc #$00 ; 0
|
||||
ml1: sta square1_hi,x ; square1_hi[0]=0
|
||||
tay ; y=0
|
||||
cmp #$40 ; subtract 64 and update flags (c=0)
|
||||
txa ; a=0
|
||||
ror ; rotate
|
||||
ml9: adc #$00 ; add 0
|
||||
sta ml9+1 ; update add value
|
||||
inx ; x=1
|
||||
ml0: sta square1_lo,x ; square1_lo[0]=1
|
||||
bne lb1 ; if not zero, loop
|
||||
inc ml0+2 ; increment values
|
||||
inc ml1+2 ; increment values
|
||||
clc ; c=0
|
||||
iny ; y=1
|
||||
bne lb1 ; loop
|
||||
|
||||
; Build the subtract tables based on the existing one
|
||||
|
||||
ldx #$00
|
||||
ldy #$ff
|
||||
second_table:
|
||||
lda square1_hi+1,x
|
||||
sta square2_hi+$100,x
|
||||
lda square1_hi,x
|
||||
sta square2_hi,y
|
||||
lda square1_lo+1,x
|
||||
sta square2_lo+$100,x
|
||||
lda square1_lo,x
|
||||
sta square2_lo,y
|
||||
dey
|
||||
inx
|
||||
bne second_table
|
||||
|
||||
|
||||
rts
|
||||
|
||||
|
||||
; Fast 16x16 bit unsigned multiplication, 32-bit result
|
||||
; Input: NUM1H:NUM1L * NUM2H:NUM2L
|
||||
; Result: RESULT3:RESULT2:RESULT1:RESULT0
|
||||
;
|
||||
; Does self-modifying code to hard-code NUM1H:NUM1L into the code
|
||||
; carry=0: re-use previous NUM1H:NUM1L
|
||||
; carry=1: reload NUM1H:NUM1L (58 cycles slower)
|
||||
;
|
||||
; clobbered: RESULT, X, A, C
|
||||
; Allocation setup: T1,T2 and RESULT preferably on Zero-page.
|
||||
;
|
||||
; NUM1H (x_i), NUM1L (x_f)
|
||||
; NUM2H (y_i), NUM2L (y_f)
|
||||
|
||||
; NUM1L * NUM2L = AAaa
|
||||
; NUM1L * NUM2H = BBbb
|
||||
; NUM1H * NUM2L = CCcc
|
||||
; NUM1H * NUM2H = DDdd
|
||||
;
|
||||
; AAaa
|
||||
; BBbb
|
||||
; CCcc
|
||||
; + DDdd
|
||||
; ----------
|
||||
; RESULT
|
||||
|
||||
;fixed_16x16_mul_unsigned:
|
||||
|
||||
multiply:
|
||||
|
||||
bcc num1_same_as_last_time ; 2nt/3
|
||||
|
||||
;============================
|
||||
; Set up self-modifying code
|
||||
; this changes the code to be hard-coded to multiply by NUM1H:NUM1L
|
||||
;============================
|
||||
|
||||
lda NUM1L ; load the low byte ; 3
|
||||
sta sm1a+1 ; 3
|
||||
sta sm3a+1 ; 3
|
||||
sta sm5a+1 ; 3
|
||||
sta sm7a+1 ; 3
|
||||
eor #$ff ; invert the bits for subtracting ; 2
|
||||
sta sm2a+1 ; 3
|
||||
sta sm4a+1 ; 3
|
||||
sta sm6a+1 ; 3
|
||||
sta sm8a+1 ; 3
|
||||
lda NUM1H ; load the high byte ; 3
|
||||
sta sm1b+1 ; 3
|
||||
sta sm3b+1 ; 3
|
||||
sta sm5b+1 ; 3
|
||||
; sta sm7b+1 ;
|
||||
eor #$ff ; invert the bits for subtractin ; 2
|
||||
sta sm2b+1 ; 3
|
||||
sta sm4b+1 ; 3
|
||||
sta sm6b+1 ; 3
|
||||
; sta sm8b+1 ;
|
||||
;===========
|
||||
; 52
|
||||
|
||||
num1_same_as_last_time:
|
||||
|
||||
;==========================
|
||||
; Perform NUM1L * NUM2L = AAaa
|
||||
;==========================
|
||||
|
||||
ldx NUM2L ; (low le) ; 3
|
||||
sec ; 2
|
||||
sm1a:
|
||||
lda square1_lo,x ; 4
|
||||
sm2a:
|
||||
sbc square2_lo,x ; 4
|
||||
|
||||
; a is _aa
|
||||
|
||||
; sta RESULT+0 ;
|
||||
|
||||
sm3a:
|
||||
lda square1_hi,x ; 4
|
||||
sm4a:
|
||||
sbc square2_hi,x ; 4
|
||||
; a is _AA
|
||||
sta _AA+1 ; 3
|
||||
;===========
|
||||
; 24
|
||||
|
||||
; Perform NUM1H * NUM2L = CCcc
|
||||
sec ; 2
|
||||
sm1b:
|
||||
lda square1_lo,x ; 4
|
||||
sm2b:
|
||||
sbc square2_lo,x ; 4
|
||||
; a is _cc
|
||||
sta _cc+1 ; 3
|
||||
sm3b:
|
||||
lda square1_hi,x ; 4
|
||||
sm4b:
|
||||
sbc square2_hi,x ; 4
|
||||
; a is _CC
|
||||
sta _CC+1 ; 3
|
||||
;===========
|
||||
; 24
|
||||
|
||||
;==========================
|
||||
; Perform NUM1L * NUM2H = BBbb
|
||||
;==========================
|
||||
ldx NUM2H ; 3
|
||||
sec ; 2
|
||||
sm5a:
|
||||
lda square1_lo,x ; 4
|
||||
sm6a:
|
||||
sbc square2_lo,x ; 4
|
||||
; a is _bb
|
||||
sta _bb+1 ; 3
|
||||
|
||||
sm7a:
|
||||
lda square1_hi,x ; 4
|
||||
sm8a:
|
||||
sbc square2_hi,x ; 4
|
||||
; a is _BB
|
||||
sta _BB+1 ; 3
|
||||
;===========
|
||||
; 27
|
||||
|
||||
;==========================
|
||||
; Perform NUM1H * NUM2H = DDdd
|
||||
;==========================
|
||||
sec ; 2
|
||||
sm5b:
|
||||
lda square1_lo,x ; 4
|
||||
sm6b:
|
||||
sbc square2_lo,x ; 4
|
||||
; a is _dd
|
||||
sta _dd+1 ; 3
|
||||
;sm7b:
|
||||
; lda square1_hi,x ;
|
||||
;sm8b:
|
||||
; sbc square2_hi,x ;
|
||||
; a = _DD
|
||||
; sta RESULT+3 ;
|
||||
;===========
|
||||
; 13
|
||||
|
||||
;===========================================
|
||||
; Add the separate multiplications together
|
||||
;===========================================
|
||||
|
||||
clc ; 2
|
||||
_AA:
|
||||
lda #0 ; loading _AA ; 2
|
||||
_bb:
|
||||
adc #0 ; adding in _bb ; 2
|
||||
sta RESULT+1 ; 3
|
||||
;==========
|
||||
; 9
|
||||
; product[2]=_BB+_CC+c
|
||||
|
||||
_BB:
|
||||
lda #0 ; loading _BB ; 2
|
||||
_CC:
|
||||
adc #0 ; adding in _CC ; 2
|
||||
sta RESULT+2 ; 3
|
||||
;===========
|
||||
; 7
|
||||
|
||||
; product[3]=_DD+c
|
||||
|
||||
; bcc dd_no_carry1 ;
|
||||
; inc RESULT+3 ;
|
||||
clc ; 2
|
||||
;=============
|
||||
; 2
|
||||
dd_no_carry1:
|
||||
|
||||
; product[1]=_AA+_bb+_cc
|
||||
|
||||
_cc:
|
||||
lda #0 ; load _cc ; 2
|
||||
adc RESULT+1 ; 3
|
||||
sta RESULT+1 ; 3
|
||||
|
||||
; product[2]=_BB+_CC+_dd+c
|
||||
|
||||
_dd:
|
||||
lda #0 ; load _dd ; 2
|
||||
adc RESULT+2 ; 3
|
||||
sta RESULT+2 ; 3
|
||||
|
||||
;===========
|
||||
; 16
|
||||
; product[3]=_DD+c
|
||||
|
||||
|
||||
; bcc dd_no_carry2 ;
|
||||
; inc RESULT+3 ;
|
||||
|
||||
;=============
|
||||
; 0
|
||||
|
||||
dd_no_carry2:
|
||||
|
||||
; *z_i=product[1];
|
||||
; *z_f=product[0];
|
||||
|
||||
; rts ; 6
|
||||
|
||||
|
||||
;=================
|
||||
; Signed multiply
|
||||
;=================
|
||||
|
||||
;multiply:
|
||||
|
||||
; jsr fixed_16x16_mul_unsigned ; 6
|
||||
|
||||
lda NUM1H ; x_i ; 3
|
||||
;===========
|
||||
; 12
|
||||
|
||||
|
||||
bpl x_positive ;^3/2nt
|
||||
|
||||
sec ; 2
|
||||
lda RESULT+2 ; 3
|
||||
sbc NUM2L ; 3
|
||||
sta RESULT+2 ; 3
|
||||
; lda RESULT+3 ;
|
||||
; sbc NUM2H ;
|
||||
; sta RESULT+3 ;
|
||||
;============
|
||||
; 10
|
||||
|
||||
x_positive:
|
||||
|
||||
lda NUM2H ; y_i ; 3
|
||||
;============
|
||||
; ; 6
|
||||
|
||||
bpl y_positive ;^3/2nt
|
||||
|
||||
|
||||
sec ; 2
|
||||
lda RESULT+2 ; 3
|
||||
sbc NUM1L ; 3
|
||||
sta RESULT+2 ; 3
|
||||
; lda RESULT+3 ;
|
||||
; sbc NUM1H ;
|
||||
; sta RESULT+3 ;
|
||||
;===========
|
||||
; 10
|
||||
|
||||
y_positive:
|
||||
ldx RESULT+2 ; *z_i=product[2]; ; 3
|
||||
lda RESULT+1 ; *z_f=product[1]; ; 3
|
||||
|
||||
rts ; 6
|
||||
;==========
|
||||
; 12
|
||||
|
@ -1,4 +1,5 @@
|
||||
.include "tfv_zp.inc"
|
||||
.include "hardware.inc"
|
||||
|
||||
;================================
|
||||
; Clear screen and setup graphics
|
||||
@ -90,7 +91,7 @@ exit:
|
||||
.include "tfv_worldmap.s"
|
||||
.include "tfv_info.s"
|
||||
|
||||
.include "../asm_routines/gr_fast_clear.s"
|
||||
.include "gr_fast_clear.s"
|
||||
.include "../asm_routines/gr_hlin.s"
|
||||
.include "../asm_routines/pageflip.s"
|
||||
.include "../asm_routines/gr_setpage.s"
|
||||
@ -100,7 +101,8 @@ exit:
|
||||
.include "../asm_routines/memset.s"
|
||||
.include "../asm_routines/gr_vlin.s"
|
||||
.include "../asm_routines/gr_copy.s"
|
||||
.include "../asm_routines/gr_unrle.s"
|
||||
;.include "../asm_routines/gr_unrle.s"
|
||||
.include "decompress_fast_v2.s"
|
||||
.include "../asm_routines/gr_offsets.s"
|
||||
|
||||
;===============================================
|
||||
@ -115,4 +117,4 @@ name:
|
||||
|
||||
|
||||
.include "tfv_sprites.inc"
|
||||
.include "tfv_backgrounds.inc"
|
||||
.include "graphics_map/tfv_backgrounds.inc"
|
||||
|
@ -1,419 +0,0 @@
|
||||
title_rle: .byte $28 ; ysize=40
|
||||
.byte $00, $A0,$19,$20, $AF,$00, $22, $A3,$66, $22, $62
|
||||
.byte $66, $62, $22, $66, $A3,$22, $66, $26
|
||||
.byte $62, $22, $62, $26, $62, $22, $A3,$66
|
||||
.byte $22, $55, $00, $A3,$11, $44, $A3,$22, $44
|
||||
.byte $A3,$22, $00,$00, $22,$22, $66, $22,$22, $66, $62
|
||||
.byte $66, $22, $66, $A3,$22, $66, $26, $62
|
||||
.byte $22, $66, $22, $66, $22,$22, $66, $22,$22
|
||||
.byte $55, $00, $01, $11, $41, $44, $42
|
||||
.byte $22, $42, $44, $42, $22, $02, $00,$00
|
||||
.byte $22,$22, $66, $22,$22, $66, $22, $66, $22
|
||||
.byte $A3,$66, $22, $66, $62, $26, $22, $26
|
||||
.byte $62, $26, $22,$22, $66, $22,$22, $55, $00,$00
|
||||
.byte $11, $A3,$44, $22, $A3,$44, $22, $A3,$00, $02
|
||||
.byte $A0,$18,$52, $55, $AE,$00, $A0,$1E,$60, $AA,$00, $66, $A3,$22
|
||||
.byte $66, $26, $22, $26, $66, $22, $26
|
||||
.byte $66, $22, $66, $A3,$22, $66, $26, $22
|
||||
.byte $26, $66, $26, $62,$62, $66, $22, $66
|
||||
.byte $22, $66, $55, $A9,$00, $66, $22, $26
|
||||
.byte $66,$66, $22, $26, $22, $66, $22, $62
|
||||
.byte $26, $22, $66,$66, $22, $66,$66, $22, $26
|
||||
.byte $22, $66, $22, $26,$26, $66, $62, $26
|
||||
.byte $62, $66, $55, $A9,$00, $66, $22, $A3,$66
|
||||
.byte $22, $66, $22, $66, $22, $66, $62
|
||||
.byte $22, $66,$66, $22, $66,$66, $22, $66, $22
|
||||
.byte $66, $26,$26, $22, $66,$66, $22, $66,$66, $55
|
||||
.byte $A9,$00, $06, $A0,$1D,$56, $55, $A3,$00, $10, $A0,$24,$00
|
||||
.byte $10, $00, $10, $11, $01, $A5,$00, $A8,$CC
|
||||
.byte $40, $A9,$00, $D0, $0D, $00, $D0, $0D
|
||||
.byte $00, $D0, $A5,$00, $11, $AA,$00, $04, $A4,$54
|
||||
.byte $CC,$CC, $44, $55, $A6,$00, $D0, $DD, $D0,$D0
|
||||
.byte $DD, $D0,$D0, $DD, $D0, $A3,$00, $01,$01, $11
|
||||
.byte $01,$01, $AC,$00, $CC,$CC, $44, $54, $55, $A6,$00
|
||||
.byte $DD, $A7,$BB, $DD, $A4,$00, $10, $11, $10
|
||||
.byte $AC,$00, $CC,$CC, $44, $54, $55, $A7,$00, $DD
|
||||
.byte $BB, $BF, $B0, $BB, $BF, $B0, $BB
|
||||
.byte $DD, $A3,$00, $10, $A3,$11, $10, $AA,$00, $CC,$CC
|
||||
.byte $44, $54, $55, $A8,$00, $DD, $DB, $BB
|
||||
.byte $3B, $33, $BB,$BB, $DB, $DD, $A3,$00, $01,$01
|
||||
.byte $11, $01,$01, $AA,$00, $CC,$CC, $44, $55, $A9,$00
|
||||
.byte $DD,$DD, $A5,$BB, $DD,$DD, $A5,$00, $11, $AC,$00, $CC,$CC
|
||||
.byte $44, $55, $A9,$00, $0D, $00, $BB, $A3,$B1
|
||||
.byte $BB, $00, $0D, $A4,$00, $BB,$BB, $AC,$00, $0C
|
||||
.byte $4C, $44, $55, $AC,$00, $BB,$BB, $A6,$00, $20
|
||||
.byte $22, $2B, $0B, $AE,$00, $05,$05, $A9,$00, $20
|
||||
.byte $A6,$22, $A3,$20, $22,$22, $02, $A9,$00
|
||||
.byte $A1
|
||||
map_rle: .byte $28 ; ysize=40
|
||||
.byte $A0,$23,$66, $46, $06, $A5,$66, $56, $AE,$66, $E6
|
||||
.byte $A4,$66, $77, $FF, $F6, $A8,$66, $46, $A3,$44
|
||||
.byte $A3,$66, $E6, $56, $55, $56, $E6, $AB,$66
|
||||
.byte $6E, $66, $6E, $66,$66, $67, $A4,$6F, $A7,$66
|
||||
.byte $4F, $47, $4F, $44, $AB,$66, $A0,$17,$D6, $A3,$66
|
||||
.byte $64, $A3,$44, $46, $A8,$66, $DD, $A7,$FF, $4F
|
||||
.byte $A5,$FF, $8F, $88, $8F, $FF, $7F, $77
|
||||
.byte $07, $77, $07, $77, $DD, $A3,$66, $E6
|
||||
.byte $A3,$E4, $E6, $A7,$66, $DD, $A6,$FF, $F4, $84
|
||||
.byte $F4, $A4,$FF, $8F, $A3,$FF, $7F, $77, $A3,$75
|
||||
.byte $77, $DD, $AF,$66, $DD, $AC,$CF, $A3,$C8, $A3,$CF
|
||||
.byte $A5,$C7, $DD, $AA,$66, $E6, $A4,$66, $DD, $CC,$CC
|
||||
.byte $4C, $A3,$CC, $77, $A6,$CC, $8C, $88, $8C
|
||||
.byte $CC, $4C, $A5,$44, $DD, $A9,$66, $6E, $66
|
||||
.byte $6E, $A3,$66, $DD, $CC, $4C, $44, $4C
|
||||
.byte $CC, $22, $A3,$FF, $22, $A3,$CC, $8C, $A3,$CC
|
||||
.byte $C4, $A5,$44, $DD, $AC,$66, $E6, $66,$66, $DD
|
||||
.byte $CC,$CC, $C8, $CC,$CC, $C2, $C7,$C7, $CF, $C2,$C2
|
||||
.byte $CC, $A3,$C8, $A3,$CC, $C8, $CC, $C8, $CC
|
||||
.byte $C8, $DD, $AB,$66, $6E, $66, $6E, $66
|
||||
.byte $DD, $4C, $84, $C4, $AA,$CC, $8C, $88
|
||||
.byte $8C, $CC, $4C, $A5,$44, $DD, $AF,$66, $DD
|
||||
.byte $C4, $CC, $88, $AA,$CC, $8C, $A3,$CC, $A6,$44
|
||||
.byte $DD, $66,$66, $55, $56, $66,$66, $55, $A8,$66
|
||||
.byte $DD, $A5,$CC, $A5,$9C, $CC, $1C, $A3,$C8, $1C
|
||||
.byte $CC,$CC, $84, $C4, $84, $C4, $84, $DD
|
||||
.byte $66,$66, $55, $66, $65, $56, $55, $A8,$66
|
||||
.byte $DD, $A3,$CC, $4C,$4C, $99, $49, $44, $99,$99
|
||||
.byte $CC, $11, $C1, $1C, $C1, $11, $A7,$CC
|
||||
.byte $DD, $66,$66, $65, $A3,$66, $65, $66,$66, $6E
|
||||
.byte $E6, $6E, $A3,$66, $DD, $CC,$CC, $44, $C8
|
||||
.byte $8C, $99, $94, $44, $94, $99, $CC
|
||||
.byte $C1, $A3,$CC, $C1, $A7,$CC, $DD, $A3,$66, $16
|
||||
.byte $91, $16, $A4,$66, $EE, $A4,$66, $6D, $A4,$DC
|
||||
.byte $D8, $D9,$D9, $D4, $D9,$D9, $DC,$DC, $8C, $88
|
||||
.byte $8E, $EE, $A7,$DC, $6D, $A3,$66, $69, $99
|
||||
.byte $69, $A3,$66, $05, $55, $66, $55, $65
|
||||
.byte $A0,$1C,$66, $86, $96, $99, $96, $86, $66,$66
|
||||
.byte $A4,$65, $A0,$1F,$66, $99, $A0,$1B,$66, $E6, $6E, $E6
|
||||
.byte $A9,$66, $69, $A0,$2B,$66
|
||||
.byte $A1
|
||||
landing_rle: .byte $28 ; ysize=40
|
||||
.byte $A3,$66, $56, $A0,$27,$66, $55, $F5, $A0,$26,$66, $55
|
||||
.byte $FF, $F5, $A0,$25,$66, $55, $FF,$FF, $F5, $A0,$24,$66
|
||||
.byte $55, $A3,$FF, $F5, $A0,$20,$66, $CC, $2C, $CC
|
||||
.byte $55, $AF,$F5, $A4,$22, $A0,$12,$CC, $62, $22, $55
|
||||
.byte $FF, $A3,$11, $44, $A3,$22, $44, $A3,$22, $A3,$FF
|
||||
.byte $A5,$22, $A0,$11,$CC, $22, $26, $55, $FF,$FF, $11
|
||||
.byte $A3,$44, $22, $A3,$44, $22, $A4,$FF, $A6,$22, $A0,$10,$CC
|
||||
.byte $26,$26, $55, $FF,$FF, $F1, $A3,$F4, $F2, $A3,$F4
|
||||
.byte $F2, $FF, $8F,$8F, $FF, $A7,$22, $AF,$CC, $62
|
||||
.byte $26, $55, $AA,$5F, $FF,$FF, $88,$88, $FF, $A8,$22
|
||||
.byte $AE,$CC, $22, $C2, $55, $A9,$FF, $55, $FF,$FF
|
||||
.byte $88,$88, $AA,$FF, $AF,$CC, $A3,$C5, $85, $A9,$C5, $85,$85
|
||||
.byte $A4,$C5, $85, $A5,$C5, $A0,$11,$CC, $C8, $A9,$CC, $A4,$85
|
||||
.byte $A4,$CC, $C8, $A0,$1E,$CC, $A6,$85, $A0,$FF,$CC, $A5,$CC
|
||||
.byte $A1
|
||||
harfco_rle: .byte $28 ; ysize=40
|
||||
.byte $A5,$00, $A0,$1D,$5A, $77, $A9,$00, $F0, $00, $A0,$1B,$5A
|
||||
.byte $77, $A3,$00, $F0, $A3,$00, $F0, $A0,$17,$00, $F0
|
||||
.byte $A0,$15,$00, $0F, $A0,$19,$00, $F0, $A0,$16,$00, $0F, $A0,$17,$00
|
||||
.byte $A0,$28,$22, $A0,$1D,$77, $72, $AA,$22, $A0,$1F,$77, $72, $A8,$22
|
||||
.byte $A0,$21,$77, $72, $A6,$22, $A0,$11,$77, $07, $77, $A5,$07
|
||||
.byte $77, $00, $77, $07, $A7,$77, $A5,$22, $AC,$77
|
||||
.byte $57, $00, $57, $00, $57, $00, $57
|
||||
.byte $A5,$00, $57, $00, $57, $00, $57, $A7,$77
|
||||
.byte $A4,$22, $AB,$77, $75, $55, $50, $A3,$55, $50
|
||||
.byte $A9,$55, $50, $55, $75, $A7,$77, $A3,$22, $A0,$25,$77
|
||||
.byte $A3,$22, $A0,$24,$77, $27, $A3,$22, $A0,$24,$77, $A4,$22, $A0,$22,$77
|
||||
.byte $27, $A5,$22, $A0,$21,$77, $27, $A6,$22, $A0,$20,$77, $27
|
||||
.byte $A7,$22, $A0,$1F,$77, $27, $A8,$22, $A0,$1E,$77, $27, $A9,$22
|
||||
.byte $A1
|
||||
belair_rle: .byte $28 ; ysize=40
|
||||
.byte $AA,$00, $05, $57, $75, $57, $75, $57
|
||||
.byte $75, $57, $75, $57, $75, $57, $75
|
||||
.byte $57, $75, $57, $75, $57, $75, $57
|
||||
.byte $05, $AB,$00, $70, $A9,$00, $05, $AF,$57, $05
|
||||
.byte $A5,$00, $0D, $D0, $A5,$00, $07, $7F, $07
|
||||
.byte $A5,$00, $70, $F7, $70, $A0,$17,$00, $DD, $AE,$00
|
||||
.byte $07, $A0,$17,$00, $0D, $AD,$00, $70, $A0,$1C,$00, $60
|
||||
.byte $E6, $60, $A7,$00, $07, $7F, $07, $A6,$00
|
||||
.byte $50, $A6,$85, $50, $AE,$00, $06, $AC,$00, $A5,$50
|
||||
.byte $A8,$88, $A0,$10,$00, $50,$50, $20, $A3,$22, $92, $D9
|
||||
.byte $A3,$50, $88, $98, $88, $98, $55, $88
|
||||
.byte $89, $88, $08,$08, $88, $89, $88, $A3,$50
|
||||
.byte $A6,$40, $A7,$50, $20, $A3,$22, $92, $D9, $0D
|
||||
.byte $D9, $A3,$00, $A4,$88, $55, $A3,$88, $00,$00, $A3,$88
|
||||
.byte $A3,$00, $A6,$74, $A7,$00, $22,$22, $92, $D9, $0D
|
||||
.byte $D9, $9D, $D9, $A9,$00, $08, $88, $00,$00
|
||||
.byte $88, $08, $A4,$00, $77, $07, $E7,$E7, $07
|
||||
.byte $77, $A7,$00, $88, $D9, $0D, $D9, $9D
|
||||
.byte $D9, $0D, $D9, $A0,$13,$00, $77, $00, $EE,$EE
|
||||
.byte $00, $77, $A7,$00, $88, $D9, $9D, $D9
|
||||
.byte $0D, $D9, $9D, $09, $A0,$13,$00, $77,$77, $EE,$EE
|
||||
.byte $77,$77, $A4,$00, $D0, $10, $00, $88, $D9
|
||||
.byte $0D, $D9, $00, $09, $A0,$1F,$00, $DD, $11
|
||||
.byte $01, $88, $D9, $9D, $09, $A0,$21,$00, $DD
|
||||
.byte $00,$00, $08, $09, $A0,$20,$00, $40, $44, $04
|
||||
.byte $DD, $04, $44, $A0,$23,$00, $A5,$04, $A0,$A0,$00
|
||||
.byte $A1
|
||||
math_office_rle: .byte $28 ; ysize=40
|
||||
.byte $A0,$19,$00, $AF,$44, $A0,$19,$00, $44, $FF, $4F, $F4
|
||||
.byte $44,$44, $F4, $FF, $F4, $44,$44, $FF, $F4
|
||||
.byte $44, $FF, $A0,$19,$00, $44, $FF, $4F, $F4
|
||||
.byte $44, $4F, $44, $FF, $44, $4F, $44
|
||||
.byte $FF, $44, $4F, $FF, $A0,$19,$00, $44, $4F,$4F
|
||||
.byte $A4,$44, $4F, $A3,$44, $4F, $44,$44, $4F, $A0,$19,$00
|
||||
.byte $AF,$44, $AB,$00, $80,$80, $A7,$00, $B8, $88, $00,$00
|
||||
.byte $0A, $AF,$07, $AB,$00, $88, $BB, $B0, $A5,$00
|
||||
.byte $0B, $BB, $88, $A4,$00, $B8, $88, $AE,$00
|
||||
.byte $88, $B8, $A7,$00, $88, $FB, $A7,$00, $2B
|
||||
.byte $A4,$00, $0B, $BB, $88, $AE,$00, $88, $BB
|
||||
.byte $0B, $A6,$00, $F8, $FF, $F0, $A5,$00, $44
|
||||
.byte $22, $A5,$00, $FF, $08, $80, $AD,$00, $88
|
||||
.byte $F0, $A7,$00, $7F, $11, $7F, $A4,$70, $11
|
||||
.byte $74, $72, $A3,$70, $11, $7F,$7F, $A6,$70, $A9,$00
|
||||
.byte $77, $7F, $B0, $A4,$00, $70, $77,$77, $71
|
||||
.byte $A5,$77, $71, $A5,$77, $71, $A6,$77, $57, $55
|
||||
.byte $A9,$00, $4F,$4F, $A4,$00, $A0,$16,$57, $55, $05, $55
|
||||
.byte $A8,$00, $04, $B4, $04,$04, $A3,$00, $55, $05,$05
|
||||
.byte $55, $05, $B5, $A4,$05, $D5, $A5,$05, $B5
|
||||
.byte $A4,$05, $55, $00,$00, $55, $A9,$00, $8F, $80
|
||||
.byte $A4,$00, $55, $00,$00, $55, $00, $08,$08, $00,$00
|
||||
.byte $08,$08, $A4,$00, $08,$08, $A4,$00, $55, $00,$00, $55
|
||||
.byte $AF,$00, $55, $00,$00, $55, $A0,$11,$00, $55, $00,$00
|
||||
.byte $55, $AF,$00, $55, $A0,$14,$00, $55, $A0,$12,$00, $05
|
||||
.byte $A0,$14,$00, $05, $A0,$82,$00
|
||||
.byte $A1
|
||||
video_hr_rle: .byte $28 ; ysize=40
|
||||
.byte $A0,$20,$00, $77, $A6,$57, $77, $A0,$20,$00, $77, $55,$55
|
||||
.byte $15, $A3,$55, $77, $A0,$20,$00, $77, $55, $51
|
||||
.byte $11, $A3,$55, $77, $A0,$20,$00, $77, $55,$55, $11
|
||||
.byte $A3,$55, $77, $A0,$13,$00, $50, $55,$55, $50, $A9,$00
|
||||
.byte $77, $55, $A3,$51, $55,$55, $77, $A3,$00, $A6,$70
|
||||
.byte $A3,$00, $DD, $BD, $A5,$00, $B0, $BB, $88
|
||||
.byte $A4,$00, $80,$80, $A4,$00, $77, $7C, $A6,$77, $00,$00
|
||||
.byte $70, $A4,$77, $87, $88, $A3,$00, $DD, $BB
|
||||
.byte $0B, $A5,$00, $BB, $08, $A3,$00, $B0, $BB
|
||||
.byte $88, $A9,$00, $05, $50, $00,$00, $74, $47
|
||||
.byte $44, $77,$77, $87, $00, $88, $A3,$00, $DD
|
||||
.byte $FF, $A6,$00, $22,$22, $A4,$00, $BB, $08, $AB,$00
|
||||
.byte $05, $77, $99,$99, $74, $77, $87, $00,$00
|
||||
.byte $88, $A3,$00, $DD, $FF, $0F, $0B, $00,$00
|
||||
.byte $B0, $20, $22,$22, $A4,$00, $11, $AD,$00, $77
|
||||
.byte $79,$79, $77, $87, $00, $E0,$E0, $88, $A3,$00
|
||||
.byte $0D, $8F, $A6,$00, $52,$52, $00,$00, $0B, $01
|
||||
.byte $11, $AD,$00, $A3,$77, $87, $00, $D0, $DE
|
||||
.byte $EE, $88, $A4,$07, $88, $A6,$07, $55,$55, $A4,$07
|
||||
.byte $44, $AD,$07, $77,$77, $87, $00, $30, $3D
|
||||
.byte $DD, $8E, $08, $A3,$00, $08, $B8, $08
|
||||
.byte $A5,$00, $55,$55, $A4,$00, $44, $A9,$00, $B6,$B6, $E0
|
||||
.byte $00, $77, $08, $00, $22,$22, $33, $8D
|
||||
.byte $08, $A5,$00, $BB, $A6,$00, $55,$55, $A4,$00, $44
|
||||
.byte $A8,$00, $0B, $BB,$BB, $EE, $00, $08, $00
|
||||
.byte $10, $12, $22, $83, $08, $A6,$00, $08,$08
|
||||
.byte $A4,$00, $A3,$08, $A3,$00, $08,$08, $A9,$00, $60, $6B
|
||||
.byte $0E, $00,$00, $40, $41, $11, $82, $08
|
||||
.byte $A0,$19,$00, $78, $A3,$88, $80, $A3,$66, $00, $19
|
||||
.byte $99, $44, $11, $88, $A0,$1A,$00, $88, $87
|
||||
.byte $78, $A3,$88, $86, $66, $00, $11, $99
|
||||
.byte $44, $88, $A0,$1B,$00, $A3,$88, $87, $78, $8B
|
||||
.byte $86, $88, $80, $11, $99, $88, $A0,$1C,$00
|
||||
.byte $A5,$88, $77, $A3,$87, $11, $88, $A0,$1D,$00, $A5,$88
|
||||
.byte $77, $A4,$88, $A0,$1F,$00, $08, $A3,$88, $77, $A3,$88
|
||||
.byte $A1
|
||||
collegep_rle: .byte $28 ; ysize=40
|
||||
.byte $A0,$21,$66, $F6,$F6, $A8,$66, $F6,$F6, $A3,$FF, $F6, $A0,$15,$66
|
||||
.byte $F6, $A5,$FF, $F6, $A6,$66, $6F, $5F, $FF
|
||||
.byte $F5, $A3,$FF, $A5,$66, $76, $A4,$56, $76, $A4,$56
|
||||
.byte $76, $A3,$66, $5F,$5F, $A3,$FF, $5F,$5F, $6F, $A8,$66
|
||||
.byte $A4,$65, $A5,$66, $A3,$17, $1A,$1A, $17, $F7, $17
|
||||
.byte $1A,$1A, $A3,$17, $A3,$66, $65,$65, $6F,$6F, $A0,$14,$66, $1F
|
||||
.byte $FF, $1F, $4F, $1F, $FF, $1F, $FF
|
||||
.byte $1F, $4F, $1F, $FF, $1F, $AD,$66, $AE,$CC
|
||||
.byte $11, $FF, $11, $84, $11, $FF, $00
|
||||
.byte $FF, $11, $84, $11, $FF, $11, $A0,$1B,$CC
|
||||
.byte $C7, $CF, $C7, $C8, $C7, $CF, $C0
|
||||
.byte $CF, $C7, $C8, $C7, $CF, $C7, $A0,$1E,$CC
|
||||
.byte $5C, $15,$15, $55, $15,$15, $5C, $A0,$21,$CC, $55
|
||||
.byte $11, $55, $51, $55, $11, $55, $A0,$21,$CC
|
||||
.byte $C5, $51, $A3,$55, $51, $C5, $A5,$CC, $5C
|
||||
.byte $AA,$88, $AB,$CC, $FC, $FF, $5C, $CC, $DC
|
||||
.byte $A8,$8C, $A5,$CC, $88, $77, $7E, $A8,$EE, $AA,$CC
|
||||
.byte $8F, $FF,$FF, $85, $ED, $A9,$EE, $E8,$E8, $DC
|
||||
.byte $CC,$CC, $88, $77,$77, $85, $58, $98, $A5,$88
|
||||
.byte $A9,$CC, $9C, $88,$88, $48, $58, $88, $8E
|
||||
.byte $AA,$EE, $ED, $DC, $CC, $88, $77,$77, $88
|
||||
.byte $85, $A3,$58, $55, $58,$58, $A8,$CC, $8C, $98
|
||||
.byte $A3,$88, $48, $88, $58, $8E, $AA,$EE, $DD
|
||||
.byte $CC, $C8, $77,$77, $88,$88, $55, $88,$88, $85
|
||||
.byte $88,$88, $A7,$CC, $8C, $89, $88,$88, $89, $A4,$88
|
||||
.byte $85, $88, $AB,$EE, $A3,$C7, $C8, $88, $55
|
||||
.byte $A3,$88, $48,$48, $A6,$CC, $8C, $89, $98, $88
|
||||
.byte $98, $88, $84, $A3,$88, $85, $88, $58
|
||||
.byte $A6,$EE, $DE, $CE, $A7,$CC, $55, $48, $44,$44
|
||||
.byte $49, $44, $A8,$CC, $A5,$C8, $A6,$88, $A5,$EE, $DD
|
||||
.byte $CD, $A7,$CC, $4C, $44,$44, $49, $A3,$44, $A0,$11,$DD
|
||||
.byte $ED, $A5,$EE, $A0,$11,$DD, $A0,$10,$77, $E7, $A5,$EE, $A0,$12,$77
|
||||
.byte $A0,$28,$22
|
||||
.byte $A1
|
||||
umcp_rle: .byte $28 ; ysize=40
|
||||
.byte $A0,$1D,$66, $A3,$F6, $76, $A3,$56, $A0,$10,$66, $96,$96, $AD,$66
|
||||
.byte $F6, $7F, $FF, $7F, $57, $75, $57
|
||||
.byte $77, $55, $AF,$66, $99, $DD,$DD, $99, $A8,$66
|
||||
.byte $F6, $7F, $F7, $7F, $A3,$77, $75, $57
|
||||
.byte $75, $55,$55, $65, $AB,$66, $F6, $76, $56
|
||||
.byte $66, $99, $DD,$DD, $99, $A8,$66, $6F, $F7
|
||||
.byte $A3,$77, $57, $55,$55, $A3,$65, $AA,$66, $FF, $7F
|
||||
.byte $FF, $77, $55, $65, $66,$66, $69,$69, $A0,$2B,$66
|
||||
.byte $A7,$46, $A0,$1C,$66, $44, $A3,$66, $A9,$D4, $A0,$12,$66, $16
|
||||
.byte $66, $F6, $66, $16, $A3,$66, $A3,$44, $66,$66
|
||||
.byte $DD, $5D, $DD,$DD, $5D, $DD,$DD, $5D, $DD
|
||||
.byte $66,$66, $86,$86, $46, $A8,$66, $D6,$D6, $A3,$66, $51
|
||||
.byte $56, $5F, $56, $51, $66,$66, $64,$64, $84
|
||||
.byte $64,$64, $66, $DD, $D5, $DD, $4D, $44
|
||||
.byte $4D, $DD, $D5, $DD, $66, $86, $88
|
||||
.byte $84, $44,$44, $A5,$66, $6D,$6D, $1D,$1D, $CC, $5C
|
||||
.byte $A7,$55, $5C, $CC,$CC, $88, $A3,$CC, $DD, $5D
|
||||
.byte $DD,$DD, $8D, $DD,$DD, $5D, $DD, $CC, $C8
|
||||
.byte $88, $A3,$44, $C0, $08, $58, $50, $0C
|
||||
.byte $CC,$CC, $11,$11, $CC, $1F, $FF, $A5,$1F, $FF
|
||||
.byte $1F, $CC,$CC, $88, $A3,$CC, $DD, $D5, $DD,$DD
|
||||
.byte $88, $DD,$DD, $D5, $DD, $CC,$CC, $C8,$C8, $C4
|
||||
.byte $CC,$CC, $C0, $08, $58, $50, $05, $55
|
||||
.byte $11, $10, $CC, $11, $FF, $10, $11
|
||||
.byte $10, $11, $10, $FF, $11, $A0,$17,$CC, $00
|
||||
.byte $08, $58, $50, $05, $51, $11, $CC
|
||||
.byte $11, $FF, $10, $11, $88, $11, $10
|
||||
.byte $FF, $11, $A0,$18,$CC, $00, $58,$58, $50, $00
|
||||
.byte $51, $CC, $11, $7F, $71,$71, $78, $71,$71
|
||||
.byte $7F, $11, $A0,$19,$CC, $00, $88,$88, $00, $05
|
||||
.byte $CC, $A9,$C7, $A9,$CC, $A3,$5C, $AD,$CC, $C0, $05
|
||||
.byte $85,$85, $00, $A0,$11,$CC, $5C, $E5, $A3,$EE, $E5
|
||||
.byte $5C, $AC,$CC, $00, $58,$58, $50, $A0,$11,$CC, $FF
|
||||
.byte $75,$75, $A4,$55, $AC,$CC, $C0, $00, $88,$88, $A0,$10,$CC
|
||||
.byte $44,$44, $47,$47, $A3,$45, $44,$44, $AC,$CC, $00, $05
|
||||
.byte $85, $A0,$10,$CC, $44, $D4, $9D, $D4, $44
|
||||
.byte $34, $D3, $34, $44, $AD,$CC, $00, $08
|
||||
.byte $AF,$CC, $A3,$44, $CD, $A3,$44, $C3, $A3,$44, $AC,$CC
|
||||
.byte $C0, $00
|
||||
.byte $A1
|
||||
dining_rle: .byte $28 ; ysize=40
|
||||
.byte $88, $A3,$98, $88,$88, $98, $88,$88, $98,$98, $88,$88
|
||||
.byte $A3,$98, $88, $98,$98, $88, $A3,$98, $A4,$88, $98
|
||||
.byte $88, $98, $88, $A3,$98, $88, $98, $88
|
||||
.byte $98, $88, $98, $88,$88, $99, $88,$88, $99
|
||||
.byte $88, $99, $88, $99, $98, $89, $88
|
||||
.byte $99, $88, $98, $88, $99, $98, $88,$88
|
||||
.byte $99, $A5,$88, $89, $98, $89, $88, $99
|
||||
.byte $88, $99, $88, $99, $88, $99, $88
|
||||
.byte $99, $88,$88, $99, $88,$88, $99, $89, $99
|
||||
.byte $88, $99, $88, $99, $88, $99, $98
|
||||
.byte $99, $88, $99, $98, $88,$88, $99, $A6,$88
|
||||
.byte $99, $88,$88, $99, $98, $99, $88, $99
|
||||
.byte $98, $99, $88, $99, $A5,$88, $08, $D8
|
||||
.byte $08, $D8, $F8, $18, $F8, $18, $A7,$88
|
||||
.byte $A3,$98, $88, $A3,$98, $88, $A3,$98, $88, $98
|
||||
.byte $88,$88, $98, $88, $A3,$98, $A5,$88, $DD, $00
|
||||
.byte $DD, $0D, $F1,$F1, $1F,$1F, $A7,$88, $99, $98
|
||||
.byte $99, $88, $99, $88, $99, $88,$88, $99
|
||||
.byte $88,$88, $99,$99, $98, $99, $88,$88, $99, $A6,$88
|
||||
.byte $00, $DD, $00, $D0, $11, $FF, $11
|
||||
.byte $FF, $A7,$88, $99, $A3,$88, $99, $98, $99
|
||||
.byte $88, $98, $99, $98, $88, $99, $88
|
||||
.byte $89, $99, $88,$88, $99, $A0,$2C,$88, $58,$58, $A8,$88
|
||||
.byte $00, $B0, $A0,$1B,$88, $58, $55, $BB, $B8
|
||||
.byte $A7,$88, $00, $BB, $8B, $88, $68, $A3,$88
|
||||
.byte $78, $A3,$88, $08,$08, $A4,$88, $08,$08, $A9,$88, $85,$85
|
||||
.byte $BB, $A3,$88, $66, $A4,$88, $00, $22, $88,$88
|
||||
.byte $FF, $A3,$88, $77, $57,$57, $B7, $BB, $00
|
||||
.byte $A3,$57, $B7, $BB, $00, $A7,$57, $A3,$08, $11,$11
|
||||
.byte $08, $77, $66,$66, $77, $A4,$08, $22, $02
|
||||
.byte $A3,$05, $08,$08, $77, $A3,$5A, $FB, $F0, $55
|
||||
.byte $A3,$5A, $2B, $00, $A7,$5A, $A3,$00, $11,$11, $A4,$77
|
||||
.byte $A5,$00, $52, $A7,$00, $0A,$0A, $7A, $7F,$7F, $75
|
||||
.byte $7A, $6A, $72,$72, $70, $A3,$5A, $B8, $88
|
||||
.byte $5A,$5A, $A3,$00, $81, $A4,$77, $A6,$00, $5A, $A7,$00
|
||||
.byte $70, $87, $88,$88, $78, $77,$77, $99, $77,$77
|
||||
.byte $66, $77, $70, $0B, $BB, $88, $A5,$00
|
||||
.byte $A4,$57, $A7,$00, $08,$08, $A5,$00, $07, $AA,$77, $7F
|
||||
.byte $77, $7B, $04, $44, $08, $70, $A4,$00
|
||||
.byte $55, $88, $A0,$12,$00, $07, $87, $A7,$07, $87
|
||||
.byte $07, $00, $20, $24, $00, $77, $A4,$00
|
||||
.byte $55, $08,$08, $A0,$12,$00, $88, $A7,$00, $88, $00,$00
|
||||
.byte $22, $77, $07, $77, $A4,$00, $55, $A0,$14,$00
|
||||
.byte $08, $A7,$00, $08, $00, $08,$08, $07, $00
|
||||
.byte $07, $A0,$79,$00
|
||||
.byte $A1
|
||||
metro_rle: .byte $28 ; ysize=40
|
||||
.byte $A0,$1F,$66, $A9,$55, $A3,$66, $A4,$F6, $AA,$66, $11, $66
|
||||
.byte $16,$16, $66, $76, $A8,$66, $55, $22,$22, $25,$25
|
||||
.byte $A4,$55, $66,$66, $6F, $A4,$7F, $77, $A9,$66, $69,$69
|
||||
.byte $19,$19, $69, $77, $A8,$66, $55, $A5,$22, $25
|
||||
.byte $55,$55, $66,$66, $46, $A0,$1C,$66, $55, $A7,$22, $55
|
||||
.byte $66, $46, $44, $46, $A8,$66, $A7,$86, $AC,$66
|
||||
.byte $55, $A7,$22, $55, $C6, $C4, $84, $C4
|
||||
.byte $A3,$C6, $76, $86,$86, $76, $C6, $55, $15
|
||||
.byte $A3,$55, $15, $55, $C6, $AA,$56, $C6, $95
|
||||
.byte $DD, $A6,$22, $55, $CC,$CC, $C8, $A3,$CC, $77
|
||||
.byte $80,$80, $77, $CC,$CC, $55, $11, $51, $15
|
||||
.byte $51, $11, $55, $AC,$CC, $55, $DD, $A6,$22
|
||||
.byte $55, $A4,$CC, $7C, $77, $80,$80, $77, $FF,$FF
|
||||
.byte $0C, $55, $51, $A3,$55, $51, $55, $AC,$0C
|
||||
.byte $55, $DD, $A4,$D2, $22,$22, $55, $A3,$CC, $7C
|
||||
.byte $77, $08,$08, $78, $F7, $FF, $0F, $A0,$14,$00
|
||||
.byte $55, $0D, $DD,$DD, $0D, $A3,$02, $55, $CC,$CC
|
||||
.byte $7C, $87, $A3,$80, $77, $FF, $0F, $00
|
||||
.byte $55, $85, $A0,$14,$00, $99, $A5,$00, $55, $CC
|
||||
.byte $7C, $07, $A3,$08, $77, $FF,$FF, $00,$00, $55
|
||||
.byte $88, $08, $A0,$13,$00, $F9, $30,$30, $F0, $80,$80
|
||||
.byte $55, $7C, $87, $A3,$80, $70, $F7, $1F
|
||||
.byte $FF, $00,$00, $FF,$FF, $00, $80, $A0,$10,$00, $30
|
||||
.byte $FF, $F0, $F3,$F3, $FF,$FF, $88, $55, $07
|
||||
.byte $A3,$08, $78, $77, $FF, $F1, $FF, $00,$00
|
||||
.byte $FF,$FF, $0F, $08, $A0,$10,$00, $0F, $A6,$FF, $88
|
||||
.byte $55, $A4,$80, $77, $FF, $1F, $FF, $A3,$00
|
||||
.byte $1F,$1F, $A0,$14,$00, $3F,$3F, $0F,$0F, $3F, $38, $55
|
||||
.byte $A3,$08, $77, $F7, $FF, $F1, $0F, $A3,$00
|
||||
.byte $11,$11, $A0,$1A,$00, $55, $00,$00, $70, $77, $A3,$FF
|
||||
.byte $A4,$00, $11,$11, $A0,$17,$00, $80, $08, $89, $55
|
||||
.byte $88,$88, $77, $FF, $11, $FF, $A5,$00, $A3,$88
|
||||
.byte $A0,$16,$00, $08, $88,$88, $55, $00, $77, $F7
|
||||
.byte $FF,$FF, $0F, $A0,$21,$00, $55, $70, $77, $A3,$FF
|
||||
.byte $A0,$22,$00, $55, $77, $A3,$FF, $A0,$23,$00, $55
|
||||
.byte $A1
|
||||
talbot_rle: .byte $28 ; ysize=40
|
||||
.byte $22, $66,$66, $77,$77, $FF, $AC,$77, $55, $00
|
||||
.byte $66, $00,$00, $55, $AB,$77, $FF, $A4,$77, $A3,$66
|
||||
.byte $77,$77, $FF, $AB,$77, $87, $55, $50,$50, $53,$53
|
||||
.byte $55, $87, $AA,$77, $FF, $A4,$77, $A3,$66, $77,$77
|
||||
.byte $FF, $A6,$77, $07, $00, $07, $77, $88,$88
|
||||
.byte $A4,$85, $8C, $85, $88,$88, $77,$77, $87,$87, $A5,$77
|
||||
.byte $FF, $A4,$77, $66, $33, $66, $77,$77, $FF
|
||||
.byte $A6,$77, $88, $BB, $B7, $77, $88, $77
|
||||
.byte $88, $77, $27,$27, $77, $88, $77, $88
|
||||
.byte $77, $B7, $BB, $88, $A5,$77, $FF, $A4,$77
|
||||
.byte $66,$66, $76, $77,$77, $FF, $A6,$77, $78, $1B
|
||||
.byte $77,$77, $88, $87, $88, $57, $85,$85, $57
|
||||
.byte $88, $87, $88, $77,$77, $5B, $78, $A5,$77
|
||||
.byte $FF, $A4,$77, $66,$66, $77,$77, $FF, $A8,$0F, $11
|
||||
.byte $1F, $BF, $58, $05,$05, $A4,$0F, $05, $5F
|
||||
.byte $58, $BF, $5F, $55, $A5,$0F, $B8, $88
|
||||
.byte $A4,$77, $66, $A3,$77, $44, $A8,$00, $41, $00,$00
|
||||
.byte $88, $A8,$00, $88, $00,$00, $25, $A4,$00, $B7
|
||||
.byte $B5, $88, $A4,$77, $66, $77,$77, $47, $C4
|
||||
.byte $40, $00,$00, $55, $B5, $A3,$00, $44, $00,$00
|
||||
.byte $08, $A6,$00, $90, $95, $08, $00,$00, $22
|
||||
.byte $A5,$00, $2B, $00, $FF, $A3,$77, $66, $77,$77
|
||||
.byte $44, $CC, $44, $80, $00, $55, $BB
|
||||
.byte $0B, $00,$00, $08,$08, $A8,$00, $09, $99, $55
|
||||
.byte $99, $09, $95, $A3,$00, $B0, $20, $22
|
||||
.byte $00, $FF, $A5,$77, $44, $CC, $4C, $C4,$C4
|
||||
.byte $40, $00, $4B, $40, $B0, $AC,$00, $99
|
||||
.byte $00, $99, $00, $09, $A5,$00, $82, $00
|
||||
.byte $FF, $A5,$77, $44, $4C, $C4, $CC, $4C
|
||||
.byte $04, $00, $44, $A0,$18,$00, $88, $00, $FF
|
||||
.byte $F7, $A4,$77, $84,$84, $8C,$8C, $44, $00,$00, $55
|
||||
.byte $A0,$17,$00, $50, $58, $00,$00, $FF, $A4,$77, $88
|
||||
.byte $44,$44, $88, $00, $80,$80, $05,$05, $A0,$18,$00, $5D
|
||||
.byte $DD, $FF, $A4,$77, $88, $00,$00, $88, $00
|
||||
.byte $88, $BB, $B0, $A0,$18,$00, $0B, $BB, $0D
|
||||
.byte $FF, $A3,$77, $FF, $88, $80,$80, $88, $00
|
||||
.byte $88, $4B, $A9,$00, $D0,$D0, $80,$80, $D0,$D0, $AB,$00
|
||||
.byte $6B, $00, $0F, $FF, $77,$77, $FF, $A5,$00
|
||||
.byte $88, $44, $04, $0B, $A5,$00, $D0, $DD
|
||||
.byte $A6,$88, $DD, $D0, $A7,$00, $0B, $06, $66
|
||||
.byte $00,$00, $FF, $77,$77, $FF, $A6,$00, $22, $A9,$00
|
||||
.byte $A6,$0D, $AB,$00, $22, $00,$00, $FF, $77, $FF,$FF
|
||||
.byte $A6,$00, $82, $80, $A0,$18,$00, $50, $52, $00,$00
|
||||
.byte $0F, $F7, $FF, $0F, $A0,$25,$00, $FF,$FF, $A0,$26,$00, $FF
|
||||
.byte $A1
|
@ -1,19 +1,19 @@
|
||||
;===========
|
||||
; CONSTANTS
|
||||
;===========
|
||||
CONST_SHIPX EQU 15
|
||||
CONST_TILE_W EQU 64
|
||||
CONST_TILE_H EQU 64
|
||||
CONST_MAP_MASK_X EQU (CONST_TILE_W - 1)
|
||||
CONST_MAP_MASK_Y EQU (CONST_TILE_H - 1)
|
||||
CONST_LOWRES_W EQU 40
|
||||
CONST_LOWRES_H EQU 40
|
||||
CONST_BETA_I EQU $ff
|
||||
CONST_BETA_F EQU $80
|
||||
CONST_SCALE_I EQU $14
|
||||
CONST_SCALE_F EQU $00
|
||||
CONST_LOWRES_HALF_I EQU $ec ; -(LOWRES_W/2)
|
||||
CONST_LOWRES_HALF_F EQU $00
|
||||
CONST_SHIPX = 15
|
||||
CONST_TILE_W = 64
|
||||
CONST_TILE_H = 64
|
||||
CONST_MAP_MASK_X = (CONST_TILE_W - 1)
|
||||
CONST_MAP_MASK_Y = (CONST_TILE_H - 1)
|
||||
CONST_LOWRES_W = 40
|
||||
CONST_LOWRES_H = 40
|
||||
CONST_BETA_I = $ff
|
||||
CONST_BETA_F = $80
|
||||
CONST_SCALE_I = $14
|
||||
CONST_SCALE_F = $00
|
||||
CONST_LOWRES_HALF_I = $ec ; -(LOWRES_W/2)
|
||||
CONST_LOWRES_HALF_F = $00
|
||||
|
||||
flying_start:
|
||||
|
||||
@ -1171,7 +1171,7 @@ water_map:
|
||||
.byte $22,$22,$22,$22, $22,$22,$22,$22
|
||||
.byte $22,$22,$22,$22, $ee,$22,$22,$22
|
||||
|
||||
.include "../asm_routines/multiply_fast.s"
|
||||
.include "multiply_fast.s"
|
||||
|
||||
|
||||
; 8.8 fixed point
|
||||
|
@ -31,16 +31,19 @@ show_map:
|
||||
|
||||
lda DRAW_PAGE
|
||||
clc
|
||||
adc #$4
|
||||
sta BASH
|
||||
lda #$00
|
||||
sta BASL
|
||||
adc #$4 ; page to load at?
|
||||
; FIXME: really need to load at 0xc and
|
||||
; copy
|
||||
pha
|
||||
|
||||
lda #>(map_rle)
|
||||
sta GBASH
|
||||
lda #<(map_rle)
|
||||
sta GBASL
|
||||
jsr load_rle_gr
|
||||
lda #<(map_lzsa)
|
||||
sta getsrc_smc+1
|
||||
lda #>(map_lzsa)
|
||||
sta getsrc_smc+2
|
||||
|
||||
pla
|
||||
|
||||
jsr decompress_lzsa2_fast
|
||||
|
||||
|
||||
; basic_plot(8+((map_x&0x3)*6)+(tfv_x/6),
|
||||
|
@ -5,27 +5,19 @@ title_screen:
|
||||
;===========================
|
||||
; Clear both bottoms
|
||||
|
||||
lda #$0
|
||||
sta DRAW_PAGE
|
||||
jsr clear_bottom
|
||||
|
||||
lda #$4
|
||||
sta DRAW_PAGE
|
||||
jsr clear_bottom
|
||||
jsr clear_bottoms
|
||||
|
||||
;=============================
|
||||
; Load title_rle
|
||||
; Load title
|
||||
|
||||
lda #<(title_lzsa)
|
||||
sta getsrc_smc+1
|
||||
lda #>(title_lzsa)
|
||||
sta getsrc_smc+2
|
||||
|
||||
lda #$0c
|
||||
sta BASH
|
||||
lda #$00
|
||||
sta BASL ; load image off-screen 0xc00
|
||||
|
||||
lda #>(title_rle)
|
||||
sta GBASH
|
||||
lda #<(title_rle)
|
||||
sta GBASL
|
||||
jsr load_rle_gr
|
||||
jsr decompress_lzsa2_fast
|
||||
|
||||
;=================================
|
||||
; copy to both pages
|
||||
|
@ -766,11 +766,6 @@ load_map_bg:
|
||||
|
||||
; Set target for the background drawing
|
||||
|
||||
lda #$0c
|
||||
sta BASH
|
||||
lda #$00
|
||||
sta BASL ; load image off-screen 0xc00
|
||||
|
||||
; Check for special cases
|
||||
|
||||
lda MAP_X
|
||||
@ -778,33 +773,44 @@ map_harfco:
|
||||
cmp #3 ; if map_x==3, harfco
|
||||
bne map_landing
|
||||
|
||||
lda #>(harfco_rle)
|
||||
sta GBASH
|
||||
lda #<(harfco_rle)
|
||||
sta GBASL
|
||||
jsr load_rle_gr
|
||||
|
||||
lda #<(harfco_lzsa)
|
||||
sta getsrc_smc+1
|
||||
lda #>(harfco_lzsa)
|
||||
sta getsrc_smc+2
|
||||
|
||||
lda #$c
|
||||
|
||||
jsr decompress_lzsa2_fast
|
||||
rts
|
||||
|
||||
map_landing:
|
||||
cmp #5 ; if map_x==5, landing site
|
||||
bne map_collegep
|
||||
|
||||
lda #>(landing_rle)
|
||||
sta GBASH
|
||||
lda #<(landing_rle)
|
||||
sta GBASL
|
||||
jsr load_rle_gr
|
||||
|
||||
lda #<(landing_lzsa)
|
||||
sta getsrc_smc+1
|
||||
lda #>(landing_lzsa)
|
||||
sta getsrc_smc+2
|
||||
|
||||
lda #$c
|
||||
|
||||
jsr decompress_lzsa2_fast
|
||||
rts
|
||||
|
||||
map_collegep:
|
||||
cmp #14 ; if map_x==14, collegep
|
||||
bne map_custom
|
||||
|
||||
lda #>(collegep_rle)
|
||||
sta GBASH
|
||||
lda #<(collegep_rle)
|
||||
sta GBASL
|
||||
jsr load_rle_gr
|
||||
lda #<(collegep_lzsa)
|
||||
sta getsrc_smc+1
|
||||
lda #>(collegep_lzsa)
|
||||
sta getsrc_smc+2
|
||||
|
||||
lda #$c
|
||||
|
||||
jsr decompress_lzsa2_fast
|
||||
rts
|
||||
|
||||
;============================
|
||||
|
315
tfv/tfv_zp.inc
@ -1,190 +1,193 @@
|
||||
.define EQU =
|
||||
|
||||
;; Zero page monitor routines addresses
|
||||
|
||||
WNDLFT EQU $20
|
||||
WNDWDTH EQU $21
|
||||
WNDTOP EQU $22
|
||||
WNDBTM EQU $23
|
||||
CH EQU $24
|
||||
CV EQU $25
|
||||
GBASL EQU $26
|
||||
GBASH EQU $27
|
||||
BASL EQU $28
|
||||
BASH EQU $29
|
||||
H2 EQU $2C
|
||||
V2 EQU $2D
|
||||
MASK EQU $2E
|
||||
COLOR EQU $30
|
||||
INVFLG EQU $32
|
||||
;; LZSA addresses
|
||||
NIBCOUNT = $00
|
||||
|
||||
WNDLFT = $20
|
||||
WNDWDTH = $21
|
||||
WNDTOP = $22
|
||||
WNDBTM = $23
|
||||
CH = $24
|
||||
CV = $25
|
||||
GBASL = $26
|
||||
GBASH = $27
|
||||
BASL = $28
|
||||
BASH = $29
|
||||
H2 = $2C
|
||||
V2 = $2D
|
||||
MASK = $2E
|
||||
COLOR = $30
|
||||
INVFLG = $32
|
||||
|
||||
; More zero-page addresses
|
||||
; we try not to conflict with anything DOS, MONITOR or BASIC related
|
||||
|
||||
COLOR1 EQU $E0
|
||||
COLOR2 EQU $E1
|
||||
MATCH EQU $E2
|
||||
XX EQU $E3
|
||||
YY EQU $E4
|
||||
YADD EQU $E5
|
||||
LOOP EQU $E6
|
||||
MEMPTRL EQU $E7
|
||||
MEMPTRH EQU $E8
|
||||
NAMEL EQU $E9
|
||||
NAMEH EQU $EA
|
||||
NAMEX EQU $EB
|
||||
CHAR EQU $EC
|
||||
DISP_PAGE EQU $ED
|
||||
DRAW_PAGE EQU $EE
|
||||
COLOR1 = $E0
|
||||
COLOR2 = $E1
|
||||
MATCH = $E2
|
||||
XX = $E3
|
||||
YY = $E4
|
||||
YADD = $E5
|
||||
LOOP = $E6
|
||||
MEMPTRL = $E7
|
||||
MEMPTRH = $E8
|
||||
NAMEL = $E9
|
||||
NAMEH = $EA
|
||||
NAMEX = $EB
|
||||
CHAR = $EC
|
||||
DISP_PAGE = $ED
|
||||
DRAW_PAGE = $EE
|
||||
|
||||
FIRST EQU $F0
|
||||
LASTKEY EQU $F1
|
||||
PADDLE_STATUS EQU $F2
|
||||
XPOS EQU $F3
|
||||
YPOS EQU $F4
|
||||
TEMP EQU $FA
|
||||
RUN EQU $FA
|
||||
TEMP2 EQU $FB
|
||||
TEMPY EQU $FB
|
||||
INL EQU $FC
|
||||
INH EQU $FD
|
||||
OUTL EQU $FE
|
||||
OUTH EQU $FF
|
||||
FIRST = $F0
|
||||
LASTKEY = $F1
|
||||
PADDLE_STATUS = $F2
|
||||
XPOS = $F3
|
||||
YPOS = $F4
|
||||
TEMP = $FA
|
||||
RUN = $FA
|
||||
TEMP2 = $FB
|
||||
TEMPY = $FB
|
||||
INL = $FC
|
||||
INH = $FD
|
||||
OUTL = $FE
|
||||
OUTH = $FF
|
||||
|
||||
|
||||
;; Flying Routine Only
|
||||
|
||||
TURNING EQU $60
|
||||
;SCREEN_X EQU $61 ; not used?
|
||||
SCREEN_Y EQU $62
|
||||
ANGLE EQU $63
|
||||
HORIZ_SCALE_I EQU $64
|
||||
HORIZ_SCALE_F EQU $65
|
||||
FACTOR_I EQU $66
|
||||
FACTOR_F EQU $67
|
||||
DX_I EQU $68
|
||||
DX_F EQU $69
|
||||
SPACEX_I EQU $6A
|
||||
SPACEX_F EQU $6B
|
||||
CX_I EQU $6C
|
||||
CX_F EQU $6D
|
||||
DY_I EQU $6E
|
||||
DY_F EQU $6F
|
||||
SPACEY_I EQU $70
|
||||
SPACEY_F EQU $71
|
||||
CY_I EQU $72
|
||||
CY_F EQU $73
|
||||
TEMP_I EQU $74
|
||||
TEMP_F EQU $75
|
||||
DISTANCE_I EQU $76
|
||||
DISTANCE_F EQU $77
|
||||
SPACEZ_I EQU $78
|
||||
SPACEZ_F EQU $79
|
||||
DRAW_SPLASH EQU $7A
|
||||
SPEED EQU $7B
|
||||
SPLASH_COUNT EQU $7C
|
||||
OVER_LAND EQU $7D
|
||||
NUM1L EQU $7E
|
||||
NUM1H EQU $7F
|
||||
NUM2L EQU $80
|
||||
NUM2H EQU $81
|
||||
RESULT EQU $82 ; 83,84,85
|
||||
NEGATE EQU $86 ; UNUSED?
|
||||
LAST_SPACEX_I EQU $87
|
||||
LAST_SPACEY_I EQU $88
|
||||
LAST_MAP_COLOR EQU $89
|
||||
DRAW_SKY EQU $8A
|
||||
COLOR_MASK EQU $8B
|
||||
TURNING = $60
|
||||
;SCREEN_X = $61 ; not used?
|
||||
SCREEN_Y = $62
|
||||
ANGLE = $63
|
||||
HORIZ_SCALE_I = $64
|
||||
HORIZ_SCALE_F = $65
|
||||
FACTOR_I = $66
|
||||
FACTOR_F = $67
|
||||
DX_I = $68
|
||||
DX_F = $69
|
||||
SPACEX_I = $6A
|
||||
SPACEX_F = $6B
|
||||
CX_I = $6C
|
||||
CX_F = $6D
|
||||
DY_I = $6E
|
||||
DY_F = $6F
|
||||
SPACEY_I = $70
|
||||
SPACEY_F = $71
|
||||
CY_I = $72
|
||||
CY_F = $73
|
||||
TEMP_I = $74
|
||||
TEMP_F = $75
|
||||
DISTANCE_I = $76
|
||||
DISTANCE_F = $77
|
||||
SPACEZ_I = $78
|
||||
SPACEZ_F = $79
|
||||
DRAW_SPLASH = $7A
|
||||
SPEED = $7B
|
||||
SPLASH_COUNT = $7C
|
||||
OVER_LAND = $7D
|
||||
NUM1L = $7E
|
||||
NUM1H = $7F
|
||||
NUM2L = $80
|
||||
NUM2H = $81
|
||||
RESULT = $82 ; 83,84,85
|
||||
NEGATE = $86 ; UNUSED?
|
||||
LAST_SPACEX_I = $87
|
||||
LAST_SPACEY_I = $88
|
||||
LAST_MAP_COLOR = $89
|
||||
DRAW_SKY = $8A
|
||||
COLOR_MASK = $8B
|
||||
|
||||
SHIPY EQU $E4
|
||||
SHIPY = $E4
|
||||
|
||||
;; World Map Only
|
||||
|
||||
ODD EQU $7B
|
||||
DIRECTION EQU $7C
|
||||
REFRESH EQU $7D
|
||||
ON_BIRD EQU $7E
|
||||
MOVED EQU $7F
|
||||
STEPS EQU $80
|
||||
TFV_X EQU $81
|
||||
TFV_Y EQU $82
|
||||
NEWX EQU $83
|
||||
NEWY EQU $84
|
||||
MAP_X EQU $85
|
||||
GROUND_COLOR EQU $86
|
||||
ODD = $7B
|
||||
DIRECTION = $7C
|
||||
REFRESH = $7D
|
||||
ON_BIRD = $7E
|
||||
MOVED = $7F
|
||||
STEPS = $80
|
||||
TFV_X = $81
|
||||
TFV_Y = $82
|
||||
NEWX = $83
|
||||
NEWY = $84
|
||||
MAP_X = $85
|
||||
GROUND_COLOR = $86
|
||||
|
||||
|
||||
.if 0
|
||||
|
||||
|
||||
KEYPRESS EQU $C000
|
||||
KEYRESET EQU $C010
|
||||
KEYPRESS = $C000
|
||||
KEYRESET = $C010
|
||||
|
||||
;; SOFT SWITCHES
|
||||
SET_GR EQU $C050
|
||||
SET_TEXT EQU $C051
|
||||
FULLGR EQU $C052
|
||||
TEXTGR EQU $C053
|
||||
PAGE0 EQU $C054
|
||||
PAGE1 EQU $C055
|
||||
LORES EQU $C056
|
||||
HIRES EQU $C057
|
||||
SET_GR = $C050
|
||||
SET_TEXT = $C051
|
||||
FULLGR = $C052
|
||||
TEXTGR = $C053
|
||||
PAGE0 = $C054
|
||||
PAGE1 = $C055
|
||||
LORES = $C056
|
||||
HIRES = $C057
|
||||
|
||||
PADDLE_BUTTON0 EQU $C061
|
||||
PADDL0 EQU $C064
|
||||
PTRIG EQU $C070
|
||||
PADDLE_BUTTON0 = $C061
|
||||
PADDL0 = $C064
|
||||
PTRIG = $C070
|
||||
|
||||
;; BASIC ROUTINES
|
||||
|
||||
NORMAL EQU $F273
|
||||
NORMAL = $F273
|
||||
|
||||
;; MONITOR ROUTINES
|
||||
|
||||
HLINE EQU $F819 ;; HLINE Y,$2C at A
|
||||
VLINE EQU $F828 ;; VLINE A,$2D at Y
|
||||
CLRSCR EQU $F832 ;; Clear low-res screen
|
||||
CLRTOP EQU $F836 ;; clear only top of low-res screen
|
||||
SETCOL EQU $F864 ;; COLOR=A
|
||||
TEXT EQU $FB36
|
||||
TABV EQU $FB5B ;; VTAB to A
|
||||
BASCALC EQU $FBC1 ;;
|
||||
VTAB EQU $FC22 ;; VTAB to CV
|
||||
HOME EQU $FC58 ;; Clear the text screen
|
||||
WAIT EQU $FCA8 ;; delay 1/2(26+27A+5A^2) us
|
||||
SETINV EQU $FE80 ;; INVERSE
|
||||
SETNORM EQU $FE84 ;; NORMAL
|
||||
COUT EQU $FDED ;; output A to screen
|
||||
COUT1 EQU $FDF0 ;; output A to screen
|
||||
HLINE = $F819 ;; HLINE Y,$2C at A
|
||||
VLINE = $F828 ;; VLINE A,$2D at Y
|
||||
CLRSCR = $F832 ;; Clear low-res screen
|
||||
CLRTOP = $F836 ;; clear only top of low-res screen
|
||||
SETCOL = $F864 ;; COLOR=A
|
||||
TEXT = $FB36
|
||||
TABV = $FB5B ;; VTAB to A
|
||||
BASCALC = $FBC1 ;;
|
||||
VTAB = $FC22 ;; VTAB to CV
|
||||
HOME = $FC58 ;; Clear the text screen
|
||||
WAIT = $FCA8 ;; delay 1/2(26+27A+5A^2) us
|
||||
SETINV = $FE80 ;; INVERSE
|
||||
SETNORM = $FE84 ;; NORMAL
|
||||
COUT = $FDED ;; output A to screen
|
||||
COUT1 = $FDF0 ;; output A to screen
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
COLOR_BLACK EQU 0
|
||||
COLOR_RED EQU 1
|
||||
COLOR_DARKBLUE EQU 2
|
||||
COLOR_PURPLE EQU 3
|
||||
COLOR_DARKGREEN EQU 4
|
||||
COLOR_GREY EQU 5
|
||||
COLOR_MEDIUMBLUE EQU 6
|
||||
COLOR_LIGHTBLUE EQU 7
|
||||
COLOR_BROWN EQU 8
|
||||
COLOR_ORANGE EQU 9
|
||||
COLOR_GREY2 EQU 10
|
||||
COLOR_PINK EQU 11
|
||||
COLOR_LIGHTGREEN EQU 12
|
||||
COLOR_YELLOW EQU 13
|
||||
COLOR_AQUA EQU 14
|
||||
COLOR_WHITE EQU 15
|
||||
COLOR_BLACK = 0
|
||||
COLOR_RED = 1
|
||||
COLOR_DARKBLUE = 2
|
||||
COLOR_PURPLE = 3
|
||||
COLOR_DARKGREEN = 4
|
||||
COLOR_GREY = 5
|
||||
COLOR_MEDIUMBLUE = 6
|
||||
COLOR_LIGHTBLUE = 7
|
||||
COLOR_BROWN = 8
|
||||
COLOR_ORANGE = 9
|
||||
COLOR_GREY2 = 10
|
||||
COLOR_PINK = 11
|
||||
COLOR_LIGHTGREEN = 12
|
||||
COLOR_YELLOW = 13
|
||||
COLOR_AQUA = 14
|
||||
COLOR_WHITE = 15
|
||||
|
||||
COLOR_BOTH_RED EQU $11
|
||||
COLOR_BOTH_DARKBLUE EQU $22
|
||||
COLOR_BOTH_DARKGREEN EQU $44
|
||||
COLOR_BOTH_GREY EQU $55
|
||||
COLOR_BOTH_MEDIUMBLUE EQU $66
|
||||
COLOR_BOTH_LIGHTBLUE EQU $77
|
||||
COLOR_BOTH_BROWN EQU $88
|
||||
COLOR_BOTH_ORANGE EQU $99
|
||||
COLOR_BOTH_LIGHTGREEN EQU $CC
|
||||
COLOR_BOTH_YELLOW EQU $DD
|
||||
COLOR_BOTH_WHITE EQU $FF
|
||||
COLOR_BOTH_RED = $11
|
||||
COLOR_BOTH_DARKBLUE = $22
|
||||
COLOR_BOTH_DARKGREEN = $44
|
||||
COLOR_BOTH_GREY = $55
|
||||
COLOR_BOTH_MEDIUMBLUE = $66
|
||||
COLOR_BOTH_LIGHTBLUE = $77
|
||||
COLOR_BOTH_BROWN = $88
|
||||
COLOR_BOTH_ORANGE = $99
|
||||
COLOR_BOTH_LIGHTGREEN = $CC
|
||||
COLOR_BOTH_YELLOW = $DD
|
||||
COLOR_BOTH_WHITE = $FF
|
||||
|
||||
.endif
|
||||
|