summaryrefslogtreecommitdiff
path: root/v4.0/src/BIOS/MSBIO1.ASM
blob: 36dac912551b9f9570c2901bb640a6788cbd169a (plain) (blame)
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
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
	PAGE	,132			;
	TITLE	MSBIO1.asm - BIOS
;==============================================================================
;REVISION HISTORY:
;AN000 - New for DOS Version 4.00 - J.K.
;AC000 - Changed for DOS Version 4.00 - J.K.
;AN00x - PTM number for DOS Version 4.00 - J.K.
;==============================================================================
COMMENT *
THE LINK STEP IS PERFORMED BY USING THE FOLLOWING "NEW.ARF" FILE:
msbio1+
msSTACK+
MsCON+
msAUX+
msLPT+
msCLOCK+
msdISK+
msBIO2+
C:\BIO2\OLDOBJ\disk+
C:\BIO2\OLDOBJ\msinit+
C:\BIO2\OLDOBJ\sysinit1+
C:\BIO2\OLDOBJ\sysinit2+
C:\BIO2\OLDOBJ\sysimes,msbio,/M;

THE FOLLOWING IS A BATCH FILE THAT CAN BE USED TO CREATE THE IBMBIO.COM
WHERE "LOCSCR" IS A FILE THAT JUST HAS THE NUMBER, 70:

link @NEW.ARF
exe2bin ibmbio ibmbio.com <C:\BIO2\Locscr
del ibmbio.exe
(END OF COMMENT)*

;***For testing purposes, set the TEST flag to 1. Otherwise reset it.

iTEST=0

PATHGEN =	1

.SALL
	%OUT	...MSBIO1.ASM

; THIS IS A DOSMAC MACRO WHICH IS USED IN DEVSYM WHICH IS INCLUDED LATER
BREAK	MACRO	SUBTITLE
	SUBTTL	SUBTITLE
	PAGE
	ENDM

POPFF	MACRO
	JMP	$+3
	IRET
	PUSH	CS
	CALL	$-2
	ENDM

	INCLUDE MSGROUP.INC	;DEFINE CODE SEGMENT

SYSINITSEG SEGMENT PUBLIC 'SYSTEM_INIT'
SYSINITSEG ENDS


	INCLUDE JUMPMAC.INC
PATHSTART MACRO INDEX,ABBR
	IFDEF	PATHGEN
	    PUBLIC  ABBR&INDEX&S,ABBR&INDEX&E
	    ABBR&INDEX&S LABEL	 BYTE
	ENDIF
	ENDM

PATHEND MACRO	INDEX,ABBR
	IFDEF	PATHGEN
	    ABBR&INDEX&E LABEL	 BYTE
	ENDIF
	ENDM

	INCLUDE PUSHPOP.INC
	INCLUDE DEVSYM.INC		;MJB001

;   REV 2.1	5/1/83 ARR ADDED TIMER INT HANDLER AND CHANGED ORDER OF AUX
;		    PRN INIT FOR HAL0
;
;   REV 2.15	7/13/83 ARR BECAUSE IBM IS FUNDAMENTALY BRAIN DAMAGED, AND
;		    BASCOM IS RUDE ABOUT THE 1CH TIMER INTERRUPT, THE TIMER
;		    HANDLER HAS TO GO BACK OUT!!!!!  IBM SEEMS UNWILLING TO
;		    BELIEVE THE PROBLEM IS WITH THE BASCOM RUNTIME, NOT THE
;		    DOS.  THEY HAVE EVEN BEEN GIVEN A PATCH FOR BASCOM!!!!!
;		    THE CORRECT CODE IS COMMENTED OUT AND HAS AN ARR 2.15
;		    ANNOTATION.  THIS MEANS THE BIOS WILL GO BACK TO THE
;		    MULTIPLE ROLL OVER BUG.
;   REV 2.20	8/5/83 ARR IBM MAKES HARDWARE CHANGE.  NOW WANTS TO USE HALF
;		    HIGHT DRIVES FOR HAL0, AND BACK FIT FOR PC/PC XT.  PROBLEM
;		    WITH HEAD SETTLE TIME.  PREVIOUS DRIVES GOT BY ON A 0
;		    SETTLE TIME, 1/2 HIGHT DRIVES NEED 15 HEAD SETTLE WHEN
;		    DOING WRITES (0 OK ON READ) IF THE HEAD IS BEING STEPPED.
;		    THIS REQUIRES A LAST TRACK VALUE TO BE KEPT SO THAT BIOS
;		    KNOWS WHEN HEAD IS BEING MOVED.  TO HELP OUT STUPID
;		    PROGRAMS THAT ISSUE INT 13H DIRECTLY, THE HEAD SETTLE WILL
;		    NORMALLY BE SET TO 15.  IT WILL BE CHANGED TO 0 ON READS,
;		    OR ON WRITES WHICH DO NOT REQUIRE HEAD STEP.
;   REV 2.21	8/11/83 MZ IBM WANTS WRITE WITH VERIFY TO USE HEAD SETTLE 0.
;		    USE SAME TRICK AS ABOVE.
;   REV 2.25	6/20/83 MJB001 ADDED SUPPORT FOR 96TPI AND SALMON
;   REV 2.30	6/27/83 MJB002 ADDED REAL-TIME CLOCK
;   REV 2.40	7/8/83 MJB003 ADDED VOLUME-ID CHECKING AND INT 2F MACRO
;		    DEFINITIONS PUSH* AND POP*
;   REV 2.41	7/12/83 ARR MORE 2.X ENHANCEMENTS.  OPEN/CLOSE MEDIA CHANGE
;   REV 2.42	11/3/83 ARR MORE 2.X ENHANCEMENTS.  DISK OPEN/CLOSE, FORMAT
;		    CODE AND OTHER MISC HOOKED OUT TO SHRINK BIOS.  CODE FOR
;		    DISK OPEN/CLOSE, FORMAT INCLUDED ONLY WITH 96TPI DISKS.
;   REV   2.43	12/6/83 MZ EXAMINE BOOT SECTORS ON HARD DISKS FOR 16-BIT FAT
;		    CHECK.  EXAMINE LARGE FAT BIT IN BPB FOR WALK OF MEDIA FOR
;		    DOS
;   REV   2.44	12/9/83 ARR CHANGE TO ERROR REPORTING ON INT 17H
;   REV   2.45	12/22/83 MZ MAKE HEAD SETTLE CHANGE ONLY WHEN DISK PARM IS 0.

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;
;	IBM ADDRESSES FOR I/O
;
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

	INCLUDE MSDSKPR.INC

LF	=	10			;LINE FEED
CR	=	13			;CARRIAGE RETURN
BACKSP	=	8			;BACKSPACE
BRKADR	=	1BH * 4 		;006C  1BH BREAK VECTOR ADDRESS
TIMADR	=	1CH * 4 		;0070  1CH TIMER INTERRUPT
DSKADR	=	1EH * 4 		;ADDRESS OF PTR TO DISK PARAMETERS
SEC9	=	522H			;ADDRESS OF DISK PARAMETERS
HEADSETTLE =	SEC9+9			; ARR 2.20 ADDRESS OF HEAD SETTLE TIME
NORMSETTLE =	15			; ARR 2.20 NORMAL HEAD SETTLE
SPEEDSETTLE =	0			; ARR 2.20 SPEED UP SETTLE TIME
INITSPOT =	534H			; ARR IBM WANTS 4 ZEROS HERE
AKPORT	=	20H
EOI	=	20H

	ASSUME	CS:CODE,DS:NOTHING,ES:NOTHING

	EXTRN	MEDIA$CHK:NEAR
	EXTRN	GET$BPB:NEAR
	EXTRN	DSK$INIT:NEAR
	EXTRN	DSK$READ:NEAR
	EXTRN	DSK$WRIT:NEAR
	EXTRN	DSK$WRITV:NEAR
	EXTRN	DSK$OPEN:NEAR
	EXTRN	DSK$CLOSE:NEAR
	EXTRN	DSK$REM:NEAR
	EXTRN	GENERIC$IOCTL:NEAR
	EXTRN	IOCTL$GETOWN:NEAR
	EXTRN	IOCTL$SETOWN:NEAR
	EXTRN	CON$READ:NEAR
	EXTRN	CON$RDND:NEAR
	EXTRN	CON$FLSH:NEAR
	EXTRN	CON$WRIT:NEAR
;	EXTRN	CON$GENIOCTL:NEAR		;J.K. 4/29/86
	EXTRN	AUX$READ:NEAR
	EXTRN	AUX$WRIT:NEAR
	EXTRN	AUX$FLSH:NEAR
	EXTRN	AUX$RDND:NEAR
	EXTRN	AUX$WRST:NEAR
	EXTRN	TIM$READ:NEAR
	EXTRN	TIM$WRIT:NEAR
	EXTRN	PRN$WRIT:NEAR
	EXTRN	PRN$STAT:NEAR
	EXTRN	PRN$TILBUSY:NEAR
	EXTRN	PRN$GENIOCTL:NEAR
	EXTRN	WRMSG:NEAR

;DATA AREAS
	extrn	Start_Sec_H:word	;AN000; Starting sector high word for
					;disk I/O request. IBMDISK.ASM

	INCLUDE MSBDATA.INC

	IF	iTEST
	    PUBLIC  MSGNUM
MSGNUM:
	    PUSHF
	    TEST    FTESTBITS,AX
	    JZ	    MRET
	    PUSH    SI
	    PUSH    BX
	    PUSH    CX
	    PUSH    ES
	    PUSH    DI
	    MOV     DI,OFFSET NUMBUF
	    PUSH    CS
	    POP     ES
	    MOV     CX,4
NUMLOOP:
	    PUSH    CX
	    MOV     CL,4
	    ROL     BX,CL
	    POP     CX
	    PUSH    BX
	    AND     BX,0FH
	    MOV     AL,DIGITS[BX]
	    STOSB
	    POP     BX
	    LOOP    NUMLOOP
	    POP     DI
	    POP     ES
	    POP     CX
	    POP     BX
	    MOV     SI,OFFSET NUMBUF
	    CALL    MSGOUT
	    POP     SI
	    POPF
	    RET

	    PUBLIC  MSGOUT
MSGOUT:
	    PUSHF
	    TEST    FTESTBITS,AX
	    JZ	    MRET
	    PUSH    DS
	    PUSH    AX
	    PUSH    BX
	    PUSH    CS
	    POP     DS
	    CALL    WRMSG
	    POP     BX
	    POP     AX
	    POP     DS
MRET:
	    POPF
	    RET

	    PUBLIC DUMPBYTES		;J.K. 4/9/86
;Dumpbytes will dump the bytes in memory in hex.  Space will be put in between
;the bytes and CR, LF will be put at the end. - J.K.
;Input: DS:SI -> buffer to dump in Hex.
;	CX -> # of bytes (Length of the buffer)
;
DUMPBYTES proc near
	pushf
	push	ax
dumploops:
	lodsb
	mov	ah, al
	shr	ah, 1
	shr	ah, 1
	shr	ah, 1
	shr	ah, 1
	call	hex_to_ascii
	push	ax
	mov	al, ah
	call	outchar
	pop	ax
	call	outchar
	mov	al, ' '
	call	outchar
	loop	dumploops

	mov	al, 0dh
	call	outchar
	mov	al, 0ah
	call	outchar

	pop	ax
	popf
	ret
DUMPBYTES	endp

	PUBLIC	Hex_to_ascii
Hex_to_ascii	proc	near		;J.K. - 4/9/86
	and	ax, 0f0fh
	add	ah, 30h
	cmp	ah, 3ah
	jb	hta_$1
	add	ah, 7
hta_$1:
	add	al, 30h
	cmp	al, 3ah
	jb	hta_$2
	add	al, 7
hta_$2:
	ret
Hex_to_ascii	endp

	PUBLIC	outchar
Outchar proc	near
	PUSH	AX
	PUSH	SI
	PUSH	DI
	PUSH	BP
	PUSH	BX
;SB33002*******************************************************
	MOV	AH, 0Eh 		;SET COMMAND TO WRITE A CHAR   ;SB;3.30*
	MOV	BX, 7			;SET FOREGROUND COLOR	       ;SB;3.30*
	INT	10h			;CALL ROM-BIOS		       ;SB;3.30*
;SB33002*******************************************************
	POP	BX
	POP	BP
	POP	DI
	POP	SI
	POP	AX
	RET
Outchar endp

	ENDIF
	INCLUDE MSMACRO.INC

;---------------------------------------------------
;
;	DEVICE ENTRY POINT
;
CMDLEN	=	0			;LENGTH OF THIS COMMAND
UNIT	=	1			;SUB UNIT SPECIFIER
CMD	=	2			;COMMAND CODE
STATUS	=	3			;STATUS
MEDIA	=	13			;MEDIA DESCRIPTOR
TRANS	=	14			;TRANSFER ADDRESS
COUNT	=	18			;COUNT OF BLOCKS OR CHARACTERS
START	=	20			;FIRST BLOCK TO TRANSFER
EXTRA	=	22			;USUALLY A POINTER TO VOL ID FOR ERROR 15
START_L =	26			;AN000; Extended start sector (Low)
START_H =	28			;AN000; Extended start sector (High)

	PUBLIC	STRATEGY
STRATEGY PROC	FAR
	MOV	WORD PTR CS:[PTRSAV],BX
	MOV	WORD PTR CS:[PTRSAV+2],ES
	RET
STRATEGY ENDP

	PUBLIC CON$IN
CON$IN	PROC	FAR
	PUSH	SI
	MOV	SI,OFFSET CONTBL
	JMP	SHORT ENTRY
CON$IN	ENDP

	PUBLIC	AUX0$IN
AUX0$IN PROC	FAR
	PUSH	SI
	PUSH	AX
	XOR	AL,AL
	JMP	SHORT AUXENT
AUX0$IN ENDP

	PUBLIC AUX1$IN
AUX1$IN PROC	FAR
	PUSH	SI
	PUSH	AX
	MOV	AL,1
	JMP	short AUXENT		;J.K. 4/15/86
AUX1$IN ENDP

;SB33102****************************************************************
;SB  Add code to handle two more COM Ports
;boban

	PUBLIC  AUX2$IN
AUX2$IN proc far
	push	si
	push	ax
	mov	al,2
	jmp	short AUXENT
AUX2$IN endp

	PUBLIC  AUX3$IN
AUX3$IN proc far
	push	si
	push	ax
	mov	al,3
	jmp	short AUXENT

;SB33102****************************************************************

AUXENT:
	MOV	SI,OFFSET AUXTBL
	JMP	SHORT ENTRY1
AUX3$IN ENDP

PRN0$IN PROC	FAR
	PUBLIC	PRN0$IN

	PUSH	SI
	PUSH	AX
	XOR	AX,AX
	JMP	SHORT PRNENT
PRN0$IN ENDP

	PUBLIC	PRN1$IN
PRN1$IN PROC	FAR
	PUSH	SI
	PUSH	AX
	XOR	AL,AL
	MOV	AH,1
	JMP	SHORT PRNENT
PRN1$IN ENDP

	PUBLIC PRN2$IN
PRN2$IN PROC	FAR
	PUSH	SI
	PUSH	AX
	MOV	AL,1
	MOV	AH,2
	JMP	SHORT PRNENT
PRN2$IN ENDP

	PUBLIC PRN3$IN
PRN3$IN PROC	FAR
	PUSH	SI
	PUSH	AX
	MOV	AL,2
	MOV	AH,3
PRNENT:
	MOV	SI,OFFSET PRNTBL
	MOV	CS:[PRINTDEV],AH	;SAVE INDEX INTO ARRAY OF RETRY COUNTS
	JMP	SHORT ENTRY1
PRN3$IN ENDP

	PUBLIC	TIM$IN
TIM$IN	PROC	FAR
	PUSH	SI
	MOV	SI,OFFSET TIMTBL
	JMP	SHORT ENTRY
TIM$IN	ENDP

	PUBLIC	DSK$IN
DSK$IN	PROC	FAR
	PUSH	SI
	MOV	SI,OFFSET DSKTBL

ENTRY:
	PUSH	AX
ENTRY1:
	PUSH	CX
	PUSH	DX
	PUSH	DI
	PUSH	BP
	PUSH	DS
	PUSH	ES
	PUSH	BX

	MOV	CS:[AUXNUM],AL		;SAVE CHOICE OF AUX/PRN DEVICE

	LDS	BX,CS:[PTRSAV]		;GET POINTER TO I/O PACKET
	ASSUME	DS:NOTHING

	MOV	AL,BYTE PTR DS:[BX].UNIT ;AL = UNIT CODE
	MOV	AH,BYTE PTR DS:[BX].MEDIA ;AH = MEDIA DESCRIP
	MOV	CX,WORD PTR DS:[BX].COUNT ;CX = COUNT
	MOV	DX,WORD PTR DS:[BX].START ;DX = START SECTOR

;SB34MSB100*********************************************************************
;SB
;SB	The disk device driver can now handle 32 bit start sector number.
;SB	So we should check to see if a 32 bit sector number has been specified
;SB	and if so get it. Whether a 32 bit sector has been specified or not
;SB	the disk driver expects a 32 bit sector number with the high word
;SB	in cs:Start_Sec_H and the low word in dx.
;SB
;SB	Algorithm:
;SB		1. Check to see if the request is for the disk driver by 
;SB		   checking to see if SI points to DSKTBL.
;SB
;SB		2. If request not for the disk nothing special needs to be done.
;SB	
;SB		3. If request for the disk then check to see if a 32 bit 
;SB		   sector number has been specified by seeing whether the
;SB		   the conventional sector number specified is -1.  If so
;SB		   we need to pick the 32 bit sector number from the new
;SB		   fields in the request packet.  See the request header
;SB		   struc for the fields you need.  If the conventional
;SB		   sector field is not -1 then a 16 bit sector number
;SB		   has been specified and we just need to initalise the
;SB		   high word in cs:Start_Sec_H to 0
;SB	
;SB NOTE: START_L and START_H are the offsets withing the IO_REQUEST packet
;SB	  which contain the low and hi words of the 32 bit start sector if
;SB	  it has been used.
;SB	
;SB NOTE:Remember not to destroy the registers which have been set up before

	CMP	SI,OFFSET DSKTBL
	JNZ	DSK_REQ_CONT		; Not Disk Req
	CMP	DX,-1
	JNZ	DSK_REQ_16
	MOV	DX,DS:[BX].START_H	; 32 bits DSK REQ
	MOV	CS:START_SEC_H,DX	; CS:Start_sec_H = Packet.Start_H
	MOV	DX,DS:[BX].START_L	; DX             = Packet.Start_L
	JMP	SHORT DSK_REQ_CONT
DSK_REQ_16:
	MOV	CS:START_SEC_H,0
DSK_REQ_CONT:

;SB34MSB100*********************************************************************

	XCHG	DI,AX
	MOV	AL,BYTE PTR DS:[BX].CMD
	CMP	AL,CS:[SI]		;ARR 2.41
	JA	CMDERR

	CBW				; NOTE THAT AL <= 15 MEANS OK
	SHL	AX,1

	ADD	SI,AX
	XCHG	AX,DI

	LES	DI,DWORD PTR DS:[BX].TRANS

	PUSH	CS
	POP	DS

	ASSUME	DS:CODE

	CLD
	JMP	WORD PTR [SI+1] 	;GO DO COMMAND
DSK$IN	ENDP
	PAGE
;=====================================================
;=
;=	SUBROUTINES SHARED BY MULTIPLE DEVICES
;=
;=====================================================
;----------------------------------------------------------
;
;	EXIT - ALL ROUTINES RETURN THROUGH THIS PATH
;
	PUBLIC	BUS$EXIT
BUS$EXIT PROC	FAR
	ASSUME	DS:NOTHING
	MOV	AH,00000011B
	JMP	SHORT ERR1

	PUBLIC	CMDERR
CMDERR:
	MOV	AL,3			;UNKNOWN COMMAND ERROR

	PUBLIC	ERR$CNT
ERR$CNT:
	LDS	BX,CS:[PTRSAV]
	ASSUME	DS:NOTHING
	SUB	WORD PTR [BX].COUNT,CX	;# OF SUCCESSFUL I/O'S

	PUBLIC	ERR$EXIT
ERR$EXIT:
	MOV	AH,10000001B		;MARK ERROR RETURN
	JMP	SHORT ERR1
BUS$EXIT ENDP

EXITP	PROC	FAR
	ASSUME	DS:CODE      ; WE ARE NOT SURE THIS IS CORRECT 3/18/86
EXIT$ZER:
	LDS	BX,[PTRSAV]
	ASSUME	DS:NOTHING
	XOR	AX,AX
	MOV	WORD PTR [BX].COUNT,AX	;INDICATE NO CHARS READ

	PUBLIC	EXIT
EXIT:
	ASSUME	DS:NOTHING
	MOV	AH,00000001B
ERR1:
	ASSUME	DS:NOTHING
	LDS	BX,CS:[PTRSAV]
	MOV	WORD PTR [BX].STATUS,AX ;MARK OPERATION COMPLETE

	POP	BX
	POP	ES
	POP	DS
	POP	BP
	POP	DI
	POP	DX
	POP	CX
	POP	AX
	POP	SI
	RET				;RESTORE REGS AND RETURN
EXITP	ENDP

;-------------------------------------------------------------
;
;	CHROUT - WRITE OUT CHAR IN AL USING CURRENT ATTRIBUTE
;
;	CALLED VIA INT 29H
;
	PUBLIC	CHROUT
CHROUT	=	29H

	PUBLIC	OUTCHR
OUTCHR	PROC	FAR
	PUSH	AX
	PUSH	SI
	PUSH	DI
	PUSH	BP
;SB33002a*******************************************************
	push	bx			;			      ;SB ;3.30
	mov	AH, 0Eh 		; set command to write a character;SB;3.30
	mov	BX, 7			; set foreground color	      ;SB ;3.30
	int	10h			; call rom-bios 	      ;SB ;3.30
	pop	bx			;			      ;SB ;3.30
;SB33002a*******************************************************
	POP	BP
	POP	DI
	POP	SI
	POP	AX
	IRET
OUTCHR	ENDP
;----------------------------------------------
;
;	SET DX TO AUXNUM
;
	PUBLIC GETDX
GETDX	PROC	NEAR
	MOV	DX,WORD PTR CS:[AUXNUM]
	RET
GETDX	ENDP
	PAGE
;************************************************** ARR 2.15

;-----------------------------------------------
;
;	TIMER INTERRUPT HANDLER
;
;TIMER_LOW	 DW	 0
;TIMER_HIGH	 DW	 0
;
;TIMER:
;	 STI
;	 PUSH	 AX
;	 PUSH	 CX
;	 PUSH	 DX
;	 PUSH	 DS
;	 PUSH	 CS
;	 POP	 DS
;	 XOR	 AX,AX
;	 INT	 1AH			 ; GET ROM TIME AND ZAP ROLL OVER
;	 MOV	 [TIMER_HIGH],CX
;	 MOV	 [TIMER_LOW],DX
;	 OR	 AL,AL
;	 JZ	 T5
;	 INC	 WORD PTR [DAYCNT]		  ; ONE DAY GONE BY
;T5:
;	 POP	 DS
;	 POP	 DX
;	 POP	 CX
;	 POP	 AX
;	 IRET
;************************************************** ARR 2.15
CODE	ENDS
	END