SAC.DYESGPF@E.ISI.EDU (05/30/88)
The following information applies to MSDOS 3.10 with IO.SYS 3.00 for the Z100.
While there are some gaps in the information presented below, the entire ipage
is covered. I leave it to others to follow-up on the functions which are
accessed but not elucidated below.
Until I read the question about bios interrupts for the Z100, I had considered
them part of the (I)nferior (B)ut (M)arketable world and had never even looked
in the ipage (0000:0000 to 0000:0400) for anything pointing into bios on the
HZ100. I see now that there appears to be some functionality to interrupts
40h, 42h, 44h, 45h, 46h and 58h. Also, there is code space reserved in the
form of bios CALLs to multiple NOPs followed by RETs to IRETs for interrupts
50 thru 57h, 5Ah and 5Bh; I seem to remember reading something about these
pertaining to either planned expansion to multi-tasking OR multi-user OR
networking OR something. These may be nothing more than delays since the
current bios does execute some of them now (51h, 54h and 55h for sure).
I have not decoded the functioning interrupts as I have been using the bios
jump table which begins at 0040:0000 for bios service when needed. This is
probably faster than using any interrupts and one can always PUSHF if you need
the precall flags back.
Ray Duncan's book 'ADVANCED MSDOS' does an excellent job of explaining the use
of interrupts 20h thru 27h for generic MSDOS as well as a chapter dedicated to
interrupts 10h, 13h, 14h, 16h and 17h used for bios access in some machines.
There is also a chapter dedicated to (E)xpanded (M)emory (S)pecifications
(INT 67h) as used on 80286 and 80386 machines. BTW, Intel reserved interrupts
0 thru 1Fh for harware use. For some reason however, IBM chose to ignore this
when they had their IO.SYS written. Also, MicroSoft ignored this when they
decided to use INT 5 for 'print screen'. This can be a problem if a print
screen is requested while a 80286 is doing EMS service. INT 5 is a BOUND range
error to a 286 in "286" mode.
Along the same lines, it should be noted that MicroSoft has requested that
interrupts 20h thru 3Fh be reserved for MSDOS only. Any modification/chaining
in this area should only use ints 21h thru 24h (okay you can use 20h if you
really want to, but shouldn't). USE THE FUNCTIONS AVAILABLE IN INT 21H to
modifiy/chain to any of these.
The WILD INTERRUPTs indicated below actually access an interrupt handler in
bios. This prints the words "WILD INTERRUPT" on STNDOUT and then return
control to the caller with an IRET. If the software doesn't like what it
gets back there can be problems. Interrupts which will cause the system to
crash are so labelled.
HZ100 Interrupts
----- ----------
INT Remarks
--- -------
0 Reserved by Intel - Used for divide by zero error.
1 - 4 Reserved by Intel - WILD INTERRUPT
5 Print screen if PSC resident, otherwise IRET (reserved by Intel but
this was ignored by MicroSoft).
6 - 1FH Reserved - WILD INTERRUPT (10H, 13H, 14H 16H, 17H used for bios
by them other guys, contrary to Intel's recommendations.)
20H Program terminate (obsolete)
21H Function dispatcher
22H Terminate vector |(Pointers only - not executed)
23H Ctrl-C vector | /
24H Critical error vector | /
25H Absolute disk read
26H Absolute disk write
27H TSR (obsolete)
28H Reserved for MSDOS - Points to an IRET
29H " " " - Bios (0040:0B32), call to MTR100 smart display
output (FE01:0019).
2A - 2DH " " " - Points to an IRETs
2EH " " " - Points to a Data area CRASH/LOCKUP
2FH " " " - Print spooler (Activated/used by PRINT.EXE)
30H " " " - Points non-interrupt code (RET, no IRET) CRASH
31H " " " - Points to a data area CRASH/LOCKUP
32 - 3FH " " " - Points to an IRET.
40H Bios address 0040:00b4, entry at this point makes a call to a data
area. (Disk bios in most inferior machines) CRASH/LOCKUP
41H WILD INTERRUPT
42H Bios 0040:0CCC Valid interrupt code, function not evaluated
43H WILD INTERRUPT
44H Bios 0040:1ED7 Valid interrupt code, function not evaluated
45H " 0040:1F3F " /
46H " 0040:1D62 "/
47 - 4FH WILD INTERRUPT
50H Bios 0040:2717 --------------------------------------------------
51H " 0040:0d8d | These all point to CALLs to subroutines which
52H " 0040:271f | contain varrying number of NOPs followed by a
53H " 0040:2727 | RET instruction.
54H " 0040:272f | /
55H " 0040:271b | /
56H " 0040:2723 | /
57H " 0040:272b ---------------------------------------------------
58H " 0040:02bc Returns a value from a memory address and sets that
variable to 0. Purpose of variable not evaluated.
59H WILD INTERRUPT
5AH Bios 0040:2738 | CALLs to NOPs followed by RETs again
5BH " 0040:2733 | "
5C - F0H WILD INTERRUPT (Int 67H is used by others for EMS management.)
F1 - FEH No valid addresses intialized CRASH/LOCKUP
FFH WARM BOOT - very useful for installation programs which modify
CONFIG.SYS and need the new configuration to run.
For those who may not have the bios jump information available, I am attaching
a file (TEMPLATE.ASM) that I constructed for assembling .COM programs which use
far calls to bios. I read this file into the source file and edit out those
items which are not needed. Any one program may use only 1/4 or less of this
code but I would rather delete unneeded code than look-up and type-in the code
each time.
Al Holecek | Probability factor of one to one...we have normality.
<SAC.DYESGPF@E.ISI.EDU> | Anything you still can't cope with is therefore your
| own problem.
--------------------------------- CUT HERE -------------------------------
PAGE 62,132
TITLE -
;** Constant values used in program
FALSE EQU 0
TRUE EQU NOT FALSE
INPUT_BUFFER EQU 80H ; Command Line Address
VID_PORT EQU 0D8H ; Vid control port for Z100
VID_GREEN EQU 0E000H ; Green plane for Z100
VID_RED EQU 0D000H ; Red plane for Z100
VID_BLUE EQU 0C000H ; Blue plane for Z100
;** Definitions for BIOS
LORGADDR = 400H ; Loader org address
;** BIOS entry points
BIOS_SEG SEGMENT AT 40H ; Where the BIOS is located
ORG 3
BIOS_STATUS LABEL FAR ; Console input status
ORG 6
BIOS_CONIN LABEL FAR ; Console input
ORG 9
BIOS_CONOUT LABEL FAR ; Console output
ORG 0CH
BIOS_PRINT LABEL FAR ; Printer output
ORG 0FH
BIOS_AUXIN LABEL FAR ; Aux input
ORG 12H
BIOS_AUXOUT LABEL FAR ; Aux output
ORG 15H
BIOS_READ LABEL FAR ; Disk input
ORG 18H
BIOS_WRITE LABEL FAR ; Disk output
ORG 1BH
BIOS_DSKCHG LABEL FAR ; Disk change status
ORG 1EH
BIOS_SETDATE LABEL FAR ; Set current date
ORG 21H ; Days since 1/1/80
BIOS_SETTIME LABEL FAR ; Set current time
ORG 24H
BIOS_GETDATE LABEL FAR ; Get current date (and time)
ORG 27H ; Days since 1/1/80
BIOS_FLUSH LABEL FAR ; Flush keyboard buffer
ORG 2AH
BIOS_MAPDEV LABEL FAR ; Device mapping
; 2DH to 45H reserved by MicroSoft
ORG 48H
BIOS_DSKFUNC LABEL FAR ; Arbitrary disk function
ORG 4BH
BIOS_PRNFUNC LABEL FAR ; PRN: function
ORG 4EH
BIOS_AUXFUNC LABEL FAR ; AUX: function (modem)
ORG 51H
BIOS_CONFUNC LABEL FAR ; CON: function
; 54H to 60H reserved by ZDS
ORG 61H
BIOS_CTADDR LABEL WORD ; Addr of configuration information
ORG 63H ; WORD PTR [0040:0061]+0=disk vector
BIOS_SEG ENDS ; +2=PRN: configuration table
; +4=AUX: configuration table
; +6=CON: configuration table
; +8=Font information
; DWORD PTR [CONFG_FONT]
; +0=PTR to RAM font table
; +4=PTR to ROM font table
; +8=Size of font table in ROM
; +0AH=Space for table in RAM
; +0AH=Addr of date and time fields
; DWORD PTR [CONFG_CLOCK]
; +0=Days since Jan 1, 1980
; +2=Hours since midnight
; +3=Minutes
; +4=Seconds
; +5=Hundreds of second (WORD)
; +0CH=Addr of DOS disk tables
; +0EH=Addr of value for map
; control latch
; +10H=Length of configuration
; vector
CODE SEGMENT BYTE PUBLIC 'CODE'
ASSUME CS:CODE,DS:CODE,ES:CODE,SS:CODE
ORG 100H
;** Entry point
BEGIN:
JMP START0
START0:
CODE ENDS
END BEGIN
marria@polya.Stanford.EDU (Michael R. Marria) (06/04/88)
In article <[E.ISI.EDU]29-May-88.18:53:10.SAC.DYESGPF> SAC.DYESGPF@E.ISI.EDU writes: >The following information applies to MSDOS 3.10 with IO.SYS 3.00 for the Z100. >While there are some gaps in the information presented below, the entire ipage >is covered. I leave it to others to follow-up on the functions which are >accessed but not elucidated below. Many thanks! This is the sort of thing to brighten my day. Michael