mist_hgr: initial speech support

This commit is contained in:
Vince Weaver 2021-09-21 22:12:12 -04:00
parent 90ec003a7d
commit f904b9da78
8 changed files with 1439 additions and 7 deletions

View File

@ -183,6 +183,7 @@ mist_title.o: mist_title.s \
gr_offsets.s end_level.s \
draw_pointer.s text_print.s gr_fast_clear.s decompress_fast_v2.s \
keyboard.s audio.s \
ssi263_detect.s ssi263_simple_speech.s title_speech.s \
init_state.s wait_a_bit.s \
link_book_mist_dock.s common_sprites.inc leveldata_title.inc \
pt3_lib_core.s pt3_lib_init.s pt3_lib_mockingboard_detect.s \

View File

@ -161,12 +161,32 @@ mockingboard_found:
sta $7d0+31 ; 23,31
jsr mockingboard_patch ; patch to work in slots other than 4?
lda SOUND_STATUS
ora #SOUND_MOCKINGBOARD
sta SOUND_STATUS
;===========================
; detect SSI-263 too
;===========================
detect_ssi:
lda MB_ADDR_H
and #$87 ; slot
jsr detect_ssi263
lda irq_count
beq ssi_not_found
lda #'Y'+$80
sta $7d0+39 ; 23,39
lda #SOUND_SSI263
ora SOUND_STATUS
sta SOUND_STATUS
ssi_not_found:
jsr mockingboard_patch ; patch to work in slots other than 4?
;=======================
; Set up 50Hz interrupt
;========================
@ -297,7 +317,8 @@ cyan_title_mb:
lda #$FE
jsr draw_and_wait
sei ; disable music
jsr mockingboard_disable_interrupt ; disable music
jsr clear_ay_both
jmp cyan_title_done
@ -356,6 +377,22 @@ cyan_title_done:
; touch linking book as fissure pulses (says "Fissure")
fissure_speech:
lda SOUND_STATUS
and #SOUND_SSI263
beq fissure_no_speech
lda ssi263_slot
jsr ssi263_speech_init
lda #<myst_fissure
sta SPEECH_PTRL
lda #>myst_fissure
sta SPEECH_PTRH
jsr ssi263_speak
fissure_no_speech:
ldx #<fissure_stars_lzsa
ldy #>fissure_stars_lzsa
lda #10
@ -398,6 +435,19 @@ cyan_title_done:
; "EXPANSE OF WHICH I HAD ONLY A",0
; "FLEETING GLIMPSE.",0
starry_speech:
lda SOUND_STATUS
and #SOUND_SSI263
beq starry_no_speech
lda #<myst_starry
sta SPEECH_PTRL
lda #>myst_starry
sta SPEECH_PTRH
jsr ssi263_speak
starry_no_speech:
jsr clear_bottom
ldx #<fissure_book_small_lzsa
@ -428,6 +478,19 @@ cyan_title_done:
; "HAVE LANDED, BUT I MUST ADMIT,"
; "HOWEVER-- SUCH CONJECTURE IS FUTILE."
speculate_speech:
lda SOUND_STATUS
and #SOUND_SSI263
beq speculate_no_speech
lda #<myst_speculate
sta SPEECH_PTRL
lda #>myst_speculate
sta SPEECH_PTRH
jsr ssi263_speak
speculate_no_speech:
jsr clear_bottom
ldx #<starfield_lzsa
@ -467,6 +530,20 @@ cyan_title_done:
; "MIGHT SOMEDAY HOLD MY MYST BOOK ARE"
; "UNSETTLING TO ME."
unsettling_speech:
lda SOUND_STATUS
and #SOUND_SSI263
beq unsettling_no_speech
lda #<myst_unsettling
sta SPEECH_PTRL
lda #>myst_unsettling
sta SPEECH_PTRH
jsr ssi263_speak
unsettling_no_speech:
jsr clear_bottom
ldx #<starfield_lzsa
@ -500,6 +577,19 @@ cyan_title_done:
; "NEVER BE ALLAYED, AND SO I CLOSE,"
; "REALIZING THAT PERHAPS,"
allayed_speech:
lda SOUND_STATUS
and #SOUND_SSI263
beq allayed_no_speech
lda #<myst_allayed
sta SPEECH_PTRL
lda #>myst_allayed
sta SPEECH_PTRH
jsr ssi263_speak
allayed_no_speech:
jsr clear_bottom
@ -534,6 +624,20 @@ cyan_title_done:
; BOOK_AIR : The ending...
;===================================
written_speech:
lda SOUND_STATUS
and #SOUND_SSI263
beq written_no_speech
lda #<myst_written
sta SPEECH_PTRL
lda #>myst_written
sta SPEECH_PTRH
jsr ssi263_speak
written_no_speech:
ldx #<book_ground_stars_lzsa
ldy #>book_ground_stars_lzsa
lda #1
@ -652,7 +756,7 @@ game_loop:
; copy background to current page
;====================================
; jsr gr_copy_to_current
; jsr gr_copyg_to_current
;====================================
; handle special-case forground logic
@ -786,7 +890,11 @@ really_exit:
.include "interrupt_handler.s"
.include "pt3_lib_mockingboard_detect.s"
; ssi-263 code
.include "ssi263.inc"
.include "ssi263_simple_speech.s"
.include "ssi263_detect.s"
.include "title_speech.s"
.include "wait_a_bit.s"
@ -858,6 +966,12 @@ get_mist_book:
jsr decompress_lzsa2_fast
; re-enable interrupts as SSI code probably broke things
jsr mockingboard_init
jsr reset_ay_both
jsr mockingboard_setup_interrupt
jsr pt3_init_song
cli

View File

@ -275,3 +275,22 @@ setup_irq_smc6:
; clear interrupt and start counting
rts
;=============================
; Disable Interrupt
;=============================
mockingboard_disable_interrupt:
sei ; disable interrupts just in case
lda #$40 ; Continuous interrupts, don't touch PB7
disable_irq_smc1:
sta MOCK_6522_ACR ; ACR register
lda #$7F ; clear all interrupt flags
disable_irq_smc2:
sta MOCK_6522_IER ; IER register (interrupt enable)
rts

100
games/mist_hgr/ssi263.inc Normal file
View File

@ -0,0 +1,100 @@
;SPEECH_PTRL = $FE
;SPEECH_PTRH = $FF
SSI263_BASE = $40 ; First speech chip
SSI263_DRP = SSI263_BASE+$00 ; Reg0, Duration/Phoneme
SSI263_I = SSI263_BASE+$01 ; Reg1, Inflection
SSI263_RI = SSI263_BASE+$02 ; Reg2, Rate/Inflection
SSI263_CAA = SSI263_BASE+$03 ; Reg3, Control/Articulation/Amplitude
SSI263_F = SSI263_BASE+$04 ; Reg4, Filter Frequency
VIA6522_DDRB1 = $02 ; 6522 Data direction port B register
VIA6522_DDRA1 = $03 ; 6522 Data direction port A register
VIA6522_PCR2 = $8C ; 6522 #2 Peripheral control register
VIA6522_IFR2 = $8D ; 6522 #2 Interrupt flag register
VIA6522_IER2 = $8E ; 6522 #2 Interrupt enable register
VIA6522_IFR2_CA1 = $02
VIA6522_IER2_SET = $80
VIA6522_IER2_CA1 = $02
VIA6522_PCR2_CA2_LOW = $0C
VIA6522_PCR2_CA2_HI = $0E
VIA6522_PCR2_CA1_NEG = $00
VIA6522_PCR2_CA1_POS = $01
SSI263_CAA_CTL = $80 ; control bit
SSI263_DRP_TRANSITIONED_INFLECTION = $C0
SSI263_DRP_PHONEME_TIMING_IMMEDIATE_INFLECTION = $80
SSI263_DRP_FRAME_TIMING_IMMEDIATE_INFLECTION = $40
SSI263_DRP_DISABLE_AR = $00
DURATION_LONG = $00
PHONEME_PAUSE = $00 ; Pause
PHONEME_E = $01 ; mEEt
PHONEME_E1 = $02 ; bEnt
PHONEME_Y = $03 ; bEfore
PHONEME_YI = $04 ; Year
PHONEME_AY = $05 ; plEAse
PHONEME_IE = $06 ; anY
PHONEME_I = $07 ; sIx
PHONEME_A = $08 ; mAde
PHONEME_AI = $09 ; cAre
PHONEME_EH = $0A ; nEst
PHONEME_EH1 = $0B ; bElt
PHONEME_AE = $0C ; dAd
PHONEME_AE1 = $0D ; After
PHONEME_AH = $0E ; gOt
PHONEME_AH1 = $0F ; fAther
PHONEME_AW = $10 ; Office
PHONEME_O = $11 ; stOre
PHONEME_OU = $12 ; bOAt
PHONEME_OO = $13 ; lOOk
PHONEME_IU = $14 ; yOU
PHONEME_IU1 = $15 ; cOUld
PHONEME_U = $16 ; tUne
PHONEME_U1 = $17 ; cartOOn
PHONEME_UH = $18 ; wOnder
PHONEME_UH1 = $19 ; lOve
PHONEME_UH2 = $1A ; whAt
PHONEME_UH3 = $1B ; nUt
PHONEME_ER = $1C ; bIRd
PHONEME_R = $1D ; Roof
PHONEME_R1 = $1E ; Rug
PHONEME_R2 = $1F ; muetteR (German)
PHONEME_L = $20 ; Lift
PHONEME_L1 = $21 ; pLay
PHONEME_LF = $22 ; falL (final)
PHONEME_W = $23 ; Water
PHONEME_B = $24 ; Bag
PHONEME_D = $25 ; paiD
PHONEME_KV = $26 ; taG (glottal stop)
PHONEME_P = $27 ; Pen
PHONEME_T = $28 ; Tart
PHONEME_K = $29 ; Kit
PHONEME_HV = $2A ; (hold vocal)
PHONEME_HVC = $2B ; (hold vocal closure)
PHONEME_HF = $2C ; Heart
PHONEME_HFC = $2D ; (hold frictive closure)
PHONEME_HN = $2E ; (hold nasal)
PHONEME_Z = $2F ; Zero
PHONEME_S = $30 ; Same
PHONEME_J = $31 ; meaSure
PHONEME_SCH = $32 ; SHip
PHONEME_V = $33 ; Very
PHONEME_F = $34 ; Four
PHONEME_THV = $35 ; THere
PHONEME_TH = $36 ; wiTH
PHONEME_M = $37 ; More
PHONEME_N = $38 ; NiNe
PHONEME_NG = $39 ; raNG
PHONEME_CA = $3A ; mAerchen (German)
PHONEME_COH = $3B ; lOwe (French)
PHONEME_CU = $3C ; fUenf (German)
PHONEME_CUH = $3D ; menU (French)
PHONEME_E2 = $3E ; bittE (German)
PHONEME_LB = $3F ; Lube

View File

@ -0,0 +1,137 @@
; This code detects a SSI263 chip on a Mockingboard
; it does this by trying to enable the chip and waiting for
; the SSI-263 to signal an interrupt when done.
; If the interrupt never comes then assume no SSI-263 is present
; The code assumes the SSI-263 is hooked to VIA6522 #2 (?)
;=============================
;=============================
; detect SSI263
;=============================
;=============================
; A = slot of mockingboard
detect_ssi263:
sta ssi263_slot ; store for later
and #$7
ora #$c0 ; turn slot number into address
sta ssid_wc_smc1+2 ; update the read/write routines
sei ; disable IRQ
lda $3fe ; backup the IRQ handler
sta irq1backup
lda $3ff
sta irq2backup
lda #<mb_irq ; point IRQ handler to our code
sta $3fe
lda #>mb_irq
sta $3ff
; Set 6522#2 peripheral control register to recognize the signal
; from the speech chip.
lda #(VIA6522_PCR2_CA2_LOW|VIA6522_PCR2_CA1_NEG)
ldx #VIA6522_PCR2
jsr ssi263_d_write_chip
; Raise control bit in register 3 of SSI-263
lda #SSI263_CAA_CTL
ldx #SSI263_CAA
jsr ssi263_d_write_chip
; Transitioned inflection (when CTL is toggled)
lda #SSI263_DRP_TRANSITIONED_INFLECTION
ldx #SSI263_DRP
jsr ssi263_d_write_chip
; Lower control bit in SSI-263
lda #$70 ; CTL=0, T=6, AMP=0
ldx #SSI263_CAA
jsr ssi263_d_write_chip
; Enable 6522 interrupt on input CA2
lda #(VIA6522_IER2_SET|VIA6522_IER2_CA1)
ldx #VIA6522_IER2
jsr ssi263_d_write_chip
ldx #0 ; clear counts
ldy #0
cli ; enable interrupts
wait_irq:
lda irq_count ; see if irq happened
bne got_irq
iny ; otherwise increase counts
bne wait_irq
inx ;
bne wait_irq
got_irq:
sei ; disable interrupts
rts
;========================
; detection IRQ handler
;========================
mb_irq:
txa ; save X
pha
; Clear the 6522 interrupt flag
lda #VIA6522_IFR2_CA1
ldx #VIA6522_IFR2
jsr ssi263_d_write_chip
; disable speech
; Raise control bit in register 3 of SSI-263
lda #SSI263_CAA_CTL
ldx #SSI263_CAA
jsr ssi263_d_write_chip
; Disable talking on SSI-263 (when CTL is toggled)
lda #SSI263_DRP_DISABLE_AR
ldx #SSI263_DRP
jsr ssi263_d_write_chip
; Lower control bit in SSI-263
lda #$70 ; also T=7?
ldx #SSI263_CAA
jsr ssi263_d_write_chip
; increment our irq count
inc irq_count
; Disable 6522 interrupts
lda #VIA6522_IER2_CA1
ldx #VIA6522_IER2
jsr ssi263_d_write_chip
pla ; restore X
tax
lda $45 ; restore accumulator
rti ; return from interrupt
;========================
; write_chip
;========================
ssi263_d_write_chip:
ssid_wc_smc1:
sta $C000,X
rts
irq_count: .byte $00
irq1backup: .byte $00
irq2backup: .byte $00
ssi263_slot: .byte $00

View File

@ -0,0 +1,243 @@
;.include "ssi263.inc"
; Simple speech routine for ssi-263
; to save space we only change the Phoneme/Delay each time, we don't
; mess with the other registers
;========================
; ssi263_write_chip
;========================
ssi263_write_chip:
wc_smc1:
sta $C000,X
rts
;========================
; read_chip
;========================
ssi263_read_chip:
rc_smc1:
lda $C000,X
rts
;========================
; ssi263_speech_init
;========================
; A = slot number of mockingboard
ssi263_speech_init:
sei ; disable interrupts
and #$7
ora #$c0 ; turn slot number into address
sta wc_smc1+2 ; update the read/write routines
sta rc_smc1+2
; Set 6522#2 peripheral control register to recognize the signal
; from the speech chip.
lda #(VIA6522_PCR2_CA2_LOW|VIA6522_PCR2_CA1_NEG)
ldx #VIA6522_PCR2
jsr ssi263_write_chip
lda #<ssi263_speech_irq ; point IRQ handler to our code
sta $3fe
lda #>ssi263_speech_irq
sta $3ff
; set defaults
; filter frequency
lda #$E9
ldx #SSI263_F
jsr ssi263_write_chip
; control / articulation/ amplitude
lda #$5C
ldx #SSI263_CAA
jsr ssi263_write_chip
; rate/inflection
lda #$A8
ldx #SSI263_RI
jsr ssi263_write_chip
; inflection
lda #$50
ldx #SSI263_I
jsr ssi263_write_chip
cli ; enable interrupts
rts
;============================
; ssi263_speech_shutdown
;============================
ssi263_speech_shutdown:
sei
rts
;=========================
; ssi263_speak
;=========================
; pointer to data in SPEECH_PTRL/H
ssi263_speak:
sei ; disable interrupts
; Set the busy flag
lda #$FF
sta speech_busy
; Set peripheral control register to recognize the signal from the
; speech chip.
lda #(VIA6522_PCR2_CA2_LOW|VIA6522_PCR2_CA1_NEG)
ldx #VIA6522_PCR2
jsr ssi263_write_chip
; Set transitioned inflection by setting value while toggling CTL
lda #SSI263_CAA_CTL
ldx #SSI263_CAA
jsr ssi263_write_chip
; Set transitioned inflection mode in register 0
lda #SSI263_DRP_TRANSITIONED_INFLECTION
ldx #SSI263_DRP
jsr ssi263_write_chip
; Lower control bit
lda #$70 ; also T=7
ldx #SSI263_CAA
jsr ssi263_write_chip
; Enable 6522 interrupts
lda #(VIA6522_IER2_SET|VIA6522_IER2_CA1)
ldx #VIA6522_IER2
jsr ssi263_write_chip
cli ; re-enable interrupts
rts
;====================
; speech interrupt
;====================
ssi263_speech_irq:
php ; save flags
cld
pha ; save A
txa
pha ; save X
tya
pha ; save Y
inc $0404 ; irq indicator on screen
; be sure it was a 6522#2 interrupt
ldx #VIA6522_IFR2
jsr ssi263_read_chip
bmi have_interrupt
; wasn't us, return to caller
; this assumes we can handle multiple interrupt sources
jmp end_interrupt
have_interrupt:
; Clear the 6522#2 CA interrupt flag
lda #VIA6522_IFR2_CA1
ldx #VIA6522_IFR2
jsr ssi263_write_chip
; Check if done with speech
ldy #0
lda (SPEECH_PTRL),Y
cmp #$ff
beq speech_end
not_end:
; Set the speech playing flag
lda #$ff
sta speech_playing
ldy #$00
; Get the next data
lda (SPEECH_PTRL),Y
ldx #SSI263_DRP ; duration/phoneme
jsr ssi263_write_chip
; Next data (inc 16 bit)
inc SPEECH_PTRL
bne no_oflo
inc SPEECH_PTRH
no_oflo:
; Finish the interrupt handler
jmp end_interrupt
speech_end:
; If at the end, turn everything off
; Toggle CTL while DR set to disable A/!R
lda #SSI263_CAA_CTL
ldx #SSI263_CAA
jsr ssi263_write_chip
lda #SSI263_DRP_DISABLE_AR
ldx #SSI263_DRP
jsr ssi263_write_chip
; Zero amplitude
lda #$70
ldx #SSI263_CAA
jsr ssi263_write_chip
; Clear busy and playing flags
lda #$00
sta speech_busy
sta speech_playing
; Disable interrupt in 6522
lda #VIA6522_IER2_CA1
ldx #VIA6522_IER2
jsr ssi263_write_chip
end_interrupt:
pla
tay ; restore Y
pla
tax ; restore X
pla ; restore A
ssi_interrupt_smc:
lda $45 ; restore A (II+/IIe)
plp ; restore flags
rti ; return from interrupt
speech_busy: .byte $00
speech_playing: .byte $00

View File

@ -0,0 +1,815 @@
;
; myst title speech
;
; Getting text-to-speech on a ssi-263 equipped mockigboard
; for Myst
; the document
; "Phonetic Speech Dictionary for the SC-01 Speech Synthesizer"
; sc01-dictionary.pdf
; was very helpful here
myst_fissure:
; "I REALIZED, THE MOMENT I FELL INTO THE"
; "FISSURE, THAT THE BOOK WOULD NOT BE"
; "DESTROYED AS I HAD PLANNED."
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_AH1 ; AH1 ; I
.byte PHONEME_Y ; Y
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_R ; R ; realized
.byte PHONEME_E1 ; E1
.byte PHONEME_AY ; AY
.byte PHONEME_L ; L
.byte PHONEME_AH1 ; AH1
.byte PHONEME_Y ; Y
.byte PHONEME_Z ; Z
.byte PHONEME_D ; D
.byte PHONEME_PAUSE ; PA ; ,
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_THV ; THV ; the
.byte PHONEME_UH1 ; UH1
.byte PHONEME_UH3 ; UH3
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_M ; M ; moment
.byte PHONEME_O ; O1
.byte PHONEME_M ; M
.byte PHONEME_EH1 ; EH3
.byte PHONEME_N ; N
.byte PHONEME_T ; T
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_AH1 ; AH1 ; I
.byte PHONEME_Y ; Y
.byte PHONEME_Y ; Y
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_F ; F ; fell
.byte PHONEME_EH1 ; EH1
.byte PHONEME_L ; L
.byte PHONEME_L ; L
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_I ; I1/I3 ; into
.byte PHONEME_N ; N
.byte PHONEME_T ; T
.byte PHONEME_IU ; IU
.byte PHONEME_IU ; UI/UI
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_THV ; THV ; the
.byte PHONEME_UH1 ; UH1
.byte PHONEME_UH3 ; UH3
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_F ; F ; fissure
.byte PHONEME_I ; I
.byte PHONEME_Z ; Z
.byte PHONEME_SCH ; SCH
.byte PHONEME_ER ; ER
.byte PHONEME_PAUSE ; PA ; ,
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_THV ; THV ; that
.byte PHONEME_AE1 ; AE1
.byte PHONEME_EH ; EH3
.byte PHONEME_T ; T
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_THV ; THV ; the
.byte PHONEME_UH1 ; UH1
.byte PHONEME_UH3 ; UH3
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_B ; B ; book
.byte PHONEME_OO ; OO1
.byte PHONEME_OO ; OO1
.byte PHONEME_K ; K
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_W ; W ; would
.byte PHONEME_IU1 ; IU1
.byte PHONEME_L ; L
.byte PHONEME_D ; D
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_N ; N ; not
.byte PHONEME_AH1 ; AH1
.byte PHONEME_UH3 ; UH3
.byte PHONEME_T ; T
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_B ; B ; be
.byte PHONEME_E1 ; E1
.byte PHONEME_Y ; Y
.byte PHONEME_Y ; Y
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_B ; B ; burninated
.byte PHONEME_ER ; ER
.byte PHONEME_R ; R
.byte PHONEME_N ; N
.byte PHONEME_I ; I
.byte PHONEME_N ; N
.byte PHONEME_A ; A
.byte PHONEME_A ; A
.byte PHONEME_Y ; Y
.byte PHONEME_T ; T
.byte PHONEME_EH1 ; EH1
.byte PHONEME_D ; D
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_AE1 ; AE1 ; as
.byte PHONEME_EH1 ; EH3
.byte PHONEME_Z ; Z
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_AH1 ; AH1 ; I
.byte PHONEME_Y ; Y
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_HF ; H ; had
.byte PHONEME_AE1 ; AE1
.byte PHONEME_EH1 ; EH3
.byte PHONEME_D ; D
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_P ; P ; planned
.byte PHONEME_L ; L
.byte PHONEME_AE1 ; AE1
.byte PHONEME_EH1 ; EH3
.byte PHONEME_N ; N
.byte PHONEME_D ; D
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte $FF
; "IT CONTINUED FALLING INTO THAT STARRY",0
; "EXPANSE OF WHICH I HAD ONLY A",0
; "FLEETING GLIMPSE.",0
myst_starry:
.byte PHONEME_I ; I1 ; It
; .byte PHONEME_I3 ; I3
.byte PHONEME_T ; T
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_K ; K ; continued
.byte PHONEME_UH1 ; UH1
.byte PHONEME_N ; N
.byte PHONEME_T ; T
.byte PHONEME_I ; I1
; .byte PHONEME_I3 ; I3
.byte PHONEME_N ; N
; .byte PHONEME_Y1 ; Y1
.byte PHONEME_IU ; IU
.byte PHONEME_U1 ; U1
.byte PHONEME_D ; D
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_F ; F ; falling
.byte PHONEME_AW ; AW
.byte PHONEME_L ; L
.byte PHONEME_I ; I
.byte PHONEME_NG ; NG
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_I ; I1/I3 ; into
.byte PHONEME_N ; N
.byte PHONEME_T ; T
.byte PHONEME_IU ; IU
.byte PHONEME_IU ; UI/UI
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_THV ; THV ; that
.byte PHONEME_AE1 ; AE1
.byte PHONEME_EH ; EH3
.byte PHONEME_T ; T
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_S ; S ; starry
.byte PHONEME_T ; T
.byte PHONEME_AH1 ; AH1
.byte PHONEME_UH3 ; UH3
.byte PHONEME_R ; R
.byte PHONEME_E1 ; E1
.byte PHONEME_Y ; Y
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_EH1 ; EH1 ; expanse
.byte PHONEME_EH ; EH3
.byte PHONEME_K ; K
.byte PHONEME_PAUSE ; PA
.byte PHONEME_S ; S
.byte PHONEME_P ; P
.byte PHONEME_AE1 ; AE1
.byte PHONEME_N ; N
.byte PHONEME_Z ; Z
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_UH1 ; UH1 ; of
.byte PHONEME_UH3 ; UH3
.byte PHONEME_V ; V
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_W ; W ; which
.byte PHONEME_I ; I1
; .byte PHONEME_I3 ; I3
.byte PHONEME_T ; T
.byte PHONEME_SCH ; SCH
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_AH1 ; AH1 ; I
.byte PHONEME_Y ; Y
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_HF ; H ; had
.byte PHONEME_AE1 ; AE1
.byte PHONEME_EH1 ; EH3
.byte PHONEME_D ; D
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_O ; O1 ; only
; .byte PHONEME_O2 ; O2
.byte PHONEME_N ; N
.byte PHONEME_L ; L
.byte PHONEME_Y ; Y
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_UH2 ; UH2 ; a
.byte PHONEME_UH3 ; UH3
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_F ; F ; fleeting
.byte PHONEME_L ; L
.byte PHONEME_Y ; Y
.byte PHONEME_T ; T
.byte PHONEME_I ; I
.byte PHONEME_NG ; NG
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_KV ; G ; glimpse
.byte PHONEME_L ; L
.byte PHONEME_I ; I
.byte PHONEME_M ; M
.byte PHONEME_P ; P
.byte PHONEME_Z ; Z
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte $FF
; "I HAVE TRIED TO SPECULATE WHERE IT MIGHT"
; "HAVE LANDED, BUT I MUST ADMIT,"
; "HOWEVER-- SUCH CONJECTURE IS FUTILE."
myst_speculate:
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_AH1 ; AH1 ; I
.byte PHONEME_Y ; Y
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_HF ; H ; have
.byte PHONEME_AE1 ; AE1
.byte PHONEME_EH ; EH3
.byte PHONEME_V ; V
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_T ; T ; tried
.byte PHONEME_R ; R
.byte PHONEME_AH1 ; AH1
.byte PHONEME_EH ; EH3
.byte PHONEME_I ; I
.byte PHONEME_Y ; Y
.byte PHONEME_D ; D
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_T ; T ; to
.byte PHONEME_IU ; IU
.byte PHONEME_IU ; UI/UI
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_S ; S ; speculate
.byte PHONEME_P ; P
.byte PHONEME_EH1 ; EH1
; .byte PHONEME_EH3 ; EH3
.byte PHONEME_K ; K
.byte PHONEME_K ; K
; .byte PHONEME_Y1 ; Y1
.byte PHONEME_IU ; IU
.byte PHONEME_U1 ; U1
.byte PHONEME_U1 ; U1
.byte PHONEME_L ; L
; .byte PHONEME_A1 ; A1
.byte PHONEME_AY ; AY
.byte PHONEME_Y ; Y
.byte PHONEME_T ; T
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_W ; W ; where
.byte PHONEME_EH ; EH3
.byte PHONEME_AY ; A2
.byte PHONEME_EH ; EH3
.byte PHONEME_R ; R
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_I ; I ; it
.byte PHONEME_T ; T
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_M ; M ; might
.byte PHONEME_UH3 ; UH3
.byte PHONEME_AH ; AH2
.byte PHONEME_Y ; Y
.byte PHONEME_T ; T
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_HF ; H ; have
.byte PHONEME_AE1 ; AE1
.byte PHONEME_EH ; EH3
.byte PHONEME_V ; V
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_L ; L ; landed
.byte PHONEME_AH1 ; AE1
.byte PHONEME_EH ; EH3
.byte PHONEME_N ; N
.byte PHONEME_D ; D
.byte PHONEME_EH ; EH3
.byte PHONEME_D ; D
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_B ; B ; but
.byte PHONEME_UH1 ; UH1
.byte PHONEME_UH2 ; UH2
.byte PHONEME_T ; T
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_AH1 ; AH1 ; I
.byte PHONEME_Y ; Y
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_M ; M ; must
.byte PHONEME_UH1 ; UH1
.byte PHONEME_UH2 ; UH2
.byte PHONEME_Z ; Z
.byte PHONEME_T ; T
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_AE1 ; AE1 ; admit
.byte PHONEME_EH ; EH3
.byte PHONEME_D ; D
.byte PHONEME_M ; M
.byte PHONEME_I ; I
.byte PHONEME_T ; T
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_HF ; H ; however
.byte PHONEME_AH1 ; AH1
; .byte PHONEME_O2 ; O2
.byte PHONEME_U1 ; U1
.byte PHONEME_EH1 ; EH1
.byte PHONEME_V ; V
.byte PHONEME_R ; R
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA ; --
.byte PHONEME_PAUSE ; PA
.byte PHONEME_S ; S ; such
.byte PHONEME_UH1 ; UH1
; .byte PHONEME_UH3 ; UH3
.byte PHONEME_T ; T
.byte PHONEME_SCH ; SCH
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_K ; K ; conjecture
.byte PHONEME_UH1 ; UH1
.byte PHONEME_N ; N
.byte PHONEME_D ; D
.byte PHONEME_J ; J
.byte PHONEME_E1 ; E1
.byte PHONEME_K ; K
.byte PHONEME_T ; T
.byte PHONEME_SCH ; SCH
.byte PHONEME_R ; R
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_I ; I ; is
.byte PHONEME_Z ; Z
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_F ; F ; futile.
; .byte PHONEME_Y1 ; Y1
.byte PHONEME_IU ; IU
; .byte PHONEME_UI ; UI
.byte PHONEME_T ; T
.byte PHONEME_I ; I3
.byte PHONEME_UH3 ; UH3
.byte PHONEME_L ; L
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte $FF
; "STILL, THE QUESTION ABOUT WHOSE HANDS"
; "MIGHT SOMEDAY HOLD MY MYST BOOK ARE"
; "UNSETTLING TO ME."
myst_unsettling:
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_S ; S ; still
.byte PHONEME_T ; T
.byte PHONEME_I ; I
.byte PHONEME_L ; L
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA ; ,
.byte PHONEME_THV ; THV ; the
.byte PHONEME_UH1 ; UH1
.byte PHONEME_UH3 ; UH3
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_K ; K ; question
.byte PHONEME_W ; W
.byte PHONEME_EH1 ; EH1
; .byte PHONEME_EH3 ; EH3
.byte PHONEME_S ; S
.byte PHONEME_T ; T
.byte PHONEME_SCH ; SCH
.byte PHONEME_UH3 ; UH3
.byte PHONEME_N ; N
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_UH1 ; UH1 ; about
.byte PHONEME_B ; B
.byte PHONEME_UH2 ; UH2
.byte PHONEME_AH ; AH2
.byte PHONEME_U1 ; U1
.byte PHONEME_T ; T
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_HF ; H ; whose
.byte PHONEME_IU ; IU
.byte PHONEME_U1 ; U1
.byte PHONEME_U1 ; U1
.byte PHONEME_Z ; Z
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_HF ; HF ; hands
.byte PHONEME_AE1 ; AE1
.byte PHONEME_EH ; EH3
.byte PHONEME_N ; N
.byte PHONEME_D ; D
.byte PHONEME_Z ; Z
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_M ; M ; might
.byte PHONEME_UH3 ; UH3
.byte PHONEME_AH ; AH2
.byte PHONEME_Y ; Y
.byte PHONEME_T ; T
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_S ; S ; someday
.byte PHONEME_UH1 ; UH1
.byte PHONEME_UH2 ; UH2
.byte PHONEME_M ; M
.byte PHONEME_D ; D
.byte PHONEME_AI ; A1
.byte PHONEME_I ; I3
.byte PHONEME_Y ; Y
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_HF ; HF ; hold
.byte PHONEME_O ; O2
.byte PHONEME_O ; O2
.byte PHONEME_L ; L
.byte PHONEME_L ; L
.byte PHONEME_D ; D
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_M ; M ; my
.byte PHONEME_UH3 ; UH3
.byte PHONEME_AH ; AH2
.byte PHONEME_Y ; Y
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_M ; M ; MYST
.byte PHONEME_I ; I
.byte PHONEME_S ; S
.byte PHONEME_T ; T
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_B ; B ; book
.byte PHONEME_OO ; OO1
.byte PHONEME_OO ; OO1
.byte PHONEME_K ; K
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_AH1 ; AH1 ; are
.byte PHONEME_UH2 ; UH2
.byte PHONEME_ER ; ER
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_UH1 ; UH1 ; unsettling
.byte PHONEME_N ; N
.byte PHONEME_S ; S
.byte PHONEME_EH1 ; EH1
.byte PHONEME_T ; T
.byte PHONEME_L ; L
.byte PHONEME_I ; I
.byte PHONEME_NG ; NG
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_T ; T ; to
.byte PHONEME_IU ; IU
.byte PHONEME_IU ; UI/UI
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_M ; M ; me
.byte PHONEME_E1 ; E1
.byte PHONEME_Y ; Y
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte $FF
; "I KNOW THAT MY APPREHENSIONS MIGHT"
; "NEVER BE ALLAYED, AND SO I CLOSE,"
; "REALIZING THAT PERHAPS,"
myst_allayed:
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_AH1 ; AH1 ; I
.byte PHONEME_Y ; Y
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_N ; AH1 ; know
.byte PHONEME_OO ; OO1
.byte PHONEME_O ; O1
.byte PHONEME_U1 ; U1
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_THV ; THV ; that
.byte PHONEME_AE1 ; AE1
.byte PHONEME_EH ; EH3
.byte PHONEME_T ; T
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_M ; M ; my
.byte PHONEME_UH3 ; UH3
.byte PHONEME_AH ; AH2
.byte PHONEME_Y ; Y
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_AE1 ; AE1 ; apprehensions
.byte PHONEME_P ; P
.byte PHONEME_R ; R
.byte PHONEME_Y ; Y
.byte PHONEME_HF ; HF
.byte PHONEME_EH ; EH
.byte PHONEME_N ; N
.byte PHONEME_SCH ; SCH
.byte PHONEME_U1 ; U1
.byte PHONEME_N ; N
.byte PHONEME_Z ; Z
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_M ; M ; might
.byte PHONEME_UH3 ; UH3
.byte PHONEME_AH ; AH2
.byte PHONEME_Y ; Y
.byte PHONEME_T ; T
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_N ; N ; never
.byte PHONEME_EH1 ; EH
.byte PHONEME_V ; V
.byte PHONEME_R ; R
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_B ; B ; be
.byte PHONEME_E1 ; E1
.byte PHONEME_Y ; Y
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_UH1 ; UH1 ; allayed
.byte PHONEME_L ; L
.byte PHONEME_A ; A
.byte PHONEME_Y ; Y
.byte PHONEME_D ; D
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA ; ,
.byte PHONEME_AE1 ; AE1 ; and
.byte PHONEME_EH ; EH3
.byte PHONEME_N ; N
.byte PHONEME_D ; D
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_S ; S ; so
.byte PHONEME_OO ; OO
.byte PHONEME_O ; O2
.byte PHONEME_U1 ; U1
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_AH1 ; AH1 ; I
.byte PHONEME_Y ; Y
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_K ; K ; close
.byte PHONEME_L ; L
.byte PHONEME_UH3 ; UH3
.byte PHONEME_O ; O1
.byte PHONEME_U1 ; U1
.byte PHONEME_Z ; Z
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA ; ,
.byte PHONEME_R ; R ; realizing
.byte PHONEME_E1 ; E1
.byte PHONEME_AY ; AY
.byte PHONEME_UH1 ; UH1
.byte PHONEME_L ; L
.byte PHONEME_AH1 ; AH1
.byte PHONEME_Y ; Y
.byte PHONEME_Z ; Z
.byte PHONEME_I ; I
.byte PHONEME_NG ; NG
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_THV ; THV ; that
.byte PHONEME_AE1 ; AE1
.byte PHONEME_EH ; EH3
.byte PHONEME_T ; T
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_P ; P ; perhaps
.byte PHONEME_ER ; ER
.byte PHONEME_HF ; HF
.byte PHONEME_AE1 ; AE1
.byte PHONEME_EH ; EH3
.byte PHONEME_P ; P
.byte PHONEME_Z ; Z
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte $FF
; "THE ENDING HAS NOT YET BEEN WRITTEN."
myst_written:
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_THV ; THV ; the
.byte PHONEME_UH1 ; UH1
.byte PHONEME_UH3 ; UH3
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_EH1 ; EH1 ; ending
; .byte PHONEME_EH3 ; EH3
.byte PHONEME_N ; N
.byte PHONEME_D ; D
.byte PHONEME_I ; I
.byte PHONEME_NG ; NG
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_HF ; H ; has
.byte PHONEME_AE1 ; AE1
; .byte PHONEME_EH3 ; EH3
.byte PHONEME_Z ; Z
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_N ; N ; not
.byte PHONEME_AH1 ; AH1
.byte PHONEME_UH3 ; UH3
.byte PHONEME_T ; T
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_YI ; YI ; yet
.byte PHONEME_EH1 ; EH1
; .byte PHONEME_EH3 ; EH3
.byte PHONEME_T ; T
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_B ; B ; been
.byte PHONEME_EH1 ; EH1
; .byte PHONEME_EH3 ; EH3
.byte PHONEME_N ; N
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_R ; R ; written
.byte PHONEME_I ; I
.byte PHONEME_T ; T
.byte PHONEME_N ; N
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte PHONEME_PAUSE ; PA
.byte $FF

View File

@ -26,6 +26,8 @@ TEMP5 = $15
LAST_KEY = $16
SPEECH_PTRL = $17
SPEECH_PTRH = $18
HGR_SHAPE = $1A ; also used in BKGND0
HGR_SHAPE2 = $1B
@ -319,8 +321,9 @@ CURRENT_DISK = $DC
JOYSTICK_ENABLED= $DD
SOUND_STATUS = $DE
SOUND_DISABLED = $80
SOUND_IN_LC = $01 ; $01 sound effects in language card
SOUND_MOCKINGBOARD = $02 ; mockingboard detected
SOUND_IN_LC = $01 ; speaker effects in language card
SOUND_MOCKINGBOARD = $02 ; mockingboard detected
SOUND_SSI263 = $04 ; SSI-263 speech chip detected
GRID_PAGE = $DF