-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathos.asm
More file actions
325 lines (312 loc) · 6.77 KB
/
os.asm
File metadata and controls
325 lines (312 loc) · 6.77 KB
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
;
; Licensed under the MIT license. See LICENSE file in the project root for details.
;
codeseg segment para public 'code'
dataseg segment para public 'data'
dataseg ends
assume cs:codeseg, ds:dataseg
extrn memset_:near
bss scb_pb_:word,257
;
public setcurdrv_
setcurdrv_ proc near
push bp
mov bp,sp
push es
push di
push si
push bx
push cx
push dx
mov dx,word ptr 4[bp]
mov cx,0Eh
int 0E0h
pop dx
pop cx
pop bx
pop si
pop di
pop es
pop bp
ret
setcurdrv_ endp
public getccpdrv_
getccpdrv_ proc near
push bp
mov bp,sp
push es
push di
push si
push bx
push cx
push dx
mov cx,0Ch
int 0E0h
cmp ax,22h
jz ccpdrv_cp11sv
cmp ax,1430h
jae ccpdrv_ccp3xsd
cmp ax,1041h
jz ccpdrv_4xsv
cmp ax,1050h
jz ccpdrv_4xsv
jmp ccpdrv_none
ccpdrv_cp11sv:
mov cx,31h
int 0E0h
add bx, 17h
xor ah, ah
mov al, es:[bx]
jmp ccpdrv_end
ccpdrv_ccp3xsd:
mov cx, 9Ah
int 0E0h
xor ah,ah
add bx, 4Bh
mov al, es:[bx]
jmp ccpdrv_end
ccpdrv_4xsv:
mov al,86h
mov byte ptr scb_pb_,al
mov al,0h
mov byte ptr scb_pb_+1,al
mov dx, offset scb_pb_
mov cx,31h
int 0E0h
xor ah,ah
mov al,byte ptr scb_pb_+2
cmp bx,0FFFh
jnz ccpdrv_end
ccpdrv_none:
mov ax,0FFFh
ccpdrv_end:
pop dx
pop cx
pop bx
pop si
pop di
pop es
pop bp
ret
getccpdrv_ endp
public getcurdrv_
getcurdrv_ proc near
push bp
mov bp,sp
push es
push di
push si
push bx
push cx
push dx
mov cx,19h
int 0E0h
pop dx
pop cx
pop bx
pop si
pop di
pop es
pop bp
ret
getcurdrv_ endp
public delay_
delay_ proc near
push bp
mov bp,sp
push es
push di
push si
push bx
push cx
push dx
mov cx,0Ch
int 0E0h
sub al,22H
jz delay_bios
mov bl, 3
mov al, byte ptr 4[bp]
mul bl
mov dx,ax
;mov dx, word ptr 4[bp]
mov cx,8Dh
int 0E0h
jmp delay_end
delay_bios:
mov ah, 00h
int 01Ah
add dx, word ptr 4[bp]
mov bx, dx
delay_lp:
int 01Ah
cmp dx, bx
jl delay_lp
delay_end:
pop dx
pop cx
pop bx
pop si
pop di
pop es
pop bp
xor ax,ax
ret
delay_ endp
public bdosx_
bdosx_ proc near
push bp
mov bp,sp
push es
push di
push si
push bx
push cx
mov cx,word ptr 4[bp]
mov dx,word ptr 6[bp]
int 0E0h
mov cx,bx
mov bx,word ptr 10[bp]
mov word ptr [bx],cx
mov cx,es
mov bx,word ptr 8[bp]
mov word ptr [bx],cx
pop cx
pop bx
pop si
pop di
pop es
pop bp
and ax,255
ret
bdosx_ endp
public ostype_
ostype_ proc near
push bp
mov bp,sp
push ds
push es
push di
push si
push bx
push cx
mov cx,0Ch
int 0E0h
mov al,ah
xor ah,ah
cmp al,0
jnz ostypeend
mov al,10h
ostypeend:
pop cx
pop bx
pop si
pop di
pop es
pop ds
pop bp
ret
ostype_ endp
public osver_
osver_ proc near
push bp
mov bp,sp
push ds
push es
push di
push si
push bx
push cx
mov cx,0Ch
int 0E0h
xor ah,ah
pop cx
pop bx
pop si
pop di
pop es
pop ds
pop bp
ret
osver_ endp
public bioskey_
bioskey_ proc near
push bp
mov bp,sp
push ds
mov ah, 0
int 16h
pop ds
pop bp
ret
bioskey_ endp
public pckey_
pckey_ proc near
push bp
mov bp,sp
push ds
push bx
cli
xor ax,ax
in al, 60h
in al, 60h
push ax
in al, 61h
mov bl, al
or al, 80h
out 61h, al
mov al, bl
out 61h, al
mov al, 20h
out 20h,al
pop ax
sti
pop bx
pop ds
pop bp
ret
pckey_ endp
public xstatline_
xstatline_ proc near
push bp
mov bp,sp
push es
push ds
push si
push ax
push bx
push cx
mov cl,0Ch
int 0E0h
push ax
mov cl,9Ah
int 0E0h
mov cx, word ptr 4[bp]
xor ch,ch
pop ax
cmp ax, 1041h
jz xst_dosplus
cmp ax, 1432h
jb xst_exit
mov si, word ptr [68h] ;[4Eh] for Dos Plus
jmp xst_call
xst_dosplus:
mov si, word ptr [4Eh]
xst_call:
mov dx,0
push es
mov es, 10h[si]
pop ds
mov ax,20H
call dword ptr[28h]
xst_exit:
pop cx
pop bx
pop ax
pop si
pop ds
pop es
pop bp
ret
xstatline_ endp
codeseg ends
end