21A8 - Print null-terminated string.

Write A, DE to 0x0ABE-0xAC0. I think this is storing a string descriptor.
2158LD HL,0ABE
215BPUSH HL
215CLD (HL),A
215DINC HL
215ELD (HL),E
215FINC HL
2160LD (HL),D
2161POP HL
2162RET
First call by printstring.
2163DEC HLHL=psz-1
2164LD B,22
2166LD D,B
2167PUSH HLPreserve psz-1
2168LD C,FFC=string length (init. -1)
Loop to find the first char in the string that equals either B or D or '\0'. If executing from above, B=D=0x22.
FindBorD:216AINC HL
216BLD A,(HL)A=first char.
216CINC Cstring length ++.
216DOR AIf A='\0' jump out of find loop.
216EJP Z,2179
2171CP DIf A=D jump out of find loop.
2172JP Z,2179
2175CP BIf A!=B loop back to FindBorD.
2176JP NZ,FindBorD(216A)
At this point, we have found either B or D or '\0'.
Found:2179CP 22If '\"' call parser at 1298.
217BCALL Z,1298
217EEX (SP),HLHL=psz-1, (SP)=pointer to B or D char.
217FINC HLHL=psz
2180EX DE,HLDE=psz
2181LD A,CA=string length.
2182CALL 2158Store string descriptor at 0x0ABE.
2185LD DE,0ABEDE points to string descriptor.
2188LD A,D5
218ALD HL,(0A9E)HL=???
218DLD (0B14),HL
2190LD A,03Copy 3 bytes of memory (the string descriptor) from DE to HL
2192LD (0A8D),A
2195CALL 4004
2198LD DE,0AC1
219BRST 20HHL=0x0AC1?
219CLD (0A9E),HL
219FPOP HLHL=psz+1
21A0LD A,(HL)
21A1RET NZie return if HL != 0x0AC1.
21A2LD E,10Error - "STRING FORMULA TOO COMPLEX"
21A4JP 0BD4
21A7INC HL
PrintString. HL points to the start of the null-terminated string. It looks like the first three calls preprocess the string in some way, leaving BC pointing to the start and D with the length. Possibly the string is processed cos it can contain special chars needing expansion? Haven't seen any yet.
PrintString:21A8CALL 2163
21ABCALL 22E1
21AECALL LoadStringDesc(3FF4)D=length, BC=string pointer.
21B1INC D
21B2DEC D
21B3RET Z
21B4LD A,(BC)Print a character.
21B5RST 18H
21B6CP 0DSpecial processing for carriage return. Why?
21B8CALL Z,17CA
21BBINC BC
21BCJP 21B2
todo
21BFOR A
21C0LD C,F1
21C2PUSH AF
21C3LD HL,(06E5)
21C6EX DE,HL
21C7LD HL,(0AC1)
21CACPL
21CBLD C,A
21CCLD B,FF
21CEADD HL,BC
21CFINC HL
21D0RST 20H
21D1JP C,21DB
21D4LD (0AC1),HL
21D7INC HL
21D8EX DE,HL
21D9POP AF
21DARET
21DBPOP AF
21DCLD E,0E
21DEJP Z,0BD4
21E1CP A
21E2PUSH AF
21E3LD BC,21C1
21E6PUSH BC
21E7LD HL,(0A9C)
21EALD (0AC1),HL
21EDLD HL,0000
21F0PUSH HL
21F1LD HL,(06E5)
21F4PUSH HL
21F5LD HL,0AA0
21F8EX DE,HL
21F9LD HL,(0A9E)
21FCEX DE,HL
21FDRST 20H
21FELD BC,21F8
2201JP NZ,2250
2204LD HL,(0AE4)
2207EX DE,HL
2208LD HL,(0AE6)
220BEX DE,HL
220CRST 20H
220DJP Z,2225
2210LD A,(HL)
2211INC HL
2212INC HL
2213INC HL
2214CP 03
2216JP NZ,221D
2219CALL 2251
221CXOR A
221DLD E,A
221ELD D,00
2220ADD HL,DE
2221JP 2207
2224POP BC
2225EX DE,HL
2226LD HL,(0AE8)
2229EX DE,HL
222ARST 20H
222BJP Z,2271
222ELD A,(HL)
222FINC HL
2230CALL 3FF2
2233PUSH HL
2234ADD HL,BC
2235CP 03
2235CP 03
2237JP NZ,2224
223ALD (0AC3),HL
223DPOP HL
223ELD C,(HL)
223FLD B,00
2241ADD HL,BC
2242ADD HL,BC
2243INC HL
2244EX DE,HL
2245LD HL,(0AC3)
2248EX DE,HL
2249RST 20H
224AJP Z,2225
224DLD BC,2244
2250PUSH BC
2251XOR A
2252OR (HL)
2253INC HL
2254LD E,(HL)
2255INC HL
2256LD D,(HL)
2257INC HL
2258RET Z
2259LD B,H
225ALD C,L
225BLD HL,(0AC1)
225ERST 20H
225FLD H,B
2260LD L,C
2261RET C
2262POP HL
2263EX (SP),HL
2264RST 20H
2265EX (SP),HL
2266PUSH HL
2267LD H,B
2268LD L,C
2269RET NC
226APOP BC
226BPOP AF
226CPOP AF
226DPUSH HL
226EPUSH DE
226FPUSH BC
2270RET
2271POP DE
2272POP HL
2273LD A,L
2274OR H
2275RET Z
2276DEC HL
2277LD B,(HL)
2278DEC HL
2279LD C,(HL)
227APUSH HL
227BDEC HL
227CLD L,(HL)
227DLD H,00
227FADD HL,BC
2280LD D,B
2281LD E,C
2282DEC HL
2283LD B,H
2284LD C,L
2285LD HL,(0AC1)
2288CALL 0B79
228BPOP HL
228CLD (HL),C
228DINC HL
228ELD (HL),B
228FLD L,C
2290LD H,B
2291DEC HL
2292JP 21EA
2295PUSH BC
2296PUSH HL
2297LD HL,(0B14)
229AEX (SP),HL
229BCALL 1BB3
229EEX (SP),HL
229FCALL 4126
22A2LD A,(HL)
22A3PUSH HL
22A4LD HL,(0B14)
22A7PUSH HL
22A8ADD A,(HL)
22A9LD E,0F
22ABJP C,0BD4
22AECALL 2155
22B1POP DE
22B2CALL 22E5
22B5EX (SP),HL
22B6CALL 22E4
22B9PUSH HL
22BALD HL,(0ABF)
22BDEX DE,HL
22BECALL 22CC
22C1CALL 22CC
22C4LD HL,1A4C
22C7EX (SP),HL
22C8PUSH HL
22C9JP 2185
22CCPOP HL
22CDEX (SP),HL
22CELD A,(HL)
22CFINC HL
22D0LD C,(HL)
22D1INC HL
22D2LD B,(HL)
22D3LD L,A
22D4INC L
22D5DEC L
22D6RET Z
22D7LD A,(BC)
22D8LD (DE),A
22D9INC BC
22DAINC DE
22DBJP 22D5
22DECALL 4126
22E1LD HL,(0B14)HL=???
22E4EX DE,HL
22E5CALL 22FD
22E8EX DE,HL
22E9RET NZ
22EAPUSH DE
22EBLD D,B
22ECLD E,C
22EDDEC DE
22EELD C,(HL)
22EFLD HL,(0AC1)
22F2RST 20HHL=DE?
22F3JP NZ,22FB
22F6LD B,A
22F7ADD HL,BC
22F8LD (0AC1),HL
22FBPOP HL
22FCRET
22FDLD HL,(0A9E)HL=??
2300DEC HL
2301LD B,(HL)
2302DEC HL
2303LD C,(HL)
2304DEC HL
2305RST 20HHL=DE?
2306RET NZ
2307LD (0A9E),HL
230ARET