Prev: A606 Up: Map Next: A6FA
A6C4: Writes a special string into the buffer.
Used by the routine at String_DrawToSign.
Input
HL Address of 'string'
B Length of 'string'
A special string is made up of word indices and values.
Bit 7 determines if the item is a word index or a single character.
A '0' means look up a word and write it to the buffer.
A '1' means apply character to buffer.
Words include a space afterwards (represented by the '{')
String_WriteSpecial A6C4 LD DE,_5b00_buffer
A6C7 LD IX,_5b00_buffer
A6CB XOR A
String_WriteSpecial_0 A6CC LD (DE),A Add extra character. (First time this is the length, after that it is padding after a word).
String_WriteSpecial_1 A6CD INC DE Get next item in 'string'
A6CE LD A,(HL)
A6CF BIT 7,A Is it a word.
A6D1 JR Z,String_WriteSpecial_2
A6D3 AND $7F
A6D5 LD (DE),A Place item directly into buffer.
A6D6 INC HL
A6D7 INC (IX+$00)
A6DA DEC B count down to end.
A6DB RET Z
A6DC JR String_WriteSpecial_1
String_WriteSpecial_2 A6DE PUSH BC Get word based on A
A6DF PUSH HL
A6E0 PUSH DE
A6E1 CALL Dictionary_GetWord
A6E4 LD A,(_5b00_buffer) Add length of word to total length
A6E7 ADD A,C
A6E8 LD (_5b00_buffer),A
A6EB POP DE Copy word into string buffer.
A6EC LDIR
A6EE POP HL
A6EF INC HL
A6F0 POP BC
A6F1 DEC B
A6F2 RET Z
A6F3 INC (IX+$00)
A6F6 LD A,$7B Next character to get placed is a special space.
A6F8 JR String_WriteSpecial_0
Prev: A606 Up: Map Next: A6FA