aboutsummaryrefslogtreecommitdiff
path: root/devtools/sci/scitrace.asm
blob: 2c5d2cc4ccb8a7f716988871cea20f4444e24c3e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
; ScummVM - Graphic Adventure Engine
;
; ScummVM is the legal property of its developers, whose names
; are too numerous to list here. Please refer to the COPYRIGHT
; file distributed with this source distribution.
;
; This program is free software; you can redistribute it and/or
; modify it under the terms of the GNU General Public License
; as published by the Free Software Foundation; either version 2
; of the License, or (at your option) any later version.

; This program is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
; GNU General Public License for more details.

; You should have received a copy of the GNU General Public License
; along with this program; if not, write to the Free Software
; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
;
;---------------------------------------------------------------------------
;
; SCITRACE
;  TSR for logging specific calls inside sierra sci
;  Written by M. Kiewitz
;
;---------------------------------------------------------------------------

; Simply replace 51h 51h 51h 51h in sierra sci with
;  CDh 90h 90h 90h. This code will then log copyrect calls to scitrace.bin

		.286

code_seg        segment public
                assume  cs:code_seg, ds:nothing, es:nothing
                org     00100h

scitrace:       jmp     install_my_prog

;---------------------------------------------------------------------------

filename:       db 'SCITRACE.BIN', 0

inthandler:     push    ax
                push    bx
                push    cx
                push    dx
                push    ds
                push    cs
                pop     ds
                mov     ah, 3Dh
                mov     al, 1
                mov     dx, offset filename
                xor     cl, cl
                int     21h
                pop     ds
                jc      int_error
                mov     bx, ax
                mov     ax, 4202h
                xor     cx, cx
                xor     dx, dx
                int     21h
                mov     dx, si
                mov     ah, 40h
                mov     cx, 8
                int     21h
                mov     ah, 3Eh
                int     21h
int_error:      pop     dx
                pop     cx
                pop     bx
                pop     ax
                movsw
                movsw
                movsw
                movsw
                iret

end_of_tsr:

;---------------------------------------------------------------------------

titlestr:       db 'SCITRACE - written by M. Kiewitz',13,10,'$'
errorfile:      db 'error creating file',13,10,'$'

;---------------------------------------------------------------------------

install_my_prog:
                push    cs
                pop     ds
                mov     ah, 09h
                mov     dx, offset titlestr
                int     21h

                mov     ah, 3Ch
                mov     cx, 0
                mov     dx, offset filename
                int     21h
                jnc     valid_open
                mov     ah, 09h
                mov     dx, offset errorfile
                int     21h
                mov     ax, 6200h
                int     21h
                mov     es, bx
                mov     ax, 4C00h
                int     21h

valid_open:     mov     bx, ax
                mov     ah, 3Eh
                int     21h

NowInstallTSR:
                mov     ax, 2590h
                mov     dx, offset inthandler
                int     21h                     ; int 90h pointer <- ds:dx

                mov     ax, ds:[002ch]          ; get envt segment
                mov     es, ax
                mov     ax, 4900h
                int     21h

                mov     dx, offset end_of_tsr
                add     dx, 15
                shr     dx, 4
                mov     ax, 3100h
                int     21h

;---------------------------------------------------------------------------

code_seg	ends
		end	scitrace