pitch-dark/src/infoparser.a

110 lines
2.8 KiB
Plaintext
Raw Normal View History

2018-02-07 14:05:24 +00:00
;license:MIT
;(c) 2018 by 4am
;
; Game descriptions and configuration
;
; Public functions
; - LoadGameInfo
;
!zone {
kTextRootDirectory
2018-02-03 17:01:34 +00:00
!byte 5
!raw "TEXT/"
2018-02-03 17:01:34 +00:00
2018-03-03 22:45:39 +00:00
sectionPointers ; array of pointers to start of each section
2018-03-03 23:07:13 +00:00
addrEOF
!word 0
addrOptions
!word 0
2018-03-03 22:45:39 +00:00
addrVersions
2018-02-07 14:05:24 +00:00
!word 0
addrDescription
!word 0
2018-03-03 22:45:39 +00:00
addrInfo
2018-02-07 14:05:24 +00:00
!word 0
;------------------------------------------------------------------------------
; LoadGameInfo
; load file with information about the current game
;
; in: gCurrentGame between 0 and (kNumberOfGames-1)
2018-03-03 23:07:13 +00:00
; out: addrInfo, addrDescription, addrVersions, addrOptions populated
2018-03-03 22:45:39 +00:00
; all registers and flags clobbered
2018-02-07 14:05:24 +00:00
;------------------------------------------------------------------------------
2018-02-03 17:01:34 +00:00
LoadGameInfo
jsr ResetPath
lda #<kTextRootDirectory
ldy #>kTextRootDirectory
jsr AddToPath
lda gCurrentGame
2018-02-03 17:01:34 +00:00
asl
tax
lda GAMES,x
ldy GAMES+1,x
jsr AddToPath
jsr LoadFile
!word gPathname
2018-02-03 17:01:34 +00:00
!word $0800
!word $1400
!word kProDOSFileBuffer
2018-02-05 17:17:06 +00:00
lda #$FF
2018-03-27 19:19:48 +00:00
sta $FE
2018-03-03 22:45:39 +00:00
lda #$07
2018-03-27 19:19:48 +00:00
sta $FF ; ($FE) points to start of data buffer
ldy #$00 ; index into ($FF) pointing to current character
2018-03-03 23:07:13 +00:00
ldx #$08 ; index into sectionPointers array, stores pointer to start of each section
2018-03-03 22:45:39 +00:00
.convertSectionLoop
jsr IncAndGetChar
.convertSectionNoInc
2018-03-03 22:53:50 +00:00
cmp #$5B ; '[' is the start of a new section
2018-03-03 22:45:39 +00:00
beq .skipSectionName
2018-03-27 19:19:48 +00:00
cmp #$0D ; CR -> 0x00 (WeeGUI wants null-terminated strings)
2018-03-03 22:45:39 +00:00
beq .null
2018-02-08 21:28:49 +00:00
cmp #$5E ; '^' -> closed-apple mousetext
2018-03-03 22:45:39 +00:00
beq .ca
cmp #$26 ; '&' -> open-apple mousetext
beq .oa
2018-03-03 22:53:50 +00:00
ora #$80 ; all other characters -> set high bit
2018-03-03 22:45:39 +00:00
!byte $2C
.null lda #$00
!byte $2C
.ca lda #$40
!byte $2C
.oa lda #$41
2018-03-27 19:19:48 +00:00
sta ($FE),y
2018-03-03 22:45:39 +00:00
bra .convertSectionLoop
; We found the start of a new section, so skip to the first character on the next line
.skipSectionName
jsr IncAndGetChar
2018-03-27 19:19:48 +00:00
cmp #$0D ; CR
2018-03-03 22:45:39 +00:00
bne .skipSectionName
jsr IncAndGetChar
; We are at the start of a section, so save this address in the sectionPointers array
pha
2018-03-03 16:41:09 +00:00
tya
clc
2018-03-27 19:19:48 +00:00
adc $FE
2018-03-03 22:45:39 +00:00
sta sectionPointers,x
2018-03-27 19:19:48 +00:00
lda $FF
2018-03-03 16:41:09 +00:00
bcc +
inc
2018-03-03 22:45:39 +00:00
+ sta sectionPointers+1,x
2018-02-05 17:17:06 +00:00
pla
2018-03-03 22:45:39 +00:00
dex
dex
bpl .convertSectionNoInc
IncAndGetChar
iny
2018-02-05 17:17:06 +00:00
bne +
2018-03-27 19:19:48 +00:00
inc $FF
+ lda ($FE),y
2018-02-03 17:01:34 +00:00
rts
2018-02-05 17:17:06 +00:00
}