Reply 20 of 29, by Predator99
So I am quite sure the sub at C538 is for reading data from CMOS (Port 03E0 / 03E1). The data to read is given in AL when it s called:
F000:C51E BAE003 MOV DX,03E0F000:C521 EE OUT DX,ALF000:C522 EB00 JMP C524F000:C524 EB00 JMP C526F000:C526 42 INC DXF000:C527 EC IN AL,DXF000:C528 C3 RETF000:C529 BAE003 MOV DX,03E0F000:C52C EE OUT DX,ALF000:C52D 86C4 XCHG AL,AHF000:C52F EB00 JMP C531F000:C531 EB00 JMP C533F000:C533 42 INC DXF000:C534 EE OUT DX,ALF000:C535 86C4 XCHG AL,AHF000:C537 C3 RETF000:C538 9C PUSHFF000:C539 FA CLIF000:C53A 52 PUSH DXF000:C53B E8E0FF CALL C51EF000:C53E 50 PUSH AXF000:C53F EB07 JMP C548F000:C541 9C PUSHFF000:C542 FA CLIF000:C543 52 PUSH DXF000:C544 50 PUSH AXF000:C545 E8E1FF CALL C529F000:C548 B00D MOV AL,0DF000:C54A E8D1FF CALL C51EF000:C54D 58 POP AXF000:C54E 5A POP DXF000:C54F 9D POPFF000:C550 C3 RET
It is called around 20 times. I think this is where it is called from to check for floppy etc:
F000:E2A2 B00E MOV AL,0E Post Code 0EF000:E2A4 E680 OUT 80,ALF000:E2A6 F7C50020 TEST BP,2000 Check if CMOS inoperationalF000:E2AA B00D MOV AL,0DF000:E2AC 756F JNZ E31D CMOS inop? Go to POST code 10F000:E2AE E887E2 CALL C538 AL=0DF000:E2B1 0AC0 OR AL,ALF000:E2B3 B80E0E MOV AX,0E0EF000:E2B6 E87FE2 CALL C538 AL=0EF000:E2B9 780B JS E2C6F000:E2BB 83CD08 OR BP,+08 Set BP floppy errorF000:E2BE 0CC4 OR AL,C4F000:E2C0 EB42 JMP E304F000:E2C2 90 NOPF000:E2C3 E96214 JMP F728F000:E2C6 0AC0 OR AL,ALF000:E2C8 7833 JS E2FDF000:E2CA 50 PUSH AXF000:E2CB 33C9 XOR CX,CXF000:E2CD 33D2 XOR DX,DXF000:E2CF B81010 MOV AX,1010F000:E2D2 E863E2 CALL C538 AL=10F000:E2D5 8AC8 MOV CL,ALF000:E2D7 03D1 ADD DX,CXF000:E2D9 FEC4 INC AHF000:E2DB 8AC4 MOV AL,AHF000:E2DD 3C1E CMP AL,1EF000:E2DF 7402 JZ E2E3F000:E2E1 EBEF JMP E2D2F000:E2E3 FEC4 INC AHF000:E2E5 E850E2 CALL C538F000:E2E8 86C4 XCHG AL,AHF000:E2EA E84BE2 CALL C538F000:E2ED 3BC2 CMP AX,DXF000:E2EF 58 POP AXF000:E2F0 7504 JNZ E2F6F000:E2F2 0BD2 OR DX,DXF000:E2F4 750C JNZ E302F000:E2F6 0C44 OR AL,44F000:E2F8 83CD10 OR BP,+10 Set BP checksum errorF000:E2FB EB07 JMP E304F000:E2FD 83CD20 OR BP,+20 Set BP display errorF000:E300 EB02 JMP E304F000:E302 249B AND AL,9BF000:E304 50 PUSH AXF000:E305 B00F MOV AL,0FF000:E307 E680 OUT 80,AL Post Code 0FF000:E309 B014 MOV AL,14
F000:E30B E82AE2 CALL C538F000:E30E D0E8 SHR AL,1F000:E310 58 POP AXF000:E311 7205 JB E318F000:E313 83CD20 OR BP,+20F000:E316 0C20 OR AL,20F000:E318 86C4 XCHG AL,AHF000:E31A E824E2 CALL C541F000:E31D B010 MOV AL,10F000:E31F E680 OUT 80,AL Post Code 10
