peasant: hook up actual parser

not sure how optimized this will be, but it's a start
This commit is contained in:
Vince Weaver 2021-09-29 23:51:04 -04:00
parent 7b8021116d
commit be70f8451d
4 changed files with 297 additions and 49 deletions

View File

@ -1,14 +1,36 @@
.include "tokens.inc"
;==========================
; parse input
;==========================
; input is in input_buffer
parse_input:
; jsr hgr_save
lda input_buffer ; get first char FIXME
and #$DF ; make uppercase 0110 0001 -> 0100 0001
; uppercase buffer
parse_copy:
cmp #'C'
bne parse_inventory
ldx #0
upcase_loop:
lda input_buffer,X
beq done_upcase_loop
and #$DF
sta input_buffer,X
inx
jmp upcase_loop
done_upcase_loop:
jsr get_verb
; jsr get_noun
; jsr local_parser
lda CURRENT_VERB
check_copy:
cmp #VERB_COPY
bne check_inventory
; want copy
lda #NEW_FROM_DISK
@ -19,29 +41,25 @@ parse_copy:
jmp done_parse_message
parse_inventory:
cmp #'I'
bne parse_l
check_inventory:
cmp #VERB_INVENTORY
bne check_load
jsr show_inventory
jmp restore_parse_message
parse_l:
cmp #'L'
bne parse_talk
check_load:
cmp #VERB_LOAD
bne check_look
lda input_buffer+2
and #$DF ; make uppercase 0110 0001 -> 0100 0001
cmp #'O'
beq parse_look
parse_load:
jsr load_menu
jmp restore_parse_message
parse_look:
check_look:
cmp #VERB_LOOK
bne check_talk
lda #<fake_error1
sta OUTL
@ -49,24 +67,27 @@ parse_look:
jmp finish_parse_message
parse_talk:
cmp #'T'
bne parse_s
check_talk:
cmp #VERB_TALK
bne check_save
lda #<fake_error2
sta OUTL
lda #>fake_error2
lda #<fake_error2
sta OUTL
lda #>fake_error2
jmp finish_parse_message
parse_s:
cmp #'S'
bne parse_version
check_save:
cmp #VERB_SAVE
bne check_show
lda input_buffer+2
and #$DF ; make uppercase 0110 0001 -> 0100 0001
cmp #'A'
beq parse_save
parse_show:
jsr save_menu
jmp restore_parse_message
check_show:
cmp #VERB_SHOW
bne check_version
bit LORES
bit PAGE1
@ -78,21 +99,16 @@ parse_show:
jmp done_parse_message
parse_save:
jsr save_menu
jmp restore_parse_message
parse_version:
cmp #'V'
bne parse_help
check_version:
cmp #VERB_VERSION
bne check_help
lda #<version_message
sta OUTL
lda #>version_message
jmp finish_parse_message
parse_help:
check_help:
lda #<help_message
sta OUTL
lda #>help_message
@ -112,3 +128,69 @@ done_parse_message:
rts
;===========================
; get verb
;===========================
;
get_verb:
lda #VERB_UNKNOWN ; default
sta CURRENT_VERB
lda #<verb_lookup ; reset verb pointer
sta get_verb_loop+1
lda #>verb_lookup
sta get_verb_loop+2
next_verb_loop:
ldx #0
stx WORD_MATCH
get_verb_loop:
lda verb_lookup
bmi done_verb
beq done_get_verb_loop
cmp input_buffer,X
beq verb_char_matched
verb_char_nomatch:
dec WORD_MATCH
verb_char_matched:
jsr inc_verb_ptr
inx
jmp get_verb_loop
done_verb:
ldx WORD_MATCH
beq found_verb
no_found_verb:
jsr inc_verb_ptr
jmp next_verb_loop
found_verb:
and #$7f
sta CURRENT_VERB
done_get_verb_loop:
rts
inc_verb_ptr:
inc get_verb_loop+1
bne inc_verb_ptr_noflo
inc get_verb_loop+2
inc_verb_ptr_noflo:
rts
verb_lookup:
.byte "COPY",VERB_COPY|$80
.byte "INV",VERB_INVENTORY|$80
.byte "LOAD",VERB_LOAD|$80
.byte "LOOK",VERB_LOOK|$80
.byte "TALK",VERB_TALK|$80
.byte "SAVE",VERB_SAVE|$80
.byte "SHOW",VERB_SHOW|$80
.byte "VER",VERB_VERSION|$80
.byte $00

View File

@ -19,17 +19,12 @@ WHICH_PEASANTRY = 2
peasant_quest:
lda #0
sta GAME_OVER
sta FRAME
jsr hgr_make_tables
jsr hgr2
lda #0
sta FRAME
; update map location
jsr update_map_location
@ -204,7 +199,7 @@ fake_error2:
.include "graphics/graphics_peasant3.inc"
.include "sprites/boat_sprites.inc"
;.include "sprites/boat_sprites.inc"
map_backgrounds_low:
.byte <jhonka_lzsa ; 10 -- jhonka

167
games/peasant/tokens.inc Normal file
View File

@ -0,0 +1,167 @@
VERB_UNKNOWN = 0
VERB_ASK = 1
VERB_BOO = 2
VERB_BREAK = 3
VERB_BUY = 4
VERB_CHEAT = 5
VERB_CLIMB = 6
VERB_CLOSE = 7
VERB_COPY = 8
VERB_DANCE = 9
VERB_DEPLOY = 10
VERB_DIE = 11
VERB_DITCH = 12
VERB_DRINK = 13
VERB_DROP = 14
VERB_ENTER = 15
VERB_FEED = 16
VERB_GET = 17
VERB_GIVE = 18
VERB_GO = 19
VERB_HALDO = 20
VERB_INVENTORY = 21
VERB_JUMP = 22
VERB_KICK = 23
VERB_KILL = 24
VERB_KNOCK = 25
VERB_LIGHT = 26
VERB_LOAD = 27
VERB_LOOK = 28
VERB_MAKE = 29
VERB_MAP = 30
VERB_NO = 31
VERB_OPEN = 32
VERB_PARTY = 33
VERB_PET = 34
VERB_PLAY = 35
VERB_PULL = 36
VERB_PUNCH = 37
VERB_PUSH = 38
VERB_PUT = 39
VERB_PWD = 40
VERB_QUIT = 41
VERB_READ = 42
VERB_RIDE = 43
VERB_RING = 44
VERB_SAVE = 45
VERB_SCARE = 46
VERB_SHOOT = 47
VERB_SHOW = 48
VERB_SIT = 49
VERB_SKIP = 50
VERB_SLEEP = 51
VERB_SMELL = 52
VERB_SNIFF = 53
VERB_STEAL = 54
VERB_SWIM = 55
VERB_TAKE = 56
VERB_TALK = 57
VERB_THIS = 58
VERB_THROW = 59
VERB_TRY = 60
VERB_TURN = 61
VERB_USE = 62
VERB_VERSION = 63
VERB_WAKE = 64
VERB_WEAR = 65
VERB_WHAT = 66
VERB_WHERE = 67
VERB_WHY = 68
VERB_YES = 69
NOUN_UNKNOWN = 0
NOUN_ARCHER = 1
NOUN_ARROW = 2
NOUN_BABY = 3
NOUN_BEADS = 4
NOUN_BELL = 5
NOUN_BELT = 6
NOUN_BERRIES = 7
NOUN_BOAT = 8
NOUN_BONE = 9
NOUN_BOW = 10
NOUN_BROOM = 11
NOUN_BUSHES = 12
NOUN_CANDLE = 13
NOUN_CAVE = 14
NOUN_CHAIR = 15
NOUN_CLIFF = 16
NOUN_CLUB = 17
NOUN_COLD = 18
NOUN_COTTAGE = 19
NOUN_CRANK = 20
NOUN_CURTAINS = 21
NOUN_DAN = 22
NOUN_DESK = 23
NOUN_DINGHY = 24
NOUN_DOING_SPROINGS = 25
NOUN_DOOR = 26
NOUN_DRAWER = 27
NOUN_DRESSER = 28
NOUN_DUDE = 29
NOUN_FEED = 30
NOUN_FENCE = 31
NOUN_FIRE = 32
NOUN_FLIES = 33
NOUN_FOOD = 34
NOUN_FOOTPRINTS = 35
NOUN_GAME = 36
NOUN_GARY = 37
NOUN_GREEN = 38
NOUN_GROUND = 39
NOUN_GUY = 40
NOUN_HAY = 41
NOUN_HOLE = 42
NOUN_HORSE = 43
NOUN_INN = 44
NOUN_JHONKA = 45
NOUN_KERREK = 46
NOUN_KNIGHT = 47
NOUN_LADY = 48
NOUN_LAKE = 49
NOUN_LANTERN = 50
NOUN_LEG = 51
NOUN_LIGHTNING = 52
NOUN_MAN = 53
NOUN_MAP = 54
NOUN_MASK = 55
NOUN_MUD = 56
NOUN_NED = 57
NOUN_NOTE = 58
NOUN_OPENINGS = 59
NOUN_PAINTING = 60
NOUN_PAPER = 61
NOUN_PEASANT = 62
NOUN_PEBBLES = 63
NOUN_PILLOW = 64
NOUN_PILLS = 65
NOUN_PLAGUE = 66
NOUN_PLAQUE = 67
NOUN_POT = 68
NOUN_RICHES = 69
NOUN_ROBE = 70
NOUN_ROCK = 71
NOUN_ROOM = 72
NOUN_RUB = 73
NOUN_RUG = 74
NOUN_SAND = 75
NOUN_SANDWICH = 76
NOUN_SHELF = 77
NOUN_SIGN = 78
NOUN_SKELETON = 79
NOUN_SKULL = 80
NOUN_SMELL = 81
NOUN_SODA = 82
NOUN_STUFF = 83
NOUN_STUMP = 84
NOUN_SUB = 85
NOUN_TARGET = 86
NOUN_TRACKS = 87
NOUN_TREE = 88
NOUN_TRINKET = 89
NOUN_TROGDOR = 90
NOUN_WATER = 91
NOUN_WATERFALL = 92
NOUN_WELL = 93
NOUN_WINDOW = 94
NOUN_WOMAN = 95

View File

@ -170,6 +170,10 @@ INVENTORY_2_GONE = $A4
INVENTORY_3_GONE = $A5
END_OF_SAVE = $A6
CURRENT_VERB = $B0 ; parser
CURRENT_NOUN = $B1
WORD_MATCH = $B2
INPUT_X = $C0
BOX_X1L = $C1
BOX_X1H = $C2