0E36

Restore psz to HL.
QuestionMark:0E36LD A,3FPrint '?'.
0E38RST 18H
0E39LD A,20Print ' '.
0E3BRST 18H
0E3CJP 106BJump to GetInput.
I think this and everything below is for parsing a program statement pointed to by HL.
0E3FXOR A
0E40LD (0A8F),A
0E43LD (0A8E),A
0E46LD BC,013BPoss. max linebuffer size.
0E49LD DE,084APoss. linebuffer start.
0E4CLD A,(HL)
0E4DCP 22A='"'?
0E4FJP Z,1000
0E52CP 20A=' '?
0E54JP Z,0FD6
0E57OR AIf A='\0', then jump to exit.
0E58JP Z,1009
0E5BLD A,(0A8E)
0E5EOR A
0E5FLD A,(HL)
0E60JP NZ,0FD6
0E63CP 3F
0E65LD A,91
0E67JP Z,0FD6
0E6APUSH DE
0E6BPUSH BC
0E6CLD DE,0391
0E6FCALL 1029
0E72CALL 14D3
0E75JP C,0F1D
Use A as offset into table at 0x013B. Each entry in this table is a word pointer to (something?), possibly a keyword.
0E78PUSH HL
0E79LD HL,013B
0E7CSUB 41A=A-63.
0E7EADD A,AA=A*2.
0E7FLD C,A
0E80LD B,00
0E82ADD HL,BC
0E83LD E,(HL)
0E84INC HL
0E85LD D,(HL)Now DE=pointer to (something)
0E86POP HL
0E87INC HLpsz++.
Here, DE points to an entry in the keyword table and HL points to the string being parsed. We are looking to match them.
Loop1:0E88PUSH HLPreserve psz.
Loop2:0E89CALL CharToUpper(1029)Make (HL) uppercase.
0E8CLD C,AC = uppercase char.
0E8DLD A,(DE)Get byte from (something).
0E8EAND 7FIgnore top bit.
0E90JP Z,1034If lowest 7 bits are 0, ???
0E93CP CMatched char?
0E94INC HL
0E95JP NZ,0EB9
0E98LD A,(DE)
0E99INC DE
0E9AOR A
0E9BJP P,Loop2(0E89)I *think* jump back if <0x80.
We have matched the keyword up to and including a byte from the table-entry which had it's highest bit set. DE is now pointing to the next byte in the entry.
0E9EPOP AFClear up stack (AF ignored).
0E9FLD A,(DE)
0EA0OR A
0EA1JM M,0EC4
0EA4POP BC
0EA5POP DE
0EA6OR 80
0EA8PUSH AF
0EA9LD A,FFWrite 0xFF to the line buffer. Dunno what this signifies.
0EABCALL 101E
0EAEXOR A
0EAFLD (0A8F),A
0EB2POP AF
0EB3CALL 101E
0EB6JP 0E4C
0EB9POP HLRestore psz.
0EBALD A,(DE)
0EBBINC DE
0EBCOR A
0EBDJP P,0EBA
0EC0INC DE
0EC1JP 0E88
0EC4DEC HL
If A is in a certain group of values, then (0A8F)=1. Otherwise (0A8F)=0. To conserve memory, a neat trick is used: The address of the code that writes 1 to (0A8F) is pushed onto the stack to be used as a return address. This means that the flow control can be done with 1-byte instructions (RET Z) as opposed to 3-byte (JP Z,0EF6). It's a good trick to save memory.
0EC5PUSH AF
0EC6CP A2
0EC8JP Z,0EF6
0ECBLD BC,0EF6Push address of WriteOne onto stack.
0ECEPUSH BC
0ECFCP AB
0ED1RET Z
0ED2CP AC
0ED4RET Z
0ED5CP AA
0ED7RET Z
0ED8CP A7
0EDARET Z
0EDBCP A9
0EDDRET Z
0EDECP D6
0EE0RET Z
0EE1CP 8A
0EE3RET Z
0EE4CP 93
0EE6RET Z
0EE7CP 9F
0EE9RET Z
0EEACP 89
0EECRET Z
0EEDCP CF
0EEFRET Z
0EF0CP 8D
0EF2RET Z
0EF3POP AFClear up stack. AF ignored.
WriteZero:0EF4XOR AA=0. Zero flag reset.
0EF5JP NZ,013ENever jumps. It's a concealer.
WriteOne:0EF6LD A,01
0EF8LD (0A8F),A
todo
0EFBPOP AF
0EFCCP 7EConcealer for instruction below.
0EFD LD A,(HL)
0EFEPOP BC
0EFFPOP DE
0F00CP A2
0F02JP NZ,0F0A
Handle 0xA2.
0F05PUSH AF
0F06CALL 101C
0F09POP AF
Handle 0xDB.
0F0ACP DB
0F0CJP NZ,0FA6
Write ':' followed by 0x8F to the line buffer.
0F0FPUSH AF
0F10CALL 101C
0F13LD A,8F
0F15CALL 101E
0F18POP AF
todo
0F19PUSH AF
0F1AJP 1002
0F1DLD A,(HL)
0F1ECP 2EA='.'?
0F20JP Z,0F2D
0F23CP 3AA>'9'?
0F25JP NC,0FC3
0F28CP 30A<'0'?
0F2AJP C,0FC3
IsNumeric:0F2DLD A,(0A8F)
0F30OR A
0F31LD A,(HL)
0F32POP BC
0F33POP DE
0F34JM M,0FD6
0F37JP Z,0F59
0F3ACP 2E
0F3CJP Z,0FD6
0F3FLD A,0E
0F41CALL 101E
0F44PUSH DE
0F45CALL 14EF
0F48CALL 104A
0F4BEX (SP),HL
0F4CEX DE,HL
0F4DLD A,L
0F4ECALL 101E
0F51LD A,H
0F52POP HL
0F53CALL 101E
0F56JP 0E4C
0F59PUSH DE
0F5APUSH BC
0F5BLD A,(HL)
0F5CCALL 4501
0F5FCALL 104A
0F62POP BC
0F63POP DE
0F64PUSH HL
0F65LD A,(0A8D)
0F68CP 02
0F6AJP NZ,0F85
0F6DLD HL,(0B14)
0F70LD A,H
0F71OR A
0F72LD A,02
0F74JP NZ,0F85
0F77LD A,L
0F78LD H,L
0F79LD L,0F
0F7BCP 0A
0F7DJP NC,0F4D
0F80ADD A,11
0F82JP 0F52
0F85PUSH AF
0F86RRCA
0F87ADD A,1B
0F89CALL 101E
0F8CLD HL,0B14
0F8FRST 30H
0F90JP C,0F96
0F93LD HL,0B10
0F96POP AF
0F97PUSH AF
0F98LD A,(HL)
0F99CALL 101E
0F9CPOP AF
0F9DINC HL
0F9EDEC A
0F9FJP NZ,0F97
0FA2POP HL
0FA3JP 0E4C
Handle 0x26.
0FA6CP 26
0FA8JP NZ,0FD6
0FABPUSH HL
0FACRST 10H
0FADCP 48
0FAFPOP HL
0FB0LD A,0B
0FB2JP NZ,0FB7
0FB5LD A,0C
0FB7CALL 101E
0FBAPUSH DE
0FBBPUSH BC
0FBCCALL 1C69
0FBFPOP BC
0FC0JP 0F4B
0FC3LD DE,0390
0FC6INC DE
0FC7LD A,(DE)
0FC8AND 7F
0FCAJP Z,103D
0FCDCP (HL)
0FCEINC DE
0FCFLD A,(DE)
0FD0JP NZ,0FC6
0FD3JP 103E
todo:
0FD6INC HL
0FD7PUSH AF
0FD8CALL 101EWrite A to line buffer.
0FDBPOP AF
0FDCSUB 3A
0FDEJP Z,0FE8
0FE1CP 4A
0FE3JP NZ,0FEE
0FE6LD A,01
0FE8LD (0A8E),A
0FEBLD (0A8F),A
0FEESUB 55
0FF0JP NZ,0E4C
0FF3PUSH AF
0FF4LD A,(HL)
0FF5OR A
0FF6EX (SP),HL
0FF7LD A,H
0FF8POP HL
0FF9JP Z,1009
0FFCCP (HL)
0FFDJP Z,0FD6
1000PUSH AF
1001LD A,(HL)
1002INC HL
1003CALL 101E
1006JP 0FF4
todo
ResetAndExit:1009LD HL,0140BC=0x140-BC.
100CLD A,L
100DSUB C
100ELD C,A
100FLD A,H
1010SBC B
1011LD B,A
1012LD HL,0849
1015XOR AWrite 3 zero bytes to (DE)
1016LD (DE),A
1017INC DE
1018LD (DE),A
1019INC DE
101ALD (DE),A
101BRET
Writes ':' to the line buffer.
101CLD A,3AA=':'.
Writes A to the line buffer.
101ELD (DE),A
101FINC DE
1020DEC BC
1021LD A,CBC=0?
1022OR B
1023RET NZReturn if BC != 0.
1024LD E,17Error - "LINE BUFFER OVERFLOW"
1026JP 0BD4
CharToUpper - if (HL) is a lowercase character, make it uppercase.
CharToUpper:1029LD A,(HL)
102ACP 61If A < 'a' then return.
102CRET C
102DCP 7BIf A > 'z' then return.
102FRET NC
1030AND 5FMake A uppercase char.
1032LD (HL),A
1033RET
todo
1034POP HL
1035DEC HL
1036DEC A
1037LD (0A8F),A
103AJP 0EFD
103DLD A,(HL)
103EPUSH AF
103FLD A,(0A8F)
1042INC A
1043JP Z,0EF8
1046DEC A
1047JP 0EF8
104ADEC HL
104BLD A,(HL)
104CCP 20
104EJP Z,104A
1051CP 09
1053JP Z,104A
1056CP 0A
1058JP Z,104A
105BINC HL
105CRET
105DCALL 1172
1060CP 01
1062JP NZ,10AD
1065LD (HL),00
1067JP 1073
106ALD (HL),B
GetInput:106BCALL 1172
106ECP 01
1070JP NZ,10A2
1073CALL 17BD
1076LD HL,FFFF
1079JP 2A10
107CLD A,(06E3)
107FOR A
1080LD A,5C
1082LD (06E3),A
1085JP NZ,108E
1088DEC B
1089JP Z,106A
108CRST 18H
108DLD A,05
108FDEC HL
1090JP Z,109E
1093LD A,(HL)
1094RST 18H
1095JP 105D
1098DEC B
1099DEC HL
109ARST 18H
109BJP NZ,105D
109ERST 18H
109FCALL 17BD
10A2LD HL,0989
10A5LD B,01
10A7PUSH AF
10A8XOR A
10A9LD (06E3),A
10ACPOP AF
10ADLD C,A
10AECP 7F
10B0JP Z,107C
10B3LD A,(06E3)
10B6OR A
10B7JP Z,10C1
10BALD A,5C
10BCRST 18H
10BDXOR A
10BELD (06E3),A
10C1LD A,C
10C2CP 07
10C4JP Z,10FC
10C7CP 03
10C9CALL Z,13A8
10CCSCF
10CDRET Z
10CECP 0D
10D0JP Z,17B8
10D3CP 09
10D5JP Z,10FC
10D8CP 0A
10DAJP NZ,10E5
10DDDEC B
10DEJP Z,106B
10E1INC B
10E2JP 10FC
10E5CP 15
10E7CALL Z,13A8
10EAJP Z,106B
10EDCP 40
10EFJP Z,109E
10F2CP 5F
10F4JP Z,1098
10F7CP 20
10F9JP C,105D
10FCLD A,B
10FDINC A
10FELD A,07
1100JP Z,1107
1103LD A,C
1104LD (HL),C
1105INC HL
1106INC B
1107RST 18H
1108SUB 0A
110AJP NZ,105D
110DLD (0027),A
1110LD A,0D
1112RST 18H
1113CALL 1172
1116OR A
1117JP Z,1113
111ACP 0D
111CJP Z,105D
111FJP 10AD
1122LD A,H
1123OR L
1124JP NZ,321D
1127POP HL
1128LD A,(06DA)
112BOR A
112CJP NZ,3C33
112FLD A,(06E4)
1132OR A
1133JP NZ,21D9
1136POP AF
Tabulation. If char is a tab (0x9) then print spaces until (0027) mod 8 = 0. This mem location is presumably tracking current X of cursor.
1137PUSH BC
1138PUSH AF
1139CP 09
113BJP NZ,114C
113ELD A,20Print a ' '.
1140RST 18H
1141LD A,(0027)
1144AND 07
1146JP NZ,113E
1149POP AF
114APOP BC
114BRET
todo.
114CCP 20
114EJP C,1160
1151LD A,(06E1)
1154LD B,A
1155LD A,(0027)
1158CP B
1159CALL Z,17BD
115CINC A
115DLD (0027),A
1160POP AF
1161POP BC
1162PUSH AF
1163IN A,(10)
1165AND 02
1167JP Z,1163
116APOP AF
116BOUT (11),A
116DPUSH AF
116ENOP
116FNOP
1170POP AF
1171RET
Should be getting input here...
1172PUSH HL
1173LD HL,(0825)
1176LD A,H
1177OR L
1178JP Z,119D
117BCALL 33BB
117EJP NC,3EBA
1181CALL 3720
1184LD A,(0821)
1187OR A
1188LD HL,123B
118BEX (SP),HL
118CJP NZ,0DE3
118FEX (SP),HL
1190PUSH BC
1191PUSH DE
1192LD HL,0B4APrint "OK\r\n".
1195CALL 21A8
1198POP DE
1199POP BC
119AXOR A
119BPOP HL
119CRET
This looks like the actual InputChar().
InputChar:119DPOP HL
119EIN A,(10)Wait for permission to read input.
11A0AND 01
11A2JP Z,119E
11A5IN A,(11)Read input.
11A7AND 7F
11A9CP 0FWhat is special about 0xF?
11ABRET NZ
11ACLD A,(06E4)
11AFOR A
11B0CALL Z,13A6
11B3CPL
11B4LD (06E4),A
11B7OR A
11B8JP Z,13A6
11BBXOR A
11BCRET