pitch-dark/src/config.a

289 lines
6.7 KiB
Plaintext
Raw Normal View History

2018-02-03 16:45:41 +00:00
kNumberOfGames = 25
gCurrentGame
!byte $FD ; set at runtime
kGameDirectory ; length-prefixed pathname of where game subdirectories are stored
!byte 2
!raw "Z/"
kInfoFilename ; length-prefixed partial pathname of game info file, starting with '/' because reasons
2018-02-03 17:01:34 +00:00
!byte 5
!raw "/INFO"
2018-02-03 16:45:41 +00:00
subdirectories ; length of this array must = kNumberOfGames, there is no range checking
2018-02-03 16:45:41 +00:00
!word .ballyhoo
!word .cutthroats
!word .deadline
!word .enchanter
!word .hgttg
!word .hollywoodhijinx
!word .infidel
!word .leathergoddesses
!word .lurkinghorror
!word .minizork
!word .moonmist
!word .planetfall
!word .plunderedhearts
!word .seastalker
!word .sorcerer
!word .spellbreaker
!word .starcross
!word .stationfall
!word .suspect
!word .suspended
!word .wishbringer
!word .witness
!word .zorki
!word .zorkii
!word .zorkiii
; length-prefixed names of each subdirectory in game directory, 1 per game
2018-02-03 16:45:41 +00:00
.ballyhoo
!byte 8
!raw "BALLYHOO"
.cutthroats
!byte 10
!raw "CUTTHROATS"
.deadline
!byte 8
!raw "DEADLINE"
.enchanter
!byte 9
!raw "ENCHANTER"
.hgttg
!byte 5
!raw "HGTTG"
.hollywoodhijinx
!byte 9
!raw "HOLLYWOOD"
.infidel
!byte 7
!raw "INFIDEL"
.leathergoddesses
!byte 4
!raw "LGOP"
.lurkinghorror
!byte 14
!raw "LURKING.HORROR"
.minizork
!byte 9
!raw "MINI.ZORK"
.moonmist
!byte 8
!raw "MOONMIST"
.planetfall
!byte 10
!raw "PLANETFALL"
.plunderedhearts
!byte 9
!raw "PLUNDERED"
.seastalker
!byte 10
!raw "SEASTALKER"
.sorcerer
!byte 8
!raw "SORCERER"
.spellbreaker
!byte 12
!raw "SPELLBREAKER"
.starcross
!byte 9
!raw "STARCROSS"
.stationfall
!byte 11
!raw "STATIONFALL"
.suspect
!byte 7
!raw "SUSPECT"
.suspended
!byte 9
!raw "SUSPENDED"
.wishbringer
!byte 11
!raw "WISHBRINGER"
.witness
!byte 7
!raw "WITNESS"
.zorki
!byte 6
!raw "ZORK.I"
.zorkii
!byte 7
!raw "ZORK.II"
.zorkiii
!byte 8
!raw "ZORK.III"
2018-02-03 17:01:34 +00:00
2018-02-05 17:17:06 +00:00
!zone {
2018-02-03 17:01:34 +00:00
LoadGameInfo
stz .path
lda #<kGameDirectory
ldy #>kGameDirectory
jsr addToPath
lda gCurrentGame
2018-02-03 17:01:34 +00:00
asl
tax
lda subdirectories,x
ldy subdirectories+1,x
2018-02-03 17:01:34 +00:00
jsr addToPath
lda #<kInfoFilename
ldy #>kInfoFilename
2018-02-03 17:01:34 +00:00
jsr addToPath
jsr LoadFile
2018-02-03 17:01:34 +00:00
!word .path
!word $0800
!word $1400
!word $1C00
2018-02-05 17:17:06 +00:00
; initialize all parser data
ldx #9 ; .END_PARSER_DATA-.BEGIN_PARSER_DATA-1
- stz .BEGIN_PARSER_DATA,x
dex
bpl -
stz $00
lda #$08
sta $01
lda mlilen
sta $02
lda mlilen+1
sta $03
parseloop
lda ($00)
; Replace all carriage returns with zeroes,
; because WeeGUI wants zero-terminated strings
; but I want to be able to edit files in a text editor.
cmp #$0D
bne +
lda #$00
sta ($00)
lda #$FF
sta bFoundCR
bra .next
+ cmp #$5B ; '[' is section name start delimiter
beq .startsectionname
cmp #$5D ; ']' is section name end delimiter
beq .endsectionname
bit bInSectionName
bmi .parsesectionname
bvs .next
2018-02-05 21:29:29 +00:00
tax
beq .nohighbit
+ cmp #$5E ; '^' -> closed-apple mousetext
bne +
lda #$40
sta ($00)
bra .nohighbit
+ cmp #$26 ; '&' -> open-apple mousetext
bne .highbit
lda #$41
sta ($00)
bra .nohighbit
.highbit
ora #$80
sta ($00)
.nohighbit
2018-02-05 17:17:06 +00:00
bit bFoundCR
bpl .next
stz bFoundCR
lda iSection
beq .next
; We found the start of the first line after the end of the section name.
; Save this address in the sectionPointers array.
asl
tax
lda $00
sta sectionPointers-2,x
lda $01
sta sectionPointers-1,x
stz iSection
bra .next
.startsectionname
lda #%11000000
sta bInSectionName
bra .next
.endsectionname
stz bInSectionName
bra .next
.parsesectionname
pha
lda #%01000000
sta bInSectionName
pla
cmp #$69 ; 'i'nfo
beq .info
cmp #$64 ; 'd'escription
beq .description
cmp #$76 ; 'v'ersions
beq .versions
bne .next
.info
lda #1
!byte $2C ; hide next LDA
.description
lda #2
!byte $2C ; hide next LDA
.versions
lda #3
sta iSection
inc iSectionsFound
.next
inc $00
bne +
inc $01
+ dec $02
bne +
dec $03
bmi .done
+ jmp parseloop
.done
lda iSectionsFound
cmp #$03
bne +
clc
rts
+ sec
2018-02-03 17:01:34 +00:00
rts
2018-02-05 17:17:06 +00:00
.BEGIN_PARSER_DATA
bInSectionName
!byte 0
bFoundCR
!byte 0
iSection
!byte 0
iSectionsFound
!byte 0
2018-02-03 17:01:34 +00:00
2018-02-05 17:17:06 +00:00
sectionPointers ; array of pointers to start of each section (order matches constants used by parser)
addrInfo
!word 0
addrDescription
!word 0
addrVersions
!word 0
.END_PARSER_DATA
2018-02-03 17:01:34 +00:00
addToPath
sta $00
sty $01
ldx .path ; current pathname length
2018-02-03 17:01:34 +00:00
ldy #$00
lda ($00),y ; length of this segment
inc
sta .a+1
ldy #$01
2018-02-03 17:01:34 +00:00
- lda ($00),y
sta .pathbuffer,x
2018-02-03 17:01:34 +00:00
inx
iny
.a cpy #$FD ; set at runtime
bcc -
2018-02-03 17:01:34 +00:00
stx .path
rts
.path
!byte $FD ; set at runtime
.pathbuffer
!fill 64 ; enough zeroes for any ProDOS pathname
2018-02-05 17:17:06 +00:00
}