68X2537_XT286_Technical_Reference_Aug86 68X2537 XT286 Technical Reference Aug86
User Manual: 68X2537_XT286_Technical_Reference_Aug86
Open the PDF directly: View PDF
.
Page Count: 491
| Download | |
| Open PDF In Browser | View PDF |
---- -- -
- ----------,-
-
Personal Computer
Hardware Reference
Library
Technical
Reference
First Edition (August 1986)
The following paragraph does not apply to the United Kingdom or any country
where such provisions are inconsistent with local law: INTERNATIONAL
BUSINESS MAClllNES CORPORATION PROVIDES THIS PUBLICATION
"AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR
IMPLIED, INCLUDING, BUT NOT LIMII'ED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A
PARTICULAR PURPOSE. Some states do not allow disclaimer of express or
implied warranties in certain transactions, therefore, this statement may not
apply to you.
This publication could include technical inaccuracies or typographical errors.
Changes are periodically made to the information herein; these changes will be
incorporated in new editions of the publication. IBM may make improvements
and/or changes in the product(s) and/or the program(s) described in this
publication at any time.
It is possible that this publication may contain reference to, or information
about, IBM products (machines and programs), programming, or services that
are not announced in your country. Such references or information must not be
construed to mean that IBM intends to announce such mM products,
programming, or services in your country.
Requests for copies of this publication and for technical information about IBM
Personal Computer products should be made to your authorized IBM Personal
Computer dealer or your IBM Marketing Representative.
© Copyright International Business Machines Corporation 1986
The following statement applies to all mM Personal Computer products unless otherwise
indicated by the information referring to that product.
FEDERAL COMMUNICATIONS COMMISSION RADIO
FREQUENCYENTERFERENCESTATEMENT
Warning: This equipment has been certified to comply with the
limits for a Class B computing device, pursuant to Subpart J of
Part 15 of FCC rules. Only peripherals (computer input/output
devices, terminals, printers, etc.) certified to comply with the
Class B limits may be attached to this computer when this
computer is operated in a residential environment. Operation
with noncertified peripherals is likely to result in interference to
radio and TV reception.
CAUTION
This product is equipped with a 3-wire power cord and plug for the
user's safety. Use this power cord in conjunction with a properly
grounded electrical outlet to avoid electrical shock.
iii
Notes:
iv
Preface
This manual describes the various units of the IBM Personal
Computer XT Model 286 and how they interact. It also has
information about the basic input/output system (BIOS) and
about programming support.
The information in this publication is for reference, and is
intended for hardware and program designers, programmers,
engineers, and anyone else who needs to understand the design
and operation of the IBM Personal Computer XT Model 286.
This manual consists of eight sections:
•
•
•
•
•
•
The first three sections describe the IBM Personal Computer
XT Model 286 including hardware, charts, and register
inforniation
Section 4 describes keyboard operation, the commands to and
from the system, and the various keyboard layouts.
Section 5 contains information about the usage of BIOS and a
system BIOS listing.
Section 6 contains instruction sets for the 80286
microprocessor and the 80287 math coprocessor.
Section 7 provides information about characters, keystrokes,
and colors.
Section 8 contains information about the compatibility of the
IBM Personal Computer XT Model 286 and the rest of the
IBM Personal Computer family.
A glossary, bibliography, and index are included.
v
Prerequisite Publications
Guide to Operations for the IBM Personal Computer XT Model
286
Suggested Reading
•
BASIC for the IBM Personal Computer
•
Disk Operating System (DOS)
•
Macro Assembler for the IBM Personal Computer
Additional Information
The Technical Directory lists all the service and technical
information that is available for the IBM Personal Computer
family of products. To receive a free copy of the Technical
Directory, call toll free 1-800-IBM-PCTB, Mop.day through
Friday,8:00a.m. to 8:00 p.m. EastemTime.
vi
Contents
SECTION 1. SYSTEM BOARD •••..•.•••••••••••••• 1-1
Memory ..................................... 1-4
Microprocessor ................................ 1-4
System Performance ............................ 1-7
System Memory Mapping ........................ 1-8
Direct Memory Access .......................... 1-9
System Interrupts ............................. 1-12
Hardware Interrupt Listing ................... 1-13
Interrupt Sharing ... . . . . . . . . . . . . . . . . . . . . . . .. 1-14
System Timers ............................... 1-22
System Clock ................................ 1-23
ROM Subsystem .............................. 1-23
RAM Subsystem .............................. 1-24
1/0 Channel ................................. 1-24
Connectors ............................... 1-25
I/O Channel Signal Description ............... 1-31
I/O Addresses ............................ 1-38
Other Circuits ................................ 1-43
Speaker .................................. 1-43
128K RAM Jumper (110) .................... 1-43
Display Switch ............................ 1-44
Keyboard Controller ........................ 1-44
Real-Time Clock CMOS RAM Information ...... 1-59
Specifications ................................ 1-72
System Unit .............................. 1-72
Connectors ............................... 1-74
Logic Diagrams ............................ 1-77
SECTION 2. COPROCESSOR ••...••••••.•.•••....
Description ...................................
Programming Interface ..........................
Hardware Interface .............................
2-1
2-3
2-3
2-4
SECTION 3. POWER SUPPLY ....•••••••.•.••••...
Inputs .......................................
Outputs ......................................
DC Output Protection ..........................
3-1
3-3
3-3
3-4
vii
Output Voltage Sequencing ......................
No-Load Operation ............................
Power-Good Signal .............................
Connectors ...................................
3-4
3-4
3-4
3-6
SECTION 4. KEYBOARD ......................... 4-1
Description ................................... 4-3
Power-On Routine .......................... 4-5
Commands from the System ................... 4-6
Commands to the System .................... 4-13
Keyboard Scan Codes ....................... 4-15
Clock and Data Signals ...................... 4-27
Keyboard Encoding and Usage ................ 4-30
Keyboard Layouts ......................... 4-40
Specifications ............................. 4-47
Logic Diagram ............................ 4-48
SECTION 5. SYSTEM BIOS .•.•.....•.••.••.•••... 5-1
System BIOS Usage ............................ 5-3
Quick Reference .............................. 5-14
SECTION 6. INSTRUCTION SET ••••..••.....•.•... 6-1
80286 Instruction Set ........................... 6-3
Data Transfer .............................. 6-3
Arithmetic .......... . . . . . . . . . . . . . . . . . . . . . .. 6-6
Logic ..................................... 6-9
String Manipulation ........................ 6-11
Control Transfer ........................... 6-13
Processor Control .......................... 6-17
Protection Control ......................... 6-18
80287 Coprocessor Instruction Set ................ 6-22
Data Transfer ............................. 6-22
Comparison .............................. 6-23
Constants ................................ 6-24
Arithmetic ................................ 6-25
Transcendental ............................ 6-26
SECTION 7. CHARACTERS, KEYSTROKES, AND
COLORS ...................................... 7-1
Character Codes ............................... 7-3
Quick Reference .............................. 7-14
viii
SECTION 8. mM PERSONAL COMPUTER
COMPATIBILITY ............................... 8-1
Hardware Considerations ........................ 8-3
System Board .............................. 8-3
Fixed Disk Drive ............................ 8-5
Diskette Drive Compatibility .................. 8-5
Copy Protection ............................ 8-5
Application Guidelines .......................... 8-7
High-Level Language Considerations ............ 8-7
Assembler Language Programming Considerations . 8-8
Multitasking Provisions ...................... 8-15
Machine-Sensitive Code ..................... 8-19
Glossary
...................................... . X-I
Bibliography ....................................
X-37
Index .........................................
X-39
ix
Notes:
/:
l',
x
INDEX TAB LISTING
Section 1: System Board ............................... .
Section 2: Coprocessor ................................ .
Section 3: Power Supply ............................... .
Section 4: Keyboard .................................. .
Section 5: System BIOS ............................... .
Section 6: Instruction Set
xi
Notes:
xii
Section 7: Characters, Keystrokes, and Colors .............. .
Section 8: Compatibility ............................... .
Glossary ........................................... .
Bibliography ........................................ .
Index .............................................. .
xiii
System Block Diagram
System Unit
Power Supply
115/230
System Board
80286-6
Microprocessor
80287
Coprocessor
Osc i llator
16 Interrupt
Levels
ROM
Speaker
Connector
Speaker
7 Channel
DMA
RAM
Keyboard
Controller
Keyboard
CMOS RAM
Rea I -Time
Clock
Battery
Connector
Battery
I/O
Channel
O~-' - - '--
r--
-DO
- -Adapters
xiv
I
Fixed
Disk
Drive
I
Diskette
Drives
I
Fixed Disk and
Diskette Adapter
I
SECTION 1. SYSTEM BOARD
Memory ..................................... 1-4
Microprocessor ................................ 1-4
Real Address Mode ...................... 1-4
Protected (Virtual Address) Mode ........... 1-5
System Performance ............................ 1-7
System Memory Mapping ........................ 1-8
Direct Memory Access .......................... 1-9
System Interrupts ............................. 1-12
Hardware Interrupt Listing ................... 1-13
Interrupt Sharing ..... . . . . . . . . . . . . . . . . . . . . .. 1-14
Design Overview .. . . . . . . . . . . . . . . . . . . . . .. 1-14
Program Support ........................ 1-15
Precautions ............................ 1-17
Examples ............................. 1-18
System Timers ............................... 1-22
System Clock ................................ 1-23
ROM Subsystem .............................. 1-23
RAM Subsystem .............................. 1-24
I/O Channel ................................. 1-24
Connectors ............................... 1-25
I/O Channel Signal Description ............... 1-31
1/a Addresses ............................ 1-38
NMI Controls .......................... 1-39
I/O Port (Read/Write) .................. 1-40
Diagnostic-Checkpoint Port ............... 1-42
Coprocessor Controls .................... 1-42
Other Circuits ................................ 1-43
Speaker .................................. 1-43
128K RAM Jumper (110) .................... 1-43
Display Switch ............................ 1-44
Keyboard Controller ........................ 1-44
Keyboard Controller Initialization .......... 1-45
Receiving Data from the Keyboard .......... 1-45
Scan Code Translation ................... 1-46
Sending Data to the Keyboard ............. 1-53
Keyboard Controller System Interface ....... 1-53
Status Register ......................... 1-54
System Board
1-1
Status-Register Bit Definition ..............
Output Buffer ..........................
Input Buffer ...........................
Commands (I/O Address Hex 64) ..........
I/O Ports .............................
Real-Time Clock CMOS RAM Information ......
Real-Time Clock Information ..............
CMOS RAM Configuration Information .....
I/O Operations .........................
Specifications ................................
System Unit ..............................
Connectors ...............................
Logic Diagrams ............................
1-2
System Board
1-54
1-56
1-56
1-56
1-58
1-59
1-60
1-63
1-70
1-72
1-72
1-74
1-77
The system board is approximately 22 by 33.8 centimeters (8.5
by 13.2 inches). It uses very large scale integration (VLSI)
technology and has the following components:
•
Intel 80286 Microprocessor
•
System support function:
Seven-Channel Direct Memory Access (DMA)
Sixteen-level interrupt
Three programmable timers
System clock
•
64K read-only memory (ROM) subsystem, expandable to
128K.
•
A 640K (may be set to 512K) random-access memory
(RAM) subsystem
•
Eight input/output (I/O) slots:
Five with a 98-pin card-edge socket
. Three with a 62-pin card-edge socket
•
Speaker attachment
•
Keyboard attachment
•
Complementary metal oxide semiconductor (CMOS) memory
RAM to maintain system configuration
•
Real-Time Clock
•
Battery backup for CMOS configuration table and Real-Time
Clock
System Board
1-3
Memory
The system board consists of two 256K-by-9 random access
memory module packages, plus two banks of 64K-by-4 random
access memory (RAM) modules. Total memory size is 640K,
with parity checking.
Microprocessor
The Intel 80286 microprocessor has a 24-bit address, 16-bit
memory interfacel , an extensive instruction set, DMA and
interrupt support capabilities, a hardware fixed-point multiply and
divide, integrated memory management, four-level memory
protection, 10 (1,073,741,824 bytes) of virtual address space for
each task, and two operating modes: the 8086-compatible real
address mode and the protected virtual address mode. More
detailed descriptions of the microprocessor may be found in the
publications listed in the Bibliography of this manual.
Real Address Mode
In the real address mode, the microprocessor's physical memory is
a contiguous array of up to one megabyte. The microprocessor
addresses memory by generating 20-bit physical addresses.
The selector portion of the pointer is interpreted as the upper 16
bits of a 20-bit segment address. The lower 4 bits of the 20-bit
segment address are always zero. Therefore, segment addresses
begin on multiples of 16 bytes.
All segments in the real address mode are 64K in size and may be
read, written, or executed. An exception or interrupt can occur if
data operands or instructions attempt to wrap around the end of a
segment. An example of this is a word with its low-order byte at
offset FFFF and its high-order byte at 0000. If, in the real
In this manual, the term interface refers to a device that carries signals
between functional units.
1-4
System Board
address mode, the information contained in the segment does not
use the full 64K, the unused end of the segment may be overlayed
by another segment to reduce physical memory requirements.
Protected (Virtual Address) Mode
The protected mode offers extended physical and virtual memory
address space, memory protection mechanisms, and new
operations to support operating systems and virtual memory.
Note: See "BIOS Programming Hints" in Section 5 for
special cautions while operating in the protected mode.
The protected mode provides a 1G virtual address space for each
task mapped into a 16M physical address space. The virtual
address space may be larger than the physical address space,
because any use of an address that does not map to a physical
memory location will cause a restartable exception.
As in the real address mode, the protected mode uses 32-bit
pointers, consisting of 16-bit selector and offset components.
The selector, however, specifies an index into a memory resident
table rather than the upper 16 bits of a real memory address. The
24-bit base address of the desired segment is obtained from the
tables in memory. The 16-bit offset is added to the segment base
address to form the physical address. The microprocessor
automatically refers to the tables whenever a segment register is
loaded with a selector. All instructions that load a segment
register will refer to the memory-based tables without additional
program support. The memory-based tables contain 8-byte
values called descriptors.
System Board
1-5
The following is a block diagram of the system board.
1-6
System Board
System Performance
The 80286 microprocessor operates at 6 MHz, resulting in a clock
cycle time of 167 nanoseconds.
A bus cycle requires two clock cycles, making a 334-nanosecond
16-bit, microprocessor cycle time. Eight-bit bus operations to
8-bit devices take six clock cycles (which include four wait
states), resulting in a I-microsecond microprocessor cycle.
Sixteen-bit bus operations to 8-bit devices take 12 clock cycles
(which include 10 wait states) resulting in a 2-microsecond
microprocessor cycle.
The refresh controller steps one refresh address every 15
microseconds. Each refresh cycle requires eight clock cycles to
refresh all of the system's dynamic memory; 256 refresh cycles
are required every 4 milliseconds, but the system hardware
refreshes every 3.84ms. The following formula determines the
percentage of bandwidth used for refresh for the 6 MHz clock.
% Bandwidth used
for Refresh
8 cycles X 256
2048
3.84ms/167ns
22994
= -------------- = ----- = 9%
The DMA controller operates at 3 MHz, which results in a clock
cycle time of 334 nanoseconds. All DMA data-transfer bus
cycles are five clock cycles or 1.66 microseconds. Cycles spent in
the transfer of bus control are not included.
System Board
1-7
System Memory Mapping
The following shows the mapping of the system memory.
Address
Name
Function
000000 to
07FFFF
512K system
board m!!!mory
First 512K of system board memory
080000 to
OgFFFF
128K system
bOard memory
System board memory (512K to 640K)
May be disabled with jumper Jl0.
OAOOOO to
OBFFFF
128K video
RAM
Reserved for graphics display buffer
aCOaOO to
ODFFFF
128K 1/0
expansion ROM
Reserved for ROM on 1/0 adapters
OEOOOO to
OEFFFF
64K reserved
Oil system board
Duplicated code assignment at
address FEOOOO
OFOOOO to
OFFFFF
64K ROM on the
system board
Duplicated code assignment at
address FFOOOO
100000 to
FDFFFF
Maximum
memory 15M
1/0 channel memory - 640K to 15M
Installed on memory expansion options
FEOOOO to
FEFFFF
64K reserved
oli system board
Duplicated code assignment at
address OEOOOO
FFOOOO to
FFFFFF
64K ROM on the
system board
Duplicated code assignment at
address OFOOOO
System Memory
1-8
System Board
Direct Memory Access
The system supports seven direct memory access (DMA)
channels. Two Intel 8237 A-5 DMA Controller chips are used,
with four channels for each chip. The DMA channels are
assigned as follows:
Controller 1
Ch
Ch
Ch
Ch
0
1
2
3
-
Reserved
SDLC
Diskette
LAN
Controller 2
Ch
Ch
Ch
Ch
4 - Cascade for Ctlr 1
5 - Reserved
6 - Reserved
7 - Reserved
DMA Channels
DMA controller 1 contains channels 0 through 3. These channels
support 8-bit data transfers between 8-bit I/O adapters and 8- or
16-bit system memory. Each channel can transfer data
throughout the 16M system-address space in 64K blocks.
The following figures show address generation for the DMA
channels.
Source
DMA Page Registers
Controller
Address
A23<---------->A16
A15<---------->AO
Address Generation for DMA Channels 0 through 3
Note: The addressing signal, 'byte high enable' (BHE),
is generated by inverting address line AO.
System Board
1-9
DMA controller 1 command code addresses follow.
Hex
Address
Register Function
000
001
002
003
004
005
006
007
CHO
CHO
CHI
CHI
CH2
CH2
CH3
CH3
base
base
base
base
base
base
base
base
and
and
and
and
and
and
and
and
current
current
current
current
address
word count
address
word count
curr~nt address
current word count
current address
current word count
008
009
OOA
OOB
OOC
000
OOE
OOF
Read Status Register/Write Command Register
Write Request Register
Write Single Mask Register Bit
Write Mode Register
Clear Byte Pointer Flip-Flop
Read Temporary Register/Write Master Clear
Clear Mask Register
Write All Mask Register Bits
DMA Controller 1 (Channels 0-3)
DMA controller 2 contains channels 4 through 7. Channel 4 is
used to cascade channels 0 through 3 to the microprocessor.
Channels 5, 6, and 7 support 16-bit data transfers between 16-bit
I/O adapters and 16-bit system memory. These DMA channels
can transfer data throughout the 16M system-address space in
128K blocks. Channels 5, 6, and 7 cannot transfer data on
odd-byte boundaries.
Source
OMA Page Registers
Controller
Address
A23<---------->A17
A16<---------->Al
Address Generation for DMA Channels 5 through 7
Note: The addressing signals, BHE and AO, are forced to
a logical O.
1-10
System Board
The following figure shows the addresses for the page register.
I/O Hex Address
Page Register
OMA Channel
OMA Channel
OMA Channel
OMA Channel
OMA Channel
OMA Channel
OMA Channel
Refresh
0
0087
0083
0081
0082
008B
0089
008A
008F
I
2
3
5
6
7
Page Register Addresses
Addresses for all DMA channels do not increase or decrease
through page boundaries (64K for channels 0 through 3, and
128K for channels 5 through 7).
DMA channels 5 through 7 perform 16-bit data transfers. Access
can be gained only to 16-bit devices (I/O or memory) during the
DMA cycles of channels 5 through 7. Access to the DMA
controller, which controls these channels, is through I/O
addresses hex OCO through ODF.
DMA controller 2 command code addresses follow.
Hex
Address
Register Function
OCO
OC2
oc4
OC6
oc8
OCA
OCC
OCE
CH4
CH4
CH5
CH5
CH6
CH6
CH7
CH7
base
base
ba:oe
base
base
base
base
base
and
and
and
and
and
and
and
and
current
current
current
current
current
current
current
current
address
word count
address
word count
address
word count
address
word count
000
002
004
006
008
OOA
OOC
OOE
Read Status Register/Write Command Register
Write Request Register
Write Single Mask Register Bit
Write Mode Register
Clear Byte Pointer Flip-Flop
Read Temporary Register/Write Master Clear
Clear Mask Register
Write All Mask Register Bits
DMA Controller 2 (DMA Channels 4-7)
All DMA memory transfers made with channels 5 through 7 must
occur on even-byte boundaries. When the base address for these
System Board
1-11
channels is programmed, the real address divided by 2 is the data
written to the base address register. Also, when the base word
count for channels 5 through 7 is programmed, the count is the
number of 16-bit words to be transferred. Therefore, DMA
channels 5 through 7 can transfer 65,536 words, or 128Kb
maximum, for any selected page of memory. These DMA
channels divide the 16M memory space into 128K pages. When
the DMA page registers for channels 5 through 7 are
programmed, data bits D7 through D1 contain the high-order
seven address bits (A23 through A17) of the desired memory
space. Data bit DO of the page registers for channels 5 through 7
is not used in the generation of the DMA memory address.
At power-on time, all internal locations, especially the mode
registers, should be loaded with some valid value. This is done
even if some channels are unused.
System Interrupts
The 80286 microprocessor's non maskable interrupt (NMI) and
two 8259A controller chips provide 16 levels of system interrupts.
Note: Any or all interrupts may be masked (including the
microprocessor's NMI).
1-12
System Board
Hardware Interrupt Listing
The following shows the interrupt-level assignments in decreasing
priority.
Function
Level
Microprocessor NMI
Parity or I/O Channel Check
Interrupt Controllers
CTRL 1
CTRL 2
Timer Output 0
Keyboard (Output Buffer Full)
Interrupt from CTRL 2
IRQ 0
IRQ 1
IRQ 2 +IRQ 8
IRQ 9
IRQ
'- IRQ
IRQ
IRQ
IRQ
IRQ
IRQ 3
IRQ 4
IRQ 5
IRQ 6
IRQ 7
*
**
***
****
10
11
12
13
14
15
Realtime Clock Interrupt
Software Redirected to INT OAH
PC Network *
PC Network(Alt.) *
Reserved
Reserved
Reserved
Coprocessor
Fixed Disk Controller
Reserved
Ser ial Port 2
BSC
BSC (Alt.)
PC Network *
PC Network (Alt.) *
SDLC
Serial Port 1
BSC
BSC (Alt.)
SDLC
Parallel Port 2
Diskette Controller
Fixed Disk and Diskette Drive
Parallel Port 1
Data Acauisition and Control **
GPIB **'11
Voice Communications Adapter ****
The PC Network is jumper selectable.
The Data Acquisition Adapter can be set to interrupts
3 through 7. The default interrupt is 7.
The GPIB Adapter can be set to interrupts 2 through 7.
The Voice Communications Adapter can be set to
interrupts 2, 3, 4, or 7 (Interrupt level 7 is
recommended).
Hardware Interrupt Listing
System Board
1-13
Interrupt Sharing
A definition for standardized hardware design has been
established that enables multiple adapters to share an interrupt
level. This section describes this design and discusses the
programming support required.
Note: Since interrupt routines do not exist in ROM for
protected mode operations, this design is intended to run
only in the microprocessor's real address mode.
Design Overview
Most interrupt-supporting adapters hold the 'interrupt request'
line (IRQ) at a low level and then drive the line high to cause an
interrupt. In contrast, the shared-interrupt hardware design
allows IRQ to float high through pull-up resistors on each
adapter. Each adapter on the line may cause an interrupt by
momentarily pulsing the line to a low level. The high-to-low
transition arms the 8259A Interrupt Controller; the low-to-high
transition generates the interrupt. The duration of this pulse must
be between 125 and 1,000 nanoseconds.
The adapters must have an 'interrupt' status bit (INT) and a
'interrupt enable' bit (ENA) that can be controlled and
monitored by its software.
Each adapter sharing an interrupt level must monitor the IRQ
line. When any adapter drives the line low, all other adapters on
that line must be prevented from issuing an interrupt request until
they are rearmed.
If an adapter's !NT status bit is at a high level when the interrupt
sharing logic is rearmed, the adapter must reissue the interrupt.
This prevents lost interrupts if two adapters issue an interrupt at
the same time and an interrupt handler issues a Global Rearm
after servicing one of the adapters.
1-14
System Board
The following diagram is an example of the shared interrupt logic.
Q
1------1
+5
Q
-Q
>CLK
2.2K Ohms
-CLR
System
Clock--+----i-------'
">'--+-
IRQ
+5
Q
---I >CLK
L - -_ _
-Q
-CLR
-Global
Rearm---~-------'
Shared Interrupt Logic Diagram
Program Support
During multitasking, tasks are constantly being activated and
deactivated in no particular order. The interrupt-sharing program
support described in this section provides for an orderly means to:
•
Link a task's interrupt handler to a chain of interrupt handlers
•
Share the interrupt level while the task is active
•
Unlink the interrupt handler from the chain when the task is
deactivated.
Linking to a Chain
Each newly activated task replaces the interrupt vector in low
memory with a pointer to its own interrupt handler. The old
interrupt vector is used as a forward pointer (FPTR) and is stored
at a fixed offset from the new task's interrupt handler.
System Board
1-15
Sharing the Interrupt Level
When the new task's handler gains control as a result of an
interrupt, the handler reads the contents of the adapter's interrupt
status register to determine if its adapter caused the interrupt. If
it did, the handler services the interrupt, disables the interrupts
(eLI), issues a non-specific End of Interrupt (EOI), and then, to
rearm the interrupt hardware, writes to address 02FX, where X
corresponds to interrupt levels 3 through 7, and 9 (IRQ9 is
02F2). A write to address 06FX, where X may be 2 through 7, is
required for interrupt levels 10 through 15, respectively. Each
adapter in the chain decodes the address which results in a Global
Rearm. An adapter is required to decode the least significant 11
bits for this Global Rearm command. The handler then issues a
Return From Interrupt (IRET).
If its adapter did not cause the interrupt, the handler passes
control to the next interrupt handler in the chain.
Unlinking from the Chain
To unlink from the chain, a task must first locate its handler's
position within the chain. By starting at the interrupt vector in
low memory, and using the offset of each handler's FPTR to find
the entry point of each handler, the chain can be methodically
searched until the task finds its own handler. The FPTR of the
previous handler in the chain is replaced by the task's FPTR, thus
removing the handler from the chain.
Error Recovery
Should the unlinking routine discover that the interrupt chain has
been corrupted (an interrupt handler is linked but does not have a
valid SIGNATURE), an unlinking error-recovery procedure must
be in place. Each application can incorporate its own unlinking
error procedure into the unlinking routine. One application may
choose to display an error message requiring the operator to
either correct the situation or power down the system. Another
application may choose an error recovery procedure that restores
the original interrupt vector in low memory, and bypasses the
corrupt portion of the interrupt chain. This error recovery
1-16
System Board
procedure may not be suitable when adapters that are being
serviced by the corrupt handler are actively generating interrupts,
since unserviced interrupts lock up that interrupt level.
ROS Considerations
Adapters with their handlers residing in ROS may choose to
implement chaining by storing the 4 byte FPTR (plus the FIRST
flag if it is sharing interrupt 7 or 15) in on-adapter latches or
ports. Adapter ROS without this feature must first test to see
that it is the first in the chain. If it is the first in the chain, the
adapter can complete the link; if not, the adapter must exit its
routine without linking.
Precautions
The following precautions must be taken when designing
hardware or programs using shared interrupts:
•
Hardware designers should ensure the adapters:
Do not power up with the ENA line active or an interrupt
pending.
Do not generate interrupts that are not serviced by a
handler. Generating interrupts when a handler is not
active to service the adapter causes the interrupt level to
lock up. The design relies on the handler to clear its
adapter's interrupt and issue the Global Rearm.
Can be disabled so that they do not remain active after
their application has terminated.
•
Programmers should:
Ensure that their programs have a short routine that can
be executed with the AUTOEXEC.BAT to disable their
adapter's interrupts. This precaution ensures that the
adapters are deactivated if the user reboots the system.
Treat words as words, not bytes. Remember that data is
stored in memory using the Intel format (word 424B is
stored as 4B42).
System Board
1-17
Interrupt Chaining Structure
ENTRY:
PAST:
JMP
SHORT PAST
FPTR
DO
0
SIGNATURE OW
424BH
FLAGS
FIRST
JMP
RES- BYTES
DB
EQ.U
SHORT
DB
BOH
RESET
DUP 7 (0)
; Jump around structure
; Forward Pointer
;
;
;
;
Used when un link i n9 to i dent i fy
compatible interrupt handlers
Flags
Flag for being first in chain
; Future expansion
; Actual start of code
The interrupt chaining structure is a 16-byte format containing
FPTR, SIGNATURE, and RES BYTES. It begins at the third
byte from the interrupt handler'sentry point. The first
instruction of every handler is a short jump around the structure
to the start of the routine. Since the position of each interrupt
handler's chaining structure is known (except for the handlers on
adapter ROS), the FPTRs can be updated when unlinking.
The FIRST flag is used to determine the handler's position in the
chain when unlinking when sharing interrupts 7 and 15. The
RESET routine, an entry point for the operating system, must
disable the adapter's interrupt and RETURN FAR to the
operating system.
Note: All handlers designed for interrupt sharing must
use 424B as the signature to avoid corrupting the chain.
Examples
In the following examples, notice that interrupts are disabled
before control is passed to the next handler on the chain. The
next handler receives control as if a hardware interrupt had
caused it to receive control. Also, notice that the interrupts are
disabled before the non-specific EOI is issued, and not reenabled
in the interrupt handler. This ensures that the IRET is executed
(at which point the flags are restored and the interrupts
reenabled) before another interrupt is serviced, protecting the
stack from excessive build up.
II
q
1-18
System Board
Example of an Interrupt Handler
YOUR_CARD
EQ.U
xxxx
ISB
EQ.U
xx
REARM
EQ.U
2F7H
SPC_EOI
EQ.U
67H
EOI
OCR
EQ.U
EQ.U
20H
20H
IMR
EQ.U
21H
Location of your card's interrupt
control/status register
Interrupt bit in your card's Interrupt
control status register
Global Rearm location for interrupt
level 7
; Specific EOI for 8259's interrupt
level 7
Non-specific EOI
Location of 8259 operational control
register
Location of 8259 interrupt mask
register
MYCSEG
SEGMENT
ASSUME
PROC
JMP
FPTR
DO
SI GNATURE OW
ENTRY
FLAGS
FIRST
JMP
RES BYTES
PAST":
SERVICE:
EXIT:
RESET:
ENTRY
DB
EQ.U
SHORT
DB
STI
PUSH
MOV
IN
TEST
JNZ
TEST
JNZ
POP
CL I
JMP
PARA
CS: MYCSEG ,OS: DSEG
FAR
SHORT PAST
o
424BH
o
80H
RESET
DUP 7 (0)
OX, YOUR CARD
AL,DX AL,ISB
SERVICE
CS:FLAGS,FIRST
EXIT
DWORD PTR CS:FPTR
Entry point of handler
Forward Pointer
Used when un link i ng to i dent i fy
compatible interrupt handlers
Flags
; Future expans ion
; Actual start of handler code
; Save needed reg i sters
; Select your status register
Read the status register
Your card caused the interrupt?
Yes, branch to service logic
Are we the first ones in?
If yes, branch for EOI and Rearm
Restore registers
Disable interrupts
Pass control to next guy on chain
Serv i ce the inter rupt
CL I
MOV
OUT
MOV
OUT
POP
IRET
RET
ENDP
MYCSEG
END
AL,EOI
OCR,AL
OX ,REARM
DX,AL
Disable the interrupts
Issue non-specific EOI to 8259
Rearm the cards
Restore reg i sters
Disable your card
Return FAR to ope rat i ng system
ENDS
ENTRY
System Board
1-19
Linking Code Example
PUSH
ES
Cli
j Disable Interrupts
Set forward pointer to value of Interrupt vector In low memory
ASSUHE CS: CODESEG ,DS: CODESEG
PUSH
ES
HOV
AX, 350FH
DOS get Interrupt vector
INT
21H
HOV
SI ,OFFSET CS: FPTR
Get offset of your forward pointer
j
In an Indexable register
HOV
Store the old Interrupt vector
CS:ISI1,BX
CS: SI+21,ES
j
I n your forward po I nter for cha i n i ng
HOV
CHP
ES:BVTE PTR[BX1,CFH j Test for IRET
JNZ
SETVECTR
CS:FlAGS,FIRST
j Set up first in chain flag
HOV
SETVECTR: POP
ES
PUSH
DS
; Hake Interrupt vector In low memory point to your handler
HOV
DX,OFFSET ENTRV
Hake interrupt vector point to your handler
HOV
AX,SEG ENTRV
If DS not· CS, get It
HOV
DS,AX
and put it In DS
HOV
AX,250FH
DOS set Interrupt vector
INT
21H
POP
DS
Unmask (enable) Interrupts for your level
IN
Al,lHR
Read Interrupt mask register
$+2
JHP
j 10 delay
AND
Al,07FH
j Unmask Interrupt level 7
OUT
IHR,Al
j Wr I te new I nterrupt mask
HOV
; Issue specific EOI for level 7
. to allow pending level 7 interrupts
JHP
OCR,Al
OUT
(If anyl to be serviced
Enable Interrupts
STI
POP
ES
1-20
System Board
Unlinking Code Example
PUSH
OS
ES
PUSH
Cli
MOV
AX,350FH
INT
2lH
MOV
CX,ES
Are we the first handler In the chain?
MOV
AX,CS
CHP
8X ,OFFSET ENTRY
JNE
CHP
UNCHAIN A
AX,CX -
01 sab I e Inter rupts
DOS get Interrupt vector
ES:8X points to first of chain
Pickup segment part of Interrupt vector
Get code seg Into comparable register
Interrupt vector In low memory
pointing to your handler's offset?
j
j
j
No, branch
Vector pointing to your
hand ler' s segment?
JNE
UNCHAIN A
j No, branch
Set Interrupt vector In lOW memory to point to the handler
po I nted to by your po Inter
PUSH
MOV
HOV
HOV
INT
POP
JMP
UNCHAI N_A: CHP
JNE
lOS
CMP
JNE
HOV
CHP
OS
DX,WORD PTR CS:FPTR
OS ,WORD PTR CS FPTR[2]
AX,250FH
j DOS set Interrupt vector
2lH
OS
UNCHA I N_X
8X • FPTR offset, ES • FPTR segment, CX • CS
ES: [8X+6] ,4842H
j I shand ler us I ng the appropr I ate
j
conventions (Is SIGNATURE present In
j
the Interrupt chaining structure)?
except Ion
j No, Invoke error exception handler
SI,ES:[8X+2]
j Get FPTR's segment and offset
S I ,OFFSET ENTRY
j Is this forward pointer pointing to
j
your handler's offset?
UNCHAIN 8
CX,DS AX,CX
j
j
j
No, branch
Hove to compare
Is this forward pointer pointing to
your handler's segment?
JNE
UNCHAI N 8
j No, branch
located your handler In tl1e chain
HOV
AX,WORD PTR CS:FPTR j Get your FPTR' s offset
HOV
ES:[8X+2],AX
j Replace offset of FPTR of handler
j
that points to you
HOV
AX,WORD PTR CS:FPTR[2] j Get your FPTR's segment
HOV
ES:[8X+4],AX
j Replace segment of FPTR of handler
j
that points to you
HOV
Al,CS:FlAGS
j Get your flags
AND
Al,FIRST
j Isolate FIRST flag
OR
ES:[8X + 6],Al
j Set your first flag Into prior routine
JHP
UNCHAIN_X
UNCHA I N_B: HOV
PUSH
PUSH
8X,SI
OS
ES
JMP
UNCHAIN_X: STI
POP
POP
UNCHAI N_A
j
Hove new offset to 8X
Examine next handler In chain
Enable Interrupts
ES
OS
System Board
1-21
System Timers
The system has three programmable timer/counters, Channels 0
through 2. They are controlled by an Intel 8254-2
Timer/Counter chip, and are defined as follows:
Channel 0
System Timer
GATE 0
CLKINO
CLKOUTO
Tied on
1.193182 MHz OSC
8259AIRQ 0
Channell
Refresh Request Generator
GATE 1
CLKIN 1
CLKOUT 1
Tied on
1.193182 MHz OSC
Request refresh cycle
Note: Channell is programmed as a rate generator to
produce a 15-microsecond period signal.
Channel 2
Tone Generation for Speaker
GATE 2
CLKIN2
CLK OUT 2
Controlled by bit 0 of port hex 61, PPI bit
1.193182 MHz OSC
Used to drive the speaker
The 8254-2 Timer/Counter is a programmable interval
timer/counter that system programs treat as an arrangement of
four external I/O ports. Three ports are treated as counters; the
fourth is a control register for mode programming. The following
is a system-timer block diagram.
1-22
System Board
+5 Vdc
-Refresh
System Bus ---+
,....-
+5 Vdc
D Q
Clock
L - Clear
Gate 0
Clock In 0
Gate 1
f-- Clock In 1
I/O Add ress
Hex 006 1 - r-- Gate 2
Port Bi t 0
f-- Clock In 2
IRQ 0
Clock Out 0
Clock Out 1 f-Clock Out 2
I/O Add ress
Hex 006 1
Port Bi t 1
PC LK
(2 .38MHz)
Refresh Request
I Driver I
I I
AND
Divide
by 2
Low
---+ To Speaker
Pass
F i Iter
I
System-Timer Block Diagram
System Clock
The 82284 System Clock Generator is driven by a 12-MHz
crystal. Its output 'clock' signal (CLK) is the input to the system
microprocessor and the I/O channel.
ROM Subsystem
The system board's ROM subsystem consists of two 32K by 8-bit
ROM/EPROM modules in a 32K-by-16-bit arrangement. The
code for odd and even addresses resides in separate modules.
ROM is assigned at the top of the first and last 1M address space
(OFOOOO and FFOOOO). ROM is not parity-checked. Its
maximum access time is 170 nanoseconds and its maximum cycle
time is 333 nanoseconds.
System Board
1-23
RAM Subsystem
The system board's RAM subsystem starts at address 000000 of
the 16M address space and consists of 640K of read/write
(R/W) memory. The 640K memory is composed of two
256K-by-9 random access memory module packages (512K), plus
two banks of 64K-by-4 RAM modules (128K). The 64K-by-4
RAM modules may be disabled at jumper no, located on the
system board. Memory access time is 150 nanoseconds and the
cycle time is 275 nanoseconds.
Memory refresh requests one memory cycle every 15
microseconds through the timer/counter (channell). The RAM
initialization program performs the following functions:
•
Initializes channell of the timer/counter to the rate
generation mode, with a period of 15 microseconds
•
Performs a memory write operation to any memory location.
Note: The memory must be accessed or refreshed eight
times before it can be used.
I/O Channel
The I/O channel supports:
•
I/O address space hex 100 to hex 3FF
•
24-bit memory addresses (16M)
•
Selection of data accesses (either 8- or 16-bit)
•
Interrupts
•
DMA channels
•
I/O wait-state generation
•
Open-bus structure (allowing multiple microprocessors to
share the system's resources, including memory)
•
Refresh of system memory from channel microprocessors.
1-24
System Board
Connectors
The following figure shows the location and the numbering of the
I/O channel connectors. These connectors consist of five 98-pin
and three 62-pin edge connector sockets.
Note:
The three 62-pin positions can support only 62-pin
II0 bus adapters.
I/O Channel
Connectors
Rear Panel
....
"")
('II
"")
M
"")
oq-
"")
It)
"")
co
"")
"'"
"")
IX)
"")
System Board
1-25
The following figure shows the pin numbering for the 62-pin I/O
channel connectors JI, 17 and J8.
Rear Panel
Bl
Al
Bl0
Al0
B20
A20
B3l
A3l
Component Side
I/O Channel Pin Numbering (J1, J7 and J8)
1-26
System Board
The following figure shows the pin numbering for the 98-pin I/O
channel connectors 12 through J6.
Rear Panel
Bl
Al
Bl0
Al0
B20
A20
B31
A31
01
C1
010
Cl0
018
C18
Component Side
I/O Channel Pin Numbering (J2-J6)
System Board
1-27
The following figures summarize pin assignments for the I/O
channel connectors.
I/O Pin
Signal Name
I/O
Al
A2
A3
A4
A5
A6
A7
A8
A9
AID
All
Al2
Al3
Al4
Al5
Al6
Al7
Al8
Al9
A20
A21
A22
A23
A24
A25
A26
A27
A28
A29
A30
A31
-I/O CH CK
S07
S06
S05
so4
S03
S02
SOl
SOD
+1/0 CH ROY
AEN
SAl9
SAl8
SAl7
SAl6
SAl5
SAl4
SAl3
SAl2
SAil
SAID
SA9
SA8
SA7
SA6
SA5
SA4
SA3
SA2
SAl
SAO
I
I/O
I/O
I/O
I/O
I/O
I/O
I/O
I/O
I
0
I/O
I/O
I/O
I/O
I/O
I/O
I/O
/0
/0
/0
/0
/0
/0
/0
/0
/0
/0
/0
/0
/0
I/O Channel (A-Side)
1-28
System Board
I/O Pin
Signal Name
I/O
Bl
B2
B3
B4
B5
B6
B7
B8
B9
Bl0
Bll
B12
B13
B14
B15
B16
B17
B18
B19
B20
B21
B22
B23
B24
B25
B26
B27
B28
B29
B30
B31
GND
RESET DRV
+5 Vdc
IRQ 9
-5 Vdc
DRQ2
-12 Vdc
OWS
+12 Vdc
GND
-SMEMW
-SMEMR
-lOW
-lOR
-DACK3
DRQ3
-DACKI
DRQl
-REFRESH
ClK
IRQ7
IRQ6
IRQ5
IRQ4
IRQ3
-DACK2
T/C
BALE
+5Vdc
14.318MHz OSC
GND
Ground
0
Power
I
Power
I
Power
I
Power
Ground
0
0
I/O
I/O
0
I
0
I
I/O
0
I
I
I
I
I
0
0
0
Power
0
Ground
I/O Channel (B-Side)
System Board
1-29
I/O Pin
Signal Name
I/O
C1
C2
-SBHE
LA23
LA22
LA21
LA20
LA19
LA18
LA17
-MEMR
-MEMW
5008
5009
5010
5011
5012
5013
5014
5015
/0
/0
/0
/0
/0
/0
/0
/0
/0
/0
/0
/0
/0
/0
/0
/0
/0
/0
~~
C5
C6
C7
C8
C9
Cl0
C11
C12
C13
C14
C15
C16
C17
C18
I/O Channel (C-Side, J2 through J6 only)
I/O Pin
Signal Name
I/O
01
02
03
04
05
06
07
08
09
010
011
012
013
014
015
016
017
018
-MEM CS16
-I/O CS16
IRQ10
IRQll
IRQ12
IRQ15
IRQ14
-OACKO
ORQO
-OACK5
ORQ5
-OACK6
ORQ6
-OACK7
ORQ7
+5 Vdc
-MASTER
GNO
I
I
I
I
I
I
I
0
I
0
I
0
I
0
I
POWER
I
GROUND
I/O Channel (D-Side, J2 through J6 only)
1-30 System Board
110 Channel Signal Description
The following is a description of the system board's I/O channel
signals. All signal lines are TTL compatible. 1/0 adapters should
be designed with a maximum of two low-power Shottky (LS)
loads per line and be capable of driving the data and address lines
similar to a 74LS245 driver.
SAO through SA19 (I/O)
Address signals 0 through 19 are used to address memory and
1/0 devices within the system. These 20 address lines, in
addition to LA 17 through LA23, allow access of up to 16M of
memory. SAO through SA19 are gated on the system bus when
'buffered address latch enable' signal (BALE) is high and are
latched on the falling edge of BALE. These signals are generated
by the microprocessor or DMA Controller. They also may be
driven by other microprocessors or DMA controllers that reside
on the I/O channel.
LA17 through LA23 (I/O)
These signals (unlatched) are used to address memory and I/O
devices within the system. They give the system up to 16M of
addressability. These signals are valid from the leading edge of
BALE to the trailing edge of the '-I/O Read' (-lOR) or '-I/O
Write' (-lOW) command cycle. These decodes should be latched
by I/O adapters on the falling edge of the 'buffered address latch
enable' signal (BALE).
These signals also may be driven by other microprocessors or
DMA controllers that reside on the 1/0 channel.
CLK(O)
This is the system 'clock' signal. It is a synchronous
microprocessor cycle clock with a cycle time of 167 nanoseconds.
The clock has a 50% duty cycle. This signal should be used only
for synchronization. It is not intended for uses requiring a fixed
frequency.
System Board
1-31
RESET DRV (0)
The 'reset drive' signal is used to reset or initialize system logic at
power-up time or during a low voltage condition. This signal is
active high.
SDO through SD15 (I/O)
These signals provide data bits 0 through 15 for the
microprocessor, memory, and I/O devices. DO is the
least-significant bit and D15 is the most-significant bit. All 8-bit
devices on the I/O channel should use DO through D7 for
communications to the microprocessor. The 16-bit devices will
use DO through D15. To support 8-bit devices, the data on D8
through D15 will be gated to DO through D7 during 8-bit
transfers to these devices; 16-bit microprocessor transfers to 8-bit
devices will be converted to two 8-bit transfers.
BALE (0) (buffered)
The 'buffered address latch enable' signal is available to the I/O
channel as an indicator of a valid microprocessor or DMA address
(when used with 'address enable' signal, AEN). Microprocessor
addresses SAO through SA19 are latched with the falling edge of
BALE. BALE is forced high (active) during DMA cycles. From
the trailing edge of a command cycle (for example, the trailing
edge of -lOR or -lOW) to the leading edge of BALE, the address
lines are in transition and are not stable.
-I/O CH CK (I)
The '-I/O channel check' signal provides the system board with
parity (error) information about memory or devices on the I/O
channel. When this signal is active (low), it indicates a
non-correctable system error.
1-32
System Board
I/O CH RDY (I)
The 'I/O channel ready' signal is pulled low (not ready) by a
memory or 1/0 device to lengthen I/O or memory cycles. Any
slow device using this line should drive it low immediately upon
detecting its valid address and a Read or Write command.
Machine cycles are extended by an integral number of clock
cycles (167 nanoseconds). This signal should be held low for no
more than 2.5 microseconds.
IRQ3-IRQ7, IRQ9-IRQ12, IRQ14, and IRQ15 (I)
Interrupt requests 3 through 7,9 through 12, 14, and 15 are used
to signal the microprocessor that an I/O device needs attention.
The interrupt requests are prioritized, with IRQ9 through IRQI2,
IRQI4, and IRQ15 having the highest priority (IRQ9 is the
highest), and IRQ3 through IRQ7 having the lowest priority
(IRQ7 is the lowest). An interrupt request is generated when an
IRQ line is raised from low to high. The line is high until the
microprocessor acknowledges the interrupt request (Interrupt
Service routine). See the figure on page 1-13 for additional
information.
Note: Interrupt requests IRQO-IRQ2, IRQ8, IRQ13 are
used on the system board and are not available on the I/O
channel.
-lOR (I/O)
The '-I/O read' signal instructs an I/O device to drive its data
onto the data bus. This signal may be driven by the system
microprocessor or DMA controller, or by a microprocessor or
DMA controller resident on the I/O channel. This signal is active
low.
-lOW (I/O)
The '-I/O write' signal instructs an I/O device to read the data
off the data bus. It may be driven by any microprocessor or
DMA controller in the system. This signal is active low.
System Board
1-33
-SMEMR (0) -MEMR (I/O)
These signals instruct the memory devices to drive data onto the
data bus. -SMEMR is active only when the memory decode is
within the low 1M of memory space. -MEMR is active on all
memory read cycles. -MEMR may be driven by any
microprocessor or DMA controller in the system. -SMEMR is
derived from -MEMR and the decode of the low 1M of memory.
When a microprocessor on the I/O channel wishes to drive
-MEMR, it must have the address lines valid on the bus for one
clock cycle before driving -MEMR active. Both signals are active
low.
-SMEMW (0) -MEMW (I/O)
These signals instruct the memory devices to store the data
present on the data bus. -SMEMW is active only when the
memory decode is within the low 1M of the memory space.
-MEMW is active on all memory write cycles. -MEMW may be
driven by any microprocessor or" DMA controller in the system.
-SMEMW is derived from -MEMW and the decode of the low
1M of memory. When a microprocessor on the I/O channel
wishes to drive -MEMW, it must have the address lines valid on
the bus for one clock cycle before driving -MEMW active. Both
signals are active low.
DRQO-DRQ3 and DRQ5-DRQ7 (I)
The 'DMA request' signals 0 through 3 and 5 through 7 are
asynchronous channel requests used by peripheral devices and a
microprocessor to gain DMA service (or control of the system).
They are prioritized, with DRQO having the highest priority and
DRQ7 the lowest. A request is generated by bringing a DRQ line
to an active (high) level. A DRQ line is held high until the
corresponding 'DMA acknowledge' (DACK) line goes active.
DRQO through DRQ3 perform 8-bit DMA transfers; DRQ5
through DRQ7 perform 16-bit transfers. DRQ4 is used on the
system board and is not available on the 110 channel.
1-34
System Board
-DACKO to -DACK3 and -DACK5 to -DACK7 (0)
-OMA acknowledge 0 through 3 and 5 through 7 are used to
acknowledge OMA requests. These signals are active low.
AEN (0)
The 'address enable' signal is used to degate the microprocessor
and other devices from the I/O channel to allow OMA transfers
to take place. When this line is active, the OMA controller has
control of the address bus, the data bus, Read command lines
(memory and I/O), and the Write command lines (memory and
I/O). This signal is active high.
-REFRESH (I/O)
This signal is used to indicate a refresh cycle and can be driven by
a microprocessor on the I/O channel. This signal is active low.
T/C (0)
The 'terminal count' signal provides a high pulse when the
terminal count for any OMA channel is reached.
-SHHE (I/O)
The 'system bus high enable' signal indicates a transfer of data
on the upper byte of the data bus, S08 through SOlS.
Sixteen-bit devices use -SBHE to condition data bus buffers tied
to S08 through SOlS. This signal is active low.
System Board
1-35
-MASTER (I)
This signal is used with a DRQ line to gain control of the system.
A processor or DMA controller on the I/O channel may issue a
DRQ to a DMA channel in cascade mode and receive a -DACK.
Upon receiving the -DACK, a microprocessor may pull
-MASTER active (low), which will allow it to control the system
address, data, and control lines (a condition known as tri-state).
After -MASTER is low, the microprocessor must wait one clock
cycle before driving the address and data lines, and two clock
cycles before issuing a Read or Write command. If this signal is
held low for more than 15 microseconds, the system memory may
be lost because of a lack of refresh.
-MEM CS16 (I)
The '-memory 16-bit chip select' signal indicates to the system
that the present data transfer is a 1 wait-state, 16-bit, memory
cycle. It must be derived from the decode of LA 17 through
LA23. -MEM CS16 is active low and should be driven with an
open collector or tri-state driver capable of sinking 20 rnA.
-I/O CS16 (I)
The '-I/O 16-bit chip select' signal indicates to the system that
the present data transfer is a 16-bit, 1 wait-state, I/O cycle. It is
derived from an address decode. -I/O CS16 is active low and
should be driven with an open collector or tri-state driver capable
of sinking 20 mA.
14.318MHz OSC(O)
The' 14.318MHz oscillator' signal is a high-speed clock with a
70-nanosecond period (14.31818 MHz). This signal is not
synchronous with the system clock. It has a 50% duty cycle.
1-36
System Board
OWS (I)
The 'zero wait state' signal tells the microprocessor that it can
complete the present bus cycle without inserting any additional
wait cycles. In order to run a memory cycle to a 16-bit device
without wait cycles, OWS is derived from an address decode gated
with a Read or Write command. OWS is active low and should be
driven with an open collector or tri-state driver capable of sinking
20mA.
System Board
1-37
I/O Addresses
The following describes the system board's I/O addresses.
Hex Range
000-01F
020-03F
040-05F
060
061
064
070-07F
080-09F
OAO-OBF
OCO-ODF
OFO
OFI
oF8-0FF
lFO-1F8
20C-20D
21F
278-27F
2BO-2DF
2El
2E2 & 2E3
2F8-2FF
300-31F
360-363
364-367
368-36B
36C-36F
378-37F
380-38F
3AO-3AF
3BO-3BF
3CO-3CF
3DO-3DF
3FO-3F7
3F8-3FF
6E2 & 6E3
AE2 & AE3
EE2 & EE3
22El
42El
62El
82El
A2El
C2El
E2El
Device
DMA Controller 1, 8237A-5
Interrupt Controller 1, 8259A, Master
Timer 8254-2
8042 (Keyboard)
System Board I/O port
8042 (Keyboard)
Real-Time Clock, NMI (Non-maskable Interrupt) Mask
DMA Page Register , 74LS612
Interrupt Controller 2, 8259A
DMA Controller 2, 8237A-5
Clear Math Coprocessor Busy
Reset Math Coprocessor
Math Coprocessor
Fixed Disk
Reserved
Voice Communications Adapter
Parallel Printer Port 2
Alternate Enhanced Graphics Adapter
GPIB (Adapter 0)
Data Acquisition (Adapter 0)
Serial Port 2
Prototype Adapter
PC Network (low address)
Reserved
PC Network (high address)
Reserved
Parallel Printer Port 1
SDLC, Bisynchronous 2
Bisynchronous 1
Monochrome Display and Printer Adapter
Enhanced Graphics Adapter
Color/Graphics Monitor Adapter
Diskette Controller
Serial Port 1
Data Acquisition (Adapter 1)
Data Acquisition (Adapter 2)
Data Acquisition (Adapter 3)
GPIB (Adapter 1)
GPIB (Adapter 2)
GPIB (Adapter 3)
GPIB (Adapter 4)
GPIB (Adapter 5)
GPIB (Adapter 6)
GPIB (Adapter 7)
Note: I/O Addresses, hex 000 to OFF, are reserved for the
system board I/O. Hex 100 to 3FF are available on the I/O
channel. The system board decodes up to 10 bits of I/O
address Information. I/O addresses above 3FF must not
conflict with the system board I/O addresses.
I/O Address Map
1-38
System Board
NMI Controls
During POST, the non-maskable interrupt (NMI) into the 80286
is masked off. The mask bit can be set and reset with system
programs as follows:
Mask On (Disable NMI)
Write to I/O address hex 070, with
data bit 7 equal to a logical 1.
Mask Off (Enable NMI)
Write to I/O address hex 070, with
data bit 7 equal to a logical O.
Note:
At the end of POST, the system enables NMI.
The '-I/O channel check' signal (-I/O CH CK) is used to report
noncorrectable errors on RAM adapters on the I/O channel.
This check creates an NMI if the NMI is enabled. During POST,
the NMI is masked off and -I/O CH CK is disabled. Follow
these steps when enabling -I/O CH CK and the NMI.
1. Write data in all I/O RAM-adapter memory locations; this
establishes good parity at all locations.
2. Enable -I/O CH CK.
3. Enable the NMI.
Note: All three of these functions are performed by
POST.
When a check occurs, an interrupt (NMI) results. Read the status
bits to determine the source of the NMI (see the figure, "I/O
Address Map" on page 1-38). To determine the location of the
failing adapter, write 'to any memory location within a given
adapter. If the parity check was from that adapter, -I/O CH CK
is reset to inactive.
System Board
1-39
I/O Port (Read/Write)
Address hex 061 is a read/write port on the system board.
Input (Read)
The following are the input (read) bit descriptions for this I/O
port.
Bit 7
+RAM Parity Check-System board memory parity
check.
o No memory parity check error has occurred.
1 A memory parity check error has occurred.
A non-maskable interrupt (NMI) will occur if
NMI is enabled. The error bit can be reset by
toggling. output port hex 061, bit 2, to a 1 and then
back to a O.
Bit 6
+I/O Channel Check-Error on an I/O channel
adapter (memory parity error or adapter errors).
o No I/O channel error has occurred.
1 An I/O channel error has occurred.
A non-maskable interrupt (NMI) will occur if
NMI is enabled. The error bit can be reset by
toggling output port hex 061, bit 3, to a 1 and then
back to a O.
Bit 5
Tinier 2 Channel Out-Reflects the level of the Timer
2 output.
Bit 4
Refresh Detect-Toggles every 15 microseconds,
indicating normal Refresh activity
Bits 3 to 0 Read the status of bits 3, 2, 1, and 0, respectively,
written to output port hex 061.
1-40
System Board
Output (Write)
The following are the output (write) bit descriptions for the
system board I/O port.
Bits 7 to 4 Not used
Bit 3
-Enable I/O Channel Check
o
Enables I/O Channel Check errors.
1 Disables I/O Channel Check errors.
During power-up this bit is toggled to ai, then
back to a 0, to clear the I/O channel check
flip-flop of previous errors.
Bit 2
-Enable System Board RAM Parity Check
o
Enables system board RAM parity check.
1 Disables system board RAM parity check.
During power-up this bit is toggled to ai, then
back to a 0, to clear the RAM parity check
flip-flop before BIOS checks the system memory
for parity errors.
Bit 1
+Speaker Data-Controls the speaker output (along
with Timer 2 Clock output).
Bit 0
+ Timer 2 Gate Speaker
o
Disables 8254 Timer 2 clock input (1.19 MHz).
1 Enables 8254 Timer 2 clock input (1.19 MHz).
System Board
1-41
Diagnostic-Checkpoint Port
I/O address hex 080 is used as a diagnostic-checkpoint port or
register. This port corresponds to a read/write register in the
DMA page register (74LS612). This port is used by POST during
power up.
Coprocessor Controls
The following is a description of the Math Coprocessor controls.
OFO An 8-bit Out command to port FO will clear the latched
Math Coprocessor' -busy' signal. The' -busy' signal will
be latched if the coprocessor asserts its' -error' signal while
it is busy. The data output should be zero.
OF1 An 8-bit Out command to port Fl will reset the Math
Coprocessor. The data output should be zero.
1-42
System Board
Other Circuits
Speaker
The system unit has a 2-1/4 inch permanent-magnet speaker,
which can be driven from:
•
•
•
The I/O-port output bit
The timer/counter's eLK OUT 2
Both of the above
128K RAM Jumper (JI0)
The system board has a three-pin, Berg-strip connector (110).
From the rear of the system to the front, the pins are numbered 1
through 3. Jumper placement across these pins determines
whether the last 128K RAM (512KB to 640KB) of system board
memory is enabled or disabled.
Pin
Assignments
1
2
No Connection
Ground
RAM Select
3
RAM Jumper Connector (J10)
With the jumper on pins 1 and 2, the 128K RAM is enabled.
When the jumper is on pins 2 and 3, the 128K RAM is disabled.
Note:
The normal mode is the enabled mode.
System Board
1-43
Display Switch
Set the slide switch on the system board to select the primary
display adapter. Its positions are assigned as follows:
On (toward the front of the system unit): The primary display
is attached to the Color/Graphics Monitor Adapter.
Off (toward the rear of the system unit): The primary display
is attached to the Monochrome Display and Printer Adapter.
The switch may be set to either position if the primary display is
attached to an Enhanced Graphics Adapter.
Note: The primary display is activated when the system
is powered on.
Keyboard Controller
The keyboard controller is a single-chip microcomputer (Intel
8042, or EPROM version 8742) that is programmed to support
the keyboard serial interface. The keyboard controller receives
serial data from the keyboard, checks the parity of the data,
translates scan codes, and presents the data to the system as a
byte of data in its output buffer. The controller can interrupt the
system when data is placed in its output buffer, or wait for the
system to poll its status register to determine when data is
available.
Data is sent to the keyboard by first polling the controller's status
register to determine when the input buffer is ready to accept data
and then writing to the input buffer. Each byte of data is sent to
the keyboard serially with an odd parity bit automatically
inserted. Since the keyboard is required to acknowledge all data
transmissions, another byte of data should not be sent to the
keyboard until acknowledgement is received for the previous byte
sent. The output-buffer-full interrupt may be used for both send
and receive routines.
1-44
System Board
Keyboard Controller Initialization
At power-on, the keyboard controller sets the system flag bit to O.
After a power-on reset or the execution of the Self Test
command, the keyboard controller disables the keyboard interface
by forcing the 'keyboard clock' line low. The keyboard interface
parameters are specified at this time by writing to locations within
the 8042 RAM. The keyboard-inhibit function is then disabled
by setting the inhibit-override bit in the command byte. A hex 55
is then placed in the output buffer if no errors are detected during
the self test. Any value other than hex 55 indicates that the 8042
is defective. The keyboard interface is now enabled by lifting the
'keyboard data' and 'keyboard clock' signal lines, and the system
flag is set to 1. The keyboard controller is then ready to accept
commands from the system unit microprocessor or receive
keyboard data.
The initialization sequence causes the keyboard to establish Mode
2 protocol (see "Data Stream" on page 4-27).
Receiving Data from the Keyboard
The keyboard sends data in a serial format using an II-bit frame.
The first bit is a start bit, and is followed by eight data bits, an
odd parity bit, and a stop bit. Data sent is synchronized by a
clock supplied by the keyboard. At the end of a transmission, the
keyboard controller disables the interface until the system accepts
the byte. If the byte of data is received with a parity error, a
Resend command is automatically sent to the keyboard. If the
keyboard controller is unable to receive the data correctly after a
set number of retries, a hex FF is placed in its output buffer, and
the parity bit in the status register is set to 1, indicating a receive
parity error. The keyboard controller will also time a byte of data
from the keyboard. If a keyboard transmission does not end
within 2 milliseconds, a hex FF is placed in the keyboard
controller's output buffer, and the receive time-out bit in the
status register is set. No retries will be attempted on a receive
time-out error.
Note: When a receive error occurs in the default mode
(bits 5, 6, and 7 of the command byte set to 0), hex 00 is
placed in the output buffer instead of hex FF. See
System Board
1-45
"Commands (I/O Address Hex 64)" on page 1-56 for a
detailed description of the command byte.
Scan Code Translation
Scan codes received from the keyboard are converted by the
keyboard controller before being placed into the controller's
output buffer. The following figures show the keyboard layouts.
Each key position is numbered for reference.
1-46
Syst~Pl
Board
tOt-Key Keyboard
System Board
1~4 7
l02-Key Keyboard
1-48
System Board
The following figure is the scan-code translation table.
System
Scan Code
Keyboard
Scan Code
Key
(101/102-key)
01
02
03
04
05
06
07
08
09
OA
OB
OC
00
OE
OF
10
11
12
13
14
15
16
17
18
19
lA
lB
lC
10
lE
lF
20
21
22
23
24
25
26
27
28
29
2A
2B
76
16
1E
26
25
2E
36
3D
3E
46
45
4E
55
66
00
15
10
24
20
2C
35
3C
43
44
40
54
5B
5A
14
lC
1B
23
2B
34
33
3B
42
4B
4c
52
OE
12
50
2C
20
2E
2F
1A
22
21
2A
110
2
3
4
5
6
7
8
9
10
11
12
13
15
16
17
18
19
20
21
22
23
24
25
26
27
28
43
58
31
32
33
34
35
36
37
38
39
40
41
1
44
29 (U.S. only)
42 (except U.S.)
46
47
48
49
Scan-Code Translation Table (Part 1 of 3)
System Board
1-49
System
Scan Code
Keyboard
Scan Code
30
31
32
32
31
3A
41
49
4A
59
11
29
58
05
06
04
OC
03
OB
83
OA
01
09
33
34
35
36
38
39
3A
3B
3C
3D
3E
3F
40
41
42
43
44
45
46
47
48
49
4A
4B
4C
40
4E
4F
50
51
52
53
54
56
57
58
FF
EO 2A EO 37
EO 1C
EO 10
EO 35
EO 37
EO 38
EO 47
77
7E
6C
75
70
7B
6B
73
74
79
69
72
7A
70
71
7F or 84
61
78
07
00
EO 12 EO 7C
EO 5A
EO 14
EO 4A
7C
EO 11
EO 6C
Scan-Code Translation Table (Part 2 of 3)
1-50
System Board
Key
(101/102-key)
50
51
52
53
54
55
57
60
61
30
112
113
114
115
116
117
118
119
120
121
90
125
91
96
101
105
92
97
102
106
93
98
103
99
104
-
45 (except u. S. )
122
123
-
124
108
64
95
100
62
80
System
Scan Code
Keyboard
Scan Code
EO 48
EO 49
EO 4B
EO 40
EO 4F
EO 50
EO 51
EO 52
EO 53
E1 10 45 E1 90 C5
FO 47 75
FO 47 70
FO 47 6B
FO 47 74
FO 47 69
FO 47 72
FO 47 7A
FO 47 70
FO 47 71
E1 14 77 E1
FO 14 FO 77
Key
(101/102-key)
83
85
79
89
81
84
86
75
76
126
Scan-Code Translation Table (Part 3 of 3)
System Board
1-51
The following scan codes are reserved.
Key
Keyboard
Scan Code
System
Scan Code
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
60
61
78
07
OF
17
IF
27
2F
37
3F
47
4F
56
5E
08
10
18
20
28
30
38
40
48
50
57
6F
13
19
39
51
53
5C
5F
62
63
64
65
67
68
6A
60
6E
55
56
57
58
59
5A
5B
5C
50
5E
5F
60
61
62
63
64
65
66
67
68
69
6A
6B
6C
60
6E
6F
70
71
Reserved Scan-Code Translation Table
1-52
System Board
72
73
74
75
76
77
78
79
7A
7B
7C
70
7E
7F
Sending Data to the Keyboard
The keyboard sends data in the same serial format used to receive
data from the keyboard. A parity bit is automatically inserted by
the keyboard controller. If the keyboard does not start clocking
the data from the keyboard controller within 15 milliseconds, or
complete that clocking within 2 milliseconds, a hex FE is placed
in the keyboard controller's output buffer, and the transmit
time-out error bit is set in the status register.
The keyboard is required to respond to all transmissions. The
keyboard responds to any valid command and parameter, other
than Echo and Resend, with an Acknowledge (ACK) response,
hex FA. If the response contains a parity error, the keyboard
controller places a hex FE in its output buffer, and the transmit
time-out and parity error bits are set in the status register. The
keyboard controller is programmed to set a 25-millisecond time
limit for the keyboard to respond. If this time limit is exceeded,
the keyboard controller places a hex FE in its output buffer and
sets the transmit time-out and receive time-out error bits in the
status register. No retries are attempted by the keyboard
controller for any transmission error.
Keyboard Controller System Interface
The keyboard controller communicates with the system through a
status register, an output buffer, and an input buffer. The
following figure is a block diagram of the keyboard interface.
System Board
1-53
Processor
I~
Input
Buffer
System
Data
Bus
r
.
~
Manufacturing mode
P ~ Display type
U
T
~
-
1---+ U T -
~ T -
+----I....-O-u-tp-u-t--.
I' - -Buffer
-----'
System Reset
Gate A20
IRQ 1
Keyboard Clock--..-+
Keyboard Data -+---r+
--mJ.----------'
,--2_K_R~_~_8---,r . .
Keyboard Controller Interface Block Diagram
Status Register
The status register is an 8-bit read-only register at I/O address
hex 64. It has information about the state of the keyboard
controller (8042) and interface. It may be read at any time.
Status-Register Bit Definition
Bit 7 Parity Error-A 0 indicates the last byte of data received
from the keyboard had odd parity. A 1 indicates the last
byte had even parity. The keyboard should send data with
odd parity.
Bit 6 Receive Time..:Out-A 1 indicates that a transmission was
started by the keyboard but did not finish within the
programmed receive time-out delay.
Bit 5 Transmit Time-Out-A 1 indicates that a transmission
started by the keyboard controller was not properly
completed. If the transmit byte was not clocked out within
the specified time limit, this will be the only error bit on.
1-54
System Board
If the transmit byte was clocked out but a response was
not received within the programmed time limit, the
transmit time-out and receive time-out error bits are set to
1. If the transmit byte was clocked out but the response
was received with a parity error, the transmit time-out and
parity error bits are set to 1.
Bit 4
Always set to 1.
Bit 3
Command/Data-The keyboard controller's input buffer
may be addressed as either I/O address hex 60 or 64.
Address hex 60 is defined as the data port, and address hex
64 is defined as the command port. Writing to address hex
64 sets this bit to 1; writing to address hex 60 sets this bit
to O. The controller uses this bit to determine if the byte in
its input buffer should be interpreted as a command byte
or a data byte.
Bit 2 System Flag-This bit is monitored by the system during
the reset routine. If it is a 0, the reset was caused by a
power on. The controller sets this bit to 0 at power on and
it is set to 1 after a successful self test. This bit can be
changed by writing to the system flag bit in the command
byte (hex 64).
Bit 1 Input Buffer Full-A 0 indicates that the keyboard
controller's input buffer (I/O address hex 60 or 64) is
empty. A 1 indicates that data has been written into the
buffer but the controller has not read the data. When the
controller reads the input buffer, this bit will return to O.
Bit 0
Output Buffer Full-A 0 indicates that the keyboard
controller's output buffer has no data. A 1 indicates that
the controller has placed data into its output buffer but the
system has not yet read the data. When the system reads
the output buffer (I/O address hex 60), this bit Will return
to a O.
System Board
1-55
Output Buffer
The output buffer is an 8-bit read-only register at I/O address
hex 60. The keyboard controller uses the output buffer to send
scan codes received from the keyboard, and data bytes requested
by command, to the system. The output buffer should be read
only when the output-buffer-full bit in the status register is 1.
Input Buffer
The input buffer is an 8-bit write-only register at I/O address hex
60 or 64. Writing to address hex 60 sets a flag, which indicates a
data write; writing to address hex 64 sets a flag, indicating a
command write. Data written to I/O address hex 60 is sent to the
keyboard, unless the keyboard controller is expecting a data byte
following a controller command. Data should be written to the
controller's input buffer only if the input buffer's full bit in the
status register is O. The following are valid keyboard controller
commands.
Commands %
Address Hex 64)
20
Read Keyboard Controller's Command Byte-The
controller sends its current command byte to its output
buffer.
60
Write Keyboard Controller's Command Byte-The next
byte of data written to II0 address hex 60 is placed in the
controller's command byte. Bit definitions of the
command byte are as follows:
1-56
Bit 7
Reserved-Should be written as a O.
Bit 6
IBM Personal Computer Compatibility
Mode-Writing a 1 to this bit causes the controller
to convert the scan codes received from the
keyboard to those used by the IBM Personal
Computer. This includes converting a 2-byte break
sequence to the I-byte IBM Personal Computer
format.
System Board
Bit 5 mM Personal Computer Mode-Writing a 1 to this
bit programs the keyboard to support the mM
Personal Computer keyboard interface. In this
mode the controller does not check parity or
convert scan codes.
Bit 4 Disable Keyboard-Writing a 1 to this bit disables
the keyboard interface by driving the 'clock' line
low. Data is not sent or received.
Bit 3 Not used.
Bit 2 System Flag-The value written to this bit is placed
in the system flag bit of the controller's status
register.
Bit 1 Reserved-Should be written as a O.
Bit 0 Enable Output-Buffer-Full Interrupt-Writing a 1
to this bit causes the controller to generate an
interrupt when it places data into its output buffer.
AA
Self-Test-This commands the controller to perform
internal diagnostic tests. A hex 55 is placed in the output
buffer if no errors are detected.
AD
Interface Test-This commands the controller to test the
'keyboard clock' and 'keyboard data' lines. The test
result is placed in the output buffer as follows:
00 No error detected.
01 The 'keyboard clock' line is stuck low.
02 The' keyboard clock' line is stuck high.
03 The 'keyboard data' line is stuck low.
04 The' keyboard data' line is stuck high.
AD
Disable Keyboard Feature-This command sets bit 4 of
the controller's command byte. This disables the keyboard
interface by driving the clock line low. Data will not be
sent or received.
AE
Enable Keyboard Interface-This command clears bit 4 of
the command byte, which releases the keyboard interface.
System Board
1-57
CO
Read Input Port-This commands the controller to read its
input port and place the data in its output buffer .. This
command should be used only if the output buffer is
empty.
DO
Read Output Port-This command causes the controller to
read its output port and place the data in its output buffer.
This command should be issued only if the output buffer is
empty.
Dl
Write Output Port-The next byte of data written to I/O
address hex 60 is placed in the controller's output port.
Note: Bit 0 of the controller's output port is
connected to System Reset. This bit should not be
written low as it will reset the microprocessor.
EO
Read Test Inputs-This command causes the controller to
read its TO and Tl inputs. This data is placed in the output
buffer. Data bit 0 represents TO, and data bit 1 represents
Tl.
FO-FF Pulse Output Port-Bits 0 through 3 of the controller's
output port may be pulsed low for approximately 6
microseconds. Bits 0 through 3 of this command indicate
which bits are to be pulsed. A 0 indicates that the bit
should be pulsed, and a 1 indicates the bit should not be
modified.
Note: Bit 0 of the controller's output port is
connected to System Reset. Pulsing this bit resets
the microprocessor.
I/O Ports
The keyboard controller has two I/O ports, one assigned for
input and the other for output. Two test inputs are used by the
controller to read the state of the keyboard's' clock' (TO) and
'data' (Tl) lines.
The following figures show bit definitions for the input and output
ports, and the test-inputs.
1-58
System Board
Bit 7
Bit 6
Bit 5
Bit
Bit
Bit
Bit
Bit
4
3
2
1
0
Always set to 1
Display switch - Primary display attached to:
o = Color/Graphics adapter
1 = Monochrome adapter
Manufacturing Jumper
o = Manufacturing jumper installed
1 = Jumper not installed
Always set to 1
Reserved
Reserved
Reserved
Reserved
Input.Port Bit Definitions
Bt 7
Bt 6
Bt 5
Bt 4
Bt 3
Bt 2
Btl
Bt 0
Keyboard data (output)
Keyboard clock (output)
Input buffer empty
Output buffer full
Reserved
Reserved
Gate A20
System reset
Output-Port Bit Definitions
Note: In the real address mode Gate A20 prevents
address line A20 from being set, maintaining compatibility
with the 8088 microprocessor. When in the protected
(virtual address) mode, Gate A20 allows addressing above
the 1M range.
Keyboard data (input)
Keyboard clock (input)
Test-Input Bit Definitions
Real-Time Clock CMOS RAM Information
The RTC (Real-time Clock) CMOS RAM chip (Motorola
MC146818A) contains the real-time clock and 64 bytes of
CMOS RAM. The internal clock circuitry uses 14 bytes of this
RAM, and the rest is allocated to configuration information. The
following figure shows the CMOS RAM addresses.
System Board
1-59
Addresses
00 - OD
OE
OF
10
11
12
II15
16
17
18
19
lA
lB - 2D
2E - 2F
30
31
32
33
34 - 3F
Description
* Real-time clock information
status byte
* Shutdown status byte
* Diagnostic
Diskette drive type byte - drives A and B
Reserved
Fixed disk types byte - drives C and D
Reserved
Equipment byte
Low base memory byte
High base memory byte
Low expansion memory byte
High expansion memory byte
Disk C extended byte
Disk D extended byte
Reserved
2-byte CMOS checksum
* Low expansion memory byte
* High expansion memory byte
* Date century byte
* Information flags (set during power on)
Reserved
CMOS RAM Internal Address Map
* These bytes are not included in the checksum calculation and
are not part of the configuration record.
Real-Time Clock Information
The following figure describes real-time clock bytes and specifies
their addresses.
Byte
0
1
2
l5
6
7
8
9
10
11
12
13
Function
Address
Seconds
Second Alarm
Minutes
Minute Alarm
Hours
Hour Alarm
Day of Week
Date of Month
Month
Year
Status Register
Status Register
Status Register
Status Register
00
01
02
03
04
05
06
07
08
09
OA
OB
OC
OD
A
B
C
D
Real-Time Clock Internal Addresses 00 - 00
1-60
System Board
Note: The setup program initializes registers A, B, C,
and D when the time and date are set. Also Interrupt 1A
is the BIOS interface to read/set the time alld date. It
initializes the status bytes the same as the Setup program.
Status Register A
Bit 7
Update in Progress (UIP)-A 1 indicates the time
update cycle is in progress. A 0 indicates the
current date and time are available to read.
Bit 6-Bit 4
22-Stage Divider (DV2 through DVO)-These
three divider-selection bits identify which
time-base frequency is being used. The system
initializes the stage divider to 010, which selects a
32.768-kHz time base.
.
Bit 3-Bit 0
Rate Selection Bits (RS3 through RSO )-These
bits allow the selection of a divider output
frequency. The system iIlitializes the rate selection
bits to 0110, which selects a 1.024-kliz square
.
wave output frequency and a '
976.562-microsecond periodic interrupt rate.
Status Register B
Bit 7
Set-A 0 updates the cycle normally by advancing
the counts at one-per-s~cond. A 1 aborts any
update cycle in progress and the program can
initialize the 14 time-bytes without any further
updates occurring until a 0 iswritt~n to this bit.
Bit 6
Periodic Interrupt Enable (PID)-This bit is a
read/write bit that allows an interrupt to occur at
a rate specified by the rateancl divider bits in
register A. A 1 enabl~s all interrupt, and a 0
disables it. The syste:p:l initiafzes this bit to O.
Bit 5
Alarm Interrupt Enable (AIE)-A. 1 enables the
alarm interrupt, and a 0 disables it. The system
.
initializes this bit to o.
S)'st~m
Board
1-61
Bit 4
Update-Ended Interrupt Enabled (UIE)-A 1
enables the update-ended interrupt, and a 0
disables it. The system initializes this bit to o.
Bit 3
Square Wave Enabled (SQWE)-A 1 enables the
the square-wave frequency as set by the rate
selection bits in register A, and a 0 disables the
square wave. The system initializes this bit to O.
Bit 2
Date Mode (DM)-This bit indicates whether the
time and date calendar updates are to use binary or
binary coded decimal (BCD) formats. A 1
indicates binary, and a 0 indicates BCD. The
system initializes this bit to O.
Bit 1
24/ 12-This bit indicates whether the hours byte
is in the 24-hour or 12-hour mode. A 1 indicates
the 24-hour mode and a 0 indicates the 12-hour
mode. The system initializes this bit to 1.
Bit 0
Daylight Savings Enabled (DSE)-A 1 enables
daylight savings and a 0 disables daylight savings
(standard time). The system initializes this bit
to O.
Status Register C
Bit 7-Bit 4
IRQF, PF, AF, UF-These flag bits are read-only
and are affected when the AlE, PIE, and UIE bits
in register B are set to 1.
Bit 3-Bit 0
Reserved-Should be written as a O.
Status Register D
Bit 7
1-62
Valid RAM Bit (VRB)-This bit is read-only and
indicates the status of the power-sense pin
(battery level). A 1 indicates battery power to the
real-time clock is good. A 0 indicates the battery
is dead, so RAM is not valid.
System Board
Bits 6-Bit 0
Reserved-Should be written as a O.
CMOS RAM Configuration Information
The following lists show bit definitions for the CMOS
configuration bytes (addresses hex OE - 3F).
Diagnostic Status Byte (Hex OE)
Bit 7
Power status of the real-time clock chip-A 0
indicates that the chip has not lost power (battery
good), and a 1 indicates that the chip lost power
(battery bad).
Bit 6
Configuration Record (Checksum Status
Indicator)-A 0 indicates that checksum is good,
and a 1 indicates it is bad.
Bit 5
Incorrect Configuration Information-This is a
check, at power-on time, of the equipment byte of
the configuration record. A 0 indicates that the
configuration information is valid, and a 1
indicates it is invalid. Power-on checks require:
•
At least one diskette drive to be installed (bit 0
of the equipment byte set to 1).
•
The primary display adapter setting in
configuration matches the system board's
display switch setting and the actual display
adapter hardware in the system.
Bit 4
Memory Size Comparison-A 0 indicates that the
power-on check determined the same memory size
as in the configuration record, and a 1 indicates
the memory size is different.
Bit 3
Fixed Disk Adapter/Drive C Initialization
Status-A 0 indicates that the adapter and drive
are functioning properly and the system can
attempt "boot up." A 1 indicates that the adapter
System Board
1-63
and/ or drive C failed initialization, which prevents
the system from attempting to "boot up."
Bit 2
Time Status Indicator (POST validity check)- A
o indicates that the time is valid, and a 1 indicates
that it is invalid.
Bit 1-Bit 0
Reserved
Shutdown Status Byte (Hex OF)
The bits in this byte are defined by the power on diagnostics. For
more information about this byte, refer to "System BIOS".
Diskette Drive Type Byte (Hex 10)
Bit 7-Bit 4
Type of first diskette drive installed:
0000
0001
0010
0011
No drive is present.
Double Sided Diskette Drive (48 TPI).
High Capacity Diskette Drive (96 TPI).
720KB Diskette Drive (3.5 inch).
Note:
Bit 3-Bit 0
0100 through 1111 are reserved.
Type of second diskette drive installed:
0000
0001
0010
0011
No drive is present.
Double Sided Diskette Drive (48 TPI).
High Capacity Diskette Drive (96 TPI).
720KB Diskette Drive (3.5 inch).
Note:
0100 through 1111 are reserved.
Hex address 11 contains a reserved byte.
Fixed Disk Type Byte (Hex 12)
1-64
System Board
Bit 7-Bit 4
Defines the type of fixed disk drive installed (drive
C):
0000 No fixed disk drive is present.
0001 Define type 1 through type 14 as shown
to
in the following table (also see BIOS
1110 listing at label FD_TBL)
1111 Type 16 through 255. See "Drive C
Extended Byte (Hex 19)" on page 1-68.
Bit 3-Bit 0
Defines the type of second fixed disk drive
installed (drive D):
0000 No fixed disk drive is present.
0001 Define type 1 through type 14 as shown
to
in the following table (also see BIOS
1110 listing at label FD_TBL)
1111 Type 16 through 255. See "Drive D
Extended Byte (Hex lA)" on page 1-68.
The following table shows the BIOS fixed disk parameters.
Type
Cylinders
Heads
Wr i te
Precomp
Landing
Zone
1
2
3
4
5
6
7
8
9
10
11
12
13
14
306
615
615
940
940
615
462
733
900
820
855
855
306
733
4
4
6
8
6
4
8
5
15
3
5
7
8
7
128
300
300
512
512
None
256
None
None
None
None
None
128
None
305
615
615
940
940
615
511
733
901
820
855
855
319
733
15
Extended Parameters (hex 19 and lA)
BIOS Fixed Disk Parameters
System Board
1-65
Hex address 13 contains a reserved byte.
Equipment Byte (Hex 14)
Bit 7-Bit 6
Indicates the number of diskette drives installed:
00
01
10
11
Bit S-Bit 4
1 drive
2 drives
Reserved
Reserved
Primary display
00 Primary display is attached to an adapter that
has its own BIOS, such as the Enhanced
Graphics Adapter
01 Primary display is in the 40-column mode and
attached to the Color/Graphics Monitor
Adapter.
10 Primary display is in the 80-column mode and
attached to the Color/Graphics Monitor
Adapter.
11 Primary display is attached to the
Monochrome Display and Printer Adapter.
Bit 3-Bit 2
Not used.
Bit 1
Math Coprocessor presence bit:
o
Math Coprocessor not installed
1 Math Coprocessor installed
Bit 0
Diskette drive presence bit:
o
Diskette drive not installed
1 Diskette drive installed
1-66
System Board
Note: The equipment byte defines basic equipment in the
system for power-on diagnostics.
Low and High Base Memory Bytes (Hex 15 and 16)
Bit 7-Bit 0
Address hex 15-Low-byte base size
Bit 7-Bit 0
Address hex 16-High-byte base size
Valid Sizes:
0200H 512K-system board RAM
0280H 640K-system board RAM.
Low and High Expansion Memory Bytes (Hex 17 and 18)
Bit 7-Bit 0
Address hex 17-Low-byte expansion size
Bit 7-Bit 0
Address hex 18-High-byte expansion size
Valid Sizes:
0200H
0400H
0600H
through
3COOH
512K-Expansion Memory
1024K-Expansion Memory
1536K-Expansion Memory
15360K-Expansion Memory (15M
maximum).
System Board
1-67
Drive C Extended Byte (Hex 19)
Bit 7-Bit 0
Defines the type of first fixed disk drive installed
(drive C):
00000000 through 00001111 are reserved.
00010000 to 11111111 define type 16 through
255 as shown in the following table (see BIOS
listing at label FD_TBL).
Drive D Extended Byte (Hex lA)
Bit 7-Bit 0
Defines the type of second fixed disk drive
installed (drive D):
00000000 through 00001111 are reserved.
00010000 to 11111111 define type 16 through
255 as shown in the following table (see BIOS
listing at label FD_TBL).
The following table shows the BIOS fixed disk parameters for
fixed disk drive types 16 through 24.
Note:
Types 25 through 255 are reserved.
Type
Cyl inders
Heads
16
17
18
19
20
21
22
23
24
612
977
977
1024
733
733
733
306
612
4
5
7
7
5
7
5
4
4
Wr ite
Precomp
Landing
Zone
All Cyl inders
663
977
977
1023
732
732
733
336
663
300
None
512
300
300
300
None
305
25
Reserved
255
Reserved
BIOS Fixed Disk Parameters (Extended)
1-68
System Board
Hex addresses IB through 2D are reserved.
Checksum (Hex 2E and 2F)
Bit 7-Bit 0
Address hex 2E-High byte of checksum
Bit 7-Bit 0
Address hex 2F-Low byte of checksum
Note:
Checksum is calculated on addresses hex 10-2D.
Low and High Expansion Memory Bytes (Hex 30 and 31)
Bit 7-Bit 0
Address hex 30-Low-byte expansion size
Bit 7-Bit 0
Address hex 31-High-byte expansion size
Valid Sizes:
0200H 512K-Expansion Memory
0400H 1024K-Expansion Memory
0600H 1536K-Expansion Memory
through
3COOH 15360K-Expansion Memory (15M
maximum).
Note: These bytes reflect the total expansion memory
above the 1M address space as determined at power-on
time. This expansion memory size can be determined
through system interrupt 15 (see the BIOS listing). The
base memory at power-on time is determined through the
system memory-size-determine interrupt (hex 12).
Date Century Byte (Hex 32)
Bit 7-Bit 0
BCD value for the century (BIOS interface to read
and set).
System Board
1-69
Information Flag (Hex 33)
Bit 7
When set, this bit indicates that the top 128K of
base memory is installed.
Bit 6
This bit is set to instruct the Setup utility to put
out a first user message after initial setup.
Bit 5-Bit 0
Reserved
Hex addresses 34 through 3F are reserved.
110 Operations
Writing to RTC CMOS RAM involves two steps:
1. OUT to port hex 70 with the internal CMOS address. Bits
00 - 05 contain the required address.
Note: Bits 06 and 07 do not go to RTC CMOS
RAM. 06 is a "don't care" bit. 07 is the value of the
NMI mask: writing a 1 to 07 disables NMI; writing a
o to 07 enables NMI.
2. OUT to port hex 71 with the data to be written.
Reading CMOS RAM also requires two steps:
1. OUT to port hex 70 with the internal CMOS address. Bits
00 - 05 contain the required address.
Note: Bits D6 and 07 do not go to RTC CMOS
RAM. 06 is a "don't care" bit. 07 is the value of the
NMI mask: writing a 1 to 07 disables NMI; writing a
o to 07 enables NMI.
2. IN from port hex 71, and the data read is returned in the AL
register.
1-70
System Board
Note: Execute the steps in the order shown to ensure
acknowledgement of the MC146818A Standby lead during
system power-downs.
System Board
1-71
Specifications
System Uhlt
Size
•
Length: 500 millimeters (19.6 inches)
•
Depth: 410 millimeters (16.1 inches)
•
Height: 142 millimeters (5.5 inches)
Weight
•
12.7 kilograms (28 pounds)
Power Cables
•
Length: 1.8 meters (6 feet)
Environment
•
•
•
Air Temperature
-
System On: 15;6 to 32.2 degrees C (60 to 90 degrees F)
-
System Off: 10 to 43 degrees C (50 to 110 degrees F)
Wet BUlb Temperature
-
System On: 22.8 degrees C (73 degrees F)
-
System Off: 26.7 degrees C (80 degrees F)
Humidity
-
1-72
System On: 8 % to 80%
System Board
•
System Off: 20% to 80%
Altitude
-
Maximum altitude: 2545.1 meters (8350 feet)
Heat Output
•
824 British Thermal Units (BTU) per hour
Noise Level
•
Operating (without display or printer) - 46 decibels (dba)
maximum noise level.
Electrical
•
Range 1 (57-63 Hz)
Nominal: 115 Vac
Minimum: 90 Vac
Maximum: 137 Vac
•
Range 2 (47-53 Hz)
Nominal: 230 Vac
•
-
Minimum: 180 Vac
-
Maximum: 265 Vac
Lithium Battery
-
6.0Vdc
-
1 Ampere/Hour Capacity
-
UL Approved.
System Board
1-73
Connectors
The system board has the following additional connectors:
•
One power supply connector (Pt)
•
Battery connector (P2)
•
Speaker connector (P3)
•
Keyboard connector (J9).
The pin assignments for the system board connector (P 1) and the
power supply connectors P8 and P9, are as follows. Beginning at
the rear of the system, the pins on the system board connector are
numbered 1 through 12. Power supply connector P8 attaches to
system board connector PI, pins 1 through 6. P9 connects to PI,
pins 7 through 12.
System Board
Connector
PI
Pin
Assignments
1
2
3
6
Power Good
+5 Vdc
+12 Vdc
-12 Vdc
Ground
Ground
7
8
9
10
11
12
Ground
Ground
-5 Vdc
+5 Vdc
+5 Vdc
+5 Vdc
4
5
Power Supply
Connector
p8
Pin
1
2
3
4
5
6
P9
1
2
3
4
5
6
System Board Connector (P1) to Power Supply Connectors (P8
and P9)
1-74
System Board
The battery connector, P2, is a four-pin, keyed, Berg strip. The
pins are numbered 1 through 4 from the rear of the system. The
pin assignments are:
Pin
Assignments
1
2
3
Z.
+6 Vdc
Key
Ground
Ground
Battery Connector (P2)
The speaker connector, P3, is a four-pin, keyed, Berg strip. The
pins are numbered 1 through 4 from the rear of the system. The
pin assignments are:
Pin
Function
1
2
Data out
Key
Ground
+5 Vdc
3
Z.
Speaker Connector (P3)
The keyboard connector, J9, is a five-pin, 90-degree Printed
Circuit Board (PCB) mounting, DIN connector. For pin
numbering, see the "Keyboard" Section. The pin assignments
are:
Pin
Assignments
1
2
Keyboard Clock
Keyboard Data
Reserved
Ground
+5 Vdc
3
Z.
5
Keyboard Connector (J9)
System Board
1-75
The following figure shows the layout of the system board.
Rear Panel
Memory Module Packages
-
~
-
-
= =~ =
~
== ==
~
1-76
=nI
~
r--
frnii==:-+- Display Switch
!::::;,
lIT
I~
80286
80287
Processor
Math Co· Processor
System Board
Logic Diagrams
N'" ...........................................;..;.;.; .. ; :
wi";';';';';';
.;0;
oj";
~
-
N
N
..
~
"
.,
. ...........
::~
.,
...o
"''''''''",;,,'';;''11 i
.", ... ",mm~
•• '" 'I 5l 'I:rl: :1'1:: :I~~~~~~~
i~~!1
!~ aW .!~III!!
"
J~..
L'iH
~, ,~
System Board
1-77
.~
'¥~N'-+++++--j-t?Jt-,
I·
~"'l"M"I-'-+----"M"!"I"'m
!!~!I~~~!
lillil5liiUillillillil
;!i~;!i~~!;l~~
N
N
....o
N
t
CI)
.J:
~
...ca
"tl
o
IX!
E
~
~
1-78
Sy~teDl
Board
:
':l
;~~~~;
if---
I
i
.'
~j~~'- - -+>: ;:- L-'+ -+-+- -~-W-U- Ji
I
~+.wrc,"
,,5;;! G"
I
I
"
"
System Board
1-79
~
1;
11
i
Ii
:
"'
1-80
System Board
~~
~i
.,
~~~
~~
N
...
N
0
In
...
CIl
CIl
.c
~
.
~~
"C
I'll
0
al
E
CIl
...
III
>
CI)
.............. :e
System Board
1-81
.,
1-82
System Board
ll--
I----
-
f----I-
System Board
1-83
i
4++-1--1----
1;;i
.
1-84
System Board
i
L
.
System Board
1-85
~
N
N
....0
0
....
...
CII
CII
.c
~
.
't:I
1\1
0
III
...E
CII
II>
>
CI.I
1-86
System Board
~
~~
r
~
System Board
1-87
0;:;
0;:;0;:;0;:;0;:;0;:;
~ ~~~~~'!i
~~~~~';!';!.;
!~!!!:!.!:~
jjjjjjj:~",
1-88
System Board
:
..
~
:
~~'!!~:! '!! j
OJ
·.
~'!:'!!~ :l
!:; ~!:O; ..
~~;;:;:;;:;
;:;;:
§":I:';' ;:1::'1:"
~Sl;'~~:1~~
~dJ
Y
It
I
System Board
1-89
)IJIJIJIJIJ
'---------;
~
4
ru1
~
:gi~~~'
o
.~
;!l
g; "';:
5
c::;u.. 1'5"
';l
I'iin~Iil!il~g:
~~,"E ::~':l:::'!1~':<'l1
1-90
System Board
I.~.~~
r-
System Board
1-91
~!~!!
--rT"· :
Iic
.
~
"
~
,-
,.~.
~ H~-+
~
. ,~~
~
~~
-
0
~
-
1-92
System Board
~
~
~)
0
~
~~~§
~
';","1'::
§3§§ :!:.,"'S
~nnu~ ~~l:! ~
i
~
i'iN ~
~5g ~
ilililliilill
::::-;:;"'
................
"""'!:l::
...
-;
"
!
,-
Ii
'l'~
~
-JbHI
~~
~~
"~
"
System Board
1-93
~:; ~~'!l~'!'!l ~'!l':l
.,;;: '!l'tl'tl~~'S ~~~
,:~--, i,i::iii ;;:.; :"ll ;:im:::
1-94
System Board
"n i~" i ~i! ,. ;i:i""
:1'.;; Ii m~
;~.
..
'""' ... .,"'" "''''
N
!
r-1!t.
~
!
~~,
.
l:~~~• • •_
'" N '" N OJ NN
.
...
0
~i, ~
.
,i ~
..
~
~
"
1l
~
~~ ,
~
!
f
System Board
1-97
1-98
System Board
SECTION 2. COPROCESSOR
Description ................................... 2-3
Programming Interface .......................... 2-3
Hardware Interface ............................. 2-4
Coprocessor
2-1
Notes:
2-2
Coprocessor
Description
The Math Coprocessor (80287) enables the IBM Personal
Computer XT Model 286 to perform high-speed arithmetic,
logarithmic functions, and trigonometric operations.
The coprocessor works in parallel with the microprocessor. The
parallel operation decreases operating time by allowing the
coprocessor to do mathematical calculations while the
microprocessor continues to do other functions.
The coprocessor works with seven numeric data types, which are
divided into the following three classes:
•
Binary integers (3 types)
•
Decimal integers (1 type)
•
Real numbers (3 types).
Programming Interface
The coprocessor offers extended data types, registers, and
instructions to the microprocessor.
.
The coprocessor has eight 80-bit registers, which provide the
equivalent capacity of forty 16-bit registers. This register space
allows constants and temporary results to be held in registers
during calculations, thus reducing memory access and improving
speed as well as bus availability. The register space can be used as
a stack or as a fixed register set. When used as a stack, only the
top two stack elements are operated on.
Coprocessor
2-3
The following figure shows representations of large and small
numbers in each data type.
Data Type
Bits
Word Integer
16
Significant
Digits
(Decimal) Approximate Range (Decimal)
4
-32,768
~
-2xl0 9 ~
X ~ +32,767
X ~ +2xl0 9
Short Integer
32
9
Long Integer
64
18
Packed Decimal
80
18
32
6-7
64
15-16
4. 19x10-307 ~ IXI
~
1.67xl0308
80
19
3 .4xl0-4932 ~ IXI
~
1.2xl04932
Short Real
Long Real
*
*
Temporary Real
-9xl0 18 ~ X ~ +9xl0 18
-9 .. 99
~
X ~ +9 .. 99 (18 digits)
8.43xl0-37 ~ IXI ~ 3.37xl038
Data Types
* The Short Real and Long Real data types correspond to the
single and double precision data types.
Hardware Interface
The coprocessor uses a 4.77 MHz clock (generated by a 14.318
MHz clock generator divided by three). The coprocessor is wired
so that it functions as an I/O device through I/O port addresses
hex 00F8, OOFA, and OOFC. The microprocessor sends OP codes
and operands through these I/O ports. The microprocessor also
receives and stores results through the same I/O ports. The
coprocessor's 'busy' signal informs the microprocessor that it is
executing; the microprocessor's Wait instruction forces the
microprocessor to wait until the coprocessor is finished executing.
The coprocessor detects six different exception conditions that
can occur during instruction execution. If the appropriate
exception mask within the coprocessor is not set, the coprocessor
sets its error signal. This error signal generates a hardware
interrupt (interrupt 13) and causes the 'busy' signal to the
coprocessor to be held in the busy state. The 'busy' signal may
be cleared by an 8-bit I/O Write command to address hex FO
with DO through D7 equal to o.
The power-on self-test code in the system ROM enables IRQ 13
and sets up its vector to point to a routine in ROM. The ROM
routine clears the 'busy' signal's latch and then transfers control
2-4
Coprocessor
to the address pointed to by the NMI interrupt vector. This
allows code written for any IBM Personal Computer to work on
an IBM Personal Computer XT Model 286. The NMI interrupt
handler should read the coprocessor's status to determine if the
NMI was caused by the coprocessor. If the interrupt was not
generated by the coprocessor, control should be passed to the
original NMI interrupt handler.
The coprocessor has two operating modes similar to the two
modes of the microprocessor. When reset by a power-on reset,
system reset, or an I/O write operation to port hex OOFt, the
coprocessor is in the real address mode. This mode is compatible
with the 8087 Math Coprocessor used in other IBM Personal
Computers. The coprocessor can be placed in the protected mode
by executing the SETPM ESC instruction. It can be placed back
in the real mode by an I/O write operation to port hex OOFt, with
D7 through DO equal to O.
The coprocessor instruction extensions to the microprocessor can
be found in Section 6 of this manual.
Detailed information for the internal functions of the Intel 80287
Coprocessor can b~ found in books listed in the bibliography.
Coprocessor
2-5
Notes:
2-6
Coprocessor
SECTION 3. POWER SUPPLY
Inputs .......................................
Outputs ......................................
DC Output Protection ..........................
Output Voltage Sequencing ......................
No-Load Operation ............................
Power-Good Signal .............................
Connectors ...................................
Power Supply
3-3
3-3
3-4
3-4
3-4
3-4
3-6
3-1
Notes:
3-2
Power Supply
The system power supply is located inside the system unit and
provides power for the system board, the adapters, the diskette
drives, the fixed disk drive, the keyboard, and the IBM
Monochrome Display.
Inputs
The power supply can operate at 110 Vac, 4.6 A or 220/240
Vac, 2.3 A at frequencies of either 60 ±3 Hz or 50 ±3 Hz. The
power supply automatically adjusts to input voltages of 110 Vac
or 220 Vac. The following figure shows the input requirements.
Range
Voltage (Vac)
Minimum
115 Vac
230 Vac
90
Current (Amperes)
Maximum 4.6
Maximum 137
Minimum 180
Maximum 265
Maximum 2.3
Input Requirements
Outputs
The power supply provides +5, -5, + 12, and -12 Vdc. The
following figure shows the load current and regulation tolerance
for these voltages. The power to the IBM Monochrome Display
display is controlled by the power supply.
Warning: The voltage provided to the monochrome display from
the power supply is the same as the input line voltage to the
power supply. Ensure that the monochrome display is the correct
model for the input line voltage.
Nominal
Output
+5
-5
+12
-12
Vdc
Vdc
Vdc
Vdc
Load Current (A)
Minimum
Maximum
4.0
0.0
1.0
0.0
20.0
0.3
4.2
0.25
Regulation
Tolerance
+5% to -4%
+10% to -8%
+5% to -4%
+10% to -9%
DC Load Requirements
Power Supply
3-3
DC Output Protection
An overcurrent condition will not damage the power supply.
Output Voltage Sequencing
Under normal conditions, the output voltage levels track within
50 milliseconds of each other when power is applied to, or
removed from the power supply, provided at least minimum
loading is present.
No-Load Operation
No damage or hazardous conditions occur when primary power is
applied with no load on any output level. In such cases, the
power supply may switch off, and a power-on reset will be
required. The power supply requires a minimum load for proper
operation.
Power-Good Signal
The power supply provides a 'power-good' signal to indicate
proper operation of the power supply.
When the supply is switched off for a minimum of one second and
then switched on, the 'power-good' signal is generated, assuming
there are no problems. This signal is a logical AND of the dc
output-voltage sense signal and the ac input-voltage sense signal.
The 'power-good' signal is also a TTL-compatible high level for
normal operation, and a low level for fault conditions. The ac fail
signal causes 'power-good' to go to a low level at least one
millisecond before any output voltage falls below the regulation
limits. The operating point used as a reference for measuring the
one millisecond is normal operation at minimum line voltage and
maximum load.
The dc output-voltage sense signal holds the 'power-good' signal
at a low level when power is switched on until all output voltages
have reached their minimum sense levels. The 'power-good'
signal has a turn-on delay of at least 100 milliseconds but not
3-4
Power Supply
longer than 500 milliseconds and is capable of sourcing 2
milliamperes and sinking 10 milliamperes.
The following figure shows the minimum sense levels for the
output voltages.
Level (Vdc)
+5
-5
+12
-12
Minimum (Vdc)
+4.5
-4.3
+10.8
-10.2
Sense Level
Power Supply
3-5
Connectors
The following figure shows the pin assignments for the
power-supply output connectors.
Load Point
*
Voltage (Vdc)
P8-l
P8-2
P8-3
p8-4
P8-5
p8-6
Power Good
+5
+12
-12
Ground
Ground
P9-1
P9-2
P9-3
P9-4
P9-5
P9-6
Ground
Ground
-5
+5
+5
+5
Pl0-l
Pl0-2
Pl0-3
Pl0-4
+12
Ground
Ground
+5
P11-1
P11-2
P11-3
P11-4
+12
Ground
Ground
+5
*
see "Power-Good Signal"
Power Supply Output Connectors
3-6
Power Supply
SECTION 4. KEYBOARD
Description ................................... 4-3
Cabling ................................ 4-3
Sequencing Key-Code Scanning ............. 4-4
Keyboard Buffer ......................... 4-4
Keys .................................. 4-4
Power-On Routine .......................... 4-5
Power-On Reset ......................... 4-5
Basic Assurance Test ..................... 4-5
Commands from the System ................... 4-6
Default Disable (Hex F5) .................. 4-7
Echo (Hex EE) .......................... 4-7
Enable (Hex F4) ......................... 4-7
Invalid Command (Hex EF and Fl) .......... 4-7
Read ID (Hex F2) ....................... 4-7
Resend (Hex FE) ........................ 4-8
Reset (Hex FF) ......................... 4-8
Select Alternate Scan Codes (Hex FO) ........ 4-8
Set All Keys (Hex F7, F8, F9, FA) .......... 4-9
Set Default (Hex F6) ..................... 4-9
Set Key Type (Hex FB, FC, FD) ............ 4-9
Set/Reset Status Indicators (Hex ED) ....... 4-10
Set Typematic Rate/Delay (Hex F3) ........ 4-11
Commands to the System .................... 4-13
Acknowledge (Hex FA) .................. 4-13
BAT Completion Code (Hex AA) .......... 4-13
BAT Failure Code (Hex FC) .............. 4-13
Echo (Hex EE) ......................... 4-13
Keyboard ID (Hex 83AB) ................ 4-14
Key Detection Error (Hex 00 or FF) ........ 4-14
Overrun (Hex 00 or FF) .................. 4-14
Resend (Hex FE) ....................... 4-14
Keyboard Scan Codes ....................... 4-15
Scan Code Set 1 ........................ 4-16
Scan Code Set 2 ........................ 4-20
Scan Code Set 3 ........................ 4-24
Clock and Data Signals ...................... 4-27
Data Stream ........................... 4-27
Keyboard
4-1
Keyboard Data Output ...................
Keyboard Data Input ....................
Keyboard Encoding and Usage ................
Character Codes ........................
Extended Functions .....................
Shift States ............................
Special Handling ........................
Keyboard Layouts .........................
French Keyboard .......................
German Keyboard ......................
Italian Keyboard ........................
Spanish Keyboard .......................
u.K. English Keyboard ...................
U.S. English Keyboard ...................
Specifications .............................
Power Requirements .....................
Size ..................................
Weight ...............................
Logic Diagram ............................
4-2
Keyboard
4-28
4-29
4-30
4-30
4-34
4-36
4-38
4-40
4-41
4-42
4-43
4-44
4-45
4-46
4-47
4-47
4-47
4-47
4-48
Description
The keyboard has 101 keys (102 in countries outside the U. S.).
At system power-on, the keyboard monitors the signals on the
'clock' and 'data' lines and establishes its line protocol. A
bidirectional serial interface in the keyboard converts the 'clock'
and 'data' signals and sends this information to and from the
keyboard through the keyboard cable.
Cabling
The keyboard cable connects to the system with a five-pin DIN
connector, and to the keyboard with a six-position SDL
connector. The following table shows the pin configuration and
signal assignments.
///\~
ABCDEF
DIN Connector
DIN Connector
Pins
SOL Connector
Pins
1
0
2
3
B
F
C
5
E
4
Shield
A
Shield
SDL Connector
Signal Name
Signal Type
+KBD ClK
+KBD DATA
Reserved
Ground
+5.0 Vdc
Not used
Frame Ground
Input/Output
Input/Output
Ground
Power
Keyboard
4-3
Sequencing Key-Code Scanning
The keyboard detects all keys pressed, and sends each scan code
in the correct sequence. When not serviced by the system, the
keyboard stores the scan codes in its buffer.
Keyboard Buffer
A 16-byte first-in-first-out (FIFO) buffer in the keyboard stores
the scan codes until the system is ready to receive them.
A buffer-overrun condition occurs when more than 16 bytes are
placed in the keyboard buffer. An overrun code replaces the 17th
byte. If more keys are pressed before the system allows keyboard
output, the additional data is lost.
When the keyboard is allowed to send data, the bytes in the
buffer will be sent as in normal operation, and new data entered is
detected and sent. Response codes do not occupy a buffer
position.
If keystrokes generate a multiple-byte sequence, the entire
sequence must fit into the available buffer space or the keystroke
is discarded and a buffer-overrun condition occurs.
Keys
With the exception of the Pause key, all keys are make/break.
The make scan code of a key is sent to the keyboard controller
when the key is pressed. When the key is released, its break scan
code is sent.
Additionally, except for the Pause key, all keys are typematic.
When a key is pressed and held down, the keyboard sends the
make code for that key, delays 500 milliseconds ± 20%, and
begins sending a make code for that key at a rate of 10.9
characters per second ± 20%. The typematic rate and delay can
be modified [see "Set Typematic Rate/Delay (Hex F3)" on
page 4-11].
If two or more keys are held down, only the last key pressed
repeats at the typematic rate. Typematic operation stops when
4-4
Keyboard
the last key pressed is released, even if other keys are still held
down. If a key is pressed and held down while keyboard
transmission is inhibited, only the first make code is stored in the
buffer. This prevents buffer overflow as a result of typematic
action.
Note: Scan code set 3 allows key types to be changed by the
system. See "Scan Code Tables (Set 3)" on page 4-24 for the
default settings. Commands to change the default settings are
listed in "Commands from the System" on page 4-6.
Power-On Routine
The following activities take place when power is first applied to
the keyboard.
Power-On Reset
The keyboard logic generates a 'power-on reset' signal (POR)
when power is first applied to the keyboard. POR occurs a
minimum of 150 milliseconds and a maximum of 2.0 seconds
from the time power is first applied to the keyboard.
Basic Assurance Test
The basic assurance test (BAT) consists of a keyboard processor
test, a checksum of the read-only memory (ROM), and a
random-access memory (RAM) test. During the BAT, activity on
the 'clock' and 'data' lines is ignored. The LEDs are turned on
at the beginning and off at the end of the BAT. The BAT takes a
minimum of 300 milliseconds and a maximum of 500
milliseconds. This is in addition to the time required by the POR.
Upon satisfactory completion of the BAT, a completion code (hex
AA) is sent to the system, and keyboard scanning begins. If a
BAT failure uccurs, the keyboard sends an error code to the
system. The keyboard is then disabled pending command input.
Completion codes are sent between 450 milliseconds and 2.5
seconds after POR, and between 300 and 500 milliseconds after a
Reset command is acknowledged.
Keyboard
4-5
Immediately following POR, the keyboard monitors the signals on
the keyhQard I clock I and I data I lines and sets the line protocol.
Commands from the System
The following table shows the commands that the system may
send and their hexadecimal values.
Command
Set/Reset Status Indicators
Echo
Inva 11 d Command
Select Alternate Scan Codes
1nva 11 d Command
Read ID
Set Typematic Rate/Delay
Enable
Default Disable
Set Default
Set All Keys - Typematic
- Make/Break
- Make
- Typematic/Make/Break
Set Key Type - Typematic
- Make/Break
- Make
Resend
Reset
Hex Value
ED
EE
EF
FO
Fl
F2
F3
F4
F5
F6
F7
Fa
F9
FA
FB
FC
FD
FE
FF
The commands may be sent to the keyboard at any time. The
keyboard will respond within 20 milliseconds, except when
performing the basic assurance test (BAT), or executing a Reset
command.
Note:
Mode 1 will accept only the I reset I command.
The commands are described below, in alphabetic order. They
have different meanings when issued by the keyboard (see
"Commands to the System" on page 4-13).
4-6
Keyboard
Default Disable (Hex F5)
The Default Disable command resets all conditions to the
power-on default state. The keyboard responds with ACK, clears
its output buffer, sets the default key types (scan code set 3
operation only) and typematic rate/delay, and clears the last
typematic key. The keyboard stops scanning, and awaits further
instructions.
Echo (Hex EE)
Echo is a diagnostic aid. When the keyboard receives this
command, it issues a hex EE response and, if the keyboard was
previously enabled, continues scanning.
Enable (Hex F4)
Upon receipt of this cominand, the keyboard responds with ACK,
clears its output buffer, clears the last typematic key, and starts
scanning.
Invalid Command (Hex EF and Fl)
Hex EF and hex Fl are invalid commands and are not supported.
If one of these is sent, the keyboard does not acknowledge the
command, but returns a Resend command and continues in its
prior scanning state. No other activities occur.
Read ID (Hex F2)
This command requests identification information from the
keyboard. The keyboard responds with ACK, discontinues
scanning, and sends the two keyboard ID bytes. The second byte
must follow completion of the first by no more than 500
microseconds. After the output of the second ID byte, the
keyboard resumes scanning.
Keyboard
4-7
Resend (Hex FE)
The system sends this command when it detects an error in any
transmission from the keyboard. It is sent only after a keyboard
transmission and before the system allows the next keyboard
output. When a Resend is received, the keyboard sends the
previous output again (unless the previous output was Resend, in
which case the keyboard sends the last byte before the Resend
command).
Reset (Hex FF)
The system issues a Reset command to start a program reset and a
keyboard internal self test. The keyboard acknowledges the
command with an ACK and ensures the system accepts ACK
before executing the command. The system signals acceptance of
ACK by raising the 'clock' and 'data' lines for a minimum of
500 microseconds. The keyboard is disabled from the time it
receives the Reset command until ACK is accepted, or until
another command is sent that overrides the previous command.
Following acceptance of ACK, the keyboard is re-initialized and
performs the BAT. After returning the completion code, the
keyboard defaults to scan code set 2.
Select Alternate Scan Codes (Hex FO)
This command instructs the keyboard to select one of three sets
of scan codes. The keyboard acknowledges receipt of this
command with ACK, clears both the output buffer and the
typematic key (if one is active). The system then sends the
option byte and the keyboard responds with another ACK. An
option byte value of hex 01 selects scan code set 1, hex 02 selects
set 2, and hex 03 selects set 3.
An option byte value of hex 00 causes the keyboard to
acknowledge with ACK and send a byte telling the system which
scan code set is currently in use.
After establishing the new scan code set, the keyboard returns to
the scanning state it was in before receiving the Select Alternate
Scan Codes command.
4-8
Keyboard
~
Set All Keys (Hex F7, F8, F9, FA)
These commands instruct the keyboard to set all keys to the type
listed below:
Command
Hex Value
F7
Fa
F9
FA
Set
Set
Set
Set
All
All
All
All
Keys
Keys
Keys
Keys
-
Typematic
Make/Break
Make
Typematic/Make/Break
The keyboard responds with ACK, clears its output buffer, sets
all keys to the type indicated by the command, and continues
scanning (if it was previously enabled). Although these
commands can be sent using any scan code set, they affect only
scan code set 3 operation.
Set Default (Hex F6)
The Set Default command resets all conditions to the power-on
default state. The keyboard responds with ACK, clears its output
buffer, sets the default key types (scan code set 3 operation only)
and typematic rate/delay, clears the last typematic key, and
continues scanning.
Set Key Type (Hex FB, Fe, FD)
These commands instruct the keyboard to set individual keys to
the type listed below:
Hex Value
FB
FC
FD
Command
Set Key Type - Typematic
Set Key Type - Make/Break
Set Key Type - Make
The keyboard responds with ACK, clears its output buffer, and
prepares to receive key identification. Key identification is
accomplished by the system identifying each key by its scan code
value as defined in scan code set 3. Only scan code set 3 values
are valid for key identification. The type of each identified key is
set to the value indicated by the command.
Keyboard
4-9
These commands can be sent using any scan code set, but affect
only scan code set 3 operation.
Set/Reset Status Indicators (Hex ED)
Three status indicators on the keyboard- Num Lock, Caps
Lock, and Scroll Lock-are accessible by the system. The
keyboard activates or deactivates these indicators when it receives
a valid command-code sequence from the system. The command
sequence begins with the command byte (hex ED). The keyboard
responds to the command byte with ACK, discontinues scanning,
and waits for the option byte from the system. The bit
assignments for this option byte are as follows:
Bit
0
1
2
3-7
Indicator
Scroll Lock Indicator
Num Lock Indicator
Caps Lock Indicator
Reserved (must be Os)
If a bit for an indicator is set to 1, the indicator is turned on. If a
bit is set to 0, the indicator is turned off.
The keyboard responds to the option byte with ACK, sets the
indicators and, if the keyboard was previously enabled, continues
scanning. The state of the indicators will reflect the bits in the
option byte and can be activated or deactivated in any
combination. If another command is received in place of the
option byte, execution of the Set/Reset Mode Indicators
command is stopped, with no change to the indicator states, and
the new command is processed.
Immediately after power-on, the lights default to the Off state. If
the Set Default and Default Disable commands are received, the
lamps remain in the state they were in before the command was
received.
4-10
Keyboard
Set Typematic Rate/Delay (Hex F3)
The system issues the Set Typematic Rate/Delay command to
change the typematic rate and delay. The keyboard responds to
the command with ACK, stops scanning, and waits for the system
to issue the rate/delay value byte. The keyboard responds to the
rate/delay value byte with another ACK, sets the rate and delay
to the values indicated, and continues scanning (if it was
previously enabled). Bits 6 and 5 indicate the delay, and bits 4, 3,
2, 1, and 0 (the least-significant bit) the rate. Bit 7, the
most-significant bit, is always O. The delay is equal to 1 plus the
binary value of bits 6 and 5, multiplied by 250 milliseconds ±
20%.
The period (interval from one typematic output to the next) is
determined by the following equation:
Period = (8 + A) X (2B) X 0.00417 seconds.
where:
A = binary value of bits 2, 1, and O.
B = binary value of bits 4 and 3.
Keyboard
4-11
The typematic rate (make codes per second) is 1 for each period
and are listed in the following table.
Bit
Typematic
Rate ± 20%
Bit
Typematic
Rate ± 20%
00000
00001
00010
00011
00100
00101
00110
00111
01000
01001
01010
01011
01100
01101
01110
01111
30.0
26.7
24.0
21.8
20.0
18.5
17.1
16.0
15.0
13.3
12.0
10.9
10.0
9.2
8.0
8.0
10000
10001
10010
10011
10100
10101
10110
10111
11000
11001
11010
11011
11100
11101
11110
11111
7.5
6.7
6.0
5.5
5.0
4.6
4.3
4.0
3.7
3.3
3.0
2.7
2.5
2.3
2.1
2.0
The default values for the system keyboard are as follows:
Typematic rate
= 10.9 characters per second
± 20%.
Delay = 500 milliseconds ± 20%.
The execution of this command stops without change to the
existing rate if another command is received instead of the
rate/ delay value byte.
4-12
Keyboard
Commands to the System
The following table shows the commands that the keyboard may
send to the system, and their hexadecimal values.
Command
Key Detection Error/Overrun
Keyboard ID
BAT Completion Code
BAT Failure Code
Echo
Acknowledge (ACK)
Resend
Key Detection Error/Overrun
Hex Value
00 (Code Sets 2 and 3)
83AB
AA
FC
EE
FA
FE
FF (Code Set 1)
The commands the keyboard sends to the system are described
below, in alphabetic order. They have different meanings when
issued by the system (see "Commands from the System" on
page 4-6).
Acknowledge (Hex FA)
The keyboard issues Acknowledge (ACK) to any valid input
other than an Echo or Resend command. If the keyboard is
interrupted while sending ACK, it discards ACK and accepts and
responds to the new command.
BAT Completion Code (Hex AA)
Following satisfactory completion of the BAT, the keyboard
sends hex AA. Any other code indicates a failure of the
keyboard.
BAT Failure Code (Hex FC)
If a BAT fai1ur~ occurs, the keyboard sends this code,
discontinues scanning, and waits for a system response or reset.
Echo (Hex EE)
The keyboard sends this code in response to an Echo command.
Keyboard
4-13
Keyboard ID (Hex 83AB)
The Keyboard ID consists of 2 bytes, hex 83AB. The keyboard
responds to the Read ID with ACK, discontinues scanning, and
sends the 2 ID bytes. The low byte is sent first followed by the
high byte. Following output of Keyboard ID, the keyboard begins
scanning.
Key Detection Error (Hex 00 or FF)
The keyboard sends a key detection error character if conditions
in the keyboard make it impossible to identify a switch closure. If
the keyboard is using scan code set 1, the code is hex FF. For
sets 2 and 3, the code is hex 00.
Overrun (Hex 00 or FF)
An overrun character is placed in the keyboard buffer and
replaces the last code when the buffer capacity has been
exceeded. The code is sent to the system when it reaches the top
of the buffer queue. If the keyboard is using scan code set 1, the
code is hex FF. For sets 2 and 3, the code is hex 00.
Resend (Hex FE)
The keyboard issues a Resend command following receipt of an
invalid input or any input with incorrect parity. If the system
sends nothing to the keyboard, no response is required.
4-14
Keyboard
Keyboard Scan Codes
The following tables list the key numbers of the three scan code
sets and their hexadecimal values. The system defaults to scan set
2, but can be switched to set 1 or set 3 (see "Select Alternate
Scan Codes (Hex FO)" on page 4-8).
Keyboard
4-15
Scan Code Set 1
In scan code set 1, each key is assigned a base scan code and, in
some cases, extra codes to generate artificial shift states in the
system. The typematic scan codes are identical to the base scan
code for each key.
Scan Code Tables (Set 1)
The following keys send the codes as shown, regardless of any
shift states in the keyboard or the system. Refer to "Keyboard
Layouts" beginning on page 4-40 to determine the character
associated with each key number.
Key Number
Make Code
Break Code
29
02
03
04
05
06
07
08
09
OA
OB
A9
82
83
84
85
86
87
88
89
8A
8B
8e
80
8E
8F
90
91
92
93
94
95
96
97
98
99
9A
9B
AB
BA
9E
9F
AO
1
2
3
4
5
6
7
8
9
10
11
12
13
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
*
4-16
oc
*
00
OE
OF
10
11
12
13
14
15
16
17
18
19
lA
lB
2B
3A
lE
lF
20
101-key keyboard only.
Keyboard
I
Key Number
Make Code
Break Code
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
57
58
60
61
62
64
90
91
92
93
96
97
98
99
100
101
102
103
104
105
106
108
110
112
113
114
115
116
117
118
119
21
22
23
24
25
26
27
28
2B
lC
2A
56
2C
20
2E
2F
30
31
32
33
34
35
36
10
38
39
EO 38
EO 10
45
47
4B
4F
48
4c
50
52
37
49
40
51
53
4A
4E
EO lC
01
3B
3C
3D
3E
3F
40
41
42
Al
A2
A3
A4
A5
A6
A7
A8
AB
9C
AA
06
AC
AD
AE
AF
BO
Bl
B2
B3
B4
B5
B6
90
B8
B9
EO B8
EO 90
C5
C7
CB
CF
C8
cc
DO
02
B7
C9
CO
01
03
CA
CE
EO 9C
81
BB
BC
BO
BE
BF
CO
C1
C2
**
**
**
102-key keyboard only.
Keyboard
4-17
Key Number
Make Code
Break Code
120
121
122
123
125
43
44
57
58
46
C3
c4
D7
D8
C6
The remaining keys send a series of codes dependent on the state
of tile various shift keys (Ctrl, Alt, and Shift), and the state of
NUlll Lock (On or Off). Because the base scan code is identical
to that of another key, an extra code (hex EO) has been added to
the pase code to make it unique.
Key
Base Case, or
Shift+Num Lock
Make/Break
75
EO 52
lEO D2
EO 53
lEO D3
EO 4B
lEO CB
EO 47
lEO C7
EO 4F
lEO CF
EO 48
lEO c8
EO 50
lEO DO
EO 49
lEt> C9
EO 51
lEO Dl
EO 4D
lEO CD
~o.
76
79
80
~1
83
84
85
86
89
*
Sh i ft Case
Make/Break
*
EO AA EO 52
lEO D2 EO 2A
EO AA EO 53
lEO D3 EO 2A
EO AA EO 4B
lEO CB EO 2A
EO AA EO 47
lEO C7 EO 2A
EO AA EO 4F
lEO CF EO 2A
EO AA EO 48
lEO c8 EO 2A
EO AA EO 50
lEO DO EO 2A
EO AA EO 49
lEO C9 EO 2A
EO AA EO 51
lEO D1 EO 2A
EO AA EO 4D
lEO CD EO 2A
Num Lock on
Make/Break
EO 2A EO 52
lEO D2 EO AA
EO 2A EO 53
lEO D3 EO AA
EO 2A EO 4B
lEO CB EO AA
EO 2A EO 47
lEO C7 EO AA
EO 2A EO 4F
lEO CF EO AA
EO 2A EO 48
lEO C8 EO AA
EO 2A EO 50
lEO DO EO AA
EO 2A EO 49
lEO C9 EO AA
EO 2A EO 51
lEO Dl EO AA
EO 2A EO 4D
lEO CD EO AA
If the left Shift key is held down, the AA/2A shift make
and break is sent with the other scan codes. If the right
Shift key is held down, B6/36 is sent. If both Shift
keys are down, both sets of codes are sent with the other
scan code.
4-18
Keyboard
Key
No.
Scan Code Make/Break
Shift Case Make/Break
95
EO 35/EO B5
EO AA EO 35/EO B5 EO 2A
*
If the left Shift key is held down, the AA/2A shift make
and break is sent with the other scan codes. If the right
Shift key is held down, B6/36 is sent. If both Shift
keys are down, both sets of codes are sent with the other
scan code.
Key
No.
Scan Code
Make/Break
124
EO 2A EO 37
/EO B7 EO AA
Key No.
126
*
*
*
Ctrl Case, Shift Case
Make/Break
Make Code
E1 10 45 El 90 C5
EO 371EO B7
Alt Case
Make/Break
54/04
Ctrl Key Pressed
EO 46 EO C6
This key is not typematic. All associated scan codes
occur on the make of the key.
Keyboard
4-19
Scan Code Set 2
In scan code set 2, each key is assigned a unique 8-bit make scan
code, which is sent when the key is pressed. Each key also sends
a break code when the key is released. The break code consists of
2 bytes, the first of which is the break code prefix, hex FO; the
second byte is the same as the make scan code for that key. The
typematic scan code for a key is the same as the key's make code.
Scan Code Tables (Set 2)
The following keys send the codes shown, regardless of any shift
states in the keyboard or system. Refer to "Keyboard Layouts"
beginning on page 4-40 to determine the character associated
with each key number.
Key Number
1
2
3
4
5
6
7
8
9
10
11
12
13
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
*
4-20
Make Code
*
OE
16
IE
26
25
2E
36
3D
3E
46
45
4E
55
66
00
15
10
24
20
2C
35
3C
43
44
40
54
5B
50
58
lC
101-key keyboard only.
Keyboard
Break Code
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
OE
16
IE
26
25
2E
36
3D
3E
46
45
4E
55
66
00
15
10
24
20
2C
35
3C
43
44
40
54
56
50
58
lC
Key Number
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
57
58
60
61
62
64
90
91
92
93
96
97
98
99
100
101
102
103
104
105
106
108
110
112
113
114
115
116
117
118
119
**
**
**
Make Code
lB
23
2B
34
33
3B
42
4B
4C
52
50
5A
12
61
lA
22
21
2A
32
31
3A
41
49
4A
59
14
11
29
EO 11
EO 14
77
6C
6B
69
75
73
72
70
7C
70
74
7A
71
7B
79
EO 5A
76
05
06
04
OC
03
OB
83
OA
Break Code
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
EO
EO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
EO
FO
FO
FO
FO
FO
FO
FO
FO
FO
lB
23
2B
34
33
3B
42
4B
4C
52
50
5A
12
61
lA
22
21
2A
32
31
3A
41
49
4A
59
14
11
29
FO 11
FO 14
77
6C
6B
69
75
73
72
70
7C
70
74
7A
71
7B
79
FO 5A
76
05
06
04
OC
03
OB
83
OA
102-key keyboard only.
Keyboard
4-21
Key Number
Make Code
120
121
122
123
125
01
09
78
07
7E
Break Code
FO
FO
FO
FO
FO
01
09
78
07
7E
The remaining keys send a series of codes dependent on the state
of the various shift keys (Ctrl, Alt, and Shift), and the state of
Num Lock (On or Off). Because the base scan code is identical
to that of another key, an extra code (hex EO) has been added to
the base code to make it unique.
Key
No.
Base Case, or
Sh i ft+Num Lock
MakelBreak
EO
lEO
EO
lEO
EO
lEO
EO
lEO
EO
lEO
EO
lEO
EO
lEO
EO
lEO
EO
lEO
EO
lEO
75
76
79
80
81
83
84
85
86
89
*
4-22
70
FO
71
FO
6B
FO
6C
FO
69
FO
75
FO
72
FO
70
FO
7A
FO
74
FO
70
71
6B
6C
69
75
72
70
7A
74
Shift Case
MakelBreak
EO
lEO
EO
lEO
EO
lEO
EO
lEO
EO
lEO
EO
lEO
EO
lEO
EO
lEO
EO
lEO
EO
lEO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
12
70
12
71
12
6B
12
6C
12
69
12
75
12
72
12
70
12
7A
12
74
EO
EO
EO
EO
EO
EO
EO
EO
EO
EO
EO
EO
EO
EO
EO
EO
EO
EO
EO
EO
*
Num Lock on
MakelBreak
70
12
71
12
6B
12
6C
12
69
12
75
12
72
12
70
12
7A
12
74
12
EO 12 EO 70
lEO FO 70 EO FO
EO 12 EO 71
lEO FO 71 EO FO
EO 12 EO 6B
lEO FO 6B EO FO
EO 12 EO 6C
lEO FO 6C EO FO
EO 12 EO 69
lEO FO 69 EO FO
EO 12 EO 75
lEO FO 75 EO FO
EO 12 EO 72
lEO FO 72 EO FO
EO 12 EO 70
lEO FO 70 EO FO
EO 12 EO 7A
lEO FO 7A EO FO
EO 12 EO 74
lEO FO 74 EO FO
12
12
12
12
12
12
12
12
12
12
If the Ieft Sh i ft key is held down, the FO 12/12 shift
make and break is sent with the other scan codes. If the
right Shift key is held down, FO 59/59 is sent. If both
Shift keys are down, both sets of codes are sent with the
other scan code.
Keyboard
Key
No.
Scan Code Make/Break
95
EO 4A1EO FO 4A
*
*
Shift Case Make/Break
EO FO 12 4A/EO 12 FO 4A
If the left Shift key is held down, the FO 12/12 shift
make and break is sent with the other scan codes. If the
right Shift key is held down, FO 59/59 is sent. If both
Shift keys are down, both sets of codes are sent with the
other scan code.
Key
No.
Scan Code
Make/Break
Ctrl Case, Shift Case
Make/Break
Alt Case
Make/Break
124
EO 12 EO 7C
/EO FO 7C EO FO 12
EO 7C/EO FO 7C
84/FO 84
Key No.
126
*
*
Make Code
E1 14 77 El FO 14 FO 77
Ctrl Key Pressed
EO 7E EO FO 7E
This key is not typematic. All associated scan codes
occur on the make of the key.
Keyboard
4-23
Scan Code Set 3
In scan code set 3, each key is assigned a unique 8-bit make scan
code, which is sent when the key is pressed. Each key also sends
a break code when the key is released. The break code consists of
2 bytes, the first of which is the break-code prefix, hex FO; the
second byte is the same as the make scan code for that key. The
typematic scan code for a key is the same as the key's make code.
With this scan code set, each key sends only one scan code, and
no keys are affected by the state of any other keys.
Scan Code Tables (Set 3)
The following keys send the codes shown, regardless of any shift
states in the keyboard or system. Refer to "Keyboard Layouts"
beginning on page 4-40 to determine the character associated
with each key number.
Key Number
Make Code
1
2
3
4
5
6
7
8
9
10
11
12
13
15
16
17
18
19
20
21
22
23
24
25
26
27
28
OE
16
IE
26
25
2E
36
3D
3E
46
45
4E
55
66
00
15
10
24
20
2C
35
3C
43
44
40
54
5B
4-24
Keyboard
Break Code
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
Fa
Fa
Fa
FO
FO
FO
OE
16
1E
26
25
2E
36
3D
3E
46
45
4E
55
66
00
15
10
24
20
2C
35
3C
43
44
40
54
5B
Default Key State
Typematic
Typematic
Typematic
TYDematic
Typemat'c
Typemat c
Typemat c
Typemat c
Typemat c
Typemat c
Typemat c
Typemat c
Typemat c
Typematic
Typematic
Typematic
Typematic
Typematic
Typematic
Typematic
Typematic
Typematic
Typematic
Typematic
Typematic
Typematic
Typematic
Key Number
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
57
58
60
61
62
64
75
76
79
80
81
83
84
85
86
89
90
91
92
93
95
96
97
98
*
**
*
**
**
Make Code
5C
14
lC
lB
23
2B
34
33
36
42
46
4C
52
53
5A
12
13
lA
22
21
2A
32
31
3A
41
49
4A
59
11
19
29
39
58
67
64
61
6E
65
63
60
6F
60
6A
76
6C
6B
69
77
75
73
72
Break Code
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
5C
14
1C
lB
23
2B
34
33
3B
42
4B
4C
52
53
5A
12
13
lA
22
21
2A
32
31
3A
41
49
4A
59
11
19
29
39
58
67
64
61
6E
65
63
60
6F
60
6A
76
6C
6B
69
77
75
73
72
Default Key State
Typematic
Make/Break
Typematic
Typematic
Typematic
Typematic
Typematic
Typematic
Typematic
Typematic
Typematic
Typematic
Typematic
Typematic
Typematic
Make/Break
Typematic
Typematic
Typematic
Typematic
Typematic
Typematic
Typematic
Typematic
Typematic
Typematic
Typematic
Make/Break
Make/Break
Make/Break
Typematic
Make only
Make only
Make only
Typematic
Typematic
Make only
Make only
Typematic
Typematic
Make only
Make only
Typematic
Make only
Make only
Make only
Make only
Make only
Make only
Make only
Make only
101-key keyboard only.
102-key keyboard only.
Keyboard
4-25
Key Number
Make Code
99
100
101
102
103
104
105
106
108
110
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
70
7E
7D
74
7A
71
84
7C
79
08
07
OF
17
IF
27
2F
37
3F
47
4F
56
5E
57
5F
62
Break Code
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
FO
70
7E
7D
74
7A
71
84
7C
79
08
07
OF
17
IF
27
2F
37
3F
47
4F
56
5E
57
5F
62
Default Key State
Make only
Make only
Make only
Make only
Make only
Make only
Make only
Typematic
Make only
Make only
Make only
Make only
Make only
Make only
Make only
Make only
Make only
Make only
Make only
Make only
Make only
Make only
Make only
Make only
Make only
!~
4-26
Keyboard
Clock and Data Signals
The keyboard and system communicate over the 'clock' and
, data' lines. The source of each of these lines is an
open-collector device on the keyboard that allows either the
keyboard or the system to force a line to an inactive (low) level.
When no communication is occurring, the 'clock' line is at an
active (high) level. The state of the 'data' line is held
active(high) by the keyboard.
When the system sends data to the keyboard, it forces the 'data'
line to an inactive level and allows the 'clock' line to go to an
active level.
An inactive signal will have a value of at least 0, but not greater
than +0.7 volts. A signal at the inactive level is a logical 0. An
active signal will have a value of at least +2.4, but not greater
than +5.5 volts. A signal at the active level is a logical 1.
Voltages are measured between a signal source and the dc
network ground.
The keyboard 'clock' line provides the clocking signals used to
clock serial data to and from the keyboard. If the host system
forces the 'clock' line to an inactive level, keyboard transmission
is inhibited.
When the keyboard sends data to, or receives data from the
system, it generates the 'clock' signal to time the data. The
system can prevent the keyboard from sending data by forcing the
'clock' line to an inactive level; the 'data' line may be active or
inactive during this time.
During the BAT, the keyboard allows the 'clock' and 'data' lines
to go to an active level.
Data Stream
Data transmissions to and from the keyboard consist of an II-bit
data stream (Mode 2) sent serially over the 'data' line. A logical
1 is sent at an active (high) level. The following table shows the
functions of the bits.
lOl/102-Key Keyboard
4-27
Bit
1
2
3
4
5
6
7
8
9
10
11
Function
Start bit (always 0)
Data bit 0 (least-significant)
Data bit 1
Data bit 2
Data bit 3
Data bit 4
Data bit 5
Data bit 6
Data bit 7 (most-significant)
Parity bit (odd parity)
Stop bit (always 1)
The parity bit is either 1 or 0, and the 8 data bits, plus the parity
bit, always have an odd number of 1'so
Note: Mode 1 is a 9-bit data stream that does not have a
parity bit or stop bit and the start bit is always 1.
Keyboard Data Output
When the keyboard is ready to send data, it first checks for a
keyboard-inhibit or system request-to-send status on the 'clock'
and 'data' lines. If the 'clock' line is inactive (low), data is
stored in the keyboard buffer. If the 'clock' line is active (high)
and the 'data' line is inactive (request-to-send), data is stored in
the keyboard buffer, and the keyboard receives system data.
If the 'clock' and 'data' lines are both active, the keyboard sends
the 0 start bit, 8 data bits, the parity bit, and the stop bit. Data
will be valid before the trailing edge and beyond the leading edge
of the clock pulse. During transmission, the keyboard checks the
'clock' line for an active level at least every 60 milliseconds. If
the system lowers the 'clock' line from an active level after the
keyboard starts sending data, a condition known as line contention
occurs, and the keyboard stops sending data. If line contention
occurs before the leading edge of the 10th clock signal (parity
bit), the keyboard buffer returns the 'clock' and 'data' lines to
an active level. If contention does not occur by the 10th clock
signal, the keyboard completes the transmission. Following line
contention, the system mayor may not request the keyboard to
resend the data.
4-28
lOl/102-Key Keyboard
~l
~
Following a transmission, the system can inhibit the keyboard
until the system processes the input, or until it requests that a
response be sent.
Keyboard Data Input
When the system is ready to send data to the keyboard, it first
checks to see if the keyboard is sending data. If the keyboard is
sending, but has not reached the 10th 'clock' signal, the system
can override the keyboard output by forcing the keyboard 'clock'
line to an inactive (low) level. If the keyboard transmission is
beyond the 10th 'clock' signal, the system must receive the
transmission.
If the keyboard is not sending, or if the system elects to override
the keyboard's output, the system forces the keyboard 'clock'
line to an inactive level for more than 60 microseconds while
preparing to send data. When the system is ready to send the start
bit (the 'data' line will be inactive), it allows the 'clock' line to
go to an active (high) level.
The keyboard checks the state of the' clock' line at intervals of
no more than 10 milliseconds. If a system request-to-send (RTS)
is detected, the keyboard counts 11 bits. After the 10th bit, the
keyboard checks for an active level on the 'data' line, and if the
line is active, forces it inactive, and counts one more bit. This
action signals the system that the keyboard has received its data.
Upon receipt of this signal, the system returns to a ready state, in
which it can accept keyboard output, or goes to the inhibited state
until it is ready.
If the keyboard 'data' line is found at an inactive level following
the 10th bit, a framing error has occurred, and the keyboard
continues to count until the 'data' line becomes active. The
keyboard then makes the 'data' line inactive and sends a Resend.
Each system command or data transmission to the keyboard
requires a response from the keyboard before the system can send
its next output. The keyboard will respond within 20 milliseconds
unless the system prevents keyboard output. If the keyboard
response is invalid or has a parity error, the system sends the
command or data again. However, the two byte commands
require special handling. If hex F3 (Set Typematic Rate/Delay),
lOl/102-Key Keyboard
4-29
hex FO (Select Alternate Scan Codes), or hex ED (Set/Reset
Mode Indicators) have been sent and acknowledged, and the
value byte has been sent but the response is invalid or has a parity
error, the system will res end both the command and the value
byte.
Keyboard Encoding and Usage
The keyboard routine, provided by IBM in the ROM BIOS, is
responsible for converting the keyboard scan codes into what will
be termed Extended ASCII. The extended ASCII codes returned
by the ROM routine are mapped to the U.S. English keyboard
layout. Some operating systems may make provisions for
alternate keyboard layouts by providing an interrupt replacer,
which resides in the read/write memory. This section discusses
only the ROM routine.
Extended ASCII encompasses 1-byte character codes, with
possible values of 0 to 255, an extended code for certain extended
keyboard functions, and functions handled within the keyboard
routine or through interrupts.
Character Codes
The character codes described later are passed through the BIOS
keyboard routine to the system or application program. A" -1 "
means the combination is suppressed in the keyboard routine.
The codes are returned in the AL register. See "Characters,
Keystrokes, and Color" later in this manual for the exact codes.
4-30
lOl/102-Key Keyboard
The following figure shows the keyboard layout and key
positions.
mIl ~ 1111 ~ 11
mmmmrn
mrnmmr=ll
mrnmrnu
mm [!]
m mm mrn
m mm m
mJ
lOl/102-Key Keyboard
4-31
Key
Base Case
Uppercase
I
1
2
3
4
5
6
7
8
9
10
11
12
13
15
'"
!
1
2
3
4
5
6
7
8
9
0
@
#
$
%
"
&
*
(
)
-
+
=
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 Caps
Lock
31
32
33
34
35
36
37
38
39
40
41
43
44 Sh ift
(Left )
46
47
48
Backs)ace
(008
-.1 (009)
Backs)ace
(008
I+- (*)
Q
q
w
w
e
r
t
y
u
i
E
R
T
y
U
1
0
0
p
p
{
}
[
]
\
I
-i
a
s
d
f
g
h
I
-i
S
0
F
G
H
J
k
I
K
L
; I
:
CR(013)
-1
"
CR(013)
-1
z
x
c
z
X
C
r)
Notes:
(*)
(*)
(*)
(*)
(*)
(*)
(*)
(*)
(*)
(*)
(*)
(*)
(*)
(*)
(*)
DC1(0171
ETB(023)
ENQ(005)
DC2(018)
DC4(020)
EM(025)
NAK(021)
HT(009)
SI(015)
DLE(016)
Esc(027)
GS(029)
FS(028)
(*)
(*)
(*)
(*)
(*)
(*)
(* )
(*)
(*)
(*)
(*)
(*)
(*)
(*)
-1
4-32
tOl/t02-Key Keyboard
(*)
(*)
(*)
(*)
(*)
(*)
(*)
(*)
(*)
(*)
(*)
(*)
SOH(OOl)
DC3(019)
EOT(004)
ACK(006)
BEL (007)
BS(008)
LF(OlO)
VT(OI1)
FF(012)
-1
-1
LF(010)
-1
-1
SUB(026)
CAN(024)
ETX(003)
(*)
(*)
(*)
Refer to "Extended Functions" in this section.
( *) Refer to "Special Handling" in this section.
Character Codes (Part 1 of 2)
Alt
-1
-1
Nu I (000) (*)
-1
-1
-1
RS(030)
-1
-1
-1
-1
US(031)
-1
De1(1271
-i
A
j
Ctrl
I
Key
49
50
51
52
53
54
55
57 Shift
(Right)
58 Ctrl
(Left)
60 Alt
(Left)
61
62 Alt
(Right)
64 Ctrl
(Right)
90 Num
Lock
95
100
105
106
108
110
112
113
114
115
116
117
118
119
120
121
122
123
125 Scroll
Lock
126
Base Case
Uppercase
Ctrl
Alt
(*)
(*)
(*)
(*)
(*)
(*)
(*)
-1
n
m
M
•
<
>
I
-1
-1
SYN(022)
STX(002)
SO(014)
CR(on)
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
Space
-1
Space
-1
Space
-1
-1
-1
-1
-1
-1
-1
-1
-1
V
v
b
B
N
?
Enter
Esc
Null (*)
Null (*)
Null (*)
Null (*)
Null (*)
Null (*)
Null (*)
Null (*)
Null (*)
Null (*)
Null (*)
Null (*)
-1
Enter
Esc
Nu I (*)
Nu I (*)
Nu I (*)
Nu I (*)
Nu 1 (*)
Nu I (*)
Nu 1 (*)
Nu I (*)
Nu I (*)
Nu 1 (*)
Nu I (*)
Nu I (*)
-1
(*)
(*)
(*)
(*)
LF(010)
Esc
Null (*)
Null (*)
Null (*)
Null (*)
Null (*)
Null (*)
Null (*)
Null (*)
Null (*)
Null (*)
Null (*)
Null (*)
-1
Pause(**)
Pause(**)
Break(**)
~
1*
-
+
+
Space
-1
(*)
(*)
(*)
(*)
(*)
(*)
Nu 1(*)
Nu 1(*)
Nu 1(*)
Nu 1(*)
Nu 1(*)
Nu 1(*)
Nu 1(*)
Nu 1(*)
Nu 1(*)
Nu 1(*)
Nu 1(*)
Nu 1(*)
-1
Pause(**)
Notes:
1*)
Refer to "Extended Functions" in this section.
( *) Refer to "Special Handling" in this section.
Character Codes (Part 2 of 2)
lOl/102-Key KeybQard
4-33
lists
The following table
keys that have meaning only in Num
Lock, Shift, or Ctrl states. The Shift key temporarily reverses the
current Num Lock state.
Key
Num
Lock
7
4
1
8
Base Case
Ctrl
-1
-1
-1
-1
-1
-1
-1
-1
-1
Clear Screen
Reverse Word(*)
Erase to EOL(*)
(*)
(*)
(*)
(*)
Top of Text
and Home
Advance Word
(*)
Erase to EOS
i*)
( *)
Home (*)
91
92
93
96
97
98
99
101
5
2
0
9
End ( )
t (*)
(*)
+ (*)
Ins
Page Up (*)
102
6
... (*)
103
3
Pa~e
104
Alt
.. (*1
Down
-1
Delete (*,**)
(**)
( )
Notes:
(*1 Refer to "Extended Functions" in this section.
(* ) Refer to "Special Handling" in this section.
Special Character Codes
Extended Functions
For certain functions that cannot be represented by a standard
ASCII code, an extended code is used. A character code of 000
(null) is returned in AL. This indicates that the system or
application program should examine a second code, which will
indicate the actual function. Usually, but not always, this second
code is the scan code of the primary key that was pressed. This
code is returned in AH.
4-34
lOl/102-Key Keyboard
The following table is a list of the extended codes and their
functions.
Second
Code
1
3
14
15
16-25
26-28
30-38
39-41
43
44-50
51-53
55
59-68
71
72
73
74
75
76
77
78
79
80
81
82
83
84-93
94-103
104-113
114
115
116
117
118
119
120-131
132
133-134
135-136
137-138
139-140
141
142
143
144
145
146
147
148
149
150
Function
Alt
Esc
Nul Character
Alt
Backspace
+- (Back-tab)
!
It Q, W, E, R, T, Y, U, I, 0, P
Alt
[ ] ......
Alt A, S, D, F, G, H, J, K, l
Alt
Alt
Alt Z, " X, C, V, B, N, M
AI t , . /
Keypad *
Alt
Fl to FlO Function Keys (Base Case)
Home
t (Cursor Up)
Page Up
Alt
Keypad.. (Cursor left)
Center Cursor
-. (Cursor Right)
Alt
Keypad +
End
+ (Cursor Down)
Page Down
Ins (Insert)
Del (Delete)
Shift Fl to FlO
Ctrl Fl to FlO
AIt
F1 to FlO
Ctrl PrtSc (Start/Stop Echo to Printer)
Ctrl .. (Reverse Word)
Ctrl -. (Advance Word)
Ctrl End (Erase to End of Line-EOl)
Ctrl PgDn (Erase to End of Screen-EOS)
Ctrl Home (Clear Screen and Home)
AIt 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -, = keys 2-13
Ctrl PgUp (Top 25 lines of Text and Cursor Home)
Fll, F12
Shift Fll, F12
Ctrl Fll, F12
Alt
Fl1 F12
Ctr I Up/S
Ctrl KeypadCtrl Keypad 5
Ctrl Keypad +
Ctr 1 Down/2
Ctrl Ins/O
Ctrl Del/.
Ctrl Tab
Ctrl Keypad ~
Ctrl Keypad
I
I
Keyboard Extended Functions (Part 1 of 2)
lOl/102-Key Keyboard
4-35
Second
Code
151
152
153
155
157
159
160
161
162
163
164
165
166
Function
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Home
Up
Page Up
Left
Right
End
Down
Page Down
Insert
Delete
Keypad /
Tab
Enter
Keyboard Extended Functions (Part 2 of 2)
Shift States
Most shift states are handled within the keyboard routine, and are
not apparent to the system or application program. In any case,
the current status of active shift states is available by calling an
entry point in the BIOS keyboard routine. The following keys
result in altered shift states:
Shift: This key temporarily shifts keys 1 through 13, 16 through
29,31 through 41, and 46 through 55, to uppercase (base case if
in Caps Lock state). Also, the Shift temporarily reverses the
Num Lock or non-Num Lock state of keys 91 through 93, 96, 98,
99, and 101 through 104.
Ctrl: This key temporarily shifts keys 3, 7, 12, 15 through 29,31
through 39, 43, 46 through 52, 75 through 89, 91 through 93, 95
through 108, 112 through 124 and 126 to the Ctrl state. The Ctrl
key is also used with the Alt and Del keys to cause the
system-reset function; with the Scroll Lock key to cause the break
function; and with the Num Lock key to cause the pause function.
The system-reset, break, and pause functions are described under
"Special Handling" later in this section.
4-36
lOl/102-Key Keyboard
AIt: This key temporarily shifts keys 1 through 29,31 through
43,46 through 55, 75 through 89,95, 100, and 105 through 124
to the Alt state. The Alt key is also used with the Ctrl and Del
keys to cause a system reset.
The Alt key also allows the user to enter any character code from
1 to 255. The user holds down the Alt key and types the decimal
value of the characters desired on the numeric keypad (keys 91
through 93, 96 through 99, and 101 through 103). The Alt key is
then released. If the number is greater than 255, a modulo-256
value is used. This value is interpreted as a character code and is
sent through the keyboard routine to the system or application
program. Alt is handled internal to the keyboard routine.
Caps Lock: This key shifts keys 17 through 26, 31 through 39,
and 46 through 52 to uppercase. When Caps Lock is pressed
again, it reverses the action. Caps Lock is handled internal to the
keyboard routine. When Caps Lock is pressed, it changes the
Caps Lock Mode indicator. If the indicator was on, it will go off;
and if it was off, it will go on.
Scroll Lock: When interpreted by appropriate application
programs, this key indicates that the cursor-control keys will
cause windowing over the text rather than moving the cursor.
When the Scroll Lock key is pressed again, it reverses the action.
The keyboard routine simply records the current shift state of the
Scroll Lock key. It is the responsibility of the application
program to perform the function. When Scroll Lock is pressed, it
changes the Scroll Lock Mode indicator. If the indicator was on,
it will go off; and if it was off, it will go on.
Nom Lock: This key shifts keys 91 through 93,96 through 99,
and 101 through 104 to uppercase. When Num Lock is pressed
again, it reverses the action. Num Lock is handled internal to the
keyboard routine. When Num Lock is pressed, it changes the
Num Lock Mode indicator. If the indicator was on, it will go off;
if it was off, it will go on.
Shift Key Priorities and Combinations: If combinations of the
Alt, Ctrl, and Shift keys are pressed and only one is valid, the
priority is as follows: the Alt key is first, the Ctrl key is second,
and the Shift key is third. The only valid combination is Alt and
Ctrl, which is used in the system-reset function.
101/102-Key Keyboard
4-37
Special Handling
System Reset
The combination of any Alt, Ctrl, and Del keys results in the
keyboard routine that starts a system reset or restart. System
reset is handled by BIOS.
Break
The combination of the Ctrl and Pause/Break keys results in the
keyboard routine signaling interrupt hex lB. The extended
characters AL=hex 00, and AH=hex 00 are also returned.
Pause
The Pause key causes the keyboard interrupt routine to loop,
waiting for any character or function key to be pressed. This
provides a method of temporarily suspending an operation, such
as listing or printing, and then resuming the operation. The
method is not apparent to either the system or the application
program. The key stroke used to resume operation is discarded.
Pause is handled internal to the keyboard routine.
Print Screen
The Print Screen key results in an interrupt invoking the
print-screen routine. This routine works in the alphameric or
graphics mode, with unrecognizable characters printing as blanks.
System Request
When the System Request (Alt and Print Screen) key is pressed, a
hex 8500 is placed in AX, and an interrupt hex 15 is executed.
When the SysRq key is released, a hex 8501 is placed in AX, and
another interrupt hex 15 is executed. If an application is to use
System Request, the following rules must be observed:
4-38
lOl/102-Key Keyboard
Save the previous address.
Overlay interrupt vector hex 15.
Check AH for a value of hex 85:
If yes, process may begin.
If no, go to previous address.
The application program must preserve the value in all registers,
except AX, upon return. System Request is handled internal to
the keyboard routine.
Other Characteristics
The keyboard routine does its own buffering, and the keyboard
buffer is large enough to support entries by a fast typist.
However, if a key is pressed when the buffer is full, the key will
be ignored and the "alarm" will sound.
The keyboard routine also suppresses the typematic action of the
following keys: Ctrl, Shift, Alt, Num Lock, Scroll Lock, Caps
Lock, and Ins.
During each interrupt hex 09 from the keyboard, an interrupt hex
15, function (AH)=hex 4F is generated by the BIOS after the
scan code is read from the keyboard adapter. The scan code is
passed in the (AL) register with the carry flag set. This is to
allow an operating system to intercept each scan code prior to its
being handled by the interrupt hex 09 routine, and have a chance
to change or act on the scan code. If the carry flag is changed to
o on return from interrupt hex 15, the scan code will be ignored
by the interrupt handler.
lOl/102-Key Keyboard
4-39
Keyboard Layouts
The keyboard is available in six layouts:
•
French
•
German
•
Italian
• Spanish
• U.K. English
•
U.S. English
The various layouts are shown in alphabetic order on the
following pages. Nomenclature is on both the top and front face
of the keybuttons. The number to the upper right designates the
keybutton position.
4-40
French Keyboard
4-41
German Keyboard
4-42
Italian Keyboard
4-43
Spanish Keyboard
4-44
U.K. English Keyboard
4-45
U.s. English Keyboard
4-46
Specifications
The specifications for the keyboard are as follows.
Power Requirements
•
•
+5 Vdc ± 10%
Current cannot exceed 275 mA
Size
•
•
•
Length: 492 millimeters (19.4 inches)
Depth: 210 millimeters (8.3 inches)
Height: 58 millimeters (2.3 inches), legs extended
Weight
2.25 kilograms (5.0 pounds)
4-47
--
-->
-->
-->
TEST2.ASM
31
32
n
TEST3.ASM
TEST4.ASM
3'
3.
3T
3.
-->
-->
POST AND MANUFAC1'URING TEST ROUTINES
DATA SEGMENTS LOCATIONS
COt,tMON EQUATES FOR POST AND BIOS
POWER ON SELF TEST EQUATES FOR PROTECTED MODE
POST TEST.OI THROUGH TEST. 16
PO~S~E~~S~~~ 7 I~~~~n~~ Z;~~~~ 2~OUT I NES
POST EXCEPTION INTERRUPT TESTS
POST AND 8105 UTILITY ROUTINES
CMOS READ
- READ CMOS L.OCAT I ON ROUT I NE
g~gS:WRITE
42
.,••
,.••••
:
-
BLIRK INT
:
- MANUFACTURING TOGGLE BIT ROUTINE
~~~:~~i~~SUM
51
52
.3
~~T-~D
••
.,,.••
,.
...,••
TEST6.ASM
.3
••
.,••••
.
••,.
POST ERROR MESSAGE HANDLER
MANUFACTUR I NO, ERROR TRAP
POST STRING DISPLAY ROUTINE
POST ERROR BEEP PROCEDURE
SPEAKER BEEP CONTROL ROUT I NE
FIXED TIME WAIT ROUTINE
SET BAD CONFIG IN CMOS DIAo,
DISPLAY-HEX BYTE AS 00-- FF
0 I SPLAY CHARACTER
DISPLAY SEGMENT FORMAT ADDRESS
POST PROTECTED MODE 0 I SPLAY
=~~~~~~~::~~I~~~~A~5~~::SUM
~~~~ ~~;E~~3=T C~~~D~~~
:
I
_> I NT 11"
RE 0 I RECT
- HARDWARE I NT 9 RED I RECT (L 2)
INT 287
- HARDWARE INT 13 REDIRECT (287)
PRO~ SHUTDOWN - 80286 RESET ROUTINE
EXCEPTTON INTERRUPT TEST HANDLERS f'OR POST TESTS
SYSINITI
- BUILD PROTECTED MODE POINTERS
GOT BLD
- BU I LD THE GOT FOR POST
SloT BLD
- BUILD THE lOT FOR POST
POST T!STS AND SYSTEM BOOT STRAP
STo,TST CNT
- SEGMENT STORAGE TEST
ROM ERR'
- ROM ERROR 0 I SPLAY ROUT I NE
XMIT 8042
- KEYBOARD DIAGNOSTIC OUTPUT
BOOT:STRAP
- BOOT STRAP LOADER
-INT 19H
TEST!i .... SM
.2
~~l~E(g~~r ~~~~T~~~ARg~~~~T
E MSG
MrG HALT
P M!G
E~ BEEP
BEEJiS
WAITF
CONFIG BAD
XPC ByTE
PRT-HEX
PRT-SEG
PRoT PRT HEX
DSKETTE. ASM
OISKETTE BIOS
,.,.
'2
DISK.ASM
:
DSKETTE !'I!TUP - POST SETUP DR I VE TYPES
FIXED DISR' 8105
TO
TO
KYBD.ASM
HD IRT
KEYBt5'ARD B I OS
g:~~ET~~_:O_1
TI
g:~~~~~TUP
"
.,.2••
.3••
••••
••
.,••••
••••,
••n
••••
,.,
'.2
I.'
I.,
,.,
TO
T9
PRT.ASM
RS232.ASM
VIDEOI.ASM
BIOS.ASM
.,
BIOSI.ASM
PRO~ TERM
EVENT WAIT
.JOY STICK
SYS-REQ
WAIT
BLOCKMOVE
GATE A20
.
:~~-e:~g~Y
I ••
BIOS2.ASM
I ••
ORGS.ASM
II.
I ••
I ••
.LIST
TESTl
: ~~t~ g~~: g: gr~~E H~~~~~~R
-
-INT 16H
-INT 09H
-INT 17H
-INT 14H
-INT IOH
-INT
-INT
- iNT
-INT
12H
IIH
02H
ISH
NULL PROGRAM TERMINATION
RTC EVENT WAIT/TIMEOUT ROUTINE
.JOYSTICK PORT HANDLER
NULL SYSTEM REQUEST KEY
RTC TIMED WAIT ROUTINE
EXTENDED MEMORY MOVE INTERFACE
ADDRESS BIT 20 CONTROL
~~T~~~E~R:~~:~R ~~E ~~~~:~ =~DE
5
:
V
I
DEVTcE BUSY
- NULL DEV I CE BUSY HANDLER
I NT COfllPLETE - NULL I NTERRUPT COMPLETE HANDLER
B I OS TNTERRUPT ROUT I NES
TIME OF DAY I - TIME OF DAY ROUTINES
-INT IAH
RTC TNT- IRQ LEVEL 8 ALARM HANDLER -INT 70H
~~_~~;ETNI
I ••
: ~~~U~3~1~~0~E~~~~~ AND TEST_ INT 13H
- HARDWARE INTERRUPT HANDLER -INT 7EtH
~:Y~~;R~_IO_I : ~~~D~:~EB:~~E~~~~+
SNl5' DATA
- KEYBOARD TRANSMISSION
PRINT!Jit ADAPTER BIOS
COMMUNICATIONS BIOS FOR RS232
VIDEO BIOS
BIOS ROUTINES
MEMORY SIZE DET I - REAL MODE SIZE
EQU I PMl!NT 1- - -EQU I PMENT DETERM I NAT I ON
NYI INT ,- NMI HANDLER
INTERR'UPT-15H BIOS ROUTINES
:~-~~E
'2
5-18
-->
-->
-->
~~~D~:~EB:~~E~~~~~ ~:~~ER ::~~ ~~~
~~~~I S~:~~~R~~¥T~~~DLER -;:~~ ~~~
:
COMPATI§ILITY MODULE
POST ERROR MESSAGES
DISKETTE - DISK - VIDEO DATA TABLES
:
I
I
'"~
".II.II.
C
c
"a
II.
"7
Ita
0000
120
0000 11
t22
0001
".•••
••3
•••
125
•••
c
C
C
DOl ...
C
00"
112
11111111
0040
0020
0040
nnn??
tl4
131
004C
OO4C n?nUl
tIT
III
0060
0060
140
nnnn
00T4
007' 11111111
143
144
DOTI
DOTI ??'In???
146
DOTe
141
DOTe 11111117
.45
•••
149
0100
.ao
0.00 11111111
1152
1153
0104
0104
115
Dill
116
Dill 711""1
•••
Oleo
II.
II.
117
nnn??
.a, oleo nnnn
160
161
.62
163
16.
1615
16.
167
I..
169
110
1'71
112
Il•
• T4
AlISO
0001 11111111
00.0 11111111
•••
•••
•••
•••
•••
10216 INTERRUPT LOCATIONS
REfI'EPtENCEO IY POST , II
•
I
SEGMENT AT 0
I ADDRESS. 0000.0000
01
I START OF INTERRUPT VECTOR TABLE
C
•••
.00
131
1---------------------------------.. . ----1-------------------------------.as. . . . . . ----
g eSTG_LOCO
g
.n
121
PAGE
I NCLUDI DSEa. I Ne
C I
C.
OIDI
OIDI
nnn"
0400
0400
nn
C
.NMI_PTR
g .INTI_PTIII:
C
g
.INT_PTR
ORG
... ·002H
DO"
ORG
DO
... ·OOSH
1
I NDN-MASKABLE INTERRUPT VECTOR
I PRINT SCREEN INTERRUPT VECTOR
ORG
.·OOIH
DO?
I HARDWARE INTERRUPT POINTER (I-FI
gC .'1 I DEO_I NT
gC eGRG_VECTOR
gC ftASIC_PTR
ORG
.·OtOH
DO?
I VIDEO I/O INTERRUPT VECTOR
ORG
.·OI3H
DO?
I DISKETTE/DISK INTERRUPT VECTOR
ORG
.·OIIH
DO?
I POINTER TO CASSETTE BASIC
C
g
.,.A....._PT...
DRG
.·OIDH
OO?
I POINTER TO VIDEO PARAMETERS
gC eoISK_POINTE"
gC eEXT_PTR
gC tID I SK_VECTOR
gC ....._TL_VEC
gC ..... '_TL_VEC
gC .SLAVE_INT_PTR
gC eHlISK_INT
ORG
.·OIEH
DO?
I POINTE" TO DISKETTE PARAMETI!:R TALI!:
eftG
.·OIF'H
DO?
I POINTER TO GRAPHIC CHARACTERS 121-255
C
C
C
C
C
oRG
O.OOH
OW?
.TOS
ORG
.·O.OH
DO?
I PO I NTER TO 0 I SKETTE I NTERRUPT CODE
ORG
.·O.IH
DO?
I POINTER TO FIRST DISK PARAMETER TABLE
ORG
.·O.6H
DO?
I POINTER TO SECOND DISK PARAMETER TABL.E
oRG
.·OlOH
DO?
I POINTER TO SLAVE INTERRUPT HANDLER
oRG
.·Ol6H
DO?
I POINTER TO FIXED DISK INTERRUPT CODE
• STACK -- USED DURING POST ONLY
I
USE II L.L OVERLAY I NTERRUPTS VECTORS
DIDO
0100
g ....G_TEST_RTN
oRG
LABEL
oeOOH
FAR
I LOAD LOCATION FOR MANUFACTURING TESTS
TCOO
TCOO
g .aoOT_LOCN
ORG
LABEL
lCOOH
FAR
I BOOT STRAP CODE LOAD L.OCATION
TCOO
C
ENDS
C
ABSO
TESTl
5-19
1-3
04-21-86
IT.
IT.
ITT
27.
PAGE
, . --------------------.- ---.------ -- - - ---
C
,-- ----------------.-- ------ ------ --. - ---
c,
ITO
179
180
181
102
18.
114
185
18.
lOT
188
18'
190
191
192
19.
194
195
19.
19T
190
19.
200
201
202
20.
204
200
20.
20T
208
20.
210
211
212
213
214
215
21.
21 T
218
219
220
221
222
223
224
22.
22.
22T
228
22.
230
231
232
233
234
235
23.
23T
238
23'
240
241
242
243
244
240
24.
24T
240
24.
250
251
252
253
2'4
2.0
25.
257
2.0
25'
2.0
2.,
2.2
263
2.4
2.0
2 ••
267
2.8
2.'
2TO
2Tl
2T2
2T3
214
2T.
2T.
2TT
2T8
C
C
c
c
c
0000
c
c
c
0002 1111
1111
0006 1111
c
0008 1111
c
c
OOOA 1111
aooe 7111
c
c
c
c
c
OOOE 1111
0010 1111
0012 11
0013 1111
0015 11
0016 11
0017 11
0018 11
0019 11
OOIA 1111
ODIC 1111
10
ODIE
SEGMENT AT 40H
DATA
c
0000 1111
OOO~
ROM BIOS DATA AREAS
1111
.EQUIP FL. ... G
.MFG TST
I
t
DW
DW
DW
DW
DW
DW
DW
DW
DW
SECOND L.OGICAL RS232 ADAPTER
DB
OMEMO'RY 5 I ZE
DW
OMFG_ERR'_FLAG
DB
ADDRESS= 0040 I 0000
BASE ADDRESSES OF RS232 ADAPTERS
c
DB
c
c ; ---------------------------------------KEYBOARD DATA AREAS
:
c I
c I -- - - - ------------- - ------- - -- - ------- --c
DB
I
c OKB FLAG
DB
;
c OKB-FLAG I
;
c OALT INPUT
DB
1
DW
c OBUFrER HEAD
c OBUFFER:TA I L
I
DW
c
HEAD = TAIL
INDICATES THAT
c ;-----c
DW
16 DUP! 1)
I
c
c
c
c
c ;---------------------------------------DISKETTE OAT A AREAS
:
c 1
c ;------- ---- ------------------------c
c
DB
c
c
DB
c
c
c
DB
c OMOTOR COUNT
;
c ODSKETTE_STATUS DB
1
c
7 DUP(?)
DB
I
c
c
c
c
c
c ;---------------------------------------VIDEO DISPLAY DATA AREA
:
c I
c 1- - --------------------- ---------- - - ----c
1
DB
c
?
1
c
DW
?
;
DW
c
?
I
DW
c
?
DW
c
e DUP! 1)
;
c
c
c
DW
c OCURSOR MODE
c OACTIVE-PAGE
DB
DW
c OADCR 684e
c OCRT gODE SET DB
c OCRT:PALETTE
DB
c
c I ----- ---------------- -- ---------- - - - - --POST AND B I OS WORK OAT A AREA
I
c ;
c 1------------- --------------- -----------c
I
c
RESERVED
RESERVED
BASE ADDRESSES OF PR I NTER ADAPTERS
SECOND LOG I CAL PR I NTER ADAPTER
THIRD LOGICAL PRINTER ADAPTER
RESERVED
INSTALLED HARDWARE FLAGS
INITIALIZATION FLAGS
IX 1024)
BASE MEMORY SIZE IN K BYTES
SCRATCHPAD FOR MANUFACTURING
ERROR CODES
KEYBOARD SHIFT STATE AND STATUS FLAGS
SECOND BYTE OF KEYBOARD STATUS
STORAGE FOR ALTERNATE KEY PAD ENTRY
PO I NTER TO HEAD OF KEYBOARD BUFFER
PO I NTER TO TAl L OF KEYBOARD BUFFER
THE BUFFER IS EMPTY
ROOM FOR 1 5 SCAN CODE ENTR I ES
-- - -
003E 11
D03F 1?
0040 11
004! 11
0042
OT
??
0049 11
004'" 1111
004C 1111
QO ...E 1111
0050
08
1111
0060
0062
0063
0065
0066
1111
11
1111
11
11
0061 1111
0069 1111
006B 11
c
c
OlD ROM INIT
OIO-ROM-SEG
DRIVE RECALIBRATION STATUS
BIT 3-0 = DRIVE 3-0 RECALIBRATION
BEFORE NEXT SEEK IF B IT I S = 0
MOTOR STATUS
BIT 3-0 = DRIVE 3-0 CURRENTLY RUNNING
BIT 7 = CURRENT OPERATION IS A WRITE
T I ME OUT COUNTER FOR MOTOR IS) TURN OFF
RETURN CODE STATUS BYTE
CMO BLOCK
IN STACK FOR DISK OPERATION
STAfus BYTES FROM DISKETTE OPERATION
CURRENT DISPLAY MODE (TYPE)
NUMBER OF COLUMNS ON SCREEN
LENGTH OF REGEN BUFFER I N BYTES
STARTING ADDRESS IN REGEN BUFFER
CURSOR FOR EACH OF UP TO 8 PAGES
CURRENT CURSOR MODE SETTING
CURRENT PAGE BEING DISPLAYED
BASE ADDRESS FOR ACTIVE DISPLAY CARD
CURRENT SETTING OF THE 3xe REGISTER
CURRENT PALETTE SETTING - COLOR CARD
STACK SAVE, etc.
; POINTER TO ROM INITIALIZATION ROUTINE
I POINTER TO I/O ROM SEGMENT
FLAG INDICATING AN INTERRUPT HAPPENED
DW
DW
I
c OINTR_FLAG
DB
c
c 1---- - ------------- --- -- ---- --------- - --TIMER DATA AREA
:
c I
c ;-------------------------------c
I
DW
c OTIMER LOW
1
DW
c OTiMER-HIGH
;
DB
c OTIMER:OFL
c
c ;---------------------------------------SYSTEM DATA AREA
:
c 1
c
-------------------c
1
DB
c OBIOS BREAK
I
c ORE SET_FLAG
DW
c
c 1-------------------- --- ---------- --- ---FIXED DISK DATA AREAS
I
c ;
c 1---- - ------------------ ---------- - - - ---c
c .DISK STATUS! DB
c OHF NOM
DB
c OCO'RTROL BYTE DB
c OPORT_OFr
DB
--- ----
OD6e 1111
006E 1111
0070 11
;------ -- --------
0071 11
0072 1111
0074 11
0075 11
0076 11
DOn 11
5-20
TESTl
LOW WORD OF T I MER COUNT
HIGH WORD OF TIMER COUNT
T I MER HAS ROLLED OVER SINCE LAST READ
---
BIT 7=1 IF BREAK KEY HAS BEEN PRESSED
WORD=1234H IF KEYBOARD RESET UNDERWAY
FIXED DISK STATUS
COUNT OF FIXED DISK DRIVES
HEAD CONTROL BYTE
RESERVED (PORT OFFSET)
T~~~I P~~~~n~!/~~ic~t·~O=~~RgN A;:~~b +:~T I~~~~j on
2.00
OSEG.INC - OATA SEGMENTS
280
201
282
283
20'
28'
280
2BT
2 ••
20'
2'0
2.,
2.2
2.3
2 ••
2 ••
2'0
2.T
2 ••
2"
300
301
302
303
30'
30'
300
30T
308
30'
liD
311
lI2
lI3
lI.
lI.
lIO
31T
lI.
lI.
320
321
322
323
...
320
320
32T
32.
32'
3.0
..,
"2
333
•••
•••
0018
0019
OOlA
OOla
OOlC
DOlO
DOTE
OOTF
71
11
71
11
11
11
71
71
0080 7171
0082 7171
0084
008S
0087
0088
0089
008A
008B
008C
0080
008E
008F
0090
0091
0092
0093
0094
00'ii'5
0096
0091
71
1711
71
71
71
71
71
71
71
71
71
71
71
11
71
71
71
11
11
"0
•• T
..••••••,
"0
•• 2
•• 3
•••
•••
•••
•••,
0098
009A
009C
009E
OOAO
7171
7171
7171
7171
11
"0
•• T
..
•• 0
OOAI
OT (
11
•• 2
•• 3
•••
•••
.OT
•••
•••
•• 0
.00
.01
'02
.03
'0'
'0'
.00
'67
'0.
.0.
'TO
'71
.T2
00A8 11111111
0100
0100
0101
11
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
1-'
04-21-86
PAGE
1 ----------------------- - -- - -- - - - -------I
TIME-OUT VARIABLES
I
,----------------------------------------
OPRINT_TIM_OUT
ORS232_ TIM_OUT
T I ME OUT COUNTERS FOR PR I NTER RESPONSE
SECOND LOG I CAL PR I NTER ADAPTER
TH I RD LOG I CAL PR I NTER ADAPTER
RESERVED
TI ME OUT COUNTERS FOR RS232 RESPONSE
SECOND LOG I CAL RS232 ADAPTER
RESERVED
RESERVED
DB
DB
DB
DB
DB
DB
DB
DB
1---------- ------- ------------------ ----,
ADDITIONAL KEYBOARD DATA AREA
I
1-------- -------- ------------------- ----OBUFFER START
OBUFFER:END
I BUFFER LOCATION WITHIN SEGMENT 40H
I OFFSET OF KEYBOARD BUFFER START
I OFFSET OF END OF BUFFER
OW
OW
1----------- ---- ------------- ------- -----
,--------------- ----------.--------------,
EGA I PGA 0 I SPLAY WORK AREA
OROWS
OPOINTS
OINFD
OINFO_3
t
ROWS ON THE ACTI VE SCREEN 1LESS I)
BYTES PER CHARACTER
MODE OPTIONS
FEATURE BIT SW ITCHES
RESERVED FOR DISPLAY ADAPTERS
RESERVED FOR DISPLAY ADAPTERS
DB
OW
DB
DB
DB
DB
1--------------- -------------------- ----1
ADDITIONAL MEDIA DATA
I
1---------- ------ ------------------- ----OLASTRATE
OHF STATUS
OHF-ERROR
OHF-INT FLAG
OHF-CNTftL
OOSI(_STATE
ODSK_TRK
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
LAST DISKETTE DATA RATE SELECTED
STATUS REGISTER
ERROR REG I STER
FIXED DISK INTERRUPT FLAG
COMBO FIXED DISK/DISKETTE CARD BIT 0_1
DRIVE 0 MEDIA STATE
DRIVE I MEDIA STATE
DRIVE 0 OPERATION START STATE
DRIVE I OPERATION START STATE
DR I VE 0 PRESENT CYL I NDER
DRIVE I PRESENT CYLINDER
1--- - - -- ------------------------- - - -----1
ADO I T I ONAL KEYBOARD FLAGS
I
1--- - --- ----------- .----- ------- - - - -----OKB FLAG 3
OKB:FLAG:2
DB
DB
I KEYBOARD MODE STATE AND TYPE FLAGS
I KEYBOARD LED FLAGS
1---------------------------------------1
REAL T I ME CLOCK DATA AREA
I
1 ------------ - --- ----- - ------- ------- ---1 OFFSET ADDRESS OF USERS WAIT FLAG
I SEGMENT ADDRESS OF USER WA I T FLAG
I LOW WORD OF USER WA I T FLAG
I HIGH WORD OF USER WAIT FLAG
I WAIT ACTIVE FLAG (OlaBUSY, 80=POSTEC)
100=POST ACKNOWLEDGED)
I
1-- ----------- ------- ---- -- -- -- ---------I
AREA FOR NETWORK ADAPTER
I
1- - ----------- ------- ----- - - - -------- ---ONET
DB
1 DUPI?)
I
RESERVED FOR NETWORK ADAPTERS
1----------------------------------------
I
EGA/PGA PALETTE POINTER
I
1- - -- -------------- -- ---- ------ - - --------
I POINTER TO EGA PARAMETER CONTROL BLOCK
DO
1 RESERVED
1---------------------------------------1
DATA AREA - PRINT SCREEN
1----------------------------------------I
ORG
OSTATUS_BYTE
DB
OATA
ENDS
100H
I ADDRESS= 0040 I 0 I 00
(REF 0050 I 0000)
PRINT SCREEN STATUS BYTE
OI=BUSY, FF=ERROR
OO=REAOY/OK,
1 END OF B I OS DATA SEGMENT
.LIST
TESTl 5-21
.-.
04-11-1'
na
114
n.
n,
an
n.
n,
a ••
•••
.....
a ••
•••
,
a.4
an
a ••
.19
a,.
a"
I"
.,a
a'4
•••
a. .
ItT
.91
a. .
400
4 ••
40.
4.a
4.4
4 ••
4.'
40T
4 ••
4.'
4'0
411
4.2
4.a
4.4
4 ••
416
4.T
4 ••
419
4.0
.2.
4 ••
4.a
424
421
4.'
42T
42 •
42'
4ao
4.,
43.
4aa
434
4a.
4a,
431
4a.
439
440
44.
442
443
444
441
44.
44T
44'
44'
41.
411
452
411
414
455
41'
4.T
45.
41'
4'.
461
4'2
4,a
• OOFC
• 0002
• 0000
• F'TlD
• F9FD
• 0060
• 0061
• OOP'I
• DaDe
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
ODeD
0001
0002
0010
0020
0040
0010
00'4
0001
0002
0004
0001
0010
0020
0040
0010
•
•
•
•
•
0001
0010
0020
0040
0010
•
•
•
•
•
•
•
•
•
•
•
0060
OOAA
OOAR
OOAD
OOAE
OOCO
DODO
OOOF'
ODED
OOFE
0001
•
•
•
•
•
•
•
•
00"
OOFE
OOFA
00F4
00F3
00F2
OOEE
ODED
•
•
•
•
•
DOFF
OOFE
OOFA
OOFO
OOAA
•
•
•
•
•
•
•
•
•
•
0045
0046
0031
0010
OOIA
0053
0052
002A
0036
0054
•
•
•
•
•
•
•
OOAB
0041
0054
0051
0051
ODED
OOEI
5-22 TESTl
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
C
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
PAGE
INCLUDE POSTEau. INC
__ ......... _---------------- .................
,....................
,------ ............. _---_ ............. _----------------•
EQUATES USED BY POST AND liDS
RATCU~PII'I:
~AT().a_
EQU
.QU
IQU
EQU
EQU
,-- ......... _ ..... 042
IIOlitT A
IIORT-.
RAM "AR ON
"A"-"AR-DFJI'
KEYIOARD INTERFACE AND DIAGNOSTIC CONTROL ftEGISTERS -----------EQU
060H
1042 KEYBOARD SCAN CODE/CONTROL. fIORT
EQU
061H
PORT 8 READ/IRITE DIAGNOSTIC REGISTER
EQU
111100111
AN) MASK FOR PARITY CHECKING ENABLE ON
EQU
0000 I looa
Oft "ASK FOfII: PAR I TY CHECK I NG ENABLE OFF'
;=~
~~ggggg~:
S~K.
!QU
EQU
EQU
EQU
EQU
EQU
!QU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
Ooooooioa
Ooolooooa
001000001
010000008
10000000a
MODEL BYTE
SUI MCoEL BYTE
l,a1' ~Evlt
::~rzY-!RR
ftEFftESH alT
OUT2
10 CHECK
pARITY CHECK
STATUSiaoIitT
OUT rAI PIJI.~
'IPT " " FILL
CMD""DATA
KTlIIi 'NO
SYS P\.AG-
TIIAN! TWUT
Rev TIIauT
PAATTy _EVEN
OFCH
.O.H
GOGH
O,.,aOH
OF9FDH
• SYSTEM MODEL BYTE
I SYSTEM SUB-NODEL. TYPE
I BIOS REYISION LEVEL
I LPPEft L.IMIT + 131
I LOWD: LIMIT" 20X
I
;{~.:O~~T ~~T~H~~ :~;ITY ERROR
SPEAKEft QUWIIUT DATA ENABLE alT
REF'RESH TEST II T
SPEAKER T I MER DUT2 I NI-UT a I T
I/O (MEMORY I CICCK OCCl.Iftltl!O lIT MASK
MEMORY PAR I TY CHECK OCCUftftlED II T MASK
1042 STATUS POftT
a • +OUTPVr IUF'FEIt FLLL.
, • + INPUT BLFFER FULL
2 • -SYSTEM FLAG -POST/-SELF TEST
3 • -COMMAND/+DATA
4 • +KEYIOAltD 1N4IBITED
I • +TRANSMIT TIMEOUT
6 • +RECEIYE TIME OUT
7 • +PAftITY IS EVEN
.'4H
oooooooia
00000010.
00000100.
OOOOIOOOB
OOOIOOOOB
00100000.
01000000.
10000000B
1--------.. 8042 INPUT PORT lIT DEP'INITION SAVED IN ....G TST --- .. -------------- .. lASE MIMI
EQU
OOOOIOOOB
I BASE PL.ANAR 1t7w MEMORY EXTENSION 640/X
IASEiEM
EQU
000100008
I BASE PL.ANAR R/W MEMORY SIZE 256/512
:~_~
~:~
g~~ggggg:
: ~~~=L:~S~Y~:~T~~T~~E~:-;ACTURING
KEY::m_IN4IB
EQU
loooooooa
I KEYBOAPtD 1N4IBIT SWITCH BIT
1-.... - ......... - 1041 COMMANDS .... -- .... --------------- .. --- .. ------- ... ------------- .. ------EQU
060H
I WR I TE 1042 COMMAND BYTE
EQU
OAAH
1 8042 SELF TEST
SELF TEST INTR-"ACE CK
EQU
OAIH
1 CHECK 1042 INTERFACE COMMAND
DIS Ra:J EQU
OADH
I D I SABLE K!YBOAftD COMMAND
ENAIca:)
EQU
OAEH
1 ENABLE KEYBOARD COMMAND
RE~ 1042 IfIFUT EQU
OCOH
1 READ e042 .,.PUT PORT
DISA~ BTT20
EQU
ODDH
I DISABLE ADDRESS LINE BIT 20
ENABLE IITIO
EQU
ODFH
I ENABLE ADDRESS L.INE 81T 20
KY80 c:tK DATA
EQU
OEOH
I GET KEYBOARD CLOCK AND DATA COMMAND
SHUT:CIII)EQU
OFEH
I CAUSE A SHUTDOWN COMMAND
KYa)_CLK
EQU
OOIH
1 KEYBOARD CL.OCK BIT 0
1ft I 1£ 1042 L.OC
,---------- KEYBOARD/LED COMMAf«)S
KB RESET
EQU
OF'FH
KB-.ESEND
EQU
OFEH
KII-..AKE BREAK
EQU
OFAH
KB-U 640K OPTION INSTALLED
(12SKI
1
EQU
OIOOOOOOB
I FLAG USED BY CMOS SETUP UTILITY
C
C
C
•
..
•
•
•
•
III
•
•
•
II
•
0001
0080
0080
0010
0010
0004
0030
OOOA
0002
OOOF
0014
0025
C
C
C
C
C
~~~S~[~~V_ST
~~~
g~g~OIOOB
C
QU IE'T SEEK
MAX D1{V
HD1~ SETTLE
HD3Ztr SETTLE
MOTOR:WAIT
EQU
EQU
EQU
EQU
EQU
OOAH
Z
15
20
37
:
I
1
I
I
1
SEEK TO TRACK 10
MAX NUMBER OF DR I VES
1.2 h4 HEAD SETTLE TIME
320 K HEAD SETTLE TI ME
2 SECONDS OF COUNTS FOR MOTOR TURN OFF
1---------- DISKETTE ERRORS
TIME OUT
EQU
080H
BAD !EEK
EQU
040H
BAD-NEC
EQU
020H
BAD-CRC
EQU
01 OH
MED-NOT FND
EQU
OOCH
DMA -BOuiiiDARY
EQU
009H
BAD-DMA
EQU
OOSH
MEDTA CHANGE
EQU
006H
RECORI5 NOT FNO EQU
004H
WRITE JSROTE'CT
EQU
003H
BAD AI5DR MARK
EQU
002H
BAD:CMD EQU
00 I H
I
I
I
I
I
I
I
I
I
I
I
I
ATTACHMENT FAILED TO RESPOND
SEEK OPERATION FAILED
0 I SKETTE CONTROLLER HAS FA I LED
BAD CRe ON 0 I SKETTE READ
MED I A TYPE NOT FOUND
ATTEMPT TO DMA ACROSS 64K BOUNDARY
Dh4A OVERRUN ON OPERAT I ON
MEO I A REMOVED ON DUAL ATTACH CARD
REQUESTED SECTOR NOT FOUND
WR I TE ATTEMPTED ON WR I TE PROTECT 0 I SK
ADDRESS MARK NOT FOUND
BAD COMMAND PASSED TO DISKETTE 110
C
C
C
C
C
•
•
•
•
•
•
•
,.
0080
0040
0020
0010
OOOC
0009
0008
0006
II 0004
• 0003
.. 0002
II 0001
•
=
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
0001
0002
C
C
C
III
611
612
613
614
• 0000
• 0001
II 0002
• 0007
0001
• 0002
• 0004
III 0010
II 0020
• OOCO
• 0000
• 0040
.. 0080
C
II
oooe
•
OOCO
C
C
C
C
DRV-DET
~~~
gggggg~~:
~~~
gg~~gggg:
EQU
C
RATE'MSK
EQU
:;~~:::~
~~~
C
C
C
C
C
C
TEST I
1---------- MEDI AI DR I VE STATE INDICATORS ---------------------------------------
~:~-~~~:
~~~:~~~P
C
~~~~~ ~~b~E (!!A~~~ g~~~:~~
1---------- DISK CHANGE LINE EQUATES ------------------------------------------NOCHGLN
EQU
OOIH
I NO DISK CHANGE LINE AVAILABLE
CHGLN
EQU
002H
I DISK CHANGE LINE AVAILABLE
C
C
C
C
5-24
1---------- 0 I SKETTE EQUATES --------------------------------------------------DUAL
EQU
OOOOOOOIB
, MASK FOR COMBO/DSP ADAPTER
I NT FLAG
EQU
10000000B
I I NTERRUPT OCCURRENCE FLAG
DSK-CHG
EQU
10000000B
I 0 I SKETTE CHANGE FLAG MASK 81 T
DETlRMINED
EQU
OOOIOOOOB
I SET STATE DETERMINED IN STATE BITS
HOME
EQU
00010000B
I TRACK 0 MASK
C
C
C
598
599
600
601
602
603
604
605
606
607
608
.,.•••
g:~-~~~!
C
•• 2
566
567
568
569
570
571
572
573
574
575
576
577
PAGE
C 1----------------------------------------
•• 7
•••
•••
'-1
04·21-66
~:~~:igg
SEND:MSK
~~~
EQU
:~L~~~~~ ~~~Q~+L~l~ABILITY
00000100B
:
I DRIVE DETERMINED
IIOOOOOOB
:
BIT
I MASK FOR CLEARING ALL BUT RATE
g~gggggg:
: ~gg
11000000B
:
MASK
I MASK FOR SEND RATE BITS
~ggg~~gg:
(1.21.41
~~~~~ED~~~~M~~~D
~:g g:~~ ::~~
~~~R~~io~A~~A=~T~ATE
1---------- MEDIA/DRIVE STATE INDICATORS COh4PATIBILITY ------------------------M3D3U
EQU
OOOOOOOOB
I 360 MEDIA/DRIVE NOT ESTABLISHED
M3DIU
EQU
OOOOOOOIB
1360 MEOIA,I.ZDRIVE NOT ESTABLISHED
MIDIU
EQU
000000108
I 1.2 MEDIAIDRIVE NOT ESTABLISHED
MED UNK
EQU
000001118
I N,QNE OF THE ABOVE
-
,
T~~; 1P~~~~n~~/~~ic~t·~O=~~RgN A;:~~b +E~T (~~~~; on
2.00
POSTEQU.INC - COMMON EQUATES
615
616
611
61.
61.
62.
621
622
623
.2.
625
626
627
62'
62.
.3.
6"
632
633
•••
6.5
636
637
6"
6"
6'.
6.,
6.2
6"
6.'
6.5
6 ••
647
6 ••
6"
65.
651
652
653
65.
.55
656
.57
658
65.
6 ••
661
662
6.'
66.
665
..
..
..
..
..
..
..
0020
0020
0021
OOAO
OOAI
OOTO
0010
..
..
..
..
DaDe
0000
DODO
OOCO
.. 0040
:&
oDeD
.. 0001
:I: 0002
.. 0004
.. 00015
.. 0010
.. 0020
• 0040
.. oDeD
.. 00151
• OOSF
.. OOFO
=
0000
.. 8000
0000
OOOA
00015
0001
0100
0101
1-8
04-21-156
e PAGE
e ,---------- I NTERRUPT EQUATES -----------------------------------------------.-e EOI
EQU
020H
, END OF INTERRUPT COMMAND TO 8259
e INTAOO
EQU
02DH
I 15259 PORT
EQU
021H
I 15259 PORT
e INTAOI
e I NTBOO
EQU
OAOH
I 2ND 15269
e INTBOI
EQU
OAIH
I
e INT TYPE
EQU
OTOH
I START OF 15259 INTERRUPT TABLE LOCATION
EQU
0 I OH
I V IDEO VECTOR
I NT-V IDEO
C
e ,--=---------------------------------------------------------.-----------------e DMAOe
EQU
DOSH
I DMA STATUS REGISTER PORT ADDRESS
e DMA
EQU
DOOH
I DMA CH.O ADDRESS REGI STER PORT ADDRESS
C OMA I S
EQU
OOOH
I 2ND DMA STATUS PORT AODRESS
e DNA I
EQU
OCOH
I 2ND DNA CH.O ADDRESS REGISTER ADDRESS
e ---------------------- - - ----------------------------------------------------C TIMER
EQU
040H
I 8254 TIMER - BASE ADDRESS
e
e 1--------- MANUFACTUR I NG PORT -------------------------------------------------c MFG_PORT
EQU
BOH
I MANUFACTURING AND POST CHECKPOINT PORT
e
I
DMA CHANNEL a PAGE REG I STER ADDRESS
e
e 1--------- MANUFACTURING BIT DEFINITION FOR OMFG ERR FLAG+I -------------------e
~~~
~~~~~~~b:
e~~~~~E ~~~~ ~~~~E~AILED :~~~g~ ~g~l
C ~~~-~~:~
e LMC!' FAIL
EQU
000001008
I LOW MEG CHIP SELECT FAILED (ERROR 109)
e KYCLf{ FAIL
EQU
000010008
I KEYBOARD CLOCK TEST FAIL.ED (ERROR 304)
e KY SY!' FAIL
EQU
OOOIOOOOB
I KEYBOARD OR SYSTEM FAILED
(ERROR 303)
EQU
OOIOOOOOB
I KEYBOARD FAILED
(ERROR 301)
e KY§D FAIL
e
~~~
~bgggggg:
~~~~~!~~ ~~~~E6AILED
:~:=g~ ;g~:
e ~~~:~~:~
e
e I -- - - ----- ---------- - -- - ------- - - ------ - -- ------- -"-- -- -- ----- - - - - - --------.----e DMA PAGE
EQU
oelH
I START OF DMA PAGE REGISTERS
e LAST_DNA_PAGE EQU
OSFH
I LAST DMA PAGE REG I STEPt
c
e I -- ----------------- -- - - - ------ - - -- --- - - -- ---- -- -------------:------ - - - - ---------e X2S1
EQU
OFOH
I MATH COPROCESSOR CONTROL PORT
e
e
-- --- ------------------------------------ --- ---------------------e
~~~
g~ggg~
: ~g~::: ;::::g~ ~~r~~~~
e ~g~~:~~
e
e I -- - - ---------------- -- - - ------ - - ------ - - - ---- - - -------------- - -- - - -- - - --------e eR
EQU
OOODH
I CARR I AGE RETURN CHARACTER
e LF
EQU
OOOAH
I LINE FEED CHARACTER
e RVRT
EQU
000010008
I VIDEO VERTICAL RETRACE BIT
e RHRZ
EQU
OOOOOOOIB
I VIDEO HORIZONTAL RETRACE BIT
e H
EQU
256
I HIGH BYTE FACTOR IX 100H)
,
--
:
:
,---
C
X
-----
EQU
H+I
-- -
I HIGH AND LOW BYTE FACTOR (X 101H)
.LIST
TEST1
5-25
...•••••••••
PAGE
c INCLUDE SYSDATA.INC
c 1------------------------------------------------------------------------------PROTECTED MODE EQUATES FOR POST TESTS AND BIOS ROUTINES
J
c 1
c 1---- -- -------------------- ---------------- - ------ ------ - ----- -- - - ------ - --- - --c
c 1----LENGTH EQUATES FOR PROTECTED MODE TESTS
c
.TO
'TI
.T'
.13
.14 = 0300
.T. • 0800
....T,
..•••...,,
•••
.TT
•• 0
.,.
........
...
6O'
•••
•••
,
•••
•••
•••
.91
•••
•• T
"0
TOO
TOI
TO'
TO.
TO.
TO.
TO.
TOT
TO.
TO.
TIO
Til
TI2
TI3
TI.
it 0088
111
0008
1000
• 4000
• FFFF
• FFfF
• 0000
• DOAD
• 0400
•
• 0000
• 8000
• oooe
• 0000
• DODA
• 0000
• oooe
• o.()oo
• OOOF
• 0000
0093
0098
aGE2
0081
• 0086
• 0001
119
c
C
C
C
C
C
C
'" 0087
T'O
T2I
T"
T'.
T"
T'.
T,'
T21
T'.
T,.
T.,
T.,
13.
T.O
T••
13'
13.
T31
T••
T••
T.O
T.,
T.'
14.
0000
0008
0010
0018
0020
0028
0030
0038
0040
0048
0050
0058
0060
0068
0010
00T8
0080
11 11 11 11 11 17 11 11
11171711????111?
1111111111111717
1111711117171117
1111117111117117
1111111111117111
171171??11117111
711111111111??11
1111111111111111
1111111111??17??
1711111111111111
1111111711711111
1111??1??????1??
171111??1????1??
1171111111111117
1111111111111111
1171111111111111
0088
T••
TOO
T"TO'
T.T
T.,
T••
T..
T.,
EQI,J
EOU
EOU
EOU
00300H
256-8
TYPE GOT DEF
TYPE DATA DESC
4-1024
16-1024
OFFFFH
OFFFFH
OOOOOH
SYSTEM DATA AREA LENGTH
256 SYSTEM lOT ENTRIES, 8 BYTES EACH
GOT STRUCTURE LENGTH
LENGTH OF A DESCR I PTOR
MONOCHROME CRT SIZE
COMPATIBLE COLOR CRT SIZE
SIZE OF EACH PORT I ON OF THE ENHANCED
MAX 1MUM SEGMENT LENGTH = 64K
NULL SEGMENT LENGTH = 0
LOCATION EQUATES FOR PROTECTED MODE TESTS
SYS lOT LOC
EOU
EOU
EOU
EOU
EOU
EOU
EOU
EOU
EQlJ
EOU
EQU
EOU
EOU
EQU
EQU
ODOAOH
I THE SYSTEM lOT IS AT THE BOTTOM
00400H
I SAME AS REAL
(SYS lOT LOC + SYS lOT LENI
ooooR I MONO'f'HROME CRT ADDRESS
OBH
I (OBOOOOHI
8000H
I COMPATIBLE COLOR CRT ADDRESS
OBH
I (088000H)
OOOOH
1 (OAOOOOH)
O.H
OOOOH
I (OBOOOOH)
oeH
OOOOH
1 CODE SEGMENT POST/BIOS
OFH
I (OFOOOOH) FOR TESTS
OOOOH
t ABSO
OOH
DEFINITIONS FOR ACCESS RIGHTS BYTES
EOU
111100118
LOT liESC ..,.
FRE! TSS
INT 'C'ATE
TRApi_GATE
EOU
EOU
EOU
EQU
EQU
EOU
1001001lB
10011011B
IIIOOOIOB
1000000lB
10000110B
1000011lB
V I RTUAL_ENABLE
EOU
000000000000000 I B
g~~-g~~~-~g~i;~
1-----
PRESENT
oPL = 3
CODE/DATA SEGMENT
NOT EXECUTABLE
GROW-UP (OFFSET <= LIMIT)
WRITABLE
ACCESSED
DPL = 0
CPL 0 - NON-CONFORMING
I PROTECTED MODE ENABLE
THE GLOBAL DESCRIPTOR TABLE DEFINITION FOR POWER ON SELF TESTS
GDT_DEF
GOT PTR
SYS-IOT PTR
RSOA PT'If
C BW'f'RT PTR
~:gg=~-~~:
E-CCRT-PTR2
sVs Rag CS
~~-+i=~""
g~:~~=~
c
PO!T TR
POST-TSS PTR
C
GOT_liEF ..,.
C POST-LOTi{
C POST-LOT PTR
C
0004 17
C
0005 11
0006 1111
C
0008
STRUC
DO
DO
DO
DO
DO
DO
DO
DO
DO
DO
DO
DO
DO
DO
DO
DO
UNUSED ENTRY
; THIS ENTRY POINTS TO THIS TABLE
I POST INTERRUPT DESCRIPTOR TABLE
; THE REAL SYSTEM DATA AREA FOR POST
I COMPATIBLE BW CRT FOR POST
I COMPATIBLE COLOR CRT FOR POST
1 ENHANCED COLOR GRAPHICS CRT (16 BYTES)
I
CS - POST lOT, ROM RES I DENT
DYNAM I C PO I NTER FOR ES
DYNAMIC POINTER FOR CS
DYNAMIC POINTER FOR SS
DYNAM I C PO I NTER FOR DS
TR VALUE FOR THIS MACHINE'S TSS
I LOTR VALUE FOR TH I S MACH I NE' SLOT
DO
ENDS
C
C
C
1-----
SEGMENT DESCRIPTOR TABLE ENTRY STRUCTURE
OATA DESC
SEG [IMIT
BASE'_LO..:..WORD
BASE H I BYTE
DATA-AC'f' RIGHTS
g~i~:~i~~RVED
STRUC
QW
DW
DB
DB
~~DS
SEGMENT LIMIT (I - 65535 BYTES)
24 BIT SEGMENT PHYS I CAL
ADDRESS (0 - (16M-I))
ACCESS RIGHTS BYTE
RESERVED - MUST BE 0000 FOR THE 80286
C
T••
T••
C
C
C
C
C
C
C
C
C
C
C
C
C
C
0000 1111
0002 1111
TO.
T"TO.
c
c
c
c
C
C
C
T••
T.T
T••
1-----
EOU
EOU
EOU
EOU
EOU
C
T••
14.
CSEGO CO ..,.
CSEGO-HI
NSEGO-LO
NSEGO:HI
C
C
C
C
C
C
C
C
C
• OOF3
T..
C
C
NUL[_SE~_LEN
c
c
c
c 1----c
• 0000
TI T
TI.
TI6
SDA LEN
SYS-IDT LEN
GDT-LENDES~ LEN
MCRT-SIZE
CCRT""SIZE
ECCRT SIZE
MAX sE'G LEN
c ~g~:tggc MCRTo LO
c MCRTO-HI
C
c gg=~::~~
c
C ~gg=~:-tg-~~
c ECCRTO-HI-LO
c ECCRTO-HI-HI
DeAO
• oooe
•
•
•
•
C
C
C
C
C
C
C
C
C
C
C
C
C
C
0000 1111
0002 1171
0004 11
0005 11
0006 1111
00015
T••
5-26
C
C
C
C
C
1-----
GATE DESC
ENTRV PO I NT
CS SECECTOR
STRUC
DW
OW
GATE~ESE'RVEO
:
OW
ENDS
C
C
~~~~_~g~N~ I GHTS
C
C
GATE:DESC
.LIST
TESTl
GATE DESCRIPTOR TABLE ENTRY STRUCTURE
DESTINATION ROUTINE ENTRY POINT
SELECTOR FOR DESTINATION SEGMENT
NUMBER OF WORDS TO COPY FROM STACK
ACCESS RIGHTS BYTE
RESERVED - MUST BE 0000 FOR THE 80286
1-10
04-Z1-86
70.
ue
PACE
CODE
0000
700
767
701
70'
77.
771
77.
77.
77.
77.
770
777
771
77.
71.
71'
71.
71.
71.
71.
71'
787
711
71'
7'.
791
7 ••
7 ••
79.
7 ••
7.,
7.7
791
79'
100
0000
102
103
104
805
106
lOT
108
• 0000
0000 31
32
20
4F
39
38
lIS
43
4'
152
38
36
51
4F
42
50
31
20
3T
50
4D
2E
2e
20
34
52
20
20
31
36
2E
43
31
39
812
813
814
8115
816
817
818
819
820
0022 31 31
31 31
32 33
4F 4F
2E 2E
4242
31 31
36 36
004E 20 20
38
34
20
50
20
4D
39
38
34
20
50
20
4D
39
58
36
43
52
49
20
38
515
36
43
152
49
20
38
I.'
I.'
I'.
I"
I.,
SEGMENT WORD Pt.BL I C
PUBL I C
PUBLIC
PUBLIC
PU8t..IC
POST I
BEGIN
ca04Z
OBF 4Z
posT 1
START_I
g::-::~~~~:R
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
IEXTRN
EXTftN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTftN
EXTRN
EXTRN
EXTRN
EXTRN
CONFTc BADINEAR
01 I I NEAR
DOS I NEAR
DUMMY RETURN I NEAR
ERR B!E:P, NEAR
GAT! A20lNEAR
KeD RESET I NEAR
MlI-INTINEAR
POSTZINEAR
PR I NT SCREEN I NEAR
PROC I'HUTDOWN I NEAR
ROM eti!CK I NEAR
SHuTz.NEAR
SHUTI I NEAR
SHUT4 I NEAR
SHUT6.NEAR
SHUTT.NEAR
SHUT"NEAR
SLAVE VECTOR TAIILE.NEAR
sTGTST CNTlN!AR
SYSINITIINEAR
VECTOR TABLEINEAR
VIDEO_f1ARMsIBYTE
ASSUME
CSICODE,DSINOTHING,ES I NOTH I NCi, 55 I NOTH ING
PROC
NEAR
EQU
•
DB
'78X7462COPR.
,
IBM CORP.
1981,1986
EVEN
I
DB
I
78)(7462
78X7463
TT88XXTT446623
COPR.
COPR.
CCOOPPRR ••
, B M
, B M
"
.....
I.'
In
•••
I.'
1----------------------------------------
123
1
I ••
I ••
INITIAL RELIABILITY TESTS -- (POSTI)
1 TEST.OI
1
80286 PROCESSOR TEST (REAL MODE)
, DESCRIPTION
,
VERIFY FLAGS, REGISTERS
1
AND COND I T I ONAL ,JUMPS.
1.1
I ••
I ••
•••
ASSUhE
I ••
I ••
8S6
00150
0050 FA
0051 B8 0880
0054 E6 TO
0056 9E
MDV
OUT
SAHF
JNC
JNZ
JNP
JNS
841
842
0051 13 21
0059 T5 28
843
844
00158 fB 23
OOID 19 21
845
846
847
848
84'
DOIF
0060
0062
0064
0066 aD 40
MDV
850
851
852
853
854
SHL
JND
•••
0068
0061.
006C
006E
006F
8&6
DOlt '78 00
851
858
0013 71. DB
0075 9F
88'
860
861
862
863
864
865
866
."
868
869
8TO
9F
B I 05
D2 Ee
13 II.
.73
1ST...
SHR
JNC
XDR
SAHF
JBE
OF
JS
JP
0076 D2 Ee
SHR
JC
SHL
JD
JZ
0018 72 06
ooaa
OOIA
OOIC
OOIE
1!4
AI
T5
E9
64
04
03
0123 R
CL,!
AH,CL
ERR02
AL,40H
AL,I
ERR02
AH,AH
ERR02
ERR02
ERR02
AH,CL
ERRD2
AH,I
ERR02
C7A
ERROZI
,
,
•
,DISABLE INTERRUPTS
FLAG MASK IN (AH) AND NMI MASK IN (ALI
DISABLE NNI INTERRUPTS, LATCH STANDBY
SET "SF" "ZF" "AF" "PF" "CF' FLAGS ON
GO TO ERROR ROUTINE IF "CF" NOT SET
GO TO ERROR ROUTINE IF 'ZF' NOT SET
GO TO ERROR ROUT I NE IF' PF" NOT SET
GO TO ERROR ROUTINE IF "SF" NOT SET
LOAD FLAG IMACE TO (AH)
LOAD COUNT REG I STER WI TH SH I FT COUNT
SHIFT "AF" INTO CARRY BIT POSITION
GO TO ERROR ROUTINE IF "AF" NOT SET
SET THE "OF' FLAG ON
SETUP FOR TEST I NG
GO TO ERROR ROUTINE IF "OF" NOT SET
SET (AH) = 0
CLEAR 'SF', 'CF", "ZF", AND 'PF'
GO TO ERROR ROUTINE IF "CF' ON
GO TO ERROR ROUTINE IF 'ZF' ON
GO TO ERROR ROUTINE IF 'SF' ON
GO TO ERROR ROUTINE IF 'PF' ON
LOAD FLAG I MACE TO (AH I
SHIFT 'AF' INTO CARRY BIT POSITION
GO TO ERROR ROUT I NE I F ON
CHECK THAT 'OF' 15 CLEAR
GO TO ERROR ROUT I NE I F ON
CONTINUE CONFIDENCE TESTS IF "u' SET
JMP
ERRD2
ERROR HALT
ERROR LOOP TRAP
MOV
MDV
AX , DATA
DS.AX
SET DATA SEGMENT
I NTO THE IDS I SEGMENT REG I STER
HLT
0081 EI FO
0083
0083 B8 ---- R
0086 8E 08
ERR02
ERR02
ERR02
ERR02
LAHF
DOlI. DO E4
DOTC 70 02
171
17.
175
In
ITT
LAHF
MDV
EO
14
E4
DOTE 74 03
0080
0080 F4
,PAD
I
DS,DATA
START_I'CLI
831
838
839
840
DO
11
32
9E
16
,EVEN BOUNDARY
I , 8 6
I EVEN MODULE
I IIjI 8 6
1000 MODULE
11"8866' ICOPYRIGHT NOTICE
DB
1-----------------------------------------------1-----------------------------------------------1----------------------------------------
I ••
,COPYRIGHT NOTICE
CTAI
1-----
Ct-ECK FOR PROCESSOR SHUTDOWN
'N
TEST
.JNZ
AL,STATUS PORT
~~BSYS_FLXC
SHUTD
READ CURRENT KEYBOARD PROCESSOR STATUS
CHECK FOR SHUTDOWN J N PROCESS FLAG
GO IF YES
ELSE CONT I HUE NORMAL POWER ON CODE
TESTl
5-27
1-11
04-21-86
.,.
.T.
eeo
eel
882
883
884
885
886
887
•••
•••
.'0
•••
891
PAGE
1----C7B;
0091
0091 BO IF
0093 E6 TO
0095 EB 00
0091 E4 71
0099 3t 09
0098 86 C4
0090 14 41
CHECK FOR SHUTDOWN 09
MOV
AL, CMOS SHUT DOWN+NM I
CMOS P01{T ,AL$+2 -
OUT
"MP
CMP
XCHG
"E
;-----
D09F 80 Fe 01.
AL,AH
CTC
AH.OAH
CMP
001.2 74 3C
"E
CTC
894
895
00A4 2" CO
001.6 E6 FI
SUB
AL,AL
X28T+I.AL
OUT
;--
.'8
900
001.8 BO 11
901
902
00 AI. E6 20
OOAC EB 00
903
904
905
OOAE 80 08
ooao E6 21
0082 EB 00
906
907
908
00S4 BO 00400B6 E6 21
00B8 EB DO
909
910
911
912
913
OOBA
OOBe
OOBE
oDeD
00C2
91.
915
91.
aD
E6
EB
80
E6
00C48011
00C6 E6 AD
00C8 EB 00
920
921
922
OOCA
Dace
OOCE
DODO
0002
0004
0006
BO
E6
80
EB
E6
EB
70
AI
02
00
AI
00
01
0008
DaDA
DaDe
OODE
E6
EB
eo
E6
Al
00
FF
Al
923
924
925
926
921
928
929
930
,.,
•••
•••
•••
•••
•••
•••
'.0,
'.2
•••
•••
•••
•••
•••
•••
'"•••
•••
•••
eo
I NSURE MATH PROCESSOR RESET
------------------------------------- - --------------RE-INITIALIZE THE 8259 INTERRUPT "
CONTROLLER CHIP
MOV
OUT
JMP
MOV
OUT
JMP
MOV
OUT
JMP
MOV
OUT
JMP
MOV
OUT
01
21
00
FF
21
917
918
919
WAS I T SHUTDOWN REQUEST A 1
BYPASS INITIALIZING INTERRUPT CHIPS
I
,-- ----- --------------------------------- --- -----------;
•••
I/O DELAY
GET REQUEST NUMBER
WAS IT SHUTDOWN REQUEST 91
SAVE THE SHUTDOWN REQUEST
BYPASS INITIALIZING INTERRUPT CHIPS
CHECK FOR SHUTDOWN OA
892
8 ••
•• T
I CMOS ADDRESS FOR SHUTDOWN BYTE
:~:~~~S_DATA
IN
AL.IIH
INTAOO .AL
$+2
AL.08H
INTAOI,AL
$+2
AL.04H
INTAOI,AL
$+2
AL.OIH
INTAO I ,AL
$+2
AL, OFFH
INTAOI,AL
I
ICW! - EDGE. MASTER,
ICW4
WAIT STATE FOR I/O
SETUP ICW2 - INTERRUPT TYPE 8H (8-F)
WAIT STATE FOR I/O
SETUP I CW3 - MASTER LEVEL 2
110 WAIT STATE
SETUP ICW4 - MASTER,8086 MODE
WAIT STATE FOR I/O
MASK ALL I NTERRUPTS OFF
(VIDEO ROUTINE ENABLES INTERRUPTS)
1--------------------------- --------- -------------- -------
I
RE-INITIALIZE THE 8259 INTERRUPT '2 CONTROLLER CHIP
;
;---------------.----------- ----------------------------Mav
AL,IIH
; ICWI - EDGE, SLAVE
OUT
JMP
INTBOO,AL
$+2
~~~
~~;.~~T l~PE
ICW4
WAIT STATE FOR I/O
SETUP ICW2 - INTERRUPT TYPE 70 1l0-1F)
-;
MOV
AL,02H
; SETUP I CW3 - SLAVE LEVEL 2
JMP
$+2
OUT
I NTBO I ,AL
110 DELAY
JMP
$+2
SETUP ICW4 - 8086 MODE, SLAVE
MOV
AL.OIH
OUT
INTBO I ,AL
WAIT STATE FOR I/O
JMP
$+2
MASK ALL INTERRUPTS OFF
MOV
AL.OFFH
OUT
INTBOI,AL
I ----------- - - ---- -- -- - -------- - --------- --- - -- ------ -- - ---- -- - ------- - - ---- - -I
SHUTDOWN - REST ART
I
RETURN CONTROL AFTER A SHUTDOWN COMMAND I S ISSUED
DESCRIPTION
I
i
A TEST ~s r.lACE FOR THE SYSTEM FLA.G BEiNG SET.
iF THE SYSTEM FLAG is
1
SET, THE SHUTDOWN BYTE I N CMOS I S USED TO DETERM I NE WHERE CONTROL IS
;
RETURNED •
••2
..
'31
CMOS = 0
CMOS = I
CMOS • 2
CMOS = :3
CMOS = 4
CMOS II 5
CMOS = 6
CMOS = 7
CMOS • 8
CMOS = 9
CMOS = A
•• T
SOFT RESET OR UNEXPECTED SHUTDOWN
SHUT DOWN AFTER MEMORY SIZE
SHUT DOWN AFTER MEMORY TEST
SHUT DOWN WITH MEMORY ERROR
SHUT DOWN WITH BOOT LOADER REQUEST
JMP DWORD REQUEST - (INTERRUPT CHIPS & 287 ARE INITIALIZED)
PROTECTED MODE TEST3 PASSED
PROTECTED MODE TES13 FAILED
PROTECTED MODE TEST I FAILED
BLOCK MOVE SHUTDOWN REQUEST
JMP DWORD REQUEST - (W/O INTERRUPT CHIPS INITIALIZED)
• 50
NOTES;
"2
'55
RETURNS ARE MADE WITH I NTERRUPTS AND NM I 0 I SABLED.
USER MUST RESTORE SSISP (POST DEFAULT SET. 000010400).
ENABLE NON-MASKABLE INTERRUPTS (NMI) WITH AN OUT TO
PORT 70H WITH HIGH ORDER BIT OFF, AND THEN ISSUE A
STI TO ENABLE INTERRUPTS.
FOR SHUTDOWN (5) THE USER
MUST ALSO RESTORE THE I NTERRUPT MASK REG I STERS •
•• T
•••
•••
960
961
962
963
964
965
966
967
968
9&9
970
971
972
.T'
'14
.T •
• 16
911
978
979
ODED
ODED
00E2
00E4
00E5
00E7
OOE9
OOEB
ODED
DOEF
DOF2
OOF4
OOF6
,----C7CI
aD
E6
90
21.
E6
IF
70
CHECK FROM WHERE
MOV
OUT
NOP
SUB
CO
71
8fJ EO
3e 01.
17 34
BE 0103 R
03 Fa
03 FO
2Ee 8B It
OUT
XCHG
CMP
"A
MOV
ADD
ADD
MOV
,-----
OOF9
OOFC
OOFE
0101
a8 ---- R
BE DO
BC 0400 R
FF E3
0103
0105
0107
0 I 09
0 I OB
OIOD
OlaF
0111
0113
0115
OIU
0123
0992
0000
0000
0000
0119
0000
0000
0795
0000
OIIF
AL, CMOS SHUT DOWN+NM I
CMOS_P01{T, ALAL,AL
5-28
R
R
E
E
E
R
E
E
R
E
R
TESTl
CLEAR CMOS BYTE
1/0 DELAY
SET BYTE TO 0
~=~![OATA,AL
AL,OAH
SHUTO
S I • OFFSET BRANCH
SI,AX
SI,AX
BX,CSs[Sl)
COMPARE WiTH MAXIMUM TABLE ENTRIES
SK I P TO POST I F GREATER THAN MAX I MUM
POINT TO THE START OF THE BRANCH TABLE
PO 1NT TO BRANCH ADDRESS
MOVE BRANCH TO ADDRESS TO BX REG I STER
SET TEMPORARY STACK FOR POST
SET STACK SEGMENT TO ABSO SEGMENT
MOV
AX,ABSO
SS,AX
SP.OFFSET OTOS
.JMP
BX
SET STACK POINTER TO END OF VECTORS
JUMP BACK TO RETURN ROUT I NE
SHUTO
SHUT I
SHun
SHU13
SHUT4
SHUTS
SHun
SHUTT
SHun
SHUT9
SHUTA
NORMAL POWER UP I UNEXPECTED SHUTDOWN
SHUT DOWN AFTER MEMORY SIZE
SHUT DOWN AFTER MEMORY TEST
SHUT DOWN WITH MEMORY ERROR
SHUT OOWN WITH BOOT LOADER REQUEST
JMP DWORD REQUEST WTTH I NTERRUPT I NIT
PROTECTED MODE T£STT PASSED
PROTECTED MODE TESTT FAILED
PROTECTED MODE TEST I FA I LEO
BLOCK MOVE SHUTDOWN REQUEST
JMP DWORD REQUEST (W/O INTERRUPT INIT)
MOV
MOV
•• 0
981
982
983
984
985
986
987
988
989
990
991
I
BRANCHs DW
OW
OW
OW
OW
OW
OW
OW
OW
OW
OW
1-12
04-21 -86
002
00'
00.
995 0119
9960119E4&O
997 0118 eo 20
998
0110 E6 20
999 OIIF
looa 011F FF 2E 0067 R
PAGE
,-----
OIO_ROM_INIT MUST BE INITIALIZED BY THE USER FOR VECTORED REQUESTS
SHUT51
IN
MOV
OUT
~t:~g~T_A
JMP
DWORO PTR OIO_ROM_INIT
FLUSH THE KEYBOARD BUFFER
FLUSH LAST TIMER REQUEST IF PENDING
- TO ALLOW TIMER INTERRUPTS
INTAOO,AL
SHUTA:
FAR JUMP TO USER DEFINED LOCATION
AFTER SHUTDOWN TO REAL MODE COOE
WITH INTERRUPTS AND NMI DISABLED
IQOl
1002
1003
1-----
CHECKPOINT 01
1004
1005
1006
1001
1008
1009
1010
1011
1012
1013
0123
0123 80 01
0125 E6 80
MOV
OUT
1----0121 88 F'FFF
012A F9
0128 T3 21
10'-4 0120
1015 0120
1016 Ol2F
10170131
1018 0133
1019 0135
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
SHUTOI
MOV
STC
JNC
DB
DB
C3
CI
01
02
E2
EC
F5
FE
01
CT
01
014C 74 01
014E
co.
014F
015E
0160
0162
0164
0166
1051
1052 0168
1053 016A
1054 0168
1055 0160
1056 016E
1057
1058
1(.159 0110
1060 0112
1061 0175
1062 0116
1063 0118
1064 OllA
1065 0118
10660170
1061 017E
1068 0180
1069 0181
1010 0183
1011 0185
1012 0186
1013 0188
1014
1015
1016
1011
1078
1079
1080
1081
1082
1083
1084
1085
1086 018A
1087 OIBC
1088
1089
1090 018E
1091 0190
1092 0192
1093 0194
1094 0196
1095 0198
1096 019A
1091 019A
1098 0198
1099 0190
liDO 019F
1101 OIAI
1102
1103 0lA3
1104 0lA5
1105 0lA5
0.
(AX)
MOV
OUT
NDP
IN
MOV
OUT
Nap
IN
AND
TO
71
898B
TO
71
07
C4
70
C4
XCHG
OUT
XCHG
11
OUT
MOV
Nap
OUT
Nap
IN
00
0308
1 WRITE PATTERN TO ALL REGISTERS
01,51
C9
AX,OI
ERROl
PATTERN MAKE IT THROUGH ALL REGISTERS
NO - GO TO ERROR ROUT 1NE
CLEAR CARRY FLAG
CB
TSTIA
ZERO PATTERN MAKE IT THROUGH 1
YES - GO TO NEXT TEST
AX,DI
CIOA
1 HALT SYSTEM
INSURE THAT CMOS CLOCK INTERRUPTS ARE DISABLED
80 8e
90
E6 TO
90
E4 71
BO
BA
EE
FE
B2
EE
B2
EC
B2
EC
BO
B2
EE
BO
E6
OS,AX
ex,os
ES,BX
CX,ES
SS,CX
OX,SS
SP.DX
BP,SP
SI,BP
HLT
1----CIOAI
E6
90
E4
88
E6
90
E4
24
86
E6
86
E6
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
JNC
XO.
JNZ
CLC
JMP
JZ
103e Ol4F 80 88
1046
1047
1048
1049
1050
SETUP ONE'S PATTERN IN
SET CARRY FLAG
GO I F NO CARRY
AX I OFFFFH
ERROl
ERROl:
014E F'4
0151
0153
0154
0156
0159
0158
DISC
°
CB.
8E
8e
8E
8e
8E
8e
88
89
68
88
73
33
15
Fe
EB
0137
0139
0138
0130
OUF
0141
0143
0145
0141
0148
E3
014 ...
0141. OB CT
1039
1040
1041
1042
1043
1044
10415
<><><><><><><><><><><><>
1 <><>
<><> CHECKPO I NT
AL.OIH
MFG_PORT I AL
READ/WRITE/TEST THE 80286 REGISTERS WITH ONE'S AND ZERO'S
,-----
CO
B8
BA
DA
00
CO
FC
61
"'L, (CMOS REG B+NM I )
CMOS_pORT, ... L "'L,CMOS O... T ...
AX, X-{CJ;!OS_REG_B+NM I)
CMOS_PORT, AL
AL,CMOS DATA
AL,OOOOOI 1 IB
AL,AH
CMOS PORT. AL
AL.AH
CMOS_D...TA.AL
AL,CMOS_REG_C+NMI
... DDRESS CMOS AL ... RM BYTE WITH NMI=OFF
I/O DELAY
READ DATA TO OPEN ST ... NDBY LATCH
ADDRESS TO BOTH (AH) AND (AL)
ADDRESS CMOS ALARM BYTE WITH NMI=OFF
I/O DELAY
GET THE CURRENT CONTROL REG I STER
CLEAR SET,pIE.AIE. AND SQWE BITS
SAVE IT
ADDRESS CMOS FLAGS BYTE WITH NM 1 =OFF
I/O DELAY
CMOS_PORT .... L
... L,CMOS_D ... T ...
RESET VIDEO
MOV
AL,O
MOV
DX.03D8H
OUT
DX.AL
AL
INC
MOV
OL,OB8H
OUT
DX,AL
MOV
OL.OBAH
IN
AL.DX
MOV
DL,ODAH
AL,DX
IN
MOV
AL.O
MOV
DL,OCOH
OUT
DX,AL
MOV
AL.II""OOB
OUT
PORT_B.AL
I/O DELAY
READ STATUS TO CLEAR PEND I NG INTERRUPT
CLEAR OAT A BYTE TO DISABLE V IDEO
GET COLOR MODE CONTROL PORT ADDRESS
o I SABLE COLOR V IDEO
MONOCHROME MODE RESET MASK
GET AODRESS OF MONOCHROME MODE CONTROL
DISABLE B/W VIDEO, ENABLE HIGH RES
ADDRESS OF MONOCHROME STATUS RECiISTER
READ STATUS TO DISABLE EGA VIDEO
ADDRESS OF COLOR MODE STATUS REGISTER
READ STATUS TO DISABLE EGA VIDEO
SELECT ATTRIBUTE PALETTE REGISTER 0
WRITE 0 TO ATTRIBUTE ADDRESS REGISTER
TO DISABLE EGA VIDEO
o I SABLE P"'R I TY CHECKERS
1--------- ------- ------------- ----------I
TEST.02
I
1
1
A CHECKSUM I S DONE FOR THE 32K
I
READ ONLY MEMORY MODULES (TWO)
I
CONTAINING POST, BASIC ... NO 810S.1
1
ROM CHECKSUM TEST I
1 DESCRIPTION
I
1
1
1-------------- ----------- ----- -- --------
1-----
CHECKPOINT 02
BO 02
E6 80
MOV
OUT
AL,02H
MFG_PORT. AL
ASSUME
BC
8E
BE
33
33
85
C8
DO
08
F6
DB
80
MOV
MOV
MOV
XO.
XO.
MOV
SStCODE
AX,CS
SS,AX
DS,AX
SI,SI
BX,ex
CH.080H
AD
02
02
E2
13
DC
DB
F9
02
LODSW
ADD
ADD
LOOP
JNC
BL.AH
BL,AL
CII
CIIE
JZ
CllA
<><><><><><><><><><><><>
<><> CHECKPO I NT 02 <><>
SETUP SS SEGMENT REG I STER
SET UP OAT A SEGMENT TO PO I NT TO
ROM ADDRESS START
CLEAR CHECK REG I STER
COUNT FOR 32K WORDS
CII:
T4 01
MOVE TWO BYTES INTO AX -- SI=SI+2
ADO ODD BYTE AT OS I S I + I TO CHECKSUM
ADO EVEN BYTE AT OS I 5 I TO CHECKSUM
LOOP COUNT FOR 65K BYTES (32K WORDS)
EXIT IF ~LOOp" RESET THE CARRY FLAG
(NOTEI MODEL BYTE MUST NOT = ZERO)
CONTINUE IF CHECKSUM VALID (ZERO)
CIIE:
F4
HLT
ELSE HALT I F CHECKSUM PROBLEM
TESTl
5-29
1-13
04-21-e6
1106
1107
1101
1109
1110
1111
1112
1113
1114
1115
1116 0lA6
1117 0lA610
II I a a I A8 E6
1119
1120 OIAA 19
1121 OIAD 14
1122 OlAF
1123 OlAF 10
1124 alII E6
11215 0lB3 IA
1126 OIBe E6
1127 0117 80
1121018990
1129 alIA E6
1130 OllC 90
1131 OIBD E4
1132 OIBF 3A
1133 OICI 75
1134 0lC3 DO
'1315 OICI5 E2
1136
1137
1131S
1139
1140
1141
1142
1143
1144
1145
1146 0lC7 as
1147 OICA IE
1141 OICC 10
1149 OICE E6
11150
11151
11152
111S3 0100 E6
1114 0102 E6
11155
1116
1117
I I IS 15 0104 la
IIe9 0101 10
1160 aiDA E6
1161 OIDC EB
1162 OIDE BO
1163 OlEO iE6
1164 0lE2 B7
1165 0lE4
1166 0lE4 BO
1167 0lE6 ES
1161 0lE8 E6
1169 OlEA 10
1170 OlEO 74
1171 'OIEF E4
1172 OIFI OA
1173 0lF3E2
1174 OIFI5 FE
11715 0lF7 715
117601F9F4
1177
1178
1179
1180
1111
1182
1113
1184
11815
1186
1187
I III OIFA SO
1189 OIFC E6
1190
1191 OIFE IA
1192 0200 2B
1193 0202 E6
1194 0204 17
11915 0206
1196 0206 BO
1197 0201 E6
lite 020A EI
l i n 020C EB
1200 020E E4
1201 0210 22
1202 0212 74
1203 0214 E2
12040216 FE
12015 021 I 715
1206 021A F4
1207
1201
1209
1210
1211
1212
1213
1214
1215
1216
1217
121S
1219
5-30
I - - ------------ - - --------- - - ------------I TEST.03
I
I
VER I FY CMOS SHUTDOWN BYTE
I DESCRIPTION
a
ROLLING BIT WRITTEN AND
1
VERIFIED AT SHUTDOWN ADDRESS.
I
1- --- - - - - - - ------- - - - ------ -- - -- - - - --- ---
1-----
VERIFY AND CLEAR SHUTDOWN Fl.AG
CIIAI
03
aD
MOV
OUT
AL, 03H
MFG_PORT ,AL
0009
MOV
MOV
CX,09H
AH, I
MOV
OUT
MOV
OUT
MOV
NOP
OUT
NOP
IN
eMP
JNZ
Rel
LOOP
AL, CMOS SHUT DOWN+NM I
CMOS PoRT, AL. AL.tAR
CMOS DATA,AL
AL,CQOS_SHUT_OOWN+NN I
01
<><><><><><><><><><><><>
<><> CHECKPO I NT 03 <><>
L.OOP COUNT
START WITH BIT 0
CIIB.
aF
70
C4
71
ISF
70
71
C4
lSI
04
Ea
1 OUTPUT ROL.LING BIT
READ CNOS
I/O DELAY
CNOS_PORT ,AL
I
!t:i=OS_DATA
I/O DELAY
MUST IE THE SANE
ERROR IF NOT
ROLL A BIT THROUGH SHUTDOWN BYTE
LOOP TILL DONE
ERROl
AH, I
CIII
1-- ------------ --------- - ---------------I TEST.04
•
82154 CHECK T I MER I
I
DESCRIPTION
I
1
SET TIMER COUNT TO
I
CHECK THAT TINER I ALL BITS ON
I
1
I
I
1----------------------------------------
----
R
01
04
10
1-----
01
DO
ASSUME
MOV
MOV
MOV
OUT
OUT
1-----
I SET DATA SEGMENT
<><><><><><><><><><><><>
<><> CHECKPO I NT 04 <><>
DISAILE DMA CONTROLLER
OUT
(AL I ALREADY III 04H
DMA CONTROLLER I
DMA CONTROLLER 2
o I SABLE
OMAOI.AL
ONAII,AL
a I SABLE
VERIFY THAT TIMER I FUNCTIONS OK
MOV
MOV
OUT
16 0072 R
154
43
00
12
41
05
DSIDATA
AX,DATA
OS,AX
AL,04H
NFG_PORT ,AL
JOP
MOV
OUT
MOV
DX.ORESET FLAG
AL t 154H
TIMC:R+3,AL
$+2
AL.18
TIMER*1 tAL.
BH,05H
SAVE RESET FLAG WHILE REFRESH IS OFF
SELECT TIMER I,LSB,NODE 2
I/O OELAY
SET INITIAL TINER COUNT TO IS
LOOP COUNT
TIMERI BITS ON
LATCH T I MER-I COUNT
I/O DELAY
CI21
MOV
JMP
40
00
43
OUT
FI IF
OB
41
08
EF
CF
EI
eMP
JE
IN
OR
LOOP
DEC
JNZ
HlT
AL,40H
$+2
TlMER+3 , AL
BL,OIFH
YES - SEE IF ALL BITS GO ON
TIMERI BITS OFF
REAO TTMER T COUNT
ALL BITS ON IN TIMER
T I MER '_B ITS_ON
CIS
AL., TINER+ I
BL,AL
e'2
e.2
BH
TRY AGAIN
TIMER I FAILURE. HALT SYSTEM
TIMER I_BITS_OFF
1- - - ------- ------ ------- - - ---------------
1 TEST. 015
I
1
S254 CHECK TIMER I ALL BIT OFF :
1 OESCRIPTION
I
SET T I MER COUNT
I
I
CHECK THAT TINER I ALL BITS OFF I
1-- - -- - --------- - ------- - ----------------
015
80
1-----
CHECKPO I NT 05
CI31
MOV
OUT
AL,OSH
MFG_PORT ,AL
MOV
SUB
OUT
MOV
AL.BL
CX,CX
T1NER+ I ,AL
BH , 05H
MOV
OUT
JMP
JMP
IN
AND
JZ
LOOP
AL,40H
TIMER+:s,AL
$+2
$+2
AL,TIMER+I
BL.AL
C ••
C ••
eH
C ••
C3
C9
41
015
<><><><><><><><><><><><>
<><> CHECKPO I NT 05 <><>
I
SET TRY AGA I N COUNT
TIMER LOOP
LATCH-TIMER I COUNT
CI41
40
43
00
00
41
D8
07
FO
CF
EC
DEC
JNZ
HLT
DELAY FOR TINER
ADDED DELAY FOR T I MER
READ TIMER I COUNT
GO TO WRAP DNA REG I STER TESTS
TIMER_LOOP
1 HALT SYSTEM
1---------------- ---- ---- ---------------I TEST.O&
1
1237 DNA a INITIALIZATION
1
CHANNEL REGISTER TEST
I DESCRIPTION
1
DISABLE THE S231 DMA CONTROLLER.
I
WRITE/READ THE CURRENT AOORESS
I
AND WORD COUNT REG I STERS FOR
I
ALL CHANNELS.
I
I
I
I
:
1---------------- -------- ----------- -----
TESTl
SET TINER I COUNT
1-14
04-21-86
1220
1221
1222
1223
1224
1221
1226
1221
1221
1229
1230
1231
1232
1233
1234
1235
1236
123.,
1231
1239
1240
1241
1242
1243
1244
1245
1246
124.,
1241
1249
1250
1251
1252
1253
1254
1255
1256
125.,
1251
1259
1260
1261
IZ62
1263
1264
1265
1266
12n
1261
1269
InD
12.,1
In2
12U
IZ"F4
12U
In6
12n
lnl
12."
IZIO
1211
1212
1213
1214
IZI5
1216
121.,
1211
1219
1290
1291
1292
1293
1294
1295
1296
1297
1291
1299
1300
1301
1302
1303
1304
1305
1306
1307
1301
1309
1310
1311
1312
1313
1314
1315
1316
13fl
131a
1319
1320
1----021B
021B
021E
0220
0222
0224
0221
---- R
01
06
10
16 00T2 R
00
aD
IA
IA
B9
aA
Ff'
01
FI
0001
0000
EE
E8 00
EE
ao
Ell
EC
Ea
IA
EC
3a
.,4
F4
cu.
CIT.
01
00
AL,OFFH
IL,AL
aH,AL
cX,a
DX,OMA
DX,AL
IN
AL,DX
MDY
IN
CM.
JE
...T
<><><><><><><><><><>00
<><> CHECKPO I NT 06 <><>
RESTORE SOFT RESET FLAG
SEND MASTER CLEAR TO OMA
WRITE PATTERN "FF" TO ALL REGISTERS
SAYE PATTERN FOR COMPARE
....
..
SET... LOOP COUNT
SETUP I/O PORT ADDRESS OF" REGISTER
WRITE PATTERN TO REGISTER, LSI
I/O DELAY
MSI OF 16 alT REGISTER
AL TO ANOTHER PATTERN BEFORE READ
I/O DELAY
READ '6-BIT DMA CH REG. LSI ZST DIM
I/O DELAY
SAYE LSI OF 16-BIT REGISTER
READ Msa OF DMA CHANIEL REG I STER
PATTERN READ AS WRITTEN?
YES - CHECK NEXT REG I STER
NO - HALT Tt£ SYSTEM
NXT DMA CH
SET-I/O-..ORT TO NEXT CHANNEL REGISTER
WRITE PATTERN TO NEXT REGISTER
SET PATTERN TO
YES CONT I NUE
,
,
,
D~,AL
AL,OIH
AH,AL
AL,DX
IX,AX
CII
CUI
INC
UlO.
INC
J.
42
E2 IA
FE CO
.,4 DC
1----0210
0213
0255
0251
021A
025C
1 SET DATA SEGMENT
WRAP DMA 0 CHANNEL ADDRESS AN) COUNT REG I STERS
JO.
01
01
AX,DATA
DS,AX
AL,06H
MFG PORT,AL
ME!ET FLAG, ox
DMA+ooR,AL
MOY
MOY
MOY
MDY
MDY
OUT
JM.
OUT
MDY
JO.
00
EO
10
"F4
10
"F4
aD
EB
FI 55
09
FI AA
01
51
CE
1-----
DZIE aD AA
OZ60 EI CA
CI9I
OX
CIT
°
AC
CI.
WRITE DMA WITH 55 PATTERN
COP
J.
eM.
J.
IL,055H
JO.
MDY
IL,OAAH
C••
AL,055H
CI.
CHECK
GO IF
CHECK
GO IF
CI9
IF 1155" PATTERN DONE
YES
IF IIAA" PATTERN DDNE
YES
WRITE DMA WITH AA PATTERN
MDY
JO.
AL,OAAM
CI.
1---------------------------------------I TEST .OT
8231 DNA I INITIALIZATION
I
I
CHANIEL REG I STER TEST
I DESCRIPTION
I
DISABLE 1237 DMA CONTROLLER 1.
I
WRITE/READ THE CURRENT DNA I
ADDRESS AND WORD COUNT
I
I
REG I STERS FOR ALL CHANNELS.
I
I -- --- -------- -- - ---------- - - - - -- - - - - - ---
0262 ao 0"
0264 E6 10
0266 E6 DA
1-----
CHECKPOINT 07 - DNA I
C201
MDY
OUT
OUT
1----0261
026A
026C
026E
OUI
0274
OU5
anT
0271
017A
027C
027D
021F
0211
0212
0214
0216
0211
011!l1
021A
021C
021E
10
IA
IA
19
FF
01
FI
0001
IUo OOCO
EE
EI!I 00
EE
10 01
EB 00
EC
EI 00
IA EO
EC
31 01
14 01
F4
13
E2
FE
74
CZ 02
EI
CO
DA
C1UI
cnA,
0290
0293
0295
0291
029A
029C
10
74
10
74
10
EI
<><> CHECKPOINT 07 <><>
SEND MASTER CLEAR TO 2ND DMA
~~~T~~':~AL
MDY
MDY
MDY
MDY
MDY
OUT
JO.
AL,OFFH
IL,AL
aH,AL
cX,a
DX,OMAI
DXIAL
WRITE PATTERN FF TO ALL REGISTERS
SAYE PATTERN FOR Ca.ARE
....
..
SETUP LOOP COUNT
SE". 110 PORT ADDRESS OF REGISTER
WRITE PATTERN TO REGISTER. LSI
I/O DELAY
.
!!lSI OF 16 lIT REGISTER
AL TO ANOTHER PAT BEFORE RD
I/O DELAY
READ 16-IIT DMA CH REG, LSI 2ST DMA
110 DELAY
SAYE LSI OF 16-11T REGISTER
READ MS. OF DMA CH REG I STER
PATTERN READ AS WRITTEN?
YES - CHECK NEXT REG I STEA
NO - HAt.T THE SYSTEM
NXT DMA CH
S~I/D-PORT TO NEXT CHANNEL REGISTER
WRITE PATTERN TO NEXT REGISTER
SET PATTERN TO
YES CONT I NUE
,
,
,
DX,AL
ALIOIH
AL,DX
AH,AL
AL,DX
aX,AX
ClaA
CIISAI
ADD
LOOP
INC
J.
FI 55
09
FI AA
De
55
CC
DX,2
CITA
AC
C16A
J.
MOY
J"
IL,55H
C20A
BL,OAAH
C.,
WRITE DMA WITH AA PATTERN
C20AI
MOY
J ..
I
I
I
I
I'
CHECK
55 PATTER;N DONE
GO IF YES
CHECK IF AA PATTERN DONE
GO IF YES
AL,55H
CI6A
1-----
1-----
°
WRITE OMA WITH 55 PATTERN
CM.
J.
CM.
02AO EI CI
QZAZ
OZA2
02A6
OZA9
02Aa
0<><><><><><><><><><><>
AL,OlH
WRAP DNA I CHANNEL. ADDRESS AND COUNT REG I STERS
OUT
MDY
JM.
IN
JM.
MOY
IN
COP
JE
",-T
1-----
13~1 D29E aD AA
1322
1323
1324
1325
13Z6
13Z1
13z8
1329
1330
1331
1332
1333
MOY
MOY
MDY
OUT
MOY
OUT
1----022A
022C
022E
0230
0233
0236
02n
0239
023A
023C
02E
023F
0241
0243
0244
0246
0241
0249
0249
024A
024C
024£
CHECKPOINT 06
CI5.
BI
IE
aD
E6
89
E6
AL,OAAH
CI6A
INITIALIZE AND START MEMORY REFRESH
C211
88
A3
10
E6
IE 0072 R
0010 R
12
41
,-----
MOY
MDY
MOY
IX ,.RESET FLAG
:~~~P_FLAG ,AX
OUT
TIMER+I,AL
GET THE RESET FLAG
DO A DUMMY MEMORY WR I TE
START JU;:FRESH TIMER
BEf"OR~
REFRESH
SET DMA COMMAND
TEST1
5-31
1-15
04-21-86
1314
1115
1336
133T
1311
133.
1340
1341
1342
1343
1344
1345
1346
1341
134'
134'
1310
1351
1352
1313
1354
1151
1356
liST
1311
131.
1360
1361
1362
1363
1364
1365
1366
1367
1361
1369
13TO
13Tt
1312
1311
13T4
1315
1316
13n
1311
13Tt
1310
1311
1312
1313
13'4
1315
1316
lilt
tl!!
1319
13'0
13.1
13.2
1393
1394
13'5
1396
1397
139,
1399
1400
1401
1402
1403
1404
1405
1406
1407
1401
1409
1410
1411
1412
1413
1414
1411
1416
1417
1411
141'
1420
1421
1422
1423
1424
1425
1426
1427
1421
142.
1430
1431
1432
1433
1434
1435
1436
1431
1431
1439
1440
1441
1442
1443
1444
1445
1446
1441
02AD 2A CO
02Af" E6 01
0211 E6 DO
1----olBa
0281
028T
028'
0281
0280
02BF
Olel
02C3
02C5
02CT
02C9
02C8
02CD
o2CF
0201
80
E6
80
16
EI
80
16
16
EI
80
E6
E6
40
08
CO
06
DO
41
DB
SUI
aUT
AL,AL
DMA+I,AL
OUT
DMAII,AL
MODE SET ALL DNA CHANNELS
Nay
OUT
Nay
OUT
JNP
AL,40H
DMA+OBH,AL
AL,OCOH
DMA 11+06H.AL
OUT
OUT
AL,41H
DMA+O.t.AL
DMA 11+06H,AL
-NOY
D6
00
42
NOY
OB
aUT
aUT
D6
EB DO
10 43
16 DB
E6 D6
Nay
OUT
OUT
1-----
'.1
'.1
AL,42H
DMA+OIH,AL
DMA 18+06H,AL
'.2
AL,43H
DMA+OBH,AL
DMA 18+06H,AL
I SET MODE FOR CHANNEL 0
1 SET CASCADE MDOE ON CHANNEL 4
I/O DELAY
SET MODE FOR CHANNEL I
SET MODE FOR CHANNEL 5
I/O DELAY
SET MODE FOR CHANNEL 2
SET MODE FOR CHANNEL 6
I/O DELAY
SET MODE FOR CHANNEL 3
I SET MODE FOR CHANNEL 7
RESTORE RESET FLAG
NOY
0203 89 IE ooTZ R
OACK SENSE LOW I OREQ SENSE HIGH
LATE WRITE, FIXED PRIORITY I NORMAL
T I hi I NG I CONTROLLER ENABLE, CHO ADDRESS
HOLD DISABLE, MEMORY TO MEMORY DISABLE
SAME TO SECDI'D CONTROLLER
.RESET_FLAG I ax
1---------------------------------------I TEST.08
DMA PAGE REG I STER TEST
I
I DESCRIPTION
1
WRITE/READ ALL PAGE REGISTERS
,
I
I
I
,---------------------------------------1----02DT
020'
0208
02DD
02EO
o2E3
02E4
02E5
02ET
02E8
02ED
02EF
02FI
02F2
02F4
02F5
OZf'l
02F9
o2F8
02FC
0300
0302
0304
0306
80
E6
2A
8A
89
EE
42
FE
..
75
86
FE
4A
2A
EC
3A
1'S
FE
4A
..
75
FE
IA
12
0301
030A
0300
030F
80 CC
aA OOIF
IA EO
EE
sue
C22A.
CO
FA OO.F
F6
ED
CC
CD
C22BI
C4
30
CC
FA DOlO
FO
C4
C4
DB
2A
Ee
3A
75
80
75
aD
E8
NOY
NOY
aUT
INC
INC
CNP
JNZ
XCH.
aEC
aEC
SUB
IN
CNP
..IN:
aEC
aEC
CNP
JNZ
INC
Nay
caOP
I DO ALL DATA PATTERNS
I TEST OMA PAGES It THROUGH IEH
SAVE CURRENT DATA PATTERN
CHECK LAST WR I TTEN
CHANGE DATA BEFORE READ
DATA AS WR ITTEN?
GO ERROR HAl.. T : F' NCT
I CONTINUE TILL PORT 80
I NEXT PATTERN TO RIPPLE
C22.
NOY
NOY
NOY
~~:~ST_DMA_PAGE
OUT
DX.AL
AL.OCCH
I WRITE AN CC TO PAGE REGISTERS
SAVE Tt£ DATA PATTERN
OUTPUT PAGE REG I STER
VERIFY PAGE REGISTER IF
sue
CO
IN
CIF
"'Z
C4
12
FC CC
04
33
lEA
FC 00
05
CO
EI
<><><><><><><><><><><><>
<><> CHECKPO I NT 01 <><>
TEST LAST DMA PAGE REGISTER IUSED FOR ADDRESS LINES DURING REFRESH)
CMI'
"'Z
NOY
JIP
C251
10
74
2A
E8
AL,08H
MFG PORT,AL
ALia
DX,DMA PAGE
CX,OFFR
DX,AL
DX
AC
DX.8FH
C22A
AH.AL
AH
DX
AL,AL
AL,OX
AL,AH
CZf.
AH
DX
DX,MFG PORT
C22B AH
AL,AH
C22A
1-----
1----0310
0312
0313
0315
0317
031A
OIIC
031E
0320
0320
0323
0325
0327
CHECKPOINT 08
Nay
OUT
D.
10
CO
DOli
DOFF
C""
JZ
sue
JIP
AL,AL
AL,DX
AL.AH
C20
AH,OCCH
C2.
AL,OISH
C22
CHANGE DATA PATTERN BEFORE READ
GET THE DATA FROM PAGE REGISTER
I GO IF ERROR
GO IF ERROR
SET UP DATA PATTERN OF 33
00 DATA 33
AH,O
C21
AL,AL
C22
.----1----------------------------------------
CHECK DONE
GO IF YES
SET UP FOR DATA PATTERN 00
DO DATA 0
ERROR HALT
012'
032. F4
C261.
HL.T
I HALT SYSTEM
• TEST .09
I
STORAGE REFRESH TEST
I DESCRIPTION
VER I FY REFRESH IS OCCURR I NG
I
I
I
•
I
1---------------------------------------1-----
032A
032A
032C
032E
0330
0330
0332
0334
0316
0331
0331
033A
OIIC
033E
C271
80 D.
E6 10
28 C,
E4
AI
EI
13
61
10
FA
F'
E4
AI
EO
E3
61
10
FA
19
5-32 TESTt
CHECKPOINT O' - TEST MEMORY REFRESH
NOY
<><><><><><><><><><><><>
<><> CHECKPO I NT 09 <><>
sua
AL,O'H
MFG PORT,AL
CX,ex
IN
TEST
CDDPZ
JCXZ
C20
IN
TEST
LOOPNZ
JCXZ
~~;REFR!SH_B IT
I
C20
I ERROR HALT I F NO REFRESH BIT
OUT
C21.
C2.,
AL,PORT B
~~iREFR!SH_B I T
I
I NSURE REFRESH BIT IS TOGGL 1NG
I NSURE REFRESH 15 OFF
ERROR HALT 1FT I MEOUT
AL,PORT 8
I NSURE REFRESH I S ON
IBM p.,.aonal Comput..r- MACRO Aa.amblar
Varalon 2.00
TESTI ---- 04/21/86 POWER ON SELF TEST (POST)
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462 0340 BO
1463 0342 E6
1464
1465
1466
1461 0344 2B
1468 0346 E4
1469 0348 8A
1470 034A F6
1471 0340 14
1412 034F E4
1473 0351 F6
1414 0354 EO
1415 0356 14
1476
1471 0358 F4
1418
1419
1480
1481 0359 BO
1482 1)35B E6
1483
1484 0350 BO
1485 035F BC
1486 0362 EB
1481 0364 A8
1488 0366 14
1489 0368 E4
1490 036A BC
1491 0360 EB
1492 036F E4
1493 0311 3C
1494
1495 0313 BO
1496 0315 E6
1491
1498 0371 15
1499
1500
1501
1502 0319 BO
1503 031B BC
1504 031E EB
1505 0380 BC
1506 0383 EB
1501 0385 E4
I !i08 0381 E6
1509
1510
1511
1512 0389 BO
1513 038B BC
1514 038E E8
1515 0390 14
1516
1511039280
1518 0394 E6
1519 0396 F4
1520 0391
1521 0391 80
1522 0399 E6
1523 039B EB
1524
1525
1526
1521 0390 FA
1528 039E E6
1529 03AO 2B
1530 03A2 E4
1531 03A4 A8
1532 03A6 EO
1533 03A8 C3
1534
1535
1536
1531 03A9 28
1538 03AB B3
1539 OUD E4
1540 03AF A8
1541 03Bl 15
1542 03B3 E2
1543 03B5 FE
1544 0381 15
1545 03B9 C3
1546
1541
1548
1549
1550
1551
1552
15153
1554
1555
1556
155T
1558
1559 03BA BO
1560 03BC E6
1561
1-16
04-21-86
I - ---------------- ---------------- - - -----
1 TEST.10
,
8042 I NTERFACE TEST
I
READ CONFIGURATION JUMPERS
1 DESCRIPTION
,
I SSUE A SELF TEST TO THE 8042.
I
INSURE A 55H IS RECEIVED.
1
READ MANUF ACTUR I NG AND 0 I SPL.A Y
I
.JUMPERS AND SAVE IN MFG TEST.
I
I
1------------------------------= ---------I
1-----
OA
80
,----C9
64
EO
C4 01
02
60
C4 02
Fa
01
CHECKPOINT OA
MOV
OUT
SUB
TSTlI
'N
MOV
CX,CX
AL I STATUS_PORT
AH,AL
~~;.~UT _BUF _FULL
TST21
TEST
"Z
'N
TEST
LOOPNZ
"Z
ERROl
HLT
1-----
I SSUE A RESET TO THE 8042
OB
80
TST41
AA
03FS R
39
01
02
60
03F'1 R
3A
60
55
TST4_B2 TEST
"Z
'N
T5T4_AI MOV
MOV
OUT
MOV
MOV
"MP
"MP
:~: ~~~~-~UF
1STI
TS14
-
SEL.F TEST COMMAND
SET RETURN ADDRESS
I S THE OUTPUT BUFFER FULL 1
GO IF NOT
FLUSH
SET RETURN ADDRESS
GO WAI T FOR BUFFER
GET THE END I NG RESPONSE
AL..,pliRT A
~~o~~Fg~~ ~~F _ 42A
DC
80
NOV
OUT
AL.OCH
MFG_PORT I AL
"NZ
ERRO
E30CI
'N
READ 1NPUT COMMAND
SET RETURN ADDRESS
I SSUE COMMAND
SET RETURN ADDRESS
GO WAI T FOR RESPONSE
GET THE SW ITCH
SAVE TEMPORARY
AL,READ 8042 INPUT
SP,OFFStT C8042C
SHORT C8042
~~O~~Fg~~ ~~F _ 42B
ALlPORT ADMA_PAGt+1,AL
WR I TE BYTE 0 OF 8042 MEMORY
MOV
MOV
"MP
TS14_01 "Z
00
80
<><>.c><><><><>.c><>.c><><>
<><> CHECKPO I NT OC <>.c>
I GO IF NOT OK
GET THE SW ITCH SETT I NGS
MOV
MOV
"MP
MOV
"MP
OUT
1----60
03F9 R
00
05
<><><><><><><><><><><><>
<><> CHECKPO I NT OB <><>
AL, SELF TEST
SP,OFFS~T C8042A
SHORT C8042
OF
E30BI
-
~~;.~U!_BUF _FULL
ALIPORT_AAL I 55H
1-----
GO IF NOT
FLUSH
I S THE OUTPUT BUFFER ALSO FULL?
TRY AGAIN
CONTINUE IF OK
FULL
ALIOBH
MFG_PORT I AL
'N
TST4_C,
100 MILL I SECONDS FOR TH I SLOOP
CHECK FOR I NPUT BUFFER FULL
I HALT SYSTEM I F BUFFER FULL
CMP
CO
03F8 R
10
03FD R
24
60
82
<><><><><><><><><><><><>
<><> CHECKPO I NT OA <><>
AL,OAH
MFG_PORT I AL
SOFT RESET (HANDLE ALL POSSIBLE CONDITIONS)
WR I TE BYTE COMMAND
SET RETURN ADDRESS
I SSUE THE COMMAND
CaNT I NUE I F COMMAND ACCEPTED
ALIWRITE 8042 LOC
SP,OFFSET C8042B
SHORT C8042
TST4_01
MOV
OUT
HLT
AL,ODH
MFG_PORT, AL
NOV
OUT
"MP
AL..,5DH
PORT A,AL
SHORT E30A
<><>.c>.c>.c>.c><>.c><><><><>
<><> CHECKPOINT 00 <>
TST4_01,
50
60
10
1----C80421
64
C9
64
02
FA
C42
-"
°
ENABLE OUTPUT BUFFER FULL I NTERAUPT ,
I SABLE KEYBOAAD, SET SYSTEM FLAG,
PC I COMPATIBILITY, INHIBIT OVERRIDE
I SSUE THE COMMAND TO THE 8042
CL'
OUT
SUB
'N
TEST
LOOPNZ
NO I NTERRUPTS ALLOWED
SEND COMMAND IN AL REG I STER
LOOP COUNT
WAI T FOR THE COMMAND ACCEPTED
STATUS_PORT, AL
CX,CX
AL,STATUS PORT
~;2~ PT _BUF _FULL
7
RET
1----C9
06
64
01
06
F8
CB
F4
WA I T FOR 8042 RESPONSE
OBF_421 SUB
MOV
C42_21
C42_31
'N
TEST
"NZ
LOOP
CXICX
BL,6
AL,STATUS PORT
~~2 O~T _BU,"_FULL
200MS/PER LOOp· 6
CHECK FOR RESPONSE
C42:2
DEC
BL
"NZ
C42_2
I
RET
=1200 MS +
GO IF RESPONSE
TRY AGAIN
DECREMENT LOOP COUNT
AETURN TO CALLER
1- ------------------------------ ------ --1 TEST. II
I
1
BASE 64K READIWRITE MEMOAY TEST 1
I
I DESCRIPTION
I
WRITE/READ/VERIFY DATA PATTERNS I
AA,55,FF I Ol i AND 00 TO I ST 64K I
I
OF STORAGE. VER I FY STORAGE
I
I
ADDRESSABILITY.
I
I
1---- ----------------------------- ---- ---
OE
80
1-----
FILL MEMORY WITH DATA
E30AI
MOV
OUT
AL.OEH
MFG_PORT ,AL
<><><><><>.c>.c>.c>.c><><><>
<><> CHECKPOINT OE .c>.c>
TESTl
5-33
1-17
0"'-21-86
1562
1563
1564
15615
1566
1561
1561
1569
1510
1511
1512
1513
1514
1515
1576
1577
1571
11579
1510
1511
1582
11583
lea ..
115115
1516
1517
1581
1519
1590
1591
1592
1593
11594
15915
1596
1597
1598
1599
1600
160f
1602
1603
1604
1605
1606
1607
1608
i 609
1610
1611
1612
1613
1614
1615
1616
1611
1618
1619
i&20
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
16S3
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1641
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1,,71
1612
1613
1614
1615
038E
03CI
03C3
03Cl
OSCI
03CB
03CO
MOV
MOV
MOV
CLO
MOV
81 ---- R
IE 08
18 IE 0012 R
~C
B9
2B
2B
OSC~ 2B
0301 IE
0303 8E
0305 II
0309 15
OSDS E9
8000
~~
SUB
~6
SUB
SUB
CO
08
CO
MOV
MOV
CMf'
~B
1234
03
0581 R
"NZ
"MP
1-----
030E BO O~
03EO E6 10
03E2
03E4
OSE6
03E9
03EC
03EE
03FO
BO
E6
BC
E9
8B
75
E9
MOV
OUT
MOV
"MP
MOV
81
03~S R
0000 E
08
CSOr
O~
"NZ
0592 R
OS~3 03EC
OS~5 OS64
03~7 OS6F
03F9 0390
OS~B 0380
OSFO 0315
R
R
R
R
R
R
CX.2000H·4
01,01
SI.SI
AX,AX
OS,AX
ES.AX
BX.1234H
E30A a
CLR_!TG
I WARM START?
I GO IF NOT
GET THE INPUT BUFFER (SWITCH SETTINGS)
ESOA_OI MOV
OUT
10
GET THE SYSTEM SEGMENT
O~ OATA
SAVE DRESET FLAG IN BX
SET 0 I RECT I ON FLAG TO INCREMENT
SET ~OR 32K WORDS
FIRST 16K
AX.OATA
OS.AX
BX .DRESET_~LAG
"MP
<><><><><><><><><><><><>
<><> CHECKPO I NT OF <><>
AL,OFH
MFG_PORT I AL
~~.(~:~~!i~~~CK
SET BASE MEMORY PAR I TY
USE AS TEMPORARY SAVE
SET RETURN AODRESS
SP .15~~SET C2
STGTST CNT
BX,AX -
I SAVE FAILING BIT PATTERN
C3I
C33
1-----
TEMPORARY STACK
C2
C8042A
OB~ 42A
C8042B
C8042C
OBF _ 42B
OW
OW
OW
OW
OW
OW
I STORAGE OK, CONTINUE
~OR
POST ROUTINES
1------------------------------------------1 BASE 64K STORAGE FA I LURE
I
1
1
:
DISPLAY THE CHECKPOINT (MFG CHECKPOINT)
ANO XOR EXPECTED WI TH READ I N M~G PORT
DISPLAY CHECKPOINT IN M~G PORT+S
-
DI~~~A~y~~R;~ ~~Ap~~~~2BYTE
MFG_PORT+I
1
A READ/WRITE SCOP!, LOOP O~ THE ~IRST
1
WORD FOR POSSIBLE ADDRESS LINE FAILURES
1---- ------ -- ---------- - - -------- - - - - ------03FF
0401
0403
0405
0407
040A
040C
040E
0410
0412
0415
0417
0418
041F
0421
0423
0425
8A
E6
804
E6
89
8E
28
88
E8
3D
14
II
81
7C
23
15
E9
C7
81
C3
82
COOO
09
OB
07
00
AA55
OC
CI 0080
F9 C800
E9
C9
03
0514 R
CSII
MOV
OUT
MOV
OUT
AL.BH
MFG PORT+I,AL
AL,§L
MFG_PORT+2, AL
1-----
CHECK FOR VIDEO ROM
M"
MOV
MOV
SUB
ex.oeOOOH
DS;CX
BX,BX
MOV
AX, [BX]
CMP
CX ,OSOH
CX.DCSOOH
"MP
CMP
"Z
ADO
"L
AND
Z5.
"NZ
"MP
I SAVE HIGH BYTE
I SAVE LOW BYTE
START nF
lIn
R_I)~
PO I NT TO SEGMENT
GET THE FIRST 2 LOCATIONS
BUS SETTLE
IS THE VIDEO ROM PRESENT?
GO IF YES
PO I NT TO NEXT 2K BLOCK
TOP OF V IDEO ROM AREA YET?
TRY AGAIN
SET NON ZERO FLAG
GO IF NOT
BYPASS ERROR DISPLAY IF VIDEO ROM
1+2
AX,OAA55H
Z5
M.
CX,CX
C32
CSI_O
I---~~-------~------------------------------------------
1 SET V IDEO MODE TO 0 I SPLAY MEMORY ERROR
1
THIS ROUTINE INITIALIZES THE ATTACHMENT TO
I
TO DISPLAY FIRST 64K STORAGE ERRORS.
1 BOTH COLOR AND MONOCHROME ATTACHMENTS ARE INITIALIZED.
1------------------------------------------------------0421 BA 0308
042B 2A CO
0420 EE
042E
0431
0433
04S4
•
1-----
INITIALIZE COLOR/MONOCHROME
CS2r
MOV
SUB
OUT
SA 03B8
80 01
EE
83 EA 04
MOV
MOV
OUT
SUB
M.
0010
0437 BB 0030 E
04SA B9 0010
5-34
TEST 1
CONTROL REGI STER ADDRESS OF COLOR CARD
MODE SET
OX,OSBSH
AL,I
DX,AL
DX,4
CONTROL REGISTER ADDRESS OF B" CARD
MODE SET FOR CARD
RESET VIDEO
BACK TO BASE REG I STER
EQU
.OH
MOV
ASSUME
MOV
~~:g~~~ET VIDEO_PARMS+M4·S
CX,M4
I
POINT TO VIDEO PARAMETERS
I COUNT OF MONOCHROME VIDEO PARAMETERS
I----~
BX POINTS TO CORRECT ROW OF INITIALIZATION TABLE
1-----
LOOP THROUGH TABLE. OUTPUTTING REGISTER ADDRESS, THEN VALUE FROM TABLE
0430 32 E4
043F 804 C4
0441 EE
0442 42
0443 FE C4
04415 2EI 8A 07
0448 EE
0449 "'S
O...... A ...04
0 ......8 E2 F2
04...0 IA E2
O......r:: 80 E4 ~O
0"'5280 FC DO
0 ...55 7 ... 08
0457 BS 0000 E
045A SA 0304
0450 EB DB
OX.3DSH
AL,AL
DX,AL
XOR
MIOI
AH,AH
MOV
OUT
INC
INC
MOV
OUT
INC
AL.AH
DX,AL
OX
DEC
"Z
OX
M.O
AH,DL
AH,OFOH
AH.ODOH
Z 3
MOV
MOV
~~:~~~~ET
"MP
Z_2
LOOP
MOV
AND
C'"
1 AH IS REGISTER NUMBER DURING LOOP
GET 68 ...5 REG I STER NUMBER
AH
AL,CSI[BX]
DX.AL
BX
VIOEO_PARMS
POINT TO DATA PORT
NEXT REGISTER VALUE
GET TABLE VALUE
OUT TO CHIP
NEXT IN TABLE
BACK TO POINTER REGISTER
DO THE WHOLE TABLE
CHECK I F COLOR CARD DONE
STRIP UNWANTED BITS
IS IT THE COLOR CARD?
CONT I NUE I F COLOR
POINT TO VIDEO PARAMETERS
COLOR BASE
CONTINUE
I-II
04-21-16
1676
1677
lUI
1619 041F 33 FF
1610 0461 I I 1000
1611 0464 IE CO
1612
1613 0466 19 0100
..14 0469 .1 0110
I6IS 046C F3/ AI
'616
I6IT 0461 I I FF
1611 0470 I I 1100
'619 0471 IE CI
16'0 04Te •• 2000
1691 0471 F3/ AI
1692
1693
1694
'695 047A. IA 0311
'696 04TD .0 2'
1697 047" EE
1691
169'
1700
1701 041042
I T02 0411 10 30
1703 0413 EE
1704
1705
1106
1707 0484 BA 03DI
1701 0417 10 21
17090419 EE
1710
1711
1712
1713 041A 42
1714041110 30
1115 041D EE
1716
1717
17t8
1719 041E IC CI
1720 04.0 IE DO
1721
1722 0492 lIB 1000
1723 0495 IE DB
1724
1725 0497 ao 30
1726 0499 B. 0006
I 727 04.e 21 FF
1721 049E I I 05
1729 04AO 47
1730 04AI 47
1731 04A2 E2 FA
1732
I 733 04A4 10 FF sa
1734 04A7 74 De
I 735 04A9 2S FF
1736
1737 04AI IT 10
I 738 04AO IE C3
I 139 04AF IT BI
1740 0481 IE DI
1741 0481 EB E2
1742
1743
1744
1745 0485 BO 20
1746 048T I I 05
1747 048. 261 I I 05
1741 04BC 47
1749 0480 47
1150 04BE E4 II
1761 04CO II
I 762 04C2 D2 Ell
1753 04C4 BC 057F R
1754 04Cl EB II
1755
1756 04C9 E4 III
1757 04CB 24 OF
17611 04CD IC 05111 R
175. 04DO EB 12
1160 0402 E4 12
1761 04D4 II
I 762 0406 02 Ell
1763 04DIS IC 05113 R
1164 04DI EI 07
1765 04DD E4 1S2
1766 040F 24 Of"
116T 04EI IC 01515 R
1T61S
1769
1710
1771 04E4 04 90
1772 04E. 27
1773 04E7 1440
1774 04E9 27
1775
1776 04EA lSI 015
I77T 04EC 261 118 05
1771 04EF 47
1779 04FO 47
1710 04FI C3
171.
171S2
1713
1784 04F2 BO 20
171S5 04F4 al 05
I 716 04F6 261 sa 05
1717 04F9 47
l7Ia 04FA 47
17a. 04FB BO 32
1----Z_31
1-----
XOR
MDY
MDY
01,01
AX,oaOOOH
ES,AX
MDY
MDY
REP
eX,I041
AX,' '+7.H
STDSW
I NUMID: OF' WORDS I N MONOCHROME CARD
I Flu.. CHARACTER FOR ALPHA + ATTR I aUTI
I FlU. THE REGEN BUF'F"ER WI TH BLANKS
XOR
MDY
MDY
MDY
REP
01,01
IX,OB800H
ES,BX
CX,I"2
STOSI
I CLEAR COLOR V I DEO IUFFER _MORY
I S!T I.P ES TO COLOR V IDEO MEMORY
1-----
1-----
Z_OI
MDY
MDY
OUT
".
'2.
DX,3DIH
AL,28H
DX,AL
AX,CS
SS,AX
I SET STACK SEGMENT TO CODE SEGMENT
aX,oaOOOH
DS,IX
I SET OS TO all 01 SPL.AY aUFFER
MDY
MDY
AL, '0'
ex,.
DI,DI
[01 J,AL
01
DI
I DI SPLAY BANK 000000
aH,OSIH
, I
I CHEeK THAT COL.OR aUFFER WR I TTEN
oT,OI
I POINT TO START OF IUFFER
MDY
INC
INC
LOOP
START AT 0
WRITE TO DISPLAY REGEN BUFFER
POINT TO NEXT POSITION
,
BH,oaOH
ES,ax
aH,OBIH
OS,BX
ES • MONOCHROME
SET SEGMENT TO COL.OR
OS • COLOR
'-.
PRINT FAILING lIT PATTERN
MOV
MOV
MOV
INC
INC
IN
MOV
SHR
MOV
JMP
AL.,' ,
AL,MFG_PORT+I
CL,4
AL,CL
SP,OFFSET ZI 0
SHORT PR
-
CONVERT AND PR I NT
AOO
OAA
AOC
OA.
MOV
MOV
INC
INC
RET
DISPL.AY A BLANK
WR I 1E TO COLOR BUFFER
WR I TE TO MONOCHROME RECEN IUFF'ER
POINT TO NEXT POSITION
1~:ID~~ ,AL.
A'
01
1-----
'"
SET OVERSCAN PORT TO A DEFAULT
YAL.UE 30H FOR ALL. MODES EXCEPT 640X200
OUTPUT THE CORRECT YAL.UE TO 309 PORT
MDY
MDY
'"'
1-----
I SET V I DEO ENAILE PORT
OX
AL.,30H
DX,AL.
IN
ANa
MOV
JMP
IN
MOV
SH"
MOV
JMP
IN
AND
MOV
PRI
I SET OVERSCAN PORT TO A DEFAULT
I YALUE 30H FOR ALL MODES EXCEPT 640X200
I OUTPUT THE CORRECT YALUE TO 3D' PORT
MDY
MDY
MDY
MDY
MDY
MaY
JMP
1-----
OX
AL,30H
DX,AL
DISPLAY FAILING CtECKPCINT AND
COP
J'
SUB
Z_11
I SET V I DED ENABLE fIIOftT
SET UP OVERSCAN REGISTER
sua
"
DX,311H
AL,2'H
OX,AL
ENAILE COLOR V I OED AND CORRECT PORT SETT I NG
INC
MDY
OUT
1-----
I FILL WITH BLANKS
SET UP OYER SCAN REG I STER
INC
MDY
OUT
1-----
SET UP PO I NTER FOR REGEN
SET UP I!S TO V I DEO REGEN
ENAILE Y I DEO AND CORRECT PORT SETT I Me
MDY
MDY
OUT
••
••
FILL REGEN AREA WI TH BLANK
AL,MFG PORT+I
AL,OFH-
~~~~F~~T Z2_0
GET THE HIGH BYTE OF f"AILING PATTERN
SHIFT COUNT
NIBBL.E SWAP
I
AL.,MFG_PDRT+2
ISOL.ATE TO L.OW NIBBL.E
GET THE HIGH BYTE OF FAILING PATTERN
SHIf"T COUNT
NIBBL.E SWAP
CL,'
AL,CL.
~~~~F~:T Z3_0
AL,MFG PORT+2
AL,OFHSP,OFFSET Z4_0
I SOL.ATE TO L.OI NIBBLE
RETURN TO Z41
CONVERT OO-OF TO ASC I I CHARACTER
ADD FIRST CONVERSION FACTOR
ADJUST FDR NUMER 1C AM) ALPHA RANCE
ADD CONVERSION AND ADJUST LOW NIBBLE
AO,JUST HIGH NIBBLE TO ASCII RANGE
AL,090H
AL,040H
1~:ID~~,AL.
01
01
I IR I TE TO COLOR BUFFER
I WR: I TE TO MONOCHROME BUFFER
I POINT TO NEXT POSITION
DISPLAY 201 ERROR
MOV
MOV
MOV
INC
INC
MOV
AL.,'
l~:ID~i,AL.
01
01
AL.. '2'
I
I
I
I
DISPLAY A BLANK
WR I TE TO 0 I SPLAY REGEN BUFFER
WR I TE TO MONOCHROME BUFFER
POINT TO NEXT POSITION
I DISPLAY 201 ERROR
TESTl 5-35
1-19
04-21-86
I 790
1791
1792
1793
1794
1795
1796
1797
1791
1799
I aDo
1101
1102
1103
le04
1105
1106
1107
1101
1109
1110
1111
1112
1113
1114
1115
1816
1117
1111
1119
1120
1121
1822
1123
1124
1125
1126
1127
1121
1129
1130
1131
1132
1133
1134
1135
1136
le37
1831
1839
1140
1841
1842
1843
le4""
1145
1846
1847
184e
1849
1850
1851
1852
1853
1854
1855
1856
1157
1158
1159
1160
1161
1862
1163
1164
1865
1166
1167
1868
1169
1170
1871
1872
1873
1874
1875
1876
1171
1171
1179
1880
11I1
1112
1183
1114
11115
1186
1817
t 881
1889
1890
1891
1892
1893
1894
1895
1196
1197
1898
1899
1900
1901
1902
'903
04FD
04FF
0502
0503
0504
0506
DeDI
DeDI
050C
0500
050F
Dell
I I 05
261 I I 05
47
47
80 30
ee 05
261 Ie De
47
47
80 31
el as
261 I I 05
0514
0516
Dell
051A
051C
10
£6
E6
28
DC
eo
83
C9
051C
051E
0520
0523
0525
0527
0529
052a
052a
0520
052F
0531
0531
0533
0535
0537
0537
0539
053a
0530
0530
053F
0541
28
eE
81
28
e9
eB
E2
CO
01
AA55
MOV
MOV
I WR ITE TO DISPLAY REGEN BUFFER
I WR ITE TO MONOCHROME BUFFER
1 POINT TO NEXT POSITION
INC
INC
MOV
MOV
I WRITE TO OISPLAY REGEN BUFFER
I WR I TE TO MONOCHROME BUFFER
MOV
I POINT TO NEXT POSITION
INC
INC
1-----
MOV
MOV
MOV
1 WRITE TO OISPLAY REGEN aUFFER
I WR I TE TO MONOCHROfIE aUFFER
RDLL ERROR CODE IN MFG_PORT
MOV
OUT
OUT
sua
MOV
MOV
sua
FF
as
MOV
MOV
LOOP
05
FI
89 05
ea 05
E2 FA
MOV
MOV
LOOP
I
I
AX,AX
DS,AX
AX,OAAI55H
01,01
l~!ID~f
l~!lD~f
C31_C
MOV
MOV
LOOP
CII_D
e9 as
ea oe
E2 FA
MOV
MOV
LOOP
CII_E
l~!ID~f
l~!ID~f
ROLL ERROR CODE IN WG_PORT
0543
0545
0547
0547
054A
054C
054E
0550
0550
0552
0554
0556
oee6
0551
oeeA
E4 el
E6 80
OUT
88 AA55
89 05
ea as
E2 F7
MOV
MOV
MOV
LOOP
CI'_G
e. 05
8a as
E2 FA
MOV
MOV
LOOP
CII_H
89 05
ea 05
E2 FA
MOV
MOV
LOOP
C3'_1
055C
055E
0560
0563
0565
0567
0569
056a
056B
0560
056F
0571
0571
0573
0575
0577
0571
0579
057B
0570
E4
E6
II
2a
89
la
E2
057F
01511
0513
0585
04C9
0402
04DD
04F2
1----12
80
AAl5
MOV
MOV
19 05
8a 05
E2 FA
MOV
MOV
89
18
E2
EB
MOV
MOV
COOP
COOP
0592
0592
01595
0597
0159A
onc
1 LOW aYTE
I WRITE AN AASS
I READ THE FIRST WORD
1~! 'D~f
C31_L
l~!ID~f
CII_M
l~:!,;~f
OW
z.
ZI
13
Z4
• DO AGAIN
• TEMPORARY STACK
I TEMPORARY STACK
1 TEMPORARY STACK
I TEMPORARY STACK
CLEAR STORAGE ENTRY
REP
MOV
MOV
MOV
OS I DATA
STOSW
AX.DATA
DS,AX
eRESET_FLAG I IX
I STORE 12K WORDS OF 0000
I RESTORE DATA. SEGMENT
I RESTORE RESET FLAG
SETUP STACK SEGMENT AND SP
CIII
al
IE
BC
8E
ac
---- R
01
0000
04
1000
MOV
MOV
MOV
0159F C6 06 0014 R II
TESTl
I SET DATA SEGMENT
I GET STACK VALUE
I SET Tt£ STACK UP
I STACK IS READY TO GO
MOV
MOV
1-----
5-36
1~! 'D~f
CII N
CII:O
CLR STGI
ASSlAfE
1-----
l~!ID~f
COOP
oM'
ow
OW
ow
F3' AS
B8 ---- R
8E 01
89 IE 0072 R
I READ THE FIRST WORD
l~!ID~f
CII_K
19 05
8a 05
&:2 FA
0587
I WRITE AN AA55
l~!ID~f
COOP
MOV
MOV
1-----
I XOR OF FAILING alT PATTERN
I HIGH BYTE
AL.MFG PORT+2
MFG PORT, AL
AX,'G'AA65H
01.01
05
06
FI
R
R
R
R
tEXT THE HIGH BYTE
AX.OAA56H
sua
IN
05
DB
FA
95
-->
AL.MFG PORT+'
MFG_poRt ,AL
ROLL ERROR CODE IN tEG_PORT --> THEN Tt£ LOW aYTE
OUT
MOV
FF
I READ THE FIRST WORD
I 0 I SPLAY CHECKPO I NT LONGER
CII_I
LOOP
IN
I SETlP SEGMENT
l~!ID~f
89 05
ea 05
E2 FA
MOV
<><><><>C><><><><><><><>
<><> Ct£CKPO I NT DD <><>
I WRITE AN AA55
CII_A
89 05
ea 05
E2 FA
MOV
FIRST THE CHECKPOINT
I ALSO DISPLAY CHECK POINT IN PORT I I
sua
,-----
0587
08'9
051C
058E
-->
INITIALIZE OISPLAY ROW COUNT
MOV
eROWS,25-1
I SET ROWS FOR PRINT SCREEN DEFAlLT
1-20
04-21-156
1904
1905
1906
1901
1908
1909
1910
1911
1912
1913
1914
1915
05A4 80 II
05A6 E6 eo
MOV
OUT
1----Due 32 os
05AA 33 C9
05AC
05AC E4 61
05AE AI5 10
=I
"
LONG AND 1 SHORT BEEP )
( ERROR
XOR
XOR
EVEN
BL,aL
CX,CX
CLEAR REFRESH CYCLE REPEAT COUNT
INITIALIZE SPEEO RATE REGISTER
PLACE ON EVEN WORD BOUNDARY
IN
AL,PORT B
~i4 REFREsH_B I T
READ REFRESH BIT REG I STER
MASK FOR BIT
DECREMENT LOOP COUNTER TILL ON
AL,PORT B
~~5 REFREsH_B I T
READ REFRESH Ell T REG I STER
MASK FOR ElIT
DECREMENT LOOP COUNTER TILL OFF
C341
TEST
LOOPZ
1916 0580 El FA
I ' l l 05S2
'''15 05S2
1919 05B4
1920 05S6
192t
1922 0580
1923 05BA
1924
1925 05SC
1926 05CO
1921 05C2
1928 05C2
1929 05C5
1930 05ce
1931 05C9
1932 05C9
1933 05CO
1934
1935
1936
1931 05CF
I ne 0501
1939 0503
1940 0506
1941 05015
1942
1943
1944
1945
1946
1941
1948
1949
1950
1951
1952
1953
1954
1955 050A
1956 0500
1951 05EO
19515
1959
1960
1961 05E2
1962 05E4
1963
196405E6
1965 05ET
1966 05EO
1967 05E8
19615 OSEE
1969 05FI
1970 05F4
1971 05FT
1972 05FA'
1973 05FC
1974
1975
19160
1971 05FF
19TO 0600
1919 0601
1980 0602
1get 0605
1982 0607
1983 060A
1984 060C
'985 0600
1986 060E
1981 060F
1988 0612
1989
1990 0614
1991 0616
19'2 0616
1993 061 T
1994
'995
1996
1997 0619
1998 061 C
1999 061E
2000
2001 0621
2002
2003 0622
2004 0623
2005 0623
2006 0626
2007 0621
20015 0623
2009 0626
2010 0626
2011
2012 0629
2013
2014 062A
2015 062B
2016 062B
2017 062E
<><><><><><><><><><><><>
<><> CHECKPOINT
<><>
AL,11H
MFG_PORT ,AL
VERIFY SPEED/REFRESH CLOCK RATES
C351
IN
E4 61
Ae 10
EO FA
TEST
LOOPNZ
FE CB
15 FO
DEC
Be
C••
DECREMENT REFRESH CYCLE REPEAT COUNT
REPEAT TILL CYCLE COUNT DONE
15 I F9 FlaO
13 01
CMP
"AE
~~6RATE_UPPER
CHECK FOR RATE BELOW UPPER LIMIT
SKIP ERROR BEEP IF BELOW MAXIMUM
MOV
CALL
HeT
OX,0101H
ERR_BEEP
GET BEEP COUNTS FOR REFRESH ERROR
CALL TO POST ERROR SEEP ROUT I NES
HALT SYSTEM - BAD REFRESH RATE
CMP
"A
~~6~ATE_LO'ER
CHECK FOR RATE ABOVE LOWER LIM I T
GO TO ERROR BEEP IF BELOW MINIMUM
"NZ
CI6E,
BA 0 I 0 I
Ee 0000 E
F4
C36,
15 1 F9 F9FO
lT F3
1----E4
24
A2
2A
E6
152
Fe
0012 R
CO
152
GET THE INPUT BUFFER (SWITCH SETTINGS)
IN
AND
MOV
SUB
OUT
1--- ------------------- - --- -- ------ - ----I TEST.IIA
,
I
VERIFY 286 LGOT/SGDT LIOT/SIDT
,
1
INSTRUCTIONS
I
,
I DESCRIPTION
I
LOAD GOT AND lOT REG I STERS I I TH ,
I
AA,55,00 AND VERIFY CORRECT.
I
1----------------------------------------
1-----
VERIFY STATUS INDICATE COMPATIBILITY (REAL) MODE
SMSW
DB
TEST
OF 01 EO
A9 OOOF
T5 34
"NZ
1-----
AX
OOFH,OOIH,OEOH
AX,OFH
ERR_PROT
MOV
OUT
AL,I2H
MFG_PORT ,AL
IE
PUSH
POP
MOV
MOV
MOV
CALL
MOV
CALL
SUB
CALL
DS
ES
DI,SYS lOT LOC
CX,3 AX , OAAAAH
WRT PAT
DOAO
0003
AAAA
0619 R
5555
0619 R
CO
0619 R
1----FD
9C
50
A9 0200
75 OF
A9 0400
14 OA
FC
9C
58
A9 0400
75 02
F4
EB FD
"NZ
TEST
"Z
ceD
PUSHF
PO.
TEST
"NZ
26
OF
es 5E 00
0I
BO DO AD
26
OF
8B 56 00
1 SET ES TO SAME SEGMENT AS
os
I USE THIS AREA TO BUILD TEST PATTERN
1 FIRST PATTERN
AX,~15555H
WRITE NEXT PATTERN
IRITE 0
WRT PAT
AX,AX
WRT_PAT
"M.
"M.
SET 0 I RECT I ON FLAG FOR DECREMENT
GET THE FLAGS
AX
AX,0200H
ERR PROT
I NTERRUPT FLAG SHOULD BE OFF
GO IF NOT
CHECK 0 I RECT I ON FLAG
GO IF NOT SET
CLEAR DIRECTION FLAG
INSURE 0 I RECT I ON FLAG I S RESET
AX,~400H
ERR_P'ROT
AX
AX,0400H
ERR_PROT
I GO IF NOT
SHORT CITA
I TEST OK CONTINUE
ERR P'ROT,
HLT
I---~-
B9 0001
FI/ AB
BD DOAO
<><><><><><><><><><><><>
<><> CHECKPO I NT I 2 <><>
TEST 286 CONTROL FLAGS
STD
P'USHF
POP
TEST
EB 10
P'E/MP/EM/TS BITS SHOULD SE ZERO
GO IF STATUS NOT REAL MODE
TEST PROTECTED MODE REG I STERS
so 12
E6 80
OT
SF
89
BO
EO
SO
EO
2S
EO
I GET THE CURRENT STATUS WORD
PROTECTED MODE REGISTER FAILURE
I NSURE NO BREAKOUT OF HALT
SHORT ERR_P'ROT
WRITE TO 286 REGISTERS
WRT PAT,MOV
REP'
MOV
SEGOV
DB
LIOT
DB
11000 I
LABEL
MOV
110002 LABEL
ORO
DB
ORO
MOV
SEGOV
DB
LGOT
DB
+ 110004 LABEL
MOV
+ 110005 LABEL
CX.!
STOSW
~:,SYS_'DT_LOC
026H
[BP)
OOFH
BYTE
BX,WORD P'TR (BP']
BYTE
OFFSET CSI110001
OOIH
OFFSET CS,110002
I STORE 6 BYTES OF P'ATTERN
I LOAD THE lOT
1 REGISTER FROM THIS AREA
~:,SYS_IOT_LOC
I
LOAD THE GOT
026H
[B.)
I FROM THE SAME AREA
OOFH
BYTE
DX,WORO PTR (BP)
BYTE
TESTl
5-37
1-21
04-Z1-86
2018
2019
2020
2021
2022
2023
2024
202!
0628
0628 01
062E
ORG
OB
ORG
1----062E BD DUO
202(, 0631 26
2021
2028 0632 OF
2029 0633
2030 0633 8a 4E 00
2031 0636
2032 0633
2033 OU3 01
2034 OU6
2035 0636 BD D8A5
2036
20ST 0639 26
2038
2039 063A
2040 063a
2041 063a
2042 063E
2043 063a
2044 063a
204! 063E
20n 063E
2041 0641
2048 0643
OF
nOO08
..
+ 71000A
03 46 00
noooa
01
BF OOAO
la 05
B9 000&
2049 0646 BE OUO
20150 0(,49 261 38 04
20151 064C
2052 064E
20153 064F
2054 06!0
20e5 06152
20156
+ nOOOl
C37S1
15 C8
46
46
E2 Fl
C3
2051
20158
20M
2060 0653
20('1 0653 2A CO
2062 0655 E6 F 1
2063 0651 BO 11
2064 0659 E6 20
2065 0658 EB 00
2066 0650 ao 08
2061 06!F E6 21
2068 0661 Ea 00
2069
OFFSET CSI710004
OOIH
OFFSET CSI71000!!
READ AND VER I FY 286 REG I STERS
MOV
SEGOV
DB
SlOT
DB
LABEL
MOV
LABEL
ORG
DB
DRG
MOV
SEGOV
DB
SCOT
DB
LABEL
ADD
LABEL
ORG
DB
ORG
MOV
MOV
MOV
MOV
CMP
"NZ
INC
INC
LOOP
RET
~~,GDT_LOC
OZ(,H
[BP)
OOFH
aYTE
AX,[BP)
BYTE
OFFSET CSI71000A
OOIH
OFFSET CSI77000B
OI.SYS lOT LaC
AX, [DIT
CX,!!
S I ,COT LOC
AX.ESITSI)
ERR PROT
51 51
CaTB
I GET THE COT REG I STERS
I GET THE PATTERN WRITTEN
I CHECK ALL REG I STERS
J POINT TO THE BEGINNING
HALT I F ERROR
PO I NT TO NEXT WORD
I CONTINUE TILL DONE
1-- -- - - ---------- -- ---- --- ------ ---- - - ----- - -. ------- ---I
INITIALIZE THE 8259 INTERRUPT .1 CONTROLLER CHIP I
1--- - - ----------------- --------- ---- - - ----- - --------- - --C37AI
SUB
AL,AL
I RESET MATH PROCESSOR
OUT
X287+I,AL
MOV
AL, t IH
I ICWt - EDGE, MASTER, ICW4
OUT
INTAOO.AL
I/O DELAY
"M.
MOV
AL,8
SETUP ICW2
I NTERRUPT TYPE 8 (8-F)
OUT
INTAOI.AL
"MP
I I/O DELAY
..
..
,
,
MOV
OUT
AL.04H
INTAOt ,AL
~gi; g::~ ~~ g~
";~,U"
:+2
MOV
OUT
"MP
MOV
OUT
I·'
21
00
FF
21
-
I SETUP ICW3 • MASTER LEVEL 2
~~~U~E:~~~4
AL,OIH
INTAOI,AL
• MASTER .8086 MODE
110 DELAY
MASK ALL I NTERRUPTS OFF
(VIDEO ROUTINE ENABLES INTERRUPTS)
AL,OFFH
INTAOI,AL
I - - - - - - --------- - - - - - - - - ------ -- ---- - - ------ - -------- - - ---
I
INITIALIZE THE 8259 INTERRUPT .2 CONTROLLER CHIP
I
I -- - - - - --------- - - - - - -- - ------------ - - ----- - --------- - - ---
2081
2082
2083 0613 BO 13
2084 06715 E6
20815
2086 0611 BO
2087 0619 E6
2088 067S Es
2089 0610 BO
2090 067F E6
2091 0681 80
2092 0683 Es
2093 068!! E6
2094 0687 E8
2095 0689 80
2096 0688 E6
2091 0680 E8
2098 068F BO
2099 0691 E6
2100
2101
2102
2103 0693 BO
2104 069! E6
2105
2106 0691 S9
2107 069A 2B
2108 069C 8E
2109 069E B8
2110 OU1 AS
2111 06A2 8C
2112 06A4 AB
2113 Due E2
2114
2115
2116
2111 OU7 80
2118 06A9 E6
2119
2120
2121 06A8 SF
2122 06AE DE
2123 06AF IF
2124
2125 0680 BE
2126 06B3 89
ZI21
2128 06B6 A5
2129 06Bl 47
2130 06B8 41
2131 06.9 E2
5-38
I GET THE lOT REGISTERS
~~,COT_LOC+!!
2010 0663 eo 04
2011 0665 E6 21
2014 0668 E6
201!! 0660 Ea
2016 066F eo
2011 0611 E6
2018
2079
2080
I STORE THE REG I STERS HERE
OZ6H
[BP)
OOFH
BYTE
CX, [BP)
SYTE
OFFSET CSI710007
DOtH
OFFSET CSI710008
MOV
OUT
80
11
AD
00
10
AI
02
00
AI
00
01
MOV
OUT
"MP
MOV
OUT
MOV
"MP
OUT
"MP
MDV
OUT
"MP
MOV
OUT
AI
00
FF"
AI
1-----
,..
AL.IIH
INTBOO,AL
I
....
~~T~~i-;-!tE
,
,
AL.02H
I/O DELAY
SETUP ICW4 -
•••
MDV
SUB
MOV
MDV
STaSI
MOV
STOSW
LOOP
CX,18H
01,01
ES,OI
AX,OFFSET Oil
MDV
OUT
0040 R
MOV
PUSH
POP
MOV
MOV
MOV
DUI
FB
TESTl
<><><><><><><><><><><><>
<><> CHECKPO I NT 14 <><>
FILL ALL INTERRUPT LOCAT IONS
FIRST INTERRUPT LOCATION
SET (ES) ALSO
GET ADDRESS OF J NTERRUPT OFFSET
PLACE I N I NTERRUPT VECTOR LOCAT I ON
GET THE CURRENT CODE SEGMENT
PLACE COCE SEGMENT IN VECTOR LOCATION
AX.CS
D.
ESTABLISH BIOS SUBROUTINE CALL INTERRUPT VECTORS
15
80
0010 E
DOlO
8086 MODE, SLAVE
SET UP THE INTERRUPT VECTORS TO TEMPORARY INTERRUPT
0078
FF"
C7
0000 E
1-----
I NTERRUPT TYPE 10 ( 70-7F)
SLAVE LEVEL Z
I/O DELAY
MASK ALL I NTEFtRUPTS OFF
AL,OFFH
INTBO 1 ,AL
AL.14H
MFG_PORT. AL
FT
I SETUP ICWS
SLAVE ICW4
INTBOI.AL
MOV
OUT
D.,
ICWI - EDGE I
I/O DELAY
SETUP'ICWZ
AL,OIH
INTBOI,AL
14
80
CI
<><><><><><><><><><><><>
<><> CHECKPO I NT 13 <><>
AL,13H
MFG_PORT .AL
MOVSI
INC
INC
LOOP
<><><><><><><><><><><><>
<><> CHECKPOINT 15 <><>
g~.OFFSET
OS
AX,DS
OVIDEO_INT
I SET VIDEO INTERRUPT AREA
I SET UP ADDRESS OF VECTOR TABLE
I SET AX=SEGMENT
,START WITH VIDEO ENTRY
~~:~~FSET VECTOR_TABLE+16
I MOVE VECTOR TABLE TO LOW MEMORY
01
01
DSA
I SK I P SEGMENT PO INTER
1-22
04-21-16
2132
2133
2134
2135
2136
2131
2131
2139
2140
2141
2142
2143
2144
2145
2146
2141
2141
2149
2150
21151
21152
2153
2154
2155
2156
2111
2151
21159
2160
2161
2162
2163
2164
2165
2166
2161
2161
2169
2110
2111
2112
2113
2114
211S
211.
2111
2118
2119
2110
2111
2112
211a
2114
211S
2116
2111
2111
2119
2190
2191
2192
2193
2194
21.5
2196
2191
2191
219.
2200
2201
2202
2203
2204
2205
2206
2201
2201
2209
2210
2211
2212
2213
2214
2215
2216
2211
2211
2219
2220
2221
2222
2223
2224
1---------------------------------------I TEST.12
I
I
DETERM) NE IF CONF' I G RECORD
I
CAN BE USED FDR INITIALIZATION. I
1---------------------------------------06BB EI 0000 E
ASSUME
CALL
06aE ao 16
06CO E6 10
MOV
OUT
1-----
DSIDATA
DDS
IS Ttc BATTERY LOW THIS POWER UP?
aD 10
EI 0000 E
AlIa
14 oa
MOV
CALL
TEST
JZ
AL.CMOS REG D+NMI
CMOS REiO AL.llSoOOOOOB
CMOS!A
06ca
06CD
0600
0602
aD
EI
AI
14
MOV
CALL
TEST
JZ
AL,CMOS DIAG+NMI
CMOS REiD
JM.
SHORT CMOS4
IE
0000 E
10
15
0604 EI 64
1----0606 10 11
0601 E6 10
CMOS!A, MOV
OUT
allElE
EI 0000 E
OC 10
16 C4
EI 0000 E
EI 51
06E'
06EC
06EF
06F5
allElE
EI 0000 E
II 3E 0012 R 1234
15 04
CMOS I ,
06Fl
06F'
06Fa
06FI
06FD
06FD
06FF
24 10
Ea 02
AND
JM.
CMOS !_A I SUB
16 C4
EI 0000 E
0102
0104
0106
0101
2a
2a
al
a5
DB
c.
.0
AE
010A
OTOC
070F
0111
0713
0715
0717
0719
071a
0710
071F
0122
0124
0126
072'
012B
IA
EI
2A
03
FE
3A
CMOS2,
DB
74
BO
Ea
IA
aD
Ea
3B
74
CI
0000 E
E4
01
CI
E.
FI
DB
10
AE
0000 E
EO
AF
0000 E
C3
00
0720
0130
0133
0135
0137
allElE
EI 0000 E
DC 40
16 C4
EI 0000 E
CMOS3.
2A co
T!5
OT44
0746
0748
074a
OT4B
0740
10 18
E6 10
CLEAR OLD STATUS
GET THE CURRENT STATUS
IS THIS A SOFT RESET
GO IF NOT
1 CLEAR ALL BUT THE CMOS/POR MEMORY SIZE
AL.AL
I CLEAR STATUS IF POWER ON RESET
AL,AH
CMOS_WRITE
I SAVE THE CURRENT STATUS
MaV
CALL
SUB
ADO
INC
AL,CL
CMOS READ
AH,AR
BX,AX
JNZ
OR
JZ
MOV
CALL
MOV
MOV
CALL
COP
JZ
CH,CL
CMOS2
ax.ax
CMOS3
AL. CMDS CKSUM HI +NM I
CMOS REiD
AH.A'C
AL, CMOS CKSUM LO+NM I
CMOS READ
Ax.a2
CMOS4
g~: g=g::g~:~:~~~:::
SET START DF CMOS CHECKSUMED AREA
SET END OF CMOS CHECKSUMED AREA + I
(FIRST BYTE OF CHECKSUM)
ADDRESS THE BEG I NN I NG
INSURE AH_O
ADD TO CURRENT VALUE
PO I NT TO NEXT BYTE ADDRESS I N CMOS
FINISHED?
IAT CHECKSUM BYTE HIGHI
GO IF NOT
BX MUST NOT BE 0
CMOS BAD IF CHECKSUM.. O
GET THE CHECK SUM HI GH BYTE
FIRST BYTE OF CHECKSUM
SAVE IT
SECOND BYTE OF CHECKSUM
ec
I S THE CHECKSUM OK
GO IF YES
SET CMOS CHECKSUM ERROR
MOV
CALL
AX.X-ICMOS DIAG+NMII
CMOS READ -
OR
:t::~_CKSUM
CALL
CMOS_'RITE
ADDRESS DIAGNOSTIC STATUS
GET THE CURRENT STATUS
SET BAD CHECKSUM FLAG
SAVE IT
SET FLAG
INSURE CMOS DIVIDERS SET
MOV
CALL
s:o:-
JNZ
AL,olSFH
CMOS.
CALL
MOV
OUT
~~~gS_REG_A+NMII
I ADDRESS CMOS REG I STER A
1 GET CURRENT D I V I SORS
1 LOOK AT PERIDOIC RATE BITS
• EX I T I F SET TO SOMETH I NO USEFU..
ELSE SET THE STANDARD DEFAULT USED BY
BIOS FDR THE 976.156 US RATE
FOR THE PER I 00 I C CLOCK
AL , 26H
AL.AH
CMOS_'RITE
AL,IIH
MFG_PORT • AL
<><><~<><~<><><><><><><>
<><> CHECKPO I NT
' I <><>
ENAaLE PROTECTED MODE
IN
OR
OUT
1-----
anI
015T
'
OT5'
onc
AL.W MEM SIZE
SHORT C~S!_B
BX,ax
CX.CX
xeHG
074F E4 61
0751 DC DC
01&3 E6 61
:t::~D_BAT
SUB
SUB
MOV
MOV
MOV
,-----
CMOS DIAGNOSTIC STATUS BYTE
GET THE CURRENT STATUS
SET THE DEAD BATTERY FLAG
SAVE
OUTPUT THE STATUS
GO TO MINIMUM CONFIGURATION
CMOS WRITE
SHORT CMOS4
:O:-~~:S_DIAG+NMII
AND
CMOS9,
:O:-~~:S_DIAG+NltI )
IIRES!T FLAG, I 234H
CMOS I_A
xeHG
ao 26
a6 C4
EI 0000 E
<>0<><><><><>000<><>
<><> CHECKPO I NT '7 <><>
AL, I TH
MFG_PORT IAL
JNZ
eM.
IAaA
0000 E
OF
01
I CONTINUE WITHOUT CONFIGURATION
VERIFY CHECKSUM
CMOS4,
al
EI
24
15
GET THE OLD STATUS
FROM DIAGNOSTIC STATUS BVTE
HAS CUSTOhER SETUP BEEN EXECUTED?
GO CHECK CHECKSUM I F YES
~:~_BAT
NOV
CALL
CMOS I BI
XCHG
CALL
1----013A
013A
0130
0140
OT42
MOV
CALL
OR
XCHG
CALL
JM.
eM.
1-----
I CHECK BATTERY COND IT I ON
I READ THE BATTERY STATUS
I I S THE BATTERY LOW?
1 ERROR I F YES
SET DEFECTIVE BATTERY FLAG
06DA
06DD
06EO
06E2
06E4
06El
1-----
1 SET THE DATA SEGMENT
<><>0<><><><><><><><>0
<><> CHECKPO I NT 16 <><>
06C2
06C4
06C7
06C.
2225
222.
222T
2228
2229
2230
2231
2232
2231
2214
2235
2236
2211
2231
223.
2240
2241
ea42
2243
2244
2245
I
1
VERIFY CMOS CHECKSUM/BATTERY OK I
1 DESCRIPTION
I
I DISABLE MEMORY AND 110 PARITY CHECKS
SET RETURN ADDRESS BYTE IN CMOS
aD 19
E6 10
MOV
OUT
AL.I.H
MFG_PORT • AL
Bi OIIF
EI 0000 E
MaV
CALL
AX. , -H+ (CMOS SHUT DOIN+NM II
I SET THE RETURN ADDRESS FOR
CMOS_'RITE I THE FIRST SHUTDOWN RET\.ItN ADDRESS
I
I
<><><><><~<><>o<><><>o
<~<>
CHECKPO I NT
19 <><>
TESTt
5-39
1-23
04-21-86
2246
2241
2248
2249
2250
2251
2252
2253
2254
2255
2256
2251
2258
2259
2260
2261
2262
2263
2264
2265
2266
2261
2268
2269
2210
2211
2212
2213
2214
2215
2216
22ll
2218
2219
2280
2281
2282
2283
2284
2285
2286
228T
2288
2289
2290
2291
2292
2293
2294
229&
2296
2291
2298
015F
0162
0164
0161
BC
8E
BC
E8
CALL
MOV
OUT
1-----
016E
OllO
Olll
Olll
OllC
OllF
0181
6A
IF
Cl
C6
BE
8E
BC
08
CALL THE DESCRIPTOR TABLE BUILDER
AND REAL-TO-PROTECTEO MODE SWITCHER
<><><><><><><><><><><><>
<><> CHECKPOINT IA <><>
AL,IAH
MFG_PORT ,AL
SET TEMPORARY STACK
PUSH
POP
MOV
MOV
MOV
MOV
MOV
06 005A 0000
06 005C 00
0058
06
FF'fl)
; SET STACK FOR SYSINITI
MOV
016A BO IA
016C E6 80
BYTE PTR GOT PTR
OS
-
I SET (OS I)
SELECTOR TO GOT SEGMENT
DSrSS TEMP.BASE LO 10RD,O
~T~~sF~~M~SI (SS:TENP.BASE_HI_BYTE) ,0
SS.SISP,MAX_SEG_LEN-2
,-- ------ --------------- ------ - - - ----------- ------------ ------------- --- -- - - ----
I TEST.13
I PROTECTED MODE TEST AND MEMORY SIZE DETERMINE
(0 --> 640K )
I
1 DESCRIPTION:
1
THIS ROUTINE RUNS IN PROTECTED MODE IN ORDER TO ADDRESS ALL OF STORAGE.
I
IT CHECKS THE MACHINE STATUS WORD (MSW) FOR PROTECTED MODE AND THE BASE
I
MEMORY SIZE IS DETERMINED AND SAVED.
BIT 4 OF THE CMOS DIAGNOSTIC
I
STATUS BYTE IS SET IF 512K --> 640K MEMORY IS INSTALLED.
I
DURING A POWER UP SEQUENCE THE MEMORY SIZE DETERMINE IS DONE WITH
1
PLANAR AND 110 PARITY CHECKS DISABLED.
DURING A SOFT RESET THE MEMORY
I
SIZE DETERMINE WILL CHECK FOR PARITY ERRORS.
I
:
,
1-------------------------------------------------------------------------------1
1-----
OT8C B8 088F
018F E8 0000 E
0192 E9 0000 E
0195 F4
0196 EB FD
INSURE PROTECTED MODE
SMSW
DB
TEST
0184 OF 0 I EO
0181 A9 0001
018A 15 OC
"NZ
SHUT 81 MOV
CALL
"MP
AX
OOFH,OOIH,OEOH
I GET THE MACHINE STATUS WORD
C~ R:~~TUAL_ENABLE
I ARE WE I N PROTECTED MODE
~~o:·~~ :~~OS_SHUT_oaWN+N~1 ~NO
PROC:SHUTDOWN
1-----
VIRTUAL MODE ERROR HALT
SHUT81
HL T
"MP
1-----
SHun
sEf
~~~T6~~N R~TURN
ADDRESS
, CAUSE A SHUTDOWN
1 ERROR HALT
64K SEGMENT LIMIT
0198 Cl 06 0048 FFFF
2299
2300
2301
2302 019E C6 06 0040 93
2303
1-----
2305
CPLO, DATA ACCESS RIGHTS
MOV
1-----
2304
2306
2301
2308
2309
2310
2311
2312
2313
2314
2315
2316
2311
2318
2319
2320
2321
2322
2323
2324
2325
2326
232T
2328
2329
2330
2331
2332
2333
2334
2335
2336
2331
2338
2339
2340
2341
2342
2343
2344
2345
2346
2341
2348
2349
2350
2351
2352
2353
2354
2355
2356
2351
2358
2359
MOV
MOV
0000
D4
8000
0000 E
BYTE PTR 051 (ES_TEMP.DATA_ACC_RIGHTSf ,CPLO_DATA_ACCESS
START WITH SEGMENT ADDRESS 01-0000 (SECOND 64Kf
01A3 C6 06 004C 01
01A8 C7 06 004A 0000
MeV
MOV
OlAE BO 1B
OlBO E6 80
MOV
OUT
AL,IBH
MFG_PORT, AL
01B2 BB 0040
MOV
BX,16·4
1----01B5
01B5
018T
01B8
OTBB
OlSO
6A
01
E8
14
E9
48
OlCO
OTCO 83 C3 40
POP
CALL
"Z
"MP
80
15
E8
E9
1-----
CHECK FOR END OF FIRST 640K (END OF BASE MEMORY)
INC
CMP
CALL
"MP
TESTl
FILLICHECK LOOP
HOW BIGI
SUB
MOV
MOV
MOV
MOV
MOV
MOV
XOII
"NZ
PUSH
PUSH
POP
1-----
5-40
BYTE PTR OS. (ES_TEMP. BASE_H I_BYTE)
"NZ
OlEA IE
OlEB 6A 18
OlEO IF
OTEE 81 3E 0072 R 1234
01F4 IF
OlF5 15 36
I BUMP MEMORY COUNT BY 64K
DO NEXT 64K (OXOOOO) BLOCK
3E 004C OA
El
084F R
0812 R
2S FF
B8 AA55
8B ce
261 89 05
BO OF
261 8B 05
261 89 05
33 CI
l!5 65
I POINT ES TO DATA
I POINT TO SEGMENT TO TEST
I DO THE FIRST 64K
I CHECK I F TOP OF MEMORY
1-----
1----0104
0104
0106
01D9
Oloe
OlDE
OlEO
01E3
01E6
01E8
BYTE PTR ES TEMP
ES
HOW BIG
NOT-FIN
DONf
NOT FIN:
ADD
01C3 F'E 06 004C
OlCl
OTCC
OlCE
0101
<><><><><><><><><><><><>
<><> CHECKPOINT lB <><>
; SET THE FIRST 64K DONE
START STORAGE SIZEICLEAR
NOT_DONE~USH
0104 R
03
OeT2 R
BYTE PTR 051 (ES TEMP. BASE HI BYTE) ,OIH
DS:ES_TEMP.BASE:LO_WORD.oR-
01,01
AX,OAA55H
CX,AX
ESI (01 ] .AX
AL,OFH
~~:ygn~i~
AX.CX
HOW_BIG_END
I TEST PATTERN
I SAVE PATTERN
1 WRITE PATTERN TO MEMORY
I PUT SOMETH I NG IN AL
I GET PATTERN
I INSURE NO PARITY 110 CHECK
I COMPARE PATTERNS
I GO END IF NO COMPARE
OS
BYTE PTR RSDA PTR
DS
-
POINT TO SYSTEM DATA AREA
GET (051)
15TH I S A SOFT RESET
COP
POP
"NZ
~~ESET_FLAG, 1234H
HOW_BIG_2
SOFT RESET
RESTORE OS
GO I F NOT SOFT RESET
1-2"
04-21-86
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2"4..
24 .. 5
2 .. 46
2447
24 .. 8
24"9
2450
2451
2452
2453
245..
2 .. 55
2456
2451
2458
2459
2460
2461
2462
2463
2 .. 6 ..
2465
2466
2467
2468
2469
2470
2471
2 .. 72
2473
,-----
INSURE NO PARITY WITH PARITY BITS OFF
07F7 261 C7 05 0101
"OV
WORD PTR ESIIOI],OIOIH
07FC
07FE
0800
0802
0804
01506
01508
01509
E4 61
OC OC
E6 61
24 F3
E6 61
6A FF
515
26. sa
IN
OR
OUT
AND
OUT
PUSH
POP
"OV
AL,PORT B
OSOC
080E
0810
0813
E4 61
24 co
261 89
75 3A
as
IN
AND
"OV
JNZ
as
1----0615
081A
0810
081E
0820
0822
0825
0826
0828
0828
261 C7 05 FFFF
261 88 05
50
E4 61
24 co
261 89 05
58
75 27
30 FFFF
75 22
0834
0835
0836
0837
0838
0838
0830
083F
0841
0843
0845
084A
0848
084C
IN
AND
"OV
POP
JNZ
C"P
JNZ
PUSH
PUSH
PUSH
POP
"OV
SUB
REP
SUB
IN
AND
"OV
POP
POP
JNZ
084E C3
:~~~_~;.~L OFFH
AX
AX.ESI (01]
AL,PORT B
AL.PARITY ERR
ESI [01] ,A~
HOW_8IG_END
, PLACE OFFFFH IN STACK (BUS 81TS ON)
I DELAY - C~US I NG BUS S ITS ON
1 CHECK PARITY
I CHECK FOR PLANAR OR 110 PAR I TY CHECK
CLEAR POSSIBLE PARITY ERROR
GO IF PLAN~R OR I/O P~RITY CHECK
WORD PTR ES I [0 I). OFFFFH I
AX,ES. [01]
1
AX
1
AL,PORT B
I
AL,PARITy ERR
ESI (01] IA~
AX
HOW BIG END
AX ,'D"FFFJ!'H
HOW_BIG_END
TURN ON ALL BITS
CHECK FOR FFFFH
S~YE RESULTS
CHECK FOR PLANAR OR I/O PARITY CHECK
CLEAR POSSIBLE PARITY ERROR
GET RESULTS
GO IF PARITY CHECK
CHECK 6 ..K BLOCK FOR PARITY CHECK
HOW BIG 21
-SUB
"OV
REP
IE
06
06
IF
89 15000
28 F6
F3/ AD
28 FF
E4 tol
24 CO
261 C7 05 0000
07
IF
75 01
I TOGGLE pilAR I TY CHECK ENABLES
AL,RAM_PAR_ON
CHECK ALL BITS WRITE OK
"OV
"OV
PUSH
1----0820
0820 28 CO
082F 89 8000
0832 F3/ A8
~~R~A=-;~~R_OFF
I TURN OFF BOTH PARITY BITS
AX,AX
CX.ZOOOH-"
STOSW
OS
ES
ES
OS
CX I 2000H-"
SI,SI
LODSW
01 1 01
ALlPORT B
ALIP~RITY ERR
WORD PTR ls. [01] 10
ES
OS
HOW_B I G_ENO
WRITE ZEROS
SET COUNT FOR 32K WORDS
FILL 32K WORDS
, GET ES TO
as
1 SET COUNT FOR 32K WORDS
SET TO BEGINNING OF BLOCK
CHECK FOR PLANAR OR 110 PARtTY CHECK
1 CLE~R POSS I BLE PAR I TY ERROR
I RESTORE SEGMENTS
I GO IF PLANAR OR I /0
P~RITY
CHECK
RET
084F
084F 9C
0850 80 IC
0852 E6 80
HOW BIG ENOl
-PUSHF
MaY
OUT
1----8383
0000 E
80
F8 0200
02
7F
I SAYE THE CURRENT FLAGS
AL.1CH
MFG_PORT ,AL
,
SET OR RESET 512 TO 6"0 INSTALLED
FL~G
~~o~- ~i~gS_INFOI2e+NMI)
SET/RESET 640K STATUS FLAG
GET THE DIAGNOSTIC STATUS
AL.M640K
BX.512
K640
AL,NOT M6"OK
CHECK MEMORY SIZE
SET FLAG FOR 512 -> 640 I NSTALL.EO
0854
0857
085A
085C
0860
0862
0864
0864
0866
88
E8
OC
81
77
24
156 C4
E8 0000 E
XCHG
CAL.L
AL,AH
CMOS_WRITE
0869
0868
086C
0870
0871
6A 18
IF
89 IE 0013 R
90
C3
PUSH
POP
"OV
POPF
RET
BYTE PTR RSOA_PTR
OS
.MEMORY_SiZE.BX
"OV
CAL.L
OR
C"P
JA
AND
<><><><><><><><><><><><>
<><> CHECKPOINT IC <><>
I
K6 .. 0:
SAYE THE STATUS
RESTORE THE STATUS
I RESTORE THE DATA SEGMENT
SA YE MEMORY SIZE
RESTORE THE FLAG REGI STER
1--------- -- - - ------- - - - ------- -- ------ -- -- .-. --- -------- --- -- -------- ------ - --, TEST.13A
1 PROTECTED MODE TEST AND MEMORY SIZE OETERM I NE
I
(ABOYE I 02 ..K )
I
, OEseR I PTI ON I
I
THIS ROUTINE RUNS IN PROTECTED MODE iN OROER TO ACDRESS ABOYE I MEG.
I
THE MEMORY SIZE I S DETERM I NED AND SA YEO I N CMOS.
;
OUR I NG A POWER UP SEQUENCE THE MEMORY S I IE OETERM I NE I S ~ONE WITH
I
PLANAR AND I/O PARITY CHECKS DISABLED.
DURING A SOFT RESET THE MEMORY
:~~~_~~~~~~~~:_!~~~_~~:~~_~~~_~~~~~~_:~~~~::
:_____
0872
0872 6A 08
087 .. IF
_______________________________
DONE:
PUSH
POP
1-----
BYTE PTR GOT PTR
OS
-
START WITH SEGMENT ADDRESS 10-0000 (ONE MEG AND ABOYE)
0875 C6 06 004C 10
081A Cl 06 004A 0000
MaY
MOY
0880 BO 10
0882 E6 80
"OV
OUT
AL.IOH
MFG_PORT, AL
0884 2B DB
SUB
BX,BX
,-----
0886
0886
0888
0889
088C
6A .. 8
07
E8 08A5 R
74 03
088E E9 092C R
, PO I NT OS TO THE DESCR I PTOR TABLE
BYTE PTR OS.!ES TEMP.BASE HI BYTE1,10H
OS I ES_TEMP. BASE:L.O_WORD, oR -
<><><><><><><><><><><><>
<><> CHECKPOINT 10 <><>
, START WITH COUNT
a
START STORAGE SIZE/CL.EAR
NOT DONE I I
PUSH
POP
CAL.L
JZ
J"P
BYTE PTR ES TEMP
ES
HOW BIGI
DONE'A
DONE I
POINT E5 TO DATA
POINT TO SEGMENT TO TEST
DO THE FIRST 6 .. K
CHECK IF TOP
I GO IF TOP
TESTt
5-41
0
1-25
04-21-16
2414 0191 13 C3 40
2415
2416
24.,.,
2411 01'4 FE 06 004C
241'
2410
2411
2412
2413
2414
2411
2416
2481
2411
2419
2490
24.1
2492
2493
2494
2495
2496
2491
2491
2499
2500
2101
2502
2503
2104
2505
2506
0191
01'0
019F
01A2
2513
2514
2511
2516
2511
2111
251'
2520
2521
2822
2123
2524
2121
2126
2521
2121
2129
2530
2531
2532
2533
2134
2535
2136
2531
2531
2139
2540
2541
2542
2543
2544
2545
2546
2541
2541
254.
2550
2551
2552
2553
2554
2551
2116
25IT
2551
251.
2560
2561
2562
2563
2564
2565
2566
2561
2561
256.
2110
251 I
2112
2571
2514
2515
2576
25.,.,
251.
251.
2510
2581
25,2
2181
2884
2185
2586
2517
ADD
1-----
DO Nl!XT 64K IXXOOOOI BLOCK
1-----
CHECK FOR TOP OF MEMORY IFEOOOO)
INC
, .
10 3E 004C FE
15 El
EI 091' R
E9 092C R
C'"
....Z
CALL
JMP
.----01A5
0lA5
OlAl
OIAA
OIAC
OlAF
OISI
0lB4
OlBl
0189
~.. FF
BI AA55
18 C8 .
261 •• 05
BO OF:'
26& IS 05
261 I . 05
33 CI
15 5E
IE
6A 1I
IF
II 3E 0012 R 1234
IF
15 2F
:= ::1~1
PDP
1-----
IN
AL,PORT B
AL,PARITy ERR
ESI [OJ) ,AI
HOW_B I G_END I
AX,ES.[DI]
TURN OFF BOTH PARITY BITS
• PLACE OFFFFH IN STACK IBUS BITS ON)
, CHECK FOR PLANAR OR 110 PAR ITY CHECK
CLEAR pass I ILE PAR I TY ERROR
GO IF PLANAR OR I/O PARITY CHECK
CHECK ALL BITS
~JSH
IN
AND
MDV
~:
C'"
JNZ
WORD PTR ES. [0 I ] ,OFFFFH ,
BYTE PTR 0
I
AX
I
AX,ES.[OI]
1
!
I
AL,PORT B
AL,PARITY ERR
ESI[DI],AI
I
.. x
TURN ON ALL BITS
PLACE OOOOOH IN STACK IBUS BITS OFF)
DELAY - CAu51NG BUS BITS OFF
CHECK FOR FFFFH
SAVE RESlI_ TS
CHECK FOR PLANAR OR I/O PAR ITY CHECK
CLEAR POSSIBLE PARITY ERROR
AX
1 GET RESULTS
HOW BIG ENOl
I GO IF PLANAR OR I/O PARITY CHECK
AX.~FFrtt
HOW_B I G_END I
CLEAR 64K BLOCK OF MEMORY
HO'_BIG_:~
MDV
REP
AX,AX
CX,IOOOH-.
STaSI
I WRITE ZEROS
1 SET COImT FOR 12K WORDS
I FILL 31K laRDS
CHECK 64K BLOCk FOR PARITY CHECK IVALIO TEST DURING SOFT RESET ONLY)
PUSH
PUSH
PUSH
PDP
MDV
sua
REP
sua
IN
AND
MDV
.....
PDP
JNZ
as
ES
ES
as
CX,1000H-4
51,51
LODSI
01 , 01
AL,PORT B
AL,PARITY ERR
WORD PTR ESI [01] ,0
ES
I GET ES TO OS
I SET COUNT FOR 32K WORDS
I SET TO BEG INNI NG OF BLOCK
I CHECK FOR PLANAR OR I/O PARITY CHECK
I CLEAR POSSIBLE PARITY ERROR
I RESTORE SEGMENT
DS
HOW_B I G_ENl I
I GO IF PLANAR OR I/O PARITY CHECK
AL,IEH
MFG_PORT,AL
I
I
RET
0'1'
0919 SO IE
091S E6 10
HOW_BI G-: I I
OUT
1-----
80
1!6
C6
28
8A
EI
28
I DELAY - CAUSING BUS BITS ON
I CHECK PAR I TY
MDV
0911 CI
09IC
O'IE
0.30
0.35
0931
0.3A
0930
SOFT RESET
RESTORE OS
GO I F NOT SOFT RESET
HOW_BIG_2A
I
PUSH
1-----
• POINT TO SYSTEM DATA AREA
~:ESET_FLAG I 1234H
AX
.....
MDV
IE
06
06
IF
B. 1000
2B F6
F3/ AD
2S FF
E4 6 I
24 CO
261 C7 05 0000
01
IF
J5 01
~;TE PTA RSDA_PTA
WORD PTR ESI[OI],OIOIH
BYTE PTA OFFH
AND
MDV
15 22
as
PDP
MDV
JNZ
11 21
3D FFFF
IA
EI
80
IA
EI
C3
I PUT SOIIETH I NO IN AL
I GET PATTERN
I INSURE NO PARITY I/O CHECK
1 COMPARE PATTERNS
I GO END I F NO COMPARE
CHECK PARITY WITH PARITY BITS OFF
MDV
26, Cl 05 FF'f'F'
6A 00
51
26, 88 05
50
E4 6 I
24 CO
261 .9 05
511
aD
.....
....Z
PUSH
E4 61
24 CO
26, 19 05
15 3D
0910
091F
0921
0924
0926
0921
0928
• TEST PATTERN
I SAYE PATTERN
I SEND PATTERN TO MEMORY
IS THIS A SOFT RESET
C...
1-----
OIFE
OIFF
0900
0901
0'02
0905
0907
0'09
090S
0'00
090,.
0914
0915
0'16
LAST OF MEMORY?
GO IF NOT
GO SET MEMORY SIZE
FILL/ct£CK LOOP
PUSH
PUSH
05 0101
oeF7
0lF7 2B CO
oeF. 89 11000
OIFC F3/ AS
BYTE PTR Ds.IES TEMP.BASE HI BYTEI,OFEH
NOT DONEI
:::;~ I G_END I
....Z
1----Oloe
OlE I
0lE3
0lE4
OlE'
OIEI
OlEA
OIEC
OIEF
OIFO
0lF2
0lF5
BYTE PTA DS.IES_TE... BASE_HI_SYTEI
Mav
MDV
Mav
MDV
MDV
MDV
XDR
01eP" 51
0100 26, IB 05
0103
Oaol
Oaol
OIDA
I BUrr MEMORY COUNT BY 64K
HOW_BIGI ~UI
1-----
olaa
OIBC
OlBE
018F
OICI
2501 OIC6
2508
250.
2510
=::~
DONEAI
0.3F C6 06 004C 01
0'44 EI D." R
5-42 TESTl
ADDRESS LOW BYTE
GET LOW MEMORY SIZE
SET LOW BYTE
ADDRESS H I BYTE
GET THE HI OH MEMORY SIZE
PLACE I N CMOS
CALL
MDV
MDV
1----IF
10
06 004C 00
FF
Ff'FF
0." R
02
SET EXPANSION MEMORY SIZE DETERMINED IN CMOS
MDV
MDV
80
E3
0000 E
81
El
0000 E
DONE I I
<><><><><><><><><><><><>
<><> CI-ECKPOINT IE <><>
CALL
RET
TEST ADDRESS LINES 19 - 23
NOV
OUT
MDV
SUB
MDV
CALL
AL, I FH
I
<><>0<><><><><><><><><>
MFG PORT, AL
I
<><> CHECKPO I NT IF <><>
ByT! PTA DSIIES TEMP.BASE HI BYTEI,OOH
,-sET LOCATION POINTER TO ZERO
01 , 01
OX,OFFFFH
I WRITE FFFF AT ADDRESS 0
sao
sua
OX,OX
MDV
:~~ PTR OSIIES_TEMP.BASE_HI_BYTEI.OIH
CALL
I WRITE 0
2811
2519
2890
2191
2592
2593
2594
2595
2596
259T
2591
2599
2600
2601
2602
2603
2604
2605
2606
2601
2601
2609
261 a
2611
2612
2613
2614
2615
1!616
2611
2611
2619
2620
2621
2622
2623
2624
2625
2626
2621
2621
2629
2630
2631
2632
2633
2634
26311
2636
2631
2631
2639
2640
2641
2642
2643
2644
2645
2646
2647
2641
2649
2680
2681
2682
2683
2684
26'5
2686
2681
26S1
2689
2660
2661
2662
2663
2664
2665
2666
266T
2661
2669
26T0
2611
2612
2613
2674
261'
26"
2671
2611
2679
2610
2611
2612
2613
2614
261'
2616
2611
2611
2619
2690
2691
2692
2693
2694
2695
2696
269T
2691
2699
2700
270 I
0941
094C
094F
0954
095T
095C
091F
0964
C6
EI
C6
EI
C6
EI
C6
EI
06 004C
0969 R
06 004C
0969 R
06 004C
0969 "
06 004C
0969 R
to
MOY
CAU.
MOY
CAU.
MOY
CAL.l..
MOY
CAL.L
20
40
10
096T EI 11
0969
0969 6A 41
0961 01
096C 261 19 II
SDO,
PUSH
:~~E PTR OS, (ES_TEMP.BASE_HI_BVTEJ .10H
:~~E PTR
os, IES_TEMP.aASE_HI_aVTE) .20H
:~~E PTR 051 IES_TEMP.8ASE_HI_aVTI) .40H
:~~E PTR DSI tES_TEMP.aASE_HI_IVTEJ .IOH
StalT SD2
I TEST PASSED CDNT I NUE
~:TE PTR ES_TEMp
POP
MOY
ESI [01] .DX
POINT IS TD DATA
PO I NT TO SEGMENT TO TEST
WRITE THE PATTERN
PUSH
POP
CMP
JZ
JMP
BVTE PTR ES TEM,.
ES
WDRD PTR ESI[DI].OFFFFH
SOl
SHUT_I
!-OINT IES TO DATA
POINT TO SEGMENT TO TEST
DID L.OCATION a CHANGE?
CONT I HUE IF NDT
GO HAL.T IF VES
096F C6 06 004C 00
0914
09T6
09TT
0911
09TD
0910
0910
6A 41
01
261 13 3D FF
14 OS
E9 OTIC R
0911
0913
0911
0917
0919
0911
0910
091F
80
E6
E4
DC
£6
24
E6
E9
5011
C3
1----20
10
61
OC
61
F3
61
0000 E
SD21
RET
CAUSE A SHUTDOWN
MOY
OUT
IN
AL. 1 20H
MFG PORTIAL
AL..'F'ORT a
OR
OUT
AND
OUT
JMP
AL..RAM PAR ON
PORT a';'AL. PROC:SHUTOOWN
~~R~A=-;~~_OFF
c>c>c>c>c>c>c>c>c><>c>c>
c>c> CHECKPO I NT 20 c>c>
1 TOGGL.E PAR I TY CHECK ENABL.ES
I CAUSE A SHUTDOWN (RETURN YIA JUMP)
1---------------------------------------1---------------------------------------0992
0994
0996
0999
099a
80
E6
Be
IE
Be
21
10
---- R
D4
0400 R
099E
09AO
09A2
09A5
2a FF
IE Cl
al 0000 E
AS
1 RETURN I FROM SHUTDOWN
,
SHUT I I
I
I
1-----
AL..2IH
MFG PORTIAL.
SPIAaso
SS.SP
SP I OFFSET .TOS
MOY
01,01
ESIDI
AXIOFFSET 011
STOSW
CAU.
1-----
CAU.
TEST
JZ
24 OF
16 C4
EI 0000 E
ANO
XCHG
CALL
1-----
ODS
I POINT TO FIRST INTERRUPT L.OCATION
I SET Es TO ABSO SEGMENT
1 GET ADDRESS OF' I NTERRUPT OFFSET
I PL.ACE OFFSET I F NUL.l.. HANDLER IN VECTOR
I SET UP THE REAL DATA AREA
GET Tt£ CONFIGURATION FROM CMOS
MOY
ae IEIE
EI 0000 E
AI CO
74 03
E9 OAIC R
C>C>C>C>C><>C><><><>C>C>
0<> CHECKPO I NT 21 c><>
1 SET REAl.. MODE STACK
SET DIVIDE 0 VECTOR OFFSET
SUB
MOY
09A6 EI 0000 E
09A9
09AC
09AF
09al
09a3
09a6
0916
09al
09aA
MaY
OUT
MOY
MOY
MOY
~~r ~i~gs_o I AG+NM I J
eXD_MOS
CIECK CMOS GOOD
GET THE STATUS
YAL.ID CMOS?
GO IF YES
GO IF NOT
ALIODF'H
ALlAH
CMOS_IRITE
CLEAR TI£ MINIMUM CQNFIG lIT
SAVE THE STATUS IYTE
BACK I NTO CMOS
QL.t:AD_BAT+BAD_CKSUM
CHECK FOR CMOS RUN IN MODE
09BD II 3E 0072 R 1234
09C3 74 10
Cw.
JE
eRESET FLAG, 1234H
M_OK_6i
09C5
09C7
09CA
09CC
09CE
MOY
CALL
AND
CMP
JNE
AI...ICMOS a M S HI+NMI
CMOS READ- - AL,OC'OH
AL,OCOH
M_OK_64
MaV
BYTE PTR eRESET_FL.AG,64HI ELSE SET THE MFG TEST FLAG
ao
EI
24
3C
75
96
0000 E
CO
CO
01
0900 C6 06 0072 R 64
0901
0905
0901
09DA
O.DC
09DE
09EO
09E3
aD
II
IA
AI
15
EI
14
94
0000 E
EO
10
31
09EE R
4C
1-----
091C EI 4E
CALL
MDY
TEST
JNZ
CALI...
JZ
09EE
091:E
09FI
09FI
09F2
09F3
09F4
09F6
09F9
09FI
O'FD
09FF
OAOO
OAOI
OA02
19 COOO
50
IE
11
IE
SF
21
II
31
IF
IF
51
14
1-----
ALICNOS IQUIP'+NMI
CMOS READ
AHIAC
AI... I 030H
MOS OK I
1 GET THE EQU I P'MENT BYTE
~::~DEO
TEST
JZ
etEG TST, MFG LOOP
NORMAL_CONFJ'C'
EXCEPT IF MFG .JUMPER IS INSTALLED
GO IF INSTALLED
JMP
SHORT aAD_MOS
I GO DEFAULT
ROUTINE CtcCK FOR YIDEO FEATURE ROM PRESENT"
CHK_V I DE~~y
PUSH
PUSH
MOY
NOY
SUB
MOY
CMP
POP
PDP
POP
DC
MASK FOR MANUFACTURING TEST BITS
CIECK FOR MANlFACTUR I NG TEST MODE SET
SKIP IF NOT MANUFACTURING LINE TEST
SAVE YIDEO TYPE
ANY YIDEO?
CONTINUE
INSURE Y IDEO ROM PRESENT
CONTINUE
CHK_Y I OE~~~H
09
AA55
DI
01
C7
I GET THE BASE MEMORV SIZE HIGH IYTE
INSURE CDP*"IGURATION HAS CORRECT VIDEO TYPE
M_OK_64'MOY
09EI F6 06 0012 R 20
09EA 14 6F
CIECK FOR SOFT RESET
BVPASS I F SOFT RESET
JZ
CX,OCOOOH
AX
OS
01
DSICX
DI,OAAI5H
axlax
AXI[aX]
AX,DI
DI
DS
AX
CHK_YIDE02
1 START OF FEATURE I/O ROM
1
1
I
1
I
I
1
SAVE THE CONFIGURATION
SAVE THE DATA SEGMENT
SAVE COMPARE REGISTER
GET RDM SEGMENT
GET TIE PRESENCE SIGNATURE
CLEAR I NDEX PO INTER
GET THE FIRST 2 LOCATIONS
IS THE VIDEO FEATURE ROM PRESENT?
RESTORE WORK REG I STER
RESTORE DATA SEGMENT
GET TJoE CONF I GU"AT I ON
GO IF YIDEO ROM INSTALLED
TESTl
5-43
1-27
04-21-86
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2116
2711
2118
2119
2120
2721
2122
2123
2724
2125
2726
2727
2128
2729
2130
2131
2132
2133
2134
2135
2736
2131
2138
2739
2140
2141
2742
2743
2144
2745
2146
2747
2748
2749
2750
2751
2752
2153
2754
2755
OA04
OA08
OAOC
DADE
OAIO
OAIO
81
81
7C
23
CI 0080
F9 C800
E3
C9
C3
AOO
e""
.JL
ANO
CHK VIDE02.
RET
;-----
OAII
OAII E8 09EE R
OAI4 74 26
MOV
TEST
JZ
;-----
24
3C
75
8A
EB
30
30
11
C4
08
eMP
JNZ
MOV
JOP
OA29
OA29
OA2B
OA2o
OA2F
24
3C
8A
14
30
30
C4
OB
NOS OK 2.
- AND
eMP
MOV
JZ
OA31
OA33
OA35
OA3A
A8
15
F6
14
0I
26
06 0012 R 20
IF
MOS_OK. TEST
JNZ
TEST
JZ
ANO
1-----
1----OA3C
OA3C
OA3F
OA42
OA44
OA46
OA49
OA49
OA4C
OA4E
B8 008E
E8 0000 E
AS CO
l& 03
E8 0000 E
E8 09EE R
BO 0 I
74 DB
5-44
31
AL,AH
.MFG TST ,DSP .JMP
MOS_~K_2
-
RESTORE CONFIGURATION
CHECK FOR 0 I SPLAY JUMPER
GO IF COLOR CARD IS PRIMARY DISPLAY
(NO JUMPER INSTALLED)
INSURE MONOCHROME IS PRIMARY
CONFIGURATION OK?
GO IF NOT
RESTORE CONFIGURATION
USE THE CONFIGURATION BYTE FOR DISPLAY
AL..30H
AL..30H
BAD NOS
AL.AH
SHORT MOS_OK
AL,30H
AL.30H
AL,AH
BAD_MOS
STRIP UNWANTED BITS
MUST NOT BE MONO WITH .JUMPER INSTALLED
RESTORE CONF I GURAT I ON
GO IF YES
AL.OIH
NORMAL CONF I G
.MFG i!T, MFC L.OOP
NORMAL_CONF I ri
1 MUST HAVE AT LEAST ONE DISKETTE
I GO SET CONFIGURATION IF OK
I EXCEPT IF MFG JUMPER IS INSTALLED
I GO IF INSTALLED
MINIMUM CONFIGURATION WITH BAD CMOS OR NON VALID VIDEO
CALL
BAD MOSII
CALL
MOV
JZ
02
IS THE VIDEO ROM INSTALLED?
WRONG CONFIGURATION IN CONFIG BYTE
CONFIGURATION MUST HAVE AT LEAST ONE DISKETTE
BAD MOS.
MOV
CALL
TEST
JNZ
06 0012 R 40
II
~~~:~b~EO
COLOR CARD
AX, CMOS 0 I AG+NM I
CMOS READ
AL, BAD BAT +BAD CKSUM
BAD_MO!I
-
; GET THE DIAGNOSTIC STATUS
CONFIG_BAD
I SET THE MINIMUM CONFIGURATION FLAG
WAS BATTERY DEFECTIVE OR BAD CHECKSUM
GO IF YES
CHK VIDEO
AL,lhH
NORMAL._CONFIG
CHECK FOR V IDEO ROM
DISKETTE ONL. Y
GO I F V IDEO ROM PRESENT
TEST
MOV
JZ
.MFG TST .asp JMP
AL.,ITH
NORMAL_ CONF I G
CHECK FOR 0 I SPLAY JUMPER
DEFAULT TO 40X2!S COLOR
GO I F .JUMPER I S I NST ALLED
MOV
AL,31H
2756
2757 OA50 F6
2758 OA55 BO
2159 OA&T T4
2760
2161 OA59 BO
2T62
2763
2164
2165
2766
2161 OA5B
2768 OA5B F6
2769 OA60 75
2770 OA62 24
2771
2772 OA64 2A
2773 OA66 A3
2774 OA69 81
2775 OA6F 74
2776
2777
2778
2779 OA71 BO
2180 OA13 E8
2781 OA76 BO
2782
2783 OA18 E6
2784
2185 OA7A 2B
2186 OA7C E8
2781
2188 OA1F B9
2189
2790 OA82 E4
2791 OA84 A8
2192 OA86 EI
2793
2194 OA88 9C
2195 OA89 BO
2196 OABS E8
2197 OA8E 90
2798 OA8F 74
2199
2800 OA9l E4
280 I OA93 A2
2802
2803
2804
2805 OA96 3C
2806 OA98 75
280T DAtA E9
I RETURN TO CALLER
MONOCHROME CARD IS PRIMARY DISPLAY
OAIF
OA21
OA23
OA25
OA21
1-----
PO I NT TO NEXT 2K BLOCK
TOP OF V IOEO ROM AREA YET?
TRY AGAIN
SET NON ZERO FLAG
CMCS VIDEO BITS NON ZERO (CHECK FOR PRIMARY DISPLAY AND NO VIDEO ROM)
MOS OK II
- CALL
JZ
OAI6 8A C4
OAI8 F6 06 0012 R 40
OAIC 74 OA
CX,080H
CX,OC800H
CHK VIDEOI
CX,ex
I DISKETTE I BIW DISPLAY 80X2S
1---------------------------------- -----I
CONFIGURATION AND MFG MODE
I
1---------------------------------------06 0012 R. 20
02
3E
E4
00 lOR
3E 0012 R 1234
2t
NCRMAL CONFIGI
- TEST
JNZ
ANO
NORMII
1-----
.MFG TST, MFG LOOP
NORMT
AL,03EH
SUB
MOV
eMP
JZ
SAVE SWITCH INFORMATION
BYPASS IF SOFT RESET
GET THE FIRST SELF TEST RESULTS FROM KEYBOARD
60
0390 R
40
MOV
CALL
MOV
AL.,WRITE 8042 LOC
C8042
AL,40H
60
OUT
PORT_A,AL
C9
03A2 R
SUB
CALL
CX,CX
C42_'
7FFF
MOV
CX,OlFFFH
IN
AL, STATUS PORT
AL ,OUT BU' FULL
T516 -
64
01
FA
TST61
TEST
LDOPZ
OC
PU5HF
MOV
CALL
POPF
JZ
60
0072 R
MOV
AD
0390 R
IN
1----65
03
OC34 R
TESTl
IS THE MANUFACTURING JUMPER INSTALLED
GO IF NOT
STRIP DISKETTE FOR MFG TEST
ENABLE KEYBOARD
ISSUE WR I TE BYTE COMMAND
ENABLE OUTPUT BUFFER FULL INTERRUPT,
SET SYSTEM FLAG, PC 1 COMPAT I B I L I TY,
INHIBIT OVERRIDE, ENABLE KEYBOARD
I WI. I T FOR COMMAND ACCEPTED
SET LOOP COUNT FOR APPROX I MATEL Y lOOMS
TO RESPOND
WA I T FOR OUTPUT BUFFER FULL
I TRY AGAIN IF NOT
E6
SAVE FL.AGS
o I SABLE KEYBOARD
ISSUE THE COMMAND
RESTORE FLAGS
CONTINUE WITHOUT RESUL.TS
AL,PORT A
BYTE PTJ!{ .RESET_FLAG I AL
GET I NPUT FROM KEYBOARD
TEMPORARY SAVE FOR AI. RECE I VED
AL.,DIS_KBD
C8042
CHECK FOR MFG REQUEST
eMP
JNE
JMP
AL,06!SH
E6
MFG_BOOT
LOAD MANUF ACTUR I NG TEST REQUEST?
CONTINUE IF NOT
EL.SE GO TO MANUFACTURING BOOTSTRAP
1-21
04-21-16
2101
2109
2110
2111
2112
2813
2114
2115
PAGE
1-------------------------------------------------------I TEST.14
I
I
•
I
I
I
I
28"
211T
2111
2119
2120
2121
2122
2123
2124
2125
2126
21n
2121
1129
2130
2131
2132
2133
2134
2115
1136
21n
2131
ZI39
2140
2141
2142
ZI41
ZI44
2145
2146
ZI47
ZI41
2149
2150
2151
2152
21ea
2154
2155
2156
2157
2151
2159
2160
2161
2162
2163
2164
2165
2166
2167
2161
21"
2110
2111
2112
2113
ZI14
2115
2176
21TT
2111
2819
2180
2111
2182
2113
2114
2185
2186
2111
2111
21.9
2190
2191
2192
2891
2194
2195
21"
2191
2914
2915
2916
Z911
2911
2919
2920
2921
CONTROL~
(61451
I
I
I
RESET THE V IDEO ENABLE SIGNAL.
SELECT ALPHANUMER I C MODE, 40 • 25, a & W.
READ/WRITE DATA PATTERNS TO MEMORY. Ct£CK
STORAGE ADDRESSAaILITY.
ERROR • I LONG AND Z SHORT aEEPS
I
I
I
I
I
1-------------------------------------------------------OUD
OUO
OU I
OAA3
OU6
OUI
OAAA
OAAC
OAAF
OAa2
OAa4
OAB7
OAa9
OAaA
OABD
OAaF'
OACI
OAC2
OACI
OAC5
OAC7
OACA
DACE
OACF
OADO
OAD2
OAD2
OAD4
OAD6
OADI
DADA
OADC
DADE
DADE
OAEO
OAE I
OAEa
OAE5
OAE6
OAEl
OAEA
OAED
OAFO
OAF3
OAF5
OAFl
OAF'A
OAFC
OAFC
OAFF
oaol
OIOZ
0104
oa06
oaol
OIOB
AI
50
80
AI
28
CD
10
A3
al
CD
al
CD
51
AI
24
7D
IE
50
2B
IE
0010 R
E6,
30
00 lOR
CO
10
20
00 lOR
0003
10
000 I
10
AL,30H
INT
MOV
MOV
MOV
INT
MOV
INT
POP
MOV
AND
INT VIDEO
AL,loH
eEQUIP FL.AG,AX
AX,OOOJH
INT VIDEO
AX,tJOOIH
l~T_VIDEO
PUSH
PUSH
CO
01
ET,
30
01
C4
20
02
03
16 EO
50
IA E4
CD 10
51
50
I I BODO
aA 03BI
a9 0100
10 FC 30
14 01
al al
BA 0301
ID 20
CI
DB
C9
0000 E
la
AX
DS
"""
.....
"""
AL,30H
E8
.CHG
A.
MOV
SUB
EO,
eEQUIP FLAG,AX
AL,30ti
ET
OS
.-
PUSH
0065 R
IT
::~~~P_Ft..AG,AX
AX,AX
SET DATA SEGMENT TO 0
DS,AX
01 ,OFFSET ev IDEO I NT
SET I NTERRUPT I OH TO DUMMY
WORD PTR [Dll,OF'SET DUMMY RETURN I RETURN IF' NO VIDEO CARD
AX
• J(e:STORE REG I STERS
JE
INC
Ee,
GET SENSE I NFORMAT I ON
SAVE IT
FORCE MONOCHROME TYPE
INTO EQU I PMENT FLAG
MODE SET COMMAND FOR DEF AI.A.T MODE
SEND INITIALIZATION TO all CARD
FORCE COLOR AT 10 BY 25
INTO EQU I PMENT FLAC TO CLEAR BUFFERS
AND INITIALIZATION COLOR CARD Bone
MODE SET 10 X 25
SET COLOR 40 X 25 MODE
SET DEFAULT COLOR MODE
RECOVER REAL SWITCH IN='DRMATION
RESTORE IT
ISOLATE VIDEO SWITCHES
VIDEO SIITCHES SET TO O?
SAVE THE DATA SEGMENT
SUB
MOV
MOV
MOV
POP
POP
C7 De 0000 E
51
IF
EB 7F
AD
24
EE
IE
IE
01
EI
15
:=,eEQUIP_FLAG
PUSH
....Z
IF' 0040 R
3C
74
FE
3C
75
a4
MOV
MOV
MOV
SUB
00 lOR
30
II
INT
POP
PUSH
MOV
MOV
MOV
CMP
JE
MOV
MOV
MOV
SHORT EII_'
all CARD ATTACHED?
YES - SET MODE FOR B/W CARD
SET COLOR MODE FDR COLOR CARD
BOX25 MODE SELECTED?
NO - SET MODE FOR 40X25
SET MODE FOR IOX25
AH
AL,20H
Ee
AH,3
AH,AL
SAVE VIDEO MODE ON STACK
I NIT I AL.I ZE TO ALPHANJMER I C MD
CALL VIDEO 10
RESTORE VII5'EO SENSE SWITCHES IN AH
SAVE VAL.UE
STARTING VIDEO MEMORY ADDRESS B/I CARD
MODE REGISTER FOR alW
MEMORY WORD COUNT FOR B/I CARD
a/I VIDEO CARD ATTACHED?
YES - GO TEST V IDEO STORAGE
STARTING MEMORY ADDRESS FOR COLOR CARD
MODE REG I STER FOR COLOR CARD
MEMORY WORD COUNT FOR COLOR CARD
AH,AH
l~T_VIDEO
A.
aX,OBOOOH
DX,3alH
CX,2041
AH,30H
EO
aH,OSSH
DX,3DSH
CH,20H
MOV
AND
OUT
MOV
MOV
R...
AL, .oRT MODE SET
AL,OITt1
DX,AL
ES,ax
DS,ax
CX,t
CALL
:T~TST_CNT
JNE
• BYPASS VIDEO TEST
GET CURRENT MODE SET VALUE
SET VIDEO BIT OFF
o I SABLE V IDEO FOR COLOR CARD
PO I NT ES TO V I DEO MEMORY
POINT DS TO VIDEO MEMORY
DIVIDE BY 2 FOR lORD COI..t.lT
GO TEST VIDEO READ/WRITE STORAGE
R/W MEMORY FA IL.URE - BEEP SPEAKER
1-----------------------------------------------• TEST.15
•
SETUP VIDEO DATA ON SCREEN FOR VIDEO
1
LINE TEST.
1 DESCRIPTION
1
ENABLE V I DEO 5 I GNAL AND SET MDDE.
•
DISPLAY A HORIZONTAL BAR ON SCREEN.
I
•
I
I
I
I
.-----------------------------------------------DaDo aD 22
OBOF E6 10
Dill 51
oal2 50
oall a4 00
0115 CD 10
Dalla. 1020
OIIA 2S FF'
oa I C a9 0021
oalF F3/ Aa
MOV
OUT
POP
AL,22H
AX
SUB
01,01
MOV
INT
MOV
MOV
REP
<><><><><><><><><><><><>
:~G_PORT ,AL
PUSH
<><> CHECKPO I NT 22 <><>
GET VIDEO SENSE SWITCHES IAHI
SAVE IT
ENAILE V I DEO AND SET MODE
VIDEO
WRITE BLANKS IN REVERSE VIDEO
SETUP STARTING LOCATION
NUMaER OF aLANKS TO 0 I SPLAY
IRITE VIDEO STORAGE
AH,O
INT VIDEO
AX,l'OIOH
CX.40
STaSI
,----------------------------------------
2. . .
2199
2900
2901
2902
2903
2904
29015
2906
2901
2901
2909
2910
2911
2912
2911
INITIALIZE AND START CRT
I
TEST VIDEO READ/WRITE STORAGE.
I DESCRIPTION
I TEST.16
I
CRT INTERFACE LINES TEST
•
, DESCRIPTION
I
SENSE ON/OFF TRANSITION OF THE
,
V IDEO ENABL.E AND HOR I ZONTAL
,
SYNC LINES.
I
I
I
I
1---------------------------------------OB21
0122
oa23
oal6
0129
oa2a
oa2E
OIZE
oa30
oa30
onz
0133
013D
oa31
oa39
51
50
10
aA
14
aA
POP
PUSH
FC 30
oaaA
03
DaDA
COP
MOV
JE
MOV
I
GET V IDEO SENSE SW ITCH I NFORMAT I ON
SAVE IT
a/I CARD ATTACHED?
SETUP ADDRESS OF' BIW STATUS PORT
YES - GO TEST L.I NES
COLOR CARD I S ATTACHED
A.
A.
AH,30H
OX , OS8AH
Ell
DX,03DAH
EIII
84 01
EIII
2a
EC
22
7D
E2
EB
C9
C4
04
F9
4D
Et31
MOV
AH,I
SUB
CX,CX
AL,DX
AL,AH
EI'
EI.
SHORT EI7
IN
ANO
JNZ
.-
LOOP
•
I
I
•
I
READ CRT STATUS PORT
CtECK VIDEO/HORIZONTAL LINE
ITS ON - CHECK IF IT GOES OFF
LOOP UNT I L ON OR TIMEOUT
CD PR I NT ERROR flESSAGE
TESTl
5-45
1-29
0"'-21-86
2922
2923
2924
292!
2926
2921
2921
2929
2930
2931
2932
2933
2934
2935
2936
2931
2931
2939
2940
2941
2942
2943
2944
2945
2946
2941
294S
2949
2950
295 I
2952
2953
2954
29!!i5
29156
29151
295a
29159
2960
2961
2962
2963
2964
2965
2966
2961
296a
2969
2910
2911
2912
2913
2974
29715
2':1:'
OB3S
OB38
OB30
OB3E
OB40
OB42
OB44
E14,
2B
EC
22
14
E2
E8
C9
EII5.
C4
04
F9
42
OB46
OB41
084A
084C
084C
OB40
OS4F
B I 03
02 EC
E4
OB5 I
OB54
OB56
OB5C
085F
OB5F
OB61
OB63
OB65
OB66
OB69
0868
0860
OB6F
OB10
8A
SE
Cl
8A
0000
OA
06 001E R 0000
COCO
BO
E6
aE
51
8F
28
SS
3B
I5F
15
23
10
OA
n
CX,CX
AL,DX
AL,AH
LOOP
EI,
EI.
"MP
SHORT EI7
I----~
CHECK HORIZONTAL LINE
E16.
MDV
SHR
"NZ
Ell.
51
84 00
CD 10
PDP
MOV
INT
I----~
OB12
OB1!!i
OB11
0811
OB18
OB1S
OB1F
SUB
IN
AND
"Z
CL.3
AH,CL
I GET NEXT BIT TO CHECK
EI'
I CONTINUE
AX
CHECK FOR THE ADVANCEC VIDEO CARD
ASSUME OS. Aaso
MOV
OX,O
MOV
OS,OX
:g~
~~~~C~~~H OEXT _PTR+2, 0
MOV
OUT
MOV
AL,23H
MFG PORT ,AL
os,rix
01
0I,OAA155H
BXIBX
AX, [ax]
AX,DI
01
EIIB
PUSH
AA55
08
01
Cl
MOV
SUB
MOV
eMP
PDP
"NZ
05
EI 0000 E
E8 04
CAL.L
ElaB.
II C2 0010
II FA CIOO
lC DE
"MP
ROM CHECK
SHO'lfT EI8C
ADD
OX,0080H
eMP
OX,oelaOH
EllA
"L
AL,24H
MFC_PORT I AL
""P
POST2
ASSUME
OS IDATA
5-46
o~oo
Ee
E
C6
10
74
F6
74
BA
EI
06 00 I!S R OC
3E 0012 R 64
00
06 0012 R 20
06
0 I 02
0000 E
IE
AI
24
3C
74
00 lOR
30
30
30
<><><><><><><><><><><><>
<><> CHECKPOINT 23 <>c>
SAVE WORK REGISTER
PRESENCE SIGNATURE
CLEAR PO INTER
GET FIRST 2 L.OCATIONS
PRESENT?
RECOVER REG I STER
NO? GO LOOK FOR OTHER MODUL.ES
GO SCAN MOOULE
I PO I NT TO NEXT 2K BL.OCK
EI8C.
MOV
OUT
OBIB
OB90
OB95
OB97
OB9C
OB9E
DBA I
OBA4
OBA4
OBA5
2990 DBA!
2991 OBAA
2992 OBAC
2993
2994
2995
2996 OBAE
2997
2991 OBB3
2999 OB86
3000 OBBa
300 I OBB9
3002 088C
3003 OBBE
3004 OBCI
3005 OBC3
3006 OBC5
3007 OBC7
3001 OBC9
3009 OBCC
3010 08CD
301 I OBCF
3012 08015
3013 OBOe
3014 OBDA
3015 OBDC
3016
3017
30le
3019 08DE
3020 OBOE
3021 oaEO
3022 OBE2
3023 OBE4
3024 08E7
3025 08E9
3026 08EA
3027 oaED
3021 oeEF
3029 oaF2
3030 oaF4
3031 oaF6
3032 08FI
3033 oaFA
3034 OBFD
3035 oaFE
SET OS TO VECTORS SEGMENT
RESET SEGMENT VAL.UE
FOR GRAPHIC CHARS 128 - 2515
SET THE L.OW SEGMENT VAL.UE
EllA.
OSII BO 24
OBI3 E6 10
~eee
GET VIDEO SENSE SWITCHES (AH)
SET MODE AND DISPLAY CURSOR
CALL V IDEO 1/ a PROCEDURE
AH,O
I NT_V IDEO
081& E9 0000 E
2911
2971
2919
2910
29a I
29a2
2913
2914
2915
2916
2911
29U
29a9
READ CRT STATUS PORT
CHECK VIDEO/HORIZONTAL LINE
I TS ON - CHECK NEXT LINE
LOOP IF ON UNTIL IT GOES OFF
GO ERROR BEEP
TOP OF V IDEO ROM AREA YET?
GO SCAN FOR ANOTHER MODULE
<><><><><><><><><><><><>
<><> CHECKPOINT 24 <><>
1 GO TO NEXT TEST
1 ~~~--
CRT ERROR SET MFG CHECKPOINT AND ERROR BEEP
1-----
CHECKPOINT OC a MONOCHROME FAILED
Cf.LL
MOV
eMP
"Z
TEST
:~~~-~;~-~~~~E~C~LAC 06"'~
I
JZ
MOV
CALL
E 19
OMFG_TST.MFG_L.OOP
E 19
DX,I02H
ERR_BEEP
PUSH
OS
MOV
AND
eMP
!~: ;~~U I P_FL.AG
EI9,
"Z
1-----
;>7; ~~i SE:R~~C C~~~~~~+~T oc <><>
1 BY PASS ERROR BEEP I F YES
1 IS THE MFG I-OOP .JUMPER INSTALL.ED?
! BY PASS ERROR BEEP I F YES
I GO BEEP SPEAKER
CET THE CURRENT V IDEO
STRIP OTHER alTS
I SIT MONOCHROME ?
GO IF YES
AL,30H
TRY_COLOR
COLOR FAIL.Eo TRY MONOCHROME - CHECKPOINT 00
=
COL.OR FAILED
C6 06 00 I 5 R 00
"OV
OMFG_ERR_Fl-.AG,ODH
<><> CRT ERROR CHECKPO I NT
BA
BO
EE
B8
IE
BI
28
MOV
MDV
OUT
"OV
MOV
"OV
SUB
MDV
"MP
MOV
eMP
POP
"NZ
DR
MOV
SUB
INT
"MP
DX,388H
AL,I
DX,AL.
BX,OBOOOH
DS.aX
AX,OAA55H
ex,ax
,~~] ,AX
DISABLE B/'
89
EB
e8
30
IF
038a
0I
BODO
DB
AA155
DB
07
00
07
AAI515
75 515
II OE 0010 R 0030
AI 0010 R
2A E4
CD 10
E8 34
I~----
BO
2A
CO
8A
80
0I
E4
10
0301
00
EE
88 8100
IE DB
BI AA55
28 De
19 01
EB 00
la 07
3D AA155
IF
15 24
TESTl
OUTPUT THE 0 I SABL.E
CHECK FOR MONOCHROME V IDEO MEMORY
WRITE AN AA55
TO THE FIRST LOCATION
ALL.OW BUS TO SETTLE
READ THE FIRST LOCATION
IS THE MONOCHROME VIDEO CARD THERE?
RESTORE THE DATA SEGMENT
CO IF NOT
TURN ON MONOCHROME BITS IN EQU I P FLAG
ENABLE V IDEO
AX, [BX)
AX,OAA!5!5H
OS
EI7 3
.EQUIP FLAG,30H
AX, OEQC I P FLAG
AH,AH
INT VIDEO
SHO"T E17_1
00 <><>
I
CONTINUE
MONOCHROME FAILED TRY COL.OR
TRY COL.OR.
MOV
SUB
INT
MOV
"OV
OUT
MOV
MOV
"OV
SUB
"OV
""P
MOV
eMP
POP
"NZ
AL.OIH
AH,AH
INT VIDEO
DX,'IDaH
AI-IO
OX,AL
BX,OBaOOH
CS,BX
AX,OAA55H
BX,ax
[8X],AX
I SET MOOE COLOR 40X25
1+'
I
I
0 I SABLE COL.OR
OUTPUT THE 0 I SAaLE
CHECK FOR COLOR V I CEO MEMORY
WRITE AN AA55
TO THE FIRST L.OCATION
AL.L.OW BUS TO SETTL.E
AX , [aX)
AX I OAA55H
1 REAO THE FIRST L.OCATICN
I IS THE COLOR VIDEO CARD THERE?
I RESTORE THE OAT A SEGMENT
E11_3
I GO IF NOT
os
1-30
04-21-16
3036 OCOD I I
3037 OC06 II
IDle OCOC 80
3039 OCOE 2A
1040 OCIO CD
3041 OCI2
3042 OCI2 al
3043 OCI3 AI
3044 OCI6 24
3041 OCII 3C
3046 OCIA 2A
3047 OCIC 74
3041 OCIE FE
3049 OC20
3010 OC20 10
3051 OC21
3012 OC2 I E9
3053
3054
30ea
3056 OC24
3057 OC24 IE
3051 OC25 2B
30159 OC27 I5E
3060 OC29 SF'
3061 oe2C C7
3062 OC30 IF
3063 DC31 E9
26 00 lOR FFCF
OE 0010 R 0010
0I
E4
10
0010 R
30
30
CO
02
CO
AND
OR
MOV
SUB
INT
POP
MOV
ANO
CMP
SUB
JZ
INC
eEQU I P FLAG, OFFCF'H
::~: ~:FLAG, t OH
I TURN OFF YIDEO BITS
I SET COLOR 40X24
AH,AH
INT_VIDEO
AX
AX ,.EQU I P FLAG
AL.30H
AL.30H
AL.AL
~7_2
PUSH
AX
084C R
....
Ell
CO
DI
0040 R
05 0000 E
PUSH
SUB
MQV
MaV
MaV
I SET NEW VIDEO TYPE ON STACK
I IS IT Tt£ 8/_1
I GO IF YES
I INITIALIZE FOR 40X25
BOTH VIDEO CARDS FAILED SET DU...Y RETURN IF RETRACE FAILURE
OBI I R
DS
AX, AX
I SET DS SEGMENT TO 0
DS,AX
D I, OFFSET .V I DEO I NT
I SET I NTERRUPT I OH TO DUMMY
WORD PTR [D I ] .OFJ!'SET DIAIMY_RETURN I RETURN I F NO Y I DEO CARD
POP
OS
....
E18_1
I BYPASS REST OF YIDEO TEST
TESTl
5-47
1-31
04-21-86
3064
3065
8066
3067
3061
3069
30TO
30Tl
3072
3OT3
3OT4
30Tl
3076
30n
30Tl
3079
lOla
3011
3012
3013
1014
lOIB
10116
30lT
30111
80119
3090
3091
3092
3093
3094
3095
3096
309T
3098
3099
3100
1101
3102
3103
1104
3105
3106
IIOT
3101
3109
3110
3111
3112
3111
31 14
3115
3116
3111
3111
3119
3120
3121
3122
3123
3124
3 I 25
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
1137
3131
313.
3140
3141
3142
3143
3144
3141
3146
314T
3141
3149
3150
3151
1-------------------------------------------------------------------------------
PAGE
I MANlFACTURING BOOT TEST CODE ROUTINE
I
LOAD A BLOCK OF TEST CODE THROUGH THE KEYBOARD PORT FOR MANUFACTURING
I
TESTS.
I
THIS ROUTINE WILL LOAD A TEST (MAX LENGTH_FAFFHI THROUGH THE KEYBOARD
I
PORT. CODE WILL BE LOADED AT LOCATION 000010500.
AFTER LOADING.
CONTROL WILL BE TRANSFERRED TO LOCATION 000010500.
THE STACK WILL
I
I
BE LOCATED AT 000010400.
THIS ROUTINE ASSUMES THAT THE FIRST 2 BYTES
I
TRANSFERRED CONTAIN THE COUNT OF BYTES TO BE LOADED
I
(aYTE I =COUNT LOW, BYTE 2=CDUNT HI.)
;
I
I
;
I
I
1-------------------------------------------------------------------------------1
1-----
DEGAlE ADDRESS LINE 20
OC34
OC34 84 DO
OC36 EI 1)(100 E
1 OEGATE COMMAND FOR ADDRESS LINE 20
1 ISSUE TO KEyaOARD ADAPTER AND CL I
1----OCI9
OC3C
OC3D
OC40
OC42
OC44
OC4T
OC4A
OC4A
0C48
0C4C
611 ---- lit
aT
,9 0(1111
IC
liE De
BE 0(100 E
c.
8F'
~020
R
OC4E
OC51
OC54
OCIT
OC5T
OCS'
OC59
a9 0001
BE 0000 E
SF OICO R
OC5a
oClSe
OC5D
OC63
OC69
06
I SET ES SEGMENT REGISTER TO ABSO
ES
I GET VECTOR COUNT
I GET THE CURRENT CODE SEGMENT YALUE
I SETl.P OS SEGMENT REG I STER TO
1 POINT TO THE ROUTINE ADDRESS TABLE
I SET DESTINATION TO FIRST USED VECTOR
I MOVE ONE ROUT I NE OFFSET ADDRESS
INSERT CODE SEGMENT YALUE
I MOVE THE NUMBER OF ENTR I ES REQU I RED
I
SETLP HARDWARE INTERRUPT VECTORS LEVEL 1-15 (VECTORS START AT tNT TO HI
MOV
MOV
MOV
CX.OI
I GET VECTOR COUNT
SI.OFFSET SLAYE VECTOR TABLE
DI.OFFSET .sLAVf_INT_pTR
MFG_B21
NDYSW
STaSI
AI
AB
E2 FC
1 MOVE ONE ROUTINE OFFSET ADDRESS
1 INSERT CODE SEGJENT YALUE
~OOP
I~
CT 06 0001 RODDa E
CT 06 001:t R OQOO E
CT 06 0062 R F600
"
OC6F ao
OCTI EI
OCT480
OC76 E6
1-----
SET UP OTHER I NTERRUPTS AS NECESSARY
ASSUME
PUSH
POP
MOV
MOV
MOV
CA~
MOV
OUT
C~~
EI OC9A R
SA FI
EI OC'A R
IA EI
MOV
CALL
MOV
MOV
SA C:;:F
DSIAaSO.ESIABSO
ES
DS
WORD PTR OHMI PTR,OFFSET NMI INT
WORD PTR OINT! PTR.OFFSET PRINT SCREEN
lORD PTR "ASI~_PTR+2.0F600H
-
AL.60H
C8042
AL,OOOOIOOIB
PORT_A.AL
WRITE a042 MEMORY LOCATION 0
I SSUE THE COMMAN)
SET I NH I a I T OVERR I DE/ENAaLE OBF
INTERRUPT AN) NOT PC COMPATIBLE
MFC B4
BH.XL
WFG B4
CH,XL
CL.BH
GET COUNT LOW
SAYE IT
GET COUNT HI
CX NOW HAS COUNT
SET 0 I RECT I ON FLAG TO INCREMENT
SET TARGET OFFSET (05=00001
C~D
FC
. . 0500 R
1 ES. ABSO
I SET OS TO ABSO
1 NM I INTERRUPT
I PR I NT SCREEN
I CASSETTE BASIC SEGMENT
ENABLE KEYBOARD PORT
MOV
60
0390 "
09
.60
MOV
DI.OFFSET ....G_TEST_RTN
IN
AL.sTATUS PORT
~G o~~_aur_FULL
MFG_B31
E4
A8
T4
E4
AA
E6
64
Ot
FA
60
TEST
JZ
IN
AL.'FI'ORT_A
STOSB
110
OUT
~OOP
::g::r
GET 1042 STATUS PORT
KEYBOARD REQUEST PENDING?
LOOP TILL DATA PRESENT
GET DATA
STORE IT
DISPLAY CHARACTER AT MFG PORT
LOOP TILL ALL aYTES READ
JMP
....G_TEST_RTN
FAR ..JUMP TO CODE THAT WAS ..JUST LOADED
IN
AL.STATUS PORT
CHECK FOR OUTPUT BUFFER FUl.L
HANG HERE IF NO DATA AYAILABLE
E2 F3
DC.5 EA 0500 ---..
OC'A
OC'A E4 ft4
OC.C A8 01
OC'E EI FA
Ii
T • AL
MFG_B41
OCAO E4 60
OCA2 C3
5-48
CX.24
AX.CS
OS.AX
SI,OFFSET YECTOR TABLE
DI.OFFSET OINT_PTA:
MOYSW
STOSW
LOOP
1-----
OCA3
OCA3
ASsa
POP
MOV
MOV
MOV
MOV
MOV
MFG_al.
A5
Aa
E2 FC
1-----
DClI
aCTa
OCTO
OCIO
OCI2
OCI4
OCI5
OCII
ocal
OC8A
OC8C
OC8E
OC'O
oe91
OC'3
SETUP HARDWARE INTERRUPT YECTOR TABLE LEYEL 0-7 AND SOFTWARE INTERRUPTS
PUSH
TEST
LOOPZ
Q~G~~!_BtJI!'_FULL
IN
AL.PORT_A
RET
POSTI
ENDP
COOE
ENOS
END
I
GET THE COUNT
I-I
04-21-86
PAGE t 18,121
I
2
TITLE TEST2 ---- 01/24/85 POST TESTS AND INITIALIZATION ROUTINES
.286C
.287
.LlST
CODE
SEGMENT BYTE pueL I C
••
•
•
6
T
8
0000
10
II
12
I.
I.
15
16
IT
18
I.
20
21
22
2.
2.
25
26
2T
28
2.
'0
.,
.2
'3
••
'5
.6
'T
.8
.,••
.0
.2
.3
••
.5
'6
'T
.8
.,••
50
52
53
••
55
56
5T
58
5.
60
61
62
63
6'
65
66
6T
68
6.
TO
TI
T2
T3
T4
T5
T6
e21
PQST2
SHUT2
SHUn
SHUT4
SHUT6
SHUTT
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
8L I NK I NT J NEAR
C80042'i'NEAR
CMOS READ J NEAR
CMOS-WRITE:NEAR
CONFTc BAD I NEAR
EXTRN
0 I I NEAR'
EXTRN
02 I NEAR
EXTRN
DOS I NEAR
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
DISK SETUP I NEAR
DSKETTE SETUP I NEAR
ERR BEEP I NEAR
E M~G I NEAR
F~D I NEAR
F3D I I NEAR
GATE A20 I NEAR
EXTRN
HD J JilT I NEAR
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
KBO" RESET I NEAR
NMI-INTINEAR
OBF-421 NEAR
POsTi I NEAR
PR J NT SCREEN I NEAR
PROC !"HUTDOWN I NEAR
PROT-PRT HEX I NEAR
PRT REX I REAR
P MSG I NEAR
R15M CHECK I NEAR
ROM-CHECKSUM I NEAR
SEEK I NEAR
SET TOO I NEAR
SLAVE VECTOR TABLE I NEAR
SND DATAl NEAR
STAR'T liNEAR
STGTST CNTaNEAR
SYSINITIINEAR
VECTOR TABLE I NEAR
WA I TF I REAR
XPC_BYTEINEAR
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EIOIINEAR
EI02.NEAR
EI03,NEAR
EI041NEAR
EI051NEAR
EI061NEAR
EIOTINEAR
El061NEAR
E'09INEAR
EI611NEAR
EI621NEAR
EI631NEAR
EI641NEAR
E20 liNEAR
E2021NEAR
E2031NEAR
E30 liNEAR
E3021NEAR
E3031NEAR
E3041NEAR
E40 liNEAR
E50 lINEAR
E60 liNEAR
--------------------
I0I
, 02
I 03
I 04
, 05
I 06
lOT
I 06
109
, 61
162
I 63
, 64
201
202
203
30 I
302
303
304
40 I
50 I
60 I
ERROR
ERROR
ERROR
ERROR
ERROR
ERROR
ERROR
ERROR
ERROR
ERROR
ERROR
ERROR
ERROR
ERROR
ERROR
ERROR
ERROR
ERROR
ERROR
ERROR
ERROR
ERROR
ERROR
CODE
CODE
CODE
CODE
CODE
CODE
CODE
CODE
CODE
CODE
CODE
CODE
CODE
CODe
CODE
CODE
CODE
COOE
COOE
CODE
CODE
CODE
CODE
------------- ------- ------------
;
--; TEST.IT
I
8259 I NTERRUPT CONTROLLER TEST
; DESCRIPTION
I
READ/WRITE THE INTERRUPT MASK REGISTER t IMR)
;
WJTH ALL ONES AND ZEROES. ENABLE SYSTEM
;
INTERRUPTS.
MASK DEVICE INTERRUPTS OFF. CHECK
I
FOR HOT INTERRUPTS t UNEXPECTED) •
n
T8
T.
80
Ol
82
8,
8.
85
.6
8T
88
.,••
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBL I C
PUBLIC
PUBLIC
-
INTERRUPT FA I LURE
T I MER FA I LURE
T I MER INTERRUPT
PROTECTED MDDE ERROR
6042 COMMAND FAILURE
CONVERT I NG LOG I C
NM I ERROR
T I MER BUS ERROR
MEMORY SELECT ERROR
BAC BATTERY
CMOS CHECKSUM/CONFIG
BAD REAL T I ME CLOCK
MEMORY SIZE WRONG
MEMORY DATA ERROR
MEMORY ADDRESS ERROR
SEGMENT ADDRESS ERROR
KEYBOARD ERROR
LOCK I S ON
KEYBOARD/PLANAR ERROR
KEYBOARD/PLANAR ERROR
MONOCHROME ADAPTER
COLOR ADAPTER
DISKETTE ADAPTER
I
I
1
I - - - - - - - - -- --- - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ASSUME
CSICODE,OSIDATA
0000
POST2
PROC
NEAR
0000 80 OA.
0002 E8 0000 E
C211
"OV
AL,IO
PRT HEX
DDS-
.0
.2
.3
••
•5
.6
.T
.8
0005 E8 0000 E
;-----
1----OOOA FA.
OOOB
0000
DOOF
0011
0013
0015
80
E6
E6
EB
E4
8A
C21AI
00
21
AI
00
21
EO
DOlT E4 AI
CLEAR ERROR FLAG REGISTER
SUB
0008 28 EO
••
100
101
102
10.
10.
105
106
lOT
108
10.
110
III
112
II.
II.
CALL
CALL
BP,BP
I LINE FEED ON DISPLAY
1 SET OAT A SEGMENT
(BP)
<=> 0 FLAGS ERROR
1 CLEAR
(BP)
REGISTER AS ERROR F"L.AG REG
TEST THE INTERRUPT MASK REGISTER REGISTERS
CLI
"OV
OUT
OUT
J"P
IN
"OV
IN
TURN OFF INTERRUPTS
SET I NTERRUPT MASK REG I STER TO ZERO
AL,a
INTAOI,AL
INTBOI,AL
I
AL,INTAOI
AH,AL
AL.INTBO'
I READ INTERRUPT MASK REGISTER
I SAVE RESULTS
1 READ 2ND INTERRUPT MASK REGI STER
1 BOTH IMR = OJ'
I GO TO ERR ROUTINE IF NOT 0
,'2
0019 0'\ EO
0018 15 2C
OR
AH,AL
IN'
06
0010 BO 25
OOIF E6 80
"OV
OUT
AL.25H
MFG_PORT ,AL
SEND TO 2ND I NTERRUPT CONTROLLER ALSO
<><><><><><><><><><><><>
<><> CHECKPOINT 25 <><>
TEST2
5-49
1-2
04-21-86
II.
116
0021 80 FF
III
118
119
120
121
122
0023E621
0025 E6 AI
0021 ES 00
0029 E4 21
0026 SA EO
12"
124
125
130
131
MOV
AL.INTAOI
AH,AL
AL.INTBOI
IN
.00
D02F 05 000 I
OC32 75 15
JNZ
1-----
1-----
o I SABLE DEV I CE INTERRUPTS
WRITE TO INTERRUPT MASK REGISTER
WR I TE TO 2ND I NTERRUPT MASK REG I STER
110 DELAY
READ INTERRUPT MASK REGI STER
SAVE RESULTS
READ 2ND INTERRUPT MASK REGISTER
'+2
AX.I
ALL IMR BITS ON?
NO - GO TO ERR ROUTINE
D.
CHECK FOR HOT INTERRUPTS
INTERRUPTS ARE MASKED OFF.
0034 "2 006S R
MOV
OINTR_FLAG.AL
0031 BO 26
0039 £6 80
MOV
OUT
AL,26H
MFG_PORT , AL
003B FB
003C
.9£4
DOSF E8 0000 E
0042 80 3E 006B R 00
STI
MOV
CALL
132
133
134
135
136
13T
138
f 39
140
AL,OFFH
INTAO I.AL
INTBOI.AL
J'"
IN
002D E4 AI
12.
12T
12'
12.
MOV
OUT
OUT
a,
GM.
0041 74 00
JZ
0.,
MOV
OMFG_ERR_FLAG,05H
144
145
146
147
004£
0051
0054
00155
061.1
MOV
CALL
eLI
SI,OFFSET EIOI
E_MSG
1-----
CHECK THE CONVERTING LOGIC
DTI
MOV
OUT
AL,21H
MFC_POR! I AL
MOV
OUT
AX,OAA!l5H
MFG PORT+2.AX
'"'"
BE 0000 E
£8 0000 E
FA
F4
ISO
151
152
153
0056 aD 27
0058 £6 aD
154
005" B8 "A55
155
156
157
158
159
160
0050
DOSF
0061
0063
0065
162
163
Q06A BE 0000 E
0060 EB E2
,.,
I ••
,.5
I ••
167
ET
£4
86
£4
3D
006F
172
173
174
t 75
0019
007B
0010
0082
117
0084 BO 28
178
180
18\
I.,
185
186
181
188
la9
190
20~
205
206
SO
E6
80
74
:i:~~~X=ORT+3
JZ
07_1.
MOV
SI.OFFSET El06
D••
CHECK FOR HOT NNI
MOV
OUT
MOV
CALL
MOV
OUT
8F
TO
3E 0068 R 00
09
eM.
JZ
0088 BE 0000 E
008B EB C4
MOV
51 ,OFFSET EI07
JM.
D••
1----aD
£6
E4
8A
24
E6
29
80
61
EO
FC
61
MOV
OUT
MOV
'ND
OUT
AL,OFCH
PORT_B,AL
0099
0098
0090
009F
001.2
001.4
001.6
001.8
001.1.
OOAC
OOAE
OOBO
00B2
00B4
OOBl
BO
E6
EB
B8
E6
EB
81.
E6
EB
BO
43
00
AA!I!
MOV
OUT
AL,IOIIOOOOB
TIMER+3.AL
00
C~
~2
00
E~ ~2
86 EO
EB 00
E~ 42
3D 5151.1.
l~ 05
00B9 BE 0000 E
ooee EB 93
CaNT I NUE I F NOT
<><><><><><><><><><><><>
<><> CHECKPOINT 28 <><>
1 DISPLAY lOT ERROR
IN
JM.
MOV
OUT
JM.
MOV
OUT
t~P
XCHG
JM.
IN
eM.
JZ
MOV
JM.
<><><><><><><><><><><><>
AL,29H
MFG PORT .AL
<><> CHECKPOINT 29 <><>
GET CURRENT SETT I NG OF PORT
SAVE THAT SETTING
I NSURE SPEAKER OFF
~~:~~RT_B
SELECT TIM 2.LSB.MSB,BINARY.MOoE 0
WRITE THE TIMER MODE REGISTER
1/0 DELAY
WRITE AN AA5S
WRITE TIMER 2 COUNT - LSB
liD DELAY
,+.
AX , OAA55H
TIMER+2.AL
'+2
AL"AH
T1MER+2.AL
WRITE TIMER 2 COUNT - MSB
110 DELAY
GET THE LSB
SAVE IT
110 DELAY
GET THE MSB
BUS OK?
GO IF OK
'+2
AL. T1M£R+2
AH,AL
'+2
ALI TIMER+2
AX,OIS5AAH
07_0
SI.OFFSET EI08
D••
1 DISPLAY 108 ERROR
1-------------------------------------------------------I TEST.18
1
825~ T I MER CHECKOUT
I DESCRIPTION
I
1
VERIFY THAT THE SYSTEM TIMER (0) DOESN'T COUNT
I
TOO FAST OR TOD SLOW.
I
I
I - ---------- -- ----- ---- -------------- - ----- ------- ---- ---
'IT
OOBE
OOCO
00C2
00C3
OOCIS
OOCl
OOC9
OOCB
BO
E6
FA
BO
E6
BO
E6
B9
21.
80
OOCE EB 00
5-50
MOV
OUT
AL,2AH
MFG_PORT , AL
TEST2
MOV
OUT
MOV
OUT
MOV
<><><><><><><><><><><><>
<><> CHECKPOINT 2A <><>
AL,OFEH
INTAOI,AL
AL.OOOIOOOOB
TIMER+3.AL
CX,2CH
I
1
I
1
1
I
1
I
'+2
I 110 DELAY
eLI
FE
21
10
43
002C
22T
228
OJ 0 ANY I NTERRUPTS OCCUR?
TEST THE DATA BUS TO TIMER 2
0080
DOIF
0091
0093
009!1
0097
~2
TURN ON NMI
ADORE!)!) DEi" AUi.. T REA;;' uNi.. Y "C:Ci i STC:"
DELAY COUNT FOR I 00 MICROSECONDS
WAIT FOR HOT NMI TO PROCESS
TURN NM! ENABLE SACK O!='!='
~~~~ff_FLAC.OOH
0086 E6 80
21.
219
220
221
222
223
224
2215
226
AL, CMOS SHUT COWN
CMOS_PORT ,ALCX,7
WAITF
AL., CNes SHUT CC'A'N+NM I
CMOS PORT I AL -
AL,28H
MFG_PORT ,AL
210
211
212
213
21.
.,.
.,.
1 01 SPLAY 106 ERROR
INTERRUPTS WITHOUT I/O-MEMORY PARITY ENABLED
MOV
OUT
20T
208
209
WRITE A WORD
GET THE FIRST BYTE
SAVE IT
GET THE SECOND BYTE
IS IT OK?
GO IF YES
!t:~G_PORT+2
eM.
191
192
193
194
1915
I 96
197
'98
I 99
200
201
202
203
<><><><)t<><><><><><><><>
<><> CHECKPOINT 27 <><>
07_1.1
DOlo" BO OF
0071 £6 70
bon B9 0007
0016 £8 0000 E
18'
183
<><><><><><><><><><><><>
5 <><>
<><> CHECKPOINT
DISPLAY 101 ERROR
1 HALT THE SYSTEM
IN
JMP
1-----
1~8
IT.
IN
XCHG
0068 14 05
169
170
I TI
IT.
HLT
82
82
C4
83
55AA
<><><><><><><><><><><><>
<><> CHECKPOINT 26 <><>
ENABLE EXTERNAL INTERRUPTS
IAIT 100 MILLISECONDS FOR ANY
INTERRUPTS THAT OCCUR
DID ANY INTERRUPTS OCCUR?
NO - GO TO N£XT TEST
~~NTR_FLAGIOOH
0049 C6 06 0015 R 05
'"
1 CLEAR I NTERRUPT FLAG
CX.6628
IAITF
'"
142
CHECK THAT NO INTERRUPTS OCCUR.
MASK ALL I NTERRUPTS EXCEPT LEVEL 0
WRITE THE 8259 IMR
SELECT TIM 0, LSB, MODE 0, BINARY
WRITE TIMER CONTROL MODE REGISTER
SET PROGRAM LOOP COUNT
1-3
04-2t -86
229
230
231
232
233
234
235
23.
231
238
23'
240
241
DODO
0002
0004
ODD!
8A CI
E6 40
Fa
F6 06 006a R
aI
OODA Te 00
OODC E2 F1
MoV
OUT
STI
TEST
eINTR_FL.AG,OIH
"NZ
L.OOP
O.
08
DID TIMER 0 INTERRUPT OCCUR?
CHECK T I MER OPERAT I ON FOR SI..OW T I ME
WAIT FOR INTERRUPT FOR SPECIFIED TIME
S I I OFFSET EI02
DO'
DISPL.AY 102 ERROR
TIMER 0 INTERRUPT DID NOT OCCUR_ ERROR
DaDE C6 06 DOl! R 02
MOV
00E3 BE 0000 E
00E6 E9 00!1 R
MoV
"MP
2.2
2.3
244
24!
DOl
00E9 BO 2a
OOEB E6 eo
0',
AL.,CL.
TIMER+O,AL
SET TIMER a COUNT RECiISTER
WRITE TIMER 0 COUNT REGISTER
<><><><><><><><><><><><><><><>
<><> T I MER CHECKPD I NT (2) <><>
<><><><><><><><><><><><>
<><> CHECKPO I NT 2S <><>
MoV
OUT
2 ••
241
24e
249
260
251
252
253
254
25!
256
2151
ODED
OOEE
OOFO
00F2
00F4
00F9
OOFB
OOFD
OOFE
0103
01015
FA
al
aD
E6
C6
aD
E6
FB
F6
DC
FF
40
06 0061 R 00
FE
21
06 006B R 0 I
Te DE
E2 Fl
288
28.
20.
261
202
263
264
265
266
261
26e
0101
1-----
eLI
Mov
MoV
OUT
MoV
MoV
OUT
STI
TEST
"NZ
LOOP
WAIT FOR INTERRUPT
sua
CX,CX
MoV
OUT
AL. , 2CH
MFG_PORT I AI..
TEST
"NZ
LOOP
~:~TR_FL.AGIOIH
0110
MoV
SI,OFFSET EI03
FA
BO FF
£621
BO 36
E6 43
EB 00
SO 00
E6 40
EB 00
E6 40
Ol2F
0131
0133
013!
0131
0139
013B
2B
BO
E6
E4
28.
280
28T
2Be
289
290
291
292
293
294
2'8
296
2.T
2ge
299
""P
D••
1-----
SETUP TIMER 0 TO MODE 3
0121
eLi
MOV
OUT
MoV
OUT
"MP
MoV
OUT
"MP
OUT
1----C9
20
eo
64
AS 02
14 08
E2 F8
<><><><><><><><><><><><>
<><> CHECKPO I NT 2C <><>
01101
270 0116 BE 0000 E
2710119E900151R
OIIC
0110
CIIF
0121
0123
012!
0121
0129
Ol2B
0120
DID TINER 0 INTERRUPT OCCUR?
YES - TIMER COUNTING TOO FAST, ERROR
WAIT FOR INTERRUPT FOR SPECIFIED TIME
DI~
0109 aD 2C
OIOB E6 eo
0100
0100 F6 06 0068 R 01
0112 1! oe
Oll4E2Fl
2T2
2T3
274
SET PROGRAM LOOP COUNT
WR I TE T I MER a COUNT REG I STER
I RESET INTERRUPT RECE I VEO FLAG
I RE-ENABI..E TIMER 0 INTERRUPTS
~~ N!R_FLAG I 0 1H
0101 2B C9
269
2715
216
271
27e
279
280
281
2B2
283
284
CL. , 12
AL,OFFH
TIMER+O,AL.
elNTR FL.AG,O
AL.,oFfH
INTAOI.AL.
0130 BE 0000 E
0140 E9 0051 R
'.2
TIMER+O.AL.
MoV
OUT
IN
TEST
CX,CX
AL.,2DH
MFG PORT ,AI..
AI...!TATUS PORT
~'i; I NPT_BUF _FUI..L.
L.OOP
013
"Z
1-----
'.2
AI..,O
TIMER+O,AI..
J DISPL.AY 103 ERROR
J ERROR I F NOT
I
DISABL.E AL.L DEVICE INTERRUPTS
I SEL.ECT TIMER O.L.SI,MSS,MODE 3
I WRITE TIMER MOOE REGISTER
I I/O DEL.AY
I WRITE L.SB TO TIMER 0 REGISTER
I 1/0 DEL.AY
I WRITE MSS TO TIMER 0 REGISTER
CHECK e042 FOR L.AST COMMAND ACCEPTED
sua
DI31
AL.OFFH
INTAOI,AL
AL , 36H
TIMER+3,AI..
DID TIMER 0 INTERRUPT OCCUR?
GO IF YES
TRY AGAIN
SET WAIT TIME
<><><><><><><><><><><><>
<><> CHECKPO I NT 20 <><>
CiET THE 8042 STATUS
HAS THE L.AST COMMAND SEEN ACCEPTED?
CiO IF YES
TRY AGA IN
ERROR EXIT (MESSAGE lOIS)
MoV
"MP
SI ,OFFSET E10!
DO.
I PRINT 1 DIS ERROR
I CO ERROR HALT
3 ••
3.'
302
1---------------------------------------------------------------------I TEST. I '
3.3
3 ••
308
I
ADDITIONAL READ/WRITE STORAGE TEST
++++ MUST RUN IN PROTECTED MODE ++++
1
; DESCRIPTION
I
WRITE/READ DATA PATTERNS TO ANY READ/WRITE STORACiE AFTER THE
I
FIRST 64K.
STORACiE ADDRESSABIL.ITY IS CHECKED.
~
3.,
1------------------------------------------------------------------------
3.T
3.0
30.
31.
31 I
312
313
314
31S
316
311
31e
3"
32.
ASSUME
DSIDATA
0143
0143 Ee 0000 E
0146 BO 2F
0148 E6 eo
CAL.L.
MoV
OUT
DOS
AL.,2FH
MFG_PORT ,AL.
014A 81 3E 0012 R 1234
oleo 1! 03
01!2 E9 0420 R
"NE
"MP
eMP
eRESET FL.AG,I234H
EICJA SHUT2
321
322
323
015! BO 30
0151 E6 eo
;-----
SET SHUTDOWN RETURN 2
EICJAI
MOV
OUT
0 I 59 Be 028F
0 I 5C Ee 0000 E
32T
320
32.
1-----
ENASL.E PROTECTED MODE
0 I I5F BC 0000
0162 eE 04
0164 BC 21000
334
0161 Ee 0000 E
CAL.L.
SYSINITt
336
331
DIU BO 31
0 I6C E6 eo
MOV
OUT
AL.,3IH
MFCi_PORT, AI..
...
.. 8
3 ••
34t
342
MoV
MoV
MoV
1----OI6E 6A 08
011001
WARM START?
GO IF NOT
GO TO NEXT TEST IF WARM START
MoV
CAL.L.
330
331
332
"3
1 SET OAT A SEGMENT
I
<><><><><><><><><><><><>
I
<><> CHECKPOINT 2F <><>
<><><><><><><><><><><><>
<><> CHECKPO I NT 30 <><>
32.
325
326
I
~:::~ST_SS
I SET STACK FOR SYSINITI
SP,POST_SP
I GO ENABL.E PROTECTED MODE
<><><><><><><><><><><><>
<><> CHECKPO I NT 31 <><>
SET TEMPORARY STACK
PUSH
POP
BYTE PTR GOT PTR
ES
-
TEST2
5-51
1-'
04-21-86
•••
•••
•••
•••
•••
•••
0171 261 CT 06 OOSA 0000
0178 261 e6 06 aOlSe 00
MOV
MOV
MOV
MOV
MOV
OITE BE 0058
ES,SS TEMP.BASE LO WORDIO
BYTE "TR ESI (SS-TEQp.BASE HI BYTE) ,0
-
~~::~_TEMP
"7
0181 8E D6
0183 Be FFFO
351
,.2
0186 61. 18
0188 IF
PUSH
POP
BYTE PTR RSDA_PTR
OS
OUS' BO 80
0188 E6 87
MOV
OU7
AL,PARITY CHECK
DMA_PAGE+&.AL
...
......••••••
•••
.53
1----1-----
.57
..,
36 •
0180 B8 0040
0190 E8 091.0 R
•••
•••
...•••
36.
.67
37.
.71
.72
37.
37'
37'
37.
377
37.
.....•••,
37.
0193 88 BOB1
E8
8B
8B
03
0000 E
tE 00t3 R
03
08
1-----
•••
•••
•••
•••
•••
...
...••••••
•• 2
4 ••
.,.
.,....
.,7
.2.
.21
'22
.2.
.2•
• 2.
.2.
'27
.2.
'2'
•••
'"
•••
•••
•••
•••
•••
•••
•••,
•••
•••
•••
•••
•••
•••
•••,
•••
•••
•••
•••
•• 2
..
.37
"2
•• 7
..
•• 2
GET THE MEMORY S I IE DETERM I NED (PREPARE
ax
AND
ox
FOR BAD CMOS)
AX,leMDS U tot 5 LO+NMI)-H+CMOS U M S HI+NMI
CALL.
XCHG
~~?~[REAJ5
CALL
MOV
MOV
ADO
CMOS READ
- - -
:
~l~~ ~r~~-8YTE
~~::~EMORY_SIZE
I
I
I
I
LOW BYTE
LOAD THE BASE MEMORY SIZE
SAVE BASE MEMORY SIZE
SET TOTAL MEMORY SIZE
BX,AX
IS CMOS
GOO~?
AL I CMOS 0 I AG+NM I
CMOS_READ
DETERM I NE THE CONO I T I ON OF CMOS
GET THE CMOS STATUS
TEST
:~O:~D_BAT+BAD_CKSUM
CMOS OK?
GO IF YES
DEFAULT IF NOT
"Z
"MP
1-----
OIBI
OIBt
0184
OIBl
0189
OIBB
OIBE
OICO
B8
E8
24
86
E8
3B
14
9596
0000 E
3F
EO
0000 E
DO
13
GET THE BASE 0->640K MEMORY SIZE FROM CONFIGURATION IN CMOS
MOV
CALL
AND
XCHG
CALL
eMP
"Z
1-----
OICZ
0lC3
0lC6
0lC9
OICB
OICD
o :00
0101
0103
DIOS
0105
0101
SHORT EZOC
EZOBO •
150
B8
E8
OC
86
EI!I
AX, (CMOS B M S LO+NMI) ·H+CMOS B M S HI +NMI
CMOS REA5' - - I HI GR j§YTEAL,O~H
I MASK OFF THE MANUFACTURING TEST BITS
AH,AL
I SAVE HIGH BYTE
CMOS READ
I LOW BYTE OF BASE MEMORY SIZE
oX,Ai
1 IS MEMORY SIZE GREATER THAN CONFIG?
E20Bt
I GO IF EQUAL
SET MEMORY SIZE DETERMINE NOT EQUAL TO CONFIGURATION
PUSH
MOV
CALL
AX
OR
""-I. MI:.M
XCHG
CALL
~e
pop
ALlAR
CMOS_WRITE
3B DD
11 31
eMP
"A
DX,AX
EZOC
SAVE AX
ADDRESS THE STATUS BYTE
GET THE STATUS
~ET CM;:;~ r'i..,:,Q
SAVE AL AND GET ADDRESS
WRITE UPDATED STATUS
RESTORE AX
I S MEMORY SIZE GREATER THAN CONF I G ?
DEFAULT TO MEMORY SIZE DETERMINED?
MOV
MOV
BX,AX
OX,AX
SET BASE MEMORY SIZE IN TOTAL REGISTER
SAVE IN BASE SIZE REGISTER
8E8E
0000 E
ID
C4
0000 E
E20BI.
8B 08
8B DO
1-----
,.7
.,2
57 ART I NG AMOUNT OF MEMORY OK
POST 6SK OK MESSAGE
OIAB A8 CO
OIAD 14 OZ
OlAF EB 5B
• 91
•••
•••
•••
•••
,.,
•••
•••
•••
•••
•••
."
.,,
.,,
.,,
'"
AX,64
PRT_OK
MOV
CALL
"2
.91
SET CHECK PAR I TV
SAVE WHICH CHECK TO USE
0lA6 BO 8E
0lA8 E8 0000 E
•• 2
.07
I POINT TO DATA AREA
PR I NT 604 K BYTES OK
MOV
0196 £8 0000 E
019' 86 EO
0198
019E
OtAZ
0lA4
DATA SEGMENT TO SYSTEM DATA AREA
MOV
CALL
,-----
362
.63
--
SP,MAX_SEG_LEN-2
0109
OIDC
OIDF
OIEI
0lE4
88
E8
86
E8
8B
9198
0000 E
EO
0000 E
C8
0lE6
OlE.
OIEC
OIEE
B8
E8
86
E8
BOBI
0000 E
EO
0000 E
~~o;~~~~g~~~~ AG+NM I )
~I'~
AX
CHECK MEMORY SIZE ABOVE 640K FROM CONF I GURAT I ON
MOV
AX,(CMCS EMS LO+NMIl·H+(CMOS EMS HI+NM1)
CMOS REAli - - I HI GH-B'i"TE CALL
XCHG
AH,AC
I SAVE HIGH BYTE
CALL
CMOS READ
1 LOW BYTE
MOV
cX,Ai
1 SAVE THE ABOVE 640K MEMORY SIZE
ABOVE 640K SIZE FROM MEMORY SIZE DETERMINE
1----- CX_CONFIG AhMEMORY SIZE DETERM I NE
MOV
AX,(CMDS U M 5 LO+NMI)·H+(CMOS U M 5 HI-+NMII
CMOS REAli - - 1 HIGH-BYTE CALL
XCHG
AH,AC
I SAVE HIGH BYTE
CALL.
CMOS READ
I LOW BYTE
1------ WHICH IS GREATER - AX
MEMORY SIZE DETERMINE
1------ CX
CONFIGURATION (ABOVE 640) BX II SIZE (BEL.OW 640)
1-----
=
=
OIFI 38 C8
0lF3 14 OF
eMP
"Z
1----o IF!
0lF6
OIF.
OIFC
OIFE
0200
0203
OZ04
0204
0206
OZ08
020A
020A
020C
020C
02tO
0212
021 &
02t8
021A
021C
021F
021F
02Z3
0226
0221
5-52
50
B8
E8
OC
86
E8
58
3B C8
11 02
8B C8
03 D9
1 IS CONFIGURATION EQUAL TO DETERMINED?
I GO IF EQUAL
SET MEMORY SIZE DETERMINE NOT EQUAL TO CONFIGURATION
PUSH
MOV
CALL
OR
XCHG
CAL.L
POP
8E8E
0000 E
10
C4
0000 E
CX,AX
SET_MEMI
SET_MEMI.
COP
"A
MOV
SET_MEM. ADO
AL,AR
CMOS_WRITE
AX
SAVE AX
ADDRESS THE STATUS BYTE
GET THE STATUS
SET CMOS FLAG
SAVE AL
UPDATE STATUS BYTE
RESTORE AX
CX,AX
SET MEM
CX,AX
IS CONFIG GREATER THAN DETERMINED?
GO IF YES
USE MEMORY SIZE DETERMINE IF NOT
AX
~~~:::iQg:~:~AG+NM I)
BX,CX
SET TOTAL MEMORY SIZE
DX,513
NO_640
CHECK I F BASE MEMORY LESS 512K
GO IF YES
~~o~· ~~~gS_INFOI28+NMI)
SET 640K BASE MEMORY BIT
GET THE CURRENT STATUS
TURN ON 640K BIT I F NOT ALREADY ON
SAVE THE CURRENT 0 I AGNOST I C STATUS
RESTORE THE STATUS
E20Cr
81 FA 0201
12 00
"e
B8
E8
OC
86
E8
MOV
CALL
OR
XCHG
CALL
AL,M&40K
AL.,AH
CMOS_WRITE
MOV
SHR
DEC
SHR
DX,6
eMP
B3B3
0000 E
80
C4
0000 E
NO_640.
89 IE 0017 R
CI EB 06
4B
CI EA 06
TEST2
WORD PTR OKB FLAG ,ex
BX,6
-
ex
SAVE TOTAL SIZE FOR LATER TESTING
DIVIDE BY 64
I ST 64K ALREADY DONE
DIVIDE BY 64 FOR BASE
1-.
04-21-16
457
•••
1-----
SAVE COUNTS IN STACK FOR BOTH MEMORY AND ADDRESSING TESTS
459
460
461
022A 52
022B 6A 40
0220 53
PUSH
PUSH
PUSH
DX
BYTE PTR 64
BX
SAVE BASE MEMORY SIZE COUNT
SAVE STARTING A~T OF MEMORY OK
SAVE COUNT OF 64K BLOCKS TO BE TESTED
463
4.,4
465
022E 52
022F 6A 40
0231 53
PUSH
PUSH
PUSH
DX
BYTE PTR 64
BX
SAVE BASE MEMORY SIZE COUNT
SAVE STARTING AMOUNT OF MEMORY OK
SAYE COUNT OF 64K BLOCKS TO BE TESTED
•••
•••
1-----
467
•••
469
470
,TI
472
0232 6A 08
0234 07
474
475
476
4 TT
0235
023C
0243
0249
26,
26,
261
261
C7
C7
C6
C6
06
06
06
06
0048
004A
004C
0040
FFFF
0000
00
93
024F
0256
0250
0263
26,
261
261
261
C7
C7
C6
C6
06
06
06
06
0060
0062
0064
0065
FFFF
0000
00
93
0269
026B
0260
026F
0271
2A
E6
E6
FE
E6
.13
1-----
'TO
•••
•••
•••
•••
CO
15
497
498
499
500
501
.0.
TEMPORARY SEGMENT SAVE IN DMA PAGE REGISTER FOR SECOND 65K BLOCK
.....
INITIALIZE VALUES TO 010000
HIGH BYTE OF LOW WORD OF SEGMENT
LOW BYTE OF 1.01 WORD OF SEGMENT
SI!:T HIGH I!!IYTE OF SEGMENT WORD
HIGH BYTE OF SEGMENT
INC
OUT
1----0273
0273
0215
0276
021A
ESIDS TEMP.SEG LIMIT,MAX SEG LEN
ESIOS-TEMP.BAS! 1.0 WORD,I
BYTE 'FITR ESIIDs-TdiP.BASE HI BYTEI,D
BYTE PTR ESIIDS:TEhP.OATA:AC'e_RIGHTSI ,CPLO_DATA_ACCESS
OUT
OUT
86
CO
14
498
ESIES TEtr.SEG LIMIT,MAX SEG LEN
ESIES-TEMP.BAS! 1.0 WORD,I
BYTE 'FITR ESIIES-TEIiIP.BASE HI BYTE) ,0
I FIRST 65K
BYTE PTR ESI I ES:TEr.F. DATA:AC'e_R I GHTS) ,CPLO_DATA_ACCESS
SET TEMPORARY OS DESCRIPTOR 641< SEGMENT LIMIT AT FIRST 65K BLOCK
NOV
NOV
MaV
NOV
1-----
486
•• T
411
419
490
491
492
I MODIFY THE DESCRIPTOR TABLE
SET TEMPORARY ES DESCRIPTOR 641< SEGMENT LIMIT STARTING AT 000000
NOV
NOV
MaV
MaV
1-----
479
••0
411
482
483
414
MODIFY DESCRIPTOR TABLES
PUSH
POP
MEMORY TEST LOOP - PO I NT TO NEXT BLOCK OF 12K WORDS 164K I
E211
6A De
PUSH
IF
FE 06 0064
FE 06 004C
POP
INC
INC
.00
503
1-----
BYTE PTR GOT PTR
DS
-
I
fEMDRY TEST LOOP
I POINT TO START OF DESCRIPTOR TABLE
:~~: =~: g~: :~::=::::::~:::~~~:
I PO I NT TO NEXT BLOCK
CHECK FOR END OF 256K PL.ANAR MEMORY
027E 80 3E 0064 04
0283 12 04
r;:
:~T:OPTR oSlloS_TEhP.BAS~_~_~~T~~i~~HFIRST
501
509
0285 BO CO
0287 E6 81
NOV
AL,PARITY CHECK+IO CHECK I CHECK FOR ANY TYPE OF PARITY ERROR
DMA_PAGE+6,AL
1 AFTER FIRST 256K
511
512
513
514
0289
0289 80 3E 0064 OA
028E TT 16
505
506
256K OF BASE MEMORY
.OT
.,0
.,..,T
516
518
519
520
521
522
523
524
525
•••
0290
0291
0292
0293
0294
0295
0296
029A
•••
'"•••
•••
•••
59
5B
58
50
53
51
12 OA
1-----
534
535
1-----
538
540
541
•••
•••
02AB 80 3E 004C FE
02BO 74 29
543
SAVE BASE_HI_BYTE IN DMA PAGE REGISTERS I
MOV
OUT
AL,BYTE PTA oSllDS TEtr.BASE HI BYTE)
: S~~ ~~~S~~~~
oMA_PAGE+3,AL
CHECK FOR TOP OF' MEMORY (FEOODOI
1-----
6A 48
PUSH
BYTE PTR ES TEMP
02BI BO 31
OIBA E6 80
MoV
OUT
AL,31H
MFG_PORT, AI.
02Be
02BF
02C2
02C4
02Cl
02Cl
D2C8
.-
PDP
07
B9
EI
74
E9
MoV
CAU.
1000
0000 E
03
0367 R
JZ
NI,
59
51
••0
1-----
561
SEGMENT
SET ES AND OS REG I STERS TO MEMORY BLOCK
PDP
553
554
566
556
557
558
559
:~~~OF
fEG
JE
PUSH
550
551
16
CMP
IF
02B2
0214
02B5
02Bl
•••
•••
•••
DO ADD I T I ONAL STORAGE ABOVE I t.EG
6A 60
845
846
547
541
•••
•••
NEXTs
1-----
•• T
CX
I GET COUNT
BX
I GET COUNT TESTED
AX
I RECOVER COUNT OF BASE MEMORY BLOCKS
AX
I SAVE BASE COUNT
BX
I SAVE TESTED COUNT
CX
I SAVE TOTAL COlJ'llT
1 MAX BASE COUNT
BYTE PTR DSIIDS TEr.F.BASE HI BYTEI,AL
NEXT
l-coRT I NUE I F NOT DONE WI TH BASE MEMORY
MoV
MoV
029C C6 06 0064 I 0
02A I C6 06 004C I 0
02A6 AD 0064
02A9 E6 84
BYTE PTR DSIIDS TEr.F.BASE HI BYTEI,OAH
NEXT
l-coRTINUE IF ABOVE I MEG
CHECK FOR END OF BASE MEMORY TO BE TESTED
POP
POP
POP
PUSH
PUSH
PUSH
ChP
.JB
31 06 0064
1S32
OUT
CHECK END OF FIRST 64DK OR ABOVE I END OF' MAX I MUM BASE hEMORY I
ChP
.JA
1-----
527
529
530
1-----
E21_01
PDP
PDP
~;TE
PTR OS_TEMP
ES
CX,IOOOH
~TGTST_CNT
-
<><><><><><><><><><><><>
<><> CHECKPO I NT 31 <><>
I SET COUNT FOR 32K WORDS
SKIP IF OK
E2tA
GO PR I NT ERROR
ex
POP CX TO GET AX
RECOVER TESTED MEMORY
AX
WRITE THE CURRENT SIZE FDR IADDRESS LINE 23-1T TEST) USED LATER
563
564
D2C9 2B FF
D2CB AB
SUB
STOS.
DI,ol
566
567
568
D2CC 05 0040
D2CF 50
0200 51
ADD
PUSH
PUSH
AX,64
AX
CX
&TO
020 I EI 09AO R
CALL
PRT_OK
POINT TO BEGlh1IIlNG OR A BLOCK
WR I TE TI£ CI.M:RENT SIZE
AT THE STARTING ADDRESS
ADVANCE COUNT TO NEXT BLOCK
SAVE TESTED MEMORY
SAVE LOOP COUNT
I 0 I SPL.A Y ·OXXXX OK· MESSAGE
TEST2
5-53
.-.
0 ..... 21-. .
IT.
IT.
ITI
IT.
ITI
IT.
ITT
ITI
ITO
II.
III
02D4 59
02DI 49
0206 II 01
02DI I'
020' EI . .
••DB
III
III
116
-
••D8 I I
DIDC II
.-----
0200 .9' 401.
It.
19.
lOa
1-.........
02EI 60\ 01
0216 26. C6 06 0064 00
DIEC .6. Cl 06 0062 DODO
1-----
50'
191
199
..,.,..
'.T
,'.1
..
".
•••
,,.1
,'.1
02FI
02F5
02F7
02F9
02F8
2'
E6
16
aD
E6
CO
'"~
..,.,,.T..
,,..
•••..
,•••
,.,
,,,....
,,,....
,..
'.1
,.,
,'.1..
,..
,,.1
,
'28
U.
PUSH
JMP
ex
E••
SAVE LOOP COUNT
L.OOP T I L.L. AL.L. MEMORY C. .CKED
AX
AX
END MAIN TEST LOOP
CL.EAR MAX I MUM LOCK COUNT
CL.EAR BASE SIIE COUNT F'ftOM STACK
ADDRESS TEST VAL.UES ARE IN STACK
POP
POP
ADDRESS LINE 16-13 TEST
ea
.............
MDV
02',. .6 10
OUT
ADD
1-----
DESCRIPTOR
~TR
GOT_flTIl':
BYTE PTR ES. (OS TatP.BASE HI 8YTEI,O
-
ESIOS_TEMP.BASE~O_WORD.O-
AL.,AL.
OMA PAGE+4,AL.
OMA-PAGE+5,AL.
AL.,IIH
DMA_PAGE+3,AL
HI QH 8YTE OF LOW WORD Of" SIGMENT
LOW 8YTE all' L.OW WORD OF' SEGMENT
SET HI QH BYTE OF SEGMENT WORD
HIGH 8YTE OF SEGMENT
POINT TO teXT ILOCK Of' 64K
D2FD aD II
0101 261 80 06 0064 01
os
1;11:
TEMPORARY SEGMENT SAVE IN DMA PAGE II':EGISTIII':
OUT
.I~D
LET FIRST PASS IE SEEN
COUNT P'Dft 250 MS FIXED TIME DEL.AY
AL.L.OW SIX DISPL.AY REFRESH CYCL.ES
eX.IUll
IAITF
INITIALIZE
SUI
OUT
OUT
MOV
16
Ot
8...
6 ••
'"
".
".
"I
".
"T
".
".
,•••..
RECOVER 64K BL.OCK COUNT
DECREMENT BL.OCK COI..Hf II'OR L.OOP
CONT I NUE TO NEXT TEST I F DONE
PUSH
POP
MDV
MDV
02EI 01
191
196
lOT
ex
ex
KB_LDDP3
MDV
CALL.
02EO EI 0000 E
lIT
III
119
19.
Jexz
K8 LOOfII.
III
II.
POP
DEe
AL. , 33H
I
c><><>c>c><>c>c>ooc>c>
MFG PORT, AL
I
<><> CHECKPO I NT 33 OC>
8YT! PTR ESI (DS_TDtP.8ASE_HI_IYTE) ,0 I
CHECK FOR END OF BASE MEMORY TO BE TESTED
0307 26. 10 3E 0064 0'\
0300 n 13
CMP
oJA
BYTE PTR IS, (OS TDtI".8ASI HI BYTE) ,OAH
teXT_A
l-coATlHUE IF ABOVE I MEG
030F' 59
0310 IB
POP
PDfI
POP
PUSH
PUSH
PUSH
CMF'
oJl
CX
I GET COUNT
IX
I GET COUNT TESTED
AX
1 RECOVIEft COUNT OF' BASE EMORY BLOCKS
AX
I $AVE lASE COUNT
IX
I SAVE TESTED C~T
CX
I SAYE TOTAL COUNT
BYTE PTR ES, (OS TDP.BASE HI BYTE) tAL
1 MAX BASE COUNT
NEXT_A
I-CoAT I NUE I F NOT DONE WI TH BASE MEMORY
03. I 58
0312 10
0313 53
0314 II
D3t5 261 38 06 0064
031A 72 06
I..........
g;;g
26,
0322
C6 06 0064 10
NEXT_AI
0322 26, AD 0064
1-----
0326 E6 8 ...
MDV
IYTE PTR ESI (DS_TEMP.BASE_HI_BYTEI,IOH
AL.,.YTE PTA ES. (DS_TEMP.8ASE_HI_IYTEI
DNA PAGE REGISTERS 3
OUT
1-----
'34
DO ADDITIONAL STORAGE ABOYE I IlEG
NEXT_A.2 i MaV
DMA_PAGE+3,AL
Ct£CK FOR TOP OF' MEMORY (FEOOOO)
I SAVE THE HIGH BYTE OF' SEGMENT
1 FOR POSSIBLE ERROR
16 MEG
635
,IT
,.T
0321 Ie FE
032A 74 34
PDP
'5'
'II
61'
'.T
611
...'"'"
.... ,
...
'6'
. .I
.. T
67.
67.
67.
673
67.
671
67'
6TT
671
sua
032F 28 FF
MOV
MOV
SU8
MOV
0331 88 II
0333 88 F7
0331 28 co
Dau 89 05
1----0340 58
0341 eo
0342 5t
0343 38 C2
03415 88 C2
0347 15 IE
1----0349 E4 61
0348 24 CO
0340 75 18
034F
0350
0351
03154
0355
0356
0359
035A
035B
59
58
05 0040
150
51
E8 09AO R
59
49
E3 03
0350 51
035E EB to
5-54
TESTl
:;TE PTR DS_TEMP
01,01
DX,DS.[DI]
51,01
AX,AX
[Dll,AX
I POINT TO START OF BLOCK
I GET THE YAL.UE OF THIS BLOCK
I SET SI FOR POSSIBLE ERROR
I CLEAR MEMCIRY L.OCATION
ALLOW DISPLAY TIME TO DISPLAY MESSAGE AND REFRESH TO RUN
MDV
CALL.
POP
POP
PUSH
PUSH
eMP
MDV
.lNZ
033' 8' IA69
Dlle EI 0000 E
033,. 59
1 TOP OF MEMORY?
I GO NEXT TEST IF IT IS
SET OS REGISTER
PUSH
032£ IF
61.
61.
61.
1-----
Dlze 60\ 60
eOP
.lZ
CX,6761
WAITF
ex
AX
AX
ex
AX,DX
AX,DX
E21A
I COUNT FOR 102 hiS FIXED TIME DEL.AY
J AL.LOW FIYE DISPLAY REFRESH CYCLES
I GET THE L.OOP COUNT
I RECOVER TESTED MEMORY
I SAVE TESTED MEMORY
I SAYE LOOP COUNT
1 DOES TI£ BLOCK I D MATCH
I GET THE BLOCK ID FDR POSSIBLE ERROR
I GO PR I NT ERROR
CI£CK FOR CHECK PAR I TY
IN
A..,
.lNZ
AL,PORT B
:~i:ARITY_ERR
CI£CK FOR I/O OR PARITY CHECK
STRIP UNWANTED BITS
EXIT IF PARITY ERROR
PDP
PDP
ADD
PUSH
.Jcxz
ex
AX
AX,64
AX
ex
PAT OK
ex ex
KB_L.OOP_3
PDP CX TO GET AX
RECOYER TESTED MEMORY
64K I NCREr.ENTS
SAYE TESTED MEMORY
SAYE LOOP COUNT
DISPLAY OK r.ESSAGE
RECOVER 64K BLOCK COUNT
LOOP TILL ALL. MEMORY CHECKED
CONTINUE
PUSH
.IMP
ex
E21_A
SAVE LOOP COUNT
CONT I HUE TILL. DONE
PUSH
CALL
PDP
DEe
.,...••0,
•••
•••
•••
•••
•••
U,
•••
•••
"0,
•••
•••
•••
•••,
•••
•••
'00
..
..-
1-'
04-21 -86
PAGE
1-----
0360
"0
'"
".
".
".
,,-".
'"
".
".
....
,.-,.,
,,..
,.,
,,,....
,.-..
,,.,
,..
,'"..
,,..
,.,
,,..
,..
'.0
,.,
a----1----I
0367
0369
0368
0360
E6
8A
E6
ISB
82
C4
83
C6
H.
28
AB
E4
E6
OC
E6
24
E6
SAVE FAILING BIT PATTERN (LOW BYTE)
SAVE HIGH BYTE
oMA PACE+ 1 I AI..
AL,AH
OMA PAGE+2,AL
AX,!I
I GET THE FAILING OFFSET
DMA PAGE+5.AL
AH,AL
DMA_PAGE ... "", AI..
CLEAR I/O CHANNEL CHECK OR R/' PARITY CHECK
IN
OUT
OR
OUT
ANO
OUT
51,51
I WRITE TO FAILING BLOCK
SUB
"A'
S8
E8
24
86
E8
33
8B
BO
E8
8A
SO
E8
C8
Bl
0000 E
EI
SO
0000 E
CET PARITY CHECK LATCHES
SAVE FOR ERROR HANDLER
TOGGLE II a-PAR 1TV CHECK ENA8LE
TO RESET CHECKS
~5R~A=-;:~R_OFF
~5R~~=-;:~R_ON
AX
AX
BX
CLEAR BLOCK COUNT
GET THE LAST OF GOOD MEMORY
GET BASE MEMORY COUNTER
CONVERT TO MEMORY SIZE COUNTS
COMPARE LAST GOOD MEMORY WITH BASE
I F ABOVE OR EQUAL I USE REMA J NDER IN
CMOS_U_M_S_IH/L)
BX,6
AXIBX
E211
ELSE SET BASE MEMORY SIZE
PUSH
"0"
AOO
MOV
1-----
AL,PORT 8
OMA PAC!+l,AL
GET THE LAST OF GOOD MEMORY
"0"
"0"
"0"
SHL
58
58
58
CI E3 06
2B C3
13 11
1-----
0396
0399
039C
039E
03040
03A3
03A5
03045
03Al
03A9
03AC
03AE
03S0
OUT
MOV
OUT
MOV
OUT
STOSW
61
88
OC
61
F3
61
1----0384
03e5
0386
0387
03eA
03ec
NEXT TEST VIA .JUMP TABLE (SHUT2)
PRINT FAiliNG ADDRESS AND XOR'ED PATTERN IF DATA COMPARE ERROR
USE DMA PACE REGI STERS AS TEMPORARY SAVE AREA FOR ERROR
SET SHUTDOWN 3
SUB
F6
MOV
S3B3
0000 E
CALL
IF
AND
XCHG
CALL
XOR
SET THE DATA SEGMENT
I N PROTECTED MODE
BYTE PTR RSDA_PTR
OS
AX,ax
OMEMORY_S I ZEIAX
RESET 512K -
C4
0000 E
CO
->
CONVERT BACK TO LAST WORK I NG MEMORY
TO INDICATE HOW MUCH MEMORY WORKING
640K OPT I ON IF SET
AX,X' I CMOS INFOI2e+NMI)
CMOS READ AL I N'O'T M640K
ALlAH
CMOS WRITE
AXIAi
ADDRESS OPTIONS INFORMATION BYTE
READ THE MEMORY I NFORMA T I ON FLAG
SET 640K OPT I ON OFF
MOVE TO WORK REGI STER
UPDATE STATUS IF IT WAS ON
CLEAR VALUE FOR EXTENS I ON MEMORY
E2111
MOV
MOV
CALL
MOV
MOV
CALL
1-----
CALL
1----03S9 E9 0000 E
CXIAX
ALiCMOS U M S HI+NMI
CMOS WRTT! - AHICe
ALICMOS U M S LO+NMI
CMOS_WRTT! - -
1 SAVE AO.JUSTED hIIEMORY SIZE
SAVE THE HIGH BYTE MEMORY SIZE
GET THE LOW BYTE
DO THE LOW BYTE
WRITE IT
SET SHUTDO'",! 3
MOV
03B3 se 038F
03S6 E8 0000 E
150
'"
PRoe_SHUTDOWN
OUT
1----0315
0377
0318
03104
031C
031E
0380
0382
0391 03 Cli
0393 A3 0013 R
H.
MFG_PORT t AI..
XCHG
0373 E6 85
'2.
'.0
E21AI
036F E6 1S6
0371 86 EO
038E 6A I.
0390 IF
T3.
<><><>c><><>c><><><><><>
<><> CHECKPOINT 34 <><>
AL,34H
OUT
"M"
BACK TO REAL MODE
0364 E9 0000 E
,,
,
'.0
-MOV
0360 BO 34
0362 E6 ao
'0 I
'0'
'0'
'0'
'0.
'0'
'0'
'0.
'0.
BACK TO REAL MODE - MEMORY TESTS DONE
KB_lOOP 31
~~a~:~~~~~S_SHUT_DOWN+NMI
ADDRESS FOR SHUTDOWN RETURN
SET RETURN 3
SHUTDOWN
"M"
PRoe_SHUTOOWN
TEST2
5-55
1-8
04-21-86
113
11.
75.
11.
751
PAGE
75'
"AABBCC OOEE 201"
7••
761
7 ••
7.3
7.'
7 ••
766
DESCRIPTION FOR ERROR 203 (ADDRESS LINE 16-231
AT THE LAST PASS OF THE STORAGE TEST. FOR EACH BLOCK OF
64K. THE CURRENT STORAGE SIZE (101 IS WRITTEN AT Tt£ FIRST
WORD OF EACH BLOCK. IT IS USED TO FIND ADDRESSING FAILURES.
"AABBCC DOEE 203"
712
711
71.
7.8
BLOCK 10
0000
0040
/I
0200
71'
751
n.
71'
79.
791
79.
793
79.
798
796
797
79.
799
00640K OK
'0000 0300 202
"PARITY ct£CK I"
03SC
OIDa E4 16'
OIDA E8 0000
03DO aD 20
MOV
MDV
CALL
MDV
CALL
IN
CAL.L
IN
CAL.L
IN
CALL
MOV
CALL
IN
CALL
IN
CALL
s:
03DF EI 0000 E
03E2 E4 83
03E4 E8 0000 E
03E7 E4 .2
03E9 E8 0000 E
832
833
OIEC E4 80
03EE Ie 33
834
03FO BE 0000 E
135
OF3 74 0"
1-----
.
I
I
•
ENTRY FROM PROCESSOR SHUTDOWN 3
SET REAL MODE DATA SEGMENT
OaF5 BE 0000 E
oaF. Ie 32
839
oaFA 74 03
841
DIFC BE 0000 E
03FF
,
03FF E8 0000 E
0402 E4 II
•• 7
eMFG ERR FLAG+ I ,MEM FA I L
AL.eIf
PRT HEX
AL,LF
PRT HEX
AL,&iA PAGE+3
XPC ByTE:
AL,&iA PAGE+4
XPC BYTE
AL.'D'MA PAGE+!
XPC ByTE
ALIT t
PRT HEX
AL,IiMA PAGE+2
XPC BYTE
AL,IiMA PAGE+I
XPC_BYTE
I
<><> MEMORY FAILED <><>
CLEAR ANO SET MANUF ACTUR I NG ERROR FLAG
CARR I AGE RETlIRN
LINE FEED
GET THE HIGH BYTE OF 24 BIT ADDRESS
CONVERT AND PR I NT CODE
GET THE MIDDLE BYTE OF 24 BIT ADDRESS
GET THE LOW BYTE OF 24 BIT ADDRESS
SPACE TO MESSAGE
GET HIGH BYTE FAILING BIT PATTERN
CONVERT AND PR I NT CODE
GET LOW BYTE FAILING BIT PATTERN
CONVERT AND PR I NT CODE
CHECK FOR ADDRESS ERROR
GET THE CHECKPO I NT
IS IT AN ADDRESS FAII..URE1
LOAD ADDRESS ERROR 16->23
GO IF YES
AL.MFG PORT
AL.33HSI.OFFSET E203
ERR.
1
I
I
I
MOV
CM.
S I.OFFSET E202
AL.32H
ERR2
I LOAD, ADDRESS ERROR 00-> 15
1 GO IF YES
MDV
SI,OFFSET E201
1 SETUP ADDRESS OF ERROR MESSAGE
CALL
IN
E MSG
AL.DMA_PAGE+7
JZ
842
143
DDS
IN
CM.
""V
JZ
811
8S1
•••
•••
•••
CALL
03D5 E8 OQOO E
826
844
(OR 21
SHUT31
OIBe EI DODO E
821
821
•••
•••
<-- ERROR OlE TO ADDRESS FA I LURE
1-------------------------------------------------------------------03. C6 06 0016 R 01
Ole... ao 00
03C6 EI 0000 E
Ole. ao 0"
oaca EI 0000 E
DICE E4 14
DIDO EI 0000 E
CiaDS E4 Its
...
<-- LAST OK MEMORY
DNA PAGE REGISTERS ARE USED AS TEMPORARY SAVE AREAS FOR SEGt.E:NT
I DESCRIPTOR VALUES.
8'2
113
114
III
1'6
8U
1'1
119
.20
821
822
823
824
825
•••
•••
090000 --> OtFFFF (512->576KI IF 640K BASE
100000 --> 10FFFF (l024->108lKI IF 5UK BASE
IF A PARITY LATCH WAS SET THE CORRESPONDING MESSAGE WILL DISPLAY •
•• 7
loa
ADDRESS RANGE
000000 --> OOFFFF
010000 --> 0 I FFFF
EXAMPLE (640K BASE IlEhtORY + 512K 1/0 MEMORY _ 1152K TOTAL I
NOTE I THE CORRECT BLOCK 10 FOR THIS FAILIJRE IS 0280 HEX.
DUE TO AN ADDRESS FAILlItE THE BLOCK ID+128K OVERLAYED
THE CORRECT BLOCK 10.
..•••••••••,
109
SAME AS ABOVE EXCEPT FOR DDEE
GENERAL DESCRIPTION FOR BLOCK 10 (DOEE WILL NOW CONTAINED TI£ 101
DO=H I GH BYTE OF BLOCK 10
EE_LOW BYTE OF BLOCK 10
701
.,.."
lOR 202)
AA=H I GH BYTE OF 24 BIT ADDRESS
BB=-M I DDLE BYTE Of' 24 BIT ADDRESS
CC=LOW BYTE OF 24 BIT ADDRESS
DO_HIGH BYTE OF XOR FAILING BIT PATTERN
EE_LOW BYTE OF XOR FAILING BIT PATTERN
DESCRIPTION FOR ERROR 202 (ADDRESS LIJIE 00-151
A WORD OF FFFF I S WRITTEN AT THE FIRST WORD AND LAST WORD
OF EACH 64K BLOCK WITH ZEROS AT ALL OTHER LOCATIONS OF Tt-E
BLOCK. A SCAN OF TI£ BLOCK I S MADE TO I NSURE ADDRESS LINE
0-15 ARE FUNCTIONING.
767
7••
769
77.
771
77.
773
77'
778
77.
777
77.
77.
78.
•••
•••
•••
(R/./ MEMORY DR PARITY ERRORS)
MEMORY ERROR REPORT I NG
DESCRIPTION FDR ERRORS 201 (CMP ERROR oR PARITY)
OR 202 (ADDRESS LItE 0-15 ERROR I
7 ••
ERR2.
1-----
PRINT ERROR MESSAGE
GET THE PORT_B VALUE
DISPLAY "PARITY CHECK 1" ERROR MESSAGES
848
0404 A8 80
1.9
0406 74 DB
TEST
JZ
:'(Q~ITY_CHECK
CHECK FOR PLANAR ERROR
SKIP IF NOT
81S1
0408 50
PUSH
882
0409 1!8 0990 R
040C BE 0000 E
CALL
MOV
CALC
POP
AX
PADING
SI.OFFSET 01
P MSG
AX
SAVE STATUS
I NSERT BLANKS
PLANAR ERROR, ADDRESS WPAR I TY CHECK I'
DISPLAY "PA.RITY CHECK I W MESSAGE
AND RECOVER STATUS
TEST
JZ
AL.IO CHECK
NMI_MI
1/0 PARITY CHECK 1
SK I P I F CORRECT ERROR 0 I SPLAYED
CAL.L
MOV
CAL.L
PADING
SI,OFFSET 02
P_MSG
INSERT Bl..ANKS
ADDRESS OF 'PARITY CHECK 2" NESSAGE
DISPLAY "PARITY CHECK 2" ERROR
851
114
858
040F E8 0000 E
041268
0413
0413 A. 04:0
0415 14 09
160
861
041 T EI 0990 R
04'" BE 0000 E
162
163
0410 E8
0420
815
856
an
.5.
•••
5-56
ooo~
NMI _Mil
E
NMI_M21
CONTINUE TESTING SYSTEN ••••
1-'
04-21-86
8.5
•••
•••
OTO
PAGE
1-----
ENTRY FROM SHUTDOWN
•• T
a6e
0420
SHUT2t
TEST .20
ADD I T IONAL PROTECTED (Y I RTUAL MODE I TEST
DESCR I PT I ON
THE PROCESSOR I S PUT I N PROTECTED MODE AND
THE FOLLOW I NG FUNCT I ONS ARE VER I F I ED
.TI
8T2
8"
.T.
8T5
OT •
• TT
I. VER I FY PROTECTED MODE
THE MACHINE STATUS IS CHECK FOR VIRTUAL. MODE
2. PROGRAMMED I NTERRUPT TEST
AN PROGRAMMED INTERRUPT 32 I S I SSUED AND
AND VERIFIED
3. EXCEPT I ON I NTERRUPT I 3 TEST
A DESCRIPTOR SEGMENT LIMIT IS SET TO ZERO
AND A WRITE TO THAT SEGMENT IS ATTEMPTED
AN EXCEPT I ON 13 I S EXPECTED AND VER I F I ED
4. LOT/SOT LTR/STR TEST
LOAD LOT REG I STER AM> VER I FY CORRECT
LOAD TASK REG I STER AND VER I FY CORRECT
THEY ARE VERIFIED VIA THE STORE INSTRUCTION
5. THE CONTROL FLAGS OF THE 286 FOR 0 I RECT I ON
ARE VERIFIED VIA THE STD AND CLD COhillANDS
I N PROTECTED MODE
6. BOUND INSTRUCTION TEST (EXCEPTION INT 5)
CREATE A SIGNED ARRAY IfIOEX WITHIN AM)
OUTSIDE THE LIMITS. CHECK THAT NO EXC INT
IF WITHIN LIMIT AND THAT AN EXC INT 5
OCCURS IF OUTSIDE THE LIMITS •
7. PUSH ALL POP ALL TEST
SET GENERAL PURPOSE REG I STERS TO DIFFERENT
VALUES, ISSUE A PUSH AL.L, CLEAR THE REGISTERS
THEN ISSUE A POP ALL AND VER I FY CORRECT.
I
8. CHECK THE VERR/VERW INSTRUCTIONS
I
THE ACCESS BYTE IS SET TO READ ONLY THEN TO I
A WRITE ONLY AND THE VERR/VERW INSTRUCTIONS
•
ARE VERIFIED.
t
9. CAUSE AN INTERRUPT 13 VIA A WRITE TO A
•
READ ONLY SEGMENT
I
10. VERIFY THE ARPL INSTRUCTION FUNCTIONS
SET THE RPL FJELD OF A SELECTOR AND
VER I FY THAT CURRENT SELECTOR RPL I S SET
CORRECTL.Y •
II. VERIFY THE LAR INSTRUCTION FUNCTIONS
12. VERIFY THE LSL INSTRUCTION FUNCTIONS
13. LOW MEG CH I P SELECT TEST
8T.
OT'
•• 0
881
.82
•••
•••
•••
•••
•••
•••
•• T
....'2•••
•• 0
•••
•••
•••
...•••
•• T
'00
.01
.02
'0.
•'0.
0.
'0.
• OT
.08
'0'
.. 0
.11
...
...
.. 2
91 •
91.
91 T
0420 E9 0000 E
91.
'20
JM.
1-----
921
922
923
0423 Ee 0000 E
0426 E4 eo
0428 3C 35
924
042" BE 0000 E
925
926
0420 74 00
04ZF BE 0000 E
SHUll.
POST3
I GO TEST THE 286 PROTECTED MODE
FAILURE ENTRY FROM A SHUTDOWN
CALL
IN
eM.
MOV
JZ
SHUT7A. MOV
:t: :~~_PORT
DDS
I ESTABL I SH THE DATA SEGMENT
1 CHECK FOR CH I P SELECT ERROR
SI,OFFSET EI09
SHUT18
SI,OFFSET EI04
I PRINT ERROR 109
1 GO IF NOT
I PROTECTED MODE FA I LED
.2T
928
0432 80 DE 0016 R 02
931
932
933
0431 E8 0000 E
043" EB 08
043C E8 0000 E
935
•••
•••
•••
043F 80 DE OQI6 R 04
940
0444 E8 0000 E
941
0447 28 CO
942
943
0449 A3 0017 R
044C 89 00 DE
944
945
044F IA 0082
0452
946
0452 2" CO
941
948
0454 EE
0-455 42
949
.00
0456 E2 FA
'2'
'.0
•••
• 37
..•••,
CALL
JM.
SHUllB I CALL
OR
-
-
-
I
a PRINT MESSAGE
E MSG
SRORT SHUT6
E_MSG
1 PRINT MESSAGE
<><><><><><><><><><><><><><><>
<><> 1..01 MEG CH I P SELECT
OMFG ERR FLAG+I ,LMCS FAILI
-
-
-
I
PROTECTED MODE TEST PASSED ENTRY FROtI A SHUTDOWN
SHUT6,
CALL
sua
MDV
MDV
MDV
CLR_LOOP ~UB
INC
COOP
DDS
AX,AX
~~gE~TR OKB_FLAG.AX
I PROTECTED NO!;)E TEST PASSED
I CLEAR KEYBOARD STATE FLAGS
I CLEAR PAGE REC I STERS
OX , DMA_PAGE+I
AL,AL.
DX.AL
OX
CLR_L.OOP
1-----------------------------------------------1 TEST.21
KEYBOARD TEST
I
I DESCRIPTION
1
RESET THE KEYBOARD AND CHECK THAT SCAN
I
CODE ~AA~ IS RETURNEe TO THE PROCESSOR.
I
CHECK FOR STUCK KEYS.
.55
•
I
I
I
I
I
,------------------------------------------------
•• T
'58
MDV
960
961
0458 aD 35
045.\ E6 10
OUT
AL,35H
MFG_PORT ,AI..
963
D45C F6 06 0012 R 20
TEST
~r~_TST,MFG_LDOP
964
965
966
0461 15 03
0463 E9 0516 R
0466 80 IE 0072 R 64
eM.
961
0468
968
969
9TD
971
972
913
0460
04 TO
0472
0474
0475
0478
974
915
aHD 10 3E 0072 R AA
0482 74 10
eM.
'.2
<><><><><><><><><><><><><><><>
<><> V I RTUAL MODE FA I LED <><>
OMFG ERR FLAG+I ,PRO FAlLa
1-----
OUT
'.2
•••
•••
•••
OR
n
E9
aD
E6
FA
81
74
03
0516 R
36
80
JNZ
JM.
JNZ
JM.
MDV
OUT
eel
IE 0072 R 1234
17
eM.
JZ
JZ
916
0484 aD AE
MDV
977
0486 E8 0000 E
CALL
918
0489 B7 04
MDV
<><><><:11'<><><><><><><><>
<><> CHECKPOINT 35 <><>
1 MANUFACTURING BURN IN TEST NODE?
F7I YES - SK I P KEYBOARD TEST
FFaYT7~~ PTR ORESET_FLAG,064H I MANUFACTURI~G RUN IN MODE?
AL.36H
MFC_PORT ,AI..
I YES - SK I P KEYBOARD TEST
I
<><><>-c;><><><><><><><><>
I
<><> CHECKPD I NT 36 <><>
~~~SET_FLAG, I 234H
I SOFT RESET?
~T~E flTR ORESET_FLAG'KB_~K
AL.ENA KBD
C8042 BH.4
cb ~~~~SFOR
AA ALREADY RECEIVED
I ENABLE KE~.aARD
I TRY 4 TIM!::S
5-57
1-10
04-21-86
919
980
981
982
983
984
985
986
981
988
989
990
991
048B
048E
0490
0492
0494
0496
0499
049B
0490
04AO
041.3
041.5
04Al
993
041.9 80 OE 0016 R 08
.9.
•••
995 04AE
996 04B I
991 04B3
998 04B6
999 0488
1000 048A
1001 04BC
1002 04BF
1003
1004
1005
1006 04CI
1001 04C3
1008
1009 04C5
1010 04Cl
1011 04CA
1012 04CO
lOIS 0400
10140402
1015 0404
1016
1011 0406
1018 0408
1019
1020 040A
1021 04DC
1022 04DF
1023
1024
1025
1026 04E1
1021 04E2
I 028 04E4
I 029 04E6
1030 04E8
1031 04EA
1032 04EC
E8 0000
04
FE CF
15 Fl
BO AD
E8 0000
E4 60
BO EO
E8 0000
E8 0000
E4 60
A8 0 I
14 OA
n
BE
EB
E8
E3
BO
E6
80
15
E
LOOP I I
GIOI
E
E
E
0000 E
60
0000 E
29
31
80
FB AA
20
DR
Gill
1-----
04F2
04F4
04F6
04F9
04F'8
04FO
04FF
0501
MOV
JMf'
CALL
JCXZ
MDV
OUT
CMP
JNE
OSF 42
GIOBH
LOOP I
AL.IDIS KBD
C8042 -
~~:~~:~-~LK
CHECK FOR OUTPUT BUFFER FULL
GO I F BUFFER FULL
I 0 I SABL..E KEYBOARD
C8042 OBF 42
AL.,PORT A
AL.KYBD-CLK
Gil
-
SI,OFFSET E304
SHORT F6D
~~D_RESET
AL..31H
r,tFG PORT,AL
~.KB_OK
AL I 38H
MFG_PORT ,AL
ALIENA KBD
C8042 CX,6628
WAITF
AL, STATUS PORT
AL.OUT BUf!' FULL
F1
BO 39
E6 80
MOV
OUT
AL,39H
MFG_PORT ,AL
E4 60
E8 0000 E
EB 2A
IN
CAL.L
JMP
AL.IPORT A
XPC BYTE
SHOrfT F6C
1----F6.
F6AI
FE
15
BE
EB
E4
3C
14
80
CF
F4
0000 E
18
60
00
OA
DE 0016 R 10
1044 0506 BE 0000 E
1045 0509 ES 08
1046 050B BE 0000 E
1041
1048 050E 80 OE 0016 R 20
1049
.
F6BI
F6CI
-
F6DI
0516 BO 3A
0518 E6 80
FT.
1----051A
051C
051E
051F
0521
0524
0526
BO
E6
FA
BO
E8
SO
E6
FF
21
60
00,00 E
45
60
1----0528 84 DO
052A E8 0000 E
1----0520
052F
0531
0534
0535
0536
0539
D53C
0530
053E
053F
2S
8E
B9
OE
IF'
BE
BF'
A5
41
41
E2
CO
CO
0008
F8
1-----
CLI
MOV
OUT
SUB
MOV
IN
TEST
LOOPZ
JNZ
DEC
JNZ
MOV
JMP
IN
CMf'
JZ
5-58
28 CO
8E CO
B9 0008
OE
IF
TEST2
<><><><><><><><><><><><>
<><> CHECKPO I NT 39 <><>
GET THE SCAN CODE
CONVERT AND PR I NT
CONTINUE
AL,INTR FACE CK
1 COMMAND TO 8042
BH,05
AL..STATUS PORT
AL,OUT BUf!' FULL
f't.A
F6B
BH
F6A
SI,OFFSET E303
SHORT F6D
1 WAI T FOR OUTPUT BUFFER FULL
~~~~~S-"ORT,IL
1 8042 FINISHED TEST?
I
GO CHECK RESULTS
TRY AGAIN
INDICATE PLANAR FAILURE
(REMOVE KEYBOARD TRY AGAI N)
GET THE RESULTS OF INTERFACE TEST
IS THE INTERFACE OK?
~~:~ORT_A
DR
F6e
OMFG_ERR_FL.AG+I.KY_SYS_F:IL. I
MOV
JMP
MDV
51 ,OFFSET E303
SHORT F6D
S II OFFSET E30 I
DR
OMFG_ERR_FLAG+I,KYBO_FAIL,
CALL
::::<~~~~~:~~7;~~;~~<><>
; PLANAR FAILURE
1 GO I F YES
1 GET MESSAGE ADDRESS
<><><><><><><><><><><><><>
<><> KEYBOARD FAILED
1 PRINT MESSAGE ON SCREEN
INITIALIZE 8042 TO HONOR KEY LOCK
MOV
OUT
AL,3AH
MFG_PORT ,AL
MOV
OUT
CLI
MOV
CALL
MOV
OUT
AL,OFFH
INTAOI,AL.
AL,'RITE 8042 LaC
C8042
AL I 45H
PORT_A,AL
<><><><><><><><><><><><>
<><> CHECKPO I NT 3A <><>
I DISABLE INTERRUPTS
WRITE 80042 MEMORY COMMAND
I SSUE THE COMMAND
SET SYSTEM FLAG - OUTBUF INTERRUPT PC I COMPATlBIL.ITY
RESET INHIBIT OVER RIDE
DEGATE ADDRESS LINE 20
MOV
CALL
AH,DISABLE BIT20
GATE_A20 -
SET COMMAND IN AH
I SSUE THE COMMAND
SETUP HARDWARE INTERRUPT VECTOR TABLE LEVEL
AX,AX
ES,AX
CX,08
CS
OS
S I ,OFFSET VECTOR TABLE
DI.OFFSET OINT_pTR
01
O~l
GET VECTOR COUNT
SETUP OS SEGMENT REG I STER
1 SK I P OVER SEGMENT
01
FTA
SETUP HARDWARE INTERRUPT VECTORS LEVEL 8-15 (VECTORS START AT INT 10H)
ASSUME
0541
0543
0545
0548
0549
~gA~ g~~~L:~ ~~=~~T~~~SAGE
KEYBOARD ERROR TRY TO DETERMINE IF 8042 INTERFACE IS WORKING
SUB
MDV
MOV
PUSH
PDP
MOV
MOV
MOVSW
INC
INC
LOOP
0000 E
0020 R
INTERRUPT
<><><><><><><><><><><><>
<><> CHECKPOINT 31 <><>
<><><><><><><><><><><><):<><> CHECKPO I NT 38 <><>
I
0513 E8 0000 E
~~~~~ ~~~~~ ~~s~~~:Of~ONO
ASSURE KEYBOARD ENABLED
I SSUE THE COMMAND
COUNT FOR 100 MILLISECONDS
DELAY FOR A WHILE
CHECK FOR STUCK KEYS
OUT BUFFER FULL?
YES - CONT I NUE TEST I NG
-
1050
1051
1052
1053
1054
1055
1056
1051
1058
1059
1060
1061
1062
I 063
1064
1065
1066
1061
1068
1069
1010
1011
1012
1013
1014
1015
1016
1011
1018
1019
1080
1081
1082
I 083
1084
1085
1086
1081
1088
1089
1090
1091
1092
:
1
;
:
MOV
OUT
AB
64
C9
05
64
01
:~:~<~~~~~:~~>~~~~~>~~~~<>:~::
I DISPLAY 304 ERROR
REPORT ERROR
I
CHECK FOR STUCK KEYS
MDV
CALL
MOV
CALL
IN
TEST
JE
FA
80
E6
2B
Bl
E4
A8
WA I T FOR OUTPUT BUFFER FUL.L
GET THE RESUL.. TS
KEYBOARD CLOCK MUST BE LOW
OMFG_ERR_FL.AG+ I,KYCLK_FA:L 1
BO
E8
B9
E8
E4
A8
14
I.E
0000 E
19E4
0000 E
64
01
40
FLUSH
GET THE CLOCK AND DATA LINES
DATA
90 38
E6 80
1~i; ~i~~ ~~ ~;
I 03&
1036
1031
1038
1039
1040
1041
1042
1043
CALL
JNZ
DEC
JNZ
MaV
CAL.L.
IN
MOV
CAL.L.
CAL.L
IN
TEST
JZ
SUB
MOV
MDV
PUSH
PDP
ESIABSO
AX,AX
ES.AX
CX.08
CS
OS
GET VECTOR COUNT
SETUP OS SEGMENT REG I STER
I-II
04-21-86
1093 014A
1094 0540
1095 0110
1096 0111
1097 0112
1098 0113
1099
1100
1101
1102
1103 0111
1104 055T
1105 05159
1106 OI5I5F
IIOT 015615
11015
1109
1110
111101561
1112 0156E
1113 OI5T t
II 14 OI5TI5
11115 Dill
II"
lilT
111I
1119
t 120 05TA
1121
1122 OITD
II 23 0512
1124 0584
1121 0111
1126 DUD
1127 OUF
1128
1129
1130
1131 05'0
1132 0596
I 133 On8
I 134 019B
1135 059E
1136 015AO
1137 05AI
1138 05A3
1139 05A5
1140
1141
1142
1143
1144
1145
1146
114T
1148
114'
1150
1151
1152 05A6
1153 05AI
1154
11155 05AA
11156 05AC
115T 05AF
1151 0510
11159 05B5
1160 05aT
1161 OSIC
1162 058E
1163 05BE
1164 OSCO
1165 oaC2
1166 OSC4
116T 05C6
1168 05CI
1169 OSCA
lITO 05CC
IITI 05CF
11T2
1173
lIT4
II T5 OSDI
11T6 0504
IITT 0506
liTe 05DT
II T9 0509
1180
1181 05DC
1182 05DE
1183 05EO
1184 05E5
1185 05EA
1186 OSED
118T 05EF
1188 05FI
1189 05F4
1190 OSF6
1191 05F6
1192
11'3 05F8
1194 05FE
1195
IE 0000 E
Sf' OICO R
AI
4T
4T
E2 FI
CO
01
06 0001 R 0000 E
06 0014 R 0000 E
06 0062 R F600
IF
.9
CT
153
E2
01150
0010
015 0000
CT 02
FT
0601
0601
0606
0601
0601
MDV
MDV
MOVS'
SI,OFFSET SLAVE VECTOR TAILE
DI,OFFSET eSLAvE'_INT_pTR
INC
INC
DI
DI
FTAI
LOOP
1----21
IE
CT
CT
CT
I SK I P OVER SEGMENT
SET UP OTHER INTERRUPTS AS NECESSARY
ASSUME
SUB
MDV
MDV
MDV
MDV
OSIAISO
AX,AX
OS,AX
WORD PTR .NMI PTR,OFFSET NMI INT I NMI INTERRUPT
WORD PTR .1 NT! PTR, OFFSET PRTNT SCREEN
I PR I NT SCREEN
WORD PTR .IASI'e'_PTR+2,OF600H
- I SEGMENT FOR CASSETTE BASIC
1-----
ZERO RESERVED VECTORS
FTA21
MDV
MDV
MDV
ADD
COOP
1-----
SETUP TIMER 0 TO ILINK LED IF MANUFACTURING TEST MODE
E8 0000 E
F6 06 0012 R 20
T5 OB
261 CT 06 0020 R 0000 E
BO FE
E6 21
FI
F.,
1-----
81 3E 0072 R 1234
TI DE
B9 DOFF
BA 03F6
BO 04
EE
I FILL INTERRUPT 60 THRU &T WITH ZERO
I CLEAR 16 WORDS
I POINT TO NEXT LOCATION
OSIOATA
DOS
I ESTABLISH DATA SEGMENT
TEST
~~G_TST ,MFG_LOOP
I .... G. TEST MODE?
JNZ
MDV
MDV
DUT
STI
lOAD PTR ESI_INT PTR,OFFSET BLINK INT I SETUP TIMER TO BLINK LED
AL.OFEH
I ENABLE TI MER INTERRUPT
INTAOIIAL
I ALLOW INTERRUPTS
I SSUE A RESET TO THE HARD FILE 1F SOFT RESET
JNZ
MDV
MDV
MDV
DUT
LOOP
SUB
DUT
£2 FE
2A CO
01,60H·4
CX,I6
WORD PTR 051[01],0
01,2
FTA2
ASSUME
CALL
CMP
EE
~~SET_FLAG, I 234H
CX,OFFH
OX,03F6H
AL,04H
OX,AL
~~-;:L
DX,AL
SOFT RESET?
CaNT I NUE I F NOT
I RESET
I HOLD RESET
I REMOVE RESET
I---------------------------------------~------------------------
1 TEST .23
1
DISKETTE ATTACHIENT TEST
1 DESCRIPTION
I
CHECK IF IPL DISKETTE DRIVE IS ATTACHED TO SYSTEM.
I
1
I
•
IF
ATTACHED, VERIFY STATUS OF NEC FDC AFTER A RESET. ISSUE
A RECALIBRATE AND SEEK COMMAND TO FDC AND CHECK STATUS.
COMPt..ETE SYSTEM INITIALIZATION THEN PASS CONTROL TO THE
BOOT LOADER PROGRAM.
I
I
I
I
I
1
I
I
1---------------------------------------------------------------BO 3C
E6 80
10
BA
EE
F6
T4
F6
T4
02
03FT
E4
EI
24
E6
84
8A
CD
F6
21
00
F'AI
MDV
DUT
MDV
MDV
DUT
TEST
JZ
TEST
JZ
06 0010 R 01
55
06 0012 R 20
4E
<><><><><><><><><><><><>
<><> CHECKPO I NT IC <><>
AL,02H
I SET DATA RATE TO 2150 K 81TS PER SECOND
DX,IFTH
DX,AL
~T~E PTR .EQUIP_FLAG,IH I DISKETTE PRESENT?
eMFG TST, MFG LOOP
FIS -
MFG JUMPER INSTALLED?
GO IF YES
DISK_TESTa
FIOI
IN
JMP
AND
IF
21
00
04
13
C4 FF
T5 215
DUT
MDV
MDV
INT
TEST
JNZ
1----IA
80
EE
28
E8
03F2
IC
SUB
CAL.L.
XDR
33
85
C6
10
E8
72
FF
01
06 ODIE R 00
DE OOAO R 01
0000 E
OT
B!i 22
E8 0000 E
73 DB
80 DE 0016 R 40
AL,INTAOI
$+2
AL,OBFH
INTAOI,AL
AH,O
DLIAH
MDV
MDV
OR
CALL.
JC
MOV
CALL.
JNC
°
RESET NEC FOC
SET FOR DRIVE
VERIFY STATUS AFTER RESET
STATUS OK?
NO - FDC FAILED
I3H
AH,OFFH
Fl.
DX,03F2H
AL,ICH
DX,AL
CX,CX
'AITF
GET ADDRESS OF FDC CARD
TURN MOTOR ON, ENABLE DMA, INTERRUPTS
WR I TE FOC CONTROL REG I STER
WA I TF COUNT FOR 0.988 SECONDS
WA I T I SECOND FOR MOTOR
01,01
CH,I
eSEEK STATUS.O
SELECT DR I VE 0
SELECT TRACK I
INSURE RECAL.IBRATE
NO REAL TIME CLOCK, USE WAIT LOOP
RECALIBRATE DISKETTE
GO TO ERR SUIROUT I HE I F ERR
SELECT TRACK 14
SEEK TO TRACK 34
OK, TURN MOTOR OFF
DSK_ERRI
::t~_'AIT_FLAG,OI
Fl.
CH,34
SEEK
FI4
FI31
8E 0000 E
E8 0000 E
,-----
DR
eMFG_ERR_FLAG+ 1 ,DSK_F A I 1..1
MDV
CALL
SI,OFFSET E601
E_MSG
TURN DR I VE
AND
MDV
MDV
DUT
<><><><><><><><><><><><><>
<><>
I
<><> DISKETTE FAILED
I GET ADDRESS OF MESSAGE
I GO PR I NT ERROR MESSAGE
° MOTOR OFF
F141
80 26 OOAO R FE
80 DC
BA 0lF2
EE
I/O DELAY
ENABLE 0 I SKETTE INTERRUPTS
TURN DR I VE 0 MOTOR ON
MDV
MDV
DUT
C9
0000 E
"'6
119T
1198
I "9
1200
120 I
1202
FTAII
eRTC WAIT FLAG,OFEH
AL,Ol!H
DX,03F2H
DX,AL
ORO OFFI
ALLlfw FOR RTC WAIT
TURN DR I VE
MOTOR OF"F
FOC CONTROL.L.ER ADDRESS
°
TEST2
5-59
1-12
04-21-16
1203
1204
1205
1206
1201
1201
1209
1210
1211
1212
1213
IZI4
1215
1216
1211
1218
1219
1220
1221
1222
1223
1224
1225
1226
1221
1228
1229
1230
1231
1232
1233
1234
1235
IZ36
1231
1238
1239
1240
1241
1242
1243
"44
1245
1-----
PAGE
060C
061 I
0614
0618
06lC
0620
0623
C6
BE
19
89
19
83
89
06 0068
ODIE R
36 OOIA
36 ODIC
36 0080
C6 20
36 0082
0621
06ZA
062B
062C
062F
0630
BF' 0011 R
IE
01
B8 1414
AB
AB
R 00
R
R
R
R
1-----
pop
MDV
STOSI
STOSI
D63E
0643
0645
0648
0648
064A
F6 06 0012 R 20
15 03
E9 012E R
21
FE
00
21
BO IE
EI 0000 E
B3
2B
BO
EI
AI
15
E2
FE
75
BE
E8
04
C9
IA
0000 E
10
IB
F5
CB
EF
0000 E
0000 E
0610
0610
0613
0615
0611
068A
BI
EI
DC
16
EI
EB
DElE
0000 E
04
C4
DODO E
DE
BI_ERI
1----C_DKI
D OKI
ICOKI
F_OKI
1----B9
BO
E8
AI
EO
E3
0320
IA
DODD E
10
DO
DAtA
06tA
069C
069F'
06AI
aD
EI
AI
74
8E
0000 E
10
06
I
DEF'AULT BUFFER OF 32 BYTES
.PRINT_TlM_OUTI SET DEFAULT PRINTER TIIEOUT
G_OKI
I_OK'
F1
AX,OIDIH
AND
IN
AL,INTADI
AL,OFEH
1+'
I DEFAlLT=2D
, RS232 DEFAULT=D I
ENABLE T I MER INTERRUPTS
I/O DELAY
INTAOI,AL
CI£CK CNOS BATTERY AND CtECKSUM
"NZ
."G TST, MFG LOOP
BI OK
F''!C
MFG .JUMPER?
GO IF NOT
BYPASS I F YES
MOV
CALL
AL,CMQS OIAG+NMI
CMOS_READ
ADDRESS DIAGNOSTIC STATUS BYTE
READ I T FROM CMOS
MOV
TEST
"NZ
SI,OFFSET EI6I
:~:~~D_BAT
LOAD BAD BATTERY MESSAGE 161
BATTERY BAD?
01 SPLAY ERROR IF BAD
MOV
TEST
"Z
~~O~AD_CKSllM+BAD_CONF I G
LOAD CHECKSUM BAD MESSAGE 162
CHECK FOR CHECKSUM OR NO DISKETTE
SK I P AN:> CONT I HUE TEST I NG CMOS CLOCK
E MSG
aFS,080DDH
SHORT H_OKIA
ELSE 0 I SPL.A Y ERROR MESSAGE
FL.AG "SET SYSTEM OPTIONS" 01 SPL.AYED
SK I P CLOCK TEST I NG I F ERROR
"""
CALL
OR
1-----
061C
068F
0691
0694
0696
0698
~~,OFFSET
ES
AX,1414H
"MP
TEST
BI_OKI
0664
0666
0668
D66A
066D
D66F
0611
0613
0675
0611
06TA
~~~:::~~!~T! ~ I
.aUFFER_END,SI
ENABLE T I MER INTERRUPTS
OUT
1-----
ilia;
SET STRAY I NTERRUPT FLAG • 00
SETUP KEYBOARD PARAhETERS
OSUFFER t-EAD,!I
SET RS232 DEFAULT
NOV
STOSW
STOSW
1----E4
24
EB
E6
OINTR FLAG,ODH
5 I ,OFJ!'SET OKB BUFFER
SET PRINTER TlhEOUT DEFAULT
MDV
1----0636
0638
063A
063C
SETlP KEYBOARD PARAMETERS
MOV
MOV
MOV
MOV
MOV
ADD
MOV
PUSH
0631 B8 0101
0634 AS
0635 A8
0640 BE 0000 E
1246 0650 AI 80
1241 0652 15 01
1248
1249 0654 BE 0000 E
1250 0657 AI 60
1251 0659 14 09
1252 065B
1253 065B EI 0000 E
1254 065E 81 CD 1000
1255 0662 EB 45
1256
1258
1269
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1212
1273
1214
1275
1276
1271
1218
1219
1280
1211
IZ82
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
129a
1294
1295
1296
1297
1298
1299
t 300
1301
1302
1303
1304
1305
1306
1307
1301
1309
1310
1311
1312
FI51
"MP
S I ,OFFSET E 162
lEST CLOCK IJf"IJATINli
MOV
SUB
MOV
CALL
TEST
"NZ
COOP
DEC
"NZ
MOV
CALL
BL,04H
CX,CX
AL,CMOS REG A+NM I
CMOS READ AL,8OH
o OK
COl(
Be
DOK
ST.OFFSET EI63
E_MSG
OUTER LOOP COUNT
I NNER LOOP COUNT
GET THE CLOCK UPDATE BYTE
CHECK FOR UPDATE IN PROGRESS
GO IF YES
TRY AGAIN
DEC OUTER LOOP
TRY AGAIN
PR I NT MESSAGE
SET CMOS DIAGNOSTIC STATUS TO 04 (CLOCK ERROR)
MOV
CALL.
OR
XCHO
CALL.
"MP
~~:·~~~~_DIAG+NMI
AL..clios_CLK_FAIL
A1.,AH
CMOS WRITE
SHORT H_OK
I SET CL.OCK ERROR
I GET TI£ CURRENT STATUS
I SET NEW STATUS
I GET STATUS ADDRESS AND SAVE NEW STATUS
; MOVE NEW DIAGNOSTIC STATUS TO CMOS
1 CONTINUE
CHECK CLOCK UPDATE
MOV
MOV
CALL.
TEST
COOPNZ
.JCXZ
CX.800
AL..CMOS REG A+NMI
CMOS REiD AL.8&i
I OK
~OK
LOOP COUNT
CtECK FOR OPPOSITE STATE
TRY AGAIN
PRINT ERROR IF TIMEOUT
CHECK MEMORY SIZE DETERMINED = COtrFlGURATION
MOV
CALL
TEST
1----06A3 BE DODD E
06A6 E8 DODD E
06A9 80 3E 0015 R DC
06AE BE DODO E
0681 74 DA
06B3
0681
068A
0680
06BD
5-60
,-----
"Z
AL,CMOS DIAG+NMI
CMOS READ
AL,.-EM SIZE
H_OKTA -
MEMORY 5 I ZE ERROR
MOV
CAL.L
51 ,OFFSET E164
E_MSG
PRINT SIZE ERROR
DISPLAY ERROR
CHECK FOR CRT ADAPTER ERROR
."G ERR FLAG.OCH
sl,DrF'sE'f E401
H_OKIB
CHECK FOR MONOCHROME CRT ERROR
LOAD MONOCHROME CRT ERROR
GO IF YES
CMP
"NZ
MOV
~C:_ERR_FLAG I DOH
CHECK FOR COLOR CRT ADAPTER ERROR
CONTINUE IF NOT
CRT ADAPTER ERROR MESSAGE
CALL
E_WSG
ST,OFFSET E5DI
H_OKIBI
TEST2
WAS THE CONFIG= MEW SIZE DETERMINED?
GO IF YES
--
H_OKIAI CMP
MOV
"Z
10 3E 0015 R OD
75 06
BE DODO E
EI DODO E
1 GET THE STATUS BYTE
IBM Pe ... sonel Compute ... MACRO Assemble...
Ve ... slon 2.00
TEST2 ---- 01/24/85 POST TESTS AND INITIALIZATION ROUTINES
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1321
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1318
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
13o:J8
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
PAGE
1-----
CHECK FOR MULTIPLE DATA RATE CAPABILITY
06CO
06CO
06C3
06C4
06C6
06C8
8A
EC
24
3C
74
03Fl
MOV
F8
50
46
ANa
eMP
JZ
06CA
06CD
06CE
0600
0602
BA
EC
24
3C
74
05F7
MOV
Fa
AO
2F
0604
0606
0608
060B
060B
060C
060E
06EO
06E2
06E4
06E6
06E8
06EA
06EC
06EC
06EF
06Fl
06F2
06F4
06F5
06F7
06F9
06FB
06FC
06FE
06FF
0701
B3 OF
2B C9
BA 0lF7
..I_OK I
EC
A8
74
E2
FE
75
24
74
EB
BA
BO
EE
EB
EC
3C
15
BO
EE
EB
EC
3C
14
DX , 03FIH
AL,oX
AL I 1 1 1 I 1000B
AL,OIOIOOOOB
...I_0K3
DISIP DIAGNOSTIC REGISTER
READ 0 I SIP TYPE CODE
KEEP ONLY UNIQUE CODE FOR DISIP
D/S/P CARD - MULTIPLE DATA RATE?
IF SO JUMP
ANa
eMP
JZ
oX , 05F7H
AL,oX
AL,11110000B
AL, 10 I 000008
..I_FAIL
FIXED DISK DIAGNOSTIC REGISTER
READ F I XED 0 I SK TYPE CODE
KEEP ONLY UNIQUE CODE FOR F/D
F I XED DISK ADAPTER ?
MUST BE COMBO ELSE ERROR
MOV
SUB
MOV
BL,OFH
CX,CX
oX I OIF7H
HARD FILE STATUS PORT
IN
AL,DX
AL, D80H
...I OK2
..I-OK I
IN
IN
80
OC
F9
CB
F5
OC
26
17
TEST
JZ
LOOP
OEe
JNZ
ANa
JZ
JMP
0lF4
55
00
55
OA
AA
Be
..I OKI
AL,OCH
J OK3
SHORT ..I_FAIL
MOV
MOV
OUT
JMP
OX , IF4H
AL,055H
DX,AL
VERIFY MULTIPLE DATA RATE CAPABLE
WR I TE TO THE CYl I NDER BYTE
IN
1+'
AL,OX
AL,055H
..I FAIL
AL,OAAH
OX,AL
I/O DELAY
CHECK OAT A WR I TTEN
AL,DX
AL,OAAH
..I_0K3
OR
.MFG ERR FLAG+l,OSK FAIL;
MOV
JMP
5 I ,OFFSET E60 I
E MSG
SHORT F 15C
<><><><><><><><><><><><><>
<><> DISKETTE FAILED
; GET ADDRESS OF MESSAGE
1 GO PR I NT ERROR MESSAGE
I SK I P SETUP I F ERROR
OR
.LASTRATE I DUAL
; TURN ON DSP/COMBo FLAG
IN
GO IF NOT
WRITE ANOTHER PATTERN
1+'
;
I/O DELAY
I S DATA PATTERN THE SAME?
GO IF SO
..IJAILI
CALL
-
-
1
..I_0K31
1----0715 BO 30
0717 E6 80
0119 E8 0000 E
INITIALIZE FLOPPY FOR DRIVE TYPE
MOV
OUT
CALL
1----0000 E
26 0091 R
E4
07
OE 0010 R 40
FF
AL,30H
MFG PORT ,AL
DSK~TTE_SETUP
<><><><><><><><><><><><>
<><> CHECKPOINT 3D <><>
INITIALIZE FLOPPY
CHECK FOR 2ND DISKETTE DRIVE
CALL
MOV
OR
JZ
OR
MOV
I NSURE OAT A SEGMENT
005
AH,.DSK STATE+ I
GET STATE OF SECOND DR I VE
AH,AH IS THERE A DRIVE 2 ATTACHED?
FI5C
I SKIP IF NOT
~~~~F~~R OEQU I P _FLAG, 40H ELSE SET SECOND DR I VE I NSTALLED
SET TEST MASK FOR DR I VE PRESENT
FISC,
BO 8E
E8 0000 E
A8 co
75 22
MOV
0737 BO 90
0739 E8 0000 E
24 OF
013E 3A C4
0740 74 07
MOV
CALL
TEST
JNZ
CALL
onc
ANa
eMP
JE
AL,CMoS 01 AG+NM I
CMOS READ
AL,BAD BAT+8AD CKSUM
ROM_SCAN I
-
Al,OOFH
AL,AH
FISD
ADDRESS 0 I SKETTE TYPE BYTE
GET DISKETTE TYPES
LOOK AT SECOND DRIVE TYPE DEFINED
ARE BOTH INDICATORS ZERO
SKIP IF NO SECOND DRIVE
ARE BOTH INDICATORS NON-ZERO
SKIP IF DRIVE FOUND AND DEFINED
ANa
JNZ
Al,AH
FI50
0146 E8 0000 E
CALL
CONFIG_BAD
;----0749
0749 BO 3E
074B E6 80
BO
E8
3C
14
GET THE CMOS D I AGNOST I C STATUS
BATTERY I CHECKSUM OK
BYPASS DISK SETUP IF NOT
~~o;M~~Agl SKETTE+NMI
0142 22 C4
0744 75 03
0740
014F
0152
0754
DATA READ
eMP
JZ
0110
0710 80 OE 008B R 01
012E
072E
0730
0733
0735
=
00
-
onc
GET THE STATUS
I S THE CONTROLLER BUSY?
CONTINUE IF NOT
TRY AGAIN
DECREMENT OUTER LOOP
TRY AGAIN IF NOT ZERO
BITS 2 & 3 = 0 IF MULTI DATA CAPABLE
GO IF YES
NO MULTIPLE DATA RATE CAPABILITY
AA
00
0708 BE 0000 E
070B E8 0000 E
070E EB IE
E8
8A
OA
74
80
B4
OUTER LOOP COUNT WAI T FOR BUSY OFF
eMP
JNZ
MOV
OUT
JMP
0703
0703 80 OE 0016 R 40
071C
071 F
0723
0725
0727
1-13
04-21-86
INITIALIZE HARD FILE
FI5D.
92
0000 E
00
03
MOV
OUT
AL,3EH
MFG_PORT I AL
MOV
1 J NSURE CMOS DEF J NES TYPE OF F I XED 0 I SK
eMP
JZ
AL.CMOS DISK+NMI
CMOS READ
Al,OH
ROM_SCAN I
CALL
01 SK_SETUP
;
CALL
0756 E8 0000 E
<><><><><><><><><><><><>
<><> CHECKPO I NT 3E <><>
I NSURE TYPE I S DEF J NED
BYPASS DISK SETUP IF NOT
INITIALIZE HARD FlLE(S)
1--- ------- -- - ----------- ---- ------ - ----- - - - - - - ---------- --1 TEST .22
,
•
I CHECK FOR OPTIONAL ROM FROM C800->EOOO IN 2K BLOCKS
(A VALID MODULE HAS '55AA' IN THE FIRST 2 lOCATIONS.
;
LENGTH INDICATOR (LENGTH/SI21 IN THE 3RD LOCATION
,
AND TEST/INIT. CODE STARTING IN THE 4TH LOCATION)
I
1
I
;
0759
0759
075A
075C
075E
0161
0763
FB
BO
E6
E8
BO
E8
-----------------------------------------------------------
ROM SCAN I ,
STI
38
80
0000 E
OA
0000 E
MOV
OUT
CALL
MOV
CALL
AL,3BH
~~~_PORT I AL
ALIIO
PRT_HEX
ALLOW INTERRUPTS
<><><><><><><><><><><><>
<><> CHECKPOINT
38 <><>
SET REAL MODE OAT A SEGMENT
LINE FEED ON DISPLAY
TEST2
5-61
IBM Pereonel Computer MACRO Aee.mbl.r
Verelon 2.00
TEST2 ---- 01/24/85 POST TESTS AND INITIALIZATION ROUTINES
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
0766
ROM_SCAN I
;-----
0766
0768
076A
076C
076E
0111
OTT1
OTT3
OTT4
07TT
OTT9
OTTB
OTTO
OTTE
0780
0783
0785
0785
0189
2A
E6
EB
E6
BA
CO
02
00
04
C800
8E
57
BF
2B
8B
3B
5F
75
E8
EB
oA
"MP
OUT
MOV
ROM SCAN21
MOV
PUSH
MOV
SUB
MOV
AA55
DB
07
C7
eMP
POP
05
0000 E
04
"NZ
CALL
"MP
NEXT ROMI
ADD
ARE WE DONE.
- CMP
"L
81 C2 0080
0780 7C E2
;----078F E8 0000 E
0792 E4 64
0194 24 10
0196 14 02
0198 EB OB
1460 079A
1461 079A 80 OE 0016
1462
1463
1464 019F BE 0000 E
1465 07A2 E8 0000 E
1466 07A5
1467
1468
1469
1470
1471 07A5 BF 0906 R
1472 01A8 BE 0000
1473 07o\B
1474 01AB 2EI 8B 15
1475 07o\E BO AA
1416 01BO EE
1477 01BI EB 00
1478 07B3 IE
1419 01B4 EC
1480 01B5 IF
i 46 i OiEio ;;C AA
1482 01B8 15 06
1483 07BA 89 94 0008
1484 07BE 46
1485 07BF 46
1486 01CO
1487 07eO 47
1488 07CI 47
1489 01C2 81 FF 090C
1490 07C6 75 E3
1491
1492
1493
1494
1495 07C8 BB 0000
1496 07CB BA 03FA
1491 OlCE EC
1498 07CF A8 F8
1499 0701 75 08
1500 0703 C7 81 0000
1501 0709 43
1502 010A 43
1503 070B BA 02FA
1504 010E EC
1505 01QF A8 F8
1506 OlEI T5 08
1501 07E3 Cl 81 0000
1508 01E9 43
1509 OTEA 43
1510
1511
1512
151301EB
1514 OlEB 8B C6
1515 OTEO B1 03
1516 01EF 02 C8
151T OTFI OA C3
1518 OTF3 A2 001 I R
1519
KEY I
AL,AL
OMAI8+2.AL
; SEND ZERO TO MASK REGI STER
$.2
DMAI8+4.AL
OX.OC800H
SEND ZERO TO REQUEST REGISTER
SET BEGINNING AOORESS
OS,OX
01
01.OAA55H
aX.BX
AX.(BX]
AX.DI
01
NEXT ROM
ROM CHECK
SHORT ARE_WE_DONE
SAVE WORK REGISTER
GET TEST PATTERN
SET BX=OOOO
GET I ST WORD FROM MODULE
= TO 10 WORD?
RECOVER WORK REG I STER
PROCEED TO NEXT ROM I F NOT
GO CHECK OUT MODULE
CHECK FOR END OF ROM SPACE
I
;
I
;
;
I POINT TO NEXT 2K ADDRESS
DX.0080H
OX,OEOOOH
ROM_SCAN2
AT EOOOO YET?
GO CHECK ANOTHER ADD.
CALL
DOS
IN
AND
AL,STATUS PORT
SET OAT A SEGMENT
I S KEYBOARD UNLOCKED?
SHORT KEYlO
NO - SET ERROR FLAGS AND PR I NT MESSAGE
GO IF OFF
"Z
"MP
OR
ASSUME
MOV
~~y~YBO_"iiiH
CALL
OMFG ERR FLAG+1 ,KEY FAIL;
<><><><><><><><><><><><><><>
I
<><> KEYBOARD I S LOCKED <><>
OSIDATA
I PRINT LOCKED MESSAGE
{302}
SI.OFFSET E302
E_MSG
KEYIOI
; =:==or==::===========
SETUP OPR I NTER BASE
; ==============';=====
R
MOV
MOV
01 ,OFFSET F4
SI,O
MOV
MOV
OUT
DX,CSr[OI)
AL.OAAH
OX,AL
GET PR I NTER BASE ADDRESS
WRITE DATA TO PORT A
"MP
PUSH
IN
$.2
1/0 DELAY
BUS SETTLI NG
READ PORT A
POP
OS
eMP
"NE
AL.OAAH
FI T
;~R INTER_BASEISI) ,OX
MOV
INC
INC
I
OS
AL,OX
R
;-----
R 03F8
FI81
R 02F8
;----Fl91
1-----
DATA PATTERN SAME
NO - CHECK NEXT PR I NTER CARD
YES - STORE PRINTER BASE ADDRESS
i NCRE:ME:NT TO NEXT WORD
51
INC
01
INC
01
CMP
01 ,OFFSET F4E
.JNE
FI6
;=============
SETUP RS232
;=============
MOV
MOV
IN
TEST
.JNZ
MOV
INC
INC
MOV
IN
TEST
.JNZ
~~6
; PO I NT TO NEXT BASE ADDRESS
ALL POSS I BLE ADDRESSES CHECKED?
PRT_BASE
BX.O
OX.3FAH
AL.OX
AL.OF8H
FI8
ORS232_BASEIBX) .3F8H
BX
BX
DX.2FAH
AL.DX
AL,OF8H
FI9
:~S232_BASEIBXJ ,2F8H
BASE END
SETUJS' RS232 CARD #2
SET_TOO
I
INSURE CMOS CLOCK IS VALID
ENABLE HARDWARE INTERRUPT IF MATH PROCESSOR (8028T)
MOV
OUT
AL.40H
MFG_PORT. AL
MOV
~~:~~FSET OIO_ROM_INIT
E3
00
3D
XOR
MOV
FNINIT
"MP
FNSTCW
PUSHA
POPA
25 1F3F
3D 033F
13
AND
eMP
"NE
TEST2
CHECK IF RS232 CARD 2 ATTACHED
READ I NTERRUPT 10 REG I STER
INSURE CMOS CLOCK HAS VALID HOURS.MINUTES.SECONDS
07F9 BO 40
01FB E6 80
as
; SETUP RS232 CARD # t ADDRESS
K.
OTFO
0800
0802
0804
0806
0808
080A
080B
080C
0810
0814
0067 R
CO
POINTER TO RS232 TABLE
CHECK IF RS232 CARD 1 ATTACHED?
READ I NTERRUPT 10 REG I STER
INC
BX
1==== == = = == = == == = ===== = = = = = == = = = === == = = = = = ====== == = = == == = = = = = = = = =
SET UP OEQUIP_FLAG TO INDICATE NUMBER OF PRINTERS AND RS232 CARDS
; ===== .. " = = .. = ...... == ...... = .. = = =
= = •• = =:= == = = === = = == = = = = = = = = = == = == = = == =
I BASE ENOl
MOV
AX,SI
; SI HAS 2- NUMBER OF RS232
MOV
CL.3
; SHIFT COUNT
AL.CL
I ROTATE RIGHT 3 POSITIONS
ROR
OR
AL, BL
; OR I N THE PR I NTER COUNT
MOV
BYTE PTR OEQUIP_FLAG+I.AL
I STORE AS SECOND BYTE
CALL
;-----
5-62
OFFSET OF PRINTER ADDRESS TABLE
Fill
01F6 E8 0000 E
BF
33
89
DB
EB
09
60
61
81
81
75
I F NOT
TEST FOR KEYBOARD LOCKED
I
R 80
1520
1521
1522
1523
1524
1525
1526
1521
1528
1529
1530
1531
1532
1533
1534
1535
1536
1531
1538
1539
1540
SET oMA MASK AND REQUEST REGISTERS
SUB
OUT
1450 0789 81 FA EOOO
1451
1452
1453
1454
1455
1456
1457
1458
1459
1-14
04-21-86
WORD PTR (01) ,AX
$.2
WORD PTR [01)
<><><><><><><><><><><><>
<><> CHECKPOINT 40 <><>
ADDRESS WORK STORAGE LOCATION
CLEAR WORK REGISTER
(AH) = 0 (NO 287)
CLEAR THE WORK LOCAT I ON
INITIALIZE THE 8028T WITH NO WAIT
; DELAY
; WRITE THE CURRENT 80287 CONTROL WORO
; TIME FOR 8028T TO RESPOND
CLEAR UNUSED 80287 81 TS
IS THE 8028T INSTALLED?
GO IF MATH PROCESSOR IS NOT INSTALLED
1-15
04-21-86
1541
1542
1543
1544
1545
1546
1547
I 548
I 549
1550
1551
1552
I 553
1554
1555
1556
155,7
15t58
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
uno
1571
1572
1573
1574
1575
1576
15ll
1578
1579
1580
158'
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
16\0
16\ I
16'2
1613
1614
1615
1616
1617
1618
16\9
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
'645
1646
1647
'648
1649
1650
1651
1652
I 653
1654
0816
0819
081A
0818
081F
9B DO 3D
60
61
F7 05 B8BF
75 08
0821
0823
0825
0827
0829
0829
082C
082E
0830
E4
24
B4
E6
A'
OF
02
A'
AD
24
3A
74
0010 R
02
C4
08
FSTSW
PUSHA
POPA
TEST
"NZ
IN
AND
MoV
OUT
MoV
AND
eMP
"E
XoR
CALL
1-----
E4
24
EB
E6
C6
AL, BYTE PTR OEQU I P_FLAG
AL,002H
AL,AH
OK_287
GET LOW EQU I PMENT FLAG
STRIP OFF OTHER BITS
DOES CMOS MATCH HARDWARE ?
SK I P IF EQU I PMENT FLAG CORRECT
BYTE PTR OEQUIP FLAG,2H
CONFIG_BAD
-
ELSE SET 80287 BIT TO CORRECT VALUE
AND SET THE CONF I GURAT I ON ERROR FLAG
C6
BO
E8
B9
E8
80
"MP
OUT
MoV
06 0096 R AO
F2
0000 E
0671.
0000 E
26 0096 R IF
;-----
B4
B2
FE
CD
FE
72
0879 E8 0000 E
087C
AH,OIOH
DL.081H
OHF NUM
13H.HF NUM
F15-e:
DR
eMP
MoV
,----06 0015 R AA
64
10
40
81. 0005
0000 E
DE
0000 E
20
DC
IN
AND
"NZ
MoV
ERR WAITs
CALL
MoV
CALL
TEST
"Z
TEST
"NZ
08AA BE 0000 E
08"0 E8 0000 E
MoV
CALL
,-----
-
3F
80
00
16
FC 3B
F3
g~~~ PTR ORESET _FLAG, 64H: ~F~H~~~ ~~E=og~GNT FOR ERROR ( 5)
ERR_WAIT
I GO IF NOT
->
SET ERROR FLAG
OMFG ERR FLAG. OAAH
AL, STATU! PORT
DX,5
INDICATE ERROR
CHECK KEY LOCK STATUS
I S THE KEYBO ...RD LOCKED
CONT I NUE MFG MODE I F NOT LOCKED
ELSE
5 SHORT BEEPS FOR MFG SETUP ERROR
ERR BEEP
AL,i!MOS DUG
CMOS READ
"'L,BAO CONFIG
ERR_WK'fY
BEE~S FOR ERROR (S)
... DDRESS CMOS
GET THE DI ...GNOSTIC STATUS BYTE
CHECK FOR B"'D HARDWARE CONFIGURATION
SKIP IF NOT SET
BP.08000H
ERR_WKEY
ELSE CHECK FOR E161/E162 POSTED
SKIP IF DISPLAYED BEFORE NOW
SI,OFFSET E162
P _MSG
ELSE 0 I SPL'" Y ~ OPT IONS NOT SET ~
WITH NON HALTING ROUTI!'4E
:75~~~D
_I i'JH
IN
AND
"NZ
AL,STATUS PORT
AL,KYBD Ii'JH
ERR_.... IT2
MoV
S I ,OFFSET F3D 1
P_MSG
DISPLAY' (RESUME
ERR_WI. I T~~V
CALL
1-----
BO
E6
B4
CO
80
75
CHECK (BP) = NON-ZERO
(ERROR HAPPENED)
SKIP PAUSE IF NO ERROR
CHECK FOR "UNLOCK SYSTEM UNIT KEYLOCK" MESSAGE REQUIRED
CALL
,-----
B4 01
2B 02
CO 17
GET TEST DR I VE READY COMMAND
POINT TO SECOND FIXED 01 SK
TELL BIOS IT HAS TWO DRIVES
CHECK READY THROUGH BIOS
RESTORE CORRECT COUNT (RETAIN CY)
SK I P IF SECONO DR I VE NOT READY
SECOND D~ I VE NOT DEF I NED
SET CONFIGURATION BAD
ERR WKEYa
08B6 BE 0000 E
08B9 E8 0000 E
08BC
08BC BE 0000 E
08BF E8 0000 E
I
I
MF'G RUN I N MODE
MoV
08A4 F7 C5 8000
08A8 75 06
08BO
08BO E4 64
0882 24 10
08B4 75 06
I CHECK FOR TWO DR I VES DEF I NED BY CMOS
I SKIP TEST IF TWO DRIVES DEFINED
F15~
CALL
F'5Ga
1---- -----------------------------------1
TEST FOR ANY ERRORS (BP NOT ZERO)
s
I --- - ------------------------------------
"NZ
E8
aD
E8
A8
74
, CLEAR MFG ERROR FLAG
OKB FLAG 3,RD ID+SET NUM LK
I SET READ 10 COMMAND FOR KBX
AL,KB READ 10T GET THIS SYSTEMS KEYBOARD 10 REQUEST
SND DATA , USE KEYBOARD TRANSMISSION ROUTINE
CX,T658
I SET DELAY COUNT TO 25 MILLISECONDS
WI. I TF.'
I WAIT FOR READ 10 RESPONSE (20 MS)
OKB_FLAG_3,NOT RD_ID+LC_AB+SET_NUM_LK
I RESET READ 10 COMMAND
OHF NUM,2
0880 80 3E 0072 R 64
0885 BA 0002
0888 75 OE
0895
0898
0898
0898
0890
08AO
08A2
ENABLE TIMER AND KEYBOARD INTERRUPTS
I/O DELAY
INTAOI,AL
OWFG_ERR_FLAG,O
eMP
"E
C6
E4
24
75
AL,INTAOI
AL,OFCH
MOV
MOV
INC
INT
DEC
.JC
087C DB ED
087E 74 55
088A
088F
0891
0893
..
,
CHECK FOR SECOND FIXED DISK PRESENT BUT NOT DEFINED
"E
10
81
06 0075 R
13
OE 0075 R
03
, RESET ALL KEYBOARD STATUS FLAGS
READ KEYBOARD 10 TO INITIALIZE KEYBOARD TYPE AND NUM LOCK STATE
NOV
MOV
CALL
NOV
CALL
AND
01562 80 3E 0075 R 02
01567 74 13
WORD PTR OKB_FLAG,O
ENABLE KEYBOARD/TIMER INTERRUPTS
IN
AND
21
FC
00
21
06 00 I 5 R 00
,-----
08C2
08C4
08C6
08ce
08ce
08CA
oacc
DaCE
0800
0803
GET THE SLAVE I NTERRUPT MASK
ENABLE 80287 INTERRUPTS
SET WORK REGI STER FOR 80287 FOUND
SET KEYBOARD STATE FLAGS
MoV
,-----
0869
086B
0860
0871
0873
08ll
ALL BITS SHOULD BE OFF (OR ERROR)
GO IF NOT INSTALLED
AL,INTBOI
AL,ODFH
AH,002H
INTBO I JAL
OK_287a
083A C7 06 00 I 7 R 0000
0840
0852
0854
0857
085A
0850
I STORE THE STATUS WORD (WITH WAIT)
1 T I ME FOR 80287 TO RESPOND
WORD PTR [DI),OB8BFH
NO_287
NO_287s
0832 80 36 00'0 R 02
0837 E8 0000 E
083A
0840
0842
0844
0846
0848
WORD PTR [01)
= "Fl"
S I ,OFFSET F3D
P_MSG
INITIALIZE PRINTER
MoV
SUB
INT
ERR W"'ITI r
MOV
OUT
MoV
INT
eMP
"NE
CHECK I F RESUME MESSAGE NEEDED
1 S THE KEYBO ...RD LOCKED
SKIP LOCK MESSAGE IF NOT
I ERROR MESS ...GE FOR KEYBOARD LOCKED
KEY)' FOR ERRORS
MESS~GE
; RESUME ERROR
(ALTERNATE DISPLAY DEVICE)
"'H, I
DX,DX
FIRST PRINTER
I1H
AL,3FH
MFG PORT ,AL
AH.OO
16H
AH,3BH
ERR_WAITI
<><><><><><><><><><><><>
<><> CHECKPO I NT 3F <><>
; W... IT FOR 'FI' KEY
TEST2 5-63
1-16
04-21-86
'655 0105
1656 0105 F6 06 00 t2
'651 08DA 11 03
'658 08DC E9 0000 E
'659 OIDF 10 3E 0012
'660 08E4 14 06
'661
1662 08E6 SA 0001
1663 08E9 E8 0000 E
1664
1665
1666
1661
1661 08EC E8 0000 E
1669
1670
1671
1612 08EF 2A E4
1613 08FI AD 0049 R
1614 08F4 CD 10
1615
1616
1611
1611 08F6 19 0lF4
1619 08F9 IF DOAO
1610 08FC 21 CO
1611 08FE 8E CO
1612 0900 261 19 05
1613 0903 83 C7 02
1684 0906 E2 FI
1685
1686
1681
1688 0901 81 ---- R
1619 0901 IE DO
1690 0900 Be 0400 R
1691
1692
1693
1694 0910 E4 21
1695 0912 24 F8
1696 0914 EB 00
1691 0916 E6 21
1691
1699
1100
1101 0918 10 3E 0012
1102 0910 11 02
1103 09lF E8 5C
1104
1105
1106 0921
1101 0921 E4 AI
i lUD u'i2i 24 F"u
1109 0925 E8 00
1110 0921 E6 Al
1111
1112
1113
1114
1115
1116
1111
1111
1719092980 41
1120 0928 E6 80
1121
1122 0920 80 8F
1123 09. E6 10
1124
1125
1126
1121 0931 C6 06 0012
1121 0936 18 EOOO
1129 0939 IE CO
1130 0938 28 FF
1131 0930261 18 05
1132 0940 53
1133 0941 58
1134 0942 3D AA55
1135 0945 9C
1136 0946 26. 19 05
1131 0949 E4 61
1138 0948 DC DC
1139 0940 E6 61
1140 094F 24 F3
1141 0951 E6 61
1142 0953 9D
1143 0954 11 21
IT44
1145
1146
1141 0956 IE
1141 0951 06
1149 0951 IF
1110 0959 28 DB
1151 0951 EI 0000 E
1152 095E IF
1153 095F 15 IC
1154
1155
1156
1151 0961 BO OF
1151 0963 E6 10
1159
1160 0965 E4 61
1161 0961 24 F3
1162 0969 E6 61
1163
1164 0961 C7 06 0061
t 165 0911 IC 06 0069
F15A_01
R 20
R 64
FI5AI
TEST
JNZ
~~~~_TST ,MFG_LOOP
CMP
JZ
START I
I GO LOOP POST
~T: PTR ORESET_FLAG,64H: ~~A:~N B~~ IF YES
MOV
CALL
DX.I
ERR_BEEP
......
, ••••••• c •••
1············=··
,-----
SET TIrE OF DAY
CALL
1-----
CLEAR DISPLAY SCREEN
I CLEAR FLAGS
SUB
MOV
INT
I CLEAR SCREEN
1-----
CLEAR DESCRIPTOR TABLES
F201
""V
MOV
I CLEAR IK
• POINT ES TO START OF DESCRIPTORS
SUB
MOV
MOV
I CLEAR
I POINT TO NEXT LOCATION
I CONT I NUE TILL DONE
AOO
LOOP
SET POST SYSTEM STACK
MOV
MOV
MOV
'1-----
R 64
1-----
AX,ABSO
SS,AX
SP, OFFSET OTOS
I GET THE POST STACK SEGMENT
ENSURE THAT MASTER LEVEL 2 ENABLED
IN
ANO
1-----
1 I SHORT BEEP (NO ERRORS)
a=.-=.
FI5BI
1-----
:G I~U:~T IN MODE
.OUT
AL,INTAOI
AL,OF'BH
I
GET THE CURRENT MASK
1·2
I
I/O DELAY
INTAOI,AL
TEST FOR MFG RUN-IN TEST
eMP
JNZ
JMP
~~E2~~R ORESET_FLAG,64H: ~ ~N~~ MFG RUN-IN TEST?
SHORT SHUT4
I BOOT LOAD IF YES
UNMASK SLAVE HARDWARE INTERRUPT 9 (LEVEL 7 I )
END_211IIN
ANO
oJ"
OUT
AL,INTBOI
Ai...uF"OH
1+2
(NTIOI,AL
I GET THE CURRENT MASK
I I/O DELAY
I SET NEW MASK
1-----------------------------------------------------------------I TEST FOR SYSTEM CODE AT SEGMENT EOOO 1a
FIRST WORD. AA55H
LAST IYTE • CHECKSUM
ENTRY POINT = FIRST IYTE + 3
I IF TEST IS SUCCESSFUL A CALL FAR TO THE ENTRY POINT IS EXECUTED
I
I
I
1------------------------------------------------------------------
<><><><><><><><><><><><>
<><> CHECKPOINT 41 <><>
MOV
OUT
AL.4IH
flFG_PORT ,AL
1
I
MOV
OUT
AL.CMOS SHUT DOWN+NMI
CMOS_PO'R'T. AL-
I
:~!~E:~:H ORE SET_FLAG, 0
I CLEAR FLAG
I SEGMENT OF SYSTEM CODE
INSURE NMI OFF AND CMOS AT DEFAULT
ENDIF
R 00
MOV
MOV
MOV
SUB
MOV
PUSH
POP
eMP
PUSHF
MOV
IN
OR
OUT
ANa
OUT
PQPF
JNZ
1-----
I CHECK FOR AA55
I BUS SETTLE
ESI[DI] ,AX
AL.PORT B
1 CLEAR POSSIBLE PARITY CHECK
I SAVE FLAGS
~~A=-;~~R_OFF
I TOGGLE I/O-PARITY CHECK ENABLES
~~~=-;~~R_ON
SHUT4
RESTORE FLAGS
CONTINUE
as
ES
os
aX,BX
ROM CHECKSI.JM
OS SHUT4
I SET SEGMENT TO TEST
I STARTING OFFSET
; RESTORE DATA SEGMENT
I GO I F CHECKSUM NOT OK
ENABLE NMI AN) I/O-MEMORY PARITY CHECKS
AL, CMOS SHUT DOWN
CMOS_POIfr ,AL-
1 ENABLE NMI AN) SET DEFAULT ADDRESS
OUT
IN
ANO
OUT
~~~~=-;~~R_ON
AL.PORT B
I ENABLE PAR 1TY
I ENABLE IlEMORY PAR ITY Ct£CK /
MOV
MOV
010 ROM INIT,0003H
01 O~OM:SEG, ES
MOV
AL,42H
Fa_PORT,AL
MOV
R 0003
R
01,01
AX,ESI[OI]
BX
BX
AX.OAA55H
CHECKSUM SYSTEM CODE
PUSH
PUSH
pap
SUB
CALL
pap
JNZ
1-----
ES,AX
I/O CHECK
SET THE OFFSET
SET THE SEGMENT
1166
1161 0915 BO 42
'168 0911 E6 80
5-64
TEST2
OUT
<><><><><><><><><><><><>
<><> CHECKPO I NT 42 <><>
1-11
04-21-216
\169
1110
1111
1112
1113
1114
1115
1116
1111
11121
1119
1180
11211
1182
1183
11214
11215
1186
11211
112121
1189
1790
1191
In2
1193
1194
In5
In6
1191
1198
1199
\ 800
180\
1802
1803
1804
1805
1806
1801
1808
1809
1810
1811
1812
1813
1814
1815
1816
1811
18121
1819
1820
1821
1822
1823
1824
1825
1826
1821
1828
1829
1830
1831
1832
1833
1834
1835
1836
len
t 838
In.
UI4D
1841
1842
1843
1844
1845
1846
1841
1848
1849
1850
1851
1852
1853
1854
1855
;-----
EXIT TO SYSTEM CODE
1-----
ENABLE NM I
0919 FF IE 0061 R
0910
091F
0982
09214
09216
BO
Ee
E4
24
E6
OF
0000 E
61
F3
61
CALL
SHUT4a
MOV
CALL
IN
ANa
OUT
OWORD PTR OIO_ROM_INIT
AL, CMOS SHUT DOWN
CMOS READ
AL,Pi5'RT B
~~R~~::!tR_ON
092121 BO 43
0geA E6 50
0gec FB
MOV
OUT
STI
AL,43H
MFG_PORT. AL
09210 CD 19
INT
I.H
PADING
1 ENABLE MEMORY PARITY CHECK /
I/O CHECK
<><><><><><><><><><><><>
<><> CHECKPOINT 43 <><>
ENABLE INTERRUPTS IF DISABLED
1 GO TO BOOT LOADER
INSERT PADDING
GET BLANK CHARACTER COUNT
NEAR
CX,15
PAOli
BO
E8
E2
BO
E8
C3
MOV
20
0000 E
F9
20
0000 E
CALL
LOOP
MOV
CALL
MOV
02
F3
CA 30
CX,5
01,01
OX.OX
OIV
OR
PUSH
LOOP
1----0000 E
CONVERT AND SAVE
MOV
SUB
F6
MOV
INC
2E I eA 04
46
Ee 0000 E
41
E2 F6
58
C3
09CF 20 4B 42 20 4F 48
0.05 20
• 090&
090&
BX
DL.30H
OX
PRT_DIV
I OF 5 NIBBLES XX.XXX K8
, 0 I SPLAY REGEN BUFFER POS I T I ON
I DIVIDE BY 10
I MAKE INTO ASCII
; SAVE
DISPLAY LAST OK MEMORY
PRT DECI
POP
CALL
F9
0001
09CF R
PRINT "00000 KB OK"
SAVE WORK REGI STER
SET DEC I MAL CONVERT
NEAR
AX
BX,IO
PRT DIVa
XOR
89 0005
58
E8
41
E2
B9
8E
I GET FILL SPACE
1 WRITE A SPACE
I LOOP TILL I NSERT DONE
I GET DASH CHARACTER
; WRITE TO DISPLAY
ENoP
PROC
PUSH
89 0005
28 FF
33
Fl
50
52
E2
AL, '
PRT HEX
PADT
AL, ' - '
PRT_HEX
RET
PADING
,-----
0983
0986
09B6
0981
098A
098B
09BO
09CO
09C3
09C3
09C6
09Cl
09CA
09CB
09tO
09CE
PROC
MOV
B9 OOOF
09AO
09AO 50
09A I BB OODA
09A4
09Al
09A9
09A9
09A8
09AD
0980
0981
; ENABLE NMl AND READ DEFAULT ADDRESS
1 OPEN STANDBY LATCH
I ENABLE PARITY
HLT
098F F4
0990
0990
0993
0993
0995
0998
099A
099C
099F
09AO
,GO TO SYSTEM COOE
; VIA CALL THROUGH DATA AREA LOCATION
INTERRUPTS + ENTRY FROM SHUTDOWN WITH BOOT REQUEST
LOOP
MOV
MOV
PRT LOOPa
MOV
INC
CALL
INC
LOOP
POP
CX.S
AX
, RECOVER A NUMBER
PROT PRT HEX
01
I POINT TO DISPLAY REGEN BUFFER
PRT DEC
CX,l5'FFSET F3B_PAD-OFFSET F3a
I LOAD MESSAGE LENGTH
SI.OFFSET F3B
1 POINT TO PRINT' K8 OK'.'
MESSAGE
AL,CSa [SI]
51
~~OT _PRT_HEX
PRT LOOP
AX -
,
I NCREMENT BUFF PTR
1 RECOVER WORK REG I STERS
RET
F3B
DB
, KB OK'
~::-~~O ~~U
.LI!T
PRT_OK
1 OK MESSAGE
1 PAD A SPACE
ENoP
-----------------------PRINTER TABLE
I
1-----------------------;
I
0906 03BC
0905 olle
090A 0218
090C
.4
09DC
090C
POST2
CODE
'4E
DW
DW
DW
LABEL
03BCH
031eH
0218H
WORD
ADDRESS OF MONOCHROME PARALLEL ADAPTER
BASE ADDRESS STANDARD PARALLEL ADAPTER
ADDRESS OF ALTERNATE PARALLEL ADAPTER
ENDP
ENDS
END
TEST2
5-65
I-I
04-21-86
I
PAGE 118,121
TITLE TEST] ---- 06/10/85
.286C
2
3
••
6
T
S
, DESCRIPTION
•
I
I
10
II
THE PROCESSOR I S PUT I N PROTECTED MODE AND
THE FOLLOWING FUNCTIONS ARE VERIFIED
I
12
13
I
I
I.
I
15
16
OT
I
I
IS
19
20
21
22
23
2.
25
26
2T
20
2.
30
31
32
33
3.
3.
36
3T
3S
39
•0
".2
••••
••
••
"
••5.
43
• T
.0
;
I. VER I FY PROTECTED MODE
TH~ MACHINE STATUS IS CHECK FOR VIRTUAL MODE
2. PROGRAMMED INTERRUPT TEST
AN PROGRAMMED INTERRUPT 32 IS ISSUED AND
AND VERIFIED
3. EXCEPTION INTERRUPT 13 TEST
A D~SCRIPTOR SEGMENT LIMIT IS SET TO ZERO
AND A WR'ITE TO THAT SEGMENT I S ATTEMPTED
AN EXCEPTION 13 IS EXPECTED AND VERIFIED
4. LOT/SOT LTR/STR TEST
'
LOAD LOT REG I STER AND VER I FY CORRECT
LOt.D TASK REGISTER AND VERIFY CORRECT
THEY ARE VERIFIED VIA THE STORE INSTRUCTION
5. THE CONTROL FLAGS OF THE 286 FOR DIRECTION
ARE VERIFIED VIA THE STO AND CLD COMMANDS
I N PROTECTED MODE
6. BOUNP INSTRUCTION TEST (EXCEPTION INT 5)
CREATI!: A SIGNED ARRAY INDI;X WITHIN AND
OUTSIDE THE LIMITS,.
CHECK THAT NO EXC INT
IF WITHIN LIMIT AND THAT AN EXC INT 5
OCCURS IF OUTSIDE THE LIMITS.
7. PUSH ALL POP ALL TEST
SET GENERAL PURPOSE REGISTERS TO DIFFERENT
VALUE·S ISSUE A PUSH ALL, CLEAR THE REGISTERS
ISSUE A POP ALL. AND VERIFY CORRECT.
8. CHECK THE VERR/VERW INSTRUCTIONS
THE ACCESS BYTE I S SET TO READ ONLY THEN TO
A WRITE ONL.Y AND THE VERR/VERW INSTRUCTIONS
ARE VERIFIEb •
9. CAUSE AN INTERRUPT 13 VIA A WRITE TO A
READ ONL. Y SEGMENT
10. VER·IFY THE ARPL. INSTRUCTION FUNCTIONS
SET THE RPL. FIELD OF A SEL.ECTOR AND
VERIFY THAT CURRENT SEL.ECTOR RPL IS SET
CORRECTLY •
II. VERIFY THE L.AR INSTRUCTION FUNCTIONS
:~: ~~:I~~G T~~I~S~E~~~~R¥~~~ON
FUNCTIONS
I
1--------------------------------------------------------
•0
52
POST EXCEPTION INTERRUPT TESTS
.LIST
1-- - ------------------------------- - ---- - - - --------- ---I T£5T.20
,
ADD J T I ONAL PROTECTED (V I RTUAL MODE) TEST
CODE
0000
SEGMENT BYTE PUBL.I C
53
56
OT
.0
••
•0
61
.2
.3
••
.5
0000
POST3
0000 £8 0000 E
0003 80 FO
0005 E6 80
PUBL.IC
POST3
EXTRN
£XTRN
EXTRN
EXTRN
CMOS WRITEINEAR
OOS i NEAR
PROC SHUTDOWN I NEAR
SYSliiilTllNEAR
ASSUME
PRoe
CALL.
CSICOCE
MOV
OUT
AL.,OFOH
MFG_PORT ,AL
SET DATA SEGMENT
OOS
<><><><><><><><><><><><>
<><> CHECKPOINT FO <><>
66
.T
,-----
SET SHUTDOWN RETURN 7
6S
6.
TO
0007 B8 018F
OOOA £8 0000 E
MOV
CALL.
TI
,-----
T2
ENABLE PROTECTED MODE
T3
T.
T.
T.
11
0000
0010
0012
001$
BC 0000
Sf; D4
Be 8000
£8 0000 E
MOV
MOV
MOV
CALL
~~:;~ST_SS
, SET STACK FOR SYSINITI
SP,POST SP
SYSINITT
, GO ENABLE PROTECTED MOCE
TS
19
SO
SI
02
03
S'
;-----
0018
0018
0010
GOlF
88 0008
8E CO
8E 08
261 Cl 06 005,., 0000
S5
0026 261 C6 06 Dose 00
SS
002C BE 0058
002F 8£ 06
0031 ~C FFFD
S'
OT
8'
'0
,-----
SET TEMPORARY STACK
~~:~~T_PTR
MOV
MOV
MOV
MOV
MOV
MOV
MOV
OS,AX
ESISS TEMP.BASE LO WORD,O
~T~;SP~~M~SI (SS:TEMP.BASE_HI_BYTEI ,0
MOV
SP ,MAX_SEG_L.EN-2
55,51-
VERIFY PROTECTEO MODE
91
'2
93
••
.5
••.T
'S
••
100
101
102
103
10.
10'
106
lOT
100
10.
110
III
112
113
II.
0034
0031
003A
OOSC
OF
A9
15
£9
01 EO
QOOI
c)!
02CD R
1-----
80 80
E6 88
CD 20
28 C9
£4 88
LOOP 1 I
22 CO
EO FA
14 03
1-----
TEST3
; GET THE MACHINE STATUS WORD
I
"MP
ERROR_EXIT
1 ERROR 1F NOT
MOV
OUT
AL.,OFIH
MFG_PORT ,AL
ARE WE I N PROTECTED MODE
<><><><><><><><><><><><>
<><> CHECKPO I NT F I <><>
INTERRUPT TEST (PROGRAMMED INTERRUPT 32)
MOV
OUT
INT
SUB
IN
AND
AL,OBOH
OMA PACE+OAH,AL
32 CX,CX
AL,OMA_PAGE+OAH
AL,AL
LOOPNZ
LOO~I
"Z
"MP
0053 £9 02CD R
5-66
AX
OOFH,OOlH,OEOH
*~, iIRTUAL_ENABLE
TEST
aOaF 80 FI
0041 E6 80
0043
0045
0041
0049
0048
0040
004F
0051
SMSW
OB
"NZ
TT 2
ERitOR_EXIT
SET EXCEPT I ON FLAG
FOR INTERRUPT 10
INTERRUPT
WAIT FOR INTERRUPT
I DID THE I NTERRUPT OCCUR?
I MISSING INTERRUPT
CAUSE AN EXCEPT I ON INTERRUPT (GENERAL PROTECT I ON INTERRUPT 130)
ISM P.rson.1 Comput.r MACRO A ••• mbl.r
V.ralon 2.00
TEST3 ---- 06/10/85 POST EXCEPTION INTERRUPT TESTS
115
116
lIT
118
0056
0058
005A
005C
SO
E6
80
E6
F2
80
90
8S
"'
120
121
122
123
12.
12'
12.
12T
128
129
130
131
'32
133
13.
13.
136
13T
138
139
140
141
142
143
MOV
OUT
MOV
OUT
1----1----005E CT 06 0048 0000
<><><><><><><><><><><><>
AL,OF2H
MFG PORT ,AL
AL,'DH
DMA_PAGE+OAH,AL
<><> CHECKPOINT F2 <><>
SET INTERRUPT 13 FLAG
FOR THE I NTERRUPT HANDLER
MODIFY DESCRIPTOR TABLES
SET TEMPORARY ES DESCRIPTOR TO SEGMENT LIMIT
MOV
1-----
1-2
04-21-86
OSIES_TEMP.SEG_LIMIT,O
I SET SEGMENT TO 0
CPLO, DATA ACCESS RIGHTS
0064 C6 06 0040 93
0069 C6 06 004C 0 I
006£ CT 06 004A 0000
MOV
MOV
MOV
BYTE PTR OSI tES TEMP.OATA ACC RIGHTS) ,CPLO DATA ACCESS
BYTE PTR oSI (ES-TEMP.BASE-HI §YTE) ,01
I oli ALL-TESTS ON 2ND 64K
WORD PTR 051 tES:TEMP.BASE:LO:WORO) ,a
00T4 6A 48
00T6 aT
PUSH
BYTE PTR ES TEMP
ES
-
POP
1----OOTT
0019
OOTC
OOTE
0080
0082
0084
0086
28 FF
261 88 05
2B C9
E4 8B
22 CO
EO FA
T4 03
E9 02CO R
'"
I.'
,.7
,.0
'",.,
LOOP2,
I
CAUSE AN EXCEPTION 13 INTERRUPT
5UB
MOV
SUB
IN
AND
01,01
AX,ESIIOI]
CX,CX
LOOPNZ
"
"Z
"MP
.
:~:~~A_PAGE+OAH
I TH I S SHOULD CAUSE AND EXCEPT I ON
I WAIT FOR INTERRUPT
I 0 I 0 THE I NTERRUPT OCCUR 1
LOOP2
CONTINUE IF INTERRUPT
MISSING INTERRUPT
ER~OR_EXIT
I --- - --- ---- - - --- - -- - -- --- - --------- - - --I
I ••
I
VERIFY 286 LOT/SOT LTR/STR
J
INSTRUCTIONS
I DESCRIPTION
1
LOAD LOT REGISTERS WITH A
OESCR I PTOR AND VER I FY CORRECT
,
I ••
I
,.2
153
1---------- ----------------- --------- ----
I ••
I ••
WR I TE TO 286 LOT REG I STER
".,.7
I ••
,.0
,.,
,.2
,.3
I.'
,.7
I.'
15'
I ••
I ••
0089
0089 BO F3
008B E6 80
0080 BF 00T8
,.0
,.,
,.2
I ••
I ••
I ••
I ••
,.7
I.'
"0
I ••
,.,
,.2
'"'"
0090 OF
0091
0091 8B OT
0093
0091
009' 00
0093
MOV
OUT
MOV
+
+ 110000
DB
+ 110001
LABEL
ORG
DB
ORG
1----0095
0096
0096
0098
0096
0096
0098
0098
009B
009E
+ 110003
LABEL
ADD
ORG
DB
ORG
AND
COP
"NZ
25 00F8
3D 0018
T5 IB
;----OOAO BF 0068
+ 110004
00A6 2B CO
'"
00A8
00A9
00A9
OOAB
00A9
00A9
00A8
00A8
OOAE
OOBI
OF
00B3
0084
0085
00B6
0089
008B
OOB£
008E
OOCI
00C3
00C6
00C6
OOCT
FD
9C
58
A9 0200
T4 03
E9 02Ca R
217
21.
21'
220
221
222
22.
22.
225
22.
227
22.
88 C8
+
+ ?10006
+
+ 11000T
25 00F8
3D 0068
T5 08
1-----
CLEAR AX
GET THE LOT SELECTOR
STRIP TI/RPL
CORRECT SELECTOR?
GO IF NOT
OI,POST_TR
01
OOFH
BYTE
BX,OI
BYTE
OFFSET CS I 110004
OOOH
OFFSET CS 1 110005
I REG I STER FROM TH I S AREA
VERIFY 286 TR REGISTERS
SUB
STR
DB
LABEL
NOV
LABEL
ORG
DB
ORG
AND
COP
"NZ
00
AX,AX
AX
I GET THE TR
~~R~~ST_TR
I
POP
TEST
TT_51
CORRECT SELECTOR?
TEST 286 CONTROL FLAGS
SET a I RECT I ON FLAG FOR DECREMENT
GET THE FLAGS
STD
ERROR I
TT_41
REGISTER
OOFH
BYTE
CX,AX
BYTE
OFFSET CSI110006
OOOH
OFFSET CS:11000T
AX,OF8H
PUSHF
A9 0400
T5 03
E9 02CD R
FC
9C
ooce 58
00C9 A9 0400
DOCC 14 03
OOCE E9 02CO R
LABEL
ORG
DB
ORG
I ••
200
201
202
20.
20.
205
20.
207
20.
20'
210
211
212
213
21.
21.
21.
LABEL
NOV
+ 110005
REGISTER FROM THIS AREA
WRITE TO 286 TR
NOV
LTR
DB
1-----
"7
AX
OOFH
BYTE
AX,AX
BYTE
OFFSET CS I 110002
OOOH
OFFSET CS 1 110003
AX,OF8H
~~R~~ST _LOTR
LABEL
00
<><><><><><><><><><><><>
<><> CHECKPOINT F3 <><>
I
AX,AX
SLOT
DB
110002
03 CO
AL,OF3H
MFG _PORT, AL
01 ,POST LOTR
01
OOFH
BYTE
OX,ol
BYTE
OFFSET CS,110000
OOOH
OFFSET CSI??OOOI
READ AND VER I FY 286 LOT SELECTOR
SUB
OF
00A3 OF
00A4
00A4 8B OF
00A6
00A4
00A4 00
00A6
LABEL
MOV
0093 28 CO
I ••
".
,-----
TT_31
LLOT
I ••
170
171
172
17.
17'
17.
17.
177
17.
17.
LOAD ES REG I STER
"Z
""P
AX
AX,0200H
,,_
I NTERRUPT FLAG SHOULD BE OFF
CONTINUE IF OFF
ERA"DR_EXIT
GO IF NOT
TEST
AX,0400H
I
"NZ
""P
"
5
ERA"OR_EXIT
I
POP
AX
TEST
".
""P
GO IF NOT SET
CLEAR 0 I RECT I ON FLAG
INSURE DIRECTION FLAG I S RESET
CLD
PUSHF
"Z
CHECK 0 I RECT I ON FLAG
AX , 0400H
ERROR_EX IT
I
GO IF NOT
TEST3
5-67
IBM p.,..on.1 Comput.,. MACRO A ••• mbl.,.
V.,.slon 2.00
TEST3 ---- 06/10/85 POST EXCEPTION INTERRUPT TESTS
22.
230
231
232
233
23.
23.
236
237
238
23.
2'0
2.,
2.2
2.3
2 ••
2 ••
2'6
24T
2.8
2 ••
"0
251
252
253
25.
255
256
25T
2'8
25.
260
261
262
263
26.
265
266
26T
268
26'
2TO
2TI
2T2
2T3
2T.
2T5
2T6
2TT
2T8
2T.
280
281
2"2
283
28.
285
286
28T
288
28.
2'0
291
1----------------------------------------
I
VERIFY 286 80UND INSTRUCTION
:
I DESCRIPTION
;
CREATE A SIGNED ARRAY INDEX
I
WITHIN AND OUTSIDE THE LIMITS
I
(EXPECT INT 5)
I
I - ---- ------ - - ---- - --- - - - --- -------- ----0001
0003
0005
0007
BO F4
E6 80
6A 48
07
Tl_6;
0008
OOOA
OOOF
ODES
00E7
00E9
OOEC
OOEF
OOFI
00F3
OOFS
DOn
OOF9
2B FF
261 C7 05 0000
261 C7 45 02 7FFF
BO 95
E6 8B
B8 1000
261 62 05
2B C9
E2 FE
E4 8B
3C 00
75 03
E9 02CO R
1-----
OOFC
OOFC 2B FF
OOFE 261 C7 05 3FFO
0103 B8 1000
0106 261 62 05
0109 2B C9
OIOB
OIOB E4 88
01003C 00
OIOF EO FA
0111 74 03
0113 E9 02CO R
~!~~ ~~I ,..~2
Oi2F -- -.
012F
0131
0133
0135
0137
E4
3C
EO
74
E9
312
313
31.
315
316
3IT
318
31.
320
321
322
323
32.
325
326
32T
328
32'
330
331
332
333
33.
335
336
33T
338
33'
3.0
3"
3.2
AL I OF4H
MFG PORT IAL
8YT~ PTR ES TEMP
ES
-
;
I
I
<><><><><><><><><><><><>
F4 <><>
<><> CHECKPO I NT
LOAD ES REGISTER
CHECK 80UND FUNCTIONS CORRECTLY
SUB
MOV
MOV
MOV
OUT
MOV
BOUND
SUB
LOOP
IN
CMP
JNZ
.JMP
01,01
; POINT 8EGINNING OF THE BLOCK
:g~g ~~~ ~~: Ig:!2~ ,07FFF~ ~E~E~I~i6o~gR~o T~l~~~~
AL,095H
I SET INTERRUPT 5 FLAG
~~~T~~~~+OAH,AL
SET AX WITHIN BOUNDS
USE THE ES SEGMENT POINTER
WAIT FOR POSSIBLE INTERRUPT
AX,DWORD PTR ESIIDI]
CX,CX
LOOPA
AL,DNA PAGE+OAH
ALIO TT T
ER'j!{OR_EXIT
GET THE RESULTS
DID AN I NTERRUPT OCCUR 1
CONTINUE IF NOT
GO IF YES
CHECK LOW BOUND WORD CAUSES INTERRUPT 5
SUB
MOV
MOV
BOUND
SUB
01,01
POINT BEGINNING OF THE BLOCK
SET FIRST WORD TO 03FFOH
WORD PTR ESI [01] ,03FFOH
AX,IOOOH
SET AX OUT OF BOUNDS
AXIDWORO PTR ESI [011
CX,CX
I WA I T FOR POSS I BLE INTERRUPT
LOOPBI
IN
CMP
LOOPNZ
JZ
JMP
SUB
MOV
MOV
MOV
BOUND
05
LOOPC;
88
00
FA
03
02CD R
IN
CMP
LQaPNZ
JZ
JMP
;-I
~~:~~A_PAGE+OAH
GET THE RESULTS
DID AN I NTERRUPT OCCUR?
TRY AGAIN
CONT I NUE I F INTERRUPT
GO I F NO INTERRUPT
LOOPB
TT8
ERFfoR_EXIT
CHECK HIGH BOUND WORD CAUSES INTERRUPT 5
0116 BO 95
0118E688
AL,95H
OMA_PAGE+OAH. AL
I
01 1 01
; POINT BEGINNING OF THE BLOCK
SET FIRST WORD TO 0
SET SECOND TO OFFFH
I SET AX OUT OF BOUNDS
SET FLAG FOR INTERRUPT
:g~g ~~~ ~~:fg:!2~,OFFFH:
AX,IOOOH
AX,DWORD PTR ESI[DI]
exlex
i
ALIDMA PAGE+OAH
Laapc
TT •
ERROR_EXIT
;Ai, run
r'u~SiaLE
ii'OiTERRUFT
GET THE RESULTS
DID AN I NTERRUPT OCCUR?
TRY AGAIN
AL~OH -
; GO I F NO INTERRUPT
-------------------------------------- -- -- --VERIFY PUSH ALL AND POP ALL INSTRUCTIONSI
; DESCRIPTION
I
I
SET REGISTERS TO A KNOWN VALUE AND
I
PUSH ALL.
RESET THE REGISTERS, POP ALL I
AND VERIFY
I
2 ••
311
1-----
MeV
OUT
PUSH
POP
Tl_TI
01lA28FF
011 C 261 C7 05 0000
0121 261 C7 45 02 OFFF
0127 88 1000
2'3
310
LOOPAI
;-----
2.2
2 ••
2'6
2'T
2.8
2 ••
300
301
302
303
30.
30.
306
30T
308
30'
1-3
04-21-86
I
I
;-013A
Ol3t
OI3E
0141
0143
0144
0146
0147
0149
014A
014C
0140
o 14F
0150
0151
0153
0154
0155
0157
0159
015B
0150
015F
0161
0163
0164
0167
0168
OIU
0160
016F
0172
a 1T4
0177
0179
OITC
DI7E
0181
0183
0186
80
E6
B8
8B
43
8B
41
8B
42
8B
---------------------------------------- - -----
F5
80
0001
08
MOV
OUT
MOV
MOV
INC
MOV
INC
MOV
INC
MOV
INC
MOV
INC
PUSH
MOV
INC
PUSHA
SUB
MOV
MOV
MOV
MOV
MOV
MOV
POPA
CMP
POP
JNZ
C8
01
FA
47
88
46
55
88
45
60
2B
8B
88
88
88
88
88
61
F7
EE
CO
D8
C8
DO
F8
FO
E8
83 FO 07
50
75 IE
3D 0001
75 19
83 FB 02
75 14
83 F9 03
75 OF
83 FA 04
75 OA
83 FF 05
75 05
83 FE 06
74 03
COP
JNZ
COP
JNZ
CMP
JNZ
CMP
JNZ
CMP
JNZ
CMP
JZ
;-----
0188
0188 E9 02CO R
5-68
TEST3
SET AX=I
SET BX=2
BX
CXIBX
CX
OX,CX
OX
DI,DX
01
SI,DI
51
BP
BPISI
BP
AXIAX
aX,AX
CX,AX
DX,AX
OJ ,AX
SIIAX
BP,AX
BPIOT
BP
ERROR EXITI
AXIOIERROR EXITI
BX 1 02ERROR EXITI
CX,03ERROR EXITI
DX,04ERROR EXITI
01,05-
ERROR EXITI
SI,06-
T1_'0
ERROR EXIT
ERROR EXITII
.JMP
<><><><><><><><><><><><>
<><> CHECKPOINT F5 <><>
AL,OF5H
~~~ O~ORT ,AL
BX,AX
I
SET CX=3
I SET DX=4
I SET 01=5
SET SI=6
SAVE THE (BP) ERROR FLAG REG I STER
SET BP=l
I SSUE THE PUSH ALL COMMAND
CLEAR ALL REG I STERS
GET THE REG I STERS BACK
BP SHOULD BE 1
RESTORE (BP) ERROR FLAG REGI STER
GO IF NOT
AX SHOULD BE I
GO IF NOT
BX SHOULD BE 2
GO IF NOT
CX SHOULD BE 3
GO IF NOT
OX SHOULD BE 4
GO IF NOT
o I SHOULD BE 5
GO IF NOT
S I SHOULD BE 6
CONTINUE IF IT IS
1-'
04-21-86
;-----------------------------------------------I
VER I FY ACCESS RIGHTS FUNCTI ON CORRECTLY
.4.'4.
.4.'4'
·4.
.44
.41
I DESCRIPTION
SET ACCESS RIGHTS OF DESCR I PTOR TO
I
READ ONL.Y.
VERIFY THE VERW!VERR INSTR
ACCESS A READ ONLY WITH A WRITE AND
I
1
VER I FY AN EXCEPT I ON INTERRUPT !:3
350
1 -- - - - --------- - - - --- - ----- - ------------ ------ ---
..,
352
353
354
355
356
357
358
..
•••,
1
018a
01110
018F
0195
019A.
01 AD
DIA3
80 F6
E6 80
MOV
OUl
MOV
MOV
MOV
MOV
MOV
Cl 06 00415 FF"FF
C6 06 004C 00
CT 06 004A FOOD
88 aD ... !
8E CO
1-----
•• 0
•• 2
363
01A5 3E
365
366
361
368
0lA6 OF
01A7
DIAl 88 E8
01A9
369
310
0lA7
OIA.1 00
371
01A9
312
01"9 75 DO
•••
31.
31.
31'
316
317
378
•
+ 110009
+
+ 11000A
1----01A8 C6 06 0040 91
01BO B8 0048
0lB3 8E CO
31.
380
.81
0185 3E
382
0186 OF
383
384
385
386
381
388
0181
0187 88 E8
0189
01Bl
0181 00
0189
0189 14 CD
389
+ 11000C
11000D
...
391
"2
0188 88 0048
393
018E 3E
395
396
391
+ ?1000F
Ole2
+ 110010
399
400
401
OICO
OICO 00
OlC2
402
40.
404
40.
Ole2 15 C4
OIC'" BO 90
OlC6 E6 88
DIce 2B F6
OleA 261 e6 04 00
410 DICE 28 C9
4110100E488
412 0102 22 CO
413 0104 EO FA
414 0106 15 80
41.
41.
411
418 0108 C6 06 004093
...
MOV
OUT
SUB
SUB
LOOPDr
1-----
424
42.
42.
421
428
42.
430
1
I
0,00 80 F1
431
432
433
OIOF E6 80
01El B8 0048
OIE-4 BS 0060
434
0 I £7 00 0003
.2.
4 ••
4 ••
ES REG I STER
TH I S SEGMENT SHOULD BE WR I TEABLE
I SET SEGMENT OVERRIDE TO START OF TABLE
OS
03EH
AX
OOFH
BYTE
BP,AX
BYTE
OFFSET CSr110009
OOOH
OFFSET CS 1 11000A
ERROR_EXIT!
I
CHECK THE ACCESS RIGHTS OF ES_TEMP
1 ERROR
I F SEGMENT CAN NOT WR I TE
BYTE PTR OSI (ES TEMP. DATA Ace RIGHTS) ,91H
~~:~~_TEMP
,-LOAl5 ES REGISTER
I SET SEGMENT OVERRIDE TO START OF TABLE
OS
03EH
AX
OOFH
BYTE
BP,AX
BYTE
OFFSET CSI11000C
OOOH
OFFSET CSI?1000D
ERROR_EX I T I
I
CHECK THE ACCESS RIGHTS OF ES_ TEMP
; ERROR I F SEGMENT IS WR I TEABLE
~~"ES_ TEMP
I
03EH
AX
OOFH
BYTE
SP,AX
BYTE
OFFSET CSI11000F
OOOH
OFFSET CSI110010
ERROR_EXITI
; GO I F SEGMENT NOT READABLE
I NSURE THAT SEGMENT I S READABLE
SET EXCEPT I ON FLAG
FOR I NTERRUPT I 31
AL,09DH
DMA PAGE+OAH,AL
SI,!'I
BYTE PTR ESI[SI1.00
CX,CX
IN
AND
:~:~~A_PAGE+OAH
LOOPO
ERROR_EXITI
WR I TE A BYTE THAT SHOULD
WAIT FOR INTERRUPT
I 0 I 0 THE I NTERRUPT OCCUR?
I
MISSING INTERRUPT
RESTORE THE ACCESS RIGHTS BYTE
BYTE PTR DSI (ES_TEMP.DATA_ACC_RIGHTS) .CPLO_DATA_ACCESS
-------- - ------------------------ -- --------VER I FY AD,JUST RPL FIELD OF SELECTOR
I
,--- --------------------------------------------MOV
OUT
MOV
MOV
OR
1----OlEA
OlEA
DIEC
OlEA
OlEA
OIEC
OIEC
OIEE
OIFI
0lF4
+ 1100 I !
88 C3
+ 110012
75
80
80
75
NOTE BX
ARPL
LABEL
Mav
LABEL
ORG
DB
ORG
"NZ
63
9A
E3 03
FB 03
92
44'
4.0
453
454
I
INSTRUCTION (ARPL) FUNCTIONS
DESCRIPTION
SET THE RPL FIELD OF A SELECTOR
AND VER I FY THAT THE ZERO FLAG I S SET
;
CORRECTLY AND THAT THE SELECTOR RPL
;
FIELD I S SET CORRECTLY
431
4 ..
4"
452
I
I
I
4 ••
442
443
444
445
446
447
448
~~: ~~-f~~~' BASE:LO_WORD ~"~g~~
ES, AX-
LOOPNZ
"NZ
MOV
;-- I
AL,OF6H
1
<><><><><><><><><><><><>
MFG PORT, AL
I
<><> CHECKPO I NT F6 <><>
DSsEs TEMP.SEG L.IMIT,MAX SEG L.EN
I SET SEGMENT TO OFFFFH
BYTE P'TR DSI IE!' TEMP.BAS~ HI-BYTE) ,0
I SET THE ADDRESS
CAUSE AN EXCEPTION 13 INTERRUPT
Mav
420
421
422
441
SEGOV
DB
VERR
DB
LABEL
MOV
LABEL
ORG
DB
ORG
406
401
408
409
439
440
MOV
MOV
MOV
SEGOV
DB
VERW
DB
LABEL
MOV
LABEL
ORG
DB
"NZ
;-----
I
I
SET ACCESS RIGHTS TO READ ONLY
ORG
OIBF OF
OICO
OICO!SS EO
4"
SEGOV
OB
VERW
DB
LABEL
MOV
LABEL
ORG
DB
ORG
"NZ
Mav
398
I
INSURE ACCESS RIGHTS MAY BE WRITTEN
"Z
. .0
I
AND
eMP
"NZ
1-----
0lF6 BB 0060
0lF9 B8 0048
OIFC 80 CB 03
= FIRST
OPERAND
AX
=
AX,BX
BYTE
AX.BX
eYTE
OFFSET CSI??OOII
063H
OFFSET CS,110012
ERROR EXITI
BL.03lR
BL.03H
ERROR_EXITl
SECOND OPERAND
I
I SSUE THE RPL COMMAND
GO IF RPL WAS NOT CHANGED
STRIP UNWANTED BITS
AS EXPECTED?
GO IF NOT
CHECK THAT ACCESS RIGHTS DO NOT CHANGE
MOV
MOV
I PUT A SELECTOR IN BX
1 PUT A SELECTOR I N AX
, MAKE ACCESS OF ex < AX
OR
;-----
<><><><><><><><><><><><>
I
<><> CHECKPO I NT F7 <><>
I PUT A SELECTOR I N AX
I PUT A SELECTOR IN BX
I MAKE ACCESS OF AX < BX
I
NOTE ex
=
FIRST OPERAND
AX
=
SECOND OPERAND
TEST3
5-69
,-"
04-21-86
·57
•••
459
460
461
462
0 IFF
0 IFF lIa C3
0201
OIFF
463
464
465
461
OIFF' 63
0201
020 I 14 85
0203 80 E3 03
0206
FB 03
461
•••
• 7.
0209 15 2F
412
473
020B BO F8
(l20D E6 80
466
."
.7•
• 7.
.7.
+ 110013
+
+ 110014
+
ARPL
LABEL
MOV
LABEL
ORG
DB
ORO
JZ
AND
eo
eMP
JNZ
1-----
,
ISSUE THE RPL COMMAND
I GO IF RPL WAS NOT CHANGED
; STRIP UNWANTED BITS
I AS EXPECTED?
I GO IF NOT
VERIFY THE LAR (LOAD ACCESS RIGHTS)
MOV
.UT
,-----
AX,BX
BYTE
AX,BX
BYTE
OFFSET CSI7?0013
063H
OFFSET CS.110014
ERROR EXITI
BL,03H
BL,03H
ERROR_EX 1T2
INSTRUCTION
<><><><><><><><><><><><>
<><> CHECKPOINT F8 <><>
AL,OF8H
MFG_PORT, AL
SET THE DESCR I PTOR TO LEVEL 3
477
478
OZOF e6 06 0040 F3
0214 BS 0048
MOV
MOV
:~:~SP~~M~S' IES_TEMP. DATA_ACC_R IGHTS) ,CPL3_DATA_ACCESS
479
0211 28 CO
SUB
AX ,AX-
..••••••,
1-----
•• 2
LAR
484
485
486
487
488
0219 OF'
021A
021A 8B C3
C21C
021A
489
490
021A 02
a21C
...•••
+ 110015
110016
.••••••
494
.,
..•••,
498
499
DB
LABEL
MOV
LABEL
ORO
DB
ORO
1-----
"2
D21C 15 Ie
AX,BX
OOFH
BYTE
AX,BX
BYTE
OFFSET CS I 1100 15
002H
OFFSET CSI110016
021E 80 Fe F3
0221 75 17
•• 2
ISSUE THE LAR COMMAND
I
GO IF LAR WAS NOT CHANGED
THE DESCRIPTORS ACCESS RIGHTS MUST BE 3
eMP
JNZ
1-----
I
INSURE THE DESCRIPTOR WAS VISIBLE
JNZ
1-----
; CLEAR AX
GET THE CURRENT DESCR I PTORS ACCESS RIGHTS
AH,CPL3 DATA ACCESS
ERROR_EX I T2 -
I AS EXPECTED?
I GO IF NOT
VERIFY THE LSL (LOAD SEGMENT LIMITS)
INSTRUCTION
<><><><><><><><><><><><>
<><> CHECKPOINT F9 <><>
503
504
505
0223 BO F9
0225 E6 80
0221 C7 06 0048 "AA.'\
MOV
OUT
MOV
AL,OF9H
1
MFG PORT, AL
I
DS,J::S_TEMP.SEG_LIMIT ,OAAAAH
SOT
508
0220 C6 06 0040 93
0232 B8 0048
MOV
MOV
BYTE PTR 051 (ES TEMP. DATA ACC RIGHTS) ,CPLO DATA ACCESS
510
511
512
513
514
515
516
0235 OF'
0236
0236 8B 08
+ 110017
0238
+ 110018
517
0238 T4 03
519
023"
521
023A E9 02CD R
•••
•••
.,..2.
LSL
0236
023& 03
0238
ORO
DB
ORO
JZ
523
524
525
0230 81 FB "AAA
0241 Cl 06 0048 5555
0247 B8 0048
528
529
530
531
532
533
53.
024" OF
0248
0248 8B 08
0240
0248
0248 03
0240
0240 75 EB
536
024F 81 Fa 5555
537
..•••
0253 75 E5
545
546
0255 BO FA
0257 E6 80
547
548
0259 6" 08
0258 IF
552
553
025C Cl 06 0048 FFFF
0262 C6 06 0040 93
•••
•••
•••
•••,
JMP
..••••••,
••••
5.
•••
551
558
559
560
561
562
•••
•••
.7.
:-~~~[)T~~ ~~~~~T~~~R SE~MENT
LIMIT
, GO IF OK
CMP
MOV
MOV
+ 110019
•
+ 1100110
+
, GO I F NOT SUCCESSFUL
BX,OAAAAH
I INSURE CORRECT SEGMENT LIMIT
DSIES TEMP.SEG LlMIT,05555H
,SET THE SEGMENT LIMIT TO 05555H
~~:~~:TEMP
DB
LABEL
MOV
LABEL
ORG
DB
ORO
JNZ
OOFH
BYTE
BX,AX
BYTE
OFFSET CSI??0019
003H
OFFSET CSI1100IA
ERROR_EXIT2
eMP
JNZ
BX,05555H
ERROR_EX1T2
I
GET THE DESCRIPTOR SEGMENT LIMIT
I GO I F NOT SUCCESSFUL
I NSURE CORRECT SEGMENT LIM I T
GO IF NOT
1--- - --- --- - -------- - - ------ - - - - - ----- - - - --- ------- - - - --I LOW MEG CH I P SELECT TEST
I
;
TEST THAT A WR I TE TO ADDRESS 1BOOOO DOES NOT WR I TE
I
1 TO 800010, OR IB8000 DOES NOT WRITE TO B80010
;--------------- - - ------ -- --------- - - -------- -- -- - - --- --MOV
OUT
PUSH
POP
1-----
0261
026C
0212
0214
C6 06 004C IB
Cl 06 004A 0000
6A 48
01
0215 28 FF
0211 261 Cl 05 AA55
021C
0282
0284
0285
5-70
Cl 06 004A 8000
6A 48
01
261 Cl 05 AA55
TEST3
I
;
<><><><><><><><><><><><>
<><> CHECKPOINT FA <><>
; MODIFY THE DESCRIPTOR TABLE
OSIES TEMP.SEG LIMIT ,MAX SEG LEN
BYTE P'TR OS I (E!'_TEMP.OATA_ACC_RTGHTSI ,CPLO_OATA_ACCESS
START WITH SEGMENT 1BOOOO
MOV
MOV
PUSH
POP
SUB
MOV
1-----
AL,OFAH
MFG PORT ,AL
BYT~ PTR GOT PTR
OS
-
SET TEMPORARY ES DESCRIPTOR 64K SEGMENT LINIT/CPLO DATA ACCESS
MOV
MOV
;-----
5 ••
566
561
568
569
ROll
LSL
••2
•••
~~:~~_TEMP
OOFH
BYTE
BX,AX
BYTE
OFFSET CSI110017
003H
OFFSET CS:110018
R07
ERROR_EX I T21
.22
'2.
521
DB
LABEL
MOV
LABEL
I SET SEGMENT LIMIT TO OAAAAH
BYTE PTR 051 (ES TEMP.BASE HI BYTE) ,ISH
g~i~Sp~~MP E~A~~;~O_WORO, ~-LO~O
ES REG I STER
ES
01,01
I POINT TO FIRST LOCATION
WORD PTR ESI (01) ,OAA55H I WRITE A TEST PATTERN
00 FOR SEGMENT IB8000
MOV
PUSH
POP
MOV
DSIES TEMP.BASE LO WORD,800QH
I LOAD ES REGI STER
BYTE PTR ES TEMJ!i ES
WORD PTR ESI [01 J ,OAA55H I WRITE A TEST PATTERN
1-0
04-21-86
1-----
.Tl
.T2
.n
'74
.T'
.TO
.TT
..•••,
C6 06 004C 1A.
Cl 06 004" 0000
6A. 48
07
0298 261 Cl 05 "A55
.T.
.T •
•• 0
,.2
•••
•••
•••
•••,
•••
•••
•••
•••
,.0
•• T
..
...•••
DO FOR SEGMENT 'AOOOO
028A
02Br
0295
0297
1-----
~;~~sP:;:~M~~~!~~-~EM:O=~~~_HI_BYTE)
M.V
MOV
PUSH
POP
ES
Mdv
WORD PTR ESIIDI1.0AA!S5H I WRITE A TEST PATTERN
BYTE ISTR ES TEMPS
-
.IAH
I LOAD ES REG I STER
-
B/I VIDEO CARD
0290 6" 20
D29F IF
02AO 88 05
PUSH
POP
MOV
1-----
BYTE PTR
OS
C BWCRT PTR
--
SET OS TO B IW 0 I SPL-A Y REGEN BUFFER
GET THE WORO FROM B/W V IDEO
AX.DSs [01)
COMPATIBLE COLOR
PUSH
POP
MOV
02A2 6" 28
02"4 IF"
02A5 88 10
1-----
BYTE PTR C CCRT PTR
OS
-BX,oSI [01 )
I
SET OS TO COMPATIBLE COLOR MEMORY
; GET THE WORD FROM COL-OR MEMORY
EGA COLOR
•• 2
"0
•• T
000
001
0.2
00'
00.
00'
000
O.T
0 ••
00.
010
0"
012
01'
0 ..
0 ..
010
01T
01.
01'
020
021
022
02.
PUSH
POP
MOV
0.2"1 611 30
02A9 IF
02AA ISS 00
1-----
PUSH
MOV
OUT
0282 3D "A55
0285 14 16
02B7 81 Fe "A55
CMP
••
"bp
OZt! 14 0 ...
02ta 80 34
"Z
CMP
"Z
CMP
"Z
MOV
Dzes E6 80
OUT
0288 74 10
02BO 81 F9 "A55
1-----
02CO
02CD E9 0000 E
NORMAL EXIT,
-
0200
POSTS
0200
CODE
EGA COL-OR CRT PO JNTER LOW 64K
AX
AL,35H
MFG PoRT,AL
AX AX,OAA55H
ERROR EXIT
eX,oAA55H
ERROR EXIT
CX,OAA55H
ERROR EXIT
AL.34R
MFG_PORT ,AL
SAVE RESULTS
<><><><><><><><><><><><>
<><> CHECKPOINT 35 <><>
I RESTORE CHECKPO I NT
I
<><> CHECKPOINT
34 <><>
SHUTDOWN
MOV
CALL
ERROR EXIT,
-
I
TEST FOR ERROR
02Ae 50
02AD 80 35
02AF E6 80
0281
02e?
02el B8 068F
OZCA E8 0000 E
BYTE PTR E CCRT PTR
OS
-CX,OS, (01 )
..IMP
~:b~~=;~~~S _SHUT _DOWN+NM I
ADDRESS FOR SHUTDOWN BYTE
SET GOOD ENDING
PROC_SHUToOWN
ENDP
ENDS
ENO
TEST3
5-71
I-I
04-21-86
I
PAGE 118,121
TITLE TEST4 ---- 06/10185
.286C
2
••
•
5
T
B
10
II
12
PUBLIC
PUBLIC
PUBLIC
PUBLIC
IS
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBLIC
to
IT
IB
to
20
21
22
2.
2.
2S
2.
2T
2.
2•
•0
'1
••'2
EXTRN
EXTRN
EXTRN
EXTRN
••••
31
••
.0
.1
••••••
••
.T
••••
•0
'1
.2
55
56
57
58
59
60
61
6il
63
64
65
66
67
68
69
10
71
72
T.
74
T.
T.
BEEP
BLINK INT
CMOS J!(EAO
CMOS-WRITE
CONFTG BAD
011
DOS
DUMMY RETURN 1
ERR B~EP
E M!'G
IRT 287
KBD-RESET
POST4
PROT PRT HEX
PROC-SHUToOWN
PRT REX
PRT-SEG
P M!'G
R~ DIRECT
:g:-g~~g~SUM
SET-TOO
WAlfF
XPC_BYTE
EI63tNEAR
OBF 421NEAR
ROM-ERR I NEAR
XMIT_8042tNEAR
ASSUME CStCOOE,DStOATA
POST4t
1--- CMOS READ ---- -- - -- - - - -- - ------. -- -------- -- -- - ---- ----- - - - - - ------ ---- - --I
READ BYTE FROM CMOS SYSTEM CLOCK CONFIGURATION TABLE
I
I
I
1 INPUT t (AL·I. CMOS TABLE ADDRESS TO BE READ
I
BIT
7 = 0 FOR NMJ ENABLED AND 1 FOR NMI 01 SABLED ON EXIT
t
BITS 6-0 = ADDRESS OF TABLE LOCATION TO READ
I
I OUTPUT I (ALI
VALUE AT LOCATION (ALI MOVED INTO (ALI.
IF BIT 7 OF (ALI WAS
I
ON THEN NM I LEFT 0 I SABLED.
DUR I NG THE ChiOS READ BOTH NM I AND
1
NORMAL INTERRUPTS ARE DISABLED TO PROTECT CMOS DATA INTEGRITY •
I
THE CMOS ADDRESS REGISTER IS POINTED TO A DEFAULT VALUE AND
1
THE INTERRUPT FLAG RESTORED TO THE ENTRY STATE ON RETURN •
I
ONLY THE (ALI REGISTER AND THE NMI STATE IS CHANGED.
t
0000
.2
5'54
SEGMENT BYTE PUBL I C
PUBLIC
PUBLIC
PUBLIC
PUBLIC
•
I'I.
••'T
POST AND BIOS UTILITY ROUTINES
.LlST
CODE
0000
t - ------------ --- ----- -- - - - -- - -- ------- -- -- .-- ---- - ---- ----- - - - -- ------ - - --- ---
0000
0000
UUU i
0003
0004
0006
0007
0009
DOOA
Dooe
0000
OOOF
QOt I
0013
0014
0016
9C
DO
F9
DO
rA
E6
90
E4
50
CO
08
CMOS READ
PUSHF
ROL
STC
RCR
PROC
NEAR
ALII
ALII
o
eLl
70
ao
OUT
CMOS_PORT IAL
11
IN
PUSH
IE
MOV
RCR
OUT
AL I CMOS_DATA
AX
AL,CMOS SHUT OOWN-2
ALII
CMOS_PORT I AL
DO 08
E6 70
90
E4 71
58
0017 DE
001a Ell 0039 R
OOIB C3
NOP
Nap
IN
POP
PUSH
CALL
RET
CMOS_READ
OOIC
READ LOCATION (ALI INTO (ALI
SAVE INTERRUPT ENABLE STATUS AND FLAGS
MOVE NMI BIT TO LOW POSITION
FORCE NM I BIT ON I N CARRY FLAG
HIGH BIT ON TO DISABLE NMI - OLD IN CY
l SABLE I lIITER-RUPTS
ADDRESS LOCATION AND DISABLE NMI
I/O DELAY
READ THE REQUESTED CMOS LOCATION
SAVE (AHI REGISTER VALUE AND CMOS BYTE
GET ADDRESS OF DEFAULT LOCATION
PUT ORIGINAL NMI MASK BIT INTO ADDRESS
SET DEFAULT TO READ ONLY REG I STER
I/O DELAY
OPEN STANDBY LATCH
RESTORE f AH I AND (AL J = CMOS BYTE
-PLACE CODE SEGMENT IN STACK AND
-HANDLE POPF FOR B- LEVEL 80286
RETURN WITH FLAGS RESTORED
:~,CMOS_DATA
CS
CMOS_POPF
ENDP
1--- CMOS IR I TE -----------------------.---------------------------------------I
IRITE BYTE TO CMOS SYSTEM CLOCK CONFIGURATION TABLE
I
I
I
1 I NPUT I (ALI= CMOS TABLE ADDRESS TO BE WRITTEN TO
I
I
BIT
7
0 FOR NMI ENABLED AND I FOR NMI DISABLED ON EXIT
1
BITS 6-0 • ADDRESS OF TABLE LOCATION TO WRITE
I
(AH) = NEW VALUE TO BE PLACED IN THE ADDRESSED TABLE LOCATION
I
1 OUTPUT,
VALUE IN (AHI PLACED IN LOCATION (ALI WITH NMI LEFT DISABLED
1
IF BIT 7 OF (ALI IS ON.
DURING THE CMOS UPDATE BOTH NMI AND
I
NORMAL I NTERRUPTS ARE 0 I SABLED TO PROTECT CMOS OAT A I NTEGR I TY •
THE CMOS ADDRESS REGISTER IS POINTED TO A DEFAULT VALUE ANO
I
I
THE INTERRUPT FLAG RESTORED TO THE ENTRY STATE ON RETURN •
ONLY Tt-E CMOS LOCATION AND THE NMI STATE IS CHANGED.
I
1
1 - - - - - - --------- - - ------ - ----- --------- - - --- - -- - - -- ---------- - ---------- - - -- ----
TT
TO
.0T.
=
81
.2
••••
••B.
BT
••B'
.
92
OOIC
'0
93
OOIC 9C
94
0010 50
95
OOIE DO CO
96
97
98
99
0020
0021
0023
0024
100
0021!. SA C4
101
102
103
104
105
106
101
108
109
110
III
0028
C02A
002C
002E
0030
0031
0033
0034
0035
0038
112
003'
5-72
F9
DO 08
FA
E6 70
E6 11
ao IE
DO 08
E6 TO
90
E4 71
58
OE
E8 0039 R
C3
CMOS WRITE
PUSHF
PUSH
ROL
STC
RCR
NEAR
AX
ALII
ALII
CLI
OUT
MOV
OUT
.OV
RCR
OUT
NOP
IN
POP
PUSH
CALL
RET
CMOS_IR I TE
TEST4
PROC
CMOS PORT I AL
AL.AH
CMOS DATA tAL
ALteNOS SHUT DOWN-2
ALII
CMOS _PORT I AL
:~"CMOS_DATA
CS
CMOS_POPF
ENDP
WRITE (AHI TO LOCATION (ALI
SAVE INTERRUPT ENABLE STATUS AND FLAGS
SAVE WORK REGISTER VALUES
MOVE NMI BIT TO LOW POSITION
FORCE NM I BIT ON I N CARRY FLAG
HIGH BIT ON TO DISABLE NMI - OLD IN CY
DISABLE INTERRUPTS
ADDRESS LOCATION AND DISABLE NMI
GET THE DATA BYTE TO WRITE
PLACE I N REQUESTED CMOS LOCAT I ON
GET ADDRESS OF DEFAULT LOCATION
PUT ORIGINAL NMI MASK BIT INTO ADDRESS
SET OEF AUL T TO READ ONLY REG I STER
I/O DELAY
OPEN STANDBY LATCH
RESTORE WORK REG I STERS
-PLACE CODE SEGMENT IN STACK AND
-HANDLE POPF FOR B- LEVEL 80286
1-2
04-21-86
113
PAGE
CMOS POPF
114
0039
1150039CF
11.
III
110
11.
120
121
122
-
003A
CMOS _POPF
003A.
003A 2EI 8E IE 0040 R
DOlF' C3
DDS
PRoe
MOV
RET
123
124
12.
0040 ---- R
CDSCATA DW
126
0042
DOS
121
120
12.
130
131
132
133
13.
0042
0042 Fl C5 3FFF
0046 75 08
148
149
150
151
0051 F6 06 0010 R 01
Dose H 02
..
,.2
,..
0053 IE
0054 E8 003A R
005F C3
156
1ST
0060
0060 FA
158
159
160
161
0061 AO 0015 R
0064 E6 80
0066 F4
0061 Ea F1
163
0069
I ••
166
167
0069
0069 2EI 8A 04
168
DQbe 46
169
0060 50
ITO
III
172
006E E8 012E R
113
00T4 15 Fa
114
0016 C3
0012
ac
192
193
19.
19'
19.
191
19.
19.
200
201
202
203
20.
20.
20.
201
20.
20'
210
CHECK FOR NOT FIRST ERROR MESSAGE
SKIP IF NOT FIRST ERROR MESSAGE
PUSH
AND
OR
POP
51
SI.03FFFH
BP,SI
51
SAVE MESSAGE POINTER
USE LOW [4 BITS OF MESSAGE OFFSET
AS FIRST ERROR MESSAGE FLAG
(BIT 0
E[611E162, 81T 1
BAD_CONFIG
CALL
PUSH
CALL
TEST
P MSG
PR I NT MESSAGE
D!"
SAVE CALLERS (OS)
DDS
I POINT TO POST/BIOS DATA SEGMENT
BYTE PTR .EQUIP FLAG,OlHI LOOP/HALT ON ERROR SWITCH ON 1
I YES - THEN GO TO MANUFACTURING HALT
MFG_HALT
-
POP
RET
OS
P _MSG
PROC
MOV
INC
PUSH
CALL
POP
CMP
"NE
RET
OOTT
P _MSG
ENDP
=
I RESTORE CALLERS
(OS)
MFG_HALT
MANUF ACTUR I NG LOOP MODE ERROR TRAP
o I SABLE INTERRUPTS
RECOVER ERROR I NO I CATOR
SET INTO MANUF ACTUR I NG PORT
HALT SYSTEM
HOT NMI TRAP
NEAR
AL.CSI [SI]
51
AX
PRT HEX
AX AL,LF
P_MSG
DISPLAY STRING FROM
PUT CHARACTER IN (AL)
PO I NT TO NEXT CHARACTER
SAVE PR I NT CHARACTER
CALL VIDEO 10
RECOVER PRTNT CHARACTER
WAS IT LINE FEED?
NO, KEEP PRINTING STRING
AL, .MFG ERR FLAG
MFG_POR'T. AL-
(CSI)
1---------------- --- ------------- -------- -- --- ---- --- ---- -- --- ----------0011
0077
0018
0079
001B
0010
OOTD
001F
0082
0085
0088
008B
0080
ERR_BEEP
9C
FA
OA F6
14 IE
GIl
B3
B9
E8
89
E8
FE
15
PROC
PUSHF
CL1
OR
10
0500
00B5 R
C233
00F8 R
CE
EE
008F IE
0090 E8 003A R
0093 80 3E 0012 R 01
0098 IF
0099 14 C5
"Z
SAVE FLAGS
SYSTEM INTERRUPTS
ANY LONG ONES TO BEEP
NO, 00 THE SHORT ONES
LONG BEEPS
COUNTER fOR LONG BEEPS (1-314 SECONDS)
DIVISOR FOR 932 HZ
DO THE BEEP
2/3 SECOND DELAY AFTER LONG BEEP
DELAY BETWEEN BEEPS
ANY MORE LONG BEEPS TO 00
LOOP TILL. DONE
o I SABLE
DH,OH
G3
BL.II2
CX,12!S0
BEEP
CX,49115
WAITF
"NZ
G1
PUSH
CALL
CMP
POP
"E
OS
ODS
SAVE OS REG I STER CONTENTS
.MFG_TST,OlH
MFG_HALT
MANUFACTURING TEST MODE1
RESTORE ORIGINAL CONTENTS OF
YES - STOP BLINKING LED
BL,I8
CX,I208
BEEP
CX,33144
WAITF
DL
G3
SHORT BEEPS
COUNTER FOR A SHORT BEEP (9/321
DIVISOR FOR 981 HZ
DO THE SOUND
1 12 SECOND DELAY AFTER SHORT BEEP
DELAY BETWEEN BEEPS
DONE WITH SHORT BEEPS COUNT
LOOP TILL DONE
12
04B8
0085 R
8118
OOFB R
CA
EE
MOV
MOV
CALL
MOV
CALL
DEC
219
OOAD
OOBO
00B3
00B4
B9 8118
E8 OOFB R
90
C3
MOV
CALL
POPF
RET
220
221
00B5
DH
OS
G31
"NZ
ERR_BEEP
NEAR
MOV
MOV
CALL
MOV
CALL
OEC
83
B9
E8
B9
E8
FE
15
211
=
1--- ERR BEEP ----------------------------------------------------------1
THIS PROCEDURE WILL ISSUE LONG TONES (1-314 SECONDS) AND ONE OR I
MORE SHORT TONES (9/32 SECOND) TO INDICATE A FAILURE ON THE
I
I
I
PLANAR BOARD, A BAD MEMORY MODULE, OR A PROBLEM WITH THE CRT.
I
1 ENTRY PARAMETERS I
DH .. NUMBER OF LONG TONES TO BEEP.
I
I
OL = NUMBER OF SHORT TONES TO BEEP.
I
009B
009B
0090
OOAO
00A3
00A6
00A9
OOAB
212
213
21'
21.
21.
211
21.
I
=------------------------------
NEAR
BP.03FFFH
E_MSGI
MFG HALTI
CLI
MOV
OUT
HLT
"MP
OA
102
190
191
I SEGMENT SELECTOR VALUE FOR OAT A AREA
DATA
"NZ
"Z
0011 58
11.
..
..
TO DATA AREA
E_MSGII
005E IF
I ••
101
PROC
TEST
E8 0069 R
153
,.0
,.,
,.3
,,.,
,,.,
E_MSG
56
81 E6 3FFF
OB EE
5E
154
110
116
111
110
(OS)
ENDP
1 - --- --- -- - - -- - ---------------- - - ------ -- -
0048
0049
0040
004F
0050
0050
,
LOAD
PUT SEGMENT VALUE OF DATA AREA INTO OS
RETURN TO USER WITH (OS) '" DATA
1 ENTRY REQU J REMENTS I
SI = OFFSET (ADDRESS) OF MESSAGE BUFFER
1
1
CX '" MESSAGE 8YTE COUNT
1
MAX I MUM MESSAGE LENGTH IS 36 CHARACTERS
I
8P '" BIT 0",EI61/EI62. 81T I=CONF[G BAO. 2-15= F[RST MSG OFFSET
142
143
1044
145
146
147
,.2
ENOP
NEAR
OS,CSIDOSOATA
1
13.
131
'"
POPF FOR LEVEL 8- PARTS
RETURN FAR AND RESTORE FLAGS
NEAR
1--- E MSG -- P MSG ----------------------------------------------------1
- THIS SU§RDUTINE WILL PRINT A MESSAGE ON THE DISPLAY
I
13.
'38
139
140
PRoe
IRET
CX,33144
WAITF
(OS)
1/2 SECOND DELAY AFTER LAST BEEP
MAKE I T ONE SECOND DELAY BEFORE RETURN
RESTORE FLAGS TO OR 1G 1NAL SETT 1NGS
RETURN TO CALLER
ENDP
TEST4 5-73
'-3
04-21-86
222
223
22'
221
PAGE
1--- BEEP -------------- - ---- -- --------- ----- - - - ------- -------------- ---I
ROUT I NE TO SOUND THE BEEPER US I NG T I MER 2 rOR TONE
:
; ENTRY •
1
(BL) 3 DURATION COUNTER
( I rOR 1/64 SECOND)
I
(CX) = FREQUENCY DIVISOR (1193110/FREQUENCY) (1331 FOR 886 HZ)
I EXIT •
I
(AX) I (BL) I (CX) MODIFIED.
:
•••
•••
22T
22.
;------------------------------------------------------------------------
210
21'
232
233
234
235
236
237
00B5
00B5
0086
00B7
00B9
Does
BEEP
9C
FA
80 86
E6 43
EB 00
CL.
~;: ~g:~~: ~~
240
241
242
243
244
245
246
247
248
249
250
251
252
OOCI
OOC3
DOCS
DatT
OOC9
EB
8A
E6
E4
8A
ooce DC
OOCD E6
OOCF 9D
0000
OOQO 89
DOD3 E8
0006 FE
0008 15
In
258
259
260
261
262
263
264
265
266
267
268
269
210
211
212
OUT
"MP
MOV
OUT
T1MER+2,AL
'+2
AL,CL
M~I~~~A~OR
'+2
HZ (HIGH)
WRITE TIMER 2 COUNT - MSB
GET CURRENT SETT I NG OF PORT
SAVE THAT SETTING
GATE T I MER 2 AND TURN SPEAKER ON
AND RESTORE INTERRUPT STATUS
AL,CH
TIMER+2,AL
:~:~~RT_B
MOV
OR
OUT
POPF
AL , GATE2+SPK2
PORT_B,AL
07.
040a
OOFa R
CB
F6
DEC
CX , I035
'AITF
BL
"NZ
07
MOV
CALL
1/64 SECOND PER COUNT (BLI
DELAY COUNT rOR I 164 OF A SECOND
GO TO BEEP DELAY I /64 COUNT
(BL) LENGTH COUNT EXPIRED?
NO - CONT I NUE BEEP I NG SPEAKER
PUSHF
SAVE INTERRUPT STATUS
BLOCK INTERRUPTS DURING UPDATE
GET CURRENT PORT VALUE
I SOLATE CURRENT SPEAKER BITS I N CASE
SOMEONE TURNED THEM OFF OUR I NG BEEP
RECOVER VALUE OF PORT
FORCE SPEAKER DATA OFF
AND STOP SPEAKER TIMER
RESTORE INTERRUPT FLAG STATE
FORCE '1/64· SECOND DELAY (SHORT)
MINIMUM DELAY BETWEEN ALL BEEPS
SAVE INTERRUPT STATUS
BLOCK I NTERRUPTS OUR I NG UPDATE
GET CURRENT PORT 'II ALUE I N CASE
SOMEONE TURf'lED THEM ON
RECOVER VALUE OF PORT B
RESTORE SPEAKER STATU'S"
RESTORE INTERRUPT FLAG STATE
CL.
'N
DaDE ac Fe
22
8A
24
E6
9D
89
E8
9C
FA
E4
24
0",
E6
90
C3
AL,IOIIOIIOB
TIMER+3 , AL
'N
OODA 9C
OODa FA
DODe E4 61
ODED
00E2
00E4
00E6
OOE8
00E9
aOEe
aDEF
OOFO
DOFI
00F3
00F5
DaFT
DOF9
OOFA
MOV
OUT
"MP
MU,
00
C5
42
61
EO
03
61
2.3
254
255
256
SETUP TIMER 2
SAVE INTERRUPT STATUS
BLOCK INTERRUPTS DURING UPDATE
SELECT TIMER 2,LSB I MSB , BINARY
WRITE THE TIMER MODE REGISTER
110 DELAY
OIVI!iOR FOR HZ ,(LOW)
WRITE TIMER 2 COUNT - LSB
NEAR
PROC
PUSHF
AL,PORT B
AL,NOT TGATE2+SPK21
AH,AL
AL,AH
AL,NOT (GATE2+SPK2)
PORT_B,AL
OR
AND
EO
C4
Fe
61
MOV
AND
OUT
POPF
MDV
CALL
PUSHr
0408
OOFB R
CX , .035
'AITF
CLI
'N
AND
61
03
C4
61
AL,PORT B
AL,GATE2+SPK2
AL,AH
PORT_B,AL
OR
OUT
pbPF
RET
213
274
OOFB
BEEP
ENDP
2T.
21.
2ii
1- - - WA I TF ------------------------------ - ------- - - ------ - --:-- - - - -------;
~iXt:.D TiME WAIT ROUTINE tHARDWARE CONTROLLED - NOT PROCESSOR)
;
•I ENTRY •
2T8
21.
.8.•••
:
;
I EXITI
I
I
282
•• 3
28.
2 ••
28.
281
288
= COUNT
(CX)
=
OF 15.0151'31 MICROSECOND INTERVALS TO WAIT
MEMORY REFRESH T I MER 1 OUTPUT USED AS REFERENCE
AFTER
(CX)
TIME COUNT (PLUS OR MINUS 16 MICROSECONDS)
0
I
i ------------------- ----- -- - - - - - ----- -- ---- -- -- ------ - - -------------- ----
OaFS
OOFB 50
WAITF
290
OOFt
WAITFt:
291
OOFC E4 61
28'
(C)!)
PROC
PUSH
NEAR
AX
DELAY rOR
(CX)·t5.08573? US
SAVE WORK REGISTER (AH)
294
0102 14 F8
COP
"E
WAITFt
USE TIMER 1 OUTPUT BITS
READ CURRENT COUNTER OUTPUT STATUS
MASK FOR REFRESH DETERMINE BIT
DID IT JUST CHANGE
WAIT FOR A CHANGE IN OUTPUT LINE
296
297
0104 8A EO
0106 E2 F4
MOV
LOOP
AH,AL
'AITF1
SAVE NEW FLAG STATE
DECREMENT HALF CYCLES TILL COUNT END
0108 58
0109 C3
POP
RET
AX
RESTORE
RETURN
'N
292
OOFE 24 10
ANO
293
0100 3Ao C4
2'.
AL,PORT B
:t::~FR!SH_BIT
2 ••
299
300
(AH)
(CX)
=
0
30.
302
.AITF
OIOA
ENOP
303
304
1--- CONFI G BAD ---------------------------------------------------------
30.
3D.
30T
30.
:
OIOA
OIOA 50
311
312
313
010a
OIOE
0111
0113
314
315
316
317
318
OilS
0118
0119
OlIO
320
OIIE
31.
~~~~C=~~-~!A~E;I~~ igN~~gl~~~~RC~~~I~~~I~I~~IE~~~~BLED)
:
;------------------------------------------------------------------------
309
310
5-74
B8
E8
DC
86
BE8E
0000 R
20
EO
E8 OOIC R
S8
81 CD 4000
C3
TEST4
CONFIG BAD
- PUSH
MOV
CALL
OR
XCHG
CALL
POP
OR
RET
PROC
AX
NEAR
~~o~· ~~~gS_DIAG+NMI)
ADDRESS CMOS DIAGNOSTIC STATUS BYTE
GET CURRENT VALUE
SET BAD CONFIGURATION BIT
SETUP FOR WR I TE
UPDATE CMOS WITH BAD CONFIGURATION
:~:~~D-CONFIG
CMOS WRITE
AX BP,04000H
I
SET CONFIGURATION BAD FLAG IN (BP)
1-'
04-21-86
.21
.22
PAGE
:--- XPC_BYTE -- XLATE_PR -- PRT_HEX -----------------------------------;
.24
,
I
,
I
'2'
.2..2.
.2..2.
OIIE
• 21
no
CONVERT AND PR 1 NT ASC II CODE CHARACTERS
I
AL CONT AI NS NUMBER TO BE CONVERTED •
AX AND ex DESTROYED.
I
;----- -------------------------------- - ---------------------------------PRoe
XPC_BYTE
331
332
333
OIIE 50
OIIF CO E8 04
0122 E8 0128 R
PUSH
SHR
334
0125 58
335
0126 24 OF
POP
ANa
...
NEAR
DISPLAY TWO HEX DIGITS
SAVE FOR LOW NIBBLE DISPLAY
NIBBLE SWAP
DO THE HIGH NIBBLE DISPLAY
RECOVER THE NIBBLE
ISOLATE TO LOW NIBBLE
FALL INTO LOW NIBBLE CONVERSION
AX
AL,'"
XLAT_PR
AX
AL.OFH
CALL
.31
338
0128
339
341
342
.4.
0128 04 90
012A 21
0128 14 40
0120 21
344
Ol2E
345
346
347
OllE 84 DE
0130 81 00
0132 CO 10
•••
348
0134 C3
350
0135
340
NEAR
AL.090H
PRT _HEX PROC
MOV
MOV
INT
RET
NEAR
AH,OEH
BH.O
10H
351
0135
352
0135
359
0135
360
0135 S;'
361
362
363
0131 E8 OIIE R
013A 8;' C2
olac E8 OIIE R
364
Ol3F 80 30
365
366
367
368
0141
0144
0146
0149
310
.11
014'\
CONVERT aO-OF TO ASC II CHARACTER
ADD FIRST CONVERSION FACTOR
ADJUST FOR NUhlER I C AND ALPHA RANGE
ADD CONVERSION AND AO')U5T LOW NIBBLE
ADJUST HIGH NIBBLE TO ASCII RANGE
AL.040H
PRT HEX ENOP
XLAT PR ENOP
XPC_D"YTE
•••
•••
•••
•••
"1
•••
•••
XLAT _PR PROC
ADD
DAA
ADC
OAA
1 D 1SPLAY CHARACTER IN (AL) COMMAND
1 CALL VIOEO_IO
ENDP
;--- PRT SEG ---------------------------------------------------I
'RINT A SEGIllENT VALUE TO LOOK LIKE A 21 BIT ADDRESS
I
I
OX MUST CONTAIN SEGMENT VALUE TO BE PRINTED
t
,--- ----------------------------- -- ------------------------------
ceo
E8 Ol2E R
BO 20
Ea Ol2E R
C3
PRT SEG PROC
MOV
CALL
MOV
CALL
MOV
CALL
MOV
CALL
RET
NEAR
AL,DH
XPC BYTE
AL.15L
XPC BYTE
AL. TO'
PRT HEX
AL,T ,
PRT_HEX
GET MSB
01 SPLAY SEGMENT HIGH eYTE
LSB
01 SPLAY SEGMENT LOW BYTE
PRINT A '0 '
TO MAKE LOOK LIKE ADDRESS
ADO ENDING SPACE
PRT _ SEG ENDP
.1..1..1.
.11
,--- PROT PRT HEX -------------------------------------------------------
'12
.13
,
-
-
t
I
PUT A CHARACTER TO THE D I SPLAY BUFFERS WHEN I N PROTECTED MODE
t
I
I
;
(AL) = ASC I I CHARACTER
I
(01)= DISPLAY REGEN BUFFER POSITION
I
1
1---- ---- - --------------------------- ---------- ---------- -- --------- -----
.18
31.
380
381
382
383
•••
•••
•••
014;'
014,A, 06
0148 57
Ol4C 01 El
387
..,
014E 6;' 20
388
389
0150 07
0151 All.
390
OHi2 4F
"2
•••
SAL
;-----
394
395
0153 6;' 30
0155 01
0156 A'"
391
398
399
OHiT 4F
0158 6;' 38
015;' 01
400
401
0158
DISC 4F
NEAR
1 SAVE CURRENT SEGMENT REGISTERS
01.1
I MULTI PLY OFFSET BY TWO
BYTE PTR C BWCRT PTR
ES
--
GET MONOCHROME BUFFER SEGMENT SELECTOR
SET (ES) TO BIW DISPLAY BUFFER
PLACE CHARACTER I N BUFFER
AD.JUST POINTER BACK
01
ENHANCED GRAPHICS ADAPTER
PUSH
POP
STOSB
DEC
PUSH
POP
STOSB
OEC
"'A.
PROC
ES
DI
MONOCHROME VIDEO CARD
PUSH
POP
STOSB
DEC
1-----
396
.0..0.
PROT PRT HEX
PUSH
PUSH
BYTE PTR E CCRT PTR
ES
--
ENHANCED COLOR D I SPLAY PO I NTER LOW 64K
LOAD SEGMENT SELECTOR
PLACE CHARACTER I N BUFFER
AD.JUST POINTER BACK
ENHANCED COLOR DISPLAY POINTER HI 64K
LOAD SEGMENT SELECTOR
PLACE CHARACTER I N BUFFER
AD.JUST POINTER BACK
01
BYTE PTR E CCRT PTR2
ES
-01
.02
405
,-----
401
0150 6;' 28
015F 01
0160 53
408
0161
409
0162 51
410
411
412
0163 33 e9
0165 BA 03DA.
0168 93
413
414
415
41&
417
418
0169
0169
DlbA
OlbC
Ol6E
016F
420
421
422
423
424
425
01 TO 59
0171 5A.
011258
0113 5F
01T407
0115 C3
406
.,.
'2.
427
COMPATIBLE COLOR
PUSH
POP
PUSH
PUSH
PUSH
XOR
MOV
XCHG
52
~~TE PTR C_CCRT_PTR
I
SET (OS)
BX
I
SAVE WORK REGISTERS
TO COMPATIBLE COLOR MEMORY
OX
CX
CX.CX
DX,03DAH
AX.BX
TIMEOUT LOOP FOR ~BAD" HARDWARE
STATUS ADDRESS OF COLOR CARD
SAVE IN (BX) REGISTER
IN
TEST
LOOPZ
XCHG
STOSB
AL,DX
AL,RVRT+RHRZ
PROT 5
Ax.eX
GET COLOR CARD STATUS
CHECK FOR VERT I CAL RETRACE
TIMEOUT LOOP TILL FOUND
RECOVER CHARACTERS
PLACE CHARACTER I N BUFFER
POP
POP
POP
POP
POP
RET
CX
DX
PROT_51
EC
A8 09
EI FB
93
Ali.
(OR HORZ 1
; RESTORE REGISTERS
BX
01
ES
0176
TEST4
5-75
'-5
04-21-86
,- ------------------------- - -------- - ----
42.
42'
4.0
PAGE
I
4.2
4"
4'4
4.5
4 ••
4.7
4 ••
4"
440
44.
ROM CHECKSUM SUBROUTINE
I
r ---- -------- - -- - - --------- - - -------- - ---
4"
0116
0116 2B C9
ROM CHECKSUM
SUB
0118
0178 32 CO
017A
OllA 02 07
aile 43
0170 E2 F8
ROM CHECKSUM eNT I
-
XOR -
PROC
ex.ex
NEAR
I NUMBER OF BYTES TO ADD I S 64K
I ENTRY FOR OPTIONAL ROM TEST
AL,AL
ROM_LI
I GET (DS:BX)
I PO I NT TO NEXT BYTE
I ADD ALL BYTES I N ROM MODULE
ADD
.NC
LOOP
442
HS
allF OA CO
OR
444
445
0181 C3
RET
44.
0182
447
44.
44.
450
45.
4'2
45.
454
455
45.
457
4'.
45.
4.0
4 ••
4.2
4.,
; SUM
AL.AL
=
O?
ENDP
;-----------------------------------------------------------------------I
THIS ROUTINE CMECKSUMS OPTIONAL. ROM MODUL.ES AND
I
I
IF CHECKSUM IS OK. CALLS INITIALIZATION/TEST CODE IN MODULE
I
;---------------------- - --------- -- ---- -- - --- --- ---------------------- -0182
0182
0185
0187
0189
Olec
OleF
0191
0194
0196
0199
B8
8£
2"
8A
Cl
88
CI
03
E8
14
---- R
CO
E4
41 02
EO 09
C8
E8 04
DO
0118 R
05
ROM CHECK
MOV
MOV
SUB
MOV
SHL
MOV
SHR
ADD
CALL
JZ
PROC
NEAR
AX.DATA
ES.AX
AH,AH
AL.(BX+2J
AX.9
CX.AX
AX.4
DX.AX
ROM CHECKSUM CNT
ROM:CHECK_I -
I POINT ES TO DATA AREA
; ZERO OUT AH
; GET LENGTH I NO I CATOR
I MULTIPLY BY 512
I SET COUNT
SET PO I NTER TO NEXT MODULE
00 CHECKSUM
4.4
4.5
4 ••
4.7
4 ••
4 ••
470
4"
472
47'
4,.
475
47.
4"
47.
0198 E8 0000 E
019E EB 13
DIAD
DIAD
OIAI
0lA8
DIAD
0lB2
01B3
0183 C3
ROM CHECK END:
RE"T
0lB4
ROM_CHECK
47.
4.0
4 ••
4 ••
4 ••
4'0
4 ••
4'2
4"
4.4
4'5
4 ••
4'7
4 ••
4 ••
.00
50.
602
50.
504
505
50.
507
508
50.
5.0
511
5.2
5 ..
5.4
• 20
52.
'2'
'.0
.31
SAVE POINTER
: tg:g
~~~~~~T
aWaRD PTR Es,otO ROM INIT; CALL INITIALIZE/TEST ROUTINE
OX
I RETURN TO CALLER
ENDP
KBD_RESET
MOV
CALL
.JCXZ
PROC
NEAR
AL.OFFH
XMIT_8042
~~3KB_ACK
.F
CMP
OIBF
OICI
0lC3
0lC8
0lC9
0lC8
oleo
OICD
0102
0104
FD
21
06 0068 R 00
MOV
OUT
MOV
AL.OFDH
INTAOI,AL
OINTR_FLAG,O
SUB
BL,IO
CX.CX
TEST
JNZ
LOOP
G ••
Gil
0106
0108
OIDA
OIDA
OIDC
OIDE
OIDE
BO
E6
C6
FB
83
28
JNZ
5"
MOV
OA
C9
SET KEYBOARD RESET COMMAND
GO I SSUE THE COMMAND
EXIT IF ERROR
Gl3
0188 3C FA
75
oIBD
ENABLE KEYBOARD INTERRUPTS
WRITE 8259 INTERRUPT MASK REGISTER
RESET INTERRUPT INDICATOR
ENABLE INTERRUPTS
TRY FOR 400 MILLI SECONDS
SETUP INTERRUPT TIMEOUT COUNT
Gil,
F6 06 006B R 02
75 06
E2 F7
FE CB
75 F3
DID A KEYBOARD I NTERRUPT OCCUR ?
YES - READ SCAN CODE RETURNED
NO - LOOP TILL TIMEOUT
OINTR_FLAG.02H
OEC
BL
JNZ
Gil
IN
AL,PORT_A
BL,AL
I TRY AGAIN
GI21
E4 60
8A 08
MOV
READ KEYBOARD SCAN CODE
SAVE SCAN CODE .JUST READ
GI31
C3
RET
OIDF
KBD_RESET
•
RETURN TO CALLER
ENDP
1------------------------------------------------------I
BLINK LED PROCEDURE FOR NFG RUN-IN TESTS
:
I
IF LED IS ON. TURN IT OFF. IF OFF. TURN ON.
I
;-------------------------------------------------------
5 ••
517
.22
52.
.24
525
52.
527
52.
I
~~:::g_=g~_~~~~Dgo03H
;------------------------------------------- --------------- --- ----------01B4
0lB4 80 FF
0186 E8 0000 E
0189 E3 23
5.5
•••
•••
OX
POST CHECKSUM ERROR
AND EXIT
; --- KBD RESET ---------------------------------------------------------I
THIS PROCEDURE WILL SEND A SOFTWARE RESET TO THE KEYBOARn.
!
I
SCAN COOE
OAAH
SHOULD BE RETURNED TO THE PROCESSOR.
I
SCAN CODE 065H
IS DEFINED FOR MANUFACTURING TEST
::i
4.4
4.5
4 ••
4.7
ROM ERR
SHoA'T ROM_CHECK_END
ROM CHECK II
POSH
52
261 C7 06 0067 R 0003
MOV
261 8C IE 0069 R
MOV
261 FF IE 0067 R
CALL
5A
POP
OloF
OIDF
OlEO
OIEI
0lE3
0lE5
0lE7
0lE9
0lE8
OIEC
FB
50
E4
34
E6
80
E6
58
CF
BLINK INT
STI
PUSH
80
40
80
20
20
:~: ~~~O~g~~8
SAVE AX REGI STER CONTENTS
READ CURRENT VALUE OF MFG PORT
FLIP CONTROL 81T
-
MFG PORT ,AL
AL.~OI
INTAOO,AL
AX
ENDP
TEST4
NEAR
AX
IRET
O.EO
5-76
'N
XOR
OUT
MOV
OUT
POP
PRoe
I RESTORE AX REGISTER
1-'
004-21-86
532
533
534
535
53.
537
53.
53.
54.
541
542
543
544
545
54.
541
548
5"'9
550
551
552
553
554
555
556
551
!S5e
559
PAGE
1 - -- -- --------- - ------------- -- -- ---------- - - - --- --------- ----------- ----------I
THIS ROUTINE INITIALIZES THE TIMER DATA AREA IN THE ROM BIOS
s
1
OAT A AREA.
I TIS CALLED BY THE POWER ON ROUT I NES.
I T CONVERTS
1
HRsMINISEC FROM CMOS TO TIMER TICS.
IF CMOS IS INVALID, TIMER
I
IS SET TO ZERO.
1
1 INPUT
NONE PASSED TO ROUTINE BY CALLER
CMOS LOCAT IONS USED FOR TI ME
I
1
1 OUTPUT
I
1
eT I MER LOW
eTIMER-HIGH
eTIMER-OFL
ALL RE'C'I STERS UNCHANGED
I
COUNTS SEC
COUNTS-MIN
COUNTS-HOUR
UPOATE:TIMER
0444
0001
=
= 0080
OlEO
OlEO
01EE
OIEF'
01F'2
OIF<4
Din
OIF'A
SET _TOO ~~~~A
EQU
EQU
EQU
EQU
18
1092
7
lOOOOOOOB
561
562
5.3
564
0204 15 68
JNZ
565
0206 28 C9
SUB
566
561
0208
0208 80 8A
cx.ex
MOV
568
569
510
020A E8 0000 R
0200 A8 BO
020F El F'7
CALL
TEST
LOOPZ
AL,CMOS REG A+NMI
CMOS READ -
571
512
513
514
0211 E3 58
0213 28 C9
JCXZ
515
516
5TT
518
0215
021 T
a21A
D21C
00311
CO
0070
OD6e
006E
8E
0000
C4
PUSH
CALL
R
R
R
R
R
DS
ODS
I 655043 - 65536
I RTC UPDATE IN PROCESS BIT MASK
I ESTABLISH SEGMENT
SUB
AX,AX
.OV
.OV
.OV
.OV
CALL
AND
:~:~~~-~~~:~~
UIPI
1 T I MER OAT A CONVERS I ON EQUATES
NEAR
60
IE
Ea
28
A2
A3
A3
OIFO 80
OIFI'" E8
0202 24
560
s
1-- - ----- -------- ------------ ------ - -- -- -- - ----- -- -------- - ----------- - -- ---- ---
= 0012
=
eTIMER-HIGH.AX
AL.CMO~ DIAG+NMI
CMOS READ
I RESET T) MER ROLL OVER I NO I CATOR
I AND T I MER COUNT
I
I
CHECK CMOS VALIDITY
READ DIAGNOSTIC LOCATION IN CMOS
AL,BAD_BAT+BAO_CKSUM+CMO~_~~~_~~~~ERY.
POD DONE
CHKSUM ERROR. CLOCK ERROR
I CMOS NOT VALID -- TIMER SET TO ZERO
1
~~pUJ5DATE_TIMER
ACCESS REG I STER A
READ CMOS CLOCK REG I STER A
I
POD DONE
WAIT TILL UPDATE BIT IS ON
CMOS CLOCK STUCK 1FT I MEOUT
SUB
cx.ex
.OV
CALL
TEST
LOOPNZ
AL,CMOS REG A+NMI
CMOS READ AL.UPDATE TIMER
UIPOFF
-
I
021E E3 4E
JCXZ
POD_DONE
1 CMOS CLOCK STUCK IF TIMEOUT
0220 80 80
.OV
0222 E8 0000 R
0225 3C 59
0221 17 48
C.P
AL,CMOS SECONDS+NMI
CMOS READ
AL.5'9H
TOO_ERROR
TIME JUST UPDATED
ACCESS SECONDS VALUE IN CMOS
ARE THE SECONDS WITHIN LIMITS?
GO IF NOT
CVT BINARY
CX,AX
CX,2
CONVERT I T TO BI NARY
MOVE COUNT TO ACCUMULATION REGISTER
ADJUST FOR SYSTEMATIC SECONDS ERROR
UIPOFFI
0215
80
E8
A8
EO
8A
0000 R
80
F1
ACCESS REG) STER A
READ CMOS CLOCK REG) STER A
NEXT WAIT TILL ENO OF UPDATE
57.
5.,
580
582
583
584
585
5 ••
587
588
589
590
591
0229
C22C
022E
0231
0233
E8
88
C1
83
F6
0281 R
C8
E9 02
12
E3
592
593
0235 03 ce
0231 80 82
594
0239 E8 0000 R
CALL
JA
CALL
MOV
SHR
.OV
MUL
ADD
MOV
CALL
595
D2lC 3C 59
CMP
596
597
023E T1 :3 1
0240 E8 0281 R
598
599
600
601
602
603
604
605
606
607
608
0243
0244
0246
0248
0249
50
01 E8
03 C8
58
88 0444
JA
CALL
PUSH
Q24C
024E
0250
0252
0255
0257
F1
03
SO
E8
3C
II
E3
CB
84
0000 R
23
18
MUL
ADD
MOV
CALL
610
611
612
613
6104
615
616
617
618
619
620
621
.22
623
624
625
626
627
628
629
630
631
632
633
.34
635
0259
02!SC
025E
0260
0262
0264
0267
026B
026E
026E
026F
0270
E8
8B
B3
F6
03
83
89
A3
0287 R
DO
07
E3
CI
02 00
16 006E R
006C R
CALL
.OV
.OV
.UL
ADD
637
638
639
6040
6041
642
.43
60404
0287
0287
0289
028C
028E
0290
•••
.3.
0271
0271
0272
0273
0276
0279
027C
027F
0281
0283
0286
.OV
IF
61
C3
IF
61
BE
E8
B8
E8
OC
86
E8
C3
CMP
JA
AOC
.OV
.OV
POD_DONE~Op
1 COUNT FOR SECONDS
CX,AX
~~O~M~~A~ I NUTES+NMI
ACCESS MINUTES VALUE I N CMOS
ARE THE MINUTES WITHIN LIMITS?
GO IF NOT
CONVERT IT TO BINARY
SAVE M) NUTES COUNT
ADJUST FOR SYSTEMATIC MINUTES ERROR
ADD ADJUSTMENT TO COUNT
RECOVER BCD MINUTES VALUE
AL,59H
TOO ERROR
CVT-BINARY
AX AX,I
CX.AX
AX
:~,COUNTS_MIN
COUNT FOR MINUTES
ADD TO ACCUMULATED VALUE
CX,AX
AL.CMOS HOURS+NMI
CMOS READ
AL,2JH
TOO_ERROR
CVT BINARY
DX,AX
BL.COUNTS HOUR
BL
AX,CX
DX,OOOOH
ACCESS HOURS VALUE I N CMOS
ARE THE HOURS WITHIN LIMITS?
GO IF NOT
1 CONVERT IT TO BINARY
1 COUNT FOR HOURS
:i: :i~:~b~~A~X
OS
POPA
RET
0000
0042
8E8E
0000
004
C4
OOIC
0287
0291
SHR
ADD
POP
~~.COUNTS_SEC
E
R
R
R
TOO ERRORI
POP
POPA
.OV
CALL
MOV
CALL
OR
XCHG
CALL
RET
1 RESTORE SEGMENT
I RESTORE REG I STERS
1 0 I SPLAY CLOCK ERROR
DS
I
I
I
I
I
SET CLOCK ERROR IN STATUS
READ DIAGNOSTIC CMOS LOCATION
SET NEW STATUS WITH CMOS CLOCK ERROR
MOVE NEW STATUS TO WORK REG I STER
UPDATE STATUS LOCATION
SET_TOO ENOP
8'A
CO
204
05
C3
EO
EC 004
OF
OA
CVT BINARY
MOV
SHR
AND
PROC
AH,AL
AH,4
AL,OFH
AAO
NEAR
1 UNPACK 2 BCD DIGITS IN AL
RESULT IS IN AX
CONVERT UNPACKED BCD TO BINARY
RE7
CVT_B I NARY
ENDP
TEST4
5-77
IBM P.,...on.1 COlllpl.lt.,.. MACRO A ••• lllbl.,..
V.,...lon 2.00
TEST4 ---- 06/10/85 POST AND BIOS UTILITY ROUTINES
..-..-.._.._..,
...'0•••,
..•••
PAGE
1--- 011 -- INT
1 TEMPORARY
THIS ROUTINE IS ALSO LEFT IN PLACE AFTER THE POWER ON DIAGNOSTICS
1
TO SERVICE UNUSED INTERRUPT VECTORS.
LOCATION ~oINTR FLAG" WILL
1
CONTAIN EITHER:
I
I) LEVEL OF HARDWARE I NTERRUPT THAT CAUSED COOE TO BE EXECUTED I OR
I
2) ~FF" FOR A NON-HARDWARE INTERRUPT THAT WAS EXECUTED ACCIDENTALLY.
,
I -- -- --- - - - ------ - - - -- -------- -- -- -- - - -- ----- -- ---------- -- - ------- - - -----------
656
657
658
659
660
661
662
663
664
665
0291
0291
0292
0293
Q295
0297
Ol99
029B
0290
029F
667
668
669
670
671
672
673
674
675
676
02AI
02A3
02A5
02A5
02A7
02A9
02AB
OlAD
02AF
02BI
678
619
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
02B3
02B5
02B7
02B9
.TT
11 H -- ( IRQ LEVEL ?1 ) -------------------------------------INTERRUPT SERVICE ROUTINE FOR POST
:
I
I
•• 2
•••
1-7
04-21-86
0288
0280
02BF
02CI
02C3
02C3
02CS
02C7
02CA
02ec
02CE
0200
0200
0202
0204
0204
0205
PROC
PUSH
PUSH
Mav
NEAR
CUT
INT:'CC,:.:...
"MP
IN
Mav
OR
1+2
AL,INTAOO
AH,AL
AL,AH
HW_INT
84 FF
EB 2F
Mav
"MP
AH.OFFH
SHORT SET_INTR_FLAG
BO
E6
EB
E4
8A
OA
74
OB
AO
00
AO
F8
Mav
OUT
"MP
IN
Mav
OR
10
"Z
AL.OBH
INTBOO.AL
1+2
AL.INTBOO
BH.AL
BH,BH
NOT_SEC
E4
OA
EB
E6
BO
EB
E6
E8
AI
C7
00
AI
20
00
AO
00
IN
OR
"MP
OUT
Mav
"MP
OUT
"MP
AL,INTBOI
AL,BH
1+2
INTBO I IAL
AL,EOI
1+2
INTBOO,AL
SHORT IS_SEC
GET SECOND I NTERRUPT MASK
MASK OF'F LEVEL BEING SERVICED
I/O DELAY
E4
EB
80
OA
E6
EB
21
00
E4 FB
C4
21
00
AL,INTAOI
1+2
AH.OFBH
AL,AH
INTAOI,AL
1+2
GET CURRENT MASK VALUE
I/O DELAY
DO NOT 0 I SABLE SECOND CONTROLLER
MASK OFF LEVEL BE I NG SERV I CEO
SET NEW I NTERRUPT MASK
I/O DELAY
011
50
53
BO
E6
EB
E4
8A
OA
75
OB
20
00
20
EO
C4
04
"NZ
FF
NOT SEC,
IN
"MP
AND
OR
OUT
"MP
AX
BX
I SAVE REGISTER AX CONTENTS
AL,OBH
; READ IN-SERVICE REGISTER
I iFiND QUT wHAT LEVEL BEING
I
SERVICED)
I GET LEVEL
I SAVE IT
laO? (NO HARDWARE ISR ACTIVE)
I SET FLAG TO
"FF~
IF NON-HARDWARE
1 READ IN-SERVICE REGISTER FROM
I
I
INTERRUPT CHIP 112
I/O OELAY
I CHECK THE SECOND INTERRUPT CH I P
; SAVE IT
; CONTINUE IF NOT
SEND EO I TO SECOND CH I P
I/O DELAY
IS_SEC:
Mav
OUT
SET INTR FLAG I
BO 20
E6 20
-
58
IE
"GO
02D6 E!!
700
701
702
703
704
70'
706
0209
0200
02DE
02DF
02DF
OO~A
CF
PUSH
OS
Mav
~~NTR_FLAG,AH
POP
POP
AX
DUMMY RETURN 1:
IRET011
02EO
BX
C:.:...:...
R
88 26 006B R
IF
58
AL,EOI
INTAOO,AL
Flop
; RESTORE (BX) FROM STACK
I SAVE ACTI VE (OS)
I SET UA-r A :iEGMENT
1 SET FLAG
I RESTORE REG I STEFl: AX CONTENTS
I NEED I RET FOR VECTOR TABLE
ENDP
707
;--- HARDWARE INT 71 H -- ( IRQ LEVEL 9) -- TO INT OA H -------------------I RED I RECT SLAVE INTERRUPT 9 TO I NTERRUPT LEVEL 2
:
I
THI S ROUTINE FIELDS LEVEL 9 INTERRUPTS AND
1
CONTROL IS PASSED TO MASTER INTERRUPT LEVEL 2
I
I - - - - -- -------- - - ------- - ------------------- -- -- - --------- - - - - ------- - - - - - ------
70.
70'
710
711
712
71'
714
715
716
717
718
719
720
721
02EO
02EO
02EI
02E3
02E5
02E6
50
BO 20
E6 AO
58
CD OA
RE_D I REC~U~~OC
Mav
OUT
POP
INT
02E8 CF
NEAR
AX
AL,EOI
INTBOO,AL
AX
OAH
IRET
I SAVE (AX)
; EO I TO SLAVE I NTERRUPT CONTROLLER
I RESTORE (AX)
I GIVE CONTROL TO HARDWARE LEVEL 2
1 RETURN
722
723
72_
02E9
RE_D I RECT ENDP
1--- HARDWARE INT 15 H -- ( IRQ LEVEL 13 ) -----------------------------------I SERVICE X287 INTERRUPTS
:
THIS ROUTINE F"IELDS X281 INTERRUPTS AND CONTROL
;
1
I S PASSED TO THE NMI INTERRUPT HANDLER FOR
;
COMPATIBILITY.
:
72.
72.
727
72.
72'
;-- -
730
731
732
733
734
735
02E9
02E9 50
02EA 32 CO
02EC E6 FO
------------ - - ------- - - -----------------------------------------------------
INT_287 PROC
PUSH
xaR
OUT
NEAR
AX
AL,AL
X287,AL
SAVE (AX)
I REMOVE THE I NTERRUPT REQUEST
73.
737
738
739
740
741
,.2
,.,..
,..
02EE
02FO
02F2
02F4
02F5
BO
E6
E6
58
CD
743
02F7 CF
745
02F8
747
02F8
749
750
751
752
753
02F8
02FA
OlFC
02FC
02FO
755
756
02FF
02FF
7._
02
AL,EOI
INTBOO,AL
INTAOO .AL
AX
02H
ENABLE THE INTERRUPT
THE SLAVE
THE MASTER
RESTORE (AX)
GIVE CONTROL TO NM I
I RETURN
IRET
INT_287 ENDP
PROC_SHUTDOWN
BO FE
E6 64
PROC
Mav
OUT
AL, SHUT CMO
STATUSJ5ORT , AL
HLT
"MP
PROC_S
COMMON 80286 SHUTDOWN WA I T
SHUTDOWN COMMAND
SEND TO KEYBOARD CONTROL PORT
PROC_S:
F4
EB FD
PROC SHUTDOWN
CODEENOS
END
7'7
5-78
Mav
OUT
OUT
POP
INT
20
AO
20
TEST4
ENDP
I WA I T FOR 80286 RESET
; I NSURE HALT
I-I
04-21 -86
I
2
••
5
•
••
PAGE 118.121
TITLE TESTS ---- 06/10/85 EXCEPTION INTERRUPT TEST HANDLERS
.286C
.LIST
CODE
SEGMENT BYTE PUBL I C
0000
T
PUBLIC
PUBLIC
I.
"
15
16
1T
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
••••
n
1
EXCEPTION INTERRUPT ROUTINE
I
1---------------------------------------0000
0000
0000
0002
0005
0005
0001
OOOA.
OOOA.
Dooe
DOOF
DOOF
0011
0014
0014
0016
0019
0019
001A.
ODIC
0010
OOIF
0024
002A.
0028
0020
45
46
47
48
49
50
0030
0030
0032
0034
0034
0036
51
52
53
54
55
56
51
58
59
OOlC
D03C
003E
0040
0040
0042
0044
0044
00 .... 6
0048
0048
004"
004C
004C
004£
0050
0050
0052
0054
0054
0056
60
61
62
63
64
65
66
67
68
fJ9
TO
11
72
13
14
AL.90H
TEST_EXC
<><> SET CHECKPOINT <><>
GO TEST IF EXCEPTION WAS EXPECTED
AL.9IH
TEST_EXC
<><> SET CHECKPOINT <>,<>
GO TEST IF EXCEPTION WAS EXPECTED
AL.92H
TEST_EXC
<><> SET CHECKPOINT <><>
GO TEST IF EXCEPTION WAS EXPECTED
AL,93H
TEST_EXC
<><> SET CHECKPOINT <><>
GO TEST IF EXCEPTION WAS EXPECTED
AL,94H
TEST_EXC
<><> SET CHECKPOINT <><>
GO TEST IF EXCEPTION WAS EXPECTED
"MP
eo
MOV
92
£9 0082 R
"MP
80 93
E9 0082 R
MOV
80 94
E9 0082 R
MOV
"MP
EXC_OSI
06
6A 48
"MP
PUSH
PUSH
POP
01
28 FF
261 Cl 05 0000
261 CT 45 02 lFFF
01
80 95
E9 0082 R
.5
BYTE PTR ES TEMP
'5
-
I
LOAD ES REG I STER WITH SELECTOR
F I X BOUND PARAMETERS
SUB
MOV
MOV
POP
MOV
"MP
01.01
, POINT BEGINNING OF THE BLOCK
AL,9!5H
TEST _EXC
I
:g:g
~~~ ~~: Ig: !2~ .01FFF~ ~E~E~I;~~o~gR~o T~l~~~~
.5
<><> SET CHECKPO I NT <><>
1 GO TEST I F EXCEPT I ON WAS EXPECTED
80 91
EB lA.
ALI 9TH
SHORT TEST_EXC
<><> SET CHECKPOINT <><>
GO TEST IF EXCEPTION WAS EXPECTED
0038
ooa8 80 98
003A EB 16
AL,98H
SHORT TEST _EXC
<><> SET CHECKPOINT <><>
GO TEST IF EXCEPTION WAS EXPECTED
80 99
EB 12
AL,99H
SHORT TEST _EXC
<><> SET CHECKPOINT <><>
GO TEST IF EXCEPTION WAS EXPECTED
80 9"
EB 6E
AL,9AH
!SHORT TEST _EXC
<><> SET CHECKPO I NT <><>
GO TEST IF EXCEPTION WAS EXPECTED
80 98
EB 6 ...
AL,9BH
SHORT TEST _EXC
<><> SET CHECKPOINT <><>
GO TEST IF EXCEPTION WAS EXPECTED
BO 9C
EB 66
AL,9CH
SHORT TEST _EXC
<><> SET CHECKPO I NT <><>
GO TEST IF EXCEPTION WAS EXPECTED
BO 90
EB 62
AL.9DH
SHORT TEST _EXC
<><> SET CHECKPO I NT <><>
GO TEST IF EXCEPTION WAS EXPECTED
BO 9£
<><> SET CHECKPO I NT <><>
GO TEST IF EXCEPTION WAS EXPECTED
0058
84
85
86
81
88
89
90
91
92
93
94
95
96
91
98
99
100
101
102
103
104
105
106
lOT
108
109
110
111
112
113
114
MOV
80 91
E9 0082 R
<><> SET CHECKPOINT <><>
GO TEST IF EXCEPTION WAS EXPECTED
0058
005,\
D05t
DO!St
005E
0060
0060
0062
0064
0064
0066
0068
0068
006A
006C
006C
006E
OOTO
OOTO
00T2
0074
00T4
00T6
00T8
00T8
OOTA
OOTC
OOTC
OOTE
0080
0080
0082
0084
0084
0086
0088
0088
008A
83
80 90
E9 00B2 R
AL,96H
SHORT TEST_EXC
75
81
82
CSICODE.DSzABSO
80 96
£8 TE
16
11
18
79
eo
ASSUME
POSTS I
EXC_OOI
,-----
a8
39
40
41
42
43
••
POSTS
SYSINITI
1----------------------------------------
10
II
12
EB !SE
AL,9EH
SHORT TEST _EXC
80 9F
EB !SA
AL.9FH
SHORT TEST _EXC
80 AD
EB 56
AL.OAOH
SHORT TEST _EXC
80 AI
EB 52
<><> SET CHEC!<>
GO TEST IF EXCEPTION WAS EXPECTED
1
I
<><> SET CHECKPO I NT <><>
GO TEST IF EXCEPTION WAS EXPECTED
AL.OA1H
SHORT TEST _EXC
<><> SET CHECKPO I NT <><>
GO TEST IF EXCEPTION WAS EXPECTED
AL.OA2H
SHORT TEST _EXC
<><> SET CHECKPO I NT <><>
GO TEST IF EXCEPTION WAS EXPECTED
AL.OA3H
SHORT TEST _EXC
<><> SET CHECKPO I NT <><>
GO TEST I F EXCEPT I ON WAS EXPECTED
AL.OA4H
SHORT TEST_EXC
<><> SET CHECKPO I NT <><>
GO TEST IF EXCEPTION WAS EXPECTED
EXC_181
80 A2
EB 4E
MOV
EXC_191
"MP
BO A3
EB 4A
MOV
BO A4
EB 46
MOV
BO AS
EB 42
MOV
"MP
"MP
AL,OA5H
SHORT TEST_EXC
<><> SET CHECKPO I NT <><>
GO TEST IF EXCEPTION WAS EXPECTED
BO A6
EB 3E
AL.OA6H
SHORT TEST_EXC
<><> SET CHECKPO I NT <><>
GO TEST I F EXCEPT I ON WAS EXPECTED
BO AT
EB 3A
ALI OATH
SHORT TEST_EXC
<><> SET CHECKPO I NT <><>
GO TEST I F EXCEPT I ON WAS EXPECTED
BO A8
EB 36
BO A9
ES 32
"MP
MOV
"MP
AL,OA8H
SHORT TEST_EXC
<><> SET CHECKPO I NT <><>
GO TEST IF EXCEPTION WAS EXPECTED
AL,OA9H
SHORT TEST_EXC
I
<><> SET CHECKPOINT <><>
; GO TEST IF EXCEPTION WAS EXPECTED
BO AA
Ea 2E
AL.OAAH
SHORT TEST_EXC
<><> SET CHECKPOINT <><>
GO TEST IF EXCEPTION WAS EXPECTED
BO AB
ES 2A
ALIOABH
SHORT TEST_EXC
<><> SET CHECKPOINT <><>
GO TEST IF EXCEPTION WAS EXPECTED
BO AC
EB 26
AL,DACH
SHORT TEST_EXC
<><> SET CHECKPO I NT <><>
GO TEST IF EXCEPTION WAS EXPECTED
TEST5
5-79
1-'
04-21-86
115
II.
liT
II.
II.
DOat
DOat 80 AD
008E EB 22
EXC_2'.
0090
EXC_30r
120
121
122
12.
12.
125
12.
12T
12.
12.
130
0090
0092
0094
0094
0096
0098
0098
009A
DOtt
DOtt
009E
OOAO
IiI
OuM So !lZ
132
13'
13.
135
13.
I3T
138
13.
00A2
00A4
00A4
00A6
00A8
00A8
OOAA
GOAt
GOAt
OOAE
OOBO
OOBO
'.0
,.,
"2
I ••
I ••
I.,
".
I.T
80 AE
EB IE
EXC_311
aD AF
EB IA
EB DE
SYS_35.
aD 83
EB OA
I.S
I ••
I.T
I ••
I ••
110
ITI
IT2
!7!
IT.
IT'
<><> SET CHECKPO I NT <><>
GO TEST IF EXCEPTION WAS EXPECTED
MOV
"MP
AL,OBOH
SHORT TEST_ EXC
<><> SET CHECKPOINT <><>
GO TEST IF INTERRUPT WAS EXPECTED
MOV
"MP
AL.OBIH
SHORT TEST_ EXC
<><> SET CHECKPO I NT <><>
GO TEST IF INTERRUPT WAS EXPECTED
MOV
"MP
AL.OB2H
SHORT TEST_ EXC
<><> SET CHECKPO I NT <><>
GO TEST I F I NTERRUPT WAS EXPECTED
MOV
"MP
AL,OB3H
SHORT TEST_EXC
<><> SET CHECKPOINT <><>
GO TEST I F I NTERRUPT WAS EXPECTED
MOV
"MP
AL,OB4H
SHORT TEST_EXC
<><> SET CHECKPOINT <><>
GO TEST J F J NTERRUPT WAS EXPECTED
SYS_371
aD B5
EB 02
MOV
""P
AL,OB5H
SHORT TEST_EXC
80 86
MOV
AL,OB6H
00B2
00B2 E6 80
TEST_Exe:
OUT
eMP
SYS_38.
<><> SET CHECKPOINT <><>
GO TEST J F J NTERRUPT WAS EXPECTED
I
I
'"
I ••
I ••
<><> SET CHECKPO I NT <><>
GO TEST IF EXCEPTION WAS EXPECTED
AL,OAFH
SHORT TEST _EXC
SYS_36.
aD 84
EB 06
".
150
'.0
,.,
,.2
AL,OAEH
SHORT TEST_EXC
MOV
"MP
SVS_341
OOB4 3iC AF
,.2
MOV
""P
SYS_33.
80 81
EB 12
OOB6 17 Ie
151
<><> SET CHECKPO I NT <><>
GO TEST IF EXCEPTI ON WAS EXPECTED
SYS_32I
80 aD
EB 16
I ••
15'
15'
155
15.
15T
158
15.
AL,OADH
SHORT TEST_ EXC
MOV
"""
00B8
00B9
OOBB
OOBC
00C2
OOCl
00C9
OOCA
OOCB
OOCC
OOCD
OOCE
0001
IE
6A
IF
Cl
C6
6A
Ol
IF
5A
59
51
83
15
0003
0004
0004
0006
0008
OODA
OODC
OOOC
OODE
ODED
00E2
52
86
E4
3A
14
PUSH
PUSH
POP
MOV
MOV
PUSH
POP
POP
POP
POP
PUSH
eMP
08
06 0048 FFFF
06 0040 93
48
F9 40
01
EO
8B
C4
DE
"NZ
PUSH
TEST_EXCOI
XCHG
IN
eMP
"Z
<><> SET CHECKPO I NT <><>
GO TEST IF INTERRUPT WAS EXPECTED
OUTPUT THE CHECKPO I NT
CHECK FOR EXCEPT I ON
GO I F A SYSTEM INTERRUPT
MFG PORT ,AL
AL,OAFH
TEST_EXCO
os
I SAVE THE CURRENT DATA SEGMENT
BYTE PTR GOT PTR
os
-
OSIES TEMP.SEG LIMIT ,MAX SEG LEN
BYTE j5TR DSI (E! TEMP.DATA Ace RIGHTS) ,CPLO DATA ACCESS
BYTE PTR ES TEM~
--
ES
-
OS
OX
RESTORE REG I STERS
CHECK J F COOE SEGMENT SECOND ON STACK
ex
ex
CX.SYS ROM CS
TEST_EXCO -
I CONTINUE IF ERROR CODE
ox
I
AH,AL
ALIoMA PAGE+OAH
AL.AH TEST_EXC3
; SAVE THE CHECKPOINT
PUT SEGMENT BACK ON STACK
.... s. TI-IE EXCEF>T! ON EX!='ECTED?
; GO IF YES
TEST_EXCII
E4 80
:Ie 38
12 01
CF
IN
eM"
"a
AL,MFG PORT
AL,03BH
TEST_EXC2
CHECK THE CURRENT CHECKPO I NT
HALT IF CHECKPO I NT BELOW 3SH
AH.AL
NFG_PORT ,AL
OUTPUT THE CURRENT CHECKPO I NT
<><> CHECKPOINT 90 THRU 85 <><>
IRET
IT.
ITT
ITB
,.0
,.,
179
182
lB.
I.,
I ••
lB.
I.T
00E3
00E3
00E5
OOEl
00E8
86 EO
E6 80
F4
ES F9
OOEA
OOEA
OOEC
OOEE
OOFI
2A CO
E6 8B
B8 0100
CF
TEST_EXC21
XCHG
OUT
HLT
""P
TEST_EXC2
I
I NSURE SYSTEM HALT
AL.AL
DMA PAGE+OAH,AL
AX,OIOOH
I
CLEAR DMA PAGE
TEST_EXC31
sua
OUT
MOV
FOR 80UND INSTRUCTION EXPECTED (INT 5)
RETURN
IRET
I ••
I ••
1- -- ---- ---------------------- -- --------- - - - ----- ------ -- - - - - -- - - - - - - - --I
THIS BUILDS THE DESCRIPTOR TABLES REQUIRED FOR PROTECTED MODE
I
I
PROCESSOR MUST 8E I N REAL MODE
I
1- -------------------- ------------------ - - ----- ---------- - ----- ---- -- - --ASSUME CS I CODE ,OS INOTH I NG.ES INOTH lNG, SS I NOTHI NG
190
191
192
19.
'"
195
196
"1
198
199
200
20 I
202
OOF2
00F2
00F3
OOF4
00F6
00F8
OOFB
SYSINITI
FA
55
SO
E6
ED
la
PROC
eLI
PUSH
MOV
OUT
CALL
MOV
81
80
0149 R
EF
NEAR
NO I NTERRUPTS ALLOWED
SAVE BP
ap
<><><><><><><><><><><><>
<><> CHECKPOINT 81 <><>
AL,81H
WG PORT,AL
SloT BLO
BP,aT
SAVE THE POINTER TO .JUST PAST THE lOT
AS WE HAVE NO SOA, USE THE S I X BYTES
HERE TO LOAD THE IOTR.
WE WILL SlOT
WHEN WE GET TO SOA INITIALIZATION.
SEGNENT LIMIT = LENGTH OF lOT
STORE THAT AS lOT LIMIT
lOT ADDRESS
AND ACCESS RIGHTS BYTE (UNDEFINED)
20.
20.
205
206
OOFO 98 0800
0100 AS
MOV
20T
0101 BI OOAO
MOV
AX.SYS_IDT_LOC
208
209
210
211
212
0104 AS
0 t 05 B8 0000
0108 AS
STOSW
MOV
STOSW
SEGOV
ES
0109 26
21.
010A OF
OIOB
OIOB 88 5E 00
OIOE
218
219
220
oloa
oloa 01
OIOE
221
OIOE 88 FD
222
2 ••
•••
225
226
221
228
oa
oa
LIDT
214
215
216
217
+
+ 11000 I
+
+ 110002
+
SF DeAD
ES 0140 R
88 EF
B8 ooee
5-80 TESTS
LABEL
MOV
LABEL
ORG
oa
ORG
MOV
1----0110
0113
0116
0118
AX,SYS_IOT_LEN
STOSW
AX,O
; LOAD THE lOT
026H
[apJ
OOFH
BYTE
BX,WORO PTR [BP)
BYTE
OFFSET CSI110001
OOIH
OFFSET CS 1110002
DI,BP
REG I STER FROM TH I S AREA
I
ESIOI NOW --> END OF lOT AGAIN
BUILD THE GOT •
MOV
CALL
MOV
MOV
DI,GOT LaC
GOT BL~
BP,'OI
AX ,GOT_LEN
SAVE THE ES:OI POINTER
AX
LENGTH OF THE GOT
=
'-3
04-21-86
22'
230
231
232
233
23.
235
23.
23T
23.
23.
2.0
2"
2.2
2.3
2"
2 ••
0118 AB
Qlle B8 D8AO
2 ••
Ol2t AS
2.T
2'8
0120 88 FD
STOSW
MOY
STOSW
MOY
STOSW
SEGOY
OIIF AB
0120 Be 0000
0123 AS
012. 26
0125 OF
0126
0126 88 56 00
0129
0126
0126 01
+
+ 1100004
+
+ 1100015
+
0129
0129 88 FD
0128 AB
ORO
MOY
STOSW
STOSW
MOY
1-----
2 ••
2'0
OB
LGoT
OB
LABEL
MaY
LABEL
ORG
OB
ES
026H
[BPJ
OOFH
BYTE
OX,WORo PTR [BP]
BYTE
OFFSET CSI110004
OOIH
OFFSET CS.110005
DI,BP
POP
MOY
LMSW
BP
0133 OF 01 FO
OB
OOFH, 00 I H, OFOH
2 ••
0136 EA
0137 0138 R
0139 0040
0138
013880 85
20T
2 ••
261
2'2
263
2 ••
OB
OW
OW
MOY
0130 E6 80
OUT
RET
0140
267
0140
0140
0143
0146
0'48
0149
RESTORE BP
MACH 1NE STATUS WORD NEEDED TO
SW I TCH TO V I RTUAl MODE
~~' V I RTUAL_ENABLE
..JUMp FAR TO PURGE PRE-FETCH QUEUE
TO OFFSET
IN SEGMENT
OEAH
OFFSET DONE
SYS_ROM_CS
DONE,
Ol3f C3
2.'
I RESTORE THE ES,DI POINTER
DI,BP
Ol2F 50
0130 Ba 0001
2.'
2.0
FROM TH I S AREA
SWITCH TO VIRTUAL MODE
2 ••
2 ••
251
2.2
2.3
PUT THAT IN THE LIMIT FIELD
AX • LOW WORD OF GOT ADDRESS
PUT THAT IN BASE FIELD - LOW
AX .. HIGH BYTE OF ADDRESS, AND
ACCESS RIGHTS BYTE IS UNDEFINED
LOAD THE GDTR
<><><><><><><><><><><><>
82 <><>
Al,8!5H
MFG_PORT t AL
<><> CHECKflOINT
SYSTEM INITIALIZATION
SYSINITl
ENOP
GOT BLD PROC
MaY
MOY
REP
RET
GDT_BLD ENoP
NEAR
SI,OFFSET GOT DATA START
I DS.SI --> GOT
CX, (OFFSET GoT OATA END-OFFSET GOT DATA STARTI/2 I WORD COUNT
MOVSW
- I CO\!Y GOT I NTO MEMORY
2 ••
2..
2 ••
2TO
2T'
2T2
273
2T.
2T.
2T.
BE OlAF R
89 0044
Fa/ A5
C3
PROC
0'49
1-----
2TT
278
279
280
2.'
282
283
28'
28.
28.
28T
288
2.'
2'0
291
2.2
2'3
2 ••
2 ••
2"
2.T
2 ••
2"
300
30'
30.
303
30'
30S
30.
30T
308
30'
310
3"
3"
3"
31.
0149 BE 0231 R
Ol4C ae C8
ISE 08
SF DOAO
28 CO
8E CO
014E
0150
0153
OHS5
0157
015A
DISC
DISE
0161
BUILD THE lOT.
MOY
MOY
MOY
MOY
SUB
MOY
MOY
MOY
MOY
MOY
BB 0040
86 81
82 00
89 0020
NEAR
THE lOT WILL CONTAIN YECTDRS FOR EXCEPTION HANDLERS
~~:g~FSET
SYS_IDT_OFFSETi
LOW_lOTI
MDYSW
0162
0164
0165
0167
0168·
0168
MOY
STOSW
MOY
STOSW
AX,OX
MOY
AX,O
STOSW
LOOP
MOY
MOY
La. lOT
OUC E2 F3
Ol6E 89 ODED
0111 BD 0277 R
0174
0174 88 F5
HIGH IOTa
MOV
0116 A5
AX,BX
CX,~!56-32
BP,OFFSET
FR~E_JNTS
0178 A5
0119 AS
OllA E2 Fe
WHERE THE JOT WILL BE.
CS I S THE SAME FOR ALL INTERRUPTS
ACCESS RIGHTS BYTE FOR THE GATE
THE WORD COUNT FIELD I S UNUSED
THERE ARE 32 RESERYEo INTERRUPTS
THIS LOOP BUILDS 32 DESCRIPTORS IN THE
lOT FOR THE RESERYED INTERRUPTS
GET A ROUTINE ENTRY POINT
AND PUT IT IN THE OFFSET FJELD
GET THE SYSTEM CODE SEGMENT SELECTOR
AND PUT IT IN THE SELECTOR FIELD
GET THE INTERRUPT GATE BYTE
AND PUT IN THE ACCESS RIGHTS FIELD
ZERO OUT
THE RESERYED pas I T IONS
AND REPEAT AS 0 I REtTED
2156 TOTAL - 32 DONE ::I WHATEYER IS LEFT
THERE IS A COPY OF AN UN-INITIALIZEC
INTERRUPT DESCRIPTOR AT FREE_INT5
OSISI --> FREE DESCRIPTOR
(EStDI LEFT OFF AT INT 32)
MOVE OFFSET OF THE I RET I NSTRUCT I ON
MOYE THE C5 SELECTOR
MOYE THE ACCESS RIGHTS BYTE
ZERO OUT THE RESERVED WORD
FilL THE REMA I NOER OF THE TABLE
SI,BP
MOYSW
MOYSW
MOVS.
STOSW
LOOP
0117 A5
~~~~R~~~~I E:~~~T P6~NTS
~~:~~S_IOT_LOC
ES,AX
BX,SYS ROM CS
OH, TRA\! GATE
DL,O
CX,32
0161 AS
88 C3
AS
88 C2
AS
88 0000
AS
I
DS,AX
,-----
INITIALIZE THE ENTRY POINTS FOR POST TEST
R
R
R
R
R
R
R
MOY
MOY
MOY
MOY
3'3
3 ..
3'T
318
3"
3.0
3.'
3 ••
3.3
3"
olle
0183
OIIA
0191
0198
OI9F
0lA6
OIAo
261
261
26.
261
261
261
26.
C3
alAE
alAE CF
CT
Cl
CT
CT
CT
CT
CT
06
06
06
06
06
06
06
DIAD
01A8
0180
DIB8
DICO
Dice
DIDO
0098
009C
OOAO
OOA4
00A8
COAt
OOBO
MOY
MOY
MOY
RET
JRET ADDR
IRET
LABEL
WORD
I FOR UN-INITIALIZED INTERRUPTS
I NULL RETURN
TESTS
5-81
1-'
04-21-86
'.$
•••
PAGE
THE FOLLOWING DATA DEFINES THE PRE-INITIALIZED GOT FOR POST TESTS •
THESE MUST BE INITIALIZED IN THE ORDER IN WHICH THEY APPEAR IN THE
GDT_OEF STRUCTURE DEFINITION AS IT IS IN "SYSDATA.INC" •
• 27
•• 8
..•••••••••,
330
GDT_DATA_START
'" OIAr
1-----
334
OlAF 0000
335
336
337
338
0181
01B3
0184
0185
•••
•••
'"
342
343
344
345
346
'47
...
0000
00
00
0000
350
351
352
353
354
•••
•••
DB
DB
ow
DB
DB
ow
1-----
•••
•••
•••
0 I Cl
01 C9
Dice
DICC
01 CD
366
367
368
369
3TO
OICF
0101
0103
0104
0' 05
1000
0000
DB
93
0000
374
375
376
a77
318
01DT
0 I 09
OIOB
DIDC
DIDO
4000
8000
08
93
0000
.7.'7137'
.8.
.79
DB
DB
ow
1-----
DB
DB
ow
-
-
lSYS_IDT_PTRI
;
SEGMENT LIMIT
I SEGMENT BASE ADDRESS - LOW WORD
1 SEGMENT BASE ADDRESS - HIGH BYTE
1 ACCESS RIGHTS BYTE
I RESERVED - MUST BE ZERO
- - -
CPLO DATA ACCESS
SDA LEN
SDA-LOC
-
-
(RSDA_PTRI
1 SEGMENT LIMIT
1 SEGMENT BASE ADDRESS - LOW WORD
I SEGMENT BASE ADDRESS - H J GH BYTE
I ACCESS RIGHTS BYTE
1 RESERVED - MUST BE ZERO
CPLO DATA ACCESS
-
MCRT SIZE
MCRii' LO
MCRTO-HI
CPLO iSATA ACCESS
-
DB
DB
ow
-
LOW WORO
I SEGMENT BASE ADDRESS - HIGH BYTE
-
OIDF FFfF
ow
GOOD
Dol
93
0000
DW
DB
DB
ECCRT SIZE
ECCRT~ La LO
ECCRT.-LO-H I
~PLO_DITA:ACCESS
OIET
OlE9
OIEB
OIEC
DIED
FFFF"
0000
08
93
0000
ow
ow
ECCRT SIZE
ow
-
(C_CCRT_PTRI
SEGMENT LIMIT
SEGMENT BASE ADDRESS - LOW WORD
SEGMENT BASE ADDRESS - HIGH BYTE
I ACCESS RIGHTS BYTE
I RESERVED - MUST BE ZERO
I
I
I
ENHANCED GRAPHIC ADAPTER REGEN BUFFER
OIEI
01E3
01E4
01 E5
IC_BWCRT_PTRI
1 ACCESS RIGHTS BYTE
I RESERVED - MUST BE ZERO
-
383
384
385
386
-
1 SEGMENT LIMIT
I SEGMENT BASE ADDRESS -
CCRT SIZE
CCRTi' LO
CCRTo-HI
CPLO 5ATA ACCESS
.81
382
.87
-
SYS lOT LEN
SYS-IDT-LOC
COMPATIBLE COLOR DISPLAY REGEN BUFFER
ow
ow
1-----
CPLO DATA ACCESS
COMPATIBLE MONOCHROME DISPLAY REGEN BUFFER
ow
ow
1-----
-
SEGMENT LIMIT
SEGMENT BASE ADDRESS - LOW WORD
SEGMENT BASE ADDRESS - HIGH BYTE
ACCESS RIGHTS BYTE
RESERVED - MUST BE ZERO
THE SYSTEM DATA AREA DESCRIPTOR
ow
ow
0300
0400
00
93
0000
··
··
··
·
·
~g~-~~~
THE SYSTEM lOT DESCRIPTOR
ow
ow
0800
OOAD
00
93
0000
lGDT~PTRI
THE GOT ITSELF
ow
ow
.57
358
359
360
361
362
SEGMENT LIMIT
SEGMENT BASE ADDRESS - LOW WORD
SEGMENT BASE ADDRESS - HIGH BYTE
ACCESS RIGHTS BYTE
RESERVED - MUST BE ZERO
ow
1----0 I EW
Oltl
OlC3
OlC4
01 C5
IUNUSED_ENTRyt
DB
DB
0088
DeAD
00
93
0000
'.8
-
ow
ow
1----0181
0 189
0188
DISC
0180
EQU
FIRST ENTRY UNUSABLE
-
(E_CCRT_PRTI
1 SEGMENT LIMIT
I
I
1
;
SEGMENT BASE ADDRESS - LOW WORD
SEGMENT BASE ADDRESS - HIGH BYTE
ACCESS RIGHTS BYTE
RESERVED - MUST BE ZERO
I
I
;
I
1
SEGMENT LIMIT
SEGMENT BASE ADDRESS - LOW WORD
SEGMENT BASE ADDRESS - HIGH BYTE
ACCESS RIGHTS BYTE
RESERVEO - MUST BE ZERO
388
'8'
390
391
392
393
394
•••
•••
.97
398
399
400
401
402
0lF3 OF
DB
DB
01F4 98
406
401
01 F1 FFFf
01 F9 0000
408
01F8 00
GIFC 93
01rD 0000
...
...,.,
•••
422
423
424
425
426
•• 7
Ol,FF
0201
0203
0204
0205
430
431
432
433
434
ow
0201
0209
0208
020e
0200
DB
DB
ow
DB
DB
ow
;-----
020F
0211
0213
0214
02 i 5
5-82
FFFF
0000
00
93
0000
TESTS
-
MA)\: SEC LEN
CSE'Co Li5
CSEGO-HI
CPLO CODE ACCESS
-
I
I
I
1
I
-
-
MAX SEG LEN
NSEGO Li5
NSEGO-HI
CPLO DATA ACCESS
-
-
-
(SYS_ROM_CSI
SEGMENT LIMIT
SEGMENT BASE ADDRESS - LOW WORD
SEGMENT BASE ADDRESS - HIGH BYTE
ACCESS RIGHTS BYTE
RESERVED - MUST BE ZERO
I ES_TEMP I
;
I
1
;
I
SEGMENT LIMIT
SEGMENT BASE ADDRESS - LOW WORD
SEGMENT BASE AOORESS - HIGH BYTE
ACCESS RIGHTS BYTE
RESERVED - MUST BE ZERO
1
I
;
I
-
-
ow
ow
DB
DB
ow
I
I
I
;
1
-
MAX SEG LEN
NSEG'o L15
NSEGO-HI
gPLo_5ATA_ACCESS
ICS_TEMPI
SEGMENT BASE AODRESS - LOW WORD
SEGMENT BASE ADORESS - HIGH BYTE
ACCESS RIGHTS BYTE
RESERVED - MUST BE ZERO
(SS_TEMPI
MAX SEG LEN
NSEGO Li5
NSEGO-HI
CPLO DATA ACCESS
TEMPORARY DESCRIPTOR FOR OS
-
J SEGMENT L J MIT
MAX SEG LEN
NSEG. Li5
NSEG.-HI
CPLO DATA ACCESS
TEMPORARY DESCRIPTOR FOR SS
ow
ow
FFFF
0000
00
93
0000
-
TEMPORARY DESCRIPTOR FOR CS AS A DATA SEGMENT
ow
ow
1-----
•• 8
•••
DB
DB
FFFF
0000
00
93
0000
CPLO DATA-ACCESS
TEMPORARY DESCRIPTOR FOR ES
ow
ow
1-----
41.
414
415
416
417
418
ow
1-----
·
·
·
··
~gg~i:-m-~~
CODE SEGMENT FOR POST CODE, SYSTEM lOT
ow
ow
OIEF FFFF
OIFI 0000
•••
•••
•••
."
ow
1-----
01 F5 0000
409
410
DB
DB
-
SEGMENT LIMIT
SEGMJ:;NT BASE ADDRESS - LOW WORD
SEGMENT BASE ADDRESS - HIGH BYTE
ACCESS RIGHTS BYTE
RESERVED - MUST BE ZERO
IDS_TEMPI
SEGMENT LIMIT
SEGMENT BASE ADDRESS - LOW WORD
SEGMENT BASE ADDRESS - HIGH BYTE
ACCESS RIGHTS BYTE
RESERVED - MUST BE ZERO
'-5
0<4-21-86
..•••••••••,
•• 5
•• 0
•••
•••
•••
•••
•••,
•••
•••
•••
•••.,
•••
•••
•••
•••
•••
•••
•••
•••
•••,
•••
•••
0211
0211
0219
0218
a21C
0210
PA.GE
1----TR_LOCI
01500
CO 00
00
81
0000
IPOST_TR)
DW
DW
D08DOH
oeaOOH
DB
DB
FREE TSS
DW
o
o
SEGMENT LIMIT
SEGMENT BASE ADDRESS - LOW WORD
SEGMENT BASE ADDRESS - HIGH BYTE
ACCESS RIGHTS BYTE
RESERVED - MUST BE ZERO
-
•• 3
.....
......
•• 0
.
021F 0800
0221 0211 R
0223 00
0224 93
0225 0000
DW
DW
DoaDOH
TR LOC
DB
DB
CPLO OATA ACCESS
DW
oo -
SEGMENT LIMIT
SEGMENT BASE ADDRESS - LOW WORD
SEGMENT BASE ADDRESS - HIGH BYTE
ACCESS RIGHTS BYTE
RESERVED - MUST BE ZERO
-
1----(POST LOTR)
LOT LOCI
DW
GOT LEN
ODOOOH
DW
DB
o
DB
LOT OESC
0221
0221 0088
0229 0000
0228 00
D2ZC E2
0220 0000
DW
o -
DW
DW
GOT LEN
LOT-LOC
SEGMENT LIMIT
SEGMENT BASE ADDRESS - LOW WORD
SEGMENT BASE ADDRESS - HIGH BYTE
ACCESS RIGHTS BYTE
RESERVED - MUST BE ZERO
•• 0
..
."
..,..,..,.",..
022F
0231
0233
0234
0235
=
0088
0221 R
00
93
0000
0237
DB
DB
DW
GOT_DATA_END
"0
SEGMENT LIMIT
SEGMENT BASE ADDRESS - LOW WORD
SEGMENT BASE AODRESS - HIGH BYTE
ACCESS RIGHTS BYTE
RESERVED - MUST BE ZERO
o CPLO OATA ACCESS
o -
EQU
1-----
END OF PRE-ALLOCATED GOT
1-----
ENTRY POINTS FOR THE FIRST 32 SYSTEM INTERRUPTS
47 •
• 73
47'
•• 0
•••
•••
•••
•••
•••,
•••
•••
•••
•••
•••
•••
•••
•••,
•••
•••
•••
..
•• 0
..
.00
'0'
.0.
.0.
'0'
.0.
50.
50'
50.
'0'
.. 0
......
...
."
513
5.5
5 ••
511
SYS_I DT _OFFSETS
0231
0231 0000 R
0239 0005 R
0238 DOCA R
0230 DOOF R
023F 0014 R
02-4! 0019 R
OZ43 0030 R
0245 0034 R
0241
0249
0248
0240
0038
DOlC
00040
0044
R
R
R
R
OZ<><><><><><><><><><><>
<><> CHECKPOINT 32 <><>
I RESTORE AX I SET AX TO ZERO)
1 EXIT IF PARITY ERROR
1
64K ADDRESS TEST AND FILL WITH ZERO
DEC
SUB
MOV
SUB
STaSI
INC
REP
DEC
STOSW
SUB
MOV
SUB
LOoSW
XOR
JNZ
AX
01,01
cX,ex
CX,2
AX
STOSW
AX
SI,SI
CX,BX
CX,2
AX,OFFFFH
C13
WRITE FIRST AND LAST LOCAT10N=FFFF
PO I NT TO START OF BLOCK
GET THE BLOCK COUNT
DO ALL LOCATIONS BUT LAST
WRITE FIRST LOCATION AS FFFFH
WRITE ZERO
WRITE IT
LAST WORD IS FFFF
POINT TO START OF BLOCK
GET THE BLOCK COUNT
GET THE DATA
CHECK CORRECT
EXIT IF NOT
CI2As
AD
DB
EI
75
AO
35
75
LaDS'
CO
FB
A2
OR
LOOPZ
JNZ
LODSW
FFFF
9C
2B FF
AB
BF FFFE
AB
E4
86
E4
22
B8
EB
61
C4
87
EO
0000
88
AX,AX
CliA
C13
XOR
AX , OFFFFH
JNZ
C13
GET NEXT DATA
ANY BIT ON ?
CONTINUE TILL L.AST WORD
GO I F NOT CORRECT
GET LAST WORO
SIB FFFF
EXIT IF NOT
CLEAR WORD 0 ANa FFFE
SUB
STOSW
Mav
STOSW
;----00F3
00F5
OOFT
00F9
OOFB
OOFE
DIDO
CHECKPOINT 32 FOR ADORESS LINE 0->15 FAILURE
MOV
OUT
MaV
JNZ
,----OOEC
OOEE
DOEF
00F2
I CHECK FOR I/O-PARITY CHECK
I SAVE ERROR
I CHECK FOR RII OR I/O ERROR
IN
48
2B FF
8B CB
83 £9 02
AB
40
F3/ AB
48
AB
2B F6
8B CB
83 E9 02
AD
35 FFFF
15 A9
22.
221
222
223
224
225
226
227
228
IN
AND
1-----
213
21.
215
ZI6
217
218
21'
1 ERROR EX I T I F NOT CORRECT
CHECK FOR I/O OR BASE MEMORY PARITY CHECK
XCHG
1-----
00C4
DOCS
OOCT
00C9
ooce
OOCO
OOCE
DODO
0001
0002
0004
0006
0009
OOoA
DODD
OOoF
OOoF
ODED
00E2
00E4
00E6
OOET
OOEA
PO I NT TO START OF BLOCK
GET THE BLOCK COUNT
DIVIDE BY 2
CHECK CORRECT
CI21
173
115
176
177
178
AX,SI
01,01
I CLEAR FIRST WORD
0 I ,OFFFEH
1 CLEAR TOP WORD
CHECK FOR I/O OR BASE MEMORY
XCHG
~t::~RT_B
IN
~~:~~A_PAGE.6
IN
AN~
MOV
JMP
STGTST_CNT
AX,O
C13
CHECK FOR I/O - PARITY CHECK
SAVE ERROR
CHECK FOR R/W OR J 10 ERROR
SET AX EQUAL ZERO
ERROR EXIT IF ZF NOT SET
ENOP
TEST6
5-85
1-3
04-21-86
22.
23.
231
232
233
23.
23.
23.
237
238
23.
,- ------------------------------------------------------------------------
PAGE
I
0100
0100 52
0101 0&
0102 50
0103 88 ---- R
0106 ISE CO
oloa 58
2'.
2.,
0109 50
2.2
2.3
Dloe 261 88 36 0015 R
2 ••
2 ••
2 ••
2'7
2 ••
2 ••
2 ••
2.,
2.2
2'3
2 ••
2 ••
2 ••
257
2'.
2"
PRINT ADDRESS AND ERROR MESSAGE FOR ROM CHECKSUM ERRORS
OIOA
ae
OA
011181 FA. caoo
Ol151COD
Dill E8 0000 E
011A. 8E 0000 E
0110 E8 0000 E
0120
0120 58
0121 07
0122
0123
0124
0124
0127
012A
Ol2e
ROM ERR PROC
PUSH
PUSH
PUSH
MOV
MOV
POP
PUSH
MOV
MOV
CMP
"L
CALL
MOV
CALL
ROM ERR ENO,
-P<><><><><><><><><><><><><>
<><> CHECKPOINTS CO->F4 <><>
DISPLAY CARD IN ERROR?
GIVE DISPLAY CARD FAIL BEEP
PR I NT SEGMENT I N ERROR
DISPLAY ERROR MESSAGE
AX
ES
OX
DX,0102H
; BEEP 1 LONG, 2 SHORT
ERR BEEP
SHOJ!fT RDM_ERR_END
1--=----------------------- --------- ------ ----- ----- --- - -------------
2.,
2.2
TH I S SUBRDUT I NE SENDS AN OUTPUT COMMAND TO THE KEYBOARD AND
RECE I VES THE KEYBOARD RESPONSE.
2 ••
I
2.3
1 ENTRY REQU I REh4ENTS I
1
AL
COMMANDIDATA TO BE SENT
I
:
=
2 ••
; EXIT PARAMETERS:
I
ZERO FLAG
1 IF ACK RECE I VED FROM THE KEY BOARD
;
AL = RESPONSE
=
2 ••
2"
:
1--- - -- - - - - -- --------------- --- ----- -- - ------ - - - -- - ----- ----- - -------
2.7
'.8
:
1-- --- ---------------------- - - --- - - - --------- - ----- -- -- - ----- - - ---- -------
XMIT_8042 PROC
Ol2e
2 ••
27.
;-----
NEAR
CHECK INPUT BUFFER FULL
211
272
273
.,.
275
27.
2ll
27.
279
2 ••
2.,
282
283
2 ••
28'
Ol2e
Ol2E
0130
0130
0132
0134
0136
013&
86 EO
28 C9
E4
A8
EO
E3
86
.S.
2.'
2 ••
DUE
0140
0142
0144
0146
0148
291
2'2
2'3
2 ••
•••
•••
E4 64
8A. EO
704
E4
F6
(l1048 EO
0140 75
02
60
C4 02
F'I
10
3 ••
3 ••
0159
3.0
3 ••
3.7
3.8
0158
0150
Ol5F
0161
28
E4
A8
EI
15
FE
75
FE
E8
C9
64
01
FA
CHECK OUTPUT BUFFER FULL
XMIT_II
IN
MOV
TEST
; RESTORE COMMAND
SEND THE COMMAND
SET LOOP COUNT
OUT
SAVE STATUS
CHECK IF 8042 HAS DATA
GO IF NOT
FLUSH DATA
CHECK COMMAND ACCEPTED
"ZIN
XMIT_21 TEST
LOOPNZ
"NZ
XMIT_3:
08
CB
F4
C3
09
I
MOV
SUB
IN
TEST
LOOPZ
"NZ
DEC
"NZ
"MP
~t: ~~; T~~/'~~~L
XMIT 3XMIT-4
BL SHORT XMIT 3
BL
SHORT XMIT_EXIT
CHECK IF HAS DATA
WAIT TILL DONE
DECREMENT OUTER LOOP
TRY AGAIN
SET ERROR FLAG
8042 STUCK BUSY
GET THE DATA
XMIT_41 SUB
CX,CX
0165 E2 FE
XMIT 151 LOOP
XMIT 5
-
SET COUNT
SET LOOP COUNT
BL.6
CX,CX
0163 28 C9
0167 E4 60
NO FLUSH OR COMMAND NOT ACCEPTED
CHECK OUTPUT BUFFER FULL
INC
;-----
0169 83 E9 01
Olbe
Ol6e C3
0160
I CHECK I NPUT BUFFER FULL
SUB
3 ••
31.
311
31.
313
31.
310
31.
311
318
319
32.
321
XMITLOOJ5
SHORT XMIT EXIT
AH.AL
-
1-----
Ol4F 83 06
0151
0153
0155
0151
:t: f~~~U~O~O~~LL
ISSUE THE COMMAND
;-----
3 ••
3.3
3.,
SAVE COMMAND
SET LOOP T I ME-OUT
AH.AL
CX,CX
1-----
A6 01
297
2.8
•••
IN
TEST
LOOPNZ
JCXZ
XCHG
013A E6 60
Olle 28 C9
2.7
2 ••
XCHG
SUB
XMITLOOPI
64
02
FA
34
EO
IN
SUB
XMIT EXIT:
RET
XMIT_8042 ENDP
ALLOW TIME FOR POSSIBLE
ERROR -> SYSTEM UNIT OR KEYBOARD
~i:~9~T_A
I SET CX OTHER THAN ZERO
3 ••
1--- BOOT STRAP -- INT
19 H -------------------------I BOOT STJ!fAP LOADER
TRACK 0. SECTOR 1 I S READ I NTO THE
;
1
BOOT LOCATION (SEGMENT 0 OFFSET TCOO)
AND CONTROL I S TRANSFERRED THERE.
;
3 ••
327
3 ••
3 ••
;--
3"
3.3
32.
I
1
1
33.
331
33.
333
33.
330
33.
337
BOOT_STRAP _I
0160
3.,
3 ••
MOV
0160 86 ---- R
0170 8E DB
0112 8E CO
MOV
MOV
1-----
33.
33.
3 ••
IF THERE IS A HARDWARE ERROR CONTROL IS
TRANSFERRED TO THE ROM BAS I C ENTRY PO I NT
I
---------------------------------------------------ASSUME CSICODE,DS,ABSO,ESIABSO
0174 C7 060078 R 0000 E
OllA ae DE 007A R
5-86
TEST6
PROC
AX.ABSO
DS.AX
ES.AX
NEAR
I ESTABLISH ADDRESSING
RESET THE DISK PARAMETER TABLE VECTOR
MOV
MOV
1-'
04-21-86
3.3
3 ••
345
346
341
348
011E 33 CO
3"
3 ••
3.,
352
01815 Fa
353
0 I 89 89 0004
354
DIBC 51
355
0180 S-4 00
356
Ol8F CD 13
0191 12 OF
351
3 ••
3&9
360
XOR
MOV
MOV
0180 89 0100
0183 BF leaD R
OlB6 F3/ AS
REP
LOAD SYSTEM FROM DISKETTE -- CX HAS RETRY COUNT
HII
MOV
PUSH
MOV
sn
INT
JC
MOV
361
0198 8E C2
362
019A. BB leaD R
363
364
365
366
361
019089
01AO CD
DIA2 59
0lA3 73
OIAS 80
MOV
MOV
MOV
0lA8 14 22
311
372
315
0 I AE 80 3E leOD R 06
376
3ll
37.
01S3 12 11
37'
380
381
382
INT
H21
09
Fe 80
OIAA E2 EO
alAe EB IE
373
37'
sue
0001
13
369
370
I CLEAR 256 WORDS
~+O~:FSET OElOOT_LOCN
1-----
0193 Be 0201
0196 28 02
368
AX,AX
CX,256
POP
JNC
CMP
JZ
LOOP
JMP
CX,4
SET RETRY COUNT
IPL SYSTEM
RESET THE DISKETTE SYSTEM
DISKETTE 10
IF ERROR7 TRY AGAIN
CX
AH,O
13H
H2
AX,20lH
OX,OX
ES,OX
BX, OFFSET oBOOT LOCN
CX,I
13H
CX
H.
AH,80H
H5
HI
SHORT H5
READ I N THE SINGLE SECTOR
TO THE 800T LOCAT I ON
DRIVE 0 1 HEAD 0
SECTOR I, TRACK 0
DISKETTE 10
RECOVER RETRY COUNT
CARRY FLAG SET BY UNSUCCESSFUL READ
IF TIME OUT I NO RETRY
TRY FIXED DISK
DO IT FOR RETRY TIMES
1 TRY FIXED DISK
1----1-----
BOOT RECORD READ SUCCESSFUL
INSURE FIRST BYTE OF LOADED BOOT RECORD IS VALID (NOT ZERO)
H"
CMP
1----0lB5 SF Teao R
0188 89 0008
0lB8 AI leaD R
Je
INSURE DATA PATTERN FIRST 8 WORDS NOT ALL EQUAL
MOV
MOV
MOV
01 ,OFFSET OBOOT LOCN
CX, 8
AX I WORD PTR OBOOT_LOCN
1 CHECK DATA PATTERN
1 CHECK THE NEXT 8 WORDS
ADD
CMP
LOOPZ
JZ
01,2
AX, (01]
H.A
HI.
1 POINT TO NEXT LOCATION
3.3
384
385
386
01SE 83 CT 02
OICI 38 05
Ole3 El F9
387
3 ••
OlC5 74 5F
389
01 Cl EA leaD ---- R
H4AI
1 CHECK DATA PATTERN FOR A FILL PATTERN
I BOOT NOT VALID PRINT MESSAGE HALT
OElOOT_LOCN
3 ••
3"
3'2
393
394
DICC 80 44
DICE E6 80
3'5
396
0100 E8 0000 E
397
0103 F6 06 0088 R 01
399
400
401
0108 B8 ---- R
OIDB 8E 08
0100 14 3D
3'.
,.3
•• 2
•••
405
406
80 DE
E8 0000 E
408
4tO
411
412
413
414
""5
416
417
418
419
420
421
422
423
424
425
426
01E8
OlEA
DIEC
OIEE
OIFI
DIFI
OlF2
0lF5
0lF8
OIFA
OIFC
OIFF
0202
0204
0205
0207
0200
28
28
CD
89
51
SA
B8
2B
8E
BB
B9
CD
59
72
8I
74
020F
0210
0213
0215
0217
0218
021A
51
BA
2B
CO
59
72
E2
•••
A8 08
15 34
CO
02
13
0003
08
3E 7DFE R AA55
88
0080
CO
13
H.,
'3 •
• 37
438
439
021C 80 45
021E E6 80
441
0220 CD 18
•• 2
••3
AL,044H
MFG PORT ,AL
DSI15ATA
DDS
olASTRATE,OUAl
OSIAElSa
AX,ABSO
DS,AX
H.
I FLOPPY/FIXED DISK CARD INSTALLED
1 ESTABLISH ADDRESSING
I GO IF NOT
MOV
CALL
TEST
JNZ
AL,CMOS DIAG
CMOS READ
I GET POST POWER ON STATUS (NMI ENABlEO)
I FROM DIAGNOSTIC STATUS BYTE
I DID WE HAVE A FIXED DISK FAilURE?
1 GO IF YES
sue
sue
AXIAX
DXIDX
13H
CX I 3
1 RESET C I SKETTE
MOV
PUSH
MOV
MOV
SUB
MOV
MOV
MOV
INT
POP
JC
CMP
JZ
CX
SAVE RETRY COUNT
DX I 0080H
FIXED DISK ZERO
AX, 020 1H
READ I N A 5 I NGLE SECTOR
BXIBX
ESIBX
BX, OFFSET OBOOT LOCN
TO THE BOOT LOCAT I ON
CX, I
SECTOR II TRACK 0
13H
FILE I/O CALL
CX
RECOVER RETRY COUNT
H8
WORD PTR OBOOT LOCN+510D,OAA55H I TEST FOR GENERIC 800T BLOCK
H4_A
-
PUSH
MOV
CX
DX I 0080H
AX,AX
13H
CX
HIOA
H•
INT
INT
POP
JC
lOOP
~~,HJ!"_FAll
I RETRY COUNT
FIXED DISK ZERO
RESET THE FIXED DISK
FILE I/O CALL
RESTORE LOOP COUNT
IF ERROR, TRY AGAIN
DO IT FOR RETRY TIMES
1-----
UNABLE TO IPL FROM THE DISKETTE OR FIXED DISK
HOI
MOV
OUT
AL.,045H
MFG_PORT ,AL
INT
I.H
1-----
HARC FILE RESET FAILURE
445
446
0222 E2 EB
0224 EB F6
HIOAI
LOOP
JMP
450
451
452
453
454
455
0226 BE 0000 E
0229 E8 0000 E
022C EB FE
022E
022E
022E
HIOI
.5.
<><><><><><><><><><><><>
<><> CHECKPO I NT 44 <><>
CHECK FOR FIXED DISK INITIALIZATION ERROR
sue
08
05
• 35
•••
•••
"7
•••
•••
H.,
0080
0201
08
C3
7COO R
0001
13
427
428
429
430
431
432
433
434
ATTEMPT BOOTSTRAP FROM F I XED 0 I SK
MOV
OUT
ASSUME
CALL
TEST
ASSUME
MOV
MOV
JZ
1----OIDF
01E1
01E4
01E6
401
1----HOI
1-----
H.
H.
<><><><><><><><><><><><>
<><> CHECKPO I NT 45 <><>
I GO TO RESIDENT BAStC
I TRY RESET AGA I N
I GO TO RESIDENT BASIC
IF 0 I SKETTE READ OK BUT BOOT RECORD I S NOT STOP SYSTEM ALLOW SOFT RESET
MOV
CALL
Hili
JMP
BOOT STRAP I
POST6
ENDP
CODE
ENOS
END
51 ,OFFSET E602
E MSG
I
PR I NT 0 I SKETTE BOOT
1 PRINT MESSAGE
HI'
ENOP
TEST6 5-87
Veralon 2.00
I
PAGE 118.121
2
3
TITLE D5KETTE -- 04/21/86
.286C
.LIST
SUBTTL IDSKI.AS")
.LIST
•
•
••
5
l-l
04-21-86
DISKETTE BIOS
T
;-- INT 13 H -------------------------------------------------------------------
10
I DISKETTE I/O
I
THIS INTERFACE PROVIDES DISK ACCESS TO THE 5.25 INCH 360 Ke.
I
I.Z MB, 120 KS I AND 1.44 MB DISKETTE DRIVES.
II
I
I
I
I
12
13
I<
INPUT
("HI =OOH
RESET DISKETTE SYSTEM
HARD RESET TO NEe, PREPARE COMMAND. RECALIBRATE REQUIRED
ON ALL DRIVES
1- - --------- -------- -- --------- -------- -- - - - ----- - ---- - -- -- -- -- -- - ------ --- - - ---
"
..
l6
IT
I
I
IB
I - ---------- ------------ -
;
I
(AH)=OIH
READ THE STATUS OF THE SYSTEM INTO (AHI
_DISKETTE STATUS FROM LAST OPERATION IS USED
--=---- --------- -- ---- ---- -- -- ---- ------- ------- - ---.~--
3'
.0
.2
REGISTERS FOR READ/WRITE/VERIFY/FORMAT
(DLI - DRIVE NlIMBER (0-1 ALLOWED. VALUE CHECKED)
(DH) - HEAD NUMBER (0-1 ALLOWED. NOT VALUE CHECKED)
(CH) - TRACK NUMBER (NOT VALUE CHECKED)
MED I A
DR I VE
TRACK NUMBER
320/360
320/360
0-39
320/360
1.2M
0-39
1.2M
1.2M
0-79
720K
720K
0-79
1 .......M
1.4"'M
0-19
(CL) - SECTOR NUMBER (NOT VALUE CHECKED. NOT USED FOR FORMAT)
MEDIA
DRIVE
SECTOR NUMBER
320/360
320/360
1-8/9
320/360
1.2M
1-8/9
1.2M
1.2M
I-Hi
120K
l20K
1-9
I .......M
I. ......M
1-18
(ALI - NUMBER OF SECTORS (NOT VALUE CHECKED. NOT USED FOR FORMAT)
MEDIA
DRIVE
MAX NUMBER OF SECTORS
320/360
320/360
8/9
320/360
1.2M
8/9
1.2M
1.2M
115
120K
l20K
9
1.44M
18
I .......M
••'5
••
I - -- -------- ---- -- -- ----------------- - - --- ---------------- ------ - - ------ ------I
(AH) _02H READ THE DESIRED SECTORS INTO MEMORY
20
21
22
23
I
I
I
I
2.
25
2.
2T
2.
;
..
30
31
32
33
3.
35
3.
3T
..
3B
.3
(ES,BX)
..••
- ADDRESS OF BUFFER (NOT REQUIRED FOR VERIFY)
;--------------------------- ----- -- -------------------------------------------I
(AH)_03H WRITE THE DESIRED SECTORS FROM MEMORY
4T
50
51
.2
.3
54
••.T••
.B
.,••
•0
.2
.3
IAH)=04H
VERIFY THE DESIRED SECTORS
(AHI=05H
FORMAT THE DESIRED TRACK
(ESiS~: ~ST ~C:NT TO THE: COi..i..i::CTiOj,j OF DESiRED il.DDRE55 FiELDS
FOR THE TRACK.
EACH FIELD IS COMPOSED OF 4 BYTES. (C.H.R.N) •
WHERE C .. TRACK NUMBER. H=HEAC NUMBER. R = SECTOR NUMBER.
N= NUMBER OF BYTES PER SECTOR (00=128;01 .. 256;02=512 j 03 .. 1024),
THERE MUST BE ONE ENTRY FOR EVERY SECTOR ON THE TRACK •
THIS INFORMATION IS USED TO FIND THE REQUESTED SECTOR DURING
READ/WRITE ACCESS •
PRIOR TO FORMATTING A DISKETTE. IF THERE EXISTS MORE THAN
ONE SUPPORTED MEDIA FORMAT TYPE WITHIN THE DRIVE IN QUESTION •
THEN ~SET CASC TYPE~ (INT 13H. AH = 11H) OR "SET MEDIA TYPE"
( I NT I 3H, AH = 18H I MUST BE CALLED TO SET THE 0 I SKETTE TYPE
THAT IS TO BE FORMATED. IF "SET CASO TYPE" OR "SET MEDIA TYPE"
IS NOT CALLED, THE FORMAT ROUTINE WILL ASSUME THE MEDIA FORMAT
TO BE THE MAXIMUM CAPACITY OF THE DRIVE •
••••
••n
••••
TO
TI-ESE PARAMETERS OF DISK BASE MUST BE CHANGED IN ORDER TO
FORMAT THE FOLLOWING MEDTAS,
Tl
T2
T3
T.
T.
T4
I
MEDIA
I
a
320K
360K
1.2M
l20K
1.44M
I 320K/360K/I.2M
I 320K/360K/I.2M
I 1.2M
I 120K/I.44M
, 1.44M
I
a
"
.,
T.
I
I
T9
.0
DRIVE
, PARM I
I
I
I
I
I
50H
50H
54H
!SOH
6CH'
I PARM 2
I
I
B
I
•
II
"•
I
IB
NOTES, - PARM I = GAP LENGTH FOR FORMAT
- PARM 2 _ EDT (LAST SECTOR ON TRACK)
- DISK BASE IS POINTED TO BY DISK POINTER LOCATED
AT A§SOLUTE ADDRESS 0.18 •
- WHEN FORMAT OPERATIONS ARE COMPLETE, THE PARAMETERS
SHOULD BE RESTORED TO THEIR RESPECTIVE INITIAL VALUES
B2
.3
••••
••
••.0••
OT
.
(AH)_OIH READ DRIVE PARAMETERS
REGISTERS
INPUT
(DL) - DRIVE NUMBER (0-1 ALLOWED, VALUE CHECKED)
OUTPUT
(ESIDI) POINTS TO DRIVE PARAMETERS TABLE
(CH) - LOW ORDER 8 OF 10 BITS MAXIMUM NUMBER OF TRACKS
(eLI - BITS 1 & 6 - HIGH ORDER TWO BITS OF MAXIMUM TRACKS
- BITS 5 THRU 0 - MAX I MUM SECTORS PER TRACK
(DH) - MAX I MUM HEAD NUMBER
(DL) - NUMBER OF DISKETTE DRIVES INSTAL-LED
(BH) - 0
(BL) - BITS 1 THRU 4 - 0
BITS 3 THRU 0 - VALID DRIVE TYPE VALUE IN CMOS
..••••
'2
.3
9T
••••
100
101
102
loa
lAX) - 0
10.
10.
10.
lOT
10.
10.
110
I
III
UNDER THE FOLLOW I NO C I RCUMST ANCES I
(I) THE DRIVE NUMBER IS INVALID,
(21 THE DRIVE TYPE IS UNKNOWN AND CMOS IS NOT PRESENT,
(3) THE DRIVE TYPE IS UNKNOWN AND CMOS IS BAD,
(4) OR THE DRIVE TYPE IS UNKNOWN AND THE CMOS DRIVE TYPE IS INVALID
TtEN ES,AX,BX,CX,DH.DI_O 1 DL=Nt.JMBER OF DRIVES.
IF NO DRIVES ARE PRESENT THENI ES.AX.BX,CX,DX,DI::;O.
OOSKETTE STATUS _ 0 AND CY I S RESET.
112
1-------------------=----------------------------------------------------------1
(AH)::; ISH READ DASD TYPE
II.
1
Ila
5-88
DSKETfE
OUTPUT REG I STERS
1-2
04-21-86
IBM P.raon.t Comput.r MACRO A••• mbl.r
V.rslon 2.00
DSKETTE -- 0~/21/86 DISKETTE BIOS
(DSKI.ASM)
115
11.
111
118
"'
120
121
122
12.
12.
125
12.
121
128
12'
130
131
132
13.
13.
135
13.
131
13.
13'
,.0
,.,
,,.5
'"
(AHI
I
I
I
I
I
I
(DLl
I
1--------- ---------- ------------ --- ------ -- --- --- -- ------ ----------------- -----I
(AHIsI6H DISK CHANGE LINE STATUS
OUTPUT REG I STERS
(AH) - 00 - DISK CHANGE LINE NOT ACTIVE
06 - DISK CHANGE LINE ACTIVE, CARRY BIT ON
(OL) - DRIVE NUMBER (0-1 ALLOWED. VALUE CHECKED)
I
1
I
I
I
1----------- ----------- --------- --- -- ---- -------- ------------ --- ---- -----------(AH)=ITH SET CASO TYPE FOR FORMAT
INPUT REGISTERS
(All 00 - NOT USED
01 - DISKETTE 320/360K IN 360K DRIVE
02 - DISKETTE 360K IN 1.2114 DRIVE
03 - DISKETTE 1.2114 IN 1.2114 DRIVE
O~ - DISKETTE T20K IN T20K DRIVE
(DLI - DRIVE NUMBER (0-1 ALLOWED. VALUE CHECKED I
DO NOT USE WHEN DISKETTE ATTACH CARD USED)
I
I
I
I
I
I
I
I
I
..
..
(AH)",18H SET MEDIA TYPE FOR FORMAT
INPUT REGISTERS
(CH) - LOW ORDER 8 OF 10 BITS MAXIMUM NUMBER OF TRACKS
(CL) - BITS T , 6 - HIGH ORDER TWO BITS OF MAXIMUM TRACKS
- BITS 5 THRU 0 - MAX I MUM SECTORS PER TRACK
(DLl - DRIVE NUMBER (0-1 ALLOWED. VALUE CHECKED)
OUTPUT REG I STERS
(ESIOI) - POINTER TO DRIVE PARAMETERS TABLE FOR THIS MEDIA TYPE.
UNCHANGED IF (AH) IS NON-ZERO
(AH) - DOH. CY = O. TRACK AND SECTORSITRACK COMBINATION IS SUPPORTED
- OlH. CY '" I. FUNCTION IS NOT AVAILABLE
- OCH, CY '" I. TRACK AND SECTORS / TRACK COMB I NAT I ON I S NOT SUPPORTED
OR DR I VE TYPE UNKNOWN
- 80H, CY '" I. TIME OUT (DISKETTE NOT PRESENT)
"2
,.1
'"
,,.8
150
151
152
15.
15.
155
15.
151
DISK CHANGE STATUS IS ONLY CHECKED WHEN A MEDIA SPECIFIED IS OTHER
IF THE DISK CHANGE LINE IS FOUND TO BE
THAN 360 KB DRIVE.
ACT I VE THE FOLLOW I NG ACT IONS TAKE PLACE 1
ATTEMPT TO RESET DISK CHANGE LINE TO INACTIVE STATE.
IF ATTEMPT SUCCEEDS SET DASD TYPE FOR FORMAT AND RETURN DISK
CHANGE ERROR CODE
IF ATTEMPT FAILS RETURN TIMEOUT ERROR CODE AND SET OASO TYPE
TO A PREDETERMINED STATE INDICATING MEDIA TYPE UNKNOWN.
I F THE DISK CHANGE LINE I N I NACT I VE PERFORM SET DAse TYPE FOR FORMAT.
".
,.0
,.,
,.2
,,,.,
,.1
,,.8
15'
..
..
I ••
110
111
112
11.
11.
115
11'
111
118
11.
,.0
,.,
,.,
,
182
I ••
..
185
18.
181
18.
190
191
192
19.
19.
19'
19.
191
198
19.
200
201
202
20.
20'
205
20.
201
20.
20.
210
211
212
21'
21.
21.
21'
211
218
219
220
221
222
22.
22.
22S
- ON RETURN IF CARRY FLAG NOT SET. OTHERWISE ERROR
00 - DR I VE NOT PRESENT
01 - DISKETTE. NO CHANGE LINE AVAILABLE
02 - DISKETTE. CHANGE LINE AVAILABLE
03 - RESERVED
- DRIVE NUMBER (0-1 ALLOWED, VALUE CHECKED)
DATA VARIABLE -- .DISK POINTER
DOUBLE WORD POINTER TO THE CURRENT SET OF DISKETTE PARAMETERS
OUTPUT FOR ALL FUNCT IONS
AH '" STATUS OF OPERATION
STATUS BITS ARE DEFINED IN THE EQUATES FOR .DISKETTE STATUS
VARIABLE IN THE DATA SEGMENT OF THIS MODULE
CY '" 0
SUCCESSFUL OPERATION (AH_O ON RETURN, EXCEPT FOR READ DASD
TYPE AHos( 15)).
CY '" 1 FAILED OPERATION (AH HAS ERROR REASON)
FOR READ/WRITE/VERIFY
AL _ COUNT OF SECTORS TRANSFERRED
OS. BX. OX, CX PRESERVED
NOTE I IF AN ERROR IS REPORTEe BY THE DISKETTE CODE. THE APPROPRIATE
ACTION IS TO RESET THE DISKETTE, THEN RETRY THE OPERATION.
ON READ ACCESSES, NO MOTOR START DELAY IS TAKEN, SO THAT
THREE RETR I ES ARE REQU I RED ON READS TO ENSURE THAT THE
PROBLEM I S NOT DUE TO MOTOR START-UP.
1-------------------------------------------------------------------------------
.LIST
I DISKETTE STATE MACHINE - ABSOLUTE ADDRESS 40190 (DRIVE AI
.LIST
I
I
I
I
1
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
RESERVED
I
I
I
------------------------------>
(DRIVE BI
I
I
PRESENT STATE
0001 360K IN 360K DRIVE
001 I 360K IN 1.2114 DRIVE
DID. 1.2114 IN 1.2114 DRIVE
OIl. 360K IN 360K DRIVE
1001 360K IN 1.2114 DRIVE
lOll 1.2114 IN 1.2114 DRIVE
110, RESERVEC
II1I NONE OF THE ABOVE
I
------>
MEDIA/DRIVE
------~------->
& 91
UNESTABLISHEO
UNESTABLISHEO
UNESTABLISHED
ESTABLISHED
ESTABLISHED
ESTABLISHED
ESTABLISHED
DOUBLE STEPPING REQUIRED (360K IN 1.2M
DRIVEl
DATA TRANSFER RATE FOR THIS DRIVE,
001 SOD KBS
011 300 KBS
101 2eo KBS
I 1 I RESERVED
.LIST
I-----~-------------------------------------------------------------------------
I STATE OPERATION STARTED - ABSOLUTE ADDRESS 40192 (DRIVE Al & 93 (DRIVE BI
1------------------------------------------------------------------------------I PRESENT CYLINDER NUMBER - ABSOLUTE ADDRESS 40194 (DRIVE AI & 95 (DRIVE BI
1------------------------------------------------------------------------------.
SUBTTL (OSK2. ASM J
DSKETTE
5-89
D~~~T;:r-~~n~~/~~i:~te~1 ~~~~~E A:~~;b I.,.
v.,.. Ion
2. 00
1-3
04-21-86
tDSK2.ASM)
22<
22.
22.
221
228
229
230
231
232
233
234
2~~
236
237
238
239
240
PAGE
MD STRUC
hID-SPEC I
00(10 11
0001 11
0002 11
0003 11
0004 11
11
11
11
11
11
11
11
•
•
BITTOFF
EQU
~ITTON
EOU
:g::l~-~~~
2<1
242
243
MO-RATE'
~O:STRUC
MD-BYT-SEC
MD-SEC-TRK
MO-GAPMO-OTL
MO-GAP3
MO-FIL BYT
MO-HO TIM
ooos 11
0006
0007
0008
Q009
000-'
OOOB
OOOC
0000
STRUC
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
ENDS
:g:~~~C~IM
007F
0080
2«
2<.
2<6
2<1
2<8
2<'
2.,
2'0
2'2
2.3
~54
2 ••
256
2.'
2 ••
2.'
260
0000
CODE
,n
21.
21'
DTl
GAP LENGTH FOR FORMAT
FILL BYTE FOR FORMAT
HEAD SETTLE TIME (MILLISECONDS)
MOTOR START T I ME (I 18 SECONDS)
MAX. TRACK NUMBER
DATA TRANSFER RATE
lFH
80H
PUBLIC
PUBL I C
PUBL I C
PUBLIC
DISK INT_I
SEEKDSKETTE SETUP
DISKETT!_IO_I
EXTRN
EXTRN
EXTRN
EXTRN
CMOS READ I NEAR
ODS I NEAR
0 I SK BASE I NEAR
WAITF"INEAR
SEGMENT BYTE PUBL I C
ASSUME
CSICODE,DSIDATA,ESIOATA
I -- - ----------- - -- --- ------------- -- ---------- - -------- -------- --
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
SRT=D, HD UNLOAD=OF - 1ST SPECIFY BYTE
HD LOAD=I, MODE=DMA - 2ND SPECIFY BYTE
WAIT TIME AFTER OPERATION TILL MOTOR OFF
512 BYTES / SECTOR
EDT ( LAST SECTOR ON TRACK)
GAP LENGTH
I
0000 01
0001 0012
0003 82
0004 OOIF
0006 02
0007 002C
0009 03
OOOA 0039
OOOC 84
0000 0046
OOOF 04
00 I a 0053
• 0012
= 0006
,------------------------------ - ------ -------------- - ------------I
R
DRIVE TYPE TABLE
DR_TYPE
g:
DR_DEFAULT
OB
OW
DB
OW
DB
R
R
ow
R
R
R
g~FSET MD TBLI
g=:~~~_E
,DRIVE TYPE, MEDIA TABLE
02+BJT70NOFFSET MD TBL2
02
OFFSET MD TBL3
03
OFFSET MD TBL...
04+B JT70NOFFSET MD TBL5
04
OFFSET MD TBL6
DB
D.
DB
oW
~~U
(DR_TYPE_~-DR_TY~ET7~
OF TABLE
1---------------------------------------------------------------1
MEDIA/DRIVE PARAMETER TABLES
I
280
J --- - ---------- ------ ------- -- ---- - - - - -- - -- ------- --- -- ------ ----
281
282
1------,--------- -- --- ------------- -- -------- --- --- --- -- ----------
360 KB MEDIA IN 360 KB DRIVE
,---------------------------- - -- ---------------------------- ----
•• 3
I
2.<
28.
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
0012
0012
0013
0014
0015
0016
0017
0018
0019
OOIA
OOIB
OOIC
00 10
00 IE
MD_TBLI
LABEL BYTE
1I01llilB
SRT=D, HD UNLOAD=OF - 1ST SPECIFY BYTE
HD LOAD=I, MODE=OMA - 2ND SPECIFY BYTE
WAIT TIME AFTER OPERATION TILL MOTOR OFF
51 2 BYTES / SECTOR
EOT ( LAST SECTOR ON TRACK)
GAP LENGTH
2
MOTOR WAIT
2
-
O.
02AH
OFFH
050H
OF6H
DTl
8"
I.
RATE_2S0
GAP LENGTH FOR FORMAT
FILL BYTE FOR FORMAT
HEAD SETTLE TIME (MILLISECONDS)
1 MOTOR START TIME (118 SECONDS)
, MAX. TRACK NUMBER
I DATA TRANSFER RATE
,-------------------------------- ------ --------------- ---------1
360 KB MEOlA IN 1.2 MS DRIVE
,------------- ----------------------------------------- - --------
302
301
I
10<
00 IF
00 IF
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
002A
002B
MD_TBL2
OF
02
25
02
09
2A
FF
50
F6
OF
08
21
40
I ..
320
DB
DB
DB
DB
De
DB
DB
DB
DB
DB
DB
DB
DB
LABEL BYTE
1I01IIllB
2
MOTOR WAIT
"
O'
SRT=D, HO UNLOAO=OF - 1ST SPECIFY BYTE
HD LOAD= I , MOOE=DMA - 2ND SPEC I FY BYTE
WAIT TIME AFTER OPERATION TILL MOTOR OFF
IS I 2 BYTES / SECTOR
EOT ( LAST SECTOR ON TRACK)
GAP LENGTH
-
02AH
OFFH
OISOH
OF6H
DTl
I.
8
I.
RATE_300
GAP LENGTH FOR FORMAT
FILL BYTE FOR FORMAT
HEAD SETTLE TIME Ct.tILL I SECONDS)
I MOTOR START TIME (1/8 SECONDS)
1 MAX. TRACK NUMBER
; OAT A TRANSFER RATE
1--------------- ------------- --- ----------- ----- -- ------ ---- -----
,----------------------------------------------------------------
121
122
123
324
325
326
327
328
329
330
331
332
333
334
335
336
337
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
OF
02
25
02
09
2A
FF
50
FE!
OF
08
27
80
301
305
306
307
308
309
31'0
311
312
313
314
315
3t6
317
318
I
1
002C
002C
0020
002E
(l02F
0030
0031
0032
0033
0034
0035
0036
0037
0038
5-90
1.2 MB MEDIA IN 1.2 MB DRIVE
hID_TBL3
OF
02
25
02
OF
IB
FF
54
F6
OF
08
4F
QO
DSKETfE
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
LABEL BYTE
1I011iliB
2
MOTOR WAIT
2
-
16
OIBH
OFFH
054H
OF6H
I.
8
79
RATE_SaO
1 SRT=D. HD UNLOAD=OF -
I
I
I
I
I
,
I
1
;
1
I
I
:
1ST SPECIFY BYTE
HO LOAD. I , MODE=DMA - 2ND SPECIFY BYTE
WAIT TIME AFTER OPERATION TILL MOTOR OFF
512 BYTES I SECTOR
EQT ( LAST SECTOR ON TRACK)
GAP LENGTH
DTL
GAP LENGTH FOR FORMAT
FILL BYTE FOR FORMAT
HEAD SETTLE TIME (MILLISECONDS)
MOTOR START TIME (1/8 SECONDS)
MA~. TRACK NUMBER
DATA TRANSFER RATE
1-'
O~~~T~:r~~n~~/~~ic~t.~ I ~~~~~E A:~~;b I.r
V.re i on 2.00
(OSK2.ASM)
...
3.,
04-21-86
1---------------------------------------------------------------I
120 KB MEDIA IN 120 KB DRIVE
I
3.0
I ------ -- ------ --- - ----------- - ------- -------- - - ------------- - - --
3.2
343
344
345
346
341
348
349
350
351
352
353
354
355
356
357
3 ••
0039
0039
003A
0038
003C
0030
003E
003F
0040
0041
0042
0043
0044
0045
MO_TBL4
OF
02
25
02
09
2A
FF
50
F6
OF
08
4F
80
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
...
...
2
MOTOR WAIT
2
O.
-
02AH
OFFH
050H
OF6H
SRT=O. HO UNLOAO=OF - 1ST SPECIFY BYTE
HO LOAO=I. MODE=DMA - 2ND SPECIFY BYTE
WAIT TIME AFTER OPERATION TILL MOTOR OFF
5 I 2 BYTES I SECTOR
EOT { LAST SECTOR ON TRACK}
GAP LENGTH
DTL
GAP LENGTH FOR FORMAT
FILL BYTE FOR FORMAT
HEAD SETTLE T I hiE {M I LL I SECONDS}
MOTOR START TIME (1/8 SECONDS)
MAX. TRACK NUMBER
DATA TRANSFER RATE
•"
19
RATE_250
1 --- - - --- ------ - -- - ------ - - - - - ------- ------------ ------------ - - --
3"
300
301
362
363
364
365
366
361
368
369
310
371
312
373
314
315
310
317
31.
319
3.0
381
382
383
384
385
386
381
388
389
390
391
392
393
394
LABEL BYTE
11011l1iB
I
120 KB MEDIA IN 1.44 MB DRIVE
I
1 --- - - - --- - -- - ---- ------- - - -- ------- - ------------ -------- - - - -----
0046
0046
0041
0048
0049
004A
004B
004C
0040
004E
004F
0050
0051
0052
MD_TSL5
OF
02
25
02
09
2A
FF
50
F6
OF
08
4F
80
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
LABEL BYTE
IIOIIIIIB
2
MOTOR WAIT
2
O.
-
02AH
OFFH
050H
OF6H
SRT=O, HO UNLOAD=OF - 1ST SPEC I FY BYTE
HD LOAD: I, MODE=DMA - 2ND SPEC 1FY BYTE
WAIT TIME AFTER OPERATION TILL MOTOR OFF
5 I 2 BYTES f SECTOR
EOT { LAST SECTOR ON TRACK I
GAP LENGTH
DTL
GAP LENGTH FOR FORMAT
FILL BYTE FOR FORMAT
HEAD SETTLE T I ME (M I LL I SECONDS I
hlaTOR START T I ME (118 SECONDS)
MAX. TRACK NUMBER
OAT A TRANSFER RATE
I.
•
19
RATE_250
1- ------------------ ----------- -- ------ -- - ---- - - --- -------------1
1.44 MB MEDIA IN 1.44 MB DRIVE
I
I --- - - - - -- - -- - -------- - - - - - - - ---- --- - -- ---- ------ -- -- -- -- -- - -- ---
0053
0053
0054
0055
0056
0051
0058
0059
0015A
0015B
005C
0050
005E
0015F
MO_TSL6
AF
02
25
02
12
IB
FF
6C
F6
OF
08
4F
00
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
LABEL BYTE
10101111B
2
MOTOR WAIT
2
I.
-
OIBH
OFFH
06CH
OF6H
SRT=A, HD UNLOAO=OF - 1ST SPECIFY BYTE
HD LOAo= 1, MOOE=DMA - 2ND SPEC I FY BYTE
WAIT TIME AFTER OPERATION TILL MOTOR OFF
512 BYTES I SECTOR
EOT ( LAST SECTOR ON TRACK)
GAP LENGTH
DTL
GAP LENGTH FOR FORMAT
FILL BYTE FOR FORMAT
HEAD SETTLE TIME (MILLISECONDS)
MOTOR START TINE (1/8 SECONDS)
MAX. TRACK NUMBER
DATA TRANSFER RATE
I.
•
"
RATE_500
. .0
391
0060
399
400
401
402
403
404
405
.00
0060
0061
0062
0063
0064
0065
0066
DISKETTE_IO_I
sn
FB
55
51
52
53
51
8B EC
PUSH
PUSH
PUSH
PUSH
PUSH
MDV
PROC
FAR
BP
01
OX
BX
ex
BP.SP
.01
.0 •
.."...,.
.,2
BH/IBP'31 =
419
420
421
422
423
424
0068
0069
006A
0060
0010
0012
IE
56
E8
80
12
B4
426
421
428
429
430
431
432
433
0014
0014
0011
0019
001C
001E
0081
0083
80 FC 01
16 OC
80 FC 08
14 01
80 FA 01
16 02
B4 14
436
431
438
439
440
441
442
443
444
445
446
0085
0085
0081
0089
008e
008E
0090
0092
0094
0096
0098
009C
8A
32
00
BB
03
8A
32
88
88
8A
C6
'3'
435
..
..
,
•••
•••
,
•• 0
I:~:~J ~ ~~~~~R'
BITS 3-0 = VALID CMOS TYPE
.,0
'"
.,1
.2.
I I NTERRUPTS BACK ON
1 USER REGI STER
I USER REG I STER
1 HEAD ", DR I VE , OR USER REG I STER
BUFFER OFFSET PARAMETER OR REG I STER
TRACK '-SECTOR , OR USER REG I STER
=> PARAMETER LIST OEP. ON AH
BP
BP)
= SECTOR'
OFFSET
FOR RETURN OF DR I VE PARAMETERS I
CLI(BP] = BITS 1&6 HI BITS OF MAX CYL
BITS 0-5 MAX SECTORS/TRACK
~~H:~:H ~ ~~;S 8 1~!T~ gF MAX CYL.
• 0.
.,0
.,.
I »> ENTRY PO I NT FOR ORG OEC59H
PUSH
PUSH
CALL
eMP
0000 E
FC 19
02
14
"B
MDV
AH-;14H
0 DRIVES INSTALLED
DLI BP+4 ="
DHI BP+5
= MAX HEAD'
011 BP+6 = OFFSET TO DISK BASE
BUFFER SEGMENT PARM OR USER REG I STER
USER REGI STERS
SEGMENT OF B I OS OAT A AREA TO OS
CHECK FOR > LARGEST FUNCT I ON
FUNCTION OK
REPLACE WITH KNOWN I NV AL I 0 FUNCT I ON
AH, I
OK ORV
AH-;S
OK DRV
OL-;'
OK DRY
AH-;14H
RESET OR STATUS 1
IF RESET OR STATUS DRIVE ALWAYS OK
READ DR I YE PARMS 1
I F SO OR I VE CHECKED LATER
DRIVES a AND 1 OK
IF 0 OR I THEN JUMP
REPLACE WITH KNOWN INVALID FUNCTION
CL,AH
CH,CH
CL,1
CL = FUNCTION
CX = FUNCT I ON
FUNCTION TIMES 2
LOAD START OF FUNCTION TABLE
ADD OFFSET INTO TABLE => ROUT I NE
AX = HEAD ' . ' OF SECTORS OR DASD TYPE
OX = DRIVE'
5 I = HEAD ' , ' OF SECTORS OR CASO TYPE
01 = DRIVE'
LOAD STATUS TO AH FOR STATUS FUNCTION
INITIALIZE FOR ALL OTHERS
OS
51
DDS
~~I~~~g_TAE-FNC_TAB) 12
OK FUNC1
CC
EO
E1
00B5 R
09
E6
F6
FO
FA
26 0041 R
06 0041 R 00
-
CMP
"BE
eMP
"Z
eMP
"BE
MDV
MOV
XDR
SHL
MDV
ADD
MDV
XDR
MDV
MDV
MDV
MDV
~~:g~FSET FNC_TAB
AH.DH
DH,CH
SI,AX
OI,DX
AH.OOSKETTE STATUS
ODSKETTE_STATUS,O
THROUGHOUT THE DISKETTE BIOS. THE FOLLOWING INFORMATION IS CONTAINED IN
THE FOLLOWING MEMORY LOCATIONS AND REGI STERS. NOT ALL DISKETTE BIOS
FUNCTIONS REQUIRE ALL OF THESE PARAMETERS •
DSKETIE
5-91
D~~";Er~~nol/~~i~~t.~1 ~~~~~E A:~~;b
t.r
1-'
V.ra I on 2.00
04-21-86
IDSK2.ASM)
'.2
DI
•••
•••
•••,
•••
..
..••••••,
!
BP+'I
BP+2
•• 8
"9
ACROSS CALLS TO SUBROUT I NES THE CARRY FLAG (CY =I ). WHERE I NO I CATED IN
SUBROUT I NE PROLOGUES. REPRESENTS AN EXCEPT I ON RETURN (NORMALLY AN ERROR
~~~g:~:~kRR~~ ~g~~. CASES, WHEN CY = 1. ODSKETTE_STATUS CONTAINS THE
•• 2
•••
•••
DRIVE #
HEAD #
# OF SECTORS OR DASD TYPE FOR FORMAT
BUFFER SEGMENT
SECTOR #
I TRACK'
I BUFF"ER OFFSET
SI-HI
SI-LOW I
ES
I
BP]
I
465
OOAI 2EI FF 17
CALL
WORD PTR CSI(BX]
461
468
469
410
471
472
473
474
475
476
471
418
419
480
OOM!SE
00A5 IF
00106 59
00107 5B
00A8 5A
00A9 5F
OOAA 8B EC
OOAC 50
OOAD 9C
OOAE 58
OOAF 89 46 06
00B2 58
00B3 5D
00B4 CF
POP
POP
POP
POP
POP
POP
SI
.81
'82
483
484
415
486
487
488
489
490
491
492
493
494
495
496
491
498
499
500
501
502
503
504
505
00B5
00B7
00B9
OOBS
OOBD
OOBF
OOCI
00C3
00C5
00C7
00C9
DOCS
OOCD
OOCF
0001
0003
00D5
00D7
00D9
OODB
0000
OOOF
OOEI
00E7
OISC
0148
0154
0160
016C
0lC6
QIC6
OIDO
0lC6
0lC6
0lC6
0lC6
0lC6
0lC6
0lC6
0lC6
0lC6
0lC6
0lC6
0lC6
0289
02AB
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
~
g:~~-~~~~Gs
g: ~~::~~~E
g: ~~:~~=~AT
~~g-~==
DISI(' PARMS
~~g-~==
FNC-ERR
FNC-ERR
FNC-ERR
FNC-ERR
FNC-ERR
FNC-ERR
FNC-ERR
0 I sl(' TYPE
DISK-CHANGE
FORMAT SET
SET MEI5IA
~~g:~==
1
-
00F3
00F5
00F6
OOFa
OOFD
OC
E£
C6
EB
EB
529
530
531
532
533
534
OOFF
0101
0102
0103
0106
a I 08
OC
EE
FB
£8
72
B9
536
531
538
539
541
542
543
544
545
546
547
548
549
550
OIOB
OIOB
OIOC
OlaF
0110
0112
0115
0116
0119
aliA
OIIC
0120
0122
0124
0127
552
0129 E8 0308 R
554
555
556
557
558
•• 9
560
561
562
563
564
565
012C
012C
012F
0131
0133
~ ~~~: :~!~Gs
: ~~ : g~~: :~~~E
::
:
;
:~ ~ ~;~: ~~=~~~
:~ ~ ~;~: :~~:t:g
AM = 08H; READ DRIVE
:~ ~ ~!~: :~~:t:g
PARAMETERS
AH
=
OBH;
INVALID
AM
AM
AH
AH
AH
AH
AH
AH
AH
=
=
OEHI
OFH;
10HI
IIH;
12HI
13HI
14H;
ISH I
16HI
i IHI
18H;
INVALID
INVALID
INVALID
INVALID
INVALID
INVALID
I NVALI 0
READ DASO TYPE
CHANGE STATUS
SET DASD TYPE
SET MEDIA TYPE
:~ ~ ~g~: :~~:t:g
AH
AH
END
=
=
=
=
=
=
=
=
=
1-------=--=------ ------------ -- -------------- --------- ---- -----DISK RESET
(AH = OOH)
- RESET THE DISKETTE SYSTEM.
DI
:
:
I
SK_RES~~V
ODSKETTE STATUS. CY REFLECT STATUS OF OPERATION;
-=---- --------- --- ---------- ----- ----- ----
~:~g3F2HNEAR
CL I
ADAPTER CONTROL PORT
NO INTERRUPTS
~~~
:t:~~T~~T~~ATUS
~~~pD~~[~~~EgU!~gT M~~g~S~~R B~~~LECTION
ROL
AL.4
OR
OUT
AL, 0000 1000B
DX,AL
OSEEK STATUS.O
"'"'
1+2
1+2
04
OR
AL,OOOOOIOOB
DX.AL
OACI R
2D
OOCO
CALL
.JC
DR EA'R
MOV
CX-;-IIOOOOOOB
MOTOR VALUE TO HIGH NIBBLE
OR I VE SELECT TO LOW NIBBLE
TURN ON I NTERRUPT ENABLE
RESET THE ADAPTER
SET RECALIBRATE REQUIRED ON ALL DRIVES
WAIT FOR I/O
WAIT FOR I/O (TO INSURE MINIMUM
PULSE WIDTH)
TURN OFF RESET BIT
RESET THE ADAPTER
ENABLE THE INTERRUPTS
WA I T FOR THE INTERRUPT
I F ERROR, RETURN IT
CL
EXPECTED ONEC_STATUS
08
06 003E R 00
00
00
MOV
"MP
.28
51
B8
50
84
E8
58
E8
59
72
SA
75
FE
80
76
: :~
ENOP
1-- - - ----------- - - - -- - - -
.22
...5.,
[BP+bJ .AX
AX
FNC-ERR
; ON EXIT:
BA 03F2
FA
AD 003F R
24 3F
co CO 04
540
AX
BP
DW
DW
DW
OW
OW
OW
Oii
OW
FNC TAE EQU
DiSKETTE 10!
I
I
I
OOEl
OOEl
OOEA
OOEB
OOE£
OOFO
•••
AX
DW
ow
ow
ow
R
R
00E5 0331 R
OOEl
00E7
523
524
525
526
527
DW
R
00E3 02C"
g:
g:
g:
g:
g:
g:
R
=
BX
DX
01
BP.SP
,- ---------------------- ----- -------- ------------------------ --FNC_TAB
R
R
OS
CX
IRET
R
ec~
516
511
518
519
520
521
MOV
POP
POP
R
501
508
509
.,.
.,..,..,2'"
MOV
PUSH
PUSHF
POP
=
(AHI
ODSKETTE STATUS
CALL THE REQUESTED FUNCT I ON
I RESTORE ALL REGI STERS
OUT
-
STI
NXT DRVI
PUSH
MOV
0134 R
PUSH
08
09F8 R
MOV
CALL
WAIT INT
CX
:~' OFFSET DR_PDP_ERR
=
SAVE FOR CALL
~OAD NEC_OUTPUT ERROR ADDRESS
AH,08H
NEC OUTPUT
SENSE INTERRUPT STATUS COMMAND
POP
AX -
010£9 R
CALL
RESULTS
19
OE 0042 R
13
CI
F9 C3
£2
"C
CMP
POP
CX
"NZ
INC
"BE
DR ERR
CL-;-ONEC STATUS
DR ERR CLCL.1100001lB
NXT_DRV
THROW AWAY ERROR RETURN
READ I N THE RESULTS
RESTORE AFTER CALL
ERROR RETURN
TEST FOR DR I VE READY TRANS I T I ON
EVERYTHING OK
NEXT EXPECTED ONEC STATUS
ALL pass I BLE DR I VES CLEARED
FALL THRU IF 11000100B OR >
CALL
SEND_SPEC
SEND SPEC I FY COMMAND TO NEC
CALL
SETUP END
BX.SIAL,BL
VARIOUS CLEANUPS
GET SAVED AL TO BL
PUT BACK FOR RETURN
CMP
RESBACI
£8 0854 R
8B DE
810 C3
C3
0134
0134 59
0135
0135 80 OE 0041 R 20
013A EB Fa
Ol3C
MOV
MOV
RET
DR POP ERRI
- POP
DR_ERR I
OR
"MP
DISK_RESET
5-92 DSKETTE
CX
CLEAR STACK
ODSKETTE STATUS. BAD NEC
SHORT RE!'SAC
-
SET ERROR CODE
RETURN FROM RESET
ENOP
1-6
04-21-86
IBM Pe,..on.t Comput..,. MACRO A ••• mb I.,.
Ve,.. I on 2. 00
DSKETTE -- 04/21/86 OISKETTE BIOS
IDSK2.ASMI
.66
.67
I -------- -- --- - -------- ----------------- .-- -- -- ---------- -- -----I DISK STATUS
(AH '" OIHI
:
- 01 SKETTE STATUS.
:
I
I ON ENTRY I
AH '" STATUS OF PREVIOUS OPERATION
'6.
'6'
.70
.71
'72
.73
574
515
576
577
518
579
580
,.,
I
013C
013C
0140
0143
0145
0147
0148
88
E8
8B
8A
C3
26 0041 R
0854 R
DE
C3
I
- DISKETTE READ •
, ON ENTRY.
01
=
I
SI-HI
'"
I
S I-LOW '"
I
ES.
I
IBP]
=
•••
•••
•••
•••,
"0
•• 6
•• 7
:
::~I
I
•• 2
0148
0148
0140
0150
0153
0154
1 PUT BACK FOR SETUP END
I VAR 10US CLEANUPS I GET SAVED AL TO BL
I PUT BACK FOR RETURN
DRIVE'
HEAD'
, OF SECTORS
BUFFER SEGMENT
SECTOR ,
: ~~~~~R'
OFFSET
, ON EXITI
.DSKETTE STATUS, CY REFLECT STATUS OF OPERATION I
AND
MOV
CALL
RET
DISK READ
.MOTOR STATUS,OIIIIIIIB I INDICATE A READ OPERATION
AX, OE646H
, AX = NEC COMMAND. DMA COMMAND
RD IR VF
, COMMON READ/WRITE/VERIFY
ENDP
, -----------------------=---------------------------------------DISK READ
PROC
NEAR
80 26 003F R 7F
B8 [646
E8 04AE R
C3
-
,---=------------------------------------------------------------•
1 DISK WRITE
IAH .. 03H}
I
- DISKETTE WRITE.
, ON ENTRY.
01
-=
I
SI-HI
'"
1
S I-LOW '"
=
I
ES
I
IBP]
'"
:
:~:~I
I
DRIVE'
HEAD'
, OF SECTORS
BUFFER SEGMENT
SECTOR ,
: ~~~~~R'
OFFSET
1 ON EXITI
0154
0154
0157
015C
015F
0160
.aSKETTE STATUS, CY REFLECT STATUS OF OPERATION I
,-----------------------=---------------------------------------DISK WRITE
PROC
NEAR
B8 C54A
80 OE 003F R 80
E8 04AE R
C3
-
MOV
OR
CALL
RET
DISK WRITE
AX, OC54AH
, AX '" NEC COMMAND. DMA COMMAND
.MOTOR STATUS,IOOOOOOOB I INDICATE WRITE OPERATION
RD WR VF
I COMMON READ/WRITE/VERIFY
ENDP
,---=-----------------------------------------------------------I DISK VERF
(AH '" 04H)
I
- DISKETTE VERIFY.
I
; ON ENTRY,
01
=
,
SI-HI
•
1
S I -LOW '"
I
ES
'"
I
IBP]
=
:
:~:~I
I
I ON EXITI
0160
0160
0 I 65
0168
0168
016C
DRIVE,
HEAD.
• OF SECTORS
BUFFER SEGMENT
SECTOR'
: ~~~~~R'
OFFSET
.OSKETTE STATUS, CY REFLECT STATUS OF OPERATION I
; -----------------------=- -- ---- --- -- ---------- -------------- ----
80 26 003F R 7F
B8 E642
E8 04AE R
C3
DISK VERF
AN~
MOV
~:~L
PROC
NEAR
.MOTOR STATUS,OIIIIIIIB I INDICATE A READ OPERATION
AX, OE642H
1 AX '" NEC COMMAND, DMA COMMAND
RD_WR_VF
I COMMON READ/WRITE/VERIFY
DISK VERF
ENDP
,---=-----------------------------------------------------------: 0 I SK_Fg~~~~TT~ A~O~M~~~)
I ON ENTRY.
OJ
= DRIVE.
I
SI-HI
'" HEAD.
,
S I-LOW • • OF SECTORS
I
ES
= 9UFFER SEGMENT
I
IBP]
'" SECTOR •
6"
•• 2
•• 0
•••
•••
6.6
•••
,
:
..
•• 7
.DISK POINTER POINTS TO THE PARAMETER TABLE OF'
THIS DRIVE
I
I
I ON EXIT,
ODSKETTE STATUS. CY REFLECT STATUS OF OPERATION I
,-----------------------=---------------------------------------PROC
NEAR
•• 2
016C
016C
016F
0 I 72
0177
OIlA
017C
017F
0182
0184
0187
0187
018A
018C
018E
0191
0193
0196
0191
0199
019C
019F
OIAI
OIA.
0lA7
0lA9
OIAC
:
I
:~:~I ~ ~~~~~R'OFFSET
I
6 ••
6.0
653
654
655
656
657
658
659
660
661
662
663
664
665
666
661
668
669
610
611
672
673
614
615
616
677
618
619
PROC
NEAR
.DSKETTE STATUS,AH
SETUP ENI5
BX,SIAL,BL
ENDP
,---=
-----------------------------------------------------------I DISK READ
(AH '" 02H)
I
•• 3
594
595
596
597
598
599
600
601
602
603
60.
60.
606
607
60.
60.
610
611
612
613
614
615
616
617
618
61.
620
621
622
623
62'
62.
626
627
62.
62'
630
631
632
633
634
635
636
637
60.
60'
6.0
.DSKETTE STATUS, CY REFLECT STATUS OF OPERATION I
1----------------------- =----------------------------------------
•• 2
.....
I ON EXIT:
DISK STATUS
Mav
CALL
MOV
MOV
RET
DISK STATUS
E8
E8
80
E8
72
E8
E8
74
E8
040F R
059B R
OE 003F R 80
05E9 R
3F
0308 R
0630 R
03
0624 R
E8
72
B4
E8
12
B8
50
92
E8
E8
92
E8
E8
92
E8
E8
06AD R
2F
40
0700 R
28
OIBB R
03
0905
09F8
04
0905
09F8
01
0905
09F8
R
R
R
R
R
R
DISK FORMAT
CALL
CALL
OR
CALL
JC
CALL
CALL
.JZ
CALL
FM_WR*
CALL
"C
MOV
CALL
"C
MOV
PUSH
MOV
CALL
CALL
MOV
CALL
CALL
MOV
CALL
CALL
XLAT NEW
I TRANSLATE STATE TO PRESENT ARCH.
I ESTABLISH STATE IF UNESTABL.ISHED
FMT TN I T
.MoTOR STATUS. 10000000B 1 INDICATE WRITE OPERATION
MED CHANGE
I CHECK MED I A CHANGE AND RESET I F SO
1 MEDIA CHANGED. SKIP
FM 150N
I SEND SPEC I FY COMMAND TO NEC
SERD SPEC
CHK CASTRATE
I ZF-= I ATTEMPT RATE I S SAME AS LAST RATE
FM ViR
1 YES I SK I P SPEC I FY COMMAND
I SEND DATA RATE TO CONTROLLER
SERD_RATE
1 SET UP THE DNA FOR FORMAT
~~Tg~~_SET
AH-;04DH
NEC INIT
~~-;g~~SET
OL,3
GET PARM
NEC-OUTPUT
DL.4
GET PARM
NEC-OUTPUT
CL. ' PARM
GET
NEC:OUTPUT
I
FM_DON
I
,
I
1
I
,
I
RETURN WI TH ERROR
EST ABL I SH THE FORMAT COMMAND
INITlAL.IZE THE NEC
ERROR - EXIT
LOAD ERROR ADDRESS
PUSH NEC OUT ERROR RETURN
BYTES / SEETOR VALUE TO NEC
I SECTORS/TRACK VALUE TO NEC
; GAP LENGTH VALUE TO NEC
DSKETIE
5-93
o~~~T~r~~no!/~~iG~UOI ;~~;~E A:~~;bter
V.ralon 2.00
(OSK2.ASM)
680
681
682
6a3
614
685
6a6
681
618
6a9
690
691
6.,
OlAF
OIBI
0184
0lB7
0lB8
0lB8
0188
OIBE
OICI
0lC3
0lC5
0lC6
82
E8
E8
58
Ea
08
0905 R
09F8 R
Ea
Ea
as
aA
C3
0435 R
oa54 R
MOV
CALL
CALL
POP
CALL
0758 R
CALL
CALL
MOV
MOV
RET
DISK FORMAT
DE
C3
:
;
I
6.6
697
I
I
.OSKETTE_STATUS, CY REFLECT STATUS OF OPERATION I
------------------------------- -- ------------------ -- -------
:~C
MOV
;~6
~~~~ I
:
~~~~~~~ ~~NCT I ON
REQUEST
AH, BAD CMD
; SET BAD COMMAND ERROR
.OSKETTE_STATUS. AH
:
~~~R~A~~Y D~ ~~ I ~~~~ NG
ERROR
RET
FNC _ERR ENDP
DISK_P~:~~ O~~~Ellp~=~:..e:TERS.
ON ENTRYI
01 II DRIVE'
ON EXITt
CL/[BP]
II BITS 1
& 6 HIGH 2 BITS OF MAX CYLINDER
BITS 0-5 MAX SECTORS/TRACK
= LOW 8 BITS OF MAX CYLINDER
=BITSl-4=0
BITS 3-0 = VALID CMOS DRIVE TYPE
• 0
DLI BP+4 = , DRIVES INSTALL.ED
OH/ BP+5
It MAX HEAD"
01/ .+6 = OFFSET OF MEDIA/DRIVE PARAMETER TABL.E
= SEGMENT OF MEDIA/DRIVE PARAMETER TABL.E
ES
• 0
AX
BH/IBP+.!
I NOTE t THE ABOVE INFORMATION IS STORED IN THE USERS STACK AT
THE LOCATIONS WHERE THE MAIN ROUTINE WILL POP THEM
I
I
INTO THE APPROPRIATE REGISTERS BEFORE RETURNING TO THE;
;
CALLER.
I
1-- ----- - --- - - - ---- ----- - - - --- -------- ----------- --- --- ----------
1
DISK_PAR~~LL
0100
a 100
E8 040F R
0103 C7 46 02 0000
0108 AI 0010 R
OIDB 24 CI
134
glDLl B2 02
735
736
737
738
n9
140
a IDF 3C 41
aiEl 74 06
a IE3 FE CA
01E5 3C 01
01E7 75 6A
OEC
CMP
.iNZ
a 1E9
MOV
CMP
.IA
MOV
CAL.L
.IC
OR
.IZ
CALL
.IC
742
743
144
745
746
H7
748
749
750
751
752
753
754
755
ENDP
ON EXIT,
MaV
MOV
ANO
MOV
CMP
JZ
T.I
1 TRANSLATE STATE TO COMPATIBLE MODE
I VARIOUS CLEANUPS
I GET SAVED AL TO BL
I PUT BACK FOR RETURN
FUNCTION REQUESTED OR INVALID DRIVE;
SET BAD COMMANO IN STATUS.
FNC_ERR
aa C6
84 01
88 26 0041 R
F9
C3
T06
TOT
T08
TO'
TIO
Til
TI2
TI.
TI,
TI.
TI6
TIT
TI.
T\9
T20
T21
T22
T2.
T2.
T2.
T26
T2T
T2.
729
730
731
732
733
1 THROW AWAY ERROR
, TERMINATE, RECEIVE STATUS. ETC.
XLAT OLD
SETU~ END
aX,slAL.aL
FNC-ER~NVALID
;--0lC6
0lC6
0lC8
OICA
OICE
OICF
a 100
I FILLER BYTE TO NEC
,---=------------------------------------------------------------
6"
6 ••
699
700
701
702
703
704
705
DL.8
GET PARM
NEC-OUTPUT
AX NEC_TERN
FM_DONI
6.2
6'.
I-T
04-21-86
alEC
OIEF
01F'1
01F'5
0lF8
OIFA
OIFC
IFE
0201
0203
0206
020A
020E
a
88 56 04
83 F'F 01
11 66
C6 46 05 01
E8 08EC R
72 16
OA co
74 12
E8 03S8 R
72 00
88 46 02
2EI 8A oW 04
2EI 8A 6" 08
Ea 32
NOV
MOV
MOV
.iMP
~~~ NEWNEAR
WORD-PTR (BP+2J.0
AX ••EQU I P FLAG
AL.1IOOOOOIB
DL,2
AL,OIOOOOOIB
STO_DL
AL. 0000000 I B
NON_DRV
DL
[BP+4) ,DL
01,1
NON DRVI
BYTE' PTR(BP+5).1
CMOS TYPE
CHK E'ST
AL,;;L
CHI< EST
DR TyPE CHECK
CHi( £ST[BP+2) .AL
CL'CS'IBXI·MD_SEC_TRK
~~O~~I s~~_c~D_MAX_TRK
TRANSLATE STATE TO PRESENT ARCH.
DRIVE TYPE = 0
L.OAD EQU I PMENT FLAG FOR , 0 I SKETTES
KEEP DIS,K"TT" DR!VE 8!TS
DISKETTE DRIVES = 2
2 DRIVES INSTAL.L.ED ?
IF YES ,JUMP
=
I
I DISKETTE DRIVES
; 1 DRIVE INSTALLED?
; IF NO ,JUMP
, STORE NUMBER OF DRI VES
CHECK FOR VALID DRIVE
; DRIVE INVALID
MAX I MUM HEAD NUMBER = I
RETURN DRIVE TYPE IN AL
; ON CMOS BAD CHECK ESTABLISHED
J TEST FOR NO DRIVE TYPE
I JUMP IF SO
I RTN CSIBX II MEDIA/DRIVE PARAM TBL.
; TYPE NOT IN TABLE (POSSIBLE BAD CMOS)
I STORE VALID CMOS DRIVE TYPE
J GET SECTOR/TRACK
I GET hlAX. TRACK NUMBER
; CMOS GOOD f USE CMOS
I
I
I
T.6
751
758
159
760
0210
0210 8A A5 0090 R
0214 F6 C4 10
0211 74 3£
CHK_EST r MOV
0219
0219 80 E4 CO
021C 80 FC 80
021F 75 54
USE ESTI
AND
CMP
.INE
TEST
.IZ
T61
162
763
764
765
T66
T6T
T68
LOAD STATE FOR THIS DRIVE
CHECK FOR ESTABL.I SHED STATE
CMOS BAD/INVALID AND UNESTABL.ISHED
ISOLATE STATE
RATE 250 ?
NO, GO CHECK OTHER RATE
,--- DATA RATE IS 250 KBS. TRY 360 K8 TABLE FIRST
169
110
111
772
113
714
715
716
0221
0223
0226
022A
022E
0233
118
719
780
T81
782
BO a I
E8 0388 R
2EI 8A 4,. 04
2EI SA 6F oa
F6 85 0090 R
74 00
0235
0235
0237
023A
023E
BO 04
E8 03B8 R
2Et 8A 4F 04
2EI 8A 6F OB
784
785
786
787
788
0242
0242
0245
0248
024A
89
89
8C
8E
190
79 I
792
793
024C
02<4-F
0251
0252
E8 0435 R
33 co
F8
C3
DRIVE TYPE I (360KB)
RTN CSIBX = MEDIA/DRIVE PARAM TBL
GET SECTOR/TRACK
GET MAX. TRACK NUMBER
80 TRACK ?
MUST BE 360KB OR I VE
MOV
CALL
MOV
NOV
aI
TEST
.IZ
;--- IT IS 1.<4--4 Me DRIVE
TH
PARMI<4-41
MOV
CALL
5-94
DSKETIE
J DRIVE TYPE 4 (1.<4-4MB)
J RTN CS;BX = MEDIA/DRIVE PARAM TBL
GET SECTOR/TRACK
; GET MAX. TRACK NUMBER
g~:g~: I~~I ::g::~~:~~
MOV
MOV
MOV
MOV
AX,CS
ES,AX
1:~!6~~BX
SAVE I N STACK FOR RETURN
ADDRESS OF MEDIA/DRIVE PARM TABLE
SEGMENT MEDIA/DRIVE PARAMETER TABLE
ES IS SEGMENT OF TABLE
XLAT OLD
AX,AX
TRANSLATE STATE TO COMPATlBL.E MODE
CLEAR
STO_CXI
4E 00
5E 06
C8
co
AL.04
OR TYPE CHECK
NOV
NOV
T8.
T.'
AH,.DSK STATE[DI}
AH.MED llET
NON_DRVI
DP_OUT I CALL
XOR
CLC
RET
I
1-.
O~~~T~r~~"~!/~~~~h~1 ~:~~~E A:~~Sbl."
V.,.alon 2.00
(OSK2.ASM)
T"
T••
T••
,-----
197
798
0253
0253
800
80 I
802
0257
0257 81 FF 0080
025B 72 09
T"
ceo
806
807
808
809
810
""
812
813
814
815
816
817
818
...
0250
0260
0262
0264
0265
E8 0435 R
ISB C6
84 a I
F9
C3
0266
0266
0268
026B
026E
0211
0273
33 co
89 46 00
66 05
89 46 06
8E co
EB 07
0215
...•••
0289
132
13'
as
0215
02ll
027A
021E
0282
0285
0281
BO 02
E8 03B8 R
2EI 15A 4F 04
2EI 8A 6F 08
80 FC 40
74 B8
EB AC
840
841
842
843
844
845
e....
CALL
MOV
MOV
STe
RET
NON ORV2,
XOR
MOV
MOV
MOV
MOV
"MP
I
CLEAR PARMS IF NO DRIVES OR CMOS BAD
TRACKS, SECTORS/TRACK == a
HEAD =at a
OFFSET TO 0 I SK BASE == a
ES I S SEGMENT liF TABLE
AX,AX
SP) .AX
BP+Sj,AH
BP+6 ,AX
ES.AX
SHORT DP_OUT
DRIVE TYPE 2 (1.2MB)
RTN CSIBX • MEDIA/DRIVE PARAM TBL
GET SECTOR/TRACK
GET MAX. TRACK NUMBER
RATE 300 ?
MUST BE 1 .2te DRIVE
ELSE, IT IS 1.44MB DRIVE
"E
"MP
,
I
- THIS ROUTINE RETURNS THE TYPE OF MEDIA INSTALLED.
ON ENTRY a
01 = DRIVE'
a
I
,-------- --------------------------------------- -- ---------- -- --I
ON EXile
850
851
852
853
854
8S5
856
857
858
859
860
861
029C
029C
029D
02AO
02AI·
02A2
02A4
02A6
02Al
02A 1
02A9
02AB
DT_BACK aPUSH
50
E8 0435 R
58
F8
8B DE
iliA C3
C3
CALL
POP
ece
MOV
MOV
RET
AH • DRIVE TYPE, CY.O
PROC
NEAR
XLAT NEI
AL.O'O'~K_STATE(DI)
AL,AL
NO DRV
AH-;NOCHGL.N
AL, TRK CAPA
DT BACK
AH-;CHGLN
32 E4
EB FI
I TRANSLATE STATE TO PRESENT ARCH.
I GET PRESENT STATE INFORMATION
1 CHECK FOR NO DR 1VE
I
1 NO CHANGE L J NE FOR 40 TRACK DR ~ VE
I IS THIS DRIVE AN 80 TRACK DRIVE?
I IF NO JUMP
I CHANGE LINE FOR 80 TRACK DRIVE
AX
XLAT OLD
AX -
SAVE RETURN VALUE
TRANSLATE STATE TO COMPATIBLE MOOE
RESTORE RETURN VALUE
NO ERROR
GET SAVED AL TO BL
PUT BACK FQR ~ETURN
BX,SI
AL.BL
XOR
JMP
01 SK_TYPE ENDP
AH, AH
SHORT DT_BACK
I NO OR I VE PRESENT OR UNKNOWN
1---------------------------------------------------------------I DISK CHANGE
(AH. 16Hl
a
863
•••
•••
•••
.61
•••
•••
I
-
THIS ROUTINE RETURNS THE STATE OF THE DISK CHANGE LINE.
I
I ON ENTRY I
I
, ON EXITa
I
I
02AB
02AB
02AE
02B2
0284
0286
0288
I
NO_DRVI
•• 2
• 10
.TI
872
873
814
875
876
8ll
878
ELSE TRANSLATE TO COMPATIBLE MODE
RESTORE AL
SET BAD COMMAND ERROR
SET ERROR RETURN COPE
CALL
MOV
MOV
eMP
848
•••
XLAT OLD
AX,sT
AH,8AD_CMD
USE_EST2 ~OV
DISK TYPE
CALL
hIOV
OR
.JZ
MOV
TEST
.JZ
hIOV
~46
I CHECK FOR FIXED MEDIA TYPE REQUEST
1 CONTINUE IF NOT REQUEST FALL THROUGH
.JB
Fl XED 0 I SK REQUEST FALL THROUGH ERROR
0289
0289 E8 040F R
028C 8A 85 0090 R
0290 OA co
0292 74 13
0294 B4 01
0296 AS 01
0298 74 02
029A B4 02
841
, CLEAR NUMBER OF DR I VES
1--- --------------- - ---------- - --- ------------------ ------------1 DISK TYPE
(AH;: ISH)
a
.31
•••
•••
-
,--- DATA RATE IS EITHER 300 KBS OR 500 KBS, TRY 1.2 MS TABLE FIRST
822
823
524
825
526
827
828
829
831
BYTE PTR [F+4 J ,0
NON DRVI,
1-----
12.
121
13.
NO DR I VE PRESENT HANDLER
46 04 00
10.
10'
10.
04-21 -86
01
=
,
I
DRIVE.
AH == oeSKETTE STATUS
00 - DISK CHANGE LINE INACTIVE, CY
I
I
=0
06 - DISK CHANGE LINE ACTIVE, CY • I
a
,-----------------------------------------... ---------------------
E8
8A
OA
74
A8
74
040F R
155 0090 R
DISK_CHA~~EL
MOV
OR
JZ
co
19
01
05
~iST
=~~~
NEINEAR
AI.- • .tiSK_STATE[DI)
AL,AL
DC NON
~~~T~K_CAPA
I TRANSLATE STATE TO PRESENT ARCH.
I GET hlEDI", STATE INFORMATION
I DRIVE PRESENT?
1 JUMP IF NO DRIVE
:
~~ ~~A~KC~:~~EC~ANGE
LINE
.19
880
881
028A E8 OB28 R
02BO 74 05
DCOa
883
02BF C6 06 0041 R 06
885
886
887
888
889
02C4
02C7
02CA
02CC
02CE
89!
892
893
894
•• S
02CF
02CF 80 OE 0041 R 80
0204 EB EE
0206'
•••
•••
•••
E8
E8
88
IA
C3
0435 R
0854 R
DE
C3
CALL
READ DSKCHNG
FIN I !
SETITI
MOV
ODSKETTe:_STATUS.MED I A_CHANGE
FINISa
CALL.
GALL
MOV
MOV
RET
XLAT OLD
OR
OOSKETTE STATUS. TIME OUT
SHORT FINI S
ENDP
"Z
:~~~~_ENC
ALtBL
GO CHECK 5T ATE OF C I SK CHANGE LINE
CHANGE L I ~ NOT ACT I VE
,
INDICATE MEDIA REMOVED
TRANSLATE STATE TO COtlPATIBLE MODE
VARIOUS CL.EANUPS
GET SAVED AL TO BL
PUT BACK FOR RETURN
DC_NONa
"""
DISK_CHANGE
; SET TIMEOUT. NO DRIVE
•••
•••
•••
;---------- ------------------------------------------- ---------=
.0.'0'
I ON ENTRY a
I
•• T
• 00
.01
.02
.os
'0 •
• OT
; FORMAT SET
(AH
I TH)
I
TH 1 S ROUT I NE I S USED TO EST ABL I SH THE TYPE OF
I
MEDIA TO BE USED FOR THE FOLLOWING FOR",AT OPERATION •
I
I
; ON EXIT:
:
5 I LOW • DASD TYPE FOR FORMAT
DI
DRIVE'
=
_DSKETTE STATUS REFL.ECTS STATUS
~~
:
~O~~E~~~~~TATUS
a
;-------------------------------- ---------------- ------------- ---
DSKETIE
5-95
,-.
D~:T~,.~~n~!/~~iG~t.DI~~~;~E A~~~;b I.,.
...•••
...
......."
•• 8
.11
.. 2
.. 5
.2.
'2'
• 22
.2.
.2.
.25
.2.
.21
.2.
.2.
...••••••
•• 2
•••
•••
•••
•••
•••
•••,
•••
•••
V.,.a I on 2.00
(DSK2.ASM)
0206
0206
0209
02DA
02DC
02DE
02EO
02E5
02E6
02E8
02ED
E8
56
8B
32
8B
80
4E
75
80
EB
02F9
02FA
02FC
0301
4E
75 01
80 80 0090 R 1.
EB 23
0303
0303
0304
0306
030B
4E
75 07
80 80 0090 R
EB 19
0300
0300 4E
030E 75 20
'.2
0310
0315
0317
0319
031E
..
•••
•••
•••
•••
•••,
•• 1
..•••
•• 2
.5.
•••
•••
•••
•••
•••,
•••
•••
•••
•••
•••
•••
F6
74
BO
F6
75
XOR
MOV
ANO
OEC
.JNZ
.
,
CMP
.JZ
I CLEAR STATE
MEDIA & DRIVE
320/360
SI
I CHECK FOR 320/360K IN 1.2M DRIVE
NOT 320 12
I BYPASS IF NOT
.DSK STATE[OI] ,MED OET+OBL STEP+RATE 300 I SET STATE
SHORT SO
-
DEC
.JNZ
OR
.JMP
NOT 320 12.
-DEC
SI
I CHECK FOR 1.2M MEDIA IN 1.2M DRIVE
NOT 12
1 BYPASS IF NOT
.DSK STATE[DI].MED DET+RATE 500
I SET STATE VARIABLE
SHORf SO
I R'ETURN TO CALLER
.JNZ
OR
.JMP
I CHECK FOR SET DASD TYPE 04
I BAD COMMAND EXIT IF NOT VALID TYPE
85 0090 R 04
09
50
85 0090 R 02
02
TEST
.JZ
MOV
TEST
.JNZ
.DSK STATE(DI] .DRV DET
ASSUJiiE
AL,MED DET+RATE 300
.DSK STATE[DI].~MT CAPA
OR_lf_IN
-
I DRIVE DETERMINED?
I IF STILL NOT DETERMINED ASSUME
I MULTIPLE FORMAT CAPABILITY?
I IF 1.2 M THEN DATA RATE 300
SET UP
I
0322
0322 08 85 0090 R
E8 0435 R
E8 0854 R
TYPE
TYPE
MED CHANGE
I CHECK FOR TI ME_OUT
.DSR'ETTE STATUS.TIME OUT
SO
I IF TIME OUT TELL CALLER
0320
0320 10 90
0326
0329
032C
0320
Ol2F
PRESENT ARCH.
SHORf 50
NOT 320 I
CALL
5.,
=
=
~g~R'3~~ATE[OI ) .MED_DET+Rh::~~~5 II~E~O~O
OR
.JMP
:n
02EF
02EF E8 05E9 R
02F2 80 3E 0041 R 8 •
02FT 14 20
=
=
=
MOV
07
80 0090 R 90
.31
PROC
NEAR
XLAT NEW
TRANSLATE 5T ATE TO
SI
SAVE DASD TYPE
AX.SI
AH
? , AL
DASD
AH.AH
AH
0 , AL
DASD
SI.AX
I SI
DASD TYPE
.OSK STATEIDI ) .NOT MED DET+DBL STEP+RATE MSK
51
- I CHECR' FOR 320/~60K
FORMAT SET
- CALL
PUSH
040F R
C6
E4
FO
AS 0090 R OF
04-21-86
5.,
58
8A C3
Cl
.DSK_STATE[DI] ,AL
I OR IN THE CORRECT STATE
CALL
CALL
XLAT OLD
SETUPS END
POP
MOV
I TRANSLATE STATE TO COMPATIBLE MODE
I VAR 10US CLEANUPS
I GET SAVED AL TO BL
AL.BL
I PUT BACK FOR RETURN
BX
-
RET
.51
..
962
0330
Ol30 C6 06 0041 R .,
0335 EB EF
0337
j -------- - - - - - - --------- - -- - - --- -- - - --- ---------- - - - -- -- --- ------
=
!
91.
91'
'12
.TS
91.
91'
910
~=~~~R ,PER
I:!I] :
I
TRACK
I
01
II DRIVE'
I ON EXITI
I
.OSKETTE STATUS REFLECTS STATUS
I
IF NO ERlfoR.
I
AH III 0
CY
0
I
I
ES
SEGMENT OF MEDIA/DRIVE PARAMETER TABLE
1
DI/(BP+6] = OFFSET OF MEolA/DRIVE PARAMETER TABLE
I
IF ERROR:
I
AH • •DSKETTE STATUS
I
CY
I
-
=
=
'TT
.18
91'
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1001
1008
1009
1010
101 I
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
UNKNOWN STATE,BAD COMMAND
ENDP
I SET MEDIA
(AH
18H)
I
THIS ROUTINE SETS THE TYPE OF MEDIA AND DATA RATE
I
TO BE USED FOR THE FOLLOWING FORMAT OPERATION •
I ON ENTRYt
• 01
..•••'.2,
;~~~~T~~_STATUS,BAD_CMD I
FORMAT_SET
=
I
1--- - -- - - ------------ ----------------- -- ---- - - ---- -- - -- -- - --- -- --
0337
0337
Ol3A
033F
0341
0344
0349
0341
0350
0350
0353
0355
0357
03n
035C
035E
035F
0361
0364
0364
0369
036C
036E
E8
F6
74
E8
80
74
C6
040F R
85 0090 R 0 I
OF
OSE9 R
3E 0041 R 80
66
06 0041 R 00
E8
72
OA
74
E8
72
57
33
89
08EC R
38
CO
58
03B8 R
2F
DB
0006
2EI 8A A7 0000 R
80 E4 7F
3A C4
75 17
SET MED I A
CALL
TEST
JZ
CALL
PROC
NEAR
XLAT NEW
1
OOSK-STATE(DI].TRK_CAPA I
SM cUOS
I
MEl) CHANGE
1
;~S~~~TE_STATUS. TIME_OUT
SM CMOS. MOV
.D!KETTE_STATUS,O
CLEAR STATUS
CMOS TYPE
MD Ni5T FND
AL-;AL SM RTN
OR-TYPE CHECK
RETURN DR I VE TYPE IN (AL)
ERROR IN CMOS
TEST FOR NO DRIVE
RETURN I F SO
RTN CS:BX = MEOIA/DRIVE PARAM TBL
~~~~ ~~~. IN TABLE (BAD CMOS)
ex I BX
CX.DR_CNT
BX
.JNE
AH,CSIDR TYPE[BX]
AH,BIT70FF
AL,AH
NXT_MD
GET DRIVE TYPE
MASK OUT MSB
DR I VE TYPE MATCH ?
NO, CHECK NEXT DRIVE TYPE
3~
-
..JC
OR
.JZ
CALL
~~SH
XOR
MOV
OR SEARCH:
MOV
ANC
CMP
0370 2E I 8B SF 000 I R
0375
0379
037C
037£
0382
0385
0387
0387
Ol8A
038C
0380
0380
0392
5-96
CALL
2E. SA 65 04
38 66 00
75 09
2EI 8A 65 DB
38 66 01
74 00
~~:NOT_FND
TRANSLATE STATE TO PRESENT ARCH.
CHECK FOR CHANGE LINE AVAILABLE
.JUMP IF 40 TRACK OR J VE
RESET CHANGE LINE
IF TIME OUT TELL CALLER
ex
MOV
01 ,CSIWORD PTR OR_TYPE [BX+I ]
MOV
AH.CSI(DI] ,MD_SEC_TRK
COP
[BPI,AH
.JNE
NXT MD
AH,'e'SI (01] .MO MAX TRK
(BP+I],AH
MD_FNO
MOV
CMP
.JE
II
I NDEX TO OR TYPE T ABLEA
COUNT -
= LOOP
I 01 = MEDIA/DRIVE PARAMETER TABLE
I GET SECTOR/TRACK
I MATCH?
I NO. CHECK NEXT MEDIA
I GET MAX. TRACK ,
I MATCH?
I YES, GO GET RATE
NXT_MDt
83 C3 03
E2 08
SF
C6 06 0041 R DC
EI 10
AOD
LOOP
POP
MD NOT FNaI
- MOV
DSKETTE
.JMP
BX,3
OR SEARCH
0'-
1 CHECK NEXT DR I VE TYPE
1 RESTORE REG.
D~~~T~r~~n~!/~~i~~taDI ~~~~~E AB~~~b lar
1-10
04-21-86
Var. i on 2.00
loSK2.ASM)
1022
1023 0394
1024 0394 2E I 8A 45 OC
1025 0398 3C 40
1026 039A 75 02
1027
OC 20
1028 039E
1029 039E 89 7E 06
1030 03AI OC 10
1031 OiA3 5F
1032 03A4 80 A5 0090 R OF
1033 03A9 08 85 0090 R
1034 03AD 8C C8
1035 03AF 8E CO
1036 03BI
1037 03B I E8 0435 R
1038 03B4 E8 0854 R
1039 03B7 C3
1040 03B8
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055 03B8
1056 03B8 50
1057 03B9 51
1058 03BA 33 DB
1059 03BC B9 0006
1060 03BF
1061 03BF 2EI 8A A7 0000 R
1062 03C4 3A C4
1063 03C6 74 08
1064 03C8 83 C3 03
1065 OSCB E2 F2
1066 03CD F9
1067 03CE EB 05
1068 03DO
1069 0300 2EI 8B 9F 0001 R
1070 0305
1071 0305 59
1072 0306 58
1073 0307 C3
1074 0308
1075
1076
10TT
1078
1079
1080
1081
1082
1083
1084 OSD8
1085 OSD8 50
1086 0309 B8 03F3 R
1087 03DC 50
1088 0300 B4 03
1089 03DF E8 09F8 R
1090 03E2 2A 02
1091 03E4 EIS 0905 R
1092 03E7 E8 09FIS R
1093 03EA B2 01
1094 03EC EIS 0905 R
1095 03EF EIS 09FIS R
1096 03F2 ISIS
1097 03FS
I091S 03F3 58
1099 03F4 C3
1100 03F5
1\ 01
II 02
1103
1104
1105
1106
1107
1108
1109
11100SF5
II11 03F550
1112 OSF6 BIS 0400 R
1113 03F9 ISO
1114 03FAB4 03
1115 OSFC EIS 09FIS R
1116 OSFF 2EI ISA 27
1117 0402 EIS 09FIS R
IIIIS 0405 2EI 8A 67 01
II 19 0409 EIS 09F8 R
1120 040C 51S
11210400
1122 0400 51S
1123 040E CS
1124 040F
MD_FNDI
MOV
CMP
JNE
OR
onc
MOV
OR
POP
ANa
OR
MOV
MOV
~~:~~+~D~AoMD_RATE
~~-;-~~~_;TEP
[BP+61IDI
~~tMED_DET
GET RATE
DOUBLE STEP REQUIRED FOR RATE 300
, SAVE TABLE POINTER IN STACK
: ~~~T~~:I~E~~TABLISHED
:g~~_~~~~~lg:) :~~T MED_D~T;~~L!~r~~+RATE_MSK
AXIC!
ES, AX
I CLEAR STATE
I SEGMENT MEDIA/DRIVE PARAMETER TABLE
I ES I S SEGMENT OF TABLE
SM_RTNI
CALL
CALL
RET
SET_MEDIA
XLAT OLD
SETUJ5"_END
TRANSLATE STATE TO COMPATIBLE MOCE
VARIOUS CLEANUPS
ENoP
1-------- -- ---------- ----------- ------ -------------- -- ----------I DR TYPE CHECK
CRECK IF THE GIVEN DRIVE TYPE IN REGISTER tAL)
I
I S SUPPORTED IN B I OS DR I VE TYPE TABLE
I ON ENTRY I
1
AL .. DRIVE TYPE
1 ON EXIT,
I
CS .. SEGMENT OF MEDIA/DRIVE PARAMETER TABLE tCODEI
CY .. 0
OR I VE TYPE SUPPORTED
I
I
BX • OFFSET TO MEDIA/DRIVE PARAMETER TABLE
I
CY .. I
OR I VE TYPE NOT SUPPORTED
I REGISTERS ALTEREDz
BX
1
z
I --- - --- - - -------------- - - - ----- - - - --- -- ----- - ----- - -------------
OR TYPE CHECK
-PUSH
PUSH
XOR
TYPE CHK~OV
-
MOV
CMP
JE
ADD
LOOP
STC
JMP
DR TYPE VALIDI
-MOV
TYPE RTNI
POP
POP
RET
OR_ TYPE_CHECK
PROC
NEAR
AX
CX
BX,BX
CXIDR_CNT
AH,CSIDR_TYPE(BXI
AL,AH
DR TYPE VAL 10
BX";"STYPE_CHK
GET OR I VE TYPE
DR I VE TYPE MATCH 1
YES, RETURN WITH CARRY RESET
CHECK NEXT DR I VE TYPE
I DRIVE TYPE NOT FOUND IN TABLE
SHORT TYPE_RTN
BX,CS,WORO PTR OR_TYPE(BX+l]
I BX .. MEOlA TABLE
ex
AX
ENDP
I ------- - - ------------ - ------- -- ------ - ------- ----- -- ------------
I SEND SPEC
I
- SEND THE SPEC I FY COMMAND TO CONTROLLER US I NG OAT A FROM
I
THE DRIVE PARAMETER TABLE POINTED BY .DISK POINTER
I ON ENTRYz
.DISK POINTER", DRIVE PARAMETER TAaLE
I ON EXIT I
NONE I REGISTERS ALTERED. CX, OX
•
I
1----------------------- -------- ------- -- ----- ----- -------------SEND_SPE~USH
MOV
PUSH
MOV
CALL
SUB
CALL
CALL
MOV
CALL
~~~L
:~OC
NEAR
AX,OFFSET SPECBAC
AX
AH,03H
NEC OUTPUT
DLlliL
GET PARM
NEC-OUTPUT
DL, T
GET PARM
~~C:OUTPUT
SAVE AX
LOAD ERROR ADDRESS
PUSH NEC OUT ERROR RETURN
SPECIFY ~OMMAND
OUTPUT THE COMMAND
FIRST SPECIFY BYTE
GET PARAMETER TO AH
OUTPUT THE COMMAND
SECOND SPEC I F'Y BYTE
GET PARAMETER TO AH
~~~P~~R6~E R~~~=~NO
SPECBACI
PDP
RET
SEND_SPEC
AX
I RESTORE ORIGINAL AX VALUE
ENDP
1- --- ------------------ ------- - ------- --------------- -- ---------I SEND SPEC MD
I
- SENI5 THE SPEC I FY COMMAND TO CONTROLLER US J NG OAT A FROM
1
THE MEDIA/DRIVE PARAMETER TABLE POINTED BY (CSIBX)
I ON ENTRY:
CScBX • MEDIA/DRIVE PARAMETER TABLE
1 ON EXIT.
NONE
I REG I STERS ALTERED. AX
•
1---------------------------------------------------------------PROC
NEAR
SEND SPEC MD
POSH
~3~H
MOV
CALL
MOV
CALL
MOV
CALL
pap
AX
~~,OFFSET SPEC_ESBAC
AH I 03H
NEC OUTPUT
AH,~SI[BX].MD_SPECI
NEe OUTPUT
AH,(!Sc (BX] • MO_SPEC2
NEC OUTPUT
AX -
SPEC_ESB~g~
AX
RET
SEND_SPEC_MD
ENOP
SAVE RATE DATA
LOAD ERROR ADDRESS
PUSH NEC OUT ERROR RETURN
SPEC I FY ~Oh4MAND
OUTPUT THE COMMAND
GET I ST SPEC I FY BYTE
OUTPUT THE COMMAND
GET SECOND SPEC I FY BYTE
OUTPUT THE COMMAND
POP ERROR RETURN
1 RESTORE RATE
DSKETTE
5-97
I-II
04-11-1'
1125
1126
11;!1
IIZ1
112,
1130
1131
1----------------------------------------------------------------
PAGE
:
I
Ilaa
1133 04.
1134
1135
1136
lilT
1131
113'
1140
1141
1142
I 143
1144
1141
1146
1141
1148
114'
1110
1151
1152
1153
1154
II Ii
1116
1151
040fr
04U
0414
04 ••
0418
0410
0420
0423
0421
0421
O+IC
0410
0430
'
0431
0+31
0434
.
0431
13 FF 01
n IC
8:0 eo 00'0 R DO
14 "
la CF
CD EI 02
AD OOIF R
D2
0415
0431
04.1
043A
0,3F
DI ., DRIVE
XLAT_NEW
ClIP
.JA
QI.!
XN OUT
'::r
MaV
StI.,.
MaV
ROR
ANO
~
XN_OUT'
C3
XLAT_HEW
ENDP
•
I
I
I
, ON ENTRY,
I
I
13 FF 01
11 13
10 BD 0090 R 00
14
'C
CIF
..IA
crr
.JZ
1-----
MO'
s....
MO'
ROR
TEST
JNZ
,-----
IA
24
D2
9~
:===
,,1'
I aU
122.
1230
1231
1232
00
FC 10
EI
C1 Ot
E3
O.'D
04.0 F6 Ct 10
O+AO T+ 02
04A2 ~+ 03
O+A4
O+A4 80 Ae 0090 R FI
04A' 01 ae 00.0 R
O+AD
O+AD C3
O+AE
5-98
DSKETIE
S~T
I CX = PRIVE NlIItBER
I CL _ SHIFT COUNT. A=O. B=4
: ig~TEMU~~1 ~~~A RAT~ BIT MASK
CX.DI
CL.I
AH.FMT_CAPA
AH.CL
eHF CNTRL, AH
~~Yf:'SET
• MULTI-DATA RATE DETERMINED?
I IF SO. NO NEED TO 8E-SAVE'
~oy
~CCESS CURREtrr DRIVE BITS AND STORE IN eHF":'CNTRL
MO'
AND
ROR
OR
:~::~~~~::l~~lpA+TRK_~A~i~ESS I S~~
MO.
,jz
MO.
ClIP
JNZ
TEST
JNZ
....
~OtrATlaILITY
AH.eDSK_STATE[DI]
BI:t.AH
AM,RATE YSK
:, 100000008
(250) -> 010000008
(300) -> OOOOOOOOB
:
D8L STEP OFF
NO RETRY,
CLC
RET
RETRY
ENOP
CLEAR CARRY NO RETRY
NO RETRY RETURN
1---------------------------------------------------------------I NUM TRANS
I
I
-
TH I S ROUT I NE CALCULATES THE NUMBER OF SECTORS THAT
WERE ACTUALLY TRANSFERRED TO/FROM THE DISKETTE.
I
I ON ENTRY,
I
I
I
I ON EXIT,
IBP+ 11
SI-HI
(BP]
AL
= TRACK
= START
= HEAD
= NUM8ER
SECTOR
ACTUALLY TRANSFERRED
I --- - -------------------------- --------- ---------------- - --- ----
0827
0821
0829
082E
0830
0832
0835
0839
0838
083F
32
80
75
82
E8
8A
88
3A
75
CO
3E 0041 R 00
23
04
0905 R
IE 0047 R
CE
2E 0046 R
08
NUM TRANS
XOR
NEAR
~~S~~~TE-STATUS.O
MDV
CALL
DL-;4
GET PARM
3~~
g~F~~~C-STATUS+4
CLEAR FOR ERROR
CHECK FOR ERROR
I F ERROR 0 TRANSFERRED
SECTORS/TRACK OFFSET TO DL
AH ,. SECTORS/TRACK
GET END I NG SECTOR
CH
HEAD' STARTED
GET HEAD ENDED UP ON
IF ON SAME HEAD. THEN NO ADJUST
MDV
CMP
CH ••NEC STATUS+3
CHI (BP+T)
SAME_TRK
GET TRACK ENDED UP ON
I SIT ASKED FOR TRACK
I F SAME TRACK NO INCREASE
ADD
BL.AH
ADD SECTORS / TRACK
ADD
SAME_TRK'
SUB
MDV
BL,AH
ADD SECTORS / TRACK
BL.(BP]
AL,8L
SUBTRACT START FROM END
TO AL
=g~
0841 8A 2E 0045 R
0845 3A 6E 01
0848 14 04
084A
084C
084C
084E
084E
0851
PROC
AL.AL
3~~
"Z
02 DC
~~:;~EC-STATUS+5
=
DIF_HOI
02 OC
2A 5E 00
8A C3
0853
0853 C3
0854
NT_OUll
RET
NUM TRANS
,--=------------------------------------------------------------ENDP
SETUP END
-RESTORES .MOTOR COUNT TO PARAMETER PROVIDED IN TABLE
I
AND LOADS OOSKETTE STATUS TO AHI AND SETS CY.
a ON EXITa
1
AH. ODSKETTE STATUS. CY REFLECT STATUS OF OPERATION
I
I
0854
0854
0856
0857
085A
085E
085F
0863
0865
0867
,
,
,-------------------=-------------------------------------------PROC
NEAR
82
50
E8
88
58
8A
OA
74
32
02
0905 R
26 0040 R
26 0041 R
E4
02
CO
0869
0869 80 FC 01
086C F5
0860 C3
OIS6E
SETUP END
MOV
PUSH
CALL
~g~
DL.2
AX
GET PARM
:~OTOR-COUNT IAH
~~V
:~::~SKETTE-STATUS
.JZ
XOR
NUN ERR
AL,AL
NUN_ERR, CMP
CMC
RET
SETUP_END
AH.I
a
GET THE MOTOR WA IT PARAMETER
1 SAVE NUM8ER TRANSFERRED
1 STORE UPON RETURN
I RESTORE NUM8ER TRANSFERRED
I GET STATUS OF OPERATION
1 CHECK FOR ERROR
1 NO ERROR
I CLEAR NUMBER RETURNED
SET THE CARRY FLAG TO INDICATE
SUCCESS OR FAILURE
ENOP
DSKETIE
5-105
D~=T~,.~!nO~/~iig~t.Di ~~~;~E Aaios bIe,.
V.,.al CJn
2. 00
1-19
04-21-86
(DSK3.ASM)
PAGE
1925
19:26
1927
"28
1929
1930
1931
"32 "
1'33 0.6E
,----------------------------------------------------------------:I SETUP oBL.
r
I
-CHECK DOUBLE STEP.
I ON ENTRY.
,
01 = DRIVE
I ON EX IT •
CY = 1 MEANS ERROR
,-----------------------------;;..---------------------------------PROC
NEAR
'934 OI6E IA A5 0090 R
SETUP DBL
MaV
~~T
1935 017? F6 C4 10
1936 0.75 75 5E
1937
,-----
193.
1939
1.40 0.77 C6 06 003E R 00
1.41 OITC ED 091A R
"42 OITF B5 00
:1945
:tf
1946
1941
194.
1.4.
1950
1951
1952
1.53
,954
1955
1956
1957
1958
1959
1960
1961
t '62
1963
1964
t 965
1966
1961
196a
1969
1910
1911
1972
1913
1914
1975
1916
1977
~::~
CALL
CALL
.JC
1----08" 8. Q450
OIlC F6 '5 00'0 R 01
0.91 14 02
Oa93 BI AD
ACCESS STATE
I
I ESTABLISHED STATE 7
,
I FEST ABL I SHED THEN DOUBLE DONE
SET RECALIBRATE REQUIRED ON ALL DRIVES
ENSURE MOTOR STAY ON
LOAD TRACK 0
SEEK TO TRACK 0
READ 10 FUNCT I ON
I F ERROR NO TRACK
.SEEK STATUSIO
MoTOR:ON
CH,D
SEEK
READ 10
SD_EFfR
°
INITIALIZE START AND MAX TRACKS (TIMES 2 FOR BOTH HEADS)
NOV
TEST
JZ
MOV
CX,0450H
I
.DSK STATE[DIJ,TRK CAPA ,
CNT liK
-;
CLIO'AOH
I
START I MAX ,TRACKS
TEST FOR 80 TRACK CAPABILITY
IF NOT COUNT IS SETUP
MAXIMUM TRACK 1.2 MB
ATTEUPT READ 10 OF ALL TRACKS, ALL HEADS UNTIL SUCCESS I UPON SUCCESS I
MUST SEE
ASKED FOR TRACK IN SINGLE STEP MODE = TRACK 10 READ; IF NOT
THEN SET DOUBLE STEP ON.
Irr
089&
089A
08'S
0.),0
08A2
08M
08A7
O.Aa
OaAS
O.AC
OaAE
0881
0'El2
OaB6
0.B7
08B8
O,SA
OaBC
08BE
C6
51
C6
33
DO
CO
50
Ea
5.
os
Ea
9C
al
90
5.
73
F'E
3A
75
06 0040 R FF
8A
88
DO
3A
74
80
RCC
OA24 R
XOR
SHR
POP
OR
F'
0'01 R
CALL
PUSHF
AND
POPF
POP
E7 OOF'S
....,
08
C5
E9
05
OE 0045 R
80 0094 R
ED
E9
05
80 0090 R 20
~~OToR_COUNT I OFFH
~~~~TTE_STATUSIO
; ENSURE MOTOR STAYS ON FOR OPERAT I ON
I SAVE TRACK I COUNT
1 CLEAR STATUS I EXPECT ERRORS
I CLEAR AX
I HALVE TRACK I CY
HEAD
I AX = HEAD IN CORRECT BIT
; SAVE HEAD
I SEEK TO TRACK
I RESTORE HEAD
I 01 = HEAD OR'Eo DRIVE
; READ 10 HEAD 0
=
CH,I
AL. , 3
AX
SEEK
AX
ol,AX
READ_I 0
~e:~ ~~~~A~R~M 8~~AD_10
ol.IIIIIOIIB
INC
CX
DO CHI<
CH-
..INZ
CH,CL
CNT_OK
CMP
0805 F8
,991 0806 C3
1992 0801
RESTORE ERROR RETURN
RESTORE COUNT
I F OK I ASKED = RETURNED TRACK 7
I NC FOR NEXT TRACK
I REACHED MAX I MUM YET
; CONTINUE TILL ALL TRIED
.--~--
FALL THRU, READ 10 FAILED FOR ALL TRACKS
SO_ERR I
~~~
OO_CHKt =g~
SHR
CMP
"Z
OR
SET CARRY FOR ERROR
SETup_DeL ERROR EX I T
CL ••NEC STATUS+3
OOSK_TRR'[DI J leL
CHI I
CHICL
NO oSL
OO'!K_STATE[ol J ,oeL_STEP
LOAD RETURNED TRACK
STORE TRACK NUMBER
HALVE TRACK
I SIT THE SAME AS ASKED FOR TRACK
I F SAME THEN NO DOUBLE STEP
TURN ON DOUBLE STEP REQUIRED
I CLEAR ERROR FLAG
NO DBLI CLC
RET
SETUP_DBL
ENoP
;--------------------------------------------------------- ------I
I READ 10
1994
19'&
- READ 10 FUNCTION.
I ON ENTRYa
01 • BIT 2
HEADI BITS 1 1 0 = DRIVE
I
01
BIT 2 IS RESET I BITS 1 1 0
DRIVE
; ON EXlTt
I
.DSKETTE STATUS, CY REFLECT STATUS OF OPERATION I
1
1996
1997
=
=
1998
199.
2000
2001 0807
2002 0807
Z003 DaDA
2004 0808
2005 08DO
Z006 oaEo
2007 08E2
2008 08E4
zoo. 08El
2010 08EA
201108EB
2012 08EB
20130aEC
2014
2015
2016
Z017
2018
2019
2020
2021
2022 oaEC
2023 08EC
08EE
2025 08F I
2026 08F3
2027 08F4
2028
2029 oaF6
2030 08F8
2031 08F'S
2032 08FD
2033 08F"
2034 0902
2035 0902
2036 0904
2031 0904
2038 0905
MOV
PUSH
CALL
08CO F.
O,CI C3
OaC2
OaC6
O,CA
08CC
O.CE
0800
MOV
PUSH
06 0041 R 00
CO
ED
DO 03
1993
2024
MCV
i: ~:~; :
AHIOOSK STATE[DI J
~~:~~~_5ET
CHECK FOR TRACK 0 TO SPEED UP ACKNOWLEDGe: ,OF UNFORMATTED DISKETTE
MOV
CALL
0117 72 37
191.
1979
1'180
1981
19.2
1983
1984
1985
l.is6
1987
1988
1989
1990
:
t
=
,-------------------_
.. _--=---------------------------------------NEAR
88 O.EB R
50
READ 10 PROC
=e:H
B4 4A
E8
8S
aA
E8
E8
58
MOV
CALL
MOV
NOV
CALL
09F8 R
C7
EO
09"8 R
075B R
~~~L
:~IOF~SET ER_3
, MOVE NEC OUTPUT ERROR ADDRESS
AHI4AH
NEC OUTPUT
AX 115' 1
AHIAL
NEC OUTPUT
I ~EAD 10 COMMAND
; TO CONTROLLER
I DRIVE' TO AHI HEAD 0
~~C:TERM
I TO CONTROLLER
, WAIT FOR OPERATION, GET STATUS
I THROW AWAY ERROR ADDRESS
EFt_3.
C3
RET
10 ENoP
.---=---.. --------------------------------------------------------
~EAo
CMOS TYPE
;
- RETURNS 0 I SKETTE TYPE FROM CMOS
I
I ON ENTRY.
01 = DRIVE.
:
I
I
; ON EXITI
I
0
=
1---------------:..------------------------------------------------
BO DE
qooo
A8 CO
F9
15 OE
E8
BO
E8
DB
75
CO
E
CMOS_TYP~OV
~~~MoS ~~:~
:
j CMOS DIAGNOSTIC STATUS BYTE ADDRESS
I GET CMOS STATUS
AL.BAD_BAT+BAD_CKSUM
:
JNZ
BAD_CM
, ERROR IF EITHER BIT ON
MOV
tALL
OR
-lNZ
AL,CMOS DISKETTE
CMOS READ
DIIDT
ROR
AL.4
AND
ALIOO"H
~~~T
I0
TYPE; CY REFLECTS STATUS
CMOS READ
CALL
0000 E
FF
03:
C8 04
AL
TO
~~~T~~Y =G~O~~~~A~7~gK:~O~A~~~ ~ETURN
ADDRESS OF 0 I SKETTE BYTE I N CMOS
GET 0 I SKETTE BYTE
SEE WHICH DRIVE IN QUESTldN
IF DRIVE II DATA IN LOW NIBBLE
EXCHANGE NIBBLES I F SECOND DR I VE
TO,
24 OF
BAo_CM.
C3
5-106
RET
CMOS_TYPE
DSKETfE
EHOP
, KEEP ONLY DRIVE DATA, RESET CY
=
0
D~~~T~:,.~~n~l/~~i:~te~1 ~:~~~E A:~~Sb Ie,.
1-20
0"'-21-86
Ve .. elon 2.00
(DSK3.ASM)
2039
2040
2041
2042
20"'3
20"'4
1-- ------------------- -------- --------------------- - - ---- --------
20"'~
20 ... &
20"'1
20 ... 8
2049
2050
2051
2052 090~
2053 0905
20~'" 090&
2055 0901
2056 0909
2051 090B
2058 0900
=
IE
5&
2B
8E
a7
2A
CO
08
03
FF
20~9
2060
2061
2062
20&3
2064
2065
2066
2061
20&8
2069
2010
2011
2012
2013
2014
2015
2076
2011
2018
2019
2080
2081
2082
2083
2084
090F
0913
0915
0911
0918
0919
1 GET PARM
I
1
THIS ROUTINE FETCHES THE INDEXED POINTER FROM THE
1
DISK BASE BLOCK POINTED TO BY THE DATA VARIABLE
1
.0IS\{ POINTER. A BYTE FROM THAT TABLE IS THEN MOVED
I
INTO AH, THE INDEX OF THAT BYTE BEING THE PARAMETER
1
IN DL.
I
I ON ENTRY.
DL
I NDEX OF BYTE TO BE FETCHED
I
I ON EXIT1
AH = THAT BYTE FROM SLOCK
1
AL I DH DESTROYED
•
t - - ------------ ------------------ -- --- - -- -- ----------- - - --------GET PARM
PROC
NEAR
PUSH
OS
PUSH
51
I os 'II' 0 I BIOS DATA AREA
SUB
AXIAX
MOV
OS,AX
XCHG
OX,BX
BL a INDEX
SUB
BHIBH
BX = INDEX
ASSUME OSIASSO
LOS
SI,_OISK POINTER
POINT TO BLOCK
GET THE WORD
MOV
AHI (SI+Bi]
XCHG
OX,BX
RESTORE BX
POP
SI
POP
as
C5 3& 00115 R
8A 20
a7 03
5E
IF
C3
091A
RET
ASSUME OSIOATA
GET PARM
ENQP
11 MOTOR ON
,
1
-TURN MOTOR ON ANO WA I T FOR MOTOR START UP T I ME. THE .MOTOR COUNT 1
IS REPLACED WITH A SUFFICIENTLY HIGH NUMBER (OFFHI TO ENsuRE
THAT THE MOTOR DOES NOT GO OFF CURING THE OPERATION. IF THE
MOTOR NEEDED TO BE TURNED ON I THE MULTITASKING HOOK FUNCTION
(AXs90FOH. INT 15H) IS CALLED TELLING THE OPERATING SYSTEM
THAT THE BIOS IS ABOUT TO WAIT FOR MOTOR START UP. IF THIS
FUNCTION RETURNS WITH CY .. I. IT MEANS THAT THE MINIMUM WAIT
HAS BEEN COMPLETED. AT THIS POINT A CHECK IS MADE TO ENSURE
THAT THE MOTOR IIASN'T TURNED OFF BY THE TIMER. IF THE HOOK DID
NOT WAIT I THE WAIT FUNCTION (AH .. 086HI IS CALLED TO WAIT THE
PRESCRIBED AMOUNT OF TIME. IF THE CARRY FLAG IS SET ON RETURN,
I T MEANS THAT THE FUNCT I ON I SIN USE AND Q I 0 NOT PERFORM THE
WAIT. A TIMER 1 WAIT LOOP WILL THEN DO THE WAIT.
-= ---------------------------------------------------------------------
ON ENTRY,
01
208~
2015&
2081
2088
2089
2090
2091
2092
2093
209...
2095
2096
2091
20915
2099
2100
2101
2102
2103
2104
2105
2106
2101
2108
2109
2\10
2111
211Z
2113
2114
2115
2116
2111
2118
2119
2120
2121
2122
2123
212...
2125
2126
2121
2128
2129
2130
213\
2132
2133
213...
2135
2136
2131
2138
2139
2140
21"'1
2\42
21 ... 3
2144
2145
21 ... 6
2141
21"'8
21 ...9
2150
2151
2152
= DRIVE
I
ON EXITa
AX,CXIOX DESTROYED
;----------------------------------------------------- -----------------MOTOR ON
PROC
NEAR
1
091A
091A
091 B
091E
0920
0923
0926
0928
0929
092C
0920
0921'"
0932
0934
093...
0936
0939
093B
0930
093F
09... 1
53
E8
12
E8
B8
CO
9C
E8
90
13
0965 R
43
0435 R
901"'0
15
0... 01'" R
05
CALL
12 21'"
"C
B2
EB
8A
32
3t
13
SO
Mav
OA
0905 R
C4
E4
08
02
08
50
BA 1"''''2'''
F1 E2
SB CA
aB DO
Fa
01 02
D1 01
B'" 86
CD 15
58
13 OA
CALL
MaV
XaR
CMP
"AE
MaV
GP21
OL.10
GET PARM
ALlAH
AH.AH
AL.8
GP2
AL.8
SAVE REG.
TURN ON MOTOR
IF CYal NO WAIT
TRANSLATE STATE TO COMPATIBLE MODE
LOAD IA I T CODE I TYPE
TELL O~ERATING SYSTEM ABOUT TO 00 WAIT
SAVE CY FOR TEST
TRANSLATE STATE TO PRESENT ARCH.
RESTORE CV FOR TEST
1 BYPASS LOOP IF OP SYSTEM HANDLED IA I T
I CHECK AGAIN IF NOTOR ON
J IF NO WAIT MEANS IT IS ON
1
;
1
1
I
;
I
I
1
I GET THE MOTOR WA IT p:tARAMETER
= MOTOR WA I T PARAMETER
, AX :r: MOTOR WAIT PARAMETER
I SEE IF AT LEAST A SECOND IS SPECIFIED
I IF YES I CONTINUE
lONE SECOND WAIT FOR MOTOR START UP
1 AL
AX CONTAINS NUMBER OF 1/8 SECONDS (125000 MICROSECONDS) TO IIAIT
PUSH
MaV
MUL
MaV
MaV
CLC
RCL
RCL
MaV
INT
;----0959
0959
095t
095F
0961
BX
TURN ON
MOT Ts ON
XLAT 0(0
AX,Ol"OFOH
15H
"NC
ES 0965 R
t----09 ... 3
09 ......
09 ... ,
09 ... 9
09 ...B
09"'0
09...E
0950
0952
095...
0956
0951
PUSH
CALL
..JC
CALL
MOV
INT
PUSHF
CALL
POF'F
AX
DX I &2500
OX
CX,DX
OX.AX
DX , 1
CX,I
AH.8&H
15H
POP
AX
"NC
MOT_IS_ON
1 SAVE WA I T PARAMETER
I LOAD LARGEST POSSIBLE MULTIPLIER
1 MULTIPLY BY HALF OF WHAT'S NECESSARY
I CX = HIGH WORD
1 eX.DX = 1/2 • II OF MICROSECONDS)
I CLEAR CARRY FOR ROT ATE
I DOUBLE LOll WORD. CY CaNT A I NS OVERFLOW
1 COUBLE HI. I NCLUO I NG LOW WORD OVERFLOW
; LOAD WA I T CODE
I PERFORM WAIT
1 RESTORE IIA I T PARAMETER
I CY MEANS WA I T COULD NOT BE DONE
FOLLOWING LOOPS REQUIRED WHEN RTC WAIT FUNCTION IS ALREADY IN USE
J131
89
E8
FE
15
205E
0000 E
C8
F6
Mav
CALL
aEC
"NZ
WAIT FOR \/8 SECOND PER tALl
COUNT FOR 1/8 SECOND AT 15.085131 US
GO TO FIXED WAIT ROUTINE
DECREMENT TIME VALUE
ARE WE DONE YET
CX , 8286
WAITF
AL
"13
0963
0963 !SB
096... C3
0965
MOT IS ON1
- POP
RET
MOTOR_ON
0965
0965
0961
0969
096C
- TURN MOTOR ON AND RETURN WAIT STATE.
I
;
I
I
1 ON ENTRY I
01 a DRIVE I
I
I
I ON EXITI
CY
0 MEANS WAIT REQUIRED
1
CY = 1 MEANS NO IIAIT REQUIRED
I
AX I BX I CX I OX DESTROYED
1
I ---------------------- ---- -------------------- --------------- --TURN ON PROC
NEAR
MOV
BX,DI
BX = DRIVE'
MaV
CLIBL
CL
DRIVE I
ROL
BL I ...
BL
OR I VE SELECT
CLI
NO INTERRUPTS WHILE DETERMINING STATUS
ex
I
RESTORE REG.
ENDP
1---------------------------------------------------------------I TURN ON
I
=
8B OF'
8A CB
to C3 0 ...
FA
=
=
DSKETIE
5-107
IBM Peraonal Computer MACRO Aaa.",b I.r
DSKETTE -- 04/21/86
2153
2154
2155
2156
2151
2158
2159
2160
2161
2162
2163
2164
2165
2166
2161
2168
2t69
2110
2111
2112
2173
2174
2115
2116
2111
2118
2119
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2191
2198
2199
2200
2201
2202
2203
2204
2205
2206
Z207
2208
2209
2210
22t I
2212
2213
2214
2215
2216
2211
2218
2219
2220
2221
2222
2223
2224
2225
2226
2221
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2241
2248
2249
2250
2251
2252
2253
2254
2255
2256
22n
2258
2259
2260
226'
2262
2263
2264
2265
2266
0960
0912
0915
0911
0919
C6
AO
24
84
02
Vera' on 2. 00
1-21
04-21-86
DISKETTE 810S
(DSK3.ASM)
06 0040 R FF
003F R
30
01
E4
MOV
OMOTOR COUNT. OF"FH
AL,OMOToR STATUS
I ENSURE MOTOR STAYS ON FOR OPERATION
I GET DIGITAL OUTPUT REGISTER REFLECTION
ANO
MOV
SHL
AH.I
AH.CL
; KEEP ONLY OR I VE SELECT BITS
I MASK FOR DETERMINING MOTOR BIT
I AH = MOTOR ON, A=OOOOOOOI. B=OOOOOOIO
MOV
AL,OOIIOO~OB
AL -= DRIVE SELECT FROM OMOTOR STATUS
BL = DRIVE SELECT DESIRED
AH • MOTOR ON MASK DES I RED
0918
0910
091F
0983
3A C3
15 06
84 26 003F R
15 2C
0985
0985 OA
0981 8A
098880
098E 80
0993 08
0991 AO
099A 8A
099C 80
099F F8
09AO 24
09A2 CO
09A5 OC
09Al 8A
09AA EE
09A8 3A
09AO 74
09AF F8
0980 C3
eMP
.lNZ
TEST
.lNZ
-
-OR
MOV
ANO
ANO
3F
CO 04
OC
03F2
AL,OOIIIIIIB
AL.4
AL.OOOOIIOOB
DX,03F"2H
DX,AL
BLIBH
NO_MDT_WAIT
ROL
OR
MOV
OUT
eMP
OF
02
JZ
eLe
RET
NO MOT WAITI
- STC
STI
RET
TURN ON ENDP
SET NO WAIT REQUIRED
I NTERRUPTS BACK ON
,----=---------------- -- -- -------- ------------ ----- ----------- -- -HD_WAI~AIT
FOR HEAD SETTLE TIME.
09
0905 R
06 003F R 80
14
E4
14
OF
86 0090 R
:~:~g~~-~~!~~~Dll
~~
~~:::~E:250
-
ISNT WRITEa
OR
JZ
;-~--~
89
E8
FE
75
0042
0000 E
C8
F6
AL.RATE-MSK
-
,
---- - ----------- - - ----~ET
~SE
f
;
HEAD SETTLE PARAMETER
SEE IF A WRITE OPERATION
I F NOT, 00 NOT ENFORCE ANY VALUES
CHECK FuR ANY"" i -, '(
I F THERE 00 NOT ENFORCE
LOAD 1.2M HEAD SETTLE MINIMUM
LOAD STATE
KEEP ONLY RATE
1.2 M DRIVE?
DEFAULT HEAD SETTLE LOAOED
320/360 HEAD SETTLE
CHECK FOR NO WAIT
IF NOT WRITE AND 0 ITS OK
AH CONTAINS NUMBER OF MILLISECONDS TO WAIT
MOV
XOR
PUSH
03E8
E2
CA
DO
B4 86
CD 15
58
13 OA
MOV
MUL
MOV
MOV
MOV
INT
POP
JNe
AL,AH
AH,AH
AX
OX,IOOO
OX
CX,OX
OX,AX
AH,86H
15H
AX
HW_DONE
AL = , MILLISECONDS
AX = , MILLISECONDS
SAVE HEAD SETTLE PARAMETER
SET UP FOR MULTI PLY TO MICROSECONDS
OX, AX • , MICROSECONDS
CX I AX = , MICROSECONDS
CX I OX = II MICROSECONDS
LOAD WAIT CODE
PERFORM WAIT
RESTORE HEAD SETTLE PARAMETER
CHECK FOR EVENT WAIT ACTIVE
CX,66
WAITF
AL
I MILLISECOND LOOP
COUNT AT 15.085737 US PER COUNT
DELAY FOR I MILLISECOND
DECREMENT THE COUNT
00 AL MILL I SECOND II OF TI MES
.J291
C3
-
MOV
GP3.
0904
0904 OA E4
0906 74 IF
C4
E4
:
a DRIVE'
=g~
AND
CO
80
08
8A
32
50
BA
FJ
88
88
01
I
I ON EXITa
AX.BX.CX.DX DESTROYED
1-- - ----------------- - ----------- -- - - ---HD WAIT
PROC
NEAR
MOV
DL.9
CALL
GET PARM
TEST
OMOToR STATUS. I OOOOOOOB
JZ
ISNT ,FflTE
OR
A~.AR
JNZ
DO WAT
0900 B4 14
0902 EB 04
09ED
09ED
09FO
09F3
09F5
09FJ
09F1
09F8
AH = DR I VE SELECT AND MOTOR ON
SAVE COPY OF OMOTOR STATUS BEFORE
, KEEP ONLY MOTOR BITS
I CLEAR OUT DR I VE SELECT
I OR I N DR I VE SELECTED AND MOTOR ON
I GET DIGITAL OUTPUT REGISTER REFLECTION
1 BL=OMOTOR STATUS AFTER, BH=BEFORE
, KEEP ONLY-MOTOR BITS
I ENABLE INTERRUPTS AGA I N
; STRIP AWAY UNWANTED BITS
I PUT BITS IN DESIRED POSITIONS
I NO RESET, ENABLE DMA /1 NTERRUPT
I SELECT DR I VE AND TURN ON MOTOR
I'
f NEW MOTOR TURNED ON ?
I NO WAIT REQUIRED IF .JUST SELECT
I SET CARRY MEANING WAIT
ALI.MOToR_STATUS
BL.AL
BL,OOOOIIIIB
I ON ENTRYI
0908
090A
09DC
0900
09EO
09E2
09E4
09E6
09E8
09EA
09E8
AH,BL
BH,.MOTOR STATUS
BH,OOOOIITIB
:=g~g~_~~:~~~:!~OOIIIIB
OR
MOV
MOV
ANa
STI
ANO
:
I
82
E8
F6
74
OA
15
B4
8A
24
3C
76
I REQUESTED DR I VE ALREADY SELECTED ?
I I F NOT SELECTED JUMP
I TEST MOTOR ON BIT
I JUMP I F MOTOR ON AND SELECTED
TURN IT ON:
E3
3E 003F R
El OF
26 003F R CF
26 003F R
003F R
08
E3 OF
0981
0981 F9
0982 F8
0983 C3
0984
0984
0984
0986
0989
098E
09CO
09CZ
09C4
09C6
09CA
09CC
09CE
AL.BL
TURN IT ON
AH ••QOTOR STATUS
NO_MDT_WATT
MOV
CALL
CEe
JNZ
HW_DONE aRET
J2.
,-=---------------- ---------------------------------------------
HD WAIT
ENOP
~
:
TH I S ROUT I NE SENDS A BYTE TO THE NEC CONTROLLER AFTER
:
TEST I NG FOR CORRECT 0 I RECT I ON AND CONTROLLER READY TH IS;
ROUTINE WILL TIME OUT IF THE BYTE IS NOT ACCEPTED WITHIN;
A REASONABLE AMOUNT OF TIME. SETTING THE DISKETTE STATUS;
ON COMPLETION.
;
I NEC OUTPUT
;
I
J
I
J
-
I
J ON ENTRY,
I
AH • 8YTE TO BE OUTPUT
J ON EXITI
f
I
I
J
f
I
I
09F8
09F8
09F9
09FC
09FE
5-108
CY = a
CY = I
SUCCESS
FAILURE -- DISKETTE STATUS UPDATED
IF A FAILURE HAS OCCURRED, THE RETURN I S MADE
ONE LEVEL HIGHER THAN THE CALLER OF NEC OUTPUT.
THIS REMOVES THE REQUIREMENT OF TESTING-AFTER
EVERY CALL OF NEC_OUTPUT.
AX,CX,DX DESTROYED
J
;------------------ ------ ----------------------------------------
53
SA 03F4
83 02
33 C9
NEC_OUTP~~SH
DSKETTE
NOV
MOV
XOR
::OC
NEAR
DX,03F4H
BL, 2
CX,CX
SAVE REG.
STATUS PORT
HIGH ORDER COUNTER
COUNT FOR TIME OUT
D~~~T~r~~n~~/~fiG~te~1 ~:~~~E A:~~;b I.r
V.raJ on 2.00
1-22
04-21-86
IOSK3.ASM)
2267
2268
2269
2270
227 I
2272
2213
2214
2275
2276
22TT
2278
2219
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2311
2318
2319
2320
2321
2322
2323
2324
2325
2326
2321
2328
2329
DADO
DAD I
OA03
OA05
OA07
EC
24
3C
14
E2
J23s
LOOP
J2T
J23
, GET STATUS
I KEEP STATUS AND DIRECTION
1 STATUS I AND DIRECTION 0 1
I STATUS AND DIRECTION OK
I CONT I NUE TILL CX EXHAUSTED
DEC
BL
I DECREMENT COUNTER
JNZ
J23
IN
ANO
CO
80
OF'
FT
CMP
JZ
OA09 FE C8
OA08 75 F3
1----DADO
OA12
OAI3
OAI4
DAIS
80 DE 0041 R 80
58
58
F9
C3
OAIA
OAI8
OAIE
OA21
OA22
OA23
OA24
9C
B9 0003
E8 0000 E
90
58
C3
I REPEAT TILL DELAY FINISHED. ex • 0
FALL THRU TO ERROR RETURN
OR
POP
POP
STC
RET
1----OAI6
OAI6 8A C4
OA18 42
OAI9 EE
AL.DX
AL.ll000000B
AL. 10000000B
.aSKETTE STATUS. TIME OUT
BX
1 RESTORE REG.
AX
1 0 I SCARD THE RETURN ADDRESS
1 I NO I CATE ERROR TO CALLER
DIRECTION AND STATUS OKI OUTPUT BYTE
J2TI
MOV
INC
DX
OUT
OX.AL
PUSHF
MOV
CALL
POPF
CX.3
WAITF
POP
RET
NEe OUTPUT
AL,AH
BX
GET BYTE TO OUTPUT
DATA PORT. STATUS PORT + I
OUTPUT THE BYTE
SAVE FLAGS
30 TO 45 MICROSECONO WAIT FOR
NEC FLAGS UPDATE CYCLE
RESTORE FLAGS FOR EX I T
RESTORE REG.
CY 0: 0 FROM TEST INSTRUCTION
ENDP
1--=---------------- --- ---------- ------ --- ------ --- ----------- --I
SEEK
I
I
I
I
THIS ROUTINE WILL MOVE THE HEAD ON THE NAMED DRIVE
TO THE NAMED TRACK.
IF THE DRIVE HAS NOT BEEN ACCESSED
SINCE THE DRIVE RESET COMMAND WAS ISSUED. THE DRIVE
WILL BE RECALIBRATED.
I
I ON ENTRY I
I
I
1 ON EXIT,
I
OA24
OA24
OA26
OA28
OA2A
OA2C
DA2E
OA32
01 = DRIVE'
CH=TRACKI
I
,
0
.DSKETTE_STATUS, CY REFLECT STATUS OF OPERATION.,
AX.BX.CX.DX DESTROYED
I
1---------------------------------------------------------------PROC
NEAR
SEEK
8B
80
86
02
86
84
15
ax.ol
DF
01
CB
CO
CB
06 003E R
lC
MOV
MOV
XCHG
ROL.
XCHG
~~~T
~~8:SEEK-STATUS
DA34 08 06 003E R
OA38 E8 OA83 R
OA3B 13 OA
OR
CALL
JNC
.SEEK STATUS.AL
RECALAFT_RECAL
1----OA3D C6 06 0041 R 00
OA42 E8 OA83 R
OU5 12 38
AL. I
CL,BL
AL.CL
CL.BL
BX • DRIVE I
ESTABLISH MASK FOR RECALIBRATE TEST
GET DRIVE VALUE INTO CL
SHIFT MASK BY THE DRIVE VALUE
RECOVER TRACK VALUE
TEST FOR RECALIBRATE REQUIRED
JUMP IF RECAl.IBRATE NOT REQUIRED
TURN ON THE NO RECALIBRATE BIT IN FLAG
RECALIBRATE DRIVE
RECALISRATE DONE
ISSUE RECALIBRATE FOR 80 TRACK DISKETTES
MOV
CALL
JC
=~~~ETTE_STATUS.O
RB
CLEAR OUT INVALID STATUS
RECALIBRATE DRIVE
IF RECALIBRATE FAILS TWICE THEN ERROR
2330
2331
2332
2333
2334
2335
2336
2331
2338
2339
2340
2341
2342
2343
2344
2345
2346
2341
2348
2349
2350
2351
2352
2353
2354
2355
2356
2351
2358
2359
2360
2361
2362
2363
2364
2365
2366
2361
2368
2369
2310
2311
2312
2313
2374
2315
2316
2311
2318
2319
2380
OA47
OA41 C6 85 0094 R 00
OUC OA ED
OA4E 14 20
AFT RECALl
MOV
OR
JZ
1-----
DRIVE IS IN SYNCHRONIZATION WITH CONTROLLER. SEEK TO TRACK
OA50 F6 85 0090 R 20
OA55 14 02
OA51 00 E5
J28AI
TEST
JZ
SHL
OA59 3A AD 0094 R
OA5D 14 23
RTo
OA5F
OA62
OA63
OA6l
OA69
OA6C
OA6E
OA10
OA13
OAll
OA1A
SA
52
88
B4
E8
8B
8A
E8
8A
E8
E8
MOV
PUSH
MOV
MOV
CALL
MOV
MOV
CALL
MOV
CALL
CALL
AD 0094 R
OF
09F8 R
OF
E3
09F'8 R
AS 0094 R
09F8 R
OA9A R
1-----
OAlO
OA1D
DAlE
OA81
OA82
OA82
OA82
OA83
9C
E8 09B4 R
90
COP
JE
OA82 R
SAVE NEW CYLINDER AS PRESENT POSITION
CHECK FOR SEEK TO TRACK 0
HEAD SETTLE. CY = 0 I F JUMP
~~SK_STATE[DI] ,DBL_STEP
CH,I
CHECK FOR DOUBLE STEP REQU I REO
SINGLE STEP REQUIRED BYPASS DOUBLE
DOUBLE NUMBER OF STEP TO TAKE
~~,.DSK_TRK[DI )
SEE IF ALREADY AT THE DESIRED TRACK
I F YES, 00 NOT NEED TO SEEK
g~,OFFSET NEC_ERR
LOAD RETURN ADORESS
ON STACK FOR NEC OUTPUT ERROR
SAVE NEW CYLINDER' AS PRESENT POSITION
SEEK COMMAND TO NEe
.DSK TRK[DI] ,CH
AH,OrH
NEC OUTPUT
BX,151
AH.BL
NEC OUTPUT
AH ••DSK TRK(Dl]
NEC OUTPUT
CHK:STAT_2
I BX = DRIVE I
I OUTPUT DR I VE NUMBER
I GET CYL I NDER NUMBER
I ENDING INTERRUPT AND SENSE STATUS
WAIT FOR HEAD SETTLE
OO_WAITlpUSHF
CALL
POPF
HD_WAIT
SAVE STATUS
WA I T FOR HEAD SETTLE T I ME
RESTORE STATUS
RBo
C3
NEC_ERRI RET
I RETURN TO CALLER
SEEK
ENDP
1 ----------------------- -------- ------------- -------- -----------1 RECAL
RECALIBRATE DRIVE
I
I
01 .. DRIVE I
1 ON ENTRY
I
OA83
OA83
OA84
OA81
OA88
OA8A
51
88 OA98 R
50
84 07
E8 09F8 R
I ON EXIT,
CY REFLECTS STATUS OF OPERATION.
,
I ------------------------------ --------------- ----- ------- ------RECAL
PROC
NEAR
CX
PUSH
1 LOAD NEC_OUTPUT ERROR
~~~H
~~.OFFSET RC_BACK
MOV
CALL
AH.01H
NEC_OUTPUT
1 RECALIBRATE COMMAND
DSKETIE
5-109
D~:T;E,.~~n~~/~~;~~h~1 ~~~;~E "':j~;b ler
Vera) on
2.00
1-23
04-21-86
(DSK3 .... Shl)
2381
23a2
2383
2384
238!S
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
z...
:;~
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
24 T9
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
249,
2492
2493
2494
OASD
0 ... 8F
0 ... 91
0 ... 94
0"'97
0 ... 98
0 ... 98
0 ... 99
0"'9'"
MOV
MOV
CALL
CAl.L
POP
a8 OF
E3
Ea 09F8 R
E8 0 ... 9 ... R
!Sa
a...
RC B...CK,
POP
RET
RECAl.
ENDP
59
C3
BX,DI
AH,BL
NEC OUTPUT
CHK-STAT 2
AX -
1 BX
=
DRIVE II
OUTPUT THE DR I VE NUMBER
GET THE INTERRUPT AND SENSE INT ST",TUS
THROW ... WAY ERROR
CX
1---------------------------------------------------------------I CHK STAT 2
1
I
,
-
I
I
THTs ROUTINE H...NDLES THE INTERRUPT RECEIVED AFTER
RECAl I BRATE OR SEEK TO THE "'DAPTER. THE
INTERRUPT IS .AITED FOR, THE INTERRUPT STATUS SENSED,
AND THE RESULT RETURNED TO THE C"'l.l.ER.
I
0 ... 9 ...
0 ... 9A
0 ... 90
0 ... 9E
OAAI
OAA3
OA"'5
OAA8
O......B
OAAO
OABO
0 ...B2
0...84
01.86
OAB7
0...B7
0 ...S8
OAB8
, ON EXIT!
ODSKETTE STATUS, CY REFLECT STATUS OF OPERATION.:
,-----------------------=---------------------------------------PROC
NE ...R
8e OA8e R
50
E8 OAC 1 R
12 14
84 08
Ea 09F8 R
Ee OAE9 R
12 01.
1.0 0042 R
24 60
3C 60
14 03
F8
CHK STAT 2
~e~H
CALL
,JC
MOV
C...l.L
CALL
.JC
MOV
AND
CMP
,JZ
CLC
~~.OFFSET CS_BACK
W",IT I NT
,J34 AH,08H
NEC OUTPUT
RESOL TS
,J34
AL, .NEC ST... TUS
AL,01100000B
...L,011000008
,J35
; LOAD NEC_OUTPUT ERROR ADDRESS
WA I T FOR THE INTERRUPT
I F ERROR, RETURN IT
SENSE INTERRUPT STATUS COMMAND
; READ I N THE RESULTS
GET THE FIRST STATUS BYTE
ISOL",TE THE BITS
TEST FOR CORRECT VALUE
IF ERROR, GO hlARK IT
GOOD RETURN
.J341
58
POP
CS BACK,
RET
C3
OAB9
OAB9 80 OE 0041 R 40
0 ...8E F9
O"'BF Ea F6
OACI
AX
1 THROW AWAY ERROR RETURN
,J351
OR
STC
,JhlP
CHK STAT 2
.OSKETTE STATUS, BAD SEEK
I ERROR RETURN CODE
SHORT ,J34
ENDP
,--=----=-------------------------------------------------------I WAIT INT
1
- THIS ROUTINE .... ITS FOR AN INTERRUPT TO OCCUR A TIME OUT I
I
ROUTINE T ...KES PLACE DURING THE 'AIT, SO TH...T ...N ERROR
I
hI ... Y 8E RETURNED IF THE DRIVE IS NOT RE...OY.
I
•
oeSKETTE STATUS, CY REFLECT STATUS OF OPER... TION.I
; ON EXIT!
1
OACI
O... CI
O"'CZ
OAC3
OAC6
OAC8
O"'C'"
OAce
OACE
DACE
01.03
01.05
0"'07
01.09
DADS
OAEO
O...EI
O"'EI
0 ...E2
0 ...E7
0"'E8
OAE9
; -----------------------=---------------------------------------PROC
NEAR
FB
F8
Ba
CD
72
B3
900 I
i5
I I
01.
F6
15
E2
FE
15
F7
CB
F3
33 ell
06 003E R 80
DC
80 DE 0041 R 80
F9
.AIT INT
STI
CLC
MOV
INT
JC
MOV
XOR
,J361
TEST
JNZ
LOOP
DEC
JNZ
,J36AI
TURN ON INTERRUPTS, ,JUST IN CASE
CLEAR TIMEOUT I NO I CATOR
LOAD WA I T CODE AND TYPE
PERFORM OTHER FUNCT I ON
BYPASS TIMING LOOP IF TIMEOUT DONE
CLEAR THE COUNTERS
FOR 2 SECOND WA IT
AX,09001H
••H
,J36A
8L,10
CX,CX
~~iEK_STATUS,INT-FLAG
,J36
BL
J36
I
TEST FOR INTERRUPT OCCURRING
COUNT DOWN WHILE WAITING
SECOND LEVEL COUNTER
OR
STC
ODSKETTE ST"'TUS, TIME OUT
; NOTHING HAPPENED
I ERROR RETURN
-
PUSHF
ANO
POPF
RET
I SAVE CURRENT CARRY
.SEEK_ST...TUS,NOT INT_FLA~ RECOVER;C~~~~ OFF INTERRUPT FLAG
.J371
9C
80 26 003E R 7F
90
C3
I GOOD RETURN CODE
,---=------------------------------------------------------------
W... IT INT
ENDP
1 RESULTS
I
TH I S ROUT I NE .1l.L READ ANYTH I NG THAT THE NEC CONTROLLER 1
I
,
RETURNS FOLLOW I NG AN INTERRUPT.
:
I
•
I ON EXITr
OAE9
OAE9
OAE ...
OAED
OAEF
57
SF 0042 R
83 07
81. 03F4
;----OAF2
OAF4
OAF6
OAF6
OAF7
OAF9
OAFB
OAFD
.OSKETTE_ST... TUS, CY REFLECT STATUS OF OPERATION. I
AX. BX, CX, OX DESTROYED
I
;
1---------------------------------------------------------------RESULTS PROC
NEAR
S7 02
33 C9
PUSH
:g~
01
g~:~FFSET ONEC_ST...TUS
MOV
OX, 03F04H
W... IT FOR REQUEST FOR MASTER
MOV
XOR
BH,2
CX,CX
IN
ANO
CMP
JZ
LOOP
AL,DX
AL,IIOOOOOOB
AL, 1 1000000B
J4_
J3.
OAFF FE CF
OBO I 75 F3
OEC
JNZ
BH
OB03 80 DE 0041 R 80
OB08 F9
OB09 EB I B
OR
STC
JMP
.DSKETTE_STATUS, TIME_OUT
RIOI
,J391
EC
24
3C
74
E2
CO
CO
OE
F7
;----OBoa
OBOB
OBOC
OBOO
oaOF
42
EC
88 05
47
5-110
,J421
I
DSKETIE
POINTER TO DATA AREA
M... X ST...TUS BYTES
STATUS PORT
J3'
SHORT POPRES
HIGH ORDER COUNTER
COUNTER
WAIT FOR MASTER
GET STATUS
KEEP ONLY STATUS AND DIRECTION
ST...TUS I AND DIRECTION I ?
ST"'TUS AND DIRECTION OK
LOOP TILL TIMEOUT
DECREMENT HIGH ORDER COUNTER
REPEAT TILL DELAY DONE
I SET ERROR RETURN
I POP REG I STERS AND RETURN
RE...D IN THE STATUS
JMP
INC
IN
MOV
INC
,.-
OX
AL.OX
(OII.AL
01
1/0 DEL... Y
POINT AT DATA PORT
GET THE DATA
STORE THE BYTE
I NCREMENT THE PO INTER
D~~=T~:r~~nO!/~~7C~h~I;:~;~E AB~~;b\.r
1-24
04-21-86
Ver.'on 2.00
(DSK3.ASM)
2495
2496
2491
2498
2499
2500
2501
2502
2503
2504
2505
2506
2501
2508
2509
2510
2511
2512
2513
2514
2515
2516
2511
251a
2519
2520
2521
2522
2523
2524
2525
2526
2521
2528
2529
2530
2531
2532
2533
2534
2535
2536
2531
2538
2639
2540
2541
2542
2543
2544
2545
2546
2541
2548
2549
2550
2551
2552
2553
2554
2555
2556
2551
2558
2559
2560
2561
2562
2563
2564
2565
2566
2561
2568
2569
2510
2511
21512
2513
2514
2515
2516
2511
2518
2519
2580
2581
2582
2583
2584
2585
2586
2581
2588
2589
2590
2591
2592
2593
2594
2595
2596
2591
259a
2599
2600
2601
OBIO
OBI3
DB16
OBll
OBI8
OBIA
B9
Ea
4A
EC
Aa
14
OBIC
081E
OB20
OB25
FE CB
15 02
80 DE 0041 R 20
F9
MOV
CALL
OEC
0003
0000 E
IN
10
OA
TEST
"Z
OEC
"NZ
OR
POP
RET
RESULTS ENDP
DECREMENT THE STATUS COUNTER
GO BACK FOR MORE
TOO MANY STATUS BYTES
SET ERROR FLAG
RIO
.OSKETTE_ST ATUS .BAO_NEC
01
I
RETURN WI TH CARRY SET
,---------------------------------------------------------------I READ_DSKCHNG
,
,
READS THE STATE OF· THE DISK CHANGE LINE.
I
I ON ENTRY,
I
I ON EXI1I
I
I
1
01
II
DRIYE ,
01
II: DRIVE.
ZF • D. , DISK CHANGE LINE INACTIVE
ZF • I J DISK CHANGE LINE ACTIVE
AX I CX. OX DESTROYED
,
1---------------------------------------------------------------PROC
NEAR
E8 091 A R
BA 03F'1
EC
A8 80
C3
READ OSKCHNG
CALL
MOY
IN
~~~T
READ OSKCHNG
MOTOR ON
OX, 03i!'lH
ALIDX
ALIDSK_CHG
TURN ON THE MOTOR I F OFF
ADDRESS DIGITAL' INPUT REGISTER
INPUT DIGITAL INPUT REGISTER
CHECK FOR 0 I SK CHANGE LINE ACT I YE
I RETURN TO CALLER WI TH ZERO FLAG SET
1
I
I
1
ENDP
,---=--------------:----------------------------------------------I
1 DRIYE OET
-DETERM I NES WHETHER DR I YE I S 80 OR 40 TRACKS AND
UPDATES STATE INFORMATION ACCORDINGLY.
I
~B4B
Be
MIN I MUM 24 M I CROSECONOS FOR NEC
WA I T 3D TO 45 MICROSECONDS
POINT AT. STATUS PORT
GET STATUS
TEST FOR NEC STILL 8USY
RESULTS DONE ?
RESULT OPERATION IS DONE
I
OB4E
OB4F
OB51
OB54
OB56
OB58
OB5B
OEi5E
OB!5F
0860
0865
OB61
OB69
I
I
I
I
,
I
POPRES,
OB26
OB26 5F'
OB21 C3
OB2a
OB32
OB32
OB35
OB38
OB3A
OB3C
OB3F
OB41
OB43
OB43
DB45
OB46
OB49
AL,DX
AL I 000' OOOOB
POPRES
STC
,-----
OB2a
OB28
OB28
OB2E
082F
OB31
OB32
CX.3
WAITF
OX
,
I
1 ON ENTRYI
01
OR I YE DET
CALL
CALL
...IC
MOTOR ON
RECAL00 BAC
II
,
I
I
I
DRIYE •
1---------------------------------------------------------------PROC
NEAR
Ea
E8
12
BS
E8
li!
B5
091 A R
OAa3 R
3C
30
OA24 R
35
DB
~~~L
SK_GINI
FE
51
E8
12
BS
50
84
E8
8B
8A
E8
£8
58
59
F6
14
OA
14
CD
OA24 R
2C
OB11 R
~gy
g~;"gO~ET_SEEK+1
DEC
CH
CX
"C
06 0042 RIO
DC
ED
06
;~i~RK_SLAP
PUSH
CALL
MOV
PUSH
MOV
CALL
MOV
MOV
CALL
CALL
POP
POP
TEST
04
09F8 R
Cl
EO
09F8 R
OAE9 R
"Z
OR
"Z
TURN ON MOTOR I F NOT ALREADY ON
RECALIBRATE DRIVE
ASSUME NO DR I YE. PRESENT
~EEK TO TRACK 48
ERROR NO OR t YE
SEEK TO TRACK I 0
,
SEEK
POP BAC
DECREMENT TO NEXT TRACK
~AYE TRACK
POP AND RETURN
l;0AD NEC OUTPUT ERROR ADDRESS
~~,~FF~ET POP _BAC
SENSE DRIYE STATUS COMMAND BYTE
OUTPUT TO NEC
AL II DRIVE
AH .. DRIYE
OUTPUT TO NEC
GO GET STATUS
THROW AWAY ERROR ADDRESS
RESTORE TRACK
TRACK 0 ?
GO TILL TRACK 0
I S HOME AT TRACK 6 ?
MUST BE 80 TRACK DRIYE
AH.SENSE DRY ST
NEC OUTPUT AxllSl
AH.AL
NEC OUTPUT
RESULTS
AX
CX
.NEC STATUS.HOME
SK GTN
CH;"CH
IS_80
DRIYE IS A 3601 SET DRIYE TO D!=!:TERMINEDI
SET MEDIA TO DETERMINED AT RATE 250.
OR
OB68 80 80 0090 R 94
OB10 C3
RET
OBll
0811 80 80 0090 R 01
OB16 .
OB16 C3
.DSK STATE(DI] lORY DET+MED DET+RATE 2150
I ALL INFORiiATION SET
.DSK_STATEIDI), TRK_CAPA I
OB11
0811 59
OBla C3
POP BAC,
POP
RET
CX
0819
DR I YE DET
ENDP
I THROW AWAY
,----=----------------------------------------------------------, DISK INT
,
I
OB19
OB19
OBlA
OB1B
081E
OB83
0884
OB86
OB8a
OBIS9
OBae
OB8E
OB8F
OB90
SETUP aD TRACK CAPABILITY
- TH I S ROUT I NE HANDLES THE 0 I SKETTE
t NTERRUPT •
: ON EX tTl
THE I NTERRUPT FLAG I S SET IN .SEEk STATUS.
DISK tNT 1
fSUSH
PUSH
PROC
AX
OS
1
1
,-------------------------------------- -----------=---------- ----
50
IE
E8
80
IF
BO
E6
FB
B8
CD
5a
CF
0000 E
DE 003E R 80
20
20
9101
15
g~LL
POP
MeY
OUT
~~~
INT
POP
I RET
DISK_INT_'
FAR
~~~EK
i
ENTRY POINT FOR DRG OEF!51H
I SAYE WORK REGI STER
I SAYE REGISTERS
~~~~ o~AT~T~:~~~sb~gURRED
STATUS,INT FLAG
OS
AL.,EOI
INTAOOIAL
:
; RESTORE USER (OS)
I END OF INTERRUPT MARKER
I INTERRUPT CONTROL PORT
AX I 09101H
ISH
AX
:
AND TYPE
1 GO PERFORM OTHER TASK
I RECOVER REG I STER
I RETURN FROM INTERRUPT
~~~~~~~~~ ~~~~R~:~S
ENDP
DSKEITE
5-111
1-25
0+-21-86
D~~ri:,.~~n~!/~~iG~U~1 ~~~~~E A:~~;b Ie,.
Ve,.alon 2.00
(OSK3.ASMI
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
26 t 5
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
1--------------------------.-------------------------------------r
PAGE
1 oSKETTE SETUP
I
TRIS ROUTINE DOES A PRELIMINARY CHECK TO SEE WHAT TYPE
I
OF DISKETTE DRIYES ARE ATTACH TO THE SYSTEM.
OB90
OB90
OB9t
Oa92
OB93
0894
Oa95
OB96
0899
OB9E
OaAO
OaA6
OBAB
0!3B0
OaB5
oaaA
OBBF
OaC4
OBC4
OBC7
OBCA
oaca
OaCE
0800
Oa05
OBOA
oaoo
OaoE
OaoF
OaEO
OaEI
OBE2
OBE3
OSE4
OBE4
5-112
;
r
1---------------- -- -------.. ---. ---------.. --- --.- ------- ------.-
50
53
51
52
57
IE
E8
80
33
C7
80
80
C6
C6
C6
C6
oSKETTE_~5~~P PR~~
0000 E
DE OOAO R 01
FF
06
26
OE
06
06
06
06
0090
008a
0088
003E
0040
003F
0041
R 0000
R 33
NEAR
PUSH
PUSH
PUSH
PUSH
PUSH
CALL
OR
XOR
MOY
AND
ax
:~
:=g~g:-~~~~~s~o
~~Y
I
SAVE REGI STERS
CX
ox
01
OS
DDS
.RTC WAIT FLAG,OI
I PO I NT OAT A SEGMENT TO B I OS OAT A AREA
; NO RTC WAIT, FORCE USE OF LOOP
ol.oT
; INITIALIZE DRIVE POINTER
lORD PTR .OSK STA7E.0
I INITIALIZE STATES
OLASTRATE.NOT-STRT MSK+SENO MSK I CLEAR START & SEND
~~Tb:~~ Z~E~~~T B~~ T~ M~~~~~~LE
:~:~~R:~~ ;.~~~g_MSK-
::
MOV
OOSKETTE_STATUS,O
I
NO ERRORS
0832 R
0435 R
CALL
CALL
INC
DRIYE DET
XLAT i5LD
01
-
FF 02
F4
06 003E R 00
26 OOAO R FE
0854 R
C...
I
OETERM I NE DR I VE
TRANSLATE STATE TO COMPATIBLE MODE
POINT TO NEXT DRIVE
SEE IF DONE
REPEAT FOR EACH DR I VE
FORCE RECAL I BRA TE
ALLOW FOR RTC WA I T
VARIOUS CLEANUPS
RESTORE CALLERS RES I STERS
R CO
R 00
R 00
R 00
R 00
: :~:~::t:~~ ~~T~~s C~~N~FF
STATE
SUPO,
E8
E8
47
83
75
C6
80
E8
IF
5F
5A
59
5B
58
C3
JNZ
NOV
AND
CALL
pop
~~p~AX_ORV
.SEEK STATUS.O
ORTC '1A I T FLAG. OFEH
SETUP' ENO-
os
POP
01
POP
POP
POP
ex
ox
CX
AX
RET
OSKETTE SETUP ENOP
CODE
-ENDS
POP
END
DSKETIE
-
1
I
I
I
Y.,..alon 2.00
I
2
•
4
15
•1
0000
I-I
04-21-86
PAGE 118.121
TITLE DISK ----- 09/215/815 FIXED DISK 8105
• 286C
.LIST
CODE
SEGMENT 8YTE PU8L I C
••
"
g: ~~-~~TUP
PU8LIC
PUBLIC
PUBLIC
HD_IAT
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
CMOS REAO I NEAR
CMOS-WRITEINEAR
DDSIAEAR
E MSGINEAR
FT180SNEAR
FI 181 INEAR
FI182sNEAR
FI190sNEAR
FI 191 sNEAR
FD_ TBL I NEAR
10
12
13
14
10
I.
11
10
,.
20
21
22
2.
24
,--- INT I 3H ------------------------------------------------------------------I
FIXED DISK I/O INTERFACE
25
2.
THIS INTERFACE PROYIDES ACCESS TO 15
THE IBM FIXED DISK CONTROLLER.
2.
THE BIOS ROUTINES ARE MEANT TO 8E ACCESSED THROUGH
SOFTWARE
INTERRUPTS ONLY.
ANY ADDRESSES PRESENT
IN
THESE LISTINGS ARE
INCLUDED
ONLY
FOR COMPLETENESS •
APPL I CAT IONS WH I CH REFERENCE ANY
NOT FOR REFERENCE.
ABSOLUTE ADDRESSES WITHIN THE CODE SEGMENTS OF BIOS
YIOLATE THE
STRUCTURE AND DESIGN OF BIOS •
21
20
.0
31
•2
33
.4
••n3.
INPUT
30
39
40
41
42
(AHI.
(AHI ..
(AH)..
(AH)..
(AH):
(AHI ..
(AH).
(AHI ..
44
40
4.
41
40
4.
00
51
02
02H
03H
04H
015H
06H
OlH
08H
09H
03
54
(AH I: OAH
(AHI: OBH
(AHI.OCH
(AHI .. OOH
(AH I.. OEH
(AHI .. OFH
(AH) .. 10H
(AHI: IIH
(AH) .. 12H
IAHI .. 13H
IAH) .. 14H
I AH) _ I 5H
00
o.
01
50
O.
.,.0
.2
••
••
.0
.4
.0
6T
••
I
11
I
14
RESET DISK (OL : 80H.8IH) / DISKETTE
READ THE STATUS OF THE LAST DISK OPERATION INTO IAL)
NaTEs DL < 80H - DISKETTE
DL> 80H - DISK
READ THE DESIRED SECTORS INTO MEMORY
WRITE THE DESIRED SECTORS FROM MEMORY
YER I FY THE DES I REO SECTORS
FORMAT THE DES I RED TRACK
UNUSED
UNUSED
RETURN THE CURRENT DRIYE PARAMETERS
INITIALIZE DRIYE CHARACTERISTICS
INTERRUPT 41 POINTS TO DATA BLOCK FOR DRIYE 0
INTERRUPT 46 POINTS TO DATA BLOCK FOR DRIYE I
READ LONG
WRITE LONG
(READ. WRITE LONG ENCOMPASS 512 + ... BYTES ECC)
SEEK
ALTERNATE DISK RESET (SEE DL)
UNUSED
UNUSED
TEST DRIYE READY
RECALIBRATE
UNUSED
UNUSED
CONTROLLER INTERNAL OIAGNOSTIC
READ DASD TYPE
I
1------------------------------------------------------------------------------1
I
I
J
REGISTERS USED FOR FIXED DISK OPERATIONS
I
10
12
13
FIXED DISKS THROUGH
(AH).. HEX COMMAND YALUE
IAH). OOH
(AHI .. OIH
4.
I/4~
I
(DLI
IDHI
(CHI
(CLI
-
DRIYE NUMBER
HEAD NUMBER
CYLINDER NUMBER
SECTOR NUMBER
(80H-8IH FOR DISK, YALUE CHECKED I
I
(0-15 ALLOWED. NOT YALUE CHECKED)
1
(0-1023, NOT YALUE CHECKEDIISEE CL) 1
(I-IT. NOT YALUE CHECKED)
10
1.
NOTEI HIGH 2 BITS OF CYLINDER NUMBER ARE PLACED
IN THE HIGH 2 BITS OF THE CL REGISTER
(10 BITS TOTAL 1
11
10
1.
00
01
(AI. 1
-
NUMBER OF SECTORS (MAX I MUM pass I BLE RANGE 1-80H I
FOR READ/WRITE LONG 1-19H)
(ESIBX)
-
ADDRESS OF BUFFER FOR READS AND WRITES,
(NOT REQUIRED FOR YERIFY)
02
O.
I
04
o.
o.
01
00
O.
.,.2.0
I
I
I
FORMAT (AH_5) ES,BX POINTS TO A 1512 BYTE BUFFER.
THE FIRST
t
2· (SECTORS/TAACK) BYTES CONTAIN F.N FOR EACH SECTOR.I
F .. DOH FOR A GOOD SECTOR
I
80H FOR A BAD SECTOR
N .. SECTOR NUMBER
FOR AN INTERLEAYE OF 2 AND 11 SECTORS/TRACK
THE TABLE SHOULD BE 1
93
.4
'0
••
•1
'0
DB
DB
DB
OOH, a 1HI OOH. OAH, DOH, 02H, DOH, OBH, DOH, 03H, DOH, OCH
OOH, O"'H, OOH. ODH, OOH, OSH, OOH, OEH, DOH, 06H. OOH, OFH
OOH,OlH,OOH,IOH,OOH,08H,ODH,IIH,OOH,09H
I
I
1------------------------------------------------------------------------------I
DISK
5-113
V.ralon 2.00
..
1-2
04-21-86
PAGE
100
101
102
10.
10.
100
106
101
10.
10'
OUTPUT
AH • STATUS OF CURRENT OPERATION
STATUS ,BITS ARE DEFINED IN THE EQUATES BELOW
0
SUCCESSFUL OPERATION (AH=O ON RETURN)
1 FAILED OPERATION (AH HAS ERROR REASON)
ey =
ty •
i::g~ ,~~ ~
NOTE,
"."."0
~~~ C~~~~E~~:b ~~ T~~T :C~E:~G~~~ T~M ~EC~~~R~~~~
CH I
IS PROBABLY GOOD.
HOWEVER THE BIOS RbUTINE INDICATES AN
ERRbR TO ALLOW 1l£ CONTRaLl I NG PROGRAM A CHANCE TO DEC I DE
FOR
ITSELF. THE ERROR MAY NOT RECUR
IF THE DATA IS
REWRITTEN.
"0
'"
"2
IF DRIVE PARAMETERS WERE REQUESTED (al
INPUT.
(OLI
f 16
".
II.
1 iT
II
>=
60HI.
DRIVE NUMBER
OUTPUTI
I DL) II 7~:~:0~E~~!~gU~~~5 ~~E~~w~~~~: NG DR I VES ATTACHED
(DHI = MAXIWUM USEABLE VALUE FOR HEAD NUMBER
(CHI • MAXIMUM USEABLE VALUE FOR CYLINDER NUMBER
(CL I = MAX I MUM USEABLE VALUE FOR SECTOR NUMBER
AND CYLINDER NUMBER HIGH BITS
120
121
122
12.
12.
125
12.
121
12.
12.
IF REAb DASD TYPE WAS REQUESTED.
AH
Q - NOT PRESENT
,
I - DISKETTE - NO CHANGE LINE AVAILABLE
2 - DISKETTE - CHANGE LINE AVAILABLE
3 - fiXED DISK
CX I OX I: NUMBER OF 51 2 BYTE BLOCKS WHEN AH = 3
"0
,.,
,.2
I:
I ••
REGISTERS WILL BE PRESERVED EXCEPT WHEN THEY ARE USED TO RETURN
INFORMATION.
,.1
N01'E t
'",.0
I ••
".
"0
'"
• 09"
143
•
144
• Doce
145
• 0088
SENSE FAIL
NO ERI!(
WRTTE FAULT
UNDEr-ERR
NOT Rl5y
TI~ OUT
ODED
146
•
141
148
• 0080
• 0040
OOAA
::g-~~ER
149
• 0020
150
151
152
110011
• 0010
•
DATA CORRECTED
1&3
• OOOA
BAD:SECTOR
DMA BOUNDARY
INI1 FAIL
BAD I!(ESET
RECtiRD Not F'HD
::g-~~CK
oooa
104
155
156
• 000-,
• 0001
III 0005
151
II
0004
158
159
•
•
0002
0001
,.0
,.,
,.2
I.'
.
,--------------- ----------------------------------------------------------------
I ••
142
I F AN ERROR I S REPORTED BY THE 0 I SK CODE. THE APPROPRJ ATE
ACTION IS TO RESET THE CISK~ THEN RETRY THE OPERATION.
::g:~~gR_MARK
I ••
OFFH
OEOH
OCCH
OSBH
OAAH
80H
40H
20H
EOU
EOU
EOU
EOU
EOU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
"H
lOH
08H
OAH
O'H
E~U
01H
05H
EQU
EQU
EQU
EOU
EQU
04"
02H
OlH
NOT IMPLEMENTED
STATUS ERROR/ERROR REGISTER=O
WRITE FAULT ON SELECTED DRIVE
UNDEF I NED ERROR OCCURRED
DR I VE NOT READY
ATTACHMENT FAILED TO RESPOND
SES( OPERATION FAILED
CONTROLLER HAS FA I LED
ECC CORRECTED OAT A ERROR
BAD ECC ON DISK READ
NOT IMPLEMENTED
BAD' SECTOR FLAG DETECTED
DATA EXTENDS TOO FAR
DRlVE PARAMETER ACTIVITY FAILED
RESET FAILED
~EQUESTED SECTOR NOT FOUND
ADDRESS MARK NOT FOUND
BAD COMMAND PASSED TO DISK I/O
FIXED DISK PARAMETER TASLE
I ••
,.1
I.'
110
I ••
-
I ••
+0
+2
+3
+5
+T
+8
(I
(I
(I
(I
(I
-
+9
+12
+14
+I5
(3
(I
(I
(I
BYTES)lORD) BYTE) BYTE I -
111
112
113
11.
THE TABLE I S COMPOSED OF A BLOCK OEF I NED AS I
WORD)
BYTE)
WORD)
WORD)
BYTE)
(1 BYTE)
11.
11.
In
11.
11'
,.,
".
la.
I.d
182
,
I
,
I
I ••
la.
la1
5-114
MAXIMUM NUMBER OF CYLINDERS
MAXIMUM,toiUMBER OF HEADS
NOT USED/SEE PC-Xl
STARTING WRITE PRECOMPENSATION CYL
MAX I MUM ECC OAT A BURST LENGTH
CONTROL BYTE
:g
!
g:~::t~ ~~~~:~~ -ORBIT
3 MORE THAN 8 HEADS
NOT USED/SEE PC-XT
LANDING ZONE
NuMBER OF S~CTORS/TRACK
RESERVED FOR FUTURE USE
- TO DYNAMICALLY DEFINE A SET OF' PARAMETERS
BU I LD A TABLE FOR UP TO 15 TYPES AND PLACE
THE CORRESPOND I NG VECTOR I NTO INTERRUPT 41
FOR DRIVE 0 AND INTERRUPT 46 FOR DRIVE 1.
,
,--------------------------- -----------------------------
DISK
•
IBM P.I"'.on.1 Co ...put.1'" MACRO A ......b 1.1'"
DISK ----- 09/25/155 I="IXED DISK BIOS
laa
la'
1----· -- ----------- - ------ -. ---------------------- ------I
I HARDWARE SPECIFIC VALUES
'",.2
I
I ••
I ••
I ••
I
I
I.a
I
".
,.7
I
I
I
'"
211
218
221
2215
229
I
I
I
I
1
1
I
I
I
1
1
23~
=
231
2'2
243
244
245
246
241
2415
249
250
251
252
253
254
•
-
WRITE DATA (FROM CPU TO CONTROLLER)
SET PRECOMPENSATION CYLINDER
SET SECTOR COUNT
SET SECTOR NUMBER
SET CYL I NDER LOI
SET CYLINDER HIGH 12 BITS)
SET SIZE/DRIVE/HEAD
SET COMMAND REGISTER
I DISK PORT
HF PORT
HF:REG_PORT
1-----
STATUS REGISTER
'" 0001
0002
'" 0004
'" 00015
'" 0010
'" 0020
'" 0040
'" 00150
ST ERROR
ST-INDEX
ST-CDRRCTO
ST-DRQ
ST-SEEK COMPL
sr-WRT j!'L T
ST-READ"Y
ST:BUSY
EQU
EQU
EQU
EQU
EQU
Eau
EQU
EQU
1-----
ERROR REG I STER
• 0010
ERR CAM
ERR-TRK 0
ERR-ABOlh
I
ERR_I 0
'" 0040
• 00150
ERR DATA ECC
ERR:BAD _ILOCK
Eau
EQU
EQU
EQU
EQU
EQU
EQU
EQU
000000018
000000 I 08
000001008
OOOOIOOOB
000 I 00008
00 I 000008
010000008
100000008
'"
'"
'"
'"
'"
'"
RECAL CMO
READ 'fMD
WRIT~ CMC
VERIFY CMO
FMTTRK-CMD
INIT cRc
SET 15ARM ChIC
NO J(ETRI~S
EC~ MODE
BUFj!'ER_MODE
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
000 I 00008
00 I 000008
00 I 100008
OIOOOOOOB
010100008
01'000008
011100008
100100008
100100018
000000018
000000108
OOOOIOOOB
DRI YE RECAL
READ
WRITE
VER IFY
FORMAT TRACK
INITIALIZE
SEEK
DIAGNOSTIC
DRIVE P"RMS
CMO MODIFIER
CMO MODIFIER
CMD MODIFIER
2.H
CELA Y FOR OPERAT I ON COMPLETE
Y FOR READY
DELAY FOR DATA REQUEST
=
=
0001
0002
'" 0004
s
23a
2.,
HF PORT+O
HF-PORT+I
HF-PORT+2
HF-PORT+3
HF-PORT +4
HF-PORT+!5
HF-PORT+6
HF:PORT+l
011="0
'" 031="6
23.
239
240
FR0t.41
- READ DATA (FROM CONTROLLER TO CPU)
- GET ERROR REG I STER
- GET SECTOR COUNT
- GET SECTOR NUMBER
- GET CYL I NDER LOW
- GET CYLINDER HIGH (2 BITS)
- GET SIZE/CRIVE/HEAD
- GET STATUS REG I STER
I
,
1- - ------------------ - -- ---------------------- -----------
231
233
234
WHEN READ
HF PORT+O
HF-PORT + 1
HF-PORT+2
HF-PORT+3
HF-PORT +4
HF-PORT+!5
HF-PORT+6
HF:PORT + 1
> WHEN WRITTEN TOI
1
230
232
CONTROLLER I /0 PORT
>
I
I
I
21'
220
221
222
223
224
225
226
04-21-156
PAGE
"0
200
201
202
20.
20.
20.
20.
207
20a
20.
210
211
212
213
21.
215
21.
1-'
V.I"'. I on 2.00
1
=
'"
'"
'"
'"
'"
0010
0020
0030
0040
0050
0060
DOlO
0090
D091
0001
0002
00015
~T~~:g=g
EQU
EQU
Ol"OH
03F6H
OOOOOOOlB
000000 I DB
00000 I OOB
ECC CORRECT I ON SUCCESSFUL
000100008
001000008
SEEK COMPLETE
WRITE FAULT
Ooooloooe
Olooooooe
10000000B
DATA ACDRESS MARK NOT FOUND
TRACK 0 NOT FOUNO ON RECAL
ABORTED COMMANO
NOT USED
riD NOT FOUND
J NOT USED
, 'OHI
(20H)
(30H)
140H)
(SOH)
160H)
(TOH)
t90H)
(9IH)
IOIH)
(02H)
(OSH)
2 ••
256
251
2.a
MAX FILE
S_MXX_F I LE
EQU
EQU
0025
0600
DiaD
DELAY I
EQU
EQU
:;; 0008
HF _FAIL
,-----
COMMAND BLOCK REFERENCE
•
~MD_BLOCK
EQU
'" 0002
0002
=
259
:II
260
261
•
=
2.2
263
2 ••
2 ••
2 ••
261
2.a
2 ••
g~t~~:~
EQU
0600H
OIOOH
EQU
oaH
BYTE PTR [BP]-a
DEL"
I CMOS FLAG I N BYTE OEH
~MO
BLOCK REFERENCES BLOCK HEAD IN SS
(BPT POINTS TO COMMAND BLOCK TAIL
AS DEFINED BY THE "ENTER" PARMS
DISK
5-115
'-4
04-21-86
no
PAGE
.T.
•I
1----------------------------------------------------------------
2T'
2T2
2T3
I FIXED DISK I/O SEl1.P
-
I
•,
ESTA8L.ISH TRANSFER VECTORS FOR THE FIXED DISK
PERFORM POWER ON 0 I AGNOST I CS
SHOULD AN ERROR OCCUR A I nOlI IlESSAGE IS DISPLAYED
275
I
.71
•
•
1----------------------------------------------------------------
n•
•n
n•
......•••...••••••
...•••
...•••
...
I
ASSUME
•• 0
21T
2'0
2 ..
2'2
2'.
2 ••
.07
.91
.00
30.
30.
30.
10.
30.
30.
0000
0000
ODOI
0004
0006
0009
DOOC
GOOF
0012
DISK_SE~I
FA
.a ........
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
R
IE De
AI 004C R
A3
A.
A3
Cl
00'1 Ie
0100 R
004£ ..
0102 R
06 DOC R 0lA9 R
oe:
004£ R
ODIC CT 06 OIDe R 06DA R
0022 Ie OE aiDA R
0026
oozc
0030
0036
D03A
D03C
ODIE
0040
0042
0044
0046
00.1
Cl
Ie
C1
Ie
E4
24
Ea
E6
E4
24
EB
E6
06
DE
06
DE
AI
BF
00
AI
Z'
,..
00
Zl
0104
0106
Dill
OilA
R 0000 E
R
R 0000 E
R
'N
AND
J,",
ST.
ASSUME
3'2
3 ••
3 ••
3 ..
006. IA EO
310
3"
•••
lIT
.11
3 ..
.2.
320
.2.•••
.2.•••
3 ••
323
.n
I ••
330
•••
II'
.34
•••
33T
•••
•••
•••
•••
•••
•••
II.
31.
33.
3'0
...
POP
CALL
0000 E
06 0074 R 00
06 0015 R 00
06 0076 R 00
IE
MOV
MOV
MOV
MOV
0061 EI 0000 E
0066 24
0061 74 03
006' E9 OOF. R
0060
0060
00 TO
0072
0075
Don
007A
OOlF
DOl'
0014
10
10
EI
10
EI
C6
IA
25
74
CALL
MOV
co
AND
Jl
LII
E4 F7
IE
0000 E
92
0000 E
06 Don R 00
D,
00"0
72
;:,~,NT~B:O.=T::E:~g:~~~~ET
.....
AL,OBFH
OS'OATA,ESIAISO
OS
ES
ODS
eQlSK STATUS I ,a
eHF NOM,a
ec:ORTRDL BYTE I 0
AL,CMOS D'IAG+NMI
CMOS READ
AH,AC
~~,8AD_BAT+SAD_CKSUM
AL,cias DI5K+NMI
CMOS REID
~l_OFF'O
Jl
C,",
.-
AL,OFOH
L•
CHECK FOR EXTENlED DR I VE TYPE BYTE USE
USE DRIVE TYPE 1 --> 14 IF NOT IN USE
DOl'
OOIC
DOl'
0091
0093
009.
009,
10
EI
3e
7.
3e
MOV
AL,CMDS DISK 1 +NMI
~~_REID
-
GET EXTENDED TYPE FOR DR I VE C I
FROM CMOS
I S TYPE SET TO ZERO
EXIT IF NOT VALID AN) NO FIXED DISKS
IS TYPE WITHIN VALID RANGE
EXIT WITH NO FIXED DISKS IF NDT VALID
AD.JUST TYPE TO HIGH NIBBLE
009A
oe
oa,,,
99
0000 E
00
65
2F
CALL
ClIP
JE
ClIP
JA
SHL
n "
CI EO 04
L ••
FFFO E
0090 261 AI 0104 R
OOAt C6 06 001! R at
AOO
MOV
MOV
MOV
POD DONE
AL,41
POD DONE
AX,.
AX,OFFSET FD TBL.-16D
::D.:;.~ 1
VEC I AX
COMPUTE OFFSET OF FIRST DRIVE TABLE
SAVE IN VECTOR POINTER
AT LEAST ONE DRIVE
GET SECOND DR I VE TYPE
ONLY DNE DRIYE
AL,OFOH
CHECK FOR EXTENlED DR I VE TYPE BYTE USE
USE DRIVE TYPE I --> 14 IF NDT IN USE
AL,CMDS DISK 2+NMI
CMOS_REID
AL,O
GET EXTENDED TYPE FOR DR I VE 0 I
...-:-rm._
L'
•• T
3 ••
.69
ITO
IT.
IT.
'73
IT'
.T.
In
.T.
3TO
...•••
371
••0
lea
ZERO CARD OFFSET
SAVE FIXED DISK BYTE
GET FIRST DRIVE TYPE AS OFFSET
NO FIXED DISKS
0016 Ie FO
00•• 715 10
.-
I ••
I CI£CK CMOS VALIDITY
I SAVE CMOS FLAG
I CHECK FOR VAL I 0 CMOS
AX,OOOFOH
POD_DONE
OOAF IC Fa
008t 15 10
.66
• RESET THE STATUS INDICATOR
I ZERO MJMBER OF F I XED 0 I SKS
I CMOS NDT VALID -- NO FIXED DISKS
•• 0
.,.•••
I MOVE ABSO PO I NTER TO
I EXTRA SEGMENT PO INTER
I ESTABLISH DATA SEGMENT
I ALLOW FIXED DISK IPL
I WRITE IT BACK
~~':~~AG+NMI
SOL
.61
I ••
SECOND CH IP
AH,NOT Hf' FAIL
MOV
3 ••
eo
FD_Ta..
I PARM TABLE DRIVE 81
I TURN ON SECOND INTERRUPT CHIP
POD_DONE
OOAI CO EO 04
••0
I FIXED DISK INTERRLPT
I PARM TABLE DRIVE
JMP
OOAS 14 2A
OOAD 1M 00
31T
I F I XED 0 I SK HANDLER
AND
MOV
CALL
MOV
CALL
MOV
MOV
AND
.41
•••
•••
•••
•••
•••
•••
•••
•••
SET SEGMENT REG I STER
GET DISKETTE VECTOR
INTO INT 40H
I LET I NTERRUPTS PASS THRU TO
I
1+.
AL,IL
AL,'
SHORT L4
AH,O
I.T
GET ABSOLUTE SEGMENT
1+ •
INTAOI,AL
PUSH
.0.
AX,ASSO
DS,AX
AX, WORD PTR .eRG VECTOR
WORD PTR eo I SK V!CTOR, AX
AX, WORD PTR e~ VECTOR+2
WORD PTR ODISK v!CTOR+2,AX
WORD PTR eORG VECTOR,OFFSET DISK 10
WORD PTR eORG-VECTOR+2, CS
WORD PTR OHDI!K INT,OFFSET HD INT
WORD PTR eHlISK-INT+2,CS
WORD PTR el-F TBC VEC,OFFSET FD TIL
WORD PTR .....-TBL.-VEC+2, CS
-
OUT
0048
004C
0040
0050
0055
GaIA
aOIF
I WORK OFF OS REGISTER
NEAR
INTIOI,AL
AL,INTA01
AL,OFBH
'N
.-
0041& Fa
IE
01
EI
C6
C6
C6
ao
P'RDC
AND
OUT
30T
30.
CS,CODE,DSIAaso
00A6 IA C3
00a3 ID
E8
0081 3e
OOBA 14
ooae
ooec Ie
C,",
9A
MOV
0000 E
CALL
ClIP
JE
ClIP
JA
00
II
2F
OOBE 11 n
OOCO CI EO 04
OOCI
00C3 0& "",.0 E
00C6 la DB
OOCI 2EI 13 IF 00
ooce 14 09
OOCE 261 A3 01 II R
0002 C6 06 OaT! R 02
OODT
0001 12 10
0009 14 14
OODB CD II
OODO T2 IA
OOOF' AI 006C R
00E2 la De
00E4 05 0444
OOEl 18 CI
00E9 EI 0104 R
OOEC 10 3E 00T5 R 01
Oewl 16 05
OOFa 82 el
OOFI E8 0104 R
OOFe
OOFI C3
5-116
Jl
DISK
L',
SHL
AOO
MOV
CMP
JE
MOV
MOV
L ••
MOV
MOV
'NT
JC
MOV
MOV
AOO
MOV
CALL
C,",
JeE
MOV
CALL
POD_DONE~ET
L.
AL,4T
L.
AX,4
FROM CMOS
I S TYPE SET TO ZERO
SKIP IF SECOND FIXED DISK NOT VALID
IS TYPE IITHIN VALID RANGE
SKIP IF NOT VALID
ADJUST TYPE TO HIGH N I IILE
:=:~SET FD_TBL.-I6D
COMPUTE OFFSET FOR SECQtrC) FIXED DISK
WORD PTR CSa[BX],O
L4
CHECK FOR ZERO CYLINDERS IN TABLE
SKIP DRIVE IF NDT A VALID TABLE ENTRY
=~~2""'1_TBL._VEC,AX I TWO
DRIVES
I CtECK THE CONTROLLER
I USE CONTROLLER 0 I AGNOST I C COMMAND
I CALL BIOS WITH DIAGNOSTIC COMMAND
I DISPLAY ERROR MESSAGE IF BAD RETURN
I GET START TINER COUNTS
I 60 SECONDS· t8.2
• SET UP DRIVE 0
I WERE THERE TWO DR I VES?
I NO-ALL DONE
I SET UP DRIVE 1
1-5
04-21-56
V.rlllion 2.00
384
305
38.
30T
388
30.
3'0
3.,
3'2
3.3
3.4
3.5
3"
3.T
3.8
3"
400
401
402
403
404
405
40.
40T
400
40.
410
411
412
413
414
415
41.
'IT
410
41'
420
421
422
423
424
425
42'
421
428
42.
430
431
432
433
434
435
...
43T
438
43'
440
441
442
443
444
445
44.
44T
448
44'
450
451
452
45.
454
455
45.
451
450
45.
4.0
4.,
4.2
4.3
4.4
4.5
4 ••
1----- POD ERROR
OOF9
00F9 BE 0000 E
OOFt Ea 0 ITt R
OOFF Ee 0000 E
0,02 EB F4
01040104 53
0'05 51
0106 84 09
0108 CD 13
OIOA. 12 0&
OIOCS... "
OIOE CO 13
0110 13 19
0112 E8 018A R
011513 EF
01118E 0000 E
alIA F6 C2 01
01101557
01 IF BE 0000 E
0122 E8 Clle R
0125 EB 4F
0121 84 00
0129 CD 13
0128 84 08
0120 8A DA
012F CD 13
0131 72 3B
0133 89 DE 00<42 R
CTL ERRXI
MOV
CALL
CALL
JMP
HD RESET I
PUSH
PUSH
RES_II
MOV
INT
Je
MOV
INT
JNe
RES_21
CALL
JNe
RES_FLI MOV
TEST
JNZ
MOV
CALL
JMP
RES RSI MOV
INT
RES_CKI MOV
MOV
INT
Je
MOV
MOV
0137 8A 03
0139 B8 0401
RES_31
014F E8 018A R
0152 12 11
0154 88 DE 0042 R
MOV
INT
JNe
eMP
JE
eMP
JE
eMP
JE
CALL
Je
MOV
0158 8A CI
MOV
Olle CD 13
QUE 13 39
0140 80 Fe DA
01.3 T4 34
0145 80 Fe II
0148 74 2F
014A 80 Fe 10
01.0 14 2.\
015A
DISC
015E
0'60
0163
0165
0169
0168
016E
0171
0113
0116
0116
0179
0119
011A
0118
2.
FE
14
80
0.\
89
EB
BE
F6
15
BE
3F
ca
CT
EI CO
C8
DE 0042 R
CE
0000 E
C2 01
03
0000 E
Olle
01 TF
0182
0184
OllSb
0189
OUA
CALL
E8 0000 E
RES_OK I
59
58
C3
POP
POP
RET
HD_RESET_I
Olle
olle
ANO
OEe
JZ
AND
OR
MOV
JMP
RES_ERI MOV
TEST
JNZ
MOV
88 8E8E
£8 0000 E
ac 08
86 EO
E8 0000 E
C3
018A
018A
018B
018C
0180
018E
018F
0190
58
59
5B
53
51
50
Al 006C R
0193
0t9!5
0197
0199
019B
0190
019F
DIAl
0lA3
3B
72
3B
72
EB
3B
72
3B
72
OlA5
0lA6
OIAl
OlA8
OlA9
F9
C3
F8
C3
SI.OFFSET FlTe2
SET FAIL
E M!G
pliO_DONE
PROC
NEAR
BX
I SAVE TIMER LIMITS
AH.09H
13M
RES 2
AH.TIH
I
ex
13M
RES CK
POD-TCHK
RES-I
SI.i5FFSET FlTeI
DL,I
RES EI
SI.i5FFSET FI780
SET FAIL
SHOA'T RES EI
AH,OOH
-
413
4T4
415
4T.
4"
4T8
4T.
480
.81
482
483
484
405
0lA9
09
06
08
DC
04
C3
04
CI
02
GET MAX CYLINDER,HEAD,SECTOR
SAVE DRIVE CODE
RES EA
WORlS PTR eNEC STATUS.CX I SAVE MAX CYLINDER, SECTOR
DL.8L
I RESTORE DR I VE CODE
AX,040lH
I VER I FY THE LAST SECTOR
13M
RES OK
~~S§~~_SECTOR
I VERIFY OK
1 OK ALSO IF JUST 10 READ
~~S'I5~~A_CORRECTED
~~S§~~_ECC
~~~:~~HK
CHECK FOR T I ME OUT
FAILED
GET SECTOR ADDRESS, ANO CYl I NOER
SEPARATE aUT SECTOR NUMBER
;~:~eRO PTR eNEC_STATUS
AL,3FH
TRY PREY I aus aNE
WE'VE TRIED ALL SECTORS ON TRACK
KEEP CYLINDER alTS
MERGE SECTOR WITH CYLINDER BITS
SAVE CYL I NDER, NEW SECTOR NUMBER
TRY AGAIN
INDICATE DISK I ERROR
AL
RES RS
CL.OCOH
CL,AL
=~:03PTR eNEC_STATUS,CX
Sl,liFFSET FI791
DL,I
RES El
S I ,tiFFSET FI790
I
E_MSG
I 01 SPLAY ERROR AND SET (BP) ERROR FLAG
ex
I RESTORE TIMER liMITS
INDICATE DISK 0 ERROR
BX
ENDP
POQ TCHK
POP
POP
POP
PUSH
PUSH
PUSH
MOV
PROC NEAR
AX
TCHK21
INDICATE DISK 0 FAILURE
DO NOT TRY TO IPL 01 SK 0
I RESET THE DR I VE
13M
PROC
TCHKII
INDICATE DISK I FAILURE
13M
SET FAIL
MOV
CALL
OR
XCHG
CALL
RET
SET_FAIL
eMP
JB
eMP
JB
JMP
CMP
JB
CMP
JB
I DRIVE OK
CHECK TIME OUT
I
I
AH,08H
BL.DL
NEAR
~~or ~~~gS_DIAG+NMI)
I
:~:~[_FAIL
GET CMOS ERROR BYTE
SET DO NOT t Pl FROM 0 I SK FLAG
SAVE IT
PUT IT OUT
CMOS_WRITE
ENOP
CHECK FOR 30 SECOND T I ME OUT
SAVE RETURN
GET TIME OUT LIMITS
ex
BX
BX
ex
AX
Ax.eTIMER_LOW
461
4TO
411
4T2
SET DR I VE PARAMETERS
I RECALIBRATE DRIVE
4.0
4"
CONTROLLER ERROR
DO NOT IPL FROM DISK
DISPLAY ERROR AND SET (BP) ERROR FLAG
ax,cx
TCHKI
aX.AX
TCHKG
SHORT TCHK2
AX.BX
TCHKNG
AX.CX
TCHKG
TCHKNGI STC
RET
TCHKGI
CLC
RET
POD_TCHK
ENDP
DISK_SETUP
ENDP
;
AND SAVE THEM AGA I N
I
I
1
I
RESTORE RETURN
AX III CURRENT TIME
BX III START TIME
CX III END TIME
I
START -< END
END -< START -< CURRENT
END, CURRENT -< START
I CURRENT -< START -< END
START -< CURRENT -< END
OR CURRENT -< END -< START
CARRY SET INDICATES TIME OUT
I
INDICATE STILL TIME
DISK
5-117
..,
•••
•••
•••
•••
491
••2
04-21-16
PACE
1--------------------------- ------ --- ---I
1
FIXED DISK BIOS ENTRY POINT
,---------------------------------------0lA9
OISK_IO
495
496
491
OIA' eo F"A eo
alAe 73 O~
OIAE CD 40
0180
alBa CAo 0002
499
500
ISOI
502
0183
018a Fa
0lB4 00\ £4
0186 15 09
503
01BI CD 40
504
OIBA 20\ E4
493
49.
•••
505
506
501
501
...
OIBC eo FA 81
OlaF 11 EF
OICI
OICI
eo
Fe oe
ao
Fe 15
OIC ... 15 03
OlC6 E9 0393 R
ISUI
516
511
518
519
520
521
0101
0101 CI
0105 53
0106 51
0107 52
0108 IE
0109 06
522
523
524
525
526
521
01DA
GIDS
alDC
aiDE
OlEO
521
52'
0lE5 EI 0000 E
OtEI 8A 26 0074 R
530
531
OIC'
GICC 15 03
GICE E9 0353 R
oooa
00
OIFO SF'
GIF! 5E
01F2 01
535
OlF3 IF
536
OlF4 5A
531
OIFS 59
53&
539
OlF6 58
GIFT C9
:!~
~:~ eft iivvc:
•• 2
543
OIFB
544
OIFB 02tl R
545
546
548
549
OIFD
OIFF
0201
0203
0205
550
020 1 028. R
541
0209 02B9 R
0208
0200
020F
0211
0213
0215
0217
0219
021B
0210
0289
03FI
0423
042A
0431
02Cl
0289
028'1
044F
0466
OZtF 02B9
0221 02B9
0223 0411E
.. 002A
567
561
569
!S70
S71
572
S73
574
57S
576
5 TT
5 TI
579
SIO
SI'
512
583
514
51S
516
517
SI8
589
590
59,
592
S'3
5'4
595
596
597
0225
0225
0221
0228
0220
0230
0230
0235
0236
023A
0238
023E
0240
0242
0243
0246
024A
0240
0250
0254
025S
0251
0259
025A
0258
02SF
0262
0264
0268
026'1
02bC
5.s
OR
.,
CMC
POP
POP
POP
POP
POP
POP
POP
LEAVE
I BACK TO CALLER
I ENABLE INTERRUPTS
AH.AH
A2
40H
AH.AH
DL, (SOH + S_MAX_FILE RET_2
I RESET NEC WHEN AH= 0
1~
AH.OSH
; GET PARAMETERS I S A SPEC I AL CASE
CET PARM N
AH, T5H -
; READ DASO TYPE I S ALSO
••
••
READ_CASD_TYPE
SAVE REGISTERS OURING OPERATION
SAVE (BP) AND MAKE ROOM FOR OCMD BLOCK
IN THE STACK. THE COMMAND BLOCK-lSI
OCMD_BLOCK == BYTE PTR (BP]-8
."
BX
ex
ox
OS
ES
51
01
AH.AH
; CHECK FOR RESET
••
DL,IOH
DISK 10 CONT
DDS AH.ODISK_STATUSI
AH.1
FORCE DR I VE 80 FOR RESET
PERFORM THE OPERAT I ON
EST ABL I SH SEGMENT
GET STATUS FROM OPERATION
SET THE CARRY FLAG TO I NO I CATE
SUCCESS OR FAILURE
RESTORE REG I STERS
01
51
ES
OS
ox
CX
BX
AD.JUST (SP) AND RESTORE (BP)
THROW AWAY SAVED FLAGS
RET
LABEL
O.O.
O.
D.
D.
D.
D.
O.
O.O.
D.
O.
O.
D.
O.
D,
D.
D.
D,
R
R
R
R
R
R
R
R
R
R
R
MIL
Df
O.
EQU
DISK_IO_~~
ClOP
.ORO
F'"U~-.lCT
DISK RESET
RETUFfN STATUS
DISK READ
DISK-WRITE
DISK-VEAF
FMT TRK
BAD-COMMAND
BAO-COMMAND
BAD-COMMAND
INIT DRV
RD L~
WR-LONG
OI!'K SEEK
DISK-RESET
BAD ~OMMANO
BAO-COMMAND
TST-RDY
HOI'!'K RECAL
BAD ci5MMAND
BAD-COMMAND
CTLi!f DIAGNOSTIC
$-MIPROC
BL ••HF NUM
.ND
CMP
DL,lFH
MOV
MOV
OChID BLOCK. AL
AL,BYTE PTR ESI (BX] (8)
DX
g~:~r _REG_PORT
DX
POP
POP
MOV
'ND
OR
MOV
POP
MOV
PUSH
MOV
.ND
RESET THE STATUS INDICATOR
SAVE DATA ADDRESS
GET NUMBER OF OR I VES
-
PUSH
OUT
MEMORY DIAGNOSTIC
DRIVE DIAGNOSTIC
CONTROLLER 0 I AGNOST I C
ES-T A8L I SH SEGMENT
RETURN STATUS
-
PUSH
CALL
MOV
MOV
READ BUFFER
WRITE BUFFER
OIOH
OIIH
Ol2H
Ol3H
Ol4H
OOISK STATUSI.O
.X
BL.DL
BAD COMMAND POP
ES GET VEC
AX.WORO PTR ESI(BX][5)
S""
OOCH
OOOH
DOEH
OOFH
suo
BX
FORMAT 8AO SECTORS
FORMAT DRIVE
RETURN PARAMETERS
NEAR
MOV
PUSH
MOV
"BE
003H
004H
005H
006H
D01H
DD8H
OO'lH
OOAH
OOBH
AH.OIH
RETURN_STATUS
PUSH
I ON TRANSf'E:R TABLE:
OOOH
OOlH
002H
DDS
.....
"NZ
SUO I
DISK
TEST FOR FIXED OISK DRIVE
YES. HANDLE HERE
DISKETTE HANDLER
40H
DISK_IO ENDP
R
0000 E
FC 01
03
0315 R
"NZ
MOV
CALL
CALL
MOV
C'"
R
C6 06 0074 R 00
53
SA IE 0075 R
50
10 E2 7F
3A DA
76 75
06
EI D6C4 R
261 la 47 05
C I EI 02
II 46 FI
261 IA 47 01
52
SA 0lF6
EE
SA
07
IA 26 0076 R
eo £4 co
OA EO
Ie 26 0076 R
51
II 46 F9
50
0260 SA C t
026F 24 3F
5-118
ENTER
PUSH
PUSH
PUSH
PUSH
PUSH
OIZC R
033E R
EI
10
7S
E9
eMP
....Z
0325 R
&51
599
•••
•••
.JMP
C'"
"NZ
.JMP
03t5 R
031E R
552
5S3
554
5S5
556
551
5511
559
560
561
562
563
564
565
•••
sue
.2.
OIEC eo Fe 01
OIEF F5
533
534
STI
OR
.JNZ
I NT
CMP
.JA
A51
DL,eOH
AI
RET
PUSH
PUSH
56
51
00\ E4
15 02
82 eo
01E2 EI 0225 R
532
::~ ~:~OATA,ESINOTHINC
CMP
.JAE
INT
50.
510
511
512
513
.,.
1-.
V.r.lon 2.00
; GET DRIVE AS 0 OR I
I
INVALID DRIVE
GET DISK PARAMETERS
GET WRITE PRE-COMPENSATION CYLINDER
AX,2
I GET CONTROL BYTE MOO I F I ER
I SET EXTRA HEAD OPT I ON
ES
:~:~g'cWROL_BYTE
AH,AL
OCONTROL_BYTE, AH
AX
OCMD BLOCK + I ,AL
AX AL,CL
AL,3FH
SET EXTRA HEAD OPT I ON IN
CONTROL BYTE
I
SECTOR COUNT
; GET SECTOR NUMBER
IBM Personel Comp",ter MACRO Assemblar
DISK ----- 09/Ze/8e FIXED DISK alos
..•••,
•••
•••
...••••••
......
...
•• 2
•• 3
0.0
•• T
• 11
.. 2
.. 3
61T
62.
621
622
623
62.
62.
626
62T
62.
62'
63.
631
632
633
63'
63.
636
63T
63.
63.
6 ••
6"
6.2
•• 3
•••
6 ••
6.6
•• T
6 ••
6 ••
65.
601
652
653
6"
655
656
65T
.5.
65.
66.
6 ..
662
663
66.
665
666
66T
66.
66.
6T.
6TI
6T2
613
6T.
6TO
6T6
6TT
6T.
6T.
6 ••
,.,
0211
0274
02ll
0279
02TC
02TF
0281
0284
0287
0289
028a
028E
028F
0290
0292
0294
0296
0298
029a
029D
029E
029F
02AO
02Al
02A3
02A6
02A8
02AA
02AC
02BO
02BI
0282
0281
02&7
02B8
0289
0289
02BE
02ca
Q2CI
ee
46 F"
lUI 6E Fa
SA CI
co
Ie
E8
46
C2
EO
E6
ceo
AD
46
06
Fe
8A
CO
04
80
OF
OA
OC
88
FO
e8
eo
8A C4
32 E4
01 EO
aa FO
3D 002A
T3 IA
S8
sa
SI
eo
aa CB
CI E9 04
8C CO
03 CI
litE CO
8 I E3 OOOF
ea
S9
2EI FF A4 OIFe R
!US
e8
C6 06 0014 R 0 I
BO 00
C3
:g=g-:~gg~:::~~
AL,Cr
AL,6
OCMP BLOCK+4,AL
AL,O[
AL,4
CH,OFH
AL,DH
AL,80H OR 20H
:~MO_BI-.OCK+5IAL
I GET CYL I NDER NUMBER
CYLINDER HIGH ORDER 2 BITS
DR I VE NUMBER
I
HEAD NUMBER
ECC ANO 512 BYTE SECTORS
ECC/S I ZEIDR IVEIHEAP
PUSH
AX
MOV
AL,AH
GET I NTO LOW BYTE
XOR
AH,AH
ZERO HIGH BYTE
SAL
AX,I
-2 FOR TABLE LOOKUP
MOV
SI,AX
PUT INTO S I FOR BRANCH
CMP
AX,MIL
TEST WITHIN RANGE
JNB
BAD COMMAND POP
AXPOP
RESTORE AX
POP
BX
AND DATA ADDRESS
PUSH
CX
PUSH
AX
ADJUST ES I ax
MOY
cX,ax
GET 3 HIGH ORDER NIBBLES OF BX
SHR
CX,4
MOV
AX,ES
ADD
AX,CX
MOV
ES,A.X
AND
BX,OOOFH
I ESIBX CHANGED TO ESIOOOX
POP
AX
POP
CX
JMP
WORD PTR CSI(SI + OFFSET Ml]
aAD COMMAND POP I
POPAX
POP
BX
BAD_COMMQ~el
MOV
RET
DISK_IO_CONT
.DISK STATUS I ,BAD CMO
AL,O -
I
COMMAND ERROR
ENDP
I -------------------------- ----------- ---
02CI
02CI
02C2
02C4
D2C6
D2ce
02CA
02ca
D2ca
F'A
E4
Ea
24
E6
Fa
aD
BA
g~g~ ~~
0204
02DS
0201
02DA
02DC
49
7e
AD
24
EE
O~DD Ea
02EO 75
02EZ BA
02E5 ~C
02E6 3C
02E8 75
DISK RESET
CLI
Ea
E8
80
16
80
82
E8
Ea
C6
C3
C6
C3
JMP
AND
OUT
STJ
04
!)3F6
OOOA
DRDI
FD
00T6 R
OF
05F3 R
2D
OIFI
MOV
MOV
OUT
MOV
DEC
JNZ
MOV
AND
OUT
CALL
JNZ
MOV
IN
01
25
g~~: ~~ ~~
02FO
02F3
02F6
02FB
02FD
0301
0303
0306
0309
030E
030F
ilSI4
0315
IN
Al
00
BF
Al
CMP
FD EF
03F I R
0466 R
3E DOTS R 0 I
DC
4E Fa 10
01
03F 1 R
0466 R
06 00T4 R 00
06 0074 R 05
JNZ
AND
SUB
CALL
CALL
eMP
JBE
OR
MOV
CALt..
CALL
OREI
MOV
RET
DRERRI
MOV
RET
DISK_RESET
F"ROC
NEAR
AL,INTBOI
I
AL,OBFH
INTBOI,AL
I ENABLE FIXED DISK INTERRUPT
"2
GET THE MASK REG I STER
1 START INTERRUPTS
AL,04H
g~:~~ _REG_PORT
RESET
DELAY COUNT
CX,IO
ex
ORO
, WAIT 4.8 MICRO-SEC
~~;;~~NTROL-BYTE
Dx,AL
NOT BUSY
DREJ(R
~~:~~_PDRT+ I
SET HEAD OPT I ON
TURN RESET OFF
I
I GET RESET STATUS
AL,I
DRERR
OCMD BLOCK+5, OEFH
DL,Dr
INIT DRY
HOISI< RECAL
°
BAD RESET STATUS
SET TO DRIVE
SET MAX HEADS
RECAL TO RESET SEEK SPEED
CHECK FOR DR I VE "I
~~~_NiJM, I
oeMD BLOCK+5,010H
OL,IINIT DRV
HOI sl< RI;:CAL
-aISK:STATUSI,O
TIME OUT ON RESET
I
SET TO DRIVE I
SET MAX HEADS
RECAL TO RESET SEEK SPEED
I GNORE ANY SET UP ERRORS
.DISK_STATUSI,BAD_RESET I CARD FAIL.ED
ENDP
1-------------- ------------ ----------- ---
•••
...
=g~
MDV
SHR
MOV
MaV
SHL
AND
OR
OR
~g~
I --------------------------------- ------I
RESET THE 01 SK SYSTEM
(AH=OOH) I
6.2
6.3
6.5
6 ••
•• T
68.
68.
6 ••
I-T
04-21-86
Version 2.00
1
DISK STATUS ROUTINE
(AH = OIH) 1
1- -- - - -----.,.--- ------------ - --------- ----
0315
0315 AO 00T4 R
O~la C6 06 0014 R 00
OSlO C3
031E
RETURN STATUS
- MOV
MOV
RET
RETURN_STATUS
F"ROC
NEAR
AL,.DISK STATUS I
ODISK_STATUSI,O
, OSTAIN PREVIOUS STATUS
, RESET STATUS
ENDP
DISK
5-119
.-a
Ve ... aion 2.00
04-21-86
O'i
PAGE
0'.
0'0
1----------------------------------------
1------------------------ --------- -------
0 ••
0 ••
69T
698
699
TOO
I
031E
031E C6 46 FE 20
0322 E9 04C6 R
0325
TO.
TOi
TO.
TO.
TO.
T06
0325
Tal
108
T09
T.O
Til
T'i
0325 C6 46 FE 30
0329 E9 0505 R
DlZC
liS
116
TIT
TI8
D32C
D3ZC C6 46 FE 40
0330 E8 05iSt R
0333 15 De
119
720
0335 E8 DSC2 R
0338 15 03
721
033A E8 0630 R
122
723
124
T••
TiO
TiT
0330
0330 CS
033E
T"
T"
138
739
034F 07
0350 E9 050A R
140
0353
T.,
TOI
T••
TOO
T6I
TO.
TO'
TO'
TO.
TOO
T61
TOI
TO.
TTO
TT'
TTi
TT'
TT.
TT.
TTO
TTT
TTl
TT'
TID
MOV
CALL
"NZ
CALL
.lNZ
CALL
PROC
NEAR
OCMD BLOCI(+6.VERIFY CMD
COMMAND
VERF EXIT
1 CONTROLLER STILL BUSY
WAITVERF EXIT
I TIME OUT
CHECR_STATUS
ENDP
FMT TRK PROC
-
MOV
PUSH
PUSH
NEAR
I FORMAT TRACI(
OCMD BLOCI(+6. FMTTRI( CMD
ES -
= 005H)
BX
CAlL
MOV
MOV
POP
GET VEC
.-
ES
POP
(AH
GET 01 SK PARAMETERS ADDRESS
GET SECTORS/TRACI(
SET SECTOR COUNT I N COMMAND
Ae,l!sdBXJ["]
:~MD_8LOCI( + I • AL
eMD_OF
1 GO EXECUTE THE COMMANO
1---------------------------------------I
R":AD DASI) TYPE
("-!of" !5H) :
14.
T••
TOO
TOT
-
FMT _ TRK EHOP
T••
TO.
0151( VERF
06
53
E8 06C'" R
26, SA 47 DE
sa 46 F9
5B
14.
T••
TOi
PRoe
NEAR
OCMD BLOCK+6.WRITE CND
COMMANDO
ENDP
1----------------------- -------------- ---
0342
0343
0344
0347
0348
034E
15.
"MP
DISK_WRITE
1---------------------------------------1
FORMATTING
(AH = 05H) I
732
133
734
735
136
731
T5I
DISK WRITE
MOV
VERF_EXI~~T
033E
033E C6 46 FE 50
TOO
MOV
.ENOP
1---------------------------------------I
DISK WRITE ROUTINE
(AH = DaHl I
1----------------------------------------
DI SK_READ
DISK_YERF
Ti.
14.
I
1----------------------- --------- ----- ---
730
731
,..
-
(AH = D2H)
PROC
NEAR
.CND BLQCK+6.REAO CNo
COMMAND I
-
1---------------------------------------I
DISK VERIFY
(AH = 04H) I
Tn
T.O
T.T
DISK READ ROUTINE
DISK READ
1--- ----- - ----------- -------------------0353
0353
0353 IE
0354 06
0355 53
0356
0359
035E
0362
0365
0367
0369
036C
0370
0314
0376
0319
031A
031C
onE
0380
03a2
03a4
0385
0386
0311
03a8
03aa
038B
0380
038F
0391
0393
READ DASD TYPE
REAO-I) T - - PUSH
PUSH
PUSH
E8 0000 E
C6 06 0074 R 00
8A IE 0075 R
80 E2 7F
3A OA
76 22
E8 06C4 R
261 8A 47 02
261 8A 4F OE
F6 E9
261 8B OF
49
F7 E9
8a CA
8a DO
2a co
B4 03
!Sa
01
IF
Fa
CA 0002
5-120
ASSUME
CALL
DS,DATA
eolSI( STATUS I ,0
MDV
MOV
IMUL
-
NEAR
FAR
MOV
MOV
AND
ClOP
.JI!E
CALL
ROT2.
eABEL
PROC
OS
ES
BX
MOV
DEC
'MUl.
MOV
MOV
SUB
MOV
POP
POP
PDP
cec
RET
OOS
~:;~~_NUM
BL,DL
ROT NOT PRESENT
GET-VEC-
~~:~~:~:~II~lJ
ce
eX,ESI [BX]
CX
CX
CX,DX
DX,AX
AX,AX
AH,03H
BX
ES
OS
GET DR I VE PARAMETERS
SAVE REGISTERS
ESTABLISH ADDRESSING
GET NUMBER OF DR I VES
GET DR I VE NUMBER
RETURN DR I VE NOT PRESENT
GET DISK PARAMETER ADDRESS
HEADS
• NUMBER OF SECTORS
MAX NUMBER OF CYL I NDERS
LEAVE ONE FOR DIAGNOSTICS
NUMBER OF SECTORS
HIGH ORDER HALF
LOW ORDER HALF
INDICATE FIXED DISK
RESTORE REGISTERS
1 CLEAR CARRY
i
ROT NOT PRESENT I
2B
8a
aa
EB
co
C8
DO
FI
DISK
-SUB
MOV
MOV
"lIP
READ_D_T
AX,AX
eX,AX
DX.AX
RDT2
ENOP
DR I VE NOT PRESENT RETURN
ZERO BLOCK COUNT
IBM P.,...on.1 Comput.,.. MACRO A ••• mbl.,..
DISK ----- 09/25/85 nXED DISK 810S
781
782
70.
70'
78.
78.
707
780
70.
7'.
7.,
7.2
793
7 ••
7 ••
7'.
7.7
798
79.
0 ••
0.'
0.2
8 ••
0.'
0.'
0 ••
0.7
8.0
0.'
01.
0"
812
8,.
81.
0,.
.,.
017
810
01.
82.
821
822
02.
02'
.2.
02.
027
820
02.
0'.
0"
1-'
V.,...lon 2.00
04-21-86
PAGE
;I
--------------------------------------GET PARAMETERS
(AH
08H) 1
,- ------------------ --------------------0393
0393
0393 IE
0394 06
0395 53
0396
0399
039B
039E
03AO
03A4
03A6
03AA
03AA
03Ao
0380
0383
03B5
038A
0380
03CO
03C2
03C5
03C7
03C9
03CO
03CF
0303
0305
0309
030B
0308
030C
0300
030E
03EI
03EI
03E6
03Ee
03EA
03EC
03EE
03EF
03FI
B8
8E
F6
74
C4
EB
C4
---- R
oe
C2 0 I
06
IE 0118 R
04
IE 0104 R
Ee 0000 E
80 EA eo
eo FA 02
73 2C
C6 06 0074 R 00
261 eB 07
20 0002
8A E8
25 0300
01 E8
01 Ee
261 OA 47 OE
8A C8
261 8A 77 02
FE CE
8A 16 0075 R
2B CO
58
07
IF
CA 0002
C6
B4
2A
2B
28
F9
EB
06 0074 R 07
07
:0;
GET PARM N
GET:PARMPUSH
PUSH
PUSH
ASSUME
MDV
MOV
TEST
JZ
LES
JMP
LES
ASSUME
G.,
GI,
G.,
LA8EL
NEAR
PROC
fAR
OS
ES
BX
OSIA8S0
AX,A8S0
OS,AX
DL, I
GET DRIVE PARAMETERS
SAVE REG I STERS
I
ESTABLISH ADDRESSING
I CHECK F'OR DR I VE I
G.
BX,OHF'I_T8L_VEC
SHORT GI
8X,OHF T8L VEC
OSIDATA
-
CALL
SUB
CMP
JAE
MOV
MDV
SUB
MOV
AND
SHR
SHR
DR
MOV
MDV
DEC
MOV
SUB
DDS
DL,80H
CL,MAX_FILE
POP
PDP
POP
RE7
BX
ES
OS
MOV
MDV
SUB
SUB
SUB
STC
JMP
ODISK STATUS 1 ,INIT FAIL I OPERATION FAILED
AH,INTT FAIL
AL,AL OX,DX
CX,CX
I SET ERROR FLAG
G.,
co
02
C9
EA
I ESTABLISH SEGMENT
I
G.
ODISK
STATUSI,O
AX,ESI(BX1
AX,2
CH,AL
AX,0300H
AX,1
AX, I
AL,ESI(BXlll4)
CL,AL
DH,ESI (8X] (2)
DH
TEST WITHIN RANGE
I MAX NUMBER OF CYLINDERS
I ADJUST FOR O-N
I HIGH TIO BITS OF CYLINDER
I SECTORS
HEADS
O-N RANGE
DRIVE COUNT
~~::~F _NUM
J RESTORE REG I STERS
2
G'
ENDP
GET_PARM
8.2
0"
0. .
8..
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
e56
0'7
0 ••
8 ••
03FI
03FI
03F5
03F8
03FC
03FE
040 I
0404
0406
0409
0400
0410
0412
0415
0418
041A
0410
041F
0422
0422
0423
C6 46 FE 91
E8 06C4 R
261 8A 47 02
FE C8
8A 66 FD
80 E4 FO
OA EO
88 66 FD
261 8A 47 OE
88 46 F9
28 CO
88 46 F8
E8 055C R
75 08
E8 05F3 R
75 03
E8 0630 R
863
864
865
INIT_EXI~i~L
:
1
~~lN~~H H~igl ~~~:ER
TO MAX HEAD
I MAX SECTOR NUMBER
ZERO FLAGS
TELL CONTROLLER
CONTROLLER BUSY ERROR
WAIT FOR IT TO BE DONE
TIME OUT
CHECR_STATUS
ENOP
1---------------------------------------1
READ LONG
tAH • OAH) 1
1---------------------------------------0423
0423 C6 46 FE 22
0421 E9 04C6 R
042A
0 ••
067
PROC
NEAR
eCMD SLDCK+6, READ CMD OR ECC MODE
COMMAND I
ENOP
,---------------------------------------1
WRITE LONG
tAH
OSHI 1
1---------------------------------------:0;
87.
042A
042A C6 46 FE 32
042E E9 0505 R
0431
PROC
NEAR
eCMD BLOCh6, WR I TE CMD OR ECC MODE
COMMANDO
ENOP
1---------------------------------------SEEK
(AH "" OCHI I
8n
070
87'
e80
e81
elS2
883
884
IS85
e86
881
888
81S9
890
891
8.2
893
:~:~~~~_BLOCK+5
AH, AL
eCMD BLQCK+5,AH
AL,E'J,(BXllI4)
eCMD 8LOCK+ I ,AL
AX,Ai
OCMD BLOCK+3.AL
COMMAND
INIT EXIT
NOT !USY
INIT EXIT
INIT_DRV
8.0
8 ••
87 I
872
873
eT4
87'
87.
~~6
OR
MOV
MOV
MOV
SUB
MOV
CALL
JNZ
CALL
..1HZ
C3
0 ••
8.'
862
I ----- --- --- -- - - --- - - ---------- ---------I
INITIALIZE DRIVE
tAH • 09HI 1
1---- - ---- - -- --------------- ---------- --INIT DRV
PROC
NEAR
MOV
eCMD 8LOCK+6,SET PARM CMD
CALL
GET VEC
1 ES,BX -> PARAMETER 8LOCK
MOV
AL,!S,(BX1l2)
I GET NUMBER OF HEADS
DEC
AL
1 CONVERT TO 0-1 NDEX
1
1----------------------------------------
0431
0431
0435
0438
043A
0430
043F
0442
0447
0449
044E
044E
044F
C6
E8
15
E8
15
E8
eo
76
C6
C3
46 FE 70
055C R
14
06C2 R
OF
0630 R
3E 0074 R 40
05
06 0074 R 00
DISK SEEK
MOV
CALL
JNZ
CALL
JNZ
CALL
CMP
JNE
MOV
OS EXITI
RET
PROC
NEAR
OCMD BLOCK+6,SEEK CMD
COMMAND
OS EX I T
WATT
os EXIT
DISK_SEEK
ENOP
~~T~~-:~~~~~l,BAD
os
ExTT
eDTsK_STATUSI,O
1 CONTROLLER BUSY ERROR
I TIME OUT ON SEEK
SEEK
-
DISK
5-121
Version 2.00
...
•••
•••
•••"
•••
•••,
•••
•••
•••
•••
,.7
899
•• 2
...••••••
......
...'2.
PAGE
,---------------------------------------,
TEST DISK READY
tAH
IOHI ,
=
,---- ---- -.,. -- ---- ----------- ------------044F
044'
0452
0454
0457
045A
E8 05F3 R
75 II
eA 46 FO
SA 01F'6
EE
~::g ~; o~ OO~4 R 00
0466
.2.
...•••.2.
• 21
......•••
.....•••,
.31
93T
9 ••
•• 2
9.'
•••
•••
9"
•••
•••
•••,
•••
•••
•••
~';1
..
•• 2
956
'01
..••••••,
9.'
960
•• 2
•••
•••
9.'
•• T
9'.
•••
'T.
~:~~
"NZ
Mav
MOv
OUT
CALL
"NZ
046£ 75 05
Mav
e6 46 FE 10
£8 05se R
CHECK ST
TR EXOOTSK_STATUSI,O
, WA I T FOR CONTROLLER
I SELECT DRIVE
, CHECK STATUS ONLY
I WIPE OUT DATA CORRECTED ERROR
TR EX,
RET
TsT_RDY ENI;lP
HDISK_RE~~~
CAl.L
75 19
~NZ
£8
74
£8
75
05C2 R
05
0!5C2 R
OF
CALL
E8
aD
75
C6
0630 R
3£ 0014 R 40
05
06 0014 R 00
aD 3E 0074 R 00
C3
"Z
CALL
.JI\IZ
RECAL XI
CALL
CMP
"NE
Mav
RECAL EXITI
CMP
RET
HD I SK_RECAL
PROC
NEAR
.CND BLOCK+6.RECAL ChiD
COMMAND '
REtAL EXIT
*AIT RECAL X
WAIT - .
RECAL_EXIT
J START THE OPERATION
; ERROR
WAIT FOR' COMPLETION
, TIME OUT ONE OK ?
I WA I T FOR COMPLET I ON LONGER
IT! ME OUT TWO TI MES I S ERROR
I
CHECK STATUS
=~b!~::~~~US1,BAD-SEEK
SEEK NOT COMPLETE
!SOl<
001 SK:STATUS I ,0
.DISK_STATUSI,O
ENDP
1- ----------------------------------- ---,
CONTROLLER DIAGNOSTIC (AH :I: 14H) ,
1---------------------------------------048E
048E
048F
0491
0493
0495
0491
0499
0498
049D
CTLR DIAGNOSTIC PROC
NEAR
eLI
AL,INTBO!
IN
ANa
AL.OBFH
FA
E-. AI
24 BF
E8 00
£6 AI
E4 21
24 F8
EB 00
E6 21
1_2
OUT
INTBOI,AL
AI...,INTAOI
AL.OFBH
IN
g;~~ ~
04.\3
04A15
04A8
04AA
04A8
04AE
0480
04B2
0485
0486
0489
.JMP
ANa
"MP
OUT
Mav
EE
OUT
E4
84
15
BA
EC
A2
B4
04BS 3C
0480 74
048F 84
04CI
04CI 88
04C5 C3
04C6
1_2
I DISABLE INTERRUPTS WHILE CHANGING MASK
I TURN ON SECOND INTERRUPT CH I P
I LET INTERRUPTS PASS THRU TO
I
SECOfC) CH1P
INTAOI,AL
STi
05F3 R
15 IA
SA 0 iF?
80 90
WAIT FOR CARD
BAD CARD
CALL
"NZ
~ov
I START DIAGNOSE
CALL
I WAIT FOR IT TO COMPLETE
80
OF
OIFI
"NZ
, TIME OUT QN DIAGNOSTIC
I GET ERROR REG I STER
0080 R
00
MOV
MOV
I SAVE IT
01
02
COP
.JE
I
0~F3
R
MOV
MOV
IN
20
26 0074 R
CHECK FOR ALL OK
gg:rx~~I::
RET
eTLR_DIAGNOSTIC
~NDP
,---------------------------------------I COMMAND I
I
I
REPEATEDLY INPUTS DATA TILL
I
I
NSECTOR RETURNS ZERO
1---------------------------------------t
912
973
974
04C6
04C6 £8 06A 1 R
975
04C' 72 39
976
04CB
aa
CQhlMANOl1
CALL
FB
977
918
.79
04CD EI osse R
04DO 75 32
0402
980
0402 £8 05C2 R
"C
MOV
CHECK DNA
CMD AIJORT
I CHECK 64K BOUNDARY ERROR
01 ,Ix
OALL
"NZ
COMNAND
CND_ABORT
I OUTPUT COMMAND
CALL
"NZ
WAIT
TM OUT
CX-;256P
I WAIT FOR DATA REQUEST INTERRUPT
I TIME OUT
I SECTOR SIZE I", WORDS
CND_I!I
981
0405 75 20
982
'83
04D7 89 0100
04DA SA 01 FO
984
985
986
0400 FA
040E Fe
040' ' . , 60
REP
Oq:I, FB
STI
988
04£2 F6 46 FE 02
TE~T
989
990
991
992
993
994
995
99'
04£6
04£8
04EB
04£0
04F0
04F3
04f'4
Q4F1
997
04'8 £2 '9
998
999
tx
R~CALIBRATE
0466
01-66
046A
0460
046F
0472
0474
0477
0419
0419
047C
0481
0483
0488
0488
048D
048E
.TI
987
NEAR
NOT BUSY
TR
AL-;OCMD BLOCK+!
g~:~~_ptJRT+6
1---------------------------------------I
(AH = IIHI ,
1------------.. ---------------------------
.. 2
'2'
•••
'2.
'2'
'2T
TST_RDY
0458 £8 0642 R
• 11
.. T
1-10
04-21-86
H 12
£8 G61A R
72 17
SA 0 I FO
89 0004
Et
261 88 05
47
04FA £8 0630 R
04FO 75 05
1"
1 000 04FF FE 4E F9
1001 0502
1002 0504
CE
1003 050...
1004 0504 C3
5-122
DISK
MOV
MOV
I:)X,HF _PORT
CLI
CLa
"Z
CALL
"C
Mav
Mav
ChID_121
IN
Mav
INC
LOOP
CMD_131 CALL
"NZ
DEC
"NZ
CMD ABORTI
TM_ilUT!
RET
INS,
I GET THE SECTOR
OCMD BLOCK+6.ECC MODE
ChiD T3
WAIT DRQ
TM OUT
I WAIT FOR DATA REQUEST
I
CHECK FOR NORMAL INPUT
DX"';HF PORT
CX,4 AL,DX
ESIBYTE PTR (01) .AL
I GET ECC BYTES
I GO SLOW FOR BOARD
01
"""
12
CHECK STATUS
CMD A§oRT
.cM15 BLOCK+I
SHORT CMD_I!
I ERROR RETURNED
I CHECK Faa MORE
IBM P.,...on.1 Co",put.,.. MACRO A ••• ",bl.,..
DISK ----- 09/25/85 FIXED DISK BIOS
1005
1006
1001
PAGE
1---------------------------------------1 COMMANDO
looe
1009
1010
1011
1012
1013
1014
1015
1016
1011
1018
1019
1020
1021
1022
1023
1024
1025
1026
1021
10215
1029
1030
1031
1032
1033
1034
1035
1036
1031
1038
1039
1040
1041
1042
1043
1044
1045
1046
1041
1048
1049
1050
1051
1052
1053
1054
1055
1056
1051
1058
1059
1060
1061
1062
1063
1064
1065
1066
1061
1068
1069
1010
lOll
1012
1073
1074
1
1
0505
0505
05015
050A
050C
050F
0511
0514
0516
0511
0518
0519
051C
051F
0520
0521
0523
0524
0525
0529
052B
052E
0530
0533
0536
0539
053A
053B
0530
0530
0540
0542
0545
0547
054C
054E
0551
0552
0554
0556
055B
0558
REPEATEDLY OUTPUTS DATA TILL
NSECTOR RETURNS ZERO
t
1-------------- ----- --- -------------- ----
EI5 06AI R
T2 FA
8B F3
E8 055C R
15 F3
EI5 061A R
72 EE
IE
06
IF
B9 0100
BA OIFO
FA
FC
F3/ 6F
FB
COMMANDOI
CALL
JC
CMO_OFI MOV
CALL
JNZ
CALL
JC
CMC_OII PUSH
PUSH
POP
MOV
MOV
CLI
CLD
REP
TEST
05C2 R
C2
0630 R
BO
06 008C R 08
C8
0lF2
FF
05
06 0074 R BB
I CHECK 64K BOUNDARY ERROR
I OUTPUT COMM ...ND
I W... IT FOR O... TA REQUEST
1 TOO LONG
I MOVE ES TO OS
I PUT THE 0 ... T A OUT TO THE CARO
OUTSW
POP
E8
75
E8
15
F6
75
BA
EC
A8
74
C6
CHECK OMA
CMO AloRT
SI.§X
COMMAND
CMO ABORT
WAIT ORQ
TM DDT
OSES
OS
CX,256D
DX.HF_PORT
ST!
IF
F6 46 FE 02
14 12
E8 061A R
72 04
BA OIFO
B9 0004
261 8A 04
EE
46
E2 F9
JZ
CALL
JC
MOV
MOV
CMO 021 MOV
OUT
OS
.CMO 8LOCK't6,ECC MODE
CMD ~3
WA IT DRQ
TM DDT
Dx7HF PORT
CX.4 AL.ESI8YTE PTR [SI]
DX,AL
INC
51
LOOP
CMO_02
CALL
WAIT
TM OUT
CH~CK STATUS
CMO A§ORT
.HF-STATUS.ST DRQ
SHoRT CMO 01 -
JNZ
CALL
JNZ
TEST
JNZ
MOV
IN
TEST
JZ
MOV
RESTORE OS
CHECK FOR NORMAL OUTPUT
I WA J T FOR 0 ... T A REQUEST
1 OUTPUT THE ECC BYTES
I W... I T FOR SECTOR COMPLETE INTERRUPT
I ERROR RETURNED
I CHECK FOR MORE
~~: ~~_PORT 't 2
CHECK RES I DUAL SECTOR COUNT
AL.OFFH
CMD 04
.CISK_STATUSI,UNOEF_ERR
COUNT = 0 OK
OPERATION ABORTED - PARTI ...L TR ...NSFER
C3
,---- ---------------------------------------------------I COMMAND
I
THIS ROUTINE OUTPUTS THE COMMAND BLOCK
I OUTPUT
BL
ST",TUS
,
1
8H = ERROR REG I STER
=
I
1 - - - ------------- ------- - - - -- - - -------- -- ------ - ---------
055C
055C
0550
0560
0560
0561
0564
0565
0567
056C
056E
0570
0572
53
a9 0600
51
E8 044F R
59
74 OB
80 3E 0014 R 80
1448
E2 FO
EB 49
lOll 0514 C6 06 008E R 00
1018 0579 FA
057A E4
051C 24
051E EB
0580 E6
0582 E4
1084 0584 24
1085 0586 EB
1086 0588 E6
10el 058A FB
1088 0588 33
1089 0580 BA
1090 0!i90 F6
1091 0595 74
1092 0591 8A
1093 059A 24
1094 059C :iC
1095 059E 12
1096 05AO 3C
1091 05A2 17
1098 05A4 80
1099 05A8
1100 05A8 8A
1I0105ABEE
1102 05AC 47
1103 05AO 42
1104 05AE 81
1105 05B2 15
1106 05B4 SF
1107 05B5 C3
110805B6
1109 05B6 C6
11100588
1111 058B 5B
1112 05BC 80
1113 05CI C3
111405C2
COMMAND PROC
PUSH
MOV
COMMAND I I
PUSH
C... LL
POP
JZ
CMP
JZ
LOOP
JMP
COMM ...N021
1015 0512 58
1076 0573 51
1019
1080
1081
1082
1083
V.l"'slon 2.00
AI
BF
00
AI
21
FB
00
21
NEAR
8X
CX.DELAY_2
COMMAND2
PUSH
01
.HF_I NT_FLAG. 0
JMP
OUT
IN
AND
JMP
OUT
DRIVE IS READY
TST_ROY TIMED OUT--GIVE UP
~~~S~T~~~G¥SI. TIME_OUT
COMMAND I
SHORT COMM ...ND4
ax
AND
SAVE LOOP COUNT
CHECK DR I VE READY
TST ROY
CX -
POP
MOV
CLI
IN
WA I T FOR SEEK COMPLETE ... NO RE ... DY
SET INITIAL DELAY BEFORE TEST
CX
KEEP TRYING FOR A WHILE
ITS NOT GOING TO GET READY
RESET I NTERRUPT FLAG
INHIBIT INTERRUPTS WHILE CHANGING M... SK
TURN ON SECOND I NTERRUF'T CH J P
"'L,INT801
AL,OBFH
1'2
INT80 1 ....L
AL.INTAOI
AL.OFBH
LET INTERRUPTS P"'SS THRU TO
SECOND CHIP
1'2
INTAOI.AL
ST!
FF
OIFI
06 0076 R CO
II
46 FE
FO
20
08
40
04
4E FE 0 I
43 F8
FA 0lF8
F4
06 0074 R 20
3E 0014 R 00
XOR
01,01
MOV
DX.HF PORT+I
.CONT'lfOL BYTE. OCOH
COMMAND3-
TEST
JZ
MOV
AND
CMP
Ja
CMP
JA
OR
COMM... ND3:
MOV
OUT
INC
INC
CMP
JNZ
POP
RET
CMO TIMEOUT,
MOV
COMM...ND41
POP
CMP
I NDEX THE COMMAND TABLE
DISK ADDRESS
CHECK FOR RETRY SUPPRESSION
~~:~~~~_BLOCK't6
AL.20H
COMM ...NDS
AL.40H
COMMAND3
.CMD_BLOCK't6.NO_RETRIES I
AL, (.CMD_BLOCK+DI)
DX,AL
01
OX
YES-GET OPER ...TlON CODE
GET RIO OF MODIFIERS
20H-40H IS READ, WRITE. VERIFY
V ... LID OPERATION FOR RETRY SUPPRESS
GET THE COMMAND STR I NG BYTE
GIVE I T TO CONTROLLER
NEXT BYTE I N COMMAND BLOCK
NEXT DISK ADAPTER REG J STER
ALL DONE1
NO--GO DO NEXT ONE
g~M~~N~~RT+8
01
I
ZERO FLAG I S SET
.0ISK_STA.TUSI,8AD_CNTLR
ax
.DISK_STATUS1,O
I SET COND I T I ON CODE FOR CALLER
RET
COMMAND ENDP
DISK
5-123
V.ralon 2.00
1115
1116
1111
1118
1119
1120
1121
1122
I 123
1124
'125
1126
1121
1128
1129
1130
1131
1132
1133
I f34
1135
1136
1131
1138
1139
1140
1141
1142
1143
1144
1145
1146
1141
1148
1149
1150
1151
1152
1153
1-12
04-21-86
PAGE
1- ---------- ------------ - - ------- - -- -- --1
WA I T FOR I NTERRUPT
I
05C2
05C2
05C3
05C5
05C6
05C9
05CB
1---------------------------------------PROC
NEAR
WAIT
Fa
2B
F8
88
CD
12
STI
C9
1----F6
EI
15
FE
15
06 008E R 80
F9
08
05DC
05EI
05E3
05E8
05ED
05F2
05F3
C6
E8
C6
C6
80
C3
06
OA
06
06
3E
05F3
05F3
05F4
05F5
05F1
05FA
11M 05FC
1155 05FD
1156 05FF
1157 0601
11580603
1159 0605
'160 0601
1161 060C
I 162 060E
1163 0613
1164 0614
11650619
t 166 061A
CXICX
MAKE SURE INTERRUPTS ARE ON
I SET INITIAL. DEL.AY BEFORE TEST
AX I 90aaH
I
DEVICE WAIT INTERRUPT
"e
IOH
.T2
I
DEVICE TIMED OUT
MOV
BL.,DEL.AY_I
; SET DEL.A Y COUNT
INT
05CD 83 25
oeCF
0504
0506
0508
05DA
SUB
MOV
eLe
9000
15
OF
ITII
WAIT L.OOP
TEST
LOOPZ
""Z
C8
DEC
"NZ
F3
0014 R 80
WT21
0014 R 00
008E R 00
0014 R 00
1131
IT41
WAIT
I
MOV
"MP
MOV
MOV
COP
RET
ENDP
:~~_INT_FL.AG,8aH
I
TEST FOR INTERRUPT
WT3
I
I NTERRUPT--L.ETS GO
BL
.Tt
; KEEP TRYING FOR A WHIL.E
ODISK STATUSIITIME OUT
SHORT-WT4
-
; REPORT T I ME OUT ERROR
:~S~N~T~~~~!oa
00 I SK_sTATUSI ,0
I SET CONDITION CODE FOR CAL.L.ER
;-------------------------------- -------I
1
WAIT FOR CONTROL.L.ER NOT BUSY
1---------------------------------------PROC
NEAR
Fa
53
28
BA
B3
EC
A8
EO
NOT BUSY
STI
PUSH
C9
OIFl
25
SUB
MOV
MOV
NBII
80
FB
TEST
LOOPNZ
"Z
DEC
14 OB
FE
15
C6
EB
C6
58
80
C3
IN
CB
F5
06 0014 R 80
05
06 0014 R 00
"NZ
MOV
"MP
MOV
POP
3E 0014 R 00
eMP
I
MAKE SURE I NTERRUPTS ARE ON
I
SET INITIAL. DEL.AY BEFORE TEST
BX
CX,CX
OX,HF PORT+7
CAY _ I
:t::
1 CHECK STATUS
~~iST_BUSY
NB2
BL
NBI
.DISK STATUSIITIME OUT
SHORT"-Ne3
OOISK STATUS I ,a
BX
; NOT BUSY--L.ETS GO
KEEP TRYING FOR A WHILE
REPORT T I ME OUT ERROR
-
.OISK_STATUSI,O
, SET COND I T I ON CODE FOR CAL.LER
RET
NOT_BUSY
ENDP
1167
1168
iioi
11 10
IfTl 061A
fl12 06!A
tl13 0610
1114 0620
11115 0621
11160623
, I 17 0625
I 118 0621
I I T9 062C
1180 062D
1181 062E
1182 062F
1183 0630
1184
89 O!OO
8A OlFl
EC
A8 08
75 09
E2 F9
C6 06 0074 R 80
F9
C3
F8
C3
5-124
IQ_II
WQ_OKI
~~V
~~:~~_PoJfT+7
TEST
JNZ
LOOP
~~
ALIST CftQ
WQ OtC
IQ-I
OOTSK_STATUSI,TlME_OUT
1 GET STATUS
1 WAIT FOR DRQ
I KEEP TRYING FOR A SHORT WHILE
I ERROR
RET
CL.C
RET
IAIT CRQ
ENOP
1---=---------------------------- --------
tt85
t 186
1187 0630
1188 0630
1189 0633
1190 0635
1191 0637
1192 0639
1193 063C
1194 063C
11950641
1196 0642
1197
t 198
1199
1200 0642
1201 0642
1202 0645
t 203 0646
1204 0649
1205 0648
1206 064D
1207 064F
1208 0651
1209 0653
1210 0655
1211 0657
1212 0659
1213 0658
1214 0650
1215 065F
1216 0661
1211 0663
1218 0665
1219 0667
1220 0669
1221 0669
1222 0660
1223 0670
1224 0672
1225 0675
1226 0675
1221 0676
1---- ---------------------------- - - -----I
WAI T FOft CATA ftt::QUt::ST
I
1--- - ------------------- - -------- - - -- - --WAIT_DRQMOV
~~~gELAyN~AR
,
CHECK FIXED DISK STATUS
:
,- ---------------------------------------
£8
15
A8
74
E8
0642 R
07
01
03
0676 R
80 3E 0074 R 00
C3
CHECK STATUS
CAL.L.
JNZ
TEST
JZ
CAL.L.
CHECK SII
CMP
RET
CHECK STATUS
PROC
NEAR
CHECK ST
CHECK-S I
AL. ST-ERROR
CHECK-SI
CHECK-ER
.DISK_STATUSI ,0
CHECK THE STATUS BYTE
AN ERROR WAS FOUNO
; WERE THERE ANY OTHER ERRORS
I NO ERROR REPORTED
; ERROR REPORTED
I
I
I SET STATUS FOR CAL.LER
ENDP
1----=------------------------- ------.--,
CHECK FIXED DISK STATUS BYTE
I
1---------------------------------------8A
EC
A2
B4
A8
75
B4
A8
15
84
A8
74
84
A8
74
84
A8
15
84
0lF7
88
80
74
80
26 0074 R
FC f I
03
FC 00
008C R
00
80
IA
CC
20
14
AA
40
OE
40
10
08
II
04
02
00
CHECK_STMOV
IN
MOV
NOV
TEST
JNZ
MaV
TEST
JNZ
MaV
TEST
JZ
MOV
TEST
JZ
MaV
TEST
JNZ
MOV
CKST EXITs
MOV
eMP
"Z
eMP
CKST EXII
RET
CHECK_ST
C3
DISK
~~~~ PO~~!~
AL.IDX.HF STATUS,AL.
AH,'U'
ALIST BUSY
CKST fXJT
AH,wlfITE FAUL.T
AL., ST IRf FL. T
CKST fXITAH.Ni5T ROY
AL., ST J!fEADY
CKST fXlT
AHIBAD SEEK
AL I ST !EEK COMPL
CKST fXIT AH,D'lTA CORRECTED
AL., ST C&tRCTD
CKST fXIT
AHIOODISK STATUS I ,AH
AHIDATA CORRECTED
CKST_EXT
AH,a
ENDP
I GET THE STATUS
IF STILL BUSY
REPORT OK
; CHECK FOR WRITE FAUL.T
; CHECK FOR NOT READY
1 CHECK FOR SEEK NOT ,COMPL.ETE
; CHECK FOR CORRECTED ECC
SET ERROR FLAG
KEEP GO I NG WITH OAT A CORRECTED
V.ralDn 2.00
1228
1229
1230
1231
1232 0616
1233 0676
1234 0679
1235 061A
1236 061D
1237 061E
1238 0681
1239 0613
1240 0611
1241 0687
1242 068A
1243 068C
1244 068F
1245 0693
1246 0694
124T 0697
1248 0698
1249 0699
1250 0690
1251 D6AI
1252
1253
1254
1255
1256
1251
1258
1259
1260
1261
1262 0"'1
1263 06AI
1264 06A2
1265 06A5
1266 0"'9
1267 06AI
1261 06AE
1269 0611
1270 0683
12TI 06115
12T2 0617
1273 0619
12T4 061A
12T5 0611
12T6 061C
1277 0610
1278 06C2
12T9 06C3
1210 06C4
1211
1212
1283
1284
1285 06C4
I 216 06C4
I 287 06C6
1288
1219 D6CI
12'0 06C8
1291 06CD
1292 0602
1293 0604
12'40604
1295 0609
1296 0609
1297 060A
1298
1299
1300
1301
1302
1303
1304
1305 060A
1306 06D...
130T 06D8
1301 06DC
130. 06DF
1310 06E4
1311 06E6
1312 06EI
1313 06E...
13t4 06EC
1318 06ED
1316 06EE
131T 06FI
1311 06F3
1319 06F4
1320 06F8
1321
1322 06F8
1323
1324 06FD
1325
1-13
04-21-16
.,-------------------------------------------------------------------------------
PAGE
,
IA
EC
A2
a3
19
DO
72
E2
OIFI
008D R
0008
EO
02
FA
la 0698 R
03 D9
2E I 8A 27
88 26 0074 R
51
80 FC 00
C3
EO
02 40 01 I I
04 I I 10 OA
CHECK F I XED DISK ERROR REG I STER I
CI£CK ER
~~V
MOV
PUSH
MOV
CKI,
StL
.JC
LOOP
CK21
MOV
ADD
MDV
CKEX,
=
ClIP
RET
PROC
NEAR
~~:~~-PORT+I
1 GET THE ERRDR REG I STER
.HF ERRDR. AL
ax -
CX,8
AL,I
CK2
CKI
IX, OFFSET ERR TIL
IX.CX
AH,IYTE PTR CSI (ax]
:~'SK-STATUSI,AH
TEST ALL lIlTS
MOVE NEXT ERROR I I T TO CARRY
I FOIJM) THE ERROR
1 KEEP TRYING
1 COW'UTE ADDRESS OF
I ERROR ccoe
I GET ERROR CODE
1 SAYE ERROR CODE
AH,O
ERR_TIL :
DB
CHECK_ER
1-------------------------------------------------------Ct-ECK
1
1
I
1
1
I
DNA
I
-CHE~ ESIIX AND' SECTORS TO MAKE SURE THAT IT WILL
FIT WI THOUT SEGMENT OVERFLOW.
-ESlaX HAS IEEN REVISED TO THE FORMAT SSSS,OODX
-OK IF • SECTORS < 10H I7FH IF LONG READ OR WRITE)
-OK IF • SECTORS. 80H I7FH) AND IX <. OOH (04H)
-ERROR OTHERW' SE
I
I
,
I
I
,
1-------------------------------------------------------I
50
18
F6
74
BI
3A
77
72
3A
72
F8
58
C3
F9
C6
51
C3
CHECK_DM~SH
8000
46 FE 02
03
7F04
66 F9
06
07
C3
03
06 0074 R 09
MQY
~~ST
::OC
NEAR'"
AX.IOOOH
~~-BLOCK+6,ECC-MODE
CKDII
MaY
3~
AX. 7F04H
~~O:MD_ILOCK+I
CKDERR
AL,BI..
CKDERR
CKDOKI
..JEI
CMP
oJI
CLC
PDP
AX
POP
RET
CHECK_DMA
AL
III
MAX OFFSET
I ECC IS 4 MORE BYTES
1 NUMIER OF SECTORS
1 IT WILL FIT
1 TOO MANY
I CHECK OFFSET ON MAX SECTORS
1 ERROR
1 CLEAR CARRY
1 NORMAL RETURN
1 INDICATE ERROR
RET
CKDERRI STC
MOY
I SAYE REGISTERS
1 AH • MAX' SECTORS
.oISK STATUS I ,OMA IOUNDARY
AX
-
1----------------------------------------
1
SET UP ESaIX-> DISK PARMS
a
1----------------------------------------
2B CO
8E CO
GET_ VEC
F6 C2 01
74 07
261 C4 IE 01 HI R
EI 05
:~~C
~~:X
MOV
ASSUME
TEST
oJZ
LES
oJMP
ES,AX
ES I ABSO
DL, I
GV 0
aCt..... I TaL VEC
SHORT GV_ExTT
1 GET 0 I SK PARAIlETER ADDRESS
I ES I IX
-> DR I VE
1 ESIIX
->
GV_O.
261 C4 IE 0104 R
PARAMETERS
DRIYE PARAMETERS
C3
1--- HARDWARE INT
I
•
I
76H -- ( IRQ LEYEL
14) ------------------------------------
F I XED 0 I SK I NTERRUPT ROUT I NE
1------------------------------------------------------------------------------I
PROC
50
IE
E8
C6
10
E6
EI
E6
IF
FI
II
CD
88
CF
PUSH
PUSH
0000 E
06 ODIE R FF
20
AD
00
20
CALL
MOY
MaY
OUT
JMP
OUT
POP
STI
MOY
9100
Ie
INT
POP
IRET
NEAR
AX
DS
OOS
.HF INT FLAG.OFFH
AL.!OI INTBOO,AL
1+.
INTAOO,AL
as
AX.9100H
I.H
AX
1 ALL DONE
I NON-SPEC I F I C END OF INTERRUPT
1 FOR CONTROLLER .2
I WAIT
I FOR CONTROLLER • I
1 RE-ENAILE INTERRUPTS
I DEYICE POST
I
INTERRUPT
1 RETURN FROM INTERRUPT
ENDP
31 31 2F 31 35 2F
38 35
OB
CODE
, 11/15/85'
1 RELEASE MARKER
ENDS
ENO
DISK
5-12$
I-I
04-21-86
Vel"'alon 2.00
I
••
••,
4
PAGE 111.121
TITLE KyaD ----- 03/06/86 KEYBOARD BIOS
.LIST
CODE
SEGMENT BYTE PUBL I C
0000
PUBLIC
PU8L I C
I."
••
PUBLIC
1<16
KEYBOARD 10 I
ICB INT ,-
PUBLIC
SNI5_DATA
I.
EXTRN
BEEP I NEAR
EXTRN
DDS I NEAR
"
I.
"
EXTRN
K61 ByTE
EXTRN
EXTRN
K6LIAB5
KTI BYTE
17
EXTRN
EXTRN
K81 BYTE
KID,BYTE
EXTRN
16
II
19
EXTRN
.,••
.
.
.
••
••
••••n
.,••
••s,
••••n
••
.,••
••
••••••
.,••
••.,.0••
••
.s
••••
••
••••••
••
.S
••••
.0
START liNEAR
K I I I BYTE
EXTRN
EXTRN
K 121 BYTE
KI41BYTE
EXTRN
!CISIBYTE
1--- I NT 16 H --------------------------------------------------------.---.-----
I KEYBOARD I/O
I
I
THESE ROUT I HES POROV I DE READ KEYBOARD SUPPORT
INPUT
(AH). OOH
J
I
•0
READ THE NEXT ASCII CHARACTER ENTERED FROM THE KEYBOARD,
RETURN THE RESULT IN (AL). SCAN CODE IN (AH) •
I
THIS IS THE COMPATIBLE READ INTERFACE. EQUIVALENT TO THE
I
STANDARD PC OR PCAT KEYBOARD
I
I - - - ------------------- ---- -- - --------- ----------- - - ----- - ----- - ------- - - - - - - --I
I
(AH)_ OIH SET THE Z Fl.AG TO INDICATE IF AN ASCII CHARACTER IS
I
I
AVAILABLE TO BE READ •
(ZF) _ I -- NO CODE AVAILABLE
(ZF) _ 0 -- CODE IS AVAIl.ABLE (AX) = CHARACTER
IF (ZF).. O. THE NEXT CHARACTER I N THE BUFFER TO BE READ I S
IN (AX). AND THE ENTRY REMA I NS I N THE BUFFER.
THIS IILL RETURN ONLY PC/PCAT KEYBOARD COMPATIBLE CODES
I
I
I
I
1
39
I
1----------------- ------------------ ----- --- ------ -- ------- --- ----- ----- -------1
I
(AHI_ 02H RETURN THE CURRENT SHIFT STATUS IN AL REGISTER
I
THE BIT SETTINGS FOR THIS CODE ARE INDICATED IN THE
I _________________ !~~_~~~~!~~_~~~_!~~=~~~~
I
____________________________________ II
(AHI_ 03H SET TYPAMATIC RATE AND DELAY
(AL) _ 05H
(BLI .. TYPAMATIC RATE
(BITS 5 - 7 MUST BE RESET TO 0)
REGISTER
VALUE
RATE
SELECTED
REG I STER
VALUE
DOH
DIH
02H
DSH
D'H
D.H
OOH
D'H
.BH
30.0
26.7
24,0
21.8
20.0
18.5
17.1
16.0
15.0
13.3
12.0
10.9
10.0
IDH
.,
61
•• H
DAH
DBH
DCH
DOH
DEH
DFH
..••'0
n
REGISTER
VALUE
OOH
a IH
02H
RATE
SELECTED
'.5
5.'
5.0
'.0
4.S
O. ,
:~~
"H
I.H
!.~
ISH
10H
17H
4.0
S. ,
IBH
I9H
IAH
IBH
ICH
loH
IEH
IFH
...
S.O
B.D
(BHI _ TYPAh4ATIC DELAY (BITS 2
",.
,.,.,.'s
,.,."
S.3
..0
2. ,
2.5
'.3
2.1
2.0
7 MUST BE RESET TO 0)
DELAY
VAl.UE
250 ma
500
750 ma
m.
1000
--- --------------------03H-----------------------------------------------------:
(AH I.. 05H PLACE ASC I I CHARACTER I SCAN CODE COMB I NAT I ON I N KEYBOARD
:
ma
.0
BUFFER AS IF STRUCK FROM KEYBOARD
ENTRY:
(CLI = ASCII CHARACTER
(CH I • SCAN CODE
(ALI = OOH = SUCCESSFUL OPERATION
(AL) = OIH = UNSUCCESSFUL - BUFFER FULL
FLAGS. CARRY IF ERROR
B.
BI
.S
EXIT:
••••
••B'
.
••••
••'0••
.
I
I
I
1--- -- --------------- - - - - - - -- ------ - ------ -- - - - ------ -- --- - - -- --- - - - - - -- ------- I
I
(AHI= 10H EXTENDED READ INTERFACE FOR THE ENHANCED KEYBOARD.
I
I
OTHERWISE SAME AS FUNCTION AH=O
I
1------ - - ---- ---------------- - - - - - -- - --- - - -- - ----------- - - - ------ - - ---- -- - - - - -- I
I
(AH) = l1H EXTENDED ASCII STATUS FOR THE ENHANCED KEYBOARD,
I
I
OTHERW ISE SAME AS FUNCT I ON AH= 1
I
.B
.0
tI
1----- -- ----------- -- -------- ----- -------- ------- -- ----- --- --- --------------1
~-
I
I
(AH). 12H
1
I
I OUTPUT
n
100
101
102
103
-
1
I
~
RETURN THE EXTENDED SHIFT STATUS IN AX REGISTER
AL = B ITS FROM KB FLAG. AH
BITS FOR LEFT AND RIGHT
CTL AND AL T KEYS F'ROh4 KB FLAG 1 AND KB FLAG :3
=
-
-
1
--
AS NOTED ABOVE, ONLY (AX) AND FLAGS CHANGED
ALL REGISTERS RETAINED
I
1--------- ------------------ ----- ----------- ------ --- ----- ---- ---- ------ -------ASSUME
0000
104
0000 FB
105
106
107
I De
109
110
111
0001
0002
0003
0004
112
0000 T4 3E
113
114
DOOF FE CC
001174 6B
IE
53
51
E8 0000 E
0007 0" E4
0009 74 20
DaDa FE CC
5-126
KYBD
KEYBOARD 10 1
!TIPUSH
PUSH
PUSH
CALL
DR
"Z
DEC
"Z
DEC
"Z
CSICODE.DSIDATA
PROC
OS
BX
CX
DDS
AH.AH
KI
AH
K2
AH
KS
FAR
>>> ENTRY POINT FOR ORG OE82EH
I NTERRUPTS BACK ON
SAVE CURRENT OS
SAVE BX TEMPORAR I LY
SAVE CX TEMPORAR I L Y
ESTABLISH POINTER TO DATA REGION
CHECK FOR (AHI = OOH
ASCII READ
CHECK-FOR (AH)
0 1H
=
~~~~~_~6~T~~HI = 02H
SHIFT_STATUS
1-2
Veralon 2.00
04-21-86
lIS 0013FECC
1160015746C
117 0017 80 EC 02
118 001A 75 03
119 ODIC E9 00A4 R
120 OOIF 80 EC OB
121
0022 74 DC
I 22 0024 FE CC
123 0026 74 lA
I 24
0028 FE CC
125 002A 74 39
126 002C
127 002C 59
128 0020 58
129 002E IF
130 002F CF
131
132
13.
134
135
136
0030 E8 00C7 R
0033 E8 0125 R
0036 EB F4
I3T
138
139
140
141
0038
0038
003E
0040
E8
E8
72
fB
00C7 R
0130 R
F8
EA
I ••
145
146
147
148
149
0042
0045
0047
0048
0048
E8
74
9C
E8
EB
0103 R
18
0040
0050
0052
0653
0056
0058
0059
005C
E8
74
9C
E8
73
90
E8
EB
0103 R
00
005E
005F
0060
0061
0062
90
59
5B
IF
CA 0002
,.2
I.,
".
151
152
153
154
155
156
157
158
I ••
160
161
162
163
164
I.,
I ••
I.T
168
169
170
171
172
173
174
175
176
III
178
179
180
,.,
,.2
I ••
184
185
186
187
188
189
190
191
192
193
194
195
196
197
I ••
'"
DEC
JZ
sua
JNZ
JMP
KIOII
SUB
JZ
DEC
JZ
DEC
JZ
KID EXITI
POP
PDP
POP
IRET
1------
CHECK FOR (AH). 03H
SET TYPAMATIC RATE/DELAY
CHECK FOR t AH JII 05H
AH
K300
AH.2
KIOI
K500
AH.II
KIE
KEYBOARD WR I TE
AH • 10
EXTENDED ASC I I READ
CHECK FOIir IAH)i' 11H
EXTENDED ASCII STATUS
CHECK FOIir IAHli' 12H
EXTENDED_SH 1FT_STATUS
AH
K2E
AH
K.E
cx
RECOVER
RECOVER
RECOVER
INVALID
ax
os
REG I STER
REG I STER
SEGMENT
COMMAND
ASC II CHARACTER
KIEI
CALL
CALL
JMP
KIS
KID E XLAT
KIO:EiIT
GET A CHARACTER FROM THE BUFFER I EXTENDED)
ROUT I NE TO XLATE FOR EXTENDED CALLS
GIVE IT TO THE CALLER
KII
CALL
CALL
JC
JMP
KIS
KID S XLAT
KI - KID_EXIT
GET A CHARACTER FROM THE BUFFER
ROUT I NE TO XLATE FOR STANDARD CALLS
CARRY SET MEANS THROW CODE AWAY
RETURN TO CALLER
KIAs
,------ ASCII STATUS
K2Es
0125 R
II
K21
0130 R
06
00C7 R
EF
K2AI
K2Bs
1-----0065
0065
0069
006C
006E
0070
0073
0075
DOll
007A
007C
007E
0081
0083
0085
0087
008A
008C
008F
0091
0093
0096
0099
009B
0090
009F
00A2
CALL
.JZ
PUSHF
CALL
.JMP
CALL
.JZ
PUSHF
CALL
.JNC
PDPF
CALL
.JMP
POPF
POP
POP
POP
RET
TEST FOR CHARACTER IN BUFFER (EXTENDED)
RETURN I F BUFFER EMPTY
SAVE ZF FROM TEST
ROUT I NE TO XLATE FOR EXTENDED CALLS
GIVE IT TO THE CALLER
K2S
K2B
KIO E XLAT
SHOl'T-K2A
K2S
K2B
TEST FOR CHARACTER IN BUFFER
RETURN I F BUFFER EMPTY
SAVE ZF FROM TEST
ROUTINE TO XLATE FOR STANDARD CALLS
CARRY CLEAR MEANS PASS VALID CODE
I NVAL I 0 CODE FOR TH I S TYPE OF CALL
THROW THE CHARACTER AWAY
GO LOOK FOR NEXT CHAR I I F ANY
KID S XLAT
K2A- KIS
K2
RESTORE ZF FROM TEST
RECOVER REG I STER
RECOVER REG I STER
RECOVER SEGMENT
THROW AWAY FLAGS
ex
BX
OS
2
SHIFT STATUS
K3EI
8A
80
BI
02
AD
24
OA
AD
26 0018 R
E4 04
05
E4
00 I 8 R
73
EO
0096 R
~4 DC
OA EO
AD DOll R
EB A9
3C
75
F6
75
F6
T5
BO
E8
B9
02
8A
OA
E8
EB
05
A5
C3 EO
AD
C7 FC
9B
F3
06-4S R
0005
E7
C3
C7
064B R
88
MOV
AND
MDV
SHL
MOV
AND
OR
MOV
AND
GET THE EXTENDED
GET SYSTEM SHIFT
MASK ALL SUT SYS
SHIFT THE SYSTEM
BIT 7 POSITION
GET SHIFT STATES
AH ,OKS FLAG I
AH,SYS-SHIFT
CL I 5 AH,CL
AL ,OKB FLAG I
AL,OllTOOlll!J
AH.AL
AL.oKB FLAG 3
AL.OOO'liIIOOI!J
AH,AL
AL,oKB FLAG
KID_EXTT
1------
SET TYPAMATIC RATE AND DELAY
AL I 5
KIO EXIT
BL,'liEOh
KID EXIT
BH.'liFCh
KID EXIT
AL,RB TYPA RD
SND DlTA CX,!
BH.CL
ALIBL
AL,BH
SND DATA
KIO:EXIT
AND INS_SHIFT
GET RIGHT CTL AND ALT
ELIMINATE LC EO AND LC EI
OR THE SH I FT-FLAGS TOGETHER
GET THE SHIFT STATUS FLAGS
RETURN TO CALLER
OR
MOV
JMP
CMP
JNE
TEST
JNZ
TEST
JNZ
MOV
CALL
MOV
SHL
MOV
OR
CALL
JMP
BACK
~~~~~N~~~ ~~~l~~:~~fB7~~DT~~~T~H
K.,
K3001
SHIFT STATUS FLAGS
KEY STATUS
KEY BIT
KEY BIT OVER TO
1 CORRECT
I
FUN~T
I ON CALL?
NO , RETURN
1 TEST FOR OUT-OF-RANGE RATE
I RETURN I F SO
I
I
I
I
I
I
1
I
1
1
TEST FOR OUT-QF'-RANGE DELAY
RETURN I F SO
COMMAND FOR TYPAMATIC RATE/DELAY
SEND TO KEYBOARD
SHIFT COUNT
SH I FT DELAY OVER
PUT IN RATE
AND DELAY
SEND TO KEYBOARD
RETURN TO CALLER
,------ WRITE TO KEYBOARD BUFFER
2 ••
201
202
203
204
205
206
207
208
209
210
21 I
212
213
214
215
216
217
00A4
00A5
00A6
OOAA
OOAC
OOAF
00B3
00B5
00B7
OOBB
OOBO
OOCO
OOCO
00C2
00C2
00C3
00C4
56
F'A
8B
8B
E8
38
74
89
89
2A
EB
K500,
IE ODIC R
F3
0168 R
IE OOIA R
DB
DC
IE ODIC R
CO
03 90
PUSH
CLI
MOV
MOV
CALL
CMP
JE
MOV
MOV
sua
51
I
:~::~UFFER_TAIL
K.
~~O;BUFFER_HEAD I
[51
J ,CX
I
I
:~~~[ER_ TAl L I BX I
SAVE SI
GET THE ~ IN TO~ POINTER TO THE BUFFER
SAVE A COPY I N CASE BUFFER NOT FULL
BUMP THE POINTER TO SEE IF SUFFER IS FULL
WILL THE BUFFER OVERRUN I F WE. STORE TH IS?
YES - I NFORM CALLER OF ERROR
NO
- PUT THE ASC I 1/ SCAN CODE 1NTO BUFFER
AO.JUST ~ IN TO" POINTER TO REFLECT CHANGE
TELL CALLER THAT OPERATION WAS SUCCESSFUL
SUB INSTRUCTION ALSO RESETS CARRY FLAG
JMP
K50-4
J
I
MOV
ALIOtH
J BUFFER FULL INDICATION
K502,
BO 01
K50-4.
FB
5E
E9 002C R
511
POP
JMP
I RECOVER S I
I RETURN TO CALLER WITH STATUS IN AL
21.
219
00C7
KYBD
5-127
1-'
V.ralon 2.00
04-21-86
,.0
'"•••
223
OOCl
224
225
226
DOCT 88 IE DOIA R
DOCe 38 IE ODIC R
DoeF 75 07
,.7
PAGE
,------ READ THE KEY TO FIGURE OUT WHAT TO DO ------------------------
228
229
OODI B8 9002
0004 CD 15
230
0006
231
0006 FB
0007 90
0008
0009
0000
OOEI
00E2
00E3
00E6
OOEA
aOEe
DOEF
245
OOF I E8 069A R
OOF ... FA
246
OOFS 90
247
248
OOF6 58
OOFT T4 DO
250
OOF' 88 07
251
252
253
254
OOFe E8 0168 R
OOFE 89 IE DOlA R
0102 C3
0103
FA
88
38
53
9C
E8
8A
32
80
74
KIUI
IE OOIA R
IE 00 Ie R
0608 R
IE 0097 R
08
E3 07
04
'55
0104
0108
Dloe
010E
OIOF 50
0110 E8
0113 8A
0117 32
011980
"'S
'80
.81
289
290
0125
0125
0127
0129
012B
0120
Ol2F
012F
ac
FO
75 06
295
296
297
298
299
300
301
302
303
304
305
'06
307
308
K2TI
MAKE LED
:~::EB_FLAG_2
BL,07H
"'V
SNO_LED!
GO TURN ON MODE INDICATORS
DISABLE INTERRUPTS
RESTORE FLAGS
RESTORE ADDRESS
LOOP UNT I L SOMETH I NG I N BUFFER
ex
KIT
AX, [ex]
GET SCAN CODE AND ASC II CODE
MOVE PO I NTER TO NEXT POS I T I ON
STORE VALUE IN VARIABLE
RETURN
K'
.BUFFER_HEAD,ax
PROC
NEAR
eLI
Mav
eMP
Mav
PUSHF
BX, .BUFFER HEAD
BX,OBUFFER:TAIL
AX, [ex]
CALL
POP
POPF
SAVE FLAGS
SAVE CODE
GO GET MODE INDICATOR DATA BYTE
GET PREVIOUS BITS
SEE I F ANY 0 I FFERENT
ISOLATE INDICATOR BITS
IF NO CHANGE BYPASS UPDATE
:~::ES_FLAG_2
BL,07H
".T
SND LED
AX -
GO TURN ON MODE INDICATORS
RESTORE CODE
RESTORE FLAGS
i NTEARUPTS BACK ON
I RETURN
i
".S
RET
ENDP
1------
ROUTINE TO TRANSLATE SCAN CODE PAIRS FOR EXTENDED CALLS
KIO_E_XL~~
JNE
OR
JZ
xaR
ALIOFOh
KIO E RET
AH,AHKID E RET
AL.AL-
K I O_E_RE~~T
C3
I NTERRUPTS OFF
GET HEAD PO INTER
IF EQUAL (Z=I) THEN NOTHING THERE
AX
MAKE LED
STO
OA. E4
74 02
32 CO
'"•••
•••
•••
BX, .SUFFER_HEAD
BX,.SUFFER_TAIL
ex
RET
ENOP
PUSH
CALL
Mav
xaR
ANa
JZ
0608 R
IE 0097 R
08
E3 07
274
275
276
271
278
283
284
285
286
287
288
POPF
f'Of'
JZ
MOV
88 IE OOIA R
38 IE ODIC R
88 07
9C
Glle 74 03
.8'
MOVE IN WAIT CODE & TYPE
PERFORM OTHER FUNCT I ON
ASCII READ
I NTERRUPTS BACK ON OUR I NG LOOP
ALLOW AN I NTERRUPT TO OCCUR
I NTERRUPTS BACK OFF
GET PO I NTER TO HEAD OF BUFFER
TEST END OF SUFFER
SAVE ADDRESS
SAVE FLAG
GO GET MODE INDICATOR DATA BYTE
GET PREV 10US BITS
SEE IF ANY DIFFERENT
ISOLATE INDICATOR BITS
IF NO CHANGE BYPASS UPDATE
15"
,------ READ THE KEY TO SEE IF ONE IS PRESENT ------------------------
Oiii::£,suoo,R
0121 58
0122 90
0123 FB
0124 C3
0125
.7.
Nap
eLI
Mav
eMP
PUSH
PUSHF
CALL
Mav
xaR
ANa
JZ
Mav
CALL
".S
0103
0103 FA
271
'7'
.2ia
AX.09002H
GET PO I NTER TO HEAD OF SUFFER
TEST END OF BUFFER
IF ANYTH I NG I N BUFFER DONT DO INTERRUPT
eLI
.65
266
267
268
269
270
Mav
INT
CALL
KIVI
"6
.57
'58
259
260
261
262
263
264
NEAR
BX ••SUFFER_HEAD
~~U·8UFFER_TAIL
STO
232
•••
PROC
MaV
eMP
JNE
KITI
233
234
235
236
231
238
239
240
241
242
'43
244
"'S
IS IT ONE OF THE FILL-INs?
NO, PASS IT ON
AH = 0 IS SPECIAL CASE
PASS THI S ON UNCHANGED
OTHERW I SE SET AL
0
=
; GO BACK
,------ ROUTINE TO TRANSLATE SCAN CODE PAIRS FOR STANDARD CALLS
0130
0130
0133
0135
0137
0139
0138
0130
013F
0142
0144
80
75
3C
74
3C
74
B4
EB
84
EB
FC EO
12
00
09
OA
05
35
23 90
IC
IE 90
0147 80 FC 84
014A 77 IA
K I O_S_XL~~~
eMP
JE
Mav
JMP
KIO_Sl. MOV
JMP
AH,OEOh
KID 52
AL,ODh
KIO 51
ALIOAh
KID SI
AH,'a'5h
KID USE
AH. TCh
KIO_USE
I SIT KEYPAD ENTER OR f ?
NO, CONTINUE
KEYPAD ENTER CODE?
YES, MASSAGE A 81T
CTRL KEYPAD ENTER CODE?
YES I MASSAGE THE SAME
NO, MUST BE KEYPAD I
GIVE TO CALLER
CONVERT TO COMPATIBLE OUTPUT
GIVE TO CALLER
JNE
e ...
JE
K10_521 CMP
JA
AH.84h
KID_DIS
J SIT ONE OF THE EXTENDED ONES?
014C
014E
0150
0152
0154
3C
75
OA
74
EB
FO
07
E4
10
10 90
eMP
JNE
OR
JZ
JMP
AL.OFOh
KID S3
AH,AH
KIO USE
KIO:DIS
IS IT ONE OF THE FILL-INa?
NO, TRY LAST TEST
AH
0 IS SPECIAL CASE
PASS THI S ON UNCHANGED
THROW AWAY THE REST
321
0157
0159
0158
0150
015F
0161
3C
75
OA
74
32
EB
EO
09
E4
05
CO
01 90
K10_S31 CMP
JNE
OR
JZ
xaR
JMP
ALIOEOh
KID USE
AH,AH
KID USE
AL.AL
KIO_USE
IS IT AN EXTENSION OF A PREVIOUS ONE?
NO. MUST BE A STANDARD CODE
AH = 0 IS SPECIAL CASE
.JUMP IF AH II 0
CONVERT TO COMPATIBLE OUTPUT
PASS I T ON TO CALLER
323
324
325
326
327
328
0164
0164
0165
0166
0166
0167
'0'
310
311
312
313
314
.. 5
316
317
318
319
320
•••
5-128
KID_USE. CLC
F8
C3
RET
KIO_DISI
F9
C3
STC
RET
KYBD
YES, THROW AWAY AND GET ANOTHER CHAR
=
CLEAR CARRY TO INDICATE GOOD CODE
RETURN
SET CARRY TO I NO I CATE 0 I SCARD CODE
RETURN
1-'
V.rslon 2.00
04-21-86
...'2'
;--------------------------------- ----- --- ----- ---------- ------------I
J NCREMENT BUFFER PO I NTER ROUT J NE
PAGE
330
332
33.
334
335
01615
0168 43
336
01Et~
338
339
340
341
342
016A 38 IE 00152 R
016E 75 04
0110 as IE 0080 R
0114 C3
0175
.
.,
•••
•••
•••
•••
•••
•••
1-- ------ - ----------- --- - ------- ------ -- ----------- -- - ---------- --- - --
K.
43
~~t.BUFFER-END
BX
BX
I
;--
351
0175 Fe
352
353
354
355
356
31ST
358
359
0116
Dill
0118
0119
011A
0118
Olle
0110
360
017E 06
361
362
OllF Fe
0180 E8 0000 E
366
0183 BO AD
361
0185 E8 Due R
368
369
370
371
312
373
0188
0189
0188
0188
0180
Ol8F
31T
0191 E460
t IRQ LEVEL
55
50
53
51
52
56
51
IE
1----FA
28 C9
E4 64
A8 02
EO FA
FAR
I
01
OS
ES
1 FORWARD 0 I RECT I ON
1 SET UP ADDRESSING
DOS
WAIT FOR KEYBOARD OISABLE COMMAND TO BE ACCEPTED
MOV
CALL
CLI
SUB
KB_INT_O:~
TEST
LOOPNZ
CX,CX
o I SABLE THE KEYBOARD COMMAND
EXECUTE 0 I SABLE
o I SABLE INTERRUPTS
SET MAXIMUM TIMEOUT
AL , STATUS PORT
AL, I NPT BUF FULL
KB_INT_OI
-
READ ADAPTER STATUS
CHECK INPUT BUFFER FULL STATUS BIT
WI. I T FOR COMMAND TO BE ACCEPTED
AL,DIS KBO
SHIP_IT
1-----
READ CHARACTER FROM KEYBOARD INTERFACE
;-----
SYSTEM HOOK
IN
AL,PORT_A
MOV
STe
INT
AH,04FH
385
386
0198 72 03
019A E9 03AO R
JC
JMP
KB INT 02
K26
-
1-----0190
019D FB
019E
FE
DIAD 74 00
I.H
398
399
0lA2 3C FA
01A4 15 12
ac
.00
.01
.02
403
404
- STi
CMP
JE
1------
CLI
OR
JMP
409
410
411
412
OlAF
OlAF FA
OIBO 80 DE 0097 R 20
01B5 E9 03AO R
KB INT 41
- CLI
OR
JMP
411
418
""1'
0188
01B8 50
0189 E8 0608 R
420
-421
422
423
424
425
DIBC
OICO
Ole2
Dice
OlCl
OICA
KB INT 21
- PUSH
CALL
MOV
XOR
.0..0•
• 01
..,....,,..
AL I KB RESEND
KB_INT_4
AL,KB loCK
KB_INT_2
A COMMAND TO THE KEYBOARD WAS
01A6 FA
DIAl 80 DE 0097 R 10
OIAe E9 03AO R
405
SYSTEM INTERCEPT - KEY CODE FUNCT I ON
SET CY= I t IN CASE OF IRETI
CASSETTE CALL
tAL I = KEY SCAN CODE
RETURNS CYS I FOR INVALID FUNCTION
CONT I NUE I F CARRY FLAG SET ( AL) =CODE}
EXIT IF SYSTEM HANDLED SCAN CODE
EXIT HANDLES HARDWARE EOI AND ENABLE
I
(AL)_ SCAN CODE
I ENABLE INTERRUPTS AGAIN
I I S THE I NPUT A RESEND
1 GO IF RESEND
CHECK FOR RESPONSE TO A COMMAND TO KEYBOARD
CMP
JNZ
1------
I N THE CHARACTER
(ON HARDWARE INTERRUPT LEVEL 9HI
CHECK FOR A RESEND COMMAND TO KEYBOARD
KB INT 021
-
1 READ
INT ISH - FUNCTION 4FH
•• 1
391
392
393
39.
ENABLE INTERRUPTS
BP
AX
BX
CX
OX
SI
019384 4F
0195 F9
0196 CD 15
•••
•••
,.1
1 I ------------------------------------
----------------------------------- -- ----------------------------------------I
KB INT I PROC
- STI
PUSH
PUSH
PUSH
PUSH
PUSH
PUSH
PUSH
PUSH
PUSH
CLO
CALL
• 19
•• 0
381
382
383
•••
•••
•••
,.0
AT END OF BUFFER?
NO, CONTINUE
YES, RESET TO eUFFER BEG I NN I NG
eX,.BUFFER_START
09 H --
MOVE TO NEXT WORD IN LIST
KEYBOARD I NTERRUPT ROUT I NE
I
0175
.
CMP
JNE
MOV
RET
ENDP
I
1
350
.1..1.'14
.,
NEAR
1--- HARDWARE INT
•• 1
•••
•••
•••
K51
K•
PROC
INC
INC
; I S THE I NPUT AN ACKNOWLEDGE
I GO IF NOT
ISSUED
I 0 I SABLE INTERRUPTS
I INDICATE loCK RECEIVED
1 RETURN IF NOT (loCK RETURNED FOR DATAl
;------ RESEND THE LAST BYTE
1-----8A
32
80
74
E8
58
IE 0097 R
08
E3 07
03
0681 R
UPDATE MODE
AND
UPO,
o I SABLE INTERRUPTS
INDICATE RESEND RECEIVEC
RETURN I F NOT (loCK RETURNED FOR OAT A I
JZ
CALL
POP
INDICATORS IF CHANGE IN STATE
AX
MAKE LED
=~::EB_FLAG_2
~~OKB_LEOS
SND LED
AX -
SAVE DATA IN
GO GET MODE INDICATOR DATA BYTE
GET PREVIOUS BITS
SEE IF ANY CIFFERENT
ISOLATE INDICATOR BITS
IF NO CHANGE BYPASS UPDATE
GO TURN ON MODE INDICATORS
RESTORE DATA IN
KYBD
5-129
Version 2.00
.••••••.,
..••••••,
.AGE
1--------------------------------------------------------------------I
START OF KEY PROCESS ING
"8
1-- -- ---- --- --------- - - -------- - - ------------------ ------- - - ----- - ---olce 8A EO
MOV
1------
~33
•••
•••
•••
.31
•••
•••
•••
'"•••
•••
•••
•••.,
•••
•••
450
,
.
JNI
JM•
0104 OE
0105 07
0106 SA 3E 0096 R
.0.
KI61
1-----OIEI ac AB
OlE3 15 05
0lE5
OlEA
eo
OE 0096 R 40
~~6KB-OVER-RUN
es
MOV
ES
BH,OKB_FLAG_3
IS TH I S AN OVERRUN CHAR?
NO, TEST FOR SHIFT KEY
BUFFER_FULL_BEEP
ESTABLISH ADDRESS OF TABLES
LOAD FLAGS FOR TEST I NG
TEST TO SEE IF A READ_ID IS IN PROGRESS
eM.
JNE
OR
RST_RD_IDI
OlEA 80 26 0096 R TF
OIEF EB IF
SAVE SCAN CODE IN AH ALSO
I
K6'
PUSH
TEST
JI
JNS
OIOA F6 CT CO
0100 74 34
OIOF' T9 10
AH,AL
TEST FOR OVERRUN SCAN CODE FROM KEYBOARD
eM•
OICD IC FF
OICF 15 03
o lOt E9 0620 R
"3
..••••••
1-5
04-21-86
AND
JM•
SH,RO 10+LC AB
NOT 115
TST-ID 2
AL, To T
RST RI5 10
OKB:FLAG_3,LC_AB
I ARE WE DOING A READ ID?
I CONTINUE IF NOT
I IS THE RD 10 FLAG ON?
I IS THIS iHE 1ST 10 CHARACTER?
I
OKB FLAG 3.NOT RO 10
SHOI!fT 10:EX
-
INDICATE 1ST 10 WAS OK
RESET THE READ 10 FLAG
AND EXIT
• 5•
•••
•••
.57
'5.
•••
•••
,.,
•••
•••
•••
•••
466
.,.••••••'".,.
'67
.73
.,.
"5
47.
'77
47.
47.
..•••••••••,
•••
•••
•••
•••
•••
•••
•• 7
...
'"
"2
DIFI
alFI 80 26 0096 R BF
OlF6 ae 54
DIF'e 74 II
DIFA
ae
OIFt 15
TST 10 21
- AND
eM.
JE
eM.
41
12
JNE
OK8 FLAG 3 I NOT LC 14.8
AL. To 214.-
1~~!~~2
I RESET FLAG
I I S TH I 5 THE 2ND 10 CHARACTER?
;
.JUMP IF SO
I IS THIS THE 2ND 10 CHARACTER?
LEAVE IF NOT
I
;------ A READ 10 SAID THAT IT WAS ENHANCED KEY80ARD
alFE F6 Cl 20
020"1 74 08
020380 DE 0017 R 20
0208 E8 0681,R
0208 80 OE 0096 R
0210 E9 03AO R
0213
0213 ae EO
0215 75 07
0211 80 OE 0096 R
OZIC ES 09
I.
NOT_tDI
I.
021E
002.1i!: :tl"! E!
0220 75 08
0222 80 OE 0096 R
0227 E9 03AS R
022A
022A 24 1F
eM.
J""
OR
JM.
TEST Ell
"
SHOULD WE SET NUM LOCK?
EXIT IF NOT
FORCE NUM LOCK ON
GO SEt THE NUM LOCK I NO I CATOR
INDICATE ENHANCED KEYBOARD WAS FOUND
EXIT
TEST
JI
OR
CALL
KX 81TI OR
ID:EXI
.JMP
AL,MC EO
TEST El
t!lKB i'?LAG 3,LC EO+KBX
SHOi!fT ExTT
1 IS TH I S THE GENERAL t.tARKER CODE?
I
I SET FLAG BIT. SET KBX, AND
1 THROW AWAY THIS CODE
-
eMF"
is THiS THE PAuSE KEn
EXITI
JNE
OR
.JMP
SET FLAG. PAUSE KEY MARKER CODE
THROW AWAY THIS CODE
NOT_He I
OZ2C F6 CT 02
022F -74 ac
0231 89 0002
0234 SF 0006 E
0237 Fal AE
0239 75 65
0238 EB 49
ANa
TEST
JZ
AL.07FH
BH,LC EO
NOT_LC_EO
TURN OFF THE BREAK BIT
LAST CODE THE EO MARKER CODE?
.JUMP IF NOT
MOV
MOV
REPNE
JNE
JM.
CX,2
01 ,OFFSET K6+6
SCAse
KI6A
SHORT KI68
LENGTH OF SEARCH
IS THIS A SHIFT KEY?
CHECK IT
NO, CONTINUE KEY PROCESS ING
YES, THROW AWAY & RESET FLAG
4,4
"5
0230
0230 F6 CT 01
"7
0240 74 10
5.,
5.2
0242 89 0004
0245 SF 0004 E
0248 F21 AE
024A J4 DB
•••
•••
•••
•••
•••
5 ••
5.,
5 ••
5.7
5 ••
5 ••
51.
5"
"2
5"
.,.
"5
51.
517
51.
51.
52.
5"
5'2
52'
52.
5.5
52.
.27
'2.
52'
•••
'"
5.2
5n
• 3.
5.5
5'6
5.7
53.
.O?
024C
024E
0250
0253
0255
025A
NOT LC EOI
- TEST
JI
ae 45
75 36
Y6 C4 80
75 31
~~S~~:~~Y
LAST CODE THE EI MARKER CODE?
.JUMP IF NOT
MOV
MOV
REPNE
JE
CX.4
01 ,OFFSET K6+4
StASB
EXIT
LENGTH OF SEARCH
IS THIS AN ALT, CTL, OR SHIFT?
CHECK IT
THROW AWAY IF SO
e""
JNE
~~6~UM_KEY
TEST
AH , 80H
KI6B
OKB FLAG I ,HOLD STATE
KI6R
K39P
I SIT THE PAUSE KEY?
NO. THROW AWAY & RESET FLAG
YES, I SIT THE BREAK OF THE KEY?
YES. THROW THIS AWAY, TOO
NO. ARE WE PAUSED ALREADY?
YES. THROW AWAY
NO, THIS IS THE REAL PAUSE STATE
JNI
F6 06 0018 R 08
15 2A
D2SC E9 0408 R
TEST
JNI
JM.
1------ TEST FOR SYSTEM KEY
D2SF
D2SF'
54
026-1 75 3D
ae
T_SYS_KE~~p
I SIT THE SYSTEM KEY?
CONTINUE IF NOT
JNE
0263 F6 C4 80
0266 75 21
TEST
JNI
AH,080H
KI6C
CHECK IF TH I S A BREAK CODE
DON'T TOUCH SYSTEM INDICATOR IF TRUE
0268 F6 06 0018 R 04
0260 75 17
TEST
JNI
oKB FLAG I.SYS SHIFT
KI6R
-
SEE I FIN SYSTEM KEY HELD DOWN
IF YES, DON'T PROCESS SYSTEM INDICATOR
026F 80 OE 0018 R 04
0274 BO 20
0276 E6 20
OR
OUT
OKB FLAG 1 ,SYS SHIFT
AL,EoI
020H.AL
MOV
CALL
MOV
AL,ENA KBD
SHIP IT
AX.0!'500H
INDICATE SYSTEM KEY DEPRESSED
END OF I NTERRUPT COMMAND
SEND COMMAND TO I NTERRUPT CONTROL PORT
I NTERRUPT-RETURN-NO-EO I
I NSURE KEYBOARD I S ENABLED
EXECUTE ENA8LE
FUNCTION VALUE FOR MAKE OF SYSTEM KEY
MAKE SURE I NTERRUPTS ENABLED
USER INTERRUPT
END PROCESS I NG
0278
02114.
0210
0280
0281
0283
BO
E8
B8
FB
CD
E9
AE
063C R
8500
Q286
~9
0314.0 R
57.
INT
15
03AF R
0289 80 26 0018 R F8
028E 80 20
0290 E6 20
5-130
MOV
KYBD
JM•
ISH
K27A
KI681
.JMP
K26
KI6CI
AND
MOV
eKB FLAG I ,NOT SYS SHIFT ITURN OFF SHIFT KEY HELD DOWN
AL.fol
I END OF INTERRUPT COMMAND
020H,AL
I SEND COMMAND TO INTERRUPT CONTROL PORT
OUT
;
I GNORE SYSTEM KEY
V.r.lo" 2.00
,-.
04-21-86
•••
54t
542
543
0292 ao AE
02t4 ES one R
0291 BI!!I 850 I
MOV
CALL
MOV
AL,ENA KBD
SHIP IT
AX,oIISOIH
544
029A Fa
0291 CO I IS
ST!
INT
JM.
K21A
..••••••,
545
546
550
5151
552
553
554
U5
556
•n
0290 E9 OlAF R
02AO
02A4
D2Al
02AA
OUC
SA IE 0011 R
IF 0000 E
99 0000 E
F21 AE
SA C4
aUE 14 03
0210 E9 03se R
•••
•••
560
02B3 II EF 0001 E
561
02Bl 2EI ISA AIS 0000 E
562
563
a2ae al 02
02aE AI eo
...•••
564
02eo 74 03
02t2 EI 18 90
569
510
02ce 10 Fe 10
02ce T3 21
JM.
Kill
e77
0203 E9 03AO R
0206 F6 Cl 02
519
580
0209 14 07
02DI 08 2& 0096 R
K 1101
51 I
582
583
02DF E. 03AO R
02E2 D2 Ee
02E4 081 26 Dale R
514
02EIS E9 alAo R
sea
02EI
02Ea F6 C3 04
SZ
21
C3 oe
03
599
600
60 I
602
603
oa02
0304
0307
0309
030e
030E
14
C3 20
OA
C3 03
0'\
EO
604
0310 Ee lA 90
606
601
0313 F6 C3 03
0316 14 F6
K21.
609
610
611
612
613
614
0318
0318
031C
031E
0321
0325
K221
84
14
E9
08
30
618
619
620
621
622
0329
032C
032E
032F
0332
F6 C4 10
14 05
50
E8 0681 R
58
624
625
626
621
0333
0335
0331
0319
3C
15
8A
EB
•••
...
T!i
F6
TIS
F6
74
8A
KI6A1
R
C7 02
K I 8B.
K191
K20.
26 0018 R
03
03AO R
26 0018 R
26 0011 R
.3.•••
K.3
1 JUMP I F BREAK
1 I F SCROLL. SH I FT OR ABOVE. TOGGL.E KEY
SHIFT KEY. SET SHIFT ON
OR
TEST
JNZ
eKB FLAG.AH
:~TgTL._SHI FT+ALT_SH I FT
TURN ON SHIFT BIT
IS IT AL.T OR CTRL?
YES, MORE FL.AGS TO SET
JM.
K26
TEST
JZ
OR
~~7~C_EO
I ~O TH: ~T5~~U:;~_~~~U~~. KEYS?
NO, JUMP
SET BITS FOR RIGHT CTRL., AL.T
SHR
OR
~~:_FL.AG_3,AH
~~~:R;~:~_:~~~R~wo
POS I T IONS
SET BITS FOR LEFT CTRL, ALT
INTERRUPT_RETURN
AH,CL
~~:_FL.AG_' ,AH
TOGGLEO SHIFT KEY. TEST FOR 1ST MAKE OR NOT
1 SHIFT-TOGGLE
TEST
JZ
~~8~TL_SHIFT
JM.
K25
CMP
JNE
TEST
JZ
:~2 INS_KEY
~~8~L.T_SHIFT
JM.
K25
TEST
JNZ
TEST
JNZ
TEST
JZ
MOV
: 5~~~KI~T~0~H~~~ ;~:+:
I JUMP IF CTL. STATE
:
5~~~K I ~O~o+ Ni~:~R~E~EY
: 5~~~KI~O~O~L!~~~~~~T~H~~TFT
I JUMP I F ALTERNATE SH I FT
~~2LC_EO
: ~~S:H+~I ~H5N~~: ~~~~~T /~~?
I CHECK FOR BASE STATE
1 JUMP IF NUM LOCK IS ON
~~2LEFT_SHIF'T+RIGHT_SHIFT : ~~:~ ~~RB~~~F~T~~:TE
BL.NUM_STATE
K21
JM•
AH. Al
K25
TEST
JZ
~~oLEFT_SHIFT+RIGHT_SHIFT
TEST
JZ
K22AI
AOJUST PTR TO SCAN COOE MTCH
GET MASK INTO AH
SET UP COUNT FOR FL.AG SH 1FTS
TEST FOR BREAK KEY
I PUT SCAN CODE BACK IN AH
I NUMERAL wOw, STNDRD. PROCESSING
:~2:KB_FLAG_l
JM.
K2.
OR
XOR
:~::~t:~7!H AH
:
~~G~~M~~I~~M~~67
PROC.
SHIFT TOGGLE KEY HITI PROCESS IT
I S KEY ALREADY DEPRESSED?
.JUMP I F KEY ALREADY DEPRESSED
INDICATE THAT THE KEY IS DEPRESSED
TOGGLE THE SH I FT STATE
,------ TOGGLE L.ED IF CAPS, NUM, OR SCROLL KEY DEPRESSEO
.IT
•••
01 ,OFFSET K6+1
AH.CSIK1[DIJ
CL,2
AL,80H
KllC
K18.
02EE 14 03
02'-0 E9 oaee R
ont
K'KIT•
CMP
JAE
JM•
1------
PUT STATE FLAGS IN BL.
SH I FT KEY TABLE
L.ENGTH
L.OOK THROUGH THE T ABL.E FOR A MATCH
RECOVER SCAN CODE
JUMP I F MATCH FOUND
I F NO MATCH, THEN SH I FT NOT FOUND
SHIFT MAKE FOUNO, OETERMINE SET OR TOGGLE
JM.
KllEI
02F3 3C
02F'1S 15
02,.7 F6
02FA 74
D2Ft E9
02FF"6
•••
SUB
1------ PLAIN
578
BL,eKB FLAG
DI,OFF!ET K6
CX, OFFSET K6L
SCASB
AL,AH
SH I FT KEY FOUND
MOV
MOV
TEST
JZ
KllCI
02tA oe 26 0011 R
OZCE F6 C4 ac
0201 7e 03
&89
590
591
1592
1S93
1S94
595
596
1591
598
MOV
MOV
MOV
REPNE
MOV
JE
JM.
574
1515
1516
..••••••,
KIUI
1------
•n
."
n.
.,.
TEST FOR SHIFT KEYS
1------
1565
"H
1------
1 INTERRUPT-RETURN-NO-EOI
I I NSURE KEYBOARD IS ENABLEC
I EXECUTE ENABLE
1 FUNCTION VALUE FOR BREAK OF SYSTEM KIY
I MAKE SURE I NTERRUPTS ENABLED
I USER INTERRUPT
1 I GNORE SYSTEM KEY
TEST
JZ
PUSH
CALL
PO•
52
69
EO
lF 90
K22B.
AH.CAPS SHIFT+NUM SHIFT+SCROLL SHIFT I SHIFT TOGGLE?
K22B
I GO II!' NOT
AX
I SAVE SCAN CODE AND SHIFT MASK
~~D_LEO
CMP
JNE
MOV
~~6INS_KEY
JM•
K2.
AH,AL
:
~~S~~~~ ~g~~ ~~g~CATORS
ON
TEST FOR 1 ST MAKE OF I NSERT KEY
.JUMP I F NOT I NSERT KEY
SCAN CODE IN BOTH HALVES OF AX
FLAGS UPDATED, PROC. FOR BUFFER
• 2•
1------ BREAK SHIFT FOUND
631
632
6033
634
635
636
631
onc
033C
033F
0341
0343
0341
034A
80
F6
13
20
80
11
FC I a
04
43
26 0011 R
FC FB
26
639
640
641
642
643
644
645
646
641
648
649
650
651
652
034C
034F
0351
0355
0351
0359
0350
035F
0362
0·364
0368
036A
036C
0310
F6
14
20
EB
02
20
8A
AO
02
OA
02
24
08
8A
Cl 02
06
26 0096
06
FC
26 0018
EO
0096 R
E8
06 00 I 8
EO
OC
06 0011
C4
.3.
"3
K23.
CM.
NOT
JAE
AND
CMP
JA
R
R
R
eKB FLAG.AH
~~3~OT CTL_SH I FT
TEST
JZ
~~3~C_EO
ANO
JMP
eKB FLAG 3 f AH
SHOJ{T K2!'B
AH,CL
eKB FLAG I, AH
AH.AL
-
K23AI
SAR
K23B.
MOV
MOV
SHR
OR
SHe
R
:~,SCRDLL_SHIFT
K2'
AND
ANO
OR
MOV
:t:6~B_FLAG_3
: t : 6~B_FLAG_1
AL,ALT SHIFT+CTL SHIFT
eKB FLAG. AL
AL,AH
BREAK-SH 1FT-FOUND
IS TH I S A TOGGLE KEY?
INVERT MASK
YES, HANDLE BREAK TOGGLE
SHIFT BIT
TURN
IS THIS ALT OR CTL?
NO, ALL DONE
orr
2ND ALT OR CTL?
NO, HANDLE NORMALLY
RESET BIT FOR RIGHT ALT OR eTL
CONTINUE
MOVE THE MASK BIT TWO POSITIONS
RESET BIT FOR LEFT AL T OR CTl
SAVE SCAN CODE
GET RIGHT ALT & CTRl FLAGS
MOVE TO BITS I & 0
PUT I N LEFT AL T & CTL FLAGS
MOVE BACK TO BITS 3 & 2
F I L TER OUT OTHER GARBAGE
PUT RESULT I N THE REAL FLAGS
RECOVER SAVED SCA.N CODE
KYBD
5-131
V.,.aion 2.00
'-T
04-21-86
•••
•••
•••
•••
•••
0372
ac
B8
...
•••
•• 0
0376 AO 0019 R
0379 84 00
0378 88 26 0019 R
03lF
•••
•••
•••
•••
•••
0381 14 10
0383 E9 0601 R
.13
one ac
.TT
0395 T4 23
0391 ac 45
• TO
.T'
.T2
.T.
.T.
.T.
..•••,
.T.
61'
•• 0
,.2
•••
•••
•••
•••
•••
•• T
...•••
•• 0
J IS THIS ALTERNATE SHIFT REL.EASE
J INTERRUPT_RETURN
CMP
"NE
,------ ALTERNATE SHIFT KEY RELEASED. GET THE VALUE INTO BUFFER
•• 2
•• T
1<2301
0314 15 2A
,.T
ac
MOV
MOV
MOV
eMP
00
"MP
AL •• ALT INPUT
AH,D
OAL T INPUT ,AH
ALtOK2.
K"
SCAN CODE OF 0
ZERO OUT THE FIELD
WAS THE INPUT = 01
I NTERRUPT RETURN
IT WASN'T7 SO PUT IN BUFFER
ANa
"MP
OKEI FLAG I t AH
SHOft'T K26
BREAK-TOGGLE
INDICATE NO LONGER DEPRESSED
INTERRUPT_RETURN
"E
0386
0386 20 26 0018 R
OS8A EB 14
K24,
OS8C
1(251
J------ TEST FOR HOLD STATE
80
036E T3 10
0390 F6 06 0018 R 08
alAO
eMP
~~6NUM_KEY
ANC
OKB_FLAG_3,NOT LC_EO+LC_EI
"E
ANC
I CAN'T END HOLD ON NUM LOCK
OKB_FLAG_' ,NOT HOLD_STATE
I TURN OFF THE HOLD STATE BIT
K26.
Q3AO 80 26 0096 R Fe
K26AI
alAS
OlAS FA
OSA6
"AE
TEST
"Z
0399 14 oe
039B 80 26 0018 R F7
=
AL, AH
SCAN CODE
NO-SHIFT-FOUNO
TEST FOR BREAK KEY
I NOTHING FOR BREAK CHARS FROM HERE ON
I ARE WE IN HOLD STATE
I BRANCH AROUND ,TEST Ii=' NOT
AL,80H
K26
OKB FLAG I ,HOLD STATE
K28-
eMP
ao
eL'
MOV
CUT
20
alA8 E6 20
03AA
03AA 80 AE
OlAe E8 063C R
K271
OlAF FA
03BO 07
03Bl IF
K2lAI
MCV
CALL
AL,EOI
020H,AL
AL,ENA KBD
SHIP_IT
I
I
I
1
I RESET LAST CHAR H.C. FLAG
INTERRUPT-RETURN
TURN OFF INTERRUPTS
END OF I NTERRUPT COMMAND
SEND COMMAND TO I NTERRUPT CONTROL PORT
I NTERRUPT-RETURN-NO-EO I
I NSURE KEYBOARD I 5 ENABLED
EXECUTE ENABLE
•• 2
•••
•••
•••
•••
•••
•• T
TOO
TO'
T02
TO'
eL'
PCP
03B2 SF
pop
pop
03B3 5E
03B4 5A
PCP
PCP
pop
pop
pop
pop
IRET
03B5 59
03B6 58
03B7 58
0388 5D
03B9 CF
5-132
KYBD
ES
CS
DISABLE INTERRUPTS
RESTORE REG) STERS
C'
S'
CX
ex
ex
AX
BP
I RETURN
1-.
V.rslon 2.00
04-21-86
PAGE
1------ NOT IN HOLD STATE
'0'
'0'
'00
'0'
'0.
'0'
"0
".".".'"
".
"0
eM"
"A
03BE f6 C3 08
03CI 74 OC
03C8 f6 06 0018 R 04
03CD 74 03
03Cf E9 04A3 R
T24
125
03C2
0302 F6 C3 04
126
0305 1-4 31
..
,..
,"0.
,,..
127
728
03E I E9 0000 E
03E4
03E4 52 4F 50 51 48
139
140
03E9 4C 40 4T 48 . ,
741
03EE 10 II
742
1043
744
745
oaF...
03FA
0400
0406
..
,
16
20
26
31
12 13 14 15
154
155
156
151
758
759
160
161
162
..
,,.,
163
"0
ac
TEST
MOV
"M"
1------
39
15 05
20
E9 05F5 R
at OF
eM"
K311:
""E
MOV
4A
79
4E
14 15
"E
e""
.RESET fLAG, 1234H
START_T
, TEST-RESET
IN CONTROL SHIFT ALSO?
1 NO RESET
, SHTfT STATE I S THERE, TEST KEY
1 NO_RESET,
IGNORE
1 ARE WE
I SET fLAG fOR RESET fUNCT I ON
1 JUMP TO POWER ON DIAGNOSTICS
TABLES FOR AL T CASE
------------------------
1 10 NUMBERS ON KEYPAD
1 A-I TYPEWRITER CHARS
AL.57
K311
AL.
K51
NO-RESET
TEST FOR SPACE KEY
NOT THERE
SET SPACE CHAR
BUffER_fILL
AL,15
K312
AX,OA500h
K51
TEST fOR TAB KEY
NOT THERE
SET SPECIAL CODE FOR ALT-TAB
BUffER_fiLL
0430 15 68
0432 81 EF 03E5 R
115
0436 AD 0019 R
"E
ALI74
K37B
AL,78
K37B
TEST FOR KEYPAD GO PROCESS
TEST fOR KEYPAD +
GO PROCESS
LOOK fOR KEY PAD ENTRY
C I ,OfFSET K30
CX,IO
SCAse
K"
eHILC_EO
K37C
Dl,OffSET K30+1
INPUT
:~:~~LT_
AL T-KEY-PAD
AL T-INPUT-TABLE
LOOK FOR ENTRY US J NG KEYPAD
LOOK fOR MATCH
NO AL T KEYPAD
I S-TH I!' ONE Of THE NEW KEYS?
YES, ,JUMP, NOT NUMPAD KEY
01 NOW HAS ENTRY VALUE
GET THE CURRENT BYTE
MULTIPLY BY 10
AM
AXIDI
.ALT_INPUT IAL
K'.
ADD IN THE LATEST ENTRY
STORE IT AWAY
THROW AWAY THAT KEYSTROKE
K321
MOV
NOV
REPNE
""E
00420 F6 Cl 02
114
"""
e""
1-----0429 F2/ AE
0428 75 18
"M"
e""
K312:
at
74
ac
710
TEST
"NZ
SUB
MOV
MOV
MUL
ADD
NOV
0439 84 GAo
Tn
0438 Fe. £4
118
119
043C 03 CT
043F A2 0019 R
180
0442 [9 03AO R
K32A:
0445
K331
TIl
"""
,------ LOOK faR SUPERSHlfT ENTRY
184
785
186
0445 e6 06 0019 R 00
18T
0440 FZI AE
1I5a
044F 14 42
MOV
NOV
REPNE
0440\ B9 COlA
1------
190
192
193
194
195
196
191
198
19 •
• 00
.01
802
803
804
805
806
BOl
808
0451
0451
0453
0455
0451
0459
045C
810
811
812
813
814
811S
816
BI7
046B f6
046E14
0410 3C
0412 15
0474 B8
0411 E9
041A 3C
047C 14
.0'
~~iDEL_KEY
DB
82,79,80,81,75
DB
16.11,71,72,73
SUPER-SHI FT-TABLE
DB
16,17,18,19,20,21
DB
22,23,24,25,30,31
DB
32,33,34.35,36,37
DB
38,44,45,46,47,48
DB
49,50
""E
MOV
15 06
88 A500
E9 05F5 R
0426 89 OOOA
....
,..
,..
~~iCTL_SHIFT
1---------------------1-----ALT-INPUT-TABLE
K30
LABEL
BYTE
eo
169
,,
YES, IS SYSREQ KEY DOWN?
NO, ALT STATE IS REAL
YES, THIS IS PHONY ALT STATE
DUE TO PRESS I NG SYSREQ
K31:
0423
0423 SF 03E4 R
716
:~~_fLAG_1 ,SYS_SH 1fT
K ••
,------ IN ALTERNATE SHIfT, RESET NOT fOUND
0408
0408
040A
040C
040E
0411
0411
0413
0415
0418
0418
0418
0410
041F
0421
161
768
111
112
773
TEST
"M"
"Z
"Z
eM"
"NE
11 18 19 IE IF
21 22 23 204 25
2t 20 2E 2F 30
32
14'
149
150
151
152
153
IS TH I S THE ENHANCED KEYBOARD?
NO. ALT STATE IS REAL
,------ CTL-AL T-DEL HAS BEEN fOUND. 00 I/O CLEANUP
0308 CT 06 0072 R 1234
"0
ARE WE IN ALTERNATE SHIFT?
,JUMP I f NOT ALTERNATE
K29:
0301 at 53
0309 15 20
732
TaB
~~8:LT_SHlfT
BH,KBX
K.'
,------ TEST fOR RESET KEY SEQUENCE {CTL ALT DELl
133
"0
737
TEST
"Z
K28AI
AL,88
K.O
TESl
"Z
03C3 f6 C1 10
03C6 74 OA
",
".
".
"0
,,'"
=
AL. AH
SCAN CODE (ALL MAKES)
NO-HOLD-STATE
TEST FOR OUT-Of-RANGE SCAN CODES
I GNORE I F OUT-Of-RANGE
K28:
03BA
03BA 3C 58
03BC 11 E2
K341
3C
12
3C
11
80
EB
02
43
00
05
C4 16
35
"E
.ALT INPUT,O
eX.26
SCASB
K37A
NO-ALT-KEYPAD
ZERO ANY PREVIOUS ENTRY INTO INPUT
OI,ES ALREADY POINTING
LOOK fOR MATCH I N ALPHABET
MATCH fOUND, GO fILL THE BUFfER
LOOK fOR TOP ROW OF ALTERNATE SHIfT
e""
"""Ae""
"M"
AL,2
K37B
AL I 13
e""
~~5~II_M
eM"
"A
ADD
"M"
~~5~12_M
AH,52
SHORT K3TA
TEST
~~7LC_EO
e""
"NE
NOV
"M"
e""
AL.28
K35B
AX.OA600h
ADD
K ••
AH.118
SHORT K31A
AL T-TOP-ROW
KEY WITH 'I' ON IT
MUST BE ESCAPE
IS IT IN THE REGION
NO, ALT-SOMETHING ELSE
CONVERT PSEUDO SCAN CODE TO RANGE
GO fiLL THE BUffER
,------ TRANSLATE ALTERNATE SHIfT PSEUDO SCAN CODES
045E
045E
0460
0462
0464
0466
0469
K351
3C
12
3C
11
80
EB
51
09
58
05
C4 34
28
Cl 02
18
IC
06
A600
05f5 R
53
If
""
K35AI
K35BI
"Z
"E
K5'
AL I 83
K37C
AL T-fUNCT I ON
IS IT fll?
NO. BRANCH
IS IT f12?
NO, BRANCH
CONVERT TO PSEUDO SCAN COOE
GO fILL THE BUFfER
DO WE HAVE ONE Of THE NEW KEYS?
NO, ,JUMP
TEST FOR KEYPAD ENTER
NOT THERE
SPECIAL CODE
BUffER FILL
TEST FOR DELETE KEY
HANDLE WITH OTHER ED I T KEYS
KYBD
5-133
.,....
..•••,
•••
•••
•••
•••
n.
a'T
•••
."•••
•••
•••
•••.,
•••
•••
•••,
•••
•••
•••
•••
•••
•• T
•••
•••
•••,
•••
•••
•••
•••
•• T
•••
•••
•••
•••
•••
•••
.n
.,•••
"
.,.
.,.
.,.
...
...
.
..
..
...
......
...
....
.
Ve .. alon 2.00
047E 3t 35
0482
."
.TO
........•••,
.••••••...•••.,
...
•••
.T.
a••
a••
•••
a••
aOT
•••
•••
•••
,.,
•••
•••
•••
•••
•••
'.T
•••
•••
'"
......
......
...,.,
•••
.IT
92.
•••
•••
92.
..'"...••••• T
Al,53
K32A
AX,OA400h
K"
TEST FOR KEYPAD /
NOT THERE, NO OTHER EO SPEC I ALS
SPECIAL. CODE
BUFrER riLL
eM.
AL,59
K37B
AL,68
eM.
0480 15 CO
"NE
as
"400
0485 E9 05r5 R
04ea 3t 3S
048" 12 DC
048C 3C 44
MOV
"MP
K371
eM.
'00
K32A
AH,45
TEST FOR FUNCTION KEYS IFI)
NO FN, HANDLE W/ OTHER EXTENDED
IN KEYPAD REGION?
OR NUMLOCK, SCROLLOCK?
IF SO. IGNORE
CONVERT TO PSEUDO SCAN CODE
0493 aD 00
0495 E9 05r5 R
K37AJ
MOV
"M.
AL,O
K.T
ASC II CODE OF ZERO
PUT IT IN THE BUFFER
0498 aD FO
049A E9 05F'5 R
K37S,
MOV
USE SPEC I AL ASC I I CODE
PUT I TIN THE BUFFER
0490 04 50
"".
AL,OrOh
K.T
K37CJ
'00
AL,80
AH,AL
K37A
CONVERT SCAN CODE (EDIT KEYS)
(SCAN CODE NOT IN AH FOR INSERT)
PUT I TIN THE BUFFER
""
".
048E 17 82
0490 aD C4 2D
049F 8A EO
04"1 EB FO
MOV
"MP
1-----04A3
NOT IN ALTERNATE SHIFT
K38,
04"3 F6 C3 04
04'\6 75 03
04"8 E9 0535 R
TEST
"NZ
"MP
NOT-AL T-SH 1FT
BL STILL HAS SHIFT FLAGS
ARE WE I N CONTROL SH I FT?
YES. START PROCESSING
NOT-CTL-SHIFT
BL,CTL SHIFT
K38A K••
,------ CONTROL SHIFT, TEST SPECIAL CHARACTERS
04A8
ac
46
04"D TIS 23
04"F F6 C7
.
,
,------ TEST FOR BREAK
K38AI
0489 88 IE OOIA R
eMP
"""
"Z
TEST
048Z 74 05
04B4 F6 C7 02
0481 74 19
TEST
"Z
K3BBI
048D 89 IE ODIC R
04Cl C6 06 0071 R 80
MOV
MOV
MOV
~;9 SCROLL._KEY
TEST FOR BREAK
.JUMP, NO-BREAK
IS THIS THE ENHANCED KEYBOARD?
NO. BREAK IS VALID
YES, WAS LAST CODE AN EO?
NO-BREAK, TEST FOR PAUSE
BH,KBX
K38B
LC_ EO
ra9
BX, .BUFFER HEAD
oBUFFER TATl,BX
OBIOS_BREAK,BOH
RESET BUFFER TO EMPTY
TURN ON BIOS_BREAK BIT
,-------- ENABLE KEYBOARD
04C6 aD AE
04C8 E8 063C R
MOV
CALL
04CB CD IB
lNT
04CD 2B CO
04CF E9 05F5 R
a12
815
1-'
04-21-86
04D2
04D2 F6 C7
04D5 'Hi 211
,.
SUB
"MP
1--------
eM.
aD AE
£8 061C R
80 20
E6 20
K39PJ
K39AI
1-----04E9 80 3E 0049 R 01
04EE
04FO
04F3
D4F6
"NE
OR
MOV
CALL
MOV
OUT
AL,ENA KBD
SHIP IT
AL,Elil
020H.AL
eMP
~~~T_MOOE, 7
I
I
MOV
MOV
DX,03DBH
~~ ::eRT_MODE_SET
1 PORT FOR COLOR CARD
TEST
"NZ
1------
ENABLE KEYBOARD
EXECUTE ENABLE
END OF I NTERRUPT TO CONTROL PORT
ALLOW FURTHER KEYSTROKE I NTS
DURING PAUSE INTERVAL. TURN CRT BACK ON
OUT
04FC 75 F9
0501
0501
0503
0505
OS08
OKB_FLAO_' ,HOLD_STATE
K40J
04FE £9 DIU R
NO-BREAK
15TH I S THE ENHANCED KEYBOARD?
YES. THEN THIS CAN'T BE PAUSE
LOOK FOR PAUSE KEY
NO-PAUSE
TURN ON THE HOLD FLAG
BH,KBX
K"
:~iNUM_KEY
ENABLE KEYBOARD
"E
74 07
BA 0308
AD 0065 R
EE
04F?
04F7 F6 06 0018 R 08
KOT
TEST FOR PAUSE
TEST
"NZ
1-------04EO
04E2
04E5
04E7
ENABLE KEYBOARD
EXECUTE ENABLE
BREAK I NTERRUPT VECTOR
PUT OUT DUMMY CHARACTER
BUFFER_FILL
K39J
04D7 3t 45
04D9 75 26
04D8 aD DE 0018 R 08
AL,ENA KSD
SHIP IT
IBH AX,AX
"M.
~~~_FLAG_l ,HOLD_STATE
LOOP UNT I L FLAG TURNED OFF
INTERRUPT_RETURN_NO_EO I
•• T
TEST SPEC I AL CASE KEY 55
K411
3t 37
75 10
F6 Cl
74 05
,.
eMP
"NE
TEST
"Z
TEST
OISOA F6 C7 02
OSOD 74 20
050F Be 7200
0512 E9 05F5 R
K41AI
IS THIS BLACK AND WHITE CARD
YES. NOTHING TO DO
I GET THE VALUE OF THE CURRENT MODE
I SET THE CRT MODE, SO THAT CRT IS ON
I PAUSE-LOOP
"Z
MOV
"MP
NO-PAUSE
TEST FOR -/PRTSC KEY
NOT-KEY-55
IS THIS THE ENHANCED KEYBOARD?
NO, CTL-PRTSC IS VALID
YES, WAS LAST CODE AN EO?
NO. TRANSLATE TO A FUNCT I ON
START/STOP PRINTING SWITCH
BUFFER_FILL
AL,55
•••
BH,KBX
K41A
BH.LC EO
K42B AX,114-256
.5T
1------ SET UP TO TRANSLATE CONTROL SHIFT
0515
0515
0517
0519
051B
0510
3C
74
3C
75
r6
0520 74
0522 B8
0525 E9
K421
OF
16
35
OB
C7 02
06
eMP
"E
eMP
"NE
TEST
"Z
9500
MOV
"M.
0!5F5 R
0528 BS 0000 E
052B 3C 3B
0520 72 5E
OS2F as 0000 E
0532 E9 05E4 R
'28
K42AI
K42BI
MOV
eMP
""
MOV
"MP
AL,15
K42S
AL,53
K42A
~~2~C_EO
AX,9500h
,5T
BX, OFFSET KB
AL,59
K45F
BX, OFFSET KB
•••
NOT-KEY-55
I S IT THE TAB KEY?
YES, XLATE TO FUNCT I ON CODE
IS IT THE J KEY?
NO, NO MORE SPEC I AL CASES
YES, IS IT FROM THE KEYPAD?
NO • .JUST TRANSLATE
YES, SPEC I AL CODE FOR TH I S ONE
BUFFER FILL
SET UP TO TRANSLATE CTL
IS IT IN CHARACTER TABLE?
YES, GO TRANSL.ATE CHAR
SET UP TO TRANSLATE CTL
NO, GO TRANSLATE_SCAN
1------ NOT IN CONTROL SHIFT
0535 3C 37
5-134
KYBD
K441
AL,55
J PR I NT SCREEN KEY?
V.,..alon 2.00
932
933
934
935
936
937
938
939
0537
0539
053t
053E
0541
0543
0545
0548
75
F6
74
F6
75
Ea
F6
74
26
t7 10
07
t7 02
07
3a
t3 03
36
942
943
944
945
946
947
948
949
950
054A
054t
054F
01551
0553
0554
01556
01557
0155t
80
E8
80
E6
55
to
50
80
E9
AE
063t R
20
20
..•••,
'"•••
•••
,
..
JNE
TEST
JZ
TEST
JNZ
JMP
K44AI
JZ
1------
K448 I
05
26 0096 R Ft
03AA R
AND
1------
055F
055F 3t 3A
0561 TT 2t
958
959
960
961
0563
0565
0567
056A
963
964
9615
966
056t
0156F
0572
0574
968
969
970
971
0576
01579
051e
057E
F6 t3 40
75 OA
F6 t3 03
715 OA
973
974
9715
976
917
918
979
0580
01583
0585
0585
01588
058A
0580
8B 0000 E
E8 50
9S3
984
985
9S6
058F
058F 3t 44
0591 7T 02
0593 EB 36
K461
•••
•••
•••
•••
01595
0595 3t 53
01597 17 2t
K471
•••
..,
.,.
..••••••,
.n
990
991
992
9915
996
997
01599
0598
01590
998 0159F
999 05A 1
1000 015A4
~=4~C_EO
SHORT K45C
:~~_FLAG_S,NOT L.C_EO+LC_~ I GA Z~:gK O~T T~~~~E E6iA~~CURR ING
~=5~C_EO
IS THIS THE "I" KEY?
NO, JUMP
WAS LAST CODE _THE MARKER?
YES I TRANSLATE TO CHARACTER
CX,26
01 ,OFFSET KSO+IO
SCASB
K458
LENGTH OF SEARCH
POINT TO TABLE OF A-Z CHARS
I S TH I 5 A LETTER KEY?
NO. SYMBOL KEY
MOV
MOV
JNZ
TEST
JNZ
~~5gAPS_STATE
1------
1------
1 NO, LOWERCASE
I TRANSLATE TO LOWERCASE LETTERS
BX,OFFSET KIO
SHORT K56
TEST
~~5~EFT_SHIFT+RIGHT_SHIFT ;H~~T~~· T~:P S~~~T O~NCA~~O~TATE
1 ALMOST-CAPS-STATE
JNZ
MOV
JMP
BX.OFFSET KII
SHORT K!56
I TRANSLATE TO UPPERCASE I.ETTERS
TEST FOR KEYS FI - FlO
NOT IN-CORE AREA
TEST FOR FI - FlO
JUMP IF NOT
YES. GO DO FN KEY PROCESS
AL,68
K47
SHORT K53
HANOI.E THE NUMERIC PAD KEYS
CMP
JA
K48 I
~:~TW~o~Ns~~~S_LOCK?
MOV
JMP
CMP
JA
JMP
1------
:
~~5~EFT_SHIFT+RIGHT_SHIFT : ¢:~, W~P~~R~~~~T STATE?
K45Dl
3t 4A
74 EO
3t 4E
74 E9
F6 t7 02
75 OA
NOT-PRINT-SCREEN
TEST FOR I N-CORE AREA
JUMP IF NOT
AL.S8
ALISS
K4!5A
TEST
K4!5EI
K4SFI
CHARACTER
TEST
JNE
K45Cl
f t . ft
:N~6. I ~~A~:O;.O S~l~T C~~~Ag~=~1
CMP
JNE
REPNE
K4!5BI
NO, XLATE TO
•••
JNZ
K4!5AI
Y~~s, L~~T P~~~~ ;C=::~ER?
CMP
JA
75 05
t3 03
F6
0000 E
46
:
I
~~5~EFT_SHIFT+RIGHT_SHIFT
HANDLE THE IN-CORE KEYS
F21 AE
F6
75
8e
E8
1 NOT-PR I NT-SCREEN
I IS THIS ENHANCED KEYBOARD?
I NO. TEST FOR SHIFT STATE
K451
35
05
t7 02
14
89 00 I A
8F 03EE R
K45
BH,KBX
K44A
ISSUE I NTERRUPT TO PERFORM PR I NT SCREEN FUNCT I ON
MOV
AL, ENA KBD
I NSURE KEYBOARD I S ENA8LED
CALL
SH I PIT
EXECUTE ENABLE
MOV
AL. Ei51
I END OF CURRENT INTERRUPT
OUT
020H.AL
I
SO FURTHER THINGS CAN HAPPEN
PUSH
8P
1 SAVE POINTER
INT
!5H
I ISSUE PR I NT SCREEN INTERRUPT
POP
8P
1 RESTORE PO INTER
JMP
9154
955
956
3t
75
F6
75
TEST
1-10
04-21-86
NOT FI - FlO
TEST FOR NUMPAO KEYS
JUMP IF NOT
AI.,83
K52
KEYPAD KEYS. MUST TEST NUM LOCK FOR DETERMINATION
CMP
AI., 74
1 SPEC I AL CASE FOR MI NUS
JE
K45E
1 GO TRANSI.ATE
CMP
AL. T8
1 SPECIAL CASE FOR PLUS
JE
K45E
I GO TRANSI.ATE
j~~T
~=9I.C_EO
:
I ~E~~I
~R~~~I.~~E T~~ ~~:E K~~~+E
I~Ol
1002
1003
1004
1005
1006
1007
100-8
1009
1010
lOll
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
I 026
1027
1028
1029
1030
1031
1032
IOS3
1034
1035
1036
1037
1038
IOS9
1040
1041
1042
1043
1044
104&
015A6
015A9
015AB
015AE
F6
715
F6
715
015BO 3t
0582 75
058480
01586 E8
0589 Be
058t EB
t3 20
13
t3 03
13
4t
05
FO
3D 90
0000 E
26
TEST
JNZ
TEST
JNZ
1------
K491
K49AI
BASE CASE FOR KEYPAD
CMP
AI.,76
JNE
K49A
MOV
Al.,OFOn
JMP
K57
MOV
BX,OFFSET KID
JMP
SHORT K64
SPEC I AL CASE FOR BASE STATE 5
CONTINUE IF NOT KEYPAD !5
SPECIAL ASCII CODE
BUFFER FII.1.
BASE CASE TABLE
CONVERT TO P'SEUDO SCAN
015BE F6 t3 03
D15CI 75 ED
05C3 EB t5
1-----05C15
05t5 St 56
05C7 7!5 02
015C9 EB 80
TEST FOR THE NEW KEY ON WT KEYBOARDS
K521
CMP
JNE
JMP
AI.,86
.53
SHORT K45B
I
I
1
1
NOT A NUMPAD KEY
IS IT THE NEW WT KEY?
JUMP IF NOT
HANOLE WITH REST OF LETTER KEYS
1------ MUST BE FilaR FI2
05ce F6 t3 03
OSCE 74 EO
K531
TEST
JZ
0500 BB 0000 E
01503 E8 OF
MOV
JMP
aX,OFFSET KII
SHORT K64
UP'PER CASE PSEUDO SCAN CODES
TRANSLATE_SCAN
1------ TRANSLATE THE CHARACTER
0505
0505
0507
050'
05DE
05EO
05E2
KS61
FE t8
2El 07
F6 06 0096 R 02
74 15
84 EO
E8 II
DEC
AC
XI.AT
TEST
CSIKII
JZ
MOV
JMP
:~~_FLACi_3 ,I.C_EO
~~O~~-~~7
TRANSI.ATE-CHAR
CONVERT ORIGIN
CONVERT THE SCAN CODE TO ASC I I
IS THIS A NEW KEY?
NO, GO FII.1. BUFFER
YES, PUT SPEC I AI. MARKER IN AH
P'UT I T I NTO THE BUFFER
>
KYBD
5-135
V."slon 2.00
1046
104T
104e
1049
1050
1051
1052
1053
1054
10&&
1056
105T
105e
1059
1060
1061
1062
1063
1064
1065
1066
1067
106e
1069
10TO
lOTI
IOT2
lOTS
IOT4
10T5
IOT6
10TT
lOT8
1079
1080
1081
1082
1083
loe4
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
109T
1-11
04-21-86
1------ TRANSLATE SCAN FOR PSEUDO SCAN CODES
05E4
05E4
05E6
05Ee
05EA
05EC
05F 1
05FS
K64a
FE ce
2EI DT
eA EO
190 00
F6 06 0096 R 02
T4 02
190 EO
DEC
AL
XLAT
CSIK8
AH,AL
AL,O
MDV
MDV
TEST
JZ
:;~_FLAG_31 LC_EO
MDV
AL.MC_EO
I TRANSLATE-SCAN-ORGD
I CONVERT ORIGIN
I CTL TABLE SCAN
I PUT VALUE INTO AH
I ZERO ASC I I CODE
1 IS THIS A NEW KEY?
1 NO, GO FILL BUFFER
1 YES, PUT SPEC I AL MARKER IN AL
;------ PUT CHARACTER INTO BUFFER
05F5
05F5
05FT
05F9
05FC
05FE
05FE E9 OSAO R
K59.
0601
0601
0605
060T
060A
060E
0610
0612
0616
K61a
0611
0619
06119
0610
0620
0623
0625
062A
SB
eB
E8
38
T4
89
89
FA
190
E6
190
E8
Be
CD
80
E9
IE OOIC R
F3
0168 R
IE OOIA R
10
04
IE OOIC R
AL,-I
K59
AH,-I
K61
BUFFER-F I LL
IS THIS AN IGNORE CHAR
YES, DO NOTHING WITH IT
LOOK FOR - I PSEUDO SCAN
NEAR_' NTERRUPT_RETURN
JMP
K26
NEAR- INTERRUPT-RETURN
INTERRUPT_RETURN
MDV
MDV
CALL
eMP
JE
MDV
MDV
eLI
MDV
OUT
MDV
20
20
AE
063C R
9102
15
26 0096 R FC
03AF R
CALL
MDV
INT
AND
JMP
1-----0620
0620
062F
0631
0634
0636
0639
eMP
JE
eMP
JNE
K5T.
ac FF
74 05
eo Fe FF
T5 OS
~~: :~UFFER_ TAl L
GET THE END PO I NTER TO THE BUFFER
SAVE THE VALUE
ADVANCE THE TAIL
HAS THE BUFFER WRAPPED AROUND
BUFFER FULL BEEP
[SIj,AX
I STORE THE VALUE
OBUFFER_TAIL,BX
I MOVE THE POINTER UP
I TURN OFF INTERRUPTS
AL, EO I
I END OF I NTERRUPT COMMAND
INTAOO,AL
I SEND COMMAND TO INTERRUPT CONTROL PORT
AL.ENA KBD
I INSURE KEYBOARD IS ENABLED
SH I PIT
I EXECUTE ENABLE
AX,O~I02H
I MOVE IN POST CODE & TYPE
I PERFORM OTHER FUNeT I ON
15H
OKS FLAG S,NOT LC EO+LC E1 I RESET LAST CHAR H.C. FLAG
K27A
-, INTERRUPT_RETURN
K4
~~20BUFFER_HEAD
BUFFER IS FULL SOUND THE BEEPER
K62,
BO
E6
199
193
E8
E9
20
20
OZA6
04
0000 E
OSAA R
063C
5-136
KYBD
MOV
OUT
MOV
MDV
CALL
JMP
AL.EOI
INTAOO,AL
CX,678
BL,4
BEEP
K27
ENABLE I NTERRUPT CONTROLLER CH I P
DIVISOR FOR 1760 HZ
SHORT BEEP COUNT (1/16 + 1/64 DELAY)
GO TO COMMON BEEP HANDLER
EXIT
IBM P.raonal Comput.r MACRO A ••• mbl.,..
KYBD ----- 03/06/86 KEYBOARD BIOS
1098
1099
1100
I I 01
1102
1103
I 10'"
1 I oe
1106
1107 063C
1108 063C
1109
1110
1111 0630
11 12 063E
1113 06 ... 0
11 j .. 06 ... 0
I I Ie 06 .. 2
111606.....
11 17
11 18 06"6
111906.. 7
1120 06 .. 9
1121 06"A
1122 06 ..B
1123
112"
112e
1126
1121
1128
1129
1130
1131
1132
1133
113 ... 06 ..B
113e 06 ..B
1136 06 ..C
1137 06 ..0
1138 06 ..E
1139 0650
11 .. 0 0652
j 1.. 1 06e3
1''''2
11 ... 3
11 ... ..
11 ... 5 0658
1 1.. 6 065A
11 ... 7 065C
11 ... 8 065E
11 .. 9
11 eo 0660
1151 0662
1152 066"
1153 0665
115.. 0668
1155 0660
I 156 066F
1157
1158 0611
IIe9 0673
1160 0675
1161 061A
1162
1163 onc
116" 0681
1165
1166 0683
1167 068 ...
1168 06155
1169 0686
1110 0687
V.r •• on 2.00
1-12
0"-21-86
PAGE
1------------ -------- ------ ------ ------------------- --------- --------I
1
I
1
1
I
SHIP_IT
THIS ROUTINE HANDLES TRANSMISSION OF COMMAND AND DATA BYTES
TO THE KEYBOARD CONTROLLER.
-
1--- - - - ----------- - ---------------- - - - ---------- - - - - ------ -- -- ----- - --
SHIP IT PRoe
PUSH
eo
FA
2B C9
1-------
NEAR
AX
1 SAVE DATA TO SEND
WAIT FOR COMMAND TO BE ACCEPTED
CLI
1 DISABLE INTERRUPTS TILL DATA SENT
SUB
CX, CX
I CLEAR TIMEOUT COUNTER
SIOI
IN
E... 6"
A8 02
EO FA
TEST
LOOPNZ
POP
e8
E6 6 ...
FB
C3
OUT
AL,STATUS PORT
~~o I NPT_BOF_FULL
READ KEYBOARD CONTROLLER STATUS
CHECK FOR I TS I NPUT BUFFER BUSY
WAI T FOR COMMAND TO BE ACCEPTED
AX
STATUS_PORT,AL
GET OAT A TO SEND
SEND TO KEYBOARD CONTROLLER
ENABLE INTERRUPTS AGA I N
RETURN TO CALLER
STI
"ET
SHIP_IT ENDP
I -- --------- - - - - - ------------- - ---- ----- -- ---- -------- - - - - - ------ ----I
I
SNO_OATA
I
I
I
I
THIS ROUTINE HANDLES TRANSMISSION OF COMMAND AND DATA BYTES
TO THE KEYBOARD AND RECEIPT OF ACKNOWLEDGEMENTS.
IT ALSO
HANDLES ANY RETR I ES IF REQU I REO
-
I
1--------------------------------------------------------------------eo
e3
51
8A F8
B3 03
FA
80 26 0091 R CF
SND OAT A PROC
PUSH
PUSH
PUSH
"OV
"OV
SOD I
eLi
AND
NEAR
AX
~AVE
REGISTERS
BX
CX
SAVE TRANSMITTED BYTE FOR RETRIES
LOAD RETRY COUNT
1 DISABLE INTERRUPTS
OKB_FLAG_Z,NOT (KB_FE+KB_FAl ; CLEAR ACK AND RESEND FLAGS
BH,AL
BL,3
1------- WAIT FOR COMMAND TO BE ACCEPTED
2B C9
E" 6 ..
A8 02
EO FA
SUB
5051
IN
ex,cx
AL,STATUS PORT
TEST
LOOPNZ
~~5 I NPT_BUF _FULL
AL,BH
PORT_A,AL
8A
E6
FB
B9
F6
15
E2
C1
60
"OV
lAOO
06 0097 R 30
00
F7
SOil
STI
"OV
TEST
JNZ
LOOP
FE
1e
80
EB
CB
00
OE 0091 R 80
07
SOZ;
DEC
F6 06 0097 R 10
7.. EE
SD3,
TEST
JZ
59
5B
58
C3
SO .. ,
POP
POP
POP
OUT
JNZ
0"
J"P
"ET
I IAI T FOR COMMAND TO BE ACCEPTED
SDI
REESTABLISH BYTE TO TRANSMIT
SEND BYTE
ENABLE INTERRUPTS
LOAD COUNT FOR 10mS+
SEE IF EITHER BIT SET
I F SET, SOMETH I NG REeE I VED GO PROCESS
OTHERW I SE IA I T
BL
SDO
OKB FLAG 2, KB ERR
SHORT 504
-
DECREMENT RETRY COUNT
RETRY TRANSM J 55 I ON
TURN ON TRANSM I T ERROR FLAG
RETR I ES EXHAUSTED FORGET TRANSM I 55 I ON
cx
BX
AX
RESTORE REG I STERS
eX,OIAOOH
;~:_FLAG_2, KB_FE+KB_F A
SEE IF TH I SIS AN ACKNOWLEDGE
I F NOT, GO RESENO
RETURN, GOOD TRANSMISSION
SNO _DATA ENDP
KYBD
5-137
1-13
04-21-86
1171
1112
1173
1174
1175
1176
Illl
1178
1179
1180
118t
1182
1183
1184
118&
1186
1187
1188
1189
1190
1191
1192
1193
1194
119&
1196
1197
1198
1199
1200
120 I
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
121&
1216
1217
1218
1219
1220
1221
1222
1223
1224
12215
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
t236
1237
1238
1--------------------------------------.------------------------------
PAGE
0687
0687 FA
0688 F6 06 0097 fit 40
0680 7& 47
068F
0694
0696
0698
80
80
E6
EB
I
1
SND_LED
I
THIS ROUTINE TURNS ON THe: MODE INDICATORS.
I
I
1- ------ --------------- -- --------------- -- -------------- --- ----------SND LED PROC
NEAR
eLI
TURN OF'F' INTERRUPTS
CHECK F'OR MODE INDICATOR UPDATE
TEST
DONT UPDATE AGAIN IF UPDATE UNDERWAY
"NZ
OE 0097 R 40
20
20
00
069A
069A FA
069B F'6 06 0097 R 40
06.4.0 75 34
OE 0097 R 40
ED
064B R
OKS F'LAG 2 I KB PR LED
AL,!'OI
-020H , AL
SHORT SLO
TURN ON UPDATE IN PROCESS
END OF' I NTERRUPT COMMAND
SEND COMMAND TO I NTERRUPT CONTROL PORT
GO SEND MODE I NO I CATOR COMMAND
TEST
"NZ
;~~_FLAG_2IKB_PR_LED
TURN OF'F' INTERRUPTS
CHECK F'OR MODE INDICATOR UPDATE
DONT UPDATE AGAIN IF UPDATE UNDERWAY
OR
MOV
CALL
OKS FLAG 2 I KB PR LED
AL,CED CGD
-SND_DATA
TURN ON UPDATE IN PROCESS
LED CMD BYTE
SEND OAT A TO KEYBOARD
MAKE LED
OKS J!'LAG 2 , OF8H
GO F'ORM I NO I CATOR OAT A BYTE
CLEAR MODE INDICATOR BITS
SAVE PRESENT INDICATORS FOR NEXT TIME
TRANSMI T ERROR DETECTED
YES I BYPASS SECOND BYTE TRANSMI SS I ON
SND_DATA
SEND OAT A TO KEYBOARD
TURN OFF' INTERRUPTS
TRANSMI T ERROR DETECTED
I F' NOT I DONT SEND AN ENABLE COMMAND
DR
MOV
OUT
.-
I
SND_LEDI tLI
06A2
06A7
06A9
06AC
06AD
06BO
06B5
06B9
06BE
80
BO
E8
F'A
E8
80
08
F6
75
0608 R
26 0097 R F'8
06 0097 R
06 0097 R 80
08
CALL
AND
OR
TEST
"NZ
06CO
06C3
06C4
06C9
£8 064B R
F'A
F'6 06 0097 R 80
74 06
CALL
06CB
06CO
0600
0601
BO F'4
£8 064B R
FA
80 26 0097 R 3F
0606 F'B
0607 ca
0608
SLOI
eLI
eLI
I
SL21
TEST
;~~_F'LAG_2 I KS_ERR
MOV
CALL
GET KEYBOARD CSA ENABLE COMMANO
ALIKB ENABLE
SND_D'lTA
SEND OAT A TO KEYBOARD
TURN OF'F' INTERRUPTS
OKB FLAG 2 , NOT(KB PR LED KB ERR) I TURN OF'F' MODE INDICATOR
I UF"DATE AND TRANSMI TERROR F'LAG
I ENABLE INTERRUPTS
I RETURN TO CALLER
"Z
eLI
SL31
:~::~t~~:~:
~~- ERR
SL2-
AND
SLll
STI
RET
SND_LED ENOP
1- ----------------------------------------. -- ------ -- -.---- ------.- --I
1
MAKE_LED
I
I
THI S ROUTINE FORMS THE DATA BYTE NECESSARY TO TURN ON/OF'F'
THE MODE INDICATORS
I
I
0608
0608
0609
06DC
06DE
06EO
06E2
06E4
06£5
06£6
~;~E=LEO:~:~C---~~;;--------------------~-::::-::--------------------5t
AO
24
Bl
02
24
59
C3
00t7 R
70
04
CO
07
06£6
5-138
MOV
AND
MaV
ROL
AND
POP
RET
MAKE_LED ENDP
CODE
KYBD
ENDS
END
AL.OKB FLAG
1 GET CAPS & NUM LOCK INDICATORS
AL,CAP! STATE+NUM STATE+SCROLL STATE I ISOLATE INDICATORS
I SHIF'T COUNT
CL , 4
AL.CL
I SHIF'T BITS OVER TO TURN ON INDICATORS
AL.07H
I MAKE SURE ONLY MODE BITS ON
CX
I RETURN TO CALLER
•••
••
•
PAGE 118.121
PR I NTER ADAPTER BIOS
T I TL.E PRT ------ 06/10/85
.286C
.LIST
0000
COOE
T
••
••"••••
••
••••
••••
••••
••••
••••ao
.0
SEGMENT BYTE PUBL..I C
PUBLIC
F"RINTER 10 I
EXTRN
DDS I NEAR'
-
INT 11 H ---------------------------------------------------------------PRINTER 10
TRIS ROUTINE PROVIDES COMMUNICATION WITH THE PRINTER
INPUT
(AHI_ OOH PRINT THE CHARACTER IN (AL)
ON RETURN, (AH). 1 IF CHARACTER NOT BE PRINTED (TIME OUT)
OTHER BITS SET AS ON NORMAL STATUS CALL
(AH). 01H
INITIALIZE THE PRINTER PORT
RETURNS WITH (AHI SET WITH PRINTER STATUS
(AHI_ 02H READ THE PRINTER STATUS INTO (AH)
..
.T
r'
.0
1
is
6
a
l
41
_
,T
_
...••
1 • ACKNOWLEDGE
1 •
I
UNUSE!- TIME OUT
I _ 110 ERROR
SELECTED
OUT OF PAPER
1 • NOT BUSY
a.
a.
a.
n
a.
.
(OX I • PR I NTER TO BE USED (0. 1 .21 CORRESPOND I NG TO ACTUAL VALUES
IN .PR I NTER BASE AREA
DATA AREA .PRINTER SASE C~NTAINS THE BASE ADDRESS OF THE PRINTER CARD(S)
AVAILABLE (LOCATED-AT BEGI,NNING OF DATA SEGMENT, 408H ABSOLUTE, :3 WORCS)
'0
DATA AREA .PRINT TIM OUT (BYTEI MAY BE CHANGE TO CAUSE DIFFERENT
TIME OUT WAITS. l5EFAULTdO ....
••••
.a
••••
••
••••
••••••
••••
0000
.T
0008 C1 EA 02
REGISTERS
•T
.0
••
••••
••
.a
••
••••
••••
.
.0
.T
TO
T.
T.
13
T.
T.
T.
PRINTER
0000 FB
000 I 'E
0002 56
0003 52
0004 51
00015 153
0006 E8 0000 E
0009 as F2
OOOE 'T15 1A
0010 SA 'lit DOTe R
0014 Dl E6
0016 158 94 0008 R
OOIA DB D2
ODIC 74 OC
ODIE 0" £4
0020 T4 DE
0022 FE CC
0024 74 SIS
0026 FE CC
0028 14 3F
002A
002A 5S
••••
••••
••
••••
••n••
••••
••
••••
.a
aT
5£
IF
CF
0030 50
ENTRY PO I NT FOR ORG OEFD2H
INTERRUPTS SACK ON
SAVE SEGMENT
FAR
OS
S'
OX
CX
.X
DDS
SI,DX
DX,2
•• 0
:~:~PRINT_TIM_OUT(SI ]
DX,ePRINTER_BASE(SI]
DX,DX
•• 0
AH,AH
•• 0
AH
•• 0
AH
..0
.X
CX
OX
I
ADDRESS DATA SEGMENT
GET PR I NTER PARAMETER
tEST PARAMETER
rETURN IF NOT IN RANGE
LOAO TIMEOUT VALUE
WORD OFFSET INTO TABLE INTO (S I 1
GET BASE ADDRESS FOR PR I NTER CARD
TEST OX • ZERO, INDICATING NO PRINTER
EXIT,
NO PRINTER ADAPTER AT OFFSET
TEST FOR (AHI. OOH
PRINT CHARACTER IN (ALI
TEST FOR (AH). 01H
INITIALIZE PRINTER
TEST FOR (AH)
02H
GET PRINTER STATUS
=
51
B20,
PUSH
OUT
'NC
1----Don 53
eo
1----0039 B8 90FE
1----003E 2,., FF
0040 C1 D3 02
S251
0043
B301
0043 2B C9
SAVE VALUE TO PRINT
OUTPUT CHARACTER TO DATA PORT
POINT TO STATUS PORT
.X
AL,CX
AL,eOH
•••
SAVE TIMEOUT SASE COUNT
GET STATUS PORT VALUE
IS THE PRINTER CURRENTLY BUSY
SKIP SYSTEM DEVICE BUSY CALL IF NOT
INT 15 H -- DEVICE BUSY
MOV
'NT
003C CD 15
AX
DX,AL
OX
CHECK FOR PR I NTER BUSY
PUSH
'N
TEST
JNZ
0034 EC
0035 A8
0031 75 05
I RECOVER REG I STERS
I RETURN TO CALL I NG PROGRAM
PR I NT THE CHARACTER IN (ALI
0032 42
RETURN
OS
1----0031 EE
.T
".".
"a
".
PROC
IRET
•0
.00
.0.
'0'
'0'
.0.
'OS
'0'
.OT
.0.
.0.
"0
IS MODIFIED WITH STATUS INFORMATION
BIOI
0028 59
!SA.
002C
0020
002E
C02F
'0 •
-sTT
PUSH
PUSH
PUSH
PUSH
PUSH
CALL
MDV
SHR
JNZ
MDV
SHe
MOV
OR
JZ
OR
JZ
DEC
JZ
DEC
JZ
POP
PDP
POP
POP
POP
11
T.
T.
'0
(AH)
ALL OTHERS UNCHANGED
1------------------------------------------------------------------------------ASSUME CSICODE,OSIDATA
AX,90FEH
"H
FUNCTION 90 PRINTER 10
SYSTEM CALL
WAIT BUSY
SUB
Rce
BH,SH
BX,2
ADJUST OUTER LOOP COUNT
CLEAR (BH)
MULTIPLY BY ...
SUB
CX,CX
INNER LOOP (64K)
0046 8,., EO
IN
MDV
0048
004,.,
004C
004£
004F
A8
15
E2
48
16
TEST
JNZ
LOOP
DEC
JNZ
AL,DX
AH,AL
AL,80H
GET STATUS
STATUS TO (AHI ALSO
IS THE PRINTER CURRENTLY BUSY
GO TO OUTPUT STROBE
LOOP IF NOT
DECREMENT OUTER LOOP COUNT
MAKE ANOTHER PASS I F NOT ZERO
0051
58
0045
0045 EC
B351
80
DE
Fl
F2
0052 80 CC 01
0055 80 £4 F9
0068 ES IC
POP
OR
AND
JMP
•• 0
•••
.X
•• 0
.X
AH,I
AH,OF9H
SHORT Bl0
CLEAR (BX) FROM STACK
SET ERROR FLAG
TURN OFF THE UNUSED BITS
RETURN WI TH ERROR FLAG SET
PRT
5-139
pA;M_~~~~~"~!/ ~~iG~hpR ~~~:~ ~~AP~~ ·;IOS v.,.. I on
".
".","8
".
,.,
I ••
,_.
'2_
'2'
'2'
'2'
'2'
'28
,'2'
,'.2
..,,,....
,.,
,,..
,,,.,..
,,..
,,.,..
,,..
,,.,..
...
,,.....
,.......,
..,
131
'.8
'.2
.....-
OO!!A
OO!!A
005B
0050
OO!!E
OO!!F
0060
0062
0064
0066
0061
0068
00
,.-,.-
SEND STROBE PULSE
RESTORE (aX) WITH TIMEOUT COUNT
SET THE STROBE LOW (BIT ON)
OUTPUT STROBE TO CONTROL PORT
PREVENT INTERRUPT PULSE STRETCHING
OUTPUT STROBE BIT
> lUll < 5us
I/O DELAY TO ALLOW FOR LINE LOADING
AND FOR CORRECT PULSE WIDTH
SET THE -STROBE HIGH
AX
I NTERRUPTS BACK ON
RECOVER THE OUTPUT CHAR
POP
MOV
INC
.X
OUT
"MP
"MP
MOV
OUT
ST'
POP
DX,AL
cel
00
00
OC
ALIODH
OX
AL,OCH
DX,AL
PRINTER STATUS
B501
50
PUSH
AX
MOV
'NC
'N
'N
MOV
ANO
g~I.PRINTER_BASE[S I )
B601
8B 94 oooe R
42
EC
EC
8A EO
eo E4 F8
B10,
5A
8A C2
80 F4 48
EB AC
POP
MOV
XOR
"MP
1----OOlE
OOlE
OOlF
0080
0081
0083
00e4
0081
ooel
0088
ooeA
ooec
oDeD
1-2
04-21-86
84 ••
!!B
BO
42
FA
EE
EB
EB
BO
EE
FB
58
,----0069
0069
006A
006A
006E
006F
0010
0011
0073
0016
0016
0071
0079
OOlC
2.00
, SAVE (AL) REGISTER
GET PRINTER ATTACHMENT BASE ADDRESS
PO I NT TO CONTROL PORT
PRE-CHARGE +BUSY LINE IF FLOATING
GET PRINTER STATUS HARDWARE BITS
SAVE
TURN OFF UNUSED BITS
ALIDX
AL.DX
AHIAL
AH I OF8H
.,.
RECOVER (ALI REGISTER
MOVE CHARACTER INTO (AL)
FLIP A COUPLE OF BITS
RETURN FROM ROUTINE WITH STATUS IN AH
OX
ALIDL
AH.48H
INITIALIZE THE PRINTER PORT
B80.
50
42
42
SO 08
EE
se OF'AO
PUSH
'NC
'NC
MOV
OUT
MOV
AX
OX
OX
AL I 8
DXIAL
AX , 1000·4
B901
4e
15 FO
so OC
EE
EB os
DEC
"NZ
MOV
OUT
"MP
ooeF
ooeF
5-140
ALIOCH
DXIAL
PRINTER_IO_'
ENDP
CODE
ENDS
ENO
PRT
AX
•••
•••
,
SAVE (AL)
PO I NT TO OUTPUT PORT
SET INIT LINE LOW
AD.JUST FOR INITIALIZATION DELAY LOOP
INIT LOOP
LOOP-FOR RESET TO TAKE
INIT LOOP
NO I RTERRUPTS. NON AUTO LF. INIT HIGH
I EXIT THROUGH STATUS ROUTINE
1-1
04-21-86
1
PAGE "8.121
TITLE RS232 ---- 06/10/85
2
••
IS
COMMUNICATIONS 810S
(RS2l2)
.2UC
.LIST
0000
CODE
6
T
8
•
10
11
12
SEGMENT BYTE PUBL I C
PUBLIC
EXTRN
RS232 10 I
AI I NEAR -
EXTRN
DDSINEAR
INT 14 H -----------------------------------------------------------------5232 10
I
- THIS ROUTINE PROVIDES BYTE STREAM I/O TO THE COMMUNICATIONS
PORT ACCORDING TO THE PARAMETERS,
,.,.
13
(AH);; OOH
..
16
1T
18
INITIALIZE THE COMMUNICATIONS PORT
(ALl HAS PARAMETERS FOR INITIAL.IZATION
T
6
•
----- BAUD RATE --
20
21
22
•
•
-PARITY--
000 - 110
XO 001 - 150
01 11,010 - 300
01 1 - 600
100 - 1200
101 - 2400
I 10 - 4800
III - 9600
ON RETURN, COND 1T IONS SET AS
2.
2'
2.
26
2T
20
2'
.0
(AH):I 0 I H
31
'2
••••••
.6
.T
••
.0
.,.2••
••••
••
.6
••••
.0
.,.2
••••
(AHI
=
02H
(AHI= 03H
4T
••
••'8
.6
.T
2
STOPBIT
I
0
,
--WORO LENGTH--
o -
1
1 - 2
NONE
ODD
EVEN
10 - 7 BITS
11-8BITS
IN CALL TO COMMO STATUS (AH=03H)
SEND THE CHARACTER IN (AL) OVER THE COMMO LINE
(ALl REG I STER IS PRESERVEC
ON EXIT, BIT 7 OF AH IS SET IF THE ROUTINE WAS UNABLE TO
TO TRANSM I T THE BYTE OF OAT A OVER THE LINE •
IF BIT 7 OF AH IS NOT SET, THE
REMAINDER OF (AH) IS SET AS IN A STATUS REQUEST,
REFLECTING THE CURRENT STATUS OF THE LINE.
RECEIVE A CHARACTER IN (AL) FROM COMMO LINE BEFORE
RETURN I NG TO CALLER
ON EXIT, (AHI HAS THE CURRENT LINE STATUS, AS SET BY THE
THE STATUS ROUTINE, EXCEPT THAT THE ONLY BITS
LEFT ON ARE THE ERROR BITS (7,4,3,2, I I
IF (AHI HAS BIT 7 ON (TIME OUT) THE REMAINING
BITS ARE NOT PREDICTABLE.
THUS, I AH) I S NON ZERO ONLY WHEN AN ERROR OCCURRED •
RETURN THE COMMO PORT STATUS IN IAXI
(AHI CONTAINS THE LINE CONTROL STATUS
BIT 7 = TIME OUT
BIT 6 = TRANSMIT SHIFT REGISTER EMPTY
BIT 5 = TRANSMIT HOLDING REGISTER EMPTY
BIT 4 ;; BREAK DETECT
BIT 3 = FRAMING ERROR
BIT 2 = PARITY ERROR
BIT I ;; OVERRUN ERROR
BIT 0 :I DATA READY
(ALI CONTAINS THE MODEM STATUS
BIT 7 ;; RECEIVE LINE SIGNAL DETECT
BIT 6 = RING INDICATOR
BIT 5
DATA SET READY
BIT 4
CLEAR TO SEND
BIT :3 = DELTA RECEIVE LINE SIGNAL DETECT
BIT 2 = TRAILING EDGE RING DETECTOR
BIT I ;; DELTA DATA SET READY
BIT 0 = DELTA CLEAR TO SEND
=
=
..••
60
61
62
IOXI ;; PARAMETER INDICATING WHICH RS232 CARD (O - 3 ALLOWED)
66
6T
DATA AREA ORS232 BASE CONTAINS THE BASE ADDRESS OF THE 8250 ON THE CARD
LOCATION 4lioH CONTAINS UP TO 4 RS232 ADDRESSES POSSIBLE
DATA AREA LABEL ORS232 TIM OUT (BYTEI CONTAINS OUTER L.OOP COUNT
VALUE FOR TIMEOUT (DEFAULT;'I)
,OUTPUT
1
AX MODIFIED ACCORDING TO PARAMETERS OF CALL
I
ALL OTHERS UNCHANGED
,
,
1-- -- ---------- --- --- -------------- ---- --- - - -- ------------------ -- --- - - --------ASSUME CS I CODE I OS t DATA
RS232_10_1
PROC
FAR
68
6.
TO
Tl
T2
T.
T,T.
T6
T.
T.
Tl
0000
81
0000 FB
82
0001
1-----
VECTOR TO APPROPRIATE ROUTINE
80
n
STI
PUSH
PUSH
PUSH
PUSH
PUSH
PUSH
.DV
.DV
SHR
IE
0002 52
84
85
86
0003 56
0004 51
0005 51
8T
88
0006 53
OOOT 88 F2
89
0009 88 FA
90
91
0008 CI EA 02
OOOE 75 20
92
93
94
95
96
91
98
99
100
101
102
103
0010
0012
0015
0019
0018
0010
OOIF'
0021
0023
0025
0027
0029
104
105
106
0029 FE CC
0028 75 03
0020 E9 00B8 R
107
108
109
0030
0030 58
0031 59
110
0032 !SF
It 1
112
113
114
0033
0034
0035
0036
01
E8
88
DB
14
OA
74
FE
74
FE
14
~NZ
E6
0000 E
94 0000 R
02
13
E4
16
CC
48
CC
TO
SHL
CALL
.DV
OR
~Z
OR
~Z
DEC
~Z
DEC
~Z
INTERRUPTS BACK ON
SAVE SEGMENT
OS
OX
51
01
ex
BX
SIIDX
DIIDX
DX,2
A.
SI,1
DDS
g~:~~S232_BASE(S I
A.
AHIAH
A.
AH
A.
AH
Al2
RS232 VALUE TO (SI)
AND TO (01) (FOR TlMEOUTS)
TEST PARAMETER
RETURN I F NOT I N RANGE
WORD OFFSET
J
GET BASE ADDRESS
TEST FOR 0 BASE ADDRESS
RETURN
TEST FOR (AH) = OOH
COMMO INITIALIZATION
TEST FOR (AHI. OIH
SEND (AL)
TEST FOR (AH). 02H
RECEIVE INTO (AL)
A21
ISE
SA
IF
CF
OEC
~NZ
~.P
A',
POP
POP
POP
POP
POP
POP
IRET
AH
A.
AI.
1 TEST FOR (AHI
=
03H
COMMUNICATION STATUS
RETURN FROM RS232
BX
ex
01
51
Ox
as
; RETURN TO CALLER I NO ACT I ON
RS232
5-141
1-2
04-21-86
II.
II.
'"
I III
119
120
121
122
PAGE
1-----
0031
0037
0039
003e
003E
IA EO
83 C2 03
BO 80
EE
126
127
128
129
130
131
132
OOlF
0041
0043
0045
0049
004C
004E
8A
81
D2
8t
SF
03
88
133
134
00152 42
0053 iEa 8A 45 01
12.
12.
12.
135
0057 EE
0058 4"
137
138
139
140
141
142
143
0059
0058
005E
005F
0062
0064
0066
144
145
0067 4,\
0068 4A
146
147
148
149
150
0069
0068
0060
006E
0070
0070
0071
0074
0076
'58
lIS'
161
168
I ••
170
171
172
04
04
C2
E2 OOOE
0000 E
FA
94 0000 R
oon
50
83 C2 04
80 03
EE
007E
0080
0080
0081
0083
0083
0086
74 08
GET HIGH OROER OF DIVISOR
SET ma OF OIVISOR TO 0
I/O oEL.AY
GET LOW ORDER OF 0 I V I SOR
SET LOW OF DIVISOR
AND
DEC
DEC
ox
ox
"MP
MOV
OUT
"MP
AL,O
OX,AL
SHORT AI8
1 1/0 DELAY
I NTERRUPT ENABLES ALL OFF
COM_STATUS
SEND CHARACTER IN (AL) OVER COMMa LINE
PUSH
ADO
MOV
OUT
INC
INC
MOV
CALL
"E
AX
OX , '"
AL,3
OXIAL
SAVE CHAR TO SEND
MODEM CONTROL. REGI STER
DTR AND RTS
DATA TERMINAL READY, REQUEST TO SEND
MODEM STATUS REGISTER
8H,30H
::IT_FOR_STATUS
DATA SET READY & CLEAR TO SEND
ARE BOTH TRUE
YES. READY TO TRANSM I T CHAR
ox
ox
Al..,CL
RELOAD OAT A BYTE
AH,80H
ES A8
"MP
A,
INDICATE TIME OUT
RETURN
A"
4A
DEC
ox
MOV
CAL.L
"NZ
BH,20H
WAIT FOR STATUS
A7 -
SUB
POP
MOV
OUT
"MP
ox,s
AIO,
87 20
E8 OOCA R
75 FO
Alii
83 EA 05
59
CLEAR TO SEND
LINE !TATus REGISTER
WAIT SEND
I S T"ANSM I TTER REAOY
TEST FOR TRANSM I TTER READY
RETURN WITH TIME OUT SET
OUT CHAR
DATA PORT
RECOVER IN CX TEMPORAR I L Y
MOVE CHAR TO AL FOR OUT, STATUS IN AH
OUTPUT CHARACTER
RETURN
cx
AL,CL.
DX,AL
A.
RECE I VE CHARACTER FROM COMMO LINE
A12,
83 C2 04
ADO
BO 01
££
42
42
MOV
OUT
BH I 20H
WAIT FOR STATUS
A8 -
DEC
ox
MOV
CAL.L.
"NZ
BH,I
::IT_FOR_STATUS
A16,
B7 01
E8 OOCA R
75 03
AI7I
AND
00B3 88 '4 0000 R
00B7 EC
00B8 E9 0030 R
MOV
IN
"MP
1-----
I MODEM STATUS REG I STER
MOV
CALL.
"NZ
A151
4A
1 MODEM CONTROL REGISTER
DX
ox
AI3,
BT 20
E8 OOCA R
75 DB
OX,4
ALII
DX,AL.
INC
INC
80 E4 IE
5-142
'+2
GET PARAMETERS BACK
STRIP OFF THE BAUD BITS
LINE CONTROL TO 8 BITS
cx
1-----
00B8
OOBB
OOBF'
00C2
OOC!
00C5
00C6
00C7
AL,eS,IOI]
aX,AL
ax,s
AL,AH
AL,OIFH
OX,AL
OR
20.
210
211
212
213
214
2115
216
217
AL,CSI [01)+ I
DXIAL
A••
182
I ••
20'
208
20'
ox
POP
MOV
59
8A Cl
0096 EE
0097 ES 91
204
205
206
I SOLATE THEM
BASE OF' TABLE
PUT INTO INDEX REGISTER
POINT TO HIGH ORDER OF' DIVISOR
80 CC 80
180
181
0099
0099
009C
009£
009F'
OOAO
OOAI
OOAI
00A3
00A6
00A8
00A8
00A9
00A9
OOAB
OOA£
OOBO
OOBO
I GET PARAMETERS TO (DLI
'+2
ADO
AT.
OL,AH
CL I 4
DL,CL
DXIOEH
DI,OF'FSET AI
OI,DX
~~ I .RS2S2_BASE [S I]
DEC
OUT
A',
SAVE INITIALIZATION PARAMETERS IN (AH)
POINT TO 8250 CONTROL REGISTER
I SET DLAB=I
"MP
MOV
OUT
MOV
007B £8 OOCA R
0094 8A CI
187
1158
189
190
191
192
193
1'4
195
196
197
1.8
199
200
201
202
ADO
MOV
INC
MOV
OUT
42
179
186
MOV
0078 42
0079 87 30
174
115
116
171
178
I ••
185
MOV
ROL
AND
ES 00
BO 00
EE
EB 48
AH,AL
OX , 3
AL,80H
DX,AL
DETERMINE BAUD RATE DIVISOR
MOV
ES 00
2EI 8A 05
EE
83 C2 03
8A C4
24 IF
EE
0088
0088
0089
Ci089
008B
008E
0090
0090
0093
in
AOD
NOV
OUT
1-----
1!13
154
1&&
156
157
160
161
162
t 63
164
165
166
MOV
1-----
136
,.,
,.2
INITIALIZE THE COMMUNICATIONS PORT
A4.
AH I 000ll110B
.
OX , .RS232_BASE(SI]
AL,DX
I OAT A TERM I NAL READY
WAIT DSR
OAT A-SET READY
TEST FOR DSR
RETURN WITH ERROR
WAIT DSR END
LINE-STATus REGISTER
WAIT RECV
RECETvE BUFFER FULL
TEST FOR RECE I VE BUFFER FULL.
SET T I ME OUT ERROR
GET CHAR
TEsT FOR ERROR CONDITIONS ON RECEIVE
DATA PORT
GET CHARACTER FROM LINE
RETURN
COMMO PORT STATUS ROUTINE
AI8,
8B
83
EC
8A
42
EC
E9
94 0000 R
C2 05
MOV
EO
MOV
OX , .RS232_BASE[S I]
OX,S
AL,DX
AH,AL
INC
IN
AL,DX
0030 R
RS232
ADO
IN
""P
ox
A.
CONTROL PORT
GET LINE CONTROL STATUS
PUT IN (AHI f"OR RETURN
POINT TO MOOEM STATUS REGISTER
GET MODEM CONTROL STATUS
RETURN
1-'
04-21-86
21.
21.
220
221
222
223
22.
220
22.
221
228
22'
230
231
232
233
23.
23.
23.
231
23.
23'
2.0
2.,
2.2
••3
...••••••
..'"••••••,
•• 0
•• 2
203
2 ••
•••
•••
•••
•••
2.'
2.0
2.,
,.2
•• s
,- ---- ------------ --------------. ---- ----
PAGE
I
WAIT FOR STATUS ROUTINE
I
I ENTRY 1 (8H) .. STA.TUS BITIS} TO LOOK FOR I
I
(OX).. ADDRESS OF 51 "TUS REG
IEXIT,
ZERO FLAG ON :II STATUS FOUND
I
ZERO FLAG Orr .. TIMEOUT.
1
("H) .. LAST STATUS READ
I
I -- - - --------- --. ------- - - -- - ---------- --
OOCA
OOCA. SA. 90 DOlC R
.,\ I T FOR 51 ATUS PRoe
NEAR
Uov
BL ••RS232_TlM_DUT[DIJ
1-----
OOCE 55
I 1..0AO OUTER LOOP COUNT
AD.JUST OUTER LOOP COUNT
SAVE (BP)
SAVE IBX)
USE SP FOR OUTER LOOP COUNT
PUSH
PUSH
POP
AND
RCL
RCL
BP
BX
BP
SUB
eX,ex
IN
MOV
AND
CMP
JE
1.1..,81'4
00£4 £2 F5
LOOP
IFSI
00£6 40
DEC
JNZ
BP
DR
BH,SH
I SET ZERO FL.AG orF
POP
RET
BP
I RESTORE (BP)
OOCF 53
0000 50
0001 81 E!5 DOFF
0005 Ol 05
0007 01 OS
0009
00D9 28 C9
0008
OOOS
DaDe
DaDE
ODED
00£2
WFSOI
BP.OOFFH
STRIP HIGH BITS
BP,1
BP.1
MULTIPLY OUTER COUNT BY 4
IFSII
EC
SA EO
22 CT
3A. CT
74 OT
OOEl T!5 Fa
00E9 OAo FF
00E8
00E8 50
aOEe C3
AL.OX
AH,AL
AL-,BH
wrS_END
GET STATUS
MOVE TO IAH)
ISOLATE BITS TO TEST
EXACTLY. TO MASK
RETURN WITH ZERO FLAG ON
I TRY AGAIN
IPSO
IFS_ENDI
ODED
WAIT_FOR_STATUS ENOP
ODED
RS232 1o_1
ODED
CODE
-
ENDP
ENOS
END
RS232
5-143
I-I
04-21-86
PAGE 118,121
TITLE VIDEOI --- 0'3/24/86
.LIST
I
2
•
•
...
CODE
0000
VIDEO DISPLAY BIOS
SEGMENT BYTE PUBL I C
5
T
8
•
"
10
12
13
"IS
I.
..
IT
PUBLIC
PU8L I C
PUBL I C
PUBL J C
PUSL I C
PUBL J C
ACT CISP PAGE
REAi5 AC eURRENT
REAO-CUA'SOR
REAO-OOT
REAO-LPEN
SCROtL DOWN
PUBL I C
PUSL I C
PUBL I C
PUBL I C
PUSL I C
SCROLL-UP
SET eotoR
SET-CPOS
SET-CTVPE
SET-MODE
PUBL I C
WR I TE AC CURRENT
WRITE-C CURRENT
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBLIC
18
20
21
22
2.
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
2'
25
2.
2T
28
2'
WRITE-aliT
WRITE-TTY
VIDEO-IO I
VIDEO:STATE
BEEP r NEAR
CRT CHAR GEN I NEAR
DDSSNEAR-
SPEAKER BEEP ROUT I NE
CHARACTER GENERATOR GRAPHICS TABLE
LOAD (OS) WITH DATA SEGMENT SELECTOR
REGEN BUFFER LENGTH TABLE
COLUMNS PER MODE TABLE
MODE SET VALUE PER MODE TABLE
Me I WORD
t.t6rBYTE
MTr8YTE
30
31
.2
I NT 10 H ------------------------------------------------------------------
VIDEO-~~ESE
33
ROUTINES PROVIDE THE CRT DISPLAY INTERFACE
THE FOLLOW I NG FUNCT IONS ARE PROV IDEO s
3'
.5
3.
(AH) = OOH
3T
.8
39
.,
.0
.2
••••••
••
.T
••
.8
(AH) = OIH
50
51
.2
53
••5.
(AHI: 02H
58
5'
.,••
••••
••
.T
••
(AHI: 03H
TO
TI
(AH): 05H
T2
(AHI = 06H
__
55
5T
.2
(AHI = 04H
.S
.8
Tl
T'
T5
T.
n
T8
(AHI = 07H
T'
80
81
82
83
8'
85
8!TS "!-O
=
E~m
LH~::
f'OR
C;;r\~OR
SET CURSOR POSITION
iDH.OLl = ROW,COLUMN
(OOH.OOH) IS UPPER LEFT
(BH) = PAGE NUMBER (MUST BE OOH FOR GRAPHICS MODES!
READ CURSOR POSITION
(SH) : PAGE NUMBER (MUST BE OOH FOR GRAPHICS MODES)
ON EXIT (DH,DLI = ROW,COLUMN OF CURRENT CURSOR
(CH,CLI = CURSOR MODE CURRENTLY SET
READ LIGHT PEN POSITION
ON EXITs
(AHI = OOH -- LIGHT PEN SWITCH NOT DOWN/NOT TRIGGERED
(AHI : OIH -- VALID LIGHT PEN VALUE IN REGISTERS
(DHIDLl = ROW,COLUMN OF CHARACTER LP POSITION
(CH) : RASTER LINE (0-199)
(BXI = PIXEL COLUMN (0-319,639)
SELECT ACTIVE DISPLAY PACiE (VALID ONLY FOR ALPHA MODES)
(ALI = NEW PAGE VALUE (0-1 FOR MODES 0&1, 0-3 FOR MODES 2&3)
SCROLL ACTIVE PAGE UP
(AL) = NUMBER OF LINES. ( LINES BLANKED AT BOTTOM OF WINDOW)
(ALI : OOH MEANS BLANK ENTIRE WINDOW
I CH, CL) = ROW. COLUMN OF UPPER LEFT CORNER OF SCROLL
I DH I DL) = ROW, COLUMN OF LOWER RIGHT CORNER OF SCROLL
ISH) : ATTRIBUTE TO BE USED ON BLANK LINE
SCROLL ACTIVE PAGE DOWN
(ALI: NUMBER OF LINES. INPUT LINES BLANKED AT TOP OF WINDOW
I ALI = OOH MEANS BLANK ENTI RE WINDOW
(CH. CL) = ROW. COLUMN OF UPPER LEFT CORNER OF SCROLL
(DH, DL) :II: ROW. COLUMN OF LOWER RIGHT CORNER OF SCROLL
IBH) = ATTRIBUTE TO BE USED ON BLANK LINE
CHARACTER HANDL I NG ROUT I NES
8.
(AH): OSH
READ ATTRIBUTE/CHARACTER AT CURRENT CURSOR POSITION
(BH) = DISPLAY PAGE (VALID FOR ALPHA MODES ONLY)
ON EXITt
(AL I = CHAR READ
(AHI z ATTRIBUTE OF CHARACTER READ (ALPHA MODES ONLY)
(AHI= 09H WRITE ATTRIBUTE/CHARACTER AT CURRENT CURSOR POSITION
(BH) = DISPLAY PAGE (VALID FOR ALPHA MODES ONLY)
(CX) : COUNT OF CHARACTERS TO WRITE
(ALI = CHAR TO WRITE
(BL) = ATTRIBUTE OF CHARACTER (ALPHA) ICOLOR OF CHAR (GRAPHICS)
SEE NOTE ON WRITE DOT FOR BIT 7 OF BL = I.
(AH)= OAH WRITE CHARACTER ONLY AT CURRENT CURSOR POSITION
(SH) = DISPLAY PAGE (VALID FOR ALPHA MODES ONLY)
(CX) = COUNT OF CHARACTERS TO WRITE
(ALI : CHAR TO WR IfE
NOTE I USE FUNCTION (AH): 09H IN CiRAPHICS MODES
FOR READ I WR I TE CHARACTER I NTERF ACE WH I LE I N GRAPH I CS MODE I THE
CHARACTERS ARE FORMED FROM A CHARACTER GENERATOR IMAGE
MAINTAINED IN THE SYSTEM ROM.
ONLY THE 1ST 128 CHARS
ARE CONTAINED THERE.
TO READIWRJTE THE SECOND 128 CHARS.
THE USER MUST INITIALIZE THE POINTER AT INTERRUPT 1FH
(LOCATION 0007CH) TO POINT TO THE 1K BYTE TABLE CONTAINING
THE CODE POINTS FOR THE SECOND 128 CHARS (128-2551.
FOR WRITE CHARACTER INTERFACE IN GRAPHICS MODE, THE REPLICATION FACTOR
CONTAINED IN (CX) ON ENTRY WILL PRODUCE VALID RESULTS ONLY
FOR CHARACTERS CONTAINED ON THE SAME ROW.
CONTINUATION TO
SUCCEED I NG LINES WILL NOT PRODUCE CORRECTLY.
8T
88
8.
.0
91
.2
03
••
,T••
••••
,.,
'S
10.
102
103
I ••
105
10.
lOT
108
'0'
flO
",
"2
".
II.
5-144
SET MODE (ALI CONTAINS MODE VALUE
(ALI = OOH 40X25 BW MODE (POWER ON DEFAULT)
(AL) = OIH 40X25 COLOR
(ALI = 02H 80X25 BW
(AL) = 03H 80X25 COLOR
GRAPH I CS MODES
(ALI = 04H 320X200 COLOR
(AL) = 05H 320X200 BW MODE
(ALI : 06H 640X200 BW MODE
(AL) = 01H
80X25 MONOCHROME (USED INTERNAL TO VIDEO ONLY)
• •• NOTES -BW MODES OPERATE SAME AS COLOR MODES, BUT COLOR
BURST I S NOT ENABLED
-CURSOR IS NOT DISPLAYED IN GRAPHICS MODE
SET CURSOR TYPE
BITS 4-0 : START LINE FOR CURSOR
(CH)
•• HARDWARE WILL ALWAYS CAUSE BLINK
•• SETTING BIT 5 OR 6 WILL CAUSE ERRATIC BLINKING
OR NO CURSOR AT ALL
VIDEO 1
,,,
,
l
:
1-2
04-21-86
II.
II.
GRAPHICS INTERFACE
"T
II.
IAH)
= OSH
II.
120
121
122
12.
12.
12.
12.
12T
128
12.
130
(AHI= OCH
131
132
13.
13.
13'
13.
13T
138
(AH J = OOH
13.
'.0
,.,
..
..
,.2
,.,
,,
,.T
,,".
,.0
,.,
,.2
ASCII TELETYPE ROUTINE FOR OUTPUT
(AH)= OEH
(AH)= OFH
(AH)=
(AH):
(AH):
(AH)=
10H
IIH
I 2H
13H
,.0
,.,
,.2
,,
,,.,
,.T
'.8
,
....
..
lTO
lTl
lT2
1 T.
1 T.
1 TO
17.
1 TT
1 T.
1 TO
BX,CX,DX,SI ,DI,BP,SP,DS.ES, 55 PRESERVED DURING CALL.S EXCEPT FOR
BX,CX,OX RETURN VALUES ON FUNCTIONS 03H,04H,ODH AND OOH. ON All CALLS
AX IS MODIFIED.
s
I --- - - - - - -- ---- ---- - ---------- - ----- -- -------- - -------------- - --- ---------- -----
,.,
,.2
,.,
'.0
..
186
18T
0000 aO·SF R
0002 0146 R
188
00040168 R
189
190
191
0006 0193 R
0008 0189 R
COCA. 01AA R
192
193
COOC 0213 R
CODE 0281 R
194
00 I 0 0303 R
195
196
191
198
199
200
201
0012 0360 R
0014 0392 R
0016 DICC R
0018 0454 R
COlA 0443 R
ODIC 0702 R
ODIE DIF2 R
202
203
204
205
206
20T
208
209
210
0020 0130
0022 0130
0024 0130
0026 Ol8F
= 0028
211
212
226
221
228
Ml
R
R
R
R
00Z8
0028
0029
002A
0020
FB
Fe
80 FC 104
73 2F
C02F
0030
0031
0032
0033
0034
0035
0036
0037
003A
OOlC
DOlE
06
IE
52
51
53
56
57
55
BE
BE
88
AD
213
214
215
216
211
218
219
220
221
222
223
224
225
WRITE TELETYPE TO ACTIVE PAGE
(All = CHAR TO WRITE
(Bl) = FOREGROUND COLOR IN GRAPHICS MODE
NOTE -- SCREEN WIDTH I S CONTROllED BY PREV I OUS MODE SET
CURRENT VIDEO STATE
RETURNS THE CURRENT V IDEO STATE
(All = MODE CURRENTLY SET ( SEE (AHI = OOH FOR EXPLANATION)
(AH I
NUMBER OF CHARACTER COLUMNS ON SCREEN
(SH) : CURRENT ACTIVE DISPLAY PAGE
RESERVED
RESERVED
RESERVED
WRITE STRING
ESsBP
POINTER TO STRING TO BE WRITTEN
CX
LENGTH OF CHARACTER STR I NG TO WR I TTEN
OX
CURSOR POS I T I ON FOR STR I NG TO BE WR I TTEN
BH
PAGE NUMBER
(Al)= OOH WRITE CHARACTER STRING
Bl
ATTRIBUTE
STRING IS
CURSOR NOT MOVED
(AL) = 0 I H WR I TE CHARACTER STR I NG AND MOVE CURSOR
Bl
ATTR IBUTE
STR I NG I S
CURSOR I S MOVED
(Al) = 02H WR I TE CHARACTER AND A TTR I BUTE STR I NG
(VALID FOR ALPHA MODES ONLY)
STRING IS
CURSOR IS NOT MOVED
(ALI = 03H WRITE CHARACTER AND ATTRIBUTE STRING AND MOVE CURSOR
(VAL I 0 FOR ALPHA MOOES ONLY)
STRING IS
CURSOR I S MOVED
NOTEs
CARRIAGE RETURN, LINE FEED, BACKSPACE. AND BEll ARE
TREATED AS COMMANDS RATHER THAN PR I NT ABLE CHARACTERS.
=
,..
,..
,..
,..
,.T
,..
,..
,,
SET COLOR PALETTE
(BH) = PALETTE COLOR 10 BEING SET (0-127)
1BL) = COLOR VALUE TO BE USED WITH THAT COLOR 10
NOTEs FOR THE CURRENT COLOR CARD, THIS ENTRY POINT HAS
MEANING ONLY FOR 320X200 GRAPHICS.
COLOR 10 = 0 SELECTS THE BACKGROUND COLOR (0-15)
COLOR 10 = I SELECTS THE PALETTE TO BE USED,
o = GREEN ( 1 J IREDI2) IYEllOW(3)
1 = CYAN( I) /MAGENTA(2) /WHITE(3)
IN 40X25 OR 80X25 ALPHA MOOES, THE VALUE SET FOR
PALETTE COLOR 0 INDICATES THE BOROER COLOR
TO BE USED (VALUES 0-31, WHERE 16-31 SELECT
THE HIGH I NTENS I TY BACKGROUND SET.
WRITE DOT
(OX) = ROW NUMBER
(CX I = COLUMN NUMBER
(Al) = COLOR VALUE
IF BIT T OF Al = I, THEN THE COLOR VALUE IS EXCLUSIVE
ORed WITH THE CURRENT CONTENTS OF THE DOT
READ DOT
(OX I = ROW NUMBER
(CX I = COLUMN NUMBER
(Al I RETURNS THE DOT READ
---- R
DE
FO
00 lOR
0041 24 30
0043 ac 30
0045 BF 8800
M1L
ASSUME
CSICODE.DS;DATA.ESINOTHING
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
OFFSET
OFFSET
OFFSET
OFFSET
OFFSET
OFFSET
OFFSET
OFFSET
OFFSET
OFFSET
OFFSET
OFFSET
OFFSET
OFFSET
OFFSET
OFFSET
OFFSET
OFFSET
OFFSET
OFFSET
,-MI
EOU
VIOEO_IO!+I
PROC
SET MODE
SET-CTYPE
SET-CPOS
I
~~;g~~~;~::GE
uP'
SCRaL.l
SCROLL-DOWN
READ AC CURRENT
WR I TE' AC CURRENT
WR I TE-C CURRENT
SET CalOR
WRlfE DOT
READ liOT
WRITE' TTY
V I DEO-ST ATE
VIDEO-RETURN
V IDEO-RETURN
V IDEO-RETURN
WR I TE:STR I NG
RESERVED
RESERVED
RESERVED
CASE 13H, WRITE STRING
NEAR
ENTRY PO I NT FOR ORG OF065H
INTERRUPTS BACK ON
SET DIRECTION FORWARD
TEST FOR WITHIN TABLE RANGE
BRANCH TO EX I T I F NOT A VAL I 0 COMMAND
eLD
eMP
AH.MIL./2
"NB
M'
PUSH
PUSH
PUSH
PUSH
PUSH
PUSH
PUSH
PUSH
MDV
MDV
MDV
MDV
AND
ES
DS
DX
eMP
MOV
TABLE OF ROUTINES WITHIN VIDEO I/O
I
SAVE WORK AND PARAMETER REGISTERS
ex
BX
51
DI
BP
SI,DATA
I POINT OS, TO DATA SEGMENT
05,51
SAVE COMMAND/DATA INTO (51) REGISTER
51 ,AX
Al.BYTE PTR OEQU I P FLAG
GET THE EQUIPMENT FLAG VIDEO BITS
AL.30H
I SOLATE CRT SW ITCHES
Al,30H
IS SETT I NG FOR MONOCHROME CARD?
DI,OB800H
GET SEGMENT FOR COLOR CARD
VIDEOl
5-145
'-3
04-21-86
229
230
231
232
233
234
235
236
0048
004A
0040
0040
004F
0051
0052
0064
T5 03
BF BODO
231
238
"N"
MOV
M2
DI,OBOOOH
SK I P I F NOT MONOCHROME CARD
ELSE GET SEGMENT FOR MONOCHROME CARD
MOV
MOV
CBW
SAC
XCHG
ES,DI
AL,AH
SET UP TO POINT AT VIDEO MEMORY AREAS
PLACE COMMAND IN LOW BYTE OF (AX)
AND FORM BYTE OFFSET WITH COMMAND
TIMES 2 FOR WORD TABLE LOOKUP
MOVE OFFSET I NTo LOOK UP REG I STER (SI)
AND REStORE COMMAND/DATA INTO (AX)
MOVE CURRENT MODE INTO t AH) REG I STER
M2.
8E CT
8A C4
98
01 EO
96
AX,I
SI,AX
0055 8A 26 0049 R
MOV
AM, OCRT _MODE
0059 2EI FF A4 0000 R
""P
WORD PTR CS a [S I +OFFSET M 1 ]
239
240
242
243
244
2.5
005E
005E CF
005F
IRET
VIDEO 10 I
2 ••
I
I
I
2.T
2'.
2.'
250
I
I
I
2 ••
252
253
I
I
I
2 ••
2.5
25.
25\7
258
259
260
261
262
263
264
265
266
267
268
269
2TO
2T I
2T2
2T3
2T4
2T5
2T6
2TT
2T8
279
280
281
282
283
284
286
286
281'
288
2 ••
290
291
292
I
005F
005F
0062
0066
006A
0060
006F
OOTI
00T3
00T5
00T5
OOTT
0079
DOTS
DOTE
0080
0082
0082
0085
0089
008E
008F
0090
0091
0093
0098
009B
0090
009E
OOAI
00A2
BA
8B
8I
83
T5
BO
B2
ES
0304
3E 0010 R
ET 0030
FF 30
06
OT
B4
00
3C
T2
SO
83
T4
SO
OT
09
00
-
FF 10
02
02
A2 0049 R
89 16 0063 R
C6 06 0084 R 18
IE
50
98
8S Fa
2EI 8A 84 0000 E
A2 0065 R
24 37
52
83 C2 04
EE
5A
M.,
58
89
3C
T2
03
3C
T2
OS
SC
T2
OS
00 I
02
OE
09
04
08
09
OT
02
09
a
CMP
.JB
MOV
CMP
AL, T
ALID
DI,10H
CHECK FOR VALID COL.oR MODES 0-6
CONTINUE IF BELOW MODE 7
FORCE DEFAULT 40x25 BW MODE
CHECK FOR .EQUIP FL.AG AT 40x25 COL.OR
CONTINUE WITH MO&: a IF NOT
ELSE FORCE MODE 2
MOV
MOV
MOV
PUSM
PUSM
CBW
MOV
MOV
MOV
AND
PUSH
ADD
aUT
PDP
ASSUME
SUB
MoV
CDS
ASSUME
PDP
MOV
CMP
"C
ADD
1-----
M•
M.
ALI2
.CRT MODE I AL
OADoR'_6845 ,OX
.ROWS,25-!
OS
AX
SI,AX
AL,CS.lSI + OFFSET MT]
.CRT MODE SET. AL
AL. I Ol7H OX
OX,4
QX,I\L.
OX
oSaABSO
sxlax
DS,BX
~~:6~~~M_PTR
AX
CX.16
ALI2
M'
ax,cx
42
FE C4
8A 07
EE
43
4A
E2 Fa
58
IF
335
336
1-----
RECOVER MODE NUMBER IN (AL.)
I L.ENGTH OF EACH ROW OF TABLE
I DETERMINE WHICH ONE TO USE
I MODE IS a OR I
I NEXT ROW OF INITIALIZATION TABL.E
AL.,4
I MODE IS 2 OR 3
I MOVE TO GRAPHICS ROW OF INIT_TABL.E
M'
BX,CX
I MODE IS 4,5, OR 6
I MOVE TO BW CARD ROW OF INIT_TABLE
ax,cx
ALIT
AX
AX,l8X+IO]
AH,AL
OS
DSIDATA
DDS
~~~~gg~_MODE, AX
OS
AH,AH
lOUT INIT
I SAvE MODE IN (AL.I
1 GET THE CURSOR. MODE FROM THE TABL.E
I PUT CURSOR MODE IN CORRECT POSITION
I SAVE TABL.E SEGMENT POINTER
POINT OS TO DATA SEGMENT
PL.ACE INTO 810S OAT A SAVE AREA
RESTORE THE TABLE SEGMENT POINTER
AH IS REGISTER NUMBER DURING LOOP
L.oop THROUGM TABL.E, OUTPUTTING REGISTER ADDRESS, THEN VALUE FROM TABl.E
MOV
OUT
'NC
'NC
MOV
OUT
.NC
DEC
LOOP
POP
POP
ASSUME
EE
SET UP FOR A8S0 SEGMENT
ESTAaL.1 SH VECTOR TABLE ADDRESS ING
GET POINTER TO VIOEO PARMS
M'
MIOI
8A C4
SAVE MODE I N GLOBAL. VAR I ABLE
SAVE ADDRESS OF BASE
INITIALIZE DEFAUL.T ROW COUNT OF 25
SAVE POINTER TO DATA SEGMENT
SAVE . MODE NUMBER (AL.)
CLEAR HIGH aYTE OF MODE
SET T AaLE PO INTER, INDEXED ay MODE
GET THE MODE SET VAL.UE FROM TABLE
SAVE THE MODE SET VALUE
VIDEO OFF I SAVE HIGH RESOL.UTlON 81T
SAVE OUTPUT PORT VALUE
POINT TO CONTROL. REGISTER
RESET V I CEO TO OFF, TO SUPPRESS ROLL i NG
BACK TO BASE REGI STER
BX POINTS TO CORRECT ROW OF INITIALIZATION TABL.E
PUSH
MOV
XCHG
PUSH
ASSUME
CACC
MOV
ASSUME
POP
XOR
OOCE IF
OOCF 32 E4
320
"E
MOV
CMP
00C8 E8 0000 E
OOCS A3 0060 R
32.
333
33.
ADDRESS OF COLOR CARD
GET EQU I PMENT FL.AGS SETT I NG
ISOL.ATE CRT SWITCHES
IS BW CARD INSTAL.L.ED AS PRIMARY
SKIP AND CHECK IF COLOR
ELSE, INDICATE INTERNAL. BW CARD MODE
SET ADDRESS OF BW (MONOCHROME) CARD
CONTINUE WITH FORCED MODE 1
"C
ADD
OOCI
OOCI 50
00C2 8S 47 OA
00C586 EO
OOCT IE
0001
000 I
0003
0004
0005
0007
0009
DaDA
OOOS
OODC
OODE
OODF
oX,03D4H
DI ,.EQUIP FLAG
DI,30H0l,30H
M8C
AL,T
OL,OB4H
SHORT Ma
CMe
1-----
319
322
323
324
325
326
327
328
S29
330
331
332
I
NOV
NOV
AND
CMP
.JNE
MOV
MOV
.JMP
"C
ADD
3 ••
317
318
I
M8CI
3.3
314
315
ENoP
I
1------------------------------------------------------I
SET MODE
PROC
NEAR
00A3 28 OS
00A5 8E DB
00A7 C5 IE 0074 R
OOAS
OOAC
OOAF
OOSI
00B3
00B5
00S7
0089
OOBS
OOBo
OOSF
GO TO SELECTED FUNCT I ON
,
COMMAND NOT VALID
I DO NOTHING IF NOT IN VALID RANGE
SET MODE
THIS ROUTINE' INITIALIZES THE ATTACHMENT TO
THE SELECTED MODE.
THE SCREEN I S BLANKED.
INPUT
.EQUIP FLAG BITS 5-4 • MaDE/WIDTH
I 1-;:1 MONOCMRaME (FORCES MODE '1 I
01 • COLOR ADAPTER 40x25 (MODE 0 DEFAULT)
10 ;:I COLOR ADAPTER aDdS (MODE 2 DEFAULT)
(AL) 'II COLOR MODE REQUESTED (RANGE
0 - 6 )
OUTPUT
NONE
2.3
294
295
296
297
298
299
300
30 I
302
303
304
30S
30.
30T
308
309
310
311
312
I
M.,
,----=--=------------------------------------------------
2 ••
AL,AH
OX,AL
OX
AH
AL.,lax]
DX,AL
BX
OX
M'O
AX
OS
OS I DATA
I
INITIALIZATioN Loop
I GET 6845 REGISTER NUMBER
I POINT TO DATA PORT
I NE)!:T REG 1STER VAL.UE
I GET TABL.E VALUE
lOUT TO CHIP
I NEXT IN TABL.E
1 BACK TO POINTER REGISTER
I DO THE WHOLE TABLE
I GET MODE BACK INTO (AL)
1 RECOVER SEGMENT VAL.UE
FILL REGEN AREA 11TH BLANK
331
338
339
340
341
342
00EO:'3
00E2 89
00E6 C6
00E8 S9
OOEE 3C
5-146
FF
3E 004E R
06 0062 R 00
2000
04
VIDEOl
XOR
MOV
MOV
MOV
CMP
DI,OI
.CRT START,DI
.ACTTvE PAGE,O
CX,8192AL,4
SET UP PO I NTER FOR REGEN
START ADDRESS SAVED IN GLOBAL
SET PAGE VALUE
NUMBER OF WORDS I N COLOR CARD
TEST FOR GRAPHICS
1-'
04-21-86
3 ..3
3....
34e
3 ..6
3 .. 7
341
12
IC
7..
33
EI
31S0
31S1
3!S2
3e3
OOFO
00F2
OaF..
00F6
OOFI
OOFA
OOFA
OOFC
OOFC
OOFF
OOFF
3eT
3ee
359
360
0101
aloe
0101
oloa
8S 16 0063 R
13 C2 0 ..
AO 0065 R
EE
3...
...••••••
......
...
OA
07
0..
CO
oe
MI2,
al 0720
37"
375
376
3TT
371
37.
•••
F3/ AS
1-----
1----1-----
381
38.
3'"
3ge
396
397
398
399
0130
0130
013E
013F
01 .. 0
01 .. 1
01'"
01 .. 2
01"3
01 .....
01 .. 5
0146
......•••
.. 00
.. 01
..02
..03
... 0...
.. 05
'.0
•• T
."..
•••
.,•••
"
".
... ,...
... 15
"'16
... 17
"'I
.,.,.,•••
•••
"'23
... 2...
425
426
"2T
428
429
430
..31
.. 32
"33
43..
435
436
"3T
431
..•••,
"3'
440
..2
10
10
75
10
1-----
NO CiRAPHICS INIT
TE!T FOR BW-CARD
al CARD INIT
FI[L. FOR' GRAPHICS MODE
CL.EAR BUFFER
BI CAR'O INIT
aurFER IIZE ON aw CARD (20481
NO CiRAPHICS INIT
FILL. CHAR F~ AL..PHA + ATTRIBUTE
CL..EAR BUFFER
F I L.L. THE REGEN BUFFER I I TH BL.ANKS
R 06
'+7-101
ENABL..E VIDEO AND CORRECT PORT SETTING
g::
:ADDR_6I4!S
AL., _CRT MODE SET
DX,AL. -
I
I
I
I
PREPARE TO OUTPUT TO V IDEO ENABLE PORT
POINT TO THE MODE CONTROL. REGISTER
GET THE MODE SET VAL.UE
SET VIOEO ENABL.E PORT
DETERMINE NUMBER OF COL.UMNS, BOTH FOR ENTIRE DISPLAY
AND THE NUMaER TO aE USED FOR TTY INTERFACE
MOV
AL,CS I [S I + OFFSET M6)
MOV
_CRT _COL.S, AX
GET NUMBER OF COL.UMNS ON TH I S SCREEN
CLEAR HIGH aYTE
I NIT I AL I ZE NUMBER OF COLUMNS COUNT
SET CURSOR POSITIONS
ANO
MOV
MOV
MOV
MOV
PUSH
POP
XOR
REP
SI,OOOEH
AX,CSI [SI + OFFSET Me]
~i~~_LEN I AX
g~,OFFSET
WORD OFFSET INTO CLEAR LENGTH TABLE
LENGTH TO CL.EAR
SAVE LENGTH OF CRT - - NOT USED FOR BW
CL.EAR AL.L CURSOR POS I T IONS
_CURSOR_POSN
ES
AX,AX
STOSI
ESTABL I SH SEGMENT
AODRESSINC
, FILL. 11TH ZEROES
SET UP' OVERSCAN REGISTER
MOV
AL,IFH
SET OVERSCAN PORT TO A DEF AUL T
30H VALUE FOR AL.L. MODES EXCEPT 640X200
SEE I F THE MOOE IS 640X20e al
IF' NOT 6 .. 0X200, THEN GO TO REGUL.AR
IF IT IS 6 .. 0X20e, THEN PUT IN 3FH
OUT
MOV
DX,AL.
_CRT_PALETTE,AL.
OUTPUT THE CORRECT VAL.UE TO 309 PORT
SAVE THE VALUE FOR FUTURE USE
MOV
CMP
JNZ
OX
AL , 30H
:~:T_MODE, 6
MI41
EE
A2 0066 R
,----50
eF
5E
ea
59
5A
IF
01
CF
NORMAL. RETURN FROM ALL V I OEO RETURNS
VIDEO RETURN,
POP
POP
POP
POP
MII5I
POP
POP
POP
POP
JRET
SET MODE
ap
01
SI
ax
CX
ex
as
ES
RECOVER SEGMENTS
ALL DONE
ENDP
1--':'------------------------------------------------
I SET CTyptE
1
THIS ROUTINE SETS THE CURSOR VALUE
1 INPUT
I
(CX) HAS CURSOR VALUE CH-START I..INE, CL-STOP LINE
I OUTPUT
1
NONE
1---------------------------------------------------PRoe
NEAR
0146
01"'6 a... OA
0141 19 OE 0060 R
OI ...C EI 0151 R
01 ...' Ea EC
SET CTYPE
MOV
0151
NI6I
1-----
:~~RSOR-MODE,CX
VIDEO_RETURN
I 6845 REG I STER FOR CURSOR SET
I SAVE IN DATA AREA
I OUTPUT CX REG I STER
THIS ROUTINE OUTPUTS THE CX RECISTER TO THE 68415 REGISTERS NAMED IN {AH)
0151 IB 16 0063 R
0155 IA C4
0157 EE
MOV
MOV
OUT
INC
0151 IA CIS
0150 EE
015E ... A
OISF I!JA C4
0161 FE CO
0163 EE
016442
01615 Ea 00
OI6T ISA CI
0169 EE
OIU C3
0161
AH.la
~~~L
..IMP
015842
0159 EI 00
"MP
MOV
OUT
OEC
MOV
~~: :~DDR_6I415
OX,AL
S-.
ox
AL,CH
DX,AL.
ex
AL.,AH
INC
AL
OUT
DX,AL.
INC
JMP
MOV
OUT
RET
SET_CTYPE
ADDRESS REGI STER
GET VAL.UE
REG I STER SET
DATA REGI STER
I/O DELAY
DATA
ox
S-.
AL.,CL
DX,AL
POINT TO OTHER DATA REGISTER
SET FOR SECOND REG I STER
I/O DEL.AY
SECOND OAT A VALUE
I ALL. DONE
ENDP
1-------------------------------------------1 SET CptOS
1
- TH I S ROUT I NE SETS THE CURRENT CURSOR PCS I T I ON TO THE
I
NEW X-Y VALUES PASSED
1 INPUT
I
DX - ROW,COL.UMN OF NEI CURSOR
1
BH - DISPLAY PAGE OF CURSOR
1 OUTPUT
1
CURSOR IS SET AT Uo+! IF DISPLAY PAGE IS CURRENT DISPLAY
•• T
"52
453
4e...
455
.. 56
STaSI
INC
30
3E 00 ..'
02
3F
•• s
•••
•••
•••
•••
•••
•••
'"
AX, '
REP
c••
1----aile II E6 OOOE
01192E18B8 .. 0000E
ailE AI OO ..C R
0121 I ' 0001
012 .. aF 0050 R
0127 IE
01215 07
012' 33 CO
012a F3/ AB
0120
012E
0130
0135
013T
013.
0139
013A
CH,OIH
MOV
MOV
AOO
MOV
OUT
OIOC 2EI SA 8" 0000 E
011198
0112A300"AR
383
38..
38e
386
387
388
38.
3.0
MOV
MI3,
37.
371
372
373
MI.
AL.,7
M"
AX,AX
SHORT MI3
Mill
SIS 01
'61
365
366
367
JC
CMP
JE
XOR
JMP
OI6B
016a SA CT
0160.1
016E 01 EO
alTO 96
1--------------------------------------------PRoe
NEAR
SET CPOS
NOV
AL,BH
SAL
AX,!
AX.SI
cs.
XCHG
NOVE PAGE NUMaER TO WORK REGI STER
CONVERT PAGE TO WORD VALUE
WORD OFFSET
USE I NDEX REG 1STER
VIDEOl
5-147
I-a
04-21-86
••T 0171
8' 94 0050 R
0175 38 3E 0062 R
•••
•••
•••
•••
•••
"
•••
.T.
...
.......
. .3
.Tt
.T.
.71
.T.
.7&
.T.
.n
.T8
.T.
'8.
'8'
•••
cz
GilD E8 0182 R
OlIO
0180 EB
0112
0182
0182
0185
0187
0188
0180
018F
0192
0193
...••••••
1-----
£8
88
03
Dt
84
E8
C3
.ST
0204 R
ca
51.
OIAA
..,..
.".'8.IT
..•••••••••,
0"
DE 004£ R
,.9
DE
0111 R
NEA.
1 DETERM I NE LOCATI ON I N REGEN BUFFER
MOV
POSITION
CX,AX
ACO
g~:~CRT-START
I
MOV
AH.14
1 REGISTER NJMBER FOR CURSOR
'A.
CALL
.ET
M"
ADD IN THE START ADDRESS FOR THIS PAGE
I DIVIDE BY 2 FOR CHAR ON..Y COUNT
I OUTPUT THE VALUE TO THE 6845
ENDP
1---------------------------------------------------1 REAO CURSOR
1-------------------------------------------
0193 I" OF
0195
0191
0199
0190
32
DI
8B
a8
READ_CUR:a~
XOR
SAL
NOV
FF
£3
9T 0050 R
DE 0060 R
=:,
DIAl 5D
0lA2 5F
POP
POP
PDP
0lA3 5E
0lA4
sa
0lA5 58
alA,'
DiAl
0lA8
alA9
DIAA
POP
POP
POP
POP
IRET
READ_CURSOR
58
IF
01
CF
~~~
BH,BH
NEAR
BX, I
I WORD OFFSET
DX, [BX.,.OFFSET OCURSOR_POSN]
~~,OCURSOR_MODE
01
.,
BX
AX
AX
OS
ES
I DISCARD SAVED CX AND OX
1-----------------------------------------------ENJP
1 ACT DISP PAGE
1
THls ROUTINE SETS THE ACTIVE DISPLAY PAGE, ALLOWING
•
Tt£ FULL USE OF THE MEMORY SET AS I DE FOR THE V IDEO ATT ACt-lENT
I IOFUT
1
AL HAS TI-£ NEW ACTIVE DISPLAY PAGE
, OUTPUT
I
Tt£ 6845 IS RESET TO DISPLAY THAT PAGE
OIAA
DIAD
OIAE
OlAF
DIB3
0186
0lB8
OIBA
alBe
alEif'
oleo
0lC2
0lC6
OIC.
-=
1-------------------------------------------------
ACT 0 I SP PAGE
A2
98
50
F1
A3
8B
DI
84
E8
5B
DI
a8
£8
E.
0062 R
26 004C R
004E R
C8
,.9
OC
0151 R
E3
87 0050 R
0182 R
0130 R
PUSH
MIL
MOV
MOV
SAR
MOV
CALL
POP
SAL
NOV
CALL
JMP
ACT_0 I SP_PAGE
I
I
,
I
033
I
I
I
I
I
I
-
I
..
0103 AD 0066 R
0106 OA FF
0101 75 DE
•• 3
OIDA 24 EO
OtDe 80 £3 IF
OIOF' 0'\ C3
OIEI
(BH) HAS COLOR 10
IF BH.O, THE BACKGROUND COLOR VALUE IS SET
FROM TtE LOW BITS OF aL (0-31)
IF BH_I, THE PALETTE SELECT I ON I S MADE
BASED ON THE LOW BIT OF BLI
a • GREEN. REO, YELLOW FOR COLORS 1,2,3
1 • BLUE, CYAN, MAGENTA FOR COLORS 1,2,3
HAS THE COLOR VALUE TO BE USED
IL)
OUTPUT
TIE COLOR SELECT I ON I S UPDATED
~g~
1-----
5-148
EP'
VIDEOl
g~::ADDR-6845
~::~RT-PALETTE
.JNZ
M20
HANlLE COLOR
AND
OR
a
OUT
MOV
JMP
1 I/O PORT FOR PALETTE
I OVERSCAN PORT
I GET THE CURRENT PALETTE VALUE
• IS THIS COLOR 01
• OUTPUT COLOR 1
BY 5ETT I NG Tt£ BACKGRQUN) COLOR
AL,OEOH
BL,OIFH
AL,BI..
MI91
DIEI E9 0130 R
DF
E8
F3
20
NEAR
PROC
:V
ANO
OIEI EE
0lE2 A2 0066 R
0,,.0
0lF2
THIS ROUTINE WILL ESTABLISH THE BACKGROUND COLOR, THE OVERSCAN COLOR,
AND THE FOREGROUND COLOR SET FOR NED I UM RE50LUT I ON GRAPH I CS
INPUT
SET 'COLOR
0100 83 c2 05
24
DO
13
OC
SAVE ACTIVE PAGE VALUE
CONVERT I AL) TO WORD
SAVE PAGE VALUE
AX
WORD PTR OCRT LEN
01 SPLAY PAGE TIMES REGEN LENGTH
_CRT START ,AC
SAVE START ADDRESS FOR LATER
cX,Ai
START ADDRESS TO CX
DIVIDE BY 2 FOR 6846 HANDLING
CX, I
AH,12
6845 REG I STER FOR START ADDRESS
MI6
ax
I RECOVER PAGE VALUE
ax. I
• -2 FOR WORD OFf"SET
AX,[BX + OFFSET OCURSOR_POSN]
1 GET CURSOR FOR THIS PAGE
MI8
I SET THE CURSOR POSITION
V I DEO_RETlIRN
ENDP
·---------------------------------------------I•
Dice 8B 16 0063 R
0lE8
OtE8
OlEA
GIEC
OIEE
PROC
NEAR
OACTI VE_PAGE,AL
1--------------------------------------------1 SET COLOR
..
..
.......
SET CURSOR POSITION, AX HAS ROW/COLUMN FOR CURSOR
PAOC
eAt.L
M'8
•••
•••
•••T .,cc
••
•••
.3.•••,
•••
•••
•••
•••
••T
•••
•••
•••,
•••
••• •,cc
•••
•••T
••
•••
•••
•••,
•••
•••
•••
•••
.ST
•••
•••
•••,
•••
•••
•••
•••
"
m
•••
67.
.....
M'.
I SAVE THE POINTER
I SET CPOS RETURN
I GET-RO'/~OLUMN TO AX
I CURSOR SET
I SET_CPtfS_RETURN
- THIS ROUTINE READS TtE CURRENT CURSOR VALUE FROM THE
6848, FORMATS IT, AND SENDS I T BACK TO TI-£ CALLER
I INPUT
I
BH - PAGE OF Cl.ltSOR
I OUTPUT
1
OX - ROW, COL..... OF THE CURRENT CURSOR POS I T I ON
1
CX - CURRENT Cl.ltSDR MODE
0193
...
.....
AX,PX
MI8
1
I
•••
•••
•••
."
•••
•••
•••
.07
•••
•••,
•••
•••
•••
•••
•••
•• T
•••
.,•••
"3
[SI+OFFSET eCURSDR_POSNJ,OX
:~~TIVE_PAGE,aH
sa
.53
"
51.
MOV
eMP
JNZ
MOV
eAt.L
0179 15 05
017B 88
DX,AL
IOCRT PALETTE,AL
V loEa'_RETURN
TURN OFF LOW 5 a I TS OF CURRENT
TURN OFF HIGH 3 BITS OF • ....,T VALUE
PUT VALUE INTO REGISTER
OUTPUT THE PALETTE
I OUTPUT COLOR SELECT I ON TO 309 PORT
1 SAVE THE COLOR VALUE
I
I
I
I
1-----
HANlLE COLOR 1 BY SELECTING TI£ PALETTE TO BE USED
M20,
....
AL,ODFH
BLtl
O•
AL.20H
AND
JNC
JM.
SET_COLOR
MI9
.19
ENDP
1 TURN OFF PALETTE SELECT BIT
• TEST THE LOW ORDER BIT OF' BL
1 ALREADY DONE
I TURN ON PALETTE SELECT BIT
• GO DO IT
.-.
04-21-86
.,..,.
.,..,.
.,,
.11
1 ---------- -- --------------- -- ------ ---- -- -- ------
I VIDEO STATE
,
RETURNS THE CURRENT VIDEO STATE IN AX
,
AH;: NUMBER OF COLUMNS ON THE SCREEN
AL;: CURRENT V IDEO MODE
,
1 BH III CURRENT ACTIVE PAGE
1 ---------- - - -------------- - -- - - ---- ---- -- -- ------
!in
01F2
579
580
581
01F2 8A 26 004" R
01F6 AD 0049 R
01F9 8A 3E 0062 R
582
583
584
585
586
587
01"0
OIF'E
OIFF'
0200
0201
020 ...
•••
•••
,.0
•••
•••
•••
•••
•••
•••
597
598
599
600
601
602
603
604
605
606
60T
.08
50
sF
sE
59
E9 014' R
, POSITION
THIS
OF A
I INPUT
I
AX •
, OUTPUT
AX •
I
AD
F6
32
03
01
58
C3
004A R
ET
FF
C3
EO
DISCARD SAVED BX
RETURN TO CALLER
OFFSET OF CHAR POS I T I ON I N REGEN BUFFER
PROC
NEAR
BX
BXIAX
~~"BYTE PTR OCRT_COLS
XOR
ADD
SAL
POP
RET
SAVE REG I STER
SAVE ROW/COLUNM POSITION IN (BX)
GET COLUMNS PER ROW COUNT
DETERM I NE BYTES TO ROW
BHIBH
AXIBX
AXil
BX
ADD I N COLUMN VALUE
- 2 FOR ATTR I BUTE BYTES
ENDP
1--------------------- ---- ----- ----- ------I
I
1
1
I
I
I
I
I
I
I
1
1
SCROLL UP
THIS ROUTINE MOVES A BLOCK OF CHARACTERS UP
ON THE SCREEN
INPUT
(AH) = CURRENT CRT MOCE
(AL) = NUMBER OF ROWS TO SCROLL
(CX) = ROW/COLUMN OF UPPER LEFT CORNER
(OX) 'II ROW / COLUMN OF LOWER RIGHT CORNER
(BH) = ATTR I BUTE TO BE USED ON BLANKED LINE
(OS)
DATA SEGMENT
(ES) ;: REGEN BUFFER SEGMENT
OUTPUT
NONE -- THE REGEN BUFFER IS MODIFIED
=
I -------- - -- ---------- -- - - - - --- - - - - -- - ------
ASSUME
SCROLL_UP
626
627
628
629
630
631
632
0213
0216
0219
0218
02lE
0220
0223
633
0223 53
634
635
0224 88 C 1
0226 E8 0260 R
636
637
0229 74 31
0228 03 FO
E8
80
72
80
74
E9
02EE R
Fe 004
08
Fe 01
03
0480 R
638
0220 8A E6
022F 2" E3
0231
641
642
643
644
645
646
647
648
649
650
651
0231
0234
0236
0238
023A
D23C
E8
03
03
FE
75
DSICATA,ESIDATA
PROC
NEAR
CALL
eM.
Je
eM.
JE
JM.
TEST_LiNE_COUNT
AH,4
N.
AH,l
N'
GRAPHICS_UP
PUSH
MOV
CALL
JZ
AOO
MOV
SUB
BX
AXICX
SCROLL_POS I T ION
N1
SIIAX
AHIDH
AHIBL
CALL
AOO
AOO
OEe
JNZ
N'O
SI,BP
OIIBP
AH
N'
MOV
AX
AL, '
CALL
AOO
OEe
JNZ
N"
DIIBP
BL
N.
CALL
eM.
JE
MOV
MOV
OUT
OOS
N11
639
640
N.,
02AI R
F!5
FD
CC
F!5
N.,
ont
58
0230 BO 20
023F
023F E8 02AA R
0242 03 Fe
652
0244 FE CB
6153
654
655
0246 lS Fl
0248
0248 E8 0000 E
656
0248 80 :IE 0049 R 07
657
658
0250
0252
0255
0255
610
611
612
613
614
615
616
611
618
619
680
681
682
683
684
PAGE
ROW I COLUMN POSITION
POSITION
0213
.61
~~60;~~R~~~I~~~~;E
SERVICE ROUTINE CALCULATES THE REGEN BUFFER ADDRESS
CHARACTER I N THE ALPHA MODE
PUSH
XCHG
~B~
0205 93
624
•••
•••
GET NUMBER OF COLUMNS
CURRENT MODE
01
SI
CX
M15
ENOP
POSITION
0200402004 53
•• 0
661
662
663
664
665
666
COLS
-
,-------- --------------------------------
......•••
...••••••..•••,
660
:~IOACTTVE_PAGE
POP
POP
POP
..JMP
VIDEO STATE
I
."
•••
659
AL, .CRT MODE
=g~
1
0206
0209
020e
020D
020F
0211
0212
0213
:~~~YTE ~~~ROCRT
MOV
,----=-----------------------------------
.0'
•• 0
•••
•••
•••
VIDEO_STQ6~
N.,
N5.
14 07
AD 0065 R
BA 0308
EE
0259
.0.
SCROLL POS I T I ON PROC
NEAR
POSITION
- CALL
0280 50
06 004E R
F8
FO
01
C6
C2
EO
2E 004A R
EO
004A R
E3
CO
MOV
JM.
SCROLL_UP
UP CONT I NUE
SAVE FILL ATTRIBUTE IN BH
UPPER LEFT POS I T ION
00 SETUP FOR SCROLL
BLANK FIELD
FROM ADDRESS
, ROWS IN BLOCK
, ROWS TO 8E MOVED
ROW LOOP
MOV! ONE ROW
1 POINT TO NEXT LINE IN BLOCK
I COUNT OF LINES TO MOVE
I ROW LOOP
I CLEAR ENTRY
I RECOVrR ATTR I BUTE IN AH
1 FILL WITH BLANKS
1 CLEAR_LOOP
I CLEAR THE ROW
I POINT TO NEXT LINE
I COUNTER OF LINES TO SCROLL
I CLEAR LOOP
I SCROL[_END
I S TH I S THE BLACK AND WH I TE CARD
IF SOl SKIP THE MODE RESET
GET THE VALUE OF THE MODE SET
ALWAYS SET COLOR CARD PORT
VIDEO_RET_HERE
V IDEO_RETURN
0260
0260
0263
0261
0269
026B
0260
026F
0211
0213
0211
0219
02TC
021E
03
89
8B
2B
FE
FE
32
8B
03
AD
F6
03
I
I
JM.
N1.
1-----
I
1
1
:~RT _MODE. 1
025C
025C SA DE
02&E EB DC
0260
ES 0204 R
I
I
I
I
I
I
AL,oCRT MODE SET
oX,oloeR
DXIAL
N••
0259 E9 0130 R
TEST FOR GRAPHICS MODE
HANDLE SEPARATELY
TEST FOR BW CARD
BL,DH
N.
ENDP
BLANK FIELD
GET Rt5w COUNT
GO CLEAR THAT AREA
HANDLE COMMON SCROLL SET UP HERE
Qg~
~~::~RT_START
MOV
SUB
INC
INC
XOR
51 ,AX
DX,CX
OH
DL
CH,CH
~g~
:~::~RT_COLS
~~~
~t.BYTE PTR .CRT_COLS
ADO
PUSH
AX,AX
AX
CONVERT TO REGEN PO INTER
OFFSET OF ACT I VE PAGE
TO ADDRESS FOR SCROLL
FROM ADDRESS FOR SCROLL
OX = 'ROWS, 'COLS I N BLOCK
I NCREMENT FOR 0 OR I GIN
SET HIGH BYTE OF COUNT TO ZERO
GET NUMBER OF COLUMNS IN 0 I SPLAY
TIMES 2 FOR ATTRIBUTE BYTE
GET CHARACTERS PER LINE COUNT
DETERM I NE OFFSET TO FROM ADDRESS
-2 FOR ATTRIBUTE BYTE
SAVE LINE COUNT
VIDEO 1
5-149
'-T
04-21-16
615
616
6IT
6Ia
690
691
0281
02a4
028ts
0286
0218
028A
028C
AO
06
IF
3C
T2
IC
TT
691
694
695
696
69T
69a
699
TOO
Tal
T02
Tal
T04
T05
T06
TOT
021E
02aF
0292
0292
0293
029&
029T
0299
029a
029C
0290
0290
029E
02AO
OZAI
52
aA 03DA
689
•••
EC
AI
T4
ao
a2
EE
5A
0049 R
02
13
01
OF
T..
08
Fa
25
08
sa
OA oa
C3
aA CA
56
5T
F31 A5
5F
5E
CI
OIAA
OZAA
OZAC
02AO
OlAF
OIBO
02BI
SA CA
5T
F3' AS
5F
C3
NIO
~ ;;---
T"
73.
T"
TaT
T..
739
T.D
74.
766
77.
AL,DX
AL,RVRT
Na
AL,Z5H
OL,ooaH
OX,AL.
Ox
I eox215 COL.OR CARD SCROL.L
GUARANTEED TO BE COL.OR CARO HERE
WAIT OISP ENABL.E
GET !'oRT WA I T FOR VERT I CAL RETRACE
IAIT_DISP_ENABL.E
ADDRESS CONTROL. PORT
TURN OFF VIDEO DURING VERTICAL. RETRACE
RESTORE L.I HE COUNT
a SCROL.L. MEANS BLANK F I EL.O
RETURN WITH F"LAGS SET
MOVE ROW
FlROCNEAR
MOV
CL,oL
PUSH
51
PUSH
01
REP
MOVSI
POP
01
POP
51
I GET •
OF COL.S TO MOVE
SAVE START ADDRESS
MOVE THAT LINE ON SCREEN
I RECOVER ADDRESSES
RET
ENOP
~~~R-RO:EAR
MOV
CL,OL
I GET , COLUMNS TO CL.EAR
PUSH
01
REP
STOSW
I STORE THE FIL.L. CHARACTER
POP
01
RET
NIl
ENOP
1-- - -- .. - ---- --------- --------- ...... -------I SCROLL DOWN
I
THIS ROUTINE MOVES THE CHARACTERS WITHIN A DEFINED
I
BLOCK oalN ON THE SCREEN, FILLING THE TOP LINES
I
WITH A DEFINED CHARACTER
I INPUT
I
I AH) • CURRENT CRT MODE
I
(ALI • NUMBER OF LINES TO SCROLL
I
(CX) • UPPER LEFT CORNER OF REG I ON
I
(OX) • LOIER RIGHT CORNER OF REGION
I
(BH) • FILL CHARACTER
I
1051 • DATA SEGMENT
I
(ES) • REGEN SEGMENT
: OUTPUT NONE __ SCREEN IS SCROLL.EO
OIBI
02BI
OZB2
02B5
02BI
02BA
02BO
02aF
02C2
02C2
02CI
02C&
02ca
02CA
02CC
02CE
0200
0200
0203
0205
0207
0209
020e
020B
02DC
020E
02DE
02EI
02E3
02E5
02E7
02EA
02EA
02EC
02EE
FO
Ea
10
12
80
74
E9
OZEE R
FC 04
oa
FC 07
03
0507 R
SCROLL ODIN
- STD
CALL
CMP
JC
COP
JE
JMP
IB
Ea
74
IB
8A
2A
C2
0260 R
20
Fa
E6
E3
NI31
Ea
IB
28
FE
75
02AI R
F5
FO
CC
F5
01 RECT J ON FOR SCROL.L DOWN
N"
02AA R
FD
CB
F7
0248 R
TEST F"OR GRAPHICS
, TEST FOR BW CARO
AH,7
N"
GRAPHICS_ODIN
~~:OL.L._POS I T I ON
CONT I HUE oOIN
SAVE ATTIfIBUTE IN BH
I L.OWER RIGHT CORNER
I GET REGEN LOCATION
SI,AX
AH,oH
AH,BL.
I S I I S FROM ADDRESS
I GET TOTAL • ROIS
I COUNT TO MOVE IN SCROL.L
CALL
SUB
SUB
DEC
JNZ
N'D
SI,BP
OI,BP
AH
I MOVE ONE ROI
POP
MOV
AX
AL.,
I RECOVER ATTRIBUTE IN AH
CALL
SUB
DEC
JNZ
JMP
Nil
BX
AX,OX
sue
NI51
E8
2B
FE
75
E9
N"
I
CL.EAR ONE ROW
GO TO NEXT ROW
DI,BP
Be
NI5
N5
NI61
aA DE
EB ED
MOV
JM.
SCROLL_OOIN
1----1----02EE
5-150
NEAR
TEST_L.I NE_COUNT
AH,4
PUSH
MOV
CALL
JZ
SUB
MOV
NI41
58
BO 20
U.
02EE
02FO
02F2
02F4
02Fts
02FT
02F'
02FB
02FD
02FE
0300
0301
0302
0303
PROC
NI21
e3
TBD
TB.
783
TB.
7a5
716
787
711
789
790
791
792
793
794
795
796
791
798
IN
TEST
JZ
MOV
MOV
OUT
POP
GET CURRENT MODE
ESTABL.ISH ADDRESS INti TO REGEN aUF'FER
FOR aOTH PO INTERS
TEST FOR COLOR CARD SPEC I AL CASES HERE
HAVE TO HANDL.E IOX21S SEPARATEL. Y
,-- ---- -- -_ .. -.... ------ --------_ ...... --------
142
161
168
769
TTO
TTl
TT2
TT3
774
775
TT6
TT7
TT8
OX
OX,IOAH
I
I
I
I
I
POP
AX
OR
BL,BL
RET
SCROLL_POSITION ENOP
NIO
T••
T44
745
146
141
141
T49
750
151
752
753
154
755
756
75 7
758
159
760
161
162
763
164
165
FlUSH
MOV
:~, eCRT _MODE
N"
1-----
02AI
OZAI
OZAI
02A4
OZA5
OZAT
02Aa
OZA9
OZAA
TaD
Ta.
T..
Ta.
T.,
O.
AL,Z
N.
AL,3
N.
Na.
TOO
TO.
TIO
Til
TIZ
TI3
TI4
Tits
TI6
TIT
Tta
TIO
T'D
721
TZ2
T23
724
T25
TZ6
T2T
1-----
MOV
PUSH
POP
CMP
JB
CMP
JA
SL,DH
N14
ENDP
IF AMOUNT OF LINES TO BE SCROLLED. AMOUNT OF LINES IN WINDOW
THEN AO.JUST AL.I EL.SE RETURN,
TEST_LINE_COUNT PROC
8A 08
OA co
14 OE
50
IA C6
2A C5
FE CO
3A C3
51
75 02
2A DB
MOV
OR
JZ
PUSH
MOV
sue
INC
CMP
POP
JNE
SUB
BL._SETI
C3
BL,AL
AL.,AI..
:~_SET
AL,DH
AL.,CH
Ae
AL,SL
AX
:t7:~T
RET
TEST_L.INE_COUNT ENOP
VIDEO 1
NEAR
I SAVE L.INE COUNT IN BL.
I TEST IF AL IS ALREAOY ZERO
I IF IT IS THEN RETURN •••
I SAVE AX
I SUBTRACT LOWER ROW FROM UPPER ROW
AD.JUST 0 I F'FERENCE BY I
LINE COUNT. AMOUNT Of" ROIS IN WINDOW?
RESTORE AX
IF NOT THEN WE-RE AL.L. SET
OTHERI' 51 SET IL TO ZERO
I RETURN
1-8
04-21-86
T••
PAGE
8 ••
1------------------------------------------------------------------------------I READ AC CURRENT
8 ••
I
8 ••
8 ••
I
I
I
8.'
8 ••
I
I
8 ••
-
INPUT
TRIS ROUTINE READS THE ATTRIBUTE AND CHARACTER AT THE CURRENT
CURSOR POS I T I ON AND RETURNS THEM TO THE CALLER
(AH)
IBHI
(OS)
(ES)
8.T
8.8
I
8 ••
I OUTPUT
I
I AL)
I
81.
8"
81.
I
Sl~
CURRENT CRT MODE
DISPLAY PAGE I ALPHA MODES ONLY)
DATA SEGMENT
REGEN SECMENT
= CHARACTER READ
(AHI • ATTRIBUTE READ
0303
0303 80 Fe 04
0306 72 08
REAO_AC_g~=RENT ~~~~
JC
PIO
OiDa H· 03
CMP
"E
AH,7
PI.
"MP
GRAPHICS_READ
823
0300 E9 0642 R
0310
824
0310 E8 ai2e R
825
0313 88 FT
826
B21
0ii15 Oft
0316 IF
CALL
M.V
PUSH
POP
FINO POSITION
Sl,Dl
ES
OS
819
0308 80 Fe 07
820
8"
822
8.8
8"
8 ••
aal
832
833
834
835
836
831
838
839
840
841
842
PIOI
1----0311 OA DB
0319 15 00
0318
o3ia FB
C31e
0310
031E
03lF
0321
0323
0323
0324
Pili
90
FA
EC
A8 01
15 Fa
PI21
EC
A8 09
844
0326 T4 Fa
0328
845
846
0328 AD
0329 E9 0130 R
843
Pt31
8.T
848
,
I-------;;;~;~--~;;~;;;~;;;~;;;-------------------·----------------------------.
81.
81.
816
811
818
..
..
..
..
I
IS THIS CRAPHICS
J
IS THIS BW CARD
READ AC CONT I NUE
GET R~GER LOCATION AND PORT ADDRESS
I ESTABLISH ADDRESSING IN 51
I
I
I GET REGEN SEGMENT FOR QUICK ACCESS
WAIT FOR HORIZONTAL RETRACE OR VERTICAL RETRACE IF COLOR 80
OR
"NZ
BL,BL
PI.
S1I
NOP
CLI
IN
TEST
"NZ
AL,DX
AL,RHRZ
P"
IN
TEST
"Z
AL,DX
AL, RVRT +RHRZ
PI.
CHECK MODE FLAG FOR COLOR CARD IN ao
ELSE SKIP RETRACE WAIT - 00 FAST READ
WAIT FOR HORZ RETRACE LOW OR VERTICAL
ENABLE INTERRUPTS FIRST
ALLOW FOR SMALL INTERRUPT WINDOW
BLOCK INTERRUPTS FOR S INGLE LOOP
GET 'STATUS FROM THE ADAPTER
I S HOR I ZONT AL RETRACE LOW
WAIT UNTIL IT IS
NOW WAIT FOR EITHER RETRACE HIGH
GET STATUS
I 5 HOR I ZONT AL OR VERT I CAL RETRACE HIGH
WAIT UNTIL EITHER IS ACTIVE
LODSW
"MP
V IDEO_RETURN
GET THE CHARACTER AND ATTRIBUTE
EXIT WITH (AX)
032e
READ_AC_CURRENT ENOP
D3ZC
FIND POSITION
XCHG
MOV
8"
8 ••
8.,
851
0335 8A CT
858
0331 98
859
860
861
862
8 ••
0338 88 Fe
03311. Ot El
88 95 0050 R
0340 74 09
one
MOV
SAL
M.V
01 ,AX
01, I
SETUP FOR BUFFER READ OR WR I TE
SWAP MODE TYPE WITH ATTRIBUTE
SAVE CHARACTER / ATTR IN (BP) REG I STER
CONVERT 0 I SPLAY MODE TYPE TO A
ZERO VALUE FOR COLOR IN ao COLUMN
MOVE DISPLAY PAGE TO LOW BYTE
CLEAR HIGH BYTE FOR BYTE OFFSET
MOVE 0 I SPLAY PAGE (COUNT) TO WORK REG
I TIMES 2 FOR wORD OFFSET
864
0342 33 FF
XOR
01,01
ELSE SET BUFFER START ADDRESS TO ZERO
8615
0344
866
0344 03 3E 004C R
861
868
8 ••
810
871
812
873
874
815
816
BTl
878
819
0348 48
0349 75 F9
ADO
DEC
~~,OCRT_LEN
ADD LENGTH OF BUFFER FOR ONE PAGE
DECREMENT PAGE COUNT
LOOP TILL PAGE COUNT EXHAUSTED
852
853
032e 86 E3
854
855
032E 88 E8
0330 eo EB 02
856
0333 DO EB
0348
0348
034E
0350
0352
0354
0356
0358
D3SC
Ol!5F
SUB
SHR
MOV
c••
"Z
"Nt
PROC
AH,BL
BP,AX
BL,2
aL,'1
AL,BH
~~i[DI+OFFSET OCURSOR_POSN~KIP B~F~~~ :g~~;~~~~~ ~~ ~~~~ ~:~~
P,.
P21l
AD
F6
32
03
01
03
88
83
C3
00411. R
E6
FE.
C2
EO
Fe
16 0063 R
C2 06
MOV
MUL
XOR
ADO
SAL
ADD
MOV
ADD
RET
~~ I
BYTE PTR OCRT _ COLS
DH,DH
AX,OX
AX, I
OI,AX
OX,oADDR 68045
DX,6
-
88.
881
0360
NEAR
FIND_POSITION
ENOP
DETERMINE LOCATION IN REGEN IN PAGE
GET COLUMNS PER ROW COUNT
DETERM I NE BYTES TO ROW
ADD I N COLUMN VALUE
• 2 FOR ATTRIBUTE BYTES
ADO LOCATION TO START OF REGEN PAGE
GET BASE ADDRESS OF ACTIVE DISPLAY
DX= STATUS PORT ADDRESS OF ADAPTER
BPs ATTRIBUTE/CHARACTER (FROM BLIAL)
01= POSITION (OFFSET IN REGEN BUFFER)
BL= MODE FLAG (ZERO FOR aOX25 COLOR)
VIDEO 1
5-151
IBM Pereonel Computer MACRO Aeeembler
VIDEOI --- 03/24/86
VIDEO DISPLAY BIOS
•• 2
B81
..
B'.
•••
,.,
•••
•••
•••
•••
•••
•• 2
...."
•• T
•• B
912
91.
91.
91.
91.
91T
91B
91.
.2.
.21
'22
.2.
.2.
.2.
• 2.
.2T
.2B
.2.
........,
...
...
•• 2
• 37
...
•••
•••
=
,- -------------------------------------------- ---------- - - ----------------------
0360
0360
0363
0365
0368
036A
0360
0360
80
T2
80
T4
E9
FC 04
08
FC OT
03
058E R
E8 032e R
OR
"Z
BL,BL
03T4 95
03T5 F31 A8
0311 EB 16
XCHG
REP
"MP
AX,BP
STOSW
SHORT
J----0319
0319
03TA
03TA
03TB
03TC
03TD
03TE
0380
0382
0384
0386
0386
038T
0389
038B
038B
038C
0380
038F
038F
.TT
.TB
.79
.B.
.BI
•• 2
•••
•••
'B'
.B.
.BB
'B'
WRITE AC CONTINUE
GET REl'!EN-LOCATION AND PORT ADDRESS
ADDRESS IN (01) REGISTER
CHECK MODE FLAG FOR COLOR CARD AT 80
SKIP TO RETRACE WAIT IF COLOR AT 80
GET THE ATTR/CHAR SAVED FOR FAST WRITE
S1R I NG WR I TE THE AT1R I BUTE & CHARACTER
EX IT FAST WR I TE ROUTI NE
P ••
WAIT FOR HORIZONTAL RETRACE OR VERTICAL RETRACE IF COLOR 80
LOOP FOR EACH ATTR/CHAR WRITE
PLACE ATTR/CHAR BACK IN SAVE REGISTER
WAIT FOR HORZ RETRACE LOW OR VERTICAL
ENABLE INTERRUPTS FIRST
ALLOW FOR INTERRUPT WINDOW
BLOCK I NTERRUPTS FOR SINGLE LOOP
GET STATUS FROM THE ADAPTER
CHECK FOR VERTICAL RETRACE FIRST
DO FAST WRITE NOW IF VERTICAL RETRACE
I S HOR I ZONT AL RETRACE LOW THEN
WAIT UNTIL IT IS
WAIT FOR EITHER RETRACE HIGH
GET STATUS AGAIN
I 5 HOR I ZONT AL OR VERT I CAL RETRACE HIGH
WAIT UNTIL EITHER IS ACTIVE
BP,AX
Nap
eLI
IN
08
09
01
F4
TEST
AL,OX
AL,RVRT
"NZ
P ••
"NZ
P.2
IN
AL,DX
AL,RVRT+RHRZ
TEST
EC
A8 09
14 FB
AL,RHRZ
TEST
P34r
95
AB
E2 EA
"Z
P33
GET THE ATTR/CHAR SAVED IN (BP)
WR I TE THE ATTR I BUTE AND CHARACTER
.",,5 MANY 1'! MES .'.S !'!:E:QUES"!"EO - TILL
AX , 8P
XCHG
STOSW
LOOP
P31
::::~~O
P351
E9 0130 R
I EXIT
"MP
In. i TEj,C_CURRENT
0392
ENDP
I - - - - ---------- - --- - -------- -- - -- ------- - -- - - - ----- - --- --- --- --------- - - - - -- ---J WRITE C CURRENT
r
I
-TH I S ROUT I NE WR I TES THE CHARACTER AT
:
THE CURRENT CURSOR POSITION, ATTRIBUTE UNCHANGED
I
I INPUT
I
IAH)
CURRENT CRT MODE
I
IBH) a: DISPLAY PAGE
J
(CX) = COUNT OF CHARACTERS TO WR I TE
I
(ALI
CHAR TO WRITE
I
(OS) = DATA SEGMENT
J
(ES) = REGEN SEGMENT
J OUTPUT
I
1
0 I SPLAY REGEN BUFFER UPDATED
=
=
1- - ------------ - --- - ------------ - ------ - - - - - - - -- --- - ---- -- --------------- - - - - ---
0392
0392 80 FC 04
0395 72 08
0391
039A
039C
039F
039F
80 FC OT
74 03
E9 058E R
E8 032C R
WR I TE C CURRENT
- -CMP
JC
CMP
JE
JMP
P40r
CALL
1----03A2
03A2
03A3
OU5
03A7
03A8
03A9
03AB
03AD
03AF
03BI
0381
STI
08
09
0I
FI
P421
P43,
88 C5
AA
4T
E2 E6
BL,BL
P43
TEST
AL,DX
AL,RVRT
"NZ
P ••
TEST
AL,RHRZ
"NZ
P41
IN
EC
03BC E9 0130 R
TEST
AL,DX
AL, RVRT+RHRZ
"Z
P.2
MOV
AX,BP
STOSB
INC
LOOP
01
P4I
"MP
V IDEO_RETURN
WRITE_C_CURRENT ENDP
038F
5-152
FINO_POSITION
VIDEO 1
I
IS THIS GRAPHICS
I
IS THIS BW CARD
GET REGEN LOCATION AND PORT ADDRESS
ADDRESS OF LOCATION IN (DI)
WAIT FOR HORIZONTAL RETRACE DR VERTICAL RETRACE IF COLOR 80
OR
"NZ
eLI
IN
OB
OF
0382 A8 09
0384 T4 FB
03B6
03B6
03B8
03B9
03BA
PRDC
NEAR
AH,4
P40
AH,7
P40
GRAPH I CS_WR ITE
P41r
F8
OA
715
FA
EC
A8
75
A8
T5
.81
•••
IS THIS BW CARD
STI
•• T
.T.
.TI
.T2
.T,
.T.
.T.
• T.
IS THIS GRAPHICS
I
P.2
XCHG
"2
•• 2
I
P321
FB
90
FA
EC
A8
75
A8
T5
•• T
.....
NEAR
P311
95
•••
'H
•• T
WR I TE AC CURRENT
PROC
'e'MP
AH,4
JC
P3D
CMP
AH,7
JE
P30
JMP
GRAPH I CS_WR I TE
P301
CALL
FINO_POSITION
03TO OA OS
0312 74 06
••2
•••
•••
•••
•••
•••
'"
•••
•••
•••
•••
•••
•••
•••,
•••
•••
•••
•••
•••
04-21-86
PAGE
1- - ---- --------- - -- - - --- - - ------ - - - - - - - - ----- - ---- - - -- - -- - - ------------ -- - - - ---I WRITE AC CURRENT
I
-THTs ROUT I NE WR I TES THE A TTR I BUTE AND CHARACTER
AT THE CURRENT CURSOR POSITION
I
I INPUT
I
(AH) = CURRENT CRT MODE
I
(SH) = DISPLAY PAGE
I
(CX) = COUNT OF CHARACTERS TO WRITE
(AL) = CHAR TO WRITE
I
I
(8L)
ATTRIBUTE OF CHAR TO WRITE
I
(OS) = DATA SEGMENT
I
(ES I = REGEN SEGMENT
1 OUTPUT
I
0 I SPLAY REGEN BUFFER UPDATED
:
•••
•••
•••
•••
•••
•••,
B'2
B'.
B"
B"
B"
B91
.'B
B"
1-'
Verelon 2.00
WA I T FOR HaRZ RETRACE LOW OR VERT I CAL
ENABLE INTERRUPTS FIRST
CHECK MODE FLAG FOR COLOR CARD IN eo
ELSE SKIP RETRACE WAIT - DO FAST WRITE
BLOCK INTERRUPTS FOR S INGLE LOOP
GET STATUS FROM THE ADAPTER
CHECK FOR VERT I CAL RETRACE FIRST
DO FAST WRITE NOW IF VERTICAL RETRACE
I S HOR I ZONT AL RETRACE LOW THEN
WAIT UNTIL IT IS
WA I T FOR EITHER RETRACE HIGH
GET STATUS AGAIN
I S HOR I ZONT AL OR VERT I CAL RETRACE HIGH
WA I T UNTI LEI THER RETRACE ACT I VE
GET THE CHARACTER
PUT THE CHARACTER
BUMP POINTER PAST
AS MANY TI MES AS
SAVE IN (8P)
I NTO REGEN BUFFER
ATTRIBUTE
REQUESTED
1-10
04-21-86
......
....... ,
.91
1------------------------------------------------------------------------------°-
PAGE
I WRITE STRING
1
-THIS ROUTINE WRITES A STRING OF CHARACTERS TO THE CRT.
1 INPUT
I
(AL) .. WRITE STRING COMMAND
3
1
(SH) • DISPLAY PAGE (ACTIVE PAGEl
I
ICX) = COUNT OF CHARACTERS TO WRITE. IF ICX) • 0 TtEN RETURN
1
lOX) • CURSOR POSITION FOR START OF STRING WRITE
1
(ILl ... ATTRIBUTE OF CHARACTER TO WRITE IF IALI • 0 OR
(ALI. I
I
(BP) ... SOURCE STRING OFFSET
1
[OEJ -= SOURCE STRING SEGMENT IFOR USE IN IESI IN STACK +141
1 OUTPUT
1
NONE
1000
1001
1002
1003
1004
•
1------------------------------------------------------------------------------PROC
NEAR
IOO~
1006 03BF
1007 OlaF 55
I 008
oaco
8B Ee
1009 oaC2 IE 46 10
1010 OSCS 5D
lOti OlC698
WRITE STRING
PUSH
MaV
MOV
POP
ca.
MOV
1012 OICT 88 Fa
1013 oac. Ie 04
IOt4 osca T3 73
1015
1016 03eD E3 11
.JCXZ
1011
1018 oaCF al F3
1019 0301 IA OF"
MOV
MOV
, 020 0303 32 "
XOR
XCHG
eM.
JNB
1021 0305 81 F3
1022 OIDT DI E6
1023 030. FF 14 0050 R
1024
1025
1026
1021
DIDO B8 0200
o3EO CD 10
03E2
D3E2 261 SA 46 00
SAC
PUSH
MOV
1-----
ae
OA
74 04
07
15 OA
ae
CD 10
8a 94 0050 R
EI 2D
SAVE CURRENT CURSOR PAGE
MOVE PAGE TO LOW IYTE
CLEAR HIGH IYTE
MOVE OFFSET AND RESTORE PAGE REG I STER
CONVERT TO PAGE OFFSET 151_ PAGE)
SAVE CURRENT CURSOR POSITION IN STACK
SET NEW CURSOR pas I T I ON
MaV
I NT
MOV
.JMP
AH,OEH
1 TTY CHARACTER WRITE
IOH
I-.R I TE TTY CHARACTER TO THE CRT
DX,[SI+OFFSET .CURSOR_POSN] I GET CURRENT CURSOR POSITION
SHORT PD4
I SET CURSOR POSITION AND CONTINUE
PUSH
PUSH
MOV
ex
INC
P53.
MOV
.0..OP
INT
INC
eM.
JB
INC
SUB
e...
Ja
MOV
OEOA
10
CE
AL,LF
.01
AL,07H
INT
DEC
BX
.5.
SET CHARACTER WR I TE AMOUNT TO ONE
IS THE ATTRIBUTE IN THE STRING
IF NOT THEN SKIP
ELSE· GET NEW ATTRIBUTE
lUMP STR I NG PO INTER
AH,09H
GOT CHARACTER
WR I TI CHARACTER TO THE CRT
RESTORE REG I STERS
CX,'
01,2
IL,ES.[IP]
B.
IDH
ax
ex
DC
~~41YTE PTR .CRT_COLS
OH
DL,DL
DH,25
.5.
AX,OEOAH
IDH
OH
PD4.
0200
10
AD
MOV
AX,0200H
INT
IDH
.OD
COO.
.OP
XCHG
TEST
JNZ
MOV
INT
01
05
0200
10
ox
JM.
WRITE_STRING
I NCREMENT COLUMN COUNTER
IF COLS ARE WITHIN RANGE FOR THIS MODE
THEN GO TO COLUMNS SET
autr ROW COUNTER IY ONE
SET COLu.. COUNTER TO ZERO
I F ROWS ARE LESS THAN 25 THEN
GO TO ROWS_COLUMNS_SET
ELSE SCROl.L SCREEN ONE LINE
RESET ROW COUNTER TO 24
ROW COLUMNS SET
SET REw CURS'i5R POS I T I ON COMMAND
ESTABLISH NEW.CURSOR POSITION
IT ONCE MORE UNTIL (CX) :I ZERO
DO
.5.
RESTORE OLD CURSOR COORDINATES
RECOVER WR I TE S'tR I NG COMMAND
I F CURSOR WAS NOT TO BE MOVED THEN
THEN EX I T WITHOUT "-ESETT I NG OLD VALUE
ELSE RESTORE OL.D CUFtSOR POS I T I ON
VIDEO_RETlIRN
DONE - EXIT WRITE STRING
RETURN TO CALLER
AX,OI
AL,OIH
AX,OZOOH
IDH
P5 ••
0130 R
IS IT A BACKSPACE
lACK SPACE
IS IT CARRIAGE RETURN
CAR RET
IS TT A LINE FEED
LINE F!:ED
IS IT A IELL
I F NOT THEN DO WR I TE CHARACTER
.5'
MOV
C2
16 004A R
10
C6
02
FE I'
01
..,
AL,OIH
.51
AL,CR
....E
Ja
09
10
I GET CHARACTER FROM INPUT STR I NG
I BUMP PO I NTER TO CHARACTER
TEST FOR SPECIAL CHARACTER'S
e...
1051 0409 72 05
1052 0401 261 SA 5E 00
1053 040F 45
1055 0410 14
10560412 CD
1051 0414 51
10580415159
IDS' 0416 FE
1060 0418 3A
1061 041C 72
1062 041E FE
I 063 0420 2A
1064042210
1065 0425 72
106.
I 061 0421 II
1061 042A CD
I 069 042C FE
1010 042E
1011 042E II
1012 0431 CD
1013 0433 E2
1014
1015 0435 !SA
IOU 04U 91
10TT 043T AI
1011 0439 15
1019 0431 18
1080 043E CD
1081 0440
10820440 E9
1083
1084 0443
I F ZERO LENGTH STR I NO THEN RETURN
SI,IX
IL,IH
IH,IH
SI,IX
SI, •
[SI+OFFSET ecURSOR_POSN] 1
AX,OZOOH
1
lDH
P5Z.
a.
1049 0403
QOO 1
I 050 0406 83 FF 02
10540410
.5•
AL,ES. [IP]
BP
PDI.
84 DE
1046 0401
1047 0401 51
1048 0402 53
OI,AX
AL,04
INT
eM.
JE
eM.
JE
eM.
JE
eM.
1034 03Ea Ie OD
1035 DIED 14 08
DIEF
03Fl
03F3
03F5
03FT
03FT
03F9
03FB
03FF
SAVE IUFFER OFFSET lIP) IN STACK
GET POINTER TO STACKED REGISTERS
RECOVER ENTRY (ES I SEGr.ENT REG I STER
RESTORE IUFFER OFFSET
CLEAR (AH) REG I STER
SAVE IALI COMMAND IN 1011 REGISTER
TEST FOR INVALID WRITE STRING OPTION
IF OPTION INVALID THEN RETURN
.5'
MOV
INC
102.
1030
1031
1032 03ET ae 08
1033 03E9 14 DC
IP
IP,SP
ES, [IP]+14+Z
IP
P501
1028 OlE6 45
1036
1037
1038
1039
1040
1041
1042
I 043
I 044
1045
I
,
,
,
•
ENDP
5-153
I-II
04-21-86
1--------------------------------------------
1085
1086
1087
1088
1089
1090
1091
109.2
1093
1094
PAGE
I READ DOT
-- WRITE DOT
I THESE ROUTINES WILL WRITE A DOT. OR READ THE
I
DOT AT THE INDICATED LOCATION
I ENTRY -I
OX = ROW (0-1991
(THE ACTUAL VALUE DEPENDS ON THE MODE)
I
CX .. COLUMN ( 0-639) ( THE VALUES ARE NOT RANGE CHECKED)
I
AL = DOT VALUE TO WRITE (1.2 OR 4 BITS DEPENDING ON MODE.
REQUIRED FOR WRITE DOT ONLY. RIGHT .JUSTIFIED)
I
I
BIT 7 OF AL = I INDICATES XOR THE VALUE INTO THE LOCATION
I
OS = DATA SEGMENT
I
ES,. REGEN SEGMENT
I
I EXIT
I
AL • DOT VALUE READ. RIGHT .JUSTIFIED. READ ONLY
1095
1096
1097
1098
1099
1100
1----------------------------------------------
1101
1102
11030443
1104 0443 E8 0477 R
11050446
1106 0449
1107 044B
1108 0440
1109 044F
26. 8A 04
22 C4
02 EO
aA CE
02 CO
1110 0451 E9 0130 R
1111 0454
1112
11130454
1114045450
1115045550
1116 0456 Ea 0477 R
lilT 0459 02 E8
Ilia 045B22 C4
1119 0450 26. 8A OC
1120 0460 5B
1121 0461 F6 C3 80
1122 0464 75 00
1123 0466 F6 D4
1124 0468 22 CC
1125 046A OA CI
1126 046C
1127 046C 26. 88 04
1128 046F 58
1129 0470 E9 0130 R
ll:;~
n
DSsOATA,E5tDATA
PROC
NEAR
R3
AL.ES, [51 ]
AL.AH
AL.CL
CL,DH
AL,CL
V IDEO RETURN
ENDP -
WR I TE_CO~USH
PADC
PUSH
CALL
SHA
AND
MDV
PDP
TEST
.lNZ
NOT
BX
A2
AH
CLIAH
AL.CL
MDV
PDP
JMP
ESt(SI),AL
AX
VIDEO_RETURN
PROC
1-----
1-----
96
BO 28
F6 E2
A8 08
T4 03
05 IFD8
OR IN THE NEW VALUE OF THOSE BITS
FINISH DOT
RESTORE' THE BYTE IN MEMORY
NEAR
DETERMINE 1ST BYTE IN INDICATED ROW BY MULTIPLYING ROW VALUE BY 40
(LOW BIT OF ROW DETERMINES EVEN/ODD. 80 BYTES/ROW 1
XCHG
MDV
SI.AX
AL,40
I WILL SAVE AL AND AH DURING OPERATION
MUL
DL
TEST
ADD
AL.008H
A4
AX .2000H-40
XCHG
MOV
51 ,AX
OX.CX
AX= ADDRESS OF START OF INDICATED ROW
TEST FOR EVEN/ODD ROW CALCULATED
.JUMP I F EVEN ROW
OFFSET TO LOCATION OF 000 ROWS AD.JUST
EVEN ROW
I MOVE-PO I NTER TO (S llANO RECOVER (AX)
I COLUMN VALUE TO OX
JZ
A4,
96
8B 01
1-----
DETERMINE GRAPHICS MODE CURRENTLY IN EFFECT
SET UP THE REGISTERS ACCORDING TO THE MODE
CH = MASK FOR LOW OF COLUMN ADDRESS ( 7/3 FOR HIGH/MED RES)
CL • • OF ADDRESS BITS IN COLUMN VALUE ( 3/2 FOR H/M 1
BL == MASK TO SELECT BITS FROM POINTED BYTE ( 80H/COH FOR H/M )
BH = NUMBER OF VALID BITS IN POINTED BYTE ( 1/2 FOR H/M )
MDV
MOV
CMP
JC
MDV
MOV
BB 02CO
B9 0302
80 3E 0049 R 06
7206
BB 0180
B9 0703
,-----
A5.
049B 03 EA
049D 03 F2
049F 8A FT
2A C9
BX,2COH
CX,302H
~RT_MODEI6
BX.180H
CX,703H
I
SET PARMS FOR MED RES
I HANDLE IF MEO RES
I
SET PARMS FOR HIGH RES
DETERMINE BIT OFFSET IN BYTE FROM COLUMN MASK
AND
; ADDRESS OF PEL WITH I N BYTE TO CH
DETERMINE BYTE OFFSET FOR THIS LOCATION IN COLUMN
SHA
ADD
MDV
1-----
5-154
ALlAH
CL.ESt(SI]
BL,80H
: --------------------------------------- - -- -----
R3
1-----
04Al
04A3
04A3
04A5
04AT
04A9
04AB
04AD
04AF
04BO
SAVE DOT VALUE
TWICE
DETERMINE BYTE POSITION OF THE DOT
SHIFT TO SET UP THE BITS FOR OUTPUT
STRIP OFF THE OTHER BITS
GET THE CURRENT BYTE
RECOVER XOR FLAG
IS IT ON
YES, XOR THE DOT
SET MASK TO REMOVE THE INDICATED BITS
A"
AL.CL
RETURN FROM VIDEO I/O
XOR DOT
EXCCUS I VE OR THE DOTS
XOR
AL.CL
FINISH UP THE WRITING
.JMP
RI
WR I TE DOT
ENDP
1--- - ':'- -- --------- --------- - - - - - ----- - - ------I THIS SUBROUTINE DETERMINES THE REGEN BYTE LOCATION OF THE
I INDICATED ROW COLUMN VALUE IN GRAPHICS MODE.
I ENTRY ~~
ex := ROii' VALUE (O-j:;;j
cx = COLUMN VALUE (0-6391
EXIT -~
5 I = OFFSET ! NTO REGEN BUFFER FOR BYTE OF INTEREST
AH = MASK TO STRIP OFF THE BITS OF INTEREST
CL • BITS TO SHIFT TO RIGHT .JUSTIFY THE MASK IN AH
DH = • BITS IN RESULT
BX. MODIFIED
I
1179 0499 22 EA
1180
1181
1182
1183
l1a4
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
NEAR
AX
AX
DA
AND
All
; DETERM I NE BYTE POS I T I ON OF DOT
I GET THE BYTE
; MASK OFF "THE OTHER BITS IN THE BYTE
I LEFT JUSTIFY THE VALUE
I GET NUMBER OF BITS IN RESULT
; RIGHT .JUSTIFY THE RESULT
I RETURN FROM VIDEO I/O
A2.
1130 0473
1131 0473 32 CI
1132 0475 EB F5
1133 0471
1134
1135
1136
1137
1139
1140
1141
1142
1143
1144
1145
1146
1147 0477
1148
1149
1150
1151
1152 0477
1153 0478
115.. 047A
1155 047C
t156 047E
1157 0480
It 58 0483
1159 0483
1160 0484
1161
1162
1163
1164
1165
1166
1167
1168
1169
I 1 70 0486
1171 0489
1112 048C
11730491
1174 0493
It
0496
II 76
11TT
1178 0499
ASSUME
READ DOT
CALL
NOV
AND
SHL
MOV
ROL
.JMP
READ_DOT
OX,CL
SI.OX
OH.BH
I SH I FT BY CORRECT AMOUNT
I I NCREMENT THE PO INTER
I GET THE. OF BITS IN RESULT TO DH
MULTIPLY BH (VALID BITS IN BYTE 1 BY CH (BIT OFFSET)
ZERO I NTO STORAGE LOCAT I ON
SUB
CL,CL
I
ADA
ADD
DEC
AL.I
CL,CH
BH
JNZ
A6
MDV
SHA
AET
ENDP
AH.BL
AH.CL
; LEFT .JUSTIFY VALUE IN AL (FOR WRITE)
I ADO IN THE BIT OFFSET VALUE
I LOOP CONTROL
I ON E~IT, CL HAS COUNT TO RESTORE BITS
I
GET MASK TO AH
I
MOVE THE MASK TO CORRECT LOCAT I ON
I
RETURN WITH EVERYTH I NG SET UP
A6.
DO
02
FE
75
8A
02
C3
C8
CD
CF
F8
E3
EC
A"
VIDEOl
1-12
04-21-86
1199
1200
1201
1202
1203
1204
'20&
1206
120T
'20e
1209
1210
1211
1212
1213
12'4
'21&
1216
1211
'218
1219
1220
1221
1222
1223
1224
122&
1226
'221
1228
1229
1230
1231
1232
1233
1234
1235
1236
123T
1238
1239
1240
124'
1242
1243
I 244
12415
1246
1241
1248
1249
12150
12151
1252
12153
12154
1255
1256
12151
12158
I 259
1260
1261
1262
1263
1264
1265
1266
126T
1268
'269
12TO
12TI
12T2
1213
12T4
12T15
12T6
IZ17
12T8
12T9
IZ80
'281
1282
1283
IZ84
12815
1-----------------------------------------------------I
I
I
I
I
I
1
I
I
I
0410
0410 eA 08
04a2 ea C,
CH, CL. • UPPER L.EFT CORNER OF REG I ON TO SCROLL
DH, DL. • L.OWER RIGHT CORNER OF REG I ON TO SCROL.L.
BOTH OF THE ABOVE ARE IN CHARACTER POSITIONS
BH. FILL. VALUE FOR BL.ANKED L.INES
AL. • • LINES TO SCROL.L. (AL..O MEANS BL.ANK THE ENTIRE FIEL.D)
OS. DATA SEGMENT
ES. REGEN SEGMENT
EXIT -NOTH I NG, THE SCREEN IS SCROL.L.ED
1-------------------------------------------------------PROC
NEAR
GRAPHICS UP
iov
MOV
1-----
04B9
04BB
04BF
04CI
2B
81
DO
DO
CAL.L.
SUB
AOO
SAC
SAC
1-----
04E4
04E4
04ET
04Ea
04EF
04FI
04F3
04F3
04F5
04F5
04F8
04FC
04FE
01500
DX,CX
DX,IOIH
DHII
DH,1
ADJUST VALUES
MULTIPLY ROWS BY 4 AT 8 VERT DOTS/CHAR
AND EVEN/ODD ROWS
DETERM I NE CRT MODE
1----,----RT,
06
IF
2A
DO
DO
T4
BO
F6
8B
03
ISA
2A
I SAVE RESUL.T AS DESTINATION ADDRESS
DETERMINE SIZE OF' WINDOW
04C3 eo 3E 0049 R 06
04ce T3 04
04CE
04CE
04CF
0400
0402
0404
0406
04De
040A
040C
04DE
04EO
04E2
I SAVE L.INE COUNT IN BL
I GET UPPER LEFT POS I T I ON I NTO AX REG
MOV
1-----
01
C2 0101
E6
E6
04CA DO E2
04CC 0 I ET
BL,AL
AX, CX
USE CHARACTER SUBROUT I NE FOR pas I T I ON I NG
ADDRESS RETURNED IS MULTIPLIED BY 2 FROM CORRECT VAL.UE
I----04B4 ES 06FO R
04BT ea Fe
CMP
JNC
TEST FOR MEO J UM RES
FIND_SOURCE
MEDIUM RES UP
DL,I
SAL
SAL.
01,1
, COLUMNS - 21 SINCE 2 BYTES/CHAR
OFF"SET -Z SINCE 2 BYTES/CHAR
DETERMINE THE SOURCE ADDRESS IN THE BUFFER
I FI NO SOURCE
PUSH
ES
I GET JEGMENTS BOTH PO I NT I NG TO REGEN
POP
OS
SUB
CH, CH
ZERO TO HIGH OF COUNT REG I STER
SAL.
BL,I
MULTIPLY NUMBER OF L.INES BY 4
BL,'
SAL
JZ
R, I
IF ZERO, THEN BLANK ENTIRE FIELD
MOV
AL,ISO
ISO BYTES/ROW
BL.
DETERM I NE OFFSET TO SOURCE
MUL
Mav
S I ,0 I
SET UP SOURCE
ADD
SI,AX
ADD IN OFFSET TO IT
Mav
AH,DH
NUMBER OF ROWS IN FIEL.D
SUB
AH, BL.
DETERM I NE NUMBER TO MOVE
ED
E3
E3
2B
150
E3
FT
FO
E6
E3
1-----
L.OOP THROUGH, MOVING ONE ROW AT A TIME, BOTH EVEN AND ODD FIELDS
~.
I~~~
Ee
81
lSI
FE
0564 R
EE IFBO
EF IFBO
CC
115 FI
8A CT
CALL.
SUB
SUB
DEC
JNZ
.0.1-----
E8
lSI
FE
T5
E9
015TD R
EF IFao
CS
F15
0'3D R
01503
0503 8A DE
01505 EB EC
0150T
R, T
S I,ZOOOH-SO
DI,ZOOOH-80
AH
R8
I MovE ONE ROW
I MOVE TO NEXT ROW
NUMBER OF ROWS TO MOVE
CONTINUE TIL.L ALL MOVED
FILL. IN THE VACATED LINE!S)
MOV
RIOI
CAL.L.
SUB
OEC
JNZ
JMP
.,.
CLEAR ENTRY
ATTRIg-UTE TO FIL.L. WITH
AL,BH
DI,2000H-80
.,0
BC
V IDEO_RETURN
CLEAR THAT ROW
POINT TO NEXT LINE
NUMBER OF L.INES TO FIL.L.
CL.EAR L.OOP
EVERyTH I NG DONE
RIll
BLANK FIEL.D
SET BLANK COUNT TO EVERYTH I NG IN FIELD
MOV
BL,DH
..IMP
R9
CLEAR THE FIEL.D
GRAPH I CS UP
ENDP
I
I SCROL.L OOWN
1 TH I S ROUT I NE SCROLLS DOWN THE I NFDRMAT I ON ON THE CRT
I ENTRY -I
CH, CL = UPPER LEFT CORNER OF REG I ON TO SCROLL.
I
DH I DL = L.OWER RIGHT CORNER OF REG I ON TO SCROLL
I
BOTH OF THE ABOVE ARE IN CHARACTER POSITIONS
I
BH = FILL VALUE FOR BLANKED LINES
I
AL. = , LINES TO SCROL.L. {AL.=O MEANS BL.ANK THE ENTIRE FIELD)
I
OS = OAT A SEGMENT
I
ES
REGEN SEGMENT
I EXIT -I
NOTH I NG, THE SCREEN IS SCROL.L.ED
I - --- ---- - - - -------- - -- - - ---- - - - -- - - - - - ---------- -- ------
-------= -------- ------- ----------------- ---- ---- ------
=
'286
1281
1288
IZ89
1290
1291
129Z
1293
1294
12915
IZ96
1291
1298
1299
1300
1301
1302
1303
1304
13015
1306
130T
1308
'309
1310
1311
131Z
SCROL.L. UP
I
TH I S ROUT I NE SCROLL.S UP THE I NFORMAT I ON ON THE CRT
I ENTRY --
01507
01501 FD
0508 8A 08
050A 8B CZ
GRAPH I CS DOWN
MOV
MOV
1-----
1-----
050C E8 06FO R
050F 8B F8
2B
81
DO
DO
CAL.L.
DI
C2 0101
E6
E6
I SET DIRECTION
I SAVE LINE COUNT IN BL.
I GET LOWER RIGHT POSITION INTO AX REG
GRAPH POSN
DI,AX-
; SAVE RESULT AS DESTINATION ADDRESS
DETERMINE SIZE OF WINDOW
SUB
AOO
SAC
SAC
1----051B 80 3E 0049 R 06
01520 73 05
NEAR
BL,AL.
AX,OX
USE CHARACTER SUBROUTINE FOR POSITIONING
ADDRESS RETURNED IS MULTIPLIED BY 2 FROM CORRECT VAL.UE
MOV
;----01511
0513
0517
0519
PROC
!TD
DX.CX
DX,IOIH
DH,I
DH,I
I ADJUST VAL.UES
I MULTlPL.Y ROWS BY 4 AT 8 VERT OaTS/CHAR
AND EVEN I ODD ROWS
I
DETERMINE CRT MODE
CMP
JNC
TEST FOR MED I UM RES
F I NO _SOURCE_DOWN
VIDEO 1
5-155
1-13
04-21-86
1313
13141315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1 342
1343
1344
1345
1346
1347
1348
I 349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1-----
1----0527
0527
0528
0529
052B
052F
0531
0533
0535
0537
0539
053B
0530
053F
06
IF
2A
81
DO
DO
74
BO
F6
8B
2B
8A
2A
ED
C7 OOFO
E3
£3
2B
50
£3
F7
Fa
E6
E3
0541
0541 E8
054481
0548 81
054C FE
054£ 75
0564 R
EE 2050
EF 2050
CC
FI
PUSH
POP
SUB
.00
S'L
S.L
"Z
MOV
OUL
MOV
SUB
MOV
SUB
,-----
0550
0550
0552
0552
0555
0559
055B
ES
OS
CH,CH
DI.Z40
BL,I
Bl.1
RI.
AL,80
BL
SI,DI
SI.AX
AH,DH
AH,BI..
# COLUMNS - 2, SINCE 2 BYTES/CHAR
I F I NO SOURCE DOWN
1 BOTH-SEGMENTs TO REGEN
I ZERO TO HIGH OF COUNT REGISTER
I PO I NT TO lAST ROW OF PIXELS
I MULTIPLY NUMBER OF LINES BY 4
I IF ZERO. THEN BLANK ENTIRE FIELD
I 80 BYTES/ROW
I DETERM I NE OFFSET TO SOURCE
I SET UP SOURCE
SUBTRACT THE OFFSET
I
I NUMBER OF ROWS IN FIELD
I DETERt.! I NE NUMBER TO MOVE
LOOP THROUGH, MOVING ONE ROW AT A TIME, BOTH EVEN AND ODD FIELDS
RI31
CAll
SUB
SUB
OEC
"NZ
,----RI41
ROW lOOP DOWN
Movl ONE-ROW
MOVE TO NEXT ROW
R17
S I ,ZOOOH+80
OI,2000H+80
.H
NUMBER OF ROWS TO MOVE
CaNT I NUE Till All MOVED
R13
Fill IN THE VACATED lINE(S)
8A C7
MOV
Al,BH
CALL
SUB
OEC
RI.
DI,ZOOOH+80
BL
RI •
I
I
I
I
I
CLEAR ENTRY DOWN
ATTRI§UTE T-O: Fill WITH
CLEAR LOOP DOWN
CLEAR-A ROW
POINT TO NEXT LINE
NUMBER OF LINES TO FilL
CLEAR LOOP DOWN
V IDEO_RETURN
I
EVERYTH I NG DONE
RI51
£8
81
FE
75
I
1 OFFSET -Z SINCE Z BYTES/CHAR
I POINT TO lAST BYTE
OETERM I NE THE SOURCE ADDRESS I N THE BUFFER
RIZe
0570 R
EF 2050
CB
F5
.JNZ
0550 £9 0130 R
""P
0560
0560 8A DE
0562 EB EC
0564
RI6e
1-----
ROUT I NE TO MOVE ONE ROW OF INFORMATION
0564
0564 8A CA
0566 56
R17
PROC
MOV
PUSH
Fi..i5H
REP
POP
POP
NEAR
CL,Dl
'00
.00
SI.-2000H
DI,2000H
:i:~ g::~ ;i /
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1319
1380
1381
1382
1383
1384
13e5
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
MEDIUM R£S DOWN
SAL
Dl.1
SAL
01.1
INC
01
0522 DO E2
0524 01 E7
0526 47
0560\
056B
056C
0570
0574
0575
0576
0578
057A
057B
057C
0570
MOV
"MP
GRAPHICS_DOWN
A4
SF
5E
8 I C6 2000
8 I C7 2000
56
57
8A CA
F3/ A4
5F
5£
C3
PUSH
PUSH
MOV
REP
POP
POP
RET
ENDP
R17
,----0570
0570
057F
0580
0582
0583
0587
0588
05SA
058C
0580
058£
5-156
BLANK FIELD DOWN
SET BLANK C-O:UNT TO EVERYTHING IN FIELD
CLEAR THE FIELD
BL.DH
RI.
ENOP
1 NUMBER OF BYTES IN THE ROW
51
Di
MOVSB
SAVE PO INTERS
MOVE THE EVEN FIELD
01
5!
1 POINT TO THE ODD FIELD
51
01
SAVE THE POINTERS
COUNT BACK
MOVE THE ODD FIELD
Cl,Dl
MOVSB
01
51
I POINTERS BACK
1 RETURN TO CALLER
CLEAR A SINGLE ROW
RI.
8A CA
aT
F3/ AA
SF
81 C7 2000
57
8A CA
F3/ AA
5F
C3
PROC
MOV
PUSH
REP
POP
NEAR
Cl,Dl
'00
DI,2000H
PUSH
MOV
REP
POP
RET
ENOP
RI.
01
STOSB
01
I NUMBER OF BYTES IN FIELD
I SAVE POINTER
I STORE THE NEW VALUE
, POINTER BACK
, POINT TO ODD FIELD
01
Cl,Dl
STOSB
, Fill THE ODD FIELD
01
I
RETURN TO CAllER
GRAPHICS WRITE
TH I S ROUT I NE WR I TES THE ASC I I CHARACTER TO THE CURRENT
P'OSITION ON THE SCREEN.
ENTRY -Al II CHARACTER TO WR I TE
Bl = COLOR ATTRIBUTE TO BE USED FOR FOREGROUND COLOR
IF"BIT 7 IS SET, THE CHAR IS XORID INTO THE REGEN BUFFER
(0 I S USED FOR THE BACKGROUND COLOR)
ex = NUMBER OF CHARS TO WR I TE
OS = DATA SEGMENT
ES • REGEN SEGMENT
EXIT -NOTH I NG I S RETURNED
GRAPHICS READ
THIS ROUTINE READS THE ASCII CHARACTER AT THE CURRENT CURSOR
pas I T I ON ON THE SCREEN BY MATCH I NG THE DOTS ON THE SCREEN TO THE
I
CHARACTER GENERATOR COCE PO I NTS
I
1 ENTRY -NONE
(0 I S ASSUMED AS THE BACKGROUND COLOR)
I
I EXIT -AL.
CHARACTER READ AT THAT POS I T I ON (0 RETURNED I F NONE FOUND)
I
=
1
I FOR BOTH ROUT I NES, THE I MAGES USED TO FORM CHARS ARE CaNT A I NED I N ROM
I
FOR THE 1ST 128 CHARS.
TO ACCESS CHARS I N THE SECOND HALF, THE USER
I
MUST INITIALIZE THE VECTOR AT INTERRUPT lFH (lOCATION 0007CHI TO
I
POINT TO THE USER SUPPLIED TABLE OF GRAPHIC IMAGES (eX8 BOXES).
I
FAilURE TO DO SO WILL CAUSE IN STRANGE RESULTS
,--- ------------ -------------------------------- ------
VIDEO!
1-14
04-21-86
1421
1428 058E
1429 058E
1430 0590
1431
1432
1433
1434 0591
1435 0594
1436
1431
1438
1439 0596
1440 0591
1441 0599
1442
1443
1444
1445 059B
1446 059E
1441 059F
1448
1449
1450
1451 05AI
1452 05AI
1453 05A3
1454 05A4
1455 05A6
1456
1451 05A8
1458 05AC
1459
1460 05AE
1461 05AF
1462 05BO
1463 05B2
1464
1465 05B4
1466 05B5
1461 05B8
1468
1469
1410
1411 05B9
1412 05B9
1413 05BB
1414 05Bo
1415 05BF
1416 05C1
1411 05C6
1418 05Cl
1419
1480
1481
1482 05C9
1483 05C9
1484 05CA
1485 OISCB
1486 OSCO
1481 OISCo
1488 05CE
1489 0501
1490 0503
1491 0504
1492 0505
1493 0505
1494 050A
1495 0500
1496 050F
1491 05E1
1498 05E2
1499 05E3
1500 05E4
1501 05E6
1502
1503 05E9
1504 05E9
1505 05EC
1506 05EO
1501 05EE
1508 05F3
1509
1510
151105F5
1512 05F5
1513 05FT
1514
1515 05F9
1516 05FC
1511 05FE
1518 0600
15 I 9 0602
1520 0604
1521 0604
1522 0605
1523 0606
1524 0608
1525 0608
1526 0609
1521 060C
1528 060E
15290610
1530 0613
1531 0615
1532 0618
1533 0618
1534 061B
1535 061C
1536 061F
1531 0621
1538 0623
1539 0626
1540 0628
ASSUME
GRAPHICS WRITE
Iilov
84 00
50
PUSH
oSloATA.ESloATA
PROC
NEAR
AH.O
AX
1 ZERO TO HIGH OF CODE POINT
1 SAVE CODE PO I NT VALUE
1-----
DETERMINE POSITION IN REGEN BUFFER TO PUT COOE POINTS
;-----
DETERMINE REGJON TO GET CODE POINTS FROM
E8 06EO R
8B FS
CALL
MOV
58
3C 80
13 06
POP
CMP
oAE
;-----
;-----
; RECOVER CODE PO I NT
AX
AL,80H
1 IS IT IN SECOND HALF
51
; YES
IMAGE IS IN FIRST HALF. CONTAINED IN ROM
:
~~~~E~Eg~E~~A~~S STACK
SHORT S2
I
DETERMINE_MODE
IMAGE IS IN SECOND HALF,
IN USER MEMORY
MOV
PUSH
oMP
BE 0000 E
OE
EB 18
I F I NO LOCAT I ON I N REGEN BUFFER
1 REGEN POINTER IN OJ
5"
ol.AX
~~ • OFFSET
CRT_CHAR_GEN
51.
2C 80
IE
2B F6
8E DE
SUB
PUSH
SUB
MOV
ASSUME
LOS
C5 36 001C R
8C oA
IF
52
OB 06
15 05
58
BE 0000 E
OE
1-----
AL,80H
EXTEND CHAR
ZERO Oi!fIGIN FOR SECOND HALF
SAVE DATA POINTER
51.51
05,51
oSIABSO
ESTABLISH VECTOR ADDRESSING
as
~~: 6~XT _PTR
MOV
ASSUME
POP
PUSH
oSIDATA
OR
OX,SI
5'
POP
MOV
PUSH
~~' OFFSET CRT_CHAR_GEN
ADD
CMP
POP
oC
2C
1-----
AX,I
AX. I
AX.I
SI,AX
6~RT_MOoE.6
I
I
oETERMI NE MODE
MULTIPLY CODE POINT VALUE BY 8
; SI HAS OFFSET OF DESIRED CODES
RECOVER TABLE PO I NTER SEGMENT
TEST FOR MEDIUM RESOLUTION MODE
57
HIGH RESOLUTION MODE
S3.
51
56
B6 04
ELSE SET ,AX)= 0000 FOR ~NULLw
POINT TO DEFAULT TABLE OFFSET
I N THE CODE SEGMENT
AX
DETERMINE GRAPHICS MODE IN OPERATION
SAL
SAL
SAL
EO
EO
EO
FO
3E 0049 R 06
RECOVER DATA SEGMENT
SAVE TABLE SEGMENT ON STACK
CHECK FOR VALID TABLE DEFINED
CONTINUE IF oSISI NOT 0000:0000
OX
oNZ
5 ••
01
01
01
03
80
IF
12
GET THE OFFSET OF THE TABLE
GET THE SEGMENT OF THE TABLE
as
PUSH
PUSH
MOV
D.
SI
oH.4
HIGH CHAR
SAVE-REGEN PO INTER
SAVE CODE POINTER
1 NUMBER OF TIMES THROUGH LOOP
I
S4.
AC
F6 C3 80
15 16
AA
AC
LOoSB
TEST
JNZ
STOSB
LOoSB
BL.80H
56
I GET BYTE FROM CODE PO I NTS
SHOULD WE USE THE FUNCT I ON
1 TO PUT CHAR IN
I STORE I N REGEN BUFFER
I
S5.
261 88 85 1FFF
83 Cl 4F
FE CE
15 EC
5E
5F
41
E2 E3
E9 OlSo R
MOV
AOO
DEC
oNZ
POP
POP
ESI (01 +2000H-I] ,AL
01.19
DH
STORE I N SECOND HALF
MOVE TO NEXT ROW I N REGEN
~ONE WITH LOOP
S4
51
INC
01
01
LOOP
oMP
V IDEO_RETURN
RECOVER REGEN PO INTER
PO I NT TO NEXT CHAR POS I T I ON
MORE CHARS TO WR I TE
53
S6.
261 32 05
AA
AC
261 32 85 1FFF
EB EO
XOR
STOSB
LOOSB
XOR
JMP
1-----
AL.ESIIDI+2000H-1]
S5
; BACK TO MAINSTREAM
MEDIUM RESOLUTION WRITE
57.
I
SA 03
01 El
MOV
SAL
OL,BL
01. I
80
BO
F6
8A
8.1'.
AND
MOV
MUL
MOV
MOV
BL,3
AL,055H
BL
BL.AL
BH,AL
PUSH
PUSH
MOV
01
SI
OH,4
E3 03
-55
E3
OS
F8
EXCLUS I VE OR WITH CURRENT
STORE THE CODE PO I NT
AGAIN FOR 000 FIELD
AL.ESI [01]
S8.
51
56
B6 04
AC
E8 06C4 R
23 C3
86 EO
F6 C2 80
14 03
261 33 05
...
LOoSB
CALL
AND
XCHG
TEST
OZ
XOR
MEo RES WRITE
SAVE-HIGR COLOR BIT
OFFSET·2 SINCE 2 BYTES/CHAR
EXPAND BL TO FULL WORD OF COLOR
ISOLATE THE COLOR BITS ( LOW 2 BITS)
GET BIT CONVERSION MULTIPLIER
EXPAND 2 COLOR BITS TO 4 REPLICATIONS
PLACE BACK IN WORK REGISTER
EXPAND TO 8 REPLICATIONS OF COLOR
MEo CHAR
SAVE-REGEN PO INTER
SAVE THE CODE POINTER
NUMBER OF LOOPS
GET CODE POINT
DOUBLE UP ALL THE BITS
CONVERT TO FOREGROUND COLOR ( 0 BACK )
SWAP HIGH/LOW BYTES FOR WORD MOVE
IS THIS XOR FUNCTION
NO, STORE IT IN AS IT IS
DO FUNCTION WITH LOW/HIGH
521
AX.BX
AH,AL
oL,80H
SID
AX.ESIIOI]
5101
261 89 05
AC
E8 06C4 R
23 C3
86 EO
F6 C2 80
14 05
261 33 155 2000
MOV
LOOSB
CALL
AND
XCHG
TEST
OZ
XOR
ESIIDI] ,AX
STORE FIRST BYTE HIGH, SECOND LOW
I GET CODE POINT
521
AX,BX
AH,AL
oL,80H
511
AX,ESI [01+2000H]
1
I
1
I
I
CONVERT TO COLOR
SWAP HIGH/LOW BYTES FOR WORO MOVE
AGAIN, IS THIS XOR FUNCTION
NO, JUST STORE THE VALUES
FUNCTION WITH FIRST HALF LOW
VIDEO 1
5-157
I-I!S
04-21
1641
1642
1543
1544
1646
1646
1547
1641
1549
1650
1551
15152
15es
1554
1555
1656
1557
lUI
1559
1560
1561
1562
1563
1564
1565
11566
1561
11561
1569
1570
1511
1572
1573
1574
1115
la76
1511
l57a
1579
15ao
15al
1512
15aa
1584
11515
1516
1587
1581
1589
1590
1591
11592
1593
1594
1595
1596
1591
1598
1599
1600
160 I
1602
1603
1604
1605
1606
1601
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
I 622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
0620
0620
0632
0636
0637
0639
063A
0638
063C
0630
063F
0642
261 a. 85 2000
83 C7 50
FE CE
75 CF
5E
5F
47
41
E2 C5
E9 0130 R
MOV
ADD
DEC
JNZ
POP
POP
INC
INC
LOOP
JMP
GRAPHICS_.RITE
ESI [DI +2000H] ,AX
01,80
DH
59
51
DI
01
I--------------~ ~ ~ ~ ~------------- ~ ~-~
Ea 06EO R
8B FO
83 EC 08
IS EC
064C
0651
0652
0653
ao 3E 004' A 06
06
IF
T2 19
066E
0610
0612
0612
0675
0619
061C
0680
0682
0684
0684
0687
0688
0619
068C
068E
0690
0690
0691
0692
0695
0695
0696
0697
069A
069C
0690
069E
06A0
06A2
06A5
06A6
8A a4 2000
46 00
45
83 C6 50
FE CE
Ee
EB 16
n
D1 E6
B6 04
1-----
SI31
I CONVERTED TO OFFSET I N REGEN
I SAVE IN SI
I ALL.OCATE SPACE FOR THE REAO CODE POINT
I PO I NTER TO SAVE AREA
I PO I NT TO REGEN SEGMENT
I MEDIUM RESOL.UTION
?ip~~l~
GET FIRST BYTE
SAVE IN STORAGE AREA
NEXT LOCATION
GET L.OWER REG I ON BYTE
ADJUST ANC STORE
51,80
POINTER INTO REGEN
LOOP CONTROL
00 I T SOME MORE
GO MATCH THE SAVED CODE F"OINTS
ap
?ip~~l~2000H)
ap
DH
SI2
SHORT 515
hlEOIUM RESOL.UTION READ
SAC
51,1
MOV
DH,4
OFFSET·2 SINCE 2 BYTES/CHAR
NUMBER OF F"ASSES
S141
EI
II
EI
a1
FE
0603 R
C6 IFFE
06D3 R
EE IFB2
CE
J5 EE
CAL.L.
AOO
CALL.
sua
1-----
SF 0000 E
DEC
"NZ
SI,2000H-2
S2.
SI,2000H-80+2
DH
SI'
SAVE AREA HAS
MOV
DE
07
F"USH
CS
ES
MOV
MOV
BP,S
SI,BF"
AL.,O
PUSH
POP
MOV
SS
os
OX.12S
5171
06BO
06B4
06B6
06BI
06BA
06BC
C4
IC
DB
74
BO
EB
3E 001C R
CO
Cl
04
10
02
06B£ 13 C4 08
06C1 E9 0130 R
06C4
51
B9 0001
DO
01
01
E2
95
ca
00
FO
F8
59
ca
VIDEO 1
!T
FINO CHAR
ESTA§LISH ADDRESSING
~.f.TCH
CODE POINTS IN CS
ADJUST POINTER TO START OF SAVE AREA
CURRENT CODE F"O I NT BE I NG MATCHED
SU'I
56
57
B9 0004
F31 A7
5F
5E
74 IE
FE CO
13 C7 08
4A
15 ED
00
12
CO
08
GET BYTES FROM REGEN INTO S I NGL.E SAVE
GO TO L.OWER REG I ON
GET THIS PAIR INTO SAVE
ADJUST F"OINTER BACK INTO UPF"ER
I KEEF" GOING UNTIL. AL.L. S DONE
CHARACT~R
OI,OFF"SET CRT_CHAR_GEN
POP
sua
aa F5
BO 00
16
IF
BA 0010
S2.
5151
13 ED 01
3C
74
2B
8E
5-158
----
NEAR
HIGH RESOL.UT I ON READ
GET VAL.UES FROM REGEN BUFFER AND CONVERT TO COOE F"O I NT
MOV
OH,4
I NUMBER OF PASSES
MOV
MOV
INC
MOV
MOV
INC
ACO
OEC
"NZ
...,P
45
PROC
526
SI,AX
SP,8
BP,SP
DETERMINE GRAPHICS MOOES
CMP
.CRT MODE,6
PUSH
ESPOP
Os
JC
513
S12,
aA 04
06AI
06AA
06AC
06AE
06C4
06C4
06C5
06C8
06ca
06CA
06CC
06CE
06DO
1652 0601
1653 0602
1654 0603
1----1-----
I I 46 00
aa
1 MORE TO .RITE
~ ~--~ ---~~-- ~-------- - ~ ~ -~ ---------- - ~--
GRAPH I CS READ
~ALL
MOV
SUB
MOV
I--~~-
B6 04
I STORE SECOND POAT I ON HIGH
I POINT TO NEXT L.OCATION
I KEEP GOING
r RECOVER CODE PO INTER
I RECOVER REGEN PO INTER
I POINT TO NEXT CHAR POSITION
01
51
V I OEO RETURN
ENOP-
I GRAPH I CS READ
I
0642
0642
0645
0647
064A
0655
0657
0657
0659
065C
06150
0661
0664
0665
066a
066A
066C
~86
5111
PUSH
F"USH
MOV
REF"E
POP
POP
"Z
INC
ADD
OEC
"NZ
1-----
SI
01
CX,4
ChlPSW
01
SI
SI.
AC
DI,a
ox
SIT
ESTABL.ISH ADDRESSING TO STACK
FOR THE STRING COMF"ARE
NUMBER TO TEST AGAINST
SAVE SAVE AREA F"O INTER
SAVE CODE F"O INTER
NUMBER OF WORDS TO MATCH
COMPARE THE 8 BYTES AS WORDS
RECOVER THE PO INTERS
I F ZERO FL.AG SET, THEN MATCH OCCURRED
NO MATCH, MOVE ON TO NEXT
NEXT CODE POINT
LOaF" CONTROL
DO AL.L. OF THEM
CHAR NOT MATCHED, MIGHT BE I N USER SUPF"L I EO SECOND HALF
CMP
AL.,O
I
AL.<> 0 IF ONLY 1ST HALF SCANNED
JE
SI8
I
IF
D. THEN AL.L HAS BEEN SCANNED
SUB
AX,AX
MOV
OS,AX
I
ESTABLISH ADDRESSING TO VECTOR
ASSUME OS I ABSO
GET POINTER
~~~
~~::;XT_F"TR
SEE IF THE POINTER REAL.LY EXISTS
OR
AX.DI
IF AL.L. 0, THEN DOESN'T EXIST
JZ
S18
I NO SENSE LOOK I NG
MOV
AL,128
I ORIGIN FOR SECOND HAL.F
JMP
SI6
I GO BACK AND TRY FOR IT
ASSUME DSIDATA
=
1----- CHARACTER IS FOUND ( AL._O IF NOT FOUND I
S181
ADO
SP.8
I READJUST THE STACK, THROW AWAY SAVE
JMF"
V I OEO RETURN
I AL.L. DONE
GRAPHICS READ
ENOP~~~
~
1 EXF"AND BYTE
1
THIS ft'OUTINE TAKES THE BYTE IN AL. AND OOUBL.ES ALL.
I OF THE BITS, TURNING THE 8 BITS INTO 16 BITS.
I
THE RESUL.T IS L.EFT IN AX
I - ----~ --------------~ - ~ ~ ~- - ~ ~ -- ------- - ----S21
PROC
NEAR
F"USH
CX
SAVE REGISTER
MOV
CX, 8
SH I FT COUNT REG I STER FOR ONE BYTE
S221
AL,I
SHIFT BITS, LOW BIT INTO CARRY FLAG
RCR
BP,I
MOVE CARRY FLAG (L.OW BIT) INTO RESULTS
SAR
BF".I
SIGN EXTEND HIGH BIT (DOUBLE IT)
LOaF"
S22
REPEAT FOR ALL. 8 BITS
XCHG
AX,BP
MOVE RESULTS TO PARAMETER REGISTER
POP
cx
RECOVER REG I STER
RET
ALL DONE
S21
ENOP
,-------=-------------- -- ----------------
"OR
1-16
04-21-86
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1661
1668
1669
1610
161 I
1612
1613
1614
1615
16Te.
1611
1618
1619
1680
1681
I 682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1100
1101
1102
1103
1104
1105
1106
1101
1108
1109
1110
1-------------------------------------------------1 MEO REAO 8YTE
I THI! RouTINE WILL TAKE 2 BYTES FROM THE REGEN BUFFER,
I
COMPARE AGAINST THE CURRENT FOREGROUND COLOR, AND PLACE
THE CORRESPONDING ON/OFF BIT PATTERN INTO THE CURRENT
I
POSITION IN THE SAVE AREA
I
I ENTRY -1
SI,OS. POINTER TO REGEN AREA OF INTEREST
BX. EXPANDED FOREGROUND COLOR
I
1 8P. POINTER TO SAVE AREA
I EXIT -I
S I AND BP ARE INCREMENTED
06D3
06D3
06D4
0606
0609
06DB
06DB
G6DD
060F
06EO
06EO
06E2
06E4
G6E6
06E8
06EB
06EC
06EO
1---------------------------------------------------PROC
NEAR
S23
AD
86 C4
B9 COOO
B2 00
GET FIRST 8YTE AND SECOND BYTES
SWAP FOR COMPARE
2 BIT MASK TO TEST THE ENTRIES
RESUL.T REGISTER
AL.,AH
cX,ocaOOH
OL.,O
S24.
85 C1
14 01
F9
TEST
AX,CX
S2.
RCL
SHR
SHR
"NC
MOV
INC
RET
ENDP
OL.,I
CX,I
CX.1
S2.
[8P],OL.
BP
"Z
STC
IS THIS SECTION BACKGROUND?
IF ZERO. IT IS BACKGROUND (CARRY.OI
WASN'T. SO SET CARRY
S251
DO
01
DI
13
88
45
C3
D2
E9
E9
F3
56 00
S23
MOVE THAT BIT I NTO THE RESUL. T
MOVE THE MASK TO THE RIGHT BY 2 BITS
00 IT AGAIN IF MASK DIDN'T FAL.L. OUT
STORE RESUL.T IN SAVE AREA
ADJUST POINTER
ALL. DONE
1-------------------------------------- --
I V4 POSITION
I
TRIS ROUTINE TAKES THE CURSOR POSITION CONTAINED IN
I
THE MEMORY LOCAT I ON, AND CONVERTS IT 1NTO AN OFFSET
INTO THE REGEN BUFFER, ASSUMING ONE BYTE/CHAR.
I
I
FOR MEDIUM RESOLUTION GRAPHICS, THE NUMBER MUST
BE DOUBLED.
I
I ENTRY -- NO REGISTERS,MEMORY LOCATION .CURSOR POSN IS USED
I EXIT-I
AX CONT A I NS OFFSET I NTO REGEN 8UFFER
06Eo
06EO
06FO
06FO
06Fl
06F3
06F'6
06F8
06FA
06FC
06FE
0100
0101
0102
,---------- ------------------- -- -- -- ------
AI
0050 R
53
8808
AD 004A R
F6 E4
Dl EO
Dl EO
2A FF
03 C3
58
C3
1111
1112
1113
1114
1115
1116
1111
1118
1119
1120
1121
1122
1123
1124
1125
1126
1121
1128
1129
1130
1131
1132
1133
1134
1135
1136
1131
1138
1139
1140
1141
1142
1143
1144
1145
LODSW
XCHG
MOV
MOV
S26
PROC
MOV
GRAPH POSN
PUSH
MOV
:S~
NEAR
AX ,.CURSOR POSN
LABEL
NEXR
BX
BX,AX
:~.eYTE PTR .CRT_COLS
I GET CURRENT CURSOR
SAVE REGISTER
SAVE A COPY OF CURRENT CURSOR
GET BYTES PER COL.UMN
MUL.TIPLY BY ROWS
SHL
AX,I
MUL.T1PL.Y • 4 SINCE 4 ROWS/BYTE
SHL
AX,I
I SOLATE COLUMN VALUE
SUB
BH,BH
ADD
AX,BX
DETERM I NE OFFSET
RECOVER PO INTER
POP
ax
RET
ALL. DONE
S26
ENOP
-- WR I TE_TTY ----- - - ---------------- --------------- --------- ----------------THIS INTERFACE PROVIDES A TEL.ETYPE LIKE INTERFACE TO THE
V IDEO CARDS.
THE· I NPUT CHARACTER IS WR I TTEN TO THE CURRENT
CURSOR POSITION, AND THE CURSOR IS MOVED TO THE NEXT POSITION.
IF THE CURSOR LEAVES THE LAST COLUMN OF THE FIELD, THE COLUMN
I S SET TO ZERO, AND THE ROW VALUE I S I NCREMENTEC.
I F THE ROW
ROW VALUE LEAVES THE FIELD, THE CURSOR IS PLACED ON THE LAST ROW,
FIRST COLUMN, AND THE ENTIRE SCREEN IS SCROLLED UP ONE LINE.
WHEN THE SCREEN IS SCROLLED UP, THE ATTRIBUTE FOR FILLING THE
NEWLY BLANKED LINE IS READ FROM THE CURSOR POSITION ON THE PREVIOUS
LINE BEFORE THE SCROLL, I N CHARACTER MODE.
I N GRAPH I CS MODE,
THE
COLOR IS USED.
ENTRY -(AH I • CURRENT CRT MODE
(ALI .. CHARACTER TO BE WRITTEN
NOTE THAT BACK SPACE, CARR I AGE RETURN, BELL ANO LINE FEED ARE
HANDLED AS COMMANDS RATHER THAN AS DISPLAY GRAPHICS CHARACTERS
(BL I .. FOREGROUND COLOR FOR CHAR WR I TE IF CURRENTLY I N A GRAPH I CS MODE
EXIT -ALL REGISTERS SAVED THROUGH VIDEO EXIT (INCLUDING lAX))
a
,---------------------------------------=-------------------------------------DS.DATA
0102
0102
0103
0105
0109
010B
97
B4
8A
CO
88
03
3E 0062 R
10
Cl
ASSUME
WR I TE TTY
XCHG
MOV
1-----
11410111
1148 0113
1149 0116
lTeO
1151
1152
1153 0118
1154 011A
1155 011E
1156 0120
1151 0122
1158 0125
11et
1160
1161 0121
1162 0129
1163
1164
1165
1166 072B
1161 072E
1168 0130
840A
B9 0001
CO 10
UO.
;----FE
3A
15
B2
80
15
C2
16 004A R
33
00
FE 18
2A
B4 02
CD 10
AO 0049 R
3C 04
12 06
~~H·ACTIVE-PAGE
MOV
AX,DI
SAVE (AX) REGISTER IN (01) FOR EXIT
READ CURSO" POSITION
GET CURRENT PAGE SETT I NG
READ THE CURRENT CURSOR POSITION
RECOVER CHARACTER FROM (0 I) REG I STER
OX NOW HAS THE CURRENT CURSOR POSITION
"BE
1-----
NEAR
~~;
CMP
0100 3C 00
OlaF 16 46
1146
PROC
DI,AX
AH,03H
AL,CR
I SIT CARR I AGE RETURN OR CONTROL
GO TO CONTROL CHECKS I FIT IS
U.
WR I TE THE CHAR TO THE SCREEN
MOV
AH,OAH
MOV
CX,I
INT
10H
WR I TE CHARACTER ONLY COMMAND
ONL. Y ONE CHARACTER
WR 1TE THE CHARACTER
FlOS I TI ON THE CURSOR FOR NEXT CHAR
INC
CMP
"NZ
MOV
CMP
"NZ
OL
~~.BYTE PTR .CRT_COl..S
DL,O
DH,25-1
U6
TEST FOR COLUMN OVERFL.OW
SET CURSOR
COLuRN FOR CURSOR
CHECK FOR LAST ROW
SET_CURSOR_INC
1----UI.
SCROLL REQUIRED
MOV
AH,02H
INT
10H
1-----
DETERMINE VALUE TO FILL WITH DURING SCROLL
MOV
CMP
"C
I SET THE CURSOR
AL ,.CRT_MODE
AL,4
I GET THE CURRENT MODE
U2
I READ-CURSOR
VIDEO 1
5-159
1-11
04-21-86
1169 0132
1110 0134
1111 0736
11120738
1113 0738
1114 013A
1115 013C
1116 013E
1111 073E
1118 0141
1119 0143
1180 0145
1781 0749
1182 OHB
1183 074B
1784 0740
1785 0140
1186 014E
1787
1788 0751
1189 0751
1790 0753
1791 0153
1792 0155
1793
1794
1795 0751
1196 0751
1791 0159
1198 015B
1199 0150
1800 015F
1801 0161
1802 0763
1803
1804
1805
1806 0165
1801 0161
1808 0169
1809 076A
1810
1811
1812 016C
1813 076E
1814
1815
1816 0110
1817 0113
1818 0115
1819
1820
1821 0117
1822 011A
3C 01
Bl 00
15 06
U2.
B4 08
CO 10
8A Fe
0601
C9
18
16 004A R
CA
91
E9 0130 R
IOH
BH.AH
MOV
SUB
MOV
MOV
DEC
AX,0601H
cX,ex
DH,25-1
OL, BYTE PTR eCRT COLS
INT
IOH
XCHG
"M"
AX,OI
v IDEO_RETURN
INC
DH
MDV
"M"
U,
DL
-
V IDEO-CALL -RETURN
SCROLL UP THE SCREEN
TTY-RETURN
RESTORE THE ENTRY CHARACTER FROM (OJ)
RETURN TO CALLER
SET-CURSOR-I NC
NEXT ROW
SET-CURSOR
U7.
B4 02
EB F4
,----U8.
14
3C
14
3C
74
3C
15
13
OA
13
01
16
08
AC
,----OA 02
74 EA
4A
EB El
,-----
B2 00
EB E3
U'.
,-----
80 FE 18
15 DC
EB BO
UIOr
OR
"E
DEC
"M"
ggoo ~
WAS I T A CARR I AGE RETURN
U'
AL,LF
IS
GO
IS
GO
IS
IF
UIO
AL,OlH
UII
AL,08H
UO
OL,OL
IT A LINE FEED
TO LINE FEED
IT A BELL
TO BELL
IT A BACKSPACE
NOT A CONTROL, DISPLAY IT
IS IT ALREADY AT START OF LINE
SET_CURSOR
NO -- ,JUST MOVE IT BACK
SET_CURSOR
U7
OX
U7
CARR I AGE RETURN FOUNO
OL,O
MOV
"M"
MOVE TO FIRST COLUMN
SET_CURSOR
U7
LINE FEED FOUNO
DH,25-1
CM"
"M"
,----UII,
ESTABLISH THE NEW CURSOR
BACK SPACE FOUNO
"NE
B9 0533
83 IF
AH, 02H
CHECK FOR CONTROL CHARACTERS
"E
CM"
"E
CM"
"E
CM"
"NE
BOTTOM OF" SCREEN
YES, SCROLL THE SCREEN
NO, ,JUST SET THE CURSOR
U6
UI
BELL FOUND
MOV
CX,133!
MOV
BL, 3 1
e;......
BEEF
,JMP
US
DIVISOR FOR 896 HZ TONE
SET COUNT FOR 3 I 164 SECOND FOR BEEP
SOUNU THE Puu BEL..L..
TTY_RETURN
~~~~~=~~!-------~~~~----------------------------------------------------I
I
I
I
I
I
I
03 03
03 004
84
8B
83
EC
A8
74
E9
as
LIGHT PEN
THIS ROUTINE TESTS THE LIGHT PEN SWITCH AND THE LIGHT
PEN TRIGGER. IF BOTH ARE SET. THE L..OCATION OF THE LIGHT
PEN I S DETERM I NED. OTHERW I SE, A RETURN WITH NO I NFORMAT I ON
IS MADE.
ON EXIT,
(AH) = 0 IF NO LIGHT PEN INFORMATION IS AVAILABLE
eX,CX,DX ARE DESTROYED
(AH) = I IF LIGHT PEN IS AVAILABLE
(DH,OL)
ROW,COLUMN OF CURRENT LIGHT PEN POSITION
(CH) = RASTER POSITION
(BX) = BEST GUESS AT PIXEL HORIZONTAL POSITION
06 03 03
=
00
16 0063 R
C2 06
DB
,-----
WAIT FOR LIGHT PEN TO BE DEPRESSED
READ LPEN
MOV
MOV
ADD
IN
04
03
081C R
TEST
"Z
16 0063 R
C4
TEST
"M"
;-----
INPUT REGISTERS POINTED TO BY AH, AND CONVERT TO ROW COLUMN IN (OX)
NOV
NOV
OUT
MOV
DEC
INC
MOV
OUT
INC
VIDEOl
TEST LIGHT PEN TRIGGER
RETURN WITHOUT RESETTING TRIGGER
V7
TRIGGER HAS BEEN SET. READ THE VALUE IN
"M"
INC
IN
E5
AL,2
V7A
MOV
E8
00
v.-
SET NO LIGHT PEN RETURN CODE
GET BASE ADDRESS OF 68045
POINT TO STATUS REGiSTER
GET STATUS REGISTER
TEST LIGHT PEN SWITCH
GO IF YES
NOT SET. RETURN
V7Ar
00
C4
C4
PRoe
NEAR
AH,O
OX, eAOOR 68045
DX I 6
AL,DX
AL I 004H
V. A
SUBTRACT TABLE
NOW TEST FOR LIGHT PEN TRIGGER
"NZ
1----07AI 84 10
"M"
3,3,5,5,3,3,3,4
r
VI
079A A8 02
079C 75 03
079E E9 0826 R
8B
8A
EE
EB
42
EC
8A
4A
FE
8A
EE
42
EB
EC
8A
:
:
1
;---------------- ------------------------- - -------- ---- - ----------------:
ASSUME OS : DATA
1-----
5-160
FILL WITH BACKGROUND
SCROLL-UP
READ-CURSOR
GET READ CURSOR COMMAND
READ CHAR/ATTR AT CURRENT CURSOR
STORE IN BH
SCROLL-UP
SCROLL ONE LINE
UPPER LEFT CORNER
LOWER RIGHT ROW
LOWER RIGHT COLUMN
U.,
FE C6
1
I
I
OlA3
OlAl
01A9
07AA
OlAC
07AO
OlAE
0780
OlBI
01B3
07B5
07B6
01B7
07B9
07BA
AH,08H
U'
U5.
i
0789
0189
018B
018F
0792
0793
0795
0791
MOV
INT
MOV
U4.
CO 10
0781
0181
AL.7
BH.O
U3.
B8
2B
B6
8A
FE
::~~ gg~ ~~
1825
1826
1821
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1841
1848
1849
18150
1851
1852
1853
1854
1855
1856
1851
1858
1859
1860
1861
1862
1863
1864
1865
1866
1861
1868
1869
1810
1871
1872
1873
1874
1875
1876
1811
1878
1879
1880
CM"
MOV
"NE
"M"
IN
MOV
AH,16
~~::~DDR_6845
OX,AL
1+2
ox
AL,OX
CH,AL
ox
I LIGHT PEN REGISTERS ON 68045
ADDRESS REG I STER FOR 6845
REGISTER TO READ
SET IT UP
I/O DELAY
DATA REGI STER
GET THE VALUE
SAVE IN ex
ADDRESS REGI STER
AH
AL,AH
DXIAL
ox
1+2
AL.DX
AH,CH
I SECOND OAT A REG I STER
POINT TO DATA REGISTER
I/O DELAY
GET SECOND DATA VALUE
AX HAS INPUT VAL..UE
1-18
04-21-86
1881
1882
1883
1884
1885
1886
1881
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
190 I
1902
1903
1904
1905
1906
1907
1908
1909
1910
191 I
1912
",3
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
PAGE
;-----
OlBC
OlCO
OlCa
OlCl
01C9
OlCO
OlCF
0101
0103
81. IE 0049 R
21. FF
2E I 81. 9F 0181 R
2B C3
8B IE 004E R
01 EB
2B C3
19 02
2B CO
0105
0105
07D7
OlOC
070E
07E3
B1
80
12
80
74
1-----
:~::~RT_MOOE
aL,CSIVI [ax)
Axlex
BX,oCRT START
BX,I
AXIBX
I MODE VALUE TO ex
I DETERM I NE AMOUNT TO SUBTRACT
I TAKE IT AWAY
CONVERT TO CORRECT PAGE ORIGIN
IF POSITIVE, DETERMINE MODE
<0 PLAYS AS 0
V2
AX,AX
OETERM I NE MODE OF OPERAT I ON
V2,
03
3E 0049 R 04
21.
3E 0049 R 07
23
MOV
eMP
"B
eMP
"E
07E9
07EB
OlEO
OlEF
07Fl
07F6
OlF8
07FA
07FC
07FC
81.
02
81.
21.
80
75
81
DO
07FE
0800
0802
0804
0806
8A
81.
DO
DO
EB
04
FO
EE
EE
12
F6
81.
81.
02
81.
81.
32
03
36 0041. R
FO
04
EO
E8
DC
FF
E3
OCRT MOOE I 7
V.
-
GRAPH I CS MODE
1-----
DETERMINE GRAPHIC ROW POSITION
MOV
OIV
E8
ED
DC
FF
3E 0049 R 06
04
04
E4
OL,40
OL
MOV
AOO
MOV
SUB
eMP
"NE
MOV
SAL
CH,AL
CHICH
BL,AH
BH,BH
:~RT _MODE ,6
SHL
BX,CL
CL,4
AHI I
V3,
03 E3
,-----
DL,AH
OH,AL
OH,I
OHII
SHORT V5
OIV
MOV
MOV
SAL
MOV
MOV
XOR
SAL
BYTE PTR oCRT _ COLS
OHIAL
OLIAH
AL,CL
CHIAL
BL,AH
BH,BH
eXtCL
V5,
52
8B 16 0063 R
83 C2 07
EE
51.
v.,
MOV
AH,I
PUSH
OX
MOV
AOO
OUT
POP
OX,oADOR 6845
DX , 7
DX,AL
POP
POP
POP
POP
POP
POP
POP
POP
BP
OX
V7,
50
5F
5E
IF
IF
IF
IF
07
CF
ALPHA_PEN
DIVISOR FOR GRAPHICS
DETERMINE ROWIAL) AND COLUMNIAH)
AL RANGE 0-99, AH RANGE 0-39
SAVE ROW VALUE IN CH
·2 FOR EVEN/ODO FIELD
COLUMN VALUE TO BX
MULTI PLY BY 8 FOR MED I UM RES
DETERMINE MEDIUM OR HIGH RES
NOT HIGH RES
SHirT VA[UE FOR HIGH RES
COLUMN VALUE TIMES 2 FOR HIGH RES
NOT HIGH RES
MULTIPLY-·16 FOR HIGH RES
COLUMN VALUE FOR RETURN
ROW VALUE
DIVIDE BY 4
FOR VALUE IN 0-24 RANGE
LIGHT _PEN_RETURN_SET
ALPHA MODE ON LIGHT PEN
V.,
84 01
I
DETERMINE ALPHA CHAR POSITION
MOV
MOV
SHR
SHR
"MP
,-----
OETERM I NE MODE
SET ·8 SHTFT COUNT
DETERMINE IF GRAPHICS OR ALPHA
ALPHA_PEN
CL , 3
:~RT_MDDE,4
1----01E5 B2 28
01E7 F6 F2
0808
0808
080C
080E
0810
0812
0814
0816
0818
0811.
0811.
081C
081C
0810
0821
0824
0825
0826
0826
0827
0828
0829
0821.
082B
082C
082D
082E
082F
082F
AX HAS THE VALUE READ IN FROM THE 6845
MOV
SUB
MOV
SUB
MOV
SHR
SUB
"NS
SUB
IRET
REAO_LPEN
CODE
ENDS
ALPHA PEN
DETER'" I NE ROW I COLUMN VALUE
ROWS TO DH
COLS TO DL
MULTIPLY ROWS· 8
GET RASTER VALUE TO RETURN REGISTER
COLUMN VALUE
TO BX
LIGHT PEN RETURN SET
INDICATE EVERY TRING SET
L I CiHT PEN RETURN
I SAVE IfETUIfN VALUE (I N CASE)
I GET BASE ADDRESS
I POINT TO RESET PARM
I ADDRESS, NOT DATA, I S IMPORTANT
J RECOVER VALUE
I RETURN_NO_RESET
01
SI
OS
OS
OS
OS
ES
I DISCARD SAVED BX,CXIDX
ENOP
ENO
VIDEOl
5-161
V.,.alon 2.00
I-I
04-21-86
PAGE 118,121
TITLE BIOS ----- 06/10/85 BIOS ROUTINES
.286C
.LIST
CODE
SEGhiENT BYTE PUBL I C
I
2
3
•
•,
••I.
"
5
0000
12
13
I.
I.
PUBLIC
PUBL I C
EQUIPMENT I
MEMORY 5 1'IE DET I
PUBLIC
NMl_INT_'
EXTRN
EXTRN
EXTRN
EXTRN
C80421NEAR
-
16
POST SEND 8042 COMMAND ROUTINE
READ CMOS LOCATION ROUTINE
~PARITY
DIIN!'AR
D21NEAR
EXTRN
C2A.NEAR
EXTRN
OOS.NEAR
EXTRN
EXTRN
PRT-SEG I NEAR
EXTRN
EXTRN
P_M!'GINEAR
I NT
12 H _____________
I..."
-
CMOS READ I NEAR
~=~-~~~~~~R
2.
21
2.
23
2.
2.
2.
CHECK I" MESSAGE
"PARITY CHECK 2" MESSAGE
"11 11 1" UNKNOWN ADDRESS MESSAGE
L.OAD (OS) WITH OATA SEGMENT SELECTOR
POST WAIT 8042 RESPONSE ROUTINE
DISPLAY CHARACTER ROUTINE
DISPLAY FIVE CHARACTER ADDRESS ROUTINE
DISPLAY MESSAGE STRING ROUTINE
wM _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ - - - - - - - - - - -
MEMORY SIZE DETERMINE
THIS R'OUTINE RETURNS THE AMOUNT OF MEMORY IN THE SYSTEM AS
OETERMINED BY THE POST ROUTINES.
(UP TO 640K)
NOTE THAT THE SYSTEM MAY NOT BE ABLE TO USE I/O MEMORY UNLESS
THERE I S A FULL COMPLEMENT OF e I 2K BYTES ON THE PLANAR.
INPUT
NO REGISTERS
THE .MEMORY SIZE VARIABLE IS SET DURING POWER ON DIAGNOSTICS
ACCORDING T-O: THE FOLLOWING ASSUMPTIONS,
21
2.
2.
3.
31
32
I. CONFIGURATION RECORD IN NON-VOLATILE MEMORY EQUALS THE ACTUAL
MEMORY SIZE INSTALLED.
33
3.
3.
3.
...••,
Z. ALL INSTALLED MEMORY IS FUNCTIONAL.
IF THE MEMORY TEST DURING
POST INDICATES LESS, THEN THIS VALUE BECOMES THE DEFAULT.
IF' NON-VOLATILE MEMORY IS NOT VALID (NOT INITIALIZED OR BATTERY
FAILURE) THEN ACTUAL MEMORY DETERMINED BECOMES THE DEFAULT.
37
3•
3. ALL MEMORY FROM 0 TO 640K MUST BE CONTI GUOUS •
'2
.3
••
.,••••
OUTPUT
(AX) := NUMBER OF CONTIGUOUS IK BLOCKS OF MEMORY
1- - ------------ -- -- - ---- - - - - - --- ------- - ----- - - - ------ -- - - ----- - - - - ----- - ---- - -ASSUME CStCODE,DSIDATA
0000
0000
0001
0002
0005
0008
MEMORY SIZE DET I
PROC FAR
- STIPUSH
OS
CALL
DDS
54
FB
IE
E8 0000 E
AI 0013 R
IF
0009 CF
55
OOOA
MEMQAY_SI IE_DET_I
48
49
50
51
52
53
.••,
••
5.
'2
.3
••••
••.,
,.••
",.
.
72
73
,.
,.,."
76
.••••,
.3
••••
••
••
.,••
.
94
95
-::N!)!=I
BIT 3 = NOT USED
BIT 2 = NOT USED
BIT I = MATH COPROCESSOR
BIT 0 II I (IPL DISKETTE INSTALLED)
NO OTHER REG I STERS AFFECTED
I -- - ----------------- - - -:- --- -------- - - - --- ------- - - - --- ---- - ----------- ---------
81
93
~~,OMEMORY_SIZE
IRET
-- INT
II H ----------------------------------------------------------------EQUIPMENT DETERMINATION
THIS ROUTINE ATTEMPTS TO DETERMINE WHAT OPTIONAL
DEVICES ARE ATTACHED TO THE SYSTEM •
INPUT
NO REGISTERS
THE oEQUIP FLAG VARIABLE IS SET DURING THE POWER ON
DIAGNOSTICS USING THE FOLLOWING HARDWARE ASSUMPTIONS,
PORT 03FA = INTERRUPT 10 REGISTER OF 82eo (PRIMARY)
02FA • INTERRUPT ID REGISTER OF 82eo (SECONDARY)
BITS 1-3 ARE ALWAYS 0
PORT 0378 := OUTPUT PORT OF PRINTER (PRIMARY)
0278 • OUTPUT PORT OF PRINTER (SECONDARY)
03BC := OUTPUT PORT OF PR INTER (MONOCHROME-PR INTER)
OUTPUT
(AX) IS SET, BIT SIGNIFICANT, TO INDICATE ATTACHED I/O
BIT 15.14 II NUMBER OF PRINTERS ATTACHED
BIT 13 = INTERNAL MODEM INSTALLED
BIT 12 NOT USED
BIT 11,10.9 = NUMBER OF RS232 CARDS ATTACHED
BIT 8 II NOT USED
BIT 7.6 II NUMBER OF DISKETTE DRIVES
00=1. 01=2 ONLY IF BIT 0 = I
BIT e,4 = INITIAL VIDEO MODE
00 - UNUSED
01 - 40X2e BW US I NG COLOR CARD
10 - 80X2e BW US I NG COLOR CARD
II - 80X25 BW USING BW CARD
.,••
'2
=~~
I NTERRUPTS BACK ON
SAVE SEGMENT
ESTABLISH ACDRESSING
GET VALUE
RECOVER SEGMENT
RETURN TO CALLER
EQUIPMENT I
OOOA
OOOA FB
oooe
IE
96
91
98
Dooe E8 0000 E
OOOF AI 0010 R
0012 IF
99
100
0013 CF
0014
5-162 BIOS
sTI
PUSH
CALL
"OV
pap
IRET
EQU I PMENT_I
PROC
FAR
as
oos
~~,.EQUIP_FLAG
ENDP
I
I
I
I
I
I
I
ENTRY PO I NT FOR ORG OF84DH
I NTERRUPTS BACK ON
SAVE SEGMENT REG I STER
ESTABLISH ADDRESSING
GET THE CURRENT SETT I NGS
RECOVER SEGMENT
RETURN TO CALLER
V.,.slon 2.00
,.,
1-2
0.-21-86
PAGE
1-- HARCWARE INT 02 H -- t NMI L.EVEL. ) ---------------------------------------I NON-MASKABL.E I NTERRUPT ROUT I NE (REAL. MaCE)
I
THIS ROUTINE WIL.L. PRINT A "PARITY CHECK 1 OR 2" MESSAGE AND ATTEMPT
TO FINO THE STORAGE L.OCATION IN BASE 6.0K CONTAINING THE BAD PARITY.
I
I
IF FOUND, THE SEGMENT ADDRESS WIL.L. BE PRINTED.
IF NO PARITY ERROR
I
CAN BE FOUND (INTERMITTENT READ PROBL.EM)
11111 WIL.L. BE DISPLAYED
I
WHERE THE ADDRESS WOULD NORMALL. Y GO.
I.'
I.'
I.,
I ••
I ••
I.T
I.e
I.'
".
'"
"2
I
I
PARITY CHECK' • PL.ANAR BOARD MEMORY FAILURE.
PARITY CHECK 2 • OFF' PL.ANAR SOARC MEMORY FAIL.URE.
I
I
1---------------- ----------- ------ -------- ---- --------------- ------- ----- --- ----
II.
114
0014
11&
0014 ISO
NMI
INT , PROC
-PUSH
NEAR
AX
I SAVE ORIGINAL CONTENTS OF (AX)
II.
".
121
122
0018 eo OF
0010 Ee 0000 E
123
0020 158
124
".
0021 CF
I ••
121
128
0022
0022 150
129
130
131
132
133
134
1315
136
0023
00215
00Z8
002A
002C
0030
0032
00315
I3T
".
'"
aD SF
EIS 0000 E
eo
EIS
EIS
84
AD
CD
AD
0000 E
0000 E
00
0049 R
10
1-----
140
141
142
0031 lSa
143
0030 14 05
AL.,PORT S
READ STATUS PORT
PAR I TY CHECK OR 1/0 CHECK 1
GO TO ERROR HALTS I F HARDWARE ERROR
MOV
CAL.L
POP
IRET
AL., CMOS SHUT DOWN
CMOS READ
AX -
ELSE 11 - LEAVE NM I ON
TOGGLE NM I US I NG COMMON REAC ROUT I NE
RESTORE ORIGINAL CONTENTS OF (AX)
EX I T NM I HANDLER BACK TO PROGRAM
PUSH
MOV
CAL.L.
MOV
CALL
CALL
MOV
MOV
INT
AX
AL, CMOS SHUT DOWN+NM I
CMOS READ
-
IN
TEST
JNZ
liT DOllS E4 61
IllS 0011 AS CO
11900191501
eo
HARDWARE ERROR
SAVE INITIAL CHECK MASK IN (AL.I
MASK TRAP (NMI) INTERRUPTS OFF
OPEN ST ANDSY LATCH BEFORE POWER DOWN
I SABLE THE KEYBOARD
SEND COMMAND TO ADAPTER
ADDRESS DATA SEGMENT
INITIALIZE AND SET MODE FOR VIDEO
GET CURRENT MODE
CALL VIDEO_IO TO CL.EAR SCREEN
o
~~O~!S_KSD
DOS
AH,O
~~H·CRT-MODE
DISPLAY "PARITY CHECK 1" ERROR MESSAGES
POP
MOV
TEST
JZ
0038 BE 0000 E
003B AIS
~~i:~RITY-ERR
AX
SI,OFFSET 01
RECOVER INITIAL. CHECK STATUS
PLANAR ERROR, ADDRESS "PARITY CHECK I"
CHECK FOR PLANAR ERROR
SKIP IF NOT
~~(~RITY-CHECK
1415
146
'"
COSF 150
0040 Ee 0000 E
141
0043 158
PUSH
CALL
POP
AX
P MSG
AX
SAVE STATUS
DISPLAY "PARITY CHECK 1" MESSAGE
AND RECOVER STATUS
148
149
I ISO
115\
1152
0044
00"'4 BE 0000 E
0041 AIS 40
0049 14 03
0048 Ee 0000 E
MOV
TEST
JZ
CALL
51 ,OFFSET 02
~~i I~_CHECK
P _M!'G
ADDRESS OF "PARITY CHECK 2" MESSAGE
I/O PARITY CHECK 1
SK I P I F CORRECT ERROR 0 I SPLAYED
DISPL.AY "PARITY CHECK 2" ERROR
...
1-----
I ••
".
11S6
1157
004E
004E E4 61
TEST FOR HOT NMI ON PLANAR PARITY LINE
1158
OOISO OC OC
0052 E6 61
IN
OR
OUT
I
15'
160
161
00154 24 F3
00156 E6 61
AND
I TO CLEAR THE PEND I NG CHECK
OUT
163
164
0058 FC
0059 28 D2
I.'
1615
00158 28 Fe.
166
161
168
0050 E4 61
D05F AIS co
0061 15 19
eLO
sue
sue
IN
TEST
JNZ
I ••
1-----
IT.
I TI
112
173
IT4
0063 8e IE 0013 R
0061
0061 8E CA.
115
116
0069 8' 8000
006t Fsl AD
117
178
006E E4 61
0010 A8 CO
119
00T2 15 10
181
182
183
184
185
I e&
18T
188
0014
0011
DaTA.
OOTC
OOTC
OOTF
0082
0083
190
191
192
193
19.
195
196
19T
198
199
008.
008.
0087
0089
008C
008E
0091
0093
0096
0097
201
0098
NMI
203
2 ••
0098
COOE
Ie.
Ie.
•••
•••
80 C6
10
0000
28
0000
53
0000
29
0000
BX ,_MEMORY _S I ZE
GET BASE MEMORY SIZE WORD
MOV
MOV
REP
IN
TEST
JNZ
OS,OX
CX,.OOOH-2
LCOSW
AL,PORT B
PO I NT TO 6+K SEGMENT
SET WCRD COUNT FOR 6. KB SCAN
READ 6. KB OF MEMORY
READ PARITY CHECK LATCHES
CHECK FOR ANY PARITY ERROR PENDING
GO PR I NT SEGMENT ADDRESS 1F ERROR
ADO
DH,OIOH
BX,160-.
NMI_.
PO I NT TO NEXT 6.K BLOCK
DECREMENT COUNT OF 102. BYTE SEGMENTS
LOOP TILL ALL 6.K SEGMENTS DONE
S I, OFFSET 02A
PRINT ROW OF 11111 IF PARITY
CHECK COULD NOT 8E RE-CREATED
MOV
CALL
eLI
HLT
F.
E8
BO
E8
BO
E8
BO
E8
FA
F.
MOV
JA
BE 0000 E
E8 0000 E
FA
E
CALL
MOV
CALL
MOV
CALL
MOV
CALL
eLI
HLT
E
E
E
~~i::RITY-ERR
SET 0 I RECT I ON FI..AG TO 1NCREMENT
POINT (OX) AT START OF REAL MEMORY
SET (SI) TO START OF (OS,)
READ CURRENT PARITY CHECK LATCH
CHECK FOR HOT NM I SOURCE
SKIP IF ERROR NOT RESET (DISPLAY 1111
SEE IF LOCATION THAT CAUSED PAR TY CHECK CAN BE FOUND IN BASE MEMORY
sue
83 EB 40
TT EB
DX,DX
SI,SI
AL,PORT B
TOGGLE PAR I TY CHECK ENABLES
~~i::RITY_ERR
P _MSG
HALT SYSTEM
PRT SEG
AL.,TI·
PRT HEX
AL., TS'
PRT HEX
AL.,T) •
PRT_HEX
PR I NT SEGMENT VALUE I IN DX)
PRINT (51
I HALT SYSTEM
INT_' ENDP
ENOS
END
BIOS
5-163
IBM Peraonal Compute,. MACRO Asaemble,.
V.,.slon 2.00
BIOSI ---- 06/10/85
INTERRUPT ISH BIOS ROUTINES
PAGE 118,121
TITLE 810S1 ---- 06/10/85
INTERRUPT ISH BIOS ROUTINES
.286C
.LIST
CODE
SEGMENT BYTE PUBL I C
I
2
••
5
•
a
•
I-I
0.-21-86
0000
T
PUBLIC
PUBLIC
PUBL I C
10
II
12
CASSETTE 10 I
GATE A20- SHUT9
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
"
15
I<
I.
READ CMOS LOCAT I ON ROUT I NE
WRITE CMOS LOCATION ROUTINE
SYSTEM/BIOS CONFIGURATION TABLE
LOAD (OS I WITH OAT A SEGMENT SELECTOR
80286 HARDWARE RESET ROUTINE
IT
IS
1--- INT 15 H -----------------------------------------------------------------I
INPUT - CASSETTE 110 FUNCTIONS
20
"
21
22
I
1
I
;
I
;
I
2'
24
25
2.
2T
(AHI = OOH
(AH)
OIH
(AHI :; 02H
(AHI :; 03H
RETURNS FOR THESE FUNCTIONS ALWAYS
I F CASSETTE PORT NOT PRESENT
=
(AH)
:; 86H, CY
=
II
-----INPUT
----------------------- ------ -------- - ----------------------------------::I
- UNUSED F'UNCT IONS
(AH) :; 004H THROUGH 7FH
RETURNS FOR THESE FUNCTIONS ALWAYS (AH) :; 86H, CY :; I)
(UNLESS INTERCEPTED BY SYSTEM HANDLERS I
NOTE. THE KEYBOARD INTERRUPT HANDLER INTERRUPTS WITH AH:;4FH
20
2.
.,'0
.2
------ ---- - - -- - - - - -------- - - --- ------- - - - - - - - -- ---- ---- - - --- -- - - ----- - ------- I
••••
••'T
••'0
••••
EXTENSIONS
(AHI
:; 80H
DEVICE OPEN
(BX) =: DEVICE 10
(CXI
PROCESS 10
.0
(AHI
:; 81H
DEVICE CLOSE
(BX) = DEVICE 10
(CXI
PROCESS 10
•2
(AH)
=
PROGRAM TERMINATION
(BX)
DEVICE 10
(AH)
= 83H
.5
=
..
=
••••
82H
=
EVENT WAIT
(AL) :; OOH SET INTERVAL
(ES:eXI POINTER TO A BYTE IN CALLERS MEMORY
THAT WILL HAVE THE HIGH ORDER BIT SET
AS SOON AS POSSIBLE AFTER THE INTERVAL
EXPIRES.
(CX, OX I NUMBER OF MICROSECONDS TO ELAPSE BEFORE
POSTING.
!~L)
.. ('I!H CANCEL
4T
.0
••
50
51
52
5'5.
55
5.
RETURNS: CARRY IF AL NOT = OOH OR OIH
OR IF' FUNCTION AL=O ALREADY BUSY
5T
58
.,.05'
(AH) = 804H
.2
••••
••••
.T
••
,JOYST I CK SUPPORT
(OX)
OOH - READ THE
RETURNS AL =
(OX) = OIH - READ THE
RETURNS AX
BX =
CX :;
OX =
=
.0
7-.'
CURRENT SWITCH SETTINGS
SWITCH SETTINGS (BITS
RESISTIVE INPUTS
A(x) VALUE
A(y) VALUE
B(x) VALUE
B(y) VALUE
(AH)
:; 8SH
SYSTEM REQUEST KEY PRESSED
(AL) = OOH MAKE OF' KEY
(ALI
OIH BREAK OF KEY
(AH)
=
86H
WAIT
(CX. ox I NUMBER OF MICROSECONDS TO ELAPSE BEFORE
RETURN TO CALLER
T.
(AH)
=
87H
T'
MOVE BLOCK
(CX)
NUMBER OF WORDS TO MOVE
(ESISII
POINTER TO DESCRIPTOR TABLE
(AHI
:II
88H
EXTENDED MEMORY SIZE DETERM I NE
(AH)
= 89H
(AH)
:II
90H
(AH)
=
91H
=
TO
TI
T2
T'
14
T5
11
TO
00
01
02
A.A.
A.
••
••
.0
.,••'2
••••
••.T'5
••••
aT
100
101
102
10'
10.
10.
10.
lOT
10.
10.
110
III
5-164
PROCESSOR TO V I RTUAL MODE
DEV I CE BUSY LOOP
(AL)
SEE TYPE CODE
I NTERRUPT COMPLETE FLAG SET
(AL)
TYPE CODE
OOH -> 7FH
SERIALLY REUSABLE DEVICES
OPERATING SYSTEM MUST SERIALIZE ACCESS
80H -> BFH
REENTRANT DEV ICES; ES I BX I S USED TO
DISTINGUISH DIFFERENT CALLS (MULTIPLE I/O
CALLS ARE ALLOWED SIMULTANEOUSLY)
COH -> FFH
WAIT ONLY CALLS -THERE IS NO
COMPLEMENTARY 'POST' FOR THESE WAITS •
TIMES ARE
THESE ARE TIMEOUT ONLY.
FUNCT I ON NUMBER DEPENDENT.
TYPE
DESCRIPTION
OOH = DISK
01H = DISKETTE
02H = KEYBOARD
80H = NETWORK
ESIBX --> NCB
FOH :; DISKETTE MOTOR START
FEH :; PR I NTER
BIOSl
TIMEOUT
YES
YES
NO
NO
YES
YES
1-2
04-21-86
PAGE
".
'"
".
".
'"
".
"2
(AH)
= COH
"8
ow
120
121
122
12.
12'
12.
12.
12T
128
12'
110
,.,
"'
'"
RETURN CONFIGURATION PAR ...METERS POINTER
RETURNS
("'H) II OOH ",No CY"" 0 (IF PRESENT ELSE 86 ... ND CY"" 1)
(ESIBX) = P ...R...METER T ...BLE ... DDRESS POINTER
WHERE,
LENGTH OF FOLLOW I NG T ...BLE
SYSTEM MODEL BYTE
SYSTEM MODEL TYPE BYTE
BIOS REVISION LEVEL
10000000 = OM'" CH...NNEL 3 USE BY BIOS
01000000
C... SC ... DED INTERRUPT LEVEL 2
00100000
RE ... L TIME CLOCK AV ... ILABLE
00010000 II KEYBO"'RD SC",N CODE HOOK 1 AH
RESERVED
RESERVED
RESERVED
RESERVED
Da
DB
Da
DB
=
=
DB
DB
DB
DB
I
'.2
I -- --- ----------- - --------------- -- --- -- ------------ - -------- - - -----------------
ASSUME
CS , CODE
I.,
".
131
'.8
'""0
'"
"2
'"'"'"
".
"T
"8
'"..0
.'"......,
. .2
...
.. T
. .8
,.,
,.0
,.2
I ••
I.,
I.,
I ••
I.T
I ••
I ••
ITO
I TI
IT2
IT.
114
IT.
IT.
ITT
IT.
IT.
'.0
,.,
,.2
I.,
I.,
I.,
I ••
I.T
I ••
I ••
. .0
.....,
........,
...
0000
0000
0001
0004
0006
0009
FB
eo Fe 80
12 4C
80 Fe co
14 4F
OOOB aD EC 80
ODOE 14 48
0010
0012
00'4
0016
0018
OOIA
ODIC
ODIE
0020
FE
14
FE
14
FE
14
FE
15
E9
CC
44
CC
40
CC
47
CC
03
0008 R
FE
14
FE
14
CC
0023
0023
0025
0021
0029
C"'SSETTE 10 1
!TIeMP
"B
eMP
"E
SUB
"Z
DEC
"Z
DEC
"Z
DEC
"Z
DEC
"NZ
"MP
NOT_JOYSTICK,
DEC
PROt
FAR
1 DEV I CE CLOSE
I W",IT
I WAIT
"MP
AH
SYS REQ
AH el A
AHel B
BLi5CKMDVE
0032 E9 0175 R
C1_... ,
"MP
W... IT
0035 FE CC
CI_BI
DEC
AH
"NZ
el e
ExT_MEMORY
31
"Z
CC
01
DEC
"Z
0028 FE CC
DEC
0020 15 06
002F E9 0106 R
"NZ
0031 75 03
0039 E9 03FC R
ooac
FE CC
003E 15 03
"MP
CI_CI
"NZ
0040 E9 0 .... 08 R
"MP
00<43 80 EC 01
0046 15 03
0048 E9 0491 R
C1_DI
0048 FE CC
0040 15 03
OO ...F E9 0495 R
C1_EI
0052 84 86
SUB
"NZ
"MP
DEC
"NZ
"MP
el I
0054 F9
0055
DEC
MDV
STe
EN ...BLE INTERRUPTS
CHECK FOR R... NGE
RETURN IF OO-lFH
CHECK FOR CONFIGUR ... TION P... R",METERS
"'H,oaOH
el
"'H.OCOH
CONF PARMS
AH,O!OH
DEV OPEN
AH DEV CLOSE
AH PROG_TERM
AH
EVENT_W... IT
AH
NOT JOYST I CK
JOY:STlCK
AH
el 0
SET_VMODE
BASE ON 0
DEVICE OPEN
I PROGR ...M TERMINATION
I EVENT W... IT
I
JOYSTICK BIOS
I
SYSTEM REQUEST KEY
I MOVE BLOCK
I GO GET THE EXTENDED MEMORY
CHECK FOR FUNCT I ON 89H
SWAP TO V I RTUAL MODE
"'H,l
el E
DEVICE_BUSY
CHECK FOR FUNCTION 90H
GO IF NOT
AH
el
I NT_COMPLETE
CHECK FOR FUNCT I ON 9 1H
GO IF NOT
"'H,86H
SET BAD COMMAND
SET CARRY FLAG ON
C1_FI
0055 CA 0002
RET
0058
DEV_OPEN,
0058
DEV_CLOSEI
0058
PROG_TERMI
0058
SYS_REQI
"MP
CASSETTE_IO_I
I FAR RETURN EXIT FROM ROUTINES
I NULL HANDLERS
.. 2
0058 EB FB
005,\
.. T
005A
DOS" DE
0058 07
200
201
202
20.
20'
20'
20.
20T
20.
20'
210
2"
212
21.
21'
21'
21.
21 T
21.
219
220
221
222
22.
22'
22.
DOSt SS 0000 E
005F' 32 E4
0061 EB F2
0063
0063
00&3 IE
0064 E6 0000 E
0061 OA CO
0069 74 08
006B F"E C8
0060 74 45
006F IF
0010 F'9
OOTI EB E2
0073
0073 FA
0074 F6 06 OOAO R 01
0079 14 05
DOTS
OOlC
DOTD
DOTE
FB
IF
F9
EB 05
el F
ENf5P
CONF _P"'RMS
PUSH
POP
MDV
xaR
"MP
CONF_PARMS
PROC
NE...R
es
ES
~~: ~~FSET CONF_ TBL
EVENT_W",IT
...SSUME
PUSH
C... LL
OR
PROC
NE",R
OS I D"'T ...
OS
ODS
...L .... L
EVENT _W'" I T_2
AL
EVENT _W ... I T_3
OS
"Z
DEC
"Z
POP
STe
"MP
EVENT_W ... IT 21
eLT
TEST
"Z
ST.
POP
STe
"MP
el F
ENf5P
C1_F
ORTC W... IT FL"'G,01
EVENT_w"'IT_1
I RETURN
GET CODE SEGMENT
PLACE I N SELECTOR PO INTER
GET OFFSET OF PARAMETER TABLE
CLEAR AH AND SET CARRY OFF
EX I T THROUGH COMMON RETURN
I SAVE
GO IF ZERO
CHECK IF 1
RESTORE DATA SEGMENT
SET CARRY
EXIT
NO I NTERRUPTS ALLOWED
CHECK FOR FUNCT I ON ACT I VE
I ENABLE INTERRUPTS
OS
CI_F
SET ERROR
RETURN
BIOSl
5-165
,-.
04-21-86
EVENT_WA:~_II
226
22T
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
241
248
0010
0010
0012
0014
0086
0011
OOIC
0090
0094
0091
0090
009F'
00A2
00A4
00A6
OOAT
OOA9
00A8
OOAE
OOAF
OOSO
OOSI
00B2
252
253
254
255
0084
0084 FA
00B5 F6 06 OOAO R 02
008A 74 05
251
258
259
260
OOBC
OOBD
OOBE
008F
FB
IF
F9
ES 94
262
263
264
265
267
268
269
210
211
2T2
273
274
OOCI
OOCI
00C2
00C5
00C8
OOCA
OOCC
OOCF'
0000
0005
0006
0001
0008
50
S8
E8
24
86
E8
58
C6
F8
IF
F8
E9
216
0008
.....•••,
•••
..,
266
'7'
.77
....8..8...
...88••••••,
E4
EB
24
E6
8C
19
19
19
C6
BO
E8
24
OC
50
8A
BO
E8
58
IF
FS
F8
EB
AI
00
F'E
AI
06 009A
IE 0098
OE 009E
16 009C
06 OOAO
08
0000 E
TF'
40
JMf'
ANO
OUT
R
MOV
MOV
"OV
MOV
MOV
MOV
R
R
R
R 01
CALL
ANO
OR
PUSH
EO
08
0000 E
MOV
MOV
CALL
AI
06 OOAO R 00
AH.AL
AL, CMOS REG B
CMOS WRTTE -
POP
AX
OS
-
SET ON FUNCT I ON ACT I VE SW ITCH
ENABLE PIE
READ CMOS LOCAT I ON
CLEAR SET
ENABLE PIE
SAVE AH
PLACE DATA INTO OATA REGISTER
AODRESS ALARM REGI STER
I PLACE OAT A IN AH I NTO ALARM REG I STER
I RESTORE AH
I
I
I
I
I
I
ENABLE INTERRUPTS
CLEAR CARRY
CANCEL
EVENT WAIT 31
CLT
TEST
JZ
ORTC WAIT FLAG,02H
EVENT_'AIT_4
STI
STC
MOV
CALL
AX
~~or~~~5-REG_B
XCHG
CALL
AL.OIJFH
AH,AL
CMOS WRITE
POP
"OV
ORTC_.A I T_FLAG. 0
POP
OS
ANO
AX
-
CLC
0055 R
JMP
I 0 I SABLE INTERRUPTS
~WA I T" I N PROGRESS
I SKIP TO CANCEL CURRENT ~EVENT_'AIT"
I CHECK FOR
I ENABLE INTERRUPTS
I CLEAR STACK
I AND SET CARRY FLAG FOR ERROR REQUEST
I EXIT
POP
JMP
CI_F
I SAVE (WITH INTERRUPTS DISABLED)
I TURN OFF PIE
I GET ALARM REG I STER
I CLEAR PIE
I PLACE INTO WRITE REGISTER
I WRITE BACK TO ALARM REGISTER
I RESTORE AH
I SET FUNCT I ON ACT I VE FLAG OFF
I ENABLE INTERRUPTS
I RESTORE DATA SEGMENT
I SET CARRY OFF
I RETURN
EVENT WAIT
ENDP
-- JOY STICK -------------------------------------------------THIS ROUTINE Will READ THE .JOYSTICK PORT
r
INPUT
(OX) =0 READ THE CURRENT SWITCHES
RETURNS (AL) .. SWITCH SETTINGS !N BITS 1-4
(DX) .. I
'87
READ THE RESISTIVE INPUTS
RETURNS IAX) .. AIII) VALUE
(SX) .. Alyl VALUE
(CX) .. B(II) VALUE
(DX)=B(y) VALUE
CY FLAG ON I F NO ADAPTER CARD OR I NVAl I D CAll
.JOY _ST I C~T I
303
304
0008
OODa
OODC
OODE
OOE I
00E3
00E5
OOEl
00E9
OOEC
OOEC
OOED
306
301
308
309
OOFO
OOFO EC
OOFI 24 Fa
00F3 EB FT
311
312
313
314
315
316
311
318
319
320
321
322
323
324
325
326
321
00F5
00F5
OOFT
OOFA
OOFB
OOFD
0100
0101
0103
0106
0101
0109
OIOC
alOE
OlaF'
0110
0111
31.
AX
STI
'8'
•••
:~+g-E~~~oi
I SET UP TRANSFER TABLE
X
ORTC-'AIT FLAG,OI
AL, chios RrG S
CMOS REAe AL.oTFH
AL.040H
POP
ST'
EVENT WAIT 41
PU!'H
080S
0000 E
8F'
EO
0000 E
'8'
302
:~;~=-~t:g-;~iG I ES
JMP
1-----
'78
.79
301
I ENSURE I NTERRUPT UNMASKED
CLC
•••,
.8'
293
294
295
296
291
298
299
300
AL,INTBOI
1+'
AL,OF'EH
INTBOI,AL
FB
88
8A
OA
J.4
FE
14
E9
C2
020 I
CO
08
C8
DC
0052 R
MOV
MOV
FB
E9 0055 R
STI
B3
E8
51
B3
E8
51
B3
E8
51
B3
E8
8B
59
5B
58
EB
OR
JZ
OEC
JZ
JMP
PROC
NEAR
;e
I
Y- 2
.JOY 3
I GO TO COMMON RETURN
'N
Al,DX
AL,OFOH
.JOY_I
01
0113 R
MOV
Bl, I
TEST CORO
02
0113 R
MOV
04
0113 R
08
0113 R
01
CAll
PUSH
CAll
PUSH
MOV
CAll
PUSH
MOV
CAll
MOV
POP
09
POP
POP
JMP
READ SW ITCHES
READ RESISTIVE INPUTS
GO TO ERROR RETURN
C, -
JMP
ANO
JMP
I NTERRUPTS BACK ON
GET SUB FUNCT I ON CODE
ADDRESS OF PORT
AX,DX
OX,20IH
Al,Al
CX
-
; STRIP UNWANTED BITS OFF
I FINISHED
SAVE A(X)
VALUE
I SAVE A(Y)
VALUE
I SAVE B(X)
VALUE
I
Bl,2
TEST CORD
CX
-
Bl,4
TEST CORD
CX
-
Bl,8
TEST CORD
DX,Ci'
cx
I
ex
1
I
AX
I
.JOY_I
I
SAVE B{Y)
GET B(X)
GET A(Y)
GET A(X)
FINISHED
VALUE
VALUE
VALUE
VALUE
- RETURN
•• 8
329 0113
330
0113 52
3310114FA
332 0115BOOO
333 0111 E6 43
334 0119 EB 00
335 OIIB E4 40
336 0110 EB 00
331 01 IF IA EO
338
0121 E4 40
339 0123 86 EO
5-166
BIost
TEST CORD
PUSH
CL'
"OV
OUT
JMP
IN
"MP
MOV
'N
XCHG
PROC
OX
NEAR
AL,a
TIMER+3,Al
SAVE
BLOCK INTERRUPTS WH I lE READ I NG
SET UP TO lATCH TI MER 0
1+2
Al, TIMER
I READ lOW BYTE OF T I MER 0
AH,AL
Al.TIMER
AH.AL
I READ HIGH BYTE OF TIMER 0
I REARRANGE TO HIGH,lOW
1+2
1-'
04-21-86
3 ••
0125 50
3"
3 ••
0126 B9 04FF
3.,
3.3
3'.
3'.
3'T
3 ••
3 ••
3 ••
3.,
3 ••
3 ••
3 ••
NOV
OUT
AX
CX,4FFH
DX,AL
J"P
$+'
IR
J"P
AL,DX
AL,BL
TEST CORD I
CX.OCX
SHORT TEST CORD 2
CX,CX
SHORT TEST_CORD_3
OUT
AL,O
TIMER+3,AL
PUSH
0129 EE
012A ES 00
Ol2e
TEST CORD I,
-
Olle Ee
0120 84 C3
Ol2F EO FB
0131 83 F9 00
TEST
LOOPNZ
0134 59
0135 7& 04
POP
COP
JNZ
sua
0137 28 C9
0139 Ea 28
013B
TEST CORD 21
M~V
3 ••
0138 BO 00
0130 E6 43
3 ••
013F Ee 00
3.T
3 ••
3 ••
3 ••
0141 E4 40
0143 8A EO
NOV
0145 Ea 00
AL.TIMER
AH,AL
J ...
0147 E4 40
IN
$+'
3.,
3 ••
3.,
3.3
3 ••
3 ••
3.T
3 ••
3.'
3T.
3T1
3T'
313
31.
31.
J"P
IN
0149 86 EO
XCHG
0148 3B ce
0140 13 08
COP
014F' 52
JAE
PUSH
0150 8A FFFF
NOV
01153 28 00
sua
0155 03 CAo
0157 !SA
ADO
POP
0158 ES 02
J"P
QHiA
SAVE
SET COUNT
F'IRE TIMER
READ VALUES
HAS PULSE ENDED?
1 ORIGINAL COUNT
SET 0 COUNT FOR RETURN
EXIT WITH COUNT. 0
1 SET UP TO LATCH TIMER 0
$+'
I READ LOW BYTE OF T I MER 0
AL,TIMER
AH,AL
READ HIGH BYTE OF TIMER 0
REARRANGE TO HIGH, LOW
CX,AX
TEST CORD 4
OX DX,-1
CHECK FOR COUNTER WRAP
GO IF NO
DX,AX
CX,OX
OX
SHORT TEST_CORo_5
I
AO,JUST FOR WRAP
TEST CORD 41
-
015A 28 C8
3T.
OHiC
Dlec 81 EI
3TT
0160 CI E9 04
slla
TEST CORD 51
ARe
SHl!
IF'FO
CX,AX
I AO,JUST
CX,IFFOH
CX,4
318
319
3 ••
3.,
0163
TEST CORD 31
sTI
0163 Fa
3 ••
0164 SA 0201
0161 51
3.3
0168 50
•••
•••
•••
.81
•••
•••
•••
'91
•••
•••
3"
•••
•••
"T
•••
•••,
•••
•••
•••
•••
•••
•••
'.T
•••
•••
."
4"
.,,
".
•••
'"•••
•••
•••
•••
•••
•••
•••
•••
•••
•••
•••
•••
•••
..
.,..,.
.,.
.,....
., T
.OV
PUSH
PUSH
0169 89 04FF'
.OV
OUC
-
P.P
0113 ISA
POP
POP
0174 C3
"ET
01115
TEST CORD
,JOY_!TICK
0115
0115
0175 IE
0176 E6
0119 FA
OIlA F'6
Ol1F 14
0181 FB
0182 IF
0183 F'9
0184 E9
WAIT
0000 E
.3T
•••
•••
•••
'"•••
•••
•••
•••
•••
TEST
JZ
ST1
POP
AI
00
FE
AI
IE
06
DE
16
06
009A
0098
009E
DOge
OOAO
R
R DOAD R
R
R
R 03
NEAR
os
1 SAVE
DOS
NO I NTERRUPTS ALLOWED
TEST FOR FUNCT I ON ACT I VE
:~i~:~A IT_FLAG,O 1
1 ENABLE INTERRUPTS PR I OR TO RETURN
os
IN
J"P
AND
AL, I NTBO 1
NOV
PUSH
NOV
CALL
OC 40
86 EO
E8 0000 E
58
FB
51
52
8T 01
SET ERROR
RETURN
I ENSURE I NTERRUPT UNMASKED
$+2
AL,OFEH
INTBOI,AL
:~;:=-~t:~,,;,~~~s~~
ORTC
:=fg-~~~~oiX
TRANSFER TABLE
~~~EO~A~~AIT" FUNCTION ACTIVE SWITCHES
~~or~~~~_REG_B
~~:~L~L:~~
AND
AL,olFH
AL,040H
AH,AL
CALL
~~OS_WR I TE
.AIT TILL RTC TIMEOUT POSTED
ST1
PUSH
PUSH
XCHG
Wll~E~L~~
--
%~TC:WAIT_FLAG,03
0"
XCHG
POP
BYTE
CLEAR SIT BIT
ENABLE PIE BIT
DATA TO WORK REGISTER
=~~f5R~E~ A~~ARM BYTE
(WITH ERROR TIMEOUT)
J ENABLE INTERRUPTS
CX
OX
OX.CX
SAVE CALLERS PARAMETERS
SWAP COUNT WORK REG I STERS
WAIT_21
F6 06 OOAO R 80
EI F9
15 05
e3 EA 01
13 F2
TEST
LOOPZ
JNZ
C6 06 OOAO R 00
5A
59
IF
Fe
E9 0055 R
NOV
POP
POP
POP
sua
JNC
CLC
J"P
•• T
•••
1 RETURN
CI_F
".V
1-----
0106
1 SET COUNT
ENOP
ENOP
J"P
OUT
NOV
NOV
NOV
DIAl B8 oeoa
01A" E8 0000 E
DIAD 24 IF'
OIBT
0lB8
OlB9
alBA
OIBC
OIBC
OICI
01(:3
0lC5
0lC8
OICA
OICA
OieF
0100
0101
0102
0103
AX
CX
OX
STC
0055 R
0181
E4
ES
24
E6
Be
CT
89
89
C6
50
PROC
PUSH
CALL
AL,DX
AL,OFH
TEST_CORD_6
CL1
06 DOAD R 01
06
"T
...
1R
TEST
LOOPNZ
0111 58
0172 59
OlAF
OIBI
a IB3
0lB6
, COUNT
TEST CORe 6,
016C Ee
0160 A8 OF'
016F' EO FB
0181
0189
0lS8
0180
OlaF
0193
0199
0190
DIAl
o IA6
I NTERRUPTS BACK ON
FLUSH OTHER INPUTS
OX,20tH
CX
AX
CX,4FFH
WAIT
:~T~_:A IT_FLAG, oaOH
WAIT-9
DX,IWAIT_2
CHECK FOR END OF WA I T - CLEAR CARRY
DECREMENT TIMEOUT DELAY TILL WAIT END
EXIT IF RTC TIMER WAIT ENDED FLAG SET
DECREMENT ERROR T I MEOL!T COUNTER
LOOP TILL COUNTERS TIMEOUT
;~TC_WA IT_FLAG, 0
1 SET FUNCTION INACTIVE
CX
1 RESTORE CALLERS PARAMETERS
os
1 CLEAR CARRY FL..AG
CI_F
ENOP
BIost
5-167
,-,
......5.•••,
04-21-86
PAGE
15 H -- ( FUNCTION 81 H - BLOCK MOVE) -------------------------------
INT
THIS BIOS FUNCTION PROVIDES A MEANS FOR A REAL MODE PROGRAM OR SYSTEM
TO TRANSFER A BLOCK OF STORAGE TO AND FROM STORAGE ABOVE THE 1 MEG
ADDRESS RANGE IN PROTECTED NODE SPACE BY SWITCHING TO PROTECTED MODE.
.••••••.,
...•••••••••
..,....•••.,
'53
'55
'5'
r
ENTRY I
(AM) '" 8Tt-! (FUNCTION CALL) - BLOCK MOVE •
(eX) '" WORD COUNT OF STORAGE BLOCK TO 8E MOVED.
NOTE I MAX COUNT", 8000H FOR 32K WORDS (65K BYTES)
ES:SI =. LOCATION OF A GOT TABLE BUILT BY ROUTINE USING THIS FUNCTION.
'58
'61
(ESISI) POINTS TO A DESCRIPTOR TABLE (GOT) BUILT BEFORE INTERRUPTING
TO TH I S FUNCT I ON.
THE DESCR I PTORS ARE USE TO PERFORM THE BLOCK
MOVE IN THE PROTECTED MODE.
THE SOURCE AND TARGET DESCR IPTORS
BUILT BY THE USER MUST HAVE A SEGMENT LENGTH = 2 • CX-I OR GREATER •
THE DATA ACCESS RIGHTS BYTE MUST BE SET TO CPLO-R/W (93H).
THE
24 BIT ADDRESS (BYTE HI t WORD LOW) MUST BE SET TO THE TARGET/SOURCE •
•• 5
'.8
'T'
.,.
NO I NTERRUPTS ARE ALLOWED OUR I NG TRANSFER.
MAY CAUSE LOST INTERRUPTS.
EXITI
=
(AH)
(AH)
(AH)
(AH)
.T3
.T.
.T.
'74
'71
.T
•
..•••,
•'8T'•
OOH
.. O)H
II" 02H
= 03H
LARGE BLOCK MOVES
IF SUCCESSFUL
IF MEMORY PARITY (PARITY ERROR REGISTERS ARE CLEARED)
IF ANY OTHER EXCEPTION INTERRUPT ERROR OCCURRED
IF GATE ADDRESS LINE 20 FAILED
ALL REGISTERS ARE RESTORED EXCEPT (AH).
I F SUCCESSFUL - CARRY FLAG = 0
IF ERROR ------ CARRY FLAG = )
DESCR IPT I ONI
'.3
•••
•••
I.
2.
•••
•••
•••
•••
•••
•••
•••
•••
3.
.....
•• T
• 81
S.
...
6.
7.
S.
9.
10.
I )•
12.
...
•• 3
13.
•• T
SAVE ENTRY REGISTERS AND SETUP FOR SHUTDOWN EXIT •
THE REQUIRED ENTRIES ARE BUILT IN THE GOT AT (ESISI) •
GATE ADDRESS LINE 20 ACTIVE. CLI AND SET SHUTDOWN CODES •
THE IDTR IS LOADED AND POINTS TO A ROM RESIDENT TABLE •
THE GDTR I S LOADED FROM THE OFFSET PO INTER (ES: S I ) •
THE PROCESSOR IS PUT INTO PROTECTED MODE •
LOAD (OS) AND (ES) WITH SELECTORS FOR THE SOURCE AND TARGET •
OS I S I (SOURCE) (ES 101) (TARGET) REP MOVSW I S EXECUTED •
CHECK MADE FOR PARITY ERRORS.
REAL MODE RESTORED WHEN SHUTDOWN 09H I S EXECUTED •
ERRORS ARE CHECKED FOR AND RETURN CODES ARE SET FOR (AH) •
ADDRESS LINE 20 GATE IS DISABLED.
RETURN WITH REGISTERS RESTORED AND STATUS RETURN CODE •
(FOR PC-AT COMPATIBILITY ZF=) IF SUCCESSFUL. ZF=O IF ERROR.)
THE FOLLOWING DIAGRAM DEPICTS THE ORGANIZATION OF A BLOCK MOVE GOT,
5 ••
5.'
5.2
GOT
50;;
(ESISI J
5 ••
I
5.5
500
5.T
-----------
'00
5 ••
DUMMY
•••
5.'
5' •
.,.
.,.
511
...
.,.
5"
5,.
514
SI.
SIT
...
52.
52'
'22
523
2' 0' THE FIRST DESCRIPTOR IS THE REQUIRED DUMMY.
(USER INITIALIZED TO
SOURCE
3,
TARGET
GOT
4.
BIOS
(CS)
5,
(55)
6.
GOT
•••
SI'
0\
__
GOT LOC
•••
'25
•••
0)
THE SECOND DESCRIPTOR POINTS TO THE GOT
TABLE AS A DATA SEGMENT.
(USER INITIALIZED TO 0 - MODIFIED BY BIOS)
THE TH I RO DESCR I PTOR PO I NTS TO THE SOURCE
TO BE MOVED. (FROM)
(USER INITIALIZED)
THE FOURTH DESCRIPTOR POINTS TO THE
DESTINATION SEGMENT. (TO)
(USER INITIALIZED)
THE FIFTH is A DESCRIPTOR THAT BIOS USES
TO CREATE THE PROTECTED MODE CODE SEGMENT.
(USER INITIALIZED TO 0 - MODIFIED BY BIOS)
THE SIXTH DESCRIPTOR IS USED BY BIOS TO
CREATE A PROTECTED MODE STACK SEGMENT.
(USER INITIALIZED TO 0 - MODIFIED BY BIOS)
(POINTS TO USERS STACK)
I
52T
.3.5"
SAMPLE
5 ••
...
...
......5'.
OF
SOURCE
SOURCE_TARGET_DEF
5 ..
532
SEG LIMIT
LO WORD
HI-BYTE
DATA ACC RIGHTS
RESEFf'vEO-
53.
535
OR
TARGET
DESCR I PTOR
STRUC
OW
OW
DB
DB
OW
?
?
?
93H
o
SEGMENT LIMIT (1-65536 BYTES)
24 B IT SEGMENT PHYS I CAL
ADDRESS (0 TO (16M-I))
ACCESS RIGHTS BYTE (CPLO-R/W)
RESERVED WORD (MUST BE ZERO)
537
53 •
I
1------------------------------------------------------------------------------I
1
•••
THE GLOBAL DESCRIPTOR TABLE (ACTUAL LOCATION POINTED TO BY ESISI J
••3
5"545
5411
0018 111????????????1
549
550
0020 1111????????71??
0028 111?????????????
551
5'2
553
0030
BLOCKMOVE GOT DEF
OQ
CGDT LaC
OQ
SOURCE
OQ
TARGET
OQ
BIOS_CS
DQ
TEMP SS
DQ
BLOCR'MOVE_GDT _DEF
•••
0106
BLOCKMOVE
555
556
0106 Fe
0107 60
551
0108 06
558
•••
•••
561
0109 IE
562
0 IDA E8 0000 E
546
0000 111?????????????
0008? 11? 11 11 11? 11 11?
541
~OlO
111?????????????
CCO
PUSHA
PUSH
PUSH
1-----
5-168
PROC
BIOSl
STRUC
1
1
1
1
1
1
FIRST DESCR I PTOR NOT ACCESS IBLE
LOCATION OF CALLING ROUTINE GOT
SOURCE OEseR I PTOR
TARGET DESCR I PTOR
B I OS CODE DESCR I PTOR
STACK DESCR I PTOR
ENDS
NEAR
ES
DS
SET DIRECTION FORWARD
SAVE GENERAL PURPOSE REGISTERS
SAVE USERS EXTRA SEGMENT
SAVE USERS OAT A SEGMENT
SAVE THE CALLING RDUTINE"S STACK
CALL
DDS
1 SET DS TO DATA AREA
IBM Personal Computar MACRO Aa."'lblsr
Version 2.00
BI051 ---- 06/10/85
INTERRUPT 15H BIOS ROUTINES
563
.6.
565
.66
.67
568
56 •
• 70
.71
"2
.73
574
57.
576
'77
0100 8C 16 0069 R
aIEl 89 26 0061 R
8C
8E
81.
CO
CI
03
80
CO
08
F04
EE 004
EO 004
C6
06 00
01 F6
OlFB
OIFE
0201
Cl
89
88
Cl
0404
0404
704
0404
08 FFFF
OA
OC
OE 0000
582
'.3
•••
58 •
• 86
•• 7
588
0206
020B
0210
02104
02' 8
C1
C1
C6
C6
C1
0404
0404
0404
0404
0404
20
22
204
25
26
•••
"0
'"
•• 2
•• 3
•••
•••
.97
•••
•••
"6
600
601
602
603
60.
605
606
607
608
60.
610
611
612
613
614
615
616
617
618
61'
620
621
622
623
624
625
626
627
628
62.
630
631
632
63.
6. .
63.
636
637
638
63.
6.0
641
642
643
6 ••
6.5
6.6
647
6.8
6.'
650
6.,
652
6.3
6 ••
65.
656
6.7
658
65.
660
661
662
66.
66.
665
666
667
668
66'
67.
671
672
673
674
67.
676
MAKE A 204 BIT ADDRESS OUT OF THE ESISI FOR THE GOT POINTER
ADD
ADe
MOV
MOV
"OV
FFFF
0000
OF
9B
0000
1-----
B04
E8
3C
104
-
(
(SP) REMAINS USER (SP)
)
GET THE CURRENT STACK SEGMENT
FORM HIGH BYTE OF 204 BIT ADDRESS
1 FORM HIGH BYTE - SHIFT RIGHT 04
1 STRIP HIGH NIBBLE FROM (AX)
I
I
SS IS NOW IN POSITION FOR A 204 BIT ADDRESS --> SETUP THE (SS) DESCRIPTOR
GATE ADDRESS BIT 20 ON
MOV
CALL
eMP
JZ
MOV
OUT
JMP
1-----
(DISABLE INTERRUPTS)
~~;.~N:~~E_BIT20
GET ENABLE MASK
ENABLE 1.20 AND CLEAR INTERRUPTS
WAS THE COMMAND ACCEPTED?
GO IF YES
AL,O-
eL.
AL,03H
MFG PORT ,AL
SHO~T SHUT9
I
SET THE ERROR FLAG I F NOT
I EARLY ERROR EX I T
SET SHUTDOWN RETURN ADDRESS AND DISABLE NMI
BL041
1 SET THE SHUTDOWN BYTE LOCAT I ON
1 TO SHUT DOWN 9 AND DISABLE NMI
MOV
CALL
1-----
CLEAR EXCEPTION ERROR FLAG
1-----
LOAD THE lOT AND GOT
sue
0204B 2A CO
02040 E6 80
OUT
0204F BD 02004 R
"OV
0252 2E:
+ 11000 I
02504 88 5E 00
0251
02504
02504 01
MAKE A 204 BIT ADDRESS OUT OF THE ISS)
"OV
023F BO 03
02041 E6 80
02043 E8 51
0253 OF
0254
IS,\.Blos CS.SEG LIMIT,MAX SEG LEN
SI .BIOS-CS.BASE La WORo,~SEGi LO
I LOW WORD OF (CS) II: 0
SI .BIOS-CS.BASE-HI-BYTE,CSEGO-HI
, HIGH BYTE OF (CS) = OFH
SI .BIOS-CS.oATA-AC'f RIGHTS,epeO CODE ACCESS
51 .BIOS:C5.DATA:RES!RVED,O
- I RESERVED
"OV
MOV
MOV
OF
030A R
00
06
02045
02045 B8 098F
02048 E8 0000 E
S'l'CGOT LOC.SEG LIMIT,MAX SEG LEN
S I • CGoT-LOC. BAsE La WORD, AX -, SET THE LOW WORD
5 I • CGOT:LOC. BASe::H I-BYTE, 0101
I SET THE HIGH BYTE
SI .CGoT_LOC.oATA_RE!'ERVED,O
I RESERVED
SHR
SHL
28 FFFF
2A
2C
20 93
POINT (OS) TO USERS CONTROL BLOCK
GET THE GOT OAT A SEGMENT
MOVE THE GOT SEGMENT PO I NTER TO (OS)
BUILD HIGH BYTE OF THE 204 BIT ADDRESS
USE ONLY HIGH NIBBLE SHIFT - RIGHT 04
STRIP HIGH NIBBLE FROM (AX)
ADO THE GOT OFFSET TO DEVELOP LOW WORD
Ao,JUST HIGH BYTE I F CARRY FROM LOW
I
MOV
1----0236
0238
023B
0230
I
I
I
1
"OV
1----0404
0404
104
0404
1
,
1
1
SET UP THE CODE SEGMENT oESCR I PTOR
"OV
MOV
MOV
MOV
MOV
0210 Be DO
021F 8A F04
0221 CO EE 004
02204 Cl EO 004
OSINOTHING
AX,ES
DS,AX
OH,AH
OH,04
AX,04
AX,SI
OH,O
u==_
SET THE GOT_LOC
"OV
1-----
Cl
89
88
C6
, SAVE USERS STACK SEGMENT
1 SAVE USERS STACK POINTER
,-----
1-----
0221
022C
022F
0232
OlD ROM SEG,SS
OIO:ROM:INIT ,SP
SET UP THE PROTECTED MODE DEFINITIONS
ASSUME
"OV
"OV
"OV
SHR
SHL
0lE5
01El
0lE9
OIEB
01EE
OIFI
OlF3
.78
57.
580
.BI
"OV
"OV
1=====
110002
0251
SEGOV
DB
LIDT
De
LABEL
"OV
LABEL
ORG
DB
ORG
LGDT
0251 OF
AL,AL
MFG_PORT,AL
I SET ERROR FLAG LOCAT I ON TO 0
~~,OFFSET ROM_IOT_LOC
1 LOAD THE
lOT
02EH
[BPl
REGISTER FROM THIS AREA
OOFH
BYTE
BX,.ORD PTR [BP]
BYTE
OFFSET CS I 11000 I
001H
OFFSET CSI110002
!~t~.CGOT_LOC
1 LOAD GLOBAL DESCRIPTOR TABLE REGISTER
DB
0258
0258 8B 504 08
0258
+ 110003
MOV
1100004
0258
0258 0 I
025B
;----025B 88 000 I
025E
0261
0262
02604
0266
OF 01 FO
EA
0266 R
0020
0266
0269
026B
026E
0210
0213
0215
0277
B8
8E
Ba
aE
Be
8E
2B
2B
LABEL
LABEL
ORG
DB
ORG
BYTE
~~;.:ORD PTR [SI1.CGDT_LOC
OFFSET CS I 110003
001H
OFFSET CSt 110004
SWITCH TO VIRTUAL MODE
MOV
LMSW
DB
DB
OW
OW
:~,
VIRTUAL_ENABLE
OOFH.OOIH,OFOH
OEAH
OFFSET VIRT
BIOS_CS
MACHINE STATUS WORD NEEDED TO
SWITCH TO VIRTUAL MODE
PURGE PRE-FETCH QUEUE WITH FAR ,JUMP
- TO OFFSET
- I N SEGMENT -PROTECTED MODE SELECTOR
VIRT:
1----0028
DO
0010
08
oOle
CO
F6
FF
0219 F3/ 1.5
IN PROTECTED MODE -
"OV
"OV
;~:!iMP _5S
SUB
AX,SOURCE
DS,AX
AX, TARGET
ES,AX
SI,SI
01,01
REP
MOVS.
"OV
"OV
MDV
"OV
sue
SETUP STACK SELECTOR AND SOURCEITARGET SELECTORS
USER'S SS+SP IS NOT A DESCRIPTOR
LOAD STACK SELECTOR
GET THE SOURCE ENTRY
LOAD SOURCE SELECTOR
GET THE TARGET ENTRY
LOAD TARGET SELECTOR
SET SOURCE INDEX REGISTER TO ZERO
SET TARGET I NoEX REG I STER TO ZERO
; MOVE THE BLOCK COUNT PASSED IN (CX)
BIOSl
5-169
• -T
04-21-86
.17
67.
67.
'.0
U.
1-----
•••
•••
•••
•••
.87
•••
•••
021F 74 12
•••
•••
•••
•••.,
•••
•••
028F 24 "3
...•••
•• 0
.
TOO
TO.
TO.
TO.
TO.
TO.
TO.
TOT
TO.
TO.
T.O
Til
T"
T'.
T"
T••
T16
T. T
T ••
0281 88 05
DiU 89 05
0285
0287
0289
0288
0280
aD
E6
E4
DC
E6
01
80
61
DC
61
1----02A3 84 DO
02A5 E8 03DA R
02A8 at 00
0286
02B6 88 OOOF
T,.
T••
T.O
i;~
T••
73.
T••
T••
02eD
0204
T••
T••
T••
D2eD R
0020
00
81
0000
02E2
02E4
02E6
D2E7
02E8
02CD R
0020
00
8T
0000
02EA
D2EC
OiEE
02EF
02CD R
0020
00
87
180
T••
T.,
T••
T••
T••
18.
T87
Ta.
T••
790
02F2 02CD R
02F4 0020
02F6 00
02F7 81
02F8 0000
5-170
TO OEF AUL T
GET THE ENDING STATUS RETURN CODE
f'OINT TO REGISTERS IN THE STACK
PLACE ERROR COOE INTO STACK AT (AH)
SET THE ZF & CY FLAGS WITH RETURN COO£
RESTORE THE GENERAL PURPOSE REG I ST£RS
TURN I NTERRUPTS ON
BLOCK MOVE EXCEPTION INTERRUPT HANDLER
MOV
OUT
JM.
FAR
•
RETURN WITH FLAGS SET - (AH). CODE
(CY=:IO,ZF=I). OK
(CY=I,ZF=O)= ERROR
02CD R
0020
00
87
0000
BIOSl
AL,02H
MFG PORT .AL
PRO~_SHUTDOWN
GET EXCEPT I ON ERROR CODE
SET EXCEPT I ON I NTERRUPT OCCURRED FLAG
CAUSE A EARLY SHUTDOWN
ROM lOT LOCATION
ROM_IDT_~~CI
D'
ROM_IDTI
02FO 0000
02FA
02FC
02FE
02FF
0300
AL.,CMOS_DATA
AL,MFG PORT
BP,SP [BP+15] ,AL
AH,AL
CLEAR (AH) TO ZERO AND (AL)
ENABLE NMI INTERRUPTS
RESTORE USER OATA SEGMENT
RESTORE USER EXTRA SEGMENT
OPEN CMOS STANDBY LATCH
,-----
1----02DA
D2De
02DE
02DF
02EO
n.
n.
AX, CMOS SHUT DOWN
g~OS_POft'T, AL -
ES
DONE4
08
08
02DA
Tn
.0..0.
e...
0209 00
T.O
n.
CHECK FOR ANY OTHER ERROR FIRST
WAS THERE AN ERROR?
REPORT FIRST ERROR IF YES
ELSE SET GATE 1..20 ERROR FLAG
PROC
RET
ENDP
0208 OF
T••
n.
n.
n.
n.
n.
01 SABLE MASK
GATE ADDRESS 20 LINE OFF
COMMAND ACCEPTED?
GO IF YES
RESTORE THE USERS REG I STERS AND SET RETURN CODES
POPA
1-----
0204 0100
0206 02DA R
T••
no
GET USER STACK SEGMENT
GET USER STACK PO INTER
EX_INTI
T.'
T5.
T"T••
AL.MFG PORT
AL.o DONEa
AL.03H
MFG_PORT , AL
511
74'
T50
T••
T.T
JZ
AL.OOONEa
IN
02CA CA 0002
D2CD
T.,
T,.
T..
~~t~I!~~LE_BIT20
MOV
MOV
DONE4
oaCD BO 02
D2CF E6 80
0201 E9 0000 E
T..
MOV
CALL
'N
02BF E4 80
02CA
~~:::g:~g~:~~~T
MOV
OUT
02el 88 Ee
02ta 88 46 OF'
02C. Fa
T.T
DONE31
028' E6 10
02B8 IF
02C6 3A EO
02ce 61
:~
I SET OS TO DATA AREA
GATE ADDRESS BIT 20 OFF
JNZ
MOV
OUT
D2BC 07
iii:a~ E... ii
TOT
DSIDATA
AX. DATA
OS.AX
eM.
1-----
T••
75.
75.
75.
GO RESET PROCESSOR AND SHUTDOWN
RESTORE USERS STACK
ASSUME
MOV
MOV
'N
E4 80
ae 00
1& 04
aD 03
E6 80
T••
740
74.
74'
74.
74.
745
T••
74T
I
, =======:1====;;=:1=====.=.=
RETURN FROM SHUTDOWN
1==·=====·=============
eM.
02AA 74 OAo
T.5
T••
T'T
T"
T'.
T"
CAUSE A SHUTDOWN
JM•
---- R
DB
16 0069 R
26 0067 R
T"
T'O
TOGGLE PAR I TY CHECK LATCHES
TO CLEAR THE PEND I NG ERROR
AND ENABLE CHECK I NG
SHun I
88
8E
8E
88
02Ae
02AE
0280
0282
02B4
T19
OR
DONE I I
,------
0296
0299
0298
029F
FETCH CURRENT SOURCE OAT A
WRITE IT BACK
SET PAR I TY CHECK ERROR II 0 I
'N
1-----
0296
CLEAR PARITY BEFORE SHUTDOWN
MOV
MOV
MOV
OUT
OUT
AND
OUT
0291 E6 61
0293
0293 E9 0000 E
GET THE PARITY LATCHES
STRIP UNWANTED BITS
GO IF NO PARITY ERROR
AND
JZ
1-----
684
CHECK FOR MEMORY PAR I TY BEFORE SHUTDOWN
,N
0278 E4 61
0270 24 CO
ROM lOT END-ROM lOT
ROM-IDT-
~SEC:._HI
LENGTH OF ROM loT TABLE
LOW WORD OF BASE ADDRESS
HIGH BYTE OF BASE ADDRESS
RESERVED
THE ROM EXCEPTION INTERRUPT VECTOR GATES FOR BLOCK MOVE
OW
D'
08
08
D.
D.
D.
EX INT
BIi5s CS
o
-
~RAP_GATE
EX INT
BIi5S CS
o
-
DB
08
~RAP _GATE
D.
D.
EX INT
BIi5S CS
D'
08
08
D.
o
-
TRAP GATE
o
-
D.
EX INT
08
08
TRAP GATE
D'
D'
~1i5S_CS
o
-
D'
D'
EX INT
D'
TRAP GATE
08
08
~1i5S_CS
o
-
EXCEPTION 00
DESTINATION OFFSET
DESTINATION SEGMENT SELECTOR
WORD COPY COUNT
GATE TYPE - ACCESS RIGHTS BYTE
RESERVED
EXCEPT I ON 0 I
DESTINATION OFFSET
DESTINATION SEGMENT SELECTOR
WORO COPY COUNT
GATE TYPE - ACCESS RIGHTS BYTE
RESERVED
EXCEPTION 02
DESTINATION OFFSET
DESTINATION SEGMENT SELECTOR
WORD COPY COUNT
GATE TYPE - ACCESS RIGHTS BYTE
RESERVED
EXCEPTI ON 03
DESTINATION OFFSET
DESTINATION SEGMENT SELECTOR
WORD COPY COUNT
GATE TYPE - ACCESS RIGHTS BYTE
RESERVED
EXCEPT I ON 04
DESTINATION OFFSET
DESTINATION SEGMENT SELECTOR
WORD COPY COUNT
GATE TYPE - ACCESS RIGHTS BYTE
RESERVED
EXCEPTION 05
B:~;I P~~~~"~~, T~i:5telN~:~~ep~·i;Hb~iDs R6uTi~ES
19'
n.
n.
n.
n.
191
n.
7 ••
1 ••
000
00,
00.
00.
00'
0 ••
00.
001
0.0
00.
0'0
.11
0"
0 ..
0"
0"
0"
0'7
0'0
0 ..
020
0"
02.
02'
82.
02'
.2.
827
020
...•••
0'0
0 ••
•••
•••
•••
.'7
0 ••
•• 0
0.,
•••
•••
•••
•••
•••
•• 1
.'0
..••••••,
.'0
0.,
•••
•••
•••
.,"
•••
•••
...
•• 0
•• 2
0 ••
•••
•••
•••
0.,
•• 7
0 ••
.10
81'
.72
.7'
02CD R
0020
00
151
0000
DW
DW
DB
DB
DW
EX INT
BICS_CS
030A
030C
030E
030F
0310
02CD R
0020
00
15T
0000
DW
DW
DB
DB
DW
EX INT
BI15S_CS
0312
0314
0316
031T
03115
02CD R
0020
00
I5T
0000
DW
DW
DB
DB
DW
EX INT
BI15s_cs
031A
031C
031E
031F
0320
02CO R
0020
00
I5T
0000
DW
DW
DB
DB
DW
EX INT
BI15S_CS
I
0
I
0322
0324
0326
032T
03215
02CD R
0020
00
I5T
0000
DW
DW
DB
DB
DW
EX INT
BI15S_CS
032A
032C
032E
032F
0330
02CD R
0020
00
I5'T
0000
DW
DW
DB
DB
DW
EX INT
BI15S_CS
0332
0334
0336
033T
03315
02CD R
0020
00
I5T
0000
DW
DW
DB
DB
DW
EX INT
Bllis_cs
033A
033C
033E
033F
0340
02CD R
0020
00
15T
0000
DW
DW
DB
DB
DW
EX INT
BI15S_CS
0342
0344
0346
034T
03415
02CO R
0020
00
151
0000
DW
DW
DB
DB
DW
EX INT
BI'O'S_CS
034A
034C
034E
034F
0350
02CO R
0020
00
I5T
0000
DW
DW
DB
DB
DW
EX INT
Bli5S_CS
0352
0354
0356
035T
03515
02CD R
0020
00
15T
0000
DW
DW
DB
DB
DW
EX
035A
035C
035E
035F
0360
02CD R
0020
00
15T
0000
DW
DW
DB
DB
DW
EX INT
Bllis_cs
0362
0364
0366
036T
03615
02CO R
0020
00
8T
0000
OW
DW
OB
DB
DW
EX INT
BIOS_CS
036A
036C
036E
036F
0370
02CO R
0020
00
15T
0000
ow
ow
EX
03T2
0314
03T6
03TT
03T15
02CD R
0020
00
15T
0000
DW
03TA
03TC
OSTE
03TF
0380
02CO R
0020
00
8T
0000
DW
DW
DB
DB
DW
EX INT
BIC5s_cs
0382
0384
03156
038T
0388
02CD R
0020
00
15T
0000
DW
DW
DB
DB
DW
EX INT
Bllis_cs
038A
038C
038E
0315F
0390
02CD R
0020
00
8T
0000
DW
DW
DB
DB
DW
EX INT
BIOS_CS
0392
0394
0396
039T
0398
02CD R
0020
00
15T
0000
DW
DW
DB
DB
EX INT
BIOS_CS
81.
.75
81.
OTT
..,
•••
.7.
.1.
000
.02
.0.
.0.
•••
•••
•••
•••
•••
•••
•••
•••
0.1
...
.'0
0"
8 ••
0'7
.00
'01
'0.
.0.
'0'
,-.
04-21-156
0302
0304
0306
030T
03015
0'2
•••
2.00
DB
DB
ow
ow
DB
DB
ow
ow
•
•
TRAP_GATE
0
TRAP_GATE
0
0
TRAP_GATE
0
TRAP_GATE
J
0
,
0
TRAP_GATE
0
0
TRAP_GATE
0
0
TRAP_GATE
0
0
TRAP_GATE
0
0
TRAP_GATE
0
I
0
TRAP_GATE
0
'NT
BI15S_CS
0
TRAP_GATE
0
0
TRAP_GATE
0
0
TRAP_GATE
0
'NT
BI'O'S_CS
0
TRAP_GATE
0
EX INT
Bllis_cs
0
TRAP_GATE
0
0
TRAP_GATE
0
0
TRAP_GATE
0
0
TRAP_GATE
0
0
TRAP_GATE
0
I
DESTINATION OFFSET
DEST I NAT I ON SEGMENT SELECTOR
WORD COPY CDUNT
GATE TYPE - ACCESS RIGHTS BYTE
RESERVED
EXCEPT I ON 06
DEST I NAT I ON OFFSET
DEST I NAT I ON SEGMENT SELECTOR
WORD COPY COUNT
GATE TYPE - ACCESS RIGHTS BYTE
RESERVED
EXCEPTION aT
OEST I NATI ON OFFSET
DESTINATION SEGMENT SELECTOR
WORD COPY COUNT
GATE TYPE - ACCESS RIGHTS BYTE
RESERVED
EXCEPT I ON 015
OEST I NAT I ON OFFSET
DEST! NATI ON SEGMENT SELECTOR
WORD COPY COUNT
GATE TYPE - ACCESS RIGHTS BYTE
RESERVED
EXCEPT I ON 09
DESTINATION OFFSET
DESTINATIDN SEGMENT SELECTOR
WORD COPY COUNT
GATE TYPE - ACCESS RIGHTS BYTE
RESERVED
EXCEPTION '0
DEST I NAT I ON OFFSET
DEST I NAT I ON SEGMENT SELECTOR
WORD COPY COUNT
GATE TYPE - ACCESS RIGHTS BYTE
RESERVED
EXCEPT I ON "
DEST! NAT I ON OFFSET
DEST I NAT I ON SEGMENT SElECTOR
WORD COpy COUNT
GATE TYPE - ACCESS RIGHTS BYTE
RESERVED
EXCEPTION 12
DESTINATION OFFSET
DESTINATION SEGMENT SElECTOR
WORD COPY COUNT
GATE TYPE - ACCESS RIGHTS BYTE
RESERVED
EXCEPTION 13
DESTINATION OFFSET
DEST I NAT I ON SEGMENT SELECTOR
WORD COPY COUNT
GATE TYPE - ACCESS RIGHTS BYTE
RESERVED
EXCEPTION 14
DESTINATION OFFSET
DEST I NAT I ON SEGMENT SELECTOR
WORD COPY COUNT
GATE TYPE - ACCESS RIGHTS BYTE
RESERVED
EXCEPT I ON I 5
DESTINATION OFFSET
DESTINATION SEGMENT SELECTOR
WORD COFlY COUNT
GATE TYFIE - ACCESS RIGHTS BYTE
RESERVED
EXCEFIT I ON 16
DESTINATION OFFSET
DEST I NAT I ON SEGMENT SElECTOR
WORD COPY COUNT
GATE TYPE - ACCESS RIGHTS BYTE
RESERVED
EXCEPT I ON I T
DESTINATION OFFSET
OEST I NAT I ON SEGMENT SElECTOR
WORD COpy COUNT
GATE TYPE - ACCESS RIGHTS BYTE
RESERVED
EXCEPTION 18
DESTINATION OFFSET
DESTINATION SEGMENT SELECTOR
WORD COPY COUNT
GATE TYPE - ACCESS RIGMTS BYTE
RESERVED
EXCEPTION 19
DESTINATION OFFSET
DEST I NAT I ON SEGMENT SELECTOR
WORD COFlY COUNT
GATE TYPE - ACCESS RIGHTS BYTE
RESERVED
EXCEPT I ON 20
DESTINATION OFFSET
OEST I NAT I ON SEGMENT SELECTOR
WORD COPY COUNT
GATE TYPE - ACCESS RIGHTS BYTE
RESERVED
EXCEPTION 21
DESTINATION OFFSET
DESTINATION SEGMENT SELECTOR
WORD COPY COUNT
GATE TYPE - ACCESS RIGHTS BYTE
RESERVED
EXCEFIT I ON 22
DESTINATION OFFSET
DESTINATION SEGMENT SELECTOR
WORO COpy COUNT
GATE TYPE - ACCESS RIGHTS BYTE
RESERVED
EXCEPTION 23
DESTINATION OFFSET
DEST I NAT I ON SEGMENT SElECTOR
WORD COPY COUNT
GATE TYPE - ACCESS RIGHTS BYTE
RESERVED
EXCEPT I ON 24
BIost
5-171
B:g~lp~~~=n~~/~oiC5t·~N~~~=~P~·~;Hb~ios R~~i~:s
•••
•••
'.78
••
•••
'"
.,..,.
.,..,.
.,."8.2.
.17
'2'
'22
'2.
'2'
'2.
'2.
'27
'28
.2.
•••,
"2
•••
..
•••
•••
•••
'.7
'.8
•••
•••
••2,
•••
•••
..
•••
•••7
••
'.8
•••
•••
'8'
.52
'8'
•••
R
039A
039C
039E
039F
03AO
02CD
0020
00
8T
0000
03A2
03A ...
03A6
03AT
03A8
02CD R
0020
00
8T
0000
03AA
03AC
03AE
03AF
03BO
2.00
DW
DI
DB
EX INT
BIC5s_cs
DB
TRAP_GATE
DW
DW
EX INT
BIOS_CS
•
•
DW
•
•
•
DB
DB
DI
TRAP_GATE
02CD R
0020
00
87
0000
DI
DI
DB
EX INT
BIC5s_cs
DB
TRAP_GATE
0382
03B...
03B6
0387
03B8
02CD R
0020
00
87
0000
DW
DW
EX INT
BIC5s_cs
DB
DW
TRAP_GATE
03BA
03BC
03BE
03BF
03CO
02CD R
0020
00
87
0000
DW
DI
DB
DB
DI
EX INT
BIC5s_cs
03C2
03C...
03C6
03C7
03C8
02CD R
0020
00
87
0000
DI
DW
DB
DB
DW
EX INT
Bllis_cs
03CA
03CC
03CE
03CF
0300
02CD R
0020
00
87
0000
DW
DI
DB
DB
DW
EX INT
BIC5s_cs
0302
0304
0306
0307
0308
030A
02CO R
0020
00
87
0000
DI
DI
DB
DB
DI
EX INT
Bllis_cs
•
•
•
•
•
•
•
•
•
•
DB
TRAP_GATE
TRAP_GATE
TRAP_GATE
TRAP_GATE
ROM_ lOT_ENOl
03DA
5-172
•
DW
B!..OCKMOVE
BIOSl
ENDP
,-.
0"'-21-86
DEST I NAT I ON OFFSET
DESTINATION SEGMENT SELECTOR
WORD COPY COUNT
GATE TYPE - ACCESS RIGHTS BYTE
RESERVED
EXCEPTION 25
DESTINATION OFFSET
DEST I NAT I ON SEGMENT SELECTOR
WORD COPY COUNT
GATE TYPE - ACCESS RIGHTS BYTE
RESERVED
EXCEPTION 26
DEST I NAT I ON OFFSET
DESTINATION SEGMENT SELECTOR
WORD COpy COUNT
GATE TYPE - ACCESS RIGHTS BYTE
RESERVED
EXCEPTION 27
DESTINATION OFF"SET
DEST I NAT I ON SEGMENT SELECTOR
WORD COPY COUNT
GATE TYPE - ACCESS RIGHTS BYTE
RESERVED
EXCEPTION 28
OEST J NAT I ON OFFSET
DESTINATION SEGMENT SELECTOR
WORD COPY COUNT
GATE TYPE - ACCESS RIGHTS BYTE
RESERVED
EXCEPTION 29
DESTINATION OFFSET
oEST I NAT I ON SEGMENT SELECTOR
WORD COPY COUNT
GATE TYPE - ACCESS RIGHTS BYTE
RESERVED
EXCEPTION 30
DESTINATION OFFSET
oEST I NAT I ON SEGMENT SELECTOR
WORD COPY COUNT
GATE TYPE - ACCESS RIGHTS BYTE
RESERVED
EXCEPTION 31
DESTINATION OFFSET
DESTINATION SEGMENT SELECTOR
WORD COPY COUNT
GATE TYPE - ACCESS RIGHTS BYTE
RESERVED
1-10
04-21-86
•••
•••
•• a
•••
•••,
•••
•••
PAGE
1---------------------------- ---------- ---- ------------ -- --- -- --- -------- -------
•• 7
I GATE A20
I
- THIS ROUTINE CONTROL.S A SIGNAL WHICH GATES ADDRESS BIT 20 •
I
THE GATE A20 SIGNAL IS AN OUTPUT OF THE 8042 SLAVE PROCESSOR.
I
AODRESS BIT 20 SHOULD BE GATED ON BEFORE ENTERING PROTECTED MODE •
I
I T SHOULD BE GATED OFF AFTER ENTER I NG REAL MODE FROM PROTECTED
I
MODE.
INTERRUPTS ARE LEFT DISABLED ON EXIT •
I INPUT
I
IAHI= DOH ADDRESS BIT 20 GATE OFF. (A20 ALWAYS ZERO I
I
(AH) s DFH ADDRESS BIT 20 GATE ON. (A20 CONTROLLED BY 802861
I OUTPUT
(AL). OOH OPERATION SUCCESSFUL. 8042 HAS ACCEPTED COMMAND.
I
I
IALl. 02H FAILURE--8042 UNABLE TO ACCEPT COMMAND.
..
•••
•••
•••
'67
•• a
•••
970
030A
911
D3DA 51
972
973
0308 FA
C30e E8
oaDF 15
03E1 80
03E3 E6
03E5 Ea
03E8 75
03EA!!IA
DIEC E6
03EE Ea
974
975
916
911
ns
919
.80
98 I
•••
• a.
•••
9SlS
986
981
.a.
•••
.aa
03F3 R
10
Ot
o.v
'4
03F3 R
01
C4
60
CALL
"NZ
OOV
OUT
OUT
CALL
03F3 R
1----03FI
03FI 59
03F2 C3
PROC
CX
EMPTY 8042
GATE A20 RETURN
AL.0151H STATUS PORT .AL
EMPTY '5042
GATE A20 RETURN
AL,AR
PORT A,AL
EMPTV_8042
I SAVE USERS (CXI
I DISABLE INTERRUPTS WHILE USING 8042
1 INSURE 8042 I NPUT BUFFER EMPTY
I EXIT IF 8042 UNABLE TO ACCEPT COMMAND
I 8042 COMMANO TO WR I TE OUTpUT PORT
I OUTPUT COMMAND TO 8042
I WAI T FOR 8042 TO ACCEPT COMMAND
1 EX I T IF 8042 UNABLE TO ACCEPT COMMAND
I 8042 PORT DATA
1 OUTF'UT PORT OAT A TO 8042
I WAIT FOR 8042 TO ACCEPT PORT DATA
15042 OUTPUT WILL SWITCH WITHIN 20 MICRO SECONDS OF ACCEPTING PORT DATA
GATE A20 RETURN I
POP
CX
RET
I RESTORE USERS (CX)
1------------------------------------------------------------------------------I EMPTY 15042
I
1
-TH I 5 ROUTI NE WA I TS FOR THE 8042 I NPUT BUFFER TO EMF'TY.
I INPUT
I
NONE
1 OUTPUT
I
(ALl = OOH 8042 INPUT BUFFER EMPTY (ZERO FLAG SET)
(AL). 02H TIME OUT. 8042 INPUT BUFFER FULL (NON-ZERO FLAG SET)
I
I
(CX)
- MODIFIED
• 91
•••
.93
•••
•••
•••
• 97
998
999
I
1---- -- - ---- -- -- ---- ---- -- - - - --------- ----------------- --------- - -- - ------- - - --GATE A20
PUSH
eLI
CALL
"NZ
03F3
03F3 28 C9
I
I
1-------------------------------------------------------------------------------I
EMPTY 80421
-
sue
1000 03F!
1001 03F5 E4 64
EMPTY 1..1
IN
1004 03FB C3
1005 C3Fe
GATE_A20
CX,CX
AL.STATUS PORT
t~gPNZ ~~p+~:~_BOF _FULL
1002 DaFT 24 02
1003 03F9 EO FA
I
(CX)=O. WILL BE USED AS TIME OUT VALUE
READ 8042 STATUS PORT
TEST I NPUT BUFFER FULL FLAG (B I T 1)
LOOP UNT II.. BUFFER EMPTY OR T I ME OUT
RET
ENDP
1006
lOOT
loDe
100.
1010
1011
1012
1013
1014
1015
1016
1011
-- INT 15 H -- ( FUNCTION 88 H - I/O MEMORY SIZE DETERMINE) ---------------EXT MEMORY
THIS ROUTINE RETURNS THE AMOUNT OF MEMORY IN THE SYSTEM THAT IS
LOCATED STARTING AT THE 1024K ADDRESSING RANGE. AS DETERMINED BY
THE POST ROUTINES.
NOTE THAT THE SYSTEM MAY NOT BE ABLE TO USE I/O MEMORY UNLESS THERE
I S A FULL COMPLEMENT OF 5 12K OR 640 BYTES ON THE PLANAR.
TH ISS I ZE
SIZE IS STORED IN CMOS AT ADDRESS LOCATIONS 30H AND 31H.
INPUT
AH • 88H
1018
1019
THE I/O MEMORY SIZE VARIABLE IS SET DURING POWER ON
DIAGNOSTICS ACCORDING TO THE FOLLOWING ASSUMPTIONS.
loza
1021
1022
1023
1024
1025
1026
, 027
1028
1029
1030
1031 DaFt
1032
1033 C3Fe 88 3031
1034 03FF E8 0000 E
1035 0402 86 C4
1036 0404 E8 0000 E
1037 0407 CF
1038
1039 0408
I. ALL INSTALL.ED MEMORY IS FUNCTIONAL..
2. ALL MEMORY FROM 0 TO 640K MUST BE CONT I GUOUS.
OUTPUT
(AX)
• NUMBER OF CONTIGUOUS IK BL.OCKS OF MEMORY A
AVAILABLE STARTING AT ADDRESS 1024K.
I -- --- - -----. --.- -- -- - -- ------- - - - ---- --.- --- - ------- -- -- ---------------- - -----EXT_MEMORY
OOV
CALL
XCHG
CALL
IRET
EXT_MEMORY
F'ROC
AX,CMOS U M S LO'H+CMOS U M S HI ; ADDRESS HIGH/LOW BYTES
CMOS READ- - -I-G!T-THE HIGH BYTE OF I/O MEMORY
ALlAR
1 PUT HIGH BYTE IN POSITION (AHI
CMOS_READ
: ~~~U~~ET~O~S~~TE OF I/O MEMORY
ENDP
BIOSl
5-173
1- "
04-21-86
1040
1041
1042
1043
1044
1045
1046
104T
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
lOTI
1072
IOT3
IOT4
10T5
IOT6
10TT
1078
10T9
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
PAGE
INT 15 H ( FUNCTION 89 H I -----------------------------------------------PURPOSE,
THIS BIOS FUNCTION PROVIOES A MEANS TO THE USER TO SWITCH INTO
V I RTUAL. (PROTECTED I MODE.
UPON COMPL.ET I ON OF TH I S FUNCT I ON THE
PROCESSOR WILL. BE IN VIRTUAL (PROTECTED) MODE AND CONTROL WILL.
BE TRANSFERRED TO THE CODE SEGMENT THAT WAS SPEC I F I ED BY THE USER.
ENTRY REQUIREMENTSt
(ESISI) POINTS TO A DESCRIPTOR TABL.E (GOT) BUIL.T BEFORE INTERRUPTING
TO TH I S FUNCT I ON.
THESE DESCR I PTORS ARE USED BY TH I S FUNCT I ON TO
INITlAL.IZE THE IDTR, THE GDTR AND THE STACK SEGMENT SELECTOR.
THE
OAT A SEGMENT (OS) SELECTOR AND THE EXTRA SEGMENT (ES I SEL.ECTOR WI L.L.
BE INITIALIZE TO DESCRIPTORS BUILT BY THE ROUTINE USING THIS FUNCTION.
BH - OFFSET INTO THE INTERRUPT DESCRIPTOR TABLE STATING WHERE THE
FIRST EIGHT HARDWARE INTERRUPTS WIL.L BEGIN. ( INTERRUPT LEVEL 1 I
BL - OFFSET INTO THE INTERRUPT DESCRIPTOR TABLE STATING WHERE THE
SECOND EIGHT HARDWARE INTERRUPTS BEGIN. ( INTERRUPT LEVEL 2 I
THE DESCR I PTORS ARE DEF I NED AS FOLLOWS I
I.
2.
3.
4.
5.
6•
7.
8•
NOTE -
THE FIRST DESCRIPTOR IS THE REQUIRED DUMMY.
(USER INITIALIZED TO 01
THE SECOND DESCRIPTOR POINTS TO THE GOT TABLE AS
A OAT A SEGMENT.
(USER INI'TIALIZEDI
THE THIRD DESCRIPTOR POINTS TO THE USER DEFINED
INTERRUPT DESCRIPTOR TABLE (lOT).
(USER INITIALIZED)
THE FORTH DESCRIPTOR POINTS TO THE USER'S DATA
SEGMENT (OS).
(USER INITIALIZED)
THE FIFTH DESCRIPTOR POINTS TO THE USER'S EXTRA
SEGMENT (ES I •
(USER INITIALIZED)
THE SIXTH OESCR I PTOR PO I NTS TO THE USER' S STACK
SEGMENT (SS I •
(USER INITIALIZED)
THE SEVENTH DESCR I PTOR PO I NTS TO THE CODE SEGMENT
THAT THIS FUNCTION WILL RETURN TO.
(USER I NIT I AL I ZED TO THE USER'S CODE SEGMENT.)
THE EIGHTH DESCR I PTOR I S USED BY TH I S FUNCT I ON TO
ESTABLISH A CODE SEGMENT FOR ITSELF. THIS IS
NEEDED SO THAT TH I S FUNCT I ON CAN COMPLETE IT'S
EXECUT I ON WH I LE I N PROTECTED MODE.
WHEN CONTROL
GETS PASSED TO THE USER'S COOE THIS DESCRIPTOR CAN
BE USED BY HIM IN ANY WAY HE CHOOSES.
EACH DESCRIPTOR MUST CONTAIN ALL THE NECESSARY DATA
I.E. THE LIMIT,
BASE ADDRESS AND THE ACCESS RIGHTS BYTE.
AHa 89H
(FUNCTION CALL)
ESISI
LOCATION OF THE GOT
USING THIS FUNCTION.
=
i09~
1095
1096
1097
1098
TABL~
RIJ!LD !:'Y ROIJ"!'!NE
EXIT PARAMETERSr
AH = 0
IF SUCCESSFUL
ALL SEGMENT REGISTERS ARE CHANGED,
1099
(AXI
AND (BP) DESTROYED
1100
CONSIDERATIONSI
1101
1102
11 03
1104
1105
11 06
1101
11 08
1109
1110
1111
1112
" 13
1114
1115
1116
1111
1118
1119
1120
1121
1122
1123
1124
1125
1126
1121
1128
1129
1130
1131
1132
1133
1134
1135
1136
1131
1138
1139
1140
1141
1142
1143
1144
1145
1146
5-174
I.
2.
3.
4.
5.
NO 8105 AVAILABLE TO USER.
USER MUST HANDLE ALL
110 COMMANDS.
INTERRUPTS - I NTERRUPT VECTOR LOCAT IONS MUST 8E
MOVED, DUE TO THE 286 RESERVED AREAS.
THE
HARDWARE INTERRUPT CONTROLLERS MUST BE REINITIALIZED
TO DEFINE LOCATIONS THAT DO NOT RESIDE IN THE 286
RESERVED AREAS.
EXCEPTION INTERRUPT TABLE AND HANDLER MUST BE
INITIALIZED BY THE USER.
THE INTERRUPT DESCRIPTOR TABLE MUST NOT OVERLAP
THE REAL MODE BIOS INTERRUPT DESCRIPTOR TABLE.
THE FOLLOWING GIVES AN IDEA OF WHAT THE USER CODE
SHOULD LOOK LIKE WHEN I NVOK I NG TH I S FUNCT I ON.
REAL MODE
-;->
I
I
I
I
I
I
VIRTUAL MODE --->
I
I
I DESCRIPTIONI
I
I
I
I
I
I
I
I
I
I
I
I
I •
2.
3.
4.
5.
6.
7.
8.
9.
I
I
10.
I
I
I I •
I
12.
I
1--- - - - - - - -
BIOSl
"USER
MOV
MOV
MOV
MOV
MOV
MOV
INT
ftUSER
CODEn
AX.GDT SEGMENT
ES.AX
SI.GDT OFFSET
BH,HARDWARE INT LEVEL I OFFSET
BL.HARDWARE INT LEVEL 2 OFFSET
AH.89H
15H
CODE"
CL I (NO I NTERRUPTS ALLOWED) WH I LE TH I S FUNCT I ON IS EXECUT I NG.
ADDRESS LINE 20 IS GATED ACTIVE.
THE CURRENT USER STACK SEGMENT DESCRIPTOR IS INITIALIZED.
THE GDTR IS LOADED WITH THE GOT BASE ADDRESS.
THE IOTR IS LOADED WITH THE lOT BASE ADDRESS.
THE 8259 IS REINITIALIZED WITH THE NEW INTERRUPT OFFSETS.
THE PROCESSOR IS PUT IN VIRTUAL MODE WITH THE CODE
SEGMENT DESIGNATED FOR THIS FUNCTION.
DATA SEGMENT IS LOADED WITH THE USER DEFINED
SELECTOR FOR THE OS REG I STER.
EXTRA SEGMENT I S LOADED WITH THE USER OEF I NED
SELECTOR FOR THE ES REG I STER.
STACK SEGMENT IS LOADED WITH THE USER DEFiNED
SELECTOR FOR THE 55 REGISTER.
CODE SEGMENT DESCR I PTOR SELECTOR VALUE IS
SUBSTITUTED ON THE STACK FOR RETURN TO USER.
WE TRANSFER CONTROL TO THE USER WITH INTERRUPTS DISABLED.
I
- --- ---- - -- -- ----- - - - - ----- - ---- -- -- - - -- - - - - - - - - ------- - - ------------
1-12
04-21-86
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
11 63
1164
1165
1166
1167
1168
1169
I 170
117 I
1 172
1 173
tl74
1175
1 176
I III
1178
1 179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1211S
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
I 2315
I 236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1 246
1247
1248
1 249
1250
1251
1252
1253
1254
1255
1256
PAGE
I
I
I
THE FOL.LOWING DIAGRAM DEPICTS THE ORGANIZATION
OF GOT.
,---- -----------.------ --------------------------------------------------------I
I
I
GOT
,
I
-------------
1
IESISI}--»
:::
~~~~~~~:::~~~~~~
I
---'
GOT
I
I
I
" 0
+18
lOT
----------------
OS
+20
----------------
+28
--.------------55
+30
----------------
+38
---------------TEMP BIOS
ES
es
es
,- ----.----------- -- -- ----- ---------------- ------------------------------------I
THE GLOBAL DESCR I PTOR T A8LE
tACTUAL LOCAT I ON PO I NTEO TO BY ES, S II
I
1 - - ------ --- - --------------- - -- - -- - -- -- --------- - - ---------- - - -- ---- - -----------
0000
0008
0010
0018
0020
0028
0030
00315
0040
1111111111111111
1111111111111111
1111111111111111
1111111111111111
1111111111111111
1111111111111111
1111111111111711
1111111111111111
V I RTUAL ENABLE GOT DEF
- DQGDTPTR
OQ
IOTPTR
OQ
STRUC
~~i~:~~
?
?
BIO
~~
'fs
DQ
V I RTUAL_ENABLE_GOT _DEF
ASSUME
X VIRTUAL
SET_VMODE,
0408
0408
1----0408
0409
0408
040E
0410
0412
0414
0415
FA
84
E8
3C
74
84
F9
CF
?
?
?
?
?
?
ENDS
DS,DATA
PROC
FA.
ENA8LE ADDRESS LATCH BIT 20
eLI
OF
03DA R
00
04
FF
MOV
CALL
eMP
"Z
MOV
STe
~~+~~:~~E_BIT20
POP
NO I NTERRUPTS ALLOWED
ENABLE BIT 20 FOR ADDRESS GATE
AL,O
BIT20 ON
AH,OFJ!'H
WAS THE COMMAND ACCEPTE01
GO IF YES
SET THE ERROR FLAG
SET CARRY
EARLY EXIT
ES
MOVE SEGMENT PO INTER
TO THE OAT II SEGMENT
IRET
BIT20 ON,
PUSH
0416
0416 06
0417 IF
FIRST DESCRIPTOR NOT ACCESSIBLE
GOT OESCR I PTOR
lOT DESCR I PTOR
USER DATA SEGMENT DESCRIPTOR
USER EXTRA SEGMENT DESCR I PTOR
USER STACK SEGMENT DESCRIPTOR
USER CODE SEGMENT DESCR I PTOR
TEMPORARY B I as OESCR I PTOR
OS
1------------------------------------------------------------------------------, REINITIALIZE THE 8259 INTERRUPT CONTROLLER ' I TO THE USER SPECIFIED OFFSET
I
1--- - ------- ---- ------ -------- - -- - - -- ---------- ------ - - .-- ---------- -----------0418
041A
041C
041E
0420
0422
0424
0426
0428
042A
042C
042E
0430
0432
80
E6
E8
8A
E6
E8
80
E6
EB
80
E6
EB
BO
E6
11
20
00
C7
21
00
04
21
00
0I
21
00
FF
21
MOV
OUT
"MP
MOV
OUT
"MP
MOV
OUT
"MP
MOV
OUT
"MP
MOV
OUT
AL,IIH
INTAOO,AL
START INITIALIZATION SEQUENCE-ICW!
EDGE, INTERVAL-8,MASTER, ICW4 NEEDED
INTAOI,AL
HARDWARE INT'S START AT INT ,
SEND ICW2
I·'
AL,BH
I·'
AL.04H
INTAOI,AL
I"
AL.OIH
INTAOI,AL
I·'
AL,OFFH
(SH)
I SEND I CW3 - MASTER LEVEL 2
I SEND ICW,," - MASTER.8086 MODE
I MASK OFF ALL INTERRUPTS
INTAOI,AL
1----------------------------------------------------------------------------1 REINITIALIZE THE 8259 INTERRUPT CONTROLLER t2 TO THE USER SPECIFIED OFFSET
I
I ------- ~ ~-----~--------------------- ~- - ---------- - ------- -- -- - - - - -- ---------043480
0436 E6
0438 EB
043A 8A
043C E6
043E BO
0440 EB
0442 E6
0444 EB
0446 80
0448 E6
044A EB
044C 80
044E E6
II
AD
00
C3
AI
02
00
AI
00
01
AI
00
FF
AI
MOV
OUT
"MP
MOV
OUT
MOV
"MP
OUT
J10tP
MOV
OUT
"MP
MOV
OUT
AL.IIH
tNTSOO,AL
I"
AL.SL
INTBOI,AL
AL,02H
INITIALIZE SEQUENCE-ICW! FOR SLAVE
EDGE.INTERVAL-8.MAST-ER,ICW4 NEEDED
HARDWARE tNT'S START AT tNT' (BL)
SEND ICW2
I"
INTBOI,AL
I.'
AL,OIH
I SEND ICW3 -
SLAVE LEVEL 2
INTSOI,AL
I SEND leW4 -
SLAVE,8086 MOOE
INTSOI,AL
I MASK OFF ALL INTERRUPTS
I.'
AL.OFFH
BIOSt
5-175
1-13
04-21-86
1257
1258
1259
PAGE
;- --------------------------------------I SETUP B I OS CODE SEGMENT DESCR I PTOR
I
1----------------------------------------
1260
1261
1262
I 263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
12804
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
13204
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
0450 C7 044 3e FFFF
0455 C6 44 3C OF
0459 C7 044 3A 00(10
MOV
Mav
MOV
MOV
MOV
045E CEo 044 3D 9B
0462 C7 44 3E 0000
15'1'B10 CS.SEG LIMIT,MAX SEG LEN
I SET LENGTH
SI .BIO:CS.BASE_HI_BYTE.CSEGi_HI
1 SET HIGH BYTE OF CS=OF
SI .BIO CS.BASE LO WORD.CSEGO LO
I SET LOW WORD OF CS=O
SI .BIO-CS.DATA-ACC RIGHTS,CpeO CODE ACCESS
SI .BIO:CS.DATA:RESERVED.O
I ZERO RESERVED AREA
1----------------------- ----------- ------
;
ENABLE PROTECTED MODE
1---------------------------------------LGDT
[SI).GDTP7R
I
I
0467 OF
0468
0468 8B 54 08
046B
0468
0468 01
046B
046B OF
046C
046C 8B 5C 10
046F
046C
046C 01
046F
110005
110006
+ 110007
+ 110008
046F B8 0001
0472
0475
0476
0478
047A
OHD
047F
0482
0484
0487
MeV
~~. VIRTUAL_ENABLE
D.
D.
LOAD GLOBAL DESCRIPTOR TABLE REGISTER
INTERRUPT DESCR I PTOR TABLE REG I STER
BYTE
OFFSET CSI??0007
001H
OFFSET CSr??0008
MACHINE STATUS WORD NEEDED TO
SW I TCH TO V I RTUAL MODE
OOFH,OOIH,OFOH
OEAH
OFFSET VMODE
BIO_CS
PURGE PRE-FETCH QUEUE WITH FAR .JUMP
- TO OFFSET
- I N SEGMENT -PROTECTED MODE SELECTOR
VMODEr
1---------------------------------------1
SETUP USER SEGMENT REG I STERS
;
B8
8E
B8
8E
B8
8E
0018
08
0020
CO
0028
DO
I ------------------ - - - ------- - - - - -------MOV
AX.USER OS
I SETUP USER'S DATA SEGMENT
MOV
OS • AX ; TO PROTECTED MODE SELECTORS
~g~
:~:~~ER_ES
I SETUP USER'S EXTRA SEGMENT
~g~
;
I
0489
048A
0480
048F
0490
OOFH
BYTE
OX. WORD PTR [S I ) • GDTPTR
BYTE
OFFSET CSr110005
001H
OFFSET CSr710006
(S I J• IDTPTR
;
OOFH
BYTE
BX.WORD PTR [SI] .IDTPTR
LMSW
08
08
OF 01 FO
EA
047A R
0038
047A
DB
LABEL
MOV
LABEL
ORG
DB
ORG
L I DT
DB
LABEL
MOV
LABEL
ORG
DB
ORG
5B
83 C4 04
6A 30
53
CB
0491
~~:~iER_SS
; SETUP USER'S STACK SEGMENT
---------------------------------------PUT TRANSFER ADDRESS ON STACK
I
I
AND RETURN TO THE USER
I
I ----------------- - - - ---- - - - --- ----- - - - -POP
ex
I GET RETURN
ADO
PUSH
PUSH
RET
X_VIRTUAL
,
,
IP FROM THE STACK
: NORM"-!..!:!=: STACK FC1NTE:"\
I SET STACK FOR A RETURN FAR
SP;4
USER CS
BX-
I
RETURN TO USER I N V I RTUAL MODE
ENDP
1--- DEVICE BUSY AND INTERRUPT COMPLETE -------------------------
I
I
THIS ROUTINE IS A TEMPORARY HANDLER FOR OEVICE BUSY
AND I NTERRUPT COMPLETE
I
INPUT
- SEE PROLOGUE
I - - - ---- ----- ---- - - - - - --- - - -------- - - - - -------------- ------ - - - ---
0491
0491 F8
0492 E9 0055 R
0495
DEVICE_B~~~
PROC
JMP
DEVICE_BUSY
ENI5P
0495
0495 CF
0496
I NT COMPLETE
IRET
(NT_COMPLETE
0496
CODE
5-176
BIOSt
ENDS
END
NEAR
TURN CARRY OFF
RETURN WITH CARRY FLAG
C' F
PROC
NEAR
I RETURN
ENDP
I-I
I eM P.,...on.1 Comput.,.. MACRO A ••• mb I.,..
V.,.. a I on 2. 00
BIOS2 ---- 06/10/85 BIOS INTERRUPT ROUTINES
PAGE 118,121
TITLE BIOS2 ---- 06/10/85 BIOS INTERRUPT ROUTINES
.286C
.LlST
CODE
SEGMENT BYTE PUBL I C
I
2
3
•
5
6
04-21-86
0000
1
8
•
10
II
12
13
I.
I.
1--- INT
16
11
18
I
I
I.
PUBL I C
PUBLIC
PUBLIC
PUBLIC
PR I NT SCREEN I
RTC IJilT
TIME:' OF DAY 1
TlMEA"_lliiT_I-
EXTRN
EXTRN
EXTRN
CMOS READ: NEAR
CMOS-WRITEINEAR
DOS I'FJEAR
READ THE CURRENT CLOCK SETT I NG AND RETURN WITH,
(CX I : HIGH PORTI ON OF COUNT
(OX) = LOW PORTION OF COUNT
(AL) : a TIMER HAS NOT PASSED 2-4 HOURS SINCE LAST READ
1 I F ON ANOTHER DAY. (RESET TO ZERO AFTER READ)
I
I
I
2.
I
25
26
21
I
I
I WRITE CMOS LOCATION ROUTINE
I LOAD (OS) WITH OAT A SEGMENT SELECTOR
IA H -- (TIME OF DAYI -----------------------------------------------THIS BIOS ROUTI'FJE ALLOWS THE CLOCKS TO BE SET OR READ
:
I PARAMETERS I
1
(AHI : OOH
20
21
22
23
1 READ CMOS LOCATION ROUTINE
(AHI
OIH
3.
(AH)
= 02H
READ THE REAL T I ME CLOCK AND RETURN WITH,
(CH) : HOURS IN BCD (00-23)
(CL) = MI,...UTES IN BCD (00-59)
(DH) : SECONDS IN BCD (00-59)
(DLI : DAYLIGHT SAVINGS ENABLE (00-01).
3.
(AH)
= 03H
SET THE REAL TIME CLOCK USING,
(CH) = HOURS IN BCD (00-23)
(CL) = MINUTES IN BCD (00-59)
(DH) = SECONDS IN BCD (00-59)
(DLI : 01 IF DAYLIGHT SAVINGS ENABLE OPTION, ELSE 00 •
SET THE CURRENT CLOCK US I NG,
(CX) : HIGH PORTION OF COUNT
(OX I = LOW PORT I ON OF COUNT.
I
I
2.
2.
..
I
I
I
30
31
I
33
NOTE: COUNTS OCCUR AT THE RATE OF 1193180/65536 COUNTS/SECOND
(OR ABOUT 18.2 PER SECOND -- SEE EQUATES)
35
36
31
38
.,.2.0
.3
••
NOTEI
•5
.6
.1
.8
••
50
= aSH
SET THE DATE INTO THE REAL TIME CLOCK USING,
(CH) = CENTURY IN BCD (19 OR 20)
(CLI .. YEAR IN BCD (00 - 991
(DHI .. MONTH IN BCD (01 - 121
(OLI .. DAY IN BCD (01-311.
(AH)
=
SET THE ALARM TO INTERRUPT AT SPECIFIED TIME,
(CHI : HOURS IN BCD (00-23 (OR FFH) I
(CLI : MINUTES IN BCD (00-59 (OR FFH))
(DH) = SECONDS IN BCD (00-59 (OR FFHI I.
60
62
63
65
66
.1
10
11
12
13
14
15
16
11
18
19
80
81
82
83
8-4
85
86
81
88
89
90
91
92
93
••
TIME ENABLE IS NOT ENABLED •
UPDATES THE LAST SUNDAY IN
AMI AND THE LAST SUNDAY IN
AMI THE FIRST TIME •
(AHI
5.
••
••6.
SAVINGS
SPECIAL
3100100
1100,00
READ THE DATE FROM THE REAL TIME CLOCK AND RETURN WITH,
(CHI = CENTURY IN BCD 119 OR 201
(CLI : YEAR IN BCD (00-99)
(DHI = MONTH IN BCD (01-121
(DLI = DAY IN BCD (01-31).
5.
.,
IF DAYLIGHT
ENABLES TWO
(1159159 -->
(1159159 -->
(AH) = 0-4H
51
52
53
55
56
51
58
(DL)= 00
(DLI: 01
APRIL
OCTOBER
06H
(AHI = 07H
RESET THE ALARM INTERRUPT FUNCTION •
NOTES 1 FOR ALL RETURNS CY= a FOR SUCCESSFUL OPERATION.
FOR (AH): 2, 4, 6 - CARRY FLAG SET IF REAL TIME CLOCK NOT OPERATING.
FOR (AH) = 6 - CARRY FLAG SET I F ALARM ALREADY ENABLED.
FOR THE ALARM FUNCT I ON (AH : 6) THE USER MUST SUPPLY A ROUT I NE AND
INTERCEPT THE CORRECT ADDRESS IN THE VECTOR TABLE FOR INTERRUPT "AH.
USE OFFH FOR ANY "DO NOT CARE~ POSITION FOR INTERVAL INTERRUPTS.
INTERRUPTS ARE DISABLED DURING DATA MODIFICATION.
I
AH & AL ARE RETURNED MODIFIED AND NOT DEFINED EXCEPT WHERE INDICATED.
I
1-- - - - -- ------- --- - ------- - - - - ------ --- - --- -- --- - -- -- - - --------- - - - --------- - ---
ASSUME
0000
0000
000 I
000-4
0005
FB
80 FC 08
F5
12 11
TIME OF DAY 1
-STICMP
eMe
0001 IE
0008 E8 0000 E
OOOB 56
OOOC CI E8 08
OOOF 03 CO
00118BFO
0013 FA
001-4 2E: FF 9-4 0021 R
95
96
91
98
99
100
101
102
103
10-4
105
0019
OOIA
OOIC
0010
OOIE
OOIE
0021 0031 R
0023 00-42 R
0025 0050 R
106
0021 0015 R
107
108
109
110
III
112
113
002'9 00A8 R
002B OOCS R
0020 0104 R
002FOl45R
= 0031
FAR
AH, (RTC_TBE-RTC_TBI 12
TIME_9
PUSH
CALL
PUSH
DDS
os
51
MDV
AX,8
AX,AX
SI,AX
CALL
CSI (51 1+0FFSET RTC_TB
eLi
CA 0002
PRDC
..JC
SHR
ADD
FB
B4 00
5E
IF
CSICODE,DSIDATA
STI
MOV
AH,O
PDP
POP
OS
51
I I NTERRUPTS BACK ON
; CHECK IF COMMAND IN VALID RANGE (0-7)
1 COMPLEMENT CARRY FOR ERROR EX I T
I EXIT WITH CARRY: I IF NOT VALID
I SAVE USERS (OS) SEGMENT
I GET OAT A SEGMENT SELECTOR
I SAVE WORK REGISTER
I CONVERT FUNCT I ON TO BYTE OFFSET
I CONVERT FUNCT I ON TO WORD OFFSET (CY=O I
I PLACE I NTO ADDRESS I NG REG I STER
I NO INTERRUPTS DURING TIME FUNCTIONS
; VECTOR TO FUNCTION REQUESTED WITH CY:O
I
RETURN WITH CARRY FLAG SET FOR RESULT
; I NTERRUPTS BACK ON
; CLEAR (AH) TO ZERO
; RECOVER USERS REG I STER
1 RECOVER USERS SEGMENT SELECTOR
I RETURN WITH CY= 0 I F NO ERROR
RET
RTC_TB
OW
OW
OW
OW
OW
OW
OW
OW
RTC_TeE EQU
ROUT I NE VECTOR TABLE (AH) =
READ CURRENT CLOCK COUNT
SET CLOCK COUNT
READ THE REAL T I ME CLOCK T I ME
SET REAL T I ME CLOCK T I ME
READ THE REAL T I ME CLOCK DATE
SET REAL T I ME CLOCK DATE
SET THE REAL T I ME CLOCK ALARM
RESET ALARM
0031
BIOS2
5-177
8::2P~~~~nO!' ~Oi~&t •• ,~~~~~~I:~I~ES.' on
"4
II.
II.
"T
II.
".
12.
121
'"
I ••
,.4
".
I ••
I.T
I ••
I ••
I ••
131
I ••
I ••
,.4
I ••
I ••
I.'
I ••
I ••
14.
141
14.
14.
144
145
14.
14T
14.
14'
I ••
,.,
I ••
I ••
,.4
I ••
I ••
151
I ••
I.'
I ••
...,.,
I ••
,.4
I. .
I ••
I.T
I ••
I ••
IT.
ITI
IT.
IT.
IT~
IT.
IT.
ITT
ITO
IT.
I ••
III
I ••
I ••
,.4
I ••
I ••
lIT
'"
".
".'"
".
I.'
"4
".
".
".
•••
,.,
"T
I ••
•••
•••
•••
•••
•••
•••
".
'.4
•• T
."
".
".
."
21.
.,..,.
"4
"T
.A""
0011
0011
0034
DOl.
0030
0041
AO
C6
al
aa
C3
0042
0042
0046
004"
004F
a. 16 d06C R
I ' DE 006£ R
C6 06 OOTO R 00
C3
DaTa R
06 OOTO R 00
DE 006£ R
16 006C R
0075
OOT5
DaTI
OOTA
OOTD
OOTD
OOTF
0011
0014
0016
0011
OOIS
0010
OOIF
00'2
00.5
00.8
QO'A
OO.C
009F
OOAI
00A3
OOA'
OOAT
ao
Ets
IA
ao
EI
24
IA
SO
EI
IA
aD
EI
IA
F8
00
0000
Fa
Da
0000
01
DO
02
0000
C8
04
0000
EI
E
E
E
RTe_2'1
C3
ooca
OOCI
OOCE
0000
0001
0003
0006
000.
OODa
DODD
OOEO
00E2
00E4
OOET
ODE.
OQEI
OOEE
OOFO
00F2
00F5
00'8
OaFS
OOFD
DOFF
0102
0103
5-178
NEAR.
AL.OTIMER OFL
oTtMER OFI:,o
CXiOTlfIIER HIGH
OX. OT I MER:).OI
MOV
MOV
MOV
RET
OTIMER LOI,DX
:~:=::~~OCX
SET T I ME COUNT
SET T I ME COUNT LOW WORD
SET THE T I tIE COUNT HIGH lORD
RESET OVERFLOW FLAG
RETURN WI TH NO CARRY
CALL
"C
lPD· IPR
RTC:Z.
GET RTC TIME
CHECK FOR LPDATE IN PROCESS
EXIT IF ERROR (CY. II
Mav
CALL
Mav
Mav
CALL
AND
Mav
Mav
CALL
Mav
Mav
CALL
Mav
AL,CMOS SECONDS
CMOS READ
DH,At:
AL,CMOS REG a
cec
CMOS READ
-
AL,O"D"ooooo I a
DL,AL
AL,CMOS MINUTES
CMOS REiD
OL,AI:
AL,CMOS HOURS
CMOS REiD
CH,At
RTC_301
8A
80
E8
8A
80
E8
8A
ao
E8
88
EI
24
DC
10
OA
a6
EI
Fa
CI
E6
00
0000 E
EI
OZ
0000 E
EI
04
0000 E
DaDa
0000 E
62
02
E2 01
C2
EO
0000 E
10
Ea
8A
10
Ea
IA
ao
Ea
8A
10
E8
aA
Fa
LPD IPR
RTC-3!
RTC:STA
MOV
MOV
MOV
"H,DH
AL,CMOS SECONDS
CMOS WRTTE
AH,CC
AL,CMOS MINUTES
CMOS WRTTE
AH,cR
AL,CMOS HOURS
CALL
CMOS . .TTE
MDV
CALL
MOV
MOV
CALL
Mav
CALL
~~r~=~~_~EG_a
AND
AL,oTIO~Oloa
OR
AL,OOOOOOIOI
01...000000011
AL,OI..
AH,AL
CMOS_WRtTE
AND
OR
.CHG
CALL
OLe
RET
OT
0000
DO
oa
0000
"0
D'
0000
CI
32
0000
E8
RTC_401
CALL
""
MOV
E
CALL
CMOS READ
MOV
MOV
CH,At:
AL,CMOS YEAR
CMOS REID
CL,At
AL,CMOS CENTURY
CALL
E
MOV
Mev
CALL
MOV
cec
CMOS READ
CH,AI:
E
E
E
£
GET RTC DATE
CtECK FOR UPDATE IN PROCESS
EXIT IF ERROR (CV. II
ADDRESS DAY OF MONTH
READ DAY OF MONTH
SAYE
ADDRESS MONTH
READ MONTH
SAVE
ADDRESS YEAR
READ YEAR
SAVE
ADDRESS CENTURY LOCATION
GET CENTURY BYTE
SAVE
SET ChO
W. TH
CALL
"NC
CALL
UPD IPR
RTC-15
RTC:STA
SET RTC DATE
CHECK FOR UPDATE IN PROCESS
GO . AROUND I F NO ERROR
ELSE INITIALIZE CLOCK
MOV
CALL
Mav
Mav
CALL
MDV
MDV
CALL
MDV
Mav
CALL
Mav
May
AX, CMOS DAY lEEK
CMOS IRTTE AH,DC
AL. CMOS DAY MONTH
CMOS IRTTE AH,DR
AL,CMOS MONTH
CMOS IRTTE
AH,Ct:
AL, CMOS YEAR
CMOS IRTTE:
AH,cR
CALL
MOY
E
CALL
E
XCHG
CALL
AND
BIOS2
GET T I ME IYTE· - SECONDS
ADDRESS SECONDS
I.JDDATE SECONDS
GET TIME IYTE - MINUTES
ApoRESS MINUTES
UPDATE MI NUTES
GET T I ME IYTE - HOURS
ADORE$S HOURS
LPDATE ADDRESS
ADDRESS ALARM REGISTER
READ CURRENT VALLE
MA$K FQR VALID atT POSITIONS
TURN ON 24 HOUR MODE
USE ONLY TI-E DSE SIT
GET DAY LIGHT SAVINGS TIME BIT (DSE)
PLACE I N WORK REG I STER AND GET ADDRESS
SET NEW ALARM I I TS
SET CV. 0
RETURN WITH cv. a
RETURN
RTC_55I
E
SET RTC TIME
CtECK FOR UPDATE IN PROCESS
GO AROUND I F CLOCK OPERATI NG
ELSE TRY INITIALIZING CLOCK
RET
RTC_501
73 03
Ea 0154 R
.1 0006
EI 0000
aA E2
lOOT
EI 0000
aA E6
10 oa
0000
aA EI
aD o.
I I 0000
aA E5
10 32
Ee 0000
88 0801
18 0000
24 TF
a, EO
118 0000
F8
CI
AL ,CMOS DAY MONTH
CMOS REiD OL,At:
AL,CMOS MONTH
E
C3
~:!:R
MOV
MOV
CALL
E
I!i 016S R
SET ADDRESS OF SECONDS
GET SEC~S
SAVE
ADDRESS ALA~M REGISTER
READ CURRENT VALLE OF DSE alT
MASK FOR VALID DSE alT
SET (DLI TO ZERO FOR NO DSE SIT
SET ADDRESS oF MINUTES
GET MINUTES
SAVE
SET ADDRESS oF HOURS
GET HOURS
SAVE
SET CY= 0
InC_311
RTC_49I
e:.
CALL
"NC
CALL
READ T ME COUNT
GET THE OVERFLOW. FLAG
AND TI-EN RESET THE OVERFLOW FLAG
GET COUNT Of" T UE HI GH WORD
GET COUNT OF' ·T I r.E LOW lORD
RETURN WI TH NO CARRY
RETURN WITH RESULT I N CARRY FLAG
RET
E8 0161 R
73 03
E8 0154 R
I
PRaC
MOV
MOV
MOV
MOV
"ET
RTC_201
E
OOAI
OOAa Ea DI'S R
OOAa T~ 10
OOAD
OOAF
Ooaif:
0084
00a6
001.
OOIB
ooaD
OOCO
00C2
00C4
OOCT
DOC.
OQCA
OOCA
04-21-86
RTC_IOI
DOlO
DOlO EI Ot68 R
0013 T2 IF
DOlI
OO&T
QOIA
OOIC
DOlE
0061
0063
0065
006 T
006A
006C
006E
OOTI
0073
00T4
00T4
RTC_OO
1-'
2.00
OLC
RET
~~MO':TT~TURY
~:O:T:~~_REG_a
AL.OTFH
AH.AL
CMOS_WRITE
RESOL. TS I N CARRY FLAG
ADDRESS OF DAY OF WEEK BYTE
LOAD ZEROS TO DAY OF WEEK
GET DAY OF MONTH BYTE
ADDRESS DAY OF' MONTH BYTE
WR I TE OF DAY OF MONTH REG I STER
GET MONTH
ADDRESS MONTH SY~
WRITE MONTH REGISTER
GET ,YEAR BYTE
ADDRESS YEAR REG I STER
WR I TE YEAR REG I STER
GET CENTURY SY1E
ADDRESS CENTURY BYTE
WRtTE CENTURY LOCATION
ADDRESS ALARM REG I STER
READ CUMI!NT SETT I NGS
CLEAR 'SET BIT'
MOVE TO WORK REG I STER
AND START CLOCK UPDATING
SET CY. 0
RETURN ChO
.-.
04-21-1S6
•••
PAGE
RTC_60,
221
0104
222
0104 aD DB
223
224
2215
226
•• T
0 I 06
0109
oloa
oloe
228
OIOE £8 0168 R
229
230
011'13 03
0113 Ie 01154 R
ES 0000 E
AI 20
F'
71S 33
231
0116
2320116lSA.E6
233011S8001
234 aliA Ee 0000 E
2315
0110 SA El
236
23T
238
011P' aD 03
0121 ES 0000 E
0124 SA £15
ao
239
0126
240
241
01Z8 Ee 0000 E
Olza E4 AI
015
242
0120 24 FE
243
244
2415
246
012F E6 AI
0131 sa DaDa
0134 Ee 0000 E
0137 24 IF
247
013' DC 20
248
249
2150
2151
2152
2153
•••
0138
0130
0140
0141
0141
0144
2158
25'
0148 24 151
0140 86 EO
261
262
01152 Fe
QUIS C3
264
01154
266
01154
261
01154
268
269
210
211
01157
DISA
011S0
0160
OR
XCHG
CALL
eLe
SET RTC ALARM
ADDRESS ALARM
REAC ALARM REG I STER
CHECK FOR ALARM ALREADY ENABLED
SET CARRY I N CASE OF ERROR
ERROR EX I T I F ALARM SET
CHECK FOR UPDATE IN PROCESS
SKIP INITIALIZATION IF NO ERROR
ELSE I NIT I ALI ZE CLOCK
GET SECONDS aYTE
ACDRESS THE SECONDS ALARM REG I STER
I NSERT SECONDS
GET MINUTES PARAMETER
, ADDRESS MINUTES ALARM REGISTER
INSERT MI NUTES
GET HOURS PARAMETER
ADCRESS HOUR ALARM REG I STER
I NSERT HOURS
READ SECOND I NTERRUPT MASK REG I STER
ENABLE ALARM TIMER BIT (CY= 0)
WR I TE UPDATED MASK
ADDRESS ALARM REGI STER
READ CURRENT ALARM REG I STER
ENSURE SET SIT TURNED OFF
TURN ON ALARM ENABLE
MOYE MASK TO OUTPUT RECi I STER
WR I TE NEW ALARM MASK
SET CY .. 0
CLEAR AX REG I STER
RETURN W' TH RESULTS I N CARRY FLAG
MOV
CALL
ANO
XCHG
CALL
eLe
~~or~~~~_REG_B
AL,sTH
AH,AL
CMOS_WRITE
RESET ALARM
ADDRESS ALARM REGISTER (TO BOTH AH.AL)
READ ALARM REG I STER
TURN OFF ALARM ENABLE
SAVE DATA AND RECOVER ADDRESS
RESTORE NEW VALUE
SET CY-= 0
RETURN WITH NO CARRY
ENDP
ae
260"
Ee 0000 E
SS 820B
Ee 0000 E
aD DC
212
0162 ES 0000 E
01615 aD 00
0167 EIS 0000 E
016A C3
2TT
2T.
0168
279
0168
INITIALIZE REAL TIME CLOCK
ADDRESS REGISTER A AND LOAD DATA MASK
INITIALIZE STATUS REGISTER A
SET ·SET BIT" FOR CLOCK INITIALIZATION
AND 24 HOUR MODE TO REG I STER B
ADDRESS REG I STER C
READ REGISTER C TO INITIALIZE
I ADDRESS REGISTER 0
I READ REGISTER 0 TO INITIALIZE
RTC STA PROC
MOY
CALL
MOV
CALL
MOV
CALL
""V
CALL
RET
RTC_STA ENDP
Z80
0161 151
281
282
283
284
285
286
281
281S
289
290
291
292
293
294
295
016C
016F
016F
0111
0112
0115
0111
0119
OllA
011C
OllE
OllF
OllF
011S0
011S1
291
011S2
•••
AH,OM
AL I CMOS SEC ALARM
CMOS WRTTE AH,CI:
AL,CMOS MIN ALARM
CMOS WRTTE AH,cR
AL I CMOS HR ALARM
CMOS WRTTEAL,IRTBOI
AL,OFEH
INTBOI,AL
AX,X·CMOS REG a
CMOS REAOAL,oTFH
AL,20H
AH.AL
CMOS_WRITE
=~g:~;A
RET
213
274
2715
.TO
MOV
MOV
CALL
MOV
MOV
CALL
MOV
MOV
CALL
'N
014F ES 0000 E
•••
UPC IPR
RTC_"
0000
01415
0' 415 ae OBOS
0148 ES 0000 E
•••
CALL
JNe
CALL
C3
2515
ze6
2157
260
AL,CMcS REG B
CMcS REAC AL , 2'D'H
ANO
OUT
MOV
CALL
ANO
86 EO
Ee 0000 E
Fe
sa
MOV
CALL
TEST
STe
JNZ
89 0320
UPD IPR PROC
PUSH
MOV
NEAR
ex
CX,ISOO
WAIT TILL UPDATE NOT IN PROGRESS
SAYE CALLERS REGI STER
SET TIMEOUT LOOP COUNT
UPD_I 0,
BO
FA
E8
A8
14
FB
E2
33
F9
59
FA
C3
OA
0000 E
80
06
F3
CO
MOV
eLI
CALL
TEST
JZ
ST.
LOOP
XOR
STe
UFI'D_901 POP
eLI
RET
AL, CMOS_REG_A
CMOS READ
AL,IS'D'H
UPD_90
UFI'D 10
AX.AX
ex
ADDRESS STATUS REGISTER A
NO T I MER I NTERRUPTS CUR I NG UPDATES
READ UPDATE 1 N PROCESS FLAG
IF UIP BIT IS ON ( CANNOT READ TIME)
EX IT WI TH CY.. 0 I F CAN READ CLOCK NOW
ALLOW INTERRUPTS WHILE WAITING
LOOP TILL READY OR TIMEOUT
CLEAR RESULTS I F ERROR
SET CARRY F'CR ERROR
RESTORE CALLERS REGI STER
INTERRUPTS OFF CURING SET
RETURN WITH CY FLAG SET
BIOS2
5-179
1-0
04-21 -86
PAGE
1--- HARDWARE INT 70 H -- ( IRQ LEVEL
8) -----------------------------------1 ALARM I NTERRUPT HANDLER (RTC)
1
TH I S ROUT I NE HANDLES THE PER I 00 I C AND ALARM I NTERRUPTS FROM THE CMOS
I
TIMER.
INPUT FREQUENCY IS 1.024 KHZ OR APPROXIMATELY 1024 INTERRUPTS
I
EVERY SECOND FOR THE F"ER I 00 I C I NTERRUF"T •
FOR THE ALARM FUNCT I ON.
I
THE INTERRUPT WILL OCCUR AT THE DESIGNATED TIME.
2.8
2"
300
301
302
303
300
30S
30.
30T
308
30'
310
311
312
313
I
1
I
INTERRUF"TS ARE ENABLED WHEN THE EVENT OR ALARM FUNCTION IS ACTIVATED.
FOR THE EVENT INTERRUF"T. THE HANDLER WILL DECREMENT THE WAIT COUNTER
AND WHEN IT EXF"IRES WILL SET THE DESIGNATED LOCATION TO 80H.
FOR
I
I
THE ALARM INTERRUPT. THE USER MUST PROV I DE A ROUT I NE TO INTERCEPT
THE CORRECT ADDRESS FROM THE VECTOR TABLE I NVOKED BY INTERRUPT 4AH
:
I
PRIOR TO SETTING THE REAL TIME CLOCK ALARM (INT IAH. AH= 06H).
:
I
1---- - -- - - - - - -- ---- -- -- ---------------- -------- --------- ----- -- - -- ------ -- ------
314
315
316
311
0182
0182 IE
0183 50
0184 51
RTC_INT ~~~~
318
319
0185
RTC_I_!
320
321
0185 88 8BBC
0188 E6 70
322
323
018A 90
0188 £4 71
324
325
.2.
0180 A8 60
0 taF 74 SC
32T
328
329
330
0191
0193
0195
0196
0198
019A
Olte
86 EO
E6 10
90
£4 71
019E
alAI
01Al
OIAe
£8 0000 E
81 2£ C0ge R 0300
331
332
333
"0
PUSH
PUSH
337
338
339
340
301
.02
303
344
345
MOV
OUT
NOP
IN
TEST
"Z
22 C4
A8 40
74 3F
1-----
.3S
33.
t
347
0lB490
348
349
350
0lB5 £4 11
0187 24 SF
0189 86 C4
351
35Z
0188 £6 70
018086 C4
353
OleF E6 11
354
OICI 58
355
356
0 I C2 F6 06 eOAO R 02
0 I CT C6 06 OOAO R 00
I SAVE FLAGS AND GET ENABLE ADDRESS
I WR ITE ALARM ENABLE MASK ADDRESS
I 110 DELAY
:t:~~OS_DATA
TEST
AL I 01000000B
RTC_I_5
"Z
TEST
MOV
LOS
MOV
0105 £8 0000 E
0108 C6 06 OOAO R 83
363
0100
364
0100 A8 20
365
aloP' 74 OA
3 ••
361
368
"Z
aiEl 80 OF
0lE3 E6 70
369
370
311
01E5 Fe
0lE6 52
OIET CD 4A
MOV
OUT
STO
PUSH
0lE8
31&
01EB ES 98
OlEO
OlEO BO
O'EF E6
OIFI 90
OlF2 E4
OlF4 80
OlF6 E6
OlF8 E6
OIFA 5F
01FB!i8
OIFC IF
OIFD CF
"Z
CALL
MOV
RTC I !il
- TEST
OF
70
71
20
AD
20
OIFE
5-180
TEST FOR ALARM INTERRUPT
SK I P USER I NTERRUPT CALL I F NOT ALARM
AL I CMOS SHUT DOWN
POINT TO DEFAULT READ ONLY REGISTER
ENABLE NM I AND CMOS ADDRESS TO DEF AUL T
I NTERRUPTS BACK ON NOW
:=~g_:::+_~t:~:g2H
CMOS_PO~T .AL-
OX
INT
OAH
POP
OX
RTC I 91
- MOV
OUT
NOP
IN
MOV
OUT
OUT
POP
POP
POP
IRET
RTC_INT ENDP
BIOS2
TRANSFER TO USER ROUTI NE
BLOCK I NTERRUPT FOR RETRY
RESTART ROUTINE TO HANDLE DELAYED
ENTRY AND SECOND EVENT BEFORE DONE
RTC I 71
- JMP
3.0
391
ESTABLISH DATA SEGMENT ADDRESSABILITY
AND SET "WAIT~ BACK TO BUSY & POSTED
AL I 00 I OOOOOB
RTC_I_7
~~OS_DATAIAL
CLI
OfEA FA
380
381
382
383
384
385
386
387
388
389
ODS
ORTC_WA IT_FLAG. 083H
:t:~=~~_DATA
ALlAH
CMOS PORT. AL
ALlAH
361
362
3T.
3TT
318
319
o I ,DloRD I5TR OUSER FLAG
BYTE PTR [DI]180HRTC_I_5
IN
AND
0100 C6 05 80
0103 704 08
373
1 ESTABLISH DATA SEGMENT ADDRESSABILITY
I DECREMENT COUNT LOW BY II I 024
I ADJUST HIGH WORD FOR LOW WORD BORROW
I SKIP TILL 32 BIT WORD LESS THAN ZERO
SAVE INTERRUPT FLAG MASK
I NTERRUPT ENABLE REG I STER
WR ITE ADDRESS TO CMOS CLOCK
I/O DELAY
READ CURRENT ENABLES
TURN OFF,PIE
GET CMOS ADDRESS AND SAVE VALUE
ADDRESS REGI STER 8
GET NEW I NTERRUPT ENABLE MASK
SET MASK IN INTERRUPT ENABLE REGISTER
GET I NTERRUPT SOURCE BACK
CHECK FOR ~WAiT~ FUNCTiON AcrtVE.
SET FUNCTION ACTIVE FLAGS OFF
SET UP (DSIDI) TO POINT TO USER FLAG
TURN ON USERS POSTED FLAG
SKIP IF "EVENT_WAIT" FUNCTION
AX
AXIX·(CNOS REG B+NMI)
CMOS_PORT I 'AL -
XCHG
OUT
XCHG
OUT
POP
alcc C5 3£ 0098 R
0lE9 5A
ODS
ORTC LOW.0976
ORTC-HIGHIO
RTC_T_5
TURN OFF PERIODIC INTERRUPT ENABLE
PUSH
MOV
OUT
NOP
3151
374
I ALLOW ONLY SOURCES THAT ARE ENABLED
I CHECK FOR F"ER I 00 I C INTERRUPT
I SKIP IF NOT A PERIODIC INTERRUPT
DECREMENT WAIT COUNT BY INTERRUPT INTERVAL
358
359
3.0
312
I READ AND RESET I NTERRUPT REQUEST FLAGS
I CHECK FOR EITHER INTERRUPT PENDING
I EXIT IF NOT A VALID RTC INTERRUPT
1 READ CURRENT ALARM ENABLE MASK
CALL
SUB
SBB
"F'
AL. CMOS OAT A
ALIO! lO(5'OOOB
RTC_I_9
AH.AL
CMOS_PORT I AL
"NC
346
I
CHECK FOR SECOND I NTERRUF"T
AX. (CMOS REG B+NMI) tli+CMOS REG C+NMI 1 ALARM AND STATUS
CMOS_PORTIAL: ~7bTgEt~~RM FLAG 'MASK ADDRESS
IN
AND
73 2F
1-----
I
ALARM INTERRUPT
1 LEAVE INTERRUPTS 0 I SABLEO
I SAVE REGISTERS
XCHG
OUT
NOP
83 IE 009£ R 00
alAE 50
0I
88 8888
0182 E6 10
FA"
OS
AX
01
AL I CMOS SHUT DOWN
CMOS_PO"T tAL-
:t:~~~S_DATA
INTBOO.AL
INTAOO.AL
01
EXIT - NO PENDING INTERRUPTS
POINT TO DEFAULT READ ONLY REGISTER
ENABLE NMI AND CMOS ADDRESS TO DEFAULT
110 DELAY
OPEN ST ANDey LATCH
END OF I NTERRUPT MASK TO 8259 - 2
TO 8259 - 2
TO 8259 - I
RESTORE REGI STERS
AX
OS
I END OF INTERRUPT
1-'
04-21-86
3.'
3.3
3.'
PAGE
1--- INT 05 H --------------------------------------------------------------PR I NT SCREEN
3.4
-THIS LOGIC WILL BE INVOKED BY INTERRUPT DSH TO PRINT THE SCREEN.
THE CURSOR POSITION AT THE TIME THIS ROUTINE IS INVOKED WILL BE
3 ••
3.T
SAVED AND RESTORED UPON COMPLET I ON.
THE ROUT I NE I S I NTENDED TO
RUN WITH INTERRUPTS ENABl.ED.
IF A SUBSEQUENT PRINT SCREEN KEY
IS DEPRESSED WHILE THIS ROUTINE IS PRINTING IT WIl.l. BE IGNORED.
THE BASE PRINTERS STATUS IS CHECKED FOR NOT BUSY AND NOT OUT OF
PAPER.
AN INITIAL STATUS ERROR WIl.l. ABEND THE PRINT REQUEST.
ADDRESS 0050,0000 CONTAINS THE STATUS OF THE PRINT SCREEN,
3'.
3.'
400
401
40.
403
404
40.
40.
40T
40.
40.
410
4"
50 I 0
=
°
= I
= 255
PR I NT
FROM
PRINT
ERROR
SCREEN HAS NOT BEEN CAl.LED OR UPON RETURN
A CALl. THIS INDICATES A SUCCESSFUl. OPERATION.
SCREEN IS IN PROGRESS - IGNORE THIS REQUEST.
ENCOUNTERED OUR I NG PR I NT I NG.
DIFE
412
413
414
415
416
41 T
418
419
420
421
422
423
4'4
4 ••
426
421
428
4"
430
431
43.
4"
434
43.
43.
43T
DIFE IE
OIFF!SO
0200 53
0201 51
0202 52
0203 EB
0206 80
0208 14
0200 e6
0212 FB
0213 84
0215 CD
438
0221
439
0223 CD 11
... 040
0225 SO F4 80
441
442
0228 F6 C4 AD
0228 75 4E
PUSH
PUSH
PUSH
PUSH
PUSH
CALI..
0000 E
3E 0100 R 01
14
06 0100 R 01
COP
""
OF
10
0211 8A CC
0219 8A 2E 0084 R
0210 FE CIS
as
AX
BX
ex
ox
oos
=~T;~US_BYTE, I
oov
STt
"OV
INT
OSTATUS_BYTE, I
oov
"OV
INC
CL,AH
CH,OROWS
AH,OFH
10H
eH
; DELAY I NTERRUPT ENABLE TILL FLAG SET
I SAVE WORK REGISTERS
I
;
I
I
I
I
I
I
I
;
I
I
I
I
I
USE 00040,0100 FOR STATUS AREA STORAGE
GET STATUS BYTE DATA SEGMENT
SEE IF PRIRT ALREADY IN PROGRESS
EXIT IF PRINT ALREADY IN PROGRESS
INDICATE PRINT NOW IN PROGRESS
MUST RUN WITH I NTERRUPTS ENABLED
WILL REQUEST THE CURRENT SCREEN MODE
I ALl " MODE
(AH) = NUMBER COLUMNS/LINE
IBH)= VISUAL PAGE
WILL MAKE USE OF ICX) REGISTER TO
CONTROL ROWS ON SCREEN & COLUMNS
AD,JUST ROWS ON 0 I SPLAY COUNT
(CL) = NUMBER COLUMNS/LINE
I CH) = NUMBER OF ROWS ON 01 SPl.A Y
I ------ - - - - - - --- - - - -------- -- -- ---------- - ------------ - ---- ------
I
I
;
I
AT THIS POINT WE KNOW THE
AND THE NUMBER OF ROWS ON
THE PAGE IF APPLICABLE IS
(OS), (AX), (BX), (CX), (OX)
COLUMNS/LINE COUNT IS IN (CL)
THE DISPLAY IS IN (CHI.
IN ISH).
THE STACK HAS
PUSHED.
I
XOR
MOV
INT
XOR
TEST
,JNZ
OX,DX
AH,02H
l1H
AH,080H
AH, OAOH
PRI80
FIRST PRINTER
SET PRINTER STATUS REQUEST COMMAND
REQUEST CURRENT PRINTER STATUS
CHECK FOR PRINTER BUSY (NOT CONNECTED)
OR OUT OF PAPER
ERROR EXIT IF PRINTER STATUS ERROR
0220 E8 0281 R
CALI..
CRLF
CARR I AGE RETURN 1..1 NE FEED TO PR INTER
0230
0231
0233
0235
0236
0237
PUSH
MOV
INT
POP
PUSH
XOR
CX
AH I 03H
10H
CX
OX
OX,OX
SAVE SCREEN BOUNDS
NOW READ THE CURRENT CURSOR pas I T I ON
AND RESTORE AT END OF ROUTINE
RECALL SCREEN BOUNDS
PRESERVE THE OR I G I NAL POS I T I ON
INITIAL CURSOR (0,0) AND FIRST PRINTER
I
1-------------- ------------ ------ ----- ---- -------- -------- ------
021F 33 02
B4 02
443
444
44.
446
441
448
449
450
451
4 ••
4.3
4.4
4 ••
4 ••
4,T
4 ••
4 ••
4.0
4.,
4 ••
4.3
4.4
4.'
4 ••
4.T
4 ••
4.'
4TO
4TI
4T.
4T3
414
4T.
4T.
4TT
4T.
4T.
4.0
4.,
4 ••
4.3
4.4
4 ••
4 ••
4.T
4 ••
4 ••
4'0
4.,
4 ••
4.3
4.4
4 ••
4'.
4.T
4 ••
4"
500
.01
.02
.03
.04
'0'
51
84 03
CD 10
59
52
33 02
I -- - - - -------------- --- - - --- ----- -- ------------- - - --------- ------
I
I
TH I S LOOP I S TO READ EACH CURSOR POS I T I ON FROM THE
(BH)= VISUAL PAGE
(CH)= ROWS
SCREEN AND PRINT IT.
I
I
1- ---- - -- - -------- - - --- ---- -- ---------- - --- --------- -- -------- ---
0239
0239
023B
0230
023F
02041
02043
02045
02047
02047
02048
0204A
0204C
0204E
0204F
0252
02504
0256
0258
025A
025C
025E
025F
0262
0263
0265
0267
52
33
32
CD
SA
F6
75
FE
3A
15
32
8A
52
E8
5A
FE
3A
75
0269
026A
026C
026E
026F
02704
5A
B<40
CD
FA
C6
EB
0276
0216
0277
0279
021B
027B
021C
0281
0281
0282
0283
02804
0285
0286
0281
PRIIOI
B04
CO
B04
CD
OA
Hi
BO
oov
INT
oov
INT
OR
"NZ
oov
02
10
08
10
CO
02
20
AH , 02H
10H
AH,08H
10H
AL,AL
PRI20
AL, •
I INDICATE CURSOR SET REQUEST
NEW CURSOR POSITION ESTABLISHED
I NO I CATE READ CHARACTER FROM D I SPLAY
CHARACTER NOW IN (ALI
SEE IF VALID CHAR
,JUMP IF VALID CHAR
ELSE MAKE I T A BLANK
PRI201
02
E04
17
PUSH
ox
XOR
XOR
INT
POP
DX,OX
AH,AH
TEST
I TH
ox
C04 29
22
C2
CA
OF
02
E2
"NZ
INC
e"p
"NZ
XOR
oov
CL,OL
PRll0
DL,DL
AH,DL
0287 R
PUSH
CALL
CRLF
POP
INC
COP
C6
EE
DO
"NZ
POP
oov
INT
eLI
"OV
""P
02
10
06 0100 R 00
OB
AH,29H
PRI70
OL
OX
OX
OH
CH,OH
PRll0
ox
AH , 02H
10H
OST ATUS_BYTE, 0
SHORT PRI90
GET CURSOR POS I T I ON
I NO I CATE REQUEST CURSOR SET
CURSOR POS I T I ON RESTORED
; BLOCK INTERRUPTS TILL STACK CLEARED
; MOVE OK RESULTS FLAG TO STATUS BYTE
I EXIT PRINTER ROUTINE
-
10H
ERROR EXIT
GET CURSOR POS ITiON
INDICATE REQUEST CURSOR SET
CURSOR POS I T I ON RESTOREO
eLI
"OV
OST ATUS_BYTE, OFFH
BLOCK INTERRUPTS TILL STACK CLEARED
SET ERROR FLAG
POP
POP
POP
POP
POP
ox
ex
BX
AX
PRI701
POP
"OV
INT
5A
B<40 02
CO 10
SAVE CURSOR POSITION
INDICATE FIRST PRINTER IOX= 0)
I NO I CATE PR I NT CHARACTER IN (AI..)
PR I NT THE CHARACTER
RECALL CURSOR POS I T I ON
TEST FOR PR I NTER ERROR
EX I T I F ERROR DETECTED
ADVANCE TO NEXT COLUMN
SEE IF AT END OF LINE
I F NOT LOOP FOR NEXT COLUMN
BACK TO COLUMN 0
(AHI =0
SAVE NEW CURSOR POS I T I ON
I.. I NE FEED CARR I AGE RETURN
RECALL CURSOR pas I T I ON
ADVANCE TO NEXT I.. I NE
FINISHED?
I F NOT LOOP FOR NEXT I.. I NE
ox
AH,02H
PR180:
FA
C6 06 0100 R FF
PRI901
'A
59
5B
58
IF
CF
IRET
PRINT_SCREEN_I
as
EXIT ROUTINE
RESTORE ALL THE REG I STERS USED
I RETURN WITH INITIAL INTERRUPT MASK
ENOP
BIOS2
5-181
1--
..-
.,.
04-21-86
•• 7
•• 8
e09
0217
1S11
IS 12
513
0287 33 02
0289 Be 0000
021C CD 17
....,.
514
IS HI
516
028E ae OOOA
0291 CD 11
0293 C3
ell
0294
..•••,
...'2_
NEAR
XOR
ox.ox
I ASSUME FIRST PRINTER (OX. 0)
I7H
I
THE CARR I AGE RETURN CHARACTER
I NOW GET THE LINE FEED AND
I
SEND IT TO THE BIOS PRINTER ROUTINE
MOV
INT
MOV
INT
RET
E_
I
Ax,eFt
I
I
I
'2.
I
I
I
I
"2
I
I
AX,LF'
I7H
IS 615536, RESULTING IN APPROXIMATELY 11.2 INTERRUPTS EVERY SECOND.
THE INTERRUPT HANDLER MAINTAINS A COUNT (4016C) OF' INTERRUPTS SINCE
POWER ON TIME, WHICH MAY BE USED TO ESTABLISH TIME OF' DAY.
THE INTERRUPT HANDLER ALSO DECREMENTS THE MOTOR CONTROL COUNT (40.40)
OF THE DISKETTE, AND WHEN IT EXPIRES, WILL TURN OFF THE
DISKETTE MOTOR ( .), AND RESET THE MOTOR RUNN I Ne FLAGS.
THE INTERRUPT HANDl..ER WILL ALSO I NVOKE A USER ROUT I NE THROUGH
INTERRUPT ICH AT EVERY TIME TICK. THE USER MUST CODE A
ROUT I NE AND PLACE THE CORRECT ADDRESS I N THE VECTOR TABLE.
I
0294
0294 F"B
0295 IE
540
0296 ISO
541
1S42
543
544
0297 1S2
0298 EI 0000 E
029B FF' 06 oa6C R
029F 15 04
1S4!5
02A1 FF" 06 006E R
1S46
547
548
02A5
02A15 83 3E 006E R Ie
02AA. 15 15
549
DZAC 81
3E OD6C R OOBO
ISISQ
02B2
OD
n
•• 2
TIMER INT ,
sTI
PUSH
PUSH
PUSH
CALL
INC
JNZ
INC
741
1-----
C""
JNZ
C""
JNZ
PROC
FAR
I I NTERRUPTS BACK ON
OS
AX
eTIMER LOW
74
eT I MER_H I GH
;~IMER-HIGH,
018H
;~ I MER_LOW. OBOH
554
02B4 28 CO
SUB
AX,AX
02B6 A3 006E R
02B' A3 OD6C R
557
•••
•••
oeBC C6 06 0010 R 01
:~
:~: ;::~~~:~~X
561
02CI
!!~
562
563
564
565
oac 1
02CIS
02CT
D2ce
566
02CE SA 03F2
FE
75
80
aD
TEST FOR DISKETTE TIME OUT
DEC
JNZ
AND
DE 0040 R
DB
26 OOSF R FO
ac
MOV
MOV
OUT
:~~g=_ST ATUS ,OFOH
I DECREMENT 0 I SKETTE MOTOR CONTROL
I RETURN iF' COUNT NOT OUT
• TURN OFF MOTOR RUNNING BITS
DX,03F2H
DX,AL
I FDC CTL PORT
I TURN OFF THE MOTOR
•
T I MER TICK INTERRUPT
I TRANSFER CONTROL TO A USER ROUT I NE
;:OTOR_COUNT
561
0201 EE
569
0202
510
0202 CD IC
INT
ICH
512
573
574
575
0204 5A
0205 ao 20
0201 FA
0208 E6 20
POP
MOV
OX
ALIEOI
T6I
CLI
511
0208 IF
OUT
POP
POP
1S18
DaDC CF
IRET
516
..•••,
'7'
580
582
02DA 58
0200
TIMER_INT_'
0200
CODE
5-182
BIOS2
I GO TO 0 I SKETTE_CTL
TIMER HAS GONE 24 HOURS
55!
1-----
SAVE MACHINE STATE
ESTABLISH ADDRESSABILITY
INCREMENT T I ME
GO TO TEST DAY
INCREMENT RICH WORD OF TIME
TEST DAY
TEST FOR CZJUNT EQUALING 24 HOURS
GO TO 0 I SKETTE_CTL
OX
ODS
!S1S6
."
•
I
•
•
I
•
•
•
I
1-------------------------------------------------------------------------------
e3T
538
539
._.
SEND CR,LF' TO FIRST PRINTER
I GET THE PR I NT CHARACTER COMMAND AND
1-- HARDWARE INT 01 H -- ( IRQ LEVEL 0 ) -------------------------------------I
I
I
TH I S ROUT I NE HANDLES THE T I MER I NTERRUPT FROM FROM CHANNEL 0 OF
•
I
THE 1254 TIMER.
INPUT FREQUENCY IS 1.19311 MHZ AND THE DIVISOR
•
...•••'2'
'"•••
CARRIAGE RETURN, LINE FEED SUBROUTINE
PRoe
CRLF
'22
'2'
•2.
.27
.....••••••-
1-----
CRLF
ENDS
ENO
INTAOO,AL
AX
OS
ENDP
I
I
I
I
RESTORE (OX)
GET END OF INTERRUPT MASK
DISABLE INTERRUPTS TILL STACK CLEARED
END OF' INTERRUPT TO 8259 - 1
I RESET MACHINE STATE
I RETURN FROM INTERRUPT
I
.-.
04-21-86
••
,•
•
••••
II
••
.,••
4
0000
PAGE 118.121
TlTL.E ORGS ----- 04/21/86 COMPATIBILITY MODULE
.LIST
CODE
SEGMENT BYTE PUSL I C
PUBLIC
PUBLIC
PUBLIC
T
PUBLIC
PUBLIC
PUBLIC
PUBL.IC
13
PUBLIC
PUBLIC
PUBLIC
••
••
••••••
••••
••••
••
.T
••••
••
••••
••
••'T
••
••••••
••••••
••.T••
••
,.••••
PUBLIC
PUBLIC
PUBL..IC
•T
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PU8L.IC
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBLIC
31
U
P'UBLIC
PUBL.IC
PUBLIC
F'UEiLIC
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBLIC
••
••••••
••
••••
••••
••••••
••.T••
••••T.
T.
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBLIC
&T
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBL.IC
PUBLIC
PUBLIC
PUBL.IC
PUBLIC
PUBLIC
F.A
F3D
F301
FO TBL..
FL..~PY
HRD
K6
K.L
KT
K.
K ••
KII
K"
K"
.,••K"
••
.T
NMI tNT
PR I lilT SCREEN
PO R-
~~~~!:~ECTOR_T ABL..E
YECTOR T ABL..E
YIOEO_"ARMS
ASSUME
CSICODE,DSIDATA
EXTRN
EXTRN
TO
EXTRN
••••
••••
••.,
••
.T
••••
••
••••••
••••••
n
•••••••
•••
•••
•••
•••
•••
•••
'.T
EXTRN
EXTRN
T.
EI02
EI03
EI04
EI05
EI06
EI07
EI08
EI09
EI61
E162
EI63
EI64
E201
E202
E203
E301
E302
E303
E304
E401
E501
E601
E602
FI180
FI181
FI182
FI190
FI191
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
11
D.
D.A
DISK BASE
~~~~y_RETURN
BOOT STRAP 1 ,NEAR
CASS!TTE I~ I.NEAR
OII.NEAR- DISK INT I,NEAR
DI SK-SETOPI NEAR
OISK!TTE 10 liNEAR
OSKETTE !'ETOP, NEA.R
EQUIPMEIiIT liNEAR
INT 2811N!AR
K161NEAR
KEYBOARD 10 1, NEAR
I(B I NT IINE'XR
MEiORY-S I ZE DET 1 I NEAR
NMI INT IIN!AR PRlliIT S'fREEN liNEAR
PR I NT!R 10 liNEAR
RE OIRE'fTIIiIEAR
RS2'32 10 liNEAR
RTC IIiITIIiIEAR
SEERINEAR
START I,NEAR
TIME ~F DAY liNEAR
TIMER' -IIiIT liNEAR
YIDEO:IO_TINEA.R
EXTRN
T'
T'
T.
T.
T.
AI
CONF TBL..
g~T_~HAR_GEN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
;------------------------------------------------------------------------------I
•
;
,
,
;
I
I
THIS MOOUL..E HAS BEEN ADDED TO FACIL..ITATE THE EXPANSION OF THIS PROGRAM.
IT AL..LOWS FOR THE FIXED ORG STATEMENT ENTRY POINTS THAT HAYE TO REMAIN
AT THE SAME ADDRESSES.
THE USE OF ENTRY POINTS AND TABL..ES WITHIN THIS
MODULE SHOUL..D BE AYOIDED-AND ARE INCLUDED ONL..Y TO SUPPORT EXISTING CODE
THAT YIOL..ATE THE STRUCTURE AND DESIGN OF BIOS.
AL..L.. BIOS ACCESS SHOULD
USE THE DOCUMENTED INTERRUPT YECTOR INTERFACE FOR COMPATIBILITY •
I
•I -- ---------- ---- ------ - -------------- - --- - -- - - - ---------- - ---------- -- -- - - - ----•
ORGS
5-183
1-2
IBM Personel COMputel" MACRO Aaaembler
Vera Ion 2.00
ORGS ----- 04/21/86 COMPATIBILITY MODULE
lOS
100
110
III
"'
113
II.
115
I 16
I I7
118
119
120
'"
'"'"
PAGE
,-------------------------------COPYRIGHT NOTICE
I
0000
0000 31
32
2E
31
31
20
ORG
38 58 31 34 36
20 43 4F' 50 52
20 49 42 40 20
3938312C20
39 38 36 20 20
20
'18X1462 COPR.
IBM 1981,
1986
I
136
137
138
0058
0058
005B E9 0000 E
41
43
31
41
43
32
3F
52
48
00
52
48
00
3F'
49
45
OA
49
45
OA
3F'
54 59
43 48
54 59
43 48
3F' 00
=
005E 20 31
19 73
42 6F'
45 12
OA
OOll 20 31
19 13
42 6F'
45 12
OA
0090 20 31
19 13
42 6F'
45 12
OA
00A9 20 31
19 13
42 6F
... '" 72
OA
00C2 20 31
19 13
42 6F
45 12
OA
0008 20 31
19 13
42 6F'
45 12
OA
00F4 20 31
19 13
42 6F'
45 12
OA
01002031
19 13
42 6F'
45 12
OA
0126 20 31
19 13
42 6F'
45 72
OA
013F' 20 31
19 13
4F' 10
13 20
53 65
75 6E
55 50
0168 20 31
19 13
4F' 10
13 20
53 65
15 6E
55 50
0191 20 31
69 60
44 61
6F' 74
20 28
53 45
00 OA
0181 20 31
65 60
53 69
12 12
52 15
54 55
20 32
65 60
45 12
OA
0 lEE 20 32
65 60
oloa
5-184
01
DB
'PARITY CHECK I ' ,CR,LF
,PLANAR BOARD PARITY CHECK LATCH SET
D.
DB
'PARITY CHECK 2' ,CR,LF'
;
D••
DB
'17??1',CR,LF'
ORG
ORG
OE05BH
0005BH
I.
11-
I/O CHANNEL CHECK LATCH SET
I
RESET:
"M. START- I
,-------------------------------I
POST ERROR MESSAGES
;------------------------- -------:
,.,
114
115
116
III
118
119
180
181
182
183
184
185
186
181
188
189
190
191
192
193
194
19!i
196
191
198
199
200
201
202
203
204
205
206
201
208
209
210
211
212
213
214
215
216
211
218
219
220
221
DB
1- ---------- --------- - - - - - -- - - - - - - - - -----
0020 50
20
20
0030 50
20
20
0040 3F
OA
0041
173
OOOOOH
;
PAR I TY ERROR MESSAGES
1----------------------------------------
126
121
128
129
130
131
132
133
134
I ••
I ••
144
145
146
141
148
149
150
151
152
153
154
155
156
151
158
159
160
161
16:!!
163
164
165
i 66
161
168
169
110
III
112
I
1--------------- --- -------------11ORG
OEOOOH
I ••
I ••
I.'
,.0
,.0
04-21 -86
RESET START
VECTOR ON TO THE MOVED POST CODE
30
14
61
12
31
65
12
6F'
20
60
64
12
53
20
20
00
EIOI
DB
,
10l-System Board Error',CR,LF' I
30
14
61
12
32
65
12
6F
20
60
64
12
53
20
20
00
EI02
DB
,
102-Syatem BOlrd Error',CR,LF' 1 TIMER FAILURE
30
14
61
12
33
65
72
6F'
20
60
64
72
53
20
20
00
EI03
DB
,
103-Syatem Board Error',CR,LF' I TIMER
30 34 20 53
14 65 60 20
61 72 64 20
El04
DB
,
104-Syatem Board Error' ,CR,LF , PROTECTED MOOE FAILURE
INTERRUPT F'AILURE
INTERRUPT F'AILURE
72
6~
72
!!~
30
14
61
12
35
65
12
6F'
20
60
64
72
53
20
20
00
EI05
DB
•
l05-Syatem Board Error' ,CR,LF' I LAST B042 COMMAND NOT ACCEPTED
30
14
61
12
36
65
12
6F'
20
60
64
72
53
20
20
00
EI06
DB
,
l06-System Board Error',CR,LF' ; CONVERTING LOGIC TEST
30
14
61
12
31
65
12
6F'
20
60
64
72
53
20
20
00
EIOl
DB
,
101-Syatem Board Error',CR,LF I HOT NMI TEST
30382053
14 65 60 20
61 72 64 20
12 6F' 72 00
EI08
DB
,
lOB-System BOIl"d El"l"or',CR.LF' I TIMER BUS TEST
30
14
61
12
39
65
12
6F'
20
60
64
72
53
20
20
00
EI09
DB
,
109-Syatem Boal"d Erl"ol"',CR,LF I LOW MEG CHIP SELECT TEST
36 31
14 65
74 69
4E 6F'
14 20
20 53
29 00
36 32
1465
1469
4E 6F'
14 20
20 53
29 00
36 33
65 20
14 65
20 53
52 15
54 55
20
60
6F'
14
28
45
OA
20
60
6F'
14
28
45
OA
20
26
20
65
6E
50
53
20
6E
20
52
54
EI61
DB
•
161-Systam Optlona Not Sat-(Run SETUPj',CR,LF' J DEAD BATTERY
53
20
6E
20
52
54
EI62
DB
,
162-System Optlona Not Set-(Run SETUP) ',CR,LF' ;CHECKSUM/CONF'IG
54
20
4E
14
20
29
E163
DB
,
163-Tlme & Data Not Set-(Run SETUP)' ,CR,LF ;CLOCK NOT UPOATING
36
6F'
lA
6F
6E
50
30
6F'
12
20
19
20
20
53
00
20
19
12
40
20
45
28
45
OA
40
20
00
EI64
DB
,
164-Mamory Size Error-(Run SETUP) ',CR,LF ;
E201
DB
30 32 20 40
6F' 12 79 20
E202
DB
34
12
65
12
20
29
31
12
6F'
ORGS
CMOS DOES NOT MATCH
20l-Memol"Y Error',CR,LF'
• 202-Memory Addreas Error' ,CR,LF'
; LINE ERROR 00->15
1-'
04-21-86
222
223
224
225
226
221
228
229
230
231
232
233
234
235
236
231
238
239
240
241
242
243
41
13
12
0209 20
65
41
13
12
0224 20
65
64
12
0239 20
19
55
65
20
63
0250 20
40
46
59
64
20
00
32
60
64
20
00
33
19
20
00
33
13
6E
19
69
68
28
45
31
29
64
45
OA
30
6F
64
45
OA
30
62
45
OA
30
14
69
6C
13
65
52
20
22
00
12 65 13
12 12 6F
33
12
12
12
20
19
65
12
40
20
13
6F
E203
DB
31 20 48
6F 61 12
12 12 6F
E301
08
32
65
14
6F
20
64
45
3D
20
OA
E302
08
F30
08
20
60
20
63
4C
00
53
20
48
53
20
48
68
6F
OA
55
22
45
2"
1-----
2.5
2 ••
241
2'.
249
250
251
s
0213
IP
11NOI
02C3 E9 0000 E
INT EQU
JOP
252
301-Keyboerd Error' ,CR,LF
I
'
302-System Unit Keylock
1 KEYBOARD LOCK ON
'
(RESUME
=
~Fl"
Is Locked·,CR,LF
S
OE2C3H
002C3H
S
NOI
- INT- I
I VECTOR ON TO MOVED NMI CODE
02C6 20
65
64
19
55
12
33
19
20
13
6E
12
30
62
4F
14
69
6F
33
6F
12
65
14
12
20
61
20
60
20
00
48
12
53
20
45
OA
260
261
262
263
264
265
266
261
268
269
210
211
212
213
214
215
27.
211
218
219
280
281
282
02EA 20
65
64
19
55
12
030E 20
52
6F
031 E 20
52
6F
032E 20
69
65
12
33
19
20
13
6E
12
34
54
12
35
54
12
36
13
20
00
30
62
4F
14
69
6F
30
20
00
30
20
00
30
68
45
OA
34
6F
12
65
14
12
31
45
OA
31
45
OA
31
65
12
20
61
20
60
20
00
20
12
48
12
53
20
45
OA
43
12
0343 20
69
65
20
64
12
36
13
20
52
20
00
30
68
42
65
45
OA
32
65
6F
63
12
0364 31
69
46
65
0319 31
69
46
65
038E 31
69
6E
65
6C
03AC 31
69
45
OA
038F 31
69
45
OA
31
13
61
00
31
13
61
00
31
13
14
12
15
31
13
12
38
68
69
OA
38
68
69
OA
38
68
12
20
12
39
68
12
30 20 44
20 30 20
6C 15 12
FI1S0
HARD FILE ERROR MESSAGE
DB
'1180-Dlsk 0 Fellure'.CR,LF
31 20 44
20 31 20
6C 15 12
FI181
08
'1181-Dlsk I Fellure' .CR,LF
32
20
6F
46
65
30
20
6F
F'1182
08
'1182-Dlsk Contro Iler Fallure',CR,LF
FI190
08
'1190-01 sk 0 Error' ,CR,LF
1----E304
KEY80ARO/SYSTEM ERROR
DB
' 304-Keyboerd 01'" System Unit Error' ,CR,LF 1 KEYBOA.RO CLOCK HIGH
FI191
08
'1191-Dlsk I Error' ,CR,LF
0302 52
12
OA
030F 20
6E
53
20
48
68
4F 40 20 20 45
12 6F 12 20 00
F3A
08
'ROM
20
6C
19
55
65
20
F301
08
08
• 401-CRT Error' ,CR,LF
08
SOl-CRT Error' ,CR,LF
20 44
14 14
12 6F
E601
08
20
14
6F
6F
12
E602
;-----
1-----
20
63
14
69
6C
OA
303-Keyboerd Or Syetem Unit Error·,CR,LF
E401
20
43
6C
61
00
20
30
12
44
6F
6C
69
OA
4420
00
31 39 31 20 4413 68 20 31 20
12 12 6F 12 00
20
6F
13
6E
19
00
08
E501
283
284
285
286
281
288
289
290
291
292
293
294
295
296
291
298
299
300
301
302
303
304
305
306
301
308
309
310
311
312
313
314
E303
20 43
12 12
44
14
14
12
6F
20
68
65
14
6F
55
20
60
20
63
KEYBOARD ERROR
KEY) ',CR,LF
253
254
255
256
251
258
2.'
I LINE ERROR 16->23
NMI ENTRY
ORG
ORG
02C3
= 02C3
' 203-Memory Address Error' ,CR,LF
1 MONOCHROME
; COLOR
1 0 I SKETTE ERROR
DISKETTE BOOT RECORD I S NOT VAL I 0
DB
• 602-Dlskette Boot Record Error·,CR,LF
Error • ,CR.LF
I ROM CHECKSUM
-Un lock System Unit Keylock ' ,CR,LF
ORGS
5-185
1-'
04-21-86
....."•••.,
•••
•••
•••
...••••••
315
PAGE
-----------------------------------------------------INITIALIZE DRIVE CHARACTERISTICS
.16
"1
FIXED DISK PARAMETER TABLE
-
THE TABLE IS COMPOSED OF' A BLOCK OEF I NED AS a
+.
+2
+.
+5
+1
+.
"0
•• 1
11 WORDI - MAXIMUt.i NUMBER OF CYLINDERS
11
11
11
11
11
BYTE)
- MAX I MUM NUMBER OF HEADS
WORD) - NOT USED/SEE PC-XT
WORD) - STARTING WRITE PRECOMPENSATION CYL
BYTE) - NOT USED/SEE PC-XT
BYTE) - CONTROL BYTE
BIT
B'T
'2.
331
332
+.
+12
+1'
+15
1
•••
•••
,
1
,1
335
330
.31
33.
•••
•••
,.,
•••
•••
1
1
0401
..
'5.
.5.
'.0
.51
'0.
'0'
'02
'0'
'0'
'05
.00
'01
.0.
'0'
31.
'1'
31'
31 •
• 14
31.
310
.11
.....
...
31.
31.
•••,
•••
•••
•••
•••
•••
'"•••
•••
•••
.91
•••
•••
•••,
•••
•••
•••
'.0
'.1
•• 2
"0
..
'.5
'.0
'.1
.,..,.."••••••
....'",.
.,.".•••
"0
"1
'"
•••
- TO DYNAMICALLY DEFINE A SET OF PARAMETERS
BUILD A TABLE FOR UP TO 15 TYPES AND PLACE
THE CORRESPOND I NG VECTOR I NTO INTERRUPT 41
FOR DR I VE 0 AND INTERRUPT 46 F"OR DR I VE 1.
F"D_TBLr
"5
"0
•••
•••,
•••
•••
•••
•••
•••
I I lORD) - LAND I NG ZONE
I' BYTE I - NUMBER OF SECTORS/TRACK
I I BYTE) - RESERVED FOR FUTURE USE
1--------------------------------- -------- -- ----------- --
"2
.41
7 DISABLE RETRIES -CR6 DISABLE RETRIES
BIT
3 MORE THAN 8 HEADS
(3 BYTES)- NOT USED/SEE PC-XT
1----0401
0403
0404
0406
0408
0409
040A
0400
040F"
0410
0132
04
0000
0080
00
00
00 00 00
0131
11
00
041 I
0413
0414
0416
041
0419
041A
0410
041F
0420
0261
04
0000
012C
00
00
00 00 00
0267
II
00
0421
0423
0424
0426
0428
0429
042A
0420
042F
0430
0267
06
0000
012C
00
00
00 00 00
0261
II
00
0431
0433
0434
0436
0438
043'9
043A
0430
043F
0440
OaAC
08
0000
0200
00
00
00 00 00
OaAC
II
00
0441
0443
0444
0446
0448
0449
044A
0440
044F
0450
03AC
06
0000
0200
00
00
00 00 00
03AC
II
00
0451
0453
0454
0456
04&8
0459
045A
OUD
045F
0460
0267
04
0000
FFFF
00
00
00 00 00
0261
11
00
O.
OB
OW
O•
DB
OB
OB
OW
OB
OB
1-----
e
ORGS
I CONTROL BYTE
0,0,0
03050
LAND I NO ZONE
SECTORS I TRACK
110
•
06150
CYLINDERS
HEADS
••0
•
••
03000
I
WRITE PRE-COMPENSATION CYLINDER
I CONTROL BYTE
0,0,0
OEo.BD
I
6l1JnrllJ~
7t'1l1JC'
SECTORS I TRACK
110
•
0616D
CYLINDERS
HEAOS
.00
•
03000
••
1 WRITE PRE-COMPENSATION CYLINDER
I CONTROL BYTE
0,0,0
06150
LANDING ZONE
SECTORS/TRACK
ITO
•
09400
CYLINDERS
HEAOS
..0
•
••
•
05120
0,0,0
0'9400
, 10
I
WRITE PRE-COMPENSATION CYLINDER
I CONTROL BYTE
LAND I NO ZONE
SECTORS I TRACK
DRIVE TYPE DIS
OW
OB
OW
OW
OB
OB
OB
O.
OB
DB
1-----
I WRITE PRE-COMPENSATION CYLINDER
DR I VE TYPE 04
OW
OB
O•
OW
DB
OB
OB
OW
OB
OB
1-----
01280
DRiVE TYPE 03
OW
OB
D,
O'
DB
DB
OB
O'
DB
OB
1-----
CYLINDERS
HEADS
03060
..0
•
••
DRIVE TYPE 02
OW
DB
OW
OW
OB
DB
DB
OW
DB
DB
,-----
5-186
DRIVE TYPE 01
0'9400
.00
•
••
•
05120
0,0,0
0'9400
110
CYLINDERS
HEADS
I WRITE PRE-COMPENSATION CYLINDER
1 CONTROL BYTE
LAND I NO ZONE
SECTORS/TRACK
DRIVE TYPE 06
OW
DB
OW
OW
DB
OB
OB
OW
OB
OB
0615D
••0
•
••
OFFFF"H
0.0.0
06150
'10
•
CYLINDERS
HEADS
I NO WRITE PRE-COMPENSATION
I CONTROL BYTE
LAND I NO ZONE
SECTORS/TRACK
o~~~ ~~~~~no!/~~i~~t.·co:~~~~B~Li;~b ~O~ULE V.rel Crt
'2'
.2.
.25
'2,
.21
.2.
.2.
"0
..•••,
"2
.
..
.
•••
•••
•••.,
•••
•••,
•••
•••
•••
•••.,
•••
•••,
•••
•••
2.00
PAGE
I-~~~~
04601 OICE
DRIVE TYPE 07
OW
04620
0463 08
DB
04604 0000
OW
OW
0.0
0
0466 0100
0468 00
ou~
OUA
0460
OUF
0470
00
00 00 00
0 IFF
11
00
0471
0200
DB
DB
DB
I-~~--
1 WRITE PRE-COt.4F1ENSATION CYLINDER
0
0
I CONTROL BYTE
OW
0,0,0
05110
DB
DB
110
0
OW
07330
DB
0000
FFFF
00
00
00 00 00
0200
II
00
OW
OW
0.0
0
0481
0483
0484
0486
0488
...
048A
0480
048F
0490
0384
OF
0000
FFFF
00
08
00 00 00
0385
11
00
"5
0491
0493
0494
0496
0498
0499
04'A
0490
049F
04AO
0334
03
0000
FFFF
00
00
00 00 00
0334
II
00
04A'
04A3
04A4
04A6
0"A8
0 .. '"
04AA
O.. AO
O""F
0480
0357
05
0000
FFFF
00
00
00 00 00
0357
II
00
0481
0483
0"84
0486
0488
04B9
048A
0480
04BF
04CO
0357
07
0000
FFFF
00
00
00 00 00
0357
II
00
04CI
04C3
04C"
04C6
04C8
04C9
04CA
O.. CD
O"CF
0400
0132
08
0000
0080
00
00
00 00 00
013F
11
00
0401
0 ..03
0"04
0406
0 ..08
0409
040A
0400
040F
04EO
0200
07
0000
FFFF
00
00
00 00 00
0200
II
00
..
.50
.52
.55
.5.
.51
.5.
'5'
•• 0
048~
"2
•••
•••
•••.,
•••
•••
.
."
.,.
.,.
.,.
."
.,.
"0
.,.
.,.
"2
,.,
•••
•••
•••
,.,
•••
•••
.00
'.2
•• 5
...
DB
DB
DB
I~----
0
0
I CONTROL BYTE
DB
DB
110
0
LAND I NG ZONE
SECTORS/TRACK
DRIVE TYPE 09
DB
DB
DB
DB
O~OOO
100
0
OFFFFH
I CYLINDERS
I HEADS
I NO WRITE PRE-COMPENSATION
0
OW
008H
0,0,0
09010
DB
DB
110
0
I CONTROL BYTE
LANDING ZONE
SECTORS/TRACK
DRIVE TYPE 10
OW
08200
DB
0.0
0
OW
OW
DB
DB
DB
CYLINDERS
HEADS
OFFFFH
1 NO WRITE PRE-COMPENSATION
0
0
1 CONTROL BYTE
OW
o ,0 ,0
08200
DB
DB
110
0
LAND I NG ZONE
SECTORS/TRACK
DRIVE TYPE II
OW
DB
OW
OW
DB
DB
DB
1-----
1 NO WRITE PRE-COMFIENSATION
OW
OW
OW
1-----
I CYLINDERS
I HEADS
OFFFFH
0,0.0
07330
OW
1-----
LANDING ZONE
SECTORS/TRACK
DRIVE TYPE 08
0474
0476
0478
0479
047A
0470
047F
0480
"2
CYLINDERS
HEADS
02560
0473 05
"0
1-5
04-21-86
08550
050
0
CYLINDERS
HEADS
OFFFFH
I NO WRITE PRE-COMPENSATION
0
0
I CONTROL BYTE
OW
0,0,0
08550
DB
DB
110
0
L"NO I NG ZONE
SECTORS/TRACK
DRIVE TYPE 12
490
'"
•••
•••
•••
"2
'"
•••
•••
500
501
502
50.
50'
505
50.
501
50S
50.
510
.11
512
51.
51.
515
51.
511
51.
51.
520
521
522
52'
52'
525
52.
OW
08550
DB
OlD
0
OW
OW
DB
DB
DB
1-----
1 NO WRITE PRE-COMPENSATION
0
0
I CONTROL BYTE
OW
0,0,0
08550
DB
DB
110
0
LAND I NG ZONE
SECTORS/TRACK
DRIVE TYPE 13
OW
03060
DB
0.0
0
OW
OW
DB
DB
08
1-----
CYLINDERS
HEADS
OFFFFH
CYLINDERS
HEADS
01280
I WRITE PRE-COMPENSATION CYLINDER
0
0
I CONTROL BYTE
OW
0,0,0
03190
08
08
110
0
LAND I NG ZONE
SECTORS / TRACK
DRIVE TYPE , ..
OW
07330
DB
OlD
0
OW
OW
DB
08
DB
CYL I NOERS
HEADS
OFFFFH
1 NO WRITE PRE-COMPENSATION
0
0
I CONTROL BYTE
OW
0,0,0
07330
08
DB
110
0
I LAND I NG ZONE
I SECTORS/TRACK
ORGS
5-187
1-,
IBM Pe,.aonal Compute,. MACRO Aaaamble,.
Ve,.alon 2.00
ORGS ----- 04/21/86 COMPATIBILITY MODULE
5.7
5 ••
5 ••
53.
• 31
'3.
.33
• 3.
.3.
.3.
'37
53.
'3'
•••
PAGE
1-----
04EI
04E3
04E4
04E6
04£8
04E9
04EA
04ED
04EF
04FO
0000
04FI
04F3
04F4
04F6
04F8
04F9
04FA
04FD
04FF
0500
0264
04
0000
0000
00
00
00 00 00
0297
II
00
'.7
551
0501
0503
0504
0506
0508
oe09
050A
0500
050F
0510
0301
05
0000
012C
00
00
00 00 00
0301
II
00
0000
0000
00
00
00 00 00
0000
00
00
1-----
"3
55.
5 ••
557
..•••
•• 3
•••
•••
•••
•••
.,.
.71
• 7.
573
.74
575
57.
5"
'7.
5"
•••
,.,
5 ••
5. .
•••
5.5
5 ••
5.7
5 ••
•••
•••
5 ••
5"
5.3
59'
'.5
5.,
5.,
• 9.
...••••••
.01
"3
•••
•••
•••
.""
D,
DB
D•
D,
DB
DB
DB
D.
DB
DB
0521
0523
0524
0526
0528
0529
052A
0520
052F
0530
0400
01
0000
0200
00
00
00 00 00
03FF
II
00
D.
DB
D.
D.
DB
DB
DB
D.
DB
DB
0531
0533
0534
0536
0!i38
0539
053A
0530
053F
0540
0200
05
0000
012C
00
00
00 00 00
02DC
II
00
!)~!VE
.05
..,....".
.,..,.
00000
DO NOT USE····
CYLINDERS
HEADS
I WRITE PRE-COMPENSATION CYLINDER
I CONTROL BYTE
0,0,0
00000
•• 0
I LAND I NG ZONE
I SECTORS/TRACK
06120
••0
I CYLINDERS
I HEADS
00000
I WRITE PRE-COMPENSATION ALL CYLINDER
•
••
•
I CONTROL BYTE
0,0,0
06630
170
I LANDING ZONE
1 SECTORS / TRACK
09770
.50
•
•
CYLINDERS
HEADS
03000
1 WR I TE PRE-COMPENSAT I ON CYL
0
1 CONTROL BYTE
0,0.0
09770
170
•
LANDING ZONE
SECTORS/TRACK
09770
070
CYLINDERS
HEADS
•
OFFFFH
I NO WRITE PRE-COMPENSATION
0
0
1 CONTROL BYTE
0,0 I 0
09770
170
0
rr~!::
LAND I NG ZONE
SECTORS/TRACK
!~
10240
070
0
05120
0
•
0,0,0
10230
170
0
CYLINDERS
HEADS
I WRITE PRE-COMPENSATION CYLINDER
I CONTROL BYTE
LAND I NG ZONE
SECTORS/TRACK
DRIVE TYPE 20
D.
DB
D•
D.
DB
DB
DB
D.
DB
DB
1-----
•
••
•
RESERVED
DRIVE TYPE 18
05110301
0513 07
0514 0000
0516 FFFF
0518 00
0519 00
051A 00 00 00
0510 0301
051F II
0520 00
1-----
'.0
OR IVE TYPE 17
D,
DB
D.
D•
DB
DB
DB
D.
DB
DB
1-----
00000
DRIVE TYPE 16
D.
DB
D.
D.
DB
DB
DB
D.
DB
DB
1-----
5.7
5 ••
CRIVE TYPE 15
D•
DB
D.
D•
DB
DB
DB
D.
DB
DB
00
5.,
•••
•••
•••
•••
•••
•••
•••
•••
•••,
•••
"3
5 ••
"5
04-21-86
01330
050
0
03000
0
•
•
0,0,0
07320
170
CYLINDERS
HEADS
I WRITE PRE-COMPENSATION CYL
1 CONTROL BYTE
I LAND I NG ZONE
I SECTORS / TRACK
DRIVE TYPE 21
.07
.,3
...
"5
.17
•••",
•••
•••
•••
•• 3
•• S
...•••
•• 7
.3.
0541 0200
0543 07
0544 0000
0546 012C
0548 00
0549 00
054A 00 00 00
0540 02DC
054F
0550 00
1-----
5-188
0200
05
0000
012C
00
00
00 00 00
0200
II
00
ORGS
07330
DB
•
•
•
D.
D•
DB
DB
DB
D.
DB
DB
I,
0551
0553
0554
0556
0558
0559
055A
0550
055F
0560
D.
070
03000
CYLINDERS
HEADS
I WRITE PRE-COMPENSATION CYL
0
0.0,0
07320
170
I CONTROL BYTE
LANDING ZONE
SECTORS /TRACK
DRIVE TYPE 22
D.
DB
D.
D.
DB
DB
DB
D.
DB
DB
07330
.50
0
03000
••
0.0,0
07330
170
•
CYLINDERS
HEADS
I WRITE PRE-COMPENSATION CYL
I CONTROL BYTE
I LAND I NG ZONE
I SECTORS /TRACK
o~~; ~~~~~n~~/~~i:6h;;O:~~Bf~i;~b~O:;ULE V.r.1 on
...••••••
•••
•••
•••
"T
•••
•••
"0
•• 1
•••
•••
•••
•••
•••
•• T
•••
•••
•• 0
•• 1
•••
•••
•••
•••
•••
PAGE
1----0561
0563
0564
0566
0568
0569
D56A
0560
056F
01S70
0132
04
0000
0000
00
00
00 00 00
0150
II
00
0571
0573
0574
0576
01518
0579
057A
0570
057F
01S80
0264
04
0000
0131
00
00
00 00 00
0291
II
00
0581
0583
0584
0586
015S8
0589
05aA
0580
058F
0590
0000
00
0000
0000
00
00
00 00 00
0000
00
00
0591
0593
01S94
0596
0598
0599
059A
0590
059F
05AO
0000
00
0000
0000
00
00
00 00 00
0000
00
00
05A'
05A3
05A4
05A6
05A1
05A9
05AA
05AD
05A"
OISBO
0000
00
0000
0000
00
00
00 00 00
0000
00
00
05BI
05B3
05B4
05a6
0lSB8
0lSB9
05BA
OISBD
OISBF
DISCO
0000
00
0000
0000
00
00
00 00 00
0000
00
00
05CI
0lSC3
05C4
OSC6
015C8
0lSC9
05CA
DISCO
OISCF
01500
0000
00
0000
0000
00
00
00 00 00
0000
00
00
0501
0503
0504
01506
0508
0509
05DA
0500
050F
05EO
0000
00
0000
0000
00
00
00 00 00
0000
00
00
•• T
•••
•••
•••
•••
•••
•••
•• T
•••
•••
......
•• 0
.TO
'TI
.T,
.T.
.T.
.T.
.T.
.TT
.ra
n.
•• 0
•• 1
•••
•••
•••
•••
•• T
•••
•••
"0
•••
•••
•••
•••
•••
.07
•••
•••
TOO
...
...
TOI
TO.
TO.
TO.
TO.
TO.
TOT
TO.
TO'
TIO
Til
TI'
TI.
TI.
TI.
Tt6
TIT
TI.
TI9
T'O
T21
T2'
T2.
T2.
T2.
T2'
T'T
T2.
T2.
T.O
T'I
T••
T••
T'.
DB
DB
DW
DB
DB
DW
06120
I CYLINDERS
I HEADS
O'D
I WRITE PRE-COMPENSATION CYL
I CeNTROL BYTE
0
0,0,0
06630
DRIVE TYPE 25
I LAND I NG ZONE
I SECTORS / TRACK
••• RESERVED···
I CYL.INOERS
t HEADS
00000
OOD
I WRITE PRE-COMPENSATION CYL
DB
0
00000
0
DB
0
I CONTROL BYTE
DB
0,0.0
00000
DB
DB
DW
DB
DB
I CONTROL BYTE
LAND I NG ZONE
SECTORS/TRACK
OOD
0
• •• RESERVED···
00000
CYLINDERS
HEADS
OOD
0
00000
0
0
0.0,0
00000
DB
0
DRIVE TYPE 28
I WRITE PRE-COMPENSATION CYL
I CONTROL BYTE
LAND I NG ZONE
SECTORS/TRACK
• •• RESERVED···
CYL.INDERS
HEADS
00000
OOD
0
I WRITE PRE-COMPENSATION CYL
00000
0
0
0,0,0
00000
I CONTROL aYTE
LAND I NG ZONE
SECTORS/TRACK
OOD
0
DR I VE TYPE 29
DW
DB
DW
DW
I WRITE PRE-COMPENSATION CYL
00000
0
0
0,0,0
00000
OOD
DB
CYLINDERS
HEADS
OOD
0
DB
DW
DB
DW
DW
DB
DB
DB
DW
DB
••• RESERVED···
00000
DRIVE TYPE 27
DW
DB
DW
DW
DB
DB
DB
DW
L.AND I NG ZONE
SECTORS/TRACK
OOD
0
DRIVE TYPE 26
DB
••• RESERVED···
OOD
I CYLINDERS
I HEADS
0
00000
0
I WRITE PRE-COMPENSATiON eYL
DB
DB
DW
0
I CONTROL BYTE
DB
OOD
DB
0
DB
1-----
I CONTROL BYTE
I LAND I NG ZONE
1 SECTORS/TRACK
0
lTD
0
DW
DB
DW
DW
DB
,-----
I WRITE PRE-COMPENSATION ALL CYL
lTD
DB
DB
DB
1-----
0
00000
0
0
0,0.0
03360
0
030lSD
0
DW
1-----
O.D
DW
DW
DB
DB
DB
DW
DW
DB
DW
DW
;-----
CYLINDERS
HEADS
03060
DRIVE TYPE 24
DB
1-----
I-T
04-21-86
DRIVE TYPE 23
DW
DB
DW
DW
DB
1-----
2.00
00000
0,0,0
00000
ORIVE TYPE 30
DW
DB
DW
DW
DB
DB
DB
DW
DB
DB
00000
OOD
0
00000
0
0
0.0,0
00000
OOD
0
LAND I NG ZONE
SECTORS/TRACK
••• RESERVED···
CYLINDERS
HEADS
I WRITE PRE-COMPENSATION CYL
I CONTROL BYTE
LAND I NG ZONE
SECTORS/TRACK
ORGS
5-189
~= ~~~~!":~/~r7C6h~a:~~.~~f;;"~EV.,..lon
,-----
TIl
~'GI!
TI.
731
nl
73'
1.0
1.,
1 ••
1 ••
1 ••
1.1
1 ••
1.1
1.1
1.,
110
111
111
111
11.
111
TI.
111
111
119
160
161
161
16.
16.
161
1. .
101
161
16'
no
nl
nl
173
n.
nl
no
1n
nl
n,
110
111
111
11.
TI.
111
110
111
111
189
190
191
792
1'1
19.
191
196
1n
191
199
100
101
10.
10.
10.
101
100
101
101
10'
110
I"
II.
II.
II.
III
I ..
111
...
...
I ..
. .0
III
I ••
I ••
1.1
I ••
1.1
"I
I.,
1.0
1"
I ••
•••
83.
83.
I ••
.31
••1
OliEl 0000
OSEI 00
OK40000
0lE6 0000
OIEi 00
DftIVE TYN 31
01
DB
01
01
DB
DB
DB
01
DB
DB
a• •
OlEA
OlEO
OHF
O'F'O
00
00 00 00
0000
00
00
01'1
0lF3
0Sf'4
0lF6
0lF8
OSF9
OSFA
05FO
0'"''
0600
0000
00
0000
0000
00
00
00 00 00
0000
00
00
060'
0603
0604
0606
0601
060'
060A
0600
060F'
0610
0000
00
0000
0000
00
00
00 00 00
0000
00
00
0611
0613
0614
0616
0618
061.
061"
0610
061'
0620
0000
00
0000
0000
00
00
00 00 00
0000
00
00
01
DB
01
01
0621
0623
0624
0626
0621
062.
062A
0620
D62F
0630
0000
00
0000
0000
00
00
00 00 00
0000
00
00
01
011
01
01
011
DB
DB
01
0631
0633
0634
0636
0638
063'
063A
0630
063F
0640
0000
00
0000
0000
00
00
00 00 00
0000
00
0.0
0641
0643
0644
0646
0641
0649
064A
0640
064'
06eo
0000
00
0000
0000
00
00
00 00 00
0000
00
00
..... __ ..
.---.....
1-----
DB
ow
011
DB
011
1-----
01
ow
01
DB
011
DB
01
DB
1-----
065t 0000
06S3 00
0654 0000
06S6 0000
065a 00
065. 00
065A 00 00 00
0650 0000
065F 00
066000
5-190
ORGS
011
DB
01
ow
011
DB
DB
01
t-----
DB
DB
DB
01
01
De
DB
o.
ow
DB
DB
••• RESEftVED"·
• CYL.INDERS
I HEADS
000
0
00000
• ,"ITE PftE-CDtlPENSATION CYL.
0
0
I CONTROL. IYTE
0,0,0
00000
LANDING ZONE
SECTORS/TRACK
000
0
••• RESERVED···
00000
CYL.I NDERS
HEADS
000
0
00000
1 IR I Tit PRE-COMPENSATION CYL
0
0
1 COHTAOL BYTE
0,0,0
00000
LAND INCi ZONE
SECTORS/TRACK
000
0
• •• RESERVED···
00000
CYLINDERS
HEADS
000
0
00000
• l'lITE PRE-COfIPENSATION CYL
0
0
• CONTROL aYTE
0,0,0
00000
000
0
!!
LAND I NO ZONE
SECTORS/TRACK
•••
~==~V£c···
00000
CYLINlIERS
HEADS
000
0
00000
• ,"lYE PRE-COMPENSATION eYL
0
0
• CONTROL aYTE
0,0,0
00000
L.AND I NG ZONE
SECTORS/TRACK
000
0
... RESERVED"·
00000
CYLINDERS
HEAOS
000
0
00000
1 WRITE PRE-COMPENSATION CYL.
0
0
I CONTROL aYTE
0,0,0
00000
L.AND I He ZONE
SECTORS/TRACK
000
0
• •• RESERVED···
00000
CYLINDERS
HEADS
000
0
00000
I IRITE PRE-COMPENSATION CYL
0
0
I CONTROL aYTE
0,0,0
00000
L.AND I NCi ZONE
SECTORS/TRACK
000
0
DR I VE TYPE ae
01
LAND I NCi ZONE
SECTORS/TRACK
00000
DRIVE TYPE 31
01
• CDNTftOL IYTE
000
0
DRIVE TYPE 36
DB
• IRITE PRE-COM"'ENSATION CYL
0
0
0,0,0
00000
~!V! '!"!'~
DB
CYLINDEftS
HEADS
00000
DR I VI TYtIE 34
DB
DB
• •• ftISERvm···
000
0
DRIVE TYPE 13
01
DB
01
01
DB
DB
DB
01
DB
DB
04-21-16
00000
DR I VE TYfIE 32
01
DB
01
01
DB
DB
DB
01
DB
011
I-I
2.00
00000
000
0
00000
0
0
0,0,0
00000
000
0
• •• RESERVED···
CYLINDERS
HEADS
I IRITE PRE-COMPENSATION eyL.
I CONTROL aYTE
I LAND I NG ZONE
I SECTORS / TRACK
O~: ~~~~~n~!/~~iG~h~o=~~~ B~~~~~b ~~~ULE Ve,.a i on
..•••••••••,
f'AGE
1-----
•• 0
•••
•••
•••
•••
•••
•••
•••
•••
•••
•••
•••
•••
••0,
•••
•••
•••
•••
•••
•••
•••
•• T
...
•• 0
•• T
..
0661
0663
OU4
0666
0668
0669
066A
0660
OUF
0670
0000
00
0000
0000
00
00
00 00 00
0000
00
00
0671
0673
0674
0676
0678
0679
067A
0670
067F
0680
0000
00
0000
0000
00
00
00 00 00
0000
00
00
0681
OU3
0684
0686
OU8
0689
068A
0680
068F
0690
0000
00
0000
0000
00
00
00 00 00
0000
00
00
0691
0693
0694
0696
OU8
0699
069A
0690
069F
06AO
0000
00
0000
0000
00
00
00 00 00
0000
00
00
06AI
06A3
06A4
06A6
06A8
06A9
06AA
06AD
06AF
06BO
0000
00
0000
0000
00
00
00 00 00
0000
00
00
06BI
06B3
06B4
06B6
06B8
06B9
06BA
06BO
06BF
06CO
0000
00
0000
0000
00
00
00 00 00
0000
00
00
06CI
06C3
06C4
06C6
06C8
06C9
06CA
06CD
06CF
0600
0000
00
0000
0000
00
00
00 00 00
0000
00
00
0601
0603
0604
0606
0608
0609
06DA
0600
06DF
06EO
0000
00
0000
0000
00
00
00 00 00
0000
00
00
DR I VE TYf'E 39
DW
DB
DW
DW
DB
DB
DB
DW
DB
DB
1-----
,-.
04-21-86
••• RESERVED···
00000
CYLINDERS
HEADS
ODD
0
00000
1 WRITE f'RE-COMf'ENSATION CYL
0
0
I CONTROL BYTE
0,0,0
00000
L.ANDING ZONE
SECTORS/TRACK
ODD
0
DRIVE TYPE 40
DW
De
DW
DW
De
DB
DB
DW
De
DB
1-----
2.00
• •• RESERVED···
CYLINDERS
HEADS
00000
ODD
0
00000
1 WRITE PRE-COMPENSATION CYL
0
0
I CONTROL BYTE
0.0.0
00000
LAND I NG ZONE
SECTORS/TRACK
ODD
0
DRIVE TYPE 41
• •• RESERVED···
•• T
no
.T'
81'
.T.
81'
81.
.T.
.TT
81.
.19
DW
DB
DW
DW
DB
DB
DB
DW
DB
DB
1-----
00000
CYLINDERS
HEADS
ODD
0
00000
1 WR I TE PRE-COMPENSAT I ON CYL
0
0
1 CONTROL BYTE
0.0.0
00000
LANDING ZONE
SECTORS / TRACK
ODD
0
DRIVE TYPE 42
• •• RESERVED···
•• 0
U,
•••
•••
•••
•••
•••
.81
•••
•••
•••
•••
•••
•••
•••
...
.'0
...•••'0'
•• T
.00
.0.
'0'
'0'
.0.
.0.
'OT
'0.
......'"
...,.....
,,,....
,,..
,,.,..
,..
......•••
..•••••••••,
.0.
.. 0
1-----
921
"T
1-----
'.0
'31
•• T
•• 0
00000
I WRITE f'RE-COMPENSATTON CYL
0
0
I CONTROL BYTE
0,0,0
00000
• •• RESERVEO···
00000
1 CYLINDERS
1 HEAOS
ODD
0
00000
I WRITE PRE-COMPENSATION CYL
00
I CONTROL BYTE
0.0.0
00000
LAND I NG zaNE
SECTORS/TAACK
ODD
0
••• RESERVED···
CYLINDERS
HEADS
00000
ODD
0
00000
I WRITE PRE-COMf'ENSATION CYL
0
0
I CONTROL BYTE
0,0,0
00000"
LAND I NG ZONE
SECTORS / TRACK
ODD
0
••• RESERVED···
00000
CYLINDERS
HEADS
ODD
0
I WRITE PRE-COMPENSATION CYL
00000
0
0
I CONTROL BYTE
0,0.0
00000
LANDING ZONE
SECTORS/TRACK
ODD
0
DRIVE TYPE 46
DW
DB
DW
DW
DB
DB
DB
DW
De
DB
LAND I NG ZONE
SECTORS/TRACK
ODD
0
DRIVE TYPE 45
DW
DB
DW
DW
DB
DB
DB
DW
DB
DB
1-----
ODD
0
DRIVE TYPE 44
DW
DB
DW
DW
DB
De
DB
DW
DB
DB
CYLINOERS
HEADS
00000
ORIVE TYPE 43
DW
DB
DW
DW
DB
DB
DB
DW
DB
De
1-----
.. T
'.0
DW
DB
DW
DW
DB
DB
DB
DW
DB
DB
00000
ODD
0
00000
0
0
0,0,0
00000
ODD
0
••• RESERVED···
CYLINDERS
HEADS
I WRITE f'RE-CDMf'ENSATION CYt.
I CONTRO\.. BYTE
LANDING ZONE
SECTORS/TRACK
ORGS
5-191
1-10
04-21"16
•••
•••
•••
'46
941
948
949
910
.11
912
'13
954
955
•••
'OT
•••
•••
'61
~AOE
1---....
06E3 00
06E4 0000
06£6
06EI
06E9
06£"
06ED
06E'
• 06"
06'2
• 06'2
06'2 19 0000 IE
06'5
06'5
06F1 Fe
970
06'. 02
912
.,3
.,8
.,.
06'A TO
.16
.71
tTl
919
06F8
G6FC
06FD
06'£
980
01 I IlfoOOB
00
00
00
00
DB
DB
IP
,,-
072B
OT2D
012"
0731
0133
0135
...
...
sue MlJDEL BYTE
B'O! LEVEr
• 06F'F"
0729
994
CONF E"CONI" TIL-2
MODEt BYTE -
CONF_E
911
9.9
990
991
992
993
911
BOOT LOADER INTERRUPT
VECTOR ON TO MOVEO SOOT CODE
• 06"
91'
t CONTtitOL BYTE
I LANO I NG ZONE
I SECTORS/TRACK
o
DI
06'9 00
'8'
•••
'.3
•••
984
DW
oooa
969
1 WRITE PRE-COMPENSATION CYL
0,0,0
00000
OOD
DB
• ..... -....
962
963
"4
.11
DB
DB
DB
0"0 00
CYLINDERS
HEAOS
o
00000
o
o
DW
DW
0000
00
00
00 00 00
0000
00
••• RESERVED···
00000
OOD
DB
'60
968
96'
961
961
DR:IVE TYPE 41
DW
06£ I 0000
• .......... -
0129 0417
0300
Oleo
DB
Da
EQU
.
BAUD RATE INITIALIZATION TAILE
ORa
DW
DW
DW
DW
DW
DW
DW
1-----
RS23Z
0060
0030
0011
ow
0731 DODe
• 96
•
ORG
A'
ooeo
USE tNT 15 H AH_ OtOH
CONFIGURATION TABL.E FOR THIS SYSTEM
LENGTH OF' rOLLOWINC TABLE
SYSTEM MODEL BYTE
SYSTEM SUB MODEL TYPE BYTE
BIDS REVISION LEVEL
10000000 • DMA CHANNEL. 3 USE BY BIDS
01000000 • CASCADED INTERRUPT LEVEL 2
00100000 • REAL TIME CLOCK AVAILABLE
00010000 • KEYBOARD SCAN CODE HOOK IAH
RESERVED
RESERVED
RESERVED
RESERVED
RESERVED FOR EXPANS I ON
OEU.H
007Z9H
1047
7 ••
..••••...,.
110 BAUI)
"0
300
.00
1200
2400
4aoo
9600
•••
I TABLE OF VALUES
I FOR INITIALIZATION
'997
11-
999 0739
1000 • 073'
1001 0139 £9 0000 E
1002
1-----
1003
1004
IDOlS
to06 oa2E
tOOl. 082E
1001 01. 19 0000 E
1009
1010
1011
1012
JMP
IOt4 OI7E
OITE
aIlE 52
OITF 3A 45 46 31 ID
0114 2A 36
• 000'
02 01
I VECTOR ON TO MOVED KEYBOARD CODE
1--... ------- ...... ------ .. --...
1031 DaaE
1032 oalE IB FF 00 FF FF
1033 0894 IE FF FF FF ",
t034 019A FF 7F '4 II 17
1031 oaAO 12 14 19 II O'
1036 oaA6 to IB 10 OA FF
1037
1031
1039
1040
1041
1042
1043
1044
1041
1046
1041
OEI2EH
OOIZEH
EQU
•
KEYBOARD_I 0_1
,-....... -- MASK TABLE
K7
LABEC
aYTE
DB
INS SHIFT
I INSERT MODE SHIFT
DB
CAP!' SHIFT,NUM SHIFT,SCROLL SHIFT,ALT SHIFT,CTL SHIFT
DB
LEFr::SHIFT ,RIGRT_SHIFT
-
1023
1024 0116
1025 0816 aD
1026 alIT 40 20 10 01 O.
oaae
I VECTOR ON TO MOVED RS232 CODE
1---.. ---- ............. _--....... ---_ .. -------------- -- -------- ------------ -- -----I
KEY IDENTIFICATION SCAN TABLES
I .. --- .. --------------- .. ---- .. --------------------------~---~--~--- .. ----11ORG
OEe7EH
ORG
00e7EH
1----... --------- TABLE OF SHIFT KEYS AND MASK VALUES ---------------.-_ .. --- KEY TABLE
K6
LAB!L
BYTE
DB
INS KEY
I INSERT KEY
DB
CAP!' KEY,HUM KEY,SCROLL KEY,ALT KEY,CTL KEY
DB
LEFTi<.EY,RIGRT KEY
EQU
I-K6K6L
1015
1016
1027
1028
1029
1030
OE73.H
00739H
EQU
•
RS232_IO_'
KEYBOARD
11ORG
ORa
KEYBOARD 10
IOt3
10lT
1011
1019
I 020
1021
1022
ORG
ORG
RI2IZ_IO JMP
OIAC
08B2
OIBI
011E
0lC4
13
OB
IC
OE
96
OICI
OICE
0104
oaDA
OlEO
IE IF
64 61
71 10
7490
93 FF
5-192
04
OC
IA
00
FF
FF
IF
01
OF
01
06 07 01 OA
FF FF FF FF
II 03 16 02
FF FF " FF
20 FF
60
"
14
TI
FF
61
67
IE
91
FF
62
FF
73
76
19
ORGS
63
FF
aF
92
IA
••
LABEL
TABLES F'OR CTRL CASE
-----------------------
1--------
DB
DB
DB
BYTE
27,-1,00,-1,-1,-1
30,-1,-1,-' .-1 ,3t
-1,127, 14a. 17,23,5
11,20,25,21,09,11
16,27.29,10,-1,01
19,04,06,07 .0a,1 0
11,12,-1.-1,-1,-1
2e,Z6.24,03,22,02
14,13,-1,-1,-1,-1
150.-1,' ',-I
DB
DB
DB
DB
DB
• FI - F6
'4.'5,96,97,ge.'9
100,101,102,103.-1,-1
t F7 - FlO, NL, SL
119,141,132,142,111,143 I Hom., Up, PaUp, -, Left, P.d5
116,144.117,145,1 HI,I46
147,-1,-1,-1 I 137,131
DB
DB
DB
DB
Da
DB
DS
CHARACTERS --------I Eac, I, 2, 3, 4, 5
I 6, 7, a, 9, O. ~~a~: ~~bi, QOW, E
I P, (,],
Ctrl, A
I S, 0 , F,G, H, J
I K, L, I, "
" LShlft
I Skalaah, Z, X, C, v, B
t N, M, "
., " RShlft
: R:
Ent.r,
:-:!-~~~!- S~UNC;'tg~s
--______ _
: ~! '~tsY:R.~~dun~:;~'.;~I)Fi I!n~12
I-II
04-21-86
1048
1049
1050
1051
1052
1053
1054
1055
1056
1051
1058
1059
1060
1061
1062
1063
1064
1065
1066
PAGE
1----------------------
08E6
08E6
08EC
08F2
08FS
08FE
0904
090A
0910
0916
091B
KIO
IB
36
3D
12
10
13
6B
5C
6E
FF
31
:iT
08
14
5B
64
6C
fA
60
2A
32
38
09
19
50
66
38
33
39
11
15
00
61
21
18 63
2C 2E
FF 20
34
30
11
69
FF
68
60
16
2F
FF
35
20
65
6F
61
6/\
FF
62
1061
1068
1069
1010
1011
1012
1013
1014
1015
1016
1011
1018
101'
IDeo
1081
1082
1083
1084
1085
1086
1081
1088
IOS9
10.0
10'1
10'2
1093
10'4
1095
1096
1097
1098
109.
1100
1101
" 02
1103
1104
1105
1106
1101
092C
O'2C
0.32
0938
0.39
D.
D.
D.
DB
D.
D.
D.
D.
1------
0920 38 3C 3D 3E 3F
0925 40 41 42 43 44
092A FF FF
1------
KI 5
41 48 4' FF 4B FF
40 FF 4F 50 51 52
53
FF FF 5C 85 86
0981
• 0.81
0981 E9 0000 E
D.D.
L.ABEL
:;n~:~~H'-I"e'
;:~~,~~
IB
5E
2B
52
50
53
4B
lC
4E
FF
21
26
08
54
18
44
4C
5A
40
2A
40
2A
00
59
10
46
3A
58
3C
FF
23
28
51
55
00
41
22
43
3E
20
:-1
'2, 'zJlcvb'
'nlll,.1 '
-I,'·' ,-I,' ',-I
LC TABLE SCAN
DB
59,60,61,62,63
DB
64,65,66,61,68
DB
-1,-1
KEYPAD TABLE
LABEL
BYTE
DB
11,12,13,-1,15,-1
DB
71,-1,1'.80,81,82
DB
83
DB
-1.-1,'2,133,134
1-----
KEYBOARD INTERRUPT
11-
ORG
KB_INT
EQU
25
5F
45
4F
41
4A
FF
42
0.C4
0'C4 54 55 56 51 58
09C' 59 5A 5B 5C 5D
O.CE FF FF
0.00
0'00 31 38 3' 2034 35
362B31323330
2E
0'00 FF FF lC 81 88
KII
I LETTERS, Ret.urn, Ct.,.t
I LETTERS, L Sh I I t
I R Shift,·, Alt., Space, CL
I lASE STATE OF FI - FlO
I NL., SL
I BASE STATE OF KEYPAD KEYS
I SysRq, Undef, IT, FII. FI2
I VECTOR ON TO MOVED KEYBOARD HANDLER
JMP
24
29
51
49
FF
48
lE
56
3F
FF
----------------------
ORG
1---------------------098A
098A
0990
0996
099C
0.A2
0'A8
MAE
09B4
O'BA
O.BF
TABLES FOR LOWER CASE
BYTE
21,'12345'
'61890-'
f.',08,O','qwe'
LABEL
O.
O.
O.
O.
O.
O.
O.
O.
o.O.
TABLES FOR UPPER CASE
BYTE
21",.'11'
'4, ',.( I '
'+',08,0(f,'QIE'
'RTYUIO'
'PH',OOH,-I,'A'
'SDFGHJ'
'KLI"',126,-1
t24,'ZXCVB'
'NM<>? '
-I, ,., ,-I,' ',-I
,------ UC TABLE SCAN
LABEL
BYTE
DB
84,85,86,81.88
DB
8',90,91 ,92,93
DB
-1,-1
----------------------
I LETTERS, Return, Ct.,,1
I LETTERS, L Sh I ft.
I R Shirt,·, Alt., SpsCla, CL
K 12
1------ NUM STATE TABLE
K 14
LABEL
BYTE
DB
'18'-456+ I 230. '
O.
-1,-1,124.'35,136
I SHIFTED STATE OF FI - FlO
I NL, SL
I NUMLOCK STATE OF' KEYPAD KEYS
I SyaRq, Und.r, IT, FII, FI2
ORGS
5-193
1-12
04-21-86
1108
1109
P~GE
1111
1112 OC59
1II3_0C59
I I 14 OC59 £9 0000 £
1115
1116
IIIl
11-
ORG
ORO
DISKETTE 10
III.
11ORG
ORO
DISK INT
JMP
,-----
Ilia
DISKETTE I/O
JMP
,-----
1119 OF57
1120 II OF57
112t OF57 £9 0000 E
1122
t 123
1124
112&
1126 OFC7
1127
1128
1129
1130
1131
1132
1133
1134
1135
11360FC7
1137
1138 OFC7 OF
1139 OFC8 02
1140 OFC9 25
1141 OFCA 02
1142 OFCB OF
1143 OFCC IB
1144 OFCD FF
1145 OFCE 54
1146 OFCF F6
1147 OFDO OF
1148 OFDI 08
1149
1160
1151
1152
1153 OFD2
1154 _ OFD2
1155 OFD2 E9 0000 E
1156
1157
1168
1109
11601045
1161
1----11-
ORO
ORO
I VECTOR ON TO MOVED 0 I SKETTE HANDLER
OEFC7H
00F"C7H
1 ---------------- - - -------------- - - - ---- --------- -- - -- ---- ------1 01 SK_BASE
THIS IS THE SET OF PARAMETERS REQUIRED FOR
1
1
DISKETTE OPERATION.
THEY ARE POINTED AT BY THE
I
1
DATA VARIABLE .DISK POINTER.
TO MODIFY THE PARAMETERS. I
1
BUILD ANOTHER PARAMlTER BLOCK AND POINT AT IT
t
1----------- ---':"'------ ----------------------- -- -------- ---- -- ---DISK_BASE
OB
OB
DB
DB
DB
DB
DB
DB
DB
DB
DB
,-----
LABEL
BYTE
1101 II liB
2
MOTOR WAIT
2
IS
-
OtBH
OFFH
054H
OF6H
SRhD. HD UNLOADIIOF - I ST SPECIFY BYTE
HD LOAD= I. MOOE=DMA - 2ND SPEC I FY BYTE
WAIT TIME AFTE;:R OPERATION TILL MOTOR OFF
512 BYTES / SECTOR
EDT I LAST SECTOR ON TRACK)
GAP LENGTH
DTL
GAP LENGTH FOR FORMAT
FILL BYTE FOR FORMAT
HEAD SETTLE TIME (MILLISECONDS)
MOTOR START TIME (I f8 SECONDS)
IS
e
PRINTER I/O
11ORG
ORO
PRINTER 10
- ...e
1-----
1177
II 78
5-194
OEr57H
00F57H
EQU
I
DISK_INT_'
01 SKETTE PARAMETERS
1163
1164
!I 65
1166
1167
1168
1169
II 70
II 71
1172
1173
1174
1175
II 76
,.
; VECTOR ON TO MOVED 0 I SKETTE CODE
0 I SKETTE INTERRUPT
MI
ORO
ORO
ASSut.E
OF045H
045H
CStCODE.OStOATA
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
SET MODE t NEAR
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
MIL
EOU
11-
ORG
ORO
.)Me
11-
IF 06
M.
~i~:g~~:7 ~~~~R
REAli CURSOR t NEAR
READ-LPENtNEAR
ACT 151 SP PAGE t NEAR
SCR'O'LL uP t NEAR
SCROLL -DOWN I NEAR
READ' A~ CURRENT t NEAR
WR I T! AE' CURRENT t NEAR
WRITE-C E'URRENTtNEAR
SET C~U5R t NEAR
WRITE DOTtNEAR
READ liOT t NEAR
WRIT~ TTYINEAR
VIDEO:STATEINEAR
OFFSET
OFFSET
OFFSET
OFFSET
OFFSET
OFFSET
OFFSET
OFFSET
OFFSET
OFFSET
OFFSET
OFFSET
OFFSET
OFFSET
OFFSET
OFFSET
I-MI
OF065H
a I 065H
~~+-~~~~E
TABLE OF ROUTINES WITHIN VIDEO 1/0
EXIT STACK VALUES MAY BE
DIFFERENT DEPEND I NG ON THE
SYSTEM AND MODEL
SET-CPOS
REAli CURSOR
READ-LPEN
ACT lilsP PAGE
SCRliLL uP
SCROLL-DOWN
READ AC CURRENT
WR I Tf AC CURRENT
WR I TE-C CURRENT
SET C'O'L'O'R
_RITE DOT
READ 50T
WRITf TTY
VIDEO:STATE
I
VIDEO_la_I
1 VECTOR ON TO MOVED V IDEO CODE
VIDEO PARAMETERS --- IN IT_TABLE
ORO
ORO
VIDEO PARMS
DB
07
A'
EQU
VIDEO_IO
1-----
I VECTOR ON TO MOVED PR I NTER CODE
FOR POSSIBLE COMPATIBILITY ENTRY POINTS
i i6i
1179
1180 1045 0000 E
118110470000E
1182 1049 0000 E
1183 1 d4B 0000 t::
1184 1040 0000 E
1185 104F 0000 E
118610510000 E
1187 1063 OOllO E
1188 1055 0000 E
1189 1057 0000 E
1190 1059 0000 E
1191 105B 0000 E
1192 1050 0000 E
1193 105F 0000 E
1194 1061 0000 E
1195 1063 0000 E
1196 II '0020
1197
1198
1199 1065
1200 _ 1065
1201 1065 E9 0000 E
1202
1203
11i!:04
1206
1206 IOA4
1207
1208 IOA4
1209 10M 38 28 20 OA
1210
19
1211 10AB IC 02 07 06
1212 lOBO 00 00 00 00
1213 _ 0010
1214
1215 IOB4 71 50 !SA OA
1216
1217 10BB IC 02 07 06
1218 lOCO 00 90 00 00
1219
1220 IOC4 38 28 20 OA
1221
64
OEC59H
00C59H
EQU
I
DISKETTE_10_I
DB
DB
EOU
OFOA4H
a IOA4H
LABEL
BYTE
38H.28H.2DH,OAH.IFH.6.19H
IF 06
DB
71H.50H.5AH.OAH,IFH.6.19H
07
DB
DB
ICH.2.7.6.7
0.0'.0,0
7F 06
DB
38H,28H.2DH.OAH, 7FH,6 .64H
ORGS
1 SET UP FOR 40X25
ICH.2.7.6.7
0.0.0,0
I-VIDEO_PARMS
1 SET UP FOR 80X25
I
SET UP FOR GRAPH I CS
1-13
04-21-86
1222
1223
1224
12215
122&
122T
1221
1229
1230
1231
1232
1233
1234
12315
1236
1237
123&
1239
1240
1241
1242
1243
1244
1245
1246
124T
1248
1249
1250
1251
1252
1253
12154
12155
1256
1215T
1258
1259
1260
1261
1262
1263
1264
1265
1266
126T
1268
1269
12TO
1271
12T2
1273
12T4
12T5
12T6
1217
12Ta
1279
1280
1281
1282
1283
1284
12SS
1286
128T
1288
1289
1290
1291
1292
1293
1294
12915
1296
129T
1298
1299
1300
1301
1302
1303
1304
1305
1306
130T
13015
1309
1310
1311
1312
1313
1314
1315
1316
131T
1318
1319
1320
1321
1322
1323
1324
1325
1326
132T
1328
1329
1330
1331
1332
1333
1334
1335
10CB 10 02 0 I 06 OT
10DO 00 00 00 00
DB
DB
10D4 61 150 152 OF 19 06
DB
6IH,50H, 52H,OFH, 19H,6, 19H
10DB 19 02 OD DB DC
IDEO 00 00 00 00
DB
DB
19H,2,ODH,OBH,OCH
0,0,0,0
D.
D'
D.
D.
2048
4096
16384
16384
..
IOE4
IOE6
IOE8
IDEA
N.
0800
1000
4000
4000
10EC 21 28 50 50 28 28
50 50
IOF4 2C 28 2D 29 2A 2E
IE 29
1841
• 1841
1841 E9 0000 E
184D
• 184D
1840 E9 0000 E
1 SET UP FOR 80X2!5 all CARD
TABLE OF REGEN LENGTHS
40X25
80X2!
GRAPHICS
1-----
COLUMNS
N.
DB
40,40,80,80,40,40,80,80
NT
DB
2CH,28H,2DH,29H,2AH,2EH,IEH,29H 1 TABLE OF MODE SETS
1-----
MEMORY SIZE
11ORG
ORG
MEMORY SIZE DET
- JMP-
OF841H
01841H
EQU
•
MEMORY_SI ZE_DET_I
1-----
EQUIPMENT DETERMINE
11-
ORG
ORO
EQUIPMENT
1----111859
• 18!9
1859 E9 0000 E
TOH,2, I ,6, T
0,0,0,0
"N.
OF840H
I 84DH
EQU
S
EQUIPMENT_I
I VECTOR ON TO MOVED B I as CODE
°
1 VECTOR ON TO MOVED B I as CODE
CASSETTE (NO BIOS SUPPORT)
ORG
ORO
CASSETTE 10
IN.
OF859H
o 1859H
EQU
•
CASSETTE_IO_I
I VECTOR ON TO MOVED B I OS CODE
1---------------------------------------------------------------------I CHARACTER GENERATOR GRAPHICS FOR 320xaoo AND 640X200 GRAPHICS
I
1---------------------------------------------------------------------11ORG
OFA6EH
IA6E
IA6E
IA6E 00
00
IAT6 TE
81
IA1E TE
FF
IA86 6C
10
IA8E 10
10
IA96 38
38
IA9E 10
38
IAA6 00
00
IAAE FF
FF
IAB6 00
3C
IABE FF
C3
IAC6 OF
CC
lACE 3C
TE
IAD6 3F
FO
lADE TF
E6
IAE6 99
510
00
00
81
lE
FF
TE
FE
00
38
00
TC
TC
10
TC
00
00
FF
FF
3C
00
C3
FF
OT
T8
66
18
33
EO
63
CO
510
99
IAEE 80
80
IAF6 02
02
IAFE 18
3C
IB06 66
66
IBOE IF
IB
IBI6 3E
CC
IBIE 00
TE
IB26 Ie
18
IB2E 18
18
lB36 18
18
lB3E 00
00
I B46 00
00
1B4E 00
00
IB56 00
00
IB5E 00
00
IB66 00
00
EO
00
DE
00
3C
18
66
00
DB
00
63
T8
00
00
3C
FF
3C
00
18
00
18
00
30
00
00
00
24
00
18
00
FF
00
00 00 00 00
ORG
CRT CHAR GEN
lie
0 I A6EH
LABEL
BYTE
OOOH,OOOH,OOOH,OOOH,OOOH,OOOH,OOOH,OOOH 1 0_00
BLANK
SMILING FACE
A5 81 BD 99
DB
OTEH,08IH,OA5H,o8IH,oeOH,o99H,08IH,OTEH I D_OI
DB FF C3 ET
DB
OTEH,OFFH l ooeH,oFFH I OC3H I OETH,OFFH,01EH I 0_02
SMILING FACE N
FE FE TC 38
DB
06CH, OFEH, OFEH, OFEH, OTCH, 038H,0 I OH, OOOH 1 0_o3
HEART
TC FE TC 38
DB
010H I 038H,OTCH,OFEH,OTCH I 038H I OIOH,OOOH I o_o4
DIAMOND
38 FE FE TC
DB
038H,OTCH I 038H,OFEH I OFEH,OlCH,038H,OTCH I D_05
CLUB
38 TC FE TC
DB
OlOH,OlOH,038H I OTCH,OFEH,01CH,038H,OTCH 1 0_o6
SPADE
18 3C 3C 18
DB
OOOH I OOOH,
BULLET
ET C3 C3 ET
DB
OFFH, OFFH, OETH I OC3H I OC3H I OETH, OFFH, OFFH I D_08
BULLET NEG
66 42 42 66
DB
OOOH, 03CH, 066H, 042H, 042H ,066H, 03CH I OOOH I D_09
CIRCL.E
99 BD BD 99
DB
eFFH I OC3H I 099H, OBOH I oeOH, 099H, OC3H, OFFH 1 O_OA
CIRCLE NEG
OF TO CC CC
DB
OOFH, OOTH I OOFH, OTOH, OCCH,OCCH, OCCH I OT8H I O_OB
MALE
66 66 3C 18
DB
03CH, 066H, 066H, 066H, 03CH,O 18H, 07EH I 0 18H I O_OC
FEMALE
3F 30 30 TO
DB
03FH,033H,03FH,030H,030H,OTOH,OFOH,OEOH 1 O_OD
EIGHTH NOTE
TF 63 63 6T
DB
oTFH, 063H I 0 TFH I 063H, 063H I 06 TH, OE6H I OCOH
I 0_0£
TWO
3C ET £T 3C
DB
099H I 05AH, 03CH, OETH I OETH I 03CH I 05AH, 099H I O_OF
SUN
F8 FE F8 EO
DB
080H I OEOH, OF8H, OFEH I OF8H I OEOH I 080H, OOOH I 0_10
R ARROWHEAD
3E FE 3E DE
DB
002H, OOEH I 03EH I OFEH, 03EH, OOEH, 002H, OOOH 1 0_11
l
TE 18 18 TE
DB
o 18H, 03CH, 07EH, 0 I 8H, 0 18H,OTEH, 03CH I O I 8H
ARROW 2 VERT
°
18H, 03CH, 03CH, 0 18H, oooH,eooH I O_OT
I 0_12
1/16 NOTE
ARROWHEAD
66 66 66 00
DB
066H1066HI066HI066HI066HIOOOHI066H,OOOH 1 0_13
2 EXClAMA T I ONS
DB TB IB IB
DB
OTFH,OOBH I ODBH I OTBH,OIBH,OIBH,OIBH I OOOH I 0_14
PARAGRAPH
38 6C 6C 38
DB
03EH,063H,038H,06CH,06CH,038H,OCCH,OT8H 1 0_15
SECTION
00 00 TE TE
DB
OOOH, OOOH I OOOH I OOOH, OlEH, 0 TEH, OTEH, OOOH I o_16
RECTANGLE
TE 18 TE 3C
DB
TE 18 18 18
DB
°
°
18 18 TE 3C
DB
o 18H, 0 18H I 0 18H I 0 ISH I OTEH I 03CH,
DC FE DC 18
DB
OOOH, 0 I 8H, OOCH, OFEH, OOCH,
60 FE 60 30
DB
OOOH, 030H, 060H, OFEH, 060H I 030H I OOOH, OOOH 1 O_IB
ARROW L.EFT
CO CO CO FE
DB
OOOH, OOOH, OCOH, OCOH I OCOH, OF'EH, OOOH, OOOH I O_IC
NOT INVERTED
66 FF 66 24
DB
OOOH, oa4H, 066H, OFFH, 066H, 024H, OOOH, OOOH 1 0_10
ARROW a HORZ
3C TE FF FF
DB
OOOH I
ARROWHEAD UP
FF TE 3C 18
DB
OOOH, OFFH, OFFH, OTEH, 03CH, OISHI OOOH, OOOH I D_IF
18H, 03CH, OTEH,
°
ISH, 07EH, 03CH, 0 18H, OFFH 1 O_ IT
18H I 03CH I 01EH I Ol8H,Ol 8H I OI 8H I 0 I 8H I OOOH I 0_18
°
°
18H I OOOH I 0_"
18H, OOOH, OOOH 1 0_110
°
18H, 03CH, OTEH, OFFH, OFFHIOOOH, OOOH 1 D_IE
ORGS
ARROW 2 VRT UP
ARROW VRT UP
ARROW VRT DOWN
ARROW RIGHT
ARROWHEAD DOWN
5-195
1-14
04-21-86
1336
1331
1338
133'
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
13111i
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1311i9
IB6E 00
00
IB16 30
30
IEI7E 6C
00
IB86 6C
6C
IB8E 30
30
IB96 00
C6
IB'E 311i
76
IBA6 60
00
IBAE 18
18
IBB6 60
60
1BeE 00
00
IBC6 00
00
I BCE 00
30
IB06 00
00
1BDE 00
30
IBE6 06
80
00
00
18
00
6C
00
6C
00
lC
00
C6
00
6C
00
60
00
30
00
30
00
66
00
30
00
00
60
00
00
00
00
DC
00
IBEE 7C
7C
IBF6 30
FC
IBFE 78
FC
IC06 78
78
ICOE IC
IE
ICI6 FC
78
ICIE 38
18
IC26 FC
30
IC2E 18
18
lC36 78
70
IC3E 00
C6
00
TO
00
CC
00
CC
00
3C
00
CO
00
60
00
CC
00
CC
00
CC
00
30
;;:i
IC46
13'2
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
104004
10405
10406
1407
10408
1409
1410
1411
10412
10413
10414
1415
1416
1417
1418
1419
1420
1421
1422
10423
1424
1425
1426
1427
10428
10429
1430
1431
10432
1433
1434
1435
1436
10437
10438
1439
14040
14041
14042
104043
14404
1445
10446
14047
10448
1449
;~ i~
30
18
18
00
00
60
60
18
30
60
30
DO
00
00
30
00
CC
00
lC6E lC
18
IC16 30
CC
IC7E FC
FC
IC86 3C
3C
IC8E F8
,.8
IC96 FE
FE
It9E FE
FO
ICA6 3C
3E
ICAE Ct
CC
ICB6 18
78
ICBE IE
78
ICC6 E6
E6
ICCE FO
FE
IC06 C6
C6
ICOE C6
C6
ICE6 38
38
C6
00
78
00
66
00
66
00
6C
00
62
00
62
00
66
00
CC
00
30
00
DC
00
66
00
60
00
EE
00
E6
00
6e
00
lCEE FC
FO
ICF6 78
IC
ICFE FC
E6
1006 78
18
lODE FC
78
1016 CC
FC
IDlE CC
30
1026 C6
66
00
ce
00
66
00
CC
00
84
00
CC
00
CC
00
C6
IC4E
IC56
IC5E
lC66
5-196
00 00 00 00
08
OOOH, OOOH, OOOH, OOOH, OOOH. OOOH. OOOH. OOOH ; 0_20
78 30 30,00
08
030H, 078H, 078H. 030H, 030H, OOOH, 030H, OOOH I 0_21
,
SPACE
EXCLAMAT I ON
6C 00 00 00
08
06CH, 06CH, 06CH, OOOH, OOOH. 00 OH, OOOH, OOOH I 0_22 "
FE 6C FE 6C
DB
06CH, 06CH, OFEH,06CH, OFEH, 06CH, 06CH, OOOH I 0_23 •
L8.
CO 18 DC F8
08
030H, 01CH, OCOH, 078H, OOCH, OF8H, 030H, OOOH I 0_24 •
DOLLAR S ICiN
CC IIIi 30 66
DB
OOOH, OC6H, OCCH, 0 18H, 030H, 066H, OC6H, OOOH I 0_25 "
PERCENT
38 16 DC CC
08
038H, 06CH, 038H, 016H, OOCH, OCCH, 016H, OOOH I 0_26 &
AMPERSAND
CO 00 00 00
DB
060H, 060H. OCOH, OOOH, OOOH, OOOH, OOOH, OOOH I 0_27
APOSTROPHE
60 60 60 30
08
o 18H, 030H, 060H, 060H, 060H, 030H, a 18H, OOOH I o_28 (
L. PARENTHESIS
'8
R. PARENTHESIS
QUOTATI>ON
18 18 30
08
060H,030H,O 18H, 0 18H. 0 18H, 030H ,060H, OOOH I 0_29 I
3C FF ac 66
08
OOOH, 066H, 03CH, OFFH, 03CH, 066H, OOOH, OOOH I 0_2A
ASTERISK
30 FC 30 30
08
OOOH, 030H, 030H, OFCH, 030H, 030H, OOOH, OOOH I 0_2B +
PLUS
00 00 00 30
08
OOOH, OOOH, OOOH, OOOH, OOOH. oaOH, 030H, 060H I 0_2C ,
COMMA
00 FC 00 00
08
OOOH, OOOH, OOOH, OFCH I OOOH, OOOH I OOOH, OOOH I 0_20 -
DASH
00 00 00 30
08
OOOH,OOOH,OOOH, OOOH, OOOH. 030H, O]OH. OOOH I 0_2E
PERIOD
18 30 60 CO
08
006H, OOCH, 0 18H. 030H, 060H, OCOH, 080H, OOOH I 0_2F I
SLASH
CE DE F6 E6
08
o 7CH, OC6H, OCEH, OoEH, OF6H I OE6H, 0 7CH. OOOH I 0_30 0
,
30 30 30 30
08
030H, 070H, 030H, 030H. 030H,030H. OFCH, OOOH I 0_31
DC 38 60 CC
08
o 18H, OCCH, OOCH, 038H, 06 OH. OCCH. OFCH. OOOH I 0_32 2
DC 38 DC CC
08
018H, OCCH, 00CH,038H, OOCH,OCCH, 078H, OOOH I 0_33 3
6C CC FE DC
08
01 CH, 03CH, 06CH,OCCH. OFEH, OOCH, 0 I EH, OOOH I 0_344
FIIi DC DC CC
08
OFCH. OCOH, OF8H. OOCH, OOCH, oeCH, 078H, OOOH I 0_35 5
CO F8 CC CC
08
038H, 060H, oeOH,OFBH, OCCH, OCCH, 078H, OOOH I 0_36 6
DC 18 30 30
DB
OFCH,OCCH,OOCH,O 18H.030H,030H,030H,OOOH I 0_37 7
018H, OCCH, OCCH,018H. OCCH, OCCH, 078H, OOOH I 0_38 8
CC 78 CC CC
08
CC lC DC 18
08
078H, OCCH, OCCH.07CH, OOCH, 0 18H, 070H, OOOH I o_39 9
30 00 00 30
08
OOOH, 030H, 030H,000H. OOOH, 030H, 030H, OOOH I 0_3A
30 00 00 30
08
OOOH. 030H, 030H, OOOH, OOOH, 030H, 030H, 060H I 0_3B I
SEMICOLON
60 CO 60 30
DB
o ISH. 030H. 060H,OCOH, 060H, 030H, 0 18H, ooaH
0_3C <
LESS THA.N
FC 00 00 FC
08
OOOH, OOOH, OFCH, OOOH. OOOH. OFCH, OOOH. OOOH I 0_30
180CI830
08
060H, 030H, 0 18H,OOCH. 0 18H, 030H, 060H, OOOH ; 0_3E >
DC 1830 00
08
078H, OCCH, OOCH, 0 18H, 030H. OOOH, 030H, OOOH I 0_3F
OE DE DE CO
08
07CH, OC6H, OOEH.OOEH, OOEH, OCOH, 078H ,OOOH I o_40 •
CC CC FC CC
08
030H, 078H, OCCH, OCCH. OFCH. OCCH, OCCH. OOOH ; 0_41 A
OFCH. 066H, 066H.01CH, 066H, 066H. OFCH, OOOH ; 0_42 B
j
I
=
?
66 7C 66 66
08
CO CO CO 66
08
03CH. 066H, OCOH,OCOH. OCOH. 066H, 03CH, OOOH I 0_43 C
66 66 66 6C
D.
OF8H, 06CH, 066H, 066H, 066H. 06CH. OF8H. OOOH I 0_44 0
68 18 68 62
08
OFEH, 062H, 068H.018H. 068H, 062H, OFEH ,OOOH I 0_45 E
611i 78 68 60
08
OFEH,062H, 068H,018H, 068H, 060H, OFOH, OOOH I 0_46 F
CO CO CE 66
08
03CH, 066H, OCOH, OCOH. OCEH, 066H, 03EH, OOOH I 0_47 Ci
CC FC CC CC
08
OCCH, OCCH. OCCH,OFCH. OCCH, OCCH, OCCH, OOOH I 0_48 H
30 30 30 30
08
078H, 030H, 030H, 030H. 030H, 030H. 07 8H. OOOH I 0_49
DC DC CC CC
08
01 EH. OOCH, OOCH.OOCH. OCCH, OCCH, 078H, OOOH I 0_4A .J
6C 78 6C 66
08
OE6H,066H. 06CH,078H. 06CH, 066H, OE6H, OOOH I 0_4B K
60 60 62 66
08
OFOH, 060H, 060H, 060H. 062H, 066H, OFEH. OOOH I 0_4C L
FE FE 06 C6
08
OC6H, OEEH. OFEH, OFEH, 006H, OC6H, OC6H, OOOH I 0_40 M
F6 DE CE C6
08
OC6H. OE6H. OF6H. OOEH, OCEH, OC6H, OC6H, OOOH I 0_4E N
C6 C6 C6 6C
08
038H, 06CH, OC6H, OC6H. OC6H, 06CH. 038H, OOOH I 0_4F a
66 7C 60 60
08
OFCH. 066H. 066H, 0 7CH, 060H, 060H, OFOH, OOOH I o_50 P
CC CC DC 18
08
078H, OCCH, OCCH, OCCH. ODCH, 0 78H. 0 I CH. OOOH ; o_51 Q
66 7C 6C 66
08
OFCH, 066H.066H, 07CH, 06CH, 066H, OE6H, OOOH I 0_52 R
EO 10 IC CC
08
018H, OCCH. OEOH. 010H, 0 I CH, OCCH. 078H. OOOH ; 0_53 S
30 30 30 30
08
OFCH, OB4H, 030H, 030H, 030H. 030H, 0 7 8H. OOOH I 0_54 T
,
CC CC CC CC
08
OCCH, OCCH,OCCH, OCCH, OCCH, OCCH, OFCH,OOOH I 0_55 U
CC CC CC 78
08
OCCH. OCCH.OCCH, OCCH, OCCH, 078H, 030H, OOOH I 0_56 v
C6 06 FE EE
DB
OC6H, OC6H, OC6H, 006H. OFEH, OEEH. OC6H, OOOH I 0_51 W
ORGS
COLON
EQUAL
GREATER THAN
QUEST I ON MARK
AT
O~~~ ~~~~~no! I ~~iG~t.~O:~~~ a ~Li;yb ~LE Yer. I on
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1491
1498
1499
1500
1501
1502
1503
1504
1505
1506
1501
1508
1509
1510
1511
1512
1513
1514
1515
1516
1511
1518
1519
1520
1521
1522
1523
1524
1525
,526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
154'
1542
1543
1&44
1545
1546
C6
ID2E C&
C6
ID36 CC
78
ID3E FE
FE
ID4& 78
78
ID4E CO
02
ID56 78
78
ID5E 10
00
ID66 00
00
00
C&
00
CC
00
C&
00
&0
00
60
00
18
00
38
00
00
FF
106E 30
00
ID76 00
76
ID7E EO
DC
ID86 00
78
IDBE IC
76
ID96 00
78
ID9E 38
FO
IOA6 00
OC
IDAE EO
E6
IOB6 30
18
IDBE OC
CC
IOC6 EO
E6
IDCE 10
78
IOD6 00
C6
IDOE 00
CC
lDE6 00
78
30
00
00
00
60
00
00
00
OC
00
00
00
6C
00
00
F8
60
00
00
00
00
78
60
00
30
00
00
00
00
00
00
00
IDEE 00
60
IOF6 00
OC
IDFE 00
Fa
IE06 00
F8
lEOE 10
18
IEl6 00
16
IEIE 00
30
IE26 00
6C
IE2E 00
C6
IE36 00
OC
IE3E 00
FC
IE46 IC
IC
IE4E 18
18
IE56 EO
EO
IE5E 76
00
IE66 00
FE
00
Fa
00
IE
00
00
00
00
30
00
00
00
00
00
00
00
00
00
00
F8
00
00
30
00
18
00
30
00
DC
00
10
00
2.00
1-15
04-21-8&
6C 38 38 &C
DB
CC 18 30 30
DB
OCCH, OCCH, OCCH, 018H, 030H, 030H, 078H, OOOH I 0_59 Y
8C 18 32 6&
DB
OFEH.OC6H,08CH, 01 8H,032H,O&6H,OFEH,OOOH I 0_5A Z
60 &0 60 60
DB
078H, 060H, O&OH, O&OH, 060H, 060H, 078H. OOOH I D_58 (
30 18 OC 06
DB
OCOH, 060H, 030H, a 18H, OOCH, 006H, 002H, OOOH I D_5C
18 18 18 18
DB
078H, a I 8H, a 18H, 0 18H, a 18H, a 18H, 078H. OOOH I o_50 ]
6e C6 00 00
DB
01 OH, 038H, 06CH, OC6H, OOOH, OOOH ,OOOH, OOOH I D_5E
00 00 00 00
DB
OOOH, OOOH,OOOH, OOOH, OOOH, OOOH, OOOH, OFFH I D_5F
18 00 00 00
DB
030H,030H,0 18H,OOOH,OOOH, OOOH,OOOH,OOOH I 0_60 '
78 OC 7C CC
DB
OOOH, OOOH, 078H, OOCH, 07CH, OCCH, 076H, OOOH I D_61
OC6H, OC6H. 06CH, 038H, 038H, O&CH, OC&H, OOOH I D_58 X
*
*
.
60 7C 66 6&
DB
OEOH, 060H, 060H, 07CH, 066H, 066H, OOCH, OOOH I D_62 b
DB
OOOH, OOOH, 078H, OCCH, OCOH, OCCH, 078H, OOOH I D_63 c
OC 7C CC CC
DB
0ICH,OOCH,OOCH,07CH,OCCH,OCCH,016H, OOOH I D_64 d
78 CC FC CO
DB
OOOH, OOOH, 078H, OCCH, OFCH, OCOH, 018H, OOOH I D_65 •
60 FO 60 60
DB
038H, 06CH, 060H, OFOH, 060H, 060H, OFOH, OOOH I D_6& r
76 CC ec 7C
DB
OOOH, OOOH, 076H, OCCH, OCCH, 07CH, OOCH, OF8H I D_67 I
6C 76 66 66
DB
OEOH, O&OH, 06CH, 016H, 066H, 066H, OE6H, OOOH I 0_68 h
10 30 30 30
DB
030H, OOOH, 070H, 030H, 030H, 030H, 078H, OOOH I D_69
I
OC OC Oc CC
DB
OOCH. OOOH, OOCH, OOCH, OOCH, OCCH, OCCH. 078H I 0_6A
J
66 6C 78 6C
DB
OEOH, 060H, 066H, 06CH, 018H, 06CH, OE6H, OOOH I D_6B k
30 30 30 30
DB
070H, 030H, 030H, 030H, 030H, 030H, 078H, OOOH I 0_6C
CC FE FE 06
DB
OOOH, OOOH, OCCH, OFEH, OFEH, 006H, OC6H, OOOH I o_60 m
F8 CC CC CC
DB
OOOH, OOOH. OF8H. OCCH. OCCH. OCCH, OCCH, OOOH I D_6E n
78 CC CC CC
DB
OOOH, OOOH. 0 7 8H, OCCH. OCCH. OCCH, a 7 8H, OOOH ; 0_6F
DC 66 66 7C
DB
OOOH. OOOH. ODCH. 066H, 066H. 0 7CH, 060H, OFOH I 0_70 P
DB
OOOH, OOOH, 076H. OCCH, OCCH, 07CH, OOCH. a 1EH I o_71
DB
OOOH, OOOH. ODCH, 016H, 066H, 060H, OFOH,OOOH I 0_72 r
7C CO 78 OC
DB
OOOH, OOOH, 07CH, OCOH. 078H, OOCH. OF8H, OOOH I 0_73 •
7C 30 30 34
DB
010H.030H.01CH,030H,030H,034H,OI8H.000H I 0_74 to.
CC CC CC ec
DB
OOOH. OOOH, OCCH. OCCH, OCCH, OCCH I 016H. OOOH I 0_'5 u
CC CC CC 18
DB
OOOH. OOOH, OCCH, OCCH, OCCH. 078H, 030H, OOOH 1 0_76 "
C6 06 FE FE
DB
OOOH, OOOH. OC6H, 006H, OFEH, OFEH, 06CH. OOOH I 0_77 w
C6 6C 38 6C
DB
OOOH, OOOH, OC6H, 06CH, 038H, 06CH, OC6H, OOOH I 0_'8 x
CC cc ec 7C
DB
OOOH, OOOH, OCCH, OCCH, OCCH, 07CH. OOCH, OF8H I 0_79 Y
FC 98 30 64
DB
OOOH, OOOH. OFCH, 098H, 030H, 064H, OFCH, OOOH I 0_7A z
30 EO 30 30
DB
a I CHi 030H.030H. OEOH, 030H. 030H, a I CH, OOOH I 0_78 (
18 00 18 18
DB
a 18H, a 18H, a 18H, OOOH, a I 8H, 0 I 8H, a 18H. OOOH I 0_7C
q
I
30 IC 30 30
DB
OEOH, 030H, 030H. a 1CH, 030H. 030H, OEOH. OOOH I 0_70 )
00 00 00 00
DB
o 76H, OOCH, OOOH, OOOH, OOOH, OOOH I OOOH, OOOH ; 0_7E
38 6C C6 e6
DB
OOOH, a I OH, 038H, 06CH, OC6H. OC6H, OFEH, OOOH I D_7F
DRG
ORG
TIME_OF DAY
-JMP
1----lEAS
• lEAS
I EA5 E9 0000 E
*
LEFT BRACE
BROKEN STROKE
RIGHT BRACE
TILDE
DELTA
TIME OF DAY
11-
I E6E E9 0000 E
APOSTROPHE REV
0
76 CC CC 7C
IEIflE
CIRCUMFLEX
I
DC 16 66 60
= IE6E
BACKSLASH
RIGHT BRACKET
UNDERSCORE
78 CC CO CC
;-----
LEFT 8RACKET
OFE6EH
01E6EH
EQU
S
TIME_OF_OAY_'
1 YECTOR ON TO MOYED B I OS CODE
TIMER INTERRUPT
11ORG
DRG
TIMER_tNT
"".
OFEA5H
0lEA5H
EQU
S
TlMER_tNT_1
1 YECTOR ON TO MOVED B t as CODE
ORGS
5-197
1-16
04-21
IUT
1&41
U49
1&&0
1&51
1&&2
1553
1554
1555
1556
US5T
1558
1&&9
1560
1561
1562
::::
1565
1566
156T
1&61
HI69
15TO
15Tl
15T2
usn
15T4
15T5
HST6
15TT
15TI
15T9
1510
1581
1582
1513
1514
1585
1516
151T
1511
1589
Ino
1591
1592
11593
15,4
1595
11596
1597
1591
1&99
1600
1601
1602
1603
1604
1605
1606
160T
1608
1609
1610
1611
1612
1613
1614
1615
1616
161T
1618
1619
1620
1621
1622
1623
1624
1625
1626
162T
1628
1629
1630
1631
IEF3
IEF3
IEF3
IEF5
lEFT
IEF9
IEFB
I EFD
IEFF
IFOI
PAGE
,-----
VECTOR TABl.E
JI-
ORG
ORO
IEAIS
09lT
0000
0000
0000
0000
OF&T
0000
R
VECTOR_T~:l.E
R
DW
DW
DW
DW
DW
DW
DW
E
E
E
E
R
E
1----IF03
I F05
IFOT
IF09
IFOB
I FOD
IFOF
IFII
IFI3
IFI5
IFIT
IFI9
IFIB
IFIO
IF IF
IF21
1065 R
1140 R
1141 R
ocn R
OT39 R
1159 R
OI2E R
OFD2 R
0000
06F2 R
IE6E R
IF53 R
IFS! R
IOU R
OFCT R
0000
IF23
IF23
IF25
IF2T
I F29
IF2B
IF2D
I F2F
IF31
E
E
E
E
E
E
E
E
IF53
DW
DW
DW
DW
DW
DW
DW
DW
OFFSET
OFFSET
OFFSET
OFFSET
OF'FSET
OFFSET
OFFSET
OFF'SET
OOOOOH
(BIOS CAL.LS AND POINTERS)
VIDEO 10
EQU I PiJENT
MEMORY 5 I ZE DET
DISKETTE 10RSU2 10CASSETTE 10
KEY80ARC-10
PR I NTER To
-
g~~~~~ ~~~~_~~R~:
Y
:~~ii g~==~-=ii~~
LABEL WORD
11-
ORO
ORO
-----------------
VIOED OISPLAY
GET EQUIPMENT FLAG WORD
GET REAL MODE MEMORY SIZE
DISKETTE
COMMUNICATION ADAPTER
EXPANDED 8105 FUNCTION CALL
KEYBOARD INPUT
PRINTER OUTPUT
OF600H INSERTED FOR BASIC
BOOT FROM SYSTEM MEDIA.
TIME OF DAY
KEYBOARD BREAK ADDRESS
TIMER BREAK ACDRESS
VIDEO PARAMETERS
DISKETTE PARAMETERS
POINTER TO VIOEa EXTENSION
INT
INT
INT
INT
INT
INT
INT
INT
TOH
TIH
72H
T3H
74H
T5H
76H
7TH
- REAL TIME CLOCK
- REDIRECT TO INT OAH
-MATH COPROCESSOR
-FIXED DISK
-
IRQ
IRQ
IRQ
IRQ
IRQ
IRQ
IRQ
IRQ
OFFi!53H
0lF53H
I BIOS DUMMY (NUL.L. J I NTERRUPT RETURN
EQU
IRET
1F'54
• IF54
I F154 £9 0000 E
1-----
PRINT SCREEN
11-
ORO
ORO
PR I NT_SC~~N
OFF&4H
o IF54H
EQU
•
PRINT_SCREEN_I
1 VECTOR ON TO MOVED BIOS CODE
.LIST
1 TUTOR
1--- ---- -- - - ---- ---------- -- - ------ - - ----
,
I
I
POWER ON -RESET VECTOR
,
I
I
IFFO
1- -- ------ -------------- - - --- ---- -- - - ---IIORG
OFFFOH
ORG
OIFFOH
IFFO
P_O_R
1-----
POWER ON RESET
LABEL
FAR
I POWER ON RESTART EXECUTION LOCATION
IFFO EA
IFFI 0058 R
IFF3 FOOO
DB
DW
DW
OEAH
OFFSET
OFOOOH
IFF5 30 34 2F 32 31 2F
38 36
DB
'04/21/86'
IFFE
IFFE FC
ORO
DB
oIFFEH
IFFF
5-198
10H
IIH
12H
13H
14H
15H
16H
ITH
18H
19H
IAH
IBH
ICH
IDH
IEH
IFH
( INTERRUPT TOH THRU TFH I
OFFSET RTC INT
OFFSET RE I5IRECT
OFFSET oTI
OFFSET DII
OFFSET 011
OFFSET INT 287
OFFSET olT
OFFSET 011
DUMMY INTERRUPT HANDLER
IF53 CF
INT
INT
INT
INT
tNT
INT
I NT
INT
INT
INT
INT
INT
INT
INT
INT
INT
OFFSET VIDEO-PARMS
ro~~~~ 0 I SK_§ASE
1-----
DUMMY_RETURN
AT LOCAT I ON OFEF3H
VECTOR TABLE VALUES FOR POST TESTS
INT 08H - HARDWARE TIMER a
IRQ
INT 09H - KEYBOARD
IRQ
INT OAH - SL.AVE INTERRUPT INPUT
INT OBH IRQ
INT OCH IRQ
INT OOH IRQ
INT OEH - DISKETTE
IRQ
INT OFH IRQ
g~~~~~ C~~~_INT
SLAVE_ VECTOR_TABLE
0000
0000
0000
0000
0000
0000
0000
0000
IF53
•
OFEF3H
0lEF3H
l.ABEl.
WORD
OFFSET TIMER INT
OFFSET KB I NT
OFFSET DTI
OFFSET CII
OFFSET 011
OFFSET 011
SOFTWARE INTERRUPTS
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
~86
CODE
ORGS
ENDS
END
RESET
MODEL._BYTE
,,
I HARD CODE FAR JUMP TO SET
OFFSET
SEGMENT
I REL.EASE MARKER
I THIS PC'S 10 ( MODEL. eYTE I
I CHECKSUM AT LAST L.OCATION
8
9
10
II
12
13
'4
1i!5
SECTION 6. INSTRUCTION SET
80286 Instruction Set ........................... 6-3
Data Transfer .............................. 6-3
Arithmetic .................. . . . . . . . . . . . . . .. 6-6
Logic ..................................... 6-9
String Manipulation ........................ 6-11
Control Transfer ........................... 6-13
Processor Control .......................... 6-17
Protection Control ......................... 6-18
80287 Coprocessor Instruction Set ................ 6-22
Data Transfer ............................. 6-22
Comparison .............................. 6-23
Constants ................................ 6-24
Arithmetic ................................ 6-25
Transcendental ............................ 6-26
Instruction Set
6-1
6-2 Instruction Set
80286 Instruction Set
Data Transfer
MOV=move
Register to Register/Memory
1000100w
I
mod reg r/w
Register/Memory to Register
1000101w
I
mod reg r/w
Immediate to Register/Memory
1100011w
I
mod 000 r/w
data
data if w = 1
Immediate to Register
1011wreg
data
data if w
=1
Memory to Accumulator
1010000w
addr-low
addr-high
Accumulator to Memory
1010001w
addr-low
addr-high
Register/Memory to Segment Register
10001110
modOreg r/w
reg:/< 01
Segment Register to Register/Memory
10001100
PUSH
modOreg r/w
= Push
Memory
11111111
modll0 r/w
Instruction Set
6-3
Register
01010reg
Segment Register
000regll0
Immediate
011010s0
data
data if s
PUSHA = Push All
01100000
POP
= Pop
Memory
10001111
modOOO rim
Register
01011reg
Segment Register
OOOreglll
reg
¢
01
POPA = Pop All
I
01100001
XCHG = Exchange
Register/Memorywith Register
1000011w
mod reg rim
Register with Accumulator
10010reg
6-4
Instruction Set
0
IN = Input From
Fixed Port
1110010w
port
Variable Port
1110110w
OUT
= Output To
Fixed Port
1110011w
port
Variable Port
1110111w
XLAT
I
11010111
LEA
I
=
Load EA to Register
10001101
LDS
I
= Translate Byte ·to AL
=
I
mod reg rIm
Load Pointer to DS
11000101
I
mod reg rIm
mod" 11
LES = Load Pointer to ES
I
11000100
I
mod reg rIm
mod" 11
LAHF = Load AH with Flags
110011111
SAHF = Store AH with Flags
I
10011110
Instruction Set
6-5
PUSHF
I
= Push Flags
10011100
POPF = POp Flags
I
10011101
Arithmetic
ADD
= Add
Register/Memory with Register to Either
OOOOOOOw
I
mod reg rIm
Immediate to Register Memory
100000sw
I
modOOO rIm
data
data if sw
= 01
data if sw
= 01
Immediate to Accumulator
data
00000lO-~
data if w =
ADC = Add with Carry
Register/Memory with Register to Either
000100dw
I
mod reg rIm
Immediate to Register/Memory
100000sw
I
modOOO rIm
data
Immediate to Accumulator
0001010w
data
INC = Increment
Register/Memory
l111111w
6-6
modOOO rIm
Instruction Set
data if w • 1
Register
01000reg
SUB - Subtract
Register/Memory with Register to Either
001010dw
mod reg rim
Immediate from Register/Memory
100000sw
modl0l rim
data
data if sw
= 01
Immediate from Accumulator
0010110w
data
data if w '" 1
SBB == Subtract with Borrow
Register/Memory with Register to Either
000l10dw
mod reg rim
Immediate to Register/Memory
100000sw
modOll rim
data
data if sw
= 01
Immediate to Accumulator
000l110w
data
data if w
=1
DEC = Decrement
Register/Memory
ll11111w
modOOl rim
Register
01001reg
CMP == Compare
Register/Memory with Register
0011101w
mod reg rim
Instruction Set
6-7
Register with Register/Memory
0011100w
I
mod reg rIm
Immediate with Register/Memory
100000sw
I
modll1 rIm
I
data
data if sw • 01
Immediate with Accumulator
0001110w
NEG
I
I
data if w • 1
I
modOll
rIm
= ASCn Adjust for Add
00110111
DAA
I,
data
= Change Sign
1111011w
AAA
I
= Decimal Adjust for Add
00100111
AAS = ASCn Adjust for Subtract
I
00111111
DAS = Decimal Adjust for Subtract
I
00110111
MUL = Multiply (Unsigned)
I
1111011w
IMUL
I
modl00
rIm
= Integer Multiply (Signed)
1111011w
6-8
I
I
modl0l
Instruction Set
rIm
IIMUL
I
= Integer Immediate Multiply (Signed)
011010sl
I
mod reg
rIm
I
Data
I Data if s = 0
DIV = Divide (Unsigned)
I
1111011w
IDIV
I
I
modll0
rIm
= Integer Divide (Signed)
11110 llw
I
mod 111
r /m
AAM = ASCII Adjust for Multiply
I
11010100
AAD
00001010
= ASCII Adjust for Divide
11010101
CBW
I
I
00001010
= Convert Byte to Word
10011000
CWD = Convert Word to Double Word
10011001
Logic
Shift/Rotate Instructions
Register/Memory by
1101000w
I mod TTT rIm
Register/Memory by CL
1101001w
I
mod TTT rIm
Register/Memory by Count
1100000w
mod TTT rIm
count
Instruction Set
6-9
TTT
Instruction
000
001
010
011
100
101
111
ROL
ROR
RCL
RCR
SHL/SAL
SHR
SAR
AND = And
Register/Memory and Register to Either
001000dw
mod reg rim
Immediate to Register/Memory
1000000w
modOOO rim
data
data if w = 1
Immediate to Accumulator
0010010w
data
data if w = 1
TEST = AND Function to Flags; No Result
Register/Memory and Register
1000010w
mod reg rim
Immediate Data and Register/Memory
1111011w
modOOO rim
data
data if w = 1
Immediate to Accumulator
0000110w
data
data if w = 1
Or= Or
Register/Memory and Register to Either
000010dw
mod reg rim
Immediate to Register/Memory
1000000w
6-10
modOOl rim
Instruction Set
data
data if w = 1
Immediate to Accumulator
0000l10w
data
data if w
=1
XOR = Exclusive OR
Register/Memory and Register to Either
00l100dw
I
mod reg rim
Immediate to Register/Memory
1000000w
I
modll0 rim
data
data if w = 1
Immediate to Accumulator
0010010w
data
data if w = 1
NOT = Invert Register/Memory
1111011w
modOl0 rim
String Manipulation
MOVS = Move Byte Word
1010010w
CMPS = Compare Byte Word
1010011w
SCAS = Scan Byte Word
1010111w
LODS = Load Byte Word to AL/AX
I
1010110w
Instruction Set
6-11
STOS = Store Byte Word from ALIAX
I
1010101w
,--~ ."'-~
INS = Input :Qyte from DX Port
I
0110110w
OUTS = Output Byte Word to DX Port
I
0110111w
REPlREPNE, REPZ/REPNZ
=
Repeat String
Repeat Move String
11110011
1010010w
Repeat Compare String (z/Not z)
1111001 z
1010011w
Repeat Scan Stiing (z/Not z)
1111001 z
1010111w
Repeat Load String
11110011
1010110\'/
Repeat Store String
11110011
1010101w
Repeat Input String
11110011
I
011011 Ow
Repeat Output String
11110011
6-12
1010011w
IDstruction Set
Control Transfer
CALL = Call
Direct Within Segment
11101000
disp-low
disp-high
Register/Memory Indirect Within Segment
11111111
modOl0 rIm
Direct Intersegment
10011010
Segment Offset
Segment Selector
Indirect Intersegment
11111111
modOll rIm
(mod
~
11)
JMP = Unconditional Jump
Short/Long
di sp-low
11101011
Direct within Segment
11101001
disp-low
disp-high
Register/Memory Indirect Within Segment
11111111
modl00 rIm
Direct Intersegment
Segment Offset
11101010
Segment Selector
Indirect Intersegment
11111111
I
modl0l rIm
(mod
~ 11)
RET = Return from Call
Within Segment
11000011
Instruction Set
6-13
Within Segment Adding Immediate to SP
11000010
I
data-low
data-high
Intersegment
11001011
Intersegment Adding Immediate to SP
11001010
I
data-low
data-high
JE/JZ = Jump on Equal/Zero
I
01110100
I
disp
JL/JNGE = Jump on Less/Not Greater, or Equal
I
0111)100
I
disp
JLE/JNG = Jump on Less, or Equal/Not Greater
II
nlllllln
VI'
I
I
I
,....
II
.I:.,n
......... 1"
JB/JNAE = Jump on Below/Not Above, or Equal
I
01110010
I
disp
JBE/JNA = Jump on Below, or Equal/Not Above
I
01110110
I
disp
JP/ JPE = Jump on Parity/Parity Even
I
01111010
I
disp
JO = Jump on Overflow
I
01110000
JS
= Jump on Sign
I
01111000
6-14
I
I
disp
disp
Instruction Set
JNE/JNZ = Jump on Not Equal/Not Zero
I
01110101
I
disp
JNL/JGE = Jump on Not Less/Greater, or Equal
I
01111101
I
disp
JNLE/JG = Jump on Not Less, or Equal/Greater
I
01111111
I
disp
JNB/JAE = Jump on Not Below/Above, or Equal
I
01110011
I
disp
JNBE/JA = Jump on Not Below, or Equal/Above
I
01110111
I
disp
JNP/JPO = Jump on Not Parity/Parity Odd
101111011
I
disp
JNO = Jump on Not Overflow
I
01110001
I
disp
JNS = Jump on Not Sign
I
01111011
I
disp
LOOP = Loop ex Times
11100010
I
disp
LOOPZ/LOOPE
11100001
= Loop whlle Zero/Equal
disp
Instruction Set
6-15
LOOPNZ/LOOPNE
I
11100000
I
= Loop wMe Not Zero/Not Equal
disp
JCXZ = Jump on CX Zero
I
11100011
ENTER
I
I
disp
= Enter Procedure
11001000
I
data-low
data-high
LEAVE = Leave Procedure
I
11001001
INT
= Interrupt
Type Specified
11001101
Type
Type 3
11001100
INTO
I
= Interrupt on Overflow
11001110
IRET = Interrupt Return
I
11001111
BOUND
I
= Detect Value Out of Range
01100010
6-16
I
mod reg rIm
Instruction Set
Processor Control
CLC = Clear Carry
I
11111000
CMC = Complement Carry
1
11110101
STC
I
11111001
CLD
I
= Set Carry
= Clear Direction
11111100
SID = Set Direction
I
11111101
CLI Clear Interrupt
111111010
STI = Set Interrupt
1
11111011
HLT = Halt
1
11110100
WAlT = Wait
1
10011011
LOCK = Bus Lock Prefix
11110000
Instruction Set
6-17
CTS = Clear Task Switched Flag
I
00001111
ESC
I
00000110
= Processor Extension Escape
modLLL rim
11011TTT
Protection Control
LGDT = Load Global Descriptor Table Register
I
00001111
I
00000001
I
modOl0 rim
SGDT = Store Global Descriptor Table Register
I
00001111
LIDT
II
I
00000001
I
modOOO rim
= Load Interrupt Descriptor Table Register
nnnnllll
-_
... - ..
I
1
II
nnnnnnnl
""...,...,...,...,...,v
I
II
~~~nll _/~
IIIVUU I
I
I
/111
SIDT = Store Interrupt Descriptor Table Register
I
00001111
I
00000001
I
modOOl rim
LLDT = Load Local Descriptor Table Register from
Register/Memory
I
00001111
I
00000000
I
modOl0 rim
SLDT = Store Local ,Descriptor Table Register from
Register/Memory
I
00001111
I
00000000
I
modOOO rim
LTR = Load Task Register from Register/Memory
00001111
6-18
00000000
Instruction Set
modOl1 rim
STR = Store Task Register to Register/Memory
I
0000 1111
LMSW
I
I
00000000
I
modOOl
rIm
= Load Machine Status Word from Register/Memory
0000 1111
I
00000001
I
modll0
rIm
SMSW = Store Machine Status Word
I
00001111
LAR
I
I
00000001
I
modl00
rIm
= Load Access Rights from Register/Memory
00001111
LSL
I
I
00000010
I
mod reg
rIm
= Load Segment Limit from Register/Memory
00001111
ARPL
I
00000011
I
mod reg
rIm
= Adjust Requested Privilege Level from Register/Memory
I
01100011
I
mod reg
rIm
VERR = Verify Read Access; Register/Memory
I
0000 1111
I
00000000
modl00
rIm
modl0l
rIm
VERR = Verify Write Access
00001111
00000000
Instruction Set
6-19
The effective address (EA) of the memory operand is computed
.
according to the mod and rim fields:
=
If mod 11, then rim is treated as a reg field.
If mod = 00, then disp = 0, disp-Iow and disp-high are
absent.
.
If mod = 01, then disp = disp-~ow sign-extended to 16 bits,
. . .
disp-high is absent.
If mod = 10, then disp = disp,:,high:disp-Iow.
If rim = 000, then EA = (BX)
+ (SI) + PISP
If rim = 001, then EA = (BX) + (SI) + DISP
If rim
If rim
If rim
If rim
If rim
If rim
=
=
=
=
=
=
010, then EA
011, then BA
100, then EA
101, then EA
110, then EA
111, then EA
= (BP) + .(SI) + DISP
= (BP) + (DI) + DISP
== (SI) + DISP
= (DI) + DISP
== (BP) + DISP
= (BX) + DISP
DISP follows the second byte of the instruction (before data if
required).
Note: An exception to the above statements occurs when
mod=OO and r/m= 110, in which caseEA = disp-high; disp-Iow.
Segment Override PrefIX
00lregOOl
6-20
Instruction Set
The 2-bit and 3-bit reg fields are defined as follows:
2-Bit reg Field
reg
Segment Register
00
01
ES
CS
reg
Segment Register
10
11
SS
DS
3-Bit reg Field
16-bit (w
000
001
010
011
100
101
110
111
AX
CX
DX
BX
SP
BP
SI
DI
= 1)
8-bit (w
000
001
010
011
100
101
110
111
= 0)
AL
CL
DL
BL
AH
CH
DH
BH
The physical addresses of all operands addressed by the BP
register are computed using the SS segment register. The physical
addresses of the destination operands of the string primitive
operations (those addressed by the OI register) are computed
using the ES segment, which may not be overridden.
Instruction Set
6-21
80287 Coprocessor Instruction Set
The following is an instruction set summary for the 80287
coprocessor. In the following, the bit pattern for escape is 1101l.
Data Transfer
FLD = Load
Integer/Real Memory to ST(O)
escape MF 1
I
mod 000 rim
Long Integer Memory to ST(O)
escape 111
I
mod 101 rim
Temporary Real Memory to ST(O)
escape 011
I
mod 101 rim
BCD Memory to ST(O)
escape 111
I
mod 100 rim
ST(i) to ST(O)
11000ST(i)
escape 001
FST
=Store
ST(O) to Integer/Real Memory
escape MF 1
I
mod 010 rim
ST(O) to ST(i)
I escape 101
FS1'P
11010 ST( j)
=Store and Pop
ST(O) to Integer/Real Memory
escape MF 1
6-22
mod 011 rim
Instruction Set
ST(O) to Long Integer Memory
escape 111
I
mod 111 rim
ST(O) to Temporary Real Memory
escape 011
I
mod 111 rim
ST(O) to BCD Memory
escape 111
I
mod 110 rim
ST(O) to ST(i)
11011 ST( j)
escape 101
FXCH = Exchange ST(i) and ST(O)
I escape 001 I
11001 ST(i)
Comparison
FCOM = Compare
IntegerlReal Memory to ST(O)
escape MF 0
I
mod 010 rim
ST(i) to sT(O)
escape 000
I
11010 ST(i)
FCOMP = Compare and Pop
IntegerlReal Memory to ST(O)
escape MF 0
I
mod 011 rim
ST(i) to ST(O)
escape 000
I
11010 ST(i)
FCOMPP = Compare ST(i) to ST(O) and Pop Twice
I escape 110 I
11011001
Instruction Set
6-23
FfST
= Test ST(O)
I escape 001 I
11100100
FXAM = Examine ST(O)
I escap~ 001 I
11100101
Constants
FLOZ = Load + 0.0 into ST(O)
I escape 000 I
FLOI
11101110
= Load + 1.0 into ST(O)
I escape 001 I
11101000
FLOPI = Load." into ST(O)
FLOL2T = Load log210 into ST(O)
I escape 001 I
11101001
FLOLG2 = Load lOKIO 2 into ST(O)
I escape 001 I
11101100
FLOLN2 = Load lOKe 2 into ST(O)
I escape 001 I
6-24
11101101
Instruction Set
I
Arithmetic
FADD = Addition
Integer/Real Memory with ST(O)
escape MF 0
I mod 000 rim
ST(i) and ST(O)
11000 ST(i)
escape dPO
FSUB
= Subtraction
Integer/Real Memory with ST(O)
escape MF 0
I
mod lOR rim
ST( j) and ST(O)
escape dPO
1110R rim
FMUL = Multiplication
Integer/Real Memory with ST(O)
escape MF 0
I
mod 001 rim
ST( i) and ST(O)
escape dPO
11001 rim
FDIV = Division
Integer/Real Memory with ST(O)
escape MF 0
I
mod l1R rim
ST(i) and ST(O)
escape dPO
1111 R r /m
FSQRT = Square Root of ST(O)
I escape 001 I
11111010
Instruction Set
6-25
FSCALE = Scale ST(O) by ST(1)
I escape 001 I
11111101
FPREM = Partial Remainder of ST(O) + ST(l)
I escape 001 I
11111000
FRNDINT = Round ST(O) to Integer
I escape 001 I
11111100
FXTRACT = Extract Components of ST(O)
I escape 001 I
11110100
FADS = Absolute Value of ST(O)
I escape 001 I
11100001
FCHS = Change Sign of ST(O)
I escape 001 I
11100000
Transcendental
FPTAN = Partial Tangent of ST(O)
I
escape 001
I
11110010
FPATAN = Partial Arctangent of ST(O) + ST(1)
I
escape 001
I
I11l0011
F2XM1 = 2ST(O) -1
I
escape 001
I
11110000
FYL2X = ST(l) x Log2 [ST(O»)
I
escape 001
6-26
I
11110001
Instruction Set
FYL2XP1 = ST(1) x Log2 [ST(O) + 1]
I
escape 001
I
11111001
FINIT = Initialize NPX
I
escape 011
I
11100011
FSETPM = Enter Protected Mode
I
escape 011
I
11100100
FSTSWAX = Store Control Word
I
escape 111
I
11100000
FLDCW = Load Control Word
I
escape 001
I
mod 101 rIm
FSTCW = Store Control Word
I
escape 001
FSTSW
I
=
I
mod 111 rIm
Store Status Word
escape 101
I
mod 101 rIm
FCLEX = Clear Exceptions
I
escape 011
I
11100010
FSTENV = Store Environment
I
escape 001
FLDENV
=
I
mod 110 rIm
Load Environment
escape 001
mod 100 rIm
Instruction Set
6-27
FSAVE = Save State
1 escape 101 1 mod 110 rIm
FRSTOR = Restore State
I· escape
101 1
mod 100 rIm
FINCSTP = Increment Stack Pointer
1 escape 001 1
11110111
FDECSTP = Decrement Stack Pointer
I
escape 001
1
111100110
FFREE = Free ST(i)
I
escape 101 1
11000ST( i)
FNOP = No Operation
escape 101
6-28
11010000
Instruction Set
MF is assigned as follows:
MF
Memory Format
00
01
10
11
32-bit Real
32-bit Integer
64-bit Real
16-bit Integer
The other abbreviations are as follows:
Term
Definition
Bit = 0
ST
Stack top
Stack top
d
P
R
Destination
Pop
Reverse*
Dest. is ST(O)
No pop
Dest. (op) source
Bit '" 0
(I)- ith register from
the top
Dest. is ST(i)
Pop
Source (op) dest.
* When d=l, reverse the sense of R.
Instruction Set
6-29
Notes:
SECTION7. CHARACTERS,
KEYSTROKES, AND COLORS
Character Codes ............................... 7-3
Quick Reference .............................. 7-14
Characters, Keystrokes, and Colors
7-1
7-2
Characters, Keystrokes, and Colors
Character Codes
As Text Attributes
Value
Hex
Dec
00
0
08
8
09
9
OA
As Characters
Color/Graphics
Monitor Adapter
Symbol
IBM
Monochrome
Display
Adapter
Black
Light Blue
High Intensity
Underline
Black
Light Green High Intensity
Brown
Blue
Light Grey
Normal
Characters, Keystrokes, and Colors
7 .. 3
As Text Attributes
Color/Graphics
Monitor Adapter
As Characters
Value
Keystrokes
IBM
Monochrome
Display
Adapter
Modes Background Foreground
Hex
Dec
Symbol
18
24
t
Ctrl X
Blue
Dark Grey
High Intensity
19
25
~
Ctrl Y
Blue
Light Blue
1A
26
Ctrl Z
Blue
Light Green High Intensity
1B
27
-
High Intensity
Underline
Ctrl [,
Esc, Shift
Esc, Crtl
Esc
Blue
Light Cyan
High Intensity
Ctrl \
Blue
Light Red
High Intensity
Ctrl]
Blue
Light
Magenta
High Intensity
Ctrl6
Blue
Yellow
High Intensity
Ctrl-
Blue
White
High Intensity
Space Bar,
Shift,
Space,
Ctrl Space,
Alt Space
Green
Black
Normal
<-
1C
28
1D
29
1E
30
1F
31
20
32
L
--•
T
Blank
Space
I
I
I
21
33
!
Shift
Green
Blue
Underline
22
"
.
!
jj
"
Shift
Green
Green
Normal
23
35
#
#
Shift
Green
Cyan
Normal
24
36
$
$
Shift
Green
Red
Normal
25
37
%
%
Shift
Green
Magenta
Normal
26
38
&
&
Shift
Green
Brown
Normal
27
39
Green
Light Grey
Normal
28
40
(
(
Shift
Green
Dark Grey
High Intensity
29
41
)
)
Shift
Green
Light Blue
High Intensity
Underline
2A
42
Light Green High Intensity
43
*
+
Note 1 Green
2B
*
+
Shift
Green
Light Cyan
High Intensity
,
-
Green
Light Red
High Intensity
Green
Light
Magenta
High Intensity
Yellow
High Intensity
~.
,
2C
44
,
2D
45
-
2E
46
7-4
,
Note 2 Green
Characters, Keystrokes, and Colors
As Text Attributes
Value
Color/Graphics
Monitor Adapter
As Characters
Modes Background Foreground
IBM
Monochrome
Display
Adapter
Hex
Dec
Symbol
Keystrokes
2F
47
/
/
30
48
0
0
Note3 Cyan
Black
Normal
31
49
1
1
Note 3 Cyan
Blue
Underline
32
50
2
2
Note 3 Cyan
Green
Normal
33
51
3
3
Note 3 Cyan
Cyan
Normal
34
52
4
4
Note 3 Cyan
Red
Normal
35
53
5
5
Note3 Cyan
Magenta
Normal
36
54
6
6
Note 3 Cyan
Brown
Normal
37
55
7
7
Note 3 Cyan
Light Grey
Normal
Dark Grey
High Intensity
Light Blue
High Intensity
Underline
Green
White
High Intensity
38
56
8
8
Note 3 Cyan
39
57
9
9
Note 3 Cyan
3A
58
:
3B
59
;
;
3C
60
<
<
3D
61
=
=
3E
62
>
>
Shift
Cyan
Yellow
High Intensity
White
High Intensity
Black
Normal
Shift
Shift
Cyan
Light Green High Intensity
Cyan
Light Cyan
High Intensity
Cyan
Light Red
High Intensity
Cyan
Light
Magenta
High Intensity
3F
63
?
?
Shift
Cyan
40
64
@
@
Shift
Red
41
65
A
A
Note4 Red
Blue
Underline
42
66
B
B
Note4 Red
Green
Normal
43
67
C
C
Note 4 Red
Cyan
Normal
44
68
D
D
Note4 Red
Red
Normal
45
69
E
E
Note 4 Red
Magenta
Normal
Normal
46
70
F
F
Note4 Red
Brown
47
71
G
G
Note 4 Red
Light Grey
Normal
48
72
H
H
Note4 Red
Dark Grey
H ig h Intensity
49
73
I
I
Note 4 Red
Light Blue
High Intensity
Underline
4A
74
J
J
Note4 Red
Light Green H ig h Intensity
Characters, Keystrokes, and Colors
7-5
As Text Attributes
Color/Graphics
Monitor Adapter
As Characters
Value
IBM
Monochrome
Display
Adapter
Hex
Dec
Symbol
Keystrokes
4B
75
K
K
Note 4 Red
Light Cyan
High Intensity
4C
76
L
L
Note4 Red
Light Red
High Intensity
40
77
M
M
Note 4 Red
Light
Magenta
High Intensity
4E
78
N
N
Note 4 Red
Yellow
High Inlensity
4F
79
0
0
Note4 Red
White
High Intensity
Modes Background Foreground
50
80
P
p
Note4 Magenta
Black
Normal
51
81
Q
Q
Note 4 Magenta
Blue
Underline
52
82
R
R
Note 4 Magenta
Green
Normal
53
83
S
S
Note 4 Magenta
Cyan
Normal
54
84
T
T
Note 4 Magenta
Red
Normal
55
85
U
U
Note 4 Magenta
Magenta
Normal
56
86
V
V
Note 4 Magenta
Brown
Normal
Normal
57
87
W
W
Note4 Magenta
Light Grey
58
88
X
X
Note4 Magenta
Oark Grey
High Intensity
59
89
Y
Y
Note4 Magenta
Light Blue
High Intensity
Underline
5A
90
Z
Z
Note 4 Magenta
Light Green High Intensity
5B
91
[
[
Magenta
Light Cyan
High Intensity
5C
92
\
\
Magenta
Light Red
High Intensity
50
93
I
I
Magenta
Light
Magenta
High Intensity
5E
94
A
A
Shift
Magenta
Yellow
High Intensity
5F
95
-
-
Shift
Magenta
White
High Intensity
60
96
,
Brown
Black
Normal
,
61
97
a
a
Note 5 Brown
Blue
Underline
62
98
b
b
Note 5 Brown
Green
Normal
63
99
c
c
Note 5 Brown
Cyan
Normal
64
100
d
d
Note 5 Brown
Red
Normal
65
101
e
e
Note 5 Brown
Magenta
Normal
66
102
f
f
Note 5 Brown
Brown
Normal
7-6
Characters, Keystrokes, and Colors
As Text Attributes
Color/Graphics
Monitor Adapter
AB Characters
Value
Modes Background Foreground
IBM
Monochrome
Display
Adapter
Hex
Dec
Symbol
Keystrokes
67
103
g
g
Note 5 Brown
Light Grey
Normal
68
104
h
h
Note 5 Brown
Dark Grey
High Intensity
69
105
i
i
Note 5 Brown
Light Blue
High Intensity
Underline
6A
106
j
j
Note 5 Brown
Light Green H ig h Intensity
6B
107
k
k
Note 5 Brown
Light Cyan
High Intensity
6C
108
I
I
Note 5 Brown
Light Red
High Intensity
60
109
m
m
Note 5 Brown
Light
Magenta
High Intensity
6E
110
n
n
Note 5 Brown
Yellow
High Intensity
6F
111
0
0
Note 5 Brown
White
High Intensity
70
112
P
P
Note 5 Light Grey
Black
Reverse Video
71
113
q
q
Note 5 Light Grey
Blue
Underline
72
114
r
r
Note 5 Light Grey
Green
Normal
73
115
s
s
Note 5 Light Grey
Cyan
Normal
74
116
t
t
Note 5 Light Grey
Red
Normal
75
117
u
u
Note 5 Light Grey
Magenta
Normal
76
118
v
v
Note 5 Light Grey
Brown
Normal
77
119
w
w
Note 5 Light Grey
Light Grey
Normal
x
x
Note 5 Light Grey
Dark Grey
Reverse Video
Note 5 Light Grey
Light Blue
High Intensity
Underline
78
120
79
121
Y
Y
7A
122
z
z
Note 5 Light Grey
Light Green High Intensity
7B
123
{
{
Shift
Light Grey
Light Cyan
High Intensity
7C
124
I
I
I
I
Shift
Light Grey
Light Red
High Intensity
70
125
I
I
Shift
Light Grey
Light
Magenta
High Intensity
7E
126
-
-
Shift
Light Grey
Yellow
High Intensity
7F
127
6.
Ctrl -
Light Grey
White
High Intensity
Characters, Keystrokes, and Colors
7 -7
As Text Attributes
Color/Graphics
Monitor Adapter
IBM
Monochrome
Display
Hex Dec Symbol Keystrokes Modes Background Foreground
Adapter
* * * * 80 to FF Hex are Flashing In both Color & IBM Monochrome * .,. .,. .,.
As Characters
Value
80
128
C
Alt 128
Note 6 Black
Black
Non-Display
81
129
(j
Alt 129
Note 6 Black
Blue
Underline
82
130
Alt 130
Note 6 Black
Green
Normal
83
131
e
a
Alt 131
Note 6 Black
Cyan
Normal
84
132
ii
Alt 132
Note 6 Black
Red
Normal
85
133
a
Alt 133
Note 6 Black
Magenta
Normal
86
134
a
Alt 134
Note 6 Black
Brown
Normal
87
135
C
Alt 135
Note 6 Black
light Grey
Normal
88
136
e
Alt 136
Note 6 Black
Dark Grey
Non-Display
89
137
e
Alt 137
Note 6 Black
light Blue
High Intensity
Underline
8A
138
e
Alt 138
Note 6 Black
light Green High Intensity
8B
139
j'
Alt 139
Note 6 Black
light Cyan
High Intensity
8C
140
I
Alt 140
Note 6 Black
light Red
High Intensity
80
141
I
Alt 141
Note 6 Black
light
Magenta
High Intensity
8E
142
'A
Alt 142
Note 6 Black
Yellow
High Intensity
8F
143
A
Alt 143
Note 6 Black
White
High Intensity
90
144
E
Alt 144
Note 6 Blue
Black
Normal
91
145
a!
Alt 145
Note 6 Blue
Blue
Underline
92
146
A=:
Alt 146
Note 6 Blue
Green
Normal
93
147
0
Alt 147
Note 6 Blue
Cyan
Normal
94
148
6
Alt 148
Note 6 Blue
Red
Normal
95
149
<>
Alt 149
Note 6 Blue
Magenta
Normal
96
150
U
Alt 150
Note 6 Blue
Brown
Normal
97
151
U
Alt 151
Note 6 Blue
light Grey
Normal
High Intensity
High Intensity
Underline
98
152
Y
Alt 152
Note 6 Blue
Dark Grey
99
153
6
Alt 153
Note 6 Blue
light Blue
9A
154
U
Alt 154
Note 6 Blue
Light Green High Intensity
7-8
Characters, Keystrokes, and Colors
As Text Attributes
Color/Graphics
Monitor Adapter
As Characters
Value
Modes Background Foreground
IBM
Monochrome
Display
Adapter
Hex
Dec
Symbol
Keystrokes
9B
155
¢
Alt 155
Note 6 Blue
Light Cyan
H ig h Intensity
9C
156
£
Alt 156
Note 6 Blue
Light Red
High Intensity
9D
157
¥
Alt 157
Note 6 Blue
Light
Magenta
H ig h Intensity
9E
158
Pt
Alt 158
Note 6 Blue
Yellow
High Intensity
9F
159
f
Alt 159
Note 6 Blue
White
High Intensity
AO
160
a
Alt 160
Note 6 Green
Black
Normal
A1
161
{
Alt 161
Note 6 Green
Blue
Underline
A2
162
6
Alt 162
Note 6 Green
Green
Normal
A3
163
U
Alt 163
Note 6 Green
Cyan
Normal
A4
164
ii
Alt 164
Note 6 Green
Red
Normal
A5
165
N
Alt 165
Note 6 Green
Magenta
Normal
A6
166
~
Alt 166
Note 6 Green
Brown
Normal
A7
167
Q..
Alt 167
Note 6 Green
Light Grey
Normal
A8
168
6
Alt 168
Note 6 Green
Dark Grey
High Intensity
A9
169
r-
Alt 169
Note 6 Green
Light Blue
High Intensity
Underline
AA
170
Alt 170
Note 6 Green
Light Green High Intensity
AB
171
'h
Alt 171
Note 6 Green
Light Cyan
High Intensity
AC
172
V.
Alt 172
Note 6 Green
Light Red
High Intensity
AD
173
i
Alt 173
Note 6 Green
Light
Magenta
High Intensity
AE
174
Alt 174
Note 6 Green
Yellow
High Intensity
AF
175
«
»
Alt 175
Note 6 Green
White
High Intensity
Alt 176
Note 6 Cyan
Black
Normal
Alt 177
Note 6 Cyan
Blue
Underline
Alt 178
Note 6 Cyan
Green
Normal
Alt 179
Note 6 Cyan
Cyan
Normal
Alt 180
Note 6 Cyan
Red
Normal
Alt 181
Note 6 Cyan
Magenta
Normal
Alt 182
Note 6 Cyan
Brown
Normal
I
......
......
BO
176
B1
177
B2
178
B3
179
B4
180
B5
181
B6
182 --1
I
I
==
Characters, Keystrokes, and Colors
7-9
As Text Attributes
Value
Color/Graphics
Monitor Adapter
As Characters
Hex
Dec
B7
183
B8
184
B9
185
Symbol
Keystrokes
Modes Background Foreground
----n
Alt 183
Note 6 Cyan
Light Grey
Normal
====I
Alt 184
Note 6 Cyan
Dark Grey
High Intensity
-.J
Alt 185
Note 6 Cyan
Light Blue
High Intensity
Underline
Alt 186
Note 6 Cyan
Light Green High Intensity
h
SA
186
IBM
Monochrome
Display
Adapter
BB
187
b
Alt 187
Note 6 Cyan
Light Cyan
High Intensity
BC
188
d
Alt 188
Note 6 Cyan
Light Red
H ig h Intensity
BD
189
CJJ
Alt 189
Note 6 Cyan
Light
Magenta
High Intensity
BE
190
Alt 190
Note 6 Cyan
Yellow
High Intensity
BF
191
~
'---l
Alt 191
Note 6 Cyan
White
High Intensity
CO
192
C1
193
C2
194
LT
F
Alt 192
Note 6 Red
Black
Normal
Alt 193
Note 6 Red
Blue
Underline
Alt 194
Note 6 Red
Green
Normal
Alt 195
Note 6 Red
Cyan
Normal
Red
Normal
Magenta
Norma!
Brown
Normal
C3
195
C4
196
Alt 196
Note 6 Red
C5
197
Alt 197
NoteS
C6
198
~
Alt 198
Note 6 Red
C7
199
1=
Alt 199
Note 6 Red
Light Grey
Normal
C8
200
Alt 200
Note 6 Red
Dark Grey
High Intensity
C9
201
Alt 201
Note 6 Red
Light Blue
High Intensity
Underline
CA
202 ~t=:::
Alt 202
Note 6 Red
Light Green High Intensity
CB
203
.--
Alt 203
Note 6 Red
Light Cyan
CC
204
IS
Alt 204
Note 6 Red
Light Red
High Intensity
CD
205
Alt 205
Note 6 Red
Light
Magenta
High Intensity
CE
206
Alt 206
Note 6 Red
Yellow
H ig h Intensity
CF
207
Alt 207
Note 6 Red
White
High Intensity
Alt 208
Note 6 Magenta
Black
Normal
DO
7 -10
208
~
II
~.
e~
TT
Red
Characters, Keystrokes, and Colors
High Intensity
As Text Attributes
Color/Graphics
Monitor Adapter
IBM
Characters, Keystrokes, and Colors
7 -11
As Text Attributes
As Characters
Value
Color/Graphics
Monitor Adapter
Modes Background Foreground
IBM
Monochrome
Display
Adapter
Hex
Dec
Symbol
Keystrokes
EC
236
'"
Alt 236
Note 6 Brown
Light Red
High Intensity
ED
237
q,
Alt 237
Note 6 Brown
Light
Magenta
High Intensity
EE
238
€
Alt 238
Note 6 Brown
Yellow
High Intensity
EF
239
n
Alt 239
Note 6 Brown
White
High Intensity
FO
240
=
Alt 240
Note 6 Light Grey
Black
Reverse Video
F1
241
±
Alt 241
Note 6 Light Grey
Blue
Underline
F2
242
~
Alt 242
Note 6 Light Grey
Green
Normal
F3
243
:5
Alt 243
Note 6 Light Grey
Cyan
Normal
F4
244
r
Alt 244
Note 6 Light Grey
Red
Normal
F5
245
Alt 245
Note 6 Light Grey
Magenta
Normal
F6
246
~
Alt 246
Note 6 Light Grey
Brown
Normal
F7
247
::::;
Alt 247
Note 6 Light Grey
Light Grey
Normal
F8
248
0
Alt 248
Note 6 Light Grey
Dark Grey
Reverse Video
F9
249
•
Alt 249
Note 6 Light Grey
Light Blue
High Intensity
Underline
FA
250
•
Alt 250
Note 6 Light Grey
Light Green High Intensity
FB
251
Alt 251
Note 6 Light Grey
Light Cyan
High Intensity
FC
252
n
Alt 252
Note 6 Light Grey
Light Red
High Intensity
FD
253
2
Alt 253
Note 6 Light Grey
Light
Magenta
High Intensity
FE
254
•
Alt 254
Note 6 Light Grey
Yellow
High Intensity
FF
255
BLANK
Alt 255
Note 6 Light Grey
White
High Intensity
7-12
~
r
Characters, Keystrokes, and Colors
Notes
1. Asterisk (*) can be typed using two methods: press the (*)
key or, in the shift mode, press the 8 key.
2. Period (.) can be typed using two methods: press the. key
or, in the shift or Num Lock mode, press the Del key.
3. Numeric characters 0-9 can be typed using two methods:
press the numeric keys on the top row of the keyboard or, in
the shift or Num Lock mode, press the numeric keys in the
keypad portion of the keyboard.
4. Uppercase alphabetic characters (A-Z) can be typed in two
modes: the shift mode or the Caps Lock mode.
5. Lowercase alphabetic characters (a-z) can be typed in two
modes: in the normal mode or in Caps Lock and shift mode
combined.
6. The three digits after the Alt key must be typed from the
numeric keypad. Character codes 1-255 may be entered in
this fashion (with Caps Lock activated, character codes
97-122 will display uppercase).
Characters, Keystrokes, and Colors
7 -13
Quick Reference
.
DECIMAL
VALUE
•
!
::~iAL
VALUE
0
16 32 48
64 80 96 112
0
1
2
3
4
~
BLANK
(SPACE)
,
0 @ p
0
0
BLANK
(NULL)
1
1
c;;) .....
2
2
@)
3
3
4
4
5
5
6
6
7
7
8
8
9
9
10
A
11
B
12
C
13
D
14
E
15
F
7-14
•+
•
II
,, #
t
••
~
$
4t § %
&
~
,
• -.t
i (
0 ! )
.
-+
cJ
+-
*
+
9 L- ,
) .-.. -
-~ •
.~
.
6
,
1 A Q a
2 B R b
3 C S c
4 D T d
5 E U e
6 F V f
7 G W g
8 H X h
9 I Y 1•
•
•
Z
J
J
•
,• K [ k
N /\ n
?. 0
- 0
"
•
• /
5
Characters, Keystrokes, and Colors
7
P
q
r
s
t
u
v
W
x
y
z
{
I
I
}
'"V
~
DECIMAL
VALUE
•
128 144 160 176 192 208 224 240
0
CE
•0
VALUE
1
1
2
2
3
3
4
4
5
5
6
6
7
7
~
8
8
9
9
10
A
11
B
••
e y c• M
..
e, 0 I bJ
e.. tJ I
~~~im
12
c
13
D
14
E
15
F
8
9
••
u re
e liE
/
A
A
B
C
/
a ...
/
1
/
0
III
II
r--
A
~
r= r--L
r--
,1 £ ~•
UJ
¥
1
._.
w
A It « ~ II
,
AJ
» Ii
r
J
•
r--
In
nb!-
LL 'IT <
-
F u
J1
==
A
1 ¢
r >-
b::: 1:
A
0
oc --
F
(3 +
-
u
I
~:~:~
a 0 U
..a 0.. n , ,
a 0 l\J =
a. u a ~
,
E
.....
.....
/
A
D
•
T
~
~
0
e
•
n
•
8 ....r
00
¢
E
n
Characters, Keystrokes, and Colors
n
2
I
BLANK
'FF'
7-15
Notes:
7-16
Characters, Keystrokes, and Colors
SECTION 8. IBM PERSONAL
COMPUTER COMPATIBILITY
Hardware Considerations ........................ 8-3
System Board .............................. 8-3
Fixed Disk Drive ............................ 8-5
Diskette Drive Compatibility .................. 8-5
Copy Protection ............................ 8-5
Bypassing BIOS ......................... 8-6
Diskette Drive Controls ................... 8-6
Write Current Control .................... 8-6
Application Guidelines .......................... 8-7
High-Level Language Considerations ............ 8-7
Assembler Language Programming Considerations . 8-8
Multitasking Provisions ...................... 8-15
Interfaces ............................. 8-15
Classes ............................... 8-17
Time-Outs ............................. 8-18
Machine-Sensitive Code ..................... 8-19
Compatibility
8-1
8-2
Compatibility
This section describes the differences among the members of the
IBM Personal Computer family. It also contains information
necessary to design hardware and programs that will be
compatible with all members of the IBM Personal Computer
family.
Hardware Considerations
To design compatible hardware or programs, you must consider
hardware differences among the IBM Personal Computers. The
following are hardware features of the IBM Personal Computer
XT Model 286 that are not supported by all of the IBM Personal
Computer family.
System Board
The IBM Personal Computer XT Model 286 system board uses
an Intel 80286-6 Microprocessor. This microprocessor uses the
80287 Math Coprocessor and is generally compatible with the
Intel 8088 Microprocessor used in other IBM Personal
Computers.
The following table identifies the microprocessor and describes
the II0 channel used with each type of IBM Personal Computer.
System Name
System Unit
Microprocessor
1/0 Channel Description
Personal Computer
8088
PCjr
8088
Personal Computer XT
8088
8 62-Pin
Portable Personal
Computer
8088
8 62-Pin
5 62-Pin
Not Compatible
Personal Computer XT
Model 286
80286-6
3 62-pin
5 98-Pin (62 Pin + 36 Pin)
Personal Computer AT
80286(-6 or -8)
2 62-llin
6 98-Pin (62 Pin + 36 Pin)
System Hardware Identification Chart
Compatibility
8-3
The faster processing capability of the 80286, compared to the
8088, creates special programming considerations, which are
discussed later in this section under II Application Guidelines. II
Adapters designed to use all 98 pins on the 98-pin connectors are
not compatible with all members of the IBM Personal Computer
family. Some options not supported by the mM Personal
Computer XT Model 286 are:
Expansion Unit
AT 128KB Memory Expansion
AT 512KB Memory Expansion
AT 128/640KB Memory Expansion
AT Fixed Disk And Diskette Drive Adapter
256KB Memory Expansion
64/256KB Memory Expansion
64KB Memory Module Kit
Full-high diskette drives
AT 30MB Fixed Disk Drive
AT 20MB Fixed Disk Drive
10MB Fixed Disk Drive
AT Prototype Card
Diskette Drive Adapter
Fixed Disk Adapter
8087 Math Coprocessor
Professional Graphics Adapter and Display
Game Control Adapter
Color Printer
Other keyboards
On the I/O channel:
•
The system clock signal should be used only for
synchronization and not for applications requiring a fixed
frequency.
•
The 14.31818-MHz oscillator is not synchronous with the
system clock.
•
The ALE signal remains high during DMA cycles.
•
Pin B04 supports ffiQ 9.
8-4
Compatibility
Fixed Disk Drive
Reading from and writing to this drive is initiated in the same way
as with other IBM Personal Computers; however, the Fixed Disk
and Diskette Drive Adapter may be addressed from different
BIOS locations.
Diskette Drive Compatibility
The following chart shows the read, write, and format capabilities
for each of the diskette drives used by IBM Personal Computers.
Diskette
Drive Name
5-1/4 In. Diskette Drive
Type 1
Type 2
Type 3
Slimline Diskette Drive
Double Sided Diskette Drive
High Capacity Diskette Drive
3-1/2 In.- 720K Drive
160/18oK 3Z0/360K 1. 2M
Mode
Mode
Mode
R WF
R WF
R WF
R WF
R WF
R W*
---
---
---
---
---
R W F --R W F --R W F --R W F --R W*
R WF
720K
Mode
-------------
R WF
R=Read W=Write F=Format W*= Ifad i skette is
formatted in either 160/18oK mode or 320/360K mode
and written on by a High Capacity Drive, that diskette
may be read by only a High Capacity Drive.
Diskette Drive Compatibility Chart
Note: Diskettes designed for the 1.2M mode may not be
used in either a 160/180K or a 320/360K diskette drive.
Copy Protection
The following methods of copy protection may not work on
systems using the High Capacity Diskette Drive:
•
Bypassing BIOS
•
Diskette drive controls
•
Write current control
Compatibility
8-5
Bypassing BIOS
Copy protection that tries to bypass the following BIOS routines
will not work on the High Capacity Diskette Drive:
Track Density: The High Capacity Diskette Drive records
tracks at a density of 96 tracks per inch (TPI). This drive has to
double-step in the 48 TPI mode, which is performed by BIOS.
Data Transfer Rate: BIOS selects the proper data transfer rate
for the media being used.
Disk
will
Base: Copy protection, which creates its own disk base
-
nor work on the High Capacity Diskette Drive.
Diskette Drive Controls
Copy protection that uses the following will not work on the High
Capacity Diskette Drive:
Rotational Speed: The time between two events on a diskette is
controlled by the Fixed Disk and Diskette Drive Adapter.
Access Time: Diskette BIOS routines must set the
track-to-track access time for the different types of media used on
the IBM Personal Computer XT Model 286.
Head Geometry: See "Diskette Drive Compatibility" on
page 8-5.
Diskette Change Signal: Copy protection may not be able to
reset this signal.
Write Current Control
Copy protection that uses write current control will not work
because the Fixed Disk and Diskette Drive Adapter selects the
proper write current for the media being used.
8-6
Compatibility
Application Guidelines
The following information should be used to develop application
programs for the IBM Personal Computer family.
High-Level Language Considerations
The IBM-supported languages of BASIC, FORTRAN, COBOL,
Pascal, and APL are the best choices for writing compatible
programs.
If a program uses specific features of the hardware, that program
may not be compatible with all IBM Personal Computers.
Specifically, the use of assembler language subroutines or
hardware-specific commands (In, Out, Peek, Poke, ... ) must
follow the assembler language rules (see "Assembler Language
Programming Considerations" on page 8-8).
Any program that requires precise timing information should
obtain it through a DOS or language interface; for example,
TIME$ in BASIC. If greater precision is required, the assembler
techniques in "Assembler Language Programming
Considerations" are available. The use of programming loops
may prevent a program from being compatible with other IBM
Personal Computers.
Compatibility
8-7
Assembler Language Programming
Considerations
The following OP codes work differently on systems using the
80286 microprocessor than they do on systems using the 8088
microprocessor.
•
If the system microprocessor executes a POPF instruction in
either the real or the virtual address mode with CPL~IOPL,
then a pending maskable interrupt (the INTR pin active) may
be improperly recognized after executing the POPF
instruction even if maskable interrupts were disabled before
the POPF instruction and the value popped had IF=O. If the
interrupt is improperly recognized, the interrupt is still
correctly executed. This errata h,as no effect when interrupts
are enabled in either real or virtual address mode. This errata
has no effect in the virtual address mode when CPL>IOPL.
The POPF instruction may be simulated with the following
code macro:
POPFF
Macro
EB 01
CF
OE
E8 FB FF
JMP $+3
IRET
PUSH CS
CALL $-2
use POPFF instead of POPF
simulate popping flags
using IRET
jump around IRET
POP CS, IP, flags
CALL within segment
program will continue here
• PUSHSP
80286 microprocessor pushes the current stack pointer.
8088 microprocessor pushes the new stack pointer.
•
Single step interrupt (when TF = 1) on the interrupt
instruction (OP code hex CC,CD):
80286 microprocessor does not interrupt on the INT
instruction.
8-8
Compatibility
8088 microprocessor does interrupt on the INT
instruction.
•
The divide error exception (interrupt 0):
80286 microprocessor pushes the eS:IP of the instruction,
causing the exception.
8088 microprocessor pushes the eS:IP following the
instruction, causing the exception.
•
Shift counts are masked to five bits. Shift counts greater than
31 are treated mod 32. For example, a shift count of 36,
shifts the operand four places.
The following describes anomalies which may occur in systems
which contain 80286 processors with 1983 and 1984 date codes
(S40172, S54036, S40093, S54012).
In protected mode, the contents of the ex register may be
unexpectedly altered under the following conditions:
Note: The value in parenthesis indicates the type of error code
pushed onto the exception handler's stack.
Exception #NPO = Exception #11 = Not-present Fault
Exception #880 = Exception #12 = 8tack Fault
Exception #GPO = Exception #13 = General Protection Fault
•
Exception #GP(O) from attempted access to data segment or
extra segment when the corresponding segment register holds
a null selector.
•
Exception #GP(O) from attempted data read from code
segment when code segment has the "execute only" attribute.
•
Exception #GP(O) from attempted write to code segment
(code segments are not writable in protected mode), or to
data segment of extra segment if the data or extra segment
has the read only attribute.
•
Exception #GP(O) from attempted load of a selector
referencing the local descriptor table into es, DS, ES or SS,
when the LDT is not present.
Compatibility
8-9
•
Exception #GP(O) from attempted input or output instruction
when CPL > IOPL.
•
Exception #GP(selector) from attempted access to a
descriptor is GDT, LDT, or IDT, beyond the defined limit of
the descriptor table.
•
Exception #GP(O) from attempted read or write (except for
"PUSH" onto stack) beyond the defined limit of segment.
•
Exception #SS(O) from attempted "PUSH" below the defined
limit of the stack segment.
Restarting applications which generate the above exceptions may
result in errors.
In the protected mode, when any of the null selector values
(OOOOH, 0001H, 0002H, 0003H) are loaded into the DS or ES
registers via a MOV or POP instruction or a task switch, the
80286 always loads the null selector OOOOH into the
corresponding register.
If a coprocessor (80287) operand is read from an "executable and
readable" and conforming (ERC) code segment, and the
coprocessor operand is sufficiently near the segment's limit that
the second or subsequent byte lies outside the limit, no protection
exception #9 will be generated.
The following correctly describes the operation of all 80286 parts:
•
Instructions longer than 10 bytes (instructions using mUltiple
redundant prefixes) generate exception #13 (General Purpose
Exception) in both the real and protected modes.
•
If the second operand of an ARPL instruction is a null
selector, the instruction generates an exception #13.
Assembler language programs should perform all I/O operations
through ROM BIOS or DOS function calls.
•
Program interrupts are used for access to these functions.
This practice removes the absolute addressing from the
program. Only the interrupt number is required.
8-10
Compatibility
•
The coprocessor detects six different exception conditions
that can occur during instruction execution. If the appropriate
exception mask within the coprocessor is not set, the
coprocessor sets its error signal. This error signal generates a
hardware interrupt (interrupt 13) and causes the 'busy' signal
to the coprocessor to be held in the busy state. The 'busy'
signal may be cleared by an 8-bit I/O Write command to
address hex PO with DO through D7 equal to O.
The power-on-self-test code in the system ROM enables
hardware IRQ 13 and sets up its vector to point to a routine in
ROM. The ROM routine clears the 'busy' signal latch and
then transfers control to the address pointed to by the NMI
interrupt vector. This allows code written for any IBM
Personal Computer to work on an IBM Personal Computer
XT Model 286. The NMI interrupt handler should read the
coprocessor's status to determine if the NMI was caused by
the coprocessor. If the interrupt was not generated by the
coprocessor, control should be passed to the original NMI
interrupt handler.
•
Back to back I/O commands to the same I/O ports will not
permit enough recovery time for I/O chips. To ensure
enough time, a JMP SHORT $+2 must be inserted between
IN/OUT instructions to the same I/O chip.
Note: MOV AL,AH type instruction does not allow enough
recovery time. An example of the correct procedure follows:
OUT
JMP
MOV
OUT
IO_ADD ,AL
SHORT $+2
AL,AH
IO_ADD,AL
•
In systems using the 80286 microprocessor, IRQ 9 is
redirected to INT hex OA (hardware IRQ 2). This insures
that hardware designed to use IRQ 2 will operate in the IBM
Personal Computer XT Model 286.
•
The system can mask hardware sensitivity. New devices can
change the ROM BIOS to accept the same programming
interface on the new device.
Compatibility
8-11
•
In cases where BIOS provides parameter tables, such as for
video or diskette, a program may substitute new parameter
values by building a new copy of the table and changing the
vector to point to that table. However, the program should
copy the current table, using the current vector, and then
modify those locations in the table that need to be changed.
In this way, the program will not inadvertently change any
values that should be left the same.
•
Disk Base consists of 11 parameters required for diskette
operation. They are pointed at by the data variable,
Disk Pointer, at absolute address 0:78. It is strongly
recoiiiillended that the values supplied in ROM be used. If it
becomes necessary to modify any of the parameters, build
another parameter block and modify the address in
Disk_Pointer to point to the new block.
The parameters were established to operate both the High
Capacity Diskette Drive and the Double Sided Diskette Drive.
Three of the parameters in this table are under control of
BIOS in the following situations.
The Gap Length Parameter is no longer retrieved from the
parameter block.
The gap length used during diskette read, write, and verify
operations is derived from within diskette BIOS.
The gap length for format operations is still obtained from
the parameter block.
Special considerations are required for formatting operations.
See the prolog of Diskette BIOS for the required details. If a
parameter block contains a head settle time parameter value
of 0 milliseconds, and a write operation is being performed, at
least 15 milliseconds of head settle time will be enforced for a
High Capacity Diskette Drive and 20 milliseconds will be
enforced for a Double Sided Diskette Drive. If a parameter
block contains a motor start wait parameter of less than 1
second for a write or format operation of 625 milliseconds for
a read or verify operation, Diskette BIOS will enforce those
times listed above.
8-12
Compatibility
•
The following procedure is used to determine the type of
media inserted in the High Capacity Diskette Drive:
1. Read Track 0, Head 0, Sector 1 to allow diskette BIOS to
establish the media/drive combination. If this is
successful, continue with the next step.
2. Read Track 0, Sector 15. If an error occurs, a double
sided diskette is in the drive.
Note: Refer to the DOS Technical Reference manual for
the File Allocation Table (FAT) parameters for singleand double-sided diskettes.
If a successful read occurs, a high capacity diskette is in
the drive.
3. If Step 1 fails, issue the reset function (AH=O) to diskette
BIOS and retry. If a successful read cannot be done, the
media needs to be formatted or is defective.
ROM BIOS and DOS do not provide for all functions. The
following are the allowable I/O operations with which IBM will
maintain compatibility in future systems.
•
Control of the sound, using port hex 61, and the sound
channel of the timer/counter. A program can control
timer/counter channels and 2, ports hex 40,42, and 43. A
program must not change the value in port hex 41, because
this port controls the dynamic-memory refresh. Channel
provides the time-of-day interrupt, and can also be used for
timing short intervals. Channel 2 of the timer/counter is the
output for the speaker and cassette ports. This channel may
also be used for timing short intervals, although it cannot
interrupt at the end of the period.
°
°
Note: Programs should use the timer for delay on the paddle
input rather than a program loop.
•
Interrupt Mask Register (IMR), port hex 21, can be used to
selectively mask and unmask the hardware features.
The following information pertains to absolute memory locations.
Compatibility
8-13
•
Interrupt Vectors Segment (hex O)--A program may change
these to point at different processing routines. When an
interrupt vector is modified, the original value should be
retained. If the interrupt, either hardware or program, is not
directed toward this device handler, the request should be
passed to the next item in the list.
•
Video Display Buffers (hex BOOOO and B8000)-- For each
mode of operation defined in the video display BIOS, the
memory map will remain the same. For example, the bit map
for the 320 x 200 medium-resolution graphics mode of the
Color/Graphics Monitor adapter will be retained on any
future adapter that supports that mode. If the bit map is
modified, a different mode number will be used.
•
ROM BIOS Data Area (hex 40:0)--Any variables in this area
will retain their current definition, whenever it is reasonable
to do so. IBM may use these data areas for other purposes
when the variable no longer has meaning in the system. In
general, ROM BIOS data variables should be read or modified
through BIOS calls whenever possible, and not with direct
access to the variable.
A program that requires timing information should use either the
time-of-day clock or the timing channels of the timer/counter.
The input frequency to the timer will be maintained at 1.19 MHz,
providing a constant time reference. Program loops should be
avoided.
Programs that use copy protection schemes should use the ROM
BIOS diskette calls to read and verify the diskette and should not
be timer dependent. Any method can be used to create the
diskette, although manufacturing capability should be considered.
The verifying program can look at the diskette controller's status
bytes in the ROM BIOS data area for additional information
about embedded errors. More information about copy protection
may be found on page 8-5 under 11 Copy Protection 11 •
Any DOS program must be relocatable and insensitive to the size
of DOS or its own load addresses. A program's memory
requirement should be identified and contiguous with the load
module. A program should not assume that all of memory is
available to it.
8-14
Compatibility
There are several 80286 instructions that, when executed, lock
out external bus signals. DMA requests are not honored during
the execution of these instructions. Consecutive instructions of
this type prevent DMA activity from the start of the first
instruction to the end of the last instruction. To allow for
necessary DMA cycles, as required by the diskette controller in a
multitasking system, multiple lock-out instructions must be
separated by JMP SHORT $+2.
Multitasking Provisions
The IBM Personal Computer XT Model 286 BIOS contains a
feature to assist multitasking implementation. "Hooks" are
provided for a multitasking dispatcher. Whenever a busy (wait)
loop occurs in the BIOS, a hook is provided for the program to
break out of the loop. Also, whenever BIOS services an interrupt,
a corresponding wait loop is exited, and another hook is provided.
Thus a program may be written that employs the bulk of the
device driver code. The following is valid only in the
microprocessor's real address mode and must be taken by the
code to allow this support.
The program is responsible for the serialization of access to
the device driver. The BIOS code is not reentrant.
The program is responsible for matching corresponding wait
and post calls.
Interfaces
There are four interfaces to be used by the multitasking
dispatcher:
Compatibility
8-15
Startup
First, the startup code hooks interrupt hex 15. The dispatcher is
responsible to check for function codes of AH= hex 90 or 91.
The "Wait" and "Post" sections describe these codes. The
dispatcher must pass all other functions to the previous user of
interrupt hex 15. This can be done by a JMP or a CALL. If the
function code is hex 90 or 91, the dispatcher should do the
appropriate processing and return by the IRET instruction.
Serialization
It is up to the multitasking system to ensure that the device driver
code is used serially. Multiple entries into the code can result in
serious errors.
Wait (Busy)
Whenever the BIOS is about to enter a busy loop, it first issues an
interrupt hex 15 with a function code of hex 90 in AH. This
signals a wait condition. At this point, the dispatcher should save
the task status and dispatch another task. This allows overlapped
execution of tasks when the hardware is busy. The following is an
outline of the code that has been added to the BIOS to perform
this function.
MOV AX, 90XXH
INT ISH
JC TIMEOUT
NORMAL TIMEOUT LOGIC
8-16
Compatibility
wait code in AH and
type code in AL
issue call
optional: for time-out or
if carry is set, time-out
occurred
normal time-out
Post (Interrupt)
Whenever the BIOS has set an interrupt flag for a corresponding
busy loop, an interrupt 15 occurs with a function code of hex 91
in AH. This signals a post condition. At this point, the
dispatcher should set the task status to "ready to run" and return
to the interrupt routine. The following is an outline of the code
added to BIOS that performs this function.
post code AH and
type code AL
issue call
MOV AX, 9IXXH
INT 1SH
Classes
The following types of wait loops are supported:
•
The class for hex 0 to 7F is serially reusable. This means that
for the devices that use these codes, access to the BIOS must
be restricted to only one task at a time.
•
The class for hex 80 to BF is reentrant. There is no
restriction on the number of tasks that may access the device.
•
The class for hex CO to FF is non-interrupt. There is no
corresponding interrupt for the wait loop. Therefore, it is the
responsibility of the dispatcher to determine what satisfies this
condition to exit the loop.
Function Code Classes
Type Code (AL)
Description
00H->7FH
Serially reusable devices; operating system
must serialize access
80H->OBFH
Reentrant devices; ES:BX is used to
distinguish different calls (multiple I/O calls
are allowed simultaneously)
Compatibility
8-17
OCOH->OFH
Wait only calls; there is no complementary
POST for these waits--these are time-out
only. Times are function-number
dependent.
Function Code Assignments
The following are specific assignments for the IBM Personal
Computer XT Model 286 BIOS. Times are approximate. They
are grouped according to the classes described under "Function
Code Classes".
Type Code (AL)
Time-out
OOH
01H
02H
OFDH
yes (6 second)
fixed disk
yes (2 second)
diskette
no (2 second)
keyboard
yes (1 second-write) diskette motor start
(625 ms-read)
OFEH
yes (18 second)
Description
printer
The asynchronous support has been omitted. The Serial/Parallel
Adapter will generate interrupts, but BIOS does not support it in
the interrupt mode. Therefore, the support should be included in
the multitasking system code if that device is to be supported.
Time-Outs
To support time-outs properly, the multitasking dispatcher must
be aware of time. If a device enters a busy loop, it generally
should remain there for a specific amount of time before
indicating an error. The dispatcher should return to the BIOS
wait loop with the carry bit set if a time-out occurs.
8-18
Compatibility
Machine-Sensitive Code
Programs may select machine specific features, but they must test
for specific machine type. Location of the specific machine
identification codes can be found through interrupt 15 function
code AH (See 'Configuration Parameters' in BIOS Listing). The
code is two bytes. The first byte shows the machine type and the
second byte shows the series type. They are as follows:
First Second
Byte
Byte
FF
FE
FE
FD
FC
FC
FB
00
00
00
00
00
02
00
Machine Identification
IBM
IBM
IBM
IBM
IBM
IBM
IBM
Personal
Personal
Portable
PCjr
Personal
Personal
Personal
Computer
Computer XT
Personal Computer
Computer AT
Computer XT Model 286
Computer XT with 256/640 system board
Machine Identification Code
IBM will define methods for uniquely determining the specific
machine type or I/O feature for any new device.
Compatibllity
8-19
Notes:
8-20
Compatibility
Glossary
This glossary includes terms and definitions from the IBM
Vocabulary for Data Processing, Telecommunications, and Office
Systems, GC20-l699.
JL. Prefix micro; 0.000 001.
JLs. Microsecond; 0.000 001 second.
A. Ampere.
ac. Alternating current.
accumulator. A register in which the result of an operation is
formed.
active high. Designates a signal that has to go high to produce an
effect. Synonymous with positive true.
active low. Designates a signal that has to go low to produce an
effect. Synonymous with negative true.
adapter. An auxiliary device or unit used to extend the operation
of another system.
address bus. One or more conductors used to carry the
binary-coded address from the processor throughout the rest of
the system.
algorithm. A finite set of well-defined rules for the solution of a
problem in a finite number of steps.
all points addressable (APA). A mode in which all points of a
displayable image can be controlled by the user.
alphameric. Synonym for alphanumeric.
Glossary
X-I
alphanumeric (A/N). Pertaining to a character set that contains
letters~ digits~ and usually other characters~ such as punctuation
marks. Synonymous with alphameric.
alternating current (ac). A current that periodically reverses its
direction of flow.
American National Standard Code for Information Interchange
(ASCII). The standard code~ using a coded character set
consisting of 7-bit coded characters (8 bits including parity
check)~ used for information exchange between data processing
systems~ data communication systems, and associated equipment.
The ASCII set consists of control characters and graphic
characters.
ampere (A). The basic unit of electric current.
A/N. Alphanumeric
analog. (1) Pertaining to data in the form of continuously
variable physical quantities. (2) Contrast with digital.
AND. A logic operator having the property that if P is a
statement~ Q is a statement, R is a statement~ ... , then the AND of
P, Q~ R, .. .is true if all statements are true~ false if any statement is
false.
AND gate. A logic gate in which the output is 1 only if all inputs
are 1.
AND operation. The boolean operation whose result has the
boolean value 1~ if and only if, each operand has the boolean
value 1. Synonymous with conjunction.
APA. All points addressable.
ASCII. American National Standard Code for Information
Interchange.
assemble. To translate a program expressed in an assembler
language into a computer language.
assembler. A computer program used to assemble.
X-2 Glossary
assembler language. A computer-oriented language whose
instructions are usually in one-to-one correspondence with
computer instructions.
asynchronous transmission. (1) Transmission in which the time
of occurrence of the start of each character, or block of
characters, is arbitrary; once started, the time of occurrence of
each signal representing a bit within a character, or block, has the
same relationship to significant instants of a fixed time frame.
(2) Transmission in which each information character is
individually transmitted (usually timed by the use of start
elements and stop elements).
audio frequencies. Frequencies that can be heard by the human
ear (approximately 15 hertz to 20,000 hertz).
auxiliary storage. (1) A storage device that is not main storage.
(2) Data storage other than main storage; for example, storage
on magnetic disk. (3) Contrast with main storage.
BASIC. Beginner's all-purpose symbolic instruction code.
basic input/output system (BIOS). The feature of the IBM
Personal Computer that provides the level control of the major
II0 devices, and relieves the programmer from concern about
hardware device characteristics.
baud. (1) A unit of signaling speed equal to the number of
discrete conditions or signal events per second. For example, one
baud equals one bit per second in a train of binary signals,
one-half dot cycle per second in Morse code, and one 3-bit value
per second in a train of signals each of which can assume one of
eight different states. (2) In asynchronous transmission, the unit
of modulation rate corresponding to one unit of interval per
second; that is, if the duration of the unit interval is 20
milliseconds, the modulation rate is 50 baud.
BCC. Block-check character.
beginner's all-purpose symbolic instruction code (BASIC). A
programming language with a small repertoire of commands and a
simple syntax, primarily designed for numeric applications.
Glossary
X-3
binary. (1) Pertaining to a selection, choice, or condition that
has two possible values or states. (2) Pertaining to a fixed radix
numeration system having a radix of 2.
binary digit. (1) In binary notation, either of the characters 0 or
1. (2) Synonymous with bit.
binary notation. Any notation that uses two different characters,
usually the binary digits 0 and 1.
binary synchronous communications (BSC). A uniform procedure,
using a standardized set of control characters and control
character sequences for synchronous transmission of
binary-coded data between stations.
BIOS. Basic input/output system.
bit. Synonym for binary digit
bits per second (bps). A unit of measurement representing the
number of discrete binary digits transmitted by a device in one
second.
block. (1) A string of records, a string of words, or a character
string formed for technical or logic reasons to be treated as an
entity. (2) A set of things, such as words, characters, or digits,
treated as a unit.
block-check character (BCC). In cyclic redundancy checking, a
character that is transmitted by the sender after each message
block and is compared with a block-check character computed by
the receiver to determine if the transmission was successful.
boolean operation. (1) Any operation in which each of the
operands and the result take one of two values. (2) An operation
that follows the rules of boolean algebra.
bootstrap. A technique or device designed to bring itself into a
desired state by means of its own action; for example, a machine
routine whose first few instructions are sufficient to bring the rest
of itself into the computer from an input device.
bps. Bits per second.
X-4
Glossary
BSC. Binary synchronous communications.
buffer. (1) An area of storage that is temporarily reserved for
use in performing an input/output operation, into which data is
read or from which data is written. Synonymous with I/O area.
(2) A portion of storage for temporarily holding input or output
data.
bus. One or more conductors used for transmitting signals or
power.
byte. (1) A sequence of eight adjacent binary digits that are
operated upon as a unit. (2) A binary character operated upon
as a unit. (3) The representation of a character.
C. Celsius.
capacitor. An electronic circuit component that stores an electric
charge.
Cartesian coordinates. A system of coordinates for locating a
point on a plane by its distance from each of two intersecting
lines, or in space by its distance from each of three mutually
perpendicular planes.
CAS. Column address strobe.
cathode ray tube (CRT). A vacuum tube in which a stream of
electrons is projected onto a fluorescent screen producing a
luminous spot. The location of the spot can be controlled.
cathode ray tube display (CRT display). (1) A CRT used for
displaying data. For example, the electron beam can be controlled
to form alphanumeric data by use of a dot matrix.
(2) Synonymous with monitor.
CCITT. International Telegraph and Telephone Consultative
Committee.
Celsius (C). A temperature scale. Contrast with Fahrenheit (F).
central processing unit (CPU). Term for processing unit.
Glossary
X-5
channel. A path along which signals can be sent; for example,
data channel, output channel.
character generator. (1) In computer graphics, a functional unit
that converts the coded representation of a graphic character into
the shape of the character for display. (2) In word processing,
the means within equipment for generating visual characters or
symbols from coded data.
character set. (1) A finite set of different characters upon which
agreement has been reached and that is considered complete for
some purpose. (2) A set of unique representations called
characters. (3) A defined collection of characters.
characters per second (cps). A standard unit of measurement for
the speed at which a printer prints.
check key. A group of characters, derived from and appended to
a data item, that can be used to detect errors in the data item
during processing.
clipping. In computer graphics, removing parts of a display image
that lie outside a window.
closed circuit. A continuous unbroken circuit; that is, one in
which current can flow. Contrast with open circuit.
CMOS. Complementary metal oxide semiconductor.
code. (1) A set of unambiguous rules specifying the manner in
which data may be represented in a discrete form. Synonymous
with coding scheme. (2) A set of items, such as abbreviations,
representing the members of another set. (3) To represent data
or a computer program in a symbolic form that can be accepted
by a data processor. (4) Loosely, one or more computer
programs, or part of a computer program.
coding scheme. Synonym for code.
collector. An element in a transistor toward which current flows.
color cone. An arrangement of the visible colors on the surface
of a double-ended cone where lightness varies along the axis of
X-6
Glossary
the cone, and hue varies around the circumference. Lightness
includes both the intensity and saturation of color.
column address strobe (CAS). A signal that latches the column
addresses in a memory chip.
compile. (1) To translate a computer program expressed in a
problem-oriented language into a computer-oriented language.
(2) To prepare a machine-language program from a computer
program written in another programming language by making use
of the overall logic structure of the program, or generating more
than one computer instruction for each symbolic statement, or
both, as well as performing the function of an assembler.
complement. A number that can be derived from a specified
number by subtracting it from a second specified number.
complementary metal oxide semiconductor (CMOS). A logic
circuit family that uses very little power. It works with a wide
range of power supply voltages.
computer. A functional unit that can perform substantial
computation, including numerous arithmetic operations or logic
operations, without human intervention during a run.
computer instruction code. A code used to represent the
instructions in an instruction set. Synonymous with machine
code.
computer program. A sequence of instructions suitable for
processing by a computer.
computer word. A word stored in one computer location and
capable of being treated as a unit.
configuration. (1) The arrangement of a computer system or
network as defined by the nature, number, and the chief
characteristics of its·functional units. More specifically, the term
configuration may refer to a hardware configuration or a software
configuration. (2) The devices and programs that make up a
system, subsystem, or network.
conjunction. Synonym for AND operation.
Glossary
X-7
contiguous. Touching or joining at the edge or boundary;
adjacent.
control character. A character whose occurrence in a particular
context initiates, modifies, or stops a control operation.
control operation. An action that affects the recording,
processing, transmission, or interpretation of data; for example,
starting or stopping a process, carriage return, font change,
rewind, and end of transmission.
control storage. A portion of storage that contains microcode.
coordinate space. In computer graphics, a system of Cartesian
coordinates in which an object is defined.
cps. Characters per second.
CPU. Central processing unit.
CRC. Cyclic redundancy check.
CRT. Cathode ray tube.
CRT display. Cathode ray tube display.
CTS. Clear to send. Associated with modem control.
cursor. (1) In computer graphics, a movable marker that is used
to indicate position on a display. (2) A displayed symbol that
acts as a marker to help the user locate a point in text, in a system
command, or in storage. (3) A movable spot of light on the
screen of a display device, usually indicating where the next
character is to be entered, replaced, or deleted.
cyclic redundancy check (CRC). (1) A redundancy check in
which the check key is generated by a cyclic algorithm. (2) A
I
system of error checking performed at both the sending and
, receiving station after a block-check character has been
accumulated.
cylinder. (1) The set of all tracks with the same nominal
distance from the axis about which the disk rotates. (2) The
X-8
Glossary
tracks of a disk storage device that can be accessed without
repositioning the access mechanism.
daisy-chained cable. A type of cable that has two or more
connectors attached in series.
data. (1) A representation of facts, concepts, or instructions in a
formalized manner suitable for communication, interpretation, or
processing by human or automatic means. (2) Any
representations, such as characters or analog quantities, to which
meaning is, or might be assigned.
data base. A collection of data that can be immediately accessed
and operated upon by a data processing system for a specific
purpose.
data processing system. A system that performs input, processing,
storage, output, and control functions to accomplish a sequence
of operations on data.
data transmission. Synonym for transmission.
dB. Decibel.
dBa. Adjusted decibels.
dc. Direct current.
debounce. (1) An electronic means of overcoming the
make/break bounce of switches to obtain one smooth change of
signal level. (2) The elimination of undesired signal variations
caused by mechanically generated signals from contacts.
decibel. (1) A unit that expresses the ratio of two power levels
on a logarithmic scale. (2) A unit for measuring relative power.
decoupling capacitor. A capacitor that provides a low impedance
path to ground to prevent common coupling between circuits.
Deutsche Industrie Norm (DIN). (1) German Industrial Norm.
(2) The committee that sets German dimension standards.
digit. (1) A graphic character that represents an integer; for
example, one of the characters 0 to 9. (2) A symbol that
Glossary
X-9
represents one of the non-negative integers smaller than the radix.
For example, in decimal notation, a digit is one of the characters 0
to 9.
digital. (1) Pertaining to data in the form of digits.
(2) Contrast with analog.
DIN. Deutsche Industrie Norm.
DIN connector. One of the connectors specified by the DIN
committee.
DIP. Dual in-line package.
DIP switch. One of a set of small switches mounted in a dual
in-line package.
direct current (dc). A current that always flows in one direction.
direct memory access (DMA). A method of transferring data
between main storage and 110 devices that does not require
processor intervention.
disable. To stop the operation of a circuit or device.
disabled. Pertaining to a state of a processing unit that prevents
the occurrence of certain types of interruptions. Synonymous with
masked.
disk. Loosely, a magnetic disk.
diskette. A thin, flexible magnetic disk and a semirigid protective
jacket, in which the disk is permanently enclosed. Synonymous
with flexible disk.
diskette drive. A device for storing data on and retrieving data
from a diskette.
display. (1) A visual presentation of data. (2) A device for
visual presentation of information on any temporary character
imaging device. (3) To present data visually. (4) See cathode
ray tube display.
X-I0
Glossary
display attribute. In computer graphics, a particular property that
is assigned to all or part of a display; for example, low intensity,
green color, blinking status.
display element. In computer graphics, a basic graphic element
that can be used to construct a display image; for example, a dot,
a line segment, a character.
display group. In computer graphics, a collection of display
elements that can be manipulated as a unit and that can be further
combined to form larger groups.
display image. In computer graphics, a collection of display
elements or display groups that are represented together at any
one time in a display space.
display space. In computer graphics, that portion of a display
surface available for a display image. The display space may be
all or part of a display surface.
display surface. In computer graphics, that medium on which
display images may appear; for example, the entire screen of a
cathode ray tube.
DMA. Direct memory access.
dot matrix. (1) In computer graphics, a two-dimensional pattern
of dots used for constructing a display image. This type of matrix
can be used to represent characters by dots. (2) In word
processing, a pattern of dots used to form characters. This term
normally refers to a smaIl section of a set of addressable points;
for example, a representation of characters by dots.
dot printer. Synonym for matrix printer.
dot-matrix character generator. In computer graphics, a character
generator that generates character images composed of dots.
drawing primitive. A group of COminands that draw defined
geometric shapes.
DSR. Data set ready. Associated with modem control.
Glossary
X-11
DTR. In the IBM Personal Computer, data terminal ready.
Associated with modem control.
dual in-line package (DIP). A widely used container for an
integrated circuit. DIPs have pins in two parallel rows. The pins
are spaced 1/10 inch apart. See also DIP switch.
duplex. (1) In data communication, pertaining to a simultaneous
two-way independent transmission in both directions.
(2) Contrast with half-duplex.
duty cycle. In the operation of a device, the ratio of on time to
idle time. Duty cycle is expressed as a decimal or percentage.
dynamic memory. RAM using transistors and capacitors as the
memory elements. This memory requires a refresh (recharge)
cycle every few milliseconds. Contrast with static memory.
EBCDIC. Extended binary-coded decimal interchange code.
ECC. Error checking and correction.
edge connector. A terminal block with a number of contacts
attached to the edge of a printed-circuit board to facilitate
plugging into a foundation circuit.
EIA. Electronic Industries Association.
electromagnet. Any device that exhibits magnetism only while an
electric current flows through it.
enable. To initiate the operation of a circuit or device.
end of block (EOB). A code that marks the end of a block of
data.
end of file (EO F). An internal label, immediately following the
last record of a file, signaling the end of that file. It may include
control totals for comparison with counts accumulated during
processing.
end-of-text (ETX). A transmission control character used to
terminate text.
X -12
Glossary
end-of-transmission (EOT). A transmission control character
used to indicate the conclusion of a transmission, which may have
included one or more texts and any associated message headings.
end-of-transmission-block (ETB). A transmission control
character used to indicate the end of a transmission block of data
when data is divided into such blocks for transmission purposes.
EOB. End of block.
EOF. End of file.
EOT. End-of-transmission.
EPROM. Erasable programmable read-only memory.
erasable programmable read-only memory (EPROM). A PROM
in which the user can erase old information and enter new
information.
error checking and correction (ECC). The detection and
correction of all single-bit errors, plus the detection of double-bit
and some multiple-bit errors.
ESC. The escape character.
escape character (ESC). A code extension character used, in
some cases, with one or more succeeding characters to indicate by
some convention or agreement that the coded representations
following the character or the group of characters are to be
interpreted according to a different code or according to a
different coded character set.
ETB. End-of-transmission-block.
ETX. End-of-text.
extended binary-coded decimal interchange code (EBCDIC). A
set of 256 characters, each represented by eight bits.
F. Fahrenheit.
Fahrenheit (F). A temperature scale. Contrast with Celsius (C).
Glossary
X -13
falling edge. Synonym for negative-going edge.
FCC. Federal Communications Commission.
fetch. To locate and load a quantity of data from storage.
FF. The form feed character.
field. (1) In a record, a specified area used for a particular
category of data. (2) In a data base, the smallest unit of data
that can be referred to.
field-programmable logic sequencer (FPLS). An integrated circuit
containing a programmable, read-only memory that responds to
external inputs and feedback of its own outputs.
FIFO (first-in-first out). A queuing technique in which the next
item to be retrieved is the item that has been in the queue for the
longest time.
fixed disk drive. In the IBM Personal Computer, a unit consisting
of nonremovable magnetic disks, and a device for storing data on
and retrieving data from the disks.
flag. (1) Any of various types of indicators used for
identification. (2) A character that signals the occurrence of
some condition, such as the end of a word. (3) Deprecated term
for mark.
flexible disk. Synonym for diskette.
flip-flop. A circuit or device containing active elements, capable
of assuming either one of two stable states at a given time.
font. A family or assortment of characters of a given size and
style; for example, 10 point Press Roman medium.
foreground. (1) In multiprogramming, the environment in which
high-priority programs are executed. (2) On a color display
screen, the characters as opposed to the background.
form feed. (1) Paper movement used to bring an assigned part
of a form to the printing position. (2) In word processing, a
X-14
Glossary
function that advances the typing position to the same character
position on a predetermined line of the next form or page.
form feed character. A control character that causes the print or
display position to move to the next predetermined first line on
the next form, the next page, or the equivalent.
format. The arrangement or layout of data on a data medium.
FPLS. Field-programmable logic sequencer.
frame. (1) In SDLC, the vehicle for every command, every
response, and all information that is transmitted using SDLC
procedures. Each frame begins and ends with a flag. (2) In data
transmission, the sequence of contiguous bits bracketed by and
including beginning and ending flag sequences.
g. Gram.
G. (1) Prefix giga; 1,000,000,000. (2) When referring to
computer storage capacity, 1,073,741,824. (1,073,741,824 = 2 to
the 30th power.)
gate. (1) A combinational logic circuit having one output
channel and one or more input channels, such that the output
channel state is completely determined by the input channel
states. (2) A signal that enables the passage of other signals
through a circuit.
Gb. 1,073,741,824 bytes.
general-purpose register. A register, usually explicitly addressable
within a set of registers, that can be used for different purposes;
for example, as an accumulator, as an index register, or as a
special handler of data.
giga (G). Prefix 1,000,000,000.
gram (g). A unit of weight (equivalent to 0.035 ounces).
graphic. A symbol produced by a process such as handwriting,
drawing, or printing.
Glossary
X-IS
graphic character. A character, other than a control character,
that is normally represented by a graphic.
half-duplex. (1) In data communication, pertaining to an
alternate, one way at a time, independent transmission.
(2) Contrast with duplex.
hardware. (1) Physical equipment used in data processing, as
opposed to programs, procedures, rules, and associated
documentation. (2) Contrast with software.
head. A device that reads, writes, or erases data on a storage
medium; for example, a small electromagnet used to read, write,
or erase data on a magnetic disk.
hertz (Hz). A unit of frequency equal to one cycle per second.
hex. Common abbreviation for hexadecimal. Also, hexadecimal
can be noted as X' ,
hexadecimal. (1) Pertaining to a selection, choice, or condition
that has 16 possible different values or states. These values or
states are usually symbolized by the ten digits 0 through 9 and the
six letters A through F. (2) Pertaining to a fixed radix
numeration system having a radix of 16.
high impedance state. A state in which the output of a device is
effectively isolated from the circuit.
highlighting. In computer graphics, emphasizing a given display
group by changing its attributes relative to other display groups in
the same display field.
high-order position. The leftmost position in a string of
characters. See also most-significant digit.
hither plane. In computer graphics, a plane that is perpendicular
to the line joining the viewing reference point and the view point
and that lies between these two points. Any part of an object
between the hither plane and the view point is not seen. See also
yon plane.
X-16
Glossary
housekeeping. Operations or routines that do not contribute
directly to the solution of the problem but do contribute directly
to the operation of the computer.
Hz. Hertz
image. A fully processed unit of operational data that is ready to
be transmitted to a remote unit; when loaded into control storage
in the remote unit, the image determines the operations of the
unit.
immediate instruction. An instruction that contains within itself
an operand for the operation specified, rather than an address of
the operand.
index register. A register whose contents may be used to modify
an operand address during the execution of computer instructions.
indicator. (1) A device that may be set into a prescribed state,
usually according to the result of a previous process or on the
occurrence of a specified condition in the equipment, and that
usually gives a visual or other indication of the existence of the
prescribed state, and that may in some cases be used to determine
the selection among alternative processes; for example, an
overflow indicator. (2) An item of data that may be interrogated
to determine whether a particular condition has been satisfied in
the execution of a computer program; for example, a switch
indicator, an overflow indicator.
inhibited. (1) Pertaining to a state of a processing unit in which
certain types of interruptions are not allowed to occur.
(2) Pertaining to the state in which a transmission control unit or
an audio response unit cannot accept incoming calls on a line.
initialize. To set counters, switches, addresses, or contents of
storage to 0 or other starting values at the beginning of, or at
prescribed points in, the operation of a computer routine.
input/output (I/O). (1) Pertaining to a device or to a channel
that may be involved in an input process, and, at a different time,
in an output process. In the English language, "input/output"
may be used in place of such terms as "input/output data,"
"input/output signal," and "input/output terminals," when such
usage is clear in a given context. (2) Pertaining to a device
Glossary
X -17
whose parts can be performing an input process and an output
process at the same time. (3) Pertaining to either input or
output, or both.
instruction. In a programming language, a meaningful expression
that specifies one operation and identifies its operands, if any.
instruction set. The set of instructions of a computer, of a
programming language, or of the programming languages in a
programming system.
intensity. In computer graphics, the amount of light emitted at a
display point
interface. A device that alters or converts actual electrical signals
between distinct devices, programs, or systems.
interleave. To arrange parts of one sequence of things or events
so that they alternate with parts of one or more other sequences
of the same nature and so that each sequence retains its identity.
interrupt. (1) A suspension of a process, such as the execution
of a computer program, caused by an event external to that
process, and performed in such a way that the process can be
resumed. (2) In a data transmission, to take an action at a
receiving station that causes the transmitting station to terminate
a transmission. (3) Synonymous with interruption.
I/O. Input/output.
I/O area. Synonym for buffer.
irrecoverable error. An error that makes recovery impossible
without the use of recovery techniques external to the computer
program or run.
joystick. In computer graphics, a lever that can pivot in all
directions and that is used as a locator device.
k. Prefix kilo; 1000.
K. When referring to storage capacity, 1024. (1024
10th power.)
X-18
Glossary
= 2 to the
KB. 1024 bytes.
key lock. A device that deactivates the keyboard and locks the
cover on for security.
kg. Kilogram; 1000 grams.
kHz. Kilohertz; 1000 hertz.
kilo (k). Prefix 1000
kilogram (kg). 1000 grams.
kilohertz (kHz). 1000 hertz
latch. (1) A simple logic-circuit storage element. (2) A
feedback loop in sequential digital circuits used to maintain a
state.
least-significant digit. The rightmost digit. See also low-order
position.
LED. Light-emitting diode.
light-emitting diode (LED). A semiconductor device that gives
off visible or infrared light when activated.
load. In programming, to enter data into storage or working
registers.
look-up table (LUT). (1) A technique for mapping one set of
values into a larger set of values. (2) In computer graphics, a
table that assigns a color value (red, green, blue intensities) to a
color index.
low power Schottky TTL. A version (LS series) of TTL giving a
good compromise between low power and high speed. See also
transistor-transistor logic and Schottky TTL.
low-order position. The rightmost position in a string of
characters. See also least-significant digit.
luminance. The luminous intensity per unit projected area of a
given surface viewed from a given direction.
Glossary
X -19
LUT. Look-up table.
m. (1) Prefix milli; 0.001. (2) Meter.
M. (1) Prefix mega; 1,000,000. (2) When referring to
computer storage capacity, 1,048,576. (1,048,576
20th power.)
= 2 to the
mAo Milliampere; 0.001 ampere.
machine code. The machine language used for entering text and
program instructions onto the recording medium or into storage
and which is subsequently used for processing and printout.
machine language. (1) A language that is used directly by a
machine. (2) Deprecated term for computer instruction code.
magnetic disk. (1) A flat circular plate with a magnetizable
surface layer on which data can be stored by magnetic recording.
(2) See also diskette.
main storage. (1) Program-addressable storage from which
instmctions and other data can be loaded directly into registers
for subsequent execution or processing. (2) Contrast with
auxiliary storage.
mark. A symbol or symbols that indicate the beginning or the
end of a field, of a word, of an item of data, or of a set of data
such as a file, a record, or a block.
mask. (1) A pattern of characters that is used to control the
retention or elimination of portions of another pattern of
characters. (2) To use a pattern of characters to control the
retention or elimination of portions of another pattern of
characters.
masked. Synonym for disabled.
matrix. (1) A rectangular array of elements, arranged in rows
and columns, that may be manipulated according to the rules of
matrix algebra. (2) In computers, a logic network in the form of
an array of input leads and output leads with logic elements
connected at some of their intersections.
X-20
Glossary
matrix printer. A printer in which each character is represented
by a pattern of dots; for example, a stylus printer, a wire printer.
. Synonymous with dot printer.
MD. 1,048,576 bytes.
mega (M). Prefix 1,000,000.
megahertz (MHz). 1,000,000 hertz.
memory. Term for main storage.
meter (m). A unit of length (equivalent to 39.37 inches).
MFM. Modified frequency modulation.
MHz. Megahertz; 1,000,000 hertz.
micro (p.). Prefix 0.000,001.
microcode. (1) One or more microinstructions. (2) A code,
representing the instructions of an instruction set, implemented in
a part of storage that is not program-addressable.
microinstruction. (1) An instruction of microcode. (2) A basic
or elementary machine instruction.
microprocessor. An integrated circuit that accepts coded
instructions for execution; the instructions may be entered,
integrated, or stored internally.
microsecond (p.s). 0.000,001 second.
milli (m). Prefix 0.001.
milliampere (mA). 0.001 ampere.
millisecond (ms). 0.001 second.
mnemonic. A symbol chosen to assist the human memory; for
example, an abbreviation such as "mpy" for "multiply."
Glossary
X -21
mode. (1) A method of operation; for example, the binary
mode, the interpretive mode, the alphanumeric mode. (2) The
most frequent value in the statistical sense.
modeling transformation. Operations on the coordinates of an
object (usually matrix multiplications) that cause the object to be
rotated about any axis, translated (moved without rotating),
and/or scaled (changed in size along any or all dimensions). See
also viewing transformation.
modem (modulator-demodulator). A device that converts serial
(bit by bit) digital signals from a business machine (or data
communication equipment) to analog signals that are suitable for
transmission in a telephone network. The inverse function is also
performed by the modem on reception of analog signals.
modified frequency modulation (MFM). The process of varying
the amplitude and frequency of the 'write' signal. MFM pertains
to the number of bytes of storage that can be stored on the
recording media. The number of bytes is twice the number
contained in the same unit area of recording media at single
density.
modulation. The process by which some characteristic of one
wave (usually high frequency) is varied in accordance with
another wave or signal (usually low frequency). This technique is
used in modems to make business-machine signals compatible
with communication facilities.
modulation rate. The reciprocal of the measure of the shortest
nominal time interval between successive significant instants of
the modulated signal. If this measure is expressed in seconds, the
modulation rate is expressed in baud.
module. (1) A program unit that is discrete and identifiable with
respect to compiling, combining with other units, and loading.
(2) A packaged functional hardware unit designed for use with
other components.
modulo check. A calculation performed on values entered into a
system. This calculation is designed to detect errors.
modulo-N check. A check in which an operand is divided by a
number N (the modulus) to generate a remainder (check digit)
x-22
Glossary
that is retained with the operand. For example, in a modulo-7
check, the remainder will be 0, 1,2,3,4,5, or 6. The operand is
later checked by again dividing it by the modulus; if the
remainder is not equal to the check digit, an error is indicated.
modulus. In a modulo-N check, the number by which the
operand is divided.
monitor. Synonym for cathode ray tube display (CRT display).
most-significant digit. The leftmost (non-zero) digit. See also
high-order position.
ms. Millisecond; 0.001 second.
multiplexer. A device capable of interleaving the events of two or
more activities, or capable of distributing the events of an
interleaved sequence to the respective activities.
multiprogramming. (1) Pertaining to the concurrent execution of
two or more computer programs by a computer. (2) A mode of
operation that provides for the interleaved execution of two or
more computer programs by a single processor.
n. Prefix nano; 0.000,000,001.
NAND. A logic operator having the property that if P is a
statement, Q is a statement, R is a statement, ... , then the NAND
of P, Q ,R, ... is true if at least one statement is false, false if all
statements are true.
NAND gate. A gate in which the output is 0 only if all inputs
are 1.
nano (n). Prefix 0.000,000,001.
nanosecond (ns). 0.000,000,001 second.
negative true. Synonym for active low.
negative-going edge. The edge of a pulse or signal changing in a
negative direction. Synonymous with falling edge.
Glossary
X-23
non-return-to-zero change-on-ones recording (NRZI). A
transmission encoding method in which the data terminal
equipment changes the signal to the opposite state to send a
binary 1 and leaves it in the same state to send a binary O.
non-return-to-zero (inverted) recording (NRZI). Deprecated term
for non-return-to-zero change-on-ones recording.
NOR. A logic operator having the property that if P is a
statement, Q is a statement, R is a statement, ... , then the NOR of
P, Q, R, ... is true if all statements are false, false if at least one
statement is true.
NOR gate. A gate in which the output is 0 only if at least one
input is 1.
NOT. A logical operator having the property that if P is a
statement, then the NOT of P is true if P is false, false if P is true.
NRZI. Non-return-to-zero change-on-ones recording.
ns. Nanosecond; 0.000,000,001 second.
NUL. The null character.
null character (NUL). A control character that is used to
accomplish media-fill or time-fill, and that may be inserted into or
removed from, a sequence of characters without affecting the
meaning of the sequence; however, the control of the equipment
or the format may be affected by this character.
odd-even check. Synonym for parity check.
offline. Pertaining to the operation of a functional unit without
the continual control of a computer.
one-shot. A circuit that delivers one output pulse of desired
duration for each input (trigger) pulse.
open circuit. (1) A discontinuous circuit; that is, one that is
broken at one or more points and, consequently, cannot conduct
current. Contrast with closed circuit. (2) Pertaining to a no-load
condition; for example, the open-circuit voltage of a power
supply.
X-24
Glossary
open coUector. A switching transistor without an internal
connection between its collector and the voltage supply. A
connection from the collector to the voltage supply is made
through an external (pull-up) resistor.
operand. (1) An entity to which an operation is applied.
(2) That which is operated upon. An operand is usually identified
by an address part of an instruction.
operating system. Software that controls the execution of
programs; an operating system may provide services such as
resource allocation, scheduling, input/output control, and data
management.
OR. A logic operator having the property that if P is a
statement, Q is a statement, R is a statement, ... , then the OR of P,
Q, R, .. .is true if at least one statement is true, false if all
statements are false.
OR gate. A gate in which the output is 1 only if at least one
input is 1.
output. Pertaining to a device, process, or channel involved in an
output process, or to the data or states involved in an output
process.
output process. (1) The process that consists of the delivery of
data from a data processing system, or from any part of it.
(2) The return of information from a data processing system to
an end user, including the translation of data from a machine
language to a language that the end user can understand.
overcurrent. A current of higher than specified strength.
overflow indicator. (1) An indicator that signifies when the last
line on a page has been printed or passed. (2) An indicator that
is set on if the result of an arithmetic operation exceeds the
capacity of the accumulator.
overrun. Loss of data because a receiving device is unable to
accept data at the rate it is transmitted.
overvoltage. A voltage of higher than specified value.
Glossary
X-2S
parallel. (1) Pertaining to the concurrent or simultaneous
operation of two or more devices, or to the concurrent
performance of two or more activities. (2) Pertaining to the
concurrent or simultaneous occurrence of two or more related
activities in multiple devices or channels. (3) Pertaining to the
simultaneity of two or more processes. (4) Pert(!ining to the
simultaneous processing of the individual parts of a whole, such as
the bits of a character and the characters of a word, using
separate facilities for the various parts. (5) Contrast with serial.
parameter. (1) A variable that is given a constant value for a
specified application and that may denote the application. (2) A
name in a procedure that is used to refer to an argument passed to
that procedure.
parity bit. A binary digit appended to a group of binary digits to
make the sum of all the digits either always odd (odd parity) or
always even (even parity).
parity check. (1) A redundancy check that uses a parity bit.
(2) Synonymous with odd-even check.
PEL. Picture element.
personal comput~r. A small home or business computer that has a
processor and keyboard and that can be connected to a television
or some other monitor. An optional printer is usually available.
phototransistor. A transistor whose switching action is controlled
by light shining on it.
picture element (PEL). The smallest displayable unit on a
display.
polling. (1) Interrogation of devices for purposes such as to
avoid contention, to determine operational status, or to determine
readiness to send or receive data. (2) The process whereby
stations are invited, one at a time, to transmit.
port. An access point for data entry or exit.
positive true. Synonym for active high.
X:-26
Glossary
positive-going edge. The edge of a pulse or signal changing in a
positive direction. Synonymous with rising edge.
potentiometer. A variable resistor with three terminals, one at
each end and one on a slider (wiper).
power supply. A device that produces the power needed to
operate electronic equipment.
printed circuit. A pattern of conductors (corresponding to the
wiring of an electronic circuit) formed on a board of insulating
material.
printed-circuit board. A usually copper-clad plastic board used to
make a printed circuit.
priority. A rank assigned to a task that determines its precedence
in receiving system resources.
processing program. A program that performs such functions as
compiling, assembling, or translating for a particular programming
language.
processing unit. A functional unit that consists of one or more
processors and all or part of internal storage.
processor. (1) In a computer, a functional unit that interprets
and executes instructions. (2) A functional unit, a part of
another unit such as a terminal or a processing unit, that
interprets and executes instructions. (3) Deprecated term for
processing program. (4) See microprocessor.
program. (1) A series of actions designed to achieve a certain
result. (2) A series of instructions telling the computer how to
handle a problem or task. (3) To design, write, and test
computer programs.
programmable read-only memory (PROM). A read-only memory
that can be programmed by the user.
programming language. (1) An artificial language established for
expressing computer programs. (2) A set of characters and rules
with meanings assigned prior to their use, for writing computer
programs.
Glossary
X -27
programming system. One or more programming languages and
the necessary software for using these languages with particular
automatic data-processing equipment.
PROM. Programmable read-only memory.
propagation delay. (1) The time necessary for a signal to travel
from one point on a circuit to another. (2) The time delay
between a signal change at an input and the corresponding change
at an output.
protocol. (1) A specification for the format and relative timing
of information exchanged between communicating parties.
(2) The set of rules governing the operation of functional units of
a communication system that must be followed if communication
is to be achieved.
pulse. A variation in the value of a quantity, short in relation to
the time schedule of interest, the final value being the same as the
initial value.
radio frequency (RF). An ac frequency that is higher than the
highest audio frequency. So called because of the application to
radio communication.
radix. (1) In a radix numeration system, the positive integer by
which the weight of the digit place is multiplied to obtain the
weight of the digit place with the next higher weight; for example,
in the decimal numeration system the radix of each digit place is
10. (2) Another term for base.
radix numeration system. A positional representation system in
which the ratio of the weight of anyone digit place to the weight
of the digit place with the next lower weight is a positive integer
(the radix). The permissible values of the character in any digit
place range from 0 to one less than the radix.
RAM. Random access memory. Read/write memory.
random access memory (RAM). Read/write memory.
RAS. In the IBM Personal Computer, row address strobe.
X-28
Glossary
raster. In computer graphics, a predetermined pattern of lines
that provides uniform coverage of a display space.
read. To acquire or interpret data from a storage device, from a
data medium, or from another source.
read-only memory (ROM). A storage device whose contents
cannot be modified. The memory is retained when power is
removed.
read/write memory. A storage device whose contents can be
modified. Also called RAM.
recoverable error. An error condition that allows continued
execution of a program.
red-green-blue-intensity (RGBI). The description of a
direct-drive color monitor that accepts input signals of red, green,
blue, and intensity.
redundancy check. A check that depends on extra characters
attached to data for the detection of errors. See cyclic redundancy
check.
register. (1) A storage device, having a specified storage
capacity such as a bit, a byte, or a computer word, and usually
intended for a special purpose. (2) A storage device in which
specific data is stored.
retry. To resend the current block of data (from the last EOB or
ETB) a prescribed number of times, or until it is entered correctly
or accepted.
reverse video. A form of highlighting a character, field, or cursor
by reversing the color of the character, field, or cursor with its
background; for example, changing a red character on a black
background to a black character on a red background.
RF. Radio frequency.
RF modulator. The device used to convert the composite video
signal to the antenna level input of a home TV.
RGBI. Red-green-blue-intensity.
Glossary
X-29
rising edge. Synonym for positive-going edge.
ROM. Read-only memory.
ROM/BIOS. The ROM resident basic input/output system,
which provides the level control of the major II0 devices in the
computer system.
row address strobe (RAS). A signal that latches the row address
in a memory chip.
RS-131C. A standard by the EIA for communication between
computers and external equipment.
RTS. Request to send. Associated with modem control.
run. A single continuous performance of a computer program or
routine.
saturation. In computer graphics, the purity of a particular hue.
A color is said to be saturated when at least one primary color
(red, blue, or green) is completely absent.
scaling. In computer graphics, enlarging or reducing all or part of
a display image by multiplying the coordinates of the image by a
constant value.
schematic. The representation, usually in a drawing or diagram
form, of a logical or physical structure.
Schottky TIL. A version (S series) of TTL with faster switching
speed, but requiring more power. See also transistor-transistor
logic and low power Schottky TTL.
SDL. Shielded Data Link
SDLC. Synchronous Data Link Control.
sector. That part of a track or band on a magnetic drum, a
magnetic disk, or a disk pack that can be accessed by the
magnetic heads in the course of a predetermined rotational
displacement of the particular device.
SERDES. Serializer/ deserializer.
X-30
Glossary
serial. (1) Pertaining to the sequential performance of two or
more activities in a single device. In English, the modifiers serial
and parallel usually refer to devices, as opposed to sequential and
consecutive, which refer to processes. (2) Pertaining to the
sequential or consecutive occurrence of two or more related
activities in a single device or channel. (3) Pertaining to the
sequential processing of the individual parts of a whole, such as
the bits of a character or the characters of a word, using the same
facilities for successive parts. (4) Contrast with parallel.
serializer/deserializer (SERDES). A device that serializes output
from, and de serializes input to, a business machine.
setup. (1) In a computer that consists of an assembly of
individual computing units, the arrangement of interconnections
between the units, and the adjustments needed for the computer
to operate. (2) The preparation of a computing system to
perform a job or job step. Setup is usually performed by an
operator and often involves performing routine functions, such as
mounting tape reels. (3) The preparation of the system for
normal operation.
short circuit. A low-resistance path through which current flows,
rather than through a component or circuit.
signal. A variation of a physical quantity, used to convey data.
sink. A device or circuit into which current drains.
software. (1) Computer programs, procedures, and rules
concerned with the operation of a data processing system.
(2) Contrast with hardware.
source. The origin of a signal or electrical energy.
square wave. An alternating or pulsating current or voltage
whose wave shape is square.
square wave generator. A signal generator delivering an output
signal having a square waveform.
SSe Start-stop.
Glossary
X-:31
start bit. (1) A signal to a receiving mechanism to get ready to
receive data or perform a function. (2) In a start-stop system, a
signal preceding a character or block that prepares the receiving
device for the reception of the code elements.
start-of-text (STX). A transmission control character that
precedes a text and may be used to terminate the message
heading.
start-stop system. A data transmission system in which each
character is preceded by a start bit and is followed by a stop bit.
start-stop (SS) transmission. (1) Asynchronous transmission
such that a group of signals representing a character is preceded
by a start bit and followed by a stop bit. (2) Asynchronous
transmission in which a group of bits is preceded by a start bit
that prepares the receiving mechanism for the reception and
registration of a character and is followed by at least one stop bit
that enables the receiving mechanism to come to an idle condition
pending the reception of the next character.
static memory. RAM using flip-flops as the memory elements.
Data is retained as long as power is applied to the flip-flops.
Contrast with dynamic memory.
stop bit. (1) A signal to a receiving mechanism to wait for the
next signal. (2) In a start-stop system, a signal following a
character or block that prepares the receiving device for the
reception of a subsequent character or block.
storage. (1) A storage device. (2) A device, or part of a device,
that can retain data. (3) The retention of data in a storage
device. (4) The placement of data into a storage device.
strobe. An instrument that emits adjustable-rate flashes of light.
Used to measure the speed of rotating or vibrating objects.
STX. Start-of-text.
symbol. (1) A conventional representation of a concept. (2) A
representation of something by reason of relationship,
association, or convention.
X-32
Glossary
synchronization. The process of adjusting the corresponding
significant instants of two signals to obtain the desired phase
relationship between these instants.
Synchronous Data Link Control (SDLC). A protocol for
management of data transfer over a data link.
synchronous transmission. (1) Data transmission in which the
time of occurrence of each signal representing a bit is related to a
fixed time frame. (2) Data transmission in which the sending and
receiving devices are operating continuously at substantially the
same frequency and are maintained, by means of correction, in a
desired phase relationship.
syntax. (1) The relationship among characters or groups of
characters, independent of their meanings or the manner of their
interpretation and use. (2) The structure of expressions in a
language. (3) The rules governing the structure of a language.
(4) The relationships among symbols.
text. In ASCII and data communication, a sequence of
characters treated as an entity if preceded and terminated by one
STX and one ETX transmission control character, respectively.
time-out. (1) A parameter related to an enforced event designed
to occur at the conclusion of a predetermined elapsed time. A
time-out condition can be cancelled by the receipt of an
appropriate time-out cancellation signal. (2) A time interval
allotted for certain operations to occur; for example, response to
polling or addressing before system operation is interrupted and
must be restarted.
track. (1) The path or one of the set of paths, parallel to the
reference edge on a data medium, associated with a single reading
or writing component as the data medium moves past the
component. (2) The portion of a moving data medium such as a
drum, or disk, that is accessible to a given reading head position.
transistor-transistor logic (TTL). A popular logic circuit family
that uses multiple-emitter transistors.
translate. To transform data from one language to another.
Glossary
X -33
transmission. (1) The sending of data from one place for
reception elsewhere. (2) In ASCII and data communication, a
series of characters including headings and text. (3) The
dispatching of a signal, message, or other form of intelligence by
wire, radio, telephone, or other means. (4) One or more blocks
or messages. For BSC and start-stop devices, a transmission is
terminated by an EOT character. (5) Synonymous with data
transmission.
TTL. Transistor-transistor logic.
typematic key. A keyboard key that repeats its function when
held pressed.
V. Volt.
vector. In computer graphics, a directed line segment.
video. Computer data or graphics displayed on a cathode ray
tube, monitor, or display.
view point. In computer graphics, the origin from which angles
and scales are used to map virtual space into display space.
viewing reference point. In computer graphics, a point in the
modeling coordinate space that is a defined distance from the
view point.
viewing transformation. Operations on the coordinates of an
object (usually matrix multiplications) that cause the view of the
object to be rotated about any axis, translated (moved without
rotating), and/or scaled (changed in size along any or all
dimensions). Viewing transformation differs from modeling
transformation in that perspective is considered. See also
modeling transformation.
viewplane. The visible plane of a CRT display screen that
completely contains a defined window.
viewport. In computer graphics, a predefined part of the CRT
display space.
volt. The basic practical unit of electric pressure. The potential
that causes electrons to flow through a circuit.
X-34
Glossary
W. Watt.
watt. The practical unit of electric power.
window. (1) A predefined part of the virtual space. (2) The
visible area of a viewplane.
word. (1) A character string or a bit string considered as an
entity. (2) See computer word.
write. To make a permanent or transient recording of data in a
storage device or on a data medium.
write precompensation. The varying of the timing of the head
current from the outer tracks to the inner tracks of the diskette to
keep a constant 'write' signal.
yon plane. In computer graphics, a plane that is perpendicular to
the line joining the viewing reference point and the view point,
and that lies beyond the viewing reference point. Any part of an
object beyond the yon plane is not seen. See also hither plane.
Glossary
X-35
X-36
Glossary
Bibliography
• Microprocessor and Peripheral Handbook
•
INTEL Corporation.210B44.001
Introduction to the iAPX 286
- INTEL Corporation.21 03 OB. 001
•
iAPX 286 Operating Systems Writer's Guide
- INTEL Corporation.121960.001
•
iAPX 286 Programmer's Reference Manual
- INTEL Corporation.21049B.001
• iAPX 286 Hardware Reference Manual
-
INTEL Corporation.21 0760. 001
• Numeric Processor Extension Data Sheet
•
INTEL Corporation.210920
80287 Support Library Reference Manual
-
INTEL Corporation.122129
•
National Semiconductor Corporation. NS16450
•
Motorola Microprocessor's Data Manual
-
Motorola Inc. Series B
X-37
Notes:
X-38
Index
AAA 6-8
AAD 6-9
AAM 6-9
AAS 6-8
access time,
track-to-track 8-6
ACK command 4-13
Acknowledge (ACK)
command 4-13
ADC 6-6
ADD 6-6
address generation,
DMA 1-9
address latch enable 1-35
address latch enable,
buffered 1-32
address mode
real 1-4virtual 1-4
address space, I/O 1-24
address, segment 1-4
addresses, CMOS RAM 1-59
addresses, page register 1-11
AEN 1-35
ALE 8-4
alternate key
AND
4-37
6-10
APL 8-7
application guidelines 8-7
arithmetic instructions 6-6,
6-25
ARPL 6-19
ASCn characters 7-3
ASCn, extended 4-30
BALE
1-32
bandwidth 1-7
BASIC 8-7
basic assurance test 4-5
BASIC interrupts 5-6
BAT (basic assurance
test) 4-5
BAT Completion Code
command 4-13
BAT Failure Code
command 4-13
battery connector 1.. 75
BHE 1-9
BIOS fixed disk
parameters 1-65
BIOS memory map 5-10
BIOS programming
hints 5-10
BIOS quick reference 5-14
block diagram
keyboard interface 1-54
system xiv
system board 1-6
system timer 1-22
board, system 1-3
BOUND 6-16
break code 4-4
break key 4-38
buffer, keyboard 4-4
buffered address latch
enable 1-32
buffers, video display 8-14
X-39
bus cycle 1-7
busy loop 8-17
bypassing BIOS 8-6
byte high enable 1-9
cabling 4-3
CALL 6-13
caps lock key 4-37
CBW 6-9
channel, I/O 1-24
connectors 1-25
pin assignments 1-28
signals 1-31
channels, DMA 1-9
character codes 4-30
characters 7-3
characters keystrokes, and
colors 7-14
classes, wait loop 8-17
CLC 6-17
CLD 6-17
CLEX 6-27
CLI 6-17
CLK 1-31
clock and data signals 4-27
data input 4-29
data output 4-28
data stream 4-27
clock cycle 1-7
clock line, keyboard 1-58
clock, real-time 1-59
clock, system 1-7
CMC 6-17
CMOS RAM 1-59
CMOS RAM addresses 1-59
CMOSRAM
configuration 1-63
CMOS RAM I/O
operations 1-70
X-40
CMP 6-7
CMPS 6-11
COBOL 8-7
code
device driver 8-15
machine
identification 8-19
machine-sensitive 8-19
codes
character 4-30
extended 4-34
multitasking
function 8-17
command codes, DMA
controller 1 1-10
command codes, DMA
controller 2 1-11
commands
I/O 8-11
keyboard controller 1-56
commands from the
system 4-6
Default Disable 4-7
Echo 4-7
Enable 4-7
Read ID 4-7
Resend 4-8
Reset 4-8
Select Alternate Scan
Codes 4-8
Set All Keys 4-9
Set Default 4-9
Set Key Type 4-9
Set Typematic
Rate/Delay 4-11
Set/Reset Status
Indicators 4-10
commands to the system
ACK (acknowledge) 4-13
BAT (basic assurance test)
Completion Code 4-13
BAT Failure 4-13
commands to the
system 4-13
Echo 4-13
Key Detection Error 4-14
Keyboard ID 4-14
Overrun 4-14
Resend 4-14
comparison instructions 6-23
compatibility, hardware 8-3
condition, wait 8-16
configuration record 1-60
configuration, CMOS
RAM
1-63
connectors
battery 1-75
I/O channel 1-25
J-l through J-8 1-27
J-l, J-7 and J-8 1-26
keyboard 1-75
power supply 1-74
power supply output 3-6
speaker 1-75
system board 1-7 4
constants instructions 6-24
control key 4-36
control transfer
instructions 6-13
control, sound 8-13
controller, keyboard 1-44
controllers
DMA 1-7, 1-9, 1-10
interrupt 1-12
refresh 1-7
Coprocessor controls 1-42
coprocessor
programming 2-3
coprocessor, math 2-3
copy protection 8-5,8-14
Ctrl state 4-34
CTS 6-18
CWD 6-9
cycle
bus 1-7
clock 1-7
microprocessor 1-7
DACK 0-3 and 5-7 1-35
DAS 6-8
data area, ROM BIOS 8-14
data input 4-29
data line, keyboard 1-58
data output 4-28
data stream 4-27
data transfer
instructions 6-3,6-22
data transfer rate,
diskette 8-6
DEC 6-7,6-8
decodes, memory 1-12
DECSTP 6-28
Default Disable
command 4-7
default segment
workspace 5-10
delay, typematic 4-4
description 4-3
buffer 4-4
cabling 4-3
key-code scanning 4-4
keys 4-4
sequencing key-code
scanning 4-4
descriptors 1-5
device driver code 8-15
diagnostic checkpoint
port 1-42
direct memory access 1-9
disk pointer 8-12
disk base 8-6,8-12
diskette change signal 8-6
diskette data transfer
rate 8-6
diskette rotational speed 8-6
diskette track density 8-6
X-41
diskette write current 8-6
DIV 6-9
divide error exception 8-9
DMA address generation 1-9
DMA channels 1-9
DMA controller 1-7
DMA controller 1 1-9
DMA controller 1 command
codes 1-10
DMA controller 2 1-10
DMA controller 2 command
codes 1-11
DMA controllers 1-9
DOS 8-7
DOS function calls 8-10
DOS interrupts 5-6
DRQO-DRQ3 1-34
DRQ5-DRQ7 1-34
Echo command 4-7, 4-13
Enable command 4-7
enable NMI 1-39
encoding,keyboard 4-30
ENTER 6-16
ESC 6-18
exception, divide error 8-9
extended ASCII 4-30
extended codes 4-34
FABS 6-26
FADD 6-25
FCHS 6-26
FCOM 6-23
FCOMP 6-23
X-42
FCOMPP 6-23
FDIV 6-25
FIFO 4-4
FLD 6-22
FLDLG2 6-24
FLDLN2 6-24
FLDL2T 6-24
FLDPI 6-24
FLDZ 6-24
FLDI 6-24
FMUL 6-25
FORTRAN 8-7
FPATAN 6-26
FPREM 6-26
FREE 6-28
French keyboard 4-41
FRNDINT 6-26
FSCALE 6-26
FSQRT 6-25
FST 6-22
FSTP 6-22
FSUB 6-25
FTST 6-24
function calls, DOS 8-10
function codes,
multitasking 8-17
FXAM 6-24
FXCH 6-23
FXTRACT 6-26
gap length parameter 8-12
generator,refresh
request 1-22
German keyboard 4-42
graphics modes 5-8
guidelines, application 8-7
hard code 5-10
hardware compatibility 8-3
hardware interrupts 5-6
HLT 6-17
hooks 8-15
I/O address map 1-38
I/O address space 1-24
I/O addresses 1-38
I/O CH CK 1-32, 1-39
I/O CH RDY 1-33
I/O channel 1-24
connectors 1-25
pin assignments 1-28
signals 1-31
I/O channel check 1-32
I/O channel connectors 1-28
I/O channel ready 1-33
I/O chip select 1-36
I/O commands 8-11
I/O CS16 1-36
I/O port (read/write) 1-40
1/0 ports, keyboard
controller 1-58
I/O read 1-33
I/O write 1-33
IDIV 6-9
IIMUL 6-9
IMR 8-13
IMUL 6-8
IN 6-5
INC 6-6
INCSTP 6-28
input buffer, keyboard
controller 1-56
input port, keyboard
controller 1-58
input requirements 3-3
input, keyboard 4-29
inputs, power supply 3-3
INS 6-12
instructions
arithmetic 6-6, 6-25
comparison 6-23
constants 6-24
control transfer 6-13
dat~ transfer 6-3,6-22
lOgIc 6-9
processor control 6-17
protection control 6-18
rotate 6-9
shift 6-9
string manipulation 6-11
INT 6-16,6-27
~nterfaces, multitasking 8-15
mterrupt controller 1-12
interrupt mask register 8-13
interrupt service routine 1-33
interrupt sharing 1-14
interrupt vectors 8-14
interrupt, single step 8-8
interrupts
BASIC 5-6
DOS 5-6
hardware 5-6
program 5-3
program interrupt listing
(real mode) 5-5
sharing 1-14
system 1-12
interrupts, program (real
mode) 5-5
INTO 6-16
lOR 1-33
lOW 1-33
IRET 6-16
IRQ 2 8-11
IRQ 9 8-4,8-11
X-43
IRQ3-IRQI5 1-33
Italian keyboard 4-43
JB/JNAE 6-14
JBE/JNA 6-14
JCXZ 6-16
JE/JZ 6-14
JL/JNGE 6-14
JLE/JNG 6-14
JMP 6-13
JNB/JAE 6-15
JNBE/JA 6-15
JNE/JNZ 6-15
JNL/JGE 6-15
JNLE/JG 6-15
JNO 6-15
JNP/JPO 6-15
JNS 6-15
JO 6-14
joystick support 5-6
JP/JPE 6-14
JS 6-14
jumper, RAM 1-43
Key Detection Error
command 4-14
key-code scanning 4-4
keyboard 4-48
clock line 1-58
connector 1-75
controller 1-44
controller
commands 1-56
controller I/O ports 1-58
controller input
buffer 1-56
X-44
controller input port 1-58
controller output
buffer 1-56
controller output
port 1-58
controller status
register 1-54
controller test inputs 1-58
data line 1-58
encoding 4-30
interface block
diagram 1-54
layout 1-47,4-31
routine 4-39
keyboard buffer 4-4
keyboard data input 4-29
keyboard data output 4-28
Keyboard ID command 4-14
keyboard layouts
French 4-41
German 4-42
Italian 4-43
keyboard layouts 4-40
Spanish 4-44
U.K. English 4-45
U.S. English 4-46
keyboard logic diagrams 4-48
keyboard scan codes 4-15
keyboard scan-code outputs
scan code set 1 4-16
scan code set 2 4-20
scan code set 3 4-24
keyboard, French 4-41
keyboard, German 4-42
keyboard, Italian 4-43
keyboard, Spanish 4-44
keyboard, U.K. English 4-45
keyboard, U.S. English 4-46
keys 4-4
alternate 4-37
break 4-38
caps lock 4-37
combinations 4-37
control 4-36
number lock 4-37
pause 4-38
print screen 4-38
scroll lock 4-37
shift 4-36
system request 4-38, 5-6
keys, typematic 4-4
LAHF 6-5
LAR 6-19
layout system board 1-76
layout, keyboard 1-47, 4-31
layouts
French 4-41
German 4-42
Italian 4-43
layouts 4-40
Spanish 4-44
u.K. English 4-45
U.S. English 4-46
LAI7-LA23 1-31
LDCW 6-27
LDENV 6-27
LDS 6-5
LEA 6-5
LEAVE 6-16
LES 6-5
LGDT 6-18
LIDT 6-18
line contention 4-28
line protocol 4-6
LLDT 6-18
LMSW 6-19
load current 3-3
LOCK 6-17
LODS 6-11
logic diagrams
system board 1-77
logic instructions 6-9
LOOP 6-15
loop, busy 8-17
LOOPNZ/LOOPNE 6-16
loops, program 8-14
LOOPZ/LOOPE 6-15
LSL 6-19
LTR 6-18
machine identification
code 8-19
machine-sensitive code 8-19
make code 4-4
make/break 4-4
mask on and off 1-39
MASTER (I) 1-36
math coprocessor 2-3,8-11
math coprocessor
controls 1-42
MEM chip select 1-36
MEM CS16 1-36
memory 1-4
memory decodes 1-12
memory locations,
reserved 5-9
memory map, BIOS 5-10
memory module
packages 1-24
MEMR 1-34
MEMW 1-34
microprocessor 1-4, 1-7
microprocessor cycle 1-7
mode, data stream 1-45, 4-6,
4-27
modes, graphic 5-8
modules, RAM 1-24
modules,
ROM/EPROM 1-23
MOV 6-3
MOVS 6-11
X-45
MUL 6-8
multi-tasking
function codes 8-17
interfaces 8-15
provisions 8-15
serialization 8-16
startup 8-16
NEG 6-8
NMI 1-12, 1-39
NMI controls 1-39
no load protection 3-4
non-maskable interrupt 1-39
NOP 6-26, 6-28
NOT 6-11
Num Lock state 4-34
number lock key 4-37
operations, CMOS RAM
I/O 1-70
OR 6-10
OSC 1-36
oscillator 1-36
OUT 6-5
output buffer, keyboard
controller 1-56
output port, keyboard
controller 1-58
output voltage sense
levels 3-5
output voltage
sequencing 3-4
output, keyboard 4-28
outputs, power supply 3-3
OUTS 6-12
X-46
Overrun command
4-14
packages, memory
module 1-24
page register addresses 1-11
parameter
gap length 8-12
passing 5-4
tables 8-12
parameters, BIOS fixed
disk 1-65
Pascal 8-7
pause key 4-38
performance, system 1-7
POP 6-4
POPA 6-4
POPF 6-6, 8-8
POR 4-5
port, diagnostic
checkpoint 1-42
post 8-17
power good signal 3-4
power requirements 4-47
power supply
connectors 1-74
inputs 3-3
output connectors 3-6
outputs 3-3
power-on reset 4-5
power-on routine 4-5
basic assurance test 4-5
BAT (basic assurance
test) 4-5
POR (power-on
reset) 4-5
power-on reset 4-5
print screen key 4-38
priorities,shift key 4-37
processor control
instructions 6-17
program interrupts 5-3
program loops 8-14
programming hints,
BIOS 5-10
programming,
coprocessor 2-3
protected mode 1-5,5-6
protection control
instructions 6-18
protection, no load 3-4
protocol 4-6
provisions, multitasking 8-15
PTAN 6-26
PUSH 6-3
PUSHSP 8-8
PUSHA 6-4
PUSHF 6-6
quick reference charts
BIOS 5-14
characters keystrokes, and
colors 7-14
1-24
1-43
~ modules
1-24
~ subsystem
1-24
~,CMOS
1-59
rate, typematic 4-4, 4-11
Read ID command 4-7
real address mode 1-4,2-5
real mode 5-3
real-time clock 1-59, 1-60
record, configuration 1-60
REFRESH 1-35
refresh controller 1-7
refresh request
generator 1-22
regulation tolerance 3-3
REP/REPNE,
REPZ/REPNZ 6-12
requirements, input 3-3
Resend command 4-8,4-14
reserved memory
locations 5-9
reserved scan codes 1-52
Reset command 4-8
RESET DRV 1-32
reset, power-on 4-5
reset, system 4-38
RET 6-13
ROM BIOS 8-10
ROM BIOS data area 8-14
ROM sca~ cpdes 4-30
ROM subsystem 1-23
ROM/EPROM
modules 1-23
rotate instructions 6-9
rotational, speed 8-6
routine, interrupt
service 1-33
routine, keyboard 4-39
RSTOR 6-28
R/W memory
~jU[Dper
SAHF 6-5
SAVE 6-28
SAO-SAI9 1-31
SBB 6-7
SBHE 1-35
scan code set 1 4-16
scan code set 2 4-20
scan code set 3 4-24
scan code tables (set 1)
scan code tables (set 2)
scan code tables (set 3)
4-16
4-20
4-24
X-47
scan code translation 1-46
scan codes, keyboard 4-15
scan codes, ROM 4-30
scanning, key-code
sequencing 4-4
SCAS 6-11
scroll lock key 4-37
SOO-S015 1-32
segment address 1-4
segments 1-4
Select Alternate Scan Codes
command 4-8
sense levels, output
voltage 3-5
sequencing key-code
scanning 4-4
sequencing, output
voltage 3-4
serialization,
multitasking 8-16
Set All Keys commands 4-9
Set Oefault command 4-9
Set Key Type commands 4-9
Set Typematic Rate/Oelay
command 4-11
Set/Reset Status Indicators
command 4-10
SETPM 6-27
SOOT 6-18
shift counts 8-9
shift instructions 6-9
shift key 4-36
shift key priorities 4-37
Shift state 4-34
shift states 4-36
SlOT 6-18
signals
diskette change 8-6
I/O channels 1-31
power good 3-4
system clock 8-4
signals, clock and data 4-27
single step interrupt 8-8
SLOT 6-18
X-48
SMEMR 1-34
SMEMW 1-34
SMSW 6-19
sound control 8-13
Spanish keyboard 4-44
speaker 1-43
speaker connector 1-75
speaker tone generation 1-22
special vectors 5-6
specifications 4-47
power requirements 4-47
size 4-47
system unit 1-72
weight 4-47
startup, multitasking 8-16
states
Ctrl 4-34
Num Lock 4-34
Shift 4-34,4-36
status register, keyboard
controller 1-54
STC 6-17
STeW 6-27
STO 6-17
STENV 6-27
STI 6-17
STOS 6-12
STR 6-19
stream, data 4-27
string manipulation
instructions 6-11
STSW 6-27
STSWAX 6-27
SUB 6-7
subsystem, RAM 1-24
subsystem, ROM 1-23
support joystick 5-6
switch, display 1-44
system BIOS usage 5-3
system block diagram xiv
system board 1-3
system board block
diagram 1-6
system board
connectors 1-74
system board layout 1-76
system board logic
diagrams 1-77
system bus high enable 1-35
system clock 1-7
system clock signal 8-4
system interrupts 1-12
system performance 1-7
system request key 4-38,5-6
system reset 4-38
system timer block
diagram 1-22
system timers 1-22
T/C 1-35
table, translation 1-49
tables, parameter 8-12
terminal count 1-35
TEST 6-10
test inputs, keyboard
controller 1-58
time-outs 8-18
timer/counter 1-22
timer/ counters 1-22
timers, system 1-22
tone generation,
speaker 1-22
track density, diskette 8-6
track-to-track access
time 8-6
translation table 1-49
translation, scan code 1-46
tri-state 1-36
type of display switch 1-44
typematic delay 4-4
typematic keys 4-4
typematic rate 4-4, 4-11
u.K. English keyboard 4-45
U.S. English keyboard
4-46
vectors, special 5-6
VERR 6-19
video display buffers 8-14
virtual address mode 1-4,2-5
WAIT 6-17
wait condition 8-16
wait loop classes 8-17
workspace, default
segment 5-10
write current, diskette 8-6
XCHG 6-4
XLAT 6-5
XOR 6-11
YL2XPI
6-27
X-49
INumerics I
zero wait state
X-50
1-37
OWS 1-37
2XMl 6-26
80286 1-4
8042 1-44
8237A-5 1-9
8254-2 1-22
8259A Interrupt
1-12
Notes:
Notes:
-- ------,-
---- -- -------®
International Business Machines Corporation
P.O. Box 1328-W
Boca Raton, Florida 33429-1328
68X2537
Printed in the United States of America
Source Exif Data:
File Type : PDF File Type Extension : pdf MIME Type : application/pdf PDF Version : 1.3 Linearized : No XMP Toolkit : Adobe XMP Core 4.2.1-c043 52.372728, 2009/01/18-15:56:37 Create Date : 2013:05:24 12:17:30-08:00 Modify Date : 2013:05:24 13:35:49-07:00 Metadata Date : 2013:05:24 13:35:49-07:00 Producer : Adobe Acrobat 9.53 Paper Capture Plug-in Format : application/pdf Document ID : uuid:48697148-c195-5e42-991d-082dbd39de12 Instance ID : uuid:444c87cd-840c-a745-ab22-3b4bf2e945ac Page Layout : SinglePage Page Mode : UseNone Page Count : 491EXIF Metadata provided by EXIF.tools