123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- """ Parse LOGCPU.TXT from dosbox-x (LOGL)
- """
- import sys
- logfile = sys.argv[1]
- with open(logfile, "r") as f:
- openfiles = 0
- lineno = 0
- for line in f:
- lineno += 1
- # Skip empty lines
- if not line.strip():
- continue
- # Skip comments
- if line.startswith("//"):
- continue
- # Parse line
- # 0277:00000B69 int 21 CD 21 EAX:00003D00 EBX:00003C36 ECX:00000000 EDX:00003E92 ESI:00003D4B EDI:00003E62 EBP:00003C36 ESP:00003C34 DS:028F ES:028F FS:0337 GS:02BF SS:028F CF:0 ZF:1 SF:0 OF:0 AF:0 PF:1 IF:1 TF:0 VM:0 FLG:00003246 CR0:00000011
- instruction = line[15:15+32]
- eax = line[97:97+8]
- ax = eax[4:]
- ah = ax[0:2]
- al = ax[2:]
- ebx = line[110:110+8]
- bx = ebx[4:]
- bh = bx[0:2]
- bl = bx[2:]
- ecx = line[123:123+8]
- cx = ecx[4:]
- ch = cx[0:2]
- cl = cx[2:]
- edx = line[136:136+8]
- dx = edx[4:]
- dh = dx[0:2]
- dl = dx[2:]
- ds = line[200:200+4]
- if instruction.startswith("call 0000199E"):
- print(f"{lineno:5d} call 0000199E")
- continue
- if not instruction.startswith("int 21"):
- continue
- if ah == "2C":
- print(f"{lineno:5d} Get system time")
- # create file
- elif ah == "3C":
- print(f"{lineno:5d} Create")
- # open file
- elif ah == "3D":
- openfiles += 1
- print(f"{lineno:5d} Open")
- # close file
- elif ah == "3E":
- openfiles -= 1
- print(f"{lineno:5d} Close handle:{bx}")
- # read
- elif ah == "3F":
- print(f"{lineno:5d} Read handle:{bx} no:0x{cx} to:{ds}:{dx}")
- # write file
- elif ah == "40":
- print(f"{lineno:5d} Write handle:{bx} no:0x{cx} from:{ds}:{dx}")
- # delete file
- elif ah == "41":
- print(f"{lineno:5d} Delete")
- # seek
- elif ah == "42":
- print(f"{lineno:5d} Seek handle:{bx}", int(f"{cx}{dx}", 16), "from", end=' ')
- if al == "00":
- print("start")
- elif al == "01":
- print("current")
- elif al == "02":
- print("end")
- else:
- print(f"WTF ({al})")
- elif ah == "44":
- print(f"{lineno:5d} IOCTL Write")
- else:
- print(f"{lineno:5d} TODO {ah:04X}")
- print(openfiles)
|