Real entry point(293Dh) is far away.
I'd say too far for the purpose.
Though one could also say that 2A15h is more of an entry point since
0x2A15 31 00 48 LXI SP, 0x4800
0x2A18 AF XRA A
0x2A19 3A B6 41 LDA (0x41B6)
0x2A1C B7 ORA A
0x2A1D C5 PUSH BC
0x2A1E E5 PUSH HL
0x2A1F C4 54 2A CNZ 0x2A54
0x2A22 E1 POP HL
0x2A23 C1 POP BC
0x2A24 AF XRA A
But it's not called from out of this section.
First XRA is not needed so maybe this is an updated part.
Or maybe it's just a programmers habit.
In that section is
0x2963 2C INR L
0x2964 3E 61 MVI A, 0x61
0x2966 BD CMP L
0x2967 C0 RNZ
0x2968 2E 55 MVI L, 0x55
0x296A C9 RET
First thought was that it's some sort of a calculation thing but it's just a simple data area limiter.
That ASCII 'a' just happened to be there.
Personally I wouldn't trust my self so much, I'd use RNC for return.
Some interrupt stuff.
I've missed the MarkINT(A14 + OUT + 8xFLine),
It's vector (manual page 297/323) is U21 pin 11 and D1 so 08h and RST1.
But it needs A14 with OUT so for pretty long time I just couldn't understand when that happens.
I've also found a polarity error in front panel stuff so no help from there.
Luckily I spotted a phrase "the port number is duplicated on the address bus" p97/224 of RS $3.95 manual.
So OUT 40h is actually OUT 4040h and use of A14 is perfectly clear.
For Scan Adv I've messed with polarities all by my self but OUT 48h actually being OUT 4848h make the use of A11 also clear.
Has this U18 and its Alt. jumper being an argumental center earlier?
Maybe it was a different hardware.
INA
ID1 (D4, 10h, RST2) Ext Trigger
ID2 (D4-3, 18h, RST3) Bit Serial, Parallel
ID3 (D5, 20h, RST4) IEEE-1488
ACK (U21 D6) is D5-4, 30h, RST6.
MARKINT (U21 D1) is D1, 08h, RST1.
Below should be everything related to RST instructions.
0x00B4 21 F8 0B LXI HL, 0x0BF8
0x00B7 22 12 41 SHLD (0x4112) ; RST3 & 4 jump
0x00BA 21 FE 0B LXI HL, 0x0BFE
0x00BD 22 10 41 SHLD (0x4110) ; RST6 jump
0x01E6 21 5F 0B LXI HL, 0x0B5F ; front panel stuff
0x01E9 22 10 41 SHLD (0x4110) ; RST6 jump
0x0BF8 C1 POP BC
0x0BF9 D1 POP DE
0x0BFA E1 POP HL
0x0BFB F1 POP AF
0x0BFC FB EI
0x0BFD C9 RET
0x0BFE 26 C0 MVI H, 0xC0 ; not MarkINT without
0x0C00 36 FF MVI (HL), 0xFF ; rising edge of OUT
0x0C02 C3 FA 0B JMP 0x0BFA
0x0CF4 21 B4 0D LXI HL, 0x0DB4
0x0CF7 22 C8 41 SHLD (0x41C8) ; RST5 jump
; ...
0x0D0E 2A AC 41 LHLD (0x41AC)
0x0D11 22 12 41 SHLD (0x4112) ; RST3 & 4 jump
0x0DEA 21 FF 0D LXI HL, 0x0DFF
0x0DED 22 C8 41 SHLD (0x41C8) ; RST5 jump
0x0DF0 21 32 0E LXI HL, 0x0E32
0x0DF3 22 12 41 SHLD (0x4112) ; RST3 & 4 jump
0x0E59 21 7B 1A LXI HL, 0x1A7B
0x0E5C 22 C8 41 SHLD (0x41C8) ; RST5 jump
0x1371 CD 88 13 CALL 0x1388
0x1374 78 MOV A, B
0x1375 FE 31 CPI 0x31
0x1377 C2 81 13 JNZ 0x1381
0x137A 21 B4 0D LXI HL, 0x0DB4
0x137D 22 C8 41 SHLD (0x41C8) ; RST5 jump
0x1380 C9 RET
0x1381 21 B5 0D LXI HL, 0x0DB5
0x1384 22 C8 41 SHLD (0x41C8) ; RST5 jump
0x1387 C9 RET
0x1388 3A CB 41 LDA (0x41CB) ; RST5 Isolator=FF if 41CBbit0
0x138B E6 01 ANI 0x01
0x138D C8 RZ
0x138E 3E FF MVI A, 0xFF
0x1390 32 CA 41 STA (0x41CA)
0x1393 C9 RET
0x1394 CD AE 13 CALL 0x13AE ; Isolator=FF if 41CBbit0
0x1397 AF XRA A
0x1398 32 CA 41 STA (0x41CA)
0x139B 2F CMA
0x139C 32 C8 41 STA (0x41C8) ; RST5 jump
0x139F 32 C9 41 STA (0x41C9) ; FFFF (RST7?)
0x13A2 C9 RET
0x145C 21 99 15 LXI HL, 0x1599 ; inc (400F)
0x145F 22 10 41 SHLD (0x4110) ; RST6 jump
0x1462 11 40 40 LXI DE, 0x4040
0x1465 1A LDAX (DE)
0x1466 F6 40 ORI 0x40 ; 7th digit?
0x1468 12 STAX (DE) ; front or rear
0x1469 C9 RET
0x158A 26 D3 MVI H, 0xD3
0x158C 11 98 1A LXI DE, 0x1A98
0x158F 36 00 MVI (HL), 0x00
0x1591 EB XCHG
0x1592 22 AC 41 SHLD (0x41AC)
0x1595 22 12 41 SHLD (0x4112) ; RST3 & 4 jump
0x1598 C9 RET
0x3117 CD 88 13 CALL 0x1388 ; (41CA)=FF if 41CBbit0
0x311A 21 00 02 LXI HL, 0x0200 ; 2nd code set
0x311D 22 C8 41 SHLD (0x41C8) ; RST5 jump
0x3120 21 40 40 LXI HL, 0x4040
0x3123 7E MOV A, (HL)
0x3124 E6 20 ANI 0x20
0x3126 F5 PUSH AF
0x3127 7E MOV A, (HL)
0x3128 E6 DF ANI 0xDF
0x312A 77 MOV (HL), A
0x312B CD 38 29 CALL 0x2938 ; 0 to 4165h
0x312E F1 POP AF
0x312F 31 00 48 LXI SP, 0x4800
0x3132 C2 14 02 JNZ 0x0214
0x3135 CD 66 10 CALL 0x1066
0x3138 C3 4E 00 JMP 0x004E ; all done, go back
; 2nd code set
; never called directly by code starting from 0000
0x0200 CD AE 13 CALL 0x13AE
0x0203 31 00 48 LXI SP, 0x4800
0x0206 CD 52 02 CALL 0x0252 ; clear stuff
0x0209 21 14 02 LXI HL, 0x0214
0x020C E5 PUSH HL
0x020D FB EI
0x020E CD 66 10 CALL 0x1066
0x0211 C3 4E 00 JMP 0x004E ; all done, go back
0x13AE 3A CB 41 LDA (0x41CB)
0x13B1 E6 01 ANI 0x01
0x13B3 C8 RZ
0x13B4 26 8F MVI H, 0x8F
0x13B6 3E FF MVI A, 0xFF
0x13B8 F3 DI
0x13B9 77 MOV (HL), A
0x13BA 00 NOP
0x13BB FB EI
0x13BC C9 RET
; RST1
; set front panel stuff
; depending what is in register H
; new SP from 4292h
; jump to 1C10h
; and much more from there
0x1C09 21 00 00 LXI HL, 0x0000
0x1C0C 39 DAD SP
0x1C0D 22 92 42 SHLD (0x4292)
0x1C10 26 E3 MVI H, 0xE3
0x1C12 36 0C MVI (HL), 0x0C
; RST2
; fill 0Ch pieces of A to 401Ah and up
0x0010 11 1A 40 LXI DE, 0x401A
0x0013 0E 0C MVI C, 0x0C
0x0015 C3 14 22 JMP 0x2214
; RST3
0x0018 F5 PUSH AF
0x0019 E5 PUSH HL
0x001A D5 PUSH DE
0x001B C5 PUSH BC
0x001C 2A 12 41 LHLD (0x4112)
0x001F E9 PCHL ;---------->*
; RST4
0x0020 F5 PUSH AF
0x0021 E5 PUSH HL
0x0022 D5 PUSH DE
0x0023 C5 PUSH BC
0x0024 2A 12 41 LHLD (0x4112)
0x0027 E9 PCHL ;---------->*
; RST5
0x0028 CD AE 13 CALL 0x13AE ; Isolator=FF if 41CBbit0
0x002B 2A C8 41 LHLD (0x41C8)
0x002E E9 PCHL ;---------->*
; RST6
0x0030 F5 PUSH AF
0x0031 E5 PUSH HL
0x0032 2A 10 41 LHLD (0x4110)
0x0035 E9 PCHL ;---------->*
; RST7
; pretty hard start